; CPSDAT.ASM
;       KERMIT - (Celtic for "FREE")
;
;       This is the CP/M-80 implementation of the Columbia University
;       KERMIT file transfer protocol.
;
;       Version 4.0
;
;       Copyright June 1981,1982,1983,1984,1985
;       Columbia University
;
; Originally written by Bill Catchings of the Columbia University Center for
; Computing Activities, 612 W. 115th St., New York, NY 10025.
;
; Contributions by Frank da Cruz, Daphne Tzoar, Bernie Eiben,
; Bruce Tanner, Nick Bush, Greg Small, Kimmo Laaksonen, Jeff Damens, and many
; others. 
;
;       Pure and impure data areas. Previously of CPSUTL.ASM
;
; revision history:
;
;edit 19, 29-Mar-1991 by MF. Add flag "initak" (nonzero) which is cleared
;	after the initial automatic TAKE attempt of KERMIT.INI to allow
;	"unable to find file" complaints if not doing that initial TAKE.
;edit 18, 21-Mar-1991 by MF. Renamed parameter vermin to revno (revision
;	level) since verno is already known as the "minor version number".
;edit 17, 27-Feb-1991 by MF. Corrected typeo in "inms19" and commented out
;	"typptr" pointer as the TYPE command now uses the big buffer.
;	Also provided for a "minor version number" (1-26=A-Z) and message to
;	facilitate display of Kermit version in VERSION command (modmsg)
;edit 16, 12-Feb-1991 by MF. Eliminated storage (message and variable)
;	for case sensitivity by commenting it out.
;edit 15, 9-Dec-1990 by MF. Modified message for "directory file size"
;	status report to make it clearer when spoken by a speech synthesizer.
;edit 14, 4-Dec-1990 by MF. Added message for Autoreceive status report.
;edit 13, 30-Nov-1990 by MF. Added messages to display regular/quiet status
;	of terminal in SHOW and STATUS commands.
;edit 12, 8-Nov-1990 by MF.  Added a new message for Set Autoreceive.
;edit 11, 2-Nov-1990 by MF.  Moved overlay address to 7000H -- I didn't
;	realize I was **that** close to the limit until I made a couple of
;	cosmetic changes and REM CD bombed.  This is still ver. 4.10 as it
;	hasn''t been released yet.
;edit 10, 1-Nov-1990 by MF.  Changed message at "spdst" to conform with
;	the change of "SET BAUD-RATE" to "SET SPEED".
;	Also added message "sdpst2" for speed status (staspd) routine
;edit 9, 17-Oct-1990 by MF.  Changed "packet-size" messages to use the
;	word "length" to conform with the nomenclature suggested in the
;	6th edition of the Kermit Protocol Manual.
;edit 8, 19-Sep-1990 by MF.  Added error message for FRENAME command.
;edit 7, 14-Sep-1990 by MF.  Added storage/strings for SET COLLISION command.
;	Also added strings/storage for SET INCOMPLETE-FILE command.
;edit 6, 9-Sep-1990 by MF.  Added messages and storage for Remote commands.
;	and display of packet sizes
;	Moved overlay address to 06C00H for Version 4.10.
; edit 5, 8 April, 1987 by OBSchou.  Added new entry in jump table to call 
;	code for an external terminal type.  Added some new error messages
;	and added more to the packet space.
;
; edit 4, 30 March by OBSchou.  Added in space for autoreceive.
;
; edit 3, 19 March, 1987 by OBSchou.  Added some more strings etc, and 
;	increased the stack space fro 32 entries to 64.
;
; edit 2, 11 March, 1987 by OBSchou. 
;	Added in some more data and strings and things.  Nothing special
;
; edit 1, 28 January, 1987 by OBSchou
;	Following file the data section of CPSUTL.ASM.  This part of the 
;	CPSUTL.ASM file now seperate as it ws getting too larg.  Link to here
;	from CPSUTL.ASM (which now has only the utlity routines). 
;	Also added in bits submitted by Dave Roberts of Leicester:
;	 DJR  18th January 1987 - David J. Roberts.
;           Support for cosmetic changes in CPSMIT:
;              New strings DBGST and CURDST
;              CRLF in front of TIMMSG
;              LOGST changed, and new LOGST2
;
;
datver:	db	'CPSDAT.ASM (19)  29-Mar-1991$'



