10REM"Telesoftware Downloader 20REM"Version 1.1 30REM"(c) Jeff Booth 1986 40REM"Type "END" as final page number 50REM"to start downloading 60REM"Thanks to Graham B for advice! 70MODE7:VDU23;8202;0;0;0;:*FX18 80*KEY0F.A%=(TOP-PA.)TO0S.-4:A%!(PA.+&400)=A%!PA.:N.|MPA.=PA.+&400|MO.|MDEL.0,110|MV.6:RUN|M 90VDU21 100*FX138 0 128 110END 120*FX200 3 130*FX18 140Cat=(PAGE-&400) 150DIMM%&3FF 160DIMtemp 6 170DIMpage 1 180DIMsubcode 2 190DIMctrlbits 1 200Param=M%+&300 210File=M%+&100:$File="" 220Code=M% 230PROCASS 240FORA=6TO7:PRINTTAB(9,A);CHR$141;"ƒFinding catalogue":NEXT 250*TTXON 260*HON 270*BBC2 280PROCFINDCAT 290Page=M%+&200:?Page=?ctrlbits/8EORCurrent_Page:Page?1=?page 300FORA=6TO7:PRINTTAB(9,A);CHR$141;"ƒLoa":NEXT 310*PAGE701 320*TRANSFER 5000 330PROCLOAD:Param?13=0:CALLOSWORD 340VDU26 350*DISPLAY 5000 360*HOFF 370A%=0:top=0 380REPEAT 390A$="" 400FORa%=0TO2 410A$=A$+CHR$(A%?(a%+Cat)) 420NEXT 430IFA$="***"THENtop=(A%+Cat) 440A%=A%+1 450UNTILtop>0 460VDU28,0,24,39,22 470*FX214 1 480FORA%=10TO&FFSTEP10 490CLS 500INPUT"Enter Page No. ";Page$:IFLEN(Page$)<>3THENVDU7:PRINT"Bad Page Number":GOTO500 510IFPage$="END"THEN$(A%+File)="FINISHED":A%=&FF:GOTO600 520INPUT"Enter Filename ";Filename$:IFLEN(Filename$)>7ANDMID$(Filename$,2,1)<>"."THENPRINT"Bad Filename":VDU7:GOTO520 530PRINT"Searching for data"; 540$(A%+File)=Filename$ 550Page%=EVAL("&"+RIGHT$(Page$,2)) 560MAG=VAL(Page$)DIV100 570Page?A%=MAG 580Page?(A%+1)=Page% 590PROCAddress 600NEXT 610MODE7:*HON 620REPEAT 630MODE7 640VDU23;8202;0;0;0; 650File=File+10:Page=Page+10 660File$="":F=0 670REPEAT:File$=File$+CHR$(File?F):F=F+1:UNTILFile?F=&D 680IFFile$="FINISHED"THENGOTO1690 690PRINTTAB(0,5);"ƒSearching for ";File$;"..." 700PROCLOAD:CALLOSWORD 710UNTIL. 720DEFPROCLOAD 730?Param=24 740Param?1=FileMOD256 750Param?2=FileDIV256 760Param?3=Page?5 770Param?4=Page?4 780Param?5=Page?3 790Param?6=Page?2 800Param?7=Page?9 810Param?8=Page?8 820Param?9=Page?7 830Param?10=Page?6 840Param?11=?Page 850Param?12=Page?1 860Param?13=1 870Param?14=0 880ENDPROC 890DEFPROCASS 900FORPASS=0TO2STEP2 910P%=Code 920[OPTPASS 930.OSWORD 940LDX#ParamMOD256 950LDY#ParamDIV256 960LDA#&7A 970JMP&FFF1 980.START 990LDA temp 1000STA page 1010LDA temp+1 1020ASL A 1030ASL A 1040ASL A 1050ASL A 1060ORA page 1070STA page 1080LDA temp+2 1090STA subcode+1 1100LDA temp+3 1110AND#7 1120ASL A 1130ASL A 1140ASL A 1150ASL A 1160ORA subcode+1 1170STA subcode+1 1180LDA temp+4 1190STA subcode 1200LDA temp+5 1210AND#3 1220ASL A 1230ASL A 1240ASL A 1250ASL A 1260ORA subcode 1270STA subcode 1280LDA temp+3 1290AND#8 1300STA ctrlbits 1310LDA temp+5 1320AND#12 1330ASL A 1340ASL A 1350ORA ctrlbits 1360STA ctrlbits 1370RTS 1380] 1390NEXT 1400ENDPROC 1410DEFPROCAddress 1420Address=Cat 1430FLAG=FALSE 1440REPEAT 1450A=?AddressOR&20 1460B=ASC(LEFT$(Filename$,1))OR&20 1470Address=Address+1 1480IFA=BTHENFLAG=TRUE 1490IFAddress=topTHENFLAG=TRUE 1500UNTILFLAG=TRUE 1510IFAddress=topTHENENDPROC 1520FLAG=FALSE 1530TEMP=Address 1540FORTEST=2TOLEN(Filename$) 1550A=?AddressOR&20 1560B=ASC(MID$(Filename$,TEST,1))OR&20 1570IFB<>ATHENFLAG=TRUE 1580Address=Address+1 1590NEXT 1600IFFLAG=TRUETHENAddress=TEMP:GOTO1430 1610FORS=1TO2 1620A=?Address 1630Address=Address+A+1 1640NEXT 1650FORF=2TO9 1660Page?(F+A%)=Address?(F-2) 1670NEXT 1680ENDPROC 1690*TTXOFF 1700MODE7 1710*BASIC 1720ENDPROC 1730DEFPROCoscli(A$) 1740LOCALI%,B$ 1750DIMI%LEN(A$)+1 1760$I%=A$ 1770X%=I%MOD256 1780Y%=I%DIV256 1790CALL&FFF7 1800ENDPROC 1810MODE7 1820*TTXOFF 1830*BASIC 1840DEFPROCFINDCAT 1850TIME=0:REPEAT:UNTILTIME>100 1860Param?0=15 1870CALLOSWORD 1880PROCoscli("PAGE "+STR$(Param?1*100+Param?2)) 1890Current_Page=(Param?1) 1900*DATA 5000 1910Search=0 1920REPEAT 1930Search=Search+42 1940UNTILSearch?&5000=2ANDSearch?&5001=27 1950PROCDE_HAM(STR$(Search?&5002)) 1960IFA%<>0THEN1920 1970Search=Search+&5000+27 1980FORLink_bytes=0TO5 1990PROCDE_HAM(STR$(Link_bytes?Search)) 2000Link_bytes?temp=A% 2010NEXT 2020CALLSTART 2030ENDPROC 2040DEFPROCoscli(A$) 2050LOCALI%,B$ 2060DIMI%LEN(A$)+1 2070$I%=A$ 2080X%=I%MOD256 2090Y%=I%DIV256 2100CALL&FFF7 2110ENDPROC 2120DEFPROCDE_HAM(A$) 2130Param?0=25 2140Param?1=VAL(A$) 2150CALLOSWORD 2160A%=Param?2AND&F 2170ENDPROC