len, int *numwritten); LOCAL(void) write_wstring(wchar_t *string, int len, int *numwritten); #elif WPRFLAG #define WRITE_CHAR(ch, pnw) write_char(ch, stream, pnw) #define WRITE_MULTI_CHAR(ch, num, pnw) write_multi_char(ch, num, stream, pnw) #define WRITE_STRING(s, len, pnw) write_string(s, len, stream, pnw) LOCAL(void) write_char(int ch, FILE *f, int *pnumwritten); LOCAL(void) write_multi_char(wchar_t ch, int num, FILE *f, int *pnumwritten); LOCAL(void) write_string(wchar_t *string, int len, FILE *f, int *numwritten); #else #define WRITE_CHAR(ch, pnw) write_char(ch, stream, pnw) #define WRITE_MULTI_CHAR(ch, num, pnw) write_multi_char(ch, num, stream, pnw) #define WRITE_STRING(s, len, pnw) write_string(s, len, stream, pnw) #define WRITE_WSTRING(s, len, pnw) write_wstring(s, len, stream, pnw) LOCAL(void) write_char(int ch, FILE *f, int *pnumwritten); LOCAL(void) write_multi_char(int ch, int num, FILE *f, int *pnumwritten); LOCAL(void) write_string(char *string, int len, FILE *f, int *numwritten); LOCAL(void) write_wstring(wchar_t *string, int len, FILE *f, int *numwritten); #endif __inline int _CALLTYPE4 get_int_arg(va_list *pargptr); #ifndef WPRFLAG #if !SHORT_IS_INT __inline short _CALLTYPE4 get_short_arg(va_list *pargptr); #endif #endif #if !LONG_IS_INT __inline long _CALLTYPE4 get_long_arg(va_list *pargptr); #endif #ifdef _ALPHA_ __inline __int64 _CALLTYPE4 get_quad_arg(va_list *pargptr); #endif #ifdef CPRFLAG LOCAL(int) output(const char *, va_list); /*** *int _cprintf(format, arglist) - write formatted output directly to console * *Purpose: * Writes formatted data like printf, but uses console I/O functions. * *Entry: * char *format - format string to determine data formats * arglist - list of POINTERS to where to put data * *Exit: * returns number of characters written * *Exceptions: * *******************************************************************************/ int _CALLTYPE2 _cprintf ( const char * format, ... ) { va_list arglist; va_start(arglist, format); return output(format, arglist); } #endif /* CPRFLAG */ /*** *int _output(stream, format, argptr), static int output(format, argptr) * *Purpose: * Output performs printf style output onto a stream. It is called by * printf/fprintf/sprintf/vprintf/vfprintf/vsprintf to so the dirty * work. In multi-thread situations, _output assumes that the given * stream is already locked. * * Algorithm: * The format string is parsed by using a finite state automaton * based on the current state and the current character read from * the format string. Thus, looping is on a per-character basis, * not a per conversion specifier basis. Once the format specififying * character is read, output is performed. * *Entry: * FILE *stream - stream for output * char *format - printf style format string * va_list argptr - pointer to list of subsidiary arguments * *Exit: * Returns the number of characters written, or -1 if an output error * occurs. #ifdef WPRFLAG * The wide-character flavour returns the number of wide-characters written. #endif * *Exceptions: * *******************************************************************************/ #ifdef CPRFLAG LOCAL(int) output ( #elif WPRFLAG int _CALLTYPE1 _woutput ( FILE *stream, #else int _CALLTYPE1 _output ( FILE *stream, #endif const TCHAR *format, va_list argptr ) { int |