;* * * * * * * * * * * * * * * version 2.7 * * * * * * * * * * * * * * * ; [31] Fix display of file rename ; RonB, 05/05/84 ;[fdc] Add help message about "?" when starting up. ; Add help message about "?" when connecting. ; Fix glitch in Bernie's command level flagging (KERCMD). ; F. da Cruz, Columbia ; ;[] Prefixed all ermes'sages with bell and changed ermes3 (secondary ; command didn't parse) from "?Not confirmed" to "?Unrecognized ; command-option". ; Prettied up (TABs between INSTR and AC's) and fixed SET command ; using RSKP convention - B.Eiben, EIBEN at DEC-Marlboro, 2-May-84 ; [30] ; (e) Recombine KERSYS and KERMIT. ; (d) Add SET PORT command, currently unimplemented (KERMIT,KERIO) ; (c) Isolate all machine dependencies in KERIO. ; (b) Make DEL work like BS and ^X like ^U in command input (KERCMD). ; (a) Add keyboard DEL key alteration for APC (KERIO). ; RonB, 04/18/84 ; [29] ; (g) Add 8th bit quoting (KERPRO,KERFIL,KERSYS). ; (f) Add QUIT command, synonymous to EXIT (KERSYS). ; (e) Move logging code to terminal module, make it a SET command, ; add quit/resume (^Q/^R) to make it more standard (KERTRM,KERSYS) ; (d) Expand receive buffer and check for packet overruns (KERPRO) ; (c) Clear FCB prior to opening or creating a file (KERUTL) ; (b) Add TAKE file processing, initially from KERMIT.INI ; (KERMIT,KERSYS,KERUTL) ; (a) Send error packet whenever a fatal error occurs (KERPRO) ; RonB, 04/08/84 ;* * * * * * * * * * * * * * * version 2.6 * * * * * * * * * * * * * * * ; [28] ; (e) Add local stack for use in interrupt handling (KERIO) ; (d) Improve input filename processing, allow valid special chars ; (KERFIL,KERCMD) ; (c) Make disk full error messages more accurate (KERSYS) ; (b) Include filename in file-not-found error message (KERPRO,KERSYS) ; (a) Clear attribute bits from filename before sending (KERPRO) ; RonB, 03/27/84 ; [27] add "Kermit-86" to interrupt messages. Rg 20-Mar-1984 ; [26] Move terminal emulation (TELNET) to a separate module: KERTRM. ; This is to "modularize" terminal emulation. Rg ; ; [25] Move logic for "seteol" and "escape" from KERSYS into KERCMD so those ; routines need not use internal CMD routines and variables. For this ; purpose add 2 parse routines and codes: "cmcha" and "cmnum". Also ; eliminate the use of some KERCMD text strings in KERPRO. The point ; of this is to keep calls to CMD modular since I want to eventually ; replace the whole thing. ; R. Garland 9-Mar-1984 ; [24] ; (a) Add terminal session logging (KERMIT,KERSYS,KERUTL) ; (b) Allow escape character to local-echo (KERMIT) ; RonB, 03/15/84 ; ; [23] Fix ASCII-mode-junk-at-end-of-file bug. (KERFIL) Rg ;* * * * * * * * * * * * * * * version 2.5 * * * * * * * * * * * * * * * ; [22] ; (a) - Cosmetics - changed FILE-Warning to Warning, parallel to CP/M ; Version and makes SET FI Binary painless ; (b) - made this version 2.5 to stop confusion -B.Eiben DEC Marlboro ; 7-March-84 ; [21] ; (a) - Add SET TIMER ON/OFF option, default is OFF (KERSYS,KERPRO) ; (b) - Change SET FILE-MODE to SET FILE-TYPE to match VAX/VMS (KERSYS) ; (c) - Move all Set/Show processing to KERSYS (KERMIT,KERSYS) ; RonB, 03/05/84 ; [20] ; (a) - Fix version & send/receive header for APC (KERSYS,KERPRO) ; (b) - Add Break processing & set clock rate for NEC (KERIO) ; (c) - Add escape character help in telnet mode (KERMIT,KERSYS) ; (d) - Add a pseudo time-out to PRTOUT so it doesn't loop forever (KERIO) ; (e) - Clean up environment better on KABORT (KERPRO,KERUTL) ; RonB, 03/02/84 ;* * * * * * * * * * * * * * * version 2.4 * * * * * * * * * * * * * * * ; [19] (let Bill's and Jeff's changes be 17 and 18) ; (a) - Add flow control for input comm port buffer. This is primarily to ; allow smooth scrolling and "Hold Screen" to work on the Rainbow. Add ; associated Set, Show, and Help for same. (KERSYS and KERIO) ; (b) - Clear screen at beginning and end of program. (KERSYS and KERIO) ; (c) - Give "bdos" mnemonic to interrupt 224. (KERUTL) ; (d) - Change telnet to check keyboard between comm port reads. (KERMIT) ; Woops - can't get this dumb simple thing to work. Save for later. ; (e) - Put in Break transmission in connect mode. (KERMIT,KERIO) ; (f) - Put in ^X/^Z file interruption. (KERSYS, KERPRO, KERFIL) ; (g) - Put in timeouts for packet receive routines. (KERPRO) ; [Rg] R. Garland, 2/84, OC.GARLAND%CU20B@COLUMBIA-20.ARPA ; Columbia Univ. OC.GARLAND@CU20B.BITNET ;* * * * * * * * * * * * * * * version 2.3 * * * * * * * * * * * * * * * ; Fill in the missing parity routines to allow this program to work with ; IBM mainframes and other systems that require parity (edit marked "[par]"). ; Include RonB's fixes for places where previous edit broke the NEC APC. ; Jeff Damens, Columbia, 6 Feb 84 ;* * * * * * * * * * * * * * * version 2.2 * * * * * * * * * * * * * * * ; Added CFIBFs (buffer clearing) where necessary, put conditional assembly ; code all in two modules (86KERIO and 86KERSYS), created new module ; (86KERSYS), added CTLPRT routine to print out control chars for the SHOW ; command, made SERINI called once at the beginning of the program and nowhere ; else and added user protocol timeouts (hitting a ). ; Bill Catchings: 12:36pm Thursday, 19 January 1984 ;* * * * * * * * * * * * * * * version 2.1 * * * * * * * * * * * * * * ; [B.E. 3-Jan-83] added DTR-code (in 86kermit and 86kerio) for RAINBO ; ; [16] Add file-mode ASCII or BINARY processing. ; RonB,01/02/84 ; [15] Clear screen lines before displaying packet debug. ; RonB,12/29/83 ; [14] Fix nout to print decimal. ; (in the KERPRO.A86 module) ; RonB,12/28/83 ; [13] Use control-Z's for filler in partial sectors instead of nulls. ; (in the KERPRO.A86 module) ; RonB,12/27/83 ; [12] Allow user abort from the keyboard in the send and receive routines. ; (in the KERPRO.A86 module) ; RonB,12/27/83 ; [11] Capitalize and parse filename being received. ; (in the KERFIL.A86 module) ; RonB,12/27/83 ; [10] Correct missing elements in the Show display. ; RonB,12/27/83 ; [9] Fix filename parsing, and add wildcard ability. ; (in the KERCMD.A86, KERPRO.A86, & KERFIL.A86 modules) ; RonB,12/26/83 ; [8] Show choices for ambiguous keywords, finish keyword on '?' ; (in the KERCMD.A86 module) ; RonB,12/26/83 ; [7] Do tab expansion and suppress nulls while in telnet mode. ; (in the KERUTL.A86 module) ; RonB,12/24/83 ; [6] Add support for changing baud rate. ; RonB,12/24/83 ; [5] Put OFF/ON command table in alphabetical order. ; RonB,12/24/83 ; [4] Change default escape character to '^' because NEC keyboard doesn't ; generate a control-\. ; RonB,12/24/83 ; [3] Change "esc,'[H'" to "esc,'[1;1H'" to get around bug in NEC BIOS. ; This should not affect operation on the Rainbow. ; RonB,12/23/83 ; [2] Add a de-initialization routine for the serial port, to restore ; changed interrupt vectors, etc. ; (in the KERIO.A86 module) ; RonB,12/23/83 ; [1] Add I/O support for the NEC Advanced Personal Computer ; (in the KERIO.A86 module) ; RonB,12/23/83 ; ; RonB is Ronald P. Blanford ; Dept. of Computer Science, FR-35 ; University of Washington ; Seattle, Washington 98195 ; ; ; * * * * * * * * * * * * * * * version 2.0 * * * * * * * * * * * * * * * ; KERMIT - KL10 Error-free Reciprocal Micro Interconnect over TTY-lines ; ; Kermit Protocol Version 2 ; ; Based on the KERMIT Protocol. ; ; Copyright (C) 1983 William B. Catchings III ; This program implements the Kermit Protocol developed at Columbia ; University. This version is being written specifically for the ; DEC Rainbow 100. It will hopefully take advantage of much of what ; was learned in implementing the CP/M-80, DEC-20 and other versions. ; Things to do: ; Add new features from Kermit-80, like local CP/M functions ; Make all commands the same as those in Kermit-80 ; Now all system dependencies have been isolated in 86KERIO, which ; will be implemented as a separate module for each system. This ; eliminates source code ballooning when other systems are added ; which have (for example) non-ANSI screen controls and terminal ; emulation capabilities, as well as specific port drivers. ; Information about what routines are needed in the 86KERIO module ; is given in the 86KERMIT.HLP file. ; ; So far the systems supported are: ; NEC APC in 86KERIO.APC ; DEC Rainbow in 86KERIO.RB ; ; PIP 86KERIO.A86=86KERIO.??? - will make system-dependent routines available ; ASM86 86KERMIT $PZ - will assemble without listing ; GENCMD 86KERMIT - will LOAD ; REN KERMIT.CMD=86KERMIT.CMD - will make it "real" after testing TITLE 'Kermit' TRUE EQU 1 FALSE EQU 0 ; Definitions: soh EQU 01O bell EQU 07O tab EQU 11O lf EQU 12O ff EQU 14O cr EQU 15O xon EQU 21O xoff EQU 23O esc EQU 33O del EQU 177O parevn EQU 00H ;Even parity. ;[21c] begin parmrk EQU 01H ;Mark parity. parnon EQU 02H ;No parity. parodd EQU 03H ;Odd parity. parspc EQU 04H ;Space parity. ibmpar EQU parmrk ;IBM's parity (mark). defpar EQU parnon ;Default parity (none). defeco EQU 00H ;Default is echo off ;[21a] defesc EQU '\'-100O ;Escape char is Control backslash by default. ;note: generated by INS key on the APC. deftmr EQU 00H ;Default is timer off ;[21a] deflog EQU 00H ;Default is logging off ;[24a] floxon EQU 1 ;[19a] flonon EQU 0 ;[19a] diasw EQU 00H ;Default is diagnostics off. ;[21c] end ; The actual program: CSEG ;Start coding! reboot: pushf ;Push flags on CCP's stack. ;[12] pop ax ;flags in AX. mov bx, ds ;Set SS to DS. mov ss, bx lea sp, stack ;Set up the stack pointer. push ax ;Restore the flags. popf call serini ;Do any necessary serial port initialization. call dspver ;Clear screen and print version header lea dx, hlpmsg ;[fdc] Give help message about "?" call tmsgcr ;[fdc] ; This is the main KERMIT loop. It prompts for and gets the user's commands. kermit: lea dx, kerm call prompt ;Prompt the user. lea dx, comtab lea bx, tophlp mov ah, cmkey call comnd jmp kermt2 ;Tell them about the error. mov cmlevl, 1 ;we're going into options call bx ;Call the routine returned. jmp kermt3 ;Tell them about the error. cmp extflg, 0 ;Check if the exit flag is set. je kermit ;If not, do it again. call serfin ;clean up serial port environment ;[2] call haltf ;If so, exit. ret ;Just in case! kermt2: lea dx, ermes1 ;Give an error. call tcrmsg jmp kermit kermt3: lea dx, ermes3 ;Give an error. call tcrmsg jmp kermit ; This is the EXIT command. It leaves KERMIT and returns to CP/M. exit: mov ah, cmcfm call comnd ;Get a confirm. jmp r mov extflg, 1 ;Set the exit flag. jmp rskp ; This is the HELP command. help: mov ah, cmcfm call comnd ;Get a confirm. jmp r lea dx, tophlp ;Print some help. call tmsg jmp rskp ; FINISH - tell remote KERSRV to exit. finish: mov ah,cmcfm ;Parse a confirm. call comnd jmp r mov ah, 'F' call gensen ;Send the finish command. jmp rskp ; BYE - tell remote KERSRV to logout and then exit to CP/M. bye: mov ah,cmcfm ;Parse a confirm. call comnd jmp r mov ah, 'L' call gensen ;Send the logout command. mov extflg,1 ;Set exit flag. jmp rskp ; LOGOUT- tell remote KERSRV to logout. logout: mov ah,cmcfm ;Parse a confirm. call comnd jmp r mov ah, 'L' call gensen ;Send the logout command. jmp rskp ; RECEIVE - Receive a file or files from the remote Kermit. For compati- ; bility the receive (now GET is the command.) rec: mov ah, cmtxt ;Parse an arbitrary text string. lea bx, data ;Where to put the parsed text. call comnd jmp r cmp ah, 0 ;Read in any chars? jne get1 ;If so, join the get code. call read ;Do the actual protocol work. jmp rskp ; GET - Get a file or files from the remote server Kermit. get: mov ah, cmtxt ;Parse an arbitrary text string. lea bx, data ;Where to put the parsed text. call comnd jmp r cmp ah, 0 ;Read in any chars? jne get1 ;If not give an error. lea dx, ermes5 call tcrmsg jmp rskp get1: mov al, ah mov ah, 0 mov argbk1, ax ;Remember number of chars we read. mov ah, '$' ;Used for printing. mov [bx], ah call init ;Paint screen and initialize file buffers. call cfibf ;Clear any stacked NAKs. call clrfln ;Prepare to print filename. lea dx, data ;Print file name. call tmsg mov argblk, 0 ;Start at packet zero. mov ah, 'R' ;Receive init packet. call spack ;Send the packet. jmp r call read1 ;Join the read code. jmp rskp ; SEND - Send a file or files to the remote Kermit. sencom: mov ah, cmifi ;Parse an input file spec. lea dx, fcb ;Give the address for the FCB. call comnd jmp r ;Give up on bad parse. mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. call send jmp rskp ; SET - Set some Kermit parameter. setcom: lea dx, settab ;Parse a keyword from the set table. lea bx, sethlp mov ah,cmkey call comnd jmp r call bx ;Call the specific set routine in KERSYS. jmp r ;We got an error jmp rskp ; STATUS - Give some statistics on the connection. (NYI) status: mov ah,cmcfm ;Parse a confirm. call comnd jmp r lea dx, infms6 ;Tell the user that it's not yet implemented. call tcrmsg jmp rskp ; TAKE - Specify file which will supply command input. ;[29b] begin take: mov ah, cmifi ;Parse an input file spec. lea dx, tkfcb ;Give the address for the FCB. call comnd jmp r ;Give up on bad parse. mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. mov tkflg, 1 ;Turn on command file input mov tkptr, 0 ;Indicate file not yet open jmp rskp ;[29b] end ; Set parity for character in Register AL. dopar: cmp parflg, parnon ;No parity? je parret ;Just return cmp parflg, parevn ;Even parity? jne dopar0 and al, 7FH ;Strip parity. jpe parret ;Already even, leave it. or al, 80H ;Make it even parity. jmp parret dopar0: cmp parflg, parmrk ;Mark parity? jne dopar1 or al, 80H ;Turn on the parity bit. jmp parret dopar1: cmp parflg, parodd ;Odd parity? jne dopar2 and al, 7FH ;Strip parity. jpo parret ;Already odd, leave it. or al, 80H ;Make it odd parity. jmp parret dopar2: and al, 7FH ;Space parity - turn off parity bit. parret: ret ; The following are the SET command subroutines ;[21c] begin ; except for Baud rate and Port selection, which are ; isolated in the system dependent modules. ; Sets debugging mode on and off. debset: lea dx, ontab lea bx, onhlp mov ah, cmkey call comnd jmp r mov temp1, bx mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. mov bx, temp1 mov debug, bl ;Set the debug flag. jmp rskp eolset: ;[25] begin mov dx, 01FH ;maximum value of number allowed. (31) lea bx, eolhlp ;help string for parser mov ah, cmnum ;look for a decimal number call comnd ;call the parser jmp r mov seol, bl ;set the eol character jmp rskp escape: lea bx, eschlp ;help string for parser mov ah, cmcha ;parser code for single character call comnd ;call parser jmp r mov escchr, bl ;set the character jmp rskp ;[25] end ; This is the SET file-type (ASCII or BINARY) command ;[16] begin fmset: lea dx, fmtab lea bx, fmhlp mov ah, cmkey call comnd jmp r mov temp1, bx mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. mov bx, temp1 mov binflg, bl ;Set the file-type flag. jmp rskp ;[16] end ; This is the SET Warning command. filwar: lea dx, ontab lea bx, onhlp mov ah, cmkey call comnd jmp r mov temp1, bx mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. mov bx, temp1 mov flwflg, bl ;Set the file warning flag. jmp rskp ; Set flow-control flag [19a] Begin setflo: lea dx, flotab ;set up ON/OFF response lea bx, flohlp mov ah, cmkey call comnd ;get response jmp r mov temp1, bx ;save response mov ah, cmcfm call comnd ;get confirm jmp r mov bx, temp1 mov floctl, bl ;set flag jmp rskp ;[19a] end ; This is the SET IBM command. ibmset: lea dx, ontab lea bx, onhlp mov ah, cmkey call comnd jmp r mov temp1, bx mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. mov bx, temp1 mov ibmflg, bl ;Set the IBM flag. cmp bl, 0 ;Turning on or off? je ibmst1 ;If off, set parity & local echo to defaults. mov parflg, ibmpar ;Set IBM parity. ;[21a] begin mov ecoflg, 1 ;Set local echo on. mov tmrflg, 1 ;Set timer on. jmps ibmst2 ibmst1: mov parflg, defpar ;Set default parity. mov ecoflg, defeco ;Set local echo to default. mov tmrflg, deftmr ;Set timer to default. ibmst2: jmp rskp ;[21a] end ; This is the LOCAL echo SET subcommand. local: lea dx, ontab lea bx, onhlp mov ah, cmkey call comnd jmp r mov temp1, bx ;Save the parsed value. mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. mov bx, temp1 mov ecoflg, bl ;Set the local echo flag. jmp rskp ; This is the LOG filename SET command log: mov ah, cmofi ;Get an output filename lea dx, lfcb ;For a log file call comnd jmp r mov ah, cmcfm ;Confirm it call comnd jmp r mov logflg, 0FFh ;Turn logging on jmp rskp ; This is the SET Parity command. setpar: lea dx, partab lea bx, parhlp mov ah, cmkey call comnd jmp r mov temp1, bx mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. mov bx, temp1 mov parflg, bl ;Set the parity flag. jmp rskp ; This is the SET Timer command. ;[21a] begin tmrset: lea dx, ontab lea bx, onhlp mov ah, cmkey call comnd jmp r mov temp1, bx mov ah, cmcfm call comnd ;Get a confirm. jmp r ;Didn't get a confirm. mov bx, temp1 mov tmrflg, bl ;Set the timer flag. jmp rskp ;[21a] end ;[21c] end ; The following are display subroutines used primarily ;[21c] begin ; in the SHOW command. ;[10] begin ; This routine matches a table value and prints the corresponding ; keyword. On entry: ; al = value to match ; bx = beginning address of table tabprt: mov ah, 0 ;make it a word comparison mov ch, [bx] ;get the table size inc bx tabp1: mov dl, [bx] ;get the offset to the value inc bx ;point to beginning of the keyword mov dh, 0 mov si, dx cmp ax, 1[bx+si] ;does the value match? je tabp2 ;yes, go print the keyword at [bx]. add bx, dx ;otherwise go to next entry add bx, 3 dec ch ;any more entries jnz tabp1 ;if so, go check the next lea bx, erms20 ;else say value was not found tabp2: mov dx, bx call tmsg ;display the keyword ret ;[10] end ; This routine prints out the escape character in readable format. ; Call CTLPRT with any char in DL for similar output. escprt: mov dl, escchr ctlprt: cmp dl, ' ' jge escpr2 push dx lea dx, esctl ;Print "Control-" call tmsg pop dx add dl, 040H ;Make it printable. escpr2: call bout ret ; This routine prints "is on" if prior comparison was nonzero ; and otherwise prints "is off" ponoff: jz ponof2 ;If not say so. lea dx, onstr ;Say on. jmp ponof3 ponof2: lea dx, offstr ;Say off. ponof3: call tmsg ret ; SHOW - Show the state of the parameters available from the SET command. show: mov ah,cmcfm ;Parse a confirm. call comnd jmp r call tcrlf call shobd ;Display baud rate (system dependent) lea dx, debst ;Debugging string. call tcrmsg cmp debug, 0 ;Is the debugging flag on? call ponoff lea dx, eolst ;End of line string. ;[10] begin call tcrmsg mov dl, seol call ctlprt ;[10] end lea dx, escst ;Escape string. call tcrmsg call escprt ;Print the escape char. lea dx, fmst ;File type string. [21b] ;[16] begin call tcrmsg mov al, binflg ;Print the keyword corresponding to the lea bx, fmtab ;current value of binflg call tabprt ;[16] end lea dx, flostr ;[19a] start call tcrmsg ; mov al, floctl ;show the current lea bx, flotab ;setting for flow-control call tabprt ;[19a] end lea dx, ibmst ;IBM string. call tcrmsg cmp ibmflg, 0 ;Is the IBM flag on? call ponoff lea dx, locst ;Get the address of the local echo string. call tcrmsg cmp ecoflg, 0 ;Is the local echo flag on? call ponoff ;Print on or off. lea dx, logst ;Logging string. call tcrmsg lea dx, lfcb ;Print the log filename. call tfile cmp logflg, 0 ;Is the logging flag on? call ponoff lea dx, parst ;Parity string. call tcrmsg mov al, parflg ;Print the keyword corresponding ;[10] begin lea bx, partab ;to the current value of parflg call tabprt call shoprt ;Port selection (system dependent) ;[30d] lea dx, tmrst ;Timer on/off string ;[21a] begin call tcrmsg cmp tmrflg, 0 ;Is the timer on? call ponoff ;Print on or off. ;[21a] end lea dx, filst ;File warning string. call tcrmsg cmp flwflg, 0 ;Is the file warning flag on? call ponoff call tcrlf ;Print a crlf jmp rskp ;[21c] end dspver: call clrscr ;Home cursor and clear the screen ;[30c] begin lea dx, scrhdr ;Position to the version line. call poscur call bldon ;Turn on bold (highlighted) display lea dx, system ;Print the system identification call tmsg lea dx, versio ;Print the Kermit version header. call tmsg call bldoff ;Turn off the highlight ;[30c] end ret DSEG ;Data segment. ORG 100H ;Leave room for system page. RW 100 ;hundred word or so stack. stack RW 2 ; COMND tables comtab db 14 ;Fourteen entries. db 3,'BYE$' dw bye db 7,'CONNECT$' dw telnet db 4,'EXIT$' dw exit db 6,'FINISH$' dw finish db 3,'GET$' dw get db 4,'HELP$' dw help db 6,'LOGOUT$' dw logout db 4,'QUIT$' ;[29f] dw exit ;[29f] db 7,'RECEIVE$' dw rec db 4,'SEND$' dw sencom db 3,'SET$' dw setcom db 4,'SHOW$' dw show db 6,'STATUS$' dw status db 4,'TAKE$' ;[29b] dw take ;[29b] settab db 13 db 4,'BAUD$' dw bdset ;[6] end db 5,'DEBUG$' dw debset db 11,'END-OF-LINE$' dw eolset db 6,'ESCAPE$' dw escape db 9,'FILE-TYPE$' ;[16] begin [21b] dw fmset ;[16] end db 13,'FLOW-CONTROL$' ;[19a] dw setflo ;[19a] db 3,'IBM$' dw ibmset db 10,'LOCAL-ECHO$' dw local db 3,'LOG$' ;[24a] dw log ;[24a] db 6,'PARITY$' dw setpar db 4,'PORT$' ;[30d] dw prtset db 5,'TIMER$' ;[21a] dw tmrset ;[21a] db 7,'WARNING$' dw filwar ontab db 2 ;Two entries. db 3,'OFF$' ;[5] begin dw 0000H db 2,'ON$' dw 0001H ;[5] end yestab db 2 ;Two entries. db 2,'NO$' dw 0000H db 3,'YES$' dw 0001H flotab db 2 ;[19a] start db 4,'NONE$' dw flonon db 8,'XON/XOFF$' dw floxon ;[19a] end partab db 5 ;Five entries. db 4,'EVEN$' dw parevn db 4,'MARK$' dw parmrk db 4,'NONE$' dw parnon db 3,'ODD$' dw parodd db 5,'SPACE$' dw parspc fmtab db 2 ;Two entries. ;[16] begin db 5,'ASCII$' dw 00H db 6,'BINARY$' dw 01H ;[16] end cfrmes db ' Confirm with carriage return $' filhlp db ' Input file spec (possibly wild) $' esctl db 'Control-$' hlpmsg db cr,lf,'Type ? at any point for help$' eschlp db cr,lf,'Enter literal value (ex: Ctrl ]) $' tophlp db cr,lf,'BYE to host (LOGOUT) and exit to CP/M' db cr,lf,'CONNECT to host on selected port' db cr,lf,'EXIT to CP/M' db cr,lf,'FINISH running Kermit on the host' db cr,lf,'GET file(s) from host' db cr,lf,'HELP by giving this message' db cr,lf,'LOGOUT the host' db cr,lf,'QUIT this Kermit session (exit to CP/M)' ;[29f] db cr,lf,'RECEIVE file(s) from host' db cr,lf,'SEND file(s) to host' db cr,lf,'SET a parameter' db cr,lf,'SHOW the parameters' db cr,lf,'STATUS of Kermit' db cr,lf,'TAKE command input from file' ;[29b] db '$' sethlp db cr,lf,'BAUD rate' ;[6] db cr,lf,'DEBUG' db cr,lf,'END-OF-LINE character' db cr,lf,'ESCAPE character change' db cr,lf,'FILE-TYPE (ASCII or BINARY)' ;[16][21b] db cr,lf,'FLOW-CONTROL (NONE or XON/XOFF)' ;[19a] db cr,lf,'IBM' db cr,lf,'LOCAL-ECHO echoing (half-duplex)' db cr,lf,'LOG filename for terminal session logging' ;[24a] db cr,lf,'PARITY type' db cr,lf,'PORT to communicate on' ;[30d] db cr,lf,'TIMER' ;[21a] db cr,lf,'WARNING' db '$' flohlp db cr,lf,'NONE XON/XOFF$' onhlp db cr,lf,'OFF ON$' yeshlp db cr,lf,'NO YES$' parhlp db cr,lf,'NONE MARK ODD EVEN SPACE$' fmhlp db cr,lf,'ASCII BINARY$' ;[16] eolhlp db cr,lf,'Decimal digit between 0 and 31$' eolerr db cr,lf,'Illegal end-of-line character$' timhlp db cr,lf,'Decimal digit between 1 and 94$' timerr db cr,lf,'Illegal timeout value$' inthlp db 'Kermit-86: Interrupt - type' ;[27] db cr,lf,' ? to display this message' ;[20c] begin db cr,lf,' B to send a Break signal to the port' db cr,lf,' C to return to the Kermit-86> prompt' db cr,lf,' L to toggle terminal session logging' ;[24a] db cr,lf,' Q to quit terminal session logging' ;[29e] db cr,lf,' R to resume terminal session logging' ;[29e] db cr,lf,' $' inthl2 db ' to send a $' inthl3 db ' character to the port$' ;[20c] end onstr db ' is on$' offstr db ' is off$' flostr db 'Flow control: $' ;[19a] bdst db 'Baud rate: $' debst db 'Debug mode$' eolst db 'End-of-line character: $' escst db 'Escape char: $' fmst db 'File type is $' ;[16][21b] ibmst db 'IBM flag$' locst db 'Local echo$' logst db 'Logging to $' ;[24a] parst db 'Parity: $' tmrst db 'Timer$' ;[21a] timmes db 'Timeout is $' filst db 'Warning$' clrspc db ' ',10O,'$' ;Clear space. versio db ' CP/M-86 Kermit-86 - V2.7' db cr,lf,lf,'$' kerm db 'Kermit-86>$' pktlin db cr,'Number of packets: ' db cr,lf,'Number of retries: ' db cr,lf,'File name: $' spmes db 'Spack: $' rpmes db 'Rpack: $' hibit db 'Warning - Non-ASCII char$' ender db bell,bell,'$' inms01 db cr,lf,'[Kermit-86: Connecting to host...' ;[27][fdc] db cr,lf,' Type $' ;[fdc] inms02 db ' C to return to PC, $' ;[fdc] inms25 db ' ? for help]$' ;[fdc] inms03 db '[Kermit-86: Back at PC]$' ;[27] infms3 db 'Completed $' infms4 db 'Failed $' infms5 db 'Renaming file to $' infms6 db '%Function not implemented$' infms7 db 'Interrupted $' ;[19f] infms8 db 'File interrupt (^X) $' ;[19f] infms9 db 'File group interrupt (^Z) $' ;[19f] infm10 db ' Type: ^X to interrupt file, ^Z to ' ;[19f][30c] db 'interrupt group, ^C to "abort".$' ;[19g][30c] infm11 db '[Kermit-86: Logging to $' ;[24a][27] infm12 db ']$' ;[24a] infm13 db '[Kermit-86: Logging terminated]$' ;[24a][27] timoms db bell,'Timeout$' ermes1 db bell,'?Unrecognized command$' ermes2 db bell,'?Illegal character$' ermes3 db bell,'?Unrecognized command option$' ermes4 db bell,'Unable to rename file$' ermes5 db bell,'?No receive file specification given$' ermes7 db bell,'?Unable to receive initiate$' ermes8 db bell,'?Unable to receive file name$' ermes9 db bell,'?Unable to receive end of file$' erms10 db bell,'?Unable to receive data$' erms11 db bell,'?Disk directory area full$' ;[28c] erms14 db bell,'?Unable to receive an acknowledgement from the host$' erms15 db bell,'?Unable to find file $' ;[28b] erms17 db bell,'?Disk data area full$' ;[28c] erms18 db bell,'?Unable to tell host that session is finished$' erms19 db bell,'?Unable to tell host to logout$' erms20 db bell,'?Illegal value$' ;[10] erms21 db '* Aborted *$' ;[12] erms22 db bell,'?Cannot open log file $' ;[24a] crlf db cr,lf,'$' ;[25] ; Cursor addressing items (row,col) ;[19b],[30c] begin scrhdr db 3,1 ;Place for version header scrnp db 5,22 ;Place for number of packets. scrnrt db 6,22 ;Place for number of retries. scrfln db 7,12 ;Place for file name. screrr db 13,1 ;Place for error messages. scrst db 5,53 ;Place for "Complete". scrrpr db 14,1 ;Place for prompt. scrhi db 7,53 ;8th bit on in character. scrfr db 8,1 ;Rename file. ;[31] scrsp db 9,1 ;Send packet scrrp db 11,1 ;Receive scrint db 6,53 ;[19f] interrupt acknowledge scrhlp db 24,1 ;[19f] help line ; Impure storage extflg db 0 ;Exit flag;non zero to exit. ecoflg db defeco ;Echo flag; non zero for local echoing. escchr db defesc ;Escape character for the connect command. debug db diasw ;Are we in debug mode? tmrflg db deftmr ;Is the timer enabled? ESEG ;Extra segment. INCLUDE 86KERCMD.A86 ;Get the COMND routines. INCLUDE 86KERFIL.A86 ;Get the file routines. INCLUDE 86KERIO.A86 ;Get the I/O routines. INCLUDE 86KERPRO.A86 ;Get the protocol routines. INCLUDE 86KERTRM.A86 ;Get terminal emulation [26] INCLUDE 86KERUTL.A86 ;Get the utility routines. DSEG $ ;Resume data segment. DB 0 ;Is this really necessary? ;No, but without it you need to specify ;link options to GENCMD so as to make the ;load address include uninitialized storage. ;This bypasses that necessity by including ;all uninitialized storage in the load ;module. - RonB END