20 REM Scrolling text file display 30 : 40 ver$="0.96":c$="128":lp$="lp" 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 PRINTERL:IF FNerr OR A$<>"":PROCend:END 110 IFpr% AND f$<>"":pr%=FALSE:OSCLI"disp ON":OSCLI"CODE 251":cat%=FNlp(f$):f$="" 120 REPEAT:IFcat%:CLS:PRINT">> Scroll Version "ver$" - (C) J.G.Harston Buffer size: &";~max%;" (";max%;" bytes) <<"':OSCLI".":PRINT'"Press SHIFT-Escape to exit.":*FX4 130 REPEAT:cat%=FALSE:f$=A$:IFf$="":INPUTLINE"File: "f$:IF LEFT$(f$,1)="*":OSCLI"CODE 253":OSCLIf$:OSCLI"CODE 251" 140 UNTILLEFT$(f$,1)<>"*":cat%=FNlp(f$):f$="":UNTILA$<>"" 150 PROCend:END 160 : 170 DEFPROCend:*FX4 180 *FX229 190 *FX225,1 200 *CODE 253 210 IFquit$<>"":VDU13:PRINT"Exit"; 220 IFLEFT$(quit$,1)="*":OSCLIquit$:ENDPROC 230 I%=INSTR(quit$," "):IFI%:OSCLI"KEY0 |@"+MID$(quit$,I%+1)+"|M":*FX138,0,192 240 IFquit$<>"":CHAINquit$ 250 ENDPROC 260 : 270 DEFFNerr:IFERR<>17:REPORT:IFERR<128 AND ERR<>17:PRINT" at line ";ERL; ELSE IFERR<>17:PRINT 280 cat%=ERR=17:IFch%<>0:A%=ch%:ch%=0:CLOSE#A% 290 =INKEY-1 300 : 310 DEFPROCinit:cat%=TRUE:ch%=0:pr%=FALSE:f$="" 320 max%=HIMEM-TOP-600:DIM ctrl% 20,data% max%+2:end%=data%+max% 330 ENDPROC 340 : 350 DEFFNlp(f$):IFf$="":=FALSE 360 ch%=OPENIN(f$):IFch%=0:PRINT"File '"f$"' not found":=FALSE 370 len%=EXT#ch%:IFlen%end% ANDch%:PROCdown 460 IFi%=8 ANDptr%end% ANDch%:PROCdown 500 IFI%=2 ANDptr%0:fst%=0:PROCgbpb(max%,0) 570 IFI%=5:top%=data%:PROCpage:UNTIL0 580 IF(I%AND&FE)=6:c$=STR$(VALc$EOR32):OSCLI"CODE "+c$:PROCpage:UNTIL0 590 IF(I%AND&FE)=16:PROCpr 600 UNTILI%=1:*FX229 610 *FX225,1 620 =TRUE 630 : 640 DEFPROCpage:CLS:VDU13:ptr%=top%:REPEATPRINT$ptr%:ptr%=ptr%+1+LEN$ptr%:UNTILVPOS=h% OR ptr%>=data%+len%:IFVPOS13 PRINT"*** LF terminated text file.";CHR$13; 660 PROCline:ENDPROC 670 : 680 DEFPROCback:IFtop%<=data%:PROCline:ENDPROC 690 t%=top%-100:IFt%=top%:IFdata%+1+LEN$data%=top%:t%=data% 710 top%=t%:t%=ptr%-100:REPEATt%=t%+1+LEN$t%:UNTILt%+1+LEN$t%=ptr%:ptr%=t% 720 PRINTCHR$30;CHR$11;CHR$13;$top%;TAB(0,h%);:PROCline:ENDPROC 730 : 740 DEFPROCdown:IFfst%+max%=len%:ENDPROC 750 f%=fst%+max%DIV2:IFf%+max%>len%:f%=len%-max% 760 off%=f%-fst%:IFoff%=0:ENDPROC 770 top%=top%-off%:ptr%=ptr%-off%:fst%=f%:PROCgbpb(max%,fst%):ENDPROC 780 : 790 DEFPROCup:IFfst%=0:ENDPROC 800 f%=fst%-max%DIV2:IFf%-max%<0:f%=0 810 off%=f%-fst%:IFoff%=0:ENDPROC 820 top%=top%-off%:ptr%=ptr%-off%:fst%=f%:PROCgbpb(max%,fst%):ENDPROC 830 : 840 DEFPROCline:IFADVAL(-1)=0:OSCLI"CODE 0":PRINT"File: "RIGHT$(f$,30);SPC(30-LENf$);RIGHT$(" "+STR$(100*(ptr%-data%+fst%-1)DIVlen%),2);"% Cursors move, P: printout, Esc to exit";:VDU13:OSCLI"CODE "+c$ 850 ENDPROC 860 : 870 DEFPROCgbpb(n%,p%):LOCAL A%,X%,Y%:X%=ctrl%:Y%=X%DIV256:A%=3:PRINT"Read"; 880 ?X%=ch%:X%!1=data%:X%!5=n%:X%!9=p%:CALL&FFD1:data%?max%=13:ENDPROC 890 : 900 DEFPROCpr:PRINTSPC(79);CHR$13;"Print out ";f$;" Default printer is *";:FORi%=1TO LENlp$:OSCLI"FX138,0,"+STR$ASCMID$(lp$,i%):NEXT:INPUT""lp$ 910 pr%=TRUE:OSCLI"CODE 253":PRINT"Printing...";:OSCLIlp$+" "+f$:OSCLI"disp ON":OSCLI"CODE "+c$:pr%=FALSE:PROCpage 920 ENDPROC 930 : 940 DEFFNOS_GetEnv:LOCALA$,A%,X%,Y% 950 IFINKEY(0)=0:REPEAT A%=INKEY(0):A$=A$+CHR$A%:UNTIL A%=-1:OSCLI"KEY0":=LEFT$(A$,LENA$-1+(RIGHT$(A$,2)<" ")) 960 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$," ")))) 970 X%=ctrl%:Y%=X%DIV256:A%=9:?X%=0:X%!1=data%:!data%=0:CALL&FFD1:IF!data%:data%?(1+?data%)=13:=$(data%+1) 980 =""