PRI getNumber(numberAddr) | negative, c, t '' Skip leading blanks, then convert a decimal number '' with an optional sign ("+"/"-") into binary to be '' stored in the long at numberAddr. Return the '' character that ended the number. If an error occurs, '' return with a negative error string address. '' Currently, there's no checking for 32 bit overflow. repeat until (c := key.getkey) <> " " dsp.out(c) negative := c == "-" if negative or c == "+" dsp.out(c := key.getkey) if c == "$" dsp.out(c := key.getkey) t := hexDigit(c) if t < 0 return -string("invalid hex character") long[numberAddr] := t dsp.out(c := key.getkey) repeat until (t := hexDigit(c)) < 0 long[numberAddr] := long[numberAddr] << 4 | t dsp.out(c := key.getkey) if negative long[numberAddr] := -long[numberAddr] return c if c == "%" dsp.out(c := key.getkey) if not (c == "0" or c == "1") return -string("invalid hex character") long[numberAddr] := c - "0" dsp.out(c := key.getkey) repeat while c == "0" or c == "1" long[numberAddr] := long[numberAddr] << 1 | (c - "0") dsp.out(c := key.getkey) if negative long[numberAddr] := -long[numberAddr] return c if not (c => "0" and c=< "9") return -string("invalid numeric character") long[numberAddr] := c - "0" dsp.out(c := key.getkey) repeat while c => "0" and c =< "9" long[numberAddr] := long[numberAddr] * 10 + c - "0" dsp.out(c := key.getkey) if negative long[numberAddr] := -long[numberAddr] return c PRI hexDigit(c) '' Convert a hexadecimal character to the corresponding value or -1 if invalid. if c => "0" and c =< "9" return c - "0" if c => "A" and c =< "F" return c - "A" + 10 if c => "a" and c =< "f" return c - "a" + 10 return -1