Changeset 197 in xtideuniversalbios for trunk/Tools/StringsCompress.pl


Ignore:
Timestamp:
Nov 20, 2011, 1:24:41 AM (12 years ago)
Author:
gregli@…
google:author:
gregli@hotmail.com
Message:

Some maintenance; no changes to the actual source. Moved the compression tables out of the compression script and into the source file, making the compression script source agnostic. And thus moved the compression script to the Tools directory.

File:
1 moved

Legend:

Unmodified
Added
Removed
  • trunk/Tools/StringsCompress.pl

    r196 r197  
    2323#----------------------------------------------------------------------
    2424#
    25 # Translated and Format characters
     25# Translated, Format, and "Normal" characters
    2626#
    2727# DisplayFormatCompressed can only deal with characters in one of the following categories:
    2828#  1. Those in the Translate associative array
    2929#  2. Those in the Format associative array
    30 #  3. Characters between $normal_base and $normal_base+0x40
     30#  3. Characters between $normal_base and $normal_base+0x40
     31#     (typically covers upper and lowe case alphabets)
    3132#  4. Null characters (marking the end of strings)
    3233#  5. The special string LF,CR
     
    3637# display it).
    3738#
    38 # Note that these tables are not present in DisplayFormatCompressed, and do not need to
    39 # updated there.  Needed information is put in the compression output that it reads.
    40 #
    41 $translate{ord(' ')} = 0;
    42 $translate{172}      = 1;     # ONE_QUARTER
    43 $translate{171}      = 2;     # ONE_HALF
    44 $translate{179}      = 3;     # SINGLE_VERTICAL
    45 $translate{175}      = 4;     # ANGLE_QUOTE_RIGHT
    46 $translate{ord('!')} = 5;
    47 $translate{ord('"')} = 6;
    48 $translate{ord(',')} = 7;
    49 $translate{ord('-')} = 8;
    50 $translate{ord('.')} = 9;
    51 $translate{ord('/')} = 10;
    52 $translate{ord('1')} = 11;   
    53 $translate{ord('2')} = 12;
    54 $translate{ord('3')} = 13;
    55 $translate{ord('4')} = 14;
    56 $translate{ord('5')} = 15;
    57 $translate{ord('6')} = 16;
    58 $translate{ord('8')} = 17;
    59 $translate{200}      = 18;    # DOUBLE_BOTTOM_LEFT_CORNER
    60 $translate{181}      = 19;    # DOUBLE_LEFT_HORIZONTAL_TO_SINGLE_VERTICAL
    61 
    62 #
    63 # Formats begin immediately after the last Translated character (they are in the same table)
    64 #
    65 $format_begin = 20;
    66 
    67 $format{"s"}   = 20;        # n/a
    68 $format{"c"}   = 21;        # n/a
    69 $format{"2-I"} = 22;        # must be even
    70 $format{"u"}   = 23;        # must be odd
    71 $format{"5-u"} = 24;        # must be even
    72 $format{"x"}   = 25;        # must be odd
    73 $format{"5-x"} = 26;        # must be even
    74 $format{"nl"}  = 27;        # n/a
    75 $format{"2-u"} = 28;        # must be even
    76 $format{"A"}   = 29;        # n/a
    77 
    78 # NOTE: The last $format cannot exceed 31 (stored in a 5-bit quantity).
    79 
    80 #
    81 # Starting point for the "normal" range, typically around 0x40 to cover upper and lower case
    82 # letters.  If lower case 'z' is not used, 0x3a can be a good choice as it adds ':' to the
    83 # front end.
    84 #
    85 $normal_base = 0x3a;
     39# Tables for the above categories are expected in the input stream, before string to be
     40# compressed are provided.  Note that these tables are not present in DisplayFormatCompressed,
     41# and do not need to updated there.  Needed information is put in the compression output
     42# that it reads.
     43#
    8644
    8745#
     
    10866print ";;;======================================================================\n\n";
    10967
    110 #
    111 # Loop through lines of the listing, looking for 'db' lines (and dealing with continuations)
    112 # and compressing each line as it is encountered.
    113 #
     68
     69#
     70# On a first pass, look for our table directives.  $translate{...}, $format{...}, etc.
     71# are expectd in the input stream.
     72#
     73$processed = "    [StringsCompress Processed]";
    11474while(<>)
    11575{
     76    chop;
     77    $o = $_;
     78
     79    #
     80    # Table entries for this script
     81    #
     82    if( /^\s*\d+\s*(\;\$translate\{\s*ord\(\s*'(.)'\s*\)\s*\}\s*=\s*([0-9]+).*$)/ )
     83    {
     84        $translate{ord($2)} = int($3);
     85        $o .= $processed;
     86    }
     87    elsif( /^\s*\d+\s*(\;\$translate\{\s*([0-9]+)\s*\}\s*=\s*([0-9]+).*$)/ )
     88    {
     89        $translate{int($2)} = int($3);
     90        $o .= $processed;
     91    }
     92    elsif( /^\s*\d+\s*(\;\$format_begin\s*=\s*([0-9]+).*$)/ )
     93    {
     94        $format_begin = int($2);
     95        $o .= $processed;
     96    }
     97    elsif( /^\s*\d+\s*(\;\$format\{\s*\"([^\"]+)\"\s*\}\s*=\s*([0-9]+).*$)/ )
     98    {
     99        $format{$2} = int($3);
     100        $o .= $processed;
     101    }
     102    elsif( /^\s*\d+\s*(\;\$normal_base\s*=\s*0x([0-9a-fA-F]+).*$)/ )
     103    {
     104        $normal_base = hex($2);
     105        $o .= $processed;
     106    }
     107    elsif( /^\s*\d+\s*(\;\$normal_base\s*=\s*([0-9]+).*$)/ )
     108    {
     109        $normal_base = int($2);
     110        $o .= $processed;
     111    }
     112
     113    push( @lines, $o );
     114}
     115
     116#
     117# On the second pass, loop through lines of the listing, looking for 'db' lines
     118# (and dealing with continuations) and compressing each line as it is encountered.
     119#
     120for( $l = 0; $l < $#lines; $l++ )
     121{
     122    $_ = $lines[$l];
     123
    116124    #
    117125    # The <number> indicates a line from an include file, do not include in the output
     
    139147            do
    140148            {
    141                 $_ = <>;
    142                 /^\s*\d+\s[0-9A-F]+\s([0-9A-F]+)(\-?)/i || die "parse error on continuation";
     149                $_ = $lines[++$l];
     150                /^\s*\d+\s[0-9A-F]+\s([0-9A-F]+)(\-?)/i || die "parse error on continuation: '".$_."'";
    143151                $bytes .= $1;
    144152                $continuation = $2;
     
    159167}
    160168
    161 print ";;; end of strings.asm\n\n";
     169print ";;; end of input stream\n\n";
    162170
    163171#--------------------------------------------------------------------------------
Note: See TracChangeset for help on using the changeset viewer.