55 lines
1.1 KiB
Awk
55 lines
1.1 KiB
Awk
|
# 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))
|
||
|
# }
|
||
|
# }
|