xref: /dragonfly/lib/libc/stdio/printflocal.h (revision 839f7d6207d1654b664a46f2905d559773779bc3)
1 /*-
2  * Copyright (c) 1990, 1993
3  *        The Regents of the University of California.  All rights reserved.
4  *
5  * This code is derived from software contributed to Berkeley by
6  * Chris Torek.
7  *
8  * Redistribution and use in source and binary forms, with or without
9  * modification, are permitted provided that the following conditions
10  * are met:
11  * 1. Redistributions of source code must retain the above copyright
12  *    notice, this list of conditions and the following disclaimer.
13  * 2. Redistributions in binary form must reproduce the above copyright
14  *    notice, this list of conditions and the following disclaimer in the
15  *    documentation and/or other materials provided with the distribution.
16  * 3. Neither the name of the University nor the names of its contributors
17  *    may be used to endorse or promote products derived from this software
18  *    without specific prior written permission.
19  *
20  * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
21  * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
22  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
23  * ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
24  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
25  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
26  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
27  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
28  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
29  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
30  * SUCH DAMAGE.
31  *
32  * $FreeBSD: src/lib/libc/stdio/printflocal.h,v 1.3 2009/03/02 04:07:58 das Exp $
33  */
34 
35 /*
36  * Flags used during conversion.
37  */
38 #define   ALT                 0x001               /* alternate form */
39 #define   LADJUST             0x004               /* left adjustment */
40 #define   LONGDBL             0x008               /* long double */
41 #define   LONGINT             0x010               /* long integer */
42 #ifdef __DragonFly__ /* Non-standard extension: L and ll are equivalent */
43 #define   LLONGINT  LONGDBL             /* long double / long long integer */
44 #else
45 #define   LLONGINT  0x020               /* long long integer */
46 #endif
47 #define   SHORTINT  0x040               /* short integer */
48 #define   ZEROPAD             0x080               /* zero (as opposed to blank) pad */
49 #define   FPT                 0x100               /* Floating point number */
50 #define   GROUPING  0x200               /* use grouping ("'" flag) */
51                                                   /* C99 additional size modifiers: */
52 #define   SIZET               0x400               /* size_t */
53 #define   PTRDIFFT  0x800               /* ptrdiff_t */
54 #define   INTMAXT             0x1000              /* intmax_t */
55 #define   CHARINT             0x2000              /* print char using int format */
56 
57 /*
58  * Macros for converting digits to letters and vice versa
59  */
60 #define   to_digit(c)         ((c) - '0')
61 #define is_digit(c) ((unsigned)to_digit(c) <= 9)
62 #define   to_char(n)          ((n) + '0')
63 
64 /* Size of the static argument table. */
65 #define STATIC_ARG_TBL_SIZE 8
66 
67 union arg {
68           int       intarg;
69           u_int     uintarg;
70           long      longarg;
71           u_long    ulongarg;
72           long long longlongarg;
73           unsigned long long ulonglongarg;
74           ptrdiff_t ptrdiffarg;
75           size_t    sizearg;
76           intmax_t intmaxarg;
77           uintmax_t uintmaxarg;
78           void      *pvoidarg;
79           char      *pchararg;
80           signed char *pschararg;
81           short     *pshortarg;
82           int       *pintarg;
83           long      *plongarg;
84           long long *plonglongarg;
85           ptrdiff_t *pptrdiffarg;
86           ssize_t   *pssizearg;
87           intmax_t *pintmaxarg;
88 #ifndef NO_FLOATING_POINT
89           double    doublearg;
90           long double longdoublearg;
91 #endif
92           wint_t    wintarg;
93           wchar_t   *pwchararg;
94 };
95 
96 /* Handle positional parameters. */
97 int       __find_arguments(const char *, va_list, union arg **);
98 int       __find_warguments(const wchar_t *, va_list, union arg **);
99