10 REM > Scroll 20 REM Scrolling text file display 30 PROCxtr:ver$="1.10":c$="128" 40 MODE&83:h%=24:w%=79:IFHIMEM>&4000:MODE&80:h%=31 50 PROCinit:A$=FNOS_GetEnv:lp$=FNcl("-l"):tt$=FNcl("-4"):ch$=FNcl("-c") 60 quit$=FNcl(" -q"):Z$=FNcl("-?"):A$=FNcl(" "):PROCasm:PROCgo 70 IFINSTR(" "+A$+Z$," -?"):PRINT"Syntax: Scroll (-lp ) (-4 ) |-chan + (-quit )":PROCend(FALSE):END 80 IFA$="""""":A$="" 90 cat%=A$+ch$="":IFmax%<2500:PRINT"Not enough memory to run":PROCend(FALSE):END 100 IFlp$="":lp$=FNFindLP 110 ONERROR IFFNerr OR A$<>"":PROCend(FALSE):END 120 X%=ctrl%:Y%=X%DIV256:IFpr% ANDf$<>"":pr%=FALSE:PROCgo:PROCcon:cat%=FNlp(f$):f$="" 130 REPEAT:IFcat%:CLS:PRINT">> Scroll Version "ver$" - (C) J.G.Harston Buffer size: &";~max%;" (";max%;" bytes) <<"':OSCLI".":PRINT'"Press SHIFT-Escape to exit.":*FX4 140 REPEAT:cat%=FALSE:f$=A$:IFf$+ch$="":INPUTLINE"File: "f$:IFLEFT$(f$,1)="*":PROCdis:OSCLIf$:PROCcon 150 UNTILLEFT$(f$,1)<>"*":cat%=FNlp:f$="":UNTILA$<>"" 160 PROCend(FALSE):END 170 : 180 DEFPROCend(F%):PROCcl:*FX4 190 *FX229 200 *FX225,1 210 PROCdis:IFF%:ENDPROC 220 IFquit$<>"":VDU13:PRINT"Exit";:PROCos(quit$) 230 ENDPROC 240 DEFFNerr:IFERR<>17:REPORT:IFERR<128 AND ERR<>17:PRINT" at line ";ERL; ELSE IFERR<>17:PRINT 250 cat%=ERR=17:PROCcl:=INKEY-1 260 DEFPROCinit:cat%=TRUE:ch%=0:pr%=FALSE:f$="" 270 Max%=HIMEM-LOMEM-900:DIMctrl%20,data% Max%+4:end%=data%+Max%:max%=Max% 280 X%=ctrl%:Y%=X%DIV256:ENDPROC 290 DEFFNcl(l$):LOCAL I%:IFASCl$=32 AND A$<>"":A$=" "+A$ 300 I%=INSTR(A$,l$):l$="":IFI%:l$=MID$(A$,INSTR(A$," ",I%+1)+1):IFMID$(A$,I%,1)<>" ":l$=LEFT$(l$,INSTR(l$," ")-1) 310 IFI%:IFMID$(A$,I%,1)=" ":A$=LEFT$(A$,I%-1) ELSE IFI%:A$=MID$(A$,INSTR(A$,l$)+1+LENl$) 320 =l$ 330 DEFPROCcl:IFch%:A%=ch%:ch%=0:CLOSE#A% 340 ENDPROC 350 DEFPROCos(c$):IFLEFT$(c$,1)="*":OSCLIc$:ENDPROC 360 I%=INSTR(c$," "):IFI%:OSCLI"KEY0 |@"+MID$(c$,I%+1)+"|M":*FX138,0,192 370 CHAINc$:ENDPROC 380 DEFFNlp:len%=0:IFf$+ch$="":=FALSE 390 IFch$<>"":len%=INSTR(ch$,"+"):ch%=VALLEFT$(ch$,len%-1):len%=EVALMID$(ch$,len%+1) 400 IFch$="":ch%=OPENIN(f$):IFch%=0:PRINT"File '"f$"' not found":=FALSE 410 len%=(EXT#ch% AND(len%=0))+len%:pt0%=PTR#ch%:IFlen%end% ANDch%:PROCdn 490 IFi%=8 ANDptr%end% ANDch%:PROCdn 530 IFI%=2 ANDptr%0:fst%=0:PROCgbpb(max%,0) 600 IFI%=5:top%=data%:PROCpg:UNTIL0 610 IF(I%AND&FE)=6:c$=STR$(VALc$EOR32):PROCon:PROCpg:UNTIL0 620 IF(I%AND&FE)=16:PROCpr 630 IFI%=18 ANDtt$<>"":PROCend(TRUE):PRINT"Mode7";:PROCos(tt$+" "+f$) 640 UNTILI%=1:*FX229 650 *FX225,1 660 =TRUE 670 : 680 DEFPROCpg:CLS:VDU13:ptr%=top%:REPEATPROCp(ptr%):ptr%=ptr%+1+LEN$ptr%:UNTILVPOS>=h% ORptr%>=data%+len% ORptr%>=end%:IFVPOS=top%:IFdata%+1+LEN$data%=top%:t%=data% 730 top%=t%:t%=ptr%-100:REPEATt%=t%+1+LEN$t%:UNTILt%+1+LEN$t%=ptr%:ptr%=t% 740 VDU30,11,13:PROCp(top%):PRINTTAB(0,h%);:PROCln:IFptr%+1+LEN$ptr%data%+len%-fst%:ptr%=t%:ENDPROC 760 DEFPROCdn:IFfst%+max%>=len%:ENDPROC 770 f%=fst%+max%DIV2:IFf%+max%>len%:f%=len%-max% 780 off%=f%-fst%:IFoff%=0:ENDPROC 790 top%=top%-off%:ptr%=ptr%-off%:fst%=f%:PROCgbpb(max%,fst%):ENDPROC 800 DEFPROCup:IFfst%=0:ENDPROC 810 f%=fst%-max%DIV2:IFf%-max%<0:f%=0 820 off%=f%-fst%:IFoff%=0:ENDPROC 830 top%=top%-off%:ptr%=ptr%-off%:fst%=f%:PROCgbpb(max%,fst%):ENDPROC 840 DEFPROCln:IFADVAL(-1)=0:PROCoff:PRINT"File: "RIGHT$(f$,30)SPC(30-LENRIGHT$(f$,30))RIGHT$(" "+STR$(100*(ptr%-data%+fst%-1)DIVlen%),2)"% Cursors move, P: printout, Esc to exit";:VDU13:PROCon 850 ENDPROC 860 DEFPROCgbpb(n%,p%):A%=3:PRINT"Read"; 870 ?X%=ch%:X%!1=data%:X%!5=n%:X%!9=p%+pt0%:CALL&FFD1:data%!max%=&D0D0D:*FX21 880 PROCcr:ENDPROC 890 DEFPROCcr:PRINTCHR$13"Wait";:A%=data%:REPEAT 900 IF(?A%=10 AND A%?1=13)OR(?A%=13 AND A%?1=10):?A%=32:A%?1=13:A%=A%+1 ELSE IF?A%=10:?A%=13 910 A%=A%+1+LEN$A%:IFA%?-2=10:A%=A%-2 920 UNTILA%>end% ORA%>data%+len%:ENDPROC 930 DEFPROCpr:PRINTSPC(79);CHR$13;"Print out ";f$;" Printout with *";:IFlp$<>"":FORi%=1TO LENlp$+1:OSCLI"FX138,0,"+STR$ASCMID$(lp$+" ",i%):NEXT 940 INPUT""lp$:IFlp$="":VDU7:PRINT"No printout command found";:A%=INKEY(200):PROCpg:ENDPROC 950 pr%=TRUE:PROCdis:PRINT"Printing...";:OSCLIlp$+" "+f$:PROCgo:PROCon:pr%=FALSE:PROCpg:ENDPROC 960 : 970 DEFFNFindLP:IFFNi("lp")=1:="lp" 980 A%=FNi("%.lp"):IFA%=1:="%.lp" 990 IFA%=2:IFFNi("%.lp.#"):="%.lp.#" 1000 IFA%=2:IFFNi("%.lp.*"):="%.lp.*" 1010 IFFNi("$.lp"):="$.lp" 1020 IFFNi(":0.$.lp"):=":0.$.lp" 1030 ="" 1040 DEFFNi(f$):LOCALA%:$data%=f$:A%=5:!X%=data%:=(USR&FFDD)AND&FF 1050 : 1060 DEFFNOS_GetEnv:LOCALA$,A%,X%,Y%:X%=1:os%=((USR&FFF4)AND&FF00)DIV256 1070 IFINKEY(0)=0:REPEAT A%=INKEY(0):A$=A$+CHR$A%:UNTIL A%=-1:OSCLI"KEY0":=LEFT$(A$,LENA$-1+(RIGHT$(A$,2)<" ")) 1080 IFos%=6 AND PAGE>&8000:LOADATN "OS_GetEnv" TO A$:=MID$(A$,1+INSTR(A$," ",1+INSTR(A$," ",1 +INSTR(A$," ")))) 1090 X%=ctrl%:Y%=X%DIV256:A%=9:?X%=0:X%!1=data%:!data%=0:CALL&FFD1:IF!data%AND?data%+data%?2<>8:data%?(1+?data%)=13:=$(data%+1) 1100 ="" 1110 : 1120 DEFPROCon:IFm%:OSCLI"CODE "+c$ 1130 ENDPROC 1140 DEFPROCoff:IFm%:OSCLI"CODE 0" 1150 ENDPROC 1160 DEFPROCcon:IFm%:OSCLI"CODE 251" 1170 ENDPROC 1180 DEFPROCdis:IFm%:OSCLI"CODE 253" 1190 ENDPROC 1200 DEFPROCgo:IFm%:OSCLI"disp ON":ENDPROC 1210 PROCc(-1):ENDPROC 1220 DEFPROCp(P%):IFm%:PRINT$P%:ENDPROC 1230 REPEATPROCc(?P%):P%=P%+1:UNTILP%?-1=13:ENDPROC 1240 DEFPROCasm:m%=os%<>6:IFm%:ONERROR:ONERROR OFF:PRINT"Can't find *disp":PROCend(FALSE):END 1250 ENDPROC 1260 DEFPROCxtr:REM 1270 PROCreloc(&500,3):IF(INKEY-256 AND&F0)<>&A0:A%=PAGE:REPEATA%=A%+1+LEN$A%:I%=INSTR($A%,CHR$&DD+CHR$&F2+"xtr:"):UNTILI%:A%!(I%+5)=!(TOP-3+2*(?(TOP-3)=0)):LOMEM=A%+I%+8-2*(?(TOP-3)=0):ENDPROC 1280 ENDPROC:REM Last line MUST end with ENDPROC 1290 DEFPROCc(A%):IFA%<0:flg%=0:out%=1:ENDPROC 1300 IFA%<32:PROCctrl(A%):ENDPROC 1310 IFflg%>127:PROCflg(A%):ENDPROC 1320 out%=out%+1:IFA%=32:A%=9 1330 IFflg%=0:VDU A% ELSE PROCout(A%) 1340 ENDPROC 1350 DEFPROCctrl(A%) 1360 IFA%=9:FORz%=(out%AND 7)TO 7:PROCc(32):NEXT:ENDPROC 1370 IFA%=13 OR A%=10:PRINT:out%=1:ENDPROC 1380 IFA%=28:flg%=flg%EOR 1:ENDPROC:REM Underline 1390 IFA%=29:flg%=flg%OR 128:ENDPROC:REM Wait for next character 1400 ENDPROC 1410 DEFPROCflg(A%):flg%=flg%AND 127:IFA%<65 OR A%>126:ENDPROC 1420 b%=0:a%=A%<96:A%=A% AND &DF 1430 IFA%=ASC"B":b%=&FD 1440 IFA%=ASC"H":b%=&BF 1450 IFA%=ASC"I":b%=&F7 1460 IFA%=ASC"Q":b%=&BB:REM Almost 1470 IFA%=ASC"S":b%=&EF 1480 IFA%=ASC"W":b%=&FB 1490 IFA%=ASC"X":b%=&BB 1500 IFA%=ASC"Y":b%=&DF 1510 IFb%=0:PRINT"(";CHR$A%;")";:ENDPROC 1520 flg%=(flg%AND b%)OR(a% AND (b% EOR 255)):ENDPROC 1530 DEFPROCout(C%):IFC%=9:C%=32 1540 LOCAL z%,a%:A%=10:?X%=C%:CALL &FFF1 1550 IF(flg%AND 1):X%?8=255:REM or X%?8 EOR 255 1560 IF(flg%AND 2):FOR z%=1 TO 8:X%?z%=X%?z% OR(X%?z% DIV 2):NEXT 1570 IF(flg%AND 8):X%?1=X%?1 DIV4:X%?2=X%?2 DIV4:X%?3=X%?3 DIV2:X%?4=X%?4 DIV2:X%?7=X%?7*2:X%?8=X%?8*2 1580 IF(flg%AND 48):X%?2=X%?3:X%?3=X%?5:X%?4=X%?6:X%?5=X%?7:X%!6=0 1590 IF(flg%AND 32):X%!8=X%!5:X%!4=X%!1:X%?1=0:X%?2=0:X%?3=0 1600 REM Sub/Super need a bit of modification 1610 IF(flg%AND 4):FORz%=1 TO 8:?(X%+9+z%)=X%?z%:X%?z%=(X%?z% AND 128)+(X%?z% AND 128)DIV 2+(X%?z% AND 64)DIV 2+(X%?z% AND 64)DIV4+(X%?z% AND 32)DIV 4+(X%?z% AND 32)DIV 8+(X%?z% AND 16)DIV 8+(X%?z% AND 16)DIV 16:NEXT:PROCoutB 1620 IF(flg%AND 4):FORz%=1 TO 8:X%?z%=?(X%+z%+9):X%?z%=(X%?z% AND 1)+(X%?z% AND 1)*2+(X%?z% AND 2)*2+(X%?z% AND 2)*4+(X%?z% AND 4)*4+(X%?z% AND 4)*8+(X%?z% AND 8)*8+(X%?z% AND 8)*16:NEXT 1630 PROCoutB:ENDPROC 1640 DEFPROCoutB 1650 IF(flg%AND 68)=68:VDU 23,255:FORz%=5 TO 8:VDU X%?z%,X%?z%:NEXT:VDU 10,255,8,11:FORz%=7 TO 0 STEP -2:?(X%+z%+1)=?(X%+1+z%DIV2):?(X%+z%)=?(X%+1+z%DIV2):NEXT 1660 IF(flg%AND 68)=64:VDU 23,255:FORz%=1 TO 4:VDU X%?z%,X%?z%:NEXT:VDU 11,255,8,10:FORz%=0 TO 7 STEP 2:?(X%+z%+1)=?(X%+5+z%DIV2):?(X%+z%+2)=?(X%+5+z%DIV2):NEXT 1670 VDU 23,255:FORz%=1 TO 8:VDUX%?z%:NEXT:VDU 255:ENDPROC 1680 DEFPROCreloc(S%,X%):A%=133:X%=X%OR&80:A%=(USR&FFF4 AND&FFFF00)DIV256:IFA%-LOMEM>S%:ENDPROC 1690 B%=(PAGE+(A%-LOMEM-S%))AND&FF00:PRINT"Relocating to &";~B%:FORA%=0 TO LOMEM-PAGE+4 STEP4:A%!B%=A%!PAGE:NEXT:A$="":REPEATB$=INKEY$(0):IFB$<" " AND B$<>"":B$="|"+CHR$(64+ASCB$) 1700 A$=A$+B$:UNTILB$="":OSCLI"KEY0 RUN|M"+A$:OSCLI"FX138,0,192":PAGE=B%:END 1710 ENDPROC