3 title C to Message Retriever
4 ;-------------------------------------------------------------------
8 ; PURPOSE: Supplies an interface between C programs and
9 ; the DOS 3.3 message retriever
12 ; msgret(&inregs,&outregs);
16 ;-------------------------------------------------------------------
18 INCLUDE SYSMSG
.INC ;PERMIT SYSTEM MESSAGE HANDLER DEFINITION ;AN000;
20 MSG_UTILNAME
<FILESYS
> ;IDENTIFY THE COMPONENT ;AN000;
22 ;-------------------------------------------------------------------
23 ;-------------------------------------------------------------------
26 _TEXT
SEGMENT BYTE PUBLIC 'CODE'
28 _DATA
SEGMENT WORD PUBLIC 'DATA'
30 CONST
SEGMENT WORD PUBLIC 'CONST'
32 _BSS
SEGMENT WORD PUBLIC 'BSS'
35 DGROUP GROUP CONST
, _BSS
, _DATA
36 ASSUME
CS: DGROUP
, DS: DGROUP
, SS: DGROUP
, ES: NOTHING
38 public data_sysloadmsg
39 public data_sysdispmsg
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;
49 data_sysloadmsg proc
far
51 push bp ; save user's base pointer
52 mov bp,sp ; set bp to current sp
53 push di ; save some registers
56 ; copy C inregs into proper registers
58 mov di,[bp+4+4] ; fix di (arg 0)
60 ;-------------------------------------------------------------------
62 mov ax,[di+0ah] ; load di
63 push ax ; the di value from inregs is now on stack
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
72 push bp ; save base pointer
74 ;-------------------------------------------------------------------
76 call sysloadmsg
; call the message retriever
78 ;-------------------------------------------------------------------
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)
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
90 lahf ; get flags into ax
91 mov al,ah ; move into low byte
92 mov [di+0ch],ax ; load outregs.x.cflag
94 pop ax ; get di from stack
95 mov [di+0ah],ax ; load outregs.x.di
97 ;-------------------------------------------------------------------
99 pop si ; restore registers
101 mov sp,bp ; restore sp
102 pop bp ; restore user's bp
108 data_sysdispmsg proc
far
110 push bp ; save user's base pointer
111 mov bp,sp ; set bp to current sp
112 push di ; save some registers
115 ; copy C inregs into proper registers
117 mov di,[bp+4+4] ; fix di (arg 0)
119 ;-------------------------------------------------------------------
121 mov ax,[di+0ah] ; load di
122 push ax ; the di value from inregs is now on stack
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
131 push bp ; save base pointer
133 ;-------------------------------------------------------------------
137 ;-------------------------------------------------------------------
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)
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
149 lahf ; get flags into ax
150 mov al,ah ; move into low byte
151 mov [di+0ch],ax ; load outregs.x.cflag
153 pop ax ; get di from stack
154 mov [di+0ah],ax ; load outregs.x.di
156 ;-------------------------------------------------------------------
158 pop si ; restore registers
160 mov sp,bp ; restore sp
161 pop bp ; restore user's bp
169 _DATA ends
; end code segment
178 _sysdispmsg proc
near
183 _sysloadmsg proc
near