home *** CD-ROM | disk | FTP | other *** search
/ Clickx 115 / Clickx 115.iso / software / tools / windows / tails-i386-0.16.iso / live / filesystem.squashfs / usr / share / gettext / intl / printf-args.h < prev    next >
Encoding:
C/C++ Source or Header  |  2010-09-19  |  3.8 KB  |  156 lines

  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 */
  156.