|  | /* | 
|  | ******************************************************************************* | 
|  | * | 
|  | *   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 <icu:state>. | 
|  | * | 
|  | *   To compile, just call a C compiler/linker with this source file. | 
|  | *   On Windows: cl ucmmerge.c | 
|  | */ | 
|  |  | 
|  | #include <stdio.h> | 
|  | #include <stdlib.h> | 
|  | #include <string.h> | 
|  |  | 
|  | 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; | 
|  | } |