Initial public busybox upstream commit
[busybox4maemo] / libbb / printable.c
1 /* vi: set sw=4 ts=4: */
2 /*
3  * Utility routines.
4  *
5  * Copyright (C) 2007 Denys Vlasenko
6  *
7  * Licensed under GPL version 2, see file LICENSE in this tarball for details.
8  */
9
10 #include "libbb.h"
11
12 void fputc_printable(int ch, FILE *file)
13 {
14         if ((ch & (0x80 + PRINTABLE_META)) == (0x80 + PRINTABLE_META)) {
15                 fputs("M-", file);
16                 ch &= 0x7f;
17         }
18         ch = (unsigned char) ch;
19         if (ch == 0x9b) {
20                 /* VT100's CSI, aka Meta-ESC, is not printable on vt-100 */
21                 ch = '{';
22                 goto print_caret;
23         }
24         if (ch < ' ') {
25                 ch += '@';
26                 goto print_caret;
27         }
28         if (ch == 0x7f) {
29                 ch = '?';
30  print_caret:
31                 fputc('^', file);
32         }
33         fputc(ch, file);
34 }