busybox/miscutils/ascii.c
<<
>>
Prefs
   1/* vi: set sw=4 ts=4: */
   2/*
   3 * Copyright (C) 2021 Denys Vlasenko <vda.linux@googlemail.com>
   4 *
   5 * Licensed under GPLv2, see file LICENSE in this source tree.
   6 */
   7//config:config ASCII
   8//config:       bool "ascii"
   9//config:       default y
  10//config:       help
  11//config:       Print ascii table.
  12//config:
  13
  14//applet:IF_ASCII(APPLET(ascii, BB_DIR_USR_BIN, BB_SUID_DROP))
  15
  16//kbuild:lib-$(CONFIG_ASCII) += ascii.o
  17
  18//usage:#define ascii_trivial_usage NOUSAGE_STR
  19//usage:#define ascii_full_usage ""
  20
  21#include "libbb.h"
  22
  23int ascii_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
  24int ascii_main(int argc UNUSED_PARAM, char **argv UNUSED_PARAM)
  25{
  26        const char *ctrl =
  27                "NUL""SOH""STX""ETX""EOT""ENQ""ACK""BEL"
  28                "BS ""HT ""NL ""VT ""FF ""CR ""SO ""SI "
  29                "DLE""DC1""DC2""DC3""DC4""NAK""SYN""ETB"
  30                "CAN""EM ""SUB""ESC""FS ""GS ""RS ""US "
  31        ;
  32//TODO: od has a similar table, can we reuse it?
  33        char last[2];
  34        unsigned i;
  35
  36        last[1] = '\0';
  37        printf("Dec Hex    Dec Hex    Dec Hex  Dec Hex  Dec Hex  Dec Hex   Dec Hex   Dec Hex\n");
  38        for (i = 0; i < 16; i++) {
  39                printf("%3u %02x %.3s%4u %02x %.3s%4u %02x %c%4u %02x %c%4u %02x %c%4u %02x %c%5u %02x %c%5u %02x %s\n",
  40                        i+0x00, i+0x00, ctrl + i*3,
  41                        i+0x10, i+0x10, ctrl + i*3 + 16*3,
  42                        i+0x20, i+0x20, i+0x20,
  43                        i+0x30, i+0x30, i+0x30,
  44                        i+0x40, i+0x40, i+0x40,
  45                        i+0x50, i+0x50, i+0x50,
  46                        i+0x60, i+0x60, i+0x60,
  47                        i+0x70, i+0x70, (i+0x70 == 0x7f ? "DEL" : (last[0] = i+0x70, last))
  48                );
  49        }
  50        return EXIT_SUCCESS;
  51}
  52