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;
|
|
}
|