Files
Digital-Research-Source-Code/CP-NET/CPNET-86 SOURCE/LOGOFF.A86
Sepp J Morris 31738079c4 Upload
Digital Research
2020-11-06 18:50:37 +01:00

132 lines
2.4 KiB
Plaintext

TITLE 'LOGOFF TRANSIENT PROGRAM FOR CP/NET-86'
;***************************************************************
;***************************************************************
;** **
;** L O G O F F T R A N S I E N T P R O G R A M **
;** F O R C P / N E T - 8 6
;** **
;***************************************************************
;***************************************************************
;
; EQUATES
;
M EQU BYTE PTR 0[BX]
;
BDOS EQU 224
BUFF EQU 0080H
PRINT EQU 9
VERSION EQU 12
LOGOFF EQU 65
CFGTBL EQU 69
NOACTV EQU 11101111B
;
START:
MOV BX,0
ADD BX,SP
MOV SP,(Offset CCPSTACK)+2
PUSH BX ; SAVE CCP STACK POINTER
MOV CL,VERSION
INT BDOS ; GET VERSION NUMBER
MOV AL,BH
AND AL,00000010B
JNZ L_1
JMP VERSIONERR ; CP/NET MUST BE LOADED
L_1:
MOV DL,0 ; DEFAULT MSTR ID = 00H
MOV BX,BUFF
MOV AL,M ; GET # CHARS IN THE COMMAND TAIL
OR AL,AL
JZ DOLOGOFF ; DEFAULT LOGOFF IF EMPTY COMMAND TAIL
MOV CL,AL ; A = # CHARS IN COMMAND TAIL
XOR AL,AL
SCANBLNKS:
INC BX
MOV AL,M
CMP AL,' '
JNZ PASTBLNKS ; SKIP LEADING BLANKS
DEC CL
JNZ SCANBLNKS
JMPS DOLOGOFF
PASTBLNKS:
CMP AL,'['
JNZ LOGOFFERR
SCANMSTRID:
LAHF
INC BX
SAHF
DEC CL
JZ LOGOFFERR
MOV AL,M
CMP AL,']'
JZ DOLOGOFF
SUB AL,'0'
CMP AL,10
JB UPDATEID
ADD AL,('0'-'A'+10) AND 0FFH
CMP AL,16
JNB LOGOFFERR
UPDATEID:
LAHF
XCHG AL,AH
PUSH AX
MOV AL,DL
ADD AL,AL
ADD AL,AL
ADD AL,AL
ADD AL,AL
MOV DL,AL ; ACCUM * 16
POP AX
XCHG AL,AH
ADD AL,DL
MOV DL,AL
JMPS SCANMSTRID
DOLOGOFF:
MOV CL,LOGOFF
INT BDOS
INC AL
JNZ LOGOFFOK
MOV DX,(Offset LOGOFFAILEDMSG)
JMPS PRINTMSG
VERSIONERR:
MOV DX,(Offset VERSIONERRMSG)
JMPS PRINTMSG
LOGOFFERR:
MOV DX,(Offset LOGOFFERRMSG)
PRINTMSG:
MOV CL,PRINT
INT BDOS
JMPS EXIT
LOGOFFOK:
MOV CL,CFGTBL
INT BDOS ; GET CONFIG TABLE ADDRESS
MOV AL,ES:M
AND AL,NOACTV ; TURN OFF ACTIVE BIT
MOV ES:M,AL
EXIT:
POP BX
MOV SP,BX ; RESTORE CCP STACK POINTER
RET
L_2 EQU $
DSEG
ORG Offset L_2
;
; LOCAL DATA SEGMENT
;
VERSIONERRMSG RS 0
DB 'CP/NET-86 is not loaded.'
DB '$'
LOGOFFERRMSG RS 0
DB 'Illegal LOGOFF Command.'
DB '$'
LOGOFFAILEDMSG RS 0
DB 'LOGOFF Failed.'
DB '$'
LCLSTACK RS 0
DW 0C7C7H,0C7C7H,0C7C7H,0C7C7H,0C7C7H
DW 0C7C7H,0C7C7H,0C7C7H,0C7C7H,0C7C7H
CCPSTACK RS 0
DW (Offset $)-(Offset $)
;
END