12591efccSDavid Schultz /*- 22591efccSDavid Schultz * Copyright (c) 1990, 1993 32591efccSDavid Schultz * The Regents of the University of California. All rights reserved. 42591efccSDavid Schultz * 52591efccSDavid Schultz * This code is derived from software contributed to Berkeley by 62591efccSDavid Schultz * Chris Torek. 72591efccSDavid Schultz * 82591efccSDavid Schultz * Redistribution and use in source and binary forms, with or without 92591efccSDavid Schultz * modification, are permitted provided that the following conditions 102591efccSDavid Schultz * are met: 112591efccSDavid Schultz * 1. Redistributions of source code must retain the above copyright 122591efccSDavid Schultz * notice, this list of conditions and the following disclaimer. 132591efccSDavid Schultz * 2. Redistributions in binary form must reproduce the above copyright 142591efccSDavid Schultz * notice, this list of conditions and the following disclaimer in the 152591efccSDavid Schultz * documentation and/or other materials provided with the distribution. 162591efccSDavid Schultz * 4. Neither the name of the University nor the names of its contributors 172591efccSDavid Schultz * may be used to endorse or promote products derived from this software 182591efccSDavid Schultz * without specific prior written permission. 192591efccSDavid Schultz * 202591efccSDavid Schultz * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 212591efccSDavid Schultz * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 222591efccSDavid Schultz * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 232591efccSDavid Schultz * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 242591efccSDavid Schultz * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 252591efccSDavid Schultz * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 262591efccSDavid Schultz * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 272591efccSDavid Schultz * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 282591efccSDavid Schultz * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 292591efccSDavid Schultz * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 302591efccSDavid Schultz * SUCH DAMAGE. 312591efccSDavid Schultz * 322591efccSDavid Schultz * $FreeBSD$ 332591efccSDavid Schultz */ 342591efccSDavid Schultz 352591efccSDavid Schultz /* 362591efccSDavid Schultz * Flags used during conversion. 372591efccSDavid Schultz */ 382591efccSDavid Schultz #define ALT 0x001 /* alternate form */ 392591efccSDavid Schultz #define LADJUST 0x004 /* left adjustment */ 402591efccSDavid Schultz #define LONGDBL 0x008 /* long double */ 412591efccSDavid Schultz #define LONGINT 0x010 /* long integer */ 422591efccSDavid Schultz #define LLONGINT 0x020 /* long long integer */ 432591efccSDavid Schultz #define SHORTINT 0x040 /* short integer */ 442591efccSDavid Schultz #define ZEROPAD 0x080 /* zero (as opposed to blank) pad */ 452591efccSDavid Schultz #define FPT 0x100 /* Floating point number */ 462591efccSDavid Schultz #define GROUPING 0x200 /* use grouping ("'" flag) */ 472591efccSDavid Schultz /* C99 additional size modifiers: */ 482591efccSDavid Schultz #define SIZET 0x400 /* size_t */ 492591efccSDavid Schultz #define PTRDIFFT 0x800 /* ptrdiff_t */ 502591efccSDavid Schultz #define INTMAXT 0x1000 /* intmax_t */ 512591efccSDavid Schultz #define CHARINT 0x2000 /* print char using int format */ 522591efccSDavid Schultz 532591efccSDavid Schultz /* 542591efccSDavid Schultz * Macros for converting digits to letters and vice versa 552591efccSDavid Schultz */ 562591efccSDavid Schultz #define to_digit(c) ((c) - '0') 572591efccSDavid Schultz #define is_digit(c) ((unsigned)to_digit(c) <= 9) 582591efccSDavid Schultz #define to_char(n) ((n) + '0') 592591efccSDavid Schultz 602591efccSDavid Schultz /* Size of the static argument table. */ 612591efccSDavid Schultz #define STATIC_ARG_TBL_SIZE 8 622591efccSDavid Schultz 632591efccSDavid Schultz union arg { 642591efccSDavid Schultz int intarg; 652591efccSDavid Schultz u_int uintarg; 662591efccSDavid Schultz long longarg; 672591efccSDavid Schultz u_long ulongarg; 682591efccSDavid Schultz long long longlongarg; 692591efccSDavid Schultz unsigned long long ulonglongarg; 702591efccSDavid Schultz ptrdiff_t ptrdiffarg; 712591efccSDavid Schultz size_t sizearg; 722591efccSDavid Schultz intmax_t intmaxarg; 732591efccSDavid Schultz uintmax_t uintmaxarg; 742591efccSDavid Schultz void *pvoidarg; 752591efccSDavid Schultz char *pchararg; 762591efccSDavid Schultz signed char *pschararg; 772591efccSDavid Schultz short *pshortarg; 782591efccSDavid Schultz int *pintarg; 792591efccSDavid Schultz long *plongarg; 802591efccSDavid Schultz long long *plonglongarg; 812591efccSDavid Schultz ptrdiff_t *pptrdiffarg; 822591efccSDavid Schultz size_t *psizearg; 832591efccSDavid Schultz intmax_t *pintmaxarg; 842591efccSDavid Schultz #ifndef NO_FLOATING_POINT 852591efccSDavid Schultz double doublearg; 862591efccSDavid Schultz long double longdoublearg; 872591efccSDavid Schultz #endif 882591efccSDavid Schultz wint_t wintarg; 892591efccSDavid Schultz wchar_t *pwchararg; 902591efccSDavid Schultz }; 912591efccSDavid Schultz 922591efccSDavid Schultz /* Handle positional parameters. */ 932591efccSDavid Schultz void __find_arguments(const char *, va_list, union arg **); 942591efccSDavid Schultz void __find_warguments(const wchar_t *, va_list, union arg **); 95