rendered paste bodystatic void
PutNext(void)
{
static int vSlashF = FALSE;
if (gNext >= gBuffer + kMaxBuffer - 3)
{
OutputDisc();
HandleError(kBufferError);
}
// put out a pending back slash
if (vSlashF)
{
vSlashF = FALSE;
switch (*gNext)
{
case 't':
case 'r':
case 'n':
case '\\':
++gNext;
return;
default:
*(gNext+1) = *gNext;
*gNext++ = '\\';
break;
}
}
// escape tabs, returns and backslashes
// null terminate lines
// convert
switch (*gNext)
{
case '\n':
*gNext++ = 0;
break;
case '\t':
*gNext++ = '\\';
*gNext++ = 't';
break;
case '\r':
*gNext++ = '\\';
*gNext++ = 'r';
break;
case '\\':
vSlashF = TRUE;
default:
// LATIN > utf8
if (*gNext >= 0x80 && gEncoding == kLatin1)
{
*(gNext+1) = (0x80 | (*gNext & 0x3F));
*gNext++ = (0xC0 | ((*gNext >> 6) & 0x1F));
}
++gNext;
break;
}
}