diff options
author | Denis Vlasenko <vda.linux@googlemail.com> | 2007-12-30 23:13:39 +0300 |
---|---|---|
committer | Denis Vlasenko <vda.linux@googlemail.com> | 2007-12-30 23:13:39 +0300 |
commit | 27963980dbe1262fd6c447fc7d06839aea0861bc (patch) | |
tree | cf04b9d237cb1c9dc47c76919342d25a11e815c0 /libbb/printable.c | |
parent | d3c042fc605737643c265a7f86fc7a77c88f629e (diff) |
adding libbb/printable.c
Diffstat (limited to 'libbb/printable.c')
-rw-r--r-- | libbb/printable.c | 34 |
1 files changed, 34 insertions, 0 deletions
diff --git a/libbb/printable.c b/libbb/printable.c new file mode 100644 index 000000000..2420a91f0 --- /dev/null +++ b/libbb/printable.c @@ -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); +} |