| /* Copyright (C) 1999-2003 Free Software Foundation, Inc. | 
 |    This file is part of the GNU LIBICONV Library. | 
 |  | 
 |    The GNU LIBICONV Library is free software; you can redistribute it | 
 |    and/or modify it under the terms of the GNU Library General Public | 
 |    License as published by the Free Software Foundation; either version 2 | 
 |    of the License, or (at your option) any later version. | 
 |  | 
 |    The GNU LIBICONV Library is distributed in the hope that it will be | 
 |    useful, but WITHOUT ANY WARRANTY; without even the implied warranty of | 
 |    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU | 
 |    Library General Public License for more details. | 
 |  | 
 |    You should have received a copy of the GNU Library General Public | 
 |    License along with the GNU LIBICONV Library; see the file COPYING.LIB. | 
 |    If not, write to the Free Software Foundation, Inc., 59 Temple Place - | 
 |    Suite 330, Boston, MA 02111-1307, USA.  */ | 
 |  | 
 | /* When installed, this file is called "iconv.h". */ | 
 |  | 
 | #ifndef _LIBICONV_H | 
 | #define _LIBICONV_H | 
 |  | 
 | #define _LIBICONV_VERSION 0x0109    /* version number: (major<<8) + minor */ | 
 | extern int _libiconv_version;       /* Likewise */ | 
 |  | 
 | /* We would like to #include any system header file which could define | 
 |    iconv_t, 1. in order to eliminate the risk that the user gets compilation | 
 |    errors because some other system header file includes /usr/include/iconv.h | 
 |    which defines iconv_t or declares iconv after this file, 2. when compiling | 
 |    for LIBICONV_PLUG, we need the proper iconv_t type in order to produce | 
 |    binary compatible code. | 
 |    But gcc's #include_next is not portable. Thus, once libiconv's iconv.h | 
 |    has been installed in /usr/local/include, there is no way any more to | 
 |    include the original /usr/include/iconv.h. We simply have to get away | 
 |    without it. | 
 |    Ad 1. The risk that a system header file does | 
 |    #include "iconv.h"  or  #include_next "iconv.h" | 
 |    is small. They all do #include <iconv.h>. | 
 |    Ad 2. The iconv_t type is a pointer type in all cases I have seen. (It | 
 |    has to be a scalar type because (iconv_t)(-1) is a possible return value | 
 |    from iconv_open().) */ | 
 |  | 
 | /* Define iconv_t ourselves. */ | 
 | #undef iconv_t | 
 | #define iconv_t libiconv_t | 
 | typedef void* iconv_t; | 
 |  | 
 | /* Get size_t declaration. */ | 
 | #include <stddef.h> | 
 |  | 
 | /* Get errno declaration and values. */ | 
 | #include <errno.h> | 
 | /* Some systems, like SunOS 4, don't have EILSEQ. Some systems, like BSD/OS, | 
 |    have EILSEQ in a different header.  On these systems, define EILSEQ | 
 |    ourselves. */ | 
 | #ifndef EILSEQ | 
 | /* Igor: called upon EILSEQ from glibc, since autogeneration of this header | 
 | 	on Windows didn't do the job. */ | 
 | /* #define EILSEQ @EILSEQ@ */ | 
 | #define EILSEQ 84 | 
 | #endif | 
 |  | 
 |  | 
 | #ifdef __cplusplus | 
 | extern "C" { | 
 | #endif | 
 |  | 
 |  | 
 | /* Allocates descriptor for code conversion from encoding `fromcode' to | 
 |    encoding `tocode'. */ | 
 | #ifndef LIBICONV_PLUG | 
 | #define iconv_open libiconv_open | 
 | #endif | 
 | extern iconv_t iconv_open (const char* tocode, const char* fromcode); | 
 |  | 
 | /* Converts, using conversion descriptor `cd', at most `*inbytesleft' bytes | 
 |    starting at `*inbuf', writing at most `*outbytesleft' bytes starting at | 
 |    `*outbuf'. | 
 |    Decrements `*inbytesleft' and increments `*inbuf' by the same amount. | 
 |    Decrements `*outbytesleft' and increments `*outbuf' by the same amount. */ | 
 | #ifndef LIBICONV_PLUG | 
 | #define iconv libiconv | 
 | #endif | 
 | extern size_t iconv (iconv_t cd, const char* * inbuf, size_t *inbytesleft, char* * outbuf, size_t *outbytesleft); | 
 |  | 
 | /* Frees resources allocated for conversion descriptor `cd'. */ | 
 | #ifndef LIBICONV_PLUG | 
 | #define iconv_close libiconv_close | 
 | #endif | 
 | extern int iconv_close (iconv_t cd); | 
 |  | 
 |  | 
 | #ifndef LIBICONV_PLUG | 
 |  | 
 | /* Nonstandard extensions. */ | 
 |  | 
 | /* Control of attributes. */ | 
 | #define iconvctl libiconvctl | 
 | extern int iconvctl (iconv_t cd, int request, void* argument); | 
 |  | 
 | /* Requests for iconvctl. */ | 
 | #define ICONV_TRIVIALP            0  /* int *argument */ | 
 | #define ICONV_GET_TRANSLITERATE   1  /* int *argument */ | 
 | #define ICONV_SET_TRANSLITERATE   2  /* const int *argument */ | 
 | #define ICONV_GET_DISCARD_ILSEQ   3  /* int *argument */ | 
 | #define ICONV_SET_DISCARD_ILSEQ   4  /* const int *argument */ | 
 |  | 
 | /* Listing of locale independent encodings. */ | 
 | #define iconvlist libiconvlist | 
 | extern void iconvlist (int (*do_one) (unsigned int namescount, | 
 |                                       const char * const * names, | 
 |                                       void* data), | 
 |                        void* data); | 
 |  | 
 | /* Support for relocatable packages.  */ | 
 |  | 
 | /* Sets the original and the current installation prefix of the package. | 
 |    Relocation simply replaces a pathname starting with the original prefix | 
 |    by the corresponding pathname with the current prefix instead.  Both | 
 |    prefixes should be directory names without trailing slash (i.e. use "" | 
 |    instead of "/").  */ | 
 | extern void libiconv_set_relocation_prefix (const char *orig_prefix, | 
 | 					    const char *curr_prefix); | 
 |  | 
 | #endif | 
 |  | 
 |  | 
 | #ifdef __cplusplus | 
 | } | 
 | #endif | 
 |  | 
 |  | 
 | #endif /* _LIBICONV_H */ |