]>
wirehaze git hosting - MS-DOS.git/blob - v4.0/src/MAPPER/EXECPGM.ASM
4 title CP
/DOS DOSExecPrg mapper
6 buffer
segment word public 'buffer'
7 public DosExecPgmCalled
8 DosExecPgmCalled db 0 ;????????????
9 public DosExecPgmReturnCode
10 DosExecPgmReturnCode dw 0
12 DosExecParameterBlock
label word
13 EnvironmentSegment dw 0
20 dosxxx
segment byte public 'dos'
21 assume
cs:dosxxx
,ds:nothing
,es:nothing
,ss:nothing
23 ; ************************************************************************* *
25 ; * MODULE: DosExecPgm
27 ; * FUNCTION: Allows a program to execute another program
31 ; * push Asyncindic ; execute asynchronously
32 ; * push TraceIndic ; trace process
33 ; * push Argpointer ; address of arguments string
34 ; * push Envpointer ; address of environment string
35 ; * push Processid ; address to put process id
36 ; * push PgmPointer ; address of program filename
39 ; * RETURN SEQUENCE: AX = error code
43 ; * MODULES CALLED: INT 21H function 4BH and 4DH
47 ; *************************************************************************
61 Pgmpointer dd ?
; address of program file name
62 Processid dd ?
; this is used when only sync exec
63 EnvPointer dd ?
; address of environment string
64 ArgPointer dd ?
; address of argument string
65 Traceindic dw ?
; ignored, what is a trace process?
66 Asyncindic dw ?
; ignored, PC-DOS always waits!
69 dosexecpgm proc
far ; push registers
72 mov ax,seg buffer
; setup buffer segment
73 mov ds,ax ; and copy info into
74 assume
ds:buffer
; data buffer
76 mov ax,word ptr [bp+2].EnvPointer
; seg portion only for pc-dos
77 mov EnvironmentSegment
,ax ; copy environment string
79 les di,[bp].ArgPointer
80 mov word ptr ArgumentPointer
+0,di ; copy argument string
81 mov word ptr ArgumentPointer
+2,es
84 mov word ptr Default_5C_FCB
+0,ax ; setup defaults
85 mov word ptr Default_5C_FCB
+2,ax
87 mov word ptr Default_6C_FCB
+0,ax
88 mov word ptr Default_6C_FCB
+2,ax
92 mov bx,offset buffer
:DosExecParameterBlock
94 lds dx,[bp].PgmPointer
; setup program name
96 int 21h
; exec program and
97 jc ErrorExit
; check for error
100 int 21h
; get return code of program
101 jc ErrorExit
; just executed and jump if
105 mov DosExecPgmReturnCode
,ax ; else, save return code
107 xor ax,ax ; set no error code
110 Mexit
; pop registers
111 ret size
str - 6 ; return