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