diff options
Diffstat (limited to 'src/xpm/converters/xpm1to3.pl')
-rw-r--r-- | src/xpm/converters/xpm1to3.pl | 90 |
1 files changed, 90 insertions, 0 deletions
diff --git a/src/xpm/converters/xpm1to3.pl b/src/xpm/converters/xpm1to3.pl new file mode 100644 index 0000000..d102964 --- /dev/null +++ b/src/xpm/converters/xpm1to3.pl @@ -0,0 +1,90 @@ +#!/usr/local/bin/perl +# +# Usage: xpm1to3.pl xpmv1-file > xpmv3-file +# +# Note: perl (available by ftp on prep.ai.mit.edu) script to convert +# "enhanced" xpm v1 X11 pixmap files to xpm v3 (C includable format) +# pixmap files... +# +--------------------------------------------------------------------------- +# WHO: Richard Hess CORP: Consilium +# TITLE: Staff Engineer VOICE: [415] 691-6342 +# [ X-SWAT Team: Special Projects ] USNAIL: 640 Clyde Court +# UUCP: ...!uunet!cimshop!rhess Mountain View, CA 94043 +# +--------------------------------------------------------------------------- + +sub checkname { + if ($_[0] ne $_[1]) { + printf STDERR "warning, name inconsitencies in %s %s!=%s\n", + $_[2], $_[0], $_[1]; + } +} + +sub checkmono { + if ($_[0] ne $_[1]) { return 0; } + return 1; +} + +printf "/* XPM */\n"; +($name, $format) = (<> =~ /^#define\s+(\w+)_format\s+(\d+)\s*$/); +($name2, $width) = (<> =~ /^#define\s+(\w+)_width\s+(\d+)\s*$/); +&checkname($name, $name2, "width"); +($name2, $height) = (<> =~ /^#define\s+(\w+)_height\s+(\d+)\s*$/); +&checkname($name, $name2, "height"); +($name2, $ncolors) = (<> =~ /^#define\s+(\w+)_ncolors\s+(\d+)\s*$/); +&checkname($name, $name2, "ncolors"); +($name2, $chars_per_pixel) = (<> =~ +/^#define\s+(\w+)_chars_per_pixel\s+(\d+)\s*$/); +&checkname($name, $name2, "chars per pixel"); + +($name2) = (<> =~ /^static char \*\s*(\w+)_mono\[]\s+=\s+{\s*$/); +$mono = &checkmono($name, $name2); + +if ($mono) { + $idx = 0; + while ( ($_ = <>) =~ m/^\s*"[^"]+"\s*,\s*"[^"]+"(,)?\s*$/ ) { + ($codes[$idx], $mono_name[$idx]) = /^\s*"([^"]+)"\s*,\s*"([^"]+)"(,)?\s*$/; + $idx++; + } + if ($idx != $ncolors) { + printf STDERR "Warning, ncolors mismatch reading mono %d != %d\n", +$ncolors, $idx; + } + + ($name2) = (<> =~ /^static char \*\s*(\w+)_colors\[]\s+=\s+{\s*$/); + &checkname($name, $name2, "colors"); +} + +printf "static char * %s[] = {\n", $name; +printf "/* %s pixmap\n * width height ncolors chars_per_pixel */\n", $name; +printf "\"%s %s %s %s \",\n", $width, $height, $ncolors, $chars_per_pixel; + +$idx = 0; +while ( ($_ = <>) =~ m/^\s*"[^"]+"\s*,\s*"[^"]+"(,)?\s*$/ ) { + ($codes[$idx], $color_name[$idx]) = /^\s*"([^"]+)"\s*,\s*"([^"]+)"(,)?\s*$/; + $idx++; +} +if ($idx != $ncolors) { + printf STDERR "Warning, ncolors mismatch reading color %d != %d\n", +$ncolors, $idx; +} + +for ($idx=0; $idx<$ncolors; $idx++) { + if ($mono) { + printf "\"%s m %s c %s \t s c%d \",\n", $codes[$idx], +$mono_name[$idx], $color_name[$idx], $idx; + } + else { + printf "\"%s c %s \t s c%d \",\n", $codes[$idx], $color_name[$idx], $idx; + } +} + +($name2) = ( <> =~ /^static char \*\s*(\w+)_pixels\[]\s+=\s+{\s*$/); +&checkname($name, $name2, "pixels"); + +printf "/* pixels */\n"; +while ( ! ( ($_ = <>) =~ /^}\s*;\s*$/) ) { + printf "%s", $_; +} +printf "} ;\n"; + +# -----------------------------------------------------------------------<eof> |