16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1999-2012, International Business Machines 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org******************************************************************************* 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* file name: icuinfo.cpp 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* encoding: US-ASCII 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* tab size: 8 (not used) 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* indentation:4 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created on: 2009-2010 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* created by: Steven R. Loomis 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* This program shows some basic info about the current ICU. 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdio.h> 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <stdlib.h> 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/putil.h" 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uclean.h" 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "udbgutil.h" 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unewdata.h" 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cmemory.h" 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "cstring.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "uoptions.h" 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "toolutil.h" 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "icuplugimp.h" 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <unicode/uloc.h> 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <unicode/ucnv.h> 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/ucal.h" 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include <unicode/ulocdata.h> 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "putilimp.h" 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/uchar.h" 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UOption options[]={ 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*0*/ UOPTION_HELP_H, 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*1*/ UOPTION_HELP_QUESTION_MARK, 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*2*/ UOPTION_ICUDATADIR, 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*3*/ UOPTION_VERBOSE, 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*4*/ UOPTION_DEF("list-plugins", 'L', UOPT_NO_ARG), 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*5*/ UOPTION_DEF("milisecond-time", 'm', UOPT_NO_ARG), 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*6*/ UOPTION_DEF("cleanup", 'K', UOPT_NO_ARG), 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /*7*/ UOPTION_DEF("xml", 'x', UOPT_REQUIRES_ARG), 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org}; 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UErrorCode initStatus = U_ZERO_ERROR; 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic UBool icuInitted = FALSE; 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgstatic void do_init() { 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!icuInitted) { 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_init(&initStatus); 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org icuInitted = TRUE; 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid cmd_millis() 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Milliseconds since Epoch: %.0f\n", uprv_getUTCtime()); 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid cmd_version(UBool /* noLoad */, UErrorCode &errorCode) 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org do_init(); 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udbg_writeIcuInfo(stdout); /* print the XML format */ 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org union { 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint8_t byte; 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org uint16_t word; 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } u; 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u.word=0x0100; 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_IS_BIG_ENDIAN==u.byte) { 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //printf("U_IS_BIG_ENDIAN: %d\n", U_IS_BIG_ENDIAN); 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, " error: U_IS_BIG_ENDIAN=%d != %d=actual 'is big endian'\n", 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_IS_BIG_ENDIAN, u.byte); 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_INTERNAL_PROGRAM_ERROR; 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_SIZEOF_WCHAR_T==sizeof(wchar_t)) { 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //printf("U_SIZEOF_WCHAR_T: %d\n", U_SIZEOF_WCHAR_T); 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, " error: U_SIZEOF_WCHAR_T=%d != %d=sizeof(wchar_t)\n", 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_SIZEOF_WCHAR_T, (int)sizeof(wchar_t)); 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_INTERNAL_PROGRAM_ERROR; 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int charsetFamily; 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if('A'==0x41) { 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org charsetFamily=U_ASCII_FAMILY; 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else if('A'==0xc1) { 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org charsetFamily=U_EBCDIC_FAMILY; 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org charsetFamily=-1; // unknown 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_CHARSET_FAMILY==charsetFamily) { 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org //printf("U_CHARSET_FAMILY: %d\n", U_CHARSET_FAMILY); 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, " error: U_CHARSET_FAMILY=%d != %d=actual charset family\n", 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org U_CHARSET_FAMILY, charsetFamily); 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org errorCode=U_INTERNAL_PROGRAM_ERROR; 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n\nICU Initialization returned: %s\n", u_errorName(initStatus)); 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_ENABLE_DYLOAD 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *pluginFile = uplug_getPluginFile(); 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Plugin file is: %s\n", (pluginFile&&*pluginFile)?pluginFile:"(not set. try setting ICU_PLUGINS to a directory.)"); 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "Dynamic Loading: is disabled. No plugins will be loaded at start-up.\n"); 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid cmd_cleanup() 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org{ 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_cleanup(); 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stdout, "ICU u_cleanup() called.\n"); 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgvoid cmd_listplugins() { 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org int32_t i; 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UPlugData *plug; 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org do_init(); 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("ICU Initialized: u_init() returned %s\n", u_errorName(initStatus)); 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("Plugins: \n"); 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf( "# %6s %s \n", 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Level", 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Name" ); 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf( " %10s:%-10s\n", 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Library", 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "Symbol" 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ); 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf( " config| (configuration string)\n"); 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf( " >>> Error | Explanation \n"); 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf( "-----------------------------------\n"); 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org for(i=0;(plug=uplug_getPlugInternal(i))!=NULL;i++) { 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode libStatus = U_ZERO_ERROR; 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *name = uplug_getPlugName(plug); 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *sym = uplug_getSymbolName(plug); 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *lib = uplug_getLibraryName(plug, &libStatus); 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *config = uplug_getConfiguration(plug); 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode loadStatus = uplug_getPlugLoadStatus(plug); 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org const char *message = NULL; 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\n#%d %-6s %s \n", 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org i+1, 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udbg_enumName(UDBG_UPlugLevel,(int32_t)uplug_getPlugLevel(plug)), 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org name!=NULL?(*name?name:"this plugin did not call uplug_setPlugName()"):"(null)" 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ); 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf(" plugin| %10s:%-10s\n", 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org (U_SUCCESS(libStatus)?(lib!=NULL?lib:"(null)"):u_errorName(libStatus)), 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org sym!=NULL?sym:"(null)" 1656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ); 1666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(config!=NULL&&*config) { 1686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf(" config| %s\n", config); 1696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org switch(loadStatus) { 1726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_PLUGIN_CHANGED_LEVEL_WARNING: 1736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org message = "Note: This plugin changed the system level (by allocating memory or calling something which does). Later plugins may not load."; 1746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_PLUGIN_DIDNT_SET_LEVEL: 1776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org message = "Error: This plugin did not call uplug_setPlugLevel during QUERY."; 1786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_PLUGIN_TOO_HIGH: 1816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org message = "Error: This plugin couldn't load because the system level was too high. Try loading this plugin earlier."; 1826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org case U_ZERO_ERROR: 1856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org message = NULL; /* no message */ 1866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org break; 1876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org default: 1886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(U_FAILURE(loadStatus)) { 1896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org message = "error loading:"; 1906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } else { 1916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org message = "warning during load:"; 1926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(message!=NULL) { 1966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("\\\\\\ status| %s\n" 1976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "/// %s\n", u_errorName(loadStatus), message); 1986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 1996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(i==0) { 2026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org printf("No plugins loaded.\n"); 2036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 2066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgextern int 2106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgmain(int argc, char* argv[]) { 2116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UErrorCode errorCode = U_ZERO_ERROR; 2126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org UBool didSomething = FALSE; 2136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* preset then read command line options */ 2156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org argc=u_parseArgs(argc, argv, sizeof(options)/sizeof(options[0]), options); 2166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* error handling, printing usage message */ 2186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(argc<0) { 2196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, 2206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "error in command line argument \"%s\"\n", 2216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org argv[-argc]); 2226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if( options[0].doesOccur || options[1].doesOccur) { 2246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "%s: Output information about the current ICU\n", argv[0]); 2256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "Options:\n" 2266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " -h or --help - Print this help message.\n" 2276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " -m or --millisecond-time - Print the current UTC time in milliseconds.\n" 2286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " -d <dir> or --icudatadir <dir> - Set the ICU Data Directory\n" 2296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " -v - Print version and configuration information about ICU\n" 2306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " -L or --list-plugins - List and diagnose issues with ICU Plugins\n" 2316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org " -K or --cleanup - Call u_cleanup() before exitting (will attempt to unload plugins)\n" 2326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "\n" 2336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org "If no arguments are given, the tool will print ICU version and configuration information.\n" 2346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org ); 2356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr, "International Components for Unicode %s\n%s\n", U_ICU_VERSION, U_COPYRIGHT_STRING ); 2366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return argc<0 ? U_ILLEGAL_ARGUMENT_ERROR : U_ZERO_ERROR; 2376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[2].doesOccur) { 2406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org u_setDataDirectory(options[2].value); 2416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[5].doesOccur) { 2446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cmd_millis(); 2456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org didSomething=TRUE; 2466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[4].doesOccur) { 2486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cmd_listplugins(); 2496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org didSomething = TRUE; 2506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[3].doesOccur) { 2536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cmd_version(FALSE, errorCode); 2546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org didSomething = TRUE; 2556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[7].doesOccur) { /* 2nd part of version: cleanup */ 2586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org FILE *out = fopen(options[7].value, "w"); 2596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(out==NULL) { 2606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(stderr,"ERR: can't write to XML file %s\n", options[7].value); 2616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return 1; 2626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /* todo: API for writing DTD? */ 2646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fprintf(out, "<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\n"); 2656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org udbg_writeIcuInfo(out); 2666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org fclose(out); 2676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org didSomething = TRUE; 2686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(options[6].doesOccur) { /* 2nd part of version: cleanup */ 2716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cmd_cleanup(); 2726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org didSomething = TRUE; 2736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org if(!didSomething) { 2766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org cmd_version(FALSE, errorCode); /* at least print the version # */ 2776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org } 2786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 2796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org return U_FAILURE(errorCode); 2806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org} 281