⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sbcsgen.pl

📁 大名鼎鼎的远程登录软件putty的Symbian版源码
💻 PL
字号:
#!/usr/bin/env perl -w# This script generates sbcsdat.c (the data for all the SBCSes) from its# source form sbcs.dat.$infile = "sbcs.dat";$outfile = "sbcsdat.c";open FOO, $infile;open BAR, ">$outfile";select BAR;print "/*\n";print " * sbcsdat.c - data definitions for single-byte character sets.\n";print " *\n";print " * Generated by sbcsgen.pl from sbcs.dat.\n";print " * You should edit those files rather than editing this one.\n";print " */\n";print "\n";print "#ifndef ENUM_CHARSETS\n";print "\n";print "#include \"charset.h\"\n";print "#include \"internal.h\"\n";print "\n";my $charsetname = undef;my @vals = ();my @charsetnames = ();my @sortpriority = ();while (<FOO>) {    chomp;    if (/^charset (.*)$/) {	$charsetname = $1;	@vals = ();	@sortpriority = map { 0 } 0..255;    } elsif (/^sortpriority ([^-]*)-([^-]*) (.*)$/) {	for ($i = hex $1; $i <= hex $2; $i++) {	    $sortpriority[$i] += $3;	}    } elsif (/^[0-9a-fA-FX]/) {	push @vals, map { $_ eq "XXXX" ? -1 : hex $_ } split / +/, $_;	if (scalar @vals > 256) {	    die "$infile:$.: charset $charsetname has more than 256 values\n";	} elsif (scalar @vals == 256) {	    &outcharset($charsetname, \@vals, \@sortpriority);	    push @charsetnames, $charsetname;	    $charsetname = undef;	    @vals = ();	    @sortpriority = map { 0 } 0..255;	}    }}print "#else /* ENUM_CHARSETS */\n";print "\n";foreach $i (@charsetnames) {    print "ENUM_CHARSET($i)\n";}print "\n";print "#endif /* ENUM_CHARSETS */\n";sub outcharset($$$) {    my ($name, $vals, $sortpriority) = @_;    my ($prefix, $i, @sorted);    print "static const sbcs_data data_$name = {\n";    print "    {\n";    $prefix = "    ";    @sorted = ();    for ($i = 0; $i < 256; $i++) {	if ($vals->[$i] < 0) {	    printf "%sERROR ", $prefix;	} else {	    printf "%s0x%04x", $prefix, $vals->[$i];	    die "ooh? $i\n" unless defined $sortpriority->[$i];	    push @sorted, [$i, $vals->[$i], 0+$sortpriority->[$i]];	}	if ($i % 8 == 7) {	    $prefix = ",\n    ";	} else {	    $prefix = ", ";	}    }    print "\n    },\n    {\n";    @sorted = sort { $a->[1] == $b->[1] ?	             $b->[2] <=> $a->[2] :	             $a->[1] <=> $b->[1] } @sorted;    $prefix = "    ";    $uval = -1;    for ($i = $j = 0; $i < scalar @sorted; $i++) {	next if ($uval == $sorted[$i]->[1]); # low-priority alternative	$uval = $sorted[$i]->[1];	printf "%s0x%02x", $prefix, $sorted[$i]->[0];	if ($j % 8 == 7) {	    $prefix = ",\n    ";	} else {	    $prefix = ", ";	}	$j++;    }    printf "\n    },\n    %d\n", $j;    print "};\n";    print "const charset_spec charset_$name = {\n" .          "    $name, read_sbcs, write_sbcs, &data_$name\n};\n\n";}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -