summaryrefslogtreecommitdiff
path: root/v4.0/src/MAPPER/CWAIT.ASM
blob: ed4a4443fd0fd7f02cc02e6281607f76c6f2a9af (plain) (blame)
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