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);
}
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,