Go to most recent revision | Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
31 | halyavin | 1 | macro Return _result |
2 | { |
||
3 | mov eax,_result |
||
4 | jmp .__ex |
||
5 | } |
||
6 | |||
7 | macro Epilog |
||
8 | { |
||
9 | .__ex: |
||
10 | mov [esp+28],eax |
||
11 | popa |
||
12 | ret |
||
13 | } |
||
14 | |||
15 | macro isdigit _reg, lbl_fail |
||
16 | { |
||
17 | cmp _reg,'0' |
||
18 | jb lbl_fail |
||
19 | cmp _reg,'9' |
||
20 | ja lbl_fail |
||
21 | } |
||
22 | |||
23 | macro islower _reg, lbl_fail |
||
24 | { |
||
25 | cmp _reg,'a' |
||
26 | jb lbl_fail |
||
27 | cmp _reg,'z' |
||
28 | ja lbl_fail |
||
29 | } |
||
30 | |||
31 | macro isalpha _reg, lbl_fail |
||
32 | { |
||
33 | local .ok |
||
34 | cmp _reg,'A' |
||
35 | jb lbl_fail |
||
36 | cmp _reg,'Z' |
||
37 | jbe .ok |
||
38 | islower _reg, lbl_fail |
||
39 | .ok: |
||
40 | } |
||
41 | |||
42 | macro dump _ptr, _len |
||
43 | { |
||
44 | if DEBUG_BLOCK eq 1 |
||
45 | pusha |
||
46 | lea edx,[_ptr] |
||
47 | dps 'Dump at ' |
||
48 | dpd edx |
||
49 | newline |
||
50 | mov eax,0x0d0a |
||
51 | xchg eax,[edx+_len] |
||
52 | pusha |
||
53 | call debug_outstr |
||
54 | popa |
||
55 | mov [edx+_len],eax |
||
56 | mcall 10 |
||
57 | mcall 2 |
||
58 | popa |
||
59 | end if |
||
60 | } |
||
61 | |||
62 | macro lods_block |
||
63 | { |
||
64 | local .noeof,.eof,.lod,.nog |
||
65 | .lod: |
||
66 | lodsb |
||
67 | cmp esi,[block_end] |
||
68 | jb .noeof |
||
69 | dump esi-20,20 |
||
70 | mov esi,[cur_block] |
||
71 | cmp esi,[max_block] |
||
72 | jae .eof |
||
73 | if DEBUG_BLOCK eq 1 |
||
74 | pusha |
||
75 | mcall 4,[Free+4],0xff0000,sym,1 |
||
76 | popa |
||
77 | ; dps 'Block=' |
||
78 | ; dpd esi |
||
79 | end if |
||
80 | call read_next_block |
||
81 | ; test [mode],RTF_TOEOF |
||
82 | ; jz .nog |
||
83 | test [mode],RTF_BLIND |
||
84 | jne .nog |
||
85 | mov eax,dword[prcinfo+42] |
||
86 | mul [cur_block] |
||
87 | div [max_block] |
||
88 | mov edx,0xff0000 |
||
89 | call draw_progress |
||
90 | .nog: |
||
91 | dump esi,20 |
||
92 | jmp .noeof;lod |
||
93 | .eof: |
||
94 | mov eax,ecOK;ecEndOfFile |
||
95 | jmp .__ex |
||
96 | .noeof: |
||
97 | } |
||
98 | |||
99 | macro RetError routine, route |
||
100 | { |
||
101 | call routine |
||
102 | test eax,eax |
||
103 | if route eq |
||
104 | je .getc |
||
105 | else |
||
106 | je route |
||
107 | end if |
||
108 | Return eax |
||
109 | } |
||
110 | |||
111 | macro Prcheck _prop |
||
112 | { |
||
113 | local .no |
||
114 | cmp ch, prop#_prop |
||
115 | jne .no |
||
116 | mov esi, _prop |
||
117 | jmp .checked |
||
118 | .no: |
||
119 | } |
||
120 | |||
121 | macro MemSet _prop,_struc |
||
122 | { |
||
123 | local .no |
||
124 | cmp al,_prop |
||
125 | jne .no |
||
126 | mov ecx,SIZE_#_struc |
||
127 | mov edi, _struc |
||
128 | jmp .ms |
||
129 | .no: |
||
130 | } |
||
131 | |||
132 | macro atoi |
||
133 | { |
||
134 | ; in: esi->pasParameter |
||
135 | ; out: eax->long |
||
136 | local .nxt |
||
137 | push ebx ecx |
||
138 | xor eax,eax |
||
139 | xor ebx,ebx |
||
140 | movzx ecx,byte[esi] |
||
141 | inc esi |
||
142 | .nxt: |
||
143 | lodsb |
||
144 | sub eax,'0' |
||
145 | imul ebx,10 |
||
146 | add ebx,eax |
||
147 | loop .nxt |
||
148 | mov eax,ebx |
||
149 | pop ecx ebx |
||
150 | } |
||
151 | |||
152 | macro uc2oem |
||
153 | { |
||
154 | local .ex1 |
||
155 | push edi |
||
156 | mov ecx,(oemutbl-uctbl)/2+1 |
||
157 | mov edi,uctbl |
||
158 | repne scasw |
||
159 | jne .ex1 |
||
160 | sub edi,uctbl |
||
161 | shr edi,1 |
||
162 | dec edi |
||
163 | mov al,[oemutbl+edi] |
||
164 | .ex1: |
||
165 | pop edi |
||
166 | } |
||
167 | |||
168 | macro ansi2oem |
||
169 | { |
||
170 | local .ex2,.notintbl |
||
171 | push edi ecx |
||
172 | mov ecx,oematbl-ansitbl |
||
173 | mov edi,ansitbl |
||
174 | repne scasb |
||
175 | jne .notintbl |
||
176 | dec edi |
||
177 | mov al,[oematbl-ansitbl+edi] |
||
178 | jmp .ex2 |
||
179 | .notintbl: |
||
180 | cmp al,0xc0 |
||
181 | jb .ex2 |
||
182 | sub al,0x40 |
||
183 | cmp al,0xb0 |
||
184 | jb .ex2 |
||
185 | add al,0x30 |
||
186 | .ex2: |
||
187 | pop ecx edi |
||
188 | } |
||
189 | |||
190 | draw_progress: |
||
191 | lea ebx,[eax+05 shl 16] |
||
192 | mov ecx,dword[prcinfo+46] |
||
193 | shl ecx,16 |
||
194 | add ecx,2+5 shl 16 |
||
195 | mcall 13 |
||
196 | ret |
||
197 | |||
198 | fTrue equ 1 |
||
199 | fFalse equ 0 |
||
200 | |||
201 | macro CHP ; CHaracter Properties |
||
202 | { |
||
203 | db ?;fBold; 0 |
||
204 | db ?;fUnderline; 1 |
||
205 | db ?;fItalic; 2 |
||
206 | db ?;fColor 3 |
||
207 | db ?;fFont 4 |
||
208 | dd ?;fFontSize 5 |
||
209 | } |
||
210 | SIZE_Chp equ 9 |
||
211 | |||
212 | macro PAP ; PAragraph Properties |
||
213 | { |
||
214 | dd ?;xaLeft; ; left indent in twips 0 |
||
215 | dd ?;xaRight; ; right indent in twips 4 |
||
216 | dd ?;xaFirst; ; first line indent in twips 8 |
||
217 | db ?; just; ; justification 12 |
||
218 | } |
||
219 | SIZE_Pap equ 13 |
||
220 | |||
221 | macro SEP |
||
222 | { |
||
223 | dd ?;cCols; ; number of columns 0 |
||
224 | db ?;sbk; ; section break type 4 |
||
225 | dd ?;xaPgn; ; x position of page number in twips 5 |
||
226 | dd ?;yaPgn; ; y position of page number in twips 9 |
||
227 | db ?;pgnFormat; ; how the page number is formatted 13 |
||
228 | } ; SEction Properties |
||
229 | SIZE_Sep equ 14 |
||
230 | |||
231 | macro DOP |
||
232 | { |
||
233 | dd ?;xaPage; ; page width in twips 0 |
||
234 | dd ?;yaPage; ; page height in twips 4 |
||
235 | dd ?;xaLeft; ; left margin in twips 8 |
||
236 | dd ?;yaTop; ; top margin in twips 12 |
||
237 | dd ?;xaRight; ; right margin in twips 16 |
||
238 | dd ?;yaBottom; ; bottom margin in twips 20 |
||
239 | dd ?;pgnStart; ; starting page number in twips 24 |
||
240 | db ?;fFacingp; ; facing pages enabled? 28 |
||
241 | db ?;fLandscape; ; landscape or portrait?? 29 |
||
242 | } ; ; DOcument Properties |
||
243 | SIZE_Dop equ 30 |
||
244 | |||
245 | justL equ 0 |
||
246 | justF equ 1 |
||
247 | justR equ 2 |
||
248 | justC equ 3 |
||
249 | |||
250 | sbkNon equ 0 |
||
251 | sbkCol equ 1 |
||
252 | sbkEvn equ 2 |
||
253 | sbkOdd equ 3 |
||
254 | sbkPg equ 4 |
||
255 | |||
256 | pgDec equ 0 |
||
257 | pgURom equ 1 |
||
258 | pgLRom equ 2 |
||
259 | pgULtr equ 3 |
||
260 | pgLLtr equ 4 |
||
261 | |||
262 | rdsNorm equ 0 |
||
263 | rdsSkip equ 1 ; Rtf Destination State |
||
264 | rdsColor equ 2 |
||
265 | |||
266 | risNorm equ 0 |
||
267 | risBin equ 1 |
||
268 | risHex equ 2 ; Rtf Internal State |
||
269 | |||
270 | macro SAVE ; property save macrostructure |
||
271 | { |
||
272 | CHP ;chp; 0 |
||
273 | PAP ;pap; 9 |
||
274 | SEP ;sep; 22 |
||
275 | DOP ;dop; 36 |
||
276 | RDS db ?;rds; 66 |
||
277 | RIS db ?;ris; 67 |
||
278 | } |
||
279 | SIZE_save equ (SIZE_Chp+SIZE_Pap+SIZE_Sep+SIZE_Dop+2) |
||
280 | |||
281 | ; What types of properties are there? |
||
282 | ipropBold equ 0 |
||
283 | ipropItalic equ 1 |
||
284 | ipropUnderline equ 2 |
||
285 | ipropLeftInd equ 3 |
||
286 | ipropRightInd equ 4 |
||
287 | ipropFirstInd equ 5 |
||
288 | ipropCols equ 6 |
||
289 | ipropPgnX equ 7 |
||
290 | ipropPgnY equ 8 |
||
291 | ipropXaPage equ 9 |
||
292 | ipropYaPage equ 10 |
||
293 | ipropXaLeft equ 11 |
||
294 | ipropXaRight equ 12 |
||
295 | ipropYaTop equ 13 |
||
296 | ipropYaBottom equ 14 |
||
297 | ipropPgnStart equ 15 |
||
298 | ipropSbk equ 16 |
||
299 | ipropPgnFormat equ 17 |
||
300 | ipropFacingp equ 18 |
||
301 | ipropLandscape equ 19 |
||
302 | ipropJust equ 20 |
||
303 | ipropPard equ 21 |
||
304 | ipropPlain equ 22 |
||
305 | ipropSectd equ 23 |
||
306 | ipropForeColor equ 24 |
||
307 | ipropFont equ 25 |
||
308 | ipropFontSize equ 26 |
||
309 | ipropMax equ 27 |
||
310 | |||
311 | |||
312 | actnSpec equ 0 |
||
313 | actnByte equ 1 |
||
314 | actnWord equ 2 |
||
315 | actnFloatFS equ 3 |
||
316 | |||
317 | propChp equ 0 |
||
318 | propPap equ 1 |
||
319 | propSep equ 2 |
||
320 | propDop equ 3 |
||
321 | |||
322 | macro PROP _actn,_prop,_offset |
||
323 | { |
||
324 | db _actn; 0 ; size of value |
||
325 | db _prop; 1 ; macrostructure containing value |
||
326 | db _offset; 2 ; offset of value from base of macrostructure |
||
327 | } |
||
328 | PROP_SIZE equ 3 |
||
329 | |||
330 | ipfnBin equ 0 |
||
331 | ipfnHex equ 1 |
||
332 | ipfnSkipDest equ 2 |
||
333 | |||
334 | idestPict equ 0 |
||
335 | idestSkip equ 1 |
||
336 | idestColor equ 2 |
||
337 | |||
338 | kwdChar equ 0 |
||
339 | kwdDest equ 1 |
||
340 | kwdProp equ 2 |
||
341 | kwdSpec equ 3 |
||
342 | kwdColor equ 4 |
||
343 | kwdUC equ 5 |
||
344 | |||
345 | isymMax =0 |
||
346 | isymImplemented=0 |
||
347 | macro SYM _szKeyword,_dflt,_fPassDflt,_kwd,_idx,_impl |
||
348 | { |
||
349 | local .r |
||
350 | if _impl eq 1 |
||
351 | isymImplemented=isymImplemented+1 |
||
352 | end if |
||
353 | dw _dflt; 0 ; default value to use |
||
354 | db _fPassDflt; 2 ; true to use default value from this table |
||
355 | db _kwd; 3 ; base action to take |
||
356 | db _idx; 4 ; index into property table if kwd == kwdProp |
||
357 | ; index into destination table if kwd == kwdDest |
||
358 | ; character to print if kwd == kwdChar |
||
359 | db .r-$-1 ; 5 |
||
360 | db _szKeyword; ; RTF keyword |
||
361 | .r: |
||
362 | isymMax=isymMax+1 |
||
363 | } |
||
364 | ; RTF parser error codes |
||
365 | |||
366 | ecOK equ 0 ; Everything's fine! |
||
367 | ecStackUnderflow equ 1 ; Unmatched '}' |
||
368 | ecStackOverflow equ 2 ; Too many '{' -- memory exhausted |
||
369 | ecUnmatchedBrace equ 3 ; RTF ended during an open group. |
||
370 | ecInvalidHex equ 4 ; invalid hex character found in data |
||
371 | ecBadTable equ 5 ; RTF table (sym or prop) invalid |
||
372 | ecAssertion equ 6 ; Assertion failure |
||
373 | ecEndOfFile equ 7 ; End of file reached while reading RTF |
||
374 | ecOutOfWindow equ 8 ; Decoding interrupted after window edge |