]> git.deb.at Git - pkg/abook.git/blob - intl/printf-args.h
f95e6bd9c95d16afecf2f304cd25b62e6aaba3a6
[pkg/abook.git] / intl / printf-args.h
1 /* Decomposed printf argument list.
2    Copyright (C) 1999, 2002-2003, 2006-2007 Free Software Foundation, Inc.
3
4    This program is free software; you can redistribute it and/or modify it
5    under the terms of the GNU Library General Public License as published
6    by the Free Software Foundation; either version 2, or (at your option)
7    any later version.
8
9    This program is distributed in the hope that it will be useful,
10    but WITHOUT ANY WARRANTY; without even the implied warranty of
11    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
12    Library General Public License for more details.
13
14    You should have received a copy of the GNU Library General Public
15    License along with this program; if not, write to the Free Software
16    Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301,
17    USA.  */
18
19 #ifndef _PRINTF_ARGS_H
20 #define _PRINTF_ARGS_H
21
22 /* This file can be parametrized with the following macros:
23      ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
24      PRINTF_FETCHARGS   Name of the function to be declared.
25      STATIC             Set to 'static' to declare the function static.  */
26
27 /* Default parameters.  */
28 #ifndef PRINTF_FETCHARGS
29 # define PRINTF_FETCHARGS printf_fetchargs
30 #endif
31
32 /* Get size_t.  */
33 #include <stddef.h>
34
35 /* Get wchar_t.  */
36 #if HAVE_WCHAR_T
37 # include <stddef.h>
38 #endif
39
40 /* Get wint_t.  */
41 #if HAVE_WINT_T
42 # include <wchar.h>
43 #endif
44
45 /* Get va_list.  */
46 #include <stdarg.h>
47
48
49 /* Argument types */
50 typedef enum
51 {
52   TYPE_NONE,
53   TYPE_SCHAR,
54   TYPE_UCHAR,
55   TYPE_SHORT,
56   TYPE_USHORT,
57   TYPE_INT,
58   TYPE_UINT,
59   TYPE_LONGINT,
60   TYPE_ULONGINT,
61 #if HAVE_LONG_LONG_INT
62   TYPE_LONGLONGINT,
63   TYPE_ULONGLONGINT,
64 #endif
65   TYPE_DOUBLE,
66   TYPE_LONGDOUBLE,
67   TYPE_CHAR,
68 #if HAVE_WINT_T
69   TYPE_WIDE_CHAR,
70 #endif
71   TYPE_STRING,
72 #if HAVE_WCHAR_T
73   TYPE_WIDE_STRING,
74 #endif
75   TYPE_POINTER,
76   TYPE_COUNT_SCHAR_POINTER,
77   TYPE_COUNT_SHORT_POINTER,
78   TYPE_COUNT_INT_POINTER,
79   TYPE_COUNT_LONGINT_POINTER
80 #if HAVE_LONG_LONG_INT
81 , TYPE_COUNT_LONGLONGINT_POINTER
82 #endif
83 #if ENABLE_UNISTDIO
84   /* The unistdio extensions.  */
85 , TYPE_U8_STRING
86 , TYPE_U16_STRING
87 , TYPE_U32_STRING
88 #endif
89 } arg_type;
90
91 /* Polymorphic argument */
92 typedef struct
93 {
94   arg_type type;
95   union
96   {
97     signed char                 a_schar;
98     unsigned char               a_uchar;
99     short                       a_short;
100     unsigned short              a_ushort;
101     int                         a_int;
102     unsigned int                a_uint;
103     long int                    a_longint;
104     unsigned long int           a_ulongint;
105 #if HAVE_LONG_LONG_INT
106     long long int               a_longlongint;
107     unsigned long long int      a_ulonglongint;
108 #endif
109     float                       a_float;
110     double                      a_double;
111     long double                 a_longdouble;
112     int                         a_char;
113 #if HAVE_WINT_T
114     wint_t                      a_wide_char;
115 #endif
116     const char*                 a_string;
117 #if HAVE_WCHAR_T
118     const wchar_t*              a_wide_string;
119 #endif
120     void*                       a_pointer;
121     signed char *               a_count_schar_pointer;
122     short *                     a_count_short_pointer;
123     int *                       a_count_int_pointer;
124     long int *                  a_count_longint_pointer;
125 #if HAVE_LONG_LONG_INT
126     long long int *             a_count_longlongint_pointer;
127 #endif
128 #if ENABLE_UNISTDIO
129     /* The unistdio extensions.  */
130     const uint8_t *             a_u8_string;
131     const uint16_t *            a_u16_string;
132     const uint32_t *            a_u32_string;
133 #endif
134   }
135   a;
136 }
137 argument;
138
139 typedef struct
140 {
141   size_t count;
142   argument *arg;
143 }
144 arguments;
145
146
147 /* Fetch the arguments, putting them into a. */
148 #ifdef STATIC
149 STATIC
150 #else
151 extern
152 #endif
153 int PRINTF_FETCHARGS (va_list args, arguments *a);
154
155 #endif /* _PRINTF_ARGS_H */