> VList/s 1.11  List BASIC's variables C v1.00 04-Feb-86 JGH: Initial version, published in Micro User (8 - only prints bottom byte of array dimensions 28 v1.10 24-Sep-02 JGH: prints reals if integer value <% - prints in neater columns FH v1.11 19-Jul-04 JGH: Two spaces between columns, colwidth variable P DIMs not printed correctly Z: d*osasci=&FFE3:oswrch=&FFEE:osnewl=&FFE7 n: x! mcode% &300:load%=&FFFF08C0 4link=&A8:col=&AA:int=&AB:exp=&AF:flg=&AB:txt=&AC colwidth=24 :  pass%=0 1 P%=load%:O%=mcode% [OPT pass%*3+4 .go% LDX #0:STX col .MainLoop $JSR Follow:CPX #116:BCC MainLoop JMP osnewl : .z% LDA &4F6:STA &A8 LDA &4F7:STA &A9 LDA #1:STA &AA:JSR follow "LDA &4F8:STA &A8 ,LDA &4F9:STA &A9:DEC &AA 6JSR follow:JMP osnewl @.follow_exit:RTS J: T .follow ^BIT &FF:BMI follow_exit hLDA &A9:BEQ follow_exit rLDY #1:\LDA &AA:\BEQ fn |\CMP #1:BNE follow1 -LDA #"P":JSR oswrch:LDA #"R":JSR oswrch -LDA #"O":JSR oswrch:LDA #"C":JSR oswrch \JMP follow_loop .fn:LDA #"F":JSR oswrch LDA #"N":JSR oswrch \JMP follow_loop  .follow1 A:]:P%=z%:[OPT pass%*3 :\ remove / following :  .ChainEnd RTS : .ArrayLoop LDA #",":JSR oswrch  .Array 1JSR PrAmper:LDA (link),Y:SEC:SBC #1:JSR PrHex &AINY:INY:LDA (link),Y:BNE ArrayLoop :\ NB Only prints 8-bit 0STA col:JSR PrClose :JSR osnewl:JMP LinkNext D: N .Follow X INX:INX bLDA &480,X:STA link+0 lLDA &481,X v: .FollowChain STA link+1 BBEQ ChainEnd :\ terminated with &00xx LDA &FF:BMI ChainEnd HLDY #1:LDA col:BEQ PrVarName :\ first column, jump to print A.NameLength :\ Count varname length #INY:LDA (link),Y:BNE NameLength =TYA:CLC:ADC col:CMP #84-colwidth :\ Would this wrap? HLDA #32:BCC PrColumn :\ Space if not at end of line FLDA #0:STA col:LDA #13 :\ Reset column and print NL  .PrColumn JSR osasci =CMP #32:BNE P%+5:JSR osasci :\ Print two spaces .PrVarName  FTXA:LSR A:ADC #"@":JSR oswrch :\ Print first char of varname  LDY #1  .NamePrint *$INY:LDA (link),Y:BEQ NamePrinted 4IJSR oswrch:JMP NamePrint :\ Print rest of name until &00 >.NamePrinted HFTXA:PHA:LDX #0 :\ Save index, and prepare X RMDEY:LDA (link),Y:INY:INY :\ Get term. char and point to data \BCPY #3:BEQ Real :\ n - real variable f@CMP #"0":BCS Real :\ name - real variable pCCMP #"%":BEQ Integer :\ name% - integer variable zBCMP #"$":BNE P%+5:JMP String :\ name$ - string variable =INY:CMP #"(":BNE P%+5:JMP Array :\ name[%|$]( - array 2DEY:LDA #"*":JSR oswrch :\ Unknown SEC:PHP:JMP RealOverflow : A.Real :\ (link),Y => exp, man KLDX #5 :\ Five bytes to reorder and copy  .RealLp1 HLDA (link),Y:STA int-1,X:INY :\ Copy and reverse into store DEX:BNE RealLp1 LDA exp:BEQ PrintInteger HLDA int+3:PHP:A #&80:STA int+3 :\ Save sign and put top bit in  .RealLp2 DLDA exp:CMP #&A0:BCS RealDenormalised :\ Loop until denormalised +ROR int+3:ROR int+2:ROR int+1:ROR int+0 HBCS RealOverflow :\ Drop out if run out of bits INC exp:BNE RealLp2 $.RealDenormalised .GPLP:BPL RealPositive :\ Need to negate if negative 88LDX #&FC :\ Start at -4 BC.RealNegate :\ Negate negative number L&LDA #0:SBC int-&FC,X:STA int-&FC,X VINX:BMI RealNegate `.RealPositive jJMP PrintInteger t: ~<.Integer :\ (link),Y => int data CJSR PrEqual:STX flg:STX col :\ Clear quote flag & col BLDA (link),Y:STA txt:INY :\ Get pointer to string LDA (link),Y:STA txt+1:INY .INY:LDA (link),Y:LDY #0:TAX:BEQ StringNull "'LDA (txt),Y:CMP #32:BCC string_loop ,/CMP #127:BEQ string_loop:LDA #34:JSR oswrch 6.string_loop @#LDA (txt),Y:PHA:JSR pr_char:PLA JINY:DEX:BNE string_loop TDCMP #32:BCC string_exit:CMP #127:BEQ string_exit:BNE string_end2 ^.StringNull:JSR PrQuote h.string_end2:JSR PrQuote r(.string_exit:JSR osnewl:JMP LinkNext |: .pr_char:CMP #32:BCS pr_ok  .pr_check $PHA:TXA:PHA:CPY #0:BEQ pr_check2 LDA flg:BEQ pr_check1 JSR PrQuote:.pr_check1 JSR PrPlus:.pr_check2 LDX #0:STX flg:.pr_c_loop 6LDA pr_table,X:JSR oswrch:INX:CPX #6:BNE pr_c_loop %PLA:TAX:PLA:JSR PrHex:JSR PrClose 2.pr_ok:CMP #127:BEQ pr_check:CPY #0:BEQ pr_ok3 PHA:LDA flg:BNE pr_ok2 JSR PrPlus:JSR PrQuote .pr_ok2:PLA .pr_ok3:STA flg:JMP oswrch .pr_table:EQUS "CHR$(&" : &!.PrSpace:LDA #" ":BNE PrChar 0!.PrEqual:LDA #"=":BNE PrChar :!.PrAmper:LDA #"&":BNE PrChar D.PrQuote:LDA #34:BNE PrChar N!.PrClose:LDA #")":BNE PrChar X!.PrPlus :LDA #"+":BNE PrChar b: l .PrHex v!.pr_hex:PHA:LSR A:LSR A:LSR A LSR A:JSR PrNyb:PLA ".PrNyb: #15:CMP #10:BCC PrDig ADC #6:.PrDig:ADC #"0"  .PrChar JMP oswrch EQUS "v1.11" ]: J"*SAVE VList ";~mcode%;" ";~O%&FFFF0000;" ";go%&FFFF0000;" ";~load%