home *** CD-ROM | disk | FTP | other *** search
/ Columbia Kermit / kermit.zip / c / lux800.jar < prev    next >
Text File  |  2020-01-01  |  125KB  |  2,484 lines

  1. This file, LUX800.JAR, is a "join archive".  It contains the following
  2. files for ABC800 Kermit:
  3.  
  4. k.bas
  5. k.hex
  6. kermcsum.asm
  7. kermpack.asm
  8. kmain.doc
  9. kmain.hex
  10.  
  11. See kmain.doc for English-language documentation.  All other commentary is
  12. in Swedish, written in the 7-bit Swedish National Replacement Character
  13. Set (Swedish ASCII).  You can view the correct Swedish characters by using
  14. a Swedish terminal, the Swedish NRC on a DEC VT200, 300, or 400 terminal,
  15. or SET TERMINAL CHARACTER SET SWEDISH in MS-DOS Kermit 3.0 on an IBM PC or
  16. compatible.
  17.  
  18. Each file begins with a line having the filename enclosed in triple angle
  19. brackets, for example <<< k.bas >>>.  All the lines up to the next
  20. <<< filename >>> line are the contents of the file.  You can break up this 
  21. "jar" file into its consituent files using a text editor, or with a program 
  22. like the following one, which is written in the C language.  If you call this
  23. program "unjoin" and you have a "jar" file called foo.jar, then you would
  24. break up the jar file by typing "unjoin < foo.jar".
  25. ---(cut here)---------------------------
  26. /* unjoin -- Split a "jar file" up into its original component files.  */
  27. /* The jar file is read from standard input.  */
  28. /*
  29. /* This program can be used on UNIX systems, and with Microsoft C */
  30. /*
  31. /* Authors: F. da Cruz, C. Gianone, Columbia University, 1988 */
  32.  
  33. #include <stdio.h>
  34.  
  35. int files = 0;
  36. FILE *fd;
  37. char *name;
  38. #define BUFLEN 1000
  39. char buf[BUFLEN];
  40. char msg[100];
  41.  
  42. main() {
  43.     while(1) {
  44.     if (gets(buf) == NULL) doexit(0);
  45.     if (chkhdr()) {
  46.         if (files > 0) fclose(fd);
  47.         if ((fd = fopen(name,"w")) == NULL) {
  48.         sprintf(msg,"Fatal - Can't create %s",name);
  49.         perror(msg);
  50.         doexit(1);
  51.         } else files++;
  52.     } else {
  53.         if (files == 0) {
  54.         fprintf(stderr,"Fatal - not a joined file!\n");
  55.         doexit(1);
  56.         } else {
  57.         fprintf(fd,"%s\n",buf);
  58.         }
  59.     }
  60.     }
  61. }
  62.  
  63. chkhdr() {                /* Look for "<<< filename >>>" */
  64.     int i;
  65.  
  66.     if (buf[0] != '<') return(0);
  67.     if (buf[1] != '<') return(0);    
  68.     if (buf[2] != '<') return(0);
  69.     if (buf[3] != ' ') return(0);
  70.     for (i = 4; (buf[i] != '\0') && (i < BUFLEN); i++) ;
  71.     if (buf[i-1] != '>') return(0);
  72.     if (buf[i-2] != '>') return(0);
  73.     if (buf[i-3] != '>') return(0);
  74.     if (buf[i-4] != ' ') return(0);
  75.     buf[i-4] = '\0';
  76.     name = buf+4;
  77.     return;
  78. }
  79.  
  80. doexit(x) int x; {            /* Exit from program */
  81.     if (files > 0) fclose(fd);
  82.     fprintf(stderr,
  83.         "Done, unjoined %d file%c\n",files,(files == 1) ? ' ' : 's');
  84.     exit(x);
  85. }
  86. ---(cut here)---------------------------
  87.  
  88. The ".hex" files listed above are binary files encoded in hexadecimal: 2 hex
  89. characters represent one 8-bit binary byte.  Line breaks should be ignored.
  90. Here is a C program to translate a hex file back into a binary file:
  91.  
  92. ---(cut here)---------------------------
  93. /*  UNHEX.C - Program to translate a hex file from standard input
  94.  *  into an 8-bit binary file on standard output.
  95.  *  Usage: unhex < foo.hex > foo.exe
  96.  *  Christine M. Gianone, CUCCA, October 1986.
  97.  *  Modified Aug 89 to work right with Microsoft C on the PC.
  98.  */
  99.  
  100. #include <stdio.h>            /* Include this for EOF symbol */
  101. #ifdef MSDOS
  102. #include <fcntl.h>            /* For MS-DOS setmode() symbol */
  103. #endif
  104.  
  105. unsigned char a, b;            /* High and low hex nibbles */
  106. unsigned int c;                /* Character to translate them into */
  107. unsigned char decode();            /* Function to decode them  */
  108.  
  109. /* Main program reads each hex digit pair and outputs the 8-bit byte. */
  110.  
  111. main() {
  112. #ifdef MSDOS
  113.     setmode(fileno(stdout),O_BINARY); /* To avoid DOS text-mode conversions */
  114. #endif
  115.     while ((c = getchar()) != EOF) {    /* Read first hex digit */
  116.     a = c;                /* Convert to character */
  117.         if (a == '\n') {        /* Ignore line terminators */
  118.             continue;
  119.     }
  120.     if (a == '\r') {
  121.         fprintf(stderr,"Illegal Carriage Return\n");
  122.         exit(1);
  123.     }
  124.     if ((c = getchar()) == EOF) {    /* Read second hex digit */
  125.         fprintf(stderr,"File ends prematurely\n");
  126.         exit(1);
  127.     }
  128.     b = c;                /* Convert to character */
  129.     putchar( ((decode(a) * 16) & 0xF0) + (decode(b) & 0xF) );
  130.     }
  131.     exit(0);                /* Done */
  132. }
  133.  
  134. unsigned char
  135. decode(x) char x; {              /* Function to decode a hex character */
  136.     if (x >= '0' && x <= '9')         /* 0-9 is offset by hex 30 */
  137.       return (x - 0x30);
  138.     else if (x >= 'A' && x <= 'F')    /* A-F offset by hex 37 */
  139.       return(x - 0x37);
  140.     else {                            /* Otherwise, an illegal hex digit */
  141.         fprintf(stderr,"\nInput is not in legal hex format\n");
  142.         exit(1);
  143.     }
  144. }
  145. ---(cut here)---------------------------
  146. <<< k.bas >>>
  147. 2 ! **********************************************************************
  148. 3 ! Program          K.BAS            Utg}va  4.11     1990-02-17
  149. 4 ! av Bo Kullmar
  150. 5 ! Ins{nd av Bo Kullmar
  151. 6 ! F|r ABC800M ABC800C ABC802 ABC806
  152. 8 ! Testad p} ABC806
  153. 9 ! **********************************************************************
  154. 10 ! 
  155. 11 ! KMAIN.BAS:
  156. 12 ! 
  157. 20 ! Kermitrutinerna har Lars-G|ran G|ransson, 495, skrivit.
  158. 21 ! Vissa rutiner f|r menyhantering mm har Mikael Lid`n, 5651, skrivit.
  159. 22 ! En del maskinkodsrutiner av Kristoffer Eriksson, 5357.
  160. 23 ! 
  161. 24 ! Enbart med UFD-DOS och LUX-NET (med priv. att l{sa bibl. med CALL) kan
  162. 25 ! wildcards anv{ndas vid s{ndning av filer med Kermit.
  163. 26 ! Programmet kr{ver ej inbyggd terminalrutin eller TERMOPT.REL p} ABC806.
  164. 27 ! Cursoradressering och blankning av bildsk{rmen f|ljer ADM3A.
  165. 28 ! Kermitrutinerna klarar s}v{l text som bin{rfiler och med eller utan
  166. 29 ! paddning av 8:e biten. Checksumma 1 och 2 hanteras. Programmet b|r
  167. 30 ! squezas f|r att inte ta f|r mycket minne. Det {r tveksamt om det g}r
  168. 31 ! att k|ra osquezat. I squezad version heter programmet KMAIN.BAC.
  169. 32 ! [ndra inte radnumreringen f|r Kermitrutinerna, f|r d} upph|r likheten
  170. 33 ! med monitorns Kermitrutiner!
  171. 34 ! 
  172. 35 ! Har du optionsprom ver 10, och f}r din s{ndning stoppad av mottaget XOFF,
  173. 36 ! kan du g} tillbaks till menyn, och in i terminall{ge igen, s} ska stoppet
  174. 37 ! brytas.
  175. 38 ! 
  176. 39 ! KMAIN g}r delvis att k|ra osquezat om man tar bort de inledande
  177. 40 ! kommentarerna och g{rna kommentarerna i FNF|rbindelse, rad 2890-2910.
  178. 400 ! 
  179. 401 ! K:
  180. 402 ! 
  181. 500 ! Detta program anv{nds f|r att s{tta defaultparametrar f|r Kermit-
  182. 510 ! programmet KMAIN. Anv{nds {ldre prom i datorn som ej kan maska 7:e biten 
  183. 520 ! b|r oldprom s{ttas till "Oldprom=-1" i rad 1010. Kan ej tv} siffror i
  184. 530 ! hastigheten anges s} kan detta {ndras ocks}, men d} fungerar ej val av
  185. 540 ! split speed i programmet!
  186. 550 ! 
  187. 560 ! Detta {r en l|sning som jag har valt eftersom det verkar finnas en bugg
  188. 570 ! om V24:an |ppnas med fel parameter s} kraschar systemet. Anv{nds gammalt
  189. 580 ! prom eller vill Du ha n}gon annan defaulthastighet s} {ndra parameter
  190. 590 ! nedan, men kom ih}g om Du {ndrar fel kan KMAIN g} fel!!!
  191. 600 ! 
  192. 610 ! OBServera att om Du {ndrar parametrar felaktigt h{r s} kommer inte Kermit
  193. 620 ! att fungera! S{tt ej Oldprom och beh}ll E som sista bokstav f|r d} g}r
  194. 630 ! det inte s} bra! Oldprom anv{nds n{r Du har ett system som inte kan maska
  195. 640 ! bort 7:e biten och det {r detta om E:et g|r. Dvs om Du s{tter Oldprom f}r
  196. 650 ! Du aldrig ha maskning av 7:e biten p} med den sista siffran i parametern.
  197. 660 ! 
  198. 990 INTEGER : EXTEND 
  199. 1000 COMMON V24def$=16,Oldprom,Mtyp,Key99,Enh$=4,Enh,Printer$=16,Version$=4,Mqbin,Pack$=376,Csum$=40
  200. 1010 Version$='4.11'
  201. 1020 Dummy=FNInit
  202. 1030 ON ERROR GOTO 1050
  203. 1040 CHAIN Enh$+'KMAIN'
  204. 1050 CHAIN 'KMAIN'
  205. 1500 DEF FNInit
  206. 1510   ; CHR$(12)
  207. 1520   Huvud$=CUR(0,0)+FNF$(CYA)+'K, KERMIT-program f|r ABC800-serien, version '+Version$
  208. 1530   Oldprom=0 : V24defhast$='D' : V24defpar$='S' : V24defdatabit$='7'
  209. 1540   V24def$='V24:VSA70C24.40E'
  210. 1550   Cu=PEEK2(SYS(10)+64)+6
  211. 1560   Mtyp=FNMtest : Key99=FNKey99
  212. 1570   IF Mtyp=0 POKE 65266,1 ! ATTRIBUTE 1
  213. 1580   Enh$=FNRunenh$ : Enh=FNEnhcs(Enh$)
  214. 1590   Printer$='PR:VSA58C72.5'
  215. 1600   Dummy=FNV24def+FNInitpack+FNInitcsum
  216. 1610   RETURN 0
  217. 1620 FNEND 
  218. 2000 DEF FNMtest LOCAL A
  219. 2010   A=INP(53) : OUT 53,4
  220. 2020   IF INP(53)=4 OUT 53,A : RETURN 0
  221. 2030   ON ERROR GOTO 2070
  222. 2040   PREPARE 'MEM:' AS FILE 99
  223. 2050   CLOSE 99
  224. 2060   RETURN 1
  225. 2070   RETURN 2
  226. 2080 FNEND 
  227. 2090 DEF FNKey99 LOCAL A$=40,S$=10
  228. 2100   S$=CHR$(0,0,0,0,0,0,0)
  229. 2110   A$=CHR$(62,24,211,34,6,7,33,226,255,197,1,232,3,126,246,0)
  230. 2120   A$=A$+CHR$(32,7,11,120,177,32,246,193,201,193,35,126,18,19,43,62)
  231. 2130   A$=A$+CHR$(0,119,16,229,201)
  232. 2140   Z=CALL(VARPTR(A$),VARPTR(S$))
  233. 2150   IF (ASCII(RIGHT$(S$,3)) AND 35)=35 RETURN -1
  234. 2160   RETURN 0
  235. 2170 FNEND 
  236. 2180 DEF FNRunenh$ LOCAL Drive,Adrenhl,Enh$=4,Dselect
  237. 2190   Drive=PEEK(64769) AND 31
  238. 2200   Adrenhl=PEEK2(SYS(10)+123)
  239. 2210   WHILE Adrenhl<>0
  240. 2220     Enh$=CHR$(PEEK(Adrenhl+2),PEEK(Adrenhl+3),PEEK(Adrenhl+4),58)
  241. 2230     Dselect=PEEK(Adrenhl+7)
  242. 2240     IF Drive=Dselect THEN RETURN Enh$
  243. 2250     Adrenhl=PEEK2(Adrenhl)
  244. 2260   WEND 
  245. 2270   RETURN ''
  246. 2280 FNEND 
  247. 2290 DEF FNEnhcs(Drive$) LOCAL Adrenhl,Enh$=4,Dselect
  248. 2300   Adrenhl=PEEK2(SYS(10)+123) : IF Drive$='' RETURN PEEK(PEEK2(24683))
  249. 2310   WHILE Adrenhl<>0
  250. 2320     Enh$=CHR$(PEEK(Adrenhl+2),PEEK(Adrenhl+3),PEEK(Adrenhl+4),58)
  251. 2330     IF Enh$='CON:' OR Enh$='NUL:' OR Enh$='PR:' OR Enh$='V24:' Enh$=''
  252. 2340     Dselect=PEEK(Adrenhl+7)
  253. 2350     IF Enh$=Drive$ RETURN Dselect
  254. 2360     Adrenhl=PEEK2(Adrenhl)
  255. 2370   WEND 
  256. 2380   RETURN -1
  257. 2390 FNEND 
  258. 2660 DEF FNV24def LOCAL A$=1,In$=1,P$=1,Tmph$=2
  259. 2670   Dummy=FNClr
  260. 2680   ; CUR(4,0) FNF$(CYA) 'A  300 bps' : ; FNF$(CYA) 'B  1200/75 bps'
  261. 2690   ; FNF$(CYA) 'C  75/1200 bps' : ; FNF$(CYA) 'D  1200 bps' : ; FNF$(CYA) 'E  2400 bps'
  262. 2700   ; FNF$(CYA) 'F  4800 bps' : ; FNF$(CYA) 'G  9600 bps' : ; FNF$(CYA) 'H  19200 bps'
  263. 2710   ; CUR(13,0) FNF$(YEL) 'V{lj kommunikationshastighet ( A - H ): ';
  264. 2720   A$=''
  265. 2730   WHILE A$<'A' OR A$>'H' : A$=CHR$(ASCII(FNInmata$(V24defhast$,13,62,1,2,1,CYA+CHR$(138))) AND 223) : WEND 
  266. 2740   ; CUR(13,62) FNF$(CYA) A$
  267. 2750   ; : ; FNF$(CYA) 'S  Space (0)    M  Mark (1)    O  Odd (Udda)    E  Even (J{mn)'
  268. 2760   ; CUR(17,0) FNF$(YEL) 'V{lj paritet (S, M, O, E): ';
  269. 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 
  270. 2775   ; CUR(17,62) FNF$(CYA) In$
  271. 2780   IF In$='S' P$='D'
  272. 2790   IF In$='M' P$='C'
  273. 2800   IF In$='O' P$='B'
  274. 2810   IF In$='E' P$='A'
  275. 2830   Tmph$=MID$('2240044455667788',2*(ASCII(A$)-65)+1,2)
  276. 2840   MID$(V24def$,6,1)=P$
  277. 2850   IF LEN(V24def$)>=15 MID$(V24def$,14,2)=Tmph$ ELSE MID$(V24def$,14,1)=LEFT$(Tmph$,1)
  278. 2860   ; CUR(19,0) FNF$(YEL) 'V{lj 8 eller 7 databitar vid Kermit fil|verf|ring ( 8, 7 ): ';
  279. 2870   WHILE In$<>'8' AND In$<>'7' : In$=FNInmata$(V24defdatabit$,19,62,1,2,1,CYA+CHR$(138)) : WEND 
  280. 2880   IF In$='8' Mqbin=89 ELSE Mqbin=38
  281. 2890   RETURN 0
  282. 2900 FNEND 
  283. 2940 DEF FNClr
  284. 2950   ; CUR(1,0) FNF$(GYEL) STRING$(80,127);
  285. 2960   ; CUR(21,0) FNF$(GYEL) STRING$(80,127);
  286. 2970   ; CUR(0,22) SPACE$(36)
  287. 2980   ; Huvud$
  288. 2990   ; CUR(2,0);
  289. 3000   RETURN 0
  290. 3010 FNEND 
  291. 3020 DEF FNF$(F{rg$)
  292. 3030   IF Mtyp=0 RETURN F{rg$
  293. 3040   RETURN ''
  294. 3050 FNEND 
  295. 3550 DEF FNTkn$(F{rg$) LOCAL B$=1,Rad,Kol
  296. 3560   Rad=PEEK(Cu+1) : Kol=PEEK(Cu)
  297. 3570   IF Mtyp=0 ; F{rg$ CHR$(PEEK(30720+Rad*80+Kol));
  298. 3580   OUT 56,14,57,SWAP%(30720+Rad*80+Kol)
  299. 3590   OUT 56,15,57,30720+Rad*80+Kol
  300. 3600   OUT 56,10,57,104
  301. 3610   ; CUR(0,61) FNF$(CYA) TIME$
  302. 3620   WHILE SYS(5)=0 : ; CUR(0,61) FNF$(CYA) TIME$ : WEND 
  303. 3630   GET B$
  304. 3640   POKE Cu,Kol,Rad
  305. 3650   RETURN B$
  306. 3660 FNEND 
  307. 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
  308. 3760   Ut$=In$ : Pos=Inpos : Fval=Pa AND 15 : Z=FNKom99(9)
  309. 3770   WHILE -1
  310. 3780     ; CUR(Rad,Kol) FNF$(F{rg$) Ut$ STRING$(Max-LEN(Ut$),32-63*(Mtyp<>0)) CHR$(139) ' ';
  311. 3790     IF Pos>Max Pos=Max
  312. 3800     L{ngd=LEN(Ut$)
  313. 3810     ; CUR(Rad,Kol+Pos-1);
  314. 3820     A=ASCII(FNTkn$(F{rg$+CHR$(138))) : IF INSTR(1,CHR$(3,4,27,192,129),CHR$(A)) RETURN CHR$(27)
  315. 3830     Z=INSTR(1,CHR$(128,161,163,177,179,172,164,127),CHR$(A))
  316. 3840     IF Z A=ASCII(RIGHT$(CHR$(193,196,198,212,214,8,9,194),Z))
  317. 3850     IF A=24 Ut$='' : Pos=1
  318. 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$
  319. 3870     IF A=8 IF Pos>1 Pos=Pos-1 ELSE IF Pa>15 Z=FNKom99(9) : RETURN Ut$
  320. 3880     IF A=9 IF Pos<Max Pos=Pos+1 ELSE IF Pa>15 Z=FNKom99(9) : RETURN Ut$
  321. 3890     WHILE A=194
  322. 3900       IF Pos<=L{ngd Ut$=LEFT$(Ut$+' ',Pos-1)+RIGHT$(Ut$,Pos+1)
  323. 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
  324. 3920       A=0
  325. 3930     WEND 
  326. 3940     IF A=132 Ins=(Ins=0) : Z=FNKom99(9-128*Ins)
  327. 3950     IF Fval=3 A=A AND 223
  328. 3960     IF A=195 AND Pos<=L{ngd Ut$=LEFT$(Ut$+' ',Pos-1)+' '+RIGHT$(Ut$,Pos) : IF LEN(Ut$)>Max Ut$=LEFT$(Ut$,Max)
  329. 3970     RESTORE 4060
  330. 3980     WHILE O8<=Fval : READ M1$,M2$,M3$ : O8=O8+1 : WEND 
  331. 3990     WHILE ((A>=ASCII(M1$) AND A<=ASCII(M2$)) OR INSTR(1,M3$,CHR$(A))>0) AND Pos<=Max
  332. 4000       IF L{ngd<Pos Ut$=Ut$+SPACE$(Pos-L{ngd)
  333. 4010       Ut$=LEFT$(Ut$,Pos-1)+CHR$(A)+RIGHT$(Ut$,Pos-( NOT Ins))
  334. 4020       IF LEN(Ut$)>Max Ut$=LEFT$(Ut$,Max)
  335. 4030       Pos=Pos+1 : A=0
  336. 4040     WEND 
  337. 4050   WEND 
  338. 4060   DATA 0,9,' ',0,9,' .-',' ',~,' ',A,],' ',J,J,JjNn,A,],A
  339. 4070 FNEND 
  340. 4080 DEF FNKom99(K)
  341. 4090   IF Key99 OUT 34,K
  342. 4100   RETURN 0
  343. 4110 FNEND 
  344. 53000 ! 
  345. 53010 DEF FNInitpack
  346. 53020   ! KERMPACK.ASM. 87-08-22 19.49
  347. 53030   DIM Pack$=376
  348. 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)
  349. 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)
  350. 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)
  351. 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)
  352. 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)
  353. 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)
  354. 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)
  355. 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)
  356. 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)
  357. 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)
  358. 53140   RETURN 0
  359. 53150 FNEND 
  360. 53160 ! 
  361. 53170 DEF FNInitcsum
  362. 53180   ! KERMCSUM.ASM. 87-08-16 16.16
  363. 53190   DIM Csum$=40
  364. 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)
  365. 53210   RETURN 0
  366. 53220 FNEND 
  367. <<< k.hex >>>
  368. 8F0061000C208000000012002202E127D40A3219874C020090472A2A2A2A2A2A2A2A2A2A
  369. 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A
  370. 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A87430300903E50726F677261
  371. 6D202020202020202020204B2E4241532020202020202020202020205574677D76612020
  372. 342E31312020202020313939302D30322D313787130400900E617620426F204B756C6C6D
  373. 6172871A05009015496E737B6E6420617620426F204B756C6C6D6172872706009022467C
  374. 72204142433830304D204142433830304320414243383032204142433830368716080090
  375. 1154657374616420707D20414243383036874C090090472A2A2A2A2A2A2A2A2A2A2A2A2A
  376. 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A
  377. 2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A2A87060A00900187100B00900B4B4D41
  378. 494E2E4241533A87060C009001873D140090384B65726D6974727574696E65726E612068
  379. 6172204C6172732D477C72616E20477C72616E73736F6E2C203439352C20736B72697669
  380. 742E874915009044566973736120727574696E657220667C72206D656E7968616E746572
  381. 696E67206D6D20686172204D696B61656C204C6964606E2C20353635312C20736B726976
  382. 69742E873C16009037456E2064656C206D61736B696E6B6F6473727574696E6572206176
  383. 204B726973746F66666572204572696B73736F6E2C20353335372E870617009001874C18
  384. 009047456E62617274206D6564205546442D444F53206F6368204C55582D4E455420286D
  385. 656420707269762E20617474206C7B7361206269626C2E206D65642043414C4C29206B61
  386. 6E873A1900903577696C64636172647320616E767B6E6461732076696420737B6E646E69
  387. 6E672061762066696C6572206D6564204B65726D69742E874D1A00904850726F6772616D
  388. 6D6574206B727B76657220656A20696E6279676764207465726D696E616C727574696E20
  389. 656C6C6572205445524D4F50542E52454C20707D204142433830362E87421B00903D4375
  390. 72736F726164726573736572696E67206F636820626C616E6B6E696E672061762062696C
  391. 64736B7B726D656E20667C6C6A65722041444D33412E87491C0090444B65726D69747275
  392. 74696E65726E61206B6C6172617220737D767B6C207465787420736F6D2062696E7B7266
  393. 696C6572206F6368206D656420656C6C6572207574616E87481D009043706164646E696E
  394. 6720617620383A6520626974656E2E20436865636B73756D6D612031206F636820322068
  395. 616E74657261732E2050726F6772616D6D657420627C72874A1E009045737175657A6173
  396. 20667C722061747420696E746520746120667C72206D79636B6574206D696E6E652E2044
  397. 6574207B72207476656B73616D74206F6D2064657420677D7287461F009041617474206B
  398. 7C7261206F737175657A61742E204920737175657A61642076657273696F6E2068657465
  399. 722070726F6772616D6D6574204B4D41494E2E4241432E874B200090465B6E6472612069
  400. 6E7465207261646E756D726572696E67656E20667C72204B65726D6974727574696E6572
  401. 6E612C20667C7220647D20757070687C72206C696B686574656E87222100901D6D656420
  402. 6D6F6E69746F726E73204B65726D6974727574696E657221870622009001874F2300904A
  403. 486172206475206F7074696F6E7370726F6D207665722031302C206F636820667D722064
  404. 696E20737B6E646E696E672073746F70706164206176206D6F74746167657420584F4646
  405. 2C874F2400904A6B616E20647520677D2074696C6C62616B732074696C6C206D656E796E
  406. 2C206F636820696E2069207465726D696E616C6C7B6765206967656E2C20737D20736B61
  407. 2073746F70706574870D250090086272797461732E8706260090018745270090404B4D41
  408. 494E20677D722064656C76697320617474206B7C7261206F737175657A6174206F6D206D
  409. 616E2074617220626F727420646520696E6C6564616E6465874B280090466B6F6D6D656E
  410. 74617265726E61206F636820677B726E61206B6F6D6D656E74617265726E61206920464E
  411. 467C7262696E64656C73652C2072616420323839302D323931302E870690019001870891
  412. 0190034B3A8706920190018747F401904244657474612070726F6772616D20616E767B6E
  413. 647320667C722061747420737B7474612064656661756C74706172616D65747261722066
  414. 7C72204B65726D69742D874FFE01904A70726F6772616D6D6574204B4D41494E2E20416E
  415. 767B6E6473207B6C6472652070726F6D2069206461746F726E20736F6D20656A206B616E
  416. 206D61736B6120373A6520626974656E20874B08029046627C72206F6C6470726F6D2073
  417. 7B747461732074696C6C20224F6C6470726F6D3D2D312220692072616420313031302E20
  418. 4B616E20656A2074767D2073696666726F722069874C1202904768617374696768657465
  419. 6E20616E67657320737D206B616E206465747461207B6E64726173206F636B737D2C206D
  420. 656E20647D2066756E676572617220656A2076616C206176871F1C02901A73706C697420
  421. 737065656420692070726F6772616D6D657421870626029001874D300290484465747461
  422. 207B7220656E206C7C736E696E6720736F6D206A6167206861722076616C742065667465
  423. 72736F6D20646574207665726B61722066696E6E617320656E2062756767874E3A029049
  424. 6F6D205632343A616E207C70706E6173206D65642066656C20706172616D657465722073
  425. 7D206B726173636861722073797374656D65742E20416E767B6E64732067616D6D616C74
  426. 874B4402904670726F6D20656C6C65722076696C6C204475206861206E7D676F6E20616E
  427. 6E616E2064656661756C7468617374696768657420737D207B6E64726120706172616D65
  428. 746572873E4E0290396E6564616E2C206D656E206B6F6D2069687D67206F6D204475207B
  429. 6E647261722066656C206B616E204B4D41494E20677D2066656C21212187065802900187
  430. 4F6202904A4F425365727665726120617474206F6D204475207B6E647261722070617261
  431. 6D65747261722066656C616B7469677420687B7220737D206B6F6D6D657220696E746520
  432. 4B65726D6974874C6C0290476174742066756E676572612120537B747420656A204F6C64
  433. 70726F6D206F6368206265687D6C6C204520736F6D20736973746120626F6B7374617620
  434. 667C7220647D20677D72874F7602904A64657420696E746520737D2062726121204F6C64
  435. 70726F6D20616E767B6E6473206E7B7220447520686172206574742073797374656D2073
  436. 6F6D20696E7465206B616E206D61736B61874F8002904A626F727420373A652062697465
  437. 6E206F636820646574207B72206465747461206F6D20453A657420677C722E2044767320
  438. 6F6D20447520737B74746572204F6C6470726F6D20667D72874F8A02904A447520616C64
  439. 726967206861206D61736B6E696E6720617620373A6520626974656E20707D206D656420
  440. 64656E207369737461207369666672616E206920706172616D657465726E2E8706940290
  441. 018709DE03860F8886118752E8038601EDCEC604801600CEC51E800200CEC524800200CE
  442. C52A800200E1CEC630800A00CEC53E800200EDCEC644801600E1CEC65E800A00CEC56C80
  443. 0200C77801CEC672807E01C72800CEC6F4812E00870DF203CC04342E3131B65E80870CFC
  444. 03CF00003600B504008707060485130087121004860BC23080CC054B4D41494E9DB9870E
  445. 1A04860BCC054B4D41494EB9870CDC058C300121222701008709E60594E9D10CB98749F0
  446. 05DDDDD21FD086AC00CF01FDB7089DCC2D4B2C204B45524D49542D70726F6772616D2066
  447. 7C72204142433830302D73657269656E2C2076657273696F6E209DC25E809DB60A00871D
  448. FA05DDB51E8088CC0144B6140088CC0153B61E0088CC0137B6280087190406CC10563234
  449. 3A56534137304332342E343045B6048087120E06E7D119C740009CD12DE39CB532008715
  450. 1806CF00008E00B5248088CF0000FE00B52A808722220695C12480DD8ABE0A8602C7F2FE
  451. B82CDEB8900C4154545249425554452031871A2C06CF0000B501B6308088C23080AC00CF
  452. 01FD4F02B53E8087163606CC0D50523A56534135384337322E35B6448087184006CF0000
  453. 0E03CF0000C50D9CCF000056129CB5040087074A06A0DDB8870554068D8710D0078C7800
  454. A9236F0000B60179018716DA07C73500D116B500FF888603C73500B82CE1B8871DE40795
  455. C73500D116E18ABE108603C73500B82CC100FFB888A0DDB88707EE078524008712F80786
  456. 05CC044D454D3AB9BBC76300B8870A02088606C76300B887070C08A0DEB887071608A0DF
  457. B8870520088D87162A088CE400A120DB0000B6027A0128007A130A0087113408DDDDDDDD
  458. DDDDDDD4D70CB602FF87303E08C73E00C71800C7D300C72200E3E4C72100C7E200C7FF00
  459. C7C500DEC7E800E0C77E00C7F600DDD4E00CB600FF873A4808C200FFC72000E4E8C77800
  460. C7B100C72000C7F600C7C100C7C900C7C100C72300C77E00C71200C71300C72B00C73E00
  461. D4E00C9DB600FF87195208C200FFDDC77700EDC7E500C7C900D4D50C9DB600FF87135C08
  462. C600FFD12BC602FFD12BD217B53800871C660895C202FFE0D20ED10BC7230088A7C72300
  463. 8ABE05A0DEA9B887077008A0DDB887057A088D871884088CA700DA239E0000B604D12401
  464. 25D2200400412587108E08C701FDD115C71F0088B500FF87109808E7D119C77B009CD12D
  465. B502FF870DA2089A5B00C102FFDD8DB88722AC08C102FFDF9CD115C102FFE09CD115C102
  466. FFE19CD115C73A00D4D40CB604FF870EB608C102FFE49CD115B506FF8713C00895C100FF
  467. C106FF8ABD06A0C204FFB9870CCA08C102FFD12DB502FF8707D4089BA2FF8708DE08A0CC
  468. 00B98705E8088D8718F2088CE0001124D70001D224B6030125D220040041258723FC08E7
  469. D119C77B009CD12DB502FF8895C200FFCC008BBE0AA0C76B60D12DD115B8870D06099A91
  470. 00C102FFDD8DB887221009C102FFDF9CD115C102FFE09CD115C102FFE19CD115C73A00D4
  471. D40CB604FF87361A0995C204FFCC04434F4E3A8BC204FFCC044E554C3A8B86C204FFCC03
  472. 50523A8B86C204FFCC045632343A8B86BE06CC00B604FF870E2409C102FFE49CD115B506
  473. FF87132E0995C204FFC200FF8BBE06A0C106FFB8870C3809C102FFD12DB502FF87074209
  474. 9B6CFF87084C09A0DEA9B8870556098D871E640A8C3C040120330400B6047A0101008225
  475. 01007A1001009A250200870C6E0ACF00002204B50400873E780A94E1DDD21FB9D086AC00
  476. CF01FD8804B9CC0A41202033303020627073B98894D086AC00CF01FD6F04B9CC0E422020
  477. 313230302F373520627073B98754820A94D086AC00CF01FD4F04B9CC0E43202037352F31
  478. 32303020627073B98894D086AC00CF01FD3204B9CC0B4420203132303020627073B98894
  479. D086AC00CF01FD1804B9CC0B4520203234303020627073B987528C0A94D086AC00CF01FD
  480. FB03B9CC0B4620203438303020627073B98894D086AC00CF01FDE103B9CC0B4720203936
  481. 303020627073B98894D086AC00CF01FDC703B9CC0C482020313932303020627073B98740
  482. 960A94EADDD21FB9D083AC00CF01FDA403B9CC28567B6C6A206B6F6D6D756E696B617469
  483. 6F6E7368617374696768657420282041202D204820293A20B93B8709A00ACC00B600FF87
  484. 4CAA0A9A4400C200FFCC014191C200FFCC01489786B888C21400AC00EAABFDC73E00ABFB
  485. DEABFDDFABFDDEABFDD086C78A00D10C9DACF6CF07FD7D04D10BC7DF0088D10CB600FF88
  486. 9BB9FF871AB40A94EAC73E00D21FB9D086AC00CF01FD0D03B9C200FFB98752BE0A948894
  487. D086AC00CF01FDF802B9CC3E532020537061636520283029202020204D20204D61726B20
  488. 283129202020204F20204F646420285564646129202020204520204576656E20284A7B6D
  489. 6E29B98735C80A94C71100DDD21FB9D083AC00CF01FDA102B9CC1B567B6C6A2070617269
  490. 7465742028532C204D2C204F2C2045293A20B93B875ED20A9A5600C202FFCC01538EC202
  491. FFCC014D8E88C202FFCC014F8E88C202FFCC01458E88B888C21E00AC00C71100ABFBC73E
  492. 00ABFBDEABFDDFABFDDEABFDD086C78A00D10C9DACF6CF07FD7E03D10BC7DF0088D10CB6
  493. 02FF889BA7FF871CD70A94C71100C73E00D21FB9D086AC00CF01FD0C02B9C202FFB98714
  494. DC0A95C202FFCC01538BBE07CC0144B604FF8714E60A95C202FFCC014D8BBE07CC0143B6
  495. 04FF8714F00A95C202FFCC014F8BBE07CC0142B604FF8714FA0A95C202FFCC01458BBE07
  496. CC0141B604FF872A0E0BCC1032323430303434343535363637373838DFC200FFD10BC741
  497. 009FA7A1DE9CDFD30FB606FF8712180BA2C20480E3DED328B93DC204FFB9872F220B95C2
  498. 0480D110EC93BE11A2C20480EBDFD328B93DC206FFB98A12A2C20480EBDED328B93DC206
  499. FFDED20DB987562C0B94C71300DDD21FB9D083AC00CF01FD3701B9CC3C567B6C6A203820
  500. 656C6C657220372064617461626974617220766964204B65726D69742066696C7C766572
  501. 667C72696E67202820382C203720293A20B93B8746360B9A3E00C202FFCC01388EC202FF
  502. CC01378E88B888C22800AC00C71300ABFBC73E00ABFBDEABFDDFABFDDEABFDD086C78A00
  503. D10C9DACF6CF07FD0302B602FF889BBFFF871C400B95C202FFCC01388BBE09C75900B56C
  504. 808A07C72600B56C8087074A0BA0DDB88705540B8D870C7C0B8C7B00C125720000871E86
  505. 0B94DEDDD21FB9D093AC00CF01FD6900B9C75000C77F00D213B93B8720900B94C71500DD
  506. D21FB9D093AC00CF01FD4900B9C75000C77F00D213B93B87129A0B94DDC71600D21FB9C7
  507. 2400D112B98709A40B94C20A00B9870BAE0B94DFDDD21FB93B8707B80BA0DDB88705C20B
  508. 8D870ECC0B8C2B007A062200011A268711D60B95C12480DD8ABE06A0C200FFB98708E00B
  509. A0CC00B98705EA0B8D8718DE0D8C1F0142261601011A26B6037A020100612681268717E8
  510. 0DC13200DE9CD115B504FF88C13200D115B506FF8726F20D95C12480DD8ABE1B94C200FF
  511. B9C70078C104FFC75000A19CC106FF9CD115D10CB93B8725FC0D8603C73800B82CEBB82C
  512. C73900B82CC70078C104FFC75000A19CC106FF9CD114B88723060E8603C73800B82CECB8
  513. 2CC73900B82CC70078C104FFC75000A19CC106FF9CB88717100E8603C73800B82CE7B82C
  514. C73900B82CC76800B887191A0E94DDC73D00D21FB9D086AC00CF01FD17FFB9D029B98727
  515. 240E9A1F00E2D119DD8AB88894DDC73D00D21FB9D086AC00CF01FDF4FEB9D029B9889BDE
  516. FF870A2E0E860AC602FFBC8714380E8602C13200B82CC106FFB82CC104FFB88709420EA0
  517. C202FFB987054C0E8D8738A60E8C8104E225780407822561268126A126D126E9261A26B6
  518. 0A0A276400212751277127790199270A0D0100120D01001A0D0A00410F8726B00EC200FF
  519. B60EFF88C106FFB512FF88C108FFEC88B514FF88E6AB00CF01FD3304B53800870ABA0E9A
  520. DD03DEA9B88742C40E94C102FFC104FFD21FB9C20CFFAC00CF01FD40FEB9C20EFFB9C10A
  521. FFC20EFFD1109FC72000C73F00C12480DD8DA7A19FD213B9C78B00D10CB9CC0120B93B87
  522. 14CE0E95C112FFC10AFF96BE07C10AFFB512FF870CD80EC20EFFD110B510FF8715E20E94
  523. C102FFC104FFC112FF9CDE9FD21FB93B873AEC0EC20CFFC78A00D10C9DAC00CF01FDF9FD
  524. D10BB516FF8895DEE0E1C71B00C7C000C78100D4D50CC116FFD10CD311BE08A0C71B00D1
  525. 0CB9872AF60EDEC78000C7A100C7A300C7B100C7B300C7AC00C7A400C77F00D4D80CC116
  526. FFD10CD311B53800872B000F95C13800BE22C7C100C7C400C7C600C7D400C7D600E5E6C7
  527. C200D4D80CC13800D20ED10BB516FF87180A0F95C116FFC718008ABE0BCC00B60EFF88DE
  528. B512FF8750140F95C108FFEC96C116FFEA8A86BE3F95DEC7C000C7C100C7C400C7C500C7
  529. C600C7C700C7D400C7D600C7F000C7D000EAD4DB0CC116FFD10CD311BE12E6AB00CF01FD
  530. C102B5380088A0C20EFFB987371E0F95C116FFE58ABE2C95C112FFDE96BE0BC112FFDE9F
  531. B512FF8A1A95C108FFEC96BE12E6AB00CF01FD8A02B5380088A0C20EFFB98739280F95C1
  532. 16FFE68ABE2E95C112FFC10AFF90BE0BC112FFDE9CB512FF8A1A95C108FFEC96BE12E6AB
  533. 00CF01FD5102B5380088A0C20EFFB9870F320F9A8000C116FFC7C2008AB8872A3C0F95C1
  534. 12FFC110FF99BE1DC20EFFCC01209DC112FFDE9FD20DC20EFFC112FFDE9CD20E9DB60EFF
  535. 8740460F95C110FFC112FF90C110FFDD9688BE2D95C112FFC110FF9FDE8ABE19C20EFFC1
  536. 10FFDE9FD20DB60EFF88C112FFDE9FB512FF8A09C110FFDE9CB512FF8708500FDDB516FF
  537. 87075A0F9B7DFF872B640F95C116FFC784008ABE1EC118FFDD8AA7B518FF88E6C78000C1
  538. 18FFA19FAB00CF01FD9801B5380087166E0F95C114FFE08ABE0BC116FFC7DF0088B516FF
  539. 874C780F95C116FFC7C3008AC112FFC110FF9988BE37C20EFFCC01209DC112FFDE9FD20D
  540. CC01209DC20EFFC112FFD20E9DB60EFF8895C20EFFD110C10AFF96BE0CC20EFFC10AFFD2
  541. 0DB60EFF8707820F83E20087308C0F9A2800C120FFC114FF99B8889CB706C61AFFBCB706
  542. C61CFFBCB706C61EFFBC88C120FFDE9CB520FF889BD5FF8733960F9AA200C116FFC21AFF
  543. D10B93C116FFC21CFFD10B9988A7DEC21EFFC116FFD10CD311DD9686A7C112FFC10AFF99
  544. 88B8871EA00F95C110FFC112FF90BE11C20EFFC112FFC110FF9FD1129DB60EFF8726AA0F
  545. C20EFFC112FFDE9FD20DC116FFD10C9DC20EFFC112FFC118FFAFA79FD20E9DB60EFF871B
  546. B40F95C20EFFD110C10AFF96BE0CC20EFFC10AFFD20DB60EFF8711BE0FC112FFDE9CB512
  547. FF88DDB516FF8707C80F9B5BFF8707D20F9B20FC873ADC0F8E000033302C392C2720272C
  548. 302C392C27202E2D272C2720272C7E2C2720272C412C5D2C2720272C4A2C4A2C4A6A4E6E
  549. 2C412C5D2C418705E60F8D870EF00F8C3400B927250001790B8715FA0F95C12A80BE0C86
  550. 03C72200B82CC100FFB887070410A0DDB887050E108D870608CF9001870C12CF8C960441
  551. 2487040087221CCF901D4B45524D5041434B2E41534D2E2038372D30382D32322031392E
  552. 3439870D26CF8600C77801CDC67280876D30CFC7D500C7DD00C7E100C7DD00C76E00E0C7
  553. DD00C76600E1C74E00E3DDE6C7EB00C77900C7D900C75700C7DD00C75E00E2C7D900C7DD
  554. 00C76E00DDC7DD00C76600DEC74E00E6C7C500C7D900C7C100C77B00C7D600C75E00C7BA
  555. 00C73800C76500C77800D4F70CB6728087773ACFC27280C7A700C72000C76100C7DD00C7
  556. 7E00DFC7B900C73800C75B00E0C7D900C77E00C72300DEDDDEC7A700C72800C74600C7DD
  557. 00C7BE00E5C72000C71100C77E00C72300C7D600C72000C7FE00C75E00C73800DFC73E00
  558. C75E00C74700C77E00C72300C7D900E0E0C7D900D4F90C9DB67280876E44CFC27280C7DD
  559. 00C7BE00E4C72000E4EBC78000C77E00C72300C7D900E0C7D900C7DD00C7BE00E3C72000
  560. C71F00C77E00C72300C7D900E0C76F00C7E600C77F00C72800ECC7DD00C7BE00E5C72800
  561. ECC7DD00C7BE00E4C72800E7C7DD00C7BE00E3C72800D4F80C9DB6728087704ECFC27280
  562. E2C77D00C7EE00C74000C71800DEC77D00C7D900C7B100C71200C71300C7D900C71400C7
  563. D900EDC7F900C7D900C71800C79500C7DD00C76E00E0C7DD00C76600E1C77200C7DD00C7
  564. 6E00DDC7DD00C76600DEC77100C76900C76000C7DD00C74E00DFD4F60C9DB67280877058
  565. CFC27280C7AF00C74700C7ED00C74200C7C900C7D500C7DD00C7E100C7DD00C76E00DDC7
  566. DD00C76600DEC74E00E3DDE6C7EB00C77900C7D900C75700C7DD00C75E00DFC7D900C7DD
  567. 00C76E00E0C7DD00C76600E1C74E00C72300C74600C72B00C7C500E3DDE6D4F80C9DB672
  568. 80877162CFC27280C7D900C7E100C74500C74C00C77B00C7D600E7C7BA00C73800E3C779
  569. 00C7B800C72800DFC73000C71800C7DD00C76E00DDC7DD00C76600DEC77200C7DD00C76E
  570. 00E0C7DD00C76600E1C77000C72300C77100C77800C7B900C72100DDDDC7C000C72B00D4
  571. F70C9DB6728087776CCFC27280C7C900E1C7D900C7DD00C77E00E5C7A700C72800C73700
  572. C77E00C72B00C7BE00C72300C72000C72800E1C77800C7FE00E2C73800C71F00C7C500C7
  573. DD00C77E00E5C7D900C77700C72300C7F100C7C600C72000C77700C7E500C72B00C7DD00
  574. C75600E2C71400C71400D4F70C9DB67280877276CFC27280C7D900C7D100C71300C7FE00
  575. C77E00C72000C71200E3DDC71800EBC71800C7A900C73D00C72000E6E3DEC7D500C7D900
  576. C7E100C7DD00C77200E2C7D900C77E00C72300C74F00C7FE00C78000C73800ECC7DD00C7
  577. 7E00E4C7A700C72800E6C71200C71300D4F80C9DB67280877480CFC27280C7D900C71400
  578. C7D900C77900C7E600C77F00C74F00C7DD00C77E00E3C7A700C72800C72800C77900C7E6
  579. 00C77F00C7FE00C77F00C72800C71500C7FE00C72000C73800C71100C7DD00C7BE00E3C7
  580. 2800EDC7DD00C7BE00E4C72800E8C7DD00C7BE00E5C72800D4F60C9DB67280874A8ACFC2
  581. 7280E3C71800E9C77900C7EE00C74000C74F00C7DD00C77E00E3C71200C71300C7D900C7
  582. 1400C7D900C77900C71200C71300C7D900C71400C71800C7A700D4E60C9DB67280870794
  583. CFA0DDB887059ECF8D8706A8CF9001870CB2CF8C00008924B100008722BCCF901D4B4552
  584. 4D4353554D2E41534D2E2038372D30382D31362031362E3136870DC6CF8600C72800CDC6
  585. F4818774D0CFC7EB00C72300C72300C75E00C72300C75600C72300C74E00C72300C74600
  586. C72100DDDDC77900C7B000C72800E8C71A00C78500C76F00C73E00DDC78C00C76700E8C7
  587. 1300C71800C7F100C77D00E4C7CB00C71400E4C7CB00C71400C77D00C7E600C73F00C76F
  588. 00C7C900D4F80CB6F4818707DACFA0DDB88705E4CF8D87010000FD00FE563234646566FE
  589. 4F6C6470726F6DFE4D747970FE4B65793939FE456E68FE5072696E746572FE5665727369
  590. 6F6EFE4D7162696EFE5061636BFE4373756DFE44756D6D79FE496E6974FE4875767564FE
  591. 56323464656668617374FE563234646566706172FE56323464656664617461626974FE43
  592. 75FE4D74657374FE52756E656E68FE456E686373FE496E69747061636BFE496E69746373
  593. 756DFE4472697665FE416472656E686CFE4473656C656374FE496EFE546D7068FE436C72
  594. FE496E6D617461FE467B7267FE546B6EFE526164FE4B6F6CFE496E706F73FE5061FE4D61
  595. 78FE5574FE4C7B6E6764FE506F73FE4676616CFE496E73FE4B6F6D3939FFFEFE04800220
  596. 1E803920248079202A80A1203080D2203E80D1204480F2205E8032216C8071217280A221
  597. F481CA210400F1210A004A2214007A221E00D22228002223320091233800791A75767564
  598. FE56323464656668617374FE563234646566706172FE56323464656664617461626974FE
  599. 4375FE4D74657374FE52756E656E68FE456E686373FE496E69747061636BFE496E
  600. <<< kermcsum.asm >>>
  601. ; Fil: KERMCSUM.ASM
  602. ; Av:  Kristoffer Eriksson, "SKE" <5357>, 1987.
  603. ;
  604. ;-Ver--/-Datum----/-Sign-/-Kommentar----------------------------------
  605. ; 1.00 / 87-08-15 / SKE  / KERMCSUM
  606. ;
  607. ; Kontrollsummarutin till Bo Kullmars Kermit-program K.
  608.  
  609.  
  610. ;*  Summera str{ng f|r Kermit-kontrollsumma.
  611. ;*  In: DE = VAROOT(Str{ng$)
  612. ;*  Ut:  L = Summa, bittar 5-0,
  613. ;*       H = Summa, bittar 13-6.
  614.  
  615. Csum:       ex     de,hl
  616.             inc    hl
  617.             inc    hl
  618.             ld     e,(hl)             ; DE <- Str{ngens adress.
  619.             inc    hl
  620.             ld     d,(hl)
  621.             inc    hl
  622.             ld     c,(hl)             ; BC <- Str{ngens l{ngd.
  623.             inc    hl
  624.             ld     b,(hl)
  625.             ld     hl,0               ; HL <- Startsumma = 0.
  626. Loop:       ld     a,c                ; Slut?
  627.             or     b
  628.             jr z   CEnd
  629.             ld     a,(de)             ; Summera.
  630.             add    l
  631.             ld     l,a
  632.             ld     a,0
  633.             adc    h
  634.             ld     h,a
  635.             dec    bc
  636.             inc    de
  637.             jr     Loop
  638.  
  639. CEnd:       ld     a,l
  640.             rlc    a
  641.             rl     h
  642.             rlc    a
  643.             rl     h                  ; H <- bit 13-6.
  644.             ld     a,l
  645.             and    63
  646.             ld     l,a                ; L <- bit 5-0.
  647.             ret
  648. <<< kermpack.asm >>>
  649. ; Fil: KERMPACK.ASM
  650. ; Av:  Kristoffer Eriksson, "SKE" <5357>, 1987.
  651. ;
  652. ;-Ver--/-Datum----/-Sign-/-Kommentar----------------------------------
  653. ; 1.00 / 87-08-15 / SKE  / KERMPACK
  654. ;
  655. ; Packnings- och uppackningsrutiner till Bo Kullmars Kermit-program K.
  656.  
  657.  
  658. ;*  Packa upp buffert.
  659. ;*  In: DE pekare till inparametrar enligt:
  660.  
  661. UInbuff:    =  +0  ;W   Inbuffertens adress
  662. UInbuffs:   =  +2  ;B   Inbuffertens slutposition eller l{ngd-1 (0-255)
  663. UUtbuff:    =  +3  ;W   Utbuffertens adress
  664. UUtbuffl:   =  +5  ;B   Utbuffertens l{ngd i antal byte (94-255)
  665. Qctl:       =  +6  ;B   Tecken som markerar "tecken XOR 64"
  666. Qbin:       =  +7  ;B   Tecken som markerar "tecken OR 128"
  667. Rept:       =  +8  ;B   Tecken som markerar "tecken1-32 stycken tecken2"
  668.  
  669. ;*  In- och utbuffertarnas f|rsta byte anger n{sta oanv{nda position i resp
  670. ;*  buffert, r{knat med sig sj{lva som position noll. De uppdateras med
  671. ;*  aktuella v{rden vid retur.
  672. ;*
  673. ;*  Inbuffertens position kan bli upp till 5 h|gre {n dess slutposition,
  674. ;*  vilket inneb{r att om slutpositionen {r 251 eller mer kan man f|rlora
  675. ;*  positionens mest signifikanta bittar, varvid v{rdet blir 256 f|r l}gt.
  676. ;*  Detta beror p} att positionen bara kontrolleras mot l{ngden en g}ng f|r
  677. ;*  varje avkodat tecken, och varje tecken kan vara kodat med upp till 5 byte.
  678. ;*  [ven om bufferten bara inneh}ller korrekta koder, slutar positionen 1
  679. ;*  steg f|rbi slutpositionen (det blir ju f|rsta oanv{nda position), och
  680. ;*  {r l{ngden 255 blir det 0 som lagras som position.
  681. ;*
  682. ;*  Rutinen avbryts n{r n{sta inposition blir st|rre {n slutpositionen
  683. ;*  (Inpos > Inslut), eller det blir 93 eller f{rre tecken kvar i utbufferten
  684. ;*  (Utpos >= Utl{ngd - 93). Det senare vilkoret {r f|r att garantera att
  685. ;*  en Rept-sekvens f}r plats vid uppackning. Den kan bli max 94 tecken.
  686. ;*
  687. ;*  Rutinen returnerar i HL aktuell inposition - inl{ngden. Observera att
  688. ;*  h{r f|rlorar man inte n}gra signifikanta bittar i positionen.
  689. ;*
  690. ;*  Qctl, Qbin och Rept kan vara noll f|r att markera att de inte anv{nds.
  691.  
  692.  
  693. ; DE = Aktuell adress i utbuff, D' = Position i utbuff, E' = L{ngd av utbuff,
  694. ; HL = Aktuell adress i inbuff, BC' = Position i inbuff,
  695. ; B = Repetitionsfaktor, C = OR-faktor.
  696.  
  697. ; Inbuff-positionen ligger i ett dubbelregister eftersom den inte kontrolleras
  698. ; mot l{ngden vid varje |kning, och d{rf|r kan r}ka bli h|gre {n 255.
  699.  
  700. Unpbuff:    push   de
  701.             pop    ix
  702.             ld     l,(ix+UUtbuff)
  703.             ld     h,(ix+UUtbuff+1)
  704.             ld     c,(hl)
  705.             ld     b,0
  706.             add    hl,bc
  707.             ex     de,hl              ; DE <- Aktuell adress i utbuffert.
  708.             ld     a,c
  709.             exx
  710.             ld     d,a                ; D' <- Position i utbuffert.
  711.             ld     e,(ix+UUtbuffl)    ; E' <- Utbuffertens l{ngd.
  712.             exx
  713.  
  714.             ld     l,(ix+UInbuff)
  715.             ld     h,(ix+UInbuff+1)
  716.             ld     c,(hl)             ; (B = 0)
  717.             add    hl,bc              ; HL <- Aktuell adress i inbuffert.
  718.             push   bc
  719.             exx
  720.             pop    bc                 ; BC' <- Position i inbuffert.
  721.  
  722. ULoop:      ld     a,e
  723.             sub    94
  724.             cp     d                  ; J{mf|r  (E' - 94) med D'
  725.             jr c   UEnd               ; Avsluta om Utpos > Utl{ngd - 94.
  726.             ld     a,b
  727.             and    a
  728.             jr nz  UEnd               ; Inpos > 255, allts} Inpos > Inslut.
  729.             ld     a,(ix+UInbuffs)
  730.             cp     c
  731.             jr c   UEnd               ; Avsluta om Inpos > Inslut.
  732.  
  733. UCont:      inc    bc                 ; \ka Inpos i BC'.
  734.             exx
  735.             ld     a,(hl)             ; L{s Inbuffert och |ka Inadress.
  736.             inc    hl
  737.             ld     bc,1 << 8 + 0      ; B <- Reptfaktor 1, C <- OR-faktor 0.
  738.             and    a                  ; Ingen id` att j{mf|ra tecknet 0 med
  739.             jr z   UStoreChar         ; specialtecknen, f|r {r de noll
  740.                                       ; betyder det bara att de inte anv{nds.
  741. UchkRept:   cp     (ix+Rept)
  742.             jr nz  UchkQbin
  743.             ld     a,(hl)             ; H{mta n{sta byte = Repetitionsfaktor.
  744.             inc    hl
  745.             sub    32
  746.             cp     94
  747.             jr c   Ux1                ; A <- max(A,94). S{kerhetskontroll,
  748.             ld     a,94               ;            borde snarare meddela fel.
  749. Ux1:        ld     b,a                ; B <- Repetitionsfaktor.
  750.             ld     a,(hl)             ; A <- Repeterat tecken.
  751.             inc    hl
  752.             exx
  753.             inc    bc                 ; \ka Inpos.
  754.             inc    bc
  755.             exx
  756.  
  757. UchkQbin:   cp     (ix+Qbin)
  758.             jr nz  UchkQctl
  759.             ld     c,128              ; OR-faktor f|r teckenkod.
  760.             ld     a,(hl)             ; A <- P}verkat tecken.
  761.             inc    hl
  762.             exx
  763.             inc    bc                 ; \ka Inpos.
  764.             exx
  765.  
  766. UchkQctl:   cp     (ix+Qctl)
  767.             jr nz  UStoreChar
  768.             ld     a,(hl)             ; A <- P}verkat tecken.
  769.             inc    hl
  770.             exx
  771.             inc    bc                 ; \ka Inpos.
  772.             ld     l,a                ; L' <- A  (tempor{r lagring).
  773.             and    127
  774.             jr z   Ux2
  775.             cp     (ix+Rept)          ; S}lla bort tecken som inte p}verkas.
  776.             jr z   Ux3
  777.             cp     (ix+Qbin)
  778.             jr z   Ux3
  779.             cp     (ix+Qctl)
  780.             jr z   Ux3
  781. Ux2:        ld     a,l
  782.             xor    64
  783.             jr     Ux4
  784. Ux3:        ld     a,l
  785. Ux4:        exx
  786.  
  787. UStoreChar: or     c                  ; OR-faktor
  788. UStoreLoop: ld     (de),a             ; Lagra tecken i Utbuffert.
  789.             inc    de
  790.             exx
  791.             inc    d                  ; \ka Utpos.
  792.             exx
  793.             djnz   UStoreLoop         ; Repetitionsfaktor.
  794.  
  795.             exx
  796.             jr     ULoop
  797.  
  798. UEnd:       ld     l,(ix+UUtbuff)
  799.             ld     h,(ix+UUtbuff+1)
  800.             ld     (hl),d             ; (Utbuff) <- D' = Position i utbuffert.
  801.             ld     l,(ix+UInbuff)
  802.             ld     h,(ix+UInbuff+1)
  803.             ld     (hl),c             ; (Inbuff) <- BC' = Position i inbuffert.
  804.             ld     l,c
  805.             ld     h,b
  806.             ld     c,(ix+UInbuffs)
  807.             xor    a                  ; Nolla carry och A.
  808.             ld     b,a
  809.             sbc    hl,bc              ; Returv{rde HL <- Inposition - Inl{ngd.
  810.             ret
  811.  
  812.  
  813.  
  814. ;*  Packa buffert.
  815. ;*  In: DE pekare till inparametrar enligt:
  816.  
  817. PUtbuff:    =  +0  ;W   Inbuffertens adress
  818. PUtbuffl:   =  +2  ;B   Inbuffertens l{ngd i antal byte (10-255)
  819. PInbuff:    =  +3  ;W   Utbuffertens adress
  820. ReptPos:    =  +5  ;B   (Intern variabel, aktuell utpos vid start av rept.)
  821. ;Qctl:      =  +6  ;B   Tecken som markerar "tecken XOR 64"
  822. ;Qbin:      =  +7  ;B   Tecken som markerar "tecken OR 128"
  823. ;Rept:      =  +8  ;B   Tecken som markerar "tecken1-32 stycken tecken2"
  824.  
  825. ;*  In- och utbuffertarnas f|rsta byte anger n{sta oanv{nda position i resp
  826. ;*  buffert, r{knat med sig sj{lva som position noll. Dessa uppdateras med
  827. ;*  aktuella v{rden f|re retur. Inbuffertens andra byte anger dess l{ngd
  828. ;*  (0-255) i antal byte inklusive position och l{ngd-bytes.
  829. ;*
  830. ;*  Rutinen avbryts n{r det }terst}r nio eller f{rre tecken i utbufferten
  831. ;*  (Utpos >= Utl{ngd - 9) eller inbuffert {r slut (Inpos >= Inl{ngd).
  832. ;*  Marginalen i utbufferten {r till f|r att kodningen av n{sta tecken
  833. ;*  garanterat ska f} plats. Fast den {r on|digt stor, eftersom kodningen
  834. ;*  av ett tecken kan bli max 5 tecken.
  835. ;*
  836. ;*  Returnerar i HL -1 om aktuell inposition {r lika med inl{ngden, annars 0.
  837. ;*
  838. ;*  Qctl, Qbin och Rept kan vara noll f|r att markera att de inte anv{nds.
  839.  
  840. ; DE = Aktuell adress i utbuff, D' = Position i utbuff, E' = L{ngd av utbuff,
  841. ; HL = Aktuell adress i inbuff, B' = Position i inbuff, C' = L{ngd av inbuff,
  842. ; HL' = Adress i utbuff f|r ev repetionssekvens, B = Repetitionsr{knare.
  843.  
  844. Packbuff:   push   de
  845.             pop    ix
  846.             ld     l,(ix+PUtbuff)
  847.             ld     h,(ix+PUtbuff+1)
  848.             ld     c,(hl)             ; Position.
  849.             ld     b,0
  850.             add    hl,bc
  851.             ex     de,hl              ; DE <- Aktuell adress i utbuffert.
  852.             ld     a,c
  853.             exx
  854.             ld     d,a                ; D' <- Position i utbuffert.
  855.             ld     e,(ix+PUtbuffl)    ; E' <- Utbuffertens l{ngd.
  856.             exx
  857.  
  858.             ld     l,(ix+PInbuff)
  859.             ld     h,(ix+PInbuff+1)
  860.             ld     c,(hl)             ; Position.
  861.             inc    hl
  862.             ld     b,(hl)             ; L{ngd.
  863.             dec    hl
  864.             push   bc
  865.             ld     b,0
  866.             add    hl,bc              ; HL <- Aktuell adress i inbuffert.
  867.             exx
  868.             pop    hl
  869.             ld     b,l                ; B' <- Position i inbufferten.
  870.             ld     c,h                ; C' <- Inbuffertens l{ngd.
  871.                                       ; Repetitionsr{knaren B {r nu noll.
  872. PLoop:      ld     a,e
  873.             sub    10
  874.             cp     d                  ; J{mf|r  (E' - 10) med D'
  875.             jr c   PEnd               ; Avsluta om Utpos > Utl{ngd - 10.
  876.             ld     a,c
  877.             cp     b                  ; J{mf|r C' med B'.
  878.             jr z   PEnd
  879.             jr nc  PCont              ; Avsluta om Inpos >= Inl{ngd.
  880.  
  881. PEnd:       ld     l,(ix+PUtbuff)
  882.             ld     h,(ix+PUtbuff+1)
  883.             ld     (hl),d             ; (Utbuff) <- D' = Position i utbuffert.
  884.             ld     l,(ix+PInbuff)
  885.             ld     h,(ix+PInbuff+1)
  886.             ld     (hl),b             ; (Inbuff) <- B' = Position i inbuffert.
  887.             inc    hl
  888.             ld     (hl),c             ; (Inbuff+1) <- C' = L{ngd.
  889.             ld     a,b
  890.             cp     c
  891.             ld     hl,0
  892.             ret nz
  893.             dec    hl                 ; Returv{rde HL <- Inpos = Inl{ngd.
  894.             ret
  895.  
  896. PCont:      inc    b                  ; \ka Inpos i B' redan nu.
  897.             exx
  898.             ld     a,(ix+Rept)
  899.             and    a
  900.             jr z   PchkQbin           ; Ingen repetitionskomprimering.
  901.  
  902.             ld     a,(hl)             ; Aktuellt tecken.
  903.             dec    hl
  904.             cp     (hl)               ; J{mf|r tecknet med f|rra tecknet.
  905.             inc    hl
  906.             jr nz  PInitRept
  907.             inc    b                  ; \ka repetitionsr{knaren.
  908.             ld     a,b
  909.             cp     5
  910.             jr c   Px1                ; Hoppa om inte B > 4.
  911.             push   bc
  912.             ld     a,(ix+Rept)
  913.             exx
  914.             ld     (hl),a             ; Anv{nd den sparade utpekaren och
  915.             inc    hl                 ; {ndra i utbufferten till repetitions-
  916.             pop    af   ; A <- B = Rept.r{kn.                   sekvens med
  917.             add    32                 ; <Rept><Antal+32>, samt }terst{ll
  918.             ld     (hl),a             ; utadressen och utpositionen till
  919.             push   hl                 ; slutet av denna sekvens.
  920.             dec    hl
  921.             ld     d,(ix+ReptPos)
  922.             inc    d
  923.             inc    d
  924.             exx
  925.             pop    de
  926.             inc    de
  927.             cp     94+32              ; J{mf|r B med 94. (A {r nu B+32)
  928.             jr nz  PchkQbin
  929.             ld     b,0                ; Avbryt repeteringsbehandling efter
  930.             jr     PchkQbin           ; maxantalet 94 upprepningar.
  931.  
  932. PLoop2:     jr     PLoop              ; (F|r l}ngt f|r ett enda jr-hopp.)
  933.  
  934. Px1:        dec    a                  ; Om f|rra v{rdet p} rept-r{knaren var
  935.             jr nz  PchkQbin           ; noll, ska den startas om.
  936.  
  937. PInitRept:  ld     b,1                ; Tecknet {r inte likt f|reg}ende.
  938.             push   de                 ; Starta om repetitionsr{knare och
  939.             exx                       ; spara utadress och utposition.
  940.             pop    hl
  941.             ld     (ix+ReptPos),d
  942.             exx
  943.  
  944. PchkQbin:   ld     a,(hl)             ; Aktuellt tecken.
  945.             inc    hl                 ; Inbuffertadressen|kas f|rst nu.
  946.             ld     c,a
  947.             cp     128
  948.             jr c   PchkQctl           ; Behandla tecken >= 128 med Qbin
  949.             ld     a,(ix+Qbin)
  950.             and    a
  951.             jr z   PchkQctl           ; Avst{ngt.
  952.             ld     (de),a             ; Lagra <Qbin>.
  953.             inc    de
  954.             exx
  955.             inc    d                  ; \ka Utpos.
  956.             exx
  957.             ld     a,c
  958.             and    127                ; Nu slipper vi h|ga bitten.
  959.             ld     c,a
  960.  
  961. PchkQctl:   ld     a,(ix+Qctl)
  962.             and    a
  963.             jr z   PStoreChar         ; Ingen hantering av ctrl-tecken.
  964.             ld     a,c
  965.             and    127
  966.             cp     127                ; Tecken < 32 och = 127 kod{ndras.
  967.             jr z   PCtrl
  968.             cp     32
  969.             jr c   PCtrl
  970.             cp     (ix+Qctl)          ; Dessa tecken f|reg}as av Qctl men
  971.             jr z   PQctl              ; kod{ndras inte.
  972.             cp     (ix+Qbin)
  973.             jr z   PQctl
  974.             cp     (ix+Rept)
  975.             jr z   PQctl
  976.             jr     PStoreChar
  977. PCtrl:      ld     a,c
  978.             xor    64
  979.             ld     c,a
  980. PQctl:      ld     a,(ix+Qctl)
  981.             ld     (de),a             ; Lagra <Qctl>.
  982.             inc    de
  983.             exx
  984.             inc    d                  ; \ka Utpos.
  985.             exx
  986. PStoreChar: ld     a,c
  987.             ld     (de),a             ; Lagra tecknet.
  988.             inc    de
  989.             exx
  990.             inc    d                  ; \ka Utpos.
  991.  
  992.             jr     PLoop2
  993. <<< kmain.bas >>>
  994. 2 ! **********************************************************************
  995. 3 ! Program          KMAIN.BAS        Utg}va  4.11     1990-02-17
  996. 4 ! av Bo Kullmar, 1789
  997. 6 ! F|r ABC800M ABC802 ABC806 DTC2
  998. 8 ! Testad p} ABC806
  999. 9 ! Se vidare K.BAS.
  1000. 21 ! [ndra inte radnummreringen f|r Kermitrutinerna, f|r d} upph|r likheten
  1001. 22 ! med monitorns Kermitrutiner!
  1002. 23 ! **********************************************************************
  1003. 30 EXTEND : INTEGER : OPTION BASE 0
  1004. 60 COMMON V24def$=16,Oldprom,Mtyp,Key99,Enh$=4,Enh,Printer$=16,Version$=4,Mqbin,Pack$=376,Csum$=40
  1005. 80 IF PEEK(39)=6 THEN Dtc2=-1 ! ta reda p} om det {r en DTC 2
  1006. 1000 Dummy=FNInit
  1007. 1010 IF FNF|rbindelse Rutin=FNMeny(1) ELSE Slut=-1
  1008. 1020 WHILE NOT Slut
  1009. 1030   IF Rutin=2 Eko=0 : Rutin=1
  1010. 1040   IF Rutin=3 Eko=-1 : Rutin=1
  1011. 1050   WHILE Rutin=4 ! Ta emot filer med Kermit
  1012. 1060     Dummy=FNDisplaykermit
  1013. 1070     ; CUR(3,0) FNF$(YEL) 'Mottag filer med Kermit'+Avbryt$
  1014. 1075     ; FNF$(YEL) 'Avbryt fil|verf|ringen med PF1' SPACE$(9)+'Avbryt |verf|ringen av alla filer med PF8'
  1015. 1080     CLOSE 20,30 : S{nd=0 : Dump=0 : Nfile=FNFiles(-1) : IF Nfile=-1 OR Ec=-1 GOTO 1260
  1016. 1090     IF Mqbin=89 Dummy=FNMaskabit7(0,V24)
  1017. 1100     Dummy=FNRe(Im,1,5)
  1018. 1110     IF Dummy=0 Dummy=FNFel('Ok, klart')
  1019. 1115     IF Dummy=-2 Rutin=100
  1020. 1120     IF Mqbin=89 Dummy=FNMaskabit7(-1,V24)
  1021. 1130   IF 0 WEND 
  1022. 1140   IF Rutin=5 AND Dump=0 IF FNRfil Rutin=1
  1023. 1150   IF Rutin=7 Dump=0 : CLOSE 30 : Rutin=1
  1024. 1160   WHILE Rutin=6 ! S{nd filer med Kermit
  1025. 1170     Dummy=FNDisplaykermit
  1026. 1180     ; CUR(3,0) FNF$(YEL) 'S{nd filer med Kermit  '+Avbryt$
  1027. 1185     ; FNF$(YEL) 'Avbryt fil|verf|ringen med PF1' SPACE$(9)+'Avbryt |verf|ringen av alla filer med PF8'
  1028. 1190     CLOSE 20,30 : S{nd=0 : Dump=0 : Nfile=FNFiles(0)
  1029. 1200     IF Nfile=0 OR Nfile=-1 OR Ec=-1 GOTO 1260
  1030. 1210     IF Mqbin=89 Dummy=FNMaskabit7(0,V24)
  1031. 1220     IF Nfile>0 Dummy=FNSw('',Im,1,ASCII('#'),Chktyp,5) : GOTO 1240
  1032. 1230     IF Nfile-2 Dummy=FNSw(File$(1),Im,1,ASCII('#'),Chktyp,5)
  1033. 1240     IF Dummy=0 Dummy=FNFel('Ok, klart')
  1034. 1245     IF Dummy=-2 Rutin=100
  1035. 1250     IF Mqbin=89 Dummy=FNMaskabit7(-1,V24)
  1036. 1260   IF 0 WEND 
  1037. 1270   IF Rutin=8 AND S{nd=0 IF FNSfil Rutin=1
  1038. 1280   IF Rutin=9 Im=NOT Im
  1039. 1290   IF Rutin=10 Enh$=FNDefenh$
  1040. 1295   IF Rutin=11 IF Chktyp=1 Chktyp=2 ELSE Chktyp=1
  1041. 1300   IF Rutin=1 Dummy=FNConnect
  1042. 1305   IF Rutin=100 Rutin=1 : Dummy=FNTerm
  1043. 1310   IF Rutin=12 Slut=-1 : GOTO 1330
  1044. 1320   Rutin=FNMeny(Rutin)
  1045. 1330 WEND 
  1046. 1340 END 
  1047. 1350 DEF FNInit
  1048. 1351   ON ERROR GOTO 1495
  1049. 1357   IF V24def$='' ; CHR$(12) FNF$(RED) 'Du m}ste starta med '+Enh$+'K, detta g|rs nu automatiskt!' : CHAIN Enh$+'K'
  1050. 1358   ON ERROR GOTO 
  1051. 1370   DIM Oldsk{rm$=2048,Dirmap$=16,Dirrec$=256,File$(20)=16,Enh$(20)=4,Esc$=1,V24buff$=400
  1052. 1380   POKE VAROOT(Sk{rm$),0,8,30720,SWAP%(30720),0,8
  1053. 1390   POKE VAROOT(Dosbuff$),0,1,0,245,0,1
  1054. 1400   POKE VAROOT(Textbuff$),0,2,0,250,0,0
  1055. 1405   POKE PEEK2(65500)+2,VAROOT(V24buff$),SWAP%(VAROOT(V24buff$))
  1056. 1410   V24=9 : Inlu=2 : Outlu=3 : Chktyp=1
  1057. 1420   ; CHR$(12)
  1058. 1430   Huvud$=CUR(0,0)+FNF$(CYA)+'K, KERMIT-program f|r ABC800-serien, version '+Version$
  1059. 1440   Cu=PEEK2(SYS(10)+64)+6
  1060. 1450   IF PEEK2(PEEK2(65500))>=10 THEN V24xoff=PEEK2(65500)+37 ! (Trol 33 f|r ver 8)
  1061. 1455   V24tkn=PEEK2(65500)+6 : V24ut=PEEK2(65500)+4
  1062. 1460   IF Key99 Avbryt$=SPACE$(16)+'Avbryt inmatningen med STOP' ELSE Avbryt$=SPACE$(16)+'Avbryt inmatningen med PF1'
  1063. 1480   Eko=-1 : Im=0
  1064. 1490   RETURN 0
  1065. 1495   ; FNF$(RED) 'Beklagar, hittar ej '+Enh$+'K och kan d{rf|r inte starta programmet!' : STOP 
  1066. 1500 FNEND 
  1067. 1510 DEF FNConnect LOCAL I
  1068. 1520   ; CUR(16,0) FNF$(YEL) 'Kermit: uppkopplad - terminalmod - PF1 till meny.'
  1069. 1530   WHILE I<1200 : I=I+1 : WEND 
  1070. 1540   RETURN FNTerm
  1071. 1550 FNEND 
  1072. 1560 DEF FNDefenh$ LOCAL E$=4
  1073. 1570   ; CUR(17,0) FNF$(YEL) 'Specificera standardenhet'+Avbryt$
  1074. 1580   E$=FNVersal$(FNSpbort$(FNInmata$('',18,0,1,2,4,CYA+CHR$(138)))) : IF E$=CHR$(27) OR E$='' RETURN Enh$
  1075. 1590   WHILE FNEnhcs(E$)=-1
  1076. 1600     Dummy=FNFel('Felaktig enhet!')
  1077. 1610     E$=FNVersal$(FNSpbort$(FNInmata$('',18,0,1,2,4,CYA+CHR$(138)))) : IF E$=CHR$(27) OR E$='' RETURN Enh$
  1078. 1620   WEND 
  1079. 1630   RETURN E$
  1080. 1640 FNEND 
  1081. 1650 DEF FNFiles(Rsw) LOCAL Nfile,Aa$=162,I,Bin$=10
  1082. 1655   IF Im Bin$='Bin{rfiler' ELSE Bin$='Textfiler'
  1083. 1660   Nfile=0
  1084. 1665   ; CUR(5,0) FNF$(YEL) 'Standardenhet: ' FNF$(CYA) Enh$ : ; CUR(5,39) FNF$(YEL) 'Filtyp: ' FNF$(CYA) Bin$ : ; CUR(7,0) FNF$(YEL) 'Ange filnamn:';
  1085. 1670   IF Rutin=4 ; TAB(40) 'Lokalt filnamn beh|ver ej anges'
  1086. 1680   IF Rutin=6 AND (PEEK(24688)=0 OR PEEK(24688)=8) ; TAB(40) 'Jokertecken "*" och "?" kan anv{ndas'
  1087. 1690   Aa$=FNVersal$(FNSpbort$(FNInmata$('',8,0,1,2,75,CYA+CHR$(138)))) : IF Aa$=CHR$(27) RETURN -1
  1088. 1700   ; CUR(8,0) FNF$(CYA) Aa$+SPACE$(77-LEN(Aa$))
  1089. 1710   WHILE Rsw=0 AND (INSTR(1,Aa$,'?') OR INSTR(1,Aa$,'*'))
  1090. 1720     IF PEEK(24688)<>0 AND PEEK(24688)<>8 RETURN FNFel('Jokertecken kan enbart anv{ndas f|r UFD och LUX-NET DOS!')
  1091. 1730     IF LEN(Aa$)>16 RETURN FNFel('F|r l}ngt filnamn!')
  1092. 1740     File$(1)=Aa$
  1093. 1750     Ec=FNKollenh(1) : IF Ec=-1 RETURN FNFel('Felaktig enhet!')
  1094. 1760     RETURN -2
  1095. 1770   WEND 
  1096. 1780   IF Aa$='' Enh$(1)='' : RETURN 0
  1097. 1790   Nfile=Nfile+1
  1098. 1800   K=INSTR(1,Aa$,',')
  1099. 1810   WHILE K
  1100. 1820     IF LEN(LEFT$(Aa$,K-1))>16 RETURN FNFel('F|r l}ngt filnamn!')
  1101. 1830     File$(Nfile)=LEFT$(Aa$,K-1) : Aa$=RIGHT$(Aa$,K+1)
  1102. 1840     Ec=FNKollenh(Nfile) : IF Ec=-1 RETURN FNFel('Felaktig enhet!')
  1103. 1850     Nfile=Nfile+1
  1104. 1860     K=INSTR(1,Aa$,',')
  1105. 1870     IF Nfile>20 ; FNFel('Max 20 filnamn kan matas in!') : RETURN 0
  1106. 1880   WEND 
  1107. 1890   IF LEN(Aa$)>16 RETURN FNFel('F|r l}ngt filnamn!')
  1108. 1900   File$(Nfile)=Aa$
  1109. 1910   Ec=FNKollenh(Nfile) : IF Ec=-1 RETURN FNFel('Felaktig enhet!')
  1110. 1920   IF Rsw RETURN Nfile
  1111. 1930   ON ERROR GOTO 1960
  1112. 1940   I=1
  1113. 1942   WHILE I<=Nfile
  1114. 1943     IF Enh$(I)='' Enh$(I)=Enh$
  1115. 1944     OPEN Enh$(I)+File$(I) AS FILE 2
  1116. 1946     CLOSE 2 : I=I+1
  1117. 1948   WEND 
  1118. 1950   ON ERROR GOTO : RETURN Nfile
  1119. 1960   ON ERROR GOTO : RETURN FNFel('Fil: '+Enh$(I)+File$(I)+' finns inte - avbryter !')
  1120. 1970 FNEND 
  1121. 1980 DEF FNTerm LOCAL Ctrlc
  1122. 1990   Ctrlc=PEEK2(65413) : POKE 65413,0,0
  1123. 1994   ; CHR$(12);
  1124. 2000   IF Sk{rmstart=30720 Sk{rm$=Oldsk{rm$ ELSE Sk{rm$=RIGHT$(Oldsk{rm$,Sk{rmstart-30719)+LEFT$(Oldsk{rm$,Sk{rmstart-30720)
  1125. 2010   POKE Cu,Kol,Rad
  1126. 2015   IF V24xoff THEN POKE V24xoff,PEEK(V24xoff) AND 253 ! Bryt XOFF
  1127. 2020   Slut=0
  1128. 2030   Dummy=FNCursor
  1129. 2040   WHILE NOT Slut
  1130. 2050     IF PEEK2(V24tkn)<>0 Z=FNV24in
  1131. 2060     IF SYS(5)>127 OR S{nd Z=FNTeckin
  1132. 2070   WEND 
  1133. 2080   POKE 65413,Ctrlc,SWAP%(Ctrlc)
  1134. 2090   RETURN 0
  1135. 2100 FNEND 
  1136. 2110 DEF FNTeckin LOCAL A$=1
  1137. 2120   IF S{nd ; #V24,FNS{ndline$; : RETURN 0 ELSE GET A$
  1138. 2130   IF NOT Eko ; A$; : IF Dump ; #30,A$;
  1139. 2140   IF ASCII(A$)=192 Slut=-1 : RETURN 0
  1140. 2150   IF NOT Dtc2 IF ASCII(A$)=(130 AND Key99 OR 215 AND NOT Key99) THEN RETURN FNDump
  1141. 2160   ; #V24,A$;
  1142. 2170   RETURN 0
  1143. 2180 FNEND 
  1144. 2190 DEF FNV24in LOCAL A,Buff$=80,I
  1145. 2195   A=PEEK2(PEEK2(65500)+6) : IF A>80 A=80
  1146. 2200   GET #V24,Buff$ COUNT A
  1147. 2205   WHILE Oldprom : I=LEN(Buff$) : WHILE I
  1148. 2210       MID$(Buff$,I,1)=CHR$(ASCII(MID$(Buff$,I,1)) AND 127) : I=I-1
  1149. 2215   WEND : WEND 
  1150. 2220   RETURN FNSk{rm(Buff$)
  1151. 2225 FNEND 
  1152. 2250 DEF FNCursor LOCAL Rad,Kol,A
  1153. 2252   IF Dtc2 2302
  1154. 2260   Rad=PEEK(Cu+1) : Kol=PEEK(Cu) : A=30720+Rad*80+Kol
  1155. 2270   OUT 56,14,57,SWAP%(A),56,15,57,A,56,10,57,104
  1156. 2300   RETURN 0
  1157. 2302   Rad=PEEK(Cu+1) : Kol=PEEK(Cu) : A=PEEK2(PEEK2(121)+8)+Rad*80+Kol
  1158. 2303   IF A>32767 A=A-2048
  1159. 2304   GOTO 2270
  1160. 2305 FNEND 
  1161. 2310 DEF FNSk{rm(Buff$) LOCAL J,Buff1$=4,Buff2$=1
  1162. 2315   Z=FNCursor : J=1
  1163. 2320   WHILE J<=LEN(Buff$)
  1164. 2325     Buff1$=CHR$(ASCII(RIGHT$(Buff$,J))) : Buff2$=Buff1$
  1165. 2330     IF Buff1$=CHR$(27) Esc=-1
  1166. 2335     IF Buff1$=CHR$(30) Buff1$=CUR(0,0)
  1167. 2340     IF Buff1$=CHR$(11) Buff1$=CUR(PEEK(Cu+1)-1,PEEK(Cu))
  1168. 2345     IF Buff1$=CHR$(12) IF PEEK(Cu)>=PEEK(Cu+2) Buff1$=CUR(PEEK(Cu+1)+1,0) ELSE Buff1$=CUR(PEEK(Cu+1),PEEK(Cu)+1)
  1169. 2350     IF Buff1$=CHR$(26) Buff1$=CHR$(12)
  1170. 2360     IF Esc IF LEN(Styr$)=3 ; Styr$+Buff1$ : Styr$='' : Esc=0 ELSE Styr$=Styr$+Buff1$
  1171. 2362     IF Esc AND LEN(Styr$)=2 IF Buff1$<>'=' Buff1$=Styr$ : Styr$='' : Esc=0
  1172. 2364     IF NOT Esc ; Buff1$; : IF Dump ; #30 Buff2$;
  1173. 2365     J=J+1
  1174. 2370   WEND 
  1175. 2380   RETURN FNCursor
  1176. 2385 FNEND 
  1177. 2390 DEF FNMeny(Alt) LOCAL Rutin,F$=1,Bin$=10
  1178. 2395   Slut=0
  1179. 2400   IF Alt=1 Oldsk{rm$=Sk{rm$ : Rad=PEEK(Cu+1) : Kol=PEEK(Cu) : IF Dtc2 Sk{rmstart=PEEK2(PEEK2(121)+8) ELSE Sk{rmstart=30720
  1180. 2405   IF Im Bin$='Bin{rfiler' ELSE Bin$='Textfiler'
  1181. 2410   ; CHR$(12) : Dummy=FNClr
  1182. 2420   ; 
  1183. 2425   ; FNF$(CYA) 'Pf 1        Koppla upp terminalf|rbindelse'
  1184. 2430   ; FNF$(CYA) 'Pf 2        Lokalt eko av tecken'
  1185. 2435   ; FNF$(CYA) 'SHIFT Pf 2  Ingen lokal ekning av tecken'
  1186. 2440   ; FNF$(CYA) 'Pf 3        Mottag fil fr}n v{rddator med Kermit'
  1187. 2445   ; FNF$(CYA) 'SHIFT Pf 3  Dumpa data till lokal fil (utan Kermit)'
  1188. 2450   ; FNF$(CYA) 'CTRL  Pf 3  Avbryt dumpning till lokal fil'
  1189. 2455   ; FNF$(CYA) 'Pf 4        S{nd fil till v{rddator med Kermit'
  1190. 2460   ; FNF$(CYA) 'SHIFT Pf 4  Dumpa fil till v{rddator (utan Kermit)'
  1191. 2465   ; FNF$(CYA) 'Pf 5        [ndra filtyp f|r Kermit,        nu = ' FNF$(YEL) Bin$
  1192. 2470   ; FNF$(CYA) 'Pf 6        [ndra standardenhet f|r Kermit, nu = ' FNF$(YEL) Enh$
  1193. 2472   ; FNF$(CYA) 'Pf 7        [ndra blockchecktyp f|r Kermit, nu =' FNF$(YEL) Chktyp
  1194. 2475   ; FNF$(CYA) 'Pf 8        Avsluta programmet och bryt terminalf|rbindelsen'
  1195. 2480   ; FNF$(CYA); : IF (Key99=0 AND NOT Dtc2) ; 'SHIFT Pf 8'; ELSE ; 'PRINT     ';
  1196. 2485   ; '  Dumpa bildsk{rmen till skrivare ({ven direkt i terminalmode)'
  1197. 2490   WHILE Rutin=0
  1198. 2495     ; CUR(17,0) FNF$(YEL) 'V{lj funktion:  ' CHR$(8); : F$=FNTkn$(YEL)
  1199. 2500     Rutin=INSTR(1,CHR$(192,193,209,194,210,195,226,211,196,197,198,199),F$) : IF Rutin RETURN Rutin
  1200. 2505   WEND 
  1201. 2510 FNEND 
  1202. 2515 DEF FNSfil LOCAL Fil$=16
  1203. 2520   ; CUR(17,0) FNF$(YEL) 'S{nda fil (utan Kermit)'+Avbryt$
  1204. 2525   ; FNF$(YEL) 'Filnamn:';
  1205. 2530   Fil$=FNVersal$(FNSpbort$(FNInmata$('',18,9,1,2,16,CYA+CHR$(138))))
  1206. 2535   ON ERROR GOTO 2550
  1207. 2540   OPEN Fil$ AS FILE 20
  1208. 2545   S{nd=-1 : RETURN S{nd
  1209. 2550   RETURN 0
  1210. 2555 FNEND 
  1211. 2560 DEF FNRfil LOCAL Fil$=16
  1212. 2565   ; CUR(17,0) FNF$(YEL) 'Dumpa fil (utan Kermit)'+Avbryt$
  1213. 2570   ; FNF$(YEL) 'Filnamn:';
  1214. 2575   Fil$=FNVersal$(FNSpbort$(FNInmata$('',18,9,1,2,16,CYA+CHR$(138))))
  1215. 2580   ON ERROR GOTO 2595
  1216. 2585   PREPARE Fil$ AS FILE 30
  1217. 2590   Dump=-1 : RETURN Dump
  1218. 2595   RETURN 0
  1219. 2600 FNEND 
  1220. 2605 DEF FNS{ndline$ LOCAL Sp,St$=80
  1221. 2610   IF LEN(Textbuff$) GOTO 2625
  1222. 2615   ON ERROR GOTO 2645
  1223. 2620   INPUT LINE #20,Textbuff$ : Textbuff$=LEFT$(Textbuff$,LEN(Textbuff$)-1)
  1224. 2625   ON ERROR GOTO 
  1225. 2630   Sp=PEEK2(PEEK2(65500)+4)-1
  1226. 2635   IF LEN(Textbuff$)<=Sp THEN St$=Textbuff$ : Textbuff$='' ELSE St$=LEFT$(Textbuff$,Sp) : Textbuff$=RIGHT$(Textbuff$,Sp+1)
  1227. 2640   RETURN St$
  1228. 2645   S{nd=0 : CLOSE 20
  1229. 2650   RETURN ''
  1230. 2655 FNEND 
  1231. 2660 DEF FNF|rbindelse
  1232. 2860   OPEN V24def$ AS FILE V24
  1233. 2870   ; CHR$(12);
  1234. 2880   RETURN -1
  1235. 2890   ! *** F|re RETURN kan kod l{ggas upp f|r uppringning om man har ett
  1236. 2900   ! *** modem som klarar detta. Exempel p} s}dan kod finns i programmet
  1237. 2910   ! *** KERM.BAS f|r TGC modem. Detta program finns i programbanken.
  1238. 2920   ; 'Kan ej |ppna V24:an! Errcode: ' ERRCODE : STOP 
  1239. 2930 FNEND 
  1240. 2940 DEF FNClr
  1241. 2950   ; CUR(1,0) FNF$(GYEL) STRING$(80,127);
  1242. 2960   ; CUR(21,0) FNF$(GYEL) STRING$(80,127);
  1243. 2970   ; CUR(0,22) SPACE$(36)
  1244. 2980   ; Huvud$
  1245. 2990   ; CUR(2,0);
  1246. 3000   RETURN 0
  1247. 3010 FNEND 
  1248. 3020 DEF FNF$(F{rg$)
  1249. 3030   IF Mtyp=0 RETURN F{rg$ ELSE RETURN ''
  1250. 3050 FNEND 
  1251. 3060 DEF FNSpbort$(In$) LOCAL A$=100,I,A
  1252. 3070   I=1
  1253. 3080   WHILE I<=LEN(In$)
  1254. 3090     A=ASCII(RIGHT$(In$,I))
  1255. 3100     IF A<>32 A$=A$+CHR$(A)
  1256. 3110     I=I+1
  1257. 3120   WEND 
  1258. 3400   RETURN A$
  1259. 3410 FNEND 
  1260. 3420 DEF FNFeltext(In$)
  1261. 3430   ; CUR(21,0) CHR$(7) FNF$(RED+NWBG+WHT+FLSH) '<' FNF$(NRML+STDY) In$ FNF$(FLSH) '>' SPACE$(78-LEN(In$)) FNF$(CHR$(128)+NWBG+WHT);
  1262. 3440   RETURN 0
  1263. 3450 FNEND 
  1264. 3460 DEF FNFel(In$) LOCAL A$=1
  1265. 3470   Z=FNFeltext(In$+'  Kvittera med CE ')
  1266. 3480   ; CUR(21,LEN(In$)+22); : A$=FNTkn$(RED)
  1267. 3490   WHILE A$<>CHR$(24)
  1268. 3500     A$=FNTkn$(RED)
  1269. 3510   WEND 
  1270. 3520   ; CUR(21,0) FNF$(GYEL) STRING$(80,127)
  1271. 3530   RETURN 0
  1272. 3540 FNEND 
  1273. 3550 DEF FNTkn$(F{rg$) LOCAL B$=1,Rad,Kol
  1274. 3560   Rad=PEEK(Cu+1) : Kol=PEEK(Cu)
  1275. 3570   Z=FNCursor
  1276. 3580   IF Mtyp=0 ; F{rg$ CHR$(PEEK(30720+Rad*80+Kol));
  1277. 3610   ; CUR(0,61) FNF$(CYA) TIME$
  1278. 3620   WHILE SYS(5)=0 : ; CUR(0,61) FNF$(CYA) TIME$ : WEND 
  1279. 3630   GET B$ : IF NOT Dtc2 IF ASCII(B$)=(130 AND Key99 OR 215 AND NOT Key99) THEN Z=FNDump
  1280. 3640   POKE Cu,Kol,Rad
  1281. 3650   RETURN B$
  1282. 3660 FNEND 
  1283. 3670 DEF FNPropen(Fil)
  1284. 3680   WHILE -1
  1285. 3690     ON ERROR GOTO 3720
  1286. 3700     PREPARE Printer$ AS FILE Fil
  1287. 3710     RETURN 0
  1288. 3720     Z=FNFel('Skrivaren ej p}slagen, kontrollera !  ')
  1289. 3730   WEND 
  1290. 3740 FNEND 
  1291. 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
  1292. 3760   Ut$=In$ : Pos=Inpos : Fval=Pa AND 15 : Z=FNKom99(9)
  1293. 3770   WHILE -1
  1294. 3780     ; CUR(Rad,Kol) FNF$(F{rg$) Ut$ STRING$(Max-LEN(Ut$),32-63*(Mtyp<>0)) CHR$(139) ' ';
  1295. 3790     IF Pos>Max Pos=Max
  1296. 3800     L{ngd=LEN(Ut$)
  1297. 3810     ; CUR(Rad,Kol+Pos-1);
  1298. 3820     A=ASCII(FNTkn$(F{rg$+CHR$(138))) : IF INSTR(1,CHR$(3,4,27,192,129),CHR$(A)) RETURN CHR$(27)
  1299. 3830     Z=INSTR(1,CHR$(128,161,163,177,179,172,164,127),CHR$(A))
  1300. 3840     IF Z A=ASCII(RIGHT$(CHR$(193,196,198,212,214,8,9,194),Z))
  1301. 3850     IF A=24 Ut$='' : Pos=1
  1302. 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$
  1303. 3870     IF A=8 IF Pos>1 Pos=Pos-1 ELSE IF Pa>15 Z=FNKom99(9) : RETURN Ut$
  1304. 3880     IF A=9 IF Pos<Max Pos=Pos+1 ELSE IF Pa>15 Z=FNKom99(9) : RETURN Ut$
  1305. 3890     WHILE A=194
  1306. 3900       IF Pos<=L{ngd Ut$=LEFT$(Ut$+' ',Pos-1)+RIGHT$(Ut$,Pos+1)
  1307. 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
  1308. 3920       A=0
  1309. 3930     WEND 
  1310. 3940     IF A=132 Ins=(Ins=0) : Z=FNKom99(9-128*Ins)
  1311. 3950     IF Fval=3 A=A AND 223
  1312. 3960     IF A=195 AND Pos<=L{ngd Ut$=LEFT$(Ut$+' ',Pos-1)+' '+RIGHT$(Ut$,Pos) : IF LEN(Ut$)>Max Ut$=LEFT$(Ut$,Max)
  1313. 3970     RESTORE 4060
  1314. 3980     WHILE O8<=Fval : READ M1$,M2$,M3$ : O8=O8+1 : WEND 
  1315. 3990     WHILE ((A>=ASCII(M1$) AND A<=ASCII(M2$)) OR INSTR(1,M3$,CHR$(A))>0) AND Pos<=Max
  1316. 4000       IF L{ngd<Pos Ut$=Ut$+SPACE$(Pos-L{ngd)
  1317. 4010       Ut$=LEFT$(Ut$,Pos-1)+CHR$(A)+RIGHT$(Ut$,Pos-( NOT Ins))
  1318. 4020       IF LEN(Ut$)>Max Ut$=LEFT$(Ut$,Max)
  1319. 4030       Pos=Pos+1 : A=0
  1320. 4040     WEND 
  1321. 4050   WEND 
  1322. 4060   DATA 0,9,' ',0,9,' .-',' ',~,' ',A,],' ',J,J,JjNn,A,],A
  1323. 4070 FNEND 
  1324. 4080 DEF FNKom99(K)
  1325. 4090   IF Key99 OUT 34,K
  1326. 4100   RETURN 0
  1327. 4110 FNEND 
  1328. 4210 DEF FNDump LOCAL Rad$=0,I
  1329. 4220   Z=FNPropen(8)
  1330. 4230   ; #8,CHR$(10,10,10)
  1331. 4240   I=30720
  1332. 4250   WHILE I<32640
  1333. 4260     POKE VAROOT(Rad$),80,0,I,SWAP%(I),80,0 : ; #8 Rad$
  1334. 4270     I=I+80
  1335. 4280   WEND 
  1336. 4290   CLOSE 8 : RETURN 0
  1337. 4300 FNEND 
  1338. 4400 DEF FNEsc LOCAL Tkn$=1,Tkn
  1339. 4410   GET Tkn$
  1340. 4420   Tkn=ASCII(Tkn$)
  1341. 4430   IF Tkn<>192 AND Tkn<>199 RETURN 0
  1342. 4440   ; : ; FNF$(RED) '\verf|ringen av '; : IF Tkn=192 ; 'aktuell fil avbrytes!' : RETURN 1
  1343. 4450   ; 'alla filer avbrytes!' : RETURN 2
  1344. 4460 FNEND 
  1345. 4500 DEF FNKillfile(Lu,File$)
  1346. 4510   ON ERROR GOTO 4540
  1347. 4520   CLOSE Lu
  1348. 4530   KILL File$ : RETURN 0
  1349. 4540   ; CHR$(13,10) FNF$(RED) 'Kan ej ta bort inkommande fil p} grund av fel: ' ERRCODE : RETURN 0
  1350. 4550 FNEND 
  1351. 4600 DEF FNClose(Lu,File$)
  1352. 4610   ON ERROR GOTO 4630
  1353. 4620   CLOSE Lu : RETURN 0
  1354. 4630   ; CHR$(13,10) FNF$(RED) 'Kan ej st{nga ' File$ ' p} grund av fel: ' ERRCODE : RETURN 0
  1355. 4640 FNEND 
  1356. 10000 DEF FNReadsec(Disk,Sec) LOCAL D
  1357. 10010   POKE SYS(10)-511,Disk
  1358. 10020   D=CALL(24678,Sec)
  1359. 10030   IF PEEK(SYS(10)-491) RETURN -1
  1360. 10040   RETURN 0
  1361. 10050 FNEND 
  1362. 10060 DEF FNDiscerror$ LOCAL I
  1363. 10070   RESTORE 10140
  1364. 10080   WHILE I<4
  1365. 10090     READ Kod,Text$
  1366. 10100     IF (PEEK(SYS(10)-491) AND Kod) RETURN Text$
  1367. 10110     I=I+1
  1368. 10120   WEND 
  1369. 10130   RETURN 'ok{nd typ av diskfel!'
  1370. 10140   DATA 8, 'checksummafel!
  1371. 10150   DATA 16, 'd}lig disk!
  1372. 10160   DATA 64, 'skivan skrivskyddad!
  1373. 10170   DATA 128,'luckan |ppen!
  1374. 10180 FNEND 
  1375. 10190 DEF FNEnhcs(Drive$) LOCAL Adrenhl,Enh$=4,Dselect
  1376. 10200   Adrenhl=PEEK2(SYS(10)+123) : IF Drive$='' RETURN PEEK(PEEK2(24683))
  1377. 10210   WHILE Adrenhl<>0
  1378. 10220     Enh$=CHR$(PEEK(Adrenhl+2),PEEK(Adrenhl+3),PEEK(Adrenhl+4),58)
  1379. 10230     IF Enh$='CON:' OR Enh$='NUL:' OR Enh$='PR:' OR Enh$='V24:' Enh$=''
  1380. 10240     Dselect=PEEK(Adrenhl+7)
  1381. 10250     IF Enh$=Drive$ RETURN Dselect
  1382. 10260     Adrenhl=PEEK2(Adrenhl)
  1383. 10270   WEND 
  1384. 10280   RETURN -1
  1385. 10290 FNEND 
  1386. 10300 DEF FNKollenh(Ix) LOCAL Kolon,Enh$=4,Ec
  1387. 10310   Enh$(Ix)=''
  1388. 10320   Kolon=INSTR(1,File$(Ix),':') : IF Kolon=0 RETURN 0
  1389. 10330   Enh$=LEFT$(File$(Ix),Kolon) : Ec=FNEnhcs(Enh$)
  1390. 10340   IF Ec=-1 OR Ec=30 AND PEEK2(65527)=0 RETURN -1
  1391. 10350   Enh$(Ix)=Enh$ : File$(Ix)=RIGHT$(File$(Ix),Kolon+1)
  1392. 10360   Enh=Ec : RETURN Ec
  1393. 10370 FNEND 
  1394. 10380 DEF FNIx(Fd) LOCAL P
  1395. 10390   P=PEEK2(65344)
  1396. 10400   WHILE PEEK(P+2)<>Fd AND P<>0
  1397. 10410     P=PEEK2(P)
  1398. 10420   WEND 
  1399. 10430   RETURN P
  1400. 10440 FNEND 
  1401. 10450 DEF FNMaskabit7(Maska,Fd) LOCAL Ix
  1402. 10455   IF Oldprom RETURN 0
  1403. 10460   Ix=FNIx(Fd) : IF Ix=0 ; 'Stopp, filen ej |ppnad!' : STOP 
  1404. 10470   IF Maska POKE PEEK2(Ix+18)+10,((PEEK(PEEK2(Ix+18)+10)-1) OR 4)+1 ELSE POKE PEEK2(Ix+18)+10,((PEEK(PEEK2(Ix+18)+10)-1) AND 251)+1
  1405. 10480   RETURN 0
  1406. 10490 FNEND 
  1407. 10500 DEF FNDisplaykermit
  1408. 10520   ; CHR$(12) CUR(1,0) FNF$(GYEL) STRING$(80,127) Huvud$
  1409. 10550   RETURN 0
  1410. 10560 FNEND 
  1411. 20040 DEF FNSw(Wc$,Im,Synk,Mqctl,Mchkt,Mt) LOCAL T$=1,S$=1,Ib$=100,Ib,Ub$=101,Ub,Tb$=256,Tb,Npad,Padc,Eol,Time,Chkt,Qctl,Qbin,Rept,Maxl,N,Eof,Fs,F$=40,D,F
  1412. 20050   Npad=0 : Padc=0 : Eol=13 : Time=8 : Chkt=Mchkt : Rept=126
  1413. 20060   Ib$=SPACE$(100) : Ib=VARPTR(Ib$) : Tb=VARPTR(Tb$) : Ub=VARPTR(Ub$)
  1414. 20070   POKE VAROOT(Ub$),100,0,Ub+1,SWAP%(Ub+1)
  1415. 20080   S$='S' : F=1
  1416. 20090   N=0
  1417. 20100   IF INSTR(1,Wc$,'*') OR INSTR(1,Wc$,'?') LET Fs=-1 ELSE LET Fs=0
  1418. 20110   F$=Wc$
  1419. 20120   WHILE Fs
  1420. 20140     Sector=FNOpendir(Enh$(1)) : IF Sector<0 GOTO 20766
  1421. 20150     WHILE -1
  1422. 20155       WHILE -1
  1423. 20160         F$=FNReaddir$ : IF Ec AND Ec<>38 GOTO 20766
  1424. 20165         IF F$='' GOTO 20765
  1425. 20170         WHILE MID$(F$,14,1)='D' OR FNWild(Wc$,FNPackfilnamn$(LEFT$(F$,12)))=0
  1426. 20180           F$=FNReaddir$ : IF Ec AND Ec<>38 GOTO 20766
  1427. 20182           IF F$='' GOTO 20765
  1428. 20186         WEND 
  1429. 20190         F$=FNPackfilnamn$(LEFT$(F$,12))
  1430. 20195         ; : ; FNF$(CYA) 'S{nder:';
  1431. 20200       IF FNOpen(Enh$(1),F$,Inlu,1) WEND 
  1432. 20210     IF 0 WEND 
  1433. 20220   IF 0 WEND 
  1434. 20222   WHILE NOT Fs
  1435. 20223     ; : ; FNF$(CYA) 'S{nder:';
  1436. 20225     Ec=FNOpen(Enh$(F),File$(F),Inlu,1) : F$=File$(F) : Oms{ndning=0
  1437. 20228     IF Ec RETURN FNSendpack('E','Fel nr '+NUM$(Ec)+' under |ppnignen av '+F$+'!',1,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1438. 20229   IF 0 WEND 
  1439. 20230   WHILE -1
  1440. 20240     WHILE S$='S'
  1441. 20250       Ub$=CHR$(FNChar(94),FNChar(Time),FNChar(Npad),FNCtl(Padc),FNChar(Eol),Mqctl)+CHR$(Mqbin)+NUM$(Mchkt)+CHR$(Rept)
  1442. 20260       T$=FNSendbuff$(N,'S',Ub$,Ib,Synk,Npad,Padc,Eol,Mt,Time,1,V24)
  1443. 20270       WHILE T$='Y'
  1444. 20280         Maxl=FNUnchar(PEEK(Ib+2)) : Time=FNUnchar(PEEK(Ib+3))
  1445. 20290         Npad=FNUnchar(PEEK(Ib+4)) : Padc=FNCtl(PEEK(Ib+5))
  1446. 20300         Eol=FNUnchar(PEEK(Ib+6)) : Qctl=PEEK(Ib+7)
  1447. 20310         Qbin=PEEK(Ib+8) : IF Qbin=89 Qbin=Mqbin : IF Qbin=89 Qbin=0
  1448. 20315         IF Qbin<33 OR Qbin>62 AND Qbin<96 OR Qbin>126 Qbin=0
  1449. 20320         IF Mchkt<>(PEEK(Ib+9)-48) Chkt=1 ELSE Chkt=Mchkt
  1450. 20330         IF PEEK(Ib+10)<>Rept Rept=0
  1451. 20340       IF 0 WEND 
  1452. 20350       N=(N+1) AND 63
  1453. 20360       IF T$='Y' S$='F' ELSE S$=T$
  1454. 20370     WEND 
  1455. 20380     WHILE S$='F'
  1456. 20390       T$=FNSendbuff$(N,'F',F$,Ib,Synk,Npad,Padc,Eol,Mt,Time,Chkt,V24)
  1457. 20400       IF INSTR(1,'NY',T$) S$='D' ELSE S$=T$
  1458. 20410       N=(N+1) AND 63
  1459. 20420     WEND 
  1460. 20430     WHILE S$='D'
  1461. 20440       Eof=FNFileread(Tb,Im,Inlu)
  1462. 20450       WHILE Eof=0
  1463. 20460         POKE Ub,1 : WHILE FNPackbuff(Ub,Maxl-Chkt,Tb,Mqctl,Qbin,Rept) AND Eof=0 : Eof=FNFileread(Tb,Im,Inlu) : WEND 
  1464. 20465         Paket=Paket+1 : ; CUR(PEEK(Cu+1),38); : ; USING '#####' Paket;
  1465. 20470         POKE VAROOT(Ub$)+4,PEEK(Ub)-1,0 : T$=FNSendbuff$(N,'D',Ub$,Ib,Synk,Npad,Padc,Eol,Mt,Time,Chkt,V24)
  1466. 20480         N=(N+1) AND 63
  1467. 20483         IF PEEK(Ib+1)>2+Chkt AND PEEK(Ib+2)=88 Eof=1
  1468. 20484         IF PEEK(Ib+1)>2+Chkt AND PEEK(Ib+2)=90 Eof=1 : LET Fs=0 : F=Nfile+1
  1469. 20485         IF SYS(5) D=FNEsc : IF D=1 Eof=1 ELSE IF D=2 Eof=1 : LET Fs=0 : F=Nfile+1
  1470. 20490       IF T$='Y' WEND 
  1471. 20500       IF Eof S$='Z' ELSE S$=T$
  1472. 20510     WEND 
  1473. 20520     WHILE S$='Z'
  1474. 20530       IF Eof=38 OR Eof=34 Ub$='' ELSE Ub$='D'
  1475. 20540       Dummy=FNClose(Inlu,F$)
  1476. 20550       T$=FNSendbuff$(N,'Z',Ub$,Ib,Synk,Npad,Padc,Eol,Mt,Time,Chkt,V24)
  1477. 20560       IF T$='Y' S$='B' ELSE S$=T$
  1478. 20570       N=(N+1) AND 63
  1479. 20575       IF Eof<>34 AND Eof<>38 AND Eof<>1 RETURN FNSendpack('E','Fel nr '+NUM$(Eof)+' vid l{sning av '+F$+'!',N,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1480. 20580     WEND 
  1481. 20590     WHILE S$='B'
  1482. 20595       WHILE Fs
  1483. 20600         F$=FNReaddir$ : IF Ec AND Ec<>38 GOTO 20767
  1484. 20610         WHILE F$<>''
  1485. 20620           WHILE MID$(F$,14,1)='D' OR FNWild(Wc$,FNPackfilnamn$(LEFT$(F$,12)))=0
  1486. 20630             F$=FNReaddir$ : IF Ec AND Ec<>38 GOTO 20767
  1487. 20631           IF F$<>'' WEND 
  1488. 20633           WHILE F$<>''
  1489. 20635             F$=FNPackfilnamn$(LEFT$(F$,12))
  1490. 20637             ; : ; FNF$(CYA) 'S{nder:';
  1491. 20640             D=FNOpen(Enh$(1),F$,Inlu,1)
  1492. 20655           IF 0 WEND 
  1493. 20660         IF Ec WEND 
  1494. 20670         IF F$<>'' AND Ec=0 S$='F' ELSE S$='C'
  1495. 20675       IF 0 WEND 
  1496. 20676       F=F+1
  1497. 20677       WHILE NOT Fs AND F<=Nfile
  1498. 20678         ; : ; FNF$(CYA) 'S{nder:';
  1499. 20679         Ec=FNOpen(Enh$(F),File$(F),Inlu,1) : F$=File$(F) : S$='F'
  1500. 20680         IF Ec RETURN FNSendpack('E','Fel nr '+NUM$(Ec)+' under |ppningnen av '+F$+'!',N,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1501. 20681       IF 0 WEND 
  1502. 20685       IF NOT Fs AND F>Nfile F$=''
  1503. 20689       WHILE F$='' OR FNDcd
  1504. 20690         T$=FNSendbuff$(N,'B','',Ib,Synk,Npad,Padc,Eol,Mt,Time,Chkt,V24)
  1505. 20700         N=(N+1) AND 63
  1506. 20710         IF T$='Y' S$='C' ELSE S$=T$
  1507. 20720       IF 0 WEND 
  1508. 20730     WEND 
  1509. 20732     IF S$='e' RETURN -2
  1510. 20733     IF S$='E' RETURN FNFel(MID$(Ib$,3,PEEK(Ib+1)-2-Chkt))-2
  1511. 20740     IF S$='C' Ec=0 : RETURN 0
  1512. 20750     IF INSTR(1,'SFDZBC',S$)=0 RETURN FNSendpack('E','OK[ND pakettyp: '+S$+'!!!',N,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1513. 20760   WEND 
  1514. 20765   RETURN FNFel(Wc$+' ger ej tr{ff p} n}gon fil!')-2
  1515. 20766   RETURN FNFel('Kan ej l{sa '+Enh$(1)+', '+FNDiscerror$)-2
  1516. 20767   RETURN FNSendpack('E','Kan ej l{sa '+Enh$(1)+', '+FNDiscerror$,1,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1517. 20770 FNEND 
  1518. 21040 DEF FNRe(Im,Synk,Mt) LOCAL N,S$=1,T$=1,Ib$=100,Ib,Ub$=50,Buff$=254,Buff,Maxl,Time,Npad,Padc,Eol,Qctl,Qbin,Chkt,Rept,Fo$=20,Fl$=12,Wferr,F,En$=4,D
  1519. 21050   Maxl=94 : Time=40 : Npad=0 : Padc=0 : Eol=13 : Qctl=0 : Chkt=1 : Rept=0
  1520. 21055   Wferr=0
  1521. 21060   Ib=VARPTR(Ib$) : POKE VAROOT(Ib$)+4,100,0
  1522. 21061   Buff=VARPTR(Buff$)
  1523. 21070   N=0 : F=0
  1524. 21072   T$=' '
  1525. 21080   WHILE -1
  1526. 21090     S$=FNRpack$(Ib,N,Synk,Time,Mt,Chkt,Npad,Padc,Eol,V24)
  1527. 21092     WHILE Wferr
  1528. 21094       Dummy=FNKillfile(Outlu,En$+Fl$)
  1529. 21096       RETURN FNSendpack('E','Fel vid skrivning p} filen '+En$+Fl$+'. Fel nr '+NUM$(Wferr)+'.',N,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1530. 21098     WEND 
  1531. 21100     WHILE S$='S'
  1532. 21110       IF (PEEK(Ib)<>N AND PEEK(Ib)<>((N-1) AND 63)) OR INSTR(1,' S',T$)=0 RETURN FNSendpack('E','Send-init ???',PEEK(Ib),1,Synk,Npad,Padc,Eol,V24)-2
  1533. 21120       WHILE S$='S'
  1534. 21130         Maxl=FNUnchar(PEEK(Ib+2)) : Time=FNUnchar(PEEK(Ib+3))
  1535. 21140         Npad=FNUnchar(PEEK(Ib+4)) : Padc=FNCtl(PEEK(Ib+5))
  1536. 21150         Eol=FNUnchar(PEEK(Ib+6)) : Qctl=PEEK(Ib+7)
  1537. 21160         IF PEEK(Ib+1)<8 Qbin=0 ELSE Qbin=PEEK(Ib+8) : IF Qbin=89 Qbin=Mqbin
  1538. 21165         IF Qbin<33 OR Qbin>62 AND Qbin<96 OR Qbin>126 THEN Qbin=0
  1539. 21170         IF PEEK(Ib+1)<9 Chkt=1 ELSE Chkt=PEEK(Ib+9)-48 : IF Chkt<>2 Chkt=1
  1540. 21180         IF PEEK(Ib+1)<10 Rept=0 ELSE Rept=PEEK(Ib+10) : IF Rept<33 OR Rept>62 AND Rept<96 OR Rept>126 Rept=0
  1541. 21190         Ub$=CHR$(FNChar(75),FNChar(8),FNChar(0),FNCtl(0),FNChar(13),Qctl,Qbin OR 78 AND Qbin=0)+NUM$(Chkt)
  1542. 21195         IF Rept THEN Ub$=Ub$+CHR$(Rept) ELSE Ub$=Ub$+' '
  1543. 21200         D=FNSendpack('Y',Ub$,PEEK(Ib),1,Synk,Npad,Padc,Eol,V24)
  1544. 21205         N=((PEEK(Ib)+1) AND 63)
  1545. 21210       IF 0 WEND 
  1546. 21220     IF 0 WEND 
  1547. 21230     WHILE S$='F'
  1548. 21240       IF INSTR(1,'SZF',T$)=0 RETURN FNSendpack('E','Fil-huvud ???',N,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1549. 21241       IF T$='F' AND Fo$<>FNVersal$(MID$(Ib$,3,PEEK(Ib+1)-2-Chkt)) RETURN FNSendpack('E','Tv} fil-huvuden ???',N,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1550. 21250       WHILE S$='F'
  1551. 21260         Fo$=FNVersal$(MID$(Ib$,3,PEEK(Ib+1)-2-Chkt)) : Fl$=''
  1552. 21270         D=1 : WHILE D<=LEN(Fo$)
  1553. 21280           WHILE (LEN(Fl$)<8 AND INSTR(1,Fl$,'.')=0) OR (LEN(Fl$)-INSTR(1,Fl$,'.'))<3
  1554. 21290             IF INSTR(1,'0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ][\',MID$(Fo$,D,1))<>0 Fl$=Fl$+MID$(Fo$,D,1)
  1555. 21300           IF 0 WEND 
  1556. 21310           IF MID$(Fo$,D,1)='.' Fl$=Fl$+'.'
  1557. 21320         D=D+1 : WEND 
  1558. 21325         En$='' : F=F+1 : IF F<=20 IF F<=Nfile AND File$(F)<>'' Fl$=File$(F) : En$=Enh$(F)
  1559. 21327         ; : ; FNF$(CYA) 'Mottar:'; : Radpos=0 : Oms{ndning=0
  1560. 21330         Ec=FNOpen(En$,Fl$,Outlu,2) : IF Ec RETURN FNSendpack('E','Kan ej skapa '+En$+Fl$+', fel nr '+NUM$(Ec)+'!',N,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1561. 21510         IF S$='F' D=FNSendpack('Y','',N,Chkt,Synk,Npad,Padc,Eol,V24) : N=((N+1) AND 63)
  1562. 21520       IF 0 WEND 
  1563. 21521       POKE Buff,1
  1564. 21530     IF 0 WEND 
  1565. 21600     WHILE S$='D'
  1566. 21605       D=FNSendpack('Y',Esc$,N,Chkt,Synk,Npad,Padc,Eol,V24) : N=((N+1) AND 63)
  1567. 21610       POKE Ib,2
  1568. 21615       IF Esc$='' Paket=Paket+1 : ; CUR(PEEK(Cu+1),38); : ; USING '#####' Paket;
  1569. 21620       WHILE FNUnpbuff(Ib,PEEK(Ib+1)-1-Chkt,Buff,253,Qctl,Qbin,Rept)<=0 : Ec=FNFilewrite(Buff,Im,Outlu) : IF Ec Wferr=Ec ELSE WEND 
  1570. 21630       Esc$='' : IF SYS(5) Dummy=FNEsc : IF Dummy=1 Esc$='X' ELSE IF Dummy=2 Esc$='Z'
  1571. 21640     IF 0 WEND 
  1572. 21700     WHILE S$='Z'
  1573. 21705       IF PEEK(Buff)>1 Ec=FNFilewrite(Buff,Im,Outlu) : IF Ec Wferr=Ec
  1574. 21706       WHILE S$='Z' AND Wferr=0
  1575. 21710         IF (PEEK(Ib+1)>=3+Chkt AND MID$(Ib$,3,PEEK(Ib+1)-2-Chkt)='D') OR Esc$='X' OR Esc$='Z' D=FNKillfile(Outlu,En$+Fl$) ELSE D=FNClose(Outlu,En$+Fl$)
  1576. 21720         D=FNSendpack('Y','',N,Chkt,Synk,Npad,Padc,Eol,V24) : N=((N+1) AND 63)
  1577. 21722       IF 0 WEND 
  1578. 21730     IF 0 WEND 
  1579. 21740     WHILE S$='B'
  1580. 21741       D=FNSendpack('Y','',N,Chkt,Synk,Npad,Padc,Eol,V24) : N=((N+1) AND 63)
  1581. 21750       Ec=0 : RETURN 0
  1582. 21760     IF 0 WEND 
  1583. 21762     IF S$='e' RETURN -2
  1584. 21763     IF S$='E' RETURN FNFel(MID$(Ib$,3,PEEK(Ib+1)-2-Chkt))-2
  1585. 21770     IF INSTR(1,'SFDZB',S$)=0 RETURN FNSendpack('E','OK[ND pakettyp: '+S$+'!!!',N,Chkt,Synk,Npad,Padc,Eol,V24)-2
  1586. 21810     T$=S$
  1587. 25000   WEND 
  1588. 25010 FNEND 
  1589. 30010 DEF FNRpack$(Buff,N,Synk,Time,Mtrye,Check,Npad,Padc,Eol,Lu) LOCAL Maxtrye,T$=1,D
  1590. 30020   Maxtrye=Mtrye
  1591. 30030   WHILE Maxtrye
  1592. 30040     T$=FNGetpack$(Buff,Synk,Time,Check,Lu)
  1593. 30045     IF T$='E' RETURN 'E'
  1594. 30050     IF INSTR(1,' T',T$)=0 AND (PEEK(Buff)=N) RETURN T$
  1595. 30060     IF PEEK(Buff)=((N+1) AND 63) D=FNSendpack('E','Jag har tappat bort ett paket!!!',N,Check,Synk,Npad,Padc,Eol,Lu) : RETURN 'e'
  1596. 30065     IF T$='D' Oms{ndning=Oms{ndning+1 : ; CUR(PEEK(Cu+1),50); : ; USING '#####' Oms{ndning;
  1597. 30070     Maxtrye=Maxtrye-1
  1598. 30080     D=FNSendpack('N','',N,Check,Synk,Npad,Padc,Eol,Lu)
  1599. 30090   WEND 
  1600. 30100   D=FNSendpack('E','Avbryter! F|r m}nga oms{ndningar!!!',N,Check,Synk,Npad,Padc,Eol,Lu)
  1601. 30110   RETURN 'e'
  1602. 30120 FNEND 
  1603. 40030 DEF FNSendbuff$(N,Tp$,Buff$,Inbuff,Synk,Npad,Padc,Eol,Mt,Time,Check,Lu) LOCAL Nt,D,S$=1
  1604. 40040   Nt=Mt
  1605. 40060   WHILE Nt
  1606. 40065     D=FNTom(Lu)
  1607. 40070     D=FNSendpack(Tp$,Buff$,N,Check,Synk,Npad,Padc,Eol,Lu)
  1608. 40080     S$=FNGetpack$(Inbuff,Synk,Time,Check,Lu)
  1609. 40082     IF S$='E' RETURN 'E'
  1610. 40085     IF Tp$='D' AND Nt<>Mt Oms{ndning=Oms{ndning+1 : ; CUR(PEEK(Cu+1),50); : ; USING '#####' Oms{ndning;
  1611. 40090     IF S$='N' AND N IF ((PEEK(Inbuff)-1) AND 63)=N RETURN 'Y'
  1612. 40100     IF S$='Y' IF PEEK(Inbuff)=N RETURN 'Y'
  1613. 40110     IF INSTR(1,' TNY',S$)=0 D=FNSendpack('E','Avbryter! OK[ND pakettyp: '+S$+'!!!',N,Check,Synk,Npad,Padc,Eol,Lu) : RETURN 'e'
  1614. 40120     Nt=Nt-1
  1615. 40130   WEND 
  1616. 40135   D=FNSendpack('E','Avbryter! F|r m}nga oms{ndningar!!!',N,Check,Synk,Npad,Padc,Eol,Lu)
  1617. 40140   RETURN 'e'
  1618. 40150 FNEND 
  1619. 40220 DEF FNFilewrite(Buff,Im,Lu) LOCAL B$=0,Le
  1620. 40230   POKE VAROOT(B$),253,0,Buff+1,SWAP%(Buff+1),253,0
  1621. 40240   Le=PEEK(Buff)-1
  1622. 40250   ON ERROR GOTO 40290
  1623. 40260   IF Im PUT #Lu LEFT$(B$,Le) ELSE ; #Lu FNExpandtab$(LEFT$(B$,Le));
  1624. 40270   POKE Buff,1
  1625. 40280   RETURN 0
  1626. 40290   RETURN ERRCODE
  1627. 40300 FNEND 
  1628. 40380 DEF FNUnpbuff(Inbuff,Inbuffl,Utbuff,Utbuffl,Qctl,Qbin,Rept) LOCAL A$=9
  1629. 40390   A$=CHR$(Inbuff,SWAP%(Inbuff),Inbuffl,Utbuff,SWAP%(Utbuff),Utbuffl,Qctl,Qbin,Rept)
  1630. 40400   RETURN CALL(VARPTR(Pack$),VARPTR(A$))
  1631. 40410 FNEND 
  1632. 40580 DEF FNFileread(Buff,Im,Lu) LOCAL B$=0
  1633. 40590   POKE VAROOT(B$),253,0,Buff+2,SWAP%(Buff+2),253,0
  1634. 40600   ON ERROR GOTO 40640
  1635. 40610   IF Im GET #Lu B$ COUNT 253 ELSE INPUT LINE #Lu B$
  1636. 40620   POKE Buff,2,LEN(B$)+2
  1637. 40630   RETURN 0
  1638. 40640   POKE Buff,2,0 : RETURN ERRCODE
  1639. 40650 FNEND 
  1640. 40730 DEF FNPackbuff(Buff,Buffl,Tmpb,Qctl,Qbin,Rept) LOCAL A$=9
  1641. 40740   A$=CHR$(Buff,SWAP%(Buff),Buffl,Tmpb,SWAP%(Tmpb),0,Qctl,Qbin,Rept)
  1642. 40750   RETURN CALL(VARPTR(Pack$)+163,VARPTR(A$))
  1643. 40760 FNEND 
  1644. 40950 DEF FNTom(Lu) LOCAL D,D$=50
  1645. 40960   D=FNAntalintecken
  1646. 40970   WHILE D
  1647. 40980     IF D>50 D=50
  1648. 40990     GET #Lu D$ COUNT D
  1649. 41000     D=FNAntalintecken
  1650. 41010   WEND 
  1651. 41020   RETURN 0
  1652. 41030 FNEND 
  1653. 41080 DEF FNAntalintecken=PEEK2(V24tkn) 
  1654. 41150 DEF FNGetpack$(Buff,Synk,Time,Check,Lu) LOCAL D,B$=0,T$=1,P,A
  1655. 41160   POKE VAROOT(B$),100,0,Buff,SWAP%(Buff),100,0
  1656. 41170   IF FNAntalintecken=0 IF FNTimeout(Time) RETURN 'T'
  1657. 41180   D=ASCII(FNGchr$(1,Lu)) : IF INSTR(1,CHR$(3,4,26),CHR$(D)) RETURN 'T'
  1658. 41190   WHILE D<>Synk : IF FNAntalintecken=0 IF FNTimeout(Time) RETURN 'T'
  1659. 41200     D=ASCII(FNGchr$(1,Lu)) : IF INSTR(1,CHR$(3,4,26),CHR$(D)) RETURN 'T'
  1660. 41210   WEND 
  1661. 41220   IF FNAntalintecken=0 IF FNTimeout(Time) RETURN 'T'
  1662. 41230   A=FNUnchar(ASCII(FNGchr$(1,Lu))) : P=1
  1663. 41240   WHILE P-2<A
  1664. 41250     D=FNAntalintecken : IF D=0 IF FNTimeout(Time) RETURN 'T' ELSE D=FNAntalintecken
  1665. 41260     IF D>A-P+2 D=A-P+2
  1666. 41270     MID$(B$,P,D)=FNGchr$(D,Lu) : P=P+D
  1667. 41280   WEND 
  1668. 41290   IF MID$(B$,2,1)<>'S' IF MID$(B$,A-Check+1,Check)<>FNCsum$(CHR$(FNChar(A))+LEFT$(B$,A-Check),Check) RETURN ' '
  1669. 41291   IF MID$(B$,2,1)='S' IF MID$(B$,A,1)<>FNCsum$(CHR$(FNChar(A))+LEFT$(B$,A-1),1) RETURN ' '
  1670. 41300   T$=MID$(B$,2,1)
  1671. 41310   POKE Buff,FNUnchar(PEEK(Buff)),A
  1672. 41320   RETURN T$
  1673. 41330 FNEND 
  1674. 41380 DEF FNGchr$(A,Lu) LOCAL B$=100,I
  1675. 41390   GET #Lu B$ COUNT A
  1676. 41391   IF Mqbin<>38 OR Oldprom=0 THEN RETURN B$
  1677. 41392   I=A : WHILE I
  1678. 41396     MID$(B$,I,1)=CHR$(ASCII(MID$(B$,I,1)) AND 127) : I=I-1
  1679. 41398   WEND 
  1680. 41400   RETURN B$
  1681. 41410 FNEND 
  1682. 41460 DEF FNTimeout(T) LOCAL D.
  1683. 41470   D.=T*198.
  1684. 41480   WHILE D.<>0. AND FNAntalintecken=0 : D.=D.-1. : IF FNDcd D.=0. ELSE WEND 
  1685. 41490   RETURN D.=0.
  1686. 41500 FNEND 
  1687. 41550 DEF FNAntaluttecken=PEEK2(V24ut) 
  1688. 41600 DEF FNDcd
  1689. 41610   OUT 65,16 : RETURN (INP(65) AND 8)=0
  1690. 41620 FNEND 
  1691. 41690 DEF FNPutpack(Buff$,Npad,Padc,Lu) LOCAL P,D
  1692. 41700   P=Npad
  1693. 41710   D=FNAntaluttecken
  1694. 41720   WHILE P AND FNDcd=0
  1695. 41730     IF D>P D=P
  1696. 41740     PUT #Lu STRING$(D,Padc)
  1697. 41750     P=P-D : D=FNAntaluttecken
  1698. 41760   WEND 
  1699. 41770   P=1 : WHILE P<=LEN(Buff$) AND FNDcd=0
  1700. 41780     IF D>LEN(Buff$)-P+1 D=LEN(Buff$)-P+1
  1701. 41790     PUT #Lu MID$(Buff$,P,D)
  1702. 41800     P=P+D : D=FNAntaluttecken
  1703. 41810   WEND 
  1704. 41820   RETURN 0
  1705. 41830 FNEND 
  1706. 41880 DEF FNSendpack(T$,Buff$,N,Check,Synk,Npad,Padc,Eol,Lu) LOCAL D,B$=100
  1707. 41890   B$=CHR$(Synk,FNChar(LEN(Buff$)+Check+2),FNChar(N))+T$+Buff$
  1708. 41900   D=FNPutpack(B$+FNCsum$(RIGHT$(B$,2),Check)+CHR$(Eol),Npad,Padc,Lu)
  1709. 41910   IF T$='E' RETURN FNFel(Buff$) ELSE RETURN 0
  1710. 41920 FNEND 
  1711. 41960 DEF FNCtl(T)=T XOR 64 
  1712. 41970 DEF FNChar(T)=T+32 
  1713. 41980 DEF FNUnchar(T)=T-32 
  1714. 42040 DEF FNCsum$(B$,C) LOCAL Sum
  1715. 42050   IF C<>1 AND C<>2 THEN ; 'Ej implementerad typ av checksumma' : STOP 
  1716. 42060   Sum=CALL(VARPTR(Csum$),PEEK2(PEEK2(65304)))
  1717. 42070   IF C=1 RETURN CHR$(FNChar(Sum+SWAP%(Sum AND 768) AND 63))
  1718. 42080   RETURN CHR$(FNChar(SWAP%(Sum) AND 63),FNChar(Sum AND 63))
  1719. 42090 FNEND 
  1720. 42460 DEF FNWild(Wc$,St$)
  1721. 42470   IF LEN(St$)=0 IF LEN(Wc$)=0 OR Wc$='*' THEN RETURN -1 ELSE RETURN 0
  1722. 42480   IF LEN(Wc$)=0 THEN RETURN 0
  1723. 42490   IF ASCII(Wc$)=ASCII(St$) RETURN FNWild(RIGHT$(Wc$,2),RIGHT$(St$,2))
  1724. 42500   IF ASCII(Wc$)=63 THEN RETURN FNWild(RIGHT$(Wc$,2),RIGHT$(St$,2))
  1725. 42510   IF ASCII(Wc$)<>42 THEN RETURN 0
  1726. 42520   IF FNWild(RIGHT$(Wc$,2),St$) RETURN -1
  1727. 42530   RETURN FNWild(Wc$,RIGHT$(St$,2))
  1728. 42550 FNEND 
  1729. 42650 DEF FNPackfilnamn$(Fl$) LOCAL F$=12,P
  1730. 42660   F$=Fl$
  1731. 42670   P=INSTR(1,F$,' ')
  1732. 42680   WHILE P : F$=LEFT$(F$,P-1)+RIGHT$(F$,P+1) : P=INSTR(1,F$,' ') : WEND 
  1733. 42690   RETURN F$
  1734. 42700 FNEND 
  1735. 42800 DEF FNExpandtab$(In$) LOCAL I,Sp
  1736. 42810   ON ERROR GOTO 42920
  1737. 42820   Textbuff$=In$ : I=0
  1738. 42830   WHILE I<LEN(Textbuff$)
  1739. 42840     I=I+1 : Radpos=Radpos+1
  1740. 42850     IF ASCII(MID$(Textbuff$,I,1))=10 Radpos=0
  1741. 42860     WHILE ASCII(MID$(Textbuff$,I,1))=9
  1742. 42870       Sp=MOD(Radpos,8) : Sp=8-Sp : IF Sp=8 Sp=0
  1743. 42880       Textbuff$=LEFT$(Textbuff$,I-1)+SPACE$(1+Sp)+RIGHT$(Textbuff$,I+1) : Radpos=Radpos+Sp : I=I+Sp
  1744. 42890     IF 0 WEND 
  1745. 42900   WEND 
  1746. 42910   RETURN Textbuff$
  1747. 42920   Ec=ERRCODE : RETURN ''
  1748. 42930 FNEND 
  1749. 60280 DEF FNOpendir(En$) LOCAL Enhet$=4,Adr,Ufd,Bitmap0$=16,Bitmap1$=16,I
  1750. 60281   Enhet$=En$ : IF Enhet$='' Enhet$=Enh$
  1751. 60282   IF Enh>=0 AND Enh<=3 Enh=PEEK(PEEK2(24683))+Enh
  1752. 60283   IF Enh>=12 AND Enh<=15 Adr=6 ELSE Adr=14
  1753. 60284   IF Enh=30 Enh=PEEK(65529) : Ufd=-1 : Adr=PEEK2(65527)-1
  1754. 60291   Ec=FNReadsec(Enh,Adr) : IF Ec RETURN -1
  1755. 60292   Bitmap0$=MID$(Dosbuff$,240,16) : Adr=Adr+1 : Dirmap$=SPACE$(16)
  1756. 60294   IF Ufd Bitmap1$=STRING$(16,0) ELSE Ec=FNReadsec(Enh,Adr) : IF Ec RETURN -1
  1757. 60296   IF NOT Ufd Bitmap1$=MID$(Dosbuff$,240,16) : Adr=Adr+1
  1758. 60300   WHILE I<16
  1759. 60302     I=I+1
  1760. 60304     MID$(Dirmap$,I,1)=CHR$(ASCII(MID$(Bitmap0$,I,1))-ASCII(MID$(Bitmap1$,I,1)))
  1761. 60306   WEND 
  1762. 60308   Dirrec$='' : IF Enh>=12 AND Enh<=15 AND NOT Ufd Adr=Adr+8
  1763. 60309   RETURN Adr
  1764. 60310 FNEND 
  1765. 60340 DEF FNReaddir$ LOCAL N$=14,A
  1766. 60342   ON ERROR GOTO 60380
  1767. 60343   ! 
  1768. 60344   WHILE LEN(Dirmap$)
  1769. 60346     WHILE LEN(Dirrec$) : N$=MID$(Dirrec$,5,8)+"."+MID$(Dirrec$,13,3)
  1770. 60348       Dirrec$=RIGHT$(Dirrec$,17)
  1771. 60349       IF ASCII(N$)>=48 AND ASCII(N$)<95 GOTO 60356
  1772. 60350     WEND : A=ASCII(Dirmap$) : Dirmap$=RIGHT$(Dirmap$,2)
  1773. 60352     IF A Ec=FNReadsec(Enh,Sector) : IF Ec RETURN -1
  1774. 60353     Dirrec$=Dosbuff$ : Sector=Sector+1
  1775. 60354   WEND : Ec=38 : RETURN ''
  1776. 60355   ! 
  1777. 60356   IF MID$(N$,10,3)='Ufd' N$=LEFT$(N$,8)+'     D'
  1778. 60358   RETURN N$+SPACE$(39-LEN(N$))
  1779. 60359   ! 
  1780. 60380   Ec=ERRCODE : RETURN ''
  1781. 60390 FNEND 
  1782. 60420 DEF FNOpen(Enhet$,File$,Nr,Typ) LOCAL En$=4
  1783. 60430   Paket=0 : Oms{ndning=0
  1784. 60460   ON ERROR GOTO 60490
  1785. 60465   IF Enhet$='' En$=Enh$ ELSE En$=Enhet$
  1786. 60470   OPEN En$+File$ AS FILE Nr
  1787. 60475   ; TAB(9) En$+File$ TAB(30) 'Paket:';
  1788. 60480   RETURN 0
  1789. 60490   IF Typ<>2 Ec=ERRCODE : RETURN Ec
  1790. 60500   IF ERRCODE<>21 Ec=ERRCODE : RETURN Ec
  1791. 60510   ON ERROR GOTO 60540
  1792. 60520   PREPARE En$+File$ AS FILE Nr
  1793. 60525   ; TAB(9) En$+File$ TAB(30) 'Paket:';
  1794. 60530   RETURN 0
  1795. 60540   Ec=ERRCODE : RETURN Ec
  1796. 60550 FNEND 
  1797. 62650 DEF FNVersal$(In$) LOCAL Ut$=100,Pekare,V{rde
  1798. 62660   IF In$='' RETURN ''
  1799. 62670   Pekare=1
  1800. 62680   WHILE Pekare<=LEN(In$)
  1801. 62690     V{rde=ASCII(MID$(In$,Pekare,1))
  1802. 62700     IF V{rde>95 AND V{rde<127 V{rde=V{rde AND 95
  1803. 62710     IF V{rde<128 Ut$=Ut$+CHR$(V{rde)
  1804. 62720     Pekare=Pekare+1
  1805. 62730   WEND 
  1806. 62740   RETURN Ut$
  1807. 62750 FNEND 
  1808. <<< kmain.doc >>>
  1809. Luxor ABC800/ABC802/ABC806 KERMIT
  1810. FACIT DTC/DTC2 KERMIT
  1811.  
  1812.  
  1813. Program:        Bo Kullmar (bk@kullmar.se)
  1814.                 Lars-Goran Goransson (The first two o:s should have double-dots
  1815.                 above them.)
  1816.                 Mikael Lide'n
  1817.                 Kristoffer Eriksson (ske@pkmab.se)
  1818.                 Mikael Johansson
  1819.  
  1820. ABC-Club        All are members of the "ABC-Klubben", Stockholm, Sweden, a
  1821.                 computer club. The name in english, is the ABC-Club.
  1822.  
  1823.                 The ABC-Club was founded 1979 as a user group in Sweden for
  1824.                 the Luxor ABC 8 bits microcomputer.
  1825.  
  1826.                 Today, Nokia has taken over Luxor and Nokia sells IBM
  1827.                 compatible PC:s. Today the club has a lot of members that
  1828.                 use PC:s and other modern computers. The aim of the ABC-Club
  1829.                 is today to be a user group for the old Luxor ABC computer
  1830.                 users and PC users in Sweden.
  1831.  
  1832. Language:       ABC-BASIC II and some routines in assembler
  1833.  
  1834. Documentation:  Bo Kullmar
  1835.  
  1836. Version:        4.11
  1837.  
  1838. Date:           January 4, 1990
  1839.  
  1840.  
  1841. K/KMAIN ABC80X Kermit Capabilities At A Glance:
  1842.  
  1843.   Local operation:                   Yes
  1844.   Remote operation:                  No
  1845.   Transfers text files:              Yes
  1846.   Transfers binary files:            Yes
  1847.   Wildcard send:                     Yes
  1848.   ^X/^Y interruption:                Yes, with Pf1/Pf8
  1849.   Filename collision avoidance:      No
  1850.   Can time out:                      Yes
  1851.   8th-bit prefixing:                 Yes
  1852.   Repeat count prefixing:            Yes
  1853.   Alternate block checks:            Yes
  1854.   Terminal emulation:                Yes, ADM3A
  1855.   Communication settings:            Yes
  1856.   Transmit BREAK:                    No
  1857.   IBM mainframe communication:       No
  1858.   Transaction logging:               No
  1859.   Session logging:                   No
  1860.   Raw transmit:                      Yes
  1861.   Act as server:                     No
  1862.   Talk to server:                    No
  1863.   Advanced server functions:         No
  1864.   Advanced commands for servers:     No
  1865.   Local file management:             No
  1866.   Command/init files:                No
  1867.   Command macros:                    No
  1868.   Attribute packets:                 No
  1869.   Extended-length packets:           No
  1870.   Sliding windows:                   No
  1871.  
  1872.  
  1873. K and KMAIN are two programs that implement the Kermit file transfer protocol
  1874. for the Luxor ABC800 family, i.e. Luxor ABC800, ABC802, ABC806 and Facit
  1875. DTC, DTC 2. The computers uses the Zilog Z80 processor and has a proprietary
  1876. operating system called ABC-DOS or UFD-DOS. The computers had a big market
  1877. share in Sweden before the age of the IBM PC. They were also sold in the other
  1878. nordic countries and to a lesser extent in the rest of Europe.
  1879.  
  1880.  
  1881. Program Invocation
  1882.  
  1883. The K.BAC is the start program and it chains to the main program KMAIN.BAC.
  1884. K.BAC is listable and can easily be changed, though this is not the case with
  1885. KMAIN.BAC because it is squeezed to reduce memory requirements.
  1886.  
  1887. The program can be started with the BASIC command "RUN K" or by using a menu
  1888. program. All the text in the program is in swedish and the program is
  1889. controlled with panels and function keys.
  1890.  
  1891.  
  1892. Parameters
  1893.  
  1894. K/KMAIN first requests some communication parameters. If you just press return
  1895. you will get the default values that can be seen on the screen. These default
  1896. values can easily be changed by altering the start program K.BAC.
  1897.  
  1898. The first request is for the communication speed. 300, 1200/75, 75/1200, 1200,
  1899. 2400, 4800, 9600 and 19200 are supported. Split speed can only be used if
  1900. the computer is switched internally for it and if it doesn't have the oldest
  1901. version of the communication firmware.
  1902.  
  1903. The second request is for the parity. Space, mark, odd and even are supported.
  1904.  
  1905. The last request asks whether 8 or 7 data bits are to be used during Kermit
  1906. file transfer.
  1907.  
  1908. After this the main program is called and the menu is displayed.
  1909.  
  1910.  
  1911. The main menu:
  1912.  
  1913. Pf 1            Terminal mode
  1914. Pf 2            Local echo in terminal mode
  1915. SHIFT Pf 2      Remote echo in terminal mode
  1916. Pf 3            Receive files from remote Kermit
  1917. SHIFT Pf 3      Raw dumping of incoming text to a file
  1918. CTRL  Pf 3      Cancel dumping of incoming text to a file
  1919. Pf 4            Send files to remote Kermit
  1920. SHIFT Pf 4      Raw transmit of a file the remote system
  1921. Pf 5            Change file type for Kermit, text or binary
  1922. Pf 6            Change default device for Kermit files
  1923. Pf 7            Change block check type for Kermit, 1 or 2
  1924. Pf 8            End the program and disconnect the connection
  1925. SHIFT Pf 8      Hard copy to the printer. If keyboard ABC 99 or DTC 2 is used
  1926.                 then the print function is the key that is labeled PRINT
  1927.  
  1928.  
  1929. Terminal Emulation
  1930.  
  1931. When you press Pf 1, your computer acts as a terminal connected to a
  1932. remote computer. The characters you type are sent out through the port,
  1933. and characters that arrive at the port are displayed on your screen, or
  1934. interpreted as a cursor address for the ADM3A terminal.
  1935.  
  1936.  
  1937. The Escape Key, Pf 1
  1938.  
  1939. The escape key, Pf 1, is used to regain the attention of K/KMAIN during
  1940. terminal emulation.  When you press the escape key, Pf 1, K/KMAIN displays
  1941. the menu.
  1942.  
  1943.  
  1944. Installation of K/KMAIN
  1945.  
  1946. If you already have Kermit on your ABC80X, you can use it to obtain new
  1947. versions of K/KMAIN by Kermit file transfer.
  1948.  
  1949. If you do not have Kermit and there is no one from whom you can borrow a
  1950. floppy disk to copy Kermit from, then try to download it on a IBM PC or
  1951. IBM AT.
  1952.  
  1953. The IBM PC/AT program ABCDISK or WABC can format a diskette for ABC800/
  1954. ABC802/ABC806 on an IBM PC or IBM AT with 5.25 " diskettes and copy files
  1955. from PCDOS/MSDOS to the ABC-diskette. ABCDISK and WABC are commercial software
  1956. that is sold in Sweden.
  1957.  
  1958.  
  1959. Program Organization
  1960.  
  1961.  
  1962. The programs are:
  1963.  
  1964.  
  1965. K.BAC           Startup program, semicompiled ABC-BASIC II code
  1966. KMAIN.BAC       Main program, semicompiled ABC-BASIC II code, squeezed
  1967.  
  1968.  
  1969. Sources:
  1970.  
  1971. K.BAS           Startup program, source in a text file
  1972. KMAIN.BAS       Main program, source in a text file
  1973. KERMPACK.ASM    Source for assembler packet routines
  1974. KERMCSUM.ASM    Source for assembler check sum routines
  1975.  
  1976. To change K.BAC, just load it, change it and save it. To change KMAIN, load
  1977. KMAIN.BAS, change it, save it as a ".BAC"-file and squeeze it with the utility
  1978. program SQUEZ.
  1979.  
  1980.  
  1981. Documentation:
  1982.  
  1983. KMAIN.DOC       This text
  1984. <<< kmain.hex >>>
  1985. 8F006100DA444C03000036002202E1270404A71C8611860F8614DDB88601EDCEC6048016
  1986. 00CEC51E800200CEC524800200CEC52A800200E1CEC630800A00CEC53E800200EDCEC644
  1987. 801600E1CEC65E800A00CEC56C800200C77801CEC672807E01C72800CEC6F4812E0088C7
  1988. 2700D115E38ABD06DEA9B50400CF00009E03B50A00CF00007F15BE0CDECF01006A0FB510
  1989. 008A06DEA9B516009A7703C11600AFB888C11000DF8ABE09DDB52300DEB51000C11000E0
  1990. 8ABE0ADEA9B52300DEB510009A2A01C11000E18AB888CF00004321B50A0094E0DDD21FB9
  1991. D083CF0100C315B9CC174D6F747461672066696C6572206D6564204B65726D6974C23000
  1992. 9DB994D083CF01009C15B9CC1E4176627279742066696C7C766572667C72696E67656E20
  1993. 6D656420504631B9E6D112CC29417662727974207C766572667C72696E67656E20617620
  1994. 616C6C612066696C6572206D6564205046389DB98606C71400B82CC71E00B888DDB53A00
  1995. DDB54000DEA9CF01004706B54600C14600DEA98AC14C00DEA98A86BE0480F801C16C80C7
  1996. 59008ABE0DDDC15200CF0200D71FB50A00C15800DEE2CF0300A22AB50A00C10A00DD8ABE
  1997. 14CC094F6B2C206B6C617274CF0100C115B50A00C10A00DFA98ABE07C76400B51000C16C
  1998. 80C759008ABE0EDEA9C15200CF02008C1FB50A00DDBE049BD3FEC11000E28AC14000DD8A
  1999. 88BE0CCF0000E512BE05DEB51000C11000E48ABE10DDB540008606C71E00B888DEB51000
  2000. 9A6501C11000E38AB888CF0000E71FB50A0094E0DDD21FB9D083CF01006714B9CC17537B
  2001. 6E642066696C6572206D6564204B65726D69742020C230009DB994D083CF01004014B9CC
  2002. 1E4176627279742066696C7C766572667C72696E67656E206D656420504631B9E6D112CC
  2003. 29417662727974207C766572667C72696E67656E20617620616C6C612066696C6572206D
  2004. 6564205046389DB98606C71400B82CC71E00B888DDB53A00DDB54000DDCF0100EC04B546
  2005. 00C14600DD8AC14600DEA98A86C14C00DEA98A86BE04809700C16C80C759008ABE0DDDC1
  2006. 5200CF0200761EB50A00C14600DD96BE1BCC00C15800DECC0123D10BC16500E2CF060024
  2007. 1FB50A00802300C14600DF9FBE1CDECA016B0080C15800DECC0123D10BC16500E2CF0600
  2008. FF1EB50A00C10A00DD8ABE14CC094F6B2C206B6C617274CF01002A14B50A00C10A00DFA9
  2009. 8ABE07C76400B51000C16C80C759008ABE0EDEA9C15200CF0200F51DB50A00DDBE049B98
  2010. FEC11000E58AC13A00DD8A88BE0CCF0000BC10BE05DEB51000C11000E68ABE08C15800AF
  2011. B55800C11000E78ABE09CF00001E03B63080C11000E88ABE12C16500DE8ABE07DFB56500
  2012. 8A05DEB56500C11000DE8ABE09CF00008A02B50A00C11000C764008ABE0DDEB51000CF00
  2013. 000008B50A00C11000E98ABE09DEA9B51600800C00C11000CF0100EB0BB510009B86FC92
  2014. 8C4B02492246020085F001C20480CC008BBE5394E9D10CB9D081CF01006F12B9CC144475
  2015. 206D7D73746520737461727461206D656420C230809DCC1D4B2C20646574746120677C72
  2016. 73206E75206175746F6D617469736B74219DB9860BC23080CC014B9DB99F8600C70008CD
  2017. C67B00EDCDC68500C70001CDC68F00C71400B0EDCDCA016B00C71400B0E1CDCA019900DE
  2018. CDC6A900C79001CDC6B3008602C6BD00D12CB82CDDB82CE5B82CC70078B82CC70078D114
  2019. B82CDDB82CE5B88602C6C700D12CB82CDDB82CDEB82CDDB82CC7F500B82CDDB82CDEB886
  2020. 02C6D100D12CB82CDDB82CDFB82CDDB82CC7FA00B82CDDB82CDDB88602C7DCFFD12DDF9C
  2021. B82CC6B300D12CB82CC6B300D12CD114B888E6B55200DFB5DB00E0B5E100DEB5650094E9
  2022. D10CB988DDDDD21FD086CF01005F119DCC2D4B2C204B45524D49542D70726F6772616D20
  2023. 667C72204142433830302D73657269656E2C2076657273696F6E209DC25E809DB6E700E7
  2024. D119C740009CD12DE39CB5F100C7DCFFD12DD12DE793BD0DC7DCFFD12DC725009CB5F700
  2025. C7DCFFD12DE39CB5FD00C7DCFFD12DE19CB50301C12A80BE27EDD112CC1B417662727974
  2026. 20696E6D61746E696E67656E206D65642053544F509DB630008A24EDD112CC1A41766272
  2027. 797420696E6D61746E696E67656E206D6564205046319DB63000DEA9B52300DDB55800A0
  2028. DDB894D081CF01008C10B9CC1442656B6C616761722C2068697474617220656A20C23080
  2029. 9DCC284B206F6368206B616E20647B72667C7220696E7465207374617274612070726F67
  2030. 72616D6D6574219DB986088D8C6C00A126670000B601790994EDDDD21FB9D083CF010029
  2031. 10B9CC314B65726D69743A207570706B6F70706C6164202D207465726D696E616C6D6F64
  2032. 202D205046312074696C6C206D656E792EB99A1300C100FFC7B00490B888C100FFDE9CB5
  2033. 00FF9BEAFFA0CF00002805B88D8CE4006A26DF0000B6017A05040094C71100DDD21FB9D0
  2034. 83CF0100B80FB9CC195370656369666963657261207374616E64617264656E686574C230
  2035. 009DB988CC00C71200DDDEDFE1D086C78A00D10C9DCF07000112CF0100990FCF01002A3D
  2036. B600FFC200FFC71B00D10C8BC200FFCC008B86BE06A0C23080B99A6200C200FFCF01008A
  2037. 18DEA98AB888CC0F46656C616B74696720656E68657421CF01001610B50A00CC00C71200
  2038. DDDEDFE1D086C78A00D10C9DCF07009E11CF0100360FCF0100C73CB600FFC200FFC71B00
  2039. D10C8BC200FFCC008B86BE06A0C23080B99B9BFFA0C200FFB98D8C38049924330401F92A
  2040. B60469241A2BA2007909322B0A0088C15800BE12CC0A42696E7B7266696C6572B608FF8A
  2041. 0FCC095465787466696C6572B608FFDDB502FF94E2DDD21FB9D083CF0100A20EB9CC0F53
  2042. 74616E64617264656E6865743A20B9D086CF0100880EB9C23080B994E2C72700D21FB9D0
  2043. 83CF0100740EB9CC0846696C7479703A20B9D086CF0100610EB9C208FFB994E4DDD21FB9
  2044. D083CF01004F0EB9CC0D416E67652066696C6E616D6E3AB93B88C11000E18ABE2A94C728
  2045. 00D11DB9CC1F4C6F6B616C742066696C6E616D6E206265687C76657220656A20616E6765
  2046. 73B988C11000E38AC77060D115DD8AC77060D115E58A86A788BE2F94C72800D11DB9CC24
  2047. 4A6F6B65727465636B656E20222A22206F636820223F22206B616E20616E767B6E646173
  2048. B988CC00E5DDDEDFC74B00D086C78A00D10C9DCF07002F10CF0100C70DCF0100583BB604
  2049. FFC204FFC71B00D10C8BBE05A0DEA9B894E5DDD21FB9D086CF0100850DB9C204FFC74D00
  2050. C204FFD1109FD1129DB99ACD00C100FFDD8ADEC204FFCC013FD311DEC204FFCC012AD311
  2051. 86A788B888C77060D115DD8DC77060D115E58D88BE42A0CC384A6F6B65727465636B656E
  2052. 206B616E20656E6261727420616E767B6E64617320667C7220554644206F6368204C5558
  2053. 2D4E455420444F5321CF0100E40DB888C204FFD110ED96BE1CA0CC12467C72206C7D6E67
  2054. 742066696C6E616D6E21CF0100BF0DB888DECA016B00C204FFB388DECF0100BA16B54C00
  2055. C14C00DEA98ABE19A0CC0F46656C616B74696720656E68657421CF01008B0DB8A0DFA9B8
  2056. 9B30FFC204FFCC008BBE0CDECA019900CC00B3A0DDB888C102FFDE9CB502FFDEC204FFCC
  2057. 012CD311B51E019AC400C11E01B888C204FFC11E01DE9FD20DD110ED96BE1CA0CC12467C
  2058. 72206C7D6E67742066696C6E616D6E21CF0100290DB888C102FFCA016B00C204FFC11E01
  2059. DE9FD20DB388C204FFC11E01DE9CD20EB604FFC102FFCF01000C16B54C00C14C00DEA98A
  2060. BE19A0CC0F46656C616B74696720656E68657421CF0100DD0CB888C102FFDE9CB502FFDE
  2061. C204FFCC012CD311B51E01C102FFC7140096BE2994CC1C4D61782032302066696C6E616D
  2062. 6E206B616E206D6174617320696E21CF01009A0CB8A0DDB89B39FFC204FFD110ED96BE1C
  2063. A0CC12467C72206C7D6E67742066696C6E616D6E21CF0100700CB888C102FFCA016B00C2
  2064. 04FFB388C102FFCF01006715B54C00C14C00DEA98ABE19A0CC0F46656C616B7469672065
  2065. 6E68657421CF0100380CB888C100FFBE06A0C102FFB8855600DEB506FF9A4700C106FFC1
  2066. 02FF99B888C106FFCA01990080CC008BBE0CC106FFCA019900C23080B38604C106FFCA01
  2067. 990080C106FFCA016B00809DB9BBDFB88606DFB888C106FFDE9CB506FF9BB6FF9FA0C102
  2068. FFB89FA0CC0546696C3A20C106FFCA019900809DC106FFCA016B00809DCC182066696E6E
  2069. 7320696E7465202D20617662727974657220219DCF0100990BB88D8CD000E126CB0000B6
  2070. 01912B88C785FFD12DB500FF8602C785FFB82CDDB82CDDB894E9D10CB93B88C13201C700
  2071. 788ABE09C27B00B6BD008A1DC27B00C13201C7FF779FD20EC27B00C13201C700789FD20D
  2072. 9DB6BD008602C1F100B82CC13801B82CC13E01B888C1F700BD128602C1F700B82CC1F700
  2073. D115C7FD0088B888DDB51600CF00007801B50A009A2E00C11600AFB888C1FD00D12DDD8D
  2074. BE09CF0000D000B54B01E2D119C77F0096C13A0086BE09CF00002400B54B019BCFFF8602
  2075. C785FFB82CC100FFB82CC100FFD114B8A0DDB88D8C9600C12C910000B6017A01010088C1
  2076. 3A00BE149423C15200B82CCF00009B08B93BA0DDB88A07860AC600FFBC88C12300AFBE19
  2077. 94C200FFB93B88C14000BE0D9423C71E00B82CC200FFB93B88C200FFD10BC7C0008ABE09
  2078. DEA9B51600A0DDB888C10400AFBE21C200FFD10BC78200C12A8088C7D700C12A80AF8886
  2079. A78ABD08A0CF0000D50FB89423C15200B82CC200FFB93BA0DDB88D8C8D00912C880000B6
  2080. 037901422D5000790988C7DCFFD12DE39CD12DB500FFC100FFC7500096BE07C75000B500
  2081. FF860A23C15200B82CC602FFBCB9C100FFB89A4000C11E80B888C202FFD110B504FF9A2D
  2082. 00C104FFB8A2C202FFC104FFDED328B93DC202FFC104FFDED30FD10BC77F0088D10CB988
  2083. C104FFDE9FB504FF9BD0FF9BBDFFA0C202FFCF0100C500B88D8CBA00592CB50000B60339
  2084. 2C192C790188C10400BE04816100C1F100DE9CD115B500FFC1F100D115B502FFC70078C1
  2085. 00FFC75000A19CC102FF9CB504FF8603C73800B82CEBB82CC73900B82CC104FFD114B82C
  2086. C73800B82CECB82CC73900B82CC104FFB82CC73800B82CE7B82CC73900B82CC76800B8A0
  2087. DDB888C1F100DE9CD115B500FFC1F100D115B502FFC77900D12DE59CD12DC100FFC75000
  2088. A19CC102FF9CB504FFC104FFC7FF7F96BE0BC104FFC700089FB504FF8084FF8D8C530121
  2089. 284E0101422DB603790A6A2D04009A2D010088CF000031FFB54B01DEB502FF9A2501C102
  2090. FFC200FFD11099B888C200FFC102FFD20ED10BD10CB604FFC204FFB606FFC204FFC71B00
  2091. D10C8BBE06DEA9B56601C204FFC71E00D10C8BBE08DDDDD21FB604FFC204FFE8D10C8BBE
  2092. 14C1F100DE9CD115DE9FC1F100D115D21FB604FFC204FFE9D10C8BBE34C1F100D115C1F1
  2093. 00DF9CD11593BE12C1F100DE9CD115DE9CDDD21FB604FF8A14C1F100DE9CD115C1F100D1
  2094. 15DE9CD21FB604FFC204FFC71A00D10C8BBE07E9D10CB604FFC16601BE29C26C01D110E0
  2095. 8ABE1694C26C01C204FF9DB988CC00B66C01DDB566018A0BC26C01C204FF9DB66C01C166
  2096. 01C26C01D110DF8A88BE19C204FFCC013D8EBE10C26C01B604FFCC00B66C01DDB56601C1
  2097. 6601AFBE1894C204FFB93B88C14000BE0C9423C71E00B8C206FFB93B88C102FFDE9CB502
  2098. FF9BD8FEA0CF0000FBFDB88D8C5A040123550401F12DB603D1227A060100322B0A0088DD
  2099. B51600C100FFDE8ABE32C2BD00B67B00C1F100DE9CD115B53E01C1F100D115B53801C104
  2100. 00BE0FC77900D12DE59CD12DB532018A07C70078B53201C15800BE12CC0A42696E7B7266
  2101. 696C6572B606FF8A0FCC095465787466696C6572B606FF94E9D10CB988CF0000D805B50A
  2102. 009494D086CF01002406B9CC2A5066203120202020202020204B6F70706C612075707020
  2103. 7465726D696E616C667C7262696E64656C7365B994D086CF0100EE05B9CC205066203220
  2104. 202020202020204C6F6B616C7420656B6F206176207465636B656EB994D086CF0100C205
  2105. B9CC28534849465420506620322020496E67656E206C6F6B616C20656B6E696E67206176
  2106. 207465636B656EB994D086CF01008E05B9CC305066203320202020202020204D6F747461
  2107. 672066696C2066727D6E20767B72646461746F72206D6564204B65726D6974B994D086CF
  2108. 01005205B9CC3353484946542050662033202044756D706120646174612074696C6C206C
  2109. 6F6B616C2066696C20287574616E204B65726D697429B994D086CF01001305B9CC2A4354
  2110. 524C20205066203320204176627279742064756D706E696E672074696C6C206C6F6B616C
  2111. 2066696CB994D086CF0100DD04B9CC2E506620342020202020202020537B6E642066696C
  2112. 2074696C6C20767B72646461746F72206D6564204B65726D6974B994D086CF0100A304B9
  2113. CC3253484946542050662034202044756D70612066696C2074696C6C20767B7264646174
  2114. 6F7220287574616E204B65726D697429B994D086CF01006504B9CC315066203520202020
  2115. 202020205B6E6472612066696C74797020667C72204B65726D69742C2020202020202020
  2116. 6E75203D20B9D083CF01002904B9C206FFB994D086CF01001C04B9CC3150662036202020
  2117. 20202020205B6E647261207374616E64617264656E68657420667C72204B65726D69742C
  2118. 206E75203D20B9D083CF0100E003B9C23080B994D086CF0100D303B9CC30506620372020
  2119. 2020202020205B6E64726120626C6F636B636865636B74797020667C72204B65726D6974
  2120. 2C206E75203DB9D083CF01009803B9C16500B894D086CF01008B03B9CC3C506620382020
  2121. 2020202020204176736C7574612070726F6772616D6D6574206F63682062727974207465
  2122. 726D696E616C667C7262696E64656C73656EB994D086CF01004303B93B88C12A80DD8AC1
  2123. 0400AF88A7BE1294CC0A53484946542050662038B93B8A1094CC0A5052494E5420202020
  2124. 20B93B94CC3E202044756D70612062696C64736B7B726D656E2074696C6C20736B726976
  2125. 61726520287B76656E20646972656B742069207465726D696E616C6D6F646529B99A7500
  2126. C102FFDD8AB894C71100DDD21FB9D083CF0100B902B9CC10567B6C6A2066756E6B74696F
  2127. 6E3A2020B9E5D10CB93B88D083CF0100FD03B604FFDEC7C000C7C100C7D100C7C200C7D2
  2128. 00C7C300C7E200C7D300C7C400C7C500C7C600C7C700D4DC0CC204FFD311B502FFC102FF
  2129. BE06A0C102FFB89B88FF8D8C910041268C0000B601522E100094C71100DDD21FB9D083CF
  2130. 01003A02B9CC17537B6E64612066696C20287574616E204B65726D697429C230009DB994
  2131. D083CF01001302B9CC0846696C6E616D6E3AB93B88CC00C71200E6DEDFEDD086C78A00D1
  2132. 0C9DCF07007004CF01000802CF0100992FB600FF8517008604C200FFB9BBC71400B888DE
  2133. A9B53A00A0C13A00B8A0DDB88D8C9100A1258C0000B601522E100094C71100DDD21FB9D0
  2134. 83CF0100A801B9CC1744756D70612066696C20287574616E204B65726D697429C230009D
  2135. B994D083CF01008101B9CC0846696C6E616D6E3AB93B88CC00C71200E6DEDFEDD086C78A
  2136. 00D10C9DCF0700DE03CF01007601CF0100072FB600FF8517008605C200FFB9BBC71E00B8
  2137. 88DEA9B54000A0C14000B8A0DDB88D8C8D00FA2C880000B602712E8A2E500088C2D100D1
  2138. 10BE04801F008561009723C71400B82CC6D100BC88C2D100C2D100D110DE9FD20DB6D100
  2139. 9F88C7DCFFD12DE19CD12DDE9FB500FFC2D100D110C100FF99BD0EC2D100B602FFCC00B6
  2140. D1008A19C2D100C100FFD20DB602FFC2D100C100FFDE9CD20EB6D100A0C202FFB988DDB5
  2141. 3A008606C71400B8A0CC00B98D8C440071223F00008604C20480B9BBC15200B894E9D10C
  2142. B93BA0DEA9B894CC1E4B616E20656A207C70706E61205632343A616E2120457272636F64
  2143. 653A20B9D018B886088D8C5700112E52000094DEDDD21FB9D093CF01004B00B9C75000C7
  2144. 7F00D213B93B94C71500DDD21FB9D093CF01003100B9C75000C77F00D213B93B94DDC716
  2145. 00D21FB9C72400D112B994C2E700B994DFDDD21FB93BA0DDB88D8C1D007A06180001A22E
  2146. 88C12480DD8ABE08A0C200FFB98A05A0CC00B98D8C59005A2A540001CA2EB6037A016400
  2147. 7909790188DEB504FF9A3700C104FFC200FFD11099B888C200FFC104FFD20ED10BB506FF
  2148. C106FFC720008DBE0DC202FFC106FFD10C9DB602FFC104FFDE9CB504FF9BC6FFA0C202FF
  2149. B98D8C6700E12E620001CA2E94C71500DDD21FB9E4D10CB9D081D09D9DD0879DD0889DCF
  2150. 01006AFFB9CC013CB9D08CD0899DCF01005BFFB9C200FFB9D088CF01004FFFB9CC013EB9
  2151. C74E00C200FFD1109FD112B9C78000D10CD09D9DD0879DCF01002EFFB93BA0DDB88D8C84
  2152. 0081257F0001CA2EB6017A01010088C200FFCC1220204B76697474657261206D65642043
  2153. 45209DCF010072FFB54B0194C71500C200FFD110C716009CD21FB93B88D081CF01004300
  2154. B602FF9A1700C202FFC71800D10C8EB888D081CF01002B00B602FF9BE6FF94C71500DDD2
  2155. 1FB9D093CF0100B1FEB9C75000C77F00D213B9A0DDB88D8CC500322EC00001A22EB6037A
  2156. 020100392C192C88C1F100DE9CD115B504FFC1F100D115B506FFCF0000BEF5B54B01C124
  2157. 80DD8ABE1B94C200FFB9C70078C104FFC75000A19CC106FF9CD115D10CB93B94DDC73D00
  2158. D21FB9D086CF010044FEB9D029B99A1B00E2D119DD8AB894DDC73D00D21FB9D086CF0100
  2159. 28FEB9D029B99BE2FF860AC602FFBC88C10400AFBE22C202FFD10BC78200C12A8088C7D7
  2160. 00C12A80AF8886A78ABD09CF00006B04B54B018602C1F100B82CC106FFB82CC104FFB8A0
  2161. C202FFB98D8C5500212F500001512E9A4700DEA9B8850F008605C24480B9BBC100FFB8A0
  2162. DDB888CC26536B7269766172656E20656A20707D736C6167656E2C206B6F6E74726F6C6C
  2163. 65726120212020CF01006EFEB54B019BB6FF8D8CD403922ACF0307CA2E392C192C592F89
  2164. 2FA12FA22EB60AC22F6400D92F09302930790151300A0D0100120D01001A0D0A00410F88
  2165. C200FFB60EFFC106FFB512FFC108FFEC88B514FFE6CF01008E03B54B019A4803DEA9B894
  2166. C102FFC104FFD21FB9C20CFFCF01001DFDB9C20EFFB9C10AFFC20EFFD1109FC72000C73F
  2167. 00C12480DD8DA7A19FD213B9C78B00D10CB9CC0120B93B88C112FFC10AFF96BE07C10AFF
  2168. B512FFC20EFFD110B510FF94C102FFC104FFC112FF9CDE9FD21FB93B88C20CFFC78A00D1
  2169. 0C9DCF010020FED10BB516FFDEE0E1C71B00C7C000C78100D4D50CC116FFD10CD311BE08
  2170. A0C71B00D10CB988DEC78000C7A100C7A300C7B100C7B300C7AC00C7A400C77F00D4D80C
  2171. C116FFD10CD311B54B01C14B01BE22C7C100C7C400C7C600C7D400C7D600E5E6C7C200D4
  2172. D80CC14B01D20ED10BB516FFC116FFC718008ABE0ACC00B60EFFDEB512FFC108FFEC96C1
  2173. 16FFEA8A86BE3BDEC7C000C7C100C7C400C7C500C7C600C7C700C7D400C7D600C7F000C7
  2174. D000EAD4DB0CC116FFD10CD311BE0FE6CF01004F02B54B01A0C20EFFB988C116FFE58ABE
  2175. 27C112FFDE96BE0BC112FFDE9FB512FF8A16C108FFEC96BE0FE6CF01002102B54B01A0C2
  2176. 0EFFB988C116FFE68ABE29C112FFC10AFF90BE0BC112FFDE9CB512FF8A16C108FFEC96BE
  2177. 0FE6CF0100F101B54B01A0C20EFFB99A6D00C116FFC7C2008AB888C112FFC110FF99BE1D
  2178. C20EFFCC01209DC112FFDE9FD20DC20EFFC112FFDE9CD20E9DB60EFFC110FFC112FF90C1
  2179. 10FFDD9688BE2BC112FFC110FF9FDE8ABE18C20EFFC110FFDE9FD20DB60EFFC112FFDE9F
  2180. B512FF8A09C110FFDE9CB512FFDDB516FF9B90FFC116FFC784008ABE1BC118FFDD8AA7B5
  2181. 18FFE6C78000C118FFA19FCF01005801B54B01C114FFE08ABE0BC116FFC7DF0088B516FF
  2182. C116FFC7C3008AC112FFC110FF9988BE35C20EFFCC01209DC112FFDE9FD20DCC01209DC2
  2183. 0EFFC112FFD20E9DB60EFFC20EFFD110C10AFF96BE0CC20EFFC10AFFD20DB60EFF83BE00
  2184. 9A2600C120FFC114FF99B89CB706C61AFFBCB706C61CFFBCB706C61EFFBC88C120FFDE9C
  2185. B520FF9BD7FF9A8C00C116FFC21AFFD10B93C116FFC21CFFD10B9988A7DEC21EFFC116FF
  2186. D10CD311DD9686A7C112FFC10AFF9988B888C110FFC112FF90BE11C20EFFC112FFC110FF
  2187. 9FD1129DB60EFFC20EFFC112FFDE9FD20DC116FFD10C9DC20EFFC112FFC118FFAFA79FD2
  2188. 0E9DB60EFFC20EFFD110C10AFF96BE0CC20EFFC10AFFD20DB60EFFC112FFDE9CB512FFDD
  2189. B516FF9B71FF9BB5FC8EBB0233302C392C2720272C302C392C27202E2D272C2720272C7E
  2190. 2C2720272C412C5D2C2720272C4A2C4A2C4A6A4E6E2C412C5D2C418D8C1E007130190001
  2191. 790B88C12A80BE0C8603C72200B82CC100FFB8A0DDB88D8C78004124730000B6023A2C00
  2192. 00790988E5CF0100A7FBB54B019423E5B82CE7E7E7D30CB988C70078B502FF9A4100C102
  2193. FFC7807F90B88602C600FFD12CB82CC75000B82CDDB82CC102FFB82CC102FFD114B82CC7
  2194. 5000B82CDDB89423E5B8C200FFB988C102FFC750009CB502FF9BBCFF8606E5B8A0DDB88D
  2195. 8C9200C1278D0000B602322E0100312E860AC600FFBC88C200FFD10BB502FFC102FFC7C0
  2196. 008DC102FFC7C7008D88BE04A0DDB89494D081CF0100DEF8B9CC105C766572667C72696E
  2197. 67656E20617620B93B88C102FFC7C0008ABE1D94CC15616B7475656C6C2066696C206176
  2198. 62727974657321B9A0DEB894CC14616C6C612066696C657220617662727974657321B9A0
  2199. DFB88D8C6400A1305F0002E9301A268510008606C100FFB886A1C202FFB9A0DDB894EAE7
  2200. D20CB9D081CF01005CF8B9CC2F4B616E20656A20746120626F727420696E6B6F6D6D616E
  2201. 64652066696C20707D206772756E642061762066656C3A20B9D018B8A0DDB88D8C560001
  2202. 31510002E9301A26850A008606C100FFB8A0DDB894EAE7D20CB9D081CF0100FDF7B9CC0E
  2203. 4B616E20656A2073747B6E676120B9C202FFB9CC1220707D206772756E64206176206665
  2204. 6C3A20B9D018B8A0DDB88D8C3D00313138000271319931B60179048602E7D119C7FF019F
  2205. B82CC100FFB888C76660C102FFD217B504FFE7D119C7EB019FD115BE05A0DEA9B8A0DDB8
  2206. 8D8CBD00BA31B80000B60179098352009A3400C100FFE190B89CB705C5C301BBB706C6C9
  2207. 01BC88E7D119C7EB019FD115C1C30188A7BE06A0C2C901B988C100FFDE9CB500FF9BC9FF
  2208. A0CC156F6B7B6E6420747970206176206469736B66656C21B98E150013382C2027636865
  2209. 636B73756D6D6166656C218E13001131362C2027647D6C6967206469736B218E1C001A36
  2210. 342C2027736B6976616E20736B726976736B7964646164218E0000133132382C276C7563
  2211. 6B616E207C7070656E218D8CB300C92AAE00015232B6038132D2200400C13288E7D119C7
  2212. 7B009CD12DB502FFC200FFCC008BBE0AA0C76B60D12DD115B89A7900C102FFDD8DB888C1
  2213. 02FFDF9CD115C102FFE09CD115C102FFE19CD115C73A00D4D40CB604FFC204FFCC04434F
  2214. 4E3A8BC204FFCC044E554C3A8B86C204FFCC0350523A8B86C204FFCC045632343A8B86BE
  2215. 06CC00B604FFC102FFE49CD115B506FFC204FFC200FF8BBE06A0C106FFB888C102FFD12D
  2216. B502FF9B84FFA0DEA9B88D8CA300512B9E00010133B6031933D2200400C92488C100FFCA
  2217. 019900CC00B388DEC100FFCA016B0080CC013AD311B502FFC102FFDD8ABE04A0DDB888C1
  2218. 00FFCA016B0080C102FFD20DB604FFC204FFCF010000FFB506FFC106FFDEA98AC106FFC7
  2219. 1E008AC7F7FFD12DDD8A8886BE05A0DEA9B888C100FFCA019900C204FFB388C100FFCA01
  2220. 6B00C100FFCA016B0080C102FFDE9CD20EB388C106FFB53E80A0C106FFB88D8C3D000133
  2221. 3800014933B601791088C740FFD12DB502FF9A1D00C102FFDF9CD115C100FF8DC102FFDD
  2222. 8D88B888C102FFD12DB502FF9BE0FFA0C102FFB88D8CA000E1249B000261334933B60101
  2223. 3388C11E80BE04A0DDB888C102FFCF0100A8FFB504FFC104FFDD8ABE1E94CC1753746F70
  2224. 702C2066696C656E20656A207C70706E616421B9860888C100FFBE288602C104FFC71200
  2225. 9CD12DE79CB82CC104FFC712009CD12DE79CD115DE9FA7E186A7DE9CB88A288602C104FF
  2226. C712009CD12DE79CB82CC104FFC712009CD12DE79CD115DE9FA7C7FB0088A7DE9CB8A0DD
  2227. B88D8C2A00712325000094E9D10CB9DEDDD21FB9D093CF01007FF4B9C75000C77F00D213
  2228. B9C2E700B9A0DDB88D8C0B0AC925060A0692336925A933D13301343134B6177A1401007A
  2229. 1301004A34640049346234650061347A34000179349134B934E1340135293551357935A1
  2230. 35C935790EF13511367A0628007904790688DDB51CFFDDB51EFFEAB520FFE5B522FFC108
  2231. FFB524FFC77E00B52AFFC76400D112B610FFC610FFD12BB512FFC618FFD12BB51AFFC614
  2232. FFD12BB516FF8602C614FFD12CB82CC76400B82CDDB82CC116FFDE9CB82CC116FFDE9CD1
  2233. 14B888CC0153B60EFFDEB538FFDDB52EFFDEC200FFCC012AD311DEC200FFCC013FD31186
  2234. BE08DEA9B532FF8A05DDB532FFC200FFB634FF9ADF00C132FFB888DECA01990080CF0100
  2235. 221EB5E801C1E801DD90BE0480A2089AB900DEA9B89AAD00DEA9B888CF00005A1FB634FF
  2236. C14C00C14C00C726008D88BE04807D08C234FFCC008BBE048048089A4800C234FFEBDED3
  2237. 0FCC01448BC200FFC234FFE9D20DCF0100A61CCF0200EF1BDD8A86B888CF0000111FB634
  2238. FFC14C00C14C00C726008D88BE04803408C234FFCC008BBE0480FF079BB5FFC234FFE9D2
  2239. 0DCF01006B1CB634FF9494D086CF0100D8F2B9CC07537B6E6465723AB93B88DECA019900
  2240. 80C234FFC1DB00DECF0400A31FBE049B50FFDDBE049B44FFDDBE049B1EFF9A9F00C132FF
  2241. AFB89494D086CF010097F2B9CC07537B6E6465723AB93B88C138FFCA01990080C138FFCA
  2242. 016B0080C1DB00DECF04005B1FB54C00C138FFCA016B0080B634FFDDB50A02C14C00BE4F
  2243. A0CC0145CC0746656C206E7220C14C0082D11C9DCC1420756E646572207C70706E69676E
  2244. 656E206176209DC234FF9DCC01219DDEC124FFC104FFC11CFFC11EFFC120FFC15200CF09
  2245. 008919DF9FB888DDBE049B5EFF9A0D07DEA9B89A7E01C20EFFCC01538BB888C75E00CF01
  2246. 00041AC122FFCF0100FC19C11CFFCF0100F419C11EFFCF0100DA19C120FFCF0100E419C1
  2247. 06FFD4D60CC16C80D10C9DC108FF82D11C9DC12AFFD10C9DB614FFC12EFFCC0153C214FF
  2248. C112FFC104FFC11CFFC11EFFC120FFC10AFFC122FFDEC15200CF0C005711B60CFF9ADD00
  2249. C20CFFCC01598BB888C112FFDF9CD115CF01009819B52CFFC112FFE09CD115CF01008919
  2250. B522FFC112FFE19CD115CF01007A19B51CFFC112FFE29CD115CF01004719B51EFFC112FF
  2251. E39CD115CF01005C19B520FFC112FFE49CD115B526FFC112FFE59CD115B528FFC128FFC7
  2252. 59008ABE14C16C80B528FFC128FFC759008ABE05DDB528FFC128FFC7210090C128FFC73E
  2253. 0096C128FFC76000908886C128FFC77E009686BE05DDB528FFC108FFC112FFE69CD115C7
  2254. 30009FA78DBE07DEB524FF8A07C108FFB524FFC112FFE79CD115C12AFF8DBE05DDB52AFF
  2255. DDBE049B20FFC12EFFDE9CA7C73F0088B52EFFC20CFFCC01598BBE09CC0146B60EFF8A07
  2256. C20CFFB60EFF9B7FFE9A5E00C20EFFCC01468BB888C12EFFCC0146C234FFC112FFC104FF
  2257. C11CFFC11EFFC120FFC10AFFC122FFC124FFC15200CF0C001710B60CFFDECC024E59C20C
  2258. FFD311BE09CC0144B60EFF8A07C20CFFB60EFFC12EFFDE9CA7C73F0088B52EFF9B9FFF9A
  2259. 7801C20EFFCC01448BB888C11AFFC102FFC1DB00CF03006112B530FF9A4501C130FFDD8A
  2260. B88602C116FFB82CDEB89A3600C116FFC12CFFC124FF9FC11AFFC106FFC128FFC12AFFCF
  2261. 0600B412C130FFDD8A88B888C11AFFC102FFC1DB00CF03001812B530FF9BC7FFC14102DE
  2262. 9CB5410294C1F100DE9CD115C72600D21FB93B94B8CC052323232323B9C14102B83B8602
  2263. C614FFD12CE19CB82CC116FFD115DE9FB82CDDB888C12EFFCC0144C214FFC112FFC104FF
  2264. C11CFFC11EFFC120FFC10AFFC122FFC124FFC15200CF0C001B0FB60CFFC12EFFDE9CA7C7
  2265. 3F0088B52EFFC112FFDE9CD115DFC124FF9C96C112FFDF9CD115C758008A88BE05DEB530
  2266. FFC112FFDE9CD115DFC124FF9C96C112FFDF9CD115C75A008A88BE11DEB530FFDDB532FF
  2267. C14600DE9CB538FFE2D119BE2DCF0000D6F5B536FFC136FFDE8ABE07DEB530FF8A18C136
  2268. FFDF8ABE11DEB530FFDDB532FFC14600DE9CB538FFC20CFFCC01598BBE049BB8FEC130FF
  2269. BE09CC015AB60EFF8A07C20CFFB60EFF9B85FE9AEA00C20EFFCC015A8BB888C130FFC726
  2270. 008AC130FFC722008A86BE08CC00B614FF8A07CC0144B614FFC1DB00C234FFCF020050F6
  2271. B50A00C12EFFCC015AC214FFC112FFC104FFC11CFFC11EFFC120FFC10AFFC122FFC124FF
  2272. C15200CF0C000D0EB60CFFC20CFFCC01598BBE09CC0142B60EFF8A07C20CFFB60EFFC12E
  2273. FFDE9CA7C73F0088B52EFFC130FFC722008DC130FFC726008D88C130FFDE8D88BE4DA0CC
  2274. 0145CC0746656C206E7220C130FF82D11C9DCC1020766964206C7B736E696E6720617620
  2275. 9DC234FF9DCC01219DC12EFFC124FFC104FFC11CFFC11EFFC120FFC15200CF09003115DF
  2276. 9FB89B13FF9A2202C20EFFCC01428BB89AE300C132FFB888CF00009A19B634FFC14C00C1
  2277. 4C00C726008D88BE0480E6029AA100C234FFCC008EB89A4500C234FFEBDED30FCC01448B
  2278. C200FFC234FFE9D20DCF0100E716CF02003016DD8A86B888CF00005219B634FFC14C00C1
  2279. 4C00C726008D88BE04809E02C234FFCC008EBE049BB8FF9A4600C234FFCC008EB888C234
  2280. FFE9D20DCF0100A416B634FF9494D086CF010011EDB9CC07537B6E6465723AB93B88DECA
  2281. 01990080C234FFC1DB00DECF0400DC19B536FFDDBE049BB7FFC14C00BE049B5CFFC234FF
  2282. CC008EC14C00DD8A88BE09CC0146B60EFF8A07CC0143B60EFFDDBE049B1AFFC138FFDE9C
  2283. B538FF9AAC00C132FFAFC138FFC146009988B89494D086CF01009EECB9CC07537B6E6465
  2284. 723AB93B88C138FFCA01990080C138FFCA016B0080C1DB00DECF04006219B54C00C138FF
  2285. CA016B0080B634FFCC0146B60EFFC14C00BE52A0CC0145CC0746656C206E7220C14C0082
  2286. D11C9DCC1520756E646572207C70706E696E676E656E206176209DC234FF9DCC01219DC1
  2287. 2EFFC124FFC104FFC11CFFC11EFFC120FFC15200CF09008B13DF9FB888DDBE049B51FFC1
  2288. 32FFAFC138FFC146009688BE06CC00B634FF9A6200C234FFCC008BCF0000721286B888C1
  2289. 2EFFCC0142CC00C112FFC104FFC11CFFC11EFFC120FFC10AFFC122FFC124FFC15200CF0C
  2290. 008A0BB60CFFC12EFFDE9CA7C73F0088B52EFFC20CFFCC01598BBE09CC0143B60EFF8A07
  2291. C20CFFB60EFFDDBE049B9BFF9BDBFDC20EFFCC01658BBE05A0DFA9B888C20EFFCC01458B
  2292. BE1DA0C210FFE0C112FFDE9CD115DF9FC124FF9FD30FCF01003BECDF9FB888C20EFFCC01
  2293. 438BBE08DDB54C00A0DDB888DECC065346445A4243C20EFFD311DD8ABE3EA0CC0145CC10
  2294. 4F4B5B4E442070616B65747479703A20C20EFF9DCC032121219DC12EFFC124FFC104FFC1
  2295. 1CFFC11EFFC120FFC15200CF09007412DF9FB89BF0F8A0C200FFCC1B2067657220656A20
  2296. 74727B666620707D206E7D676F6E2066696C219DCF0100ADEBDF9FB8A0CC0C4B616E2065
  2297. 6A206C7B736120DECA019900809DCC022C209DCF000025F39DCF010084EBDF9FB8A0CC01
  2298. 45CC0C4B616E20656A206C7B736120DECA019900809DCC022C209DCF0000F9F29DDEC124
  2299. FFC104FFC11CFFC11EFFC120FFC15200CF0900DF11DF9FB88D8CAA085125A508036925A9
  2300. 333134B617790E7A1301007A1401004A346400493462343200422DFE00412DC935013591
  2301. 34B934E134513579352935A135DA391400F2390C00093A79063A3A0400790488C75E00B5
  2302. 16FFC72800B518FFDDB51AFFDDB51CFFEAB51EFFDDB520FFDEB524FFDDB526FFDDB52CFF
  2303. C60CFFD12BB50EFF8602C60CFFD12CE19CB82CC76400B82CDDB888C612FFD12BB514FFDD
  2304. B506FFDDB52EFFCC0120B60AFF9AFE07DEA9B888C10EFFC106FFC102FFC118FFC104FFC1
  2305. 24FFC11AFFC11CFFC11EFFC15200CF0A00E107B608FF9A7600C12CFFB888C1E100C230FF
  2306. C22AFF9DCF0200F6F0B50A00A0CC0145CC1B46656C2076696420736B7269766E696E6720
  2307. 707D2066696C656E20C230FF9DC22AFF9DCC092E2046656C206E72209DC12CFF82D11C9D
  2308. CC012E9DC106FFC124FFC102FFC11AFFC11CFFC11EFFC15200CF09009210DF9FB89B87FF
  2309. 9A1602C208FFCC01538BB888C10EFFD115C106FF8DC10EFFD115C106FFDE9FA7C73F0088
  2310. A78D88A7DECC022053C20AFFD311DD8A86BE31A0CC0145CC0D53656E642D696E6974203F
  2311. 3F3FC10EFFD115DEC102FFC11AFFC11CFFC11EFFC15200CF09002810DF9FB89AA901C208
  2312. FFCC01538BB888C10EFFDF9CD115CF0100BE10B516FFC10EFFE09CD115CF0100AF10B518
  2313. FFC10EFFE19CD115CF0100A010B51AFFC10EFFE29CD115CF01006D10B51CFFC10EFFE39C
  2314. D115CF01008210B51EFFC10EFFE49CD115B520FFC10EFFDE9CD115E590BE07DDB522FF8A
  2315. 1AC10EFFE59CD115B522FFC122FFC759008ABE07C16C80B522FFC122FFC7210090C122FF
  2316. C73E0096C122FFC76000908886C122FFC77E009686BD05DDB522FFC10EFFDE9CD115E690
  2317. BE07DEB524FF8A1AC10EFFE69CD115C730009FB524FFC124FFDF8DBE05DEB524FFC10EFF
  2318. DE9CD115E790BE07DDB526FF8A30C10EFFE79CD115B526FFC126FFC7210090C126FFC73E
  2319. 0096C126FFC76000908886C126FFC77E009686BE05DDB526FFC74B00CF0100A20FE5CF01
  2320. 009C0FDDCF0100960FDDCF01007E0FEACF01008A0FC120FFC122FFC74E00C122FFDD8A88
  2321. 86D4D70CC124FF82D11C9DB610FFC126FFBD0FC210FFC126FFD10C9DB610FF8A0BC210FF
  2322. CC01209DB610FFCC0159C210FFC10EFFD115DEC102FFC11AFFC11CFFC11EFFC15200CF09
  2323. 00910EB532FFC10EFFD115DE9CA7C73F0088A7B506FFDDBE049B54FEDDBE049BE7FD9A95
  2324. 02C208FFCC01468BB888DECC03535A46C20AFFD311DD8ABE31A0CC0145CC0D46696C2D68
  2325. 75767564203F3F3FC106FFC124FFC102FFC11AFFC11CFFC11EFFC15200CF09002A0EDF9F
  2326. B888C20AFFCC01468BC228FFC20CFFE0C10EFFDE9CD115DF9FC124FF9FD30FCF01003E14
  2327. 8E88BE37A0CC0145CC1354767D2066696C2D6875767564656E203F3F3FC106FFC124FFC1
  2328. 02FFC11AFFC11CFFC11EFFC15200CF0900CD0DDF9FB89ADD01C208FFCC01468BB888C20C
  2329. FFE0C10EFFDE9CD115DF9FC124FF9FD30FCF0100E013B628FFCC00B62AFFDEB532FF9AA8
  2330. 00C132FFC228FFD11099B89A7700C22AFFD110E590DEC22AFFCC012ED311DD8A88A7C22A
  2331. FFD110DEC22AFFCC012ED3119FA7E09086B888DECC273031323334353637383941424344
  2332. 45464748494A4B4C4D4E4F505152535455565758595A5D5B5CC228FFC132FFDED30FD311
  2333. DD8DBE11C22AFFC228FFC132FFDED30F9DB62AFFDDBE049B86FFC228FFC132FFDED30FCC
  2334. 012E8BBE0BC22AFFCC012E9DB62AFFC132FFDE9CB532FF9B55FFCC00B630FFC12EFFDE9C
  2335. B52EFFC12EFFC7140099BE2CC12EFFC1460099C12EFFCA016B0080CC008E88BE17C12EFF
  2336. CA016B0080B62AFFC12EFFCA01990080B630FF9494D086CF01002AE5B9CC074D6F747461
  2337. 723AB93B88DDB5B702DDB50A02C230FFC22AFFC1E100DFCF0400F011B54C00C14C00BE50
  2338. A0CC0145CC0D4B616E20656A20736B61706120C230FF9DC22AFF9DCC092C2066656C206E
  2339. 72209DC14C0082D11C9DCC01219DC106FFC124FFC102FFC11AFFC11CFFC11EFFC15200CF
  2340. 09002C0CDF9FB888C208FFCC01468BBE31CC0159CC00C106FFC124FFC102FFC11AFFC11C
  2341. FFC11EFFC15200CF0900000CB532FFC106FFDE9CA7C73F0088A7B506FFDDBE049B20FE86
  2342. 02C114FFB82CDEB888DDBE049B68FD9AF100C208FFCC01448BB888CC0159C2A900C106FF
  2343. C124FFC102FFC11AFFC11CFFC11EFFC15200CF0900AD0BB532FFC106FFDE9CA7C73F0088
  2344. A7B506FF8602C10EFFB82CDFB888C2A900CC008BBE27C14102DE9CB5410294C1F100DE9C
  2345. D115C72600D21FB93B94B8CC052323232323B9C14102B83B9A4800C10EFFC10EFFDE9CD1
  2346. 15DE9FC124FF9FC114FFC7FD00C120FFC122FFC126FFCF0700D205DD99B888C114FFC100
  2347. FFC1E100CF03003705B54C00C14C00BE09C14C00B52CFF8A049BB5FFCC00B6A900E2D119
  2348. BE25CF00007DEAB50A00C10A00DE8ABE09CC0158B6A9008A0EC10A00DF8ABE07CC015AB6
  2349. A900DDBE049B0CFF9AD900C208FFCC015A8BB888C114FFD115DE96BE1DC114FFC100FFC1
  2350. E100CF0300CD04B54C00C14C00BE07C14C00B52CFF9AA200C208FFCC015A8BC12CFFDD8A
  2351. 88B888C10EFFDE9CD115E0C124FF9C93C20CFFE0C10EFFDE9CD115DF9FC124FF9FD30FCC
  2352. 01448B88A7C2A900CC01588B86C2A900CC015A8B86BE15C1E100C230FFC22AFF9DCF0200
  2353. 61EAB532FF8A13C1E100C230FFC22AFF9DCF0200B2EAB532FFCC0159CC00C106FFC124FF
  2354. C102FFC11AFFC11CFFC11EFFC15200CF0900240AB532FFC106FFDE9CA7C73F0088A7B506
  2355. FFDDBE049B5BFFDDBE049B24FF9A4600C208FFCC01428BB888CC0159CC00C106FFC124FF
  2356. C102FFC11AFFC11CFFC11EFFC15200CF0900DC09B532FFC106FFDE9CA7C73F0088A7B506
  2357. FFDDB54C00A0DDB888DDBE049BB7FFC208FFCC01658BBE05A0DFA9B888C208FFCC01458B
  2358. BE1DA0C20CFFE0C10EFFDE9CD115DF9FC124FF9FD30FCF0100F3E2DF9FB888DECC055346
  2359. 445A42C208FFD311DD8ABE3EA0CC0145CC104F4B5B4E442070616B65747479703A20C208
  2360. FF9DCC032121219DC106FFC124FFC102FFC11AFFC11CFFC11EFFC15200CF09003E09DF9F
  2361. B888C208FFB60AFF9BFFF78D8C7C01523A77010A412D790EA9330135493B793B9134B934
  2362. E134E930B603A93B7A140100790488C108FFB514FF9A0101C114FFB888C100FFC104FFC1
  2363. 06FFC10AFFC112FFCF05000405B616FFC216FFCC01458BBE06A0CC0145B988DECC022054
  2364. C216FFD311DD8AC100FFD115C102FF8AA788BE06A0C216FFB988C100FFD115C102FFDE9C
  2365. A7C73F0088A78ABE48CC0145CC204A6167206861722074617070617420626F7274206574
  2366. 742070616B6574212121C102FFC10AFFC104FFC10CFFC10EFFC110FFC112FFCF09006408
  2367. B518FFA0CC0165B988C216FFCC01448BBE27C10A02DE9CB50A0294C1F100DE9CD115C732
  2368. 00D21FB93B94B8CC052323232323B9C10A02B83B88C114FFDE9FB514FFCC014ECC00C102
  2369. FFC10AFFC104FFC10CFFC10EFFC110FFC112FFCF09000408B518FF9BFCFECC0145CC2341
  2370. 766272797465722120467C72206D7D6E6761206F6D737B6E646E696E676172212121C102
  2371. FFC10AFFC104FFC10CFFC10EFFC110FFC112FFCF0900BC07B518FFA0CC0165B98D8CB601
  2372. 7A38B1010C790E2A3C422D413CA9339134B934E13431340135793BE930B603793C79047A
  2373. 13010088C110FFB518FF9A3701C118FFB888C116FFCF01002F03B51AFFC202FFC204FFC1
  2374. 00FFC114FFC108FFC10AFFC10CFFC10EFFC116FFCF09004F07B51AFFC106FFC108FFC112
  2375. FFC114FFC116FFCF05005503B61CFFC21CFFCC01458BBE06A0CC0145B988C202FFCC0144
  2376. 8BC118FFC110FF8D88BE27C10A02DE9CB50A0294C1F100DE9CD115C73200D21FB93B94B8
  2377. CC052323232323B9C10A02B83B88C21CFFCC014E8BC100FF88BE19C106FFD115DE9FA7C7
  2378. 3F0088A7C100FF8ABE06A0CC0159B988C21CFFCC01598BBE11C106FFD115C100FF8ABE06
  2379. A0CC0159B988DECC0420544E59C21CFFD311DD8ABE4CCC0145CC1A417662727974657221
  2380. 204F4B5B4E442070616B65747479703A20C21CFF9DCC032121219DC100FFC114FFC108FF
  2381. C10AFFC10CFFC10EFFC116FFCF09005B06B51AFFA0CC0165B988C118FFDE9FB518FF9BC6
  2382. FECC0145CC2341766272797465722120467C72206D7D6E6761206F6D737B6E646E696E67
  2383. 6172212121C100FFC114FFC108FFC10AFFC10CFFC10EFFC116FFCF09000506B51AFFA0CC
  2384. 0165B98D8C8800F93A830003412D6925E930B6027A020000B13C8602C606FFD12CB82CC7
  2385. FD00B82CDDB82CC100FFDE9CB82CC100FFDE9CD114B82CC7FD00B82CDDB888C100FFD115
  2386. DE9FB508FF853900C102FFBE13860E23C104FFB8C206FFC108FFD20DB98A169423C104FF
  2387. B8C206FFC108FFD20DCF0100ED07B93B8602C100FFB82CDEB8A0DDB8A0D018B88D8C5000
  2388. B93A4B0007413C193D593D913D51357935A135B6017A01090088C100FFC100FFD114C102
  2389. FFC104FFC104FFD114C106FFC108FFC10AFFC10CFFD4D90CB60EFFA0C67280D12BC60EFF
  2390. D12BD217B88D8C8500F938800003412D6925E930B6017A0200008602C606FFD12CB82CC7
  2391. FD00B82CDDB82CC100FFDF9CB82CC100FFDF9CD114B82CC7FD00B82CDDB8853700C102FF
  2392. BE13860A23C104FFB8C606FFBCB9C7FD00B88A0B9723C104FFB8C606FFBC8602C100FFB8
  2393. 2CDFB82CC206FFD110DF9CB8A0DDB88602C100FFB82CDFB82CDDB8A0D018B88D8C500041
  2394. 394B0006412DD13D013E51357935A135B6017A01090088C100FFC100FFD114C102FFC104
  2395. FFC104FFD114DDC106FFC108FFC10AFFD4D90CB60CFFA0C67280D12BC7A3009CC60CFFD1
  2396. 2BD217B88D8C5100913C4C0001E930B60279047A04320088CF00004200B502FF9A2F00C1
  2397. 02FFB888C102FFC7320096BE07C73200B502FF860A23C100FFB8C604FFBCB9C102FFB888
  2398. CF00001200B502FF9BCEFFA0DDB88D8C0D00293E080000C1FD00D12DB88C1F02EA3B1A02
  2399. 05412DA9330135793BE930B60579047A0200007A140100791079018602C60CFFD12CB82C
  2400. C76400B82CDDB82CC100FFB82CC100FFD114B82CC76400B82CDDB888CF0000AEFFDD8ABE
  2401. 10C104FFCF01004702BE06A0CC0154B988DEC108FFCF0200BF01D10BB50AFFDEE0E1C71A
  2402. 00D30CC10AFFD10CD311BE06A0CC0154B99A4800C10AFFC102FF8DB888CF000065FFDD8A
  2403. BE10C104FFCF0100FE01BE06A0CC0154B988DEC108FFCF02007601D10BB50AFFDEE0E1C7
  2404. 1A00D30CC10AFFD10CD311BE06A0CC0154B99BB5FFCF000025FFDD8ABE10C104FFCF0100
  2405. BE01BE06A0CC0154B988DEC108FFCF02003601D10BCF0100A303B512FFDEB510FF9A7500
  2406. C110FFDF9FC112FF90B888CF0000E7FEB50AFFC10AFFDD8ABE1AC104FFCF01007A01BE08
  2407. A0CC0154B98A09CF0000C7FEB50AFFC10AFFC112FFC110FF9FDF9C96BE0DC112FFC110FF
  2408. 9FDF9CB50AFFA2C20CFFC110FFC10AFFD328B93DC10AFFC108FFCF0200BE00B988C110FF
  2409. C10AFF9CB510FF9B88FFC20CFFDFDED30FCC01538EBE39C20CFFC112FFC106FF9FDE9CC1
  2410. 06FFD30FC112FFCF0100EB02D10CC20CFFC112FFC106FF9FD20D9DC106FFCF0200F8028E
  2411. BE06A0CC0120B988C20CFFDFDED30FCC01538BBE2DC20CFFC112FFDED30FC112FFCF0100
  2412. AD02D10CC20CFFC112FFDE9FD20D9DDECF0200BE028EBE06A0CC0120B988C20CFFDFDED3
  2413. 0FB60EFF8602C100FFB82CC100FFD115CF01008802B82CC112FFB8A0C20EFFB98D8C7600
  2414. DA3E7100027901E930B6027A0264007909860A23C102FFB8C604FFBCB9C100FFB888C16C
  2415. 80C726008DC11E80DD8A86BD06A0C204FFB988C100FFB506FF9A2D00C106FFB8A2C204FF
  2416. C106FFDED328B93DC204FFC106FFDED30FD10BC77F0088D10CB988C106FFDE9FB506FF9B
  2417. D0FFA0C204FFB98D8C4F00993E4A00017914B601780488C100FF82D68846A0B402FF9A29
  2418. 00C002FFD5008CCF00003BFDDD8A88B888C002FFD5819EB402FFCF00002B00BE08D500B4
  2419. 02FF8A049BD4FFA0C002FFD50089B88D8C0D00013F080000C10301D12DB88C1D00B93918
  2420. 00008603C74100B82CEDB8A0C74100D116E588A7DD8AB88D8CCF00713FCA0004422D9134
  2421. B934E930B6027910790488C102FFB508FFCF0000BAFFB50AFF9A4100C108FFCF0000BAFF
  2422. DD8A88B888C10AFFC108FF96BE07C108FFB50AFF860E23C106FFB8C10AFFC104FFD213B9
  2423. 88C108FFC10AFF9FB508FFCF000078FFB50AFF9BBCFFDEB508FF9A5A00C108FFC200FFD1
  2424. 1099CF00006BFFDD8A88B888C10AFFC200FFD110C108FF9FDE9C96BE0FC200FFD110C108
  2425. FF9FDE9CB50AFF860E23C106FFB8C200FFC108FFC10AFFD30FB988C108FFC10AFF9CB508
  2426. FFCF000016FFB50AFF9BA3FFA0DDB88D8C8C00E9378700097A14422D790E793BA9339134
  2427. B934E134E930B60279047A02640088C108FFC202FFD110C106FF9CDF9CCF01007100C104
  2428. FFCF01006900D30CC200FF9DC202FF9DB614FFC214FFC214FFDFD20EC106FFCF02006F00
  2429. 9DC10EFFD10C9DC10AFFC10CFFC110FFCF0400C7FEB512FFC200FFCC01458BBE0DA0C202
  2430. FFCF0100E8D8B88A04A0DDB88D8C110059380C00017914C100FFC7400087B88C11003138
  2431. 0C00017914C100FFC720009CB88C1100C1380C00017914C100FFC720009FB88C9700CA21
  2432. 9200027A027903B601B13F88C102FFDE8DC102FFDF8D88BD2994CC22456A20696D706C65
  2433. 6D656E74657261642074797020617620636865636B73756D6D61B9860888C6F481D12BC7
  2434. 18FFD12DD12DD217B504FFC102FFDE8ABE1BA0C104FFC104FFC7000388D1149CC73F0088
  2435. CF01006EFFD10CB9A0C104FFD114C73F0088CF01005CFFC104FFC73F0088CF010050FFD2
  2436. 0CB98D8CB100E136AC000292338A2E88C202FFD110DD8ABE1BC200FFD110DD8AC200FFCC
  2437. 012A8B86BD07A0DEA9B88A04A0DDB888C200FFD110DD8ABD04A0DDB888C200FFD10BC202
  2438. FFD10B8ABE14A0C200FFDFD20EC202FFDFD20ECF0200ABFFB888C200FFD10BC73F008ABD
  2439. 14A0C200FFDFD20EC202FFDFD20ECF02008CFFB888C200FFD10BC72A008DBD04A0DDB888
  2440. C200FFDFD20EC202FFCF02006DFFBE05A0DEA9B8A0C200FFC202FFDFD20ECF020058FFB8
  2441. 8D8C59000A37540001F239B6027A060C00791088C200FFB602FFDEC202FFCC0120D311B5
  2442. 04FF9A2B00C104FFB888C202FFC104FFDE9FD20DC202FFC104FFDE9CD20E9DB602FFDEC2
  2443. 02FFCC0120D311B504FF9BD2FFA0C202FFB98D8CC800CA3CC30001CA2EB6027909712E85
  2444. AC00C200FFB6D100DDB502FF9A9800C102FFC2D100D11090B888C102FFDE9CB502FFC1B7
  2445. 02DE9CB5B702C2D100C102FFDED30FD10BE78ABE05DDB5B7029A6400C2D100C102FFDED3
  2446. 0FD10BE68AB888C1B702E5D22EB504FFE5C104FF9FB504FFC104FFE58ABE05DDB504FFC2
  2447. D100C102FFDE9FD20DDEC104FF9CD1129DC2D100C102FFDE9CD20E9DB6D100C1B702C104
  2448. FF9CB5B702C102FFC104FF9CB502FFDDBE049B99FF9B65FFA0C2D100B988D018B54C00A0
  2449. CC00B98D8C560161365101013A3AB606D23F0400014021404240100082401000790988C2
  2450. 00FFB602FFC202FFCC008BBE07C23080B602FFC13E80DD93C13E80E09988BE0FC76B60D1
  2451. 2DD115C13E809CB53E80C13E80E993C13E80EC9988BE07E3B504FF8A05EBB504FFC13E80
  2452. C71E008ABE18C7F9FFD115B53E80DEA9B506FFC7F7FFD12DDE9FB504FFC13E80C104FFCF
  2453. 02000BDDB54C00C14C00BE05A0DEA9B888C2C700C7F000EDD30FB608FFC104FFDE9CB504
  2454. FFEDD112B68500C106FFBE0AEDDDD213B60AFF8A18C13E80C104FFCF0200CBDCB54C00C1
  2455. 4C00BE05A0DEA9B888C106FFAFBE15C2C700C7F000EDD30FB60AFFC104FFDE9CB504FF9A
  2456. 3700C10CFFED90B888C10CFFDE9CB50CFFA2C28500C10CFFDED328B93DC208FFC10CFFDE
  2457. D30FD10BC20AFFC10CFFDED30FD10B9FD10CB99BC6FFCC00B68F00C13E80E993C13E80EC
  2458. 9988C106FFAF88BE09C104FFE59CB504FFA0C104FFB88D8CE800A236E30000B6027A0E0E
  2459. 00790185CC009A8A00C28500D110B89A4200C28F00D110B888C28F00E2E5D30FCB012E9D
  2460. C28F00EAE0D30F9DB600FFC28F00C71100D20EB68F00C200FFD10BC7300093C200FFD10B
  2461. C75F009088BE04804D009BBBFFC28500D10BB502FFC28500DFD20EB68500C102FFBE18C1
  2462. 3E80C1E801CF0200C1DBB54C00C14C00BE05A0DEA9B888C2C700B68F00C1E801DE9CB5E8
  2463. 019B73FFC72600B54C00A0CC00B988C200FFE7E0D30FCC035566648BBE13C200FFE5D20D
  2464. CC062020202020449DB600FFA0C200FFC72700C200FFD1109FD1129DB988D018B54C00A0
  2465. CC00B98D8CC9006937C40004D23F1A26C140D940B6013A3A040088DDB54102DDB50A0285
  2466. 4600C200FFCC008BBE09C23080B608FF8A07C200FFB608FF8604C208FFC202FF9DB9BBC1
  2467. 04FFB894E6D11DB9C208FFC202FF9DB9C71E00D11DB9CC0650616B65743AB93BA0DDB888
  2468. C106FFDF8DBE0BD018B54C00A0C14C00B888D018C715008DBE0BD018B54C00A0C14C00B8
  2469. 8530008605C208FFC202FF9DB9BBC104FFB894E6D11DB9C208FFC202FF9DB9C71E00D11D
  2470. B9CC0650616B65743AB93BA0DDB888D018B54C00A0C14C00B88D8C0000222A7D0001CA2E
  2471. B603C22F6400F940314188C200FFCC008BBE05A0CC00B988DEB504FF9A5300C104FFC200
  2472. FFD11099B888C200FFC104FFDED30FD10BB506FFC106FFC75F0096C106FFC77F009088BE
  2473. 0BC106FFC75F0088B506FFC106FFC7800090BE0DC202FFC106FFD10C9DB602FFC104FFDE
  2474. 9CB504FF9BAAFFA0C202FFB98D870100000000FFFBFF048002001E800100248001002A80
  2475. 0100308002003E800100448002005E8002006C80010072800200F4810200040001000A00
  2476. 0100100001001600010023000100300002003A00010040000100460001004C0001005200
  2477. 010058000100650001006B0006007B000200850002008F00020099000600A9000200B300
  2478. 0200BD000200C7000200D1000200DB000100E1000100E7000200F1000100F7000100FD00
  2479. 0100030101001E01010032010100380101003E0101004B010100660101006C010200C301
  2480. 0100C9010200E80101000A02010041020100B702010002FFC106FFD10C9DB602FFC104FF
  2481. DE9CB504FF9BAAFFA0C202FFB98D870100000000FFFBFF048002001E800100248001002A
  2482. 800100308002003E800100448002005E8002006C80010072800200F4810200040001000A
  2483. 000100100001001600010023000100300002003A00010040000100460001004C000100
  2484.