summaryrefslogtreecommitdiff
path: root/ipl/progs/xtable.icn
diff options
context:
space:
mode:
Diffstat (limited to 'ipl/progs/xtable.icn')
-rw-r--r--ipl/progs/xtable.icn138
1 files changed, 138 insertions, 0 deletions
diff --git a/ipl/progs/xtable.icn b/ipl/progs/xtable.icn
new file mode 100644
index 0000000..afa9061
--- /dev/null
+++ b/ipl/progs/xtable.icn
@@ -0,0 +1,138 @@
+############################################################################
+#
+# File: xtable.icn
+#
+# Subject: Program to show character code translations
+#
+# Author: Robert J. Alexander, modified by Alan Beale
+#
+# Date: July 20, 1991
+#
+############################################################################
+#
+# This file is in the public domain.
+#
+############################################################################
+#
+# Program to print various character translation tables. See
+# procedure help() for the capabilities.
+#
+############################################################################
+#
+# Links: options, colmize, hexcvt, ebcdic
+#
+############################################################################
+
+link options, colmize, hexcvt, ebcdic
+
+global Graphic, Conv
+
+procedure main(arg)
+ local opt
+
+ opt := options(arg,"acedo")
+ Conv := if \opt["d"] then "d" else if \opt["o"] then "o"
+ init()
+ every write(colmize(
+ if \opt["a"] then ASCII()
+ else if \opt["e"] then EBCDIC()
+ else if \opt["c"] then ASCIICtrl()
+ else help()
+ ))
+end
+
+procedure help()
+ write("Usage: xtable -<option>")
+ write("Options:")
+ write("\ta: ASCII table")
+ write("\tc: ASCII control char table")
+ write("\te: EBCDIC table")
+ write("\td: decimal numbers")
+ write("\te: octal numbers")
+end
+
+procedure init()
+ Graphic := cset(Ascii128()[33:-1])
+end
+
+procedure ASCII()
+ local c,i,lst,a128
+ lst := []
+ a128 := Ascii128()
+ every c := !a128 do {
+ i := AsciiOrd(c)
+ if not any(Graphic,c) then {
+ c := image(c)[2:-1]
+ if match("\\x",c) then next
+ }
+ put(lst,"| " || convert(i) || " " || c)
+ }
+ return lst
+end
+
+procedure ASCIICtrl()
+ local a,c,ctrls,i,lst,a128
+ ctrls := "\^ \^!\^"\^#\^$\^%\^&\^'\^(\^)\^*\^+\^,\^-\^.\^/_
+ \^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_
+ \^{\^|\^}\^~"
+ lst := []
+ a128 := Ascii128()
+ a := create !a128[33:-1]
+ every c := !ctrls do {
+ i := AsciiOrd(c)
+ put(lst,"| " || convert(i) || " ^" || @a)
+ }
+ return lst
+end
+
+procedure EBCDIC()
+ local EBCDICMap,c,i,lst
+ EBCDICMap := repl(".",64) || # 00 - 3F
+ " ...........<(+|&.........!$*);^" || # 40 - 5F
+ "-/.........,%_>?.........`:#@'=\"" || # 60 - 7F
+ ".abcdefghi.......jklmnopqr......" || # 80 - 9F
+ ".~stuvwxyz...[...............].." || # A0 - BF
+ "{ABCDEFGHI......}JKLMNOPQR......" || # C0 - CF
+ "\\.STUVWXYZ......0123456789......" # E0 - FF
+ lst := []
+ i := -1
+ every c := !EBCDICMap do {
+ i +:= 1
+ if i = 16r4B | "." ~== c then
+ put(lst,"| " || convert(i) || " " || c)
+ }
+ return lst
+end
+
+procedure convert(n)
+ return case Conv of {
+ "d": right(n,3,"0")
+ "o": octstring(n,3)
+ default: hexstring(n,2)
+ }
+end
+
+#
+# octstring() -- Returns a string that is the octal
+# representation of the argument.
+#
+procedure octstring(i,n)
+ local s
+ i := integer(i) | fail
+ if i = 0 then s := "0"
+ else {
+ s := ""
+ while i ~= 0 do {
+ s := iand(i,7) || s
+ i := ishift(i,-3)
+ }
+ }
+ s := right(s,\n,"0")
+ return s
+end
+