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