[Copyright 1999,2002 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance at nemesis.lonestar.org Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]
MISOSYS EDAS-4.3 04/19/99 21:54:24 KSM/FLT - LS-DOS 6.2 Page 00001
00001 ;KSM/ASM - Keystroke Multiply Filter
00003 ;
000A 00004 LF EQU 10
000D 00005 CR EQU 13
00006 ;
0000 00007 *GET SVCMAC:3 ;SVC Macro equivalents
00008 ;SVCMAC/ASM - LS-DOS Version VI
00009 *LIST OFF
00401 *LIST ON
0000 00403 *GET COPYCOM:3 ;Copyright message
00404 ; COPYCOM - File for Copyright COMment block
00405 ;
0000 00406 *GET BUILDVER/ASM:3
00407 ;
00408 ; Buildver/asm is a bit of a kludge since not all utilities can load
00409 ; equates from LDOS60 and still compile. LOWCORE and everybody else
00410 ; relies on this setting, and it eventually ends up in LDOS60/EQU
00411 ; for programs that can use that.
00412 ;
FFFF 00413 @BLD631 EQU -1 ;<631>Build 631 distribution (LEVEL 1B)
00414 ; These switches activate patches made since the 1B release.
00415 ; It is important that all earlier patches be enabled when a higher
00416 ; patch is enabled.
00417 ; Patches C thru F were published in TMQ IV.iv, page 32 (NOTE: the
00418 ; patch addresses listed for SPOOL in SPOOL1/FIX are 19H high.)
FFFF 00419 @BLD631C EQU -1 ;<631>Apply 1C patches (SETKI)
FFFF 00420 @BLD631D EQU -1 ;<631>Apply 1D patches (DIR)
FFFF 00421 @BLD631E EQU -1 ;<631>Apply 1E patches (DIR & MEMDISK/DCT)
FFFF 00422 @BLD631F EQU -1 ;<631>Apply 1F patches (SPOOL)
00423 ; Patches G and H were published in TMQ V.i, pages 10 and 18/19.
FFFF 00424 @BLD631G EQU -1 ;<631>Apply 1G patches (//KEYIN,DIR,DO *)
FFFF 00425 @BLD631H EQU -1 ;<631>Apply 1H patches (MEMORY)
00426 ;
00427 ;End of BUILDVER/ASM
00428 IF @BLD631
00430 ELSE
00431 COM '<*(C) 1982,3,4,6 by LSI*>'
00432 ENDIF
00433 ;
2400 00434 ORG 2400H
00435 ;
00436 KSM
2400 00437 @@CKBRKC ;Check for break
2400+3E6A 00438 LD A,106
2402+EF 00439 RST 40
2403 2804 00440 JR Z,KSMA ;Contine if not
2405 21FFFF 00441 LD HL,-1 ; else abort
2408 C9 00442 RET
00443 ;
2409 ED53CA27 00444 KSMA LD (KSMDCB),DE ;Save ptr to DCB
240D E5 00445 PUSH HL ;Save ptr to cmdline buf
240E 00446 @@DSPLY HELLO$ ;Display copyright msg
00447 IFEQ 01H,1
240E+217225 00448 LD HL,HELLO$
00449 ENDIF
2411+3E0A 00450 LD A,10
2413+EF 00451 RST 40
2414 00452 @@FLAGS ;Get flags
2414+3E65 00453 LD A,101
2416+EF 00454 RST 40
2417 E1 00455 POP HL ;Rcvr cmndline pointer
00456 ;
00457 ; Check if entry from SET command
00458 ;
2418 FDCB025E 00459 BIT 3,(IY+'C'-'A') ;System request?
241C CA4B25 00460 JP Z,VIASET ;Quit if not
241F 11A126 00461 LD DE,KSMFCB ;Point to FCB
2422 00462 @@FSPEC ;Fetch the KSM filespec
2422+3E4E 00463 LD A,78
2424+EF 00464 RST 40
2425 C25725 00465 JP NZ,SPCREQ ;Jump on bad spec
2428 D5 00466 PUSH DE ;Save FCB pointer
2429 119626 00467 LD DE,PRMTBL$ ;Load param table pointer
242C 00468 @@PARAM ;Parse parms
242C+3E11 00469 LD A,17
242E+EF 00470 RST 40
242F D1 00471 POP DE ;Recover FCB pointer
2430 C26325 00472 JP NZ,IOERR ;Go on parm error
2433 217225 00473 LD HL,DFTKSM ;Init to default ext
2436 00474 @@FEXT ;Fetch if not entered
2436+3E4F 00475 LD A,79
2438+EF 00476 RST 40
00477 ;
00478 ; Transfer requested ENTER char to test loc
00479 ;
2439 213B00 00480 EPARM LD HL,';' ; set default ";"
243C 3A9D26 00481 LD A,(ERSP) ;Test parm response
243F CB77 00482 BIT 6,A ;Flag is no good!
2441 C26125 00483 JP NZ,PRMERR
2444 CB6F 00484 BIT 5,A ;Test string or value
2446 7E 00485 LD A,(HL) ;P/u assumed string
2447 2001 00486 JR NZ,$+3 ;Go if string entry
2449 7D 00487 LD A,L ;P/u hex or dec entry
244A 321328 00488 LD (ECHAR+1),A ;Stuff it in there
244D D5 00489 PUSH DE
244E 116D25 00490 LD DE,KSM$ ;Check if filter is
2451 00491 @@GTMOD ; already resident
2451+3E53 00492 LD A,83
2453+EF 00493 RST 40
2454 227D24 00494 LD (KSMMEM+1),HL ;Stuff start
2457 EB 00495 EX DE,HL ;Put DCB ptr to HL
2458 D1 00496 POP DE
2459 202C 00497 JR NZ,OPENKSM ;Go if not
00498 ;
00499 ; Make sure that the new DCB is same as the old
00500 ;
245B E5 00501 PUSH HL ;Save where to stuff
245C 4E 00502 LD C,(HL) ;P/u DCB pointer LSB
245D 23 00503 INC HL
245E 46 00504 LD B,(HL) ;P/u DCB pointer MSB
245F 210600 00505 LD HL,6 ;Get old DCB name &
2462 09 00506 ADD HL,BC ; stuff into error
2463 7E 00507 LD A,(HL) ; message in case
2464 2C 00508 INC L ; a different DCB
2465 66 00509 LD H,(HL) ; is referenced
2466 6F 00510 LD L,A
2467 227226 00511 LD (DCBNAM$),HL
246A B4 00512 OR H ;If DCB name is null,
246B 2ACA27 00513 LD HL,(KSMDCB)
246E E5 00514 PUSH HL ;Save pointer to stuff
246F 2803 00515 JR Z,UPDPTR ; then OK to use
2471 B7 00516 OR A
2472 ED42 00517 SBC HL,BC ;Same DCB pointer?
2474 C1 00518 UPDPTR POP BC ;Rcvr pointer to stuff
2475 E1 00519 POP HL ;Rcvr address to put pointer
2476 C24F25 00520 JP NZ,DCBERR ;Quit if filter in use
00521 ;
00522 ; Same DCB - Okay to stuff
00523 ;
2479 71 00524 LD (HL),C ;Store the DCB pointer
247A 23 00525 INC HL
247B 70 00526 LD (HL),B
247C 210000 00527 KSMMEM LD HL,$-$ ;If res, ptr to start
247F 015200 00528 LD BC,ECHAR-DVRBGN+1
2482 09 00529 ADD HL,BC ;Resident, stuff ECHAR
2483 3A1328 00530 LD A,(ECHAR+1) ; where it is in memory
2486 77 00531 LD (HL),A ;Stuff in upper mem
2487 21C126 00532 OPENKSM LD HL,KSMBUF ;Pt to buffer area
248A 0600 00533 LD B,0 ;Init LRL=256
248C 00534 @@OPEN ;Open the file
248C+3E3B 00535 LD A,59
248E+EF 00536 RST 40
248F C26325 00537 JP NZ,IOERR ;Jump on open error
2492 212128 00538 LD HL,DVREND ;Place file in memory 1st
2495 061A 00539 LD B,26 ;Init for 26 lines
2497 00540 KSM1 @@GET ;Get a char from file
2497+3E03 00541 LD A,3
2499+EF 00542 RST 40
249A 200C 00543 JR NZ,KSM2 ;Jump on error
249C 77 00544 LD (HL),A ;Stuff into memory
249D 23 00545 INC HL ;Inc memory pointer
249E FE0D 00546 CP CR ;Found end-of-line?
24A0 20F5 00547 JR NZ,KSM1 ;Loop if not
24A2 10F3 00548 DJNZ KSM1 ;Decrement the A-Z loop
24A4 2B 00549 DEC HL ;Backup over last CR &
24A5 04 00550 INC B ; adjust for one more
24A6 3E1C 00551 LD A,1CH ;No error here, just EOF
24A8 F5 00552 KSM2 PUSH AF ;Save error code
24A9 00553 @@CLOSE ;Close the file
24A9+3E3C 00554 LD A,60
24AB+EF 00555 RST 40
24AC F1 00556 POP AF
24AD FE1C 00557 CP 1CH ;Ck for eof
24AF C26325 00558 JP NZ,IOERR ;Jump on not eof error
24B2 360D 00559 KSM3 LD (HL),CR ;End with a
24B4 23 00560 INC HL ;For all remaining
24B5 10FB 00561 DJNZ KSM3 ;"letters" not entered
24B7 DD2ACA27 00562 LD IX,(KSMDCB) ;Rcvr user DCB entry
24BB 112128 00563 LD DE,DVREND ;Calculate the length
24BE AF 00564 XOR A ; of the KSM file just
24BF ED52 00565 SBC HL,DE ; loaded
24C1 44 00566 LD B,H ;Xfer length
24C2 4D 00567 LD C,L
24C3 2A7D24 00568 LD HL,(KSMMEM+1) ;If not previously res,
24C6 7D 00569 LD A,L ; move to HIGH$
24C7 B4 00570 OR H
24C8 281E 00571 JR Z,MOVTOHI
24CA C5 00572 PUSH BC ;Save length
24CB E5 00573 PUSH HL ;Save old start
24CC 09 00574 ADD HL,BC ;Start + data
24CD 3812 00575 JR C,KSM3A ;Bad if wrap past 0
24CF 016100 00576 LD BC,DVREND-DVRBGN+1
24D2 09 00577 ADD HL,BC ;Start + data + filter
24D3 380C 00578 JR C,KSM3A ;Bad if wrap past 0
24D5 EB 00579 EX DE,HL ;Save in reg DE
24D6 E1 00580 POP HL ;Rcvr old start
24D7 23 00581 INC HL ;Pt to last byte used
24D8 23 00582 INC HL
24D9 7E 00583 LD A,(HL) ;P/u last byte used
24DA 23 00584 INC HL
24DB 66 00585 LD H,(HL) ; into HL
24DC 6F 00586 LD L,A
24DD E5 00587 PUSH HL
24DE AF 00588 XOR A ;Clear carry flag
24DF ED52 00589 SBC HL,DE ;Is req > available?
24E1 E1 00590 KSM3A POP HL ;Rcvr old start to reuse
24E2 C1 00591 POP BC ;Rcvr length of req
24E3 DA5325 00592 JP C,NOROOM ;Quit if file too big
24E6 1809 00593 JR KSM0A
24E8 C5 00594 MOVTOHI PUSH BC ;Save data length
24E9 210000 00595 LD HL,0 ;P/u current high memory
24EC 45 00596 LD B,L
24ED 00597 @@HIGH$
24ED+3E64 00598 LD A,100
24EF+EF 00599 RST 40
24F0 C1 00600 POP BC ;Recover data length
24F1 22C327 00601 KSM0A LD (DVRBGN+2),HL ;Stuff last byte used
24F4 22CF27 00602 LD (RX1),HL ;Stuff ptr to flag byte
24F7 3600 00603 LD (HL),0 ;Init the KSM char ptr
24F9 2B 00604 DEC HL ; to zero to show no
24FA 3600 00605 LD (HL),0 ; char avail at startup
24FC 2B 00606 DEC HL
24FD 112128 00607 LD DE,DVREND ;Move data to high
2500 1A 00608 MOVLP LD A,(DE) ;Data is in reverse order
2501 77 00609 LD (HL),A
2502 2B 00610 DEC HL ;Dec himem ptr
2503 13 00611 INC DE ; and inc the char ptr
2504 0B 00612 DEC BC ;Reduce char count
2505 78 00613 LD A,B ; and check if done
2506 B1 00614 OR C
2507 20F7 00615 JR NZ,MOVLP ;Loop back if not
2509 016000 00616 LD BC,DVREND-DVRBGN ;Get driver len
250C AF 00617 XOR A ;Reduce potential HIGH$
250D ED42 00618 SBC HL,BC ; by driver length
250F 3A7D24 00619 LD A,(KSMMEM+1) ;Don't update HIGH$
2512 B7 00620 OR A ; if previously res
2513 2809 00621 JR Z,DOHIGH ;Go if not resident
00622 ;
00623 ; Module already resident
00624 ;
2515 ED5B7D24 00625 LD DE,(KSMMEM+1) ;P/u module entry point
2519 213926 00626 LD HL,KSMRPL$ ; & reuse the filter
251C 1818 00627 JR KSM8
00628 ;
00629 ; Stuff new HIGH$ value (Note: B=0 for driver
00630 ; length so there is no damage on the @@HIGH$ SVC
00631 ;
251E 0600 00632 DOHIGH LD B,0
2520 00633 @@HIGH$
2520+3E64 00634 LD A,100
2522+EF 00635 RST 40
2523 23 00636 INC HL ;Pt to driver start
2524 EB 00637 EX DE,HL
2525 D5 00638 PUSH DE ;Save start of driver
2526 210900 00639 LD HL,KSMDCB-DVRBGN
2529 19 00640 ADD HL,DE ;Point to filter DCB ptr
252A 22DF27 00641 LD (RX2),HL
252D 21C127 00642 LD HL,DVRBGN ;Move parms also
2530 EDB0 00643 LDIR
2532 D1 00644 POP DE ;Rcvr driver ept
2533 212226 00645 LD HL,KSMACT$ ;Init "KSM installed
2536 DD360045 00646 KSM8 LD (IX),40H!5 ;Init DCB type to "input"
253A DD7301 00647 LD (IX+1),E ; & filter & stuff the
253D DD7202 00648 LD (IX+2),D ; filter address
2540 FDCB03F6 00649 SET 6,(IY+'D'-'A') ;Turn on device flag bit
2544 00650 @@LOGOT ;Display installation msg
00651 IFEQ 00H,1
00652 LD HL,
00653 ENDIF
2544+3E0C 00654 LD A,12
2546+EF 00655 RST 40
2547 210000 00656 LD HL,0 ;Set no error
254A C9 00657 RET ;Back to the user
00658 ;
00659 ; Error processing
00660 ;
254B 21FB25 00661 VIASET LD HL,VIASET$ ;"Install with Set
254E DD 00662 DB 0DDH
254F 215226 00663 DCBERR LD HL,DCBERR$ ;"Filter in use already
2552 DD 00664 DB 0DDH
2553 217526 00665 NOROOM LD HL,NOROOM$ ;"Memory frozen
2556 DD 00666 DB 0DDH
2557 211026 00667 SPCREQ LD HL,SPCREQ$ ;"Missing filespec
255A 00668 @@LOGOT ;Display an error
00669 IFEQ 00H,1
00670 LD HL,
00671 ENDIF
255A+3E0C 00672 LD A,12
255C+EF 00673 RST 40
255D 21FFFF 00674 LD HL,-1 ;Set abort code
2560 C9 00675 RET
2561 3E2C 00676 PRMERR LD A,44 ;Init PARM ERROR
2563 6F 00677 IOERR LD L,A ;Error code to HL
2564 2600 00678 LD H,0
2566 F6C0 00679 OR 0C0H ;Set short, return
2568 4F 00680 LD C,A ;Error to C
2569 00681 @@ERROR ; for error display
2569+3E1A 00682 LD A,26
256B+EF 00683 RST 40
256C C9 00684 RET
00685 ;
00686 ; Data and message area
00687 ;
256D 24 00688 KSM$ DB '$KSM',3
4B 53 4D 03
2572 00689 DFTKSM EQU $ ;Note: HELLO$ must follow
2572 4B 00690 HELLO$ DB 'KSM Filter'
53 4D 20 46 69 6C 74 65
72
257C 00691 *GET CLIENT:3
00692 ;CLIENT/ASM - File to establish sign-on headers
00693 ; and version numbers.
00694 ;
00695 ; EACH STRING SHOULD CONTAIN ONLY 63 CHARACTERS !!
00696 ;
00697 IF @BLD631
00698 ; 12345678901234567890123456789012345678901234567890
257C 20 00699 DB ' - 6.3.1 - Copyright 1982/83/84/86/90 by MISOSYS, ';<631>
2D 20 36 2E 33 2E 31 20
2D 20 43 6F 70 79 72 69
67 68 74 20 31 39 38 32
2F 38 33 2F 38 34 2F 38
36 2F 39 30 20 62 79 20
4D 49 53 4F 53 59 53 2C
20
25AE 49 00700 DB 'Inc., ',10 ;<631>
6E 63 2E 2C 20 20 20 20
20 20 20 0A
00701 ELSE
00702 DB ' - 6.3.0 - Copyright 1982/83/84/86 by Logical Syst'
00703 DB 'ems, Inc. ',10
00704 ENDIF
00705 ;
00706 ; DB 'All Rights Reserved. Licensed 1982/83/84 to Tandy '
00707 ; DB 'Corporation.',10,13
00708 ;
00709 ; DB 'All Rights Reserved. Beta-TEST Level/AD, DO NOT DI'
00710 ; DB 'STRIBUTE !! ',10,13
00711 ; DB 'All Rights reserved by LSI, 8970 N. 55th St. Milwa'
00712 ; DB 'ukee, Wisc. ',10,13
25BB 41 00713 DB 'All Rights Reserved. Unauthorized duplication is p'
6C 6C 20 52 69 67 68 74
73 20 52 65 73 65 72 76
65 64 2E 20 55 6E 61 75
74 68 6F 72 69 7A 65 64
20 64 75 70 6C 69 63 61
74 69 6F 6E 20 69 73 20
70
25ED 72 00714 DB 'rohibited. ',10,13
6F 68 69 62 69 74 65 64
2E 20 20 0A 0D
00715 ;
25FB 4D 00716 VIASET$ DB 'Must install via SET',CR
75 73 74 20 69 6E 73 74
61 6C 6C 20 76 69 61 20
53 45 54 0D
2610 46 00717 SPCREQ$ DB 'Filespec required',CR
69 6C 65 73 70 65 63 20
72 65 71 75 69 72 65 64
0D
2622 4B 00718 KSMACT$ DB 'KSM is now operational',CR
53 4D 20 69 73 20 6E 6F
77 20 6F 70 65 72 61 74
69 6F 6E 61 6C 0D
2639 4B 00719 KSMRPL$ DB 'KSM filter data replaced',CR
53 4D 20 66 69 6C 74 65
72 20 64 61 74 61 20 72
65 70 6C 61 63 65 64 0D
2652 4B 00720 DCBERR$ DB 'KSM filter already attached to *xx',CR
53 4D 20 66 69 6C 74 65
72 20 61 6C 72 65 61 64
79 20 61 74 74 61 63 68
65 64 20 74 6F 20 2A 78
78 0D
2672 00721 DCBNAM$ EQU $-3
2675 52 00722 NOROOM$ DB 'Request exceeds available memory',CR
65 71 75 65 73 74 20 65
78 63 65 65 64 73 20 61
76 61 69 6C 61 62 6C 65
20 6D 65 6D 6F 72 79 0D
2696 D2 00723 PRMTBL$ DB 'R'!80H,0F5H,'ENTER',0
F5 45 4E 54 45 52 00
269D 00724 ERSP EQU $-1
00725 ;
269E 3A24 00726 DW EPARM+1
26A0 00 00727 DB 0
00728 ;
26A1 00729 KSMFCB DEFS 32
26C1 00730 KSMBUF DEFS 256
00731 ;
00732 ; Key-Stroke Multiplication driver
00733 ;
27C1 180B 00734 DVRBGN JR START ;Branch around header
27C3 0000 00735 DW $-$ ;Last byte used
27C5 04 00736 DB 4,'$KSM'
24 4B 53 4D
27CA 0000 00737 KSMDCB DW $-$ ;Pointer to KSM's DCB
27CC 0000 00738 DW 0
00739 ;
27CE 210000 00740 START LD HL,0 ;P/u possible address to
27CF 00741 RX1 EQU $-2
27D1 56 00742 LD D,(HL) ; a KSM that was parsed
27D2 2B 00743 DEC HL ; to a ';' logical ENTER
27D3 5E 00744 LD E,(HL) ;If this vector is zero,
27D4 2B 00745 DEC HL ; no KSM continuation is
27D5 EB 00746 EX DE,HL ; pending - find a new
27D6 F5 00747 PUSH AF ; entry. Save flags.
27D7 7C 00748 LD A,H ; If <> 0, grab the KSM
27D8 B5 00749 OR L ; line continuation
27D9 202B 00750 JR NZ,DVR4A
27DB F1 00751 POP AF ;Rcvr flags
27DC D5 00752 PUSH DE ;Save ptr to 'A'-KSM
27DD DD2ACA27 00753 DVR1 LD IX,(KSMDCB) ;Chain to next DCB module
27DF 00754 RX2 EQU $-2
27E1 00755 @@CHNIO
27E1+3E14 00756 LD A,20
27E3+EF 00757 RST 40
27E4 D1 00758 POP DE ;Rcvr 'A'-KSM pointer
27E5 C0 00759 RET NZ ;Back if nothing or error
27E6 CB7F 00760 BIT 7,A ;Is it a CLEAR function?
27E8 C8 00761 RET Z ;Ret if not down
27E9 F5 00762 PUSH AF ;Save key entry
27EA FEC1 00763 CP 'A'+80H ;Ck for range A-Z
27EC 3804 00764 JR C,DVR2 ;Exit if < 'A'
27EE FEDB 00765 CP 'Z'+1+80H
27F0 3803 00766 JR C,DVR3 ;Use it if A-Z
27F2 F1 00767 DVR2 POP AF ;Rcvr orig flag
27F3 BF 00768 CP A ;Set Z-flag
27F4 C9 00769 RET
00770 ;
00771 ; Key code entry includes key
00772 ;
27F5 F1 00773 DVR3 POP AF ;Rcvr orig flag
27F6 62 00774 LD H,D ;Rcvr ptr to 'A'-KSM
27F7 6B 00775 LD L,E ; & xfer to reg HL
27F8 D6C1 00776 SUB 80H+'A' ;Adjust offset to index
27FA 280B 00777 JR Z,DVR5 ;Bypass if was 'A'
27FC 47 00778 LD B,A ;Set loop counter
27FD 3E0D 00779 LD A,CR ;Read past the KSM lines
27FF BE 00780 DVR4 CP (HL) ; for letters preceding
2800 2B 00781 DEC HL ; key entry to find the
2801 20FC 00782 JR NZ,DVR4 ; KSM line for entered
2803 10FA 00783 DJNZ DVR4 ; key code
2805 3E 00784 DB 3EH ;Ignore next inst
00785 ;
00786 ; Routine to pick up the next KSM character
00787 ; & return it to the system KI request
00788 ;
2806 F1 00789 DVR4A POP AF ;Clean the stack
2807 7E 00790 DVR5 LD A,(HL) ;P/u the next KSM char
2808 2B 00791 DEC HL ;Dec pointer to next one
2809 EB 00792 EX DE,HL ;Put either a pointer to
280A 23 00793 INC HL ; the next KSM char or
280B FE0D 00794 CP CR ; if got last, zero the
280D 280B 00795 JR Z,DVR6 ; data pointer
280F 73 00796 LD (HL),E ;Stuff pointer to next
2810 23 00797 INC HL ; character to fetch
2811 72 00798 LD (HL),D
2812 FE3B 00799 ECHAR CP ';' ;Ck on logical line end
2814 2002 00800 JR NZ,DVR7 ; & convert to
2816 3E0D 00801 LD A,CR ; if it was semi-colon
2818 BF 00802 DVR7 CP A ;Tell the system we have
2819 C9 00803 RET ; retrieved a char
00804 ;
00805 ; Got the terminating X'0D' - Clear the pointer
00806 ;
281A AF 00807 DVR6 XOR A ;Clear the KSM char ptr
281B 77 00808 LD (HL),A ; as next request is new
281C 23 00809 INC HL
281D 77 00810 LD (HL),A
281E FEFF 00811 CP 0FFH ;Set NZ & A = 0
2820 C9 00812 RET
2821 00813 DVREND EQU $
00814 ;
2400 00815 END KSM
2400 is the transfer address
00000 Total errors
[Copyright 1999,2002 Frank Durda IV, All Rights Reserved. Mirroring of any material on this page in any form is expressly prohibited. The official web site for this material is: http://nemesis.lonestar.org Contact this address for use clearances: clearance at nemesis.lonestar.org Comments and queries to this address: web_software_2011 at nemesis.lonestar.org]