134,135 racters < 128 30 NUM = 0: FOR VARI = PEEK(130) + PEEK(313) * 256 TO PEEK(132) + PEE K(131) * 256 - 1:NUM = NUM + (PEEK (VARI) < 127):NEXT VARI: PRINT NU M; "Variables in use" Or try this, for a possibly less opaque example of the same routine: 1000 NUM = 0: FOR LOOP = PEEK (130) + PEEK(131) * 256 TO PEEK(132) + PEEK(133) * 256 - 1 1010 IF PEEK(LOOP) < 128 THEN PRINT CHR$(PEEK(LOOP));: GOTO 1030 1020 PRINT CHR$(PEEK(LOOP) - 128): N UM - NUM + 1 1030 NEXT LOOP: PRINT; PRINT NUM; " VARIABLES IN USE": END 134,135 86,87 VVTP Address for the variable value table. Eight bytes are allocated for each variable in the name table as follows: Byte 1 2 3 4 5 6 7 8 Variable -------------------------------------------------------------- Scalar 00 var # six byte BCD constant Array;DIMed 65 var # offset first second unDIMed 64 from DIM + 1 DIM + 1 STARP String;DIMed 129 var # offset length DIM unDIMed 128 from STARP In scalar (undimensioned numeric) variables, bytes three to eight are the FP number; byte three is the exponent; byte four contains the least significant two decimal digits, and byte eight contains the most significant two decimal digits. In array variables, bytes five and six contain the size plus one of the first dimension of the array (DIM + 1; LSB/MSB), and bytes seven and eight contain the size plus one of the second dimension (the second DIM + 1; LSB/MSB). In string variables, bytes five and six contain the current length of the variable (LSB MSB), and bytes seven and eight contain the actual dimension (up to 32767). There is an undocumented BASIC statement, "COM," mentioned only in the BASIC Reference Manual's index, which executes exactly the same as