16f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* 26f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org****************************************************************************** 36f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 46f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Copyright (C) 1997-2011, International Business Machines 56f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Corporation and others. All Rights Reserved. 66f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 76f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org****************************************************************************** 86f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 96f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* FILE NAME : putil.h 106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* Date Name Description 126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 05/14/98 nos Creation (content moved here from utypes.h). 136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 06/17/99 erm Added IEEE_754 146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 07/22/98 stephen Added IEEEremainder, max, min, trunc 156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 08/13/98 stephen Added isNegativeInfinity, isPositiveInfinity 166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 08/24/98 stephen Added longBitsFromDouble 176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 03/02/99 stephen Removed openFile(). Added AS400 support. 186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 04/15/99 stephen Converted to C 196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 11/15/99 helena Integrated S/390 changes for IEEE support. 206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org* 01/11/00 helena Added u_getVersion. 216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org****************************************************************************** 226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org*/ 236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#ifndef PUTIL_H 256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#define PUTIL_H 266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#include "unicode/utypes.h" 286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org /** 296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \file 306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \brief C API: Platform Utilities 316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*==========================================================================*/ 346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/* Platform utilities */ 356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/*==========================================================================*/ 366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Platform utilities isolates the platform dependencies of the 396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * libarary. For each platform which this code is ported to, these 406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * functions may have to be re-implemented. 416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Return the ICU data directory. 456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The data directory is where common format ICU data files (.dat files) 466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are loaded from. Note that normal use of the built-in ICU 476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * facilities does not require loading of an external data file; 486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * unless you are adding custom data to ICU, the data directory 496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * does not need to be set. 506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The data directory is determined as follows: 526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If u_setDataDirectory() has been called, that is it, otherwise 536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * if the ICU_DATA environment variable is set, use that, otherwise 546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * If a data directory was specifed at ICU build time 556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * <code> 566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \code 576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * #define ICU_DATA_DIR "path" 586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * \endcode 596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * </code> use that, 606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * otherwise no data directory is available. 616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @return the data directory, or an empty string ("") if no data directory has 636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * been specified. 646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 656f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 666f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 676f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE const char* U_EXPORT2 u_getDataDirectory(void); 686f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 696f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 706f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Set the ICU data directory. 716f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * The data directory is where common format ICU data files (.dat files) 726f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * are loaded from. Note that normal use of the built-in ICU 736f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * facilities does not require loading of an external data file; 746f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * unless you are adding custom data to ICU, the data directory 756f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * does not need to be set. 766f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 776f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function should be called at most once in a process, before the 786f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * first ICU operation (e.g., u_init()) that will require the loading of an 796f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * ICU data file. 806f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This function is not thread-safe. Use it before calling ICU APIs from 816f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * multiple threads. 826f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 836f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param directory The directory to be set. 846f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 856f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see u_init 866f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 876f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 886f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory); 896f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 906f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 916f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @{ 926f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Filesystem file and path separator characters. 936f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Example: '/' and ':' on Unix, '\\' and ';' on Windows. 946f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 956f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 966f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#if U_PLATFORM == U_PF_CLASSIC_MACOS 976f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_SEP_CHAR ':' 986f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_ALT_SEP_CHAR ':' 996f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_PATH_SEP_CHAR ';' 1006f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_SEP_STRING ":" 1016f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_ALT_SEP_STRING ":" 1026f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_PATH_SEP_STRING ";" 1036f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#elif U_PLATFORM_USES_ONLY_WIN32_API 1046f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_SEP_CHAR '\\' 1056f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_ALT_SEP_CHAR '/' 1066f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_PATH_SEP_CHAR ';' 1076f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_SEP_STRING "\\" 1086f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_ALT_SEP_STRING "/" 1096f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_PATH_SEP_STRING ";" 1106f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#else 1116f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_SEP_CHAR '/' 1126f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_ALT_SEP_CHAR '/' 1136f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_PATH_SEP_CHAR ':' 1146f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_SEP_STRING "/" 1156f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_FILE_ALT_SEP_STRING "/" 1166f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org# define U_PATH_SEP_STRING ":" 1176f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 1186f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1196f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** @} */ 1206f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1216f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1226f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert char characters to UChar characters. 1236f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This utility function is useful only for "invariant characters" 1246f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that are encoded in the platform default encoding. 1256f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * They are a small, constant subset of the encoding and include 1266f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * just the latin letters, digits, and some punctuation. 1276f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For details, see U_CHARSET_FAMILY. 1286f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1296f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param cs Input string, points to <code>length</code> 1306f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * character bytes from a subset of the platform encoding. 1316f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param us Output string, points to memory for <code>length</code> 1326f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode characters. 1336f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of characters to convert; this may 1346f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * include the terminating <code>NUL</code>. 1356f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1366f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see U_CHARSET_FAMILY 1376f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1386f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1396f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2 1406f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_charsToUChars(const char *cs, UChar *us, int32_t length); 1416f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1426f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org/** 1436f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Convert UChar characters to char characters. 1446f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * This utility function is useful only for "invariant characters" 1456f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * that can be encoded in the platform default encoding. 1466f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * They are a small, constant subset of the encoding and include 1476f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * just the latin letters, digits, and some punctuation. 1486f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * For details, see U_CHARSET_FAMILY. 1496f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1506f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param us Input string, points to <code>length</code> 1516f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * Unicode characters that can be encoded with the 1526f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * codepage-invariant subset of the platform encoding. 1536f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param cs Output string, points to memory for <code>length</code> 1546f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * character bytes. 1556f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @param length The number of characters to convert; this may 1566f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * include the terminating <code>NUL</code>. 1576f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * 1586f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @see U_CHARSET_FAMILY 1596f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org * @stable ICU 2.0 1606f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org */ 1616f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgU_STABLE void U_EXPORT2 1626f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.orgu_UCharsToChars(const UChar *us, char *cs, int32_t length); 1636f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org 1646f31ac30b9092fd02a8c97e5216cf53f3e4fae4jshin@chromium.org#endif 165