""" If this file is used as a stand-alone program, it takes two arguments. The first argument, which is required, is either 'dec' or 'hex' (without the quotes). The second, optional, argument is a file name. If the second argument is missing, the file name defaults to "ascii.dec" or "ascii.hex" respectively.
"""
import string, sys
# Writes an ASCII code table in base 10 or 16.
def table(file, hexbit):
if hexbit == 0:
head = 'Dec'
cntl_entry_format = '%3i %3s ^%-1s %-12s '
space_entry_format = '%3i SP '
printing_entry_format = '%3i %2s '
else:
head = 'Hex'
cntl_entry_format = '%3X %3s ^%-1s %-12s '
space_entry_format = '%3X SP '
printing_entry_format = '%3X %2s '
topline = \
' %s Name Ctrl %s Name %s Name %s Name\n\n' % \
(head, head, head, head)
endline = \
Line ending conventions from Reference, 2.1.2: "On Unix, this [how lines are
terminated] is the ASCII LF (linefeed) character. On DOS/Windows, it is the
ASCII sequence CR LF (return followed by linefeed). On Macintosh, it is the
ASCII CR (return) character."
ascii = ['NUL', 'SOH', 'STX', 'ETX', 'EOT', 'ENQ', 'ACK', 'BEL',
'BS', 'HT', 'LF', 'VT', 'NP', 'CR', 'SO', 'SI',
'DLE', 'DC1', 'DC2', 'DC3', 'DC4', 'NAK', 'SYN', 'ETB',
'CAN', 'EM', 'SUB', 'ESC', 'FS', 'GS', 'RS', 'US',
'SP', '!', '"', '#', '$', '%', '&', '\'',
'(', ')', '*', '+', ',', '-', '.', '/',
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', ':', ';', '<', '=', '>', '?',
'@', 'A', 'B', 'C', 'D', 'E', 'F', 'G',
'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',
'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '[', '\\', ']','^', '_',
'`', 'a', 'b', 'c', 'd', 'e', 'f', 'g',
'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o',
'p', 'q', 'r', 's', 't', 'u', 'v', 'w',
'x', 'y', 'z', '{', '|', '}', '~', 'DEL']
# Some entries have a short comment.
specials = { 7:'beep', 8:'backspace', 9:'tab', 10:'linefeed', \
11:'vertical tab', 13:'return', 17:'XON', 18:'XOFF', \
27:'escape'}
for i in range(32):
if not specials.has_key(i):
specials[i] = ''
entries = []
# The 32 control characters.
for i in range(32):
entries.append(cntl_entry_format % \
(i, ascii[i], chr(i+64), specials[i]) )
# Space.
entries.append(space_entry_format % 32)
# The printing characters.
for i in range(33, 128):
entries.append(printing_entry_format % (i, ascii[i]) )
# Arrange in four columns.
lines = []
for i in range(32):
lines.append('%s|%s|%s|%s\n' % (\
entries[i], entries[32+i], entries[64+i], entries[96+i]) )
text = string.join(lines, '')
f = open(file, 'w')
f.write(topline)
f.write(text)
f.write(endline)
f.close()
if __name__ == '__main__':
if len(sys.argv) > 2:
raise Exception, 'Too many arguments.'
if sys.argv[1] == 'dec':
if len(sys.argv) == 2:
file = 'ascii.dec'
else:
file = sys.argv[2]
table(file, 0)
elif sys.argv[1] == 'hex':
if len(sys.argv) == 2:
file = 'ascii.hex'
else:
file = sys.argv[2]
table(file, 1)
else:
raise Exception, "first argument must be 'dec' or 'hex'"