#!/usr/bin/perl # $Id: sys2ansi.pl,v 1.8 2003/07/01 00:49:31 hpa Exp $ # # Perl script to convert a PC-ANSI to Syslinux-format screen # to display in a message file # %ansidefs = ( "[1m", "7", "[0m", "0", "0", "0", "4", "1", "2", "2", "6", "3", "1", "4", "5", "5", "3", "6", "7", "7", "8", "8", "c", "9", "a", "10", "e", "11", "9", "12", "d", "13", "b", "14", "f", "15" ); $parsing=0; $acmd=0; while ( read(STDIN, $ch, 1) > 0 ) { if($ch eq "\x1b"){$parsing=1;} if($parsing){$code="$code$ch";} if(($ch eq "m" ) and ($parsing)){ $parsing=0; $code=parseCode($code); print $code; $code=""; $ch=""; } if (!$parsing){print $ch;} } exit(0); sub parseCode($code){ my $a,$b,$c; if ($code=~/;/){ if($code=~/\[(.*);(.*)m/){ $a=scalar($1)-30+$acmd; $b=scalar($2)-40; $code="\xf$ansidefs{$b}$ansidefs{$a}"; }else{$acmd=$ansidefs{$code}} }else{$code=$ansidefs{$code};} return $code; }