10 REM > Scroll 20 REM Scrolling text file display 30 : 40 ver$="0.94":c$="128" 50 MODE&80:h%=31:w%=79:IFHIMEM<&8000:MODE&83:h%=24 60 PROCinit:A$=FNOS_GetEnv:*disp ON 70 I%=INSTR(A$," -q"):quit$="":IFI%:quit$=MID$(A$,INSTR(A$," ",I%+1)+1) 80 IFLEFT$(A$,2)="-?":PRINT"Syntax: Scroll (-quit (*))":PROCend:END 90 A$=LEFT$(A$,INSTR(A$+" "," ")-1):cat%=A$="":IFmax%<2500:PRINT"Not enough memory to run":PROCend:END 100 ON ERROR IF FNerr OR A$<>"":PROCend:END 110 REPEAT:IFcat%:CLS:PRINT">> Scroll Version "ver$" - (C) J.G.Harston Buffer size: &";~max%;" (";max%;" bytes) <<"':OSCLI".":PRINT'"Press SHIFT-Escape to exit.":*FX4 120 REPEAT:cat%=FALSE:f$=A$:IFf$="":INPUT"File: "f$:IF LEFT$(f$,1)="*":OSCLI"CODE 253":OSCLIf$:OSCLI"CODE 251" 130 UNTILLEFT$(f$,1)<>"*":cat%=FNlp(f$):UNTILA$<>"" 140 PROCend:END 150 : 160 DEFPROCend:*FX4 170 *FX229 180 *FX225,1 190 *CODE 253 200 IFquit$<>"":VDU13:PRINT"Exit"; 210 IFLEFT$(quit$,1)="*":OSCLIquit$:ENDPROC 220 IFquit$<>"":CHAINquit$ 230 ENDPROC 240 : 250 DEFFNerr:IFERR<>17:REPORT:IFERR<128 AND ERR<>17:PRINT" at line ";ERL; ELSE IFERR<>17:PRINT 260 cat%=(ERR=17):IFch%<>0 THEN A%=ch%:ch%=0:CLOSE#A% 270 =INKEY-1 280 : 290 DEFPROCinit:cat%=TRUE:ch%=0 300 max%=HIMEM-TOP-500:DIM ctrl% 20,data% max%+2:end%=data%+max% 310 ENDPROC 320 : 330 DEFFNlp(f$):IFf$="":=FALSE 340 REM Only does loading 350 ch%=OPENIN(f$):IFch%=0:PRINT"File '"f$"' not found":=FALSE 360 len%=EXT#ch%:IFlen%end% ANDch%:PROCdown 450 IFi%=8 ANDptr%end% ANDch%:PROCdown 490 IFI%=2 ANDptr%0:fst%=0:PROCgbpb(max%,0) 560 IFI%=5:top%=data%:PROCpage:UNTIL0 570 IF(I%AND&FE)=6:c$=STR$(VALc$EOR32):OSCLI"CODE "+c$:PROCpage:UNTIL0 580 UNTILI%=1:*FX229 590 *FX225,1 600 =TRUE 610 : 620 DEFPROCpage:CLS:VDU13:ptr%=top%:REPEATPRINT$ptr%:ptr%=ptr%+1+LEN$ptr%:UNTILVPOS=h% OR ptr%>=data%+len%:IFVPOS=top%:IFdata%+1+LEN$data%=top%:t%=data% 680 top%=t%:t%=ptr%-100:REPEATt%=t%+1+LEN$t%:UNTILt%+1+LEN$t%=ptr%:ptr%=t% 690 PRINTCHR$30;CHR$11;CHR$13;$top%;TAB(0,h%);:PROCline:ENDPROC 700 : 710 DEFPROCdown:IFfst%+max%=len%:ENDPROC 720 f%=fst%+max%DIV2:IFf%+max%>len%:f%=len%-max% 730 off%=f%-fst%:IFoff%=0:ENDPROC 740 top%=top%-off%:ptr%=ptr%-off%:fst%=f%:PROCgbpb(max%,fst%):ENDPROC 750 : 760 DEFPROCup:IFfst%=0:ENDPROC 770 f%=fst%-max%DIV2:IFf%-max%<0:f%=0 780 off%=f%-fst%:IFoff%=0:ENDPROC 790 top%=top%-off%:ptr%=ptr%-off%:fst%=f%:PROCgbpb(max%,fst%):ENDPROC 800 : 810 DEFPROCline:IFADVAL(-1)=0:OSCLI"CODE 0":PRINT"File: "RIGHT$(f$,30);SPC(30-LENf$);"Cursors move, COPY extends, Esc to exit";:VDU13:OSCLI"CODE "+c$ 820 ENDPROC 830 : 840 DEFPROCgbpb(n%,p%):LOCAL A%,X%,Y%:X%=ctrl%:Y%=X%DIV256:A%=3:PRINT"Read"; 850 ?X%=ch%:X%!1=data%:X%!5=n%:X%!9=p%:CALL&FFD1:data%?max%=13:ENDPROC 860 : 870 DEFFNOS_GetEnv:LOCALA$,A%,X%,Y% 880 IFINKEY(0)=0:REPEAT A%=INKEY(0):A$=A$+CHR$A%:UNTIL A%=-1:OSCLI"KEY0":=LEFT$(A$,LENA$-1+(RIGHT$(A$,2)<" ")) 890 IF(INKEY-256 AND &F0)=&A0 AND PAGE>&8000:LOADATN "OS_GetEnv" TO A$:=MID$(A$,1+INSTR(A$," ",1+INSTR(A$," ",1 +INSTR(A$," ")))) 900 X%=ctrl%:Y%=X%DIV256:A%=9:?X%=0:X%!1=data%:!data%=0:CALL&FFD1:IF!data%:data%?(1+?data%)=13:=$(data%+1) 910 =""