1ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/*
2ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*******************************************************************************
3ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
4ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   Copyright (C) 2001 - 2005, International Business Machines
5ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   Corporation and others.  All Rights Reserved.
6ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
7ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*******************************************************************************
8ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   file name:  main.cpp
9ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   encoding:   US-ASCII
10ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   tab size:   8 (not used)
11ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   indentation:4
12ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*
13ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   created on: 2001jul24
14ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*   created by: Vladimir Weinstein
15ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru*/
16ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
17ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru/******************************************************************************
18ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru * main program demonstrating using two versions of ICU in the same project
19ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru ******************************************************************************/
20ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
21ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include <stdio.h>
22ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/utypes.h"
23ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#include "unicode/ustring.h"
24ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
25ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruextern "C" void test_current(UChar data[][5], uint32_t size, uint32_t maxLen, uint8_t keys[][32]);
26ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruextern "C" void test_legacy(UChar data[][5], uint32_t size, uint32_t maxlen, uint8_t keys[][32]);
27ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
28ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid printZTUChar(const UChar *str) {
29ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  while(*str != 0) {
30ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    if(*str > 0x1F && *str < 0x80) {
31ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      fprintf(stdout, "%c", (*str) & 0xFF);
32ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    } else {
33ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      fprintf(stdout, "\\u%04X", *str);
34ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
35ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    str++;
36ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
37ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
38ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
39ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid printArray(const char* const comment, const UChar UArray[][5], int32_t arraySize) {
40ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  fprintf (stdout, "%s\n", comment);
41ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  int32_t i = 0;
42ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  for(i = 0; i<arraySize; i++) {
43ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fprintf(stdout, "%d ", i);
44ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    printZTUChar(UArray[i]);
45ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fprintf(stdout, "\n");
46ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
47ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
48ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
49ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruvoid printKeys(const char *comment, uint8_t keys[][32], int32_t keySize) {
50ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  int32_t i = 0;
51ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  uint8_t *currentKey = NULL;
52ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  fprintf(stdout, "%s\n", comment);
53ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  for(i = 0; i<keySize; i++) {
54ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    currentKey = keys[i];
55ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    while(*currentKey != 0) {
56ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      if(*currentKey == 1) {
57ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        fprintf(stdout, "01 ");
58ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      } else {
59ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru        fprintf(stdout, "%02X", *currentKey);
60ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      }
61ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      currentKey++;
62ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    }
63ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    fprintf(stdout, " 00\n");
64ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
65ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
66ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
67ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
68ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru//int main(int argc, const char * const argv[]) {
69ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queruint main(int, const char * const *) {
70ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  static const char* test[4] = {
71ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    "\\u304D\\u3085\\u3046\\u0000",
72ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    "\\u30AD\\u30E6\\u30A6\\u0000",
73ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    "\\u304D\\u3086\\u3046\\u0000",
74ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    "\\u30AD\\u30E5\\u30A6\\u0000"
75ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  };
76ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
77ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#if 0
78ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  static const char* test2[4] = {
79ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    "dbc\\u0000",
80ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      "cbc\\u0000",
81ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      "bbc\\u0000",
82ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru      "abc\\u0000"
83ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  };
84ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru#endif
85ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
86ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  static UChar uTest[4][5];
87ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
88ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  static uint8_t keys[4][32];
89ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
90ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  uint32_t i = 0;
91ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
92ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  for(i = 0; i<4; i++) {
93ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    u_unescape(test[i], uTest[i], 5);
94ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
95ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  printArray("Before current", uTest, 4);
96ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  test_current(uTest, 4, 5, keys);
97ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  printArray("After current", uTest, 4);
98ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  printKeys("Current keys", keys, 4);
99ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
100ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  for(i = 0; i<4; i++) {
101ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru    u_unescape(test[i], uTest[i], 5);
102ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  }
103ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  printArray("Before legacy", uTest, 4);
104ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  test_legacy(uTest, 4, 5, keys);
105ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  printArray("After legacy", uTest, 4);
106ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  printKeys("Legacy keys", keys, 4);
107ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
108ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru
109ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru  return 0;
110ac04d0bbe12b3ef54518635711412f178cb4d16Jean-Baptiste Queru}
111