100 REM Ins{nt av 1789 110 ! +++++++++++++++++++++++++++++++++++ 120 ! Program .... SETUP.800 130 ! Utg}va 2.2 1983-12-17 140 ! av (c) Bo Kullmar 150 ! Ins{nt av Bo Kullmar, medlem 1789 160 ! [ndrar parametrar till ABCTERM 170 ! +++++++++++++++++++++++++++++++++++ 180 EXTEND : INTEGER 190 COMMON Parv24$=16,Parpr$=15,Dimbuff,Pf(32),Pf$(32)=81,Meny$(32)=14 200 COMMON Logginnr,Medlemsnr,L|senord$=5,Prom.,Duplex$=11,Enh$=4 210 COMMON Pftkn$(32)=1,Tscreen$=2048,Curpos,]ter,Dator$=8,Inifil$=16,Pfpekare 220 COMMON R|d$=1,Gul$=1,Bl}$=1,Gr|n$=1,Cyan$=1,Magneta$=1,Dubel$=1 230 DIM In$=80,Pftext$=1000 240 IF Dator$='' THEN CHAIN 'START.BAC' 250 Fel1$=R|d$+'Du kan inte }terv{nda f|rr{n du har minskat texten som skickas p} Pf-tangenter' 260 Fel2$=R|d$+'eller {ndrat storleken p} bufferten och {ndrat programmet!' 270 WHILE -1 280 IF Zz THEN Ff=0 ELSE Ff=-1 290 Rutin=FNVal(Ff) 300 ON Rutin GOTO 310,320,330,340,350,360,370,380 310 ; Gul$ 'Programmet PARV24 laddas och exikveras!' : CHAIN Enh$+'PARV24.BAC' 320 ; Gul$ 'Programmet PARPR laddas och exikveras!' : CHAIN Enh$+'PARPR.BAC' 330 Zz=FNFunk : GOTO 410 340 Zz=FNAbcl|s : GOTO 410 350 Zz=FNHj{lp : GOTO 410 360 Zz=FNNyini : GOTO 410 370 Zz=FN[ndrabuff : GOTO 410 380 IF Prom.=7.21 AND Fel THEN ; Fel1$ : ; Fel2$ : Z=FNDelay(2000) : GOTO 410 390 ; Gul$ 'Programmet ABCTERM laddas och exikveras!' 400 ]ter=-1 : CHAIN Enh$+'ABCTERM.BAC' 410 WEND 420 ! Fibeskrivning ABCTERM.INI 430 ! Parameter f|r V24 16 Bytes $ 440 ! Parameter f|r PR: 15 Bytes $ 450 ! Buffertstolek 2 Bytes % 460 ! Rutinnr f|r 1-32 1 Byte per rutin i ASCII 470 ! Poster 1-32 480 ! Antal tecken 1 Byte i ASCII 490 ! Ev nr p} Pf 1 Byte i ASCII 500 ! Str{ng 80 Bytes $ 510 ! Menytext 14 Bytes $ 520 ! Sist i filen: 530 ! Logginnr ABC-Klubben 2 Bytes % 540 ! Medlemsnr " " 2 Bytes % 550 ! L|senord " " 5 Bytes $ 560 DEF FNVal(Ff) LOCAL Svar$=1,Vald$=8,Vald2$=15 570 IF Prom.=7.1 THEN Vald$='123456K' ELSE Vald$='1234567K' 580 IF Prom.=7.1 THEN Vald2$='V{lj (1-6,K) ! ' ELSE Vald2$='V{lj (1-7,K) ! ' 590 IF Ff THEN ; CHR$(12) Gul$ Dubel$ 'Set up mode' : ; : ; 600 ; Cyan$ 'Du kan g|ra detta:' : ; 610 ; Gul$ '1 [ndra terminalparametrar' 620 ; Gul$ '2 [ndra printerparametrar' 630 ; Gul$ '3 [ndra funktioner f|r Pf-tangenter' 640 ; Gul$ '4 [ndra speciella l|senord f|r ABC-Klubben' 650 ; Gul$ '5 Hj{lptext' 660 ; Gul$ '6 B|rja med en ny initeringsfil' 670 IF Prom.=7.2 OR Prom.=7.21 THEN ; Gul$ '7 [ndra buffertstorlek' 680 ; Gul$ 'K Klar, }terv{nd till ABCTERM' 690 ; : ; : ; : ; Cyan$ Vald2$; : GET Svar$ : Svar$=FNStora$(Svar$) : ; Svar$; 700 IF INSTR(1,Vald$,Svar$)=0 THEN ; ,,R|d$ 'Fel val!' : GOTO 690 710 IF Svar$='K' THEN Svar$='8' 720 ; : ; : ; : ; : RETURN VAL(Svar$) 730 FNEND 740 DEF FNNyini 750 ; CHR$(12) Dubel$ Gul$ 'B|rja om igen med ny interingsfil' : ; : ; : ; 760 ; Cyan$ 'N{r du }terv{nder till ABCTERM kan du b|rja om igen med en ny' 770 ; Cyan$ 'initieringsfil. Du anger d} vilken initeringsfil som du v{ljer.' 780 ; Cyan$ 'Finns inte de valda filen, s} skapas en ny.' : ; 790 ; Gul$ 'Vill du b|rja om igen med en ny interingsfil (J) '; : GET Svar$ 800 IF Svar$=CHR$(13) THEN Svar$='J' 810 Svar$=FNStora$(Svar$) : ; Svar$ 820 IF Svar$<>'J' THEN Z=FNDelay(1000.) : RETURN 0 830 ; : ; 840 ; Cyan$ 'START laddas och exikveras, f|r inl{sning av ny initieringsfil!' 850 CHAIN Enh$+'START.BAC' 860 FNEND 870 DEF FNFunk LOCAL Svar$=1,P$=81 880 ; CHR$(12) Gul$ Dubel$ '[dring av Pf-funktioner' : ; : ; 890 Z=FN[ndrafunk : Z=FNKollpf 900 IF Prom.=7.21 THEN Z=FNKolll{ngd 910 ; : ; Cyan$ 'Vill du {ndra funktion f|r {nnu en Pf-tanget (N) '; 920 GET Svar$ : IF Svar$=CHR$(13) THEN Svar$='N' 930 Svar$=FNStora$(Svar$) : ; Svar$; : IF INSTR(1,'JN',Svar$)=0 THEN ; ,R|d$ 'Fel svar!' : GOTO 910 940 IF Svar$='J' THEN 880 950 ; : ; Gul$ 'Skall Pf-parameterna sparas p} disk? (J/N) '; : GET Svar$ : ; Svar$ 960 Svar$=FNStora$(Svar$) : IF Svar$='J' THEN 970 ELSE 1150 970 OPEN Enh$+Inifil$ AS FILE 10 980 POSIT #10,33 990 FOR I=1 TO 32 1000 IF Pf(I)=0 THEN Pf(I)=1 1010 PUT #10,CHR$(Pf(I)) 1020 NEXT I 1030 FOR I=1 TO 32 1040 P$=Pftkn$(I)+Pf$(I) 1050 L{ngd=LEN(P$) : IF P$=SPACE$(81) THEN L{ngd=0 1060 PUT #10,CHR$(L{ngd) 1070 IF L{ngd=0 THEN L{ngd=81 1080 IF L{ngd<81 THEN P$=P$+SPACE$(81-L{ngd) 1090 PUT #10,P$ 1100 L{ngd=LEN(Meny$(I)) 1110 IF L{ngd<15 THEN Meny$(I)=Meny$(I)+SPACE$(14-L{ngd) 1120 PUT #10,Meny$(I) 1130 NEXT I 1140 CLOSE 10 : RETURN 0 1150 ; Cyan$ 'Parameterna finns kvar tills n{sta {ndring eller tills programmet avslutas!' 1160 Z=FNDelay(2000) : RETURN 0 1170 RETURN 0 1180 FNEND 1190 DEF FN[ndrafunk LOCAL Pf$=1,Pf,P,Pfnr,Pfm,L{ngd,Fel$=62,Meny$=80 1200 Fel$='Denna rutin kan ej anv{ndas tillsammans med terminalrutin 7.1!' 1210 Pfm$(1)='+ SHIFT' : Pfm$(2)='+ CTRL' : Pfm$(3)='+ SHIFT + CTRL' 1220 ; Gul$ 'Tryck p} den Pf-tangent som du vill {ndra funkton f|r! '; : GET Pf$ : Pf=ASCII(Pf$) 1230 IF (Pf AND 192)<>192 ; R|d$ 'Tryck p} en Pf-tanget!' : GOTO 1220 1240 Pfnr=(Pf AND 7)+1 : Pfm=(Pf AND 48)/16 : Pf=Pfm*8+Pfnr 1250 ; : ; Gr|n$ 'Du vill allts} {ndra Pf nr' Pfnr Pfm$(Pfm) 1260 ; : ; Cyan$ 'Du kan kopla ihop funktionstangenten med en av f|lande rutiner:' : ; 1270 ; Gul$ '1 Funktionstangenten utnyttjas inte' 1280 ; Gul$ '2 Registrerad text skickas med funktionstangenten' 1290 ; Gul$ '3 Menyn visas (b|r alltid kunna visa med n}gon Pf-tangent)' 1300 ; Gul$ '4 Parameterinst{llning (Obs, denna rutin m}ste anropas av n}gon Pf-tangent!)' 1310 ; Gul$ '5 Loggning till fil, dvs utmatning sker ocks} till en fil' 1320 ; Gul$ '6 Loggning till skrivare, dvs utmatining sker ocks} till skrivaren' 1330 ; Gul$ '7 S{ndning av fil enbart med hj{lp av XON/XOFF' 1340 ; Gul$ '8 Hardcopy, utskrift p} skrivare av bildsk{rmens text' 1350 ; Gul$ '9 Inloggningsrutin f|r ABC-Klubben' 1360 ; Gul$ '10 Avslutning (Denna funktion b|r alltid finnas i programmet!)' : ; : ; 1370 De$=NUM$(Pf(Pf)) 1380 ; Cyan$ 'V{lj rutin (1-10) och tryck ! (' De$ ') '; : INPUT ''Rutin$ 1390 IF Rutin$='' THEN Rutin$=De$ 1400 IF INSTR(1,'123456789',Rutin$)=0 AND Rutin$<>'10' THEN ; R|d$ 'Felaktigt Val!' : GOTO 1380 1410 P=VAL(Rutin$) 1420 IF (P=5 OR P=6 OR P=7) AND Prom.=7.1 THEN ; R|d$ Fel$ : RETURN 0 1430 IF P=8 THEN ; Gul$ 'Obs denna rutin fungerar inte f|r 40 tkns mode f|r ABC802 och ABC806' 1440 IF P=8 THEN ; Gul$ 'F|r ABC806 kan rutinen ge felaktigt resultat vid Dubel$, EL och ULN!' 1450 IF P=2 AND Prom.=7.21 THEN Z=FNVarning 1460 Pf(Pf)=P 1470 IF Pf(Pf)<>2 THEN 1550 1480 ; Cyan$ 'F|r att alla normala tecken skall kunna matas in s} har de normala' 1490 ; Cyan$ 'tangenterna f|r inmatning |vertagits av Pf-tangenter.' : ; 1500 ; Gul$ 'Pf 1 = RETURN Pf 2 = CE Pf 7 = <-- Pf 8 = -->' 1510 ; Gul$ 'I texten ev finns p} nuvarande Pf-tanget anges kontrolltecken med ^ framf|r' 1520 ; Gul$ 'respektive bokstav. I texten som matas in syns inte kontrolltecken p} skr{men!' 1530 ; Cyan$ 'Inmatningen avslutas allts} med Pf 1 !!! Editera ev gammal text!' 1540 Pftkn$(Pf)=Pf$ : Pf$(Pf)=FNEd$(Pf$(Pf),80,0) : ; 1550 ; Gul$ 'Pf 1 = RETURN Pf 2 = CE Pf 7 = <-- Pf 8 = -->' 1560 ; Gul$ 'OBS avsluta ej menytexten med !' 1570 ; Gul$ 'Ange en menytext max 14 tkn!' : Meny$(Pf)=FNEd$(Meny$(Pf),14,-1) 1580 RETURN 0 1590 FNEND 1600 DEF FNKollpf 1610 FOR I=1 TO 32 1620 IF Pf(I)=3 THEN Meny=-1 1630 IF Pf(I)=4 THEN Setup=-1 1640 IF Pf(I)=10 THEN Avslut=-1 1650 NEXT I 1660 IF NOT Meny THEN ; R|d$ 'Obs menyn {r nu ej koplad till n}gon Pf-tangent!' 1670 IF NOT Setup THEN ; R|d$ 'Obs {ndringa av parametrar kan nu ej anropas med Pf-tangent!' 1680 IF NOT Avslut THEN ; R|d$ 'Obs programmet kan ej avsultas med hj{lp av en Pf-tangent!' 1690 RETURN 0 1700 FNEND 1710 DEF FNVarning 1720 ; Gul$ 'Du har optionsprom ver 7.21, d{rf|r skickas texterna utan att datorn g}r ' 1730 ; Gul$ '|ver i lokal mode. Detta inneb{r dock att du inte f}r registrera mer {n' 1740 ; Gul$ 'totalt 1000 tecken att skickas med alla Pf-tangenterna.' 1750 RETURN 0 1760 FNEND 1770 DEF FNAbcl|s LOCAL Svar$=1 1780 ON ERROR GOTO 1950 1790 ; CHR$(12) Gul$ Dubel$ 'L|senord f|r ABC-Klubben' : ; : ; 1800 ; Gul$ 'Obs detta {r avsett endast f|r inloggning p} ABC-Klubbens monitor!' 1810 ; Gul$ 'F|r annan automatisk inlogging skall text skicka med Pf-tangenterna!' : ; 1820 ; Cyan$; : INPUT 'Ange logginnummret! 'Logginnr 1830 ; Cyan$; : INPUT 'Ange Medlemmsnummer! 'Medlemsnr 1840 ; Cyan$; : INPUT 'Ange l|senordet! 'L|senord$ 1850 IF LEN(L|senord$)<>5 THEN ; R|d$ 'Felaktigt l|senord!' : GOTO 1840 1860 ; : ; Cyan$ 'Skall l|senorden spars p} disk? (J) '; : GET Svar$ 1870 Svar$=FNStora$(Svar$) : ; Svar$; : IF Svar$='N' THEN 1940 1880 OPEN Enh$+Inifil$ AS FILE 10 1890 POSIT #10,3137 1900 PUT #10,CVT%$(Logginnr) 1910 PUT #10,CVT%$(Medlemsnr) 1920 PUT #10,L|senord$ 1930 CLOSE 10 1940 RETURN 0 1950 IF ERRCODE=210 THEN ; R|d$ 'Felaktigt nummer!' : RESUME 1960 ; R|d$ 'Fel nr' ERRCODE : STOP 1970 FNEND 1980 DEF FN[ndrabuff LOCAL Dim 1990 ; CHR$(12) Gul$ Dubel$ '[ndring av buffertstorlek' : ; : ; : ; 2000 ; Cyan$ 'OBS {ndrigen har f|rst effekt vid n{sta g}ng programmet' 2010 ; Cyan$ 'startas, utan att ha k|rts omdelbart f|re!' : ; : ; 2020 ; Gul$ 'Ange buffetstorlek, max 5000 tecken! (' NUM$(Dimbuff) ') '; 2030 Rad=PEEK(65363) : Kol=PEEK(65362) 2040 INPUT Di$ : IF Di$='' THEN ; Gul$ CUR(Rad,Kol+1) Dimbuff : Di=Dimbuff ELSE Di=VAL(Di$) 2050 IF Di<1 OR Di>5000 THEN ; R|d$ 'Fel storlek!' : GOTO 2020 2060 Dimbuff=Di 2070 OPEN Enh$+Inifil$ AS FILE 10 2080 POSIT #10,31 2090 PUT #10,CVT%$(Dimbuff) 2100 CLOSE 10 2110 RETURN 0 2120 FNEND 2130 DEF FNKolll{ngd LOCAL L{ngd 2140 FOR I=1 TO 32 2150 IF Pf(I)=2 THEN L{ngd=L{ngd+LEN(Pf$(I))+1 2160 NEXT I 2170 IF L{ngd>1000 THEN 2180 ELSE Fel=0 : RETURN 0 2180 ; : ; Magneta$ 'Du har f|r mycket text som skall skickas med Pf-tangenter! Du m}ste kan' 2190 ; Magneta$ 'minska ner p} texten eller {ndra dimensioneringen f|r variabeln Pftext$' 2200 ; Magneta$ 'i huvudprogrammet (ABCTERM). Om du |kar dimensioneringen f|r Pftext$' 2210 ; Magneta$ 'kan du i sin tur bli tvungen att minska p} buffetstorleken med hj{lp' 2220 ; Magneta$ 'av detta programmet. Nu {r den sammanlagda texten som skickas med Pf-' 2230 ; Magneta$ 'tangent' L{ngd 'tecken!' 2240 Fel=-1 : RETURN 0 2250 FNEND 2260 DEF FNHj{lp LOCAL \$=1 2270 ; CHR$(12) Gul$ Dubel$ 'HJ[LPINFORMATION' : ; 2280 ; Cyan$ 'F|r n{rmare detaljer vid {ndring av parametrar f|r terminal och printer' 2290 ; Cyan$ 'h{nvisas till bruksanvisningen av f|r optionprommet.' : ; 2300 ; Cyan$ 'Med funktionstangenterna kan man skicka text eller anv{nda vissa rutiner som' 2310 ; Cyan$ 't ex logga all text p} fil. Observera att en Pf-tanget m}ste anropa detta' 2320 ; Cyan$ 'program, annars kan man inte anropa det igen! Programmet m}ste {ven kunna' 2330 ; Cyan$ 'avslutas med en Pf-tanget, annars m}ste man anv{nda resetknappen. F|r att f}' 2340 ; Cyan$ 'upp menyn m}ste man ocks} kunna anropa den med en Pf-tangent. Programmet' 2350 ; Cyan$ 'varnar dock om vitala funktioner inte kan anropas!' : ; 2360 ; Cyan$ 'Den speceilla inloggnsrutinen {r en rutin som skickar l|senord mm med ' 2370 ; Cyan$ 'f|rdringning till ABC-Klubbens nuvrande system. Inloggning till andra datorer' 2380 ; Cyan$ 'g|rs genom "type ahed", dvs man skickar text i f|rv{g med som avskiljare.' : ; 2390 ; Cyan$ 'Bildminnet }terskrivs alltid efter anrop av rutiner som f|r{ndrar detta! Det' 2400 ; Cyan$ 'inneb{r att om man t ex {ndrar hastigheten och sedan }terv{nder, d} f}r man' 2410 ; Cyan$ 'se den GAMMLA menyn med uppgift om den GAMMLA hastigheten!' 2420 IF Dator$='ABC802' OR Dator$='ABC806' THEN Z=FNAbc802806 2430 IF Dator$='ABC806' THEN Z=FNAbc806 2440 ; Gul$ 'Tryck p} en tangent n{r du l{st f{rdigt! '; : GET \$ : ; : ; 2450 RETURN -1 2460 FNEND 2470 DEF FNAbc802806 2480 ; Cyan$ 'Anv{nd inte 40 tekens mode n{r datorn av{nds som vanlig terminal!' 2490 RETURN 0 2500 FNEND 2510 DEF FNAbc806 2520 ; Cyan$ 'P} denna ABC806 f|rsvinner styrtecknen n{r bildminnet }terskrivs.' 2530 ; Cyan$ 'Desstum anges f|rstorade tecken felaktigt {r bildminnet }terskrivs.' 2540 ; Cyan$ 'Denna effekt p} ABC806 beror p} det spciella bildminnet.' 2550 RETURN 0 2560 FNEND 2570 DEF FNDelay(Y.) LOCAL I. 2580 WHILE I.95 THEN X$=X$+CHR$(A AND 223) ELSE X$=X$+CHR$(A) 2670 NEXT J 2680 RETURN X$ 2690 FNEND 2700 DEF FNEd$(In$,Postl{ngd,S) LOCAL R,K,C,L{ngd,C$=1,In2$=80,Ut$=80 2710 ; Cyan$ FNEcho$(In$) 2720 In2$=In$ 2730 R=PEEK(65363) : K=PEEK(65362) 2740 ; CUR(R,K); : GET C$ : C=ASCII(C$) 2750 IF C=192 THEN 2880 2760 IF C<>198 AND C<>193 THEN 2820 2770 IF Ut$="" THEN 2740 2780 K=K-1 : IF K<0 THEN K=PEEK(65364)-1 : R=R-1 2790 ; CUR(R,K) " " CUR(R,K); 2800 Ut$=LEFT$(Ut$,LEN(Ut$)-1) 2810 IF C=193 THEN 2760 ELSE 2740 2820 IF C$=CHR$(199) AND In2$<>"" THEN C$=LEFT$(In2$,1) : In2$=RIGHT$(In2$,2) 2830 IF ASCII(C$)>191 THEN 2740 2840 Ut$=Ut$+C$ : ; Cyan$ C$; 2850 K=FNM(K+1,PEEK(65364)) : IF K=0 AND R<>23 THEN R=R+1 2860 IF K=0 AND R=23 THEN ; 2870 IF LEN(Ut$)0 AND Tecken<31 THEN Tecken$=CHR$(94,Tecken+64) 3010 IF Tecken=31 THEN Tecken$=CHR$(94,95) 3020 Uts$=Uts$+Tecken$ 3030 I=I+1 3040 WEND 3050 RETURN Uts$ 3060 FNEND