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
26static void
27incKey(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
41U_CFUNC int
42genres32(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}
103