home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Columbia Kermit
/
kermit.zip
/
luxorabc800
/
k.bas
next >
Wrap
BASIC Source File
|
2020-01-01
|
11KB
|
221 lines
2 ! **********************************************************************
3 ! Program K.BAS Utg}va 4.11 1990-02-17
4 ! av Bo Kullmar
5 ! Ins{nd av Bo Kullmar
6 ! F|r ABC800M ABC800C ABC802 ABC806
8 ! Testad p} ABC806
9 ! **********************************************************************
10 !
11 ! KMAIN.BAS:
12 !
20 ! Kermitrutinerna har Lars-G|ran G|ransson, 495, skrivit.
21 ! Vissa rutiner f|r menyhantering mm har Mikael Lid`n, 5651, skrivit.
22 ! En del maskinkodsrutiner av Kristoffer Eriksson, 5357.
23 !
24 ! Enbart med UFD-DOS och LUX-NET (med priv. att l{sa bibl. med CALL) kan
25 ! wildcards anv{ndas vid s{ndning av filer med Kermit.
26 ! Programmet kr{ver ej inbyggd terminalrutin eller TERMOPT.REL p} ABC806.
27 ! Cursoradressering och blankning av bildsk{rmen f|ljer ADM3A.
28 ! Kermitrutinerna klarar s}v{l text som bin{rfiler och med eller utan
29 ! paddning av 8:e biten. Checksumma 1 och 2 hanteras. Programmet b|r
30 ! squezas f|r att inte ta f|r mycket minne. Det {r tveksamt om det g}r
31 ! att k|ra osquezat. I squezad version heter programmet KMAIN.BAC.
32 ! [ndra inte radnumreringen f|r Kermitrutinerna, f|r d} upph|r likheten
33 ! med monitorns Kermitrutiner!
34 !
35 ! Har du optionsprom ver 10, och f}r din s{ndning stoppad av mottaget XOFF,
36 ! kan du g} tillbaks till menyn, och in i terminall{ge igen, s} ska stoppet
37 ! brytas.
38 !
39 ! KMAIN g}r delvis att k|ra osquezat om man tar bort de inledande
40 ! kommentarerna och g{rna kommentarerna i FNF|rbindelse, rad 2890-2910.
400 !
401 ! K:
402 !
500 ! Detta program anv{nds f|r att s{tta defaultparametrar f|r Kermit-
510 ! programmet KMAIN. Anv{nds {ldre prom i datorn som ej kan maska 7:e biten
520 ! b|r oldprom s{ttas till "Oldprom=-1" i rad 1010. Kan ej tv} siffror i
530 ! hastigheten anges s} kan detta {ndras ocks}, men d} fungerar ej val av
540 ! split speed i programmet!
550 !
560 ! Detta {r en l|sning som jag har valt eftersom det verkar finnas en bugg
570 ! om V24:an |ppnas med fel parameter s} kraschar systemet. Anv{nds gammalt
580 ! prom eller vill Du ha n}gon annan defaulthastighet s} {ndra parameter
590 ! nedan, men kom ih}g om Du {ndrar fel kan KMAIN g} fel!!!
600 !
610 ! OBServera att om Du {ndrar parametrar felaktigt h{r s} kommer inte Kermit
620 ! att fungera! S{tt ej Oldprom och beh}ll E som sista bokstav f|r d} g}r
630 ! det inte s} bra! Oldprom anv{nds n{r Du har ett system som inte kan maska
640 ! bort 7:e biten och det {r detta om E:et g|r. Dvs om Du s{tter Oldprom f}r
650 ! Du aldrig ha maskning av 7:e biten p} med den sista siffran i parametern.
660 !
990 INTEGER : EXTEND
1000 COMMON V24def$=16,Oldprom,Mtyp,Key99,Enh$=4,Enh,Printer$=16,Version$=4,Mqbin,Pack$=376,Csum$=40
1010 Version$='4.11'
1020 Dummy=FNInit
1030 ON ERROR GOTO 1050
1040 CHAIN Enh$+'KMAIN'
1050 CHAIN 'KMAIN'
1500 DEF FNInit
1510 ; CHR$(12)
1520 Huvud$=CUR(0,0)+FNF$(CYA)+'K, KERMIT-program f|r ABC800-serien, version '+Version$
1530 Oldprom=0 : V24defhast$='D' : V24defpar$='S' : V24defdatabit$='7'
1540 V24def$='V24:VSA70C24.40E'
1550 Cu=PEEK2(SYS(10)+64)+6
1560 Mtyp=FNMtest : Key99=FNKey99
1570 IF Mtyp=0 POKE 65266,1 ! ATTRIBUTE 1
1580 Enh$=FNRunenh$ : Enh=FNEnhcs(Enh$)
1590 Printer$='PR:VSA58C72.5'
1600 Dummy=FNV24def+FNInitpack+FNInitcsum
1610 RETURN 0
1620 FNEND
2000 DEF FNMtest LOCAL A
2010 A=INP(53) : OUT 53,4
2020 IF INP(53)=4 OUT 53,A : RETURN 0
2030 ON ERROR GOTO 2070
2040 PREPARE 'MEM:' AS FILE 99
2050 CLOSE 99
2060 RETURN 1
2070 RETURN 2
2080 FNEND
2090 DEF FNKey99 LOCAL A$=40,S$=10
2100 S$=CHR$(0,0,0,0,0,0,0)
2110 A$=CHR$(62,24,211,34,6,7,33,226,255,197,1,232,3,126,246,0)
2120 A$=A$+CHR$(32,7,11,120,177,32,246,193,201,193,35,126,18,19,43,62)
2130 A$=A$+CHR$(0,119,16,229,201)
2140 Z=CALL(VARPTR(A$),VARPTR(S$))
2150 IF (ASCII(RIGHT$(S$,3)) AND 35)=35 RETURN -1
2160 RETURN 0
2170 FNEND
2180 DEF FNRunenh$ LOCAL Drive,Adrenhl,Enh$=4,Dselect
2190 Drive=PEEK(64769) AND 31
2200 Adrenhl=PEEK2(SYS(10)+123)
2210 WHILE Adrenhl<>0
2220 Enh$=CHR$(PEEK(Adrenhl+2),PEEK(Adrenhl+3),PEEK(Adrenhl+4),58)
2230 Dselect=PEEK(Adrenhl+7)
2240 IF Drive=Dselect THEN RETURN Enh$
2250 Adrenhl=PEEK2(Adrenhl)
2260 WEND
2270 RETURN ''
2280 FNEND
2290 DEF FNEnhcs(Drive$) LOCAL Adrenhl,Enh$=4,Dselect
2300 Adrenhl=PEEK2(SYS(10)+123) : IF Drive$='' RETURN PEEK(PEEK2(24683))
2310 WHILE Adrenhl<>0
2320 Enh$=CHR$(PEEK(Adrenhl+2),PEEK(Adrenhl+3),PEEK(Adrenhl+4),58)
2330 IF Enh$='CON:' OR Enh$='NUL:' OR Enh$='PR:' OR Enh$='V24:' Enh$=''
2340 Dselect=PEEK(Adrenhl+7)
2350 IF Enh$=Drive$ RETURN Dselect
2360 Adrenhl=PEEK2(Adrenhl)
2370 WEND
2380 RETURN -1
2390 FNEND
2660 DEF FNV24def LOCAL A$=1,In$=1,P$=1,Tmph$=2
2670 Dummy=FNClr
2680 ; CUR(4,0) FNF$(CYA) 'A 300 bps' : ; FNF$(CYA) 'B 1200/75 bps'
2690 ; FNF$(CYA) 'C 75/1200 bps' : ; FNF$(CYA) 'D 1200 bps' : ; FNF$(CYA) 'E 2400 bps'
2700 ; FNF$(CYA) 'F 4800 bps' : ; FNF$(CYA) 'G 9600 bps' : ; FNF$(CYA) 'H 19200 bps'
2710 ; CUR(13,0) FNF$(YEL) 'V{lj kommunikationshastighet ( A - H ): ';
2720 A$=''
2730 WHILE A$<'A' OR A$>'H' : A$=CHR$(ASCII(FNInmata$(V24defhast$,13,62,1,2,1,CYA+CHR$(138))) AND 223) : WEND
2740 ; CUR(13,62) FNF$(CYA) A$
2750 ; : ; FNF$(CYA) 'S Space (0) M Mark (1) O Odd (Udda) E Even (J{mn)'
2760 ; CUR(17,0) FNF$(YEL) 'V{lj paritet (S, M, O, E): ';
2770 WHILE In$<>'S' AND In$<>'M' AND In$<>'O' AND In$<>'E' : In$=CHR$(ASCII(FNInmata$(V24defpar$,17,62,1,2,1,CYA+CHR$(138))) AND 223) : WEND
2775 ; CUR(17,62) FNF$(CYA) In$
2780 IF In$='S' P$='D'
2790 IF In$='M' P$='C'
2800 IF In$='O' P$='B'
2810 IF In$='E' P$='A'
2830 Tmph$=MID$('2240044455667788',2*(ASCII(A$)-65)+1,2)
2840 MID$(V24def$,6,1)=P$
2850 IF LEN(V24def$)>=15 MID$(V24def$,14,2)=Tmph$ ELSE MID$(V24def$,14,1)=LEFT$(Tmph$,1)
2860 ; CUR(19,0) FNF$(YEL) 'V{lj 8 eller 7 databitar vid Kermit fil|verf|ring ( 8, 7 ): ';
2870 WHILE In$<>'8' AND In$<>'7' : In$=FNInmata$(V24defdatabit$,19,62,1,2,1,CYA+CHR$(138)) : WEND
2880 IF In$='8' Mqbin=89 ELSE Mqbin=38
2890 RETURN 0
2900 FNEND
2940 DEF FNClr
2950 ; CUR(1,0) FNF$(GYEL) STRING$(80,127);
2960 ; CUR(21,0) FNF$(GYEL) STRING$(80,127);
2970 ; CUR(0,22) SPACE$(36)
2980 ; Huvud$
2990 ; CUR(2,0);
3000 RETURN 0
3010 FNEND
3020 DEF FNF$(F{rg$)
3030 IF Mtyp=0 RETURN F{rg$
3040 RETURN ''
3050 FNEND
3550 DEF FNTkn$(F{rg$) LOCAL B$=1,Rad,Kol
3560 Rad=PEEK(Cu+1) : Kol=PEEK(Cu)
3570 IF Mtyp=0 ; F{rg$ CHR$(PEEK(30720+Rad*80+Kol));
3580 OUT 56,14,57,SWAP%(30720+Rad*80+Kol)
3590 OUT 56,15,57,30720+Rad*80+Kol
3600 OUT 56,10,57,104
3610 ; CUR(0,61) FNF$(CYA) TIME$
3620 WHILE SYS(5)=0 : ; CUR(0,61) FNF$(CYA) TIME$ : WEND
3630 GET B$
3640 POKE Cu,Kol,Rad
3650 RETURN B$
3660 FNEND
3750 DEF FNInmata$(In$,Rad,Kol,Inpos,Pa,Max,F{rg$) LOCAL Ut$=100,L{ngd,Pos,Fval,A,Ins,M1$=1,M2$=1,M3$=10,O8
3760 Ut$=In$ : Pos=Inpos : Fval=Pa AND 15 : Z=FNKom99(9)
3770 WHILE -1
3780 ; CUR(Rad,Kol) FNF$(F{rg$) Ut$ STRING$(Max-LEN(Ut$),32-63*(Mtyp<>0)) CHR$(139) ' ';
3790 IF Pos>Max Pos=Max
3800 L{ngd=LEN(Ut$)
3810 ; CUR(Rad,Kol+Pos-1);
3820 A=ASCII(FNTkn$(F{rg$+CHR$(138))) : IF INSTR(1,CHR$(3,4,27,192,129),CHR$(A)) RETURN CHR$(27)
3830 Z=INSTR(1,CHR$(128,161,163,177,179,172,164,127),CHR$(A))
3840 IF Z A=ASCII(RIGHT$(CHR$(193,196,198,212,214,8,9,194),Z))
3850 IF A=24 Ut$='' : Pos=1
3860 IF Pa>15 OR A=13 IF INSTR(1,CHR$(192,193,196,197,198,199,212,214,240,208,13),CHR$(A)) Z=FNKom99(9) : RETURN Ut$
3870 IF A=8 IF Pos>1 Pos=Pos-1 ELSE IF Pa>15 Z=FNKom99(9) : RETURN Ut$
3880 IF A=9 IF Pos<Max Pos=Pos+1 ELSE IF Pa>15 Z=FNKom99(9) : RETURN Ut$
3890 WHILE A=194
3900 IF Pos<=L{ngd Ut$=LEFT$(Ut$+' ',Pos-1)+RIGHT$(Ut$,Pos+1)
3910 IF L{ngd<Pos AND L{ngd>0 IF Pos-L{ngd=1 Ut$=LEFT$(Ut$,L{ngd-1) : Pos=Pos-1 ELSE Pos=L{ngd+1
3920 A=0
3930 WEND
3940 IF A=132 Ins=(Ins=0) : Z=FNKom99(9-128*Ins)
3950 IF Fval=3 A=A AND 223
3960 IF A=195 AND Pos<=L{ngd Ut$=LEFT$(Ut$+' ',Pos-1)+' '+RIGHT$(Ut$,Pos) : IF LEN(Ut$)>Max Ut$=LEFT$(Ut$,Max)
3970 RESTORE 4060
3980 WHILE O8<=Fval : READ M1$,M2$,M3$ : O8=O8+1 : WEND
3990 WHILE ((A>=ASCII(M1$) AND A<=ASCII(M2$)) OR INSTR(1,M3$,CHR$(A))>0) AND Pos<=Max
4000 IF L{ngd<Pos Ut$=Ut$+SPACE$(Pos-L{ngd)
4010 Ut$=LEFT$(Ut$,Pos-1)+CHR$(A)+RIGHT$(Ut$,Pos-( NOT Ins))
4020 IF LEN(Ut$)>Max Ut$=LEFT$(Ut$,Max)
4030 Pos=Pos+1 : A=0
4040 WEND
4050 WEND
4060 DATA 0,9,' ',0,9,' .-',' ',~,' ',A,],' ',J,J,JjNn,A,],A
4070 FNEND
4080 DEF FNKom99(K)
4090 IF Key99 OUT 34,K
4100 RETURN 0
4110 FNEND
53000 !
53010 DEF FNInitpack
53020 ! KERMPACK.ASM. 87-08-22 19.49
53030 DIM Pack$=376
53040 Pack$=CHR$(213,221,225,221,110,3,221,102,4,78,6,0,9,235,121,217,87,221,94,5,217,221,110,0,221,102,1,78,9,197,217,193,123,214,94,186,56,101,120)
53050 Pack$=Pack$+CHR$(167,32,97,221,126,2,185,56,91,3,217,126,35,1,0,1,167,40,70,221,190,8,32,17,126,35,214,32,254,94,56,2,62,94,71,126,35,217,3,3,217)
53060 Pack$=Pack$+CHR$(221,190,7,32,7,14,128,126,35,217,3,217,221,190,6,32,31,126,35,217,3,111,230,127,40,15,221,190,8,40,15,221,190,7,40,10,221,190,6,40)
53070 Pack$=Pack$+CHR$(5,125,238,64,24,1,125,217,177,18,19,217,20,217,16,249,217,24,149,221,110,3,221,102,4,114,221,110,0,221,102,1,113,105,96,221,78,2)
53080 Pack$=Pack$+CHR$(175,71,237,66,201,213,221,225,221,110,0,221,102,1,78,6,0,9,235,121,217,87,221,94,2,217,221,110,3,221,102,4,78,35,70,43,197,6,0,9)
53090 Pack$=Pack$+CHR$(217,225,69,76,123,214,10,186,56,6,121,184,40,2,48,24,221,110,0,221,102,1,114,221,110,3,221,102,4,112,35,113,120,185,33,0,0,192,43)
53100 Pack$=Pack$+CHR$(201,4,217,221,126,8,167,40,55,126,43,190,35,32,40,4,120,254,5,56,31,197,221,126,8,217,119,35,241,198,32,119,229,43,221,86,5,20,20)
53110 Pack$=Pack$+CHR$(217,209,19,254,126,32,18,6,0,24,14,24,169,61,32,9,6,1,213,217,225,221,114,5,217,126,35,79,254,128,56,15,221,126,7,167,40,9,18,19)
53120 Pack$=Pack$+CHR$(217,20,217,121,230,127,79,221,126,6,167,40,40,121,230,127,254,127,40,21,254,32,56,17,221,190,6,40,16,221,190,7,40,11,221,190,8,40)
53130 Pack$=Pack$+CHR$(6,24,12,121,238,64,79,221,126,6,18,19,217,20,217,121,18,19,217,20,24,167)
53140 RETURN 0
53150 FNEND
53160 !
53170 DEF FNInitcsum
53180 ! KERMCSUM.ASM. 87-08-16 16.16
53190 DIM Csum$=40
53200 Csum$=CHR$(235,35,35,94,35,86,35,78,35,70,33,0,0,121,176,40,11,26,133,111,62,0,140,103,11,19,24,241,125,7,203,20,7,203,20,125,230,63,111,201)
53210 RETURN 0
53220 FNEND