]> wirehaze git hosting - MS-DOS.git/blob - v4.0/src/MAPPER/EXECPGM.ASM

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v4.0 / src / MAPPER / EXECPGM.ASM
1 ;
2 page 60,132
3 ;
4 title CP/DOS DOSExecPrg mapper
5
6 buffer segment word public 'buffer'
7 public DosExecPgmCalled
8 DosExecPgmCalled db 0 ;????????????
9 public DosExecPgmReturnCode
10 DosExecPgmReturnCode dw 0
11
12 DosExecParameterBlock label word
13 EnvironmentSegment dw 0
14 ArgumentPointer dd 0
15 Default_5C_FCB dd 0
16 Default_6C_FCB dd 0
17
18 buffer ends
19
20 dosxxx segment byte public 'dos'
21 assume cs:dosxxx,ds:nothing,es:nothing,ss:nothing
22 ;
23 ; ************************************************************************* *
24 ; *
25 ; * MODULE: DosExecPgm
26 ; *
27 ; * FUNCTION: Allows a program to execute another program
28 ; *
29 ; * CALLING SEQUENCE:
30 ; *
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
37 ; * call dosexecpgm
38 ; *
39 ; * RETURN SEQUENCE: AX = error code
40 ; *
41 ; *
42 ; *
43 ; * MODULES CALLED: INT 21H function 4BH and 4DH
44 ; *
45 ; *
46 ; *
47 ; *************************************************************************
48
49 public dosexecpgm
50 .sall
51 .xlist
52 include macros.inc
53 .list
54
55 inv_parm equ 0002
56 not_suf_mem equ 0004
57
58 str struc
59 old_bp dw ?
60 return dd ?
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!
67 str ends
68
69 dosexecpgm proc far ; push registers
70 Enter dosexecpgm
71
72 mov ax,seg buffer ; setup buffer segment
73 mov ds,ax ; and copy info into
74 assume ds:buffer ; data buffer
75
76 mov ax,word ptr [bp+2].EnvPointer ; seg portion only for pc-dos
77 mov EnvironmentSegment,ax ; copy environment string
78
79 les di,[bp].ArgPointer
80 mov word ptr ArgumentPointer+0,di ; copy argument string
81 mov word ptr ArgumentPointer+2,es
82
83 xor ax,ax
84 mov word ptr Default_5C_FCB+0,ax ; setup defaults
85 mov word ptr Default_5C_FCB+2,ax
86
87 mov word ptr Default_6C_FCB+0,ax
88 mov word ptr Default_6C_FCB+2,ax
89
90 mov bx,ds
91 mov es,bx
92 mov bx,offset buffer:DosExecParameterBlock
93
94 lds dx,[bp].PgmPointer ; setup program name
95 mov ax,4b00h
96 int 21h ; exec program and
97 jc ErrorExit ; check for error
98
99 mov ah,4dh
100 int 21h ; get return code of program
101 jc ErrorExit ; just executed and jump if
102 ; error
103 mov bx,seg buffer
104 mov ds,bx
105 mov DosExecPgmReturnCode,ax ; else, save return code
106
107 xor ax,ax ; set no error code
108
109 ErrorExit:
110 Mexit ; pop registers
111 ret size str - 6 ; return
112
113 dosexecpgm endp
114
115 dosxxx ends
116
117 end