adding libbb/printable.c
authorDenis Vlasenko <vda.linux@googlemail.com>
Sun, 30 Dec 2007 20:13:39 +0000 (20:13 -0000)
committerDenis Vlasenko <vda.linux@googlemail.com>
Sun, 30 Dec 2007 20:13:39 +0000 (20:13 -0000)
libbb/printable.c [new file with mode: 0644]

diff --git a/libbb/printable.c b/libbb/printable.c
new file mode 100644 (file)
index 0000000..2420a91
--- /dev/null
@@ -0,0 +1,34 @@
+/* vi: set sw=4 ts=4: */
+/*
+ * Utility routines.
+ *
+ * Copyright (C) 2007 Denis Vlasenko
+ *
+ * Licensed under GPL version 2, see file LICENSE in this tarball for details.
+ */
+
+#include "libbb.h"
+
+void fputc_printable(int ch, FILE *file)
+{
+       if ((ch & (0x80 + PRINTABLE_META)) == (0x80 + PRINTABLE_META)) {
+               fputs("M-", file);
+               ch &= 0x7f;
+       }
+       ch = (unsigned char) ch;
+       if (ch == 0x9b) {
+               /* VT100's CSI, aka Meta-ESC, is not printable on vt-100 */
+               ch = '{';
+               goto print_caret;
+       }
+       if (ch < ' ') {
+               ch += '@';
+               goto print_caret;
+       }
+       if (ch == 0x7f) {
+               ch = '?';
+ print_caret:
+               fputc('^', file);
+       }
+       fputc(ch, file);
+}