mirror of
https://github.com/Microsoft/MS-DOS.git
synced 2025-08-20 21:43:39 -07:00
MS-DOS v2.0 Release
This commit is contained in:
parent
fce0f75959
commit
80ab2fddfd
156 changed files with 56403 additions and 0 deletions
130
v2.0/source/PROC.ASM
Normal file
130
v2.0/source/PROC.ASM
Normal file
|
@ -0,0 +1,130 @@
|
|||
;
|
||||
; process control system calls for MSDOS
|
||||
;
|
||||
|
||||
INCLUDE DOSSEG.ASM
|
||||
|
||||
CODE SEGMENT BYTE PUBLIC 'CODE'
|
||||
ASSUME SS:DOSGROUP,CS:DOSGROUP
|
||||
|
||||
.xlist
|
||||
.xcref
|
||||
INCLUDE DOSSYM.ASM
|
||||
INCLUDE DEVSYM.ASM
|
||||
.cref
|
||||
.list
|
||||
|
||||
i_need CurrentPDB,WORD
|
||||
i_need CreatePDB,BYTE
|
||||
i_need NUMIO,BYTE
|
||||
i_need Exit_type,BYTE
|
||||
i_need INDOS,BYTE
|
||||
i_need DMAADD,DWORD
|
||||
i_need DidCTRLC,BYTE
|
||||
|
||||
SUBTTL $WAIT - return previous process error code
|
||||
PAGE
|
||||
;
|
||||
; process control data
|
||||
;
|
||||
i_need exit_code,WORD ; code of exit
|
||||
|
||||
;
|
||||
; Assembler usage:
|
||||
; MOV AH, Wait
|
||||
; INT int_command
|
||||
; AX has the exit code
|
||||
procedure $WAIT,NEAR
|
||||
ASSUME DS:NOTHING,ES:NOTHING
|
||||
MOV AX,[exit_code]
|
||||
XOR DX,DX
|
||||
MOV [exit_code],DX
|
||||
transfer SYS_RET_OK
|
||||
$WAIT ENDP
|
||||
|
||||
IF IBM
|
||||
procedure $EXEC,NEAR
|
||||
error error_invalid_function
|
||||
$EXEC ENDP
|
||||
ENDIF
|
||||
IF NOT IBM
|
||||
INCLUDE EXEC.ASM
|
||||
ENDIF
|
||||
|
||||
SUBTTL Terminate and stay resident handler
|
||||
PAGE
|
||||
;
|
||||
; Input: DX is an offset from CurrentPDB at which to
|
||||
; truncate the current block.
|
||||
;
|
||||
; output: The current block is truncated (expanded) to be [DX+15]/16
|
||||
; paragraphs long. An exit is simulated via resetting CurrentPDB
|
||||
; and restoring the vectors.
|
||||
;
|
||||
procedure $Keep_process,NEAR
|
||||
ASSUME DS:NOTHING,ES:NOTHING,SS:DOSGROUP
|
||||
|
||||
PUSH AX ; keep exit code around
|
||||
MOV BYTE PTR [Exit_type],Exit_keep_process
|
||||
MOV ES,[CurrentPDB]
|
||||
CMP DX,6h ; keep enough space around for system
|
||||
JAE Keep_shrink ; info
|
||||
MOV DX,6h
|
||||
keep_shrink:
|
||||
MOV BX,DX
|
||||
PUSH BX
|
||||
PUSH ES
|
||||
invoke $SETBLOCK ; ignore return codes.
|
||||
POP DS
|
||||
POP BX
|
||||
JC keep_done ; failed on modification
|
||||
MOV AX,DS
|
||||
ADD AX,BX
|
||||
MOV DS:[PDB_block_len],AX
|
||||
|
||||
keep_done:
|
||||
POP AX
|
||||
JMP SHORT exit_inner ; and let abort take care of the rest
|
||||
|
||||
$Keep_process ENDP
|
||||
|
||||
procedure Stay_resident,NEAR
|
||||
ASSUME DS:NOTHING,ES:NOTHING,SS:NOTHING
|
||||
MOV AX,(Keep_process SHL 8) + 0 ; Lower part is return code
|
||||
ADD DX,15
|
||||
MOV CL,4
|
||||
SHR DX,CL
|
||||
|
||||
transfer COMMAND
|
||||
Stay_resident ENDP
|
||||
|
||||
SUBTTL $EXIT - return to parent process
|
||||
PAGE
|
||||
;
|
||||
; Assembler usage:
|
||||
; MOV AL, code
|
||||
; MOV AH, Exit
|
||||
; INT int_command
|
||||
; Error return:
|
||||
; None.
|
||||
;
|
||||
procedure $EXIT,NEAR
|
||||
ASSUME DS:NOTHING,ES:NOTHING,SS:DOSGROUP
|
||||
XOR AH,AH
|
||||
XCHG AH,BYTE PTR [DidCTRLC]
|
||||
OR AH,AH
|
||||
MOV BYTE PTR [Exit_type],exit_terminate
|
||||
JZ exit_inner
|
||||
MOV BYTE PTR [Exit_type],exit_ctrl_c
|
||||
|
||||
Exit_inner:
|
||||
invoke get_user_stack
|
||||
PUSH [CurrentPDB]
|
||||
POP [SI.user_CS]
|
||||
transfer abort_inner
|
||||
$EXIT ENDP
|
||||
|
||||
do_ext
|
||||
|
||||
CODE ENDS
|
||||
END
|
Loading…
Add table
Add a link
Reference in a new issue