1 #ifndef PFORMAT_H 2 /* 3 * pformat.h 4 * 5 * $Id: pformat.h,v 1.1 2008/07/28 23:24:20 keithmarshall Exp $ 6 * 7 * A private header, defining the `pformat' API; it is to be included 8 * in each compilation unit implementing any of the `printf' family of 9 * functions, but serves no useful purpose elsewhere. 10 * 11 * Written by Keith Marshall <keithmarshall@users.sourceforge.net> 12 * 13 * This is free software. You may redistribute and/or modify it as you 14 * see fit, without restriction of copyright. 15 * 16 * This software is provided "as is", in the hope that it may be useful, 17 * but WITHOUT WARRANTY OF ANY KIND, not even any implied warranty of 18 * MERCHANTABILITY, nor of FITNESS FOR ANY PARTICULAR PURPOSE. At no 19 * time will the author accept any form of liability for any damages, 20 * however caused, resulting from the use of this software. 21 */ 22 #define PFORMAT_H 23 24 /* The following macros reproduce definitions from _mingw.h, 25 * so that compilation will not choke, if using any compiler 26 * other than the MinGW implementation of GCC. 27 */ 28 #ifndef __cdecl 29 # ifdef __GNUC__ 30 # define __cdecl __attribute__((__cdecl__)) 31 # else 32 # define __cdecl 33 # endif 34 #endif 35 36 #ifndef __MINGW_GNUC_PREREQ 37 # if defined __GNUC__ && defined __GNUC_MINOR__ 38 # define __MINGW_GNUC_PREREQ( major, minor )\ 39 (__GNUC__ > (major) || (__GNUC__ == (major) && __GNUC_MINOR__ >= (minor))) 40 # else 41 # define __MINGW_GNUC_PREREQ( major, minor ) 42 # endif 43 #endif 44 45 #ifndef __MINGW_NOTHROW 46 # if __MINGW_GNUC_PREREQ( 3, 3 ) 47 # define __MINGW_NOTHROW __attribute__((__nothrow__)) 48 # else 49 # define __MINGW_NOTHROW 50 # endif 51 #endif 52 53 #ifdef __BUILD_WIDEAPI 54 #define APICHAR wchar_t 55 #else 56 #define APICHAR char 57 #endif 58 59 /* The following are the declarations specific to the `pformat' API... 60 */ 61 #define PFORMAT_TO_FILE 0x2000 62 #define PFORMAT_NOLIMIT 0x4000 63 64 #if defined(__MINGW32__) || defined(__MINGW64__) 65 /* 66 * Map MinGW specific function names, for use in place of the generic 67 * implementation defined equivalent function names. 68 */ 69 #ifdef __BUILD_WIDEAPI 70 # define __pformat __mingw_wpformat 71 #define __fputc(X,STR) fputwc((wchar_t) (X), (STR)) 72 73 # define __printf __mingw_wprintf 74 # define __fprintf __mingw_fwprintf 75 # define __sprintf __mingw_swprintf 76 # define __snprintf __mingw_snwprintf 77 78 # define __vprintf __mingw_vwprintf 79 # define __vfprintf __mingw_vfwprintf 80 # define __vsprintf __mingw_vswprintf 81 # define __vsnprintf __mingw_vsnwprintf 82 #else 83 # define __pformat __mingw_pformat 84 #define __fputc(X,STR) fputc((X), (STR)) 85 86 # define __printf __mingw_printf 87 # define __fprintf __mingw_fprintf 88 # define __sprintf __mingw_sprintf 89 # define __snprintf __mingw_snprintf 90 91 # define __vprintf __mingw_vprintf 92 # define __vfprintf __mingw_vfprintf 93 # define __vsprintf __mingw_vsprintf 94 # define __vsnprintf __mingw_vsnprintf 95 #endif /* __BUILD_WIDEAPI */ 96 #endif 97 98 int __cdecl __pformat(int, void *, int, const APICHAR *, va_list) __MINGW_NOTHROW; 99 #endif /* !defined PFORMAT_H */ 100