#!/usr/bin/perl
#
#NAME
#  chrset - print out the annotated character set from 00 to FF.
#
# synopsis
#  chrset
#
#DESCRIPTION
#  This produces a listing of the character set from hex 00 to FF,
#  showing the octal, decimal and hexadecimal values for each character,
#  followed by the character itself, followed by a description of the
#  character.
#
#  The control characters (before the space) are replaced by a space
#  in the output so as not to confuse assorted software.
#
#  The descriptions are for OSI 8859-1, the Western European character 
#  set. What the output actually looks like depends on what you use to 
#  view it.
#
#BUGS
#  Some software still gets confused by some of the characters.
#
#AUTHOR
#  John Chambers <jc@trillian.mit.edu>

$| = 1;
%chrset = (
	  0 => 'NUL "\\0"',
	  1 => 'SOH',
	  2 => 'STX',
	  3 => 'ETX',
	  4 => 'EOT',
	  5 => 'ENQ',
	  6 => 'ACK',
	  7 => 'BEL "\\a"',
	  8 => 'BS  "\\b"',
	  9 => 'HT  "\\t"',
	 10 => 'LF  "\\n"',
	 11 => 'VT  "\\v"',
	 12 => 'FF  "\\f"',
	 13 => 'CR  "\\r"',
	 14 => 'SO',
	 15 => 'SI',
	 16 => 'DLE',
	 17 => 'DC1',
	 18 => 'DC2',
	 19 => 'DC3',
	 20 => 'DC4',
	 21 => 'NAK',
	 22 => 'SYN',
	 23 => 'ETB',
	 24 => 'CAN',
	 25 => 'EM',
	 26 => 'SUB',
	 27 => 'ESC',
	 28 => 'FS',
	 29 => 'GS',
	 30 => 'RS',
	 31 => 'US',
	 32 => 'SPACE',
	 33 => '!',
	 34 => '"',
	 35 => '#',
	 36 => '$',
	 37 => '%',
	 38 => '&',
	 39 => '"',
	 40 => '(',
	 41 => ')',
	 42 => '*',
	 43 => '+',
	 44 => ',',
	 45 => '-',
	 46 => '.',
	 47 => '/',
	 48 => '0',
	 49 => '1',
	 50 => '2',
	 51 => '3',
	 52 => '4',
	 53 => '5',
	 54 => '6',
	 55 => '7',
	 56 => '8',
	 57 => '9',
	 58 => ':',
	 59 => ';',
	 60 => 'LESS THAN',
	 61 => 'EQUAL SIGN',
	 62 => 'GREATER THAN',
	 63 => 'QUESTION MARK',
	 64 => 'AT SIGN',
	 65 => 'A',
	 66 => 'B',
	 67 => 'C',
	 68 => 'D',
	 69 => 'E',
	 70 => 'F',
	 71 => 'G',
	 72 => 'H',
	 73 => 'I',
	 74 => 'J',
	 75 => 'K',
	 76 => 'L',
	 77 => 'M',
	 78 => 'N',
	 79 => 'O',
	 80 => 'P',
	 81 => 'Q',
	 82 => 'R',
	 83 => 'S',
	 84 => 'T',
	 85 => 'U',
	 86 => 'V',
	 87 => 'W',
	 88 => 'X',
	 89 => 'Y',
	 90 => 'Z',
	 91 => '[',
	 92 => '\   "\\"',
	 93 => ']',
	 94 => '^',
	 95 => '_',
	 96 => '`',
	 97 => 'a',
	 98 => 'b',
	 99 => 'c',
	100 => 'd',
	101 => 'e',
	102 => 'f',
	103 => 'g',
	104 => 'h',
	105 => 'i',
	106 => 'j',
	107 => 'k',
	108 => 'l',
	109 => 'm',
	110 => 'n',
	111 => 'o',
	112 => 'p',
	113 => 'q',
	114 => 'r',
	115 => 's',
	116 => 't',
	117 => 'u',
	118 => 'v',
	119 => 'w',
	120 => 'x',
	121 => 'y',
	122 => 'z',
	123 => '{',
	124 => '|',
	125 => '}',
	126 => '~',
	127 => 'DEL',
	160 => 'NO-BREAK SPACE',
	161 => 'INVERTED EXCLAMATION MARK',
	162 => 'CENT SIGN',
	163 => 'POUND SIGN',
	164 => 'CURRENCY SIGN',
	165 => 'YEN SIGN',
	166 => 'BROKEN BAR',
	167 => 'SECTION SIGN',
	168 => 'DIAERESIS',
	169 => 'COPYRIGHT SIGN',
	170 => 'FEMININE ORDINAL INDICATOR',
	171 => 'LEFT-POINTING DOUBLE ANGLE QUOTATION MARK',
	172 => 'NOT SIGN',
	173 => 'SOFT HYPHEN',
	174 => 'REGISTERED SIGN',
	175 => 'MACRON',
	176 => 'DEGREE SIGN',
	177 => 'PLUS-MINUS SIGN',
	178 => 'SUPERSCRIPT TWO',
	179 => 'SUPERSCRIPT THREE',
	180 => 'ACUTE ACCENT',
	181 => 'MICRO SIGN',
	182 => 'PILCROW SIGN',
	183 => 'MIDDLE DOT',
	184 => 'CEDILLA',
	185 => 'SUPERSCRIPT ONE',
	186 => 'MASCULINE ORDINAL INDICATOR',
	187 => 'RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK',
	188 => 'VULGAR FRACTION ONE QUARTER',
	189 => 'VULGAR FRACTION ONE HALF',
	190 => 'VULGAR FRACTION THREE QUARTERS',
	191 => 'INVERTED QUESTION MARK',
	192 => 'LATIN CAPITAL LETTER A WITH GRAVE',
	193 => 'LATIN CAPITAL LETTER A WITH ACUTE',
	194 => 'LATIN CAPITAL LETTER A WITH CIRCUMFLEX',
	195 => 'LATIN CAPITAL LETTER A WITH TILDE',
	196 => 'LATIN CAPITAL LETTER A WITH DIAERESIS',
	197 => 'LATIN CAPITAL LETTER A WITH RING ABOVE',
	198 => 'LATIN CAPITAL LIGATURE AE',
	199 => 'LATIN CAPITAL LETTER C WITH CEDILLA',
	200 => 'LATIN CAPITAL LETTER E WITH GRAVE',
	201 => 'LATIN CAPITAL LETTER E WITH ACUTE',
	202 => 'LATIN CAPITAL LETTER E WITH CIRCUMFLEX',
	203 => 'LATIN CAPITAL LETTER E WITH DIAERESIS',
	204 => 'LATIN CAPITAL LETTER I WITH GRAVE',
	205 => 'LATIN CAPITAL LETTER I WITH ACUTE',
	206 => 'LATIN CAPITAL LETTER I WITH CIRCUMFLEX',
	207 => 'LATIN CAPITAL LETTER I WITH DIAERESIS',
	208 => 'LATIN CAPITAL LETTER ETH',
	209 => 'LATIN CAPITAL LETTER N WITH TILDE',
	210 => 'LATIN CAPITAL LETTER O WITH GRAVE',
	211 => 'LATIN CAPITAL LETTER O WITH ACUTE',
	212 => 'LATIN CAPITAL LETTER O WITH CIRCUMFLEX',
	213 => 'LATIN CAPITAL LETTER O WITH TILDE',
	214 => 'LATIN CAPITAL LETTER O WITH DIAERESIS',
	215 => 'MULTIPLICATION SIGN',
	216 => 'LATIN CAPITAL LETTER O WITH STROKE',
	217 => 'LATIN CAPITAL LETTER U WITH GRAVE',
	218 => 'LATIN CAPITAL LETTER U WITH ACUTE',
	219 => 'LATIN CAPITAL LETTER U WITH CIRCUMFLEX',
	220 => 'LATIN CAPITAL LETTER U WITH DIAERESIS',
	221 => 'LATIN CAPITAL LETTER Y WITH ACUTE',
	222 => 'LATIN CAPITAL LETTER THORN',
	223 => 'LATIN SMALL LETTER SHARP S',
	224 => 'LATIN SMALL LETTER A WITH GRAVE',
	225 => 'LATIN SMALL LETTER A WITH ACUTE',
	226 => 'LATIN SMALL LETTER A WITH CIRCUMFLEX',
	227 => 'LATIN SMALL LETTER A WITH TILDE',
	228 => 'LATIN SMALL LETTER A WITH DIAERESIS',
	229 => 'LATIN SMALL LETTER A WITH RING ABOVE',
	230 => 'LATIN SMALL LIGATURE AE',
	231 => 'LATIN SMALL LETTER C WITH CEDILLA',
	232 => 'LATIN SMALL LETTER E WITH GRAVE',
	233 => 'LATIN SMALL LETTER E WITH ACUTE',
	234 => 'LATIN SMALL LETTER E WITH CIRCUMFLEX',
	235 => 'LATIN SMALL LETTER E WITH DIAERESIS',
	236 => 'LATIN SMALL LETTER I WITH GRAVE',
	237 => 'LATIN SMALL LETTER I WITH ACUTE',
	238 => 'LATIN SMALL LETTER I WITH CIRCUMFLEX',
	239 => 'LATIN SMALL LETTER I WITH DIAERESIS',
	240 => 'LATIN SMALL LETTER ETH',
	241 => 'LATIN SMALL LETTER N WITH TILDE',
	242 => 'LATIN SMALL LETTER O WITH GRAVE',
	243 => 'LATIN SMALL LETTER O WITH ACUTE',
	244 => 'LATIN SMALL LETTER O WITH CIRCUMFLEX',
	245 => 'LATIN SMALL LETTER O WITH TILDE',
	246 => 'LATIN SMALL LETTER O WITH DIAERESIS',
	247 => 'DIVISION SIGN',
	248 => 'LATIN SMALL LETTER O WITH STROKE',
	249 => 'LATIN SMALL LETTER U WITH GRAVE',
	250 => 'LATIN SMALL LETTER U WITH ACUTE',
	251 => 'LATIN SMALL LETTER U WITH CIRCUMFLEX',
	252 => 'LATIN SMALL LETTER U WITH DIAERESIS',
	253 => 'LATIN SMALL LETTER Y WITH ACUTE',
	254 => 'LATIN SMALL LETTER THORN',
	255 => 'LATIN SMALL LETTER Y WITH DIAERESIS',
); 

$l = '------------------------------------------';
for ($i = 0; $i < 256; $i ++)  {
	print "OCT DEC HX C $l\n" unless $i % 16;
	$c = uc(sprintf("%c",$i)); if ($i < 32) {$c = ' '}
	$x = uc(sprintf("%x",$i)); while (length($x) < 2) {$x = '0' . $x}
	$d = uc(sprintf("%d",$i)); while (length($d) < 3) {$d = ' ' . $d}
	$o = uc(sprintf("%o",$i)); while (length($o) < 3) {$o = '0' . $o}
	print "$o $d $x $c $chrset{$i}\n";
}
print "OCT DEC HX C $l\n";

