fb74bfaee6
X-SVN-Rev: 2907
108 lines
2.7 KiB
C
108 lines
2.7 KiB
C
/*
|
|
*******************************************************************************
|
|
*
|
|
* 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;
|
|
}
|