/*
   ********************************************************************************
   *                                                                              *
   * COPYRIGHT:                                                                   *
   *   (C) Copyright International Business Machines Corporation, 1999            *
   *   Licensed Material - Program-Property of IBM - All Rights Reserved.         *
   *   US Government Users Restricted Rights - Use, duplication, or disclosure    *
   *   restricted by GSA ADP Schedule Contract with IBM Corp.                     *
   *                                                                              *
   ********************************************************************************
   *
   *
   *  uconv_io.h:
   *  defines  variables and functions pertaining to file access, and name resolution
   *  aspect of the library
 */

#ifndef UCNV_IO_H
#define UCNV_IO_H


#include "utypes.h"
#include "filestrm.h"


/*filename containing aliasing information on the converter names */
static const char CONVERTER_FILE_NAME[13] = "convrtrs.txt";
static const char CONVERTER_FILE_EXTENSION[5] = ".cnv";
static const char SPACE_SEPARATORS[4] = {'\n', '\t', ' ', 0x00};


extern char **AVAILABLE_CONVERTERS_NAMES;
extern int32_t AVAILABLE_CONVERTERS;

/*Checks if c is in the NULL terminated setOfChars */
bool_t isInSet (char c, const char *setOfChars);

/*Remove all characters followed by '#' */
U_CAPI char * U_EXPORT2 removeComments (char *line);


/*Returns pointer to the next non-whitespace (or non-separators) */
U_CAPI int32_t U_EXPORT2 nextTokenOffset (const char *line, const char *separators);

/*Copies the next string in token and returns an updated pointer to the next token */
U_CAPI char * U_EXPORT2 getToken (char *token, char *line, const char *separators);

/*Takes an alias name and returns a FileStream pointer of the requested converter table or NULL, if not found */
FileStream * U_EXPORT2 openConverterFile (const char *name);

/*Fills in the Actual name of a converter based on the convrtrs.txt file
   returns TRUE if the name was resolved FALSE otherwise */
bool_t resolveName (char *realName, const char *alias);

/*called through lazy evaluation. Sets up a hashtable containg all the aliases and an array with pointers
   to the values inside the hashtable for quick indexing */
void setupAliasTableAndAvailableConverters (UErrorCode * err);

/*Uppercases a null-terminate string */
U_CAPI char * U_EXPORT2 strtoupper (char *);

/*case insensitive hash key*/
U_CAPI int32_t U_EXPORT2 uhash_hashIString(const void* name);
#endif /* _UCNV_IO */
