ref: d0ab3a0dd8f6355b3603d0fb04043a9ae867639b
dir: /appl/lib/convcs/genjisx0201kana.b/
implement genjisx0201kana;
include "sys.m";
include "draw.m";
genjisx0201kana : module {
init: fn(ctxt: ref Draw->Context, args: list of string);
};
DATAFILE : con "/lib/convcs/jisx0201kana";
init(nil: ref Draw->Context, nil: list of string)
{
sys := load Sys Sys->PATH;
fd := sys->create(DATAFILE, Sys->OWRITE, 8r644);
if (fd == nil) {
sys->print("cannot create %s: %r\n", DATAFILE);
return;
}
s := "";
for (slen := 0; slen < len mapdata; slen ++) {
(nil, code) := sys->tokenize(mapdata[slen], " \t");
u := hex2int(hd tl code);
s[slen] = u;
}
buf := array of byte s;
sys->write(fd, buf, len buf);
}
hex2int(s: string): int
{
n := 0;
for (i := 0; i < len s; i++) {
case s[i] {
'0' to '9' =>
n = 16*n + s[i] - '0';
'A' to 'F' =>
n = 16*n + s[i] + 10 - 'A';
'a' to 'f' =>
n = 16*n + s[i] + 10 - 'a';
* =>
return n;
}
}
return n;
}
# data derived from Unicode Consortium "CharmapML" data for EUC-JP
# (G2 charset of EUC-JP is JIS X 0201 Kana)
# the leading code point value is not used, it just appears for convenience
mapdata := array [] of {
"A1 FF61",
"A2 FF62",
"A3 FF63",
"A4 FF64",
"A5 FF65",
"A6 FF66",
"A7 FF67",
"A8 FF68",
"A9 FF69",
"AA FF6A",
"AB FF6B",
"AC FF6C",
"AD FF6D",
"AE FF6E",
"AF FF6F",
"B0 FF70",
"B1 FF71",
"B2 FF72",
"B3 FF73",
"B4 FF74",
"B5 FF75",
"B6 FF76",
"B7 FF77",
"B8 FF78",
"B9 FF79",
"BA FF7A",
"BB FF7B",
"BC FF7C",
"BD FF7D",
"BE FF7E",
"BF FF7F",
"C0 FF80",
"C1 FF81",
"C2 FF82",
"C3 FF83",
"C4 FF84",
"C5 FF85",
"C6 FF86",
"C7 FF87",
"C8 FF88",
"C9 FF89",
"CA FF8A",
"CB FF8B",
"CC FF8C",
"CD FF8D",
"CE FF8E",
"CF FF8F",
"D0 FF90",
"D1 FF91",
"D2 FF92",
"D3 FF93",
"D4 FF94",
"D5 FF95",
"D6 FF96",
"D7 FF97",
"D8 FF98",
"D9 FF99",
"DA FF9A",
"DB FF9B",
"DC FF9C",
"DD FF9D",
"DE FF9E",
"DF FF9F",
};