|
Packit |
57a33d |
#include <stdio.h>
|
|
Packit |
57a33d |
#define NO_CHR 0xffff
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
int
|
|
Packit |
57a33d |
main(int argc, char *argv[])
|
|
Packit |
57a33d |
{
|
|
Packit |
57a33d |
unsigned int target_map[0x100];
|
|
Packit |
57a33d |
unsigned int source_map[0x100];
|
|
Packit |
57a33d |
unsigned char xlt[0x100];
|
|
Packit |
57a33d |
unsigned int ucs2_map[0x10000];
|
|
Packit |
57a33d |
FILE *f;
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
int i;
|
|
Packit |
57a33d |
int c;
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
f = fopen(argv[1], "r");
|
|
Packit |
57a33d |
for (i = 0; i < 0x100; i++)
|
|
Packit |
57a33d |
fscanf(f, "%x", source_map + i);
|
|
Packit |
57a33d |
fclose(f);
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
f = fopen(argv[2], "r");
|
|
Packit |
57a33d |
for (i = 0; i < 0x100; i++)
|
|
Packit |
57a33d |
fscanf(f, "%x", target_map + i);
|
|
Packit |
57a33d |
fclose(f);
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
for (i = 0; i < 0x100; i++)
|
|
Packit |
57a33d |
xlt[i] = (unsigned char)i;
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
for (i = 0; i < 0x10000; i++)
|
|
Packit |
57a33d |
ucs2_map[i] = NO_CHR;
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
for (i = 0xff; i >= 0; i--) {
|
|
Packit |
57a33d |
if (target_map[i] != NO_CHR)
|
|
Packit |
57a33d |
ucs2_map[target_map[i]] = (unsigned int)i;
|
|
Packit |
57a33d |
}
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
for (i = 0xff; i >= 0; i--) {
|
|
Packit |
57a33d |
if (source_map[i] != NO_CHR
|
|
Packit |
57a33d |
&& ucs2_map[source_map[i]] != NO_CHR)
|
|
Packit |
57a33d |
xlt[i] = (unsigned char)ucs2_map[source_map[i]];
|
|
Packit |
57a33d |
}
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
while ((c = getchar()) != EOF)
|
|
Packit |
57a33d |
putchar(xlt[c]);
|
|
Packit |
57a33d |
|
|
Packit |
57a33d |
return 0;
|
|
Packit |
57a33d |
}
|
|
Packit |
57a33d |
/* vim: ts=2
|
|
Packit |
57a33d |
*/
|