10
20
30
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