;

version:db	'Kermit-80 v4.'
	db	(verno/10) + '0'        ; tenth's digit of version number
	db	(verno MOD 10) + '0'    ; hundredth's digit
IF revno			;[MF]If a revision level,
	db	revno+'@'	;[MF]put it in (range 1-26=A-Z)
ENDIF ;revno [MF]
	db	' $'
modmsg:	db	' has been built from the following modules:$';[MF]
kerm:	db	'Kermit-80  '
kerm1:	db	'nnx:>$'        ;'x' filled in at startup with DRIVE name
				;'nn filled at startup and user with user number
crlf:	db	cr,lf,'$'
ermes1:	db	cr,lf,'?Unrecognized command$'
ermes3:	db	cr,lf,'?Not confirmed$'
ermes4:	db	'?Unable to receive initiate',cr,lf,'$'
ermes5:	db	'?Unable to receive file name',cr,lf,'$'
ermes6:	db	'?Unable to receive end of file',cr,lf,'$'
erms10:	db	'?Unable to receive data',cr,lf,'$'
erms11:	db	'?Disk full',cr,lf,'$'
erms12:	db	'?Directory full',cr,lf,'$'
erms14:	db	'?Unable to receive an acknowledgement from the host',cr,lf,'$'
erms15:	db	cr,lf,'?Unable to find file',cr,lf,'$'
erms16:	db	'?Unable to rename file$'
erms17:	db	cr,lf,'?Disk full$'
erms18:	db	cr,lf,'?Unable to tell host that the session is finished$'
erms19:	db	cr,lf,'?Unable to tell host to logout$'
erms20:	db	cr,lf,'?Kermit has not been configured for a target system$'
erms21:	db	cr,lf,'?Consistency check on configuration failed$'
erms22:	db	cr,lf,'?Error writing to log file',cr,lf,'$'    ;[pcc005]
erms23:	db	cr,lf,'?Invalid user number$'
erms24:	db	cr,lf,'?Invalid Pause parameter$'
erms25:	db	cr,lf,'?Invalid BUFFER-SIZE parameter$'
erms26:	db	cr,lf,'?Invalid packet length (too long)$'
erms27:	db	cr,lf,'?Invalid Checktype$'
erms28:	db	cr,lf,'?Too many retries$'
erms29:	db	cr,lf,'?Failed to exchange parameters$'
erms30:	db	cr,lf,'?Failed to receive input string in alloted time$'
erms31:	db	cr,lf,'?File already exists$' ;[MF]

infms3:	db	bell,'Completed$'
infms4:	db	bell,'Failed$'
infms5:	db	'%Renaming file to $'
infms6:	db	cr,lf,'[Closing the log file]$'
infms7:	db	cr,lf,'[Connected to remote host.  Type $'
infms8:	db	'C to return;',cr,lf,' type $'
inms8a:	db	'? for command list]',cr,lf,'$'
infms9:	db	cr,lf,'[Connection closed, back at micro]$'
inms10:	db	'Control-$'
inms11:	db	' Not implemented.$'
inms12:	db	' (Not implemented)',cr,lf,'$'
inms13:	db	bell,'Interrupted$'
inms14:	db	TAB,TAB,'    Directory for drive '
dnam14:	db	'nnx:',cr,lf,'$'                ;filled in by dir routine.
inms15:	DB	CR,LF,TAB,TAB,'Drive $'
inms16:	DB	'  has $';filled in by summary code with drive letter
inms17:	DB	'K bytes free',CR,LF,'$'
inms18:	DB	CR,LF,'File(s) erased$',CR,LF
inms19:	db	cr,lf,'[Transmitting file to host:'
	db	cr,lf,' 1. Lines automatically sent, and wait for possible reply'
	db	cr,lf,' 2. CONTROL-C aborts transfer'
	db	cr,lf,' 3. If transfer hangs, try a return to continue'
	db	cr,lf,' 4. on exit, you will be placed in CONNECT state.'
	db	cr,lf,'$'
