> PrList14/s  By Jonathan Harston * v0.10 1986 - Original version (3 v1.00 -Jun-1990 - Version in The Micro User 2. v1.10 09-Nov-1991 - '+' to colour tokens <; v1.20 15-Sep-1992 - Added Compact BASIC token address FA v1.30 16-May-1993 - '-' omits line numbers, LFs not Spooled PA v1.31 17-Feb-1995 - Searches for token table, crunched code Z: d Syntax: *PrList (-) n: x*OSARGS=&FFDA:OSFIND=&FFCE:OSBGET=&FFD7 *OSNEWL=&FFE7:OSWRCH=&FFEE:OSBYTE=&FFF4 : 9lptr=&A8:tptr=&A8:tok=&AA:flag=&AB:num=&AC:numsub=&AE : ! mcode% &300:load%=&FFFF0900 P=0 1 P%=load%:O%=mcode% [OPT P*3+4 &\ Uses start of code for variables .tbase:BRK:BRK .handle:BRK .quotes:BRK .lflg:BRK ] P%=load%:O%=mcode% [OPT P*3+4 ".errNoBasic ,%BRK:EQUB 249:EQUS "No BASIC":\BRK 6.errNotFound @%BRK:EQUB 214:EQUS "Not found":BRK J .start T?LDA #1:LDX #&A8:LDY #0:JSR OSARGS :\ Read command line ^$LDX &24B:CPX #&FF:BEQ errNoBasic h;STY lflg:LDA &F4:PHA:TXA:JSR set_rom :\ Page in BASIC r)LDA (lptr),Y:CMP #"-":BNE done_minus |)ROR lflg:INC lptr:BNE P%+4:INC lptr+1 .done_minus +LDX lptr:LDY lptr+1:LDA #&40:JSR OSFIND "TAY:BEQ errNotFound:STY handle %JSR OSBGET:CMP #13:BEQ basic_file LDA #0:JSR OSFIND ,BRK:EQUB 254:EQUS "Not a BASIC file":BRK .basic_file : (\ ================================== (\ TokenInit - Find BASIC token table (\ ================================== 0\ Needs to search for "AND",&80 or &80,"AND" \ .TokenInit =LDY #0:STY tptr:LDA #&80:STA tptr+1 :\ tptr=>ROM start .TokInitLp &7LDA #1:CLC:ADC tptr:STA tptr :\ Inc. tptr 0$LDA #0:TAY:ADC tptr+1:STA tptr+1 :7LDA (tptr),Y:CMP #&80:BEQ TokInit2:DEY :\ Found &80 D .TokInit2 N7INY:LDA (tptr),Y:CMP #"A":BNE TokInitLp :\ Not "A" X8INY:LDA (tptr),Y:CMP #"N":BNE TokInitLp :\ Not "AN" b9INY:LDA (tptr),Y:CMP #"D":BNE TokInitLp :\ Not "AND" l.TokInitOk v-LDA tptr:STA tbase:LDA tptr+1:STA tbase+1 =\ tbase=>Start of token table, =>&80,"AND" or =>"AND",&80 : .line_loop LDA #0:STA quotes 9JSR bgetY:STA num+1:JSR bget:STA num+0 :\ Line number >JSR bget:LDA #32:STA flag :\ Skip line length ?BIT lflg:BMI P%+5:JSR PrNum16 :\ Print line number  .pr_loop  JSR bgetY:BIT &FF:BMI escape BIT quotes:BNE in_quotes TAX:BMI do_token .in_quotes CMP #34:BNE not_a_quote (LDA #255: quotes:STA quotes:LDA #34  .not_a_quote "JSR OSWRCH:CMP #13:BNE pr_loop  =LDX #0:JSR Osbyte3:TXA:PHA :\ Read current output status *2A #16:TAX:JSR Osbyte3 :\ Turn "Spool" off 45LDA #10:JSR OSWRCH :\ Output a line feed >9PLA:TAX:JSR Osbyte3 :\ Restore "Spool" status HJMP line_loop R: \ .bgetY fLDY handle p .bget z"JSR OSBGET:BCC not_eof:PLA:PLA  .escape .end_of_file  LDA #0:JSR OSFIND:JSR OSNEWL /PLA:.set_rom:STA &F4:STA &FE30:.not_eof:RTS : !.do_token:CMP #141:BEQ do_num JSR TokenPrint:JMP pr_loop :  .do_num )JSR bget:STA num+1:JSR bget:STA num+0 *LDA num+1:ASL A:ASL A:PHA: #&C0: num %STA num:PLA:ASL A:ASL A:STA num+1 JSR bget: num+1:STA num+1 LDA #0:STA flag JSR PrNum16:JMP pr_loop : $#\ ============================= .#\ PrToken - Print a BASIC token 8#\ ============================= B?\ tbase=>Start of token table, "AND",&80,n or &80,"AND"(,n) L\ V.TokenPrint `BPHA:LDA tbase:STA tptr :\ Point to start token table jLDA tbase+1:STA tptr+1 t .TokPrLp1 ~ LDY #&FF  .TokPrLp2 CINY:LDA (tptr),Y:BPL TokPrLp2 :\ Loop until token byte found BNE TokPrLp1 :\ Loop to keep searching .TokPrFound ?TYA:BEQ TokPrNxt:LDY #0 :\ Skip past leading token  .TokPrLp3 7LDA (tptr),Y:BMI TokPrEnd :\ Token byte, end 6CMP #32:BCC TokPrEnd:JSR OSWRCH :\ Flag byte, end ( .TokPrNxt 2DINY:BNE TokPrLp3 :\ Loop back for next character < .TokPrEnd FRTS P: Z .PrNum16 d$\ General purpose 16 bit decimal n\ printout routine. x"\ num holds number. flag holds  \ leading character, or zero \ eg 32 = leading spaces \ eg 48 = leading zeros "\ eg 0 = no leading characters +LDY #&27:LDX #&10:JSR do_subs:\ 10000s *LDY #&03:LDX #&E8:JSR do_subs:\ 1000s )LDY #&00:LDX #&64:JSR do_subs:\ 100s (LDY #&00:LDX #&0A:JSR do_subs:\ 10s &LDA num:A #48:JMP OSWRCH :\ 1s :  .do_subs &STX numsub+0:STY numsub+1:LDX #255  .loop  INX:SEC $LDA num+0:SBC numsub+0:STA num+0 $LDA num+1:SBC numsub+1:STA num+1 " BCS loop ,$LDA num+0:ADC numsub+0:STA num+0 6$LDA num+1:ADC numsub+1:STA num+1 @TXA:BEQ zero JA #48:JSR OSWRCH TLDA #48:STA flag ^.zero_exit hRTS r .zero |LDA flag:BEQ zero_exit JMP OSWRCH :  .Osbyte3 LDA #3:JMP OSBYTE EQUS "1.14" : ] E"*SAVE PrList ";~mcode%;" ";~O%;" ";~start &FFFF0000;" ";~load%