xolatilization/xscii.c

98 lines
5.1 KiB
C
Executable File

#include <xolatile/xtandard.h>
static procedure echo_base (integer index, integer base, integer colour, integer effect) {
print ("/0 | /-");
echo_colour (colour, effect);
if (base == 2) {
echo (format_to_string (index, 0, base, 7, '0'));
} else if (base == 8) {
echo (format_to_string (index, 0, base, 3, '0'));
} else if (base == 16) {
echo (format_to_string (index, 0, base, 2, '0'));
} else {
echo (format_to_string (index, 0, base, 3, ' '));
}
echo_cancel ();
}
static procedure echo_code (integer index) {
character * code [] = {
"NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL", "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI",
"DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US",
" "
};
if (index == 127) {
print ("/0 | /4DEL/-");
} else if (character_is_visible (index) == false) {
print ("/0 | /4%s/-", code [index]);
if (string_length (code [index]) == 2) {
echo (" ");
}
} else {
print ("/0 | /4%c /-", index);
}
}
static procedure echo_name (integer index) {
character * name [] = {
"Null", "Start of heading", "Start of text", "End of text",
"End of transmission", "Enquiry", "Acknowledge", "Bell",
"Backspace", "Horizontal tab", "Line feed", "Vertical tab",
"Form feed", "Carriage return", "Shift out", "Shift in",
"Data link escape", "Device control 1", "Device control 2", "Device control 3",
"Device control 4", "Negative acknowledge", "Synchronous idle", "End transmission block",
"Cancel", "End of medium", "Substitute", "Escape",
"File separator", "Group separator", "Record separator", "Unit separator",
"Space", "Exclamation mark", "Speech mark", "Number sign",
"Dollar sign", "Percent", "Ampersand", "Quote",
"Open parenthesis", "Close parenthesis", "Asterisk", "Plus",
"Comma", "Minus", "Period", "Slash",
"Zero", "One", "Two", "Three",
"Four", "Five", "Six", "Seven",
"Eight", "Nine", "Colon", "Semicolon",
"Open angled bracket", "Equal", "Close angled bracket", "Question mark",
"At sign", "Uppercase A", "Uppercase B", "Uppercase C",
"Uppercase D", "Uppercase E", "Uppercase F", "Uppercase G",
"Uppercase H", "Uppercase I", "Uppercase J", "Uppercase K",
"Uppercase L", "Uppercase M", "Uppercase N", "Uppercase O",
"Uppercase P", "Uppercase Q", "Uppercase R", "Uppercase S",
"Uppercase T", "Uppercase U", "Uppercase V", "Uppercase W",
"Uppercase X", "Uppercase Y", "Uppercase Z", "Opening bracket",
"Backslash", "Closing bracket", "Caret", "Underscore",
"Grave", "Lowercase a", "Lowercase b", "Lowercase c",
"Lowercase d", "Lowercase e", "Lowercase f", "Lowercase g",
"Lowercase h", "Lowercase i", "Lowercase j", "Lowercase k",
"Lowercase l", "Lowercase m", "Lowercase n", "Lowercase o",
"Lowercase p", "Lowercase q", "Lowercase r", "Lowercase s",
"Lowercase t", "Lowercase u", "Lowercase v", "Lowercase w",
"Lowercase x", "Lowercase y", "Lowercase z", "Opening brace",
"Vertical bar", "Closing brace", "Tilde", "Delete"
};
print ("/0 | /5%s/-", name [index]);
output (" ", 24 - string_length (name [index]));
}
integer main (none) {
for (integer index = 0; index < 128; ++index) {
echo_base (index, 2, colour_white, effect_normal);
echo_base (index, 8, colour_cyan, effect_normal);
echo_base (index, 10, colour_cyan, effect_italic);
echo_base (index, 16, colour_cyan, effect_bold);
echo_code (index);
echo_name (index);
if (index % 2 != 0) {
echo ("\n");
}
}
return (log_success);
}