woodhams@phoenix.Princeton.EDU (Michael Woodhams) (01/31/91)
For some strange, dark reason, astrophysicists normally work in cgs units rather than S.I. like the rest of the universe. Although I am fighting this when I can, there are times when one has to express results in cgs units. (SI = simple and intuitive. cgs = confuses graduate students.) Therefore I have written the following little program to act like the built in function "UBASE" except it reduces units to cm instead of m, and g instead of kg. The following is hand-entered, but I hope the format will be directly loadable by those with cables to computers. \<< IF DUP TYPE 13 \/= THEN @ if top of stack is not a unit object KILL @ quit program END UBASE @ convert top of stack to SI DUP \->STR @ make copy of SI unit object as a string DUP SIZE @ find size of this string \-> ustr len @ store string and length in local variables \<< ustr "m" POS @ find position of "m" in string IF DUP 0 \/= THEN @ if it is found, then \-> pos @ store position of "m" in pos \<< ustr 1 pos 1 - SUB @ extract all of string before "m" "c" + @ concatanate "c" ustr pos len SUB + @ concatanate all of string from "m" on @ (changes first "m" found into "cm") 'ustr' STO @ store back in string \>> ELSE @ else ("m" not found) DROP @ drop 0 END ustr "k" POS @ find position of "k" in string IF DUP 0 \/= THEN @ if "k" found \-> pos @ store position of "k" in pos \<< ustr 1 pos 1 - SUB @ extract all of string before "k" ustr pos 1 + len SUB + @ concatanate all of string after "k" @ (removes the first "k" from string, @ to change kg into g.) 'ustr' STO @ store back in string \>> ELSE @ else ("k" not found) DROP @ drop 0 END ustr OBJ\-> @ turn string back into a unit object @ (this has correct units but not correct @ value for cgs version of original object) UFACT @ convert original to new units. \>> \>> checksum #4718d, bytes 337.