diff options
-rw-r--r-- | bin/ttpre.c | 33 |
1 files changed, 18 insertions, 15 deletions
diff --git a/bin/ttpre.c b/bin/ttpre.c index d19ba895..7dc42958 100644 --- a/bin/ttpre.c +++ b/bin/ttpre.c @@ -14,41 +14,44 @@ * along with this program. If not, see <http://www.gnu.org/licenses/>. */ +#include <locale.h> #include <stdio.h> #include <stdlib.h> #include <string.h> +#include <wchar.h> -static void put(const char *tag, char ch) { +static void put(const char *tag, wchar_t ch) { if (tag) printf("<%s>", tag); switch (ch) { - break; case '&': printf("&"); - break; case '<': printf("<"); - break; case '>': printf(">"); - break; default: printf("%c", ch); + break; case L'&': printf("&"); + break; case L'<': printf("<"); + break; case L'>': printf(">"); + break; default: printf("%lc", ch); } if (tag) printf("</%s>", tag); } -static void push(char ch) { - static char q[3]; - if (q[1] == '\b' && q[0] == '_') { +static void push(wchar_t ch) { + static wchar_t q[3]; + if (q[1] == L'\b' && q[0] == L'_') { put("i", q[2]); - memset(q, 0, 3); - } else if (q[1] == '\b' && q[0] == q[2]) { + memset(q, 0, sizeof(q)); + } else if (q[1] == L'\b' && q[0] == q[2]) { put("b", q[2]); - memset(q, 0, 3); + memset(q, 0, sizeof(q)); } else if (q[0]) { put(NULL, q[0]); } - memmove(q, &q[1], 2); + memmove(q, &q[1], sizeof(q) - sizeof(wchar_t)); q[2] = ch; } int main() { + setlocale(LC_CTYPE, ""); printf("<pre>"); - char ch; - while (EOF != (ch = getchar_unlocked())) push(ch); - push('\0'); push('\0'); push('\0'); + wchar_t ch; + while (WEOF != (ch = getwchar())) push(ch); + push(0); push(0); push(0); printf("</pre>\n"); return EXIT_SUCCESS; } |