inms20:	db	'R to send the same line again,'
	db	cr,lf,'   or type $'
inms21:	db	'C to abort transmission.]',cr,lf,'$'
inms22:	db	cr,lf,'[Transmission done. Connected normally '
	db	'to remote host,'
	db	cr,lf,' type $'
inms23:	db	'Sending...$'
inms24:	db	'Receiving...$'
inms25:	db	bell,'Warning: eighth bit cannot be sent$'
inms26:	db	cr,lf,'For help, type ? at any point in a command$'
inms27:	db	cr,lf,'[Logging suspended]',cr,lf,'$'   ;[pcc003]
inms28:	db	cr,lf,'[Logging resumed]',cr,lf,'$'     ;[pcc003]
inms29:	db	cr,lf,'[Transmission Aborted. Connected normally '
	db	'to remote host,'
	db	cr,lf,' type $'
autmes:	db	cr,lf,cr,lf,'[Automatically receiving; type ^C to abort]'
	db	cr,lf,cr,lf,'$'	;[MF]
anymes:	db	cr,lf,cr,lf,' * * * Press any key to continue * * * '
	db	cr,lf,cr,lf,'$'
escmes:	db	cr,lf,'Type the new escape character:  $'
tacmes:	db	cr,lf,'Type the new TAC intercept character:  $'
sopmes:	db	cr,lf,'Give the start-of-packet character: $'	;[gnn]
padcms:	db	cr,lf,'Type the new padding character: $'	;[obs]
xmthlp:	db	cr,lf,'R Send the same line again$'
loghlp:	db	cr,lf,'Q  Suspend logging'              ;[pcc003]
	db	cr,lf,'R  Resume logging$'              ;[pcc003]
inthlp:	db	cr,lf,'?  This message'
	db	cr,lf,'C  Close the connection'
	db	cr,lf,'0  (zero) Transmit a NULL'
	db	cr,lf,'P  Toggle printer on/off'        ;[pcc002]
	db	cr,lf,'S  Status of the connection$'
inhlp1:	db	cr,lf,'Typing another $'
inhlp2:	db	' will send it to the host'
	db	cr,lf,cr,lf,'Command>$'

