5748295 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$ cat -n batplus.bas
   1: DECLARE FUNCTION TRIM$ (s$)
   2: DECLARE SUB SetVars (v$)
   3: DECLARE FUNCTION RefStr! (varnam$)
   4: DECLARE SUB Print2 (v$)
   5: DECLARE FUNCTION RefNum! (varnam$)
   6: DECLARE SUB AddVars (v$)
   7: DIM SHARED NVars(1 TO 100) AS INTEGER
   8: DIM SHARED SVars(1 TO 100) AS STRING
   9: DIM SHARED NRefs(1 TO 100) AS STRING
  10: DIM SHARED SRefs(1 TO 100) AS STRING
  11: nm = 1
  12: st = 1
  13: s$ = ""
  14: IF s$ = "" THEN s$ = "mt.dsa"'end
  15: OPEN s$ FOR INPUT AS #1
  16: DO UNTIL EOF(1)
  17: LINE INPUT #1, b$
  18: IF INSTR(b$, " ") = 0 THEN c$ = UCASE$(b$): GOTO 10
  19: d$ = MID$(b$, 4, LEN(b$) - 2)
  20: c$ = UCASE$(MID$(b$, 1, INSTR(b$, " ") - 1))
  21: 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
  22: IF c$ = "ADD" THEN AddVars d$: GOTO 112
  23: IF c$ = "SET" THEN SetVars d$: GOTO 112
  24: IF c$ = "PRN" THEN Print2 d$: GOTO 112
  25: IF c$ = "SRN" THEN SCREEN VAL(TRIM$(d$)): GOTO 112
  26: IF c$ = "END" THEN END: GOTO 112
  27: 10 IF c$ = "CLS" THEN CLS : GOTO 112
  28: IF c$ = "SLP" THEN SLEEP
  29: 112 LOOP
  30: 
  31: SUB AddVars (v$)
  32: NVars(1) = 2
  33: m = 0
  34: d = 1
  35: FOR q = 2 TO LEN(v$) + 1
  36: IF MID$(v$, q, 1) = "," THEN m = m + 1: q = q + 1
  37: IF m = 0 THEN n1$ = n1$ + MID$(v$, q, 1)
  38: IF m = 1 THEN n2$ = n2$ + MID$(v$, q, 1)
  39: IF m = 2 THEN n3$ = n3$ + MID$(v$, q, 1)
  40: NEXT q
  41: 'PRINT n1$; "="; LEN(n1$); ":"; n2$; "="; LEN(n2$)
  42: DO UNTIL UCASE$(NRefs(d)) = UCASE$(n1$) OR UCASE$(NRefs(d)) = ""
  43: d = d + 1
  44: LOOP
  45: 'd = d - 1
  46: IF UCASE$(NRefs(d)) = "" AND STR$(VAL(n1$)) = " " + n1$ + " " THEN PRINT "Variable not defined "; n1$: EXIT SUB
  47: IF UCASE$(NRefs(d)) <> "" THEN n1$ = STR$(NVars(d))
  48: 'PRINT "Ref #="; LTRIM$(RTRIM$(STR$(d))); "|Cur value="; LTRIM$(RTRIM$(STR$(NVars(d)))); "|Stored Name="; NRefs(d)
  49: d = 1
  50: DO UNTIL UCASE$(NRefs(d)) = UCASE$(n2$) OR UCASE$(NRefs(d)) = ""
  51: d = d + 1
  52: LOOP
  53: 'd = d  -1
  54: IF UCASE$(NRefs(d)) = "" AND STR$(VAL(n2$)) = " " + n2$ + " " THEN PRINT "Variable not defined :"; n2$
  55: IF UCASE$(NRefs(d)) <> "" THEN n2$ = STR$(NVars(d))': 'PRINT UCASE$(NRefs(d))
  56: 'PRINT "Ref #="; LTRIM$(RTRIM$(STR$(d))); "|Cur value="; LTRIM$(RTRIM$(STR$(NVars(d)))); "|Stored Name="; NRefs(d)
  57: a = RefNum(n3$)
  58: 'PRINT n1$, n2$, n3$, a
  59: NVars(a) = VAL(v1$) + VAL(n2$)
  60: END SUB
  61: 
  62: SUB Print2 (v$)
  63: v$ = TRIM$(v$)
  64: a = 0
  65: var1$ = ""
  66: FOR q = 1 TO LEN(v$)
  67: IF MID$(v$, q, 1) = CHR$(34) AND qt = 0 THEN qt = 1: q = q + 1
  68: IF MID$(v$, q, 1) = CHR$(34) AND qt = 1 THEN qt = 0: q = q + 1
  69: IF qt = 1 THEN PRINT MID$(v$, q, 1);
  70: IF (q = LEN(v$) OR MID$(v$, q, 1) = ";") AND RIGHT$(var1$, 1) = "$" THEN PRINT var1$: s = RefStr(var1$): IF s = 0 THEN EXIT SUB ELSE PRINT SVars(s): var1$ = ""
  71: IF (q = LEN(v$) OR MID$(v$, q, 1) = ";") AND RIGHT$(var1$, 1) <> "$" THEN PRINT var1$: s = RefNum(var1$): PRINT var1$: IF s = 0 THEN EXIT SUB ELSE PRINT NVars(s): var1$ = ""
  72: IF qt = 0 THEN var1$ = var1$ + MID$(v$, q, 1)
  73: NEXT q
  74: END SUB
  75: 
  76: FUNCTION RefNum (varnam$)
  77: d = 1
  78: DO UNTIL UCASE$(NRefs(d)) = UCASE$(varnam$) OR UCASE$(NRefs(d)) = ""
  79: d = d + 1
  80: 'PRINT "If "; UCASE$(NRefs(d)); "="; UCASE$(varnam$); " then D="; d
  81: IF UCASE$(NRefs(d)) = UCASE$(varnam$) THEN RefNum = d
  82: LOOP
  83: IF UCASE$(NRefs(d)) = "" THEN d = 0
  84: RefNum = d
  85: END FUNCTION
  86: 
  87: FUNCTION RefStr (varnam$)
  88: d = 1
  89: DO UNTIL UCASE$(SRefs(d)) = UCASE$(varnam$) OR UCASE$(SRefs(d)) = ""
  90: d = d + 1
  91: IF UCASE$(SRefs(d)) = UCASE$(varnam$) THEN RefStr = d
  92: LOOP
  93: IF UCASE$(SRefs(d)) = "" THEN d = 0
  94: RefStr = d
  95: END FUNCTION
  96: 
  97: SUB SetVars (v$)
  98: FOR q = 2 TO LEN(v$) + 1
  99: IF MID$(v$, q, 1) = "," THEN m = m + 1: q = q + 1
 100: IF m = 0 THEN n1$ = n1$ + MID$(v$, q, 1)
 101: IF m = 1 THEN n2$ = n2$ + MID$(v$, q, 1)
 102: NEXT q
 103: IF RIGHT$(n1$, 1) = "$" THEN s = RefStr(n1$): z = 1 ELSE s = RefNum(n1$): z = 2
 104: IF s = 0 THEN PRINT "Variable not defined :"; n1$: EXIT SUB
 105: IF z = 1 THEN SVars(s) = n2$ ELSE NVars(s) = VAL(n2$)
 106: END SUB
 107: 
 108: FUNCTION TRIM$ (s$)
 109: TRIM$ = LTRIM$(RTRIM$(s$))
 110: END FUNCTION
 111: 
5748296 [rkeene@sledge /home/rkeene/devel/archive/quickbasic]$

Click here to go back to the directory listing.
Click here to download this file.
last modified: 2000-05-09 21:00:03