aboutsummaryrefslogtreecommitdiffstats
path: root/scripts/xface2xpm.in
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--scripts/xface2xpm.in94
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;
+}