1 REM Ins{nd av Bo Kullmar <1789>    1985-01-06 10.48.44
2 ! +++++++++++++++++++++++++++++++++++
3 ! Program ....     PARV24.800
4 ! Utg}va  2.4      1985-01-06
5 ! av (c) Bo Kullmar
9 ! Ins{nt av Bo Kullmar, medlem 1789
10 ! [ndrar parametrar till ABCTERM
11 ! +++++++++++++++++++++++++++++++++++
12 EXTEND : INTEGER 
100 COMMON Parv24$=16,Parpr$=15,Dimbuff,Pf(32),Pf$(32)=81,Meny$(32)=14
110 COMMON Logginnr,Medlemsnr,L|senord$=5,Prom.,Duplex$=11,Enh$=4
120 COMMON Pftkn$(32)=1,Tscreen$=2048,Curpos,]ter,Dator$=8,Inifil$=16,Pfpekare
130 COMMON R|d$=1,Gul$=1,Bl}$=1,Gr|n$=1,Cyan$=1,Magneta$=1,Dubel$=1
300 DIM In$=80,Pftext$=1000
500 IF Dator$='' THEN CHAIN 'START.BAC'
510 [ndr|verf$='[ndring av |verf|ringshastigheten'
1000 Z=FN[ndrterm
1010 ; Gul$ 'Programmet SETUP laddas och exikveras!' : CHAIN Enh$+'SETUP.BAC'
2000 ! Fibeskrivning ABCTERM.INI
2010 ! Parameter f|r V24      16 Bytes $
2020 ! Parameter f|r PR:      15 Bytes $
2030 ! Buffertstolek           2 Bytes %
2035 ! Rutinnr f|r 1-32        1 Byte per rutin i ASCII
2040 ! Poster 1-32
2060 ! Antal tecken            1 Byte i ASCII
2065 ! Ev nr p} Pf             1 Byte i ASCII
2070 ! Str{ng                 80 Bytes $
2080 ! Menytext               14 Bytes $
3000 DEF FN[ndrterm
3010   ; CHR$(12) Gul$ Dubel$ '[ndring av terminalparametrar' : ; : ; : ; 
3020   Rutin=FNVal{nrterm
3030   ON Rutin GOTO 3040,3050,3060,3070,3080,3090,3100,3110,3120,3130
3040   Z=FN[ndratermtyp : GOTO 3010
3050   Z=FN[ndraparitet : GOTO 3010
3060   Z=FN[ndraxon : GOTO 3010
3070   Z=FNNul : GOTO 3010
3080   Z=FNTecken : GOTO 3010
3090   Z=FNDuplex : GOTO 3010
3100   Z=FNCrlf : GOTO 3010
3110   Z=FNValnyhast : GOTO 3010
3120   Z=FNBit7 : GOTO 3010
3130   ; Gul$ 'Skall parameterv{rdena sparas p} disk? (J/N) '; : GET Svar$ : ; Svar$
3140   Svar$=FNStora$(Svar$) : IF Svar$='J' THEN 3150 ELSE 3180
3150   OPEN Enh$+Inifil$ AS FILE 10
3160   PUT #10,Parv24$
3170   CLOSE 10 : RETURN 0
3180   ; Cyan$ 'Parameterna finns kvar tills n{sta {ndring eller tills programmet avslutas!'
3190   Z=FNDelay(2000) : RETURN 0
3200 FNEND 
4000 DEF FNDelay(Y.) LOCAL I.
4010   WHILE I.95 THEN X$=X$+CHR$(A AND 223) ELSE X$=X$+CHR$(A)
5040   NEXT J 
5050   RETURN X$
5060 FNEND 
6000 DEF FNVal{nrterm LOCAL Norm$=15
6001   Norm$='Ange (1-8,K) ' : Spec$='Ange (1-9,K) '
6010   ; Cyan$ 'Detta kan du g|ra:' : ; : ; 
6015   ! ; Parv24$
6020   ; Gul$ '1  [ndra terminaltyp '
6030   ; Gul$ '2  [ndra paritet'
6040   ; Gul$ '3  [ndra XON/XOFF'
6050   ; Gul$ '4  [ndra antalet NUL efter radframmatning'
6060   ; Gul$ '5  [ndra antal tecken per rad'
6070   ; Gul$ '6  S{tta hel eller halv duplex'
6080   ; Gul$ '7  [ndra behandling av CR och LF'
6090   ; Gul$ '8  [ndra |verf|ringshastighet'
6100   IF Prom.=7.21 THEN ; Gul$ '9  [ndra maskning av 7 biten p} inkomande data'
6110   ; Gul$ 'K  Klar' : ; : IF Prom.=7.21 THEN ; Gul$ Spec$; ELSE ; Gul$ Norm$;
6120   GET Svar$ : Svar$=FNStora$(Svar$) : ; Svar$;
6130   IF Prom.=7.21 AND INSTR(1,'123456789K',Svar$)=0 THEN ; ,R|d$ 'Fel val!' : GOTO 6120
6135   IF (Prom.=7.1 OR Prom.=7.2) AND INSTR(1,'12345678K',Svar$)=0 THEN ; ,R|d$ 'Fel val!' : GOTO 6120
6140   ; : ; : IF Svar$='K' THEN RETURN 10 ELSE RETURN VAL(Svar$)
6150 FNEND 
7000 DEF FN[ndratermtyp LOCAL Svar$=1
7005   IF Prom.=7.1 THEN 7006 ELSE 7010
7006   ; Gul$ 'Din terminalrutin kan bara emulera en terminal typ ADM3A'
7007   Z=FNDelay(2000) : RETURN 0
7010   ; CHR$(12) Gul$ Dubel$ '[ndring av terminaltyp' : ; : ; : ; 
7020   ; Cyan$ 'Dessa typer kan v{ljas:' : ; : ; 
7030   ; Gul$ 'T  Terminal typ ADM3A'
7040   ; Gul$ 'W  Wiewdata, Datavisionsterminal, g}r ej p} ABC800 M!' : ; : ; 
7050   ; Cyan$ 'V{lj T eller W ! (' MID$(Parv24$,5,1) ') '; : GET Svar$
7055   IF Svar$=CHR$(13) THEN Svar$=MID$(Parv24$,5,1)
7060   ; FNStora$(Svar$); : Svar$=FNStora$(Svar$) : IF INSTR(1,'TW',Svar$)=0 THEN ; ,R|d$ 'Fel val!' : GOTO 7050
7070   MID$(Parv24$,5,1)=Svar$
7080   RETURN 0
7090 FNEND 
8000 DEF FN[ndraparitet LOCAL Svar$=1,De$=1,Pk,Par$=1,Xon,Alt$=4,Tkn
8010   ; CHR$(12) Gul$ Dubel$ '[ndring av paritet' : ; : ; : ; 
8015   IF Prom.=7.1 THEN GOTO 8100
8020   IF INSTR(1,'FGHITUVW',MID$(Parv24$,6,1))<>0 THEN De$='J' ELSE De$='N'
8030   ; Gul$ '\nskas paritetskontroll? (' De$ ')  '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=De$
8040   ; FNStora$(Svar$); : Svar$=FNStora$(Svar$) : IF INSTR(1,'JN',Svar$)=0 THEN ; ,,R|d$ 'Fel val!' : GOTO 8030
8050   IF Svar$='J' THEN Pk=-1 ELSE Pk=0
8060   IF INSTR(1,'AFET',MID$(Parv24$,6,1))<>0 THEN De$='E'
8070   IF INSTR(1,'BGOU',MID$(Parv24$,6,1))<>0 THEN De$='O'
8080   IF INSTR(1,'CHMV',MID$(Parv24$,6,1))<>0 THEN De$='M'
8090   IF INSTR(1,'DISW',MID$(Parv24$,6,1))<>0 THEN De$='S'
8100   ; : ; : ; : ; : ; Cyan$ 'V{lj typ av paritet!' : ; 
8110   ; Gul$ 'Even (j{mn), Odd (udda), Mark eller Space'
8120   ; Gul$ 'Svara E,O,M eller S! (' De$ ') '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=De$
8130   ; FNStora$(Svar$); : Svar$=FNStora$(Svar$) : Tkn=INSTR(1,'EOMS',Svar$)
8133   IF Tkn=0 THEN ; ,R|d$ 'Fel val!' : GOTO 8120
8135   IF Prom.=7.1 THEN MID$(Parv24$,6,1)=Svar$ : RETURN 0
8140   Par$=MID$(Parv24$,6,1)
8150   IF INSTR(1,'ABCDTUVW',Par$)<>0 THEN Xon=-1
8160   IF Xon AND NOT Pk THEN Alt$='ABCD'
8170   IF NOT Xon AND Pk THEN Alt$='FGHI'
8180   IF NOT Xon AND NOT Pk THEN Alt$='EOMS'
8190   IF Xon AND Pk THEN Alt$='TUVW'
8200   MID$(Parv24$,6,1)=MID$(Alt$,Tkn,1)
8210   RETURN 0
8220 FNEND 
9000 DEF FN[ndraxon LOCAL Svar$=1,De$=4,Xon,Pk,Nor,Nor$=8,Spec$=8,Peknor,Pekspec
9010   ; CHR$(12) Gul$ Dubel$ '[ndring av XON/XOFF' : ; : ; : ; 
9015   IF Prom.=7.1 THEN ; R|d$ 'Du kan inte erh}lla XON/XOFF med denna optionsrutin!' : Z=FNDelay(2000.) : RETURN 0
9020   IF INSTR(1,'ABCDTUVW',MID$(Parv24$,6,1))<>0 THEN De$='J' ELSE De$='N'
9030   ; Gul$ '\nskas XON/OFF? (' De$ ')  '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=De$
9040   ; FNStora$(Svar$); : Svar$=FNStora$(Svar$) : IF INSTR(1,'JN',Svar$)=0 THEN ; ,R|d$ 'Fel val!' : GOTO 9030
9050   IF Svar$='J' THEN Xon=-1 ELSE Xon=0
9060   IF INSTR(1,'FGHITUVW',MID$(Parv24$,6,1))<>0 THEN Pk=-1 ELSE Pk=0
9070   IF INSTR(1,'AFET',MID$(Parv24$,6,1))<>0 THEN De$='AFET'
9080   IF INSTR(1,'BGOU',MID$(Parv24$,6,1))<>0 THEN De$='BGOU'
9090   IF INSTR(1,'CHMV',MID$(Parv24$,6,1))<>0 THEN De$='CHMV'
9100   IF INSTR(1,'DISW',MID$(Parv24$,6,1))<>0 THEN De$='DISW'
9110   IF NOT Pk AND Xon THEN MID$(Parv24$,6,1)=MID$(De$,1,1)
9120   IF Pk AND NOT Xon THEN MID$(Parv24$,6,1)=MID$(De$,2,1)
9130   IF NOT Pk AND NOT Xon THEN MID$(Parv24$,6,1)=MID$(De$,3,1)
9140   IF Pk AND Xon THEN MID$(Parv24$,6,1)=MID$(De$,4,1)
9270   IF Prom.=7.21 THEN 9280 ELSE RETURN 0
9280   De$=MID$(Parv24$,16,1)
9290   IF INSTR(1,'ABEFIJMN',De$)<>0 THEN De$='J' ELSE De$='N'
9300   ; : ; : ; Gul$ 'Noraml eller speciell XON/XOFF hantering kan v{ljas:' : ; : ; 
9310   ; Cyan$ 'Normal XON/OFF hantering inneb{r att terminalrutinen skickar XOFF n{rdet {r'
9320   ; Cyan$ '50 tecken lediga i bufferten. XON skickas n{r det finns 70 eller fler tecken'
9330   ; Cyan$ 'lediga i bufferten.' : ; 
9340   ; Cyan$ 'Speical XON/OFF hantering inneb{r att teminalrutinen skickar XON n{r man g|r'
9350   ; Cyan$ 'INPUT, INPUT LINE eller GET. XOFF s{nds n{r man har f}tt alla data. Under'
9360   ; Cyan$ 'tiden man h}ller p} att h{mta data s} fungerar XON/OFF hanteringen som s} '
9370   ; Cyan$ '"normal XON/OFF hantering".' : ; 
9380   ; Gul$ '\nskas normal XON/OFF hantering (' De$ ') '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=De$
9390   ; FNStora$(Svar$); : Svar$=FNStora$(Svar$)
9395   IF INSTR(1,'JN',Svar$)=0 THEN ; ,R|d$ 'Felaktigt val!' : GOTO 9380
9400   IF Svar$='J' THEN Nor=-1 ELSE Nor=0
9410   De$=MID$(Parv24$,16,1)
9420   Nor$='ABEFIJMN' : Spec$='CDGHKLOP'
9430   IF INSTR(1,Nor$,De$)<>0 AND Nor THEN RETURN 0
9440   IF INSTR(1,Spec$,De$)<>0 AND NOT Nor THEN RETURN 0
9450   Peknor=INSTR(1,Nor$,De$) : Pekspec=INSTR(1,Spec$,De$)
9460   IF Peknor AND NOT Nor THEN MID$(Parv24$,16,1)=MID$(Spec$,Peknor,1)
9470   IF Pekspec AND Nor THEN MID$(Parv24$,16,1)=MID$(Nor$,Pekspec,1)
9480   RETURN 0
9490 FNEND 
11000 DEF FNNul LOCAL Antal,Antal$=10,Par,Par$=2
11010   ON ERROR GOTO 11100
11020   Par=ASCII(MID$(Parv24$,7,1)) : Par$=NUM$((Par-65)*2)
11030   ; CHR$(12) Gul$ Dubel$ 'Antal "NUL" efter LF' : ; : ; : ; 
11040   ; Gul$ 'Ange antal "NUL" (ASCII-tecken nr noll) som skall s{ndas efter'
11050   ; Gul$;'radframmatning, min 0, max 50, (' Par$ ') '; : INPUT '? 'Antal$
11060   IF Antal$='' THEN Antal$=Par$
11070   Antal=VAL(Antal$) : IF Antal<0 OR Antal>50 THEN ; R|d$ 'Fel val!' : GOTO 11040
11080   Antal=Antal/2+65 : MID$(Parv24$,7,1)=CHR$(Antal)
11090   RETURN 0
11100   IF ERRCODE=210 THEN ; R|d$ 'Fel val!' : RESUME 11040
11110   ; 'Fel nr ' ERRCODE : STOP 
11120 FNEND 
11200 DEF FNTecken LOCAL Svar$=1,Def$=1
11210   Def$=MID$(Parv24$,8,1)
11220   ; CHR$(12) Gul$ Dubel$ 'Antal tecken per rad' : ; : ; : ; 
11230   ; Gul$ 'Val nr','Antal tecken per rad' : ; 
11240   ; Cyan$ '1',' 40'
11250   ; Cyan$ '2',' 72'
11260   ; Cyan$ '3',' 80'
11270   ; Cyan$ '4','120'
11280   ; Cyan$ '5','132'
11290   ; Cyan$ '6','158'
11300   ; Cyan$ '7','254' : ; 
11310   ; Gul$ 'V{lj 1-7  (' Def$ ') ! '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=Def$ : ; Svar$;
11320   IF INSTR(1,'1234567',Svar$)=0 THEN ; ,R|d$ 'Fel val!' : GOTO 11310
11330   MID$(Parv24$,8,1)=Svar$
11340   RETURN 0
11350 FNEND 
12000 DEF FNDuplex LOCAL De$=2,D$=1,Dupf$=8,Duph$=8,Pek
12010   De$=MID$(Parv24$,10,1)
12020   IF INSTR(1,'ABCDIJKL',De$)<>0 THEN Duplex$='full duplex' : D$='F'
12030   IF INSTR(1,'EFGHMNOP',De$)<>0 THEN Duplex$='halv duplex' : D$='H'
12031   Dupf$='ABCDIJKL' : Duph$='EFGHMNOP'
12035   IF D$='F' THEN Pek=INSTR(1,Dupf$,De$) ELSE Pek=INSTR(1,Duph$,De$)
12040   ; CHR$(12) Gul$ Dubel$ 'Full eller halv duplex' : ; : ; : ; 
12050   ; Cyan$ 'V{lj full eller halv duplex, ange F f|r full duplex och H f|r halv duplex'
12060   ; Cyan$ 'V{lj (' D$ ') ! '; : GET Svar$ : Svar$=FNStora$(Svar$) : IF Svar$=CHR$(13) THEN Svar$=D$
12065   ; Svar$;
12070   IF INSTR(1,'FH',Svar$)=0 THEN ; R|d$,'Fel val!' : GOTO 12060
12080   IF Svar$='F' THEN MID$(Parv24$,10,1)=MID$(Dupf$,Pek,1)
12090   IF Svar$='H' THEN MID$(Parv24$,10,1)=MID$(Duph$,Pek,1)
12100   RETURN 0
12110 FNEND 
13000 DEF FNCrlf LOCAL De$=2,D$=1,Ja$=8,Nej$=8,Pek
13010   De$=MID$(Parv24$,10,1)
13020   IF INSTR(1,'IJKLMNOP',De$)<>0 THEN D$='J'
13030   IF INSTR(1,'ABCDEFGH',De$)<>0 THEN D$='N'
13040   Ja$='IJKLNMOP' : Nej$='ABCDEFGH'
13050   IF D$='J' THEN Pek=INSTR(1,Ja$,De$) ELSE Pek=INSTR(1,Nej$,De$)
13060   ; CHR$(12) Gul$ Dubel$ 'Behandling av CR och LF' : ; : ; : ; 
13070   ; Cyan$ 'V{lj om CR mottages skall LF generas. ';
13080   ; Cyan$ 'V{lj (' D$ ') ! '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=D$
13090   Svar$=FNStora$(Svar$) : ; Svar$;
13100   IF INSTR(1,'JN',Svar$)=0 THEN ; R|d$,'Fel val!' : GOTO 13080
13110   IF Svar$='J' THEN MID$(Parv24$,10,1)=MID$(Ja$,Pek,1)
13120   IF Svar$='N' THEN MID$(Parv24$,10,1)=MID$(Nej$,Pek,1)
13130   ; ! :  ; Parv24$
13140   De$=MID$(Parv24$,10,1)
13150   IF INSTR(1,'CGKODHLP',De$)<>0 THEN D$='J'
13160   IF INSTR(1,'AEIMBFJN',De$)<>0 THEN D$='N'
13170   Ja$='CGKODHLP' : Nej$='AEIMBFJN'
13180   IF D$='J' THEN Pek=INSTR(1,Ja$,De$) ELSE Pek=INSTR(1,Nej$,De$)
13190   ; : ; : ; : ; Cyan$ 'V{lj CRLF vid radslut ';
13200   ; Cyan$ 'V{lj (' D$ ') ! '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=D$
13210   Svar$=FNStora$(Svar$) : ; Svar$;
13220   IF INSTR(1,'JN',Svar$)=0 THEN ; R|d$,'Fel val!' : GOTO 13200
13230   IF Svar$='J' THEN MID$(Parv24$,10,1)=MID$(Ja$,Pek,1)
13240   IF Svar$='N' THEN MID$(Parv24$,10,1)=MID$(Nej$,Pek,1)
13250   RETURN 0
13260 FNEND 
14000 DEF FN[ndramottag(Split)
14005   IF Prom.=7.1 OR NOT Split THEN ; CHR$(12) Gul$ Dubel$ [ndr|verf$ : ; : ; : GOTO 14050
14010   ; CHR$(12) Gul$ Dubel$ '[ndring av mottagningshastigheten' : ; : ; 
14050   ; : Z=FNHastigheter
14060   IF Prom.=7.1 OR NOT Split THEN ; Gul$ 'V{lj |verf|ringshastighet'; ELSE ; Gul$ 'V{lj mottagningshastighet';
14070   De$=MID$(Parv24$,14,1) : ; Gul$ ' (' De$ ') ! '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=De$ : ; Svar$
14080   IF INSTR(1,'012345678',Svar$)=0 THEN ; ,R|d$ 'Fel val!' : GOTO 14050
14090   MID$(Parv24$,14,1)=Svar$ : RETURN 0
14100 FNEND 
14500 DEF FN[ndras{nd
14520   ; CHR$(12) Gul$ Dubel$ '[ndring av s{ndningshastigheten' : ; : ; 
14550   ; : Z=FNHastigheter : ; Gul$ 'V{lj s{ndningshastighet';
14570   De$=MID$(Parv24$,15,1) : ; Gul$ ' (' De$ ') ! '; : GET Svar$ : IF Svar$=CHR$(13) THEN Svar$=De$ : ; Svar$
14580   IF INSTR(1,'012345678',Svar$)=0 THEN ; ,R|d$ 'Fel val!' : GOTO 14550
14590   MID$(Parv24$,15,1)=Svar$ : RETURN 0
14600 FNEND 
15000 DEF FNHastigheter
15005   ; Gul$ 'M|jliga hastigheter:' : ; 
15010   ; Cyan$ 'Val:             Hastighet (pbs)' : ; 
15020   ; Cyan$ ' 0                      75'
15030   ; Cyan$ ' 1                     110'
15040   ; Cyan$ ' 2                     300'
15050   ; Cyan$ ' 3                     600'
15060   ; Cyan$ ' 4                    1200'
15070   ; Cyan$ ' 5                    2400'
15080   ; Cyan$ ' 6                    4800'
15090   ; Cyan$ ' 7                    9600'
15100   ; Cyan$ ' 8                   19200' : ; 
15110   RETURN 0
15120 FNEND 
15500 DEF FNValnyhast
15510   IF Prom.=7.1 THEN Z=FN[ndramottag(0) : GOTO 15700
15520   ; CHR$(12) Gul$ Dubel$ '[ndring av |verf|ringshastighet' : ; : ; 
15530   ; Cyan$ '[r din dator omkoplad f|r split speed, dvs olika s{ndings och'
15540   ; Cyan$ 'mottagnigshastigheter? (J/N) '; : GET Svar$ : ; Svar$;
15550   Svar$=FNStora$(Svar$) : IF INSTR(1,'JN',Svar$)=0 THEN ; ,R|d$ 'Fel svar!' : GOTO 15530
15560   IF Svar$='N' THEN Z=FN[ndramottag(0) : GOTO 15700
15565   ; : ; : ; Gul$ 'Detta inneb{r att du m}ste {ndra B]DE mottagnings och s{ndingshastigheten'
15567   ; Gul$ 'f|r att {ndra |verf|ringshastigheten!'
15570   ; : ; : ; Gul$ 'Vill du {ndra mottagnings eller s{ndingshastigheten (M/S) ? '; : GET Svar$ : ; Svar$;
15580   Svar$=FNStora$(Svar$) : IF INSTR(1,'SM',Svar$)=0 THEN ; ,R|d$ 'Fel svar!' : GOTO 15570
15590   IF Svar$='M' THEN Z=FN[ndramottag(-1) : GOTO 15700
15600   Z=FN[ndras{nd
15700   RETURN 0
15710 FNEND 
16000 DEF FNBit7 LOCAL De$=1,D$=1,Ja$=4,Nej$=4,Pek
16010   De$=MID$(Parv24$,16,1)
16020   IF INSTR(1,'ABCD',De$)<>0 THEN D$='J'
16030   IF INSTR(1,'EFGH',De$)<>0 THEN D$='N'
16040   Ja$='ABCD' : Nej$='EFGH'
16050   IF D$='J' THEN Pek=INSTR(1,Ja$,De$) ELSE Pek=INSTR(1,Nej$,De$)
16060   ; CHR$(12) Gul$ Dubel$ 'Maskning av bit 7?' : ; : ; : ; 
16061   ; Cyan$ 'Maskning av bit 7 p} inkommande data inneb{r att bit 7 tas bort.' : ; : ; 
16070   ; Cyan$ 'Skall bit 7 vara of|r{ndrad p} inkommande data';
16080   ; Cyan$ ' (' D$ ') ? '; : GET Svar$ : Svar$=FNStora$(Svar$) : IF Svar$=CHR$(13) THEN Svar$=D$
16090   IF INSTR(1,'JN',Svar$)=0 THEN ; R|d$,'Fel val!' : GOTO 16080
16100   IF Svar$='J' THEN MID$(Parv24$,16,1)=MID$(Ja$,Pek,1)
16110   IF Svar$='N' THEN MID$(Parv24$,16,1)=MID$(Nej$,Pek,1)
16120   RETURN 0
16130 FNEND