/* ******************************************************************************* * * Copyright (C) 2000, International Business Machines * Corporation and others. All Rights Reserved. * ******************************************************************************* * file name: ucmmerge.c * encoding: US-ASCII * tab size: 8 (not used) * indentation:4 * * created on: 2000nov09 * created by: Markus W. Scherer * * This tool reads two .ucm files and merges them. * Merging the files allows to update the ICU data while keeping ICU-specific * changes like "MBCS"->"EBCDIC_STATEFUL" or adding . * * To compile, just call a C compiler/linker with this source file. * On Windows: cl ucmmerge.c */ #include #include #include extern int main(int argc, const char *argv[]) { FILE *old, *update; char line[200]; char *s, *end; unsigned long b, i, mappingsTop=0; /* open the two input files */ if(argc<3) { fprintf(stderr, "usage: %s old-ucm-filename new-ucm-filename\n", argv[0]); return 2; } old=fopen(argv[1], "r"); if(old==NULL) { fprintf(stderr, "error: unable to open %s\n", argv[1]); return 2; } update=fopen(argv[2], "r"); if(update==NULL) { fprintf(stderr, "error: unable to open %s\n", argv[2]); return 2; } /* copy old until before the "created on" line */ for(;;) { if(fgets(line, sizeof(line), old)==NULL) { return 1; } if(0==strncmp(line, "# File created on ", 18)) { break; } fputs(line, stdout); } /* skip update until before the "created on" line */ for(;;) { if(fgets(line, sizeof(line), update)==NULL) { return 1; } if(0==strncmp(line, "# File created on ", 18)) { break; } } /* copy the "created on" line from update */ fputs(line, stdout); /* copy the rest of the old header including the "CHARMAP" line */ for(;;) { if(fgets(line, sizeof(line), old)==NULL) { return 1; } fputs(line, stdout); if(0==strncmp(line, "CHARMAP", 7)) { break; } } /* skip the rest of the update header */ for(;;) { if(fgets(line, sizeof(line), update)==NULL) { return 1; } if(0==strncmp(line, "CHARMAP", 7)) { break; } } /* copy the rest of the update file */ for(;;) { if(fgets(line, sizeof(line), update)==NULL) { break; } fputs(line, stdout); } fclose(old); fclose(update); return 0; }