############################################################################ # # Name: radcon.icn # # Title: Radix conversion # # Author: Ralph E. Griswold # # Date: June 10, 1988 # ############################################################################ # # The following procedures convert numbers from one radix to # another. The letters from a to z are used for ``digits'' greater # than 9. All the conversion procedures fail if the conversion can- # not be made. # # exbase10(i,j) convert base-10 integer i to base j # # inbase10(s,i) convert base-i integer s to base 10 # # radcon(s,i,j) convert base-i integer s to base j # # Limitation: # # The maximum base allowed is 36. # ############################################################################ procedure exbase10(i,j) static digits local s, d, sign initial digits := &digits || &lcase if i = 0 then return 0 if i < 0 then { sign := "-" i := -i } else sign := "" s := "" while i > 0 do { d := i % j if d > 9 then d := digits[d + 1] s := d || s i /:= j } return sign || s end procedure inbase10(s,i) if s[1] == "-" then return "-" || integer(i || "r" || s[2:0]) else return integer(i || "r" || s) end procedure radcon(s,i,j) return exbase10(inbase10(s,i),j) end