busybox/libbb/printable.c
<<
>>
Prefs
   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
  12void FAST_FUNC 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}
  35