#!/usr/bin/perl use warnings; use strict; sub unescape { my $s = $_[0]; $s =~ s/\\x([0-9a-fA-F]{2})/chr(hex($1))/ge; return $s; } sub makename { my $s = $_[0]; return "nullstring" if $s eq ""; $s =~ s/([^a-zA-Z'\x9F\xC0-\xFF]|^)([a-z])/$1.uc($2)/ge; # capitalize all words $s =~ s/[\x01-\x0D\x10-\x1F\x85\x86\x88-\x98]//g; # kill positioning, refstack manipulation and color effects $s =~ s/^\x0E/s/; # mark initial small/large font requests $s =~ s/^\x0F/l/; $s =~ tr/\x7B-\x84\x87/DWBUCX_YMSL/; # replace expansion requests with one-letterisms $s =~ s=[\x0E\x0F !#\$&',./:;<>?\\^`\x60\xA0]==g; # delete punctuation and remaining font changes, if any $s =~ s/[^\w]/_/g; # replace all remaining non-alphanumerics with underscores return $s; } my $addr; my $tid; my $str; my $cnt = 0; my $lncnt = 1; $\ = "\n"; print '#define UNLOADED_FILE 1'; print '#include '; print 'static Texts_'.$cnt.'(id) {'; LINE: while (<>) { if (($lncnt++ % 500) == 0) { print '}'; $cnt++; print 'static Texts_'.$cnt.'(id) {'; } next LINE if /^\#/; next LINE if /^\s*$/; ($addr, $tid, $str) = split(/,/, $_, 3); for ($addr, $tid, $str) { s/^\s*//; s/,?\s*$//; } $str =~ /"([^"]*)"/ or die "Invalid input in line $."; $str = $1; $tid = uc($tid); my $name = makename(unescape($str)); my $iname = sprintf("TID%s_%s", $tid, $name); my $aname = sprintf("a_T%s_%s", $tid, $name); $iname = substr($iname, 0, 31); $aname = substr($aname, 0, 31); print ' AddConstEx(id,"', $iname, '", 0x', $tid, ', -1);'; print ' MakeName(0x', $addr, ', "', $aname, '");'; } print '}'; print 'static main(void) {'; print ' auto id;'; print ' id = AddEnum(-1,"enumTextIDs",0x1100000);'; for my $i (0..$cnt) { print ' Texts_'.$i.'(id);'; } print '}';