static 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; } }