!****************************************************
!       Math
!       Created by Steve Smith, SCP Communications
!       134 W 29th St. NYC 10001 on 1 Oct 87
!       Uses INKEY.SBR from the AMUS library
!*****************************************************

MAP1 ENTRY,S,1
MAP1 CALC,S,1
MAP1 NUMBER,S,33
MAP1 NUMBER1,F
MAP1 RESULT,F
MAP1 KEY,S,1
MAP1 X,F


       XCALL NOECHO
       CALL DRAW'CALC
       KEY = "1"
       ?TAB(-1,29)

INPUT:
       ENTRY = ""
       XCALL INKEY,ENTRY
       ENTRY = UCS(ENTRY)
       ON VAL(ENTRY) GOTO ON1, ON2, ON3, ON4, ON5, ON6, ON7, ON8, ON9
       GOTO WHAT
ON1:
       CALL OFF
       ?TAB(-1,12);TAB(8,24);"1"
       CALL APPEND
       GOTO INPUT
ON2:
       CALL OFF
       ?TAB(-1,12);TAB(8,32);"2"
       CALL APPEND: GOTO INPUT
ON3:
       CALL OFF
       ?TAB(-1,12);TAB(8,40);"3"
       CALL APPEND: GOTO INPUT
ON4:
       CALL OFF
       ?TAB(-1,12);TAB(12,24);"4"
       CALL APPEND: GOTO INPUT
ON5:
       CALL OFF
       ?TAB(-1,12);TAB(12,32);"5"
       CALL APPEND: GOTO INPUT
ON6:
       CALL OFF
       ?TAB(-1,12);TAB(12,40);"6"
       CALL APPEND: GOTO INPUT
ON7:
       CALL OFF
       ?TAB(-1,12);TAB(16,24);"7"
       CALL APPEND: GOTO INPUT
ON8:
       CALL OFF
       ?TAB(-1,12);TAB(16,32);"8"
       CALL APPEND: GOTO INPUT
ON9:
       CALL OFF
       ?TAB(-1,12);TAB(16,40);"9"
       CALL APPEND: GOTO INPUT
ON0:
       CALL OFF
       ?TAB(-1,12);TAB(20,24);"0"
       CALL APPEND: GOTO INPUT
WHAT:
       IF ENTRY = "0" GOTO ON0
       IF ENTRY = "Q" OR ENTRY = CHR(27) GOTO QUIT
       IF ENTRY = "." GOSUB APPEND: CALL OFF: GOTO INPUT
       IF ENTRY = "C" GOTO ERASE
       IF ENTRY = "+" OR ENTRY = "P" OR ENTRY = "-" OR ENTRY = "/" &
               OR ENTRY = "X" OR ENTRY = "," OR ENTRY = CHR(12) &
               OR ENTRY = CHR(10) GOTO DELIMIT
       IF ENTRY = "=" OR ENTRY = CHR(13) GOTO EQUALS
       IF ENTRY = "%" THEN CALC = ENTRY: GOTO EQUALS
       GOTO INPUT

APPEND:
       NUMBER = NUMBER + ENTRY
       CALL CLEAR
       ?TAB(-1,12);TAB(4,56-LEN(NUMBER));NUMBER
       RETURN

ERASE:
       CALL OFF
       IF ENTRY = "C" THEN ?TAB(16,48);"C"
       NUMBER = ""
       ?TAB(4,23);"                                  "
       GOTO INPUT

CLEAR:
       ?TAB(4,23);"                                  "
       RETURN

DELIMIT:
       IF ENTRY = "+" OR ENTRY = "P" OR ENTRY = "," THEN ?TAB(8,48);"+"
       IF ENTRY = "-" THEN ?TAB(8,56);"-"
       IF ENTRY = "X" OR ENTRY = CHR(12) THEN ?TAB(12,48);"X"
       IF ENTRY = "/" OR ENTRY = CHR(10) THEN ?TAB(12,56);"/"
       NUMBER1 = NUMBER
       CALC = ENTRY
       CALL OFF
       CALL CLEAR
       ?TAB(-1,11);TAB(4,56-LEN(NUMBER));NUMBER;TAB(-1,12)
       NUMBER = ""
       GOTO INPUT

EQUALS:
       IF ENTRY = "=" OR ENTRY = CHR(13) THEN ?TAB(16,56);"="
       IF ENTRY = "%" THEN ?TAB(20,40);"%"
       CALL OFF
       ?TAB(4,23);"                                "
       IF CALC = "+" OR CALC = "P" OR CALC = "," &
               THEN RESULT = NUMBER + NUMBER1
       IF CALC = "-" THEN RESULT = NUMBER1 - NUMBER
       IF CALC = "X" OR CALC = CHR(12) THEN RESULT = NUMBER * NUMBER1
       IF CALC = "/" OR CALC = CHR(10) THEN RESULT = NUMBER1 / NUMBER
       IF CALC = "%" THEN RESULT = NUMBER1 * NUMBER / 100
       NUMBER = RESULT
       ?TAB(-1,12);TAB(4,56-LEN(NUMBER));NUMBER
       GOTO INPUT
QUIT:
       ?TAB(-1,28);TAB(-1,0)
       END

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
OFF:
       ?TAB(-1,11)
       ON VAL(KEY) GOTO OFF1, OFF2, OFF3, OFF4, OFF5, OFF6, OFF7, OFF8, OFF9
       IF KEY = "0" GOTO OFF0
       IF KEY = "C" GOTO OFFC
       IF KEY = "+" OR KEY = "P" OR KEY = "," GOTO OFFPLUS
       IF KEY = "-" GOTO OFFMINUS
       IF KEY = "/" OR KEY = CHR(10) GOTO OFFDIVIDE
       IF KEY = "X" OR KEY = CHR(12) GOTO OFFTIMES
       IF KEY = "%" GOTO OFFPERCENT
       IF KEY = "=" OR KEY = CHR(13) GOTO OFFEQUAL
       GOTO ENDOFF

