diff options
author | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
---|---|---|
committer | Joseph Hunkeler <jhunkeler@gmail.com> | 2015-07-08 20:46:52 -0400 |
commit | fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4 (patch) | |
tree | bdda434976bc09c864f2e4fa6f16ba1952b1e555 /sys/ki/kiencode.x | |
download | iraf-linux-fa080de7afc95aa1c19a6e6fc0e0708ced2eadc4.tar.gz |
Initial commit
Diffstat (limited to 'sys/ki/kiencode.x')
-rw-r--r-- | sys/ki/kiencode.x | 64 |
1 files changed, 64 insertions, 0 deletions
diff --git a/sys/ki/kiencode.x b/sys/ki/kiencode.x new file mode 100644 index 00000000..463579e4 --- /dev/null +++ b/sys/ki/kiencode.x @@ -0,0 +1,64 @@ +# Copyright(c) 1986 Association of Universities for Research in Astronomy Inc. + +# KI_ENCODE -- Encode an integer into the indicated number of chars for +# transmission between machines via a byte stream. + +procedure ki_encode (data, str, nchars) + +long data # data value to be encoded +char str[nchars] # output chars +int nchars # number of chars to be encoded + +int i +long v, nv + +begin + v = abs (data) + + do i = 1, nchars { + nv = v / 128 + str[i] = v - (nv * 128) + v = nv + } + + if (data < 0) + if (str[1] == 0) + str[1] = -128 + else + str[1] = -str[1] +end + + +# KI_DECODE -- Decode the long integer value encoded by ki_encode, returning +# the long integer value as the function value. + +long procedure ki_decode (str, nchars) + +char str[ARB] # string to be decoded +int nchars # number of chars to decode + +bool neg +int pow, i +long sum + +begin + sum = str[1] + neg = (sum < 0) + if (neg) + if (sum == -128) + sum = 0 + else + sum = -sum + + pow = 1 + + do i = 2, nchars { + pow = pow * 128 + sum = sum + (str[i] * pow) + } + + if (neg) + return (-sum) + else + return (sum) +end |