summaryrefslogtreecommitdiff
path: root/v4.0/src/CMD/FILESYS/_MSGRET.ASM
diff options
context:
space:
mode:
Diffstat (limited to 'v4.0/src/CMD/FILESYS/_MSGRET.ASM')
-rw-r--r--v4.0/src/CMD/FILESYS/_MSGRET.ASM190
1 files changed, 190 insertions, 0 deletions
diff --git a/v4.0/src/CMD/FILESYS/_MSGRET.ASM b/v4.0/src/CMD/FILESYS/_MSGRET.ASM
new file mode 100644
index 0000000..832529c
--- /dev/null
+++ b/v4.0/src/CMD/FILESYS/_MSGRET.ASM
@@ -0,0 +1,190 @@
1page 60,132
2name _msgret
3title C to Message Retriever
4;-------------------------------------------------------------------
5;
6; MODULE: _msgret
7;
8; PURPOSE: Supplies an interface between C programs and
9; the DOS 3.3 message retriever
10;
11; CALLING FORMAT:
12; msgret(&inregs,&outregs);
13;
14; DATE: 5-21-87
15;
16;-------------------------------------------------------------------
17
18 INCLUDE SYSMSG.INC ;PERMIT SYSTEM MESSAGE HANDLER DEFINITION ;AN000;
19
20 MSG_UTILNAME <FILESYS> ;IDENTIFY THE COMPONENT ;AN000;
21
22;-------------------------------------------------------------------
23;-------------------------------------------------------------------
24
25
26_TEXT SEGMENT BYTE PUBLIC 'CODE'
27_TEXT ENDS
28_DATA SEGMENT WORD PUBLIC 'DATA'
29_DATA ENDS
30CONST SEGMENT WORD PUBLIC 'CONST'
31CONST ENDS
32_BSS SEGMENT WORD PUBLIC 'BSS'
33_BSS ENDS
34
35DGROUP GROUP CONST, _BSS, _DATA
36 ASSUME CS: DGROUP, DS: DGROUP, SS: DGROUP, ES: NOTHING
37
38 public data_sysloadmsg
39 public data_sysdispmsg
40
41_DATA SEGMENT
42
43 MSG_SERVICES <MSGDATA>
44 MSG_SERVICES <LOADmsg,FARmsg>
45 MSG_SERVICES <DISPLAYmsg,CHARmsg,NUMmsg>
46 MSG_SERVICES <FILESYS.CLA,FILESYS.CL1,FILESYS.CL2,FILESYS.CTL> ;AN000;
47
48
49data_sysloadmsg proc far
50
51 push bp ; save user's base pointer
52 mov bp,sp ; set bp to current sp
53 push di ; save some registers
54 push si
55
56; copy C inregs into proper registers
57
58 mov di,[bp+4+4] ; fix di (arg 0)
59
60;-------------------------------------------------------------------
61
62 mov ax,[di+0ah] ; load di
63 push ax ; the di value from inregs is now on stack
64
65 mov ax,[di+00] ; get inregs.x.ax
66 mov bx,[di+02] ; get inregs.x.bx
67 mov cx,[di+04] ; get inregs.x.cx
68 mov dx,[di+06] ; get inregs.x.dx
69 mov si,[di+08] ; get inregs.x.si
70 pop di ; get inregs.x.di from stack
71
72 push bp ; save base pointer
73
74;-------------------------------------------------------------------
75
76 call sysloadmsg ; call the message retriever
77
78;-------------------------------------------------------------------
79
80 pop bp ; restore base pointer
81 push di ; the di value from call is now on stack
82 mov di,[bp+6+4] ; fix di (arg 1)
83
84 mov [di+00],ax ; load outregs.x.ax
85 mov [di+02],bx ; load outregs.x.bx
86 mov [di+04],cx ; load outregs.x.cx
87 mov [di+06],dx ; load outregs.x.dx
88 mov [di+08],si ; load outregs.x.si
89
90 lahf ; get flags into ax
91 mov al,ah ; move into low byte
92 mov [di+0ch],ax ; load outregs.x.cflag
93
94 pop ax ; get di from stack
95 mov [di+0ah],ax ; load outregs.x.di
96
97;-------------------------------------------------------------------
98
99 pop si ; restore registers
100 pop di
101 mov sp,bp ; restore sp
102 pop bp ; restore user's bp
103 ret
104
105data_sysloadmsg endp
106
107
108data_sysdispmsg proc far
109
110 push bp ; save user's base pointer
111 mov bp,sp ; set bp to current sp
112 push di ; save some registers
113 push si
114
115; copy C inregs into proper registers
116
117 mov di,[bp+4+4] ; fix di (arg 0)
118
119;-------------------------------------------------------------------
120
121 mov ax,[di+0ah] ; load di
122 push ax ; the di value from inregs is now on stack
123
124 mov ax,[di+00] ; get inregs.x.ax
125 mov bx,[di+02] ; get inregs.x.bx
126 mov cx,[di+04] ; get inregs.x.cx
127 mov dx,[di+06] ; get inregs.x.dx
128 mov si,[di+08] ; get inregs.x.si
129 pop di ; get inregs.x.di from stack
130
131 push bp ; save base pointer
132
133;-------------------------------------------------------------------
134
135 call sysdispmsg
136
137;-------------------------------------------------------------------
138
139 pop bp ; restore base pointer
140 push di ; the di value from call is now on stack
141 mov di,[bp+6+4] ; fix di (arg 1)
142
143 mov [di+00],ax ; load outregs.x.ax
144 mov [di+02],bx ; load outregs.x.bx
145 mov [di+04],cx ; load outregs.x.cx
146 mov [di+06],dx ; load outregs.x.dx
147 mov [di+08],si ; load outregs.x.si
148
149 lahf ; get flags into ax
150 mov al,ah ; move into low byte
151 mov [di+0ch],ax ; load outregs.x.cflag
152
153 pop ax ; get di from stack
154 mov [di+0ah],ax ; load outregs.x.di
155
156;-------------------------------------------------------------------
157
158 pop si ; restore registers
159 pop di
160 mov sp,bp ; restore sp
161 pop bp ; restore user's bp
162 ret
163
164data_sysdispmsg endp
165
166include msgdcl.inc
167
168
169_DATA ends ; end code segment
170
171_TEXT SEGMENT
172
173 assume cs:_TEXT
174
175 public _sysdispmsg
176 public _sysloadmsg
177
178_sysdispmsg proc near
179 call data_sysdispmsg
180 ret
181_sysdispmsg endp
182
183_sysloadmsg proc near
184 call data_sysloadmsg
185 ret
186_sysloadmsg endp
187
188_TEXT ENDS
189 end
190