Add support for creating codepage/Unicode mapping tables
authorH. Peter Anvin <hpa@zytor.com>
Thu, 5 Jun 2008 23:09:50 +0000 (16:09 -0700)
committerH. Peter Anvin <hpa@zytor.com>
Thu, 5 Jun 2008 23:09:50 +0000 (16:09 -0700)
Add support for creating codepage/Unicode mapping tables; this is a
step toward VFAT long filename support.

Makefile
codepage/Makefile [new file with mode: 0644]
codepage/UnicodeData [new file with mode: 0644]
codepage/cp437.txt [new file with mode: 0644]
codepage/cp850.txt [new file with mode: 0644]
codepage/cp865.txt [new file with mode: 0644]
codepage/cptable.pl [new file with mode: 0755]
codepage/gensubset.pl [new file with mode: 0755]

index e436489..fa49c2c 100644 (file)
--- a/Makefile
+++ b/Makefile
@@ -40,7 +40,7 @@ BOBJECTS = $(BTARGET) \
 # BESUBDIRS and IESUBDIRS are "early", i.e. before the root; BSUBDIRS
 # and ISUBDIRS are "late", after the root.
 BESUBDIRS = 
-BSUBDIRS = core memdisk mbr memdump gpxe dos win32
+BSUBDIRS = codepage core memdisk mbr memdump gpxe dos win32
 ITARGET  = 
 IOBJECTS = $(ITARGET) dos/copybs.com utils/gethostip utils/mkdiskimage \
        mtools/syslinux linux/syslinux extlinux/extlinux
