diff options
Diffstat (limited to 'awklib/eg/lib/ord.awk')
-rw-r--r-- | awklib/eg/lib/ord.awk | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/awklib/eg/lib/ord.awk b/awklib/eg/lib/ord.awk new file mode 100644 index 00000000..7e62cb88 --- /dev/null +++ b/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.ai.mit.edu +# 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)) +# } +# } |