1 REM Ins{nd av Johan Olofsson <5809> 1987-04-26 15.24.03 (DUMP) 10 ! - M S G 3 . B A C 15 ! 20 ! programmet {r en kompott med f|ljande ingredienser 25 ! 30 ! sk{rm-rutiner i programmet VisaUtil.bac 35 ! F|r ABC80 av David Andersson <5201> 1986-08-08 40 ! till ABC800 av Kristoffer Eriksson <5357> 1986-11-10 45 ! 50 ! modem-rutiner i kommunikationsprogram f|r s{tterier 55 ! F|r ABC802 av Johan Olofsson <5809> 1986 10 10 60 ! 65 ! MSG-rutiner fr}n programmet MSG.bac 70 ! F|r ABC802 av Johan Olofsson <5809> december 1986 75 ! 80 ! Last revision: 1987 04 20 90 ! 99 ! ---------------------------------------------------------------------- 100 ! Medlemsnummer och Password s{ttes in p} rad 170 101 ! Hj{lp med funktionstangenters betydelse f}s med 102 ! [ndring av dessas betydelse g|rs i FNConin rad 3000-- 103 ! - 105 ! Programmet {r INTE v{ldokumenterat 106 ! Programmet {r ENDAST testat p} ABC802 med stort tangentbord 107 ! Huvudslingan b|r ge associationer till timeshared realtime 108 ! - 109 ! 110 INTEGER : EXTEND : ! NO RESUME 120 ; : ; 'M S G - programmet' : ; 'utan mottagning och s{ndning av filer' 123 Z=FNInit 125 Par$=RIGHT$('VSA60A99.',2) 135 Z=FNInitvisa 140 ; Buflen ' raders buffert.' 145 Z=FNFilinit 150 ! 170 X11$='Tryck RETURN' : X12$=Cr$+'5809'+Cr$+'PASW'+Cr$+'msg'+Cr$+'a'+Cr$ 180 X21$='(Se) tiden. -' : X22$='log'+Cr$ 190 ! 220 Autoscroll=-1 250 Z=FNResetvisa(Ffil,F|ljefil$) : R$=' ' 255 ! 256 ! - H u v u d s l i n g a 257 ! 260 WHILE -1 265 WHILE SYS(5) 270 Z=FNConin 280 WHILE S1<24 282 IF Readpos.>POSIT(Ffil)-2 IF Buf(In) THEN Z=FNMsg 284 IF Readpos.23 THEN Z=FNFwscroll 370 IF S1<24 IF Readpos.34 THEN Z=FNMsg 390 IF 0 WEND 400 Z=FNSysrad+FN\vervaka 410 ! 422 IF NOT Testrec THEN Flg$=Fr$ ELSE IF Flagrec THEN Flg$=Ft$ ELSE Flg$=Fb$ 440 MID$(Sysrad$,80,1)=Flg$ ! Recive-status 460 WEND 470 ! ------------------------------------------------------------------------ 480 ! E N D via FNConin 490 ! ------------------------------------------------------------------------ 500 DEF FNN|dlandning 510 WHILE -1 520 Z=FNMsg 530 WEND 540 FNEND 545 ! 550 DEF FNExit 560 IF NOT Flagend THEN PUT #Vmod,CHR$(4)+X22$ : Flagend=-1 570 MID$(Sysrad$,76,4)='EXIT' 580 RETURN T 590 FNEND 600 ! 700 ! 710 ! F|ljande variabler anv{nds som flaggor: 720 ! Autoscroll, Testrec, Flagrec, Flagend, Linstat, Skivsn}lt, Filsn}lt 730 ! 740 ! F|ljande variabler anv{nds f|r Systemrads-rutinerna: 750 ! Sysrad$, Oldutbuf, Oldutr, Oldinbuf, Utrymme, Flg$ 760 ! 770 ! F|ljande variabler anv{nds f|r Sk{rm-rutinerna: 780 ! S1, V1, V2, W1, W2, F1, Readpos., Writepos., Wid, L$, V$(), L2 790 ! 800 ! F|ljande variabler anv{nds f|r MSG-rutinerna: 810 ! Writepos, X11$, X12$, X21$, X22$, R$, Buf%(In), Buf%(Ut), Timeout 820 ! Limitu, Limit|, Maxlen, Limitr, Zrec 890 ! 900 ! - 1000 DEF FNInit 1020 ! -------------------------- Konstanter 1030 ! 1040 DIM Par$=8,X11$=30,X12$=30,X21$=21,X22$=4 1050 ! ----------------------------------------------------------------------- 1060 ! 1070 ! Filnummer f|r f|ljefil, mottags-, visnings- & s{ndfil 1080 ! 1090 Ffil=2 : Mfil=3 : Sfil=4 : Visafil=5 : Vfil=14 1100 Tmod=6 : Vmod=7 ! filnummer f|r T, respektive V-modem 1110 ! 1120 T=-1 : F=0 ! True och False 1130 ! 1140 Ut=0 : In=1 ! V24-buffertar Buf(Ut), Buf(In) 1150 Limitu=2700 : Limit|=Limitu+900 1160 Maxlen.=40000. 1170 Linstat=T ! visar om XON eller XOFF s{nts senast XOFF == False 1172 Flagend=T ! Visar om modemet {r |ppet eller st{ngt 1180 Timeout=60 1190 Limitr=165 ! Maxlen f|r rader 1195 Oldutbuf=80 ! Buf(Ut) {r 80 n{r bufferten {r tom. Subtraheras i sysrad$ 1200 ! 1210 ! 1220 ! -------------------------- dim 1230 ! 1240 DIM Z$=1 ! Dummy 1250 DIM Rad$=Limitr,R$=Limitr ! Inrader 1260 DIM B$=1 ! tecken fr}n #Vmod 1270 DIM Cr$=1 : Cr$=CHR$(13) ! Return-tangent 1280 DIM Lf$=1 : Lf$=CHR$(10) ! LineFeed 1290 DIM Bs$=1 : Bs$=CHR$(8) ! Back-step 1300 DIM Xon$=1 : Xon$=CHR$(17) ! Transmision ON 1310 DIM Xoff$=1 : Xoff$=CHR$(19) ! Transmision OFF 1311 DIM Fr$=1,Ft$=1,Fb$=1,Flg$=1 : Fr$=CHR$(210) : Ft$=CHR$(212) : Fb$=CHR$(160) 1320 ! 1330 DIM Buf(-2:In) : POKE 2+VAROOT(Buf(0)),PEEK(65500),PEEK(65501) 1340 DIM Buffer$=Limit|+900 : Buf(-1)=VAROOT(Buffer$) 1350 DIM Sysrad$=0 : POKE VAROOT(Sysrad$),80,0,128,127 : Sysrad$=SPACE$(80) 1360 ! DIM Mpos$=0 : POKE VAROOT(Mpos$),5,0,128+40,127,5,0 1370 Clusi=4 : IF Clusi=1 THEN Sec=7 ELSE Sec=15 ! clusterstorlek och bitmap 1380 DIM Bitmap$=33 1390 Bitmap$=CHR$(17,0,245,33,0,0,26,254,255,40,15,6,8,203,39,56,6,197,1) 1400 Bitmap$=Bitmap$+CHR$(1,0,9,193,5,32,243,19,62,161,187,32,230,201) 1410 ! 1420 ! 1430 OUT 56,6,57,25 ! 25 rader p} sk{rmen 1440 ! 1450 RETURN 0 1460 FNEND 1470 ! 1500 DEF FNFilinit LOCAL Inq$=20,F|rs|k 1510 ! ------------------------- \ppna f|ljefil 1520 ! 1530 Inq$='F\LJEFIL.MOD' 1535 Flagend=-1 1540 ON ERROR GOTO 1560 1545 GOTO 1580 1550 OPEN Inq$ AS FILE Ffil : GOTO 1580 1560 PREPARE Inq$ AS FILE Ffil : GOTO 1630 1570 ! 1580 WHILE FNFilfixa(Inq$,Ffil)=0 1590 INPUT 'F|ljefil: 'Inq$ 1600 IF Inq$='' THEN RETURN F 1610 WEND 1620 ! 1630 F|ljefil$=Inq$ 1640 ; 1650 ! 1660 ! -------------------------- |ppna modem 1670 ! 1680 ON ERROR GOTO 1680 1690 INPUT 'Hastighetskod: (22 f|r 300, f|r split speed) 'Inq$ 1700 IF Inq$='' THEN Inq$='40' 1710 ! 1711 IF INSTR(1,'.22.40.44.55.','.'+Inq$+'.')=0 THEN OUT 34,7 : GOTO 1680 1720 F|rs|k=1 1730 IF Inq$='22' ; 'Trying opening 300-bauds duplexmodem',F|rs|k; 1735 IF Inq$='44' ; 'Trying opening 1200-bauds duplexmodem',F|rs|k; 1740 IF Inq$='40' ; 'Trying opening split-speed duplexmodem',F|rs|k; 1750 IF Inq$='55' ; 'Trying opening 2400-bauds duplexmodem',F|rs|k; 1760 IF F|rs|k>1 THEN ; ,'Error ' ERRCODE; 1770 ON ERROR GOTO 1830 1790 OPEN 'V24:V'+Par$+Inq$+'B' AS FILE Vmod 1800 ; : ; 'O K !' 1805 Flagend=0 : Linstat=-1 1810 RETURN T ! Initieringen lyckligt genomf|rd! 1820 ! 1830 ! 1840 IF SYS(5) ; : GOTO 1920 1850 IF F|rs|k>20 GOTO 1910 1860 F|rs|k=F|rs|k+1 1870 ; CHR$(13); 1880 OUT 34,9 1890 GOTO 1730 1900 ! 1910 ; : ; 'F}r ingen kontakt med modemet !!!' 1920 OPEN 'V24:.00A' AS FILE Vmod : CLOSE Vmod 1930 GOTO 1690 1940 FNEND 1950 ! 2000 DEF FNInitvisa LOCAL A 2010 Wid=PEEK(65364) ! Radl{ngd 2060 ! ----Maskinkod bak}tscroll---- 2070 Bkscroll$=STRING$(138,0) 2080 ! BKSCROLL.ASM. 1986-11-09 2090 A=VARPTR(Bkscroll$) 2100 REM BKSCROLL.ASM. 1986-11-10 2110 POKE 0+A,58,39,0,254,2,40,41,254,10,32,7,58,84,255,254,41,56,30,219 2120 POKE 19+A,53,8,33,47,127,17,127,127,1,48,7,237,184,17,0,120,1,79,0,175 2130 POKE 39+A,211,53,205,A+82,SWAP%(A+82),8,211,53,201,221,33,A+138,SWAP%(A+138) 2140 POKE 52+A,62,24,1,40,0,221,94,254,221,86,255,61,202,A+81,SWAP%(A+81) 2150 POKE 67+A,221,110,252,221,102,253,237,176,221,43,221,43,24,229,11,98 2160 POKE 83+A,107,54,32,19,237,176,201,0,124,128,124,0,125,128,125,0,126 2170 POKE 100+A,128,126,0,127,128,127,40,124,168,124,40,125,168,125,40,126 2180 POKE 116+A,168,126,40,127,168,127,80,124,208,124,80,125,208,125,80,126 2190 POKE 132+A,208,126,80,127,208,127 2200 ! 2210 ! Textrad fr}n fil 2220 DIM L$=162 2230 ! Filnamn 2240 DIM F1$=20 2290 ! Dimensionera buffert 2300 Buflen=(SYS(4)-700)/(Wid+6) 2310 IF Buflen<48 ; 'F|r lite minne f|r textbufferten' : STOP 2320 DIM V$(Buflen-1)=Wid 2330 RETURN 0 2340 FNEND 2350 ! 2360 DEF FNV(V)=V+Buflen*((V>=Buflen)-(V<0)) 2370 ! 2380 DEF FNFilfixa(Namn$,Nummer) 2390 ON ERROR GOTO 2630 ! Hittar ingen fil 2400 OPEN Namn$ AS FILE Nummer 2410 ; 'Filen ' Namn$ ' finns!' 2420 ; 'Vill du se den?'; 2430 Z$=FNGet$ : IF Z$='n' OR Z$='N' THEN ; ' Nej tack' : GOTO 2510 2440 IF INSTR(1,Cr$+'JjYy',Z$)=0 ; ' ' Z$ CHR$(7) ' ???' : GOTO 2420 2450 ; ' Ja!' 2460 ON ERROR GOTO 2480 2470 WHILE -1 2471 INPUT LINE #Nummer,Rad$ : ; LEFT$(Rad$,LEN(Rad$)-2) 2472 IF Buf(in)>Limitu then Z=FNSysrad+FN\vervaka 2473 MID$(Sysrad$,50,10)=NUM$(POSIT(Ffil))+' ' 2474 WEND 2480 IF ERRCODE<>34 THEN ; : ; 'ERROR: ' ERRCODE;CHR$(7) 2490 ; '- DET VAR ALLT!' 2500 ; 2510 ; 'Append / Rewrite / Other file ??? / / '; 2520 Z$=FNGet$ : IF Z$=Cr$ Z$='A' 2530 ; Z$ : IF INSTR(1,'ARO',Z$)=0 OUT 34,10 : GOTO 2510 2540 ; 'Uppfattat!' : ; 2550 IF Z$='O' CLOSE Nummer : RETURN F ! Ingen fil |ppnad! 2560 IF Z$='R' THEN POSIT #Nummer,0 : RETURN T ! Allt OK, filen nollst{lld 2570 ! A p p e n d 2580 ON ERROR GOTO 2600 2590 WHILE -1 2591 INPUT LINE #Nummer,Rad$ 2592 IF Buf(In)>Limitu then Z=FNSysrad+FN\vervaka 2593 MID$(Sysrad$,50,10)=NUM$(POSIT(Ffil))+' ' 2595 WEND 2600 IF ERRCODE<>34 THEN GOTO 2480 2610 ; : RETURN T ! Filen |ppnad f|r till{gg av ytterliggare rader 2620 ! 2630 ; 'Filen ' Namn$ ' {r ny!','Prepare?'; : Z$=FNGet$ 2640 IF Z$<>'J' AND Z$<>'N' ; ' / '; : Z$=FNGet$ : GOTO 2640 2650 ; Z$ 2660 ON ERROR GOTO 2680 2670 IF Z$='J' PREPARE Namn$ AS FILE Nummer : RETURN T ! Filen |ppnad 2680 RETURN F ! Ingen fil |ppnad 2690 FNEND 2700 ! 3000 DEF FNConin LOCAL Var 3010 IF SYS(5)=0 THEN RETURN F 3020 GET Z$ 3030 WHILE Z$<='' 3031 IF NOT Flagend THEN PUT #Vmod Z$ 3032 RETURN T 3033 IF 0 WEND 3040 IF Z$=CHR$(196) THEN Z=FNBkscroll : Autoscroll=F 3050 IF Z$=CHR$(198) THEN Z=FNFwscroll : Autoscroll=F 3060 IF Z$=CHR$(193) THEN Z=FNResetvisa(Ffil,F|ljefil$) : Autoscroll=F 3065 IF Z$=CHR$(193) THEN Z=FNFwscroll 3070 IF Z$=CHR$(215) THEN Z=FNExit 3080 WHILE Z$=CHR$(192) 3090 Z=PEEK2(65362) 3100 ; CUR(0,0),,'' 3102 ; '','den h{r texten','' 3103 ; 'sh-','info-rad','' 3110 ; '','reset','' 3120 ; '','autoscroll','' 3121 ; '','upp','' 3123 ; '','ned','' 3125 ; 'sh-','n{sta Text','' 3140 ; 'sh-','E x i t','' 3150 ; 'sh-ctrl-','E N D','' 3159 ; ,,'' 3160 POKE 65362,Z,SWAP%(Z) 3170 IF 0 WEND 3180 IF Z$=CHR$(194) THEN Autoscroll=T 3190 WHILE Z$=CHR$(208) 3200 Z=PEEK2(65362) 3202 ; CUR(0,0) SPACE$(2*Wid) 3204 ; CUR(1,0) FNFlag$(Autoscroll,'Auto ') 3206 ; CUR(1,5) FNHjust$(NUM$(Writepos.)+' wr',10) 3208 ; CUR(1,15) FNHjust$(NUM$(Readpos.)+' rd',10) 3210 ; CUR(1,25) FNHjust$('V1='+NUM$(V1),10) 3212 ; CUR(1,35) FNHjust$('V2='+NUM$(V2),10) 3214 ; CUR(1,45) FNHjust$('W1='+NUM$(W1),10) 3216 ; CUR(1,55) FNHjust$('W2='+NUM$(W2),10) 3218 ; CUR(1,65) FNHjust$('FnV = S1 = '+NUM$(S1),14) 3220 POKE 65362,Z,SWAP%(Z) 3280 IF 0 WEND 3290 WHILE Z$=CHR$(214) 3295 Var=V1+2 3300 Var=FNS|k('( ',FNV(Var+1)) 3310 WHILE Var>-1 ! THEN Z=FNNewscreen(Var,2) 3320 IF LEN(V$(Var))<25 THEN GOTO 3300 3330 WHILE LEFT$(V$(Var),6)='( Text' OR LEFT$(V$(Var),6)='( Brev' 3335 Z=FNNewscreen(Var,2) 3336 IF 0 WEND : GOTO 3300 3340 IF 0 WEND : Z=FNNewscreen(W2,12) 3350 IF 0 WEND 3360 IF Z$<>CHR$(247) RETURN T 3370 OUT 56,6,57,24 3380 ; CUR(23,0) 3390 ; : ; FNUtrymme ' sektorer kvar.' 3400 ; : ; 'E N D' : ; 3410 ! 3420 END 3430 FNEND 3440 ! 4000 DEF FNMsg 4010 IF Buf(In)=0 THEN RETURN 0 4020 IF LEN(R$) THEN GOTO 4100 4030 IF Buf(In)=' ') 4130 R$=R$+B$ 4150 IF Buf(In)<10 IF LEN(R$)<=40 THEN MID$(Sysrad$,1,40)=R$ ELSE MID$(Sysrad$,1,40)=RIGHT$(R$,LEN(R$)-39) 4160 IF R$<>X11$ THEN RETURN 0 4170 RETURN FN]tg{rda 4180 IF 0 WEND 4190 WHILE B$<>Cr$ 4200 IF B$=Bs$ IF LEN(R$) R$=LEFT$(R$,LEN(R$)-1) : RETURN 0 4210 IF B$=Lf$ RETURN 0 4215 IF B$=CHR$(2) THEN Flagend=T 4220 IF B$<' ' R$=R$+'~'+CHR$(64 OR ASCII(B$)) 4230 IF B$>'' R$=R$+'`'+CHR$(64 OR (ASCII(B$)-128)) 4235 IF B$<>CHR$(7) THEN RETURN 0 4236 R$=R$+B$ 4240 IF 0 WEND : MID$(Sysrad$,1,40)=SPACE$(40) 4250 ! 4260 ; #Ffil R$ 4280 R$='' 4310 MID$(Sysrad$,50,10)=NUM$(POSIT(Ffil))+' ' 4320 WHILE Oldutr<>PEEK(64782) 4330 Oldutr=PEEK(64782) 4340 Utrymme=FNUtrymme 4350 MID$(Sysrad$,41,9)='('+NUM$(Utrymme)+') ' 4360 WEND 4370 IF Utrymme<=Buf(In)/253 THEN Skivsn}lt=-1 4380 IF POSIT(Ffil)+Buf(In)+2000>Maxlen. THEN Filsn}lt=-1 4390 RETURN 0 4400 ! 4410 ! GLOBAL R$ f|r den l{sta raden 4420 ! GLOBAL B$ f|r det l{sta tecknet 4440 ! GLOBAL X11$ f|r str{ng fr}n modemet som skall markera ny }tg. fr. pgm 4450 ! GLOBAL Vmod%, Buf%(In%) 4460 ! CONSTANT Limitr%, Cr$,Bs$,Lf$ 4470 FNEND 4480 ! 4490 DEF FN]tg{rda 4500 PUT #Vmod X12$ 4510 X11$=X21$ : X12$=X22$ 4520 RETURN 0 4530 FNEND 4540 ! 4550 ! * 5000 DEF FNSysrad LOCAL Z$=1 5010 IF Oldutbuf<>Buf(Ut) THEN Oldutbuf=Buf(Ut) : MID$(Sysrad$,70,6)=NUM$(80-Buf(Ut))+' sb ' 5020 IF Oldinbuf<>Buf(In) THEN Oldinbuf=Buf(In) : MID$(Sysrad$,60,10)=NUM$(Buf(In))+' rb ' 5030 RETURN 0 5120 FNEND 5130 DEF FN\vervaka 5140 WHILE Buf(In)=Zrec 5150 IF NOT Testrec THEN POKE -11,0 : Testrec=-1 5160 IF Flagrec IF PEEK(-11)>Timeout THEN Flagrec=0 5170 IF 0 WEND : Zrec=Buf(In) : IF Testrec THEN Testrec=0 : Flagrec=-1 5180 IF Linstat=T IF Buf(In)>Limit| THEN PUT #Vmod,Xoff$ : Linstat=F : MID$(Sysrad$,76,4)='XOFF' 5190 IF Linstat=F IF Buf(In)Maxlen. THEN Z=FNExit 5220 RETURN T 5230 FNEND 6000 DEF FNResetvisa(Filnr,Filnamn$) 6010 F1=Filnr : F1$=Filnamn$ 6020 ; CHR$(12); 6030 L$='' 6040 ! Initiera buffert 6050 W1=0 : W2=0 : V1=0 6060 Readpos.=0. 6070 V$(0)='****** H[R B\RJAR FILEN '+F1$ : ; CUR(0,0) V$(0); 6080 FOR V9=1 TO 23 6090 V$(V9)=':' : ; CUR(V9,0) V$(V9); 6100 NEXT V9 6110 RETURN T 6120 FNEND 6130 ! ----Scrolla bak}t---- 6140 DEF FNBkscroll 6150 IF V1=W1 RETURN F 6160 V1=FNV(V1-1) 6170 V2=FNV(V1+23) 6180 Z=CALL(VARPTR(Bkscroll$)) 6181 S1=FNV(W2-V1) 6190 ; CUR(0,0) V$(V1); 6200 RETURN T 6210 FNEND 6220 ! 6230 ! ----Scrolla fram}t---- 6240 DEF FNFwscroll 6250 S1=FNV(W2-V1) 6260 IF S1<12 RETURN FNFileread 6270 V1=FNV(V1+1) : ; CUR(23,0) 6280 V2=FNV(V1+23) 6290 IF V2=W1 W1=FNV(W1+1) 6300 IF S1<24 V$(V2)=':' 6310 ; CUR(23,0) V$(V2); 6311 S1=FNV(W2-V1) 6320 RETURN T 6330 FNEND 6340 ! 6350 ! ----L{s fr}n filen---- 6360 DEF FNFileread LOCAL L2 6370 IF F1=0 RETURN F 6380 WHILE POSIT(F1)-1>Readpos. 6390 W2=FNV(W2+1) 6400 IF W2=W1 W1=FNV(W1+1) 6410 ! Kolla om rest fr}n f|rra raden 6420 L2=LEN(L$)-2 : IF L2<=0 THEN Z=FNLineread : L2=LEN(L$)-2 6430 IF L2>Wid L2=Wid 6440 V$(W2)=LEFT$(L$,L2) 6450 L$=RIGHT$(L$,L2+1) 6460 ! Visa raden p} sk{rmen om det g}r 6470 S1=FNV(W2-V1) 6480 IF S1<24 ; CUR(S1,0) CHR$(32,8) V$(W2); 6490 IF 0 WEND 6500 RETURN T 6510 FNEND 6520 ! 6530 ! ----L{s en rad---- 6540 DEF FNLineread 6550 ON ERROR GOTO 6560 Writepos.=POSIT(F1) 6570 POSIT #F1,Readpos. 6580 INPUT LINE #F1,L$ 6590 Readpos.=POSIT(F1) 6600 POSIT #F1,Writepos. 6610 RETURN T 6820 ! Error 6830 L$='****** L[SFEL ERROR'+NUM$(ERRCODE)+'**' 6840 IF ERRCODE=34 L$='****** SLUT P] FILEN '+F1$+'**' ELSE RETURN F 6850 CLOSE F1 : F1=0 6860 RETURN F 6870 FNEND 6880 ! 7000 DEF FNFlag$(Boolean,Char$) 7010 IF Boolean RETURN Char$ 7020 RETURN SPACE$(LEN(Char$)) 7030 FNEND 7035 ! 7040 DEF FNGet$ LOCAL Inq$=1 7050 WHILE SYS(5)=0 7060 IF NOT Flagend Z=FNSysrad+FN\vervaka 7070 WEND 7080 GET Inq$ 7090 RETURN Inq$ 7100 FNEND 7105 ! 7110 DEF FNHjust$(Rad$,L{ngd) 7120 IF LEN(Rad$)>L{ngd THEN RETURN STRING$(L{ngd,ASCII('*')) 7130 RETURN SPACE$(L{ngd-LEN(Rad$))+Rad$ 7140 FNEND 7150 ! 7160 DEF FNInsysrad(Intext1$,Start,L{ngd) LOCAL A,B ! 7170 A=PEEK(65362) : B=PEEK(65363) 7180 POKE 65362,Start-1,24 7190 IF LEN(Intext1$)>=L{ngd THEN ; LEFT$(Intext1$,L{ngd); 7200 IF LEN(Intext1$)Readpos. 7430 W2=FNV(W2+1) 7435 IF W2=W1 THEN W1=FNV(W1+1) 7440 L2=LEN(L$)-2 7445 IF L2<=0 THEN Z=FNLineread : L2=LEN(L$)-2 7450 IF L2>Wid THEN L2=Wid 7455 V$(W2)=LEFT$(L$,L2) 7460 L$=RIGHT$(L$,L2+1) 7465 IF 0 WEND 7470 IF 0 WEND 7475 IF X<>W2 THEN WEND 7480 RETURN -1 7485 FNEND 7490 ! 7600 DEF FNNewscreen(Rad,Niv}) LOCAL P1,P2 7620 P1=FNV(Rad-Niv}) : P2=FNV(P1+1) 7630 V1=P2 : V2=FNV(P1+23) 7635 ; CHR$(12); 7640 FOR V9=0 TO 23 7650 IF P1=W2 THEN Z=FNFileread ELSE ; CUR(V9,0) V$(P2); 7670 IF P1=W2 THEN ; CUR(V9,0) ':'; ELSE P1=P2 : P2=FNV(P2+1) 7680 NEXT V9 7685 S1=FNV(W2-V1) 7690 RETURN 0 7700 FNEND