18e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*
28e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project******************************************************************************
38e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
48e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   Copyright (C) 1997-2004, International Business Machines
58e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   Corporation and others.  All Rights Reserved.
68e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
78e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project******************************************************************************
88e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
98e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*  FILE NAME : putil.h
108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*
118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   Date        Name        Description
128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   05/14/98    nos         Creation (content moved here from utypes.h).
138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   06/17/99    erm         Added IEEE_754
148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   07/22/98    stephen     Added IEEEremainder, max, min, trunc
158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   08/13/98    stephen     Added isNegativeInfinity, isPositiveInfinity
168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   08/24/98    stephen     Added longBitsFromDouble
178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   03/02/99    stephen     Removed openFile().  Added AS400 support.
188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   04/15/99    stephen     Converted to C
198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   11/15/99    helena      Integrated S/390 changes for IEEE support.
208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*   01/11/00    helena      Added u_getVersion.
218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project******************************************************************************
228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project*/
238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef PUTIL_H
258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#define PUTIL_H
268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#include "unicode/utypes.h"
288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* Define this to 1 if your platform supports IEEE 754 floating point,
308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project   to 0 if it does not. */
318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifndef IEEE_754
328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define IEEE_754 1
338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*==========================================================================*/
368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/* Platform utilities                                                       */
378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/*==========================================================================*/
388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Platform utilities isolates the platform dependencies of the
418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * libarary.  For each platform which this code is ported to, these
428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * functions may have to be re-implemented.
438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Return the ICU data directory.
478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The data directory is where common format ICU data files (.dat files)
488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *   are loaded from.  Note that normal use of the built-in ICU
498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *   facilities does not require loading of an external data file;
508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *   unless you are adding custom data to ICU, the data directory
518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *   does not need to be set.
528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The data directory is determined as follows:
548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    If u_setDataDirectory() has been called, that is it, otherwise
558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    if the ICU_DATA environment variable is set, use that, otherwise
568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    If a data directory was specifed at ICU build time
578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *      (#define ICU_DATA_DIR "path"), use that,
588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *    otherwise no data directory is available.
598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return the data directory, or an empty string ("") if no data directory has
618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *         been specified.
628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0
648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE const char* U_EXPORT2 u_getDataDirectory(void);
668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Set the ICU data directory.
698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * The data directory is where common format ICU data files (.dat files)
708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *   are loaded from.  Note that normal use of the built-in ICU
718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *   facilities does not require loading of an external data file;
728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *   unless you are adding custom data to ICU, the data directory
738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *   does not need to be set.
748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This function should be called at most once in a process, before the
768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * first ICU operation (e.g., u_init()) that will require the loading of an
778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * ICU data file.
788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This function is not thread-safe. Use it before calling ICU APIs from
798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * multiple threads.
808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
818e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param directory The directory to be set.
828e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
838e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see u_init
848e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0
858e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
868e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE void U_EXPORT2 u_setDataDirectory(const char *directory);
878e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
888e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
898e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Please use ucnv_getDefaultName() instead.
908e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Return the default codepage for this platform and locale.
918e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This function can call setlocale() on Unix platforms. Please read the
928e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * platform documentation on setlocale() before calling this function.
938e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return the default codepage for this platform
948e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @internal
958e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
968e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_INTERNAL const char*  U_EXPORT2 uprv_getDefaultCodepage(void);
978e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
988e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
998e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Please use uloc_getDefault() instead.
1008e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Return the default locale ID string by querying ths system, or
1018e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *     zero if one cannot be found.
1028e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This function can call setlocale() on Unix platforms. Please read the
1038e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * platform documentation on setlocale() before calling this function.
1048e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @return the default locale ID string
1058e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @internal
1068e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1078e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_INTERNAL const char*  U_EXPORT2 uprv_getDefaultLocaleID(void);
1088e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1098e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
1108e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Filesystem file and path separator characters.
1118e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Example: '/' and ':' on Unix, '\\' and ';' on Windows.
1128e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0
1138e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1148e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#ifdef XP_MAC
1158e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_SEP_CHAR ':'
1168e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_ALT_SEP_CHAR ':'
1178e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_PATH_SEP_CHAR ';'
1188e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_SEP_STRING ":"
1198e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_ALT_SEP_STRING ":"
1208e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_PATH_SEP_STRING ";"
1218e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#elif defined(WIN32) || defined(OS2)
1228e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_SEP_CHAR '\\'
1238e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_ALT_SEP_CHAR '/'
1248e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_PATH_SEP_CHAR ';'
1258e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_SEP_STRING "\\"
1268e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_ALT_SEP_STRING "/"
1278e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_PATH_SEP_STRING ";"
1288e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#else
1298e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_SEP_CHAR '/'
1308e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_ALT_SEP_CHAR '/'
1318e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_PATH_SEP_CHAR ':'
1328e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_SEP_STRING "/"
1338e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_FILE_ALT_SEP_STRING "/"
1348e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#   define U_PATH_SEP_STRING ":"
1358e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
1368e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1378e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
1388e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Convert char characters to UChar characters.
1398e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This utility function is useful only for "invariant characters"
1408e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * that are encoded in the platform default encoding.
1418e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * They are a small, constant subset of the encoding and include
1428e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * just the latin letters, digits, and some punctuation.
1438e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For details, see U_CHARSET_FAMILY.
1448e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
1458e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param cs Input string, points to <code>length</code>
1468e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           character bytes from a subset of the platform encoding.
1478e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param us Output string, points to memory for <code>length</code>
1488e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           Unicode characters.
1498e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param length The number of characters to convert; this may
1508e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *               include the terminating <code>NUL</code>.
1518e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
1528e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see U_CHARSET_FAMILY
1538e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0
1548e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1558e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE void U_EXPORT2
1568e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectu_charsToUChars(const char *cs, UChar *us, int32_t length);
1578e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1588e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project/**
1598e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * Convert UChar characters to char characters.
1608e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * This utility function is useful only for "invariant characters"
1618e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * that can be encoded in the platform default encoding.
1628e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * They are a small, constant subset of the encoding and include
1638e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * just the latin letters, digits, and some punctuation.
1648e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * For details, see U_CHARSET_FAMILY.
1658e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
1668e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param us Input string, points to <code>length</code>
1678e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           Unicode characters that can be encoded with the
1688e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           codepage-invariant subset of the platform encoding.
1698e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param cs Output string, points to memory for <code>length</code>
1708e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *           character bytes.
1718e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @param length The number of characters to convert; this may
1728e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *               include the terminating <code>NUL</code>.
1738e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project *
1748e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @see U_CHARSET_FAMILY
1758e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project * @stable ICU 2.0
1768e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project */
1778e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source ProjectU_STABLE void U_EXPORT2
1788e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Projectu_UCharsToChars(const UChar *us, char *cs, int32_t length);
1798e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project
1808e35f3cfc7fba1d1c829dc557ebad6409cbe16a2The Android Open Source Project#endif
181