summaryrefslogtreecommitdiffstats
path: root/contrib/awk/awklib/eg/lib/ord.awk
diff options
context:
space:
mode:
Diffstat (limited to 'contrib/awk/awklib/eg/lib/ord.awk')
-rw-r--r--contrib/awk/awklib/eg/lib/ord.awk54
1 files changed, 54 insertions, 0 deletions
diff --git a/contrib/awk/awklib/eg/lib/ord.awk b/contrib/awk/awklib/eg/lib/ord.awk
new file mode 100644
index 0000000..b19149e
--- /dev/null
+++ b/contrib/awk/awklib/eg/lib/ord.awk
@@ -0,0 +1,54 @@
+# ord.awk --- do ord and chr
+#
+# Global identifiers:
+# _ord_: numerical values indexed by characters
+# _ord_init: function to initialize _ord_
+#
+# Arnold Robbins
+# arnold@gnu.org
+# Public Domain
+# 16 January, 1992
+# 20 July, 1992, revised
+
+BEGIN { _ord_init() }
+function _ord_init( low, high, i, t)
+{
+ low = sprintf("%c", 7) # BEL is ascii 7
+ if (low == "\a") { # regular ascii
+ low = 0
+ high = 127
+ } else if (sprintf("%c", 128 + 7) == "\a") {
+ # ascii, mark parity
+ low = 128
+ high = 255
+ } else { # ebcdic(!)
+ low = 0
+ high = 255
+ }
+
+ for (i = low; i <= high; i++) {
+ t = sprintf("%c", i)
+ _ord_[t] = i
+ }
+}
+function ord(str, c)
+{
+ # only first character is of interest
+ c = substr(str, 1, 1)
+ return _ord_[c]
+}
+function chr(c)
+{
+ # force c to be numeric by adding 0
+ return sprintf("%c", c + 0)
+}
+#### test code ####
+# BEGIN \
+# {
+# for (;;) {
+# printf("enter a character: ")
+# if (getline var <= 0)
+# break
+# printf("ord(%s) = %d\n", var, ord(var))
+# }
+# }
OpenPOWER on IntegriCloud