1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
|
;
page 60,132
;
title CP/DOS DOSCWait mapper
; ************************************************************************* *
; *
; * MODULE: DosCWait
; *
; * ACTION: Wait for a child termination
; *
; * CALLING SEQUENCE:
; *
; * push actioncode ; execution options
; * push waitoption ; wait options
; * push@ resultcode ; address to put result code
; * push@ processidword ; address to put process id
; * push processid ; process id of process to wait for
; * call doscwait
; *
; * RETURN SEQUENCE:
; *
; *
; *
; * MODULES CALLED: None
; *
; *
; *
; *************************************************************************
buffer segment word public 'buffer'
extrn DosExecPgmCalled:word
extrn DosExecPgmReturnCode:word
buffer ends
dosxxx segment byte public 'dos'
assume cs:dosxxx,ds:nothing,es:nothing,ss:nothing
public doscwait
.sall
.xlist
include macros.inc
.list
;
str struc
old_bp dw ?
return dd ?
Qprocessid dw ? ; Child process ID
Aprocessid dd ? ; process id pointer
resultcode dd ? ; result code pointer
waitoption dw ? ; wait option
actioncode dw ? ; action code
str ends
doscwait proc far
Enter doscwait ; push registers
mov ax,seg buffer
mov ds,ax ; set temporary buffer
assume ds:buffer
cmp DosExecPgmCalled,0 ; ??????
jz WeHaveExeced
mov ax,31
jmp ErrorExit ; error exit
WeHaveExeced:
mov ax,DosExecPgmReturnCode
lds si,[bp].ResultCode
assume ds:nothing
mov ds:[si],ax ; return termination code
mov ax,[bp].Qprocessid ; return child process id
lds si,[bp].Aprocessid
mov ds:[si],ax
xor ax,ax ; set good return code
ErrorExit:
Mexit ; pop registers
ret size str - 6 ; return
doscwait endp
dosxxx ends
end
|