9400 REM NextBASIC PROCs to list variable names, array bounds 9410 REM and scalar values Copyright Simon N Goodwin May 2021 9420 9500 DEFPROC ListVars() 9510 LOCAL %c,i,%o,%s,%t,%v 9520 %v=% DPEEK 23627:%c=0 9530 %o=% PEEK v 9540 IF %o=128 THEN PRINT %c;" variables assigned": STOP 9550 IF %o & 224 =96 THEN %c=%c+1:%v=%v+6:i=%o: PRINT CHR$ i;" = "; VAL CHR$ i: GO TO %9530: REM Simple scalar variable 9560 IF %o & 224 =224 THEN %c=%c+1:%v=%v+1:i=%o-128: PRINT "FOR "; CHR$ i;" = "; VAL CHR$ i;" TO ";: PROC FLOAT(%v+5): PRINT i;" STEP ";: PROC FLOAT(%v+10): PRINT i;" @ ";% DPEEK (v+15);":";% PEEK (v+17)-1:%v=%v+18: GO TO %9530: REM FOR loop 9570 IF %o & 224<>64 THEN GO TO %9620 9580 REM Undimensioned string 9590 %c=%c+1:%t=% DPEEK (v+1):%v=%v+3+t:i=%o: PRINT CHR$ i;"$"; 9600 IF %t<60 THEN PRINT " = "; CHR$ 34; VAL$ ( CHR$ i+"$"); CHR$ 34; 9610 PRINT " LEN = ";%t: GO TO %9530 9620 IF %o & 224 =192 THEN %c=%c+1:i=%o-128: PRINT CHR$ i;"$(";: GO TO %9710: REM dimensioned string 9630 IF %o & 224 =128 THEN %c=%c+1:i=%o-64: PRINT CHR$ i;"(";: GO TO %9710: REM Numeric array 9640 IF %o & 224<>160 THEN GO TO %9530 9650 REM Long-named scalar variable 9660 %c=%c+1: LET i=% PEEK v-96: PRINT CHR$ i; 9670 %v=%v+1:i=% PEEK v 9680 IF i>127 THEN PRINT CHR$ (i-128);" = ";: PROC FLOAT(%v+1): PRINT i:%v=%v+6: GO TO %9530 9690 PRINT CHR$ i;: GO TO %9670 9700 REM Report array bounds 9710 FOR %s=1 TO % PEEK (v+3): PRINT % DPEEK (s*2+2+v);",";: NEXT %s:%v=%v+3+ DPEEK (v+1): PRINT CHR$ 8;")": GO TO %9530 9720 ENDPROC 9730 9740 DEFPROC FLOAT(a) 9750 LOCAL e,m 9760 e= PEEK a: IF e THEN GO TO 9790 9770 i= PEEK (a+2)+256* PEEK (a+3): IF PEEK (a+1) THEN i=i-65536 9780 ENDPROC : REM Integer result in i 9790 m= PEEK (a+1) 9800 i=(2*(m<128)-1)*2^(e-160)*(((256*(m+128*(m<128))+ PEEK (a+2))*256+ PEEK (a+3))*256+ PEEK (a+4)) 9810 ENDPROC : REM Floating point result in i 9820 9990 SAVE "ListVars.bas"