10
20
30
40
50
60
70
80 :
90 MODE7:DIMctrl%20,pf%(99):X%=ctrl%:Y%=X%DIV256:ver$="1.22":PROCtitle
100 A%=130:IF(USR&FFF4 AND&FFFF00)<>&FFFF00:PRINT"Program must run in the I/O processor.":END
110 IFHIMEM<>&7C00:OSCLI"SHADOW 1":MODE 7:IFHIMEM<>&7C00:PRINT"Please turn shadow screen off.":END
120 VDU23;2,53;0;0;0:PROCassem:ON ERROR PROCerr
130 *HON
140 INPUT"Channel: "C:OSCLI"CH"+STR$C:OSCLI"MAGAZINE "+STR$C
150 INPUT"Enter Start Page: "P0:OSCLI"PAGE "+STR$P0
160 OSCLI"MAGAZINE "+LEFT$(STR$P0,1)
170 PRINT"Enter End Page"'"(or RETURN for just P";P0;:INPUT"): "P1
180 PRINT"Save name";:IFP1<>0:PRINT" prefix";
190 INPUT": "SP$
200 :
210 P=P0:REPEAT:CLS:PRINT''"Searching for P";P;:OSCLI"PAGE "+STR$P
220 FORlp%=1 TO 99:pf%(lp%)=0:NEXT
230 REPEATpg%=FNpage:UNTIL(pg%AND&FF00):pages%=pg%DIV256
240 S$=SP$+LEFT$(STR$P,P1<>0)
250 OSCLI"SAVE "+S$+" 0+"+STR$~(pages%*1024)+" FFFF7C00 FFFF7C00"
260 pg%=pg%AND&FF:out%=OPENOUT(S$):PTR#out%=1023:BPUT#out%,pages%:PROCsave(pg%)
270 REPEAT:CLS:VDU23;2,53;0;0;0
280 PRINT"P";P:PROCtitle:FORlp%=1 TO pages%:IFpf%(lp%):VDU146 ELSE VDU151
290 VDU47:IF(lp%MOD20)=0:PRINT'
300 NEXT:VDU31,(2*pg%-1)MOD40,7+2*((pg%-1)DIV20),94,8
310 IFpages%>1:REPEATpg%=FNpage AND&FF:UNTILpg%:IFpf%(pg%)=0:PROCsave(pg%)
320 f%=0:FORlp%=1 TO pages%:f%=f%+pf%(lp%):NEXT
330 UNTILf%>=pages%:PROCCloseOut:P=P+1:UNTILP>P1
340 CLS:PROCtitle:PRINT'"Finished"
350 *HOFF
360 END
370 :
380 DEFFNpage
390 *TRANSFER 7000
400 *DISPLAY 7000
410
420 add%=&7C49:REPEAT:!X%=!add%:X%!4=add%!4
430 FORlp%=X%TOX%+6:?lp%=?lp%AND127:IF((?lp%+1)AND127)<33:?lp%=32
440 NEXT:X%?7=13:A$=$X%:add%=add%+40
450 I%=INSTR(A$,"/"):UNTILadd%>&8000 OR (I% AND (VALMID$(A$,I%-2)+VALMID$(A$,I%+1)<>0))
460 IFadd%>&8000:PRINTTAB(0,24);"Can't find page index.";:=&101:
470 p%=VALMID$(A$,I%+1):IFp%=0 OR p%>99:PRINTTAB(0,24);"Invalid magazine size.";:=&101:
480 =p%*256+VALMID$(A$,I%-2)
490 :
500 DEFPROCsave(p%)
510 PRINTTAB(0,0);P;"/";p%:CALL mcode%
520 ?X%=out%:X%!1=&FFFF7C28:X%!5=920:X%!9=1024*(p%-1):A%=1:CALL &FFD1
530 FORM%=&7000 TO &7067 STEP4:!M%=0:NEXT
540 ?X%=out%:X%!1=&FFFF7000:X%!5=104:X%!9=1024*(p%-1)+920
550 CALL &FFD1:pf%(p%)=1:ENDPROC
560 :
570 DEFPROCCloseOut:out%=out%:IFout%:A%=out%:out%=0:CLOSE#A%
580 ENDPROC
590 :
600 DEFPROCtitle
610 PRINTTAB(0,1);CHR$132;CHR$157;CHR$131;CHR$141;SPC(5)"Teletext Page Downloader"'CHR$132;CHR$157;CHR$131;CHR$141;SPC(5)"Teletext Page Downloader"
620 PRINT" "CHR$157;CHR$132;" (C)1988,2000 J.G.Harston. V"ver$''
630 ENDPROC
640 :
650 DEFPROCassem
660 DIM mcode% 50
670 FOR pass%=0 TO 1
680 P%=mcode%
690 [OPT pass%*2
700 LDA #0:STA &70:TAY
710 LDA #&7C:STA &71
720 .loop
730 LDA (&70),Y
740 CMP #163:BEQ stay
750 CMP #223:BEQ stay
760 CMP #224:BEQ stay
770 CMP #255:BEQ stay
780 AND #&7F:CMP #32:BCS stay
790 ORA #&80
800 .stay
810 STA (&70),Y:INY:BNE loop
820 INC &71:BPL loop
830 RTS
840 ]NEXT:ENDPROC
850 :
860 DEFPROCerr:PRINTTAB(0,24)SPC(39);
870 PRINTTAB(0,23);:REPORT:ON ERROR REPORT:PRINT" at line ";ERL;:END
880 PROCCloseOut:*HOFF
890 END