xero

ansicat.c

Jan 11th, 2019
276
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 9.26 KB | None | 0 0
  1. /*
  2.  *                        .
  3.  *       .__      .______/|    .____ ____.          .___ __.
  4.  *  _____\  \ ___/_   \  _|____\____Y  __/____ _____\   Y  /__.
  5.  * /  _   \  X    /    \       X    |  \      X  _   \  |  ___/---.
  6.  * |  \      |   /     l____    >   |         |  \      |  \      |
  7.  * | ::..  __l__/ ::.__|  / .: /:.__l__  ..:: | ::..  __l__  ..:: |
  8.  * l______ /  \______/   /___ /| _/   \ ______l______ /   \ ______|
  9.  *       \/                 \/ |/      \/           \/     \/   x0!
  10.  *
  11.  * ansicat: cp437 decoder. display ansi art in modern utf8 shells
  12.  * cc0 / kopimi: unixbros (dcat & x0)
  13.  * install:
  14.  *  $ printf "all: ansicat\n" > Makefile && make
  15.  * usage:
  16.  *  $ ansicat < rad-shit.ans
  17.  */
  18.  
  19. #include <locale.h>
  20. #include <stdio.h>
  21. #include <wchar.h>
  22.  
  23. int table[] = {
  24.     /* ascii */
  25.     '\x00', '\x01', '\x02', '\x03', '\x04', '\x05', '\x06', '\x07', '\x08',
  26.     '\t',   '\n',   '\x0b', '\x0c', '\r',   '\x0e', '\x0f', '\x10', '\x11',
  27.     '\x12', '\x13', '\x14', '\x15', '\x16', '\x17', '\x18', '\x19', '\x1a',
  28.     '\x1b', '\x1c', '\x1d', '\x1e', '\x1f', ' ',    '!',    '"',    '#',
  29.     '$',    '%',    '&',    '\'',   '(',    ')',    '*',    '+',    ',',
  30.     '-',    '.',    '/',    '0',    '1',    '2',    '3',    '4',    '5',
  31.     '6',    '7',    '8',    '9',    ':',    ';',    '<',    '=',    '>',
  32.     '?',    '@',    'A',    'B',    'C',    'D',    'E',    'F',    'G',
  33.     'H',    'I',    'J',    'K',    'L',    'M',    'N',    'O',    'P',
  34.     'Q',    'R',    'S',    'T',    'U',    'V',    'W',    'X',    'Y',
  35.     'Z',    '[',    '\\',   ']',    '^',    '_',    '`',    'a',    'b',
  36.     'c',    'd',    'e',    'f',    'g',    'h',    'i',    'j',    'k',
  37.     'l',    'm',    'n',    'o',    'p',    'q',    'r',    's',    't',
  38.     'u',    'v',    'w',    'x',    'y',    'z',    '{',    '|',    '}',
  39.     '~',    '\x7f',
  40.  
  41.     '\xc7', /* 0x0080 -> LATIN CAPITAL LETTER C WITH CEDILLA*/
  42.     '\xfc', /* 0x0081 -> LATIN SMALL LETTER U WITH DIAERESIS*/
  43.     '\xe9', /* 0x0082 -> LATIN SMALL LETTER E WITH ACUTE*/
  44.     '\xe2', /* 0x0083 -> LATIN SMALL LETTER A WITH CIRCUMFLEX*/
  45.     '\xe4', /* 0x0084 -> LATIN SMALL LETTER A WITH DIAERESIS*/
  46.     '\xe0', /* 0x0085 -> LATIN SMALL LETTER A WITH GRAVE*/
  47.     '\xe5', /* 0x0086 -> LATIN SMALL LETTER A WITH RING ABOVE*/
  48.     '\xe7', /* 0x0087 -> LATIN SMALL LETTER C WITH CEDILLA*/
  49.     '\xea', /* 0x0088 -> LATIN SMALL LETTER E WITH CIRCUMFLEX*/
  50.     '\xeb', /* 0x0089 -> LATIN SMALL LETTER E WITH DIAERESIS*/
  51.     '\xe8', /* 0x008a -> LATIN SMALL LETTER E WITH GRAVE*/
  52.     '\xef', /* 0x008b -> LATIN SMALL LETTER I WITH DIAERESIS*/
  53.     '\xee', /* 0x008c -> LATIN SMALL LETTER I WITH CIRCUMFLEX*/
  54.     '\xec', /* 0x008d -> LATIN SMALL LETTER I WITH GRAVE*/
  55.     '\xc4', /* 0x008e -> LATIN CAPITAL LETTER A WITH DIAERESIS*/
  56.     '\xc5', /* 0x008f -> LATIN CAPITAL LETTER A WITH RING ABOVE*/
  57.     '\xc9', /* 0x0090 -> LATIN CAPITAL LETTER E WITH ACUTE*/
  58.     '\xe6', /* 0x0091 -> LATIN SMALL LIGATURE AE*/
  59.     '\xc6', /* 0x0092 -> LATIN CAPITAL LIGATURE AE*/
  60.     '\xf4', /* 0x0093 -> LATIN SMALL LETTER O WITH CIRCUMFLEX*/
  61.     '\xf6', /* 0x0094 -> LATIN SMALL LETTER O WITH DIAERESIS*/
  62.     '\xf2', /* 0x0095 -> LATIN SMALL LETTER O WITH GRAVE*/
  63.     '\xfb', /* 0x0096 -> LATIN SMALL LETTER U WITH CIRCUMFLEX*/
  64.     '\xf9', /* 0x0097 -> LATIN SMALL LETTER U WITH GRAVE*/
  65.     '\xff', /* 0x0098 -> LATIN SMALL LETTER Y WITH DIAERESIS*/
  66.     '\xd6', /* 0x0099 -> LATIN CAPITAL LETTER O WITH DIAERESIS*/
  67.     '\xdc', /* 0x009a -> LATIN CAPITAL LETTER U WITH DIAERESIS*/
  68.     '\xa2', /* 0x009b -> CENT SIGN*/
  69.     '\xa3', /* 0x009c -> POUND SIGN*/
  70.     '\xa5', /* 0x009d -> YEN SIGN*/
  71.     0x20a7, /* 0x009e -> PESETA SIGN*/
  72.     0x0192, /* 0x009f -> LATIN SMALL LETTER F WITH HOOK*/
  73.     '\xe1', /* 0x00a0 -> LATIN SMALL LETTER A WITH ACUTE*/
  74.     '\xed', /* 0x00a1 -> LATIN SMALL LETTER I WITH ACUTE*/
  75.     '\xf3', /* 0x00a2 -> LATIN SMALL LETTER O WITH ACUTE*/
  76.     '\xfa', /* 0x00a3 -> LATIN SMALL LETTER U WITH ACUTE*/
  77.     '\xf1', /* 0x00a4 -> LATIN SMALL LETTER N WITH TILDE*/
  78.     '\xd1', /* 0x00a5 -> LATIN CAPITAL LETTER N WITH TILDE*/
  79.     '\xaa', /* 0x00a6 -> FEMININE ORDINAL INDICATOR*/
  80.     '\xba', /* 0x00a7 -> MASCULINE ORDINAL INDICATOR*/
  81.     '\xbf', /* 0x00a8 -> INVERTED QUESTION MARK*/
  82.     0x2310, /* 0x00a9 -> REVERSED NOT SIGN*/
  83.     '\xac', /* 0x00aa -> NOT SIGN*/
  84.     '\xbd', /* 0x00ab -> VULGAR FRACTION ONE HALF*/
  85.     '\xbc', /* 0x00ac -> VULGAR FRACTION ONE QUARTER*/
  86.     '\xa1', /* 0x00ad -> INVERTED EXCLAMATION MARK*/
  87.     '\xab', /* 0x00ae -> LEFT-POINTING DOUBLE ANGLE QUOTATION MARK*/
  88.     '\xbb', /* 0x00af -> RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK*/
  89.     0x2591, /* 0x00b0 -> LIGHT SHADE*/
  90.     0x2592, /* 0x00b1 -> MEDIUM SHADE*/
  91.     0x2593, /* 0x00b2 -> DARK SHADE*/
  92.     0x2502, /* 0x00b3 -> BOX DRAWINGS LIGHT VERTICAL*/
  93.     0x2524, /* 0x00b4 -> BOX DRAWINGS LIGHT VERTICAL AND LEFT*/
  94.     0x2561, /* 0x00b5 -> BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE*/
  95.     0x2562, /* 0x00b6 -> BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE*/
  96.     0x2556, /* 0x00b7 -> BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE*/
  97.     0x2555, /* 0x00b8 -> BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE*/
  98.     0x2563, /* 0x00b9 -> BOX DRAWINGS DOUBLE VERTICAL AND LEFT*/
  99.     0x2551, /* 0x00ba -> BOX DRAWINGS DOUBLE VERTICAL*/
  100.     0x2557, /* 0x00bb -> BOX DRAWINGS DOUBLE DOWN AND LEFT*/
  101.     0x255d, /* 0x00bc -> BOX DRAWINGS DOUBLE UP AND LEFT*/
  102.     0x255c, /* 0x00bd -> BOX DRAWINGS UP DOUBLE AND LEFT SINGLE*/
  103.     0x255b, /* 0x00be -> BOX DRAWINGS UP SINGLE AND LEFT DOUBLE*/
  104.     0x2510, /* 0x00bf -> BOX DRAWINGS LIGHT DOWN AND LEFT*/
  105.     0x2514, /* 0x00c0 -> BOX DRAWINGS LIGHT UP AND RIGHT*/
  106.     0x2534, /* 0x00c1 -> BOX DRAWINGS LIGHT UP AND HORIZONTAL*/
  107.     0x252c, /* 0x00c2 -> BOX DRAWINGS LIGHT DOWN AND HORIZONTAL*/
  108.     0x251c, /* 0x00c3 -> BOX DRAWINGS LIGHT VERTICAL AND RIGHT*/
  109.     0x2500, /* 0x00c4 -> BOX DRAWINGS LIGHT HORIZONTAL*/
  110.     0x253c, /* 0x00c5 -> BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL*/
  111.     0x255e, /* 0x00c6 -> BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE*/
  112.     0x255f, /* 0x00c7 -> BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE*/
  113.     0x255a, /* 0x00c8 -> BOX DRAWINGS DOUBLE UP AND RIGHT*/
  114.     0x2554, /* 0x00c9 -> BOX DRAWINGS DOUBLE DOWN AND RIGHT*/
  115.     0x2569, /* 0x00ca -> BOX DRAWINGS DOUBLE UP AND HORIZONTAL*/
  116.     0x2566, /* 0x00cb -> BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL*/
  117.     0x2560, /* 0x00cc -> BOX DRAWINGS DOUBLE VERTICAL AND RIGHT*/
  118.     0x2550, /* 0x00cd -> BOX DRAWINGS DOUBLE HORIZONTAL*/
  119.     0x256c, /* 0x00ce -> BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL*/
  120.     0x2567, /* 0x00cf -> BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE*/
  121.     0x2568, /* 0x00d0 -> BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE*/
  122.     0x2564, /* 0x00d1 -> BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE*/
  123.     0x2565, /* 0x00d2 -> BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE*/
  124.     0x2559, /* 0x00d3 -> BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE*/
  125.     0x2558, /* 0x00d4 -> BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE*/
  126.     0x2552, /* 0x00d5 -> BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE*/
  127.     0x2553, /* 0x00d6 -> BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE*/
  128.     0x256b, /* 0x00d7 -> BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE*/
  129.     0x256a, /* 0x00d8 -> BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE*/
  130.     0x2518, /* 0x00d9 -> BOX DRAWINGS LIGHT UP AND LEFT*/
  131.     0x250c, /* 0x00da -> BOX DRAWINGS LIGHT DOWN AND RIGHT*/
  132.     0x2588, /* 0x00db -> FULL BLOCK*/
  133.     0x2584, /* 0x00dc -> LOWER HALF BLOCK*/
  134.     0x258c, /* 0x00dd -> LEFT HALF BLOCK*/
  135.     0x2590, /* 0x00de -> RIGHT HALF BLOCK*/
  136.     0x2580, /* 0x00df -> UPPER HALF BLOCK*/
  137.     0x03b1, /* 0x00e0 -> GREEK SMALL LETTER ALPHA*/
  138.     '\xdf', /* 0x00e1 -> LATIN SMALL LETTER SHARP S*/
  139.     0x0393, /* 0x00e2 -> GREEK CAPITAL LETTER GAMMA*/
  140.     0x03c0, /* 0x00e3 -> GREEK SMALL LETTER PI*/
  141.     0x03a3, /* 0x00e4 -> GREEK CAPITAL LETTER SIGMA*/
  142.     0x03c3, /* 0x00e5 -> GREEK SMALL LETTER SIGMA*/
  143.     '\xb5', /* 0x00e6 -> MICRO SIGN*/
  144.     0x03c4, /* 0x00e7 -> GREEK SMALL LETTER TAU*/
  145.     0x03a6, /* 0x00e8 -> GREEK CAPITAL LETTER PHI*/
  146.     0x0398, /* 0x00e9 -> GREEK CAPITAL LETTER THETA*/
  147.     0x03a9, /* 0x00ea -> GREEK CAPITAL LETTER OMEGA*/
  148.     0x03b4, /* 0x00eb -> GREEK SMALL LETTER DELTA*/
  149.     0x221e, /* 0x00ec -> INFINITY*/
  150.     0x03c6, /* 0x00ed -> GREEK SMALL LETTER PHI*/
  151.     0x03b5, /* 0x00ee -> GREEK SMALL LETTER EPSILON*/
  152.     0x2229, /* 0x00ef -> INTERSECTION*/
  153.     0x2261, /* 0x00f0 -> IDENTICAL TO*/
  154.     '\xb1', /* 0x00f1 -> PLUS-MINUS SIGN*/
  155.     0x2265, /* 0x00f2 -> GREATER-THAN OR EQUAL TO*/
  156.     0x2264, /* 0x00f3 -> LESS-THAN OR EQUAL TO*/
  157.     0x2320, /* 0x00f4 -> TOP HALF INTEGRAL*/
  158.     0x2321, /* 0x00f5 -> BOTTOM HALF INTEGRAL*/
  159.     '\xf7', /* 0x00f6 -> DIVISION SIGN*/
  160.     0x2248, /* 0x00f7 -> ALMOST EQUAL TO*/
  161.     '\xb0', /* 0x00f8 -> DEGREE SIGN*/
  162.     0x2219, /* 0x00f9 -> BULLET OPERATOR*/
  163.     '\xb7', /* 0x00fa -> MIDDLE DOT*/
  164.     0x221a, /* 0x00fb -> SQUARE ROOT*/
  165.     0x207f, /* 0x00fc -> SUPERSCRIPT LATIN SMALL LETTER N*/
  166.     '\xb2', /* 0x00fd -> SUPERSCRIPT TWO*/
  167.     0x25a0, /* 0x00fe -> BLACK SQUARE*/
  168.     '\xa0', /* 0x00ff -> NO-BREAK SPACE*/
  169. };
  170.  
  171.  
  172. int
  173. main(int argc, char **argv) {
  174.     int chr;
  175.  
  176.     setlocale(LC_ALL, "");
  177.  
  178.     while ((chr = getchar()) != 0x1a)
  179.         if (feof(stdin))
  180.             break;
  181.         else if (table[chr])
  182.             printf("%lc", table[chr]);
  183.  
  184.     return 0;
  185. }
Add Comment
Please, Sign In to add comment