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