summaryrefslogtreecommitdiff
path: root/v4.0/src/MAPPER/EXECPGM.ASM
diff options
context:
space:
mode:
authorGravatar Mark Zbikowski2024-04-25 21:24:10 +0100
committerGravatar Microsoft Open Source2024-04-25 22:32:27 +0000
commit2d04cacc5322951f187bb17e017c12920ac8ebe2 (patch)
tree80ee017efa878dfd5344b44249e6a241f2a7f6e2 /v4.0/src/MAPPER/EXECPGM.ASM
parentMerge pull request #430 from jpbaltazar/typoptbr (diff)
downloadms-dos-main.tar.gz
ms-dos-main.tar.xz
ms-dos-main.zip
MZ is back!HEADmain
Diffstat (limited to 'v4.0/src/MAPPER/EXECPGM.ASM')
-rw-r--r--v4.0/src/MAPPER/EXECPGM.ASM117
1 files changed, 117 insertions, 0 deletions
diff --git a/v4.0/src/MAPPER/EXECPGM.ASM b/v4.0/src/MAPPER/EXECPGM.ASM
new file mode 100644
index 0000000..738b950
--- /dev/null
+++ b/v4.0/src/MAPPER/EXECPGM.ASM
@@ -0,0 +1,117 @@
1;
2page 60,132
3;
4title CP/DOS DOSExecPrg mapper
5
6buffer segment word public 'buffer'
7 public DosExecPgmCalled
8DosExecPgmCalled db 0 ;????????????
9 public DosExecPgmReturnCode
10DosExecPgmReturnCode dw 0
11
12DosExecParameterBlock label word
13EnvironmentSegment dw 0
14ArgumentPointer dd 0
15Default_5C_FCB dd 0
16Default_6C_FCB dd 0
17
18buffer ends
19
20dosxxx 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
55inv_parm equ 0002
56not_suf_mem equ 0004
57
58str struc
59old_bp dw ?
60return dd ?
61Pgmpointer dd ? ; address of program file name
62Processid dd ? ; this is used when only sync exec
63EnvPointer dd ? ; address of environment string
64ArgPointer dd ? ; address of argument string
65Traceindic dw ? ; ignored, what is a trace process?
66Asyncindic dw ? ; ignored, PC-DOS always waits!
67str ends
68
69dosexecpgm 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
109ErrorExit:
110 Mexit ; pop registers
111 ret size str - 6 ; return
112
113dosexecpgm endp
114
115dosxxx ends
116
117 end