10 REM > VARLIST
   20 REM By Jon Harston
   30 REM (C) The Micro User
   40 oswrch=&FFEE:osnewl=&FFE7:mcode%=&FFFF0900
   50 FOR pass%=0 TO 1
   60   P%=mcode%
   70   [OPT pass%*3
   80   \START
   90   BIT &27A:BPL vlist_start
  100   BRK:OPT FNs(CHR$254+"TUBE"):BRK
  110   .vlist_start
  120   LDX #0
  130   .loop
  140   LDA &482,X:STA &A8:INX
  150   LDA &482,X:STA &A9:INX:STX &AA
  160   JSR follow
  170   LDX &AA:CPX #116:BCC loop
  180   LDA &4F6:STA &A8
  190   LDA &4F7:STA &A9
  200   LDA #1:STA &AA:JSR follow
  210   LDA &4F8:STA &A8
  220   LDA &4F9:STA &A9:DEC &AA
  230   JSR follow:JMP osnewl
  240   .follow_exit:RTS
  250   .follow
  260   BIT &FF:BMI follow_exit
  270   LDA &A9:BEQ follow_exit
  280   LDY #2:LDA &AA:BEQ fn
  290   CMP #1:BNE follow1
  300   LDX #3:.proc_loop
  310   LDA proctab,X:JSR oswrch:DEX
  320   BPL proc_loop
  330   BMI follow_loop
  340   .fn:LDA #ASC"F":JSR oswrch
  350   LDA #ASC"N":JSR oswrch
  360   JMP follow_loop
  370   .follow1
  380   LSR A:CLC:ADC #ASC"@"
  390   JSR oswrch:LDY #2
  400   .follow_loop
  410   LDA (&A8),Y:CMP #ASC"0":BCC follow2
  420   JSR oswrch:INY:BNE follow_loop
  430   .follow2
  440   CMP #0:BEQ real
  450   JSR oswrch
  460   CMP #ASC"%":BEQ integer
  470   CMP #ASC"$":BEQ string
  480   CMP #ASC"(":BEQ realarray
  490   BNE error
  500   .follow3
  510   JSR osnewl
  520   .follow4
  530   LDY #0:LDA (&A8),Y:TAX:INY:LDA (&A8),Y:STA &A9:STX &A8
  540   JMP follow
  550   .string:JMP string_start
  560   .real
  570   DEY:LDA &AA:CMP #2:BCS real2
  580   ADC &AA:STY &AF:ADC &AF:TAY:INY:STY &70
  590   .real2
  600   TYA:SEC:SBC #10:TAY:CPY #246:BCC real2
  610   LDA #32:.real_loop
  620   JSR oswrch:INY:BNE real_loop:JMP follow4
  630   .error:LDA #ASC"*":JSR oswrch:JMP follow3
  640   .integer:INY:LDA (&A8),Y:CMP #ASC"(":BEQ array
  650   LDA #ASC"=":JSR oswrch:LDA #ASC"&":JSR oswrch
  660   INY:INY:INY:INY:LDX #4
  670   .int_loop:LDA (&A8),Y:JSR pr_hex
  680   DEY:DEX:BNE int_loop:JMP follow3
  690   .array:JSR oswrch:.realarray:INY:INY
  700   LDA (&A8),Y:LSR A:INY:TAX:BNE array_go
  710   .array_loop:LDA #ASC",":JSR oswrch
  720   .array_go:LDA #ASC"&":JSR oswrch
  730   LDA (&A8),Y:SEC:SBC #1:PHA:INY
  740   LDA (&A8),Y:SBC #0:JSR pr_hex
  750   PLA:JSR pr_hex:INY
  760   DEX:BNE array_loop
  770   LDA #ASC")":JSR oswrch:JMP follow3
  780   .string_start:INY:LDA (&A8),Y:CMP #ASC"(":BEQ array
  790   LDA #ASC"=":JSR oswrch:LDA #0:STA &AF
  800   INY:LDA (&A8),Y:STA &AB
  810   INY:LDA (&A8),Y:STA &AC
  820   INY:INY:LDA (&A8),Y:LDY #0:TAX:BEQ null_string
  830   LDA (&AB),Y:CMP #32:BCC string_loop
  840   CMP #127:BCS string_loop:LDA #34:JSR oswrch
  850   .string_loop
  860   LDA (&AB),Y:PHA:JSR pr_char:PLA
  870   INY:DEX:BNE string_loop
  880   CMP #32:BCC string_exit:CMP #127:BCS string_exit:BCC string_end2
  890   .null_string:LDA #34:JSR oswrch
  900   .string_end2:LDA #34:JSR oswrch
  910   .string_exit:JMP follow3
  920   .pr_char:CMP #127:BCS pr_check
  930   CMP #32:BCS pr_ok
  940   .pr_check
  950   PHA:TXA:PHA:CPY #0:BEQ pr_check2
  960   LDA &AF:BEQ pr_check1
  970   LDA #34:JSR oswrch:.pr_check1
  980   LDA #ASC"+":JSR oswrch:.pr_check2
  990   LDX #0:STX &AF:.pr_c_loop
 1000   LDA pr_table,X:JSR oswrch:INX:CPX #6:BNE pr_c_loop
 1010   PLA:TAX:PLA:JSR pr_hex:LDA #ASC")":JMP oswrch
 1020   .pr_ok:CPY #0:BEQ pr_ok3
 1030   PHA:LDA &AF:BNE pr_ok2
 1040   LDA #ASC"+":JSR oswrch:LDA #34:JSR oswrch
 1050   .pr_ok2:PLA
 1060   .pr_ok3:STA &AF:JMP oswrch
 1070   .pr_table:OPT FNs("CHR$(&")
 1080   .pr_hex:PHA:LSR A:LSR A:LSR A
 1090   LSR A:JSR pr_hex2:PLA
 1100   .pr_hex2:AND #15:CMP #10:BCC over
 1110   ADC #6:.over:ADC #ASC"0":JMP oswrch
 1120   .proctab:OPT FNs("CORP")
 1130 ]:NEXT
 1140 PRINT"*SAVE VList ";~mcode%;" ";~P%
 1150 END
 1160 DEFFNs(A$):$P%=A$:P%=P%+LENA$:=pass%*3