95 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			95 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| #!@PERL@
 | |
| 
 | |
| $USAGE = "xface2xpm [-t] [-fg <color>] [-bg <color>] [<file>]";
 | |
| 
 | |
| # compface/uncompface
 | |
| #   ftp://metalab.unc.edu/pub/Linux/apps/graphics/convert/
 | |
| $UNCOMPFACE = "uncompface";
 | |
| 
 | |
| $T = "c";
 | |
| $BG = "white";
 | |
| $FG = "black";
 | |
| while (@ARGV) {
 | |
| 	$_ = shift @ARGV;
 | |
| 	if (/^-h/) {
 | |
| 		&usage(0);
 | |
| 	} elsif (/^-t/) {
 | |
| 		$T = "s";
 | |
| 		$BG = "none";
 | |
| 	} elsif (/^-bg/) {
 | |
| 		@ARGV || &usage(1);
 | |
| 		$BG = shift @ARGV;
 | |
| 	} elsif (/^-fg/) {
 | |
| 		@ARGV || &usage(1);
 | |
| 		$FG = shift @ARGV;
 | |
| 	} elsif (/^-./) {
 | |
| 		&usage(1);
 | |
| 	} else {
 | |
| 		unshift(@ARGV, $_);
 | |
| 		last;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| $xf = "";
 | |
| while(<>) {
 | |
| #	s/^X-Face://i if ($xf eq "");
 | |
| 	$xf .= $_;
 | |
| }
 | |
| 
 | |
| pipe(R, W2);
 | |
| pipe(R2, W);
 | |
| if (! fork()) {
 | |
| 	close(R);
 | |
| 	close(W);
 | |
| 	open(STDIN, "<&R2");
 | |
| 	open(STDOUT, ">&W2");
 | |
| 	exec $UNCOMPFACE;
 | |
| 	exit 1;
 | |
| }
 | |
| close(R2);
 | |
| close(W2);
 | |
| print W $xf;
 | |
| close(W);
 | |
| while(<R>) {
 | |
| 	while(s/0x(..)(..)//) {
 | |
| 		push(@bm, hex($1), hex($2));
 | |
| 	}
 | |
| }
 | |
| close(R);
 | |
| @bm || exit 1;
 | |
| 
 | |
| $W = 48;
 | |
| $H = @bm * 8 / $W;	# must be 48
 | |
| print <<EOF;
 | |
| /* XPM */
 | |
| static char *xf[] = {
 | |
| /* columns rows colors chars-per-pixel */
 | |
| "$W $H 2 1",
 | |
| "  $T $BG",
 | |
| ". c $FG",
 | |
| /* pixels */
 | |
| EOF
 | |
| while (@bm) {
 | |
| 	print "\"";
 | |
| 	for (1..6) {
 | |
| 		$x = shift @bm;
 | |
| 		for $i (1 .. 8) {
 | |
| 			print ((($x >> (8-$i)) & 1) ? "." : " ");
 | |
| 		}
 | |
| 	}
 | |
| 	print (@bm ? "\",\n" : "\"\n");
 | |
| }
 | |
| print <<EOF;
 | |
| };
 | |
| EOF
 | |
| 
 | |
| sub usage {
 | |
| 	local($err) = @_;
 | |
| 	if ($err) {
 | |
| 		print STDERR "$USAGE\n";
 | |
| 	} else {
 | |
| 		print "$USAGE\n";
 | |
| 	}
 | |
| 	exit $err;
 | |
| }
 |