+#!/usr/bin/perl
+foreach $e (qw(M=moveto
+ L=lineto
+ N=newpath
+ C=closepath_clip
+ W=setlinewidth_stroke
+ R=grestore
+ S=gsave
+ I=setgray)) {
+ $_= $e;
+ s/^([A-Z])\=// or die;
+ $letter= $1;
+ y/_/ /;
+ $defs.= "/$letter { $_ } bind def\n";
+ $func.= "s/\\s$_\\s/\\n$letter\\n/g;\n";
+}
+eval "sub s { $func }; 1;" or die $@;
+
+while (<>) {
+ if (m/^\%\!/) {
+ print or die $!;
+ print $defs or die $!;
+ } elsif (m/^\%/) {
+ } else {
+ s/^\s+/\n/; s/$/\n/;
+ s/\s(\d{3,}\.\d{0,3})\d*\s+(\d{3,}\.\d{0,3})\d*\s+(moveto|lineto)\s/
+ "\n$1 $2 ".uc(substr($3,0,1))."\n"
+ /ge;
+ &s;
+ s/\n+/\n/g;
+ s/^\n//;
+ print or die $!
+ if m/\S/;
+ }
+}