Eneboo - Documentación para desarrolladores
|
00001 /************************************************************************* 00002 * 00003 * $Id$ 00004 * 00005 * Copyright (C) 1998 Bjorn Reese and Daniel Stenberg. 00006 * 00007 * Permission to use, copy, modify, and distribute this software for any 00008 * purpose with or without fee is hereby granted, provided that the above 00009 * copyright notice and this permission notice appear in all copies. 00010 * 00011 * THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR IMPLIED 00012 * WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED WARRANTIES OF 00013 * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE AUTHORS AND 00014 * CONTRIBUTORS ACCEPT NO RESPONSIBILITY IN ANY CONCEIVABLE MANNER. 00015 * 00016 ************************************************************************* 00017 * 00018 * http://ctrio.sourceforge.net/ 00019 * 00020 ************************************************************************/ 00021 00022 #ifndef TRIO_TRIO_H 00023 #define TRIO_TRIO_H 00024 00025 #if !defined(WITHOUT_TRIO) 00026 00027 /* 00028 * Use autoconf defines if present. Packages using trio must define 00029 * HAVE_CONFIG_H as a compiler option themselves. 00030 */ 00031 #if defined(HAVE_CONFIG_H) 00032 # include <config.h> 00033 #endif 00034 00035 #include "triodef.h" 00036 00037 #include <stdio.h> 00038 #include <stdlib.h> 00039 #if defined(TRIO_COMPILER_ANCIENT) 00040 # include <varargs.h> 00041 #else 00042 # include <stdarg.h> 00043 #endif 00044 00045 #ifdef __cplusplus 00046 extern "C" { 00047 #endif 00048 00049 /* 00050 * Error codes. 00051 * 00052 * Remember to add a textual description to trio_strerror. 00053 */ 00054 enum { 00055 TRIO_EOF = 1, 00056 TRIO_EINVAL = 2, 00057 TRIO_ETOOMANY = 3, 00058 TRIO_EDBLREF = 4, 00059 TRIO_EGAP = 5, 00060 TRIO_ENOMEM = 6, 00061 TRIO_ERANGE = 7, 00062 TRIO_ERRNO = 8, 00063 TRIO_ECUSTOM = 9 00064 }; 00065 00066 /* Error macros */ 00067 #define TRIO_ERROR_CODE(x) ((-(x)) & 0x00FF) 00068 #define TRIO_ERROR_POSITION(x) ((-(x)) >> 8) 00069 #define TRIO_ERROR_NAME(x) trio_strerror(x) 00070 00071 typedef int (*trio_outstream_t) TRIO_PROTO((trio_pointer_t, int)); 00072 typedef int (*trio_instream_t) TRIO_PROTO((trio_pointer_t)); 00073 00074 TRIO_CONST char *trio_strerror TRIO_PROTO((int)); 00075 00076 /************************************************************************* 00077 * Print Functions 00078 */ 00079 00080 int trio_printf TRIO_PROTO((TRIO_CONST char *format, ...)); 00081 int trio_vprintf TRIO_PROTO((TRIO_CONST char *format, va_list args)); 00082 int trio_printfv TRIO_PROTO((TRIO_CONST char *format, void **args)); 00083 00084 int trio_fprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...)); 00085 int trio_vfprintf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args)); 00086 int trio_fprintfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args)); 00087 00088 int trio_dprintf TRIO_PROTO((int fd, TRIO_CONST char *format, ...)); 00089 int trio_vdprintf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args)); 00090 int trio_dprintfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args)); 00091 00092 int trio_cprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, 00093 TRIO_CONST char *format, ...)); 00094 int trio_vcprintf TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, 00095 TRIO_CONST char *format, va_list args)); 00096 int trio_cprintfv TRIO_PROTO((trio_outstream_t stream, trio_pointer_t closure, 00097 TRIO_CONST char *format, void **args)); 00098 00099 int trio_sprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, ...)); 00100 int trio_vsprintf TRIO_PROTO((char *buffer, TRIO_CONST char *format, va_list args)); 00101 int trio_sprintfv TRIO_PROTO((char *buffer, TRIO_CONST char *format, void **args)); 00102 00103 int trio_snprintf TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...)); 00104 int trio_vsnprintf TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, 00105 va_list args)); 00106 int trio_snprintfv TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, 00107 void **args)); 00108 00109 int trio_snprintfcat TRIO_PROTO((char *buffer, size_t max, TRIO_CONST char *format, ...)); 00110 int trio_vsnprintfcat TRIO_PROTO((char *buffer, size_t bufferSize, TRIO_CONST char *format, 00111 va_list args)); 00112 00113 char *trio_aprintf TRIO_PROTO((TRIO_CONST char *format, ...)); 00114 char *trio_vaprintf TRIO_PROTO((TRIO_CONST char *format, va_list args)); 00115 00116 int trio_asprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, ...)); 00117 int trio_vasprintf TRIO_PROTO((char **ret, TRIO_CONST char *format, va_list args)); 00118 00119 /************************************************************************* 00120 * Scan Functions 00121 */ 00122 int trio_scanf TRIO_PROTO((TRIO_CONST char *format, ...)); 00123 int trio_vscanf TRIO_PROTO((TRIO_CONST char *format, va_list args)); 00124 int trio_scanfv TRIO_PROTO((TRIO_CONST char *format, void **args)); 00125 00126 int trio_fscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, ...)); 00127 int trio_vfscanf TRIO_PROTO((FILE *file, TRIO_CONST char *format, va_list args)); 00128 int trio_fscanfv TRIO_PROTO((FILE *file, TRIO_CONST char *format, void **args)); 00129 00130 int trio_dscanf TRIO_PROTO((int fd, TRIO_CONST char *format, ...)); 00131 int trio_vdscanf TRIO_PROTO((int fd, TRIO_CONST char *format, va_list args)); 00132 int trio_dscanfv TRIO_PROTO((int fd, TRIO_CONST char *format, void **args)); 00133 00134 int trio_cscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, 00135 TRIO_CONST char *format, ...)); 00136 int trio_vcscanf TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, 00137 TRIO_CONST char *format, va_list args)); 00138 int trio_cscanfv TRIO_PROTO((trio_instream_t stream, trio_pointer_t closure, 00139 TRIO_CONST char *format, void **args)); 00140 00141 int trio_sscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, ...)); 00142 int trio_vsscanf TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, va_list args)); 00143 int trio_sscanfv TRIO_PROTO((TRIO_CONST char *buffer, TRIO_CONST char *format, void **args)); 00144 00145 /************************************************************************* 00146 * Locale Functions 00147 */ 00148 void trio_locale_set_decimal_point TRIO_PROTO((char *decimalPoint)); 00149 void trio_locale_set_thousand_separator TRIO_PROTO((char *thousandSeparator)); 00150 void trio_locale_set_grouping TRIO_PROTO((char *grouping)); 00151 00152 /************************************************************************* 00153 * Renaming 00154 */ 00155 #ifdef TRIO_REPLACE_STDIO 00156 /* Replace the <stdio.h> functions */ 00157 #ifndef HAVE_PRINTF 00158 # define printf trio_printf 00159 #endif 00160 #ifndef HAVE_VPRINTF 00161 # define vprintf trio_vprintf 00162 #endif 00163 #ifndef HAVE_FPRINTF 00164 # define fprintf trio_fprintf 00165 #endif 00166 #ifndef HAVE_VFPRINTF 00167 # define vfprintf trio_vfprintf 00168 #endif 00169 #ifndef HAVE_SPRINTF 00170 # define sprintf trio_sprintf 00171 #endif 00172 #ifndef HAVE_VSPRINTF 00173 # define vsprintf trio_vsprintf 00174 #endif 00175 #ifndef HAVE_SNPRINTF 00176 # define snprintf trio_snprintf 00177 #endif 00178 #ifndef HAVE_VSNPRINTF 00179 # define vsnprintf trio_vsnprintf 00180 #endif 00181 #ifndef HAVE_SCANF 00182 # define scanf trio_scanf 00183 #endif 00184 #ifndef HAVE_VSCANF 00185 # define vscanf trio_vscanf 00186 #endif 00187 #ifndef HAVE_FSCANF 00188 # define fscanf trio_fscanf 00189 #endif 00190 #ifndef HAVE_VFSCANF 00191 # define vfscanf trio_vfscanf 00192 #endif 00193 #ifndef HAVE_SSCANF 00194 # define sscanf trio_sscanf 00195 #endif 00196 #ifndef HAVE_VSSCANF 00197 # define vsscanf trio_vsscanf 00198 #endif 00199 /* These aren't stdio functions, but we make them look similar */ 00200 #define dprintf trio_dprintf 00201 #define vdprintf trio_vdprintf 00202 #define aprintf trio_aprintf 00203 #define vaprintf trio_vaprintf 00204 #define asprintf trio_asprintf 00205 #define vasprintf trio_vasprintf 00206 #define dscanf trio_dscanf 00207 #define vdscanf trio_vdscanf 00208 #endif 00209 00210 #ifdef __cplusplus 00211 } /* extern "C" */ 00212 #endif 00213 00214 #endif /* WITHOUT_TRIO */ 00215 00216 #endif /* TRIO_TRIO_H */