This commit was generated by cvs2svn to compensate for changes in r1815,
[bootcd.git] / syslinux / sys2ansi.pl
diff --git a/syslinux/sys2ansi.pl b/syslinux/sys2ansi.pl
new file mode 100755 (executable)
index 0000000..f555cc5
--- /dev/null
@@ -0,0 +1,54 @@
+#!/usr/bin/perl
+# $Id: sys2ansi.pl,v 1.8 2003/07/01 00:49:31 hpa Exp $
+#
+# Perl script to convert a Syslinux-format screen to PC-ANSI
+# to display in a color xterm or on the Linux console
+#
+
+@ansicol = (0,4,2,6,1,5,3,7);
+
+$getting_file = 0;
+$enable = 1;
+
+while ( read(STDIN, $ch, 1) > 0 ) {
+    if ( $ch eq "\x1A" ) {     # <SUB> <Ctrl-Z> EOF
+       last;
+    } elsif ( $ch eq "\x0C" ) {        # <FF>  <Ctrl-L> Clear screen
+       print "\x1b[2J" if ( $enable && !$getting_file );
+    } elsif ( $ch eq "\x0F" ) {        # <SI>  <Ctrl-O> Attribute change
+       if ( !$getting_file ) {
+           if ( read(STDIN, $attr, 2) == 2 ) {
+               $attr = hex $attr;
+               if ( $enable ) {
+                   print "\x1b[0;";
+                   if ( $attr & 0x80 ) {
+                       print "5;";
+                       $attr &= ~0x80;
+                   }
+                   if ( $attr & 0x08 ) {
+                       print "1;";
+                       $attr &= ~0x08;
+                   }
+                   printf "%d;%dm",
+                   $ansicol[$attr >> 4] + 40, $ansicol[$attr & 7] + 30;
+               }
+           }
+       }
+    } elsif ( $ch eq "\x18" ) {        # <CAN> <Ctrl-X> Display image
+       # We can't display an image; pretend to be a text screen
+       # Ignore all input until end of line
+       $getting_file = 1;
+    } elsif ( (ord($ch) & ~07) == 0x10 ) { # Mode controls
+       $enable = (ord($ch) & 0x01); # Emulate the text screen
+    } elsif ( $ch eq "\x0D" ) {        # <CR>  <Ctrl-M> Carriage return
+       # Ignore
+    } elsif ( $ch eq "\x0A" ) { # <LF>  <Ctrl-J> Line feed
+       if ( $getting_file ) {
+           $getting_file = 0;
+       } else {
+           print $ch if ( $enable );
+       }
+    } else {
+       print $ch if ( $enable && !$getting_file );
+    }
+}