]> wirehaze git hosting - MS-DOS.git/blob - v4.0/src/CMD/FDISK/_PARSE.ASM

wirehaze git hosting

MZ is back!
[MS-DOS.git] / v4.0 / src / CMD / FDISK / _PARSE.ASM
1 page 60,132
2 name _parse
3 title C to PARSER interface
4 ;-------------------------------------------------------------------
5 ;
6 ; MODULE: _parse
7 ;
8 ; PURPOSE: Supplies an interface between C programs and
9 ; the DOS 3.3 parser
10 ;
11 ; CALLING FORMAT:
12 ; parse(&inregs,&outregs);
13 ;
14 ; DATE: 5-21-87
15 ;
16 ;-------------------------------------------------------------------
17
18 ; extrn sysparse:far
19
20 public _parse
21
22 ;-------------------------------------------------------------------
23 FarSW equ 0 ; make sysparse be a NEAR proc
24 TimeSW equ 0 ; Check time format
25 FileSW equ 0 ; Check file specification
26 CAPSW equ 0 ; Perform CAPS if specified
27 CmpxSW equ 0 ; Check complex list
28 NumSW equ 1 ; Check numeric value
29 KeySW equ 0 ; Support keywords
30 SwSW equ 1 ; Support switches
31 Val1SW equ 1 ; Support value definition 1
32 Val2SW equ 1 ; Support value definition 2
33 Val3SW equ 0 ; Support value definition 3
34 DrvSW equ 0 ; Support drive only format
35 QusSW equ 0 ; Support quoted string format
36 ;-------------------------------------------------------------------
37
38
39
40
41 _TEXT SEGMENT BYTE PUBLIC 'CODE'
42 _TEXT ENDS
43 _DATA SEGMENT WORD PUBLIC 'DATA'
44 _DATA ENDS
45 CONST SEGMENT WORD PUBLIC 'CONST'
46 CONST ENDS
47 _BSS SEGMENT WORD PUBLIC 'BSS'
48 _BSS ENDS
49
50
51 DGROUP GROUP CONST, _BSS, _DATA
52
53
54 _DATA segment word public 'DATA'
55
56 assume cs:DGROUP
57 assume ss:dgroup
58
59 public SysParse
60
61 ;-------------------------------------------------------------------
62 .xlist
63 include parse.asm ; include the parser
64 .list
65 ;-------------------------------------------------------------------
66
67 public CallParser
68 CallParser proc far
69
70 push ds
71 PUSH ES
72
73 push cs
74 pop ds
75 assume ds:DGROUP
76
77 push cs
78 pop es
79 assume es:DGROUP
80
81 nop
82
83 call SysParse
84
85 POP ES
86 pop ds
87
88 ret
89
90 CallParser endp
91
92
93
94 _DATA ends
95
96 _TEXT segment byte public 'CODE'
97
98 ASSUME CS:_TEXT
99 ASSUME DS:DGROUP
100 ASSUME ES:NOTHING
101 ASSUME SS:DGROUP
102
103 _parse proc near
104
105 push bp ; save user's base pointer
106 mov bp,sp ; set bp to current sp
107 push di ; save some registers
108 push si
109
110 ; copy C inregs into proper registers
111
112 mov di,[bp+4] ; fix di (arg 0)
113
114 ;-------------------------------------------------------------------
115
116 mov ax,[di+0ah] ; load di
117 push ax ; the di value from inregs is now on stack
118
119 mov ax,[di+00] ; get inregs.x.ax
120 mov bx,[di+02] ; get inregs.x.bx
121 mov cx,[di+04] ; get inregs.x.cx
122 mov dx,[di+06] ; get inregs.x.dx
123 mov si,[di+08] ; get inregs.x.si
124 pop di ; get inregs.x.di from stack
125
126 push bp ; save base pointer
127
128 ;-------------------------------------------------------------------
129 ;-------------------------------------------------------------------
130
131 call CallParser ; call the parser
132
133 ;-------------------------------------------------------------------
134 ;-------------------------------------------------------------------
135
136 pop bp ; restore base pointer
137 push di ; the di value from call is now on stack
138 mov di,[bp+6] ; fix di (arg 1)
139
140 mov [di+00],ax ; load outregs.x.ax
141 mov [di+02],bx ; load outregs.x.bx
142 mov [di+04],cx ; load outregs.x.cx
143 mov [di+06],dx ; load outregs.x.dx
144 mov [di+08],si ; load outregs.x.si
145
146 xor ax,ax ; clear ax
147 lahf ; get flags into ax
148 mov [di+0ch],ax ; load outregs.x.cflag
149
150 pop ax ; get di from stack
151 mov [di+0ah],ax ; load outregs.x.di
152
153 ;-------------------------------------------------------------------
154
155 pop si ; restore registers
156 pop di
157 mov sp,bp ; restore sp
158 pop bp ; restore user's bp
159 ret
160
161 _parse endp
162
163 _TEXT ends ; end code segment
164 end
165