/* --------------------------------------------------------- gen_cptable.c Erzeugt eine CPxxx -> UTF-8 Lookup-Tabelle mittels iconv. Beispiel: ./gen_cptable CP437 > cp437.lookup ./gen_cptable CP850 > cp850.lookup 06.07.2026 R. Seelig --------------------------------------------------------- */ #include #include #include #include #include /* ------------------------------------------------------------------------- main ------------------------------------------------------------------------- */ int main(int argc, char *argv[]) { iconv_t cd; int i; if (argc != 2) { fprintf(stderr, "Verwendung: %s \n" "Beispiel:\n\r" " %s cp437 > outputfile\n\r" " %s cp850 > outputfile\n\r" " %s cp1252 > outputfile\n\r", argv[0], argv[0], argv[0], argv[0]); return 1; } cd = iconv_open("UTF-8", argv[1]); if (cd == (iconv_t)-1) { perror("iconv_open"); return 1; } printf("const uint8_t UTF_chars[384] =\n"); printf("{\n"); for (i = 128; i < 256; i++) { uint8_t in; uint8_t out[10]; // sicherheitshalber 10, theoretisch muessten 3 reichen char *pin; char *pout; size_t inleft; size_t outleft; memset(out, 0, sizeof(out)); in = (uint8_t)i; pin = (char *)∈ pout = (char *)out; inleft = 1; outleft = sizeof(out); if (iconv(cd, &pin, &inleft, &pout, &outleft) == (size_t)-1) { out[0] = '?'; out[1] = 0; out[2] = 0; } printf(" 0x%02X,0x%02X,0x%02X, // ASCII-%d\n", out[0], out[1], out[2], i); } printf("};\n"); iconv_close(cd); return 0; }