;
;                          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