xmtst:	db	cr,lf,'Transmitting a file$'
autrst:	db	cr,lf,'Autoreceive is$'
locst:	db	cr,lf,'Local echo$'
onstr:	db	' on$'
offstr:	db	' off$'
flost:	db	cr,lf,'Flow control$'
;senst:	db	cr,lf,'Case sensetivity$'
vtdpst:	db	cr,lf,'Terminal display is $'
vtdpsr:	db	'REGULAR$'
vtdpsq:	db	'QUIET$'
vtemst:	db	cr,lf,'Terminal emulation is $'
cpmst:	db	cr,lf,'File Mode$'
defstr:	db	' default$'
ascstr:	db	' ASCII$'
binstr:	db	' binary$'
hfsod:	db	cr,lf,'Display file size on DIRECTORY command$'
ibmst:	db	cr,lf,'IBM flag$'
incst:	db	cr,lf,'Disposition for incomplete files is$'
dscstr:	db	' discard$'
kepstr:	db	' keep$'
filst:	db	cr,lf,'File warning$'
prst:	db	cr,lf,'Printer copy$'
logst:	db	cr,lf,'Logging to $'		;[pcc003][DJR]
logst2:	db	' is$'				;[DJR]
susstr:	db	' suspended$'                   ;[pcc003]
sspmsg:	db	cr,lf,'SEND start-of-pkt char  ^$' ;[gnn]
rspmsg:	db	cr,lf,'RECEIVE start-of-pkt char  ^$' ;[gnn]
spsmsg:	db	cr,lf,'SEND packet length  $' ;[MF]
rpsmsg:	db	cr,lf,'RECEIVE packet length  $' ;[MF]
escst:	db	cr,lf,'Escape char: $'
bufsz1:	db	cr,lf,'Multi-sector buffering at $'
bufsz2:	db	' of a maximum of $'
xmitst:	db	cr,lf,'Transmit protocol char: $'
bckst:	db	cr,lf,'Block check type: $'
bckst1:	db	'-character$'
collst:	db	cr,lf,'File COLLISION:  $';[MF]
parst:	db	cr,lf,'Parity: $'
pnonst:	db	'none$'
pmrkst:	db	'mark$'
pspcst:	db	'space$'
poddst:	db	'odd$'
pevnst:	db	'even$'
porst:	db	cr,lf,'Port in use is: $'
spdst:	db	cr,lf,'Current speed is: $'
spdst2:	db	' bps$'		;[MF]
spdust:	db	'indeterminate (not SET)$'
timmsg:	db	cr,lf,'Timer$'			;[DJR] Added CRLF like the others
tacst:	db	cr,lf,'Current TACTrap Status/Intercept Character:  $'
usrst:	db	cr,lf,'Current user number:  $'
dbgst:	db	cr,lf,'Debugging$'		;[DJR]
curdst:	db	cr,lf,'Current default disk: $'	;[DJR]
spac15:	db	'               $'              ; *** 15 spaces ***
samems:	db	cr,lf,'?Source and destination files the same$'
nofile:	db	cr,lf,'?File not found$'
cmer00:	db	cr,lf,'?Program error:  Invalid COMND call$'
cmer01:	db	cr,lf,'?Ambiguous$'
cmer02:	db	cr,lf,'?Illegal CP/M file specification$'
cmer03:	db	cr,lf,'?Wild-cards not allowed in file specification$'  ;[pcc006]
cmer04:	db	cr,lf,'?Invalid user number$'
cmer05:	db	cr,lf,'?Invalid \ parameter$'
cmin00:	db	' Confirm with carriage return$'
cmin01:	db	' Enter a number$'
cmin02:	db	' Confirm with carriage return or enter more$'

;  Diagnostic messages
sstatm:	db	'<SState:> ',0
rstatm:	db	'<RState:> ',0
spackm:	db	'<Data transmitted> ',0
rpackm:	db	'<Data received   > ',0
princr:	db	cr,lf,0
;
; Remote command messages [MF]
;
newfms:	db	cr,lf,'New file: $'
pswdms:	db	cr,lf,'Password: $'
acctms:	db	cr,lf,'Account: $'
newnms:	db	cr,lf,'New name: $'
msgms:	db	cr,lf,'Message: $'
optms:	db	cr,lf,'Options: $'

;
	;Impure data

;COMND storage

comchr:	ds	1		;[8] save space
floctl:	db	0		;[8] flow control on/off flag
;casens:	db	0		;[8] Upper/lower case sensitive
cmstat:	ds	1		;What is presently being parsed.
cmaflg:	ds	1		;Non-zero when an action char has been found.
cmbflg:	ds	1		;[MF]Nonzero to allow a blank initial keyword
cmqflg:	ds	1		;[MF]Nonzero to prevent character echoing
				;[MF]when entering commands
cmccnt:	ds	1		;Non-zero if a significant char is found.
cmsflg:	ds	1		;Non-zero when the last char was a space.
cmostp:	ds	2		;Old stack pointer for reparse.
cmrprs:	ds	2		;Address to go to on reparse.
cmprmp:	ds	2		;Address of prompt.
cmptab:	ds	2		;Address of present keyword table.
cmhlp:	ds	2		;Address of present help.
cmdbuf:	ds	80H		;Buffer for command parsing.
cmbufl	equ	$-cmdbuf-3	; set a limit on the command buffer
cmfcb:	ds	2		;Pointer to FCB.
cmfcb2:	ds	2		;Pointer to position in FCB.
cmfwld:	ds	1		;Wildcard flag
cmcptr:	ds	2		;Pointer for next char input.
cmdptr:	ds	2		;Pointer into the command buffer.
cmkptr:	ds	2		;Pointer to keyword.
cmsptr:	ds	2		;Place to save a pointer.
slshsn:	db	0		; slash seen in command line
slashc:	db	0		; count for number of characters in slash sequence
slashn:	db	0		; number to be built for \xxx
;
oldsp:	ds	2		;Room for old system stack.
	ds	80H		;Room for 64 levels of calls.[obs]
