#program listvars208 9000 DIM numbers(2,3): DIM string$(2):Simple$="simon": DIM zx(82) 9010 FOR x=9 TO -9 STEP 0: NEXT x 9020 long string$="this is too long a value of string to be printed out by default" 9030 FOR loop=1 TO 0: NEXT loop 9040 FOR SHOUT=1 TO 0: NEXT SHOUT 9050 FOR loop2=1 TO 0: NEXT loop2 9060 scalar=-1e34 9070 PROC ListVars() 9080 STOP 9400 REM NextBASIC PROCs to list variable names, array bounds 9410 REM & scalar values. Copyright Simon N Goodwin May 2023 9420 REM Updated for NextZXOS 2.08 long array and FOR names 9430 9500 DEFPROC ListVars() 9510 LOCAL i,%c=0,%o,%s,%t,%v=% DPEEK 23627 9520 @nextVar:%o=% PEEK v 9530 IF %o=128 THEN PRINT %c;" variables assigned": ENDPROC 9540 IF %o=127 THEN GO TO @long array 9550 IF %o & 224 =96 THEN %c+=%1:%v+=%6:i=%o: PRINT CHR$ i;" = "; VAL CHR$ i: GO TO @nextVar: REM Simple scalar variable 9560 IF %o & 224 =224 THEN %c+=%1:%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+=18: GO TO @nextVar: REM Simple FOR loop 9570 IF %o & 224<>64 THEN GO TO @array: REM Not a simple string 9590 %c=%c+1:%t=% DPEEK (v+1):%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 @nextVar 9620 @array: IF %o & 224 =192 THEN %c+=%1:i=%o-128: PRINT CHR$ i;"$(";: GO TO %9710: REM dimensioned string 9630 IF %o & 224 =128 THEN %c+=%1:i=%o-64: PRINT CHR$ i;"(";: GO TO @show bounds: REM Numeric array 9640 IF %o & 224<>160 THEN GO TO @nextVar 9650 REM Long-named scalar variable 9660 %c=%c+1: LET i=% PEEK v-96: PRINT CHR$ i; 9670 @nextChar: %v+=%1:i=% PEEK v 9680 IF i>127 AND (i&32) THEN PRINT CHR$ (i-128);" = ";: PROC FLOAT(%v+1): PRINT i:%v+=%6: GO TO @nextVar 9685 IF i>127 THEN PRINT CHR$ (i-96);" = "; 9687 IF i>127 THEN PROC FLOAT(%v+1): PRINT i;" TO ";: PROC FLOAT(%v+6): PRINT i;" STEP ";: PROC FLOAT(%v+11): PRINT i;" @ ";% DPEEK (v+16);":";% PEEK (v+18)-1:%v+=19: GO TO @nextVar 9690 PRINT CHR$ i;: GO TO @nextChar 9700 REM Report array bounds 9710 @show bounds: FOR %s=1 TO % PEEK (v+3): PRINT % DPEEK (s*2+2+v);",";: NEXT %s:%v+=%3+ DPEEK (v+1): PRINT CHR$ 8;")": GO TO @nextVar 9712 @long array: PRINT "Long-name array "; 9713 %c+=%1:%v+=%1:%o=% PEEK v: PRINT CHR$ (%o&31+96);:%v+=1 9714 REPEAT :%t=% PEEK v:%v+=%1: WHILE %t<128: PRINT CHR$ (%t);: REPEAT UNTIL %0 9715 PRINT CHR$ (%t-128); 9717 ON %o>>6:: PRINT "$ =": PRINT "(";: PRINT "$("; 9718 IF %o>127 THEN %v-=%1: GO TO @show bounds 9719 %t=% DPEEK v 9720 IF %t<60 THEN PRINT CHR$ 34;: FOR %o=%v+2 TO %v+t+1: PRINT CHR$ (% PEEK o);: NEXT %o: PRINT CHR$ 34; 9723 PRINT " LEN = ";%t:%v+=%t+2: GO TO @nextVar 9725 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 9999 SAVE "ListVars208.bas"