<html><head><meta name="color-scheme" content="light dark"></head><body><pre style="word-wrap: break-word; white-space: pre-wrap;">;
;                          BYESUB.ASM
;         A routine to load/run a .com file on request
; 
;   When used by itself, or, as intended, as a called subroutine for
;RCP/M conditional logoffs, (security violation, overstayers, etc.),
;this routine will make use of the autorun feature buried in the CCP 
;module of CP/M. The file specified at the equate near the end of the 
;program will be loaded into the ccp command buffer, and the ccp will
;be cold started. This will act as if the name had been typed in at
;the console, and the return key hit.
;
;   Note that the value of CPR is system dependant. This must be 
;changed for your paticular system.
;
;              ----------------------------------
;
;------------------
;   Mods / Fixes  :
;------------------
;
;11/06/82    Initial Release
;
;			Mark J. Pulver
;			AIMS  (312) 789-0499
;
;
;-----------------
;   Code starts  :
;-----------------
;
CPR	EQU	0C700H	;ccp cold start
CBUFF	EQU	CPR+7	;address of command length pointer
CIVAL	EQU	CPR+8	;address of command buffer
CIBPTR	EQU	CPR+59H	;address of pointer to ccp command buffer
;
OFFSET	EQU	0
;
;
	ORG	0100H
;
BYE:	EQU	$+OFFSET
	LHLD	BYEFIL		;get length
	MOV	B,L		;B needs it for MOVE
	LXI	H,BYEFIL	;get name of file
	LXI	D,CBUFF		;where its going
	CALL	MOVE		;move name into buffer
	LXI	H,CIVAL		;get command buffer location
	SHLD	CIBPTR		;stuff it in pointer
	LDA	USER
	MOV	C,A		;C must have user/drive
	JMP	CPR		;cold start ccp
;
MOVE:	EQU	$+OFFSET	;hl to de length in b
	MOV	A,M
	STAX	D
	INX	D
	INX	H
	DCR	B
	JNZ	MOVE
	RET
;
USER:	EQU	$+OFFSET
	DB	0			;user/drive spec for file,
					;follows 0004h conventions
BYEFIL:	EQU	$+OFFSET
	DB	5,'BYE',0		;comfile to run
;command length ^       ^- - - "0" must be here
;+2 for first and last bytes
;
;
	END
</pre></body></html>