OLD | NEW |
(Empty) | |
| 1 /* |
| 2 ******************************************************************************* |
| 3 * |
| 4 * Copyright (C) 2003-2006, International Business Machines |
| 5 * Corporation and others. All Rights Reserved. |
| 6 * |
| 7 ******************************************************************************* |
| 8 * file name: genres32.c |
| 9 * encoding: US-ASCII |
| 10 * tab size: 8 (not used) |
| 11 * indentation:4 |
| 12 * |
| 13 * created on: 2003sep10 |
| 14 * created by: Markus W. Scherer |
| 15 * |
| 16 * Write an ICU resource bundle with a table whose |
| 17 * number of key characters and number of items both exceed 64k. |
| 18 * Writing it as the root table tests also that |
| 19 * the new table type is recognized for the root resource by the reader code. |
| 20 */ |
| 21 #include <stdio.h> |
| 22 #include "unicode/putil.h" |
| 23 #include "cstring.h" |
| 24 #include "gentest.h" |
| 25 |
| 26 static void |
| 27 incKey(char *key, char *limit) { |
| 28 char c; |
| 29 |
| 30 while(limit>key) { |
| 31 c=*--limit; |
| 32 if(c=='o') { |
| 33 *limit='1'; |
| 34 break; |
| 35 } else { |
| 36 *limit='o'; |
| 37 } |
| 38 } |
| 39 } |
| 40 |
| 41 U_CFUNC int |
| 42 genres32(const char *prog, const char *path) { |
| 43 /* |
| 44 * key string, gets incremented binary numbers |
| 45 * letter 'o'=0 and digit '1'=1 so that data swapping can be tested |
| 46 * with reordering (ASCII: '1'<'o' EBCDIC: '1'>'o') |
| 47 * |
| 48 * need 17 digits for >64k unique items |
| 49 */ |
| 50 char key[20]="ooooooooooooooooo"; |
| 51 char *limit; |
| 52 int i; |
| 53 char file[512]; |
| 54 FILE *out; |
| 55 |
| 56 uprv_strcpy(file,path); |
| 57 if(file[strlen(file)-1]!=U_FILE_SEP_CHAR) { |
| 58 uprv_strcat(file,U_FILE_SEP_STRING); |
| 59 } |
| 60 uprv_strcat(file,"testtable32.txt"); |
| 61 out = fopen(file, "w"); |
| 62 /*puts(file);*/ |
| 63 puts("Generating testtable32.txt"); |
| 64 if(out == NULL) { |
| 65 fprintf(stderr, "%s: Couldn't create resource test file %s\n", |
| 66 prog, file); |
| 67 return 1; |
| 68 } |
| 69 |
| 70 /* find the limit of the key string */ |
| 71 for(limit=key; *limit!=0; ++limit) { |
| 72 } |
| 73 |
| 74 /* output the beginning of the bundle */ |
| 75 fputs( |
| 76 "testtable32 {", out |
| 77 ); |
| 78 |
| 79 /* output the table entries */ |
| 80 for(i=0; i<66000; ++i) { |
| 81 if(i%10==0) { |
| 82 /* |
| 83 * every 10th entry contains a string with |
| 84 * the entry index as its code point |
| 85 */ |
| 86 fprintf(out, "%s{\"\\U%08x\"}\n", key, i); |
| 87 } else { |
| 88 /* other entries contain their index as an integer */ |
| 89 fprintf(out, "%s:int{%d}\n", key, i); |
| 90 } |
| 91 |
| 92 incKey(key, limit); |
| 93 } |
| 94 |
| 95 /* output the end of the bundle */ |
| 96 fputs( |
| 97 "}", out |
| 98 ); |
| 99 |
| 100 fclose(out); |
| 101 return 0; |
| 102 } |
OLD | NEW |