OFF1:   ?TAB(8,24);"1":GOTO ENDOFF
OFF2:   ?TAB(8,32);"2":GOTO ENDOFF
OFF3:   ?TAB(8,40);"3":GOTO ENDOFF
OFF4:   ?TAB(12,24);"4":GOTO ENDOFF
OFF5:   ?TAB(12,32);"5":GOTO ENDOFF
OFF6:   ?TAB(12,40);"6":GOTO ENDOFF
OFF7:   ?TAB(16,24);"7":GOTO ENDOFF
OFF8:   ?TAB(16,32);"8":GOTO ENDOFF
OFF9:   ?TAB(16,40);"9":GOTO ENDOFF
OFF0:   ?TAB(20,24);"0";TAB(1,1):GOTO ENDOFF
OFFC:   ?TAB(16,48);"C";TAB(1,1);:GOTO ENDOFF
OFFPLUS:        ?TAB(8,48);"+":GOTO ENDOFF
OFFMINUS:       ?TAB(8,56);"-":GOTO ENDOFF
OFFDIVIDE:      ?TAB(12,56);"/":GOTO ENDOFF
OFFTIMES:       ?TAB(12,48);"X":GOTO ENDOFF
OFFPERCENT:     ?TAB(20,40);"%";TAB(1,1):GOTO ENDOFF
OFFEQUAL:       ?TAB(16,56);"=";:GOTO ENDOFF

ENDOFF: ?TAB(-1,12): KEY = ENTRY
       RETURN


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
DRAW'CALC:
       ?TAB(-1,0);TAB(-1,23);TAB(-1,36)
       ?TAB(2,20);"2ZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZZ3"
       ?TAB(3,20);"6                                       6"
       ?TAB(4,20);"6                                       6"
       ?TAB(5,20);"6                                       6"
       ?TAB(6,20);"4ZZZZZZZPZZZZZZZPZZZZZZZPZZZZZZZPZZZZZZZ9"
       ?TAB(7,20);"6       6       6       6       6       6"
       ?TAB(8,20);"6       6       6       6       6       6"
       ?TAB(9,20);"6       6       6       6       6       6"
       ?TAB(10,20);"4ZZZZZZZ8ZZZZZZZ8ZZZZZZZ8ZZZZZZZ8ZZZZZZZ9"
       ?TAB(11,20);"6       6       6       6       6       6"
       ?TAB(12,20);"6       6       6       6       6       6"
       ?TAB(13,20);"6       6       6       6       6       6"
       ?TAB(14,20);"4ZZZZZZZ8ZZZZZZZ8ZZZZZZZ8ZZZZZZZ8ZZZZZZZ9"
       ?TAB(15,20);"6       6       6       6       6       6"
       ?TAB(16,20);"6       6       6       6       6       6"
       ?TAB(17,20);"6       6       6       6       6       6"
       ?TAB(18,20);"4ZZZZZZZ8ZZZZZZZ8ZZZZZZZ8ZZZZZZZ8ZZZZZZZ9"
       ?TAB(19,20);"6       6       6       6       6       6"
       ?TAB(20,20);"6       6   C   6       6       6       6"
       ?TAB(21,20);"6       6       6       6       6       6"
       ?TAB(22,20);"1ZZZZZZZ]ZZZZZZZ]ZZZZZZZ]ZZZZZZZ]ZZZZZZZ5"
       ?TAB(-1,24)

1UMBERS:
       ?TAB(2,35);"SMITH-MATH"
       ?TAB(-1,11);TAB(8,24);"1";TAB(8,32);"2";TAB(8,40);"3";TAB(8,48);"+";TAB(8,56);"-"
       ?TAB(12,24);"4";TAB(12,32);"5";TAB(12,40);"6";TAB(12,48);"X";TAB(12,56);"/"
       ?TAB(16,24);"7";TAB(16,32);"8";TAB(16,40);"9";TAB(16,48);"C";TAB(16,56);"="
       ?TAB(20,24);"0";TAB(20,40);"%";TAB(-1,12);TAB(20,54)"Q";TAB(-1,11);"uit";

       ?TAB(3,61);tab(-1,30);"OPTIONAL KEYS";tab(-1,31)
       ?TAB(5,61);"ADD   = numpad ,";
       ?TAB(6,61);"MINUS = numpad -";
       ?TAB(7,61);"TIMES = Rt arrow";
       ?TAB(8,61);"DIVIDE= Dn arrow";
       ?TAB(9,61);"EQUAL = [enter]";

       ?tab(3,8);tab(-1,30);"USAGE";tab(-1,31)
       ?tab(5,1);"Press any key shown"
       ?tab(6,1);"to enter that num-"
       ?tab(7,1);"ber or perform that"
       ?tab(8,1);"function."
       ?TAB(10,1)"For multiple func-"
       ?tab(11,1)"tions, for example,"
       ?tab(13,1)"  7 + 3 + 11 / 3"
       ?tab(15,1)"use the form,"
       ?tab(17,1)"7 + 3 = (10) + 11"
       ?tab(18,1)"(21) / 3 = (7)"
       ?tab(20,1)"The () number are"
       ?tab(21,1)"the totals you see"
       ?tab(22,1)"when you press =.";TAB(-1,12);tab(1,1);TAB(-1,37)

       RETURN