diff --git a/codepage/Makefile b/codepage/Makefile
new file mode 100644 (file)
index 0000000..70e2cf0
--- /dev/null
@@ -0,0 +1,17 @@
+PERL           = perl
+CPSRC          = $(wildcard *.txt)
+GENFILES       = $(patsubst %.txt,%.bin,$(CPSRC))
+
+.SUFFIXES: .txt .bin
+
+all: $(GENFILES)
+
+tidy:
+
+clean:
+       rm -f $(GENFILES)
+
+dist: tidy
+
+%.bin: %.txt cptable.pl UnicodeData
+       $(PERL) cptable.pl UnicodeData $< $@
diff --git a/codepage/UnicodeData b/codepage/UnicodeData
new file mode 100644 (file)
index 0000000..3eb8eb7
--- /dev/null
@@ -0,0 +1,301 @@
+0000;<control>;Cc;0;BN;;;;;N;NULL;;;;
+0001;<control>;Cc;0;BN;;;;;N;START OF HEADING;;;;
+0002;<control>;Cc;0;BN;;;;;N;START OF TEXT;;;;
+0003;<control>;Cc;0;BN;;;;;N;END OF TEXT;;;;
+0004;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION;;;;
+0005;<control>;Cc;0;BN;;;;;N;ENQUIRY;;;;
+0006;<control>;Cc;0;BN;;;;;N;ACKNOWLEDGE;;;;
+0007;<control>;Cc;0;BN;;;;;N;BELL;;;;
+0008;<control>;Cc;0;BN;;;;;N;BACKSPACE;;;;
+0009;<control>;Cc;0;S;;;;;N;CHARACTER TABULATION;;;;
+000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
+000B;<control>;Cc;0;S;;;;;N;LINE TABULATION;;;;
+000C;<control>;Cc;0;WS;;;;;N;FORM FEED (FF);;;;
+000D;<control>;Cc;0;B;;;;;N;CARRIAGE RETURN (CR);;;;
+000E;<control>;Cc;0;BN;;;;;N;SHIFT OUT;;;;
+000F;<control>;Cc;0;BN;;;;;N;SHIFT IN;;;;
+0010;<control>;Cc;0;BN;;;;;N;DATA LINK ESCAPE;;;;
+0011;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL ONE;;;;
+0012;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL TWO;;;;
+0013;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL THREE;;;;
+0014;<control>;Cc;0;BN;;;;;N;DEVICE CONTROL FOUR;;;;
+0015;<control>;Cc;0;BN;;;;;N;NEGATIVE ACKNOWLEDGE;;;;
+0016;<control>;Cc;0;BN;;;;;N;SYNCHRONOUS IDLE;;;;
+0017;<control>;Cc;0;BN;;;;;N;END OF TRANSMISSION BLOCK;;;;
+0018;<control>;Cc;0;BN;;;;;N;CANCEL;;;;
+0019;<control>;Cc;0;BN;;;;;N;END OF MEDIUM;;;;
+001A;<control>;Cc;0;BN;;;;;N;SUBSTITUTE;;;;
+001B;<control>;Cc;0;BN;;;;;N;ESCAPE;;;;
+001C;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR FOUR;;;;
+001D;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR THREE;;;;
+001E;<control>;Cc;0;B;;;;;N;INFORMATION SEPARATOR TWO;;;;
+001F;<control>;Cc;0;S;;;;;N;INFORMATION SEPARATOR ONE;;;;
+0020;SPACE;Zs;0;WS;;;;;N;;;;;
+0021;EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+0022;QUOTATION MARK;Po;0;ON;;;;;N;;;;;
+0023;NUMBER SIGN;Po;0;ET;;;;;N;;;;;
+0024;DOLLAR SIGN;Sc;0;ET;;;;;N;;;;;
+0025;PERCENT SIGN;Po;0;ET;;;;;N;;;;;
+0026;AMPERSAND;Po;0;ON;;;;;N;;;;;
+0027;APOSTROPHE;Po;0;ON;;;;;N;APOSTROPHE-QUOTE;;;;
+0028;LEFT PARENTHESIS;Ps;0;ON;;;;;Y;OPENING PARENTHESIS;;;;
+0029;RIGHT PARENTHESIS;Pe;0;ON;;;;;Y;CLOSING PARENTHESIS;;;;
+002A;ASTERISK;Po;0;ON;;;;;N;;;;;
+002B;PLUS SIGN;Sm;0;ES;;;;;N;;;;;
+002C;COMMA;Po;0;CS;;;;;N;;;;;
+002D;HYPHEN-MINUS;Pd;0;ES;;;;;N;;;;;
+002E;FULL STOP;Po;0;CS;;;;;N;PERIOD;;;;
+002F;SOLIDUS;Po;0;CS;;;;;N;SLASH;;;;
+0030;DIGIT ZERO;Nd;0;EN;;0;0;0;N;;;;;
+0031;DIGIT ONE;Nd;0;EN;;1;1;1;N;;;;;
+0032;DIGIT TWO;Nd;0;EN;;2;2;2;N;;;;;
+0033;DIGIT THREE;Nd;0;EN;;3;3;3;N;;;;;
+0034;DIGIT FOUR;Nd;0;EN;;4;4;4;N;;;;;
+0035;DIGIT FIVE;Nd;0;EN;;5;5;5;N;;;;;
+0036;DIGIT SIX;Nd;0;EN;;6;6;6;N;;;;;
+0037;DIGIT SEVEN;Nd;0;EN;;7;7;7;N;;;;;
+0038;DIGIT EIGHT;Nd;0;EN;;8;8;8;N;;;;;
+0039;DIGIT NINE;Nd;0;EN;;9;9;9;N;;;;;
+003A;COLON;Po;0;CS;;;;;N;;;;;
+003B;SEMICOLON;Po;0;ON;;;;;N;;;;;
+003C;LESS-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003D;EQUALS SIGN;Sm;0;ON;;;;;N;;;;;
+003E;GREATER-THAN SIGN;Sm;0;ON;;;;;Y;;;;;
+003F;QUESTION MARK;Po;0;ON;;;;;N;;;;;
+0040;COMMERCIAL AT;Po;0;ON;;;;;N;;;;;
+0041;LATIN CAPITAL LETTER A;Lu;0;L;;;;;N;;;;0061;
+0042;LATIN CAPITAL LETTER B;Lu;0;L;;;;;N;;;;0062;
+0043;LATIN CAPITAL LETTER C;Lu;0;L;;;;;N;;;;0063;
+0044;LATIN CAPITAL LETTER D;Lu;0;L;;;;;N;;;;0064;
+0045;LATIN CAPITAL LETTER E;Lu;0;L;;;;;N;;;;0065;
+0046;LATIN CAPITAL LETTER F;Lu;0;L;;;;;N;;;;0066;
+0047;LATIN CAPITAL LETTER G;Lu;0;L;;;;;N;;;;0067;
+0048;LATIN CAPITAL LETTER H;Lu;0;L;;;;;N;;;;0068;
+0049;LATIN CAPITAL LETTER I;Lu;0;L;;;;;N;;;;0069;
+004A;LATIN CAPITAL LETTER J;Lu;0;L;;;;;N;;;;006A;
+004B;LATIN CAPITAL LETTER K;Lu;0;L;;;;;N;;;;006B;
+004C;LATIN CAPITAL LETTER L;Lu;0;L;;;;;N;;;;006C;
+004D;LATIN CAPITAL LETTER M;Lu;0;L;;;;;N;;;;006D;
+004E;LATIN CAPITAL LETTER N;Lu;0;L;;;;;N;;;;006E;
+004F;LATIN CAPITAL LETTER O;Lu;0;L;;;;;N;;;;006F;
+0050;LATIN CAPITAL LETTER P;Lu;0;L;;;;;N;;;;0070;
+0051;LATIN CAPITAL LETTER Q;Lu;0;L;;;;;N;;;;0071;
+0052;LATIN CAPITAL LETTER R;Lu;0;L;;;;;N;;;;0072;
+0053;LATIN CAPITAL LETTER S;Lu;0;L;;;;;N;;;;0073;
+0054;LATIN CAPITAL LETTER T;Lu;0;L;;;;;N;;;;0074;
+0055;LATIN CAPITAL LETTER U;Lu;0;L;;;;;N;;;;0075;
+0056;LATIN CAPITAL LETTER V;Lu;0;L;;;;;N;;;;0076;
+0057;LATIN CAPITAL LETTER W;Lu;0;L;;;;;N;;;;0077;
+0058;LATIN CAPITAL LETTER X;Lu;0;L;;;;;N;;;;0078;
+0059;LATIN CAPITAL LETTER Y;Lu;0;L;;;;;N;;;;0079;
+005A;LATIN CAPITAL LETTER Z;Lu;0;L;;;;;N;;;;007A;
+005B;LEFT SQUARE BRACKET;Ps;0;ON;;;;;Y;OPENING SQUARE BRACKET;;;;
+005C;REVERSE SOLIDUS;Po;0;ON;;;;;N;BACKSLASH;;;;
+005D;RIGHT SQUARE BRACKET;Pe;0;ON;;;;;Y;CLOSING SQUARE BRACKET;;;;
+005E;CIRCUMFLEX ACCENT;Sk;0;ON;;;;;N;SPACING CIRCUMFLEX;;;;
+005F;LOW LINE;Pc;0;ON;;;;;N;SPACING UNDERSCORE;;;;
+0060;GRAVE ACCENT;Sk;0;ON;;;;;N;SPACING GRAVE;;;;
+0061;LATIN SMALL LETTER A;Ll;0;L;;;;;N;;;0041;;0041
+0062;LATIN SMALL LETTER B;Ll;0;L;;;;;N;;;0042;;0042
+0063;LATIN SMALL LETTER C;Ll;0;L;;;;;N;;;0043;;0043
+0064;LATIN SMALL LETTER D;Ll;0;L;;;;;N;;;0044;;0044
+0065;LATIN SMALL LETTER E;Ll;0;L;;;;;N;;;0045;;0045
+0066;LATIN SMALL LETTER F;Ll;0;L;;;;;N;;;0046;;0046
+0067;LATIN SMALL LETTER G;Ll;0;L;;;;;N;;;0047;;0047
+0068;LATIN SMALL LETTER H;Ll;0;L;;;;;N;;;0048;;0048
+0069;LATIN SMALL LETTER I;Ll;0;L;;;;;N;;;0049;;0049
+006A;LATIN SMALL LETTER J;Ll;0;L;;;;;N;;;004A;;004A
+006B;LATIN SMALL LETTER K;Ll;0;L;;;;;N;;;004B;;004B
+006C;LATIN SMALL LETTER L;Ll;0;L;;;;;N;;;004C;;004C
+006D;LATIN SMALL LETTER M;Ll;0;L;;;;;N;;;004D;;004D
+006E;LATIN SMALL LETTER N;Ll;0;L;;;;;N;;;004E;;004E
+006F;LATIN SMALL LETTER O;Ll;0;L;;;;;N;;;004F;;004F
+0070;LATIN SMALL LETTER P;Ll;0;L;;;;;N;;;0050;;0050
+0071;LATIN SMALL LETTER Q;Ll;0;L;;;;;N;;;0051;;0051
+0072;LATIN SMALL LETTER R;Ll;0;L;;;;;N;;;0052;;0052
+0073;LATIN SMALL LETTER S;Ll;0;L;;;;;N;;;0053;;0053
+0074;LATIN SMALL LETTER T;Ll;0;L;;;;;N;;;0054;;0054
+0075;LATIN SMALL LETTER U;Ll;0;L;;;;;N;;;0055;;0055
+0076;LATIN SMALL LETTER V;Ll;0;L;;;;;N;;;0056;;0056
+0077;LATIN SMALL LETTER W;Ll;0;L;;;;;N;;;0057;;0057
+0078;LATIN SMALL LETTER X;Ll;0;L;;;;;N;;;0058;;0058
+0079;LATIN SMALL LETTER Y;Ll;0;L;;;;;N;;;0059;;0059
+007A;LATIN SMALL LETTER Z;Ll;0;L;;;;;N;;;005A;;005A
+007B;LEFT CURLY BRACKET;Ps;0;ON;;;;;Y;OPENING CURLY BRACKET;;;;
+007C;VERTICAL LINE;Sm;0;ON;;;;;N;VERTICAL BAR;;;;
+007D;RIGHT CURLY BRACKET;Pe;0;ON;;;;;Y;CLOSING CURLY BRACKET;;;;
+007E;TILDE;Sm;0;ON;;;;;N;;;;;
+007F;<control>;Cc;0;BN;;;;;N;DELETE;;;;
+00A0;NO-BREAK SPACE;Zs;0;CS;<noBreak> 0020;;;;N;NON-BREAKING SPACE;;;;
+00A1;INVERTED EXCLAMATION MARK;Po;0;ON;;;;;N;;;;;
+00A2;CENT SIGN;Sc;0;ET;;;;;N;;;;;
+00A3;POUND SIGN;Sc;0;ET;;;;;N;;;;;
+00A4;CURRENCY SIGN;Sc;0;ET;;;;;N;;;;;
+00A5;YEN SIGN;Sc;0;ET;;;;;N;;;;;
+00A6;BROKEN BAR;So;0;ON;;;;;N;BROKEN VERTICAL BAR;;;;
+00A7;SECTION SIGN;So;0;ON;;;;;N;;;;;
+00A8;DIAERESIS;Sk;0;ON;<compat> 0020 0308;;;;N;SPACING DIAERESIS;;;;
+00A9;COPYRIGHT SIGN;So;0;ON;;;;;N;;;;;
+00AA;FEMININE ORDINAL INDICATOR;Ll;0;L;<super> 0061;;;;N;;;;;
+00AB;LEFT-POINTING DOUBLE ANGLE QUOTATION MARK;Pi;0;ON;;;;;Y;LEFT POINTING GUILLEMET;*;;;
+00AC;NOT SIGN;Sm;0;ON;;;;;N;;;;;
+00AD;SOFT HYPHEN;Cf;0;BN;;;;;N;;;;;
+00AE;REGISTERED SIGN;So;0;ON;;;;;N;REGISTERED TRADE MARK SIGN;;;;
+00AF;MACRON;Sk;0;ON;<compat> 0020 0304;;;;N;SPACING MACRON;;;;
+00B0;DEGREE SIGN;So;0;ET;;;;;N;;;;;
+00B1;PLUS-MINUS SIGN;Sm;0;ET;;;;;N;PLUS-OR-MINUS SIGN;;;;
+00B2;SUPERSCRIPT TWO;No;0;EN;<super> 0032;;2;2;N;SUPERSCRIPT DIGIT TWO;;;;
+00B3;SUPERSCRIPT THREE;No;0;EN;<super> 0033;;3;3;N;SUPERSCRIPT DIGIT THREE;;;;
+00B4;ACUTE ACCENT;Sk;0;ON;<compat> 0020 0301;;;;N;SPACING ACUTE;;;;
+00B5;MICRO SIGN;Ll;0;L;<compat> 03BC;;;;N;;;039C;;039C
+00B6;PILCROW SIGN;So;0;ON;;;;;N;PARAGRAPH SIGN;;;;
+00B7;MIDDLE DOT;Po;0;ON;;;;;N;;;;;
+00B8;CEDILLA;Sk;0;ON;<compat> 0020 0327;;;;N;SPACING CEDILLA;;;;
+00B9;SUPERSCRIPT ONE;No;0;EN;<super> 0031;;1;1;N;SUPERSCRIPT DIGIT ONE;;;;
+00BA;MASCULINE ORDINAL INDICATOR;Ll;0;L;<super> 006F;;;;N;;;;;
+00BB;RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK;Pf;0;ON;;;;;Y;RIGHT POINTING GUILLEMET;*;;;
+00BC;VULGAR FRACTION ONE QUARTER;No;0;ON;<fraction> 0031 2044 0034;;;1/4;N;FRACTION ONE QUARTER;;;;
+00BD;VULGAR FRACTION ONE HALF;No;0;ON;<fraction> 0031 2044 0032;;;1/2;N;FRACTION ONE HALF;;;;
+00BE;VULGAR FRACTION THREE QUARTERS;No;0;ON;<fraction> 0033 2044 0034;;;3/4;N;FRACTION THREE QUARTERS;;;;
+00BF;INVERTED QUESTION MARK;Po;0;ON;;;;;N;;;;;
+00C0;LATIN CAPITAL LETTER A WITH GRAVE;Lu;0;L;0041 0300;;;;N;LATIN CAPITAL LETTER A GRAVE;;;00E0;
+00C1;LATIN CAPITAL LETTER A WITH ACUTE;Lu;0;L;0041 0301;;;;N;LATIN CAPITAL LETTER A ACUTE;;;00E1;
+00C2;LATIN CAPITAL LETTER A WITH CIRCUMFLEX;Lu;0;L;0041 0302;;;;N;LATIN CAPITAL LETTER A CIRCUMFLEX;;;00E2;
+00C3;LATIN CAPITAL LETTER A WITH TILDE;Lu;0;L;0041 0303;;;;N;LATIN CAPITAL LETTER A TILDE;;;00E3;
+00C4;LATIN CAPITAL LETTER A WITH DIAERESIS;Lu;0;L;0041 0308;;;;N;LATIN CAPITAL LETTER A DIAERESIS;;;00E4;
+00C5;LATIN CAPITAL LETTER A WITH RING ABOVE;Lu;0;L;0041 030A;;;;N;LATIN CAPITAL LETTER A RING;;;00E5;
+00C6;LATIN CAPITAL LETTER AE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER A E;ash *;;00E6;
+00C7;LATIN CAPITAL LETTER C WITH CEDILLA;Lu;0;L;0043 0327;;;;N;LATIN CAPITAL LETTER C CEDILLA;;;00E7;
+00C8;LATIN CAPITAL LETTER E WITH GRAVE;Lu;0;L;0045 0300;;;;N;LATIN CAPITAL LETTER E GRAVE;;;00E8;
+00C9;LATIN CAPITAL LETTER E WITH ACUTE;Lu;0;L;0045 0301;;;;N;LATIN CAPITAL LETTER E ACUTE;;;00E9;
+00CA;LATIN CAPITAL LETTER E WITH CIRCUMFLEX;Lu;0;L;0045 0302;;;;N;LATIN CAPITAL LETTER E CIRCUMFLEX;;;00EA;
+00CB;LATIN CAPITAL LETTER E WITH DIAERESIS;Lu;0;L;0045 0308;;;;N;LATIN CAPITAL LETTER E DIAERESIS;;;00EB;
+00CC;LATIN CAPITAL LETTER I WITH GRAVE;Lu;0;L;0049 0300;;;;N;LATIN CAPITAL LETTER I GRAVE;;;00EC;
+00CD;LATIN CAPITAL LETTER I WITH ACUTE;Lu;0;L;0049 0301;;;;N;LATIN CAPITAL LETTER I ACUTE;;;00ED;
+00CE;LATIN CAPITAL LETTER I WITH CIRCUMFLEX;Lu;0;L;0049 0302;;;;N;LATIN CAPITAL LETTER I CIRCUMFLEX;;;00EE;
+00CF;LATIN CAPITAL LETTER I WITH DIAERESIS;Lu;0;L;0049 0308;;;;N;LATIN CAPITAL LETTER I DIAERESIS;;;00EF;
+00D0;LATIN CAPITAL LETTER ETH;Lu;0;L;;;;;N;;Icelandic;;00F0;
+00D1;LATIN CAPITAL LETTER N WITH TILDE;Lu;0;L;004E 0303;;;;N;LATIN CAPITAL LETTER N TILDE;;;00F1;
+00D2;LATIN CAPITAL LETTER O WITH GRAVE;Lu;0;L;004F 0300;;;;N;LATIN CAPITAL LETTER O GRAVE;;;00F2;
+00D3;LATIN CAPITAL LETTER O WITH ACUTE;Lu;0;L;004F 0301;;;;N;LATIN CAPITAL LETTER O ACUTE;;;00F3;
+00D4;LATIN CAPITAL LETTER O WITH CIRCUMFLEX;Lu;0;L;004F 0302;;;;N;LATIN CAPITAL LETTER O CIRCUMFLEX;;;00F4;
+00D5;LATIN CAPITAL LETTER O WITH TILDE;Lu;0;L;004F 0303;;;;N;LATIN CAPITAL LETTER O TILDE;;;00F5;
+00D6;LATIN CAPITAL LETTER O WITH DIAERESIS;Lu;0;L;004F 0308;;;;N;LATIN CAPITAL LETTER O DIAERESIS;;;00F6;
+00D7;MULTIPLICATION SIGN;Sm;0;ON;;;;;N;;;;;
+00D8;LATIN CAPITAL LETTER O WITH STROKE;Lu;0;L;;;;;N;LATIN CAPITAL LETTER O SLASH;;;00F8;
+00D9;LATIN CAPITAL LETTER U WITH GRAVE;Lu;0;L;0055 0300;;;;N;LATIN CAPITAL LETTER U GRAVE;;;00F9;
+00DA;LATIN CAPITAL LETTER U WITH ACUTE;Lu;0;L;0055 0301;;;;N;LATIN CAPITAL LETTER U ACUTE;;;00FA;
+00DB;LATIN CAPITAL LETTER U WITH CIRCUMFLEX;Lu;0;L;0055 0302;;;;N;LATIN CAPITAL LETTER U CIRCUMFLEX;;;00FB;
+00DC;LATIN CAPITAL LETTER U WITH DIAERESIS;Lu;0;L;0055 0308;;;;N;LATIN CAPITAL LETTER U DIAERESIS;;;00FC;
+00DD;LATIN CAPITAL LETTER Y WITH ACUTE;Lu;0;L;0059 0301;;;;N;LATIN CAPITAL LETTER Y ACUTE;;;00FD;
+00DE;LATIN CAPITAL LETTER THORN;Lu;0;L;;;;;N;;Icelandic;;00FE;
+00DF;LATIN SMALL LETTER SHARP S;Ll;0;L;;;;;N;;German;;;
+00E0;LATIN SMALL LETTER A WITH GRAVE;Ll;0;L;0061 0300;;;;N;LATIN SMALL LETTER A GRAVE;;00C0;;00C0
+00E1;LATIN SMALL LETTER A WITH ACUTE;Ll;0;L;0061 0301;;;;N;LATIN SMALL LETTER A ACUTE;;00C1;;00C1
+00E2;LATIN SMALL LETTER A WITH CIRCUMFLEX;Ll;0;L;0061 0302;;;;N;LATIN SMALL LETTER A CIRCUMFLEX;;00C2;;00C2
+00E3;LATIN SMALL LETTER A WITH TILDE;Ll;0;L;0061 0303;;;;N;LATIN SMALL LETTER A TILDE;;00C3;;00C3
+00E4;LATIN SMALL LETTER A WITH DIAERESIS;Ll;0;L;0061 0308;;;;N;LATIN SMALL LETTER A DIAERESIS;;00C4;;00C4
+00E5;LATIN SMALL LETTER A WITH RING ABOVE;Ll;0;L;0061 030A;;;;N;LATIN SMALL LETTER A RING;;00C5;;00C5
+00E6;LATIN SMALL LETTER AE;Ll;0;L;;;;;N;LATIN SMALL LETTER A E;ash *;00C6;;00C6
+00E7;LATIN SMALL LETTER C WITH CEDILLA;Ll;0;L;0063 0327;;;;N;LATIN SMALL LETTER C CEDILLA;;00C7;;00C7
+00E8;LATIN SMALL LETTER E WITH GRAVE;Ll;0;L;0065 0300;;;;N;LATIN SMALL LETTER E GRAVE;;00C8;;00C8
+00E9;LATIN SMALL LETTER E WITH ACUTE;Ll;0;L;0065 0301;;;;N;LATIN SMALL LETTER E ACUTE;;00C9;;00C9
+00EA;LATIN SMALL LETTER E WITH CIRCUMFLEX;Ll;0;L;0065 0302;;;;N;LATIN SMALL LETTER E CIRCUMFLEX;;00CA;;00CA
+00EB;LATIN SMALL LETTER E WITH DIAERESIS;Ll;0;L;0065 0308;;;;N;LATIN SMALL LETTER E DIAERESIS;;00CB;;00CB
+00EC;LATIN SMALL LETTER I WITH GRAVE;Ll;0;L;0069 0300;;;;N;LATIN SMALL LETTER I GRAVE;;00CC;;00CC
+00ED;LATIN SMALL LETTER I WITH ACUTE;Ll;0;L;0069 0301;;;;N;LATIN SMALL LETTER I ACUTE;;00CD;;00CD
+00EE;LATIN SMALL LETTER I WITH CIRCUMFLEX;Ll;0;L;0069 0302;;;;N;LATIN SMALL LETTER I CIRCUMFLEX;;00CE;;00CE
+00EF;LATIN SMALL LETTER I WITH DIAERESIS;Ll;0;L;0069 0308;;;;N;LATIN SMALL LETTER I DIAERESIS;;00CF;;00CF
+00F0;LATIN SMALL LETTER ETH;Ll;0;L;;;;;N;;Icelandic;00D0;;00D0
+00F1;LATIN SMALL LETTER N WITH TILDE;Ll;0;L;006E 0303;;;;N;LATIN SMALL LETTER N TILDE;;00D1;;00D1
+00F2;LATIN SMALL LETTER O WITH GRAVE;Ll;0;L;006F 0300;;;;N;LATIN SMALL LETTER O GRAVE;;00D2;;00D2
+00F3;LATIN SMALL LETTER O WITH ACUTE;Ll;0;L;006F 0301;;;;N;LATIN SMALL LETTER O ACUTE;;00D3;;00D3
+00F4;LATIN SMALL LETTER O WITH CIRCUMFLEX;Ll;0;L;006F 0302;;;;N;LATIN SMALL LETTER O CIRCUMFLEX;;00D4;;00D4
+00F5;LATIN SMALL LETTER O WITH TILDE;Ll;0;L;006F 0303;;;;N;LATIN SMALL LETTER O TILDE;;00D5;;00D5
+00F6;LATIN SMALL LETTER O WITH DIAERESIS;Ll;0;L;006F 0308;;;;N;LATIN SMALL LETTER O DIAERESIS;;00D6;;00D6
+00F7;DIVISION SIGN;Sm;0;ON;;;;;N;;;;;
+00F8;LATIN SMALL LETTER O WITH STROKE;Ll;0;L;;;;;N;LATIN SMALL LETTER O SLASH;;00D8;;00D8
+00F9;LATIN SMALL LETTER U WITH GRAVE;Ll;0;L;0075 0300;;;;N;LATIN SMALL LETTER U GRAVE;;00D9;;00D9
+00FA;LATIN SMALL LETTER U WITH ACUTE;Ll;0;L;0075 0301;;;;N;LATIN SMALL LETTER U ACUTE;;00DA;;00DA
+00FB;LATIN SMALL LETTER U WITH CIRCUMFLEX;Ll;0;L;0075 0302;;;;N;LATIN SMALL LETTER U CIRCUMFLEX;;00DB;;00DB
+00FC;LATIN SMALL LETTER U WITH DIAERESIS;Ll;0;L;0075 0308;;;;N;LATIN SMALL LETTER U DIAERESIS;;00DC;;00DC
+00FD;LATIN SMALL LETTER Y WITH ACUTE;Ll;0;L;0079 0301;;;;N;LATIN SMALL LETTER Y ACUTE;;00DD;;00DD
+00FE;LATIN SMALL LETTER THORN;Ll;0;L;;;;;N;;Icelandic;00DE;;00DE
+00FF;LATIN SMALL LETTER Y WITH DIAERESIS;Ll;0;L;0079 0308;;;;N;LATIN SMALL LETTER Y DIAERESIS;;0178;;0178
+0131;LATIN SMALL LETTER DOTLESS I;Ll;0;L;;;;;N;;;0049;;0049
+0192;LATIN SMALL LETTER F WITH HOOK;Ll;0;L;;;;;N;LATIN SMALL LETTER SCRIPT F;;0191;;0191
+0393;GREEK CAPITAL LETTER GAMMA;Lu;0;L;;;;;N;;;;03B3;
+0398;GREEK CAPITAL LETTER THETA;Lu;0;L;;;;;N;;;;03B8;
+03A3;GREEK CAPITAL LETTER SIGMA;Lu;0;L;;;;;N;;;;03C3;
+03A6;GREEK CAPITAL LETTER PHI;Lu;0;L;;;;;N;;;;03C6;
+03A9;GREEK CAPITAL LETTER OMEGA;Lu;0;L;;;;;N;;;;03C9;
+03B1;GREEK SMALL LETTER ALPHA;Ll;0;L;;;;;N;;;0391;;0391
+03B4;GREEK SMALL LETTER DELTA;Ll;0;L;;;;;N;;;0394;;0394
+03B5;GREEK SMALL LETTER EPSILON;Ll;0;L;;;;;N;;;0395;;0395
+03C0;GREEK SMALL LETTER PI;Ll;0;L;;;;;N;;;03A0;;03A0
+03C3;GREEK SMALL LETTER SIGMA;Ll;0;L;;;;;N;;;03A3;;03A3
+03C4;GREEK SMALL LETTER TAU;Ll;0;L;;;;;N;;;03A4;;03A4
+03C6;GREEK SMALL LETTER PHI;Ll;0;L;;;;;N;;;03A6;;03A6
+2017;DOUBLE LOW LINE;Po;0;ON;<compat> 0020 0333;;;;N;SPACING DOUBLE UNDERSCORE;;;;
+207F;SUPERSCRIPT LATIN SMALL LETTER N;Ll;0;L;<super> 006E;;;;N;;;;;
+20A7;PESETA SIGN;Sc;0;ET;;;;;N;;;;;
+2219;BULLET OPERATOR;Sm;0;ON;;;;;N;;;;;
+221A;SQUARE ROOT;Sm;0;ON;;;;;Y;;;;;
+221E;INFINITY;Sm;0;ON;;;;;N;;;;;
+2229;INTERSECTION;Sm;0;ON;;;;;N;;;;;
+2248;ALMOST EQUAL TO;Sm;0;ON;;;;;Y;;;;;
+2261;IDENTICAL TO;Sm;0;ON;;;;;N;;;;;
+2264;LESS-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;LESS THAN OR EQUAL TO;;;;
+2265;GREATER-THAN OR EQUAL TO;Sm;0;ON;;;;;Y;GREATER THAN OR EQUAL TO;;;;
+2310;REVERSED NOT SIGN;So;0;ON;;;;;N;;;;;
+2320;TOP HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2321;BOTTOM HALF INTEGRAL;Sm;0;ON;;;;;Y;;;;;
+2500;BOX DRAWINGS LIGHT HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT HORIZONTAL;;;;
+2502;BOX DRAWINGS LIGHT VERTICAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL;;;;
+250C;BOX DRAWINGS LIGHT DOWN AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND RIGHT;;;;
+2510;BOX DRAWINGS LIGHT DOWN AND LEFT;So;0;ON;;;;;N;FORMS LIGHT DOWN AND LEFT;;;;
+2514;BOX DRAWINGS LIGHT UP AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT UP AND RIGHT;;;;
+2518;BOX DRAWINGS LIGHT UP AND LEFT;So;0;ON;;;;;N;FORMS LIGHT UP AND LEFT;;;;
+251C;BOX DRAWINGS LIGHT VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND RIGHT;;;;
+2524;BOX DRAWINGS LIGHT VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND LEFT;;;;
+252C;BOX DRAWINGS LIGHT DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT DOWN AND HORIZONTAL;;;;
+2534;BOX DRAWINGS LIGHT UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT UP AND HORIZONTAL;;;;
+253C;BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS LIGHT VERTICAL AND HORIZONTAL;;;;
+2550;BOX DRAWINGS DOUBLE HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE HORIZONTAL;;;;
+2551;BOX DRAWINGS DOUBLE VERTICAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL;;;;
+2552;BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND RIGHT DOUBLE;;;;
+2553;BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND RIGHT SINGLE;;;;
+2554;BOX DRAWINGS DOUBLE DOWN AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND RIGHT;;;;
+2555;BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND LEFT DOUBLE;;;;
+2556;BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND LEFT SINGLE;;;;
+2557;BOX DRAWINGS DOUBLE DOWN AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND LEFT;;;;
+2558;BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND RIGHT DOUBLE;;;;
+2559;BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND RIGHT SINGLE;;;;
+255A;BOX DRAWINGS DOUBLE UP AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE UP AND RIGHT;;;;
+255B;BOX DRAWINGS UP SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND LEFT DOUBLE;;;;
+255C;BOX DRAWINGS UP DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND LEFT SINGLE;;;;
+255D;BOX DRAWINGS DOUBLE UP AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE UP AND LEFT;;;;
+255E;BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND RIGHT DOUBLE;;;;
+255F;BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND RIGHT SINGLE;;;;
+2560;BOX DRAWINGS DOUBLE VERTICAL AND RIGHT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND RIGHT;;;;
+2561;BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND LEFT DOUBLE;;;;
+2562;BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND LEFT SINGLE;;;;
+2563;BOX DRAWINGS DOUBLE VERTICAL AND LEFT;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND LEFT;;;;
+2564;BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS DOWN SINGLE AND HORIZONTAL DOUBLE;;;;
+2565;BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS DOWN DOUBLE AND HORIZONTAL SINGLE;;;;
+2566;BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE DOWN AND HORIZONTAL;;;;
+2567;BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS UP SINGLE AND HORIZONTAL DOUBLE;;;;
+2568;BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS UP DOUBLE AND HORIZONTAL SINGLE;;;;
+2569;BOX DRAWINGS DOUBLE UP AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE UP AND HORIZONTAL;;;;
+256A;BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE;So;0;ON;;;;;N;FORMS VERTICAL SINGLE AND HORIZONTAL DOUBLE;;;;
+256B;BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE;So;0;ON;;;;;N;FORMS VERTICAL DOUBLE AND HORIZONTAL SINGLE;;;;
+256C;BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL;So;0;ON;;;;;N;FORMS DOUBLE VERTICAL AND HORIZONTAL;;;;
+2580;UPPER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2584;LOWER HALF BLOCK;So;0;ON;;;;;N;;;;;
+2588;FULL BLOCK;So;0;ON;;;;;N;;;;;
+258C;LEFT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2590;RIGHT HALF BLOCK;So;0;ON;;;;;N;;;;;
+2591;LIGHT SHADE;So;0;ON;;;;;N;;;;;
+2592;MEDIUM SHADE;So;0;ON;;;;;N;;;;;
+2593;DARK SHADE;So;0;ON;;;;;N;;;;;
+25A0;BLACK SQUARE;So;0;ON;;;;;N;;;;;
diff --git a/codepage/cp437.txt b/codepage/cp437.txt
new file mode 100644 (file)
index 0000000..aa5a53b
--- /dev/null
@@ -0,0 +1,273 @@
+#
+#    Name:     cp437_DOSLatinUS to Unicode table
+#    Unicode version: 2.0
+#    Table version: 2.00
+#    Table format:  Format A
+#    Date:          04/24/96
+#    Contact: Shawn.Steele@microsoft.com
+#                   
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp437_DOSLatinUS code (in hex)
+#        Column #2 is the Unicode (in hex as 0xXXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp437_DOSLatinUS order
+#
+0x00   0x0000  #NULL
+0x01   0x0001  #START OF HEADING
+0x02   0x0002  #START OF TEXT
+0x03   0x0003  #END OF TEXT
+0x04   0x0004  #END OF TRANSMISSION
+0x05   0x0005  #ENQUIRY
+0x06   0x0006  #ACKNOWLEDGE
+0x07   0x0007  #BELL
+0x08   0x0008  #BACKSPACE
+0x09   0x0009  #HORIZONTAL TABULATION
+0x0a   0x000a  #LINE FEED
+0x0b   0x000b  #VERTICAL TABULATION
+0x0c   0x000c  #FORM FEED
+0x0d   0x000d  #CARRIAGE RETURN
+0x0e   0x000e  #SHIFT OUT
+0x0f   0x000f  #SHIFT IN
+0x10   0x0010  #DATA LINK ESCAPE
+0x11   0x0011  #DEVICE CONTROL ONE
+0x12   0x0012  #DEVICE CONTROL TWO
+0x13   0x0013  #DEVICE CONTROL THREE
+0x14   0x0014  #DEVICE CONTROL FOUR
+0x15   0x0015  #NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #SYNCHRONOUS IDLE
+0x17   0x0017  #END OF TRANSMISSION BLOCK
+0x18   0x0018  #CANCEL
+0x19   0x0019  #END OF MEDIUM
+0x1a   0x001a  #SUBSTITUTE
+0x1b   0x001b  #ESCAPE
+0x1c   0x001c  #FILE SEPARATOR
+0x1d   0x001d  #GROUP SEPARATOR
+0x1e   0x001e  #RECORD SEPARATOR
+0x1f   0x001f  #UNIT SEPARATOR
+0x20   0x0020  #SPACE
+0x21   0x0021  #EXCLAMATION MARK
+0x22   0x0022  #QUOTATION MARK
+0x23   0x0023  #NUMBER SIGN
+0x24   0x0024  #DOLLAR SIGN
+0x25   0x0025  #PERCENT SIGN
+0x26   0x0026  #AMPERSAND
+0x27   0x0027  #APOSTROPHE
+0x28   0x0028  #LEFT PARENTHESIS
+0x29   0x0029  #RIGHT PARENTHESIS
+0x2a   0x002a  #ASTERISK
+0x2b   0x002b  #PLUS SIGN
+0x2c   0x002c  #COMMA
+0x2d   0x002d  #HYPHEN-MINUS
+0x2e   0x002e  #FULL STOP
+0x2f   0x002f  #SOLIDUS
+0x30   0x0030  #DIGIT ZERO
+0x31   0x0031  #DIGIT ONE
+0x32   0x0032  #DIGIT TWO
+0x33   0x0033  #DIGIT THREE
+0x34   0x0034  #DIGIT FOUR
+0x35   0x0035  #DIGIT FIVE
+0x36   0x0036  #DIGIT SIX
+0x37   0x0037  #DIGIT SEVEN
+0x38   0x0038  #DIGIT EIGHT
+0x39   0x0039  #DIGIT NINE
+0x3a   0x003a  #COLON
+0x3b   0x003b  #SEMICOLON
+0x3c   0x003c  #LESS-THAN SIGN
+0x3d   0x003d  #EQUALS SIGN
+0x3e   0x003e  #GREATER-THAN SIGN
+0x3f   0x003f  #QUESTION MARK
+0x40   0x0040  #COMMERCIAL AT
+0x41   0x0041  #LATIN CAPITAL LETTER A
+0x42   0x0042  #LATIN CAPITAL LETTER B
+0x43   0x0043  #LATIN CAPITAL LETTER C
+0x44   0x0044  #LATIN CAPITAL LETTER D
+0x45   0x0045  #LATIN CAPITAL LETTER E
+0x46   0x0046  #LATIN CAPITAL LETTER F
+0x47   0x0047  #LATIN CAPITAL LETTER G
+0x48   0x0048  #LATIN CAPITAL LETTER H
+0x49   0x0049  #LATIN CAPITAL LETTER I
+0x4a   0x004a  #LATIN CAPITAL LETTER J
+0x4b   0x004b  #LATIN CAPITAL LETTER K
+0x4c   0x004c  #LATIN CAPITAL LETTER L
+0x4d   0x004d  #LATIN CAPITAL LETTER M
+0x4e   0x004e  #LATIN CAPITAL LETTER N
+0x4f   0x004f  #LATIN CAPITAL LETTER O
+0x50   0x0050  #LATIN CAPITAL LETTER P
+0x51   0x0051  #LATIN CAPITAL LETTER Q
+0x52   0x0052  #LATIN CAPITAL LETTER R
+0x53   0x0053  #LATIN CAPITAL LETTER S
+0x54   0x0054  #LATIN CAPITAL LETTER T
+0x55   0x0055  #LATIN CAPITAL LETTER U
+0x56   0x0056  #LATIN CAPITAL LETTER V
+0x57   0x0057  #LATIN CAPITAL LETTER W
+0x58   0x0058  #LATIN CAPITAL LETTER X
+0x59   0x0059  #LATIN CAPITAL LETTER Y
+0x5a   0x005a  #LATIN CAPITAL LETTER Z
+0x5b   0x005b  #LEFT SQUARE BRACKET
+0x5c   0x005c  #REVERSE SOLIDUS
+0x5d   0x005d  #RIGHT SQUARE BRACKET
+0x5e   0x005e  #CIRCUMFLEX ACCENT
+0x5f   0x005f  #LOW LINE
+0x60   0x0060  #GRAVE ACCENT
+0x61   0x0061  #LATIN SMALL LETTER A
+0x62   0x0062  #LATIN SMALL LETTER B
+0x63   0x0063  #LATIN SMALL LETTER C
+0x64   0x0064  #LATIN SMALL LETTER D
+0x65   0x0065  #LATIN SMALL LETTER E
+0x66   0x0066  #LATIN SMALL LETTER F
+0x67   0x0067  #LATIN SMALL LETTER G
+0x68   0x0068  #LATIN SMALL LETTER H
+0x69   0x0069  #LATIN SMALL LETTER I
+0x6a   0x006a  #LATIN SMALL LETTER J
+0x6b   0x006b  #LATIN SMALL LETTER K
+0x6c   0x006c  #LATIN SMALL LETTER L
+0x6d   0x006d  #LATIN SMALL LETTER M
+0x6e   0x006e  #LATIN SMALL LETTER N
+0x6f   0x006f  #LATIN SMALL LETTER O
+0x70   0x0070  #LATIN SMALL LETTER P
+0x71   0x0071  #LATIN SMALL LETTER Q
+0x72   0x0072  #LATIN SMALL LETTER R
+0x73   0x0073  #LATIN SMALL LETTER S
+0x74   0x0074  #LATIN SMALL LETTER T
+0x75   0x0075  #LATIN SMALL LETTER U
+0x76   0x0076  #LATIN SMALL LETTER V
+0x77   0x0077  #LATIN SMALL LETTER W
+0x78   0x0078  #LATIN SMALL LETTER X
+0x79   0x0079  #LATIN SMALL LETTER Y
+0x7a   0x007a  #LATIN SMALL LETTER Z
+0x7b   0x007b  #LEFT CURLY BRACKET
+0x7c   0x007c  #VERTICAL LINE
+0x7d   0x007d  #RIGHT CURLY BRACKET
+0x7e   0x007e  #TILDE
+0x7f   0x007f  #DELETE
+0x80   0x00c7  #LATIN CAPITAL LETTER C WITH CEDILLA
+0x81   0x00fc  #LATIN SMALL LETTER U WITH DIAERESIS
+0x82   0x00e9  #LATIN SMALL LETTER E WITH ACUTE
+0x83   0x00e2  #LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x84   0x00e4  #LATIN SMALL LETTER A WITH DIAERESIS
+0x85   0x00e0  #LATIN SMALL LETTER A WITH GRAVE
+0x86   0x00e5  #LATIN SMALL LETTER A WITH RING ABOVE
+0x87   0x00e7  #LATIN SMALL LETTER C WITH CEDILLA
+0x88   0x00ea  #LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x89   0x00eb  #LATIN SMALL LETTER E WITH DIAERESIS
+0x8a   0x00e8  #LATIN SMALL LETTER E WITH GRAVE
+0x8b   0x00ef  #LATIN SMALL LETTER I WITH DIAERESIS
+0x8c   0x00ee  #LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x8d   0x00ec  #LATIN SMALL LETTER I WITH GRAVE
+0x8e   0x00c4  #LATIN CAPITAL LETTER A WITH DIAERESIS
+0x8f   0x00c5  #LATIN CAPITAL LETTER A WITH RING ABOVE
+0x90   0x00c9  #LATIN CAPITAL LETTER E WITH ACUTE
+0x91   0x00e6  #LATIN SMALL LIGATURE AE
+0x92   0x00c6  #LATIN CAPITAL LIGATURE AE
+0x93   0x00f4  #LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x94   0x00f6  #LATIN SMALL LETTER O WITH DIAERESIS
+0x95   0x00f2  #LATIN SMALL LETTER O WITH GRAVE
+0x96   0x00fb  #LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x97   0x00f9  #LATIN SMALL LETTER U WITH GRAVE
+0x98   0x00ff  #LATIN SMALL LETTER Y WITH DIAERESIS
+0x99   0x00d6  #LATIN CAPITAL LETTER O WITH DIAERESIS
+0x9a   0x00dc  #LATIN CAPITAL LETTER U WITH DIAERESIS
+0x9b   0x00a2  #CENT SIGN
+0x9c   0x00a3  #POUND SIGN
+0x9d   0x00a5  #YEN SIGN
+0x9e   0x20a7  #PESETA SIGN
+0x9f   0x0192  #LATIN SMALL LETTER F WITH HOOK
+0xa0   0x00e1  #LATIN SMALL LETTER A WITH ACUTE
+0xa1   0x00ed  #LATIN SMALL LETTER I WITH ACUTE
+0xa2   0x00f3  #LATIN SMALL LETTER O WITH ACUTE
+0xa3   0x00fa  #LATIN SMALL LETTER U WITH ACUTE
+0xa4   0x00f1  #LATIN SMALL LETTER N WITH TILDE
+0xa5   0x00d1  #LATIN CAPITAL LETTER N WITH TILDE
+0xa6   0x00aa  #FEMININE ORDINAL INDICATOR
+0xa7   0x00ba  #MASCULINE ORDINAL INDICATOR
+0xa8   0x00bf  #INVERTED QUESTION MARK
+0xa9   0x2310  #REVERSED NOT SIGN
+0xaa   0x00ac  #NOT SIGN
+0xab   0x00bd  #VULGAR FRACTION ONE HALF
+0xac   0x00bc  #VULGAR FRACTION ONE QUARTER
+0xad   0x00a1  #INVERTED EXCLAMATION MARK
+0xae   0x00ab  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xaf   0x00bb  #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xb0   0x2591  #LIGHT SHADE
+0xb1   0x2592  #MEDIUM SHADE
+0xb2   0x2593  #DARK SHADE
+0xb3   0x2502  #BOX DRAWINGS LIGHT VERTICAL
+0xb4   0x2524  #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xb5   0x2561  #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xb6   0x2562  #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+0xb7   0x2556  #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+0xb8   0x2555  #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+0xb9   0x2563  #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xba   0x2551  #BOX DRAWINGS DOUBLE VERTICAL
+0xbb   0x2557  #BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xbc   0x255d  #BOX DRAWINGS DOUBLE UP AND LEFT
+0xbd   0x255c  #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+0xbe   0x255b  #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+0xbf   0x2510  #BOX DRAWINGS LIGHT DOWN AND LEFT
+0xc0   0x2514  #BOX DRAWINGS LIGHT UP AND RIGHT
+0xc1   0x2534  #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xc2   0x252c  #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xc3   0x251c  #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xc4   0x2500  #BOX DRAWINGS LIGHT HORIZONTAL
+0xc5   0x253c  #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xc6   0x255e  #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xc7   0x255f  #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+0xc8   0x255a  #BOX DRAWINGS DOUBLE UP AND RIGHT
+0xc9   0x2554  #BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xca   0x2569  #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xcb   0x2566  #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xcc   0x2560  #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xcd   0x2550  #BOX DRAWINGS DOUBLE HORIZONTAL
+0xce   0x256c  #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xcf   0x2567  #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+0xd0   0x2568  #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+0xd1   0x2564  #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+0xd2   0x2565  #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+0xd3   0x2559  #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+0xd4   0x2558  #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+0xd5   0x2552  #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+0xd6   0x2553  #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+0xd7   0x256b  #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+0xd8   0x256a  #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xd9   0x2518  #BOX DRAWINGS LIGHT UP AND LEFT
+0xda   0x250c  #BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xdb   0x2588  #FULL BLOCK
+0xdc   0x2584  #LOWER HALF BLOCK
+0xdd   0x258c  #LEFT HALF BLOCK
+0xde   0x2590  #RIGHT HALF BLOCK
+0xdf   0x2580  #UPPER HALF BLOCK
+0xe0   0x03b1  #GREEK SMALL LETTER ALPHA
+0xe1   0x00df  #LATIN SMALL LETTER SHARP S
+0xe2   0x0393  #GREEK CAPITAL LETTER GAMMA
+0xe3   0x03c0  #GREEK SMALL LETTER PI
+0xe4   0x03a3  #GREEK CAPITAL LETTER SIGMA
+0xe5   0x03c3  #GREEK SMALL LETTER SIGMA
+0xe6   0x00b5  #MICRO SIGN
+0xe7   0x03c4  #GREEK SMALL LETTER TAU
+0xe8   0x03a6  #GREEK CAPITAL LETTER PHI
+0xe9   0x0398  #GREEK CAPITAL LETTER THETA
+0xea   0x03a9  #GREEK CAPITAL LETTER OMEGA
+0xeb   0x03b4  #GREEK SMALL LETTER DELTA
+0xec   0x221e  #INFINITY
+0xed   0x03c6  #GREEK SMALL LETTER PHI
+0xee   0x03b5  #GREEK SMALL LETTER EPSILON
+0xef   0x2229  #INTERSECTION
+0xf0   0x2261  #IDENTICAL TO
+0xf1   0x00b1  #PLUS-MINUS SIGN
+0xf2   0x2265  #GREATER-THAN OR EQUAL TO
+0xf3   0x2264  #LESS-THAN OR EQUAL TO
+0xf4   0x2320  #TOP HALF INTEGRAL
+0xf5   0x2321  #BOTTOM HALF INTEGRAL
+0xf6   0x00f7  #DIVISION SIGN
+0xf7   0x2248  #ALMOST EQUAL TO
+0xf8   0x00b0  #DEGREE SIGN
+0xf9   0x2219  #BULLET OPERATOR
+0xfa   0x00b7  #MIDDLE DOT
+0xfb   0x221a  #SQUARE ROOT
+0xfc   0x207f  #SUPERSCRIPT LATIN SMALL LETTER N
+0xfd   0x00b2  #SUPERSCRIPT TWO
+0xfe   0x25a0  #BLACK SQUARE
+0xff   0x00a0  #NO-BREAK SPACE
diff --git a/codepage/cp850.txt b/codepage/cp850.txt
new file mode 100644 (file)
index 0000000..26a4232
--- /dev/null
@@ -0,0 +1,273 @@
+#
+#    Name:     cp850_DOSLatin1 to Unicode table
+#    Unicode version: 2.0
+#    Table version: 2.00
+#    Table format:  Format A
+#    Date:          04/24/96
+#    Contact: Shawn.Steele@microsoft.com
+#                   
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp850_DOSLatin1 code (in hex)
+#        Column #2 is the Unicode (in hex as 0xXXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp850_DOSLatin1 order
+#
+0x00   0x0000  #NULL
+0x01   0x0001  #START OF HEADING
+0x02   0x0002  #START OF TEXT
+0x03   0x0003  #END OF TEXT
+0x04   0x0004  #END OF TRANSMISSION
+0x05   0x0005  #ENQUIRY
+0x06   0x0006  #ACKNOWLEDGE
+0x07   0x0007  #BELL
+0x08   0x0008  #BACKSPACE
+0x09   0x0009  #HORIZONTAL TABULATION
+0x0a   0x000a  #LINE FEED
+0x0b   0x000b  #VERTICAL TABULATION
+0x0c   0x000c  #FORM FEED
+0x0d   0x000d  #CARRIAGE RETURN
+0x0e   0x000e  #SHIFT OUT
+0x0f   0x000f  #SHIFT IN
+0x10   0x0010  #DATA LINK ESCAPE
+0x11   0x0011  #DEVICE CONTROL ONE
+0x12   0x0012  #DEVICE CONTROL TWO
+0x13   0x0013  #DEVICE CONTROL THREE
+0x14   0x0014  #DEVICE CONTROL FOUR
+0x15   0x0015  #NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #SYNCHRONOUS IDLE
+0x17   0x0017  #END OF TRANSMISSION BLOCK
+0x18   0x0018  #CANCEL
+0x19   0x0019  #END OF MEDIUM
+0x1a   0x001a  #SUBSTITUTE
+0x1b   0x001b  #ESCAPE
+0x1c   0x001c  #FILE SEPARATOR
+0x1d   0x001d  #GROUP SEPARATOR
+0x1e   0x001e  #RECORD SEPARATOR
+0x1f   0x001f  #UNIT SEPARATOR
+0x20   0x0020  #SPACE
+0x21   0x0021  #EXCLAMATION MARK
+0x22   0x0022  #QUOTATION MARK
+0x23   0x0023  #NUMBER SIGN
+0x24   0x0024  #DOLLAR SIGN
+0x25   0x0025  #PERCENT SIGN
+0x26   0x0026  #AMPERSAND
+0x27   0x0027  #APOSTROPHE
+0x28   0x0028  #LEFT PARENTHESIS
+0x29   0x0029  #RIGHT PARENTHESIS
+0x2a   0x002a  #ASTERISK
+0x2b   0x002b  #PLUS SIGN
+0x2c   0x002c  #COMMA
+0x2d   0x002d  #HYPHEN-MINUS
+0x2e   0x002e  #FULL STOP
+0x2f   0x002f  #SOLIDUS
+0x30   0x0030  #DIGIT ZERO
+0x31   0x0031  #DIGIT ONE
+0x32   0x0032  #DIGIT TWO
+0x33   0x0033  #DIGIT THREE
+0x34   0x0034  #DIGIT FOUR
+0x35   0x0035  #DIGIT FIVE
+0x36   0x0036  #DIGIT SIX
+0x37   0x0037  #DIGIT SEVEN
+0x38   0x0038  #DIGIT EIGHT
+0x39   0x0039  #DIGIT NINE
+0x3a   0x003a  #COLON
+0x3b   0x003b  #SEMICOLON
+0x3c   0x003c  #LESS-THAN SIGN
+0x3d   0x003d  #EQUALS SIGN
+0x3e   0x003e  #GREATER-THAN SIGN
+0x3f   0x003f  #QUESTION MARK
+0x40   0x0040  #COMMERCIAL AT
+0x41   0x0041  #LATIN CAPITAL LETTER A
+0x42   0x0042  #LATIN CAPITAL LETTER B
+0x43   0x0043  #LATIN CAPITAL LETTER C
+0x44   0x0044  #LATIN CAPITAL LETTER D
+0x45   0x0045  #LATIN CAPITAL LETTER E
+0x46   0x0046  #LATIN CAPITAL LETTER F
+0x47   0x0047  #LATIN CAPITAL LETTER G
+0x48   0x0048  #LATIN CAPITAL LETTER H
+0x49   0x0049  #LATIN CAPITAL LETTER I
+0x4a   0x004a  #LATIN CAPITAL LETTER J
+0x4b   0x004b  #LATIN CAPITAL LETTER K
+0x4c   0x004c  #LATIN CAPITAL LETTER L
+0x4d   0x004d  #LATIN CAPITAL LETTER M
+0x4e   0x004e  #LATIN CAPITAL LETTER N
+0x4f   0x004f  #LATIN CAPITAL LETTER O
+0x50   0x0050  #LATIN CAPITAL LETTER P
+0x51   0x0051  #LATIN CAPITAL LETTER Q
+0x52   0x0052  #LATIN CAPITAL LETTER R
+0x53   0x0053  #LATIN CAPITAL LETTER S
+0x54   0x0054  #LATIN CAPITAL LETTER T
+0x55   0x0055  #LATIN CAPITAL LETTER U
+0x56   0x0056  #LATIN CAPITAL LETTER V
+0x57   0x0057  #LATIN CAPITAL LETTER W
+0x58   0x0058  #LATIN CAPITAL LETTER X
+0x59   0x0059  #LATIN CAPITAL LETTER Y
+0x5a   0x005a  #LATIN CAPITAL LETTER Z
+0x5b   0x005b  #LEFT SQUARE BRACKET
+0x5c   0x005c  #REVERSE SOLIDUS
+0x5d   0x005d  #RIGHT SQUARE BRACKET
+0x5e   0x005e  #CIRCUMFLEX ACCENT
+0x5f   0x005f  #LOW LINE
+0x60   0x0060  #GRAVE ACCENT
+0x61   0x0061  #LATIN SMALL LETTER A
+0x62   0x0062  #LATIN SMALL LETTER B
+0x63   0x0063  #LATIN SMALL LETTER C
+0x64   0x0064  #LATIN SMALL LETTER D
+0x65   0x0065  #LATIN SMALL LETTER E
+0x66   0x0066  #LATIN SMALL LETTER F
+0x67   0x0067  #LATIN SMALL LETTER G
+0x68   0x0068  #LATIN SMALL LETTER H
+0x69   0x0069  #LATIN SMALL LETTER I
+0x6a   0x006a  #LATIN SMALL LETTER J
+0x6b   0x006b  #LATIN SMALL LETTER K
+0x6c   0x006c  #LATIN SMALL LETTER L
+0x6d   0x006d  #LATIN SMALL LETTER M
+0x6e   0x006e  #LATIN SMALL LETTER N
+0x6f   0x006f  #LATIN SMALL LETTER O
+0x70   0x0070  #LATIN SMALL LETTER P
+0x71   0x0071  #LATIN SMALL LETTER Q
+0x72   0x0072  #LATIN SMALL LETTER R
+0x73   0x0073  #LATIN SMALL LETTER S
+0x74   0x0074  #LATIN SMALL LETTER T
+0x75   0x0075  #LATIN SMALL LETTER U
+0x76   0x0076  #LATIN SMALL LETTER V
+0x77   0x0077  #LATIN SMALL LETTER W
+0x78   0x0078  #LATIN SMALL LETTER X
+0x79   0x0079  #LATIN SMALL LETTER Y
+0x7a   0x007a  #LATIN SMALL LETTER Z
+0x7b   0x007b  #LEFT CURLY BRACKET
+0x7c   0x007c  #VERTICAL LINE
+0x7d   0x007d  #RIGHT CURLY BRACKET
+0x7e   0x007e  #TILDE
+0x7f   0x007f  #DELETE
+0x80   0x00c7  #LATIN CAPITAL LETTER C WITH CEDILLA
+0x81   0x00fc  #LATIN SMALL LETTER U WITH DIAERESIS
+0x82   0x00e9  #LATIN SMALL LETTER E WITH ACUTE
+0x83   0x00e2  #LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x84   0x00e4  #LATIN SMALL LETTER A WITH DIAERESIS
+0x85   0x00e0  #LATIN SMALL LETTER A WITH GRAVE
+0x86   0x00e5  #LATIN SMALL LETTER A WITH RING ABOVE
+0x87   0x00e7  #LATIN SMALL LETTER C WITH CEDILLA
+0x88   0x00ea  #LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x89   0x00eb  #LATIN SMALL LETTER E WITH DIAERESIS
+0x8a   0x00e8  #LATIN SMALL LETTER E WITH GRAVE
+0x8b   0x00ef  #LATIN SMALL LETTER I WITH DIAERESIS
+0x8c   0x00ee  #LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x8d   0x00ec  #LATIN SMALL LETTER I WITH GRAVE
+0x8e   0x00c4  #LATIN CAPITAL LETTER A WITH DIAERESIS
+0x8f   0x00c5  #LATIN CAPITAL LETTER A WITH RING ABOVE
+0x90   0x00c9  #LATIN CAPITAL LETTER E WITH ACUTE
+0x91   0x00e6  #LATIN SMALL LIGATURE AE
+0x92   0x00c6  #LATIN CAPITAL LIGATURE AE
+0x93   0x00f4  #LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x94   0x00f6  #LATIN SMALL LETTER O WITH DIAERESIS
+0x95   0x00f2  #LATIN SMALL LETTER O WITH GRAVE
+0x96   0x00fb  #LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x97   0x00f9  #LATIN SMALL LETTER U WITH GRAVE
+0x98   0x00ff  #LATIN SMALL LETTER Y WITH DIAERESIS
+0x99   0x00d6  #LATIN CAPITAL LETTER O WITH DIAERESIS
+0x9a   0x00dc  #LATIN CAPITAL LETTER U WITH DIAERESIS
+0x9b   0x00f8  #LATIN SMALL LETTER O WITH STROKE
+0x9c   0x00a3  #POUND SIGN
+0x9d   0x00d8  #LATIN CAPITAL LETTER O WITH STROKE
+0x9e   0x00d7  #MULTIPLICATION SIGN
+0x9f   0x0192  #LATIN SMALL LETTER F WITH HOOK
+0xa0   0x00e1  #LATIN SMALL LETTER A WITH ACUTE
+0xa1   0x00ed  #LATIN SMALL LETTER I WITH ACUTE
+0xa2   0x00f3  #LATIN SMALL LETTER O WITH ACUTE
+0xa3   0x00fa  #LATIN SMALL LETTER U WITH ACUTE
+0xa4   0x00f1  #LATIN SMALL LETTER N WITH TILDE
+0xa5   0x00d1  #LATIN CAPITAL LETTER N WITH TILDE
+0xa6   0x00aa  #FEMININE ORDINAL INDICATOR
+0xa7   0x00ba  #MASCULINE ORDINAL INDICATOR
+0xa8   0x00bf  #INVERTED QUESTION MARK
+0xa9   0x00ae  #REGISTERED SIGN
+0xaa   0x00ac  #NOT SIGN
+0xab   0x00bd  #VULGAR FRACTION ONE HALF
+0xac   0x00bc  #VULGAR FRACTION ONE QUARTER
+0xad   0x00a1  #INVERTED EXCLAMATION MARK
+0xae   0x00ab  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xaf   0x00bb  #RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xb0   0x2591  #LIGHT SHADE
+0xb1   0x2592  #MEDIUM SHADE
+0xb2   0x2593  #DARK SHADE
+0xb3   0x2502  #BOX DRAWINGS LIGHT VERTICAL
+0xb4   0x2524  #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xb5   0x00c1  #LATIN CAPITAL LETTER A WITH ACUTE
+0xb6   0x00c2  #LATIN CAPITAL LETTER A WITH CIRCUMFLEX
+0xb7   0x00c0  #LATIN CAPITAL LETTER A WITH GRAVE
+0xb8   0x00a9  #COPYRIGHT SIGN
+0xb9   0x2563  #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xba   0x2551  #BOX DRAWINGS DOUBLE VERTICAL
+0xbb   0x2557  #BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xbc   0x255d  #BOX DRAWINGS DOUBLE UP AND LEFT
+0xbd   0x00a2  #CENT SIGN
+0xbe   0x00a5  #YEN SIGN
+0xbf   0x2510  #BOX DRAWINGS LIGHT DOWN AND LEFT
+0xc0   0x2514  #BOX DRAWINGS LIGHT UP AND RIGHT
+0xc1   0x2534  #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xc2   0x252c  #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xc3   0x251c  #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xc4   0x2500  #BOX DRAWINGS LIGHT HORIZONTAL
+0xc5   0x253c  #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xc6   0x00e3  #LATIN SMALL LETTER A WITH TILDE
+0xc7   0x00c3  #LATIN CAPITAL LETTER A WITH TILDE
+0xc8   0x255a  #BOX DRAWINGS DOUBLE UP AND RIGHT
+0xc9   0x2554  #BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xca   0x2569  #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xcb   0x2566  #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xcc   0x2560  #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xcd   0x2550  #BOX DRAWINGS DOUBLE HORIZONTAL
+0xce   0x256c  #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xcf   0x00a4  #CURRENCY SIGN
+0xd0   0x00f0  #LATIN SMALL LETTER ETH
+0xd1   0x00d0  #LATIN CAPITAL LETTER ETH
+0xd2   0x00ca  #LATIN CAPITAL LETTER E WITH CIRCUMFLEX
+0xd3   0x00cb  #LATIN CAPITAL LETTER E WITH DIAERESIS
+0xd4   0x00c8  #LATIN CAPITAL LETTER E WITH GRAVE
+0xd5   0x0131  #LATIN SMALL LETTER DOTLESS I
+0xd6   0x00cd  #LATIN CAPITAL LETTER I WITH ACUTE
+0xd7   0x00ce  #LATIN CAPITAL LETTER I WITH CIRCUMFLEX
+0xd8   0x00cf  #LATIN CAPITAL LETTER I WITH DIAERESIS
+0xd9   0x2518  #BOX DRAWINGS LIGHT UP AND LEFT
+0xda   0x250c  #BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xdb   0x2588  #FULL BLOCK
+0xdc   0x2584  #LOWER HALF BLOCK
+0xdd   0x00a6  #BROKEN BAR
+0xde   0x00cc  #LATIN CAPITAL LETTER I WITH GRAVE
+0xdf   0x2580  #UPPER HALF BLOCK
+0xe0   0x00d3  #LATIN CAPITAL LETTER O WITH ACUTE
+0xe1   0x00df  #LATIN SMALL LETTER SHARP S
+0xe2   0x00d4  #LATIN CAPITAL LETTER O WITH CIRCUMFLEX
+0xe3   0x00d2  #LATIN CAPITAL LETTER O WITH GRAVE
+0xe4   0x00f5  #LATIN SMALL LETTER O WITH TILDE
+0xe5   0x00d5  #LATIN CAPITAL LETTER O WITH TILDE
+0xe6   0x00b5  #MICRO SIGN
+0xe7   0x00fe  #LATIN SMALL LETTER THORN
+0xe8   0x00de  #LATIN CAPITAL LETTER THORN
+0xe9   0x00da  #LATIN CAPITAL LETTER U WITH ACUTE
+0xea   0x00db  #LATIN CAPITAL LETTER U WITH CIRCUMFLEX
+0xeb   0x00d9  #LATIN CAPITAL LETTER U WITH GRAVE
+0xec   0x00fd  #LATIN SMALL LETTER Y WITH ACUTE
+0xed   0x00dd  #LATIN CAPITAL LETTER Y WITH ACUTE
+0xee   0x00af  #MACRON
+0xef   0x00b4  #ACUTE ACCENT
+0xf0   0x00ad  #SOFT HYPHEN
+0xf1   0x00b1  #PLUS-MINUS SIGN
+0xf2   0x2017  #DOUBLE LOW LINE
+0xf3   0x00be  #VULGAR FRACTION THREE QUARTERS
+0xf4   0x00b6  #PILCROW SIGN
+0xf5   0x00a7  #SECTION SIGN
+0xf6   0x00f7  #DIVISION SIGN
+0xf7   0x00b8  #CEDILLA
+0xf8   0x00b0  #DEGREE SIGN
+0xf9   0x00a8  #DIAERESIS
+0xfa   0x00b7  #MIDDLE DOT
+0xfb   0x00b9  #SUPERSCRIPT ONE
+0xfc   0x00b3  #SUPERSCRIPT THREE
+0xfd   0x00b2  #SUPERSCRIPT TWO
+0xfe   0x25a0  #BLACK SQUARE
+0xff   0x00a0  #NO-BREAK SPACE
diff --git a/codepage/cp865.txt b/codepage/cp865.txt
new file mode 100644 (file)
index 0000000..f3d6fef
--- /dev/null
@@ -0,0 +1,274 @@
+#
+#    Name:     cp865_DOSNordic to Unicode table
+#    Unicode version: 2.0
+#    Table version: 2.00
+#    Table format:  Format A
+#    Date:          04/24/96
+#    Contact: Shawn.Steele@microsoft.com
+#                   
+#    General notes: none
+#
+#    Format: Three tab-separated columns
+#        Column #1 is the cp865_DOSNordic code (in hex)
+#        Column #2 is the Unicode (in hex as 0xXXXX)
+#        Column #3 is the Unicode name (follows a comment sign, '#')
+#
+#    The entries are in cp865_DOSNordic order
+#
+0x00   0x0000  #NULL
+0x01   0x0001  #START OF HEADING
+0x02   0x0002  #START OF TEXT
+0x03   0x0003  #END OF TEXT
+0x04   0x0004  #END OF TRANSMISSION
+0x05   0x0005  #ENQUIRY
+0x06   0x0006  #ACKNOWLEDGE
+0x07   0x0007  #BELL
+0x08   0x0008  #BACKSPACE
+0x09   0x0009  #HORIZONTAL TABULATION
+0x0a   0x000a  #LINE FEED
+0x0b   0x000b  #VERTICAL TABULATION
+0x0c   0x000c  #FORM FEED
+0x0d   0x000d  #CARRIAGE RETURN
+0x0e   0x000e  #SHIFT OUT
+0x0f   0x000f  #SHIFT IN
+0x10   0x0010  #DATA LINK ESCAPE
+0x11   0x0011  #DEVICE CONTROL ONE
+0x12   0x0012  #DEVICE CONTROL TWO
+0x13   0x0013  #DEVICE CONTROL THREE
+0x14   0x0014  #DEVICE CONTROL FOUR
+0x15   0x0015  #NEGATIVE ACKNOWLEDGE
+0x16   0x0016  #SYNCHRONOUS IDLE
+0x17   0x0017  #END OF TRANSMISSION BLOCK
+0x18   0x0018  #CANCEL
+0x19   0x0019  #END OF MEDIUM
+0x1a   0x001a  #SUBSTITUTE
+0x1b   0x001b  #ESCAPE
+0x1c   0x001c  #FILE SEPARATOR
+0x1d   0x001d  #GROUP SEPARATOR
+0x1e   0x001e  #RECORD SEPARATOR
+0x1f   0x001f  #UNIT SEPARATOR
+0x20   0x0020  #SPACE
+0x21   0x0021  #EXCLAMATION MARK
+0x22   0x0022  #QUOTATION MARK
+0x23   0x0023  #NUMBER SIGN
+0x24   0x0024  #DOLLAR SIGN
+0x25   0x0025  #PERCENT SIGN
+0x26   0x0026  #AMPERSAND
+0x27   0x0027  #APOSTROPHE
+0x28   0x0028  #LEFT PARENTHESIS
+0x29   0x0029  #RIGHT PARENTHESIS
+0x2a   0x002a  #ASTERISK
+0x2b   0x002b  #PLUS SIGN
+0x2c   0x002c  #COMMA
+0x2d   0x002d  #HYPHEN-MINUS
+0x2e   0x002e  #FULL STOP
+0x2f   0x002f  #SOLIDUS
+0x30   0x0030  #DIGIT ZERO
+0x31   0x0031  #DIGIT ONE
+0x32   0x0032  #DIGIT TWO
+0x33   0x0033  #DIGIT THREE
+0x34   0x0034  #DIGIT FOUR
+0x35   0x0035  #DIGIT FIVE
+0x36   0x0036  #DIGIT SIX
+0x37   0x0037  #DIGIT SEVEN
+0x38   0x0038  #DIGIT EIGHT
+0x39   0x0039  #DIGIT NINE
+0x3a   0x003a  #COLON
+0x3b   0x003b  #SEMICOLON
+0x3c   0x003c  #LESS-THAN SIGN
+0x3d   0x003d  #EQUALS SIGN
+0x3e   0x003e  #GREATER-THAN SIGN
+0x3f   0x003f  #QUESTION MARK
+0x40   0x0040  #COMMERCIAL AT
+0x41   0x0041  #LATIN CAPITAL LETTER A
+0x42   0x0042  #LATIN CAPITAL LETTER B
+0x43   0x0043  #LATIN CAPITAL LETTER C
+0x44   0x0044  #LATIN CAPITAL LETTER D
+0x45   0x0045  #LATIN CAPITAL LETTER E
+0x46   0x0046  #LATIN CAPITAL LETTER F
+0x47   0x0047  #LATIN CAPITAL LETTER G
+0x48   0x0048  #LATIN CAPITAL LETTER H
+0x49   0x0049  #LATIN CAPITAL LETTER I
+0x4a   0x004a  #LATIN CAPITAL LETTER J
+0x4b   0x004b  #LATIN CAPITAL LETTER K
+0x4c   0x004c  #LATIN CAPITAL LETTER L
+0x4d   0x004d  #LATIN CAPITAL LETTER M
+0x4e   0x004e  #LATIN CAPITAL LETTER N
+0x4f   0x004f  #LATIN CAPITAL LETTER O
+0x50   0x0050  #LATIN CAPITAL LETTER P
+0x51   0x0051  #LATIN CAPITAL LETTER Q
+0x52   0x0052  #LATIN CAPITAL LETTER R
+0x53   0x0053  #LATIN CAPITAL LETTER S
+0x54   0x0054  #LATIN CAPITAL LETTER T
+0x55   0x0055  #LATIN CAPITAL LETTER U
+0x56   0x0056  #LATIN CAPITAL LETTER V
+0x57   0x0057  #LATIN CAPITAL LETTER W
+0x58   0x0058  #LATIN CAPITAL LETTER X
+0x59   0x0059  #LATIN CAPITAL LETTER Y
+0x5a   0x005a  #LATIN CAPITAL LETTER Z
+0x5b   0x005b  #LEFT SQUARE BRACKET
+0x5c   0x005c  #REVERSE SOLIDUS
+0x5d   0x005d  #RIGHT SQUARE BRACKET
+0x5e   0x005e  #CIRCUMFLEX ACCENT
+0x5f   0x005f  #LOW LINE
+0x60   0x0060  #GRAVE ACCENT
+0x61   0x0061  #LATIN SMALL LETTER A
+0x62   0x0062  #LATIN SMALL LETTER B
+0x63   0x0063  #LATIN SMALL LETTER C
+0x64   0x0064  #LATIN SMALL LETTER D
+0x65   0x0065  #LATIN SMALL LETTER E
+0x66   0x0066  #LATIN SMALL LETTER F
+0x67   0x0067  #LATIN SMALL LETTER G
+0x68   0x0068  #LATIN SMALL LETTER H
+0x69   0x0069  #LATIN SMALL LETTER I
+0x6a   0x006a  #LATIN SMALL LETTER J
+0x6b   0x006b  #LATIN SMALL LETTER K
+0x6c   0x006c  #LATIN SMALL LETTER L
+0x6d   0x006d  #LATIN SMALL LETTER M
+0x6e   0x006e  #LATIN SMALL LETTER N
+0x6f   0x006f  #LATIN SMALL LETTER O
+0x70   0x0070  #LATIN SMALL LETTER P
+0x71   0x0071  #LATIN SMALL LETTER Q
+0x72   0x0072  #LATIN SMALL LETTER R
+0x73   0x0073  #LATIN SMALL LETTER S
+0x74   0x0074  #LATIN SMALL LETTER T
+0x75   0x0075  #LATIN SMALL LETTER U
+0x76   0x0076  #LATIN SMALL LETTER V
+0x77   0x0077  #LATIN SMALL LETTER W
+0x78   0x0078  #LATIN SMALL LETTER X
+0x79   0x0079  #LATIN SMALL LETTER Y
+0x7a   0x007a  #LATIN SMALL LETTER Z
+0x7b   0x007b  #LEFT CURLY BRACKET
+0x7c   0x007c  #VERTICAL LINE
+0x7d   0x007d  #RIGHT CURLY BRACKET
+0x7e   0x007e  #TILDE
+0x7f   0x007f  #DELETE
+0x80   0x00c7  #LATIN CAPITAL LETTER C WITH CEDILLA
+0x81   0x00fc  #LATIN SMALL LETTER U WITH DIAERESIS
+0x82   0x00e9  #LATIN SMALL LETTER E WITH ACUTE
+0x83   0x00e2  #LATIN SMALL LETTER A WITH CIRCUMFLEX
+0x84   0x00e4  #LATIN SMALL LETTER A WITH DIAERESIS
+0x85   0x00e0  #LATIN SMALL LETTER A WITH GRAVE
+0x86   0x00e5  #LATIN SMALL LETTER A WITH RING ABOVE
+0x87   0x00e7  #LATIN SMALL LETTER C WITH CEDILLA
+0x88   0x00ea  #LATIN SMALL LETTER E WITH CIRCUMFLEX
+0x89   0x00eb  #LATIN SMALL LETTER E WITH DIAERESIS
+0x8a   0x00e8  #LATIN SMALL LETTER E WITH GRAVE
+0x8b   0x00ef  #LATIN SMALL LETTER I WITH DIAERESIS
+0x8c   0x00ee  #LATIN SMALL LETTER I WITH CIRCUMFLEX
+0x8d   0x00ec  #LATIN SMALL LETTER I WITH GRAVE
+0x8e   0x00c4  #LATIN CAPITAL LETTER A WITH DIAERESIS
+0x8f   0x00c5  #LATIN CAPITAL LETTER A WITH RING ABOVE
+0x90   0x00c9  #LATIN CAPITAL LETTER E WITH ACUTE
+0x91   0x00e6  #LATIN SMALL LIGATURE AE
+0x92   0x00c6  #LATIN CAPITAL LIGATURE AE
+0x93   0x00f4  #LATIN SMALL LETTER O WITH CIRCUMFLEX
+0x94   0x00f6  #LATIN SMALL LETTER O WITH DIAERESIS
+0x95   0x00f2  #LATIN SMALL LETTER O WITH GRAVE
+0x96   0x00fb  #LATIN SMALL LETTER U WITH CIRCUMFLEX
+0x97   0x00f9  #LATIN SMALL LETTER U WITH GRAVE
+0x98   0x00ff  #LATIN SMALL LETTER Y WITH DIAERESIS
+0x99   0x00d6  #LATIN CAPITAL LETTER O WITH DIAERESIS
+0x9a   0x00dc  #LATIN CAPITAL LETTER U WITH DIAERESIS
+0x9b   0x00f8  #LATIN SMALL LETTER O WITH STROKE
+0x9c   0x00a3  #POUND SIGN
+0x9d   0x00d8  #LATIN CAPITAL LETTER O WITH STROKE
+0x9e   0x20a7  #PESETA SIGN
+0x9f   0x0192  #LATIN SMALL LETTER F WITH HOOK
+0xa0   0x00e1  #LATIN SMALL LETTER A WITH ACUTE
+0xa1   0x00ed  #LATIN SMALL LETTER I WITH ACUTE
+0xa2   0x00f3  #LATIN SMALL LETTER O WITH ACUTE
+0xa3   0x00fa  #LATIN SMALL LETTER U WITH ACUTE
+0xa4   0x00f1  #LATIN SMALL LETTER N WITH TILDE
+0xa5   0x00d1  #LATIN CAPITAL LETTER N WITH TILDE
+0xa6   0x00aa  #FEMININE ORDINAL INDICATOR
+0xa7   0x00ba  #MASCULINE ORDINAL INDICATOR
+0xa8   0x00bf  #INVERTED QUESTION MARK
+0xa9   0x2310  #REVERSED NOT SIGN
+0xaa   0x00ac  #NOT SIGN
+0xab   0x00bd  #VULGAR FRACTION ONE HALF
+0xac   0x00bc  #VULGAR FRACTION ONE QUARTER
+0xad   0x00a1  #INVERTED EXCLAMATION MARK
+0xae   0x00ab  #LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+0xaf   0x00a4  #CURRENCY SIGN
+0xb0   0x2591  #LIGHT SHADE
+0xb1   0x2592  #MEDIUM SHADE
+0xb2   0x2593  #DARK SHADE
+0xb3   0x2502  #BOX DRAWINGS LIGHT VERTICAL
+0xb4   0x2524  #BOX DRAWINGS LIGHT VERTICAL AND LEFT
+0xb5   0x2561  #BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE
+0xb6   0x2562  #BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE
+0xb7   0x2556  #BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE
+0xb8   0x2555  #BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE
+0xb9   0x2563  #BOX DRAWINGS DOUBLE VERTICAL AND LEFT
+0xba   0x2551  #BOX DRAWINGS DOUBLE VERTICAL
+0xbb   0x2557  #BOX DRAWINGS DOUBLE DOWN AND LEFT
+0xbc   0x255d  #BOX DRAWINGS DOUBLE UP AND LEFT
+0xbd   0x255c  #BOX DRAWINGS UP DOUBLE AND LEFT SINGLE
+0xbe   0x255b  #BOX DRAWINGS UP SINGLE AND LEFT DOUBLE
+0xbf   0x2510  #BOX DRAWINGS LIGHT DOWN AND LEFT
+0xc0   0x2514  #BOX DRAWINGS LIGHT UP AND RIGHT
+0xc1   0x2534  #BOX DRAWINGS LIGHT UP AND HORIZONTAL
+0xc2   0x252c  #BOX DRAWINGS LIGHT DOWN AND HORIZONTAL
+0xc3   0x251c  #BOX DRAWINGS LIGHT VERTICAL AND RIGHT
+0xc4   0x2500  #BOX DRAWINGS LIGHT HORIZONTAL
+0xc5   0x253c  #BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL
+0xc6   0x255e  #BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE
+0xc7   0x255f  #BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE
+0xc8   0x255a  #BOX DRAWINGS DOUBLE UP AND RIGHT
+0xc9   0x2554  #BOX DRAWINGS DOUBLE DOWN AND RIGHT
+0xca   0x2569  #BOX DRAWINGS DOUBLE UP AND HORIZONTAL
+0xcb   0x2566  #BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL
+0xcc   0x2560  #BOX DRAWINGS DOUBLE VERTICAL AND RIGHT
+0xcd   0x2550  #BOX DRAWINGS DOUBLE HORIZONTAL
+0xce   0x256c  #BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL
+0xcf   0x2567  #BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE
+0xd0   0x2568  #BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE
+0xd1   0x2564  #BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE
+0xd2   0x2565  #BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE
+0xd3   0x2559  #BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE
+0xd4   0x2558  #BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE
+0xd5   0x2552  #BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE
+0xd6   0x2553  #BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE
+0xd7   0x256b  #BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE
+0xd8   0x256a  #BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE
+0xd9   0x2518  #BOX DRAWINGS LIGHT UP AND LEFT
+0xda   0x250c  #BOX DRAWINGS LIGHT DOWN AND RIGHT
+0xdb   0x2588  #FULL BLOCK
+0xdc   0x2584  #LOWER HALF BLOCK
+0xdd   0x258c  #LEFT HALF BLOCK
+0xde   0x2590  #RIGHT HALF BLOCK
+0xdf   0x2580  #UPPER HALF BLOCK
+0xe0   0x03b1  #GREEK SMALL LETTER ALPHA
+0xe1   0x00df  #LATIN SMALL LETTER SHARP S
+0xe2   0x0393  #GREEK CAPITAL LETTER GAMMA
+0xe3   0x03c0  #GREEK SMALL LETTER PI
+0xe4   0x03a3  #GREEK CAPITAL LETTER SIGMA
+0xe5   0x03c3  #GREEK SMALL LETTER SIGMA
+0xe6   0x00b5  #MICRO SIGN
+0xe7   0x03c4  #GREEK SMALL LETTER TAU
+0xe8   0x03a6  #GREEK CAPITAL LETTER PHI
+0xe9   0x0398  #GREEK CAPITAL LETTER THETA
+0xea   0x03a9  #GREEK CAPITAL LETTER OMEGA
+0xeb   0x03b4  #GREEK SMALL LETTER DELTA
+0xec   0x221e  #INFINITY
+0xed   0x03c6  #GREEK SMALL LETTER PHI
+0xee   0x03b5  #GREEK SMALL LETTER EPSILON
+0xef   0x2229  #INTERSECTION
+0xf0   0x2261  #IDENTICAL TO
+0xf1   0x00b1  #PLUS-MINUS SIGN
+0xf2   0x2265  #GREATER-THAN OR EQUAL TO
+0xf3   0x2264  #LESS-THAN OR EQUAL TO
+0xf4   0x2320  #TOP HALF INTEGRAL
+0xf5   0x2321  #BOTTOM HALF INTEGRAL
+0xf6   0x00f7  #DIVISION SIGN
+0xf7   0x2248  #ALMOST EQUAL TO
+0xf8   0x00b0  #DEGREE SIGN
+0xf9   0x2219  #BULLET OPERATOR
+0xfa   0x00b7  #MIDDLE DOT
+0xfb   0x221a  #SQUARE ROOT
+0xfc   0x207f  #SUPERSCRIPT LATIN SMALL LETTER N
+0xfd   0x00b2  #SUPERSCRIPT TWO
+0xfe   0x25a0  #BLACK SQUARE
+0xff   0x00a0  #NO-BREAK SPACE
+
diff --git a/codepage/cptable.pl b/codepage/cptable.pl
new file mode 100755 (executable)
index 0000000..c183d08
--- /dev/null
@@ -0,0 +1,58 @@
+#!/usr/bin/perl
+#
+# Produce a codepage matching table.  For each 8-bit character, list
+# a primary and an alternate match (the latter used for case-insensitive
+# matching.)
+#
+# Usage:
+#      cptable.pl UnicodeData cpXXX.txt cpXXX.bin
+#
+
+($ucd, $cpin, $cpout) = @ARGV;
+
+%altcase = ();
+
+open(UCD, '<', $ucd) or die;
+while (defined($line = <UCD>)) {
+    chomp $line;
+    @f = split(/;/, $line);
+    if ($f[12] ne '') {
+       $altcase{hex $f[0]} = hex $f[12]; # Upper case equivalent
+    } elsif ($f[13] ne '') {
+       $altcase{hex $f[0]} = hex $f[13]; # Lower case equivalent
+    } elsif ($f[14] ne '') {
+       $altcase{hex $f[0]} = hex $f[14]; # Title case, would be unusual
+    } else {
+       $altcase{hex $f[0]} = hex $f[0];
+    }
+}
+close(UCD);
+
+@xtab = (undef) x 256;
+
+open(CPIN, '<', $cpin) or die;
+while (defined($line = <CPIN>)) {
+    $line =~ s/\s*(\#.*|)$//;
+    @f = split(/\s+/, $line);
+    next if (scalar @f != 2);
+    next if (hex $f[0] > 255);
+    $xtab[hex $f[0]] = hex $f[1];
+}
+close(CPIN);
+
+open(CPOUT, '>', $cpout) or die;
+for ($i = 0; $i < 256; $i++) {
+    if (!defined($xtab[$i])) {
+       $p0 = $p1 = 0xffff;
+    } else {
+       $p0 = $xtab[$i];
+       $p1 = defined($altcase{$p0}) ? $altcase{$p0} : $p0;
+    }
+    # Only the BMP is supported...
+    $p0 = 0xffff if ($p0 > 0xffff);
+    $p1 = 0xffff if ($p1 > 0xffff);
+    print CPOUT pack("vv", $p0, $p1);
+}
+close (CPOUT);
+
+    
diff --git a/codepage/gensubset.pl b/codepage/gensubset.pl
new file mode 100755 (executable)
index 0000000..5fde460
--- /dev/null
@@ -0,0 +1,38 @@
+#!/usr/bin/perl
+#
+# Generate a subset of the UnicodeData.txt file, available from
+# ftp://ftp.unicode.org/Public/UNIDATA/UnicodeData.txt
+#
+# Usage:
+#   gensubset.pl [subset files] < UnicodeData.txt > MiniUCD.txt
+#
+
+%need_these = ();
+
+foreach $file (@ARGV) {
+    open(F, '<', $file) or die;
+    while (defined($line = <F>)) {
+       $line =~ s/\s*(\#.*|)$//; # Remove comments and final blanks
+       @f = split(/\s+/, $line);
+       next if (scalar @f != 2);
+       $need_these{hex $f[1]}++;
+    }
+    close(F);
+}
+
+while (defined($line = <STDIN>)) {
+    ($v, $l) = split(/;/, $line, 2);
+    if ($v =~ /^([0-9a-f]+)\-([0-9a-f]+)$/i) {
+       $r1 = hex $1;
+       $r2 = hex $2;
+    } elsif ($v =~ /^([0-9a-f]+)$/i) {
+       $r1 = $r2 = hex $1;
+    } else {
+       next;
+    }
+    for ($r = $r1; $r <= $r2; $r++) {
+       printf "%04X;%s", $r, $l if ($need_these{$r});
+    }
+}
+
+