diff options
Diffstat (limited to 'scripts/xface2xbm.in')
-rw-r--r-- | scripts/xface2xbm.in | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/scripts/xface2xbm.in b/scripts/xface2xbm.in new file mode 100644 index 0000000..2c2002a --- /dev/null +++ b/scripts/xface2xbm.in @@ -0,0 +1,54 @@ +#!@PERL@ + +# See http://www.lab3.kuis.kyoto-u.ac.jp/~tsumura/emacs/x-face.html +$UNCOMPFACE = "uncompface"; + +$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; + die; +} +close(R2); +close(W2); +print W $xf; +close(W); +while(<R>) { + while(s/0x(..)(..)//) { + push(@bm, hex($1), hex($2)); + } +} +close(R); + +$W = 48; +$H = @bm * 8 / $W; # must be 48 +print <<EOF; +#define xf_width $W +#define xf_height $H +static char xf_bits[] = { +EOF +while (@bm) { + for (1..6) { + $x = shift @bm; + $y = 0; + for $i (1 .. 8) { + $y |= ($x & 1) << (8 - $i); + $x >>= 1; + } + printf " 0x%02X,", $y; + } + print "\n"; +} +print <<EOF; +}; +EOF |