while (count-- > 0) { retval = mbtowc(&wchar, p, MB_CUR_MAX); if (retval <= 0) break; WRITE_CHAR(wchar, &charsout); p += retval; } } else { WRITE_STRING(text.wz, textlen, &charsout); } #endif /* WPRFLAG */ if (flags & FL_LEFT) { /* pad on right with blanks */ WRITE_MULTI_CHAR(_T(' '), padding, &charsout); } /* we're done! */ } break; } } return charsout; /* return value = number of characters written */ } /* * Future Optimizations for swprintf: * - Don't free the memory used for converting the buffer to wide chars. * Use realloc if the memory is not sufficient. Free it at the end. */ /*** *void write_char(int ch, int *pnumwritten) #ifdef WPRFLAG *void write_char(wchar_t ch, FILE *f, int *pnumwritten) #endif *void write_char(int ch, FILE *f, int *pnumwritten) * *Purpose: * Writes a single character to the given file/console. If no error occurs, * then *pnumwritten is incremented; otherwise, *pnumwritten is set * to -1. * *Entry: * int ch - character to write * FILE *f - file to write to * int *pnumwritten - pointer to integer to update with total chars written * *Exit: * No return value. * *Exceptions: * *******************************************************************************/ #ifdef CPRFLAG LOCAL(void) write_char ( int ch, int *pnumwritten ) { if (_putch_lk(ch) == EOF) *pnumwritten = -1; else ++(*pnumwritten); } #elif WPRFLAG LOCAL(void) write_char ( int ch, FILE *f, int *pnumwritten ) { if (_putwc_lk(ch, f) == WEOF) *pnumwritten = -1; else ++(*pnumwritten); } #else LOCAL(void) write_char ( int ch, FILE *f, int *pnumwritten ) { if (_putc_lk(ch, f) == EOF) *pnumwritten = -1; else ++(*pnumwritten); } #endif /*** *void write_multi_char(int ch, int num, int *pnumwritten) #ifdef WPRFLAG *void write_multi_char(wchar_t ch, int num, FILE *f, int *pnumwritten) #endif *void write_multi_char(int ch, int num, FILE *f, int *pnumwritten) * *Purpose: * Writes num copies of a character to the given file/console. If no error occurs, * then *pnumwritten is incremented by num; otherwise, *pnumwritten is set * to -1. If num is negative, it is treated as zero. * *Entry: * int ch - character to write * int num - number of times to write the characters * FILE *f - file to write to * int *pnumwritten - pointer to integer to update with total chars written * *Exit: * No return value. * *Exceptions: * *******************************************************************************/ #ifdef CPRFLAG LOCAL(void) write_multi_char ( int ch, int num, int *pnumwritten ) { while (num-- > 0) write_char(ch, pnumwritten); } #else /* CPRFLAG */ #if WPRFLAG LOCAL(void) write_multi_char ( wchar_t ch, int num, FILE *f, int *pnumwritten ) #else LOCAL(void) write_multi_char ( int ch, int num, FILE *f, int *pnumwritten ) #endif /* WPRFLAG */ { while (num-- > 0) write_char(ch, f, pnumwritten); } #endif /* CPRFLAG */ /*** *void write_string(char *string, int len, int *pnumwritten) *void write_string(char *string, int len, FILE *f, int *pnumwritten) #ifdef WPRFLAG *void write_string(wchar_t *string, |