diff options
Diffstat (limited to 'scripts/xface2xpm.in')
-rw-r--r-- | scripts/xface2xpm.in | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/scripts/xface2xpm.in b/scripts/xface2xpm.in new file mode 100644 index 0000000..30253cb --- /dev/null +++ b/scripts/xface2xpm.in @@ -0,0 +1,94 @@ +#!@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; +} |