10 REM SNIP utility 20 REM by M.Bobrowski 2'90 30 : 40 pptr=&A8:ptr=&70:lineno=&72:number=&74:osargs=&FFDA:osword=&FFF1 50 : 60 FOR pass=0 TO 3 STEP 3 70 P%=&900 80 [OPT pass 90 .read_command 100 LDA #1:LDX #pptr:LDY #0:JSR osargs 110 LDA #5:LDX #pptr:LDY #0:JSR osword 120 LDA pptr+4:CMP #13:BNE snip 130 BRK:EQUB 128:EQUS "Syntax: *SNIP ":BRK 140 : 150 .snip 160 JSR read_param 170 LDA &18:STA ptr+1:LDA #0:STA ptr 180 JSR read_program 190 CLC:LDA ptr:ADC #2:STA &12:STA &00 200 LDA ptr+1:ADC #0:STA &13:STA &01 210 RTS 220 : 230 .read_param 240 LDA #0:STA number:STA number+1:TAY 250 .getchar 260 LDA (pptr),Y 270 CMP #13:BEQ edn 280 JSR mult_ten 290 LDA (pptr),Y 300 SEC:SBC #ASC"0" 310 CMP #10:BCS badnum 320 JSR inc_num 330 CPY #6:BNE getchar 340 BEQ toobig 350 .edn 360 LDA number+1:BMI toobig 370 RTS 380 : 390 .badnum 400 BRK:EQUB 255:EQUS"Bad number" 410 .toobig 420 BRK:EQUB 20:EQUS"Too big":BRK 430 : 440 .inc_num 450 CLC:ADC number:STA number 460 LDA number+1:ADC #0:STA number+1 470 INY:RTS 480 : 490 .mult_ten 500 JSR mult_two 510 LDA number+1:PHA:LDA number:PHA 520 JSR mult_two:JSR mult_two 530 PLA:CLC:ADC number:STA number 540 PLA:ADC number+1:STA number+1 550 RTS 560 : 570 .mult_two 580 ASL number:ROL number+1 590 RTS 600 : 610 .read_program 620 LDY #0:LDA (ptr),Y 630 CMP #&0D:BNE badprog 640 INY:LDA (ptr),Y:STA lineno+1 650 CMP #&FF:BEQ notfound 660 INY:LDA (ptr),Y:STA lineno 670 \compare 680 LDA lineno+1:CMP number+1:BCC getnextline 690 BNE set_endpointer 700 LDA lineno:CMP number:BCC getnextline 710 .set_endpointer 720 LDA #&FF:DEY:STA (ptr),Y 730 RTS 740 : 750 .getnextline 760 INY:LDA (ptr),Y 770 CLC:ADC ptr:STA ptr:BCC continue 780 INC ptr+1 790 .continue 800 JMP read_program 810 : 820 .badprog 830 BRK:EQUB 0:EQUS"Bad program" 840 .notfound 850 BRK:EQUB 41:EQUS"No such line":BRK 860 ] 870 NEXT 880 : 890 PRINT'"To save object code press COPY";:REPEAT UNTIL INKEY-106:PRINT 900 OSCLI"SAVE SNIP 900 "+STR$~P% 910 END