stack:	ds	2
eoflag:	ds	1		;EOF flag;non-zero on EOF.
curdsk:	db	0		;holds "logged" disk
curusr:	db	0		;[8] holds "user" number
rcvsop:	db	SOH		;[gnn] receive start-of-packet
sndsop:	db	SOH		;[gnn] send start-of-packet
prtcnt:	db	0		;[pcc008] prtchr fairness count
timflg:	db	0		;[jd] timer flag: 0 -> no timer
timval:	dw	0		;[jd] timer value
wrn8:	db	0		;[jd] non-zero if 8-bit-lost warning sent
qbchr:	db	'&'             ;[jd] binary quote character.
quot8:	db	0		;[jd] non-zero if doing 8-bit quoting
logflg:	db	0		;Flag for a log file.
				;[pcc005] 0 = no log
				;[pcc005] x1 = logging on
				;[pcc005] x2 = suspended
				;[pcc005] 8xH (bit 7) = file open
lognam:	db	0		;[pcc013] File to use for session logging
	db	'KERMIT  '      ;[pcc013]
	db	'LOG'           ;[pcc013]
nexitf:	db	0		; set to 1 for exit to CPM after command tail
takflg:	db	0		;[8] TAKE flag. 
				; Bit zero = 1 for take file in progress
				; bit 4 = 1 if command line present/in progress
				; Note: Take has priority over command line.
initak:	db	0ffh		;[MF]Cleared after initial TAKE (KERMIT.INI)
taknam:	db	0		;[8] use default drive
	db	'KERMIT  '
	db	'INI'           ;[8] Inital file to TAKE KERMIT.INI
takptr:	ds	2		;[8] Pointer to position in TAKE file input
takfcb:	ds	12		;[8] fcb space for take file
	dw	0		;[8] fill up extents etc with 00
	dw	0
	ds	16		;[8] used by dos
	dw	0
	dw	0
takdma:	ds	128		;[8]space to read TAKE file...
prnbuf:	ds	1		; printer buffer. Output pointer
	ds	1		; input offset pointer
	ds	256		; give a large buffer
	ds	10		; and a little spare
;
;
;
; Transmit space
;
repcnt:	db	0		; repeat counter
starc:	db	0		; star count
rexbfl:	db	0		; retransmit flag (1=> retransmit)
rexcnt:	db	0		; retransmit character count
rexbuf:	ds	128		; max retransmit line length 128 characters
xmtbuff:
	ds	128		; 128 byte sector buffer
xmtptr:	db	0		; offset pointer to xmtbuff above
xmtfcb:	ds	36		; fcb for transmit file.
;
;INPUT and STRING space
strlen:	db	0		; length of the string from INPUT and STRING

; Assorted other space
errorc:	db	0		; error level set to xxx
errorl:	db	0		; error level to test against

remtxt:	db	0		; set <> 0 if D packets to screen

hosths:	ds	1		; have we told the host to xoff? (is this duplicated)
stbuff:	ds	80h		; some space or the string buffer
waitp:	ds	2		; wait command timer
waitp1:	ds	2		; wait/input timer (copy of waitp)
prntmp:	ds	1		; temporary space to put the caracter to print
prnfl:	db	0		; printer flag.  Used by TYPE/PRINT
;[MF][17]Following line no longer needed as TYPE uses the big buffer
;typptr:	ds	2		; pointer used by TYPE/PRINT
equflg:	db	0		; set to non zero if copy files same
nquiet:	db	0		; If non zero print from NOUT to display

escflg:	db	0		;Escape flag (start off).
fileio:	db	0		;Line-by-line from file (default off).
xofflg:	db	0		;X-OFF (=^S) received from COMM-line
				;X-ON (=^Q) received resets this
clkbit:	dw	0		; 32 bit pseudo clock
	dw	0		; MS bits of clock
number:	ds	2		; Number in binary form from user input
initflg:db	0		; set to non zero when system initialised
maxbsc:	ds	1		; save space to know how big system allows
				; for multi-sector buffering. (Usually 8k?)
;
;       Multiple FCB storage space.  Used for the DIR command
;               Later on, I want to shift this into space after the system
;               dependent stuff, but then it becomes messy with pointers
;               to pointers etc... [OBS]
;
xfcbptr:
	ds	2		; pointer to current fcb space
fcbcnt:	ds	1		; Number of valid fcbs in space
;
fcb0:	ds	12		; 36 bytes requred for a single fcb
fcblen	EQU	$-fcb0		; length of a single fcb
	ds	maxfcb*fcblen	; space for maximum fcbs + 1 
;
hidefs:	db	0ffh		; flag <> 0 if we show file size in DIR

; FCB sapce for COPY command
cfcbs:	ds	33		; source fcb for copy file ops.
				;[MF]and FRENAME ops.
cfcbd:	ds	33		; destination fcb for copy ops.
				;[MF]and FRENAME ops.

colfcb:	ds	33		;[MF]Rename fcb for SET COLLISION

; Command tail data space etc
cbptr:	db	2		; command tail pointer (0= length of tail)
cbuff:	ds	128		; temp. space for potential command tail

strcnt:	db	0		; string count for string operations...

vtyval:	ds	1		; holds row number for VT52 cursor positioning
chrcnt:	ds	1		;Number of chars in the file buffer.

; Various packet variables etc
bytes:	dw	0		; 4 byte 'byte count' space
	dw	0
filcnt:	ds	1		;Number of chars left to fill.
outpnt:	ds	2		;Position in packet.
bufpnt:	ds	2		;Position in file buffer.
fcbptr:	ds	2		;Position in FCB.
datptr:	ds	2		;Position in packet data buffer.
cbfptr:	ds	2		;Position in character buffer.
pktptr:	ds	2		;Position in receive packet.
size:	ds	1		;Size of data from gtchr.
curchk:	ds	1		;Current checksum type
inichk:	ds	1		;Agreed upon checksum type
czseen:	ds	1		;Flag that control-Z was typed
dscflg:	ds	1		;[MF]Discard file if nonzero
pktnum:	ds	1		;Packet number.
numpkt:	ds	2		;Total number of packets sent.
numrtr:	ds	2		;Total number of retries.
numtry:	ds	1		;Number of tries on this packet.
oldtry:	ds	1		;Number of tries on previous packet.
state:	ds	1		;Present state of the automaton.
;*** start of new flags.  Do not assume that just because these flags are
;  present that the feature is available.  I simply put them in 'for future use'
rcapas:
rcap1:	db	0		; receive capabilties byte 0
rcap2:	db	0		; receive cpabilities byte 1
scapas:
scap1:	db	0		; send capabilities byte 0
scap2:	db	0		; send capabilities byte 1
rtimeo:	db	0		; receive timeout
stimeo:	db	0		; send timeout
rpadc:	db	0		; receive pad character
spadc:	db	0		; send pad character
rrept:	db	0		; receive repeat prefix
srept:	db	0		; send repeat prefix
rwindo:	db	0		; receive window size
swindo:	db	0		; send window size
rdpkt:
rlpkt:	dw	0		; receive long packet length
sdpkt:
slpkt:	dw	0		; send long packet length
sdckt:	db	0		; send default checktype
rdckt:	db	0		; receive checktype (should be same as sdckt)
;*** end  of new flags
sohchr:	db	1		;Default Start-of-header chr is cntl-a
; Kermit packet starts here
;	Byte 0 = start of packe character
;	     1 = length of packet
;	     2 = packet number
;	     3 = packet type (S R I Z E B etc)
packet:	ds	4		;Packet (data is part of it).
; Data part of packet (variable length - include checksum)
data:	ds	5AH		;Data and checksum field of packet.
recpkt:	ds	65H		;Receive packet storage (use the following).
recpkx:	db	cr,'$'          ;=      =       = buffer limit
filbuf:	ds	65H		;Character buffer.
fnbuf:	ds	20h		;[jd] file name buffer
autorc:	db	0		;[obs] set to ON for autoreceive

; Temporary data space.  Sometimes accesses as 16 bits (eg temp1/2)
;** Temp 1 & 2 must be in order
lstchr:				;Last console input character.
temp1:	ds	1		;Temporary storage.
temp2:	ds	1
lincnt:				; used for counting lines in p20ln
temp3:	ds	1
temp4:	ds	1
temp5:	ds	1
temp6:	ds	1
temp7:	ds	1
temp8:	ds	1
temp9:	ds	1
temp10:	ds	1
temp11:	ds	1


getrxflg:
	ds	1		;[obs 22]
quietd:	db	0		;loud display during file transfers
argblk:	ds	20H		;Used for subroutine arguments

maxfil	EQU	2		; currently, only two names used.
fcbblk:	ds	maxfil*10H	;Used for a list of FCB's

; [gnn] secondary filename storage (remote on send, local on get)
remnam:	ds	60		;[gnn]
remlen:	ds	1		;[gnn] length of name

; Bookkeeping storage for multiple-sector buffering.  The actual buffer
; is somewhere in the system-dependent overlay. (at the end, I hope).
nxtbuf:	ds	2		; Pointer to next sector
seccnt:	ds	1		; Number of sectors buffered
endsts:	ds	1		; Status for last read into buffer
;
;
; [MF] Storage for Remote Command processing
;
;
rdl:	ds	1		;[MF]Holds accumulated length of remote data
;
rcl:	ds	1		;[MF]Holds length of Remote command line arg
;
remdat:	ds	95		;[MF]Packet data buffer (plenty big)
;
rcom:	ds	1		;[MF] Remote Command type
;
rprmpt:	dw	0		;[MF]Address of prompt strings
;
rptr:	dw	0		;[MF]Remote command packet data pointer
;
rscode:	ds	3		;[MF]Holds Remote Set command ASCII code
;
;
	org	7000h		; address for Kermit 4.11
;               ORG     ($ + 0ffH) AND 0ff00H   ; move to start of next page

;
;       hooks for system-dependent routines:
;       This area is overwritten by the system-dependent overlay.
;
lnkflg:	dw	0	; linkage information for consistency check.
lnkent:	dw	0	; more of the same.
ovlver:	dw	0	; pointer to overlay's version string
family:	dw	0	;*NEW* [10] address of the family overlay (not CPSSYS)
;
; Input/output routines.  Note that outmdm and outcon may actually be the
;       same routine if selmdm and selcon do anything.  (the same is true
;       of inpmdm and inpcon).
;
selmdm:	jmp	$-$	; select modem for I/O
outmdm:	jmp	$-$	; output character in E to modem
inpmdm:	jmp	$-$	; read character from modem. return character or 0 in A.
flsmdm:	jmp	$-$	; flush pending input from modem
selcon:	jmp	$-$	; select console for I/O
outcon:	jmp	$-$	; output character in E to console
inpcon:	jmp	$-$	; read char from console. return character or 0 in A
outlpt:	jmp	$-$	; output character in E to printer
lptstat:jmp	$-$	;*NEW*[10] see if printer ready to print a character
			; If 0ffh then ok, if 0h then not ok.
extern:	jmp	$-$	;*NEW for 4.09* If $-$ is not zero, then its a jump to
			; a routine to emulate any terminal type the user
			; wants to implement.
xbdos:	jmp	0	;*NEW* address of the bdos trap in this section
			; of code.  It is filled in initialisation.
;
; screen formatting routines
clrlin:	jmp	$-$	; erase current line
clrspc:	jmp	$-$	; erase current position (after backspace)
delchr:	jmp	$-$	; make delete look like backspace
clrtop:	jmp	$-$	; erase screen and go home
;
; these routines are called to display a field on the screen.
scrend:	jmp	$-$	; move to prompt field
screrr:	jmp	$-$	; move to error message field
scrfln:	jmp	$-$	; move to filename field
scrnp:	jmp	$-$	; move to packet count field
scrnrt:	jmp	$-$	; move to retry count field
scrst:	jmp	$-$	; move to status field
rppos:	jmp	$-$	; move to receive packet field (debug)
sppos:	jmp	$-$	; move to send packet field (debug)
;
sysinit: jmp	$-$	; program initialization
sysexit: jmp	$-$	; program termination
syscon:	jmp	$-$	; remote session initialization
syscls:	jmp	$-$	; return to local command level
sysinh:	jmp	$-$	; help text for interrupt (escape) extensions
sysint:	jmp	$-$	; interrupt (escape) extensions, including break
sysflt:	jmp	$-$	; filter for incoming characters.
			;  called with character in E.
sysbye:	jmp	$-$	; terminate remote session
sysspd:	jmp	$-$	; baud rate change routine.
			; called with value from table in DE
sysprt:	jmp	$-$	; port change routine.
			; called with value from table in HL
sysscr:	jmp	$-$	; screen setup for file transfer
			; called with Kermit's version string in DE
csrpos:	jmp	$-$	; move cursor to row B, column C
sysspc:	jmp	$-$	; calculate free space for current disk
mover:	jmp	$-$	; block move
prtstr:	jmp	$-$	; *** NEW *** prtstr moved to overlay
;
; Data initialized by system-dependent overlay:
;
pttab:	ds	2	; points to local equivalents to VT52 escape sequences
spdtab:	ds	2	; address of baud rate command table, or zero
spdhlp:	ds	2	; address of baud rate help table, or zero
prttab:	ds	2	; address of port command table, or zero
prthlp:	ds	2	; address of port help table, or zero
timout:	ds	2	; Initial value for fuzzy timeout
vtflg:	ds	1	; VT52 emulation flag
escchr:	ds	1	; Storage for the escape character.
speed:	ds	2	; storage for the baud rate
port:	ds	2	; storage for port value
prnflg:	ds	1	;[hh] printer copy flag (overlay may need it)
dbgflg:	ds	1	; debugging flag
ecoflg:	ds	1	; Local echo flag (default off).
flwflg:	ds	1	; File warning flag (default on).
ibmflg:	ds	1	; IBM flag (default off).
cpmflg:	ds	1	; File mode flag (ascii/binary/default)
incflg:	ds	1		;[MF]Incomplete flag (keep/discard)
				;[MF](default discard)
parity:	ds	1	; Current parity.
spsiz:	ds	1	; Send packet size.
rpsiz:	ds	1	; Receive packet size.
stime:	ds	1	; Send time out.
rtime:	ds	1	; Receive time out.
spad:	ds	1	; Send padding.
rpad:	ds	1	; Receive padding.
spadch:	ds	1	; Send padding char.
rpadch:	ds	1	; Receive padding char.
seol:	ds	1	; Send EOL char.
reol:	ds	1	; Receive EOL char.
squote:	ds	1	; Send quote char.
rquote:	ds	1	; Receive quote char.
chktyp:	ds	1	; Checksum type desired
tacflg:	ds	1	; TACTrap flag (zero=off, nonzero=on; when non-zero,
			;  contains current TAC intercept character)
tacchr:	ds	1	; TAC intercept character
bufadr:	ds	2	; Pointer to big buffer for multiple-sector I/O
bufsec:	ds	1	; Number of sectors big buffer can hold (0 means 256)
ffussy:	ds	1	; if nonzero, don't permit <>.,;?*[] in CP/M filespec.
; space used by directory command; here because space calculation is
;  (operating) system-dependent
bmax:	ds	2	; highest block number on drive
bmask:	ds	1	; (records/block)-1
bshiftf: ds	1	; number of shifts to multiply by rec/block
nnams:	ds	1	; counter for filenames per line

lnksiz	equ	$-lnkflg ; length of linkage section, for consistency check.

	END	START