ascii-3.18/ascii.10000664000175000017500000001551213137674350012072 0ustar esresr'\" t .\" Title: ascii .\" Author: [see the "AUTHOR" section] .\" Generator: DocBook XSL Stylesheets v1.79.1 .\" Date: 07/31/2017 .\" Manual: Development Tools .\" Source: ascii .\" Language: English .\" .TH "ASCII" "1" "07/31/2017" "ascii" "Development Tools" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .\" http://bugs.debian.org/507673 .\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html .\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- .\" disable hyphenation .nh .\" disable justification (adjust text to left margin only) .ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- .SH "NAME" ascii \- report character aliases .SH "SYNOPSIS" .HP \w'\fBascii\fR\ 'u \fBascii\fR [\-dxohv] [\-t] [\fIchar\-alias\fR...] .SH "OPTIONS" .PP Called with no options, \fBascii\fR behaves like `ascii \-h\*(Aq\&. Options are as follows: .PP \-t .RS 4 Script\-friendly mode, emits only ISO/decimal/hex/octal/binary encodings of the character\&. .RE .PP \-s .RS 4 Parse multiple characters\&. Convenient way of parsing strings\&. .RE .PP \-a .RS 4 Print in vertical aspect (4 columns by 16 rows) rather than 16x4\&. This option combines only with \-d \-o \-x \-b and must precede them\&. .RE .PP \-d .RS 4 Ascii table in decimal\&. .RE .PP \-x .RS 4 Ascii table in hex\&. .RE .PP \-o .RS 4 Ascii table in octal\&. .RE .PP \-b .RS 4 Ascii table in binary\&. .RE .PP \-h, \-? .RS 4 Show summary of options and a simple ASCII table\&. .RE .PP \-v .RS 4 Show version of program\&. .RE .SH "DESCRIPTION" .PP Characters in the ASCII set can have many aliases, depending on context\&. A character\*(Aqs possible names include: .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Its bit pattern (binary representation)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Its hex, decimal and octal representations\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Its teletype mnemonic and caret\-notation form (for control chars)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Its backlash\-escape form in C (for some control chars)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Its printed form (for printables)\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Its full ISO official name in English\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Its ISO/ECMA code table reference\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Its name as an HTML/SGML entity\&. .RE .sp .RS 4 .ie n \{\ \h'-04'\(bu\h'+03'\c .\} .el \{\ .sp -1 .IP \(bu 2.3 .\} Slang and other names in wide use for it among hackers\&. .RE .PP This utility accepts command\-line strings and tries to interpret them as one of the above\&. When it finds a value, it prints \fIall\fR of the names of the character\&. The constructs in the following list can be used to specify character values\&. If an argument could be interpreted in two or more ways, names for all the different characters it might be are dumped\&. .PP \fIcharacter\fR .RS 4 Any character not described by one of the following conventions represents the character itself\&. .RE .PP \fB^\fR\fIcharacter\fR .RS 4 A caret followed by a character\&. .RE .PP \fB\e\fR\fI[abfnrtv0]\fR .RS 4 A backslash followed by certain special characters (abfnrtv)\&. .RE .PP \fImnemonic\fR .RS 4 An ASCII teletype mnemonic\&. .RE .PP \fIhexadecimal\fR .RS 4 A hexadecimal (hex) sequence consists of one or two case\-insensitive hex digit characters (01234567890abcdef)\&. To ensure hex interpretation use \fIhex\fR\fBh\fR\fI,\fR \fB0x\fR\fIhex,\fR \fBx\fR\fIhex\fR or \fB\ex\fR\fIhex\&.\fR .RE .PP \fIdecimal\fR .RS 4 A decimal sequence consists of one, two or three decimal digit characters (0123456789)\&. To ensure decimal interpretation use \fB\e0d\fR\fIdecimal,\fR \fBd\fR\fIdecimal,\fR or \fB\ed\fR\fIdecimal\&.\fR .RE .PP \fIoctal\fR .RS 4 An octal sequence consists of one, two or three octal digit characters (01234567)\&. To ensure octal interpretation use \fB\e\fR\fI,\fR \fB0o\fR\fI,\fR \fBo\fR\fI,\fR or \fB\eo\fR\fI\&.\fR .RE .PP \fIbit pattern\fR .RS 4 A bit pattern (binary) sequence consists of one to eight binary digit characters (01)\&. To ensure bit interpretation use \fB0b\fR\fI,\fR \fBb\fR\fI\fR or \fB\eb\fR\fI\&.\fR .RE .PP \fIISO\fR/\fIECMA code\fR .RS 4 An ISO/ECMA code sequence consists of one or two decimal digit characters, a slash, and one or two decimal digit characters\&. .RE .PP \fIname\fR .RS 4 An official ASCII or (unofficial) slang name\&. .RE .PP The slang names recognized and printed out are from a rather comprehensive list that first appeared on USENET in early 1990 and has been continuously updated since\&. Mnemonics recognized and printed include the official ASCII set, some official ISO names (where those differ) and a few common\-use alternatives (such as NL for LF)\&. HTML/SGML entity names are also printed when applicable\&. All comparisons are case\-insensitive, and dashes are mapped to spaces\&. Any unrecognized arguments or out of range values are silently ignored\&. Note that the \fB\-s\fR option will not recognize \*(Aqlong\*(Aq names, as it cannot differentiate them from other parts of the string\&. .PP For correct results, be careful to stringize or quote shell metacharacters in arguments (especially backslash)\&. .PP This utility is particularly handy for interpreting cc(1)\*(Aqs ugly octal `invalid\-character\*(Aq messages, or when coding anything to do with serial communications\&. As a side effect it serves as a handy base\-converter for random 8\-bit values\&. .SH "AUTHOR" .PP Eric S\&. Raymond ; November 1990 (home page at \m[blue]\fBhttp://www\&.catb\&.org/~esr/\fR\m[])\&. Reproduce, use, and modify as you like as long as you don\*(Aqt remove this authorship notice\&. Ioannis E\&. Tambouras added command options and minor enhancements\&. Brian J\&. Ginsbach fixed several bugs and expanded the man page\&. David N\&. Welton added the \fB\-s\fR option\&. Matej Vela corrected the ISO names\&. Dave Capella contributed the idea of listing HTML/SGML entities\&. ascii-3.18/ascii.c0000664000175000017500000002516613137672221012155 0ustar esresr/* * ascii.c -- quick crossreference for ASCII character aliases * * Tries to interpret arguments as names or aliases of ascii characters * and dumps out *all* the aliases of each. Accepts literal characters, * standard mnemonics, C-style backslash escapes, caret notation for control * characters, numbers in hex/decimal/octal/binary, English names. * * The slang names used are selected from the 2.2 version of the USENET ascii * pronunciation guide. Some additional ones were merged in from the Jargon * File. * * For license terms, see the file COPYING. * SPDX-License-Identifier: BSD-2-Clause */ #ifndef S_SPLINT_S #include #include #endif /* S_SPLINT_S */ #include #include #include #include #include #ifdef __CYGWIN__ #undef stricmp #endif /* __CYGWIN__ */ typedef char *string; static bool terse = false; static bool help = false; static bool line = false; enum { decimal, hex, octal, binary } mode; void print_table(unsigned short delivery, bool vertical); static string cnames[128][16] = { { #include "nametable.h" } }; static int atob(str) /* ASCII-to-binary conversion */ char *str; { int val; for (val = 0; *str != '\0'; str++) { val *= 2; if (*str == '1') val++; else if (*str != '0') return(-1); } return(val); } void showHelp(FILE *out, char *progname) { fprintf(out,"Usage: %s [-adxohv] [-t] [char-alias...]\n", progname); #define P(s) (void)fputs(s "\n", out); #include "splashscreen.h" #undef P exit(0); } static void process_options(int argc, char *argv[], char * opt_string) { int op; bool vertical = false; while( (op=getopt(argc, argv, opt_string)) != -1) { switch (op) { case 'a': vertical = true; break; case 't': terse = true; break; case 's': terse = true; line = true; break; case 'd': print_table(decimal, vertical); exit(0); case 'x': print_table(hex, vertical); exit(0); case 'o': print_table(octal, vertical); exit(0); case 'b': print_table(binary, vertical); exit(0); case '?': case 'h': help = true; break; case 'v': printf("ascii %3.2f\n",REVISION); exit(0); default : help = true; break; } /*switch*/ }/*while*/ } static char *btoa(unsigned int val) /* binary-to-ASCII conversion */ { #define BITSPERCHAR 8 char *rp; static char rep[BITSPERCHAR + 1]; /* write out external representation at least one char */ *(rp = rep + BITSPERCHAR) = '\0'; do { *--rp = (char)('0' + (val & 1)); /* Is '1' == '0' + 1 in EBCDIC? */ val /= 2; } while (val != 0 && rp > rep); #ifndef SHORT_BINARY_REPRESENTATION while (rp > rep) *--rp = '0'; #endif return(rp); } static void speak(unsigned int ch) /* list all the names for a given character */ { char **ptr = &cnames[ch][0]; if (terse) { (void) printf("%u/%u %u 0x%02X 0o%o %s\n", ch / 16, ch % 16, ch, ch, ch, btoa(ch)); return; } (void) printf( "ASCII %u/%u is decimal %03u, hex %02x, octal %03o, bits %s: ", ch / 16, ch % 16, ch, ch, ch, btoa(ch)); /* display high-half characters */ if (ch & 0x80) { ch &=~ 0x80; if (ch == 0x7f) (void) printf("meta-^?\n"); else if (isprint((int)ch)) (void) printf("meta-%c\n", (char)ch); else (void) printf("meta-^%c\n", '@' + (ch & 0x1f)); return; } if (isprint((int)ch)) (void) printf("prints as `%s'\n", *ptr++); else if (iscntrl((char)ch) || ch == 0x7F) { if (ch == 0x7f) (void) printf("called ^?"); else (void) printf("called ^%c", '@' + (ch & 0x1f)); for (; strlen(*ptr) < 4 && isupper(**ptr); ptr++) (void) printf(", %s", *ptr); (void) putchar('\n'); } (void) printf("Official name: %s\n", *ptr++); if (*ptr) { char *commentary = (char *)NULL; if (**ptr == '\\') { (void) printf("C escape: '%s'\n", *ptr); ptr++; } (void) printf("Other names: "); for (; *ptr; ptr++) if (**ptr == '#') commentary = *ptr; else (void) printf("%s%s ", *ptr, (ptr[1]!=NULL && *ptr[1] != '#') ? "," : ""); (void) putchar('\n'); if (commentary) (void) printf("Note: %s\n", commentary+2); } (void) putchar('\n'); } static int stricmp(char *s, char *t) /* case-blind string compare */ { while (*s!='\0' && tolower(*s) == tolower(*t)) s++, t++; return (int)(*t - *s); } static void ascii(char *str) { int ch, hi, lo; char **ptr; size_t len = strlen(str); /* interpret single characters as themselves */ if (len == 1) { speak((unsigned int)str[0]); /* also interpret single digits as numeric */ if(!line && strchr("0123456789ABCDEFabcdef",str[0])) { int hval; (void) sscanf(str, "%x", &hval); speak(hval); } return; } /* process multiple letters */ if (line == 1) { for (ch = 0; ch < len; ch ++) { speak((unsigned int)str[ch]); } return; } /* interpret ^-escapes as control-character notation */ if (strcmp(str, "^?") == 0) { speak((unsigned int)0x7F); return; } else if (str[0] == '^' && len == 2) { speak((unsigned int)(str[1] & 0x1f)); return; } /* interpret C-style backslash escapes */ if (*str == '\\' && len == 2 && strchr("abfnrtv0", str[1])) for (ch = 7; ch < 14; ch++) for (ptr = &cnames[ch][1]; *ptr; ptr++) if (**ptr == '\\' && strcmp(str, *ptr) == 0) { speak((unsigned int)ch); return; } /* interpret 2 and 3-character ASCII control mnemonics */ if (len == 2 || len == 3) { /* first check for standard mnemonics */ if (stricmp(str, "DEL") == 0) { speak(0x7f); return; } if (stricmp(str, "BL") == 0) { speak(' '); return; } else if (isalpha(str[0])) for (ch = 0; ch <= 32; ch++) if (!stricmp(str,cnames[ch][0]) || !strcmp(str,cnames[ch][1])) { speak(ch); return; } } /* OK, now try to interpret the string as a numeric */ if (len > 1 && len < 9) { int hval, dval, oval, bval, spoken = 0; dval = oval = hval = bval = -1; /* if it's all numeric it could be in one of three bases */ if (len <= 2 && strspn(str,"0123456789ABCDEFabcdef") == len) (void) sscanf(str, "%x", &hval); if (len <= 3 && strspn(str, "0123456789") == len) (void) sscanf(str, "%d", &dval); if (len <= 3 && strspn(str, "01234567") == len) (void) sscanf(str, "%o", &oval); if (len <= 9 && strspn(str, "01") == len) bval = atob(str); /* accept 0xnn, \xnn, xnn and nnh forms for hex */ if (hval == -1) if ((str[0]=='0'||str[0]=='\\') && tolower(str[1]) == 'x') (void) sscanf(str + 2, "%x", &hval); else if (tolower(str[0]) == 'x') (void) sscanf(str + 1, "%x", &hval); else if ((len >= 2) && (len <= 3) && (strspn(str,"0123456789ABCDEFabcdef") == (len-1)) && (tolower(str[len - 1]) == 'h')) (void) sscanf(str, "%x", &hval); /* accept 0onn, \onnn, onnn and \nnn forms for octal */ if (oval == -1) if ((str[0]=='0'||str[0]=='\\') && tolower(str[1]) == 'o') (void) sscanf(str + 2, "%o", &oval); else if (tolower(str[0]) == 'o') (void) sscanf(str + 1, "%o", &oval); else if (str[0] == '\\' && strspn(str + 1, "0123456789") == len - 1) (void) sscanf(str + 1, "%o", &oval); /* accept 0dnnn, \dnnn and dnnn forms for decimal */ if (dval == -1) if ((str[0]=='0'||str[0]=='\\') && tolower(str[1]) == 'd') (void) sscanf(str + 2, "%d", &dval); else if (tolower(str[0]) == 'd') (void) sscanf(str + 1, "%d", &dval); /* accept 0bnnn, \bnnn and bnnn forms for binary */ if (bval == -1) if ((str[0]=='0'||str[0]=='\\') && tolower(str[1]) == 'b') bval = atob(str + 2); else if (tolower(str[0]) == 'b') bval = atob(str + 1); /* OK, now output all values */ if (hval > -1 && hval < 256) speak(hval & 0xff); if (dval > -1 && dval < 256) speak(dval & 0xff); if (oval > -1 && oval < 256) speak(oval & 0xff); if (bval > -1 && bval < 256) speak(bval & 0xff); if (!(hval==-1 && dval==-1 && oval==-1 && bval==-1)) { if (hval > -1 || dval > -1 || oval > -1 || bval > -1) return; if (hval < 256 || dval < 256 || oval < 256 || bval < 256) return; } } if (sscanf(str, "%d/%d", &hi, &lo) == 2) /* code table reference? */ { speak(hi*16 + lo); return; } else if (len > 1 && isalpha(str[0])) /* try to match long names */ { char canbuf[BUFSIZ], *ep; int i; /* map dashes and other junk to spaces */ for (i = 0; i <= len; i++) if (str[i] == '-' || isspace(str[i])) canbuf[i] = ' '; else canbuf[i] = str[i]; /* strip `sign' or `Sign' suffix */ ep = canbuf + strlen(canbuf) - 4; if (!strcmp(ep, "sign") || !strcmp(ep, "Sign")) *ep = '\0'; /* remove any trailing whitespace */ while (canbuf[strlen(canbuf) - 1] == ' ') canbuf[strlen(canbuf) - 1] = '\0'; /* look through all long names for a match */ for (ch = 0; ch < 128; ch++) for (ptr = &cnames[ch][1]; *ptr; ptr++) if (!stricmp(*ptr, canbuf)) speak(ch); } /* outer if */ } static char *bin(int n) { static char rep[9]; int c, k; rep[0] = '\0'; for (c = 6; c >= 0; c--) { k = n >> c; if (k & 1) strncat(rep, "1", sizeof(rep)); else strncat(rep, "0", sizeof(rep)); } return rep; } void print_table(unsigned short delivery, bool vertical) { static unsigned short i, j, len; char separator[]= " "; char *tail = separator + 3 ; char *space; char *name; int rows, cols; if (vertical) cols = 4; else cols = 8; rows = 128 / cols; for (i = 0; i < rows; i++) { for (j = 0; j < cols; j++) { name= *cnames[i+(j*rows)]; len = strlen(name); space = tail - (len % 3) ; switch (delivery) { case decimal: printf("%5d %1s%1s",i+(j*rows),name,space); break; case octal : printf(" %03o %1s%1s",i+(j*rows),name,space); break; case hex : printf(" %02X %1s%1s",i+(j*rows),name,space); break; case binary : printf(" %s %1s%1s",bin(i+(j*rows)),name,space); break; } } printf("\n"); } } int main(int argc, char **argv) { char *optstring="abtshvxod" ; process_options(argc, argv, optstring) ; if (help || argc == optind) showHelp(stdout, argv[0]); else while (optind < argc) ascii(argv[optind++]); exit(0); } /* ascii.c ends here */ ascii-3.18/ascii.xml0000644000175000017500000002050313137672731012525 0ustar esresr ascii 1 Aug 24 1994 ascii ascii Development Tools ascii report character aliases ascii -dxohv -t char-alias OPTIONS Called with no options, ascii behaves like `ascii -h'. Options are as follows: -t Script-friendly mode, emits only ISO/decimal/hex/octal/binary encodings of the character. -s Parse multiple characters. Convenient way of parsing strings. -a Print in vertical aspect (4 columns by 16 rows) rather than 16x4. This option combines only with -d -o -x -b and must precede them. -d Ascii table in decimal. -x Ascii table in hex. -o Ascii table in octal. -b Ascii table in binary. -h, -? Show summary of options and a simple ASCII table. -v Show version of program. DESCRIPTION Characters in the ASCII set can have many aliases, depending on context. A character's possible names include: Its bit pattern (binary representation). Its hex, decimal and octal representations. Its teletype mnemonic and caret-notation form (for control chars). Its backlash-escape form in C (for some control chars). Its printed form (for printables). Its full ISO official name in English. Its ISO/ECMA code table reference. Its name as an HTML/SGML entity. Slang and other names in wide use for it among hackers. This utility accepts command-line strings and tries to interpret them as one of the above. When it finds a value, it prints all of the names of the character. The constructs in the following list can be used to specify character values. If an argument could be interpreted in two or more ways, names for all the different characters it might be are dumped. character Any character not described by one of the following conventions represents the character itself. ^character A caret followed by a character. \[abfnrtv0] A backslash followed by certain special characters (abfnrtv). mnemonic An ASCII teletype mnemonic. hexadecimal A hexadecimal (hex) sequence consists of one or two case-insensitive hex digit characters (01234567890abcdef). To ensure hex interpretation use hexh, 0xhex, xhex or \xhex. decimal A decimal sequence consists of one, two or three decimal digit characters (0123456789). To ensure decimal interpretation use \0ddecimal, ddecimal, or \ddecimal. octal An octal sequence consists of one, two or three octal digit characters (01234567). To ensure octal interpretation use \<octal>, 0o<octal>, o<octal>, or \o<octal>. bit pattern A bit pattern (binary) sequence consists of one to eight binary digit characters (01). To ensure bit interpretation use 0b<bit pattern>, b<bit pattern> or \b<bit pattern>. ISO/ECMA code An ISO/ECMA code sequence consists of one or two decimal digit characters, a slash, and one or two decimal digit characters. name An official ASCII or (unofficial) slang name. The slang names recognized and printed out are from a rather comprehensive list that first appeared on USENET in early 1990 and has been continuously updated since. Mnemonics recognized and printed include the official ASCII set, some official ISO names (where those differ) and a few common-use alternatives (such as NL for LF). HTML/SGML entity names are also printed when applicable. All comparisons are case-insensitive, and dashes are mapped to spaces. Any unrecognized arguments or out of range values are silently ignored. Note that the option will not recognize 'long' names, as it cannot differentiate them from other parts of the string. For correct results, be careful to stringize or quote shell metacharacters in arguments (especially backslash). This utility is particularly handy for interpreting cc(1)'s ugly octal `invalid-character' messages, or when coding anything to do with serial communications. As a side effect it serves as a handy base-converter for random 8-bit values. AUTHOR Eric S. Raymond esr@thyrsus.com; November 1990 (home page at http://www.catb.org/~esr/). Reproduce, use, and modify as you like as long as you don't remove this authorship notice. Ioannis E. Tambouras <ioannis@debian.org> added command options and minor enhancements. Brian J. Ginsbach <ginsbach@sgi.com> fixed several bugs and expanded the man page. David N. Welton <davidw@efn.org> added the option. Matej Vela corrected the ISO names. Dave Capella contributed the idea of listing HTML/SGML entities. ascii-3.18/control0000664000175000017500000000176112537365612012325 0ustar esresr# This is not a real Debian control file, though the syntax is compatible. # It's project metadata for the shipper tool Package: ascii Description: List ASCII idiomatic names and octal/decimal code-point forms. Provides easy conversion between various byte representations and the American Standard Code for Information Interchange (ASCII) character table. It knows about a wide variety of hex, binary, octal, Teletype mnemonic, ISO/ECMA code point, slang names, XML entity names, and other representations. Given any one on the command line, it will try to display all others. Called with no arguments it displays a handy small ASCII chart. #XBS-Destinations: freshcode Homepage: http://www.catb.org/~esr/ascii XBS-HTML-Target: index.html XBS-Repository-URL: http://thyrsus.com/gitweb/?p=ascii.git XBS-Developer-Clone: git@thyrsus.com:ascii XBS-Anonymous-Clone: git://thyrsus.com/repositories/ascii.git XBS-Logo: ascii-logo.png #XBS-Project-Tags: ASCII XBS-VC-Tag-Template: %(version)s ascii-3.18/COPYING0000644000175000017500000000243612610451762011745 0ustar esresr BSD LICENSE Copyright (c) 2015, Eric S. Raymond All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ascii-3.18/Makefile0000664000175000017500000000312413140202734012337 0ustar esresr# ascii -- interactive ASCII reference VERS=$(shell sed -n splashscreen.h -e 's/\\/\\\\/g' -e 's/"/\\"/g' -e 's/.*/P("&");/' nametable.h: nametable sed nametable.h -e '/^#/d' -e 's/^[A-Za-z ]*: */ /' -e 's/%%/ }, {/' ascii.1: ascii.xml xmlto man ascii.xml ascii.html: ascii.xml xmlto html-nochunks ascii.xml clean: rm -f ascii ascii.o splashscreen.h nametable.h *.rpm *.tar.gz MANIFEST *.1 *.html CPPCHECKOPTS = cppcheck: nametable.h splashscreen.h cppcheck -DREVISION=$(VERS) $(CPPCHECKOPTS) ascii.c SPLINT_SUPPRESSIONS = -boolops -nullret -initallelements +charintliteral splint: splint +quiet +posixlib $(SPLINT_SUPPRESSIONS) ascii.c install: ascii ascii.1 cp ascii $(DESTDIR)$(PREFIX)/bin/ascii cp ascii.1 $(DESTDIR)$(PREFIX)/share/man/man1 uninstall: rm $(DESTDIR)$(PREFIX)/bin/ascii rm $(DESTDIR)$(PREFIX)/share/man/man1/ascii.1 SOURCES = README COPYING NEWS control Makefile ascii.c ascii.xml splashscreen nametable version: @echo $(VERS) ascii-$(VERS).tar.gz: $(SOURCES) ascii.1 @ls $(SOURCES) ascii.1 | sed s:^:ascii-$(VERS)/: >MANIFEST @(cd ..; ln -s ascii ascii-$(VERS)) (cd ..; tar -czvf ascii/ascii-$(VERS).tar.gz `cat ascii/MANIFEST`) @(cd ..; rm ascii-$(VERS)) dist: ascii-$(VERS).tar.gz release: ascii-$(VERS).tar.gz ascii.html shipper version=$(VERS) | sh -e -x refresh: ascii.html shipper -N -w version=$(VERS) | sh -e -x ascii-3.18/nametable0000644000175000017500000002501412245501067012560 0ustar esresr# Master name table for the ASCII utility. # The colon-terminated field names are not interpreted, they're for human eyes. # Most of this file gets copied into one big C initializer. Mnemonics: "NUL", ISO names: "Null", C escape: "\\0", %% Mnemonics: "SOH", ISO names: "Start Of Header", %% Mnemonics: "STX", ISO names: "Start of Text", %% Mnemonics: "ETX", ISO names: "End of Text", %% Mnemonics: "EOT", ISO names: "End Of Transmission", %% Mnemonics: "ENQ", ISO names: "Enquiry", %% Mnemonics: "ACK", ISO names: "Acknowledge", %% Mnemonics: "BEL", ISO names: "Bell", C escape: "\\a", Synonyms: "Alert", %% Mnemonics: "BS", ISO names: "Backspace", C escape: "\\b", %% Mnemonics: "HT", "TAB", ISO names: "Character Tabulation", "Horizontal Tab", C escape: "\\t", %% Mnemonics: "LF", "NL", ISO name: "Line Feed", "Newline", C escape: "\\n", %% Mnemonics: "VT", ISO names: "Line Tabulation", "Vertical Tab", C escape: "\\v", %% Mnemonics: "FF", ISO names: "Form Feed", C escape: "\\f", %% Mnemonics: "CR", ISO names: "Carriage Return", C escape: "\\r", %% Mnemonics: "SO", "LS1", ISO names: "Shift Out", "Locking Shift 1", %% Mnemonics: "SI", "LS0", ISO names: "Shift In", "Locking Shift 0", %% Mnemonics: "DLE", ISO names: "Data Link Escape", %% Mnemonics: "DC1", ISO names: "Device Control 1", %% Mnemonics: "DC2", ISO names: "Device Control 2", %% Mnemonics: "DC3", ISO names: "Device Control 3", %% Mnemonics: "DC4", ISO names: "Device Control 4", %% Mnemonics: "NAK", ISO names: "Negative Acknowledge", %% Mnemonics: "SYN", ISO names: "Synchronous Idle", %% Mnemonics: "ETB", ISO names: "End of Transmission Block", %% Mnemonics: "CAN", ISO names: "Cancel", %% Mnemonics: "EM", ISO names: "End of Medium", %% Mnemonics: "SUB", ISO names: "Substitute", %% Mnemonics: "ESC", ISO names: "Escape", %% Mnemonics: "FS", ISO names: "File Separator", %% Mnemonics: "GS", ISO names: "Group Separator", %% Mnemonics: "RS", ISO names: "Record Separator", %% Mnemonics: "US", ISO names: "Unit Separator", %% Mnemonics: " ", "SP", ISO names: "Space", "Blank", %% Mnemonics: "!", ISO names: "Exclamation Mark", Synonyms: "Bang", "Excl", "Wow", "Factorial", "Shriek", "Pling", "Smash", "Cuss", %% Mnemonics: "\"", ISO names: "Quotation Mark", Synonyms: "Double Quote", "Quote", "String Quote", "Dirk", "Literal Mark", "Double Glitch", XML name: """, Comment: "# See ' and ` for matching names.", %% Mnemonics: "#", ISO names: "Number Sign", Synonyms: "Pound", "Number", "Sharp", "Crunch", "Mesh", "Hex", "Hash", "Flash", "Grid", "Octothorpe", %% Mnemonics: "$", ISO names: "Currency Sign", Synonyms: "Dollar", "Buck", "Cash", "Ding", %% Mnemonics: "%", ISO names: "Percent Sign", Synonyms: "Mod", "Modulo", %% Mnemonics: "&", ISO names: "Ampersand", Synonyms: "Amper", "And", XML name: "&", %% Mnemonics: "'", ISO names: "Apostrophe", Synonyms: "Single Quote", "Close Quote", "Prime", "Tick", "Pop", "Spark", "Glitch", XML name: "'", Comment: "# See ` and \" for matching names.", %% Mnemonics: "(", ISO names: "Left Parenthesis", Synonyms: "Open", "Open Paren", "Left Paren", "Wax", "Sad", Comment: "# See ) for matching names.", %% Mnemonics: ")", ISO names: "Right Parenthesis", Synonyms: "Close", "Close Paren", "Right Paren", "Wane", "Happy", Comment: "# See ( for matching names.", %% Mnemonics: "*", ISO names: "Asterisk", Synonyms: "Star", "Splat", "Aster", "Times", "Gear", "Dingle", "Bug", "Twinkle", "Glob" , %% Mnemonics: "+", ISO names: "Plus Sign", Synonyms: "Add", "Cross", %% Mnemonics: ",", ISO names: "Comma", Synonyms: "Tail", %% Mnemonics: "-", ISO names: "Hyphen", Synonyms: "Dash", "Minus", "Worm", %% Mnemonics: ".", ISO names: "Full Stop", Synonyms: "Dot", "Decimal Point", "Radix Point", "Point", "Period", "Spot", %% Mnemonics: "/", ISO names: "Solidus", Synonyms: "Slash", "Stroke", "Slant", "Diagonal", "Virgule", "Over", "Slat", Comment: "# See \\ for matching names.", %% Mnemonics: "0", ISO names: "Digit Zero", %% Mnemonics: "1", ISO names: "Digit One", %% Mnemonics: "2", ISO names: "Digit Two", %% Mnemonics: "3", ISO names: "Digit Three", %% Mnemonics: "4", ISO names: "Digit Four", %% Mnemonics: "5", ISO names: "Digit Five", %% Mnemonics: "6", ISO names: "Digit Six", %% Mnemonics: "7", ISO names: "Digit Seven", %% Mnemonics: "8", ISO names: "Digit Eight", %% Mnemonics: "9", ISO names: "Digit Nine", %% Mnemonics: ":", ISO names: "Colon", Synonyms: "Double-Dot", %% Mnemonics: ";", ISO names: "Semicolon", Synonyms: "Semi", "Go-on", %% Mnemonics: "<", ISO names: "Less-than Sign", Synonyms: "Left Angle Bracket", "Read From", "In", "From", "Comesfrom", "Left Funnel", "Left Broket", "Crunch", "Suck", XML name: "<", Comment: "# See > for matching names.", %% Mnemonics: "=", ISO names: "Equals Sign", Synonyms: "Quadrathorp", "Gets", "Becomes", "Half-Mesh", %% Mnemonics: ">", ISO names: "Greater-than sign", Synonyms: "Right Angle Bracket", "Write To", "Into", "Toward", "Out", "To", "Gozinta", "Right Funnel", "Right Broket", "Zap", "Blow", XML name: ">", Comments: "# See < for matching names.", %% Mnemonics: "?", ISO names: "Question Mark", Comments: "Whatmark", "What", "Ques", %% Mnemonics: "@", ISO names: "Commercial At", Synonyms: "At", "Each", "Vortex", "Whorl", "Whirlpool", "Cyclone", "Snail", "Rose", %% Mnemonics: "A", ISO names: "Majuscule A", "Capital A", "Uppercase A", %% Mnemonics: "B", ISO names: "Majuscule B", "Capital B", "Uppercase B", %% Mnemonics: "C", ISO names: "Majuscule C", "Capital C", "Uppercase C", %% Mnemonics: "D", ISO names: "Majuscule D", "Capital D", "Uppercase D", %% Mnemonics: "E", ISO names: "Majuscule E", "Capital E", "Uppercase E", %% Mnemonics: "F", ISO names: "Majuscule F", "Capital F", "Uppercase F", %% Mnemonics: "G", ISO names: "Majuscule G", "Capital G", "Uppercase G", %% Mnemonics: "H", ISO names: "Majuscule H", "Capital H", "Uppercase H", %% Mnemonics: "I", ISO names: "Majuscule I", "Capital I", "Uppercase I", %% Mnemonics: "J", ISO names: "Majuscule J", "Capital J", "Uppercase J", %% Mnemonics: "K", ISO names: "Majuscule K", "Capital K", "Uppercase K", %% Mnemonics: "L", ISO names: "Majuscule L", "Capital L", "Uppercase L", %% Mnemonics: "M", ISO names: "Majuscule M", "Capital M", "Uppercase M", %% Mnemonics: "N", ISO names: "Majuscule N", "Capital N", "Uppercase N", %% Mnemonics: "O", ISO names: "Majuscule O", "Capital O", "Uppercase O", %% Mnemonics: "P", ISO names: "Majuscule P", "Capital P", "Uppercase P", %% Mnemonics: "Q", ISO names: "Majuscule Q", "Capital Q", "Uppercase Q", %% Mnemonics: "R", ISO names: "Majuscule R", "Capital R", "Uppercase R", %% Mnemonics: "S", ISO names: "Majuscule S", "Capital S", "Uppercase S", %% Mnemonics: "T", ISO names: "Majuscule T", "Capital T", "Uppercase T", %% Mnemonics: "U", ISO names: "Majuscule U", "Capital U", "Uppercase U", %% Mnemonics: "V", ISO names: "Majuscule V", "Capital V", "Uppercase V", %% Mnemonics: "W", ISO names: "Majuscule W", "Capital W", "Uppercase W", %% Mnemonics: "X", ISO names: "Majuscule X", "Capital X", "Uppercase X", %% Mnemonics: "Y", ISO names: "Majuscule Y", "Capital Y", "Uppercase Y", %% Mnemonics: "Z", ISO names: "Majuscule Z", "Capital Z", "Uppercase Z", %% Mnemonics: "[", ISO names: "Left Square Bracket", Synonyms: "Bracket", "Bra", "Square", Comments: "# See ] for matching names.", %% Mnemonics: "\\", ISO names: "Reversed Solidus", Synonyms: "Backslash", "Bash", "Backslant", "Backwhack", "Backslat", "Literal", "Escape", Comments: "# See / for matching names.", %% Mnemonics: "]", ISO names: "Right Square Bracket", Synonyms: "Unbracket", "Ket", "Unsquare", Comments: "# See [ for matching names.", %% Mnemonics: "^", ISO names: "Circumflex Accent", Synonyms: "Circumflex", "Caret", "Uparrow", "Hat", "Control", "Boink", "Chevron", "Hiccup", "Sharkfin", "Fang", %% Mnemonics: "_", ISO names: "Low Line", Synonyms: "Underscore", "Underline", "Underbar", "Under", "Score", "Backarrow", "Flatworm", Comments: "# Backarrow refers to this character's graphic in 1963 ASCII.", %% Mnemonics: "`", ISO names: "Grave Accent", Synonyms: "Grave", "Backquote", "Left Quote", "Open Quote", "Backprime", "Unapostrophe", "Backspark", "Birk", "Blugle", "Back Tick", "Push", Comments: "# See ' and \" for matching names.", %% Mnemonics: "a", ISO names: "Miniscule a", "Small a", "Lowercase a", %% Mnemonics: "b", ISO names: "Miniscule b", "Small b", "Lowercase b", %% Mnemonics: "c", ISO names: "Miniscule c", "Small c", "Lowercase c", %% Mnemonics: "d", ISO names: "Miniscule d", "Small d", "Lowercase d", %% Mnemonics: "e", ISO names: "Miniscule e", "Small e", "Lowercase e", %% Mnemonics: "f", ISO names: "Miniscule f", "Small f", "Lowercase f", %% Mnemonics: "g", ISO names: "Miniscule g", "Small g", "Lowercase g", %% Mnemonics: "h", ISO names: "Miniscule h", "Small h", "Lowercase h", %% Mnemonics: "i", ISO names: "Miniscule i", "Small i", "Lowercase i", %% Mnemonics: "j", ISO names: "Miniscule j", "Small j", "Lowercase j", %% Mnemonics: "k", ISO names: "Miniscule k", "Small k", "Lowercase k", %% Mnemonics: "l", ISO names: "Miniscule l", "Small l", "Lowercase l", %% Mnemonics: "m", ISO names: "Miniscule m", "Small m", "Lowercase m", %% Mnemonics: "n", ISO names: "Miniscule n", "Small n", "Lowercase n", %% Mnemonics: "o", ISO names: "Miniscule o", "Small o", "Lowercase o", %% Mnemonics: "p", ISO names: "Miniscule p", "Small p", "Lowercase p", %% Mnemonics: "q", ISO names: "Miniscule q", "Small q", "Lowercase q", %% Mnemonics: "r", ISO names: "Miniscule r", "Small r", "Lowercase r", %% Mnemonics: "s", ISO names: "Miniscule s", "Small s", "Lowercase s", %% Mnemonics: "t", ISO names: "Miniscule t", "Small t", "Lowercase t", %% Mnemonics: "u", ISO names: "Miniscule u", "Small u", "Lowercase u", %% Mnemonics: "v", ISO names: "Miniscule v", "Small v", "Lowercase v", %% Mnemonics: "w", ISO names: "Miniscule w", "Small w", "Lowercase w", %% Mnemonics: "x", ISO names: "Miniscule x", "Small x", "Lowercase x", %% Mnemonics: "y", ISO names: "Miniscule y", "Small y", "Lowercase y", %% Mnemonics: "z", ISO names: "Miniscule z", "Small z", "Lowercase z", %% Mnemonics: "{", ISO names: "Left Curly Bracket", Synonyms: "Left Brace", "Brace", "Open Brace", "Curly", "Leftit", "Embrace", Comments: "# See } for matching names.", %% Mnemonics: "|", ISO names: "Vertical Line", Synonyms: "Pipe", "Bar", "Or", "V-Bar", "Spike", "Gozinta", "Thru", %% Mnemonics: "}", ISO names: "Right Curly Bracket", Synonyms: "Right Brace", "Unbrace", "Close Brace", "Uncurly", "Rytit", "Bracelet", Comments: "# See { for matching names.", %% Mnemonics: "~", ISO names: "Overline", Synonyms: "Tilde", "Swung Dash", "Squiggle", "Approx", "Wiggle", "Twiddle", "Enyay", %% Mnemonics: "DEL", ISO names: "Delete", ascii-3.18/NEWS0000664000175000017500000000440713140203022011372 0ustar esresr ascii project news 3.18: 2017-08-01 Fix a packaging error, include NEWS in the tarball. 3.17: 2017-07-31 Add -b option to generate a table with binary code-points. 3.16: 2017-07-18 Add -a option to print in 4-column mode. 0-fill fix and octal code-point literals. 3.15: 2015-04-02 Gitorious is doomed. Project must move and metadata change accordingly. 3.14: 2013-11-27 Recognize \0 as ASCII NUL. ascii.cgi deleted: the it relies on is archaic and nonconformant. Markup improvements on the manual page. 3.13: 2013-11-20 Tweak Makefile to obey $(PREFIX) convention (from MacPorts). 3.12: 2012-11-23 Cygwin port fix. 3.11: 2011-03-15 Recognize single decimal or hex digits. Minor bug fixes and additional character names from Debian. 3.10: 2010-10-19 License change to BSD. Polish code to modern fully-ANSI C. 3.9: 2010-10-13 Fix some bugs in the name table. 3.8: 2005-03-03 Well, that was embarrassing. Note to self: *test the correct version next time*. Thanks to Marco Vanoni for the fix patch. 3.7: 2005-03-02 Fix a comment bug in the nametable. Improve splashscreen generation. 3.6: 2004-01-11 Fix brown-paper-bag bug in the Space entry. 3.5: 2003-12-28 2003 Source RPMs no longer require myversion to be defined. 3.4: 2003-12-24 Fix error in ! entry in nametable file. 3.3: 2003-12-24 Fix portability bug in Makefile sed script. 3.2: 2003-12-15 Add knowledge of XML entity names. First released by Eric S. Raymond , v1.0 March 1990 v1.1 November 1990 -- revised `slang' from the 2.2 pronunciation guide v1.2 March 1995 -- Fixed a core-dump bug v1.3 October 1995 -- Fixed a bug that shows up only under ELF. v2.0 December 1995 -- Interpret ISO-style code table escapes. v2.1 August 1997 -- merge in changes by Ioannis Tambouras. v2.2 November 1997 -- merge in more changes by Ioannis Tambouras. v2.3 November 1997 -- incorporated Colin Plumb's splash-screen idea. v2.4 December 1998 -- additions by Brian Ginsbach. v2.5 December 1998 -- -s option by David N. Welton. v2.6 June 1999 -- bug fixes by M.R. van Schouwen. v2.7 October 1999 -- minor packaging and option changes. v3.0 July 2000 -- added HTML/SGML entity names v3.1 July 2002 -- documentation converted to XML ascii-3.18/README0000644000175000017500000000055112245471772011575 0ustar esresr ascii This is a handy little utility that recognizes many different ways of naming an ASCII character (hex, octal, binary, decimal, C escape, ISO character table pair, slang names, and others) and prints out all the equivalents. The latest sources for this utility live at http://www.catb.org/~esr/ascii/ Eric S. Raymond esr@thyrsus.com ascii-3.18/splashscreen0000644000175000017500000000316213137672404013327 0ustar esresr -t = one-line output -a = vertical format -d = Decimal table -o = octal table -x = hex table -b binary table -h = This help screen -v = version information Prints all aliases of an ASCII character. Args may be chars, C \-escapes, English names, ^-escapes, ASCII mnemonics, or numerics in decimal/octal/hex. Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex Dec Hex 0 00 NUL 16 10 DLE 32 20 48 30 0 64 40 @ 80 50 P 96 60 ` 112 70 p 1 01 SOH 17 11 DC1 33 21 ! 49 31 1 65 41 A 81 51 Q 97 61 a 113 71 q 2 02 STX 18 12 DC2 34 22 " 50 32 2 66 42 B 82 52 R 98 62 b 114 72 r 3 03 ETX 19 13 DC3 35 23 # 51 33 3 67 43 C 83 53 S 99 63 c 115 73 s 4 04 EOT 20 14 DC4 36 24 $ 52 34 4 68 44 D 84 54 T 100 64 d 116 74 t 5 05 ENQ 21 15 NAK 37 25 % 53 35 5 69 45 E 85 55 U 101 65 e 117 75 u 6 06 ACK 22 16 SYN 38 26 & 54 36 6 70 46 F 86 56 V 102 66 f 118 76 v 7 07 BEL 23 17 ETB 39 27 ' 55 37 7 71 47 G 87 57 W 103 67 g 119 77 w 8 08 BS 24 18 CAN 40 28 ( 56 38 8 72 48 H 88 58 X 104 68 h 120 78 x 9 09 HT 25 19 EM 41 29 ) 57 39 9 73 49 I 89 59 Y 105 69 i 121 79 y 10 0A LF 26 1A SUB 42 2A * 58 3A : 74 4A J 90 5A Z 106 6A j 122 7A z 11 0B VT 27 1B ESC 43 2B + 59 3B ; 75 4B K 91 5B [ 107 6B k 123 7B { 12 0C FF 28 1C FS 44 2C , 60 3C < 76 4C L 92 5C \ 108 6C l 124 7C | 13 0D CR 29 1D GS 45 2D - 61 3D = 77 4D M 93 5D ] 109 6D m 125 7D } 14 0E SO 30 1E RS 46 2E . 62 3E > 78 4E N 94 5E ^ 110 6E n 126 7E ~ 15 0F SI 31 1F US 47 2F / 63 3F ? 79 4F O 95 5F _ 111 6F o 127 7F DEL