DECLARE FUNCTION TRIM$ (s$)
DECLARE SUB SetVars (v$)
DECLARE FUNCTION RefStr! (varnam$)
DECLARE SUB Print2 (v$)
DECLARE FUNCTION RefNum! (varnam$)
DECLARE SUB AddVars (v$)
DIM SHARED NVars(1 TO 100) AS INTEGER
DIM SHARED SVars(1 TO 100) AS STRING
DIM SHARED NRefs(1 TO 100) AS STRING
DIM SHARED SRefs(1 TO 100) AS STRING
nm = 1
st = 1
s$ = ""
IF s$ = "" THEN s$ = "mt.dsa"'end
OPEN s$ FOR INPUT AS #1
DO UNTIL EOF(1)
LINE INPUT #1, b$
IF INSTR(b$, " ") = 0 THEN c$ = UCASE$(b$): GOTO 10
d$ = MID$(b$, 4, LEN(b$) - 2)
c$ = UCASE$(MID$(b$, 1, INSTR(b$, " ") - 1))
IF c$ = "VAR" THEN IF RIGHT$(b$, 1) = "$" THEN SRefs(st) = MID$(b$, 5, LEN(b$) - 3):  st = st + 1: GOTO 112 ELSE NRefs(nm) = MID$(b$, 5, LEN(b$) - 4): nm = nm + 1: GOTO 112
IF c$ = "ADD" THEN AddVars d$: GOTO 112
IF c$ = "SET" THEN SetVars d$: GOTO 112
IF c$ = "PRN" THEN Print2 d$: GOTO 112
IF c$ = "SRN" THEN SCREEN VAL(TRIM$(d$)): GOTO 112
IF c$ = "END" THEN END: GOTO 112
10 IF c$ = "CLS" THEN CLS : GOTO 112
IF c$ = "SLP" THEN SLEEP
112 LOOP

SUB AddVars (v$)
NVars(1) = 2
m = 0
d = 1
FOR q = 2 TO LEN(v$) + 1
IF MID$(v$, q, 1) = "," THEN m = m + 1: q = q + 1
IF m = 0 THEN n1$ = n1$ + MID$(v$, q, 1)
IF m = 1 THEN n2$ = n2$ + MID$(v$, q, 1)
IF m = 2 THEN n3$ = n3$ + MID$(v$, q, 1)
NEXT q
'PRINT n1$; "="; LEN(n1$); ":"; n2$; "="; LEN(n2$)
DO UNTIL UCASE$(NRefs(d)) = UCASE$(n1$) OR UCASE$(NRefs(d)) = ""
d = d + 1
LOOP
'd = d - 1
IF UCASE$(NRefs(d)) = "" AND STR$(VAL(n1$)) = " " + n1$ + " " THEN PRINT "Variable not defined "; n1$: EXIT SUB
IF UCASE$(NRefs(d)) <> "" THEN n1$ = STR$(NVars(d))
'PRINT "Ref #="; LTRIM$(RTRIM$(STR$(d))); "|Cur value="; LTRIM$(RTRIM$(STR$(NVars(d)))); "|Stored Name="; NRefs(d)
d = 1
DO UNTIL UCASE$(NRefs(d)) = UCASE$(n2$) OR UCASE$(NRefs(d)) = ""
d = d + 1
LOOP
'd = d  -1
IF UCASE$(NRefs(d)) = "" AND STR$(VAL(n2$)) = " " + n2$ + " " THEN PRINT "Variable not defined :"; n2$
IF UCASE$(NRefs(d)) <> "" THEN n2$ = STR$(NVars(d))': 'PRINT UCASE$(NRefs(d))
'PRINT "Ref #="; LTRIM$(RTRIM$(STR$(d))); "|Cur value="; LTRIM$(RTRIM$(STR$(NVars(d)))); "|Stored Name="; NRefs(d)
a = RefNum(n3$)
'PRINT n1$, n2$, n3$, a
NVars(a) = VAL(v1$) + VAL(n2$)
END SUB

SUB Print2 (v$)
v$ = TRIM$(v$)
a = 0: var1$ = "": usrtxt = 0
FOR q = 1 TO LEN(v$)
IF MID$(v$, q, 1) = CHR$(34) AND usrtxt = 0 THEN
        usrtxt = 1: GOTO 21
        ELSEIF MID$(v$, q, 1) = CHR$(34) AND usrtxt = 1 THEN usrtxt = 0
END IF
IF usrtxt = 1 THEN PRINT MID$(v$, q, 1);
IF usrtxt = 0 THEN
        IF INSTR(v$, ";") = 0 THEN cr$ = MID$(v$, q, LEN(v$) - q) ELSE cr$ = MID$(v$, q, INSTR(v$, ";") - 1)
'   PRINT cr$


END IF
21 NEXT q
END SUB

FUNCTION RefNum (varnam$)
d = 1
DO UNTIL UCASE$(NRefs(d)) = UCASE$(varnam$) OR UCASE$(NRefs(d)) = ""
d = d + 1
'PRINT "If "; UCASE$(NRefs(d)); "="; UCASE$(varnam$); " then D="; d
IF UCASE$(NRefs(d)) = UCASE$(varnam$) THEN RefNum = d
LOOP
IF UCASE$(NRefs(d)) = "" THEN d = 0
RefNum = d
END FUNCTION

FUNCTION RefStr (varnam$)
d = 1
DO UNTIL UCASE$(SRefs(d)) = UCASE$(varnam$) OR UCASE$(SRefs(d)) = ""
d = d + 1
IF UCASE$(SRefs(d)) = UCASE$(varnam$) THEN RefStr = d
LOOP
IF UCASE$(SRefs(d)) = "" THEN d = 0
RefStr = d
END FUNCTION

SUB SetVars (v$)
FOR q = 2 TO LEN(v$) + 1
IF MID$(v$, q, 1) = "," THEN m = m + 1: q = q + 1
IF m = 0 THEN n1$ = n1$ + MID$(v$, q, 1)
IF m = 1 THEN n2$ = n2$ + MID$(v$, q, 1)
NEXT q
IF RIGHT$(n1$, 1) = "$" THEN s = RefStr(n1$): z = 1 ELSE s = RefNum(n1$): z = 2
IF s = 0 THEN PRINT "Variable not defined :"; n1$: EXIT SUB
IF z = 1 THEN SVars(s) = n2$ ELSE NVars(s) = VAL(n2$)
END SUB

FUNCTION TRIM$ (s$)
TRIM$ = LTRIM$(RTRIM$(s$))
END FUNCTION

