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