blob: c0cffd3ca5bfc37a596f4d5f8fd72adcd3336bc3 [file] [log] [blame]
/*
*******************************************************************************
*
* 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;
}