10 REM >ViewData 20 MODE7:WIDTH0:IFNOTFNarc A%=114:X%=0:CALL&FFF4:MODE7:A%=132:HIMEM=((USR&FFF4)AND&FFFF00)DIV256 30 pagemax%=(((HIMEM-TOP-600)/1024)):pagemax%=(pagemax%AND(pagemax%<128))+(127 AND(pagemax%>127))-2:ST=HIMEM-(pagemax%+1)*1024:P=0:LINK=0:TP=0:LLP=0:IFpagemax%<5 PRINT"Not enough memory":Z=GET:CHAIN"Hello" 40 *KEY10O.|MRUN|M 50 Flg2%=0:VDAT=0:CLOCK=0:VER$="Viewdata Program Version 4.09 (C)1989":CHR=97:P=0:P1=0:P2=0:lp%=0:Z$="":D%=0:DIM bu%(15),L%(pagemax%),L2%(pagemax%),buffer% 100:FOR LOOP=0 TO pagemax%:L%(LOOP)=-1:L2%(LOOP)=-1:NEXT 60 IFNOTFNarc THEN HIMEM=ST 70 time%=-1:fnd=1:oscflg=0:IFV%<>101AND V%<>103PRINTTAB(0,0);VER$;TAB(7,12);"ƒBuffer size: ";pagemax%+1 80 IFFNarc B%=&8610 ELSE IF PAGE>&3000 B%=&3A10 ELSE B%=&410 90 KST=0:DIR$="":D%=&1200:ON ERROR IF flg GOTO120 ELSEGOTO140 100 flg=1:IFV%<>102AND V%<>103THENOSCLI"*LOAD !ComDat "+STR$~(B%):D%=!B% 110 IF$(B%+4)<>""DIR$=$(B%+4)+"." 120 flg=0:PROC_GETPAGE("KEYS"):KST=ST:ST=ST+1024*LE:KLE=LE 130 pagemax%=pagemax%-LE 140 ON ERROR RUN 150 PROCdate:ONERROR IFF$="0"THEN$ST=STRING$(230," "):$(ST+230)=STRING$(179," ")+" ƒNo start page.":$(ST+460)=STRING$(230," "):$(ST+690)=STRING$(232," "):GOTO180 ELSE F$="0":GOTO170 160 IF(V%>99AND V%<104)AND W%>-1 F$=STR$W% ELSE F$="0" 170 PROC_GETPAGE(F$):IF(?(ST+1024*P+935)AND 31)=0 PRINTTAB(0,24);SPC(38);:ERROR 180 IF(V%<100OR V%>103) V%=100 190 ON ERROR GOTO1340 200 del%=3000:*FX4,1 210 *FX11 220 *FX225,128 230 *FX226,1 240 IF fnd PROC_MEMtoP ELSE fnd=1 250 tim%=TIME+del%:IF(Flg2%AND32)=0 PRINTTAB(0,24);SPC(35); 260 Z$=INKEY$(20):IF CLOCK PROC_CLOCK 270 IF TIME>tim% AND VDAT=0 GOTO510 280 IFZ$=""GOTO260 290 IFZ$="?"PROC_OSC:GOTO240 300 IFZ$=CHR$26 PROCstats:GOTO240 310 IFZ$=" "OR Z$="#"OR Z$=CHR$13GOTO510 320 IFZ$>"/"AND Z$<":"GOTO400 330 IFZ$="†" OR Z$=CHR$135 PROC_REVEAL:GOTO250 340 IFZ$="„" LINK=0:GOTO440 350 IFZ$="€"OR Z$="*"GOTO470 360 IFZ$="‚"OR Z$="^"OR Z$=CHR$139 L=10:GOTO410 370 IFZ$=CHR$127OR Z$=CHR$136THENlp%=(lp%-2)AND 15:LINK=bu%(lp%):GOTO440 380 IF Z$<"A" GOTO260 390 IFZ$>"@"AND Z$<"~"PROC_KEYWORD:GOTO240 ELSE GOTO260 400 L=ASC Z$-48 410 LINK=!(ST+1024*P2+936+L*4) 420 IF LINK=0 PRINTTAB(0,24);"‚No link";:Z$=INKEY$(200):GOTO250 430 IFLINK=-1THENLINK=0 440 F$=STR$ LINK:IF LINK<0 GOTO250 450 IFF$="" GOTO260 460 PROC_GETPAGE(F$):GOTO240 470 F$=FN_EDIT:IFF$=""Z$=CHR$127:GOTO370 480 LINK=VAL F$ 490 IF LINK<0OR LINK>999999999 PRINTTAB(0,24);"Out of range!!!";:Z$=INKEY$(200):GOTO250 500 GOTO450 510 REM IF P1=pagemax% GOTO240 520 IF L%(P1+1)<>TP AND !(ST+1024*P2+980)=0 P1=P2:CHR=97:GOTO240 530 IF L%(P1+1)<>TP L=11:GOTO410 540 P1=P1+1:CHR=CHR+1:GOTO240 550 DEFFN_EDIT:VDU 28,0,24,39,24:INPUT '"‚What page number? "P3$ 560 PRINTTAB(0,24);SPC(39);:VDU 28,0,24,39,0:=P3$ 570 DEFPROC_GETPAGE(P$) 580 LOCAL LINK,LOOP 590 LINK=VAL P$:IF LINK=0 AND P$<>"0" GOTO630 600 FOR LOOP=0 TO pagemax% 610 IF L2%(LOOP)=LINK P1=LOOP:P2=P1:LOOP=999:NEXTLOOP:GOTO700 620 NEXT 630 F$=P$:?(ST+1024*P+935)=1 640 PROC_LOAD(F$):LE=?(ST+1024*P+935)AND 31:IF LE=0 fnd=0:PRINTTAB(0,24);"‚Page„";F$;"‚does not exist.";:Z=INKEY(200):ENDPROC 650 IF LE>pagemax% fnd=0:PRINTTAB(0,24);"‚Buffer full";SPC(20);:Z$=INKEY$(200):ENDPROC 660 IF P+LE>pagemax%+1 FOR LOOP=P TO pagemax%:L2%(LOOP)=-1:NEXTLOOP:P=0:GOTO640 670 fnd=1:IF LINK=0 AND P$<>"0" LINK=-2 680 P1=P:P2=P:FOR LOOP=0 TO LE-1 690 L%(LOOP+P)=LINK:L2%(LOOP+P)=-1:NEXT LOOP:L2%(P)=LINK:P=P+LE:IFP>pagemax% P=0 700 CHR=97:IF LINK>-1 LLP=LINK 710 TP=LINK:bu%(lp%)=TP:lp%=(lp%+1)AND 15:ENDPROC 720 ENDPROC 730 DEFPROC_LOAD(F$):LOCAL X%,Y% 740 PRINTTAB(0,24);" Loading page ";F$;" ";STRING$(3,CHR$8); 750 PAG=ST+1024*P:B$=STR$~PAG 760 IF (D% AND 3072)<>0 F$=FN_Q(F$) 770 !buffer%=buffer%+&20:$(buffer%+&20)=DIR$+F$:A%=5:X%=buffer%:Y%=X%DIV256:IF((USR&FFDD)AND255)=0 ?(ST+1024*P+935)=0:L2%(P)=-1:ENDPROC ELSE LE=(buffer%!&A)DIV1024 780 IF P+LE>pagemax%+1 THEN ?(ST+1024*P+935)=LE:ENDPROC 790 OSCLI"*LOAD "+DIR$+F$+" "+B$ 800 ENDPROC 810 DEFFN_Q(F$) 820 IF STR$(VAL F$)<>F$ THEN =F$ 830 LOCAL A,Q$ 840 Z%=(D%AND&C00)/1024:FOR A=1 TO LEN F$ STEP Z% 850 Q$=Q$+MID$(F$,A,Z%)+"D.":NEXT:=LEFT$(Q$,LEN Q$-2) 860 DEFPROC_MEMtoP:time%=-1 870 VDU26,15:IF (?(ST+P2*1024+935)AND32)=0 CLS 880 VDU 23;8202;0;0;0;:IF ?(ST+P1*1024)=128 OR ?(ST+P1*1024)=13 GOTO980 890 IF ?(ST+P1*1024)=0 CLS:PROC_TITLE:ENDPROC 900 del%=!(ST+P2*1024+1000)AND&FFFF:IF del%=0 del%=3000 910 VDAT=SGN(?(ST+P2*1024+935)AND128):CLOCK=SGN((?(ST+P2*1024+935)AND64)OR(VDAT=0)) 920 PROC_TITLE:IF(Flg2%AND&C0)=&40 M=?(ST+P1*1024+40):?(ST+P1*1024+40)=13:PRINT$(ST+P1*1024);:?(ST+P1*1024+40)=M 930 FORL=0TO3:M=?(ST+P1*1024+230*(L+1)):?(ST+P1*1024+230*(L+1))=13 940 PRINT$(ST+P1*1024+230*L);:?(ST+P1*1024+230*(L+1))=M 950 NEXTL:IF(Flg2%AND128) M=?(ST+P1*1024+40+13.75*(Flg2%AND64)):?(ST+P1*1024+40+13.75*(Flg2%AND64))=13:PRINT$(ST+P1*1024+13.75*(Flg2%AND64));:?(ST+P1*1024+40+13.75*(Flg2%AND64))=M 960 IF(Flg2%AND32) PRINTTIT$;SPC(38-POS); 970 ENDPROC 980 L=ST+P1*1024+1:?(L-1)=0:REPEAT:Z$="":REPEAT:Z$=Z$+CHR$(?L):L=L+1:UNTIL ?L=128 OR LEN Z$>37 OR ?L=13:IFLEFT$(Z$,1)=" " REPEATZ$=MID$(Z$,2):UNTILLEFT$(Z$,1)<>" " 990 IFLENZ$>37 L=ST+P1*1024+((L-40-(ST+P1*1024))MOD40)+40 1000 IFRIGHT$(Z$,1)=" " REPEATZ$=LEFT$(Z$,LENZ$-1):UNTILRIGHT$(Z$,1)<>" " 1010 PROC_OSCLI(Z$):L=L+1:UNTIL?L=128 OR ?L=13 OR L>ST+1024*P1+910 OR Z$="":ENDPROC 1020 DEFPROC_TITLE:VDU30:Flg2%=?(ST+1024*P2+934):?(ST+1024*P2+934)=13:TIT$=$(ST+1024*P2+921):?(ST+1024*P2+934)=Flg2%:IFLENTIT$=13THENIFRIGHT$(TIT$,1)=CHR$141THEN TIT$=LEFT$(TIT$,12) 1030 IF(Flg2%AND&C0)ENDPROC 1040 W%=TP:PRINTTIT$;SPC(13-LENTIT$);"‡";TP;CHR$(CHR);SPC((21-POS)AND POS<21);SPC(3 AND(TP>99999));:IF CLOCK=0 PRINTTAB(25,0)" Set - ";P1;" " ELSE PROC_CLOCK:PRINTTAB(25,0);d;" "mn$;SPC((d<10)AND1);:IFTP<100000 PRINTTAB(21,0);Day$;" "; 1050 PRINTTAB(0,1);:ENDPROC 1060 DEFPROC_CLOCK:IF time%=TIME DIV100 ENDPROC 1070 IF(Flg2%AND 128)ENDPROC 1080 time%=TIME DIV100:h=TIME DIV360000:m=TIME DIV6000 MOD60:s=TIME DIV100 MOD60:IF h<10h$="ƒ "ELSEh$="ƒ" 1090 IFm<10m$=":0"ELSEm$=":" 1100 IFs<10s$="/0"ELSEs$="/" 1110 PRINTTAB(31,0)h$;h;m$;m;s$;s;:IF TIME DIV256=&8400 IFFNdate ENDPROC 1120 ENDPROC 1130 DEFFN_DATE1:IF(D%AND&1000) THEN =0 1140 LOCAL X%,Y%:!buffer%=&10000900:A%=&14:X%=buffer%:Y%=X%DIV256:CALL&FFF1:IFbuffer%?3<>0 :=0 1150 s=buffer%?8:m=buffer%?7:h=buffer%?6:yr=81+buffer%?5 DIV16:mn=buffer%?5 AND&F:d=buffer%?4 AND31:mn$=MID$("JanFebMarAprMayJunJulAugSepOctNovDec",mn*3-2,3):Day$=FN_DAY(d,mn,yr) 1160 TIME=h*360000+m*6000+s*100:=TRUE 1170 DEFFN_DAY(D,MN,Y):LOCAL F,Q,D$:D=D+1:IF(Y/4)-INT(Y/4)=0 F=1 1180 FORQ=80TOY-1:IF(Q/4)-INT(Q/4)=0 D=D+1 1190 NEXT:D=D+(Y-80)*365:IFF=1ANDMN>2 D=D+1 1200 FORQ=1TOMN:D=D+VALMID$("00312831303130313130313031",2*Q-1,2):NEXT 1210 D=D MOD7:D$=MID$("SunMonTueWedThuFriSat",D*3+1,3):=D$ 1220 DEFFN_DATE2:A%=14:X%=buffer%:Y%=X%DIV256:!buffer%=&D00:CALL&FFF1:IF ?buffer%=0 :=0 1230 buffer%?24=13:D$=$buffer%:d=VALMID$(D$,5,2):h=VALMID$(D$,17,2):m=VALMID$(D$,20,2):s=VALRIGHT$(D$,2):mn$=MID$(D$,8,3):Day$=LEFT$(D$,3):GOTO1160 1240 DEFFN_DATE3:IFFNfs=5AND FN_DATE1:=TRUE 1250 IF(D%AND 512)=512 Day$="***":mn$="***":d=0:TIME=0:=TRUE 1260 VDU31,0,2:INPUT"Day: "Day$ 1270 REPEAT:INPUT"Date: "d:UNTILd>0ANDd<32 1280 s=0:INPUT"Month: "mn$:mn$=LEFT$(mn$,3):INPUT"Hours: "h:INPUT"Minutes: "m:GOTO1160 1290 DEFFNdate:IF(D%AND 256)=256 AND FN_DATE2 :=TRUE 1300 IF FN_DATE1 :=TRUE 1310 =FN_DATE2 1320 DEFPROCdate:IF FNdate ENDPROC 1330 IFFN_DATE3 OR1 ENDPROC 1340 fnd=0:VDU26:PRINTTAB(0,23);:OSCLI"FX12":OSCLI"FX4":IF ERR<>214 OR oscflg<>0 REPORT:IF ERR=17 GOTO1380 1350 IF ERR<100 GOTO1390 1360 IFERR=214 AND oscflg=0 PRINTTAB(0,24);"‚::Page ";P$;" does not exist::"; 1370 PRINTSPC(38-POS);:Z$=INKEY$(200):GOTO200 1380 IFNOTINKEY(-1)GOTO1440 1390 PRINT" at line ";ERL:VDU7:IFINKEY(-1)OSCLI"FX225,1":OSCLI"FX226,128":END ELSEGOTO1370 1400 DEFPROC_REVEAL 1410 LOCAL A:PRINTTAB(0,24);"Revealing..."; 1420 FOR A=0 TO 919:IF ?(ST+1024*P1+A)=152 VDU31,A MOD 40,1+(A DIV 40),32 1430 NEXT A:PRINTTAB(0,24);SPC(20);:ENDPROC 1440 PRINTTAB(0,24);"Do you want to finish? (Y/N)";:Z$=GET$ 1450 IFZ$="Y"ORZ$="y"VDU8,8,8,8,8:PRINT"Yes ";:OSCLILEFT$("DIR",-3*(FNfs=5)):oscflg=1:CHAIN"Hello"ELSEGOTO200 1460 DEFPROC_OSC 1470 CLS:*FX4 1480 INPUTLINE"*"AA$ 1490 PROC_OSCLI(AA$):CLOSE#0 1500 PRINT"****** Press space to continue ******";:AA$=GET$ 1510 VDU13:PRINTSPC(39);:VDU13:IF AA$<>"*" OSCLI"FX4,1":ENDPROC 1520 GOTO1480 1530 DEFPROC_KEYWORD 1540 IF KST=0 PRINTTAB(0,24);"ƒNo keywords present.";INKEY$(200);:ENDPROC 1550 VDU28,0,24,39,24:OSCLI"FX138,0,"+STR$ASCZ$ 1560 LOCAL Q$,A,B,C,D 1570 INPUT'"„Keyword: "Z$:IF LENZ$<2 ENDPROC 1580 PRINT"ƒLooking for ";Z$;:Z$=FNU(Z$):IF INSTR(Z$," ") Z$=LEFT$(Z$,INSTR(Z$," ")-2) 1590 FOR A=0 TO KLE-1 1600 Q$="":C=1:FOR B=0 TO 919 1610 D=?(KST+A*1024+B) AND 127:D$=MID$(Z$,C,1) 1620 IF D=33 A=99:B=999:Q$="":GOTO1700 1630 IF D=32 GOTO1700 1640 IF D$="*" GOTO1680 1650 IF D<>ASCD$ GOTO1690 1660 C=C+1:IF C<=LEN Z$ GOTO1700 1670 IF?(KST+A*1024+B+1)<>44 GOTO1690 1680 PROC_FDNUM:A=99:B=999:GOTO1700 1690 C=1:PROC_FDNUM:Q$="" 1700 NEXTB,A 1710 IFQ$="" PRINT'"‚Keyword not found";:VDU26:fnd=0:Z$=INKEY$(200):ENDPROC 1720 VDU12,26:PROC_GETPAGE(Q$):fnd=1:ENDPROC 1730 DEFPROC_FDNUM 1740 REPEAT:B=B+1:UNTIL?(KST+A*1024+B)=ASC"," 1750 B=B+1:Q$="":D$=CHR$(?(KST+A*1024+B)) 1760 REPEAT:Q$=Q$+D$:B=B+1:D$=CHR$(?(KST+A*1024+B)) 1770 UNTIL D$<"0" OR D$>"9":ENDPROC 1780 DEFFNU(Q$) 1790 LOCAL W$,R$,A 1800 FOR A=1 TO LEN Q$:W$=MID$(Q$,A,1):IF W$>"`" W$=CHR$(ASC W$-32) 1810 R$=R$+W$:NEXT:=R$ 1820 DEFPROC_OSCLI(A$) 1830 IF LEFT$(A$,1)="*" OR LEFT$(A$,1)=" " A$=MID$(A$,2):GOTO1830 1840 IF LEFT$(A$,4)="PAGE" PROC_GETPAGE(MID$(A$,6)):OSCLI"FX138,0,32":ENDPROC 1850 IF LEFT$(A$,4)="SHUT" CLOSE#0:ENDPROC 1860 IF LEFT$(A$,8)="NEWSREEL" PRINT"‚Newsreel index page.":L=L+1000:ENDPROC 1870 IF LEFT$(A$,5)="CHAIN" P$=MID$(A$,7):PRINT"ƒLoading "P$:OSCLI"FX4":OSCLI"FX225,1":OSCLI"FX226,128":OSCLI"FX11,32":CHAINP$ 1880 IF LEFT$(A$,2)="IP" DIR$=MID$(A$,4)+".":$(B%+4)=LEFT$(DIR$,LENDIR$-1):ENDPROC 1890 IF LEFT$(A$,5)="FLAG=" V%=VALMID$(A$,6):ENDPROC 1900 IF LEFT$(A$,5)="CLEAR" FOR LP=0 TO pagemax%:L%(LP)=-1:L2%(LP)=-1:NEXT:ENDPROC 1910 oscflg=1:OSCLI A$:oscflg=0:ENDPROC 1920 DEFFNfs:LOCAL A%,Y%,E%:A%=0:Y%=0:E%=0:=(USR&FFDA)AND255 1930 DEFPROCstats:FOR LP=0 TO pagemax% STEP18:CLS:PRINT"„"CHR$157"‡Program Status":PROC_CLOCK:PRINT"Maximum page: ";pagemax%'"Current stored pages: "'"Loc. Page"SPC(5)"Title" 1940 FOR LOOP=LP TO (pagemax%AND(LP+19>pagemax%))+((LP+17)AND(LP+19<=pagemax%)):PRINTSPC(2-LENSTR$LOOP);LOOP;" ";:IF L%(LOOP)=-1 PRINT"Empty"; 1950 IF L%(LOOP)>-1 PRINTL%(LOOP);" ";LEFT$($(ST+LOOP*1024+921),13);TAB(27);:IF L%(LOOP)=L2%(LOOP) PRINT"‡start frame"; 1960 PRINT:NEXT:PRINTTAB(0,23);VER$;:REPEAT:PROC_CLOCK:UNTILINKEY(50)>0:NEXT:CLS:ENDPROC 1970 DEFFNarc:=(INKEY-256<190 AND INKEY-256>150)