Rev 31 | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
31 | halyavin | 1 | |
2 | ; Keyword descriptions |
||
3 | ;rgsymRtf[] = { |
||
4 | ; keyword dflt fPassDflt kwd idx implemented |
||
5 | if syms eq 12 |
||
6 | SYM "f", 0, fFalse, kwdProp, ipropFont |
||
7 | SYM "*", 0, fFalse, kwdSpec, ipfnSkipDest ,1 |
||
8 | SYM "'", 0, fFalse, kwdSpec, ipfnHex ,1 |
||
9 | SYM "par", 0, fFalse, kwdChar, 0x0a ,1 |
||
10 | SYM "u", 0, fFalse, kwdUC, 0 ,1 |
||
11 | SYM "line", 0, fFalse, kwdChar, 0xa ,1 |
||
12 | SYM "plain", 0, fFalse, kwdProp, ipropPlain ,1 |
||
13 | SYM 0x9, 0, fFalse, kwdChar, 0x09 ,1 |
||
14 | SYM "tab", 0, fFalse, kwdChar, 0x09 ,1 |
||
15 | SYM "b", 1, fFalse, kwdProp, ipropBold ,1 |
||
16 | SYM "ul", 1, fFalse, kwdProp, ipropUnderline |
||
17 | SYM "i", 1, fFalse, kwdProp, ipropItalic ,1 |
||
18 | SYM "li", 0, fFalse, kwdProp, ipropLeftInd |
||
19 | SYM "ri", 0, fFalse, kwdProp, ipropRightInd |
||
20 | SYM "fi", 0, fFalse, kwdProp, ipropFirstInd |
||
21 | SYM "~", 0, fFalse, kwdChar, ' ' ,1 |
||
22 | SYM "cols", 1, fFalse, kwdProp, ipropCols |
||
23 | SYM "qc", justC, fTrue, kwdProp, ipropJust ,1 |
||
24 | SYM "ql", justL, fTrue, kwdProp, ipropJust ,1 |
||
25 | SYM "qr", justR, fTrue, kwdProp, ipropJust ,1 |
||
26 | SYM "qj", justF, fTrue, kwdProp, ipropJust |
||
27 | SYM "cf", 0, fFalse, kwdProp, ipropForeColor ,1 |
||
28 | SYM "red", 0, fFalse, kwdColor, 16 ,1 |
||
29 | SYM "green", 0, fFalse, kwdColor, 8 ,1 |
||
30 | SYM "blue", 0, fFalse, kwdColor, 0 ,1 |
||
31 | SYM "fs", 0, fFalse, kwdProp, ipropFontSize ,1 |
||
32 | SYM "sbknone", sbkNon, fTrue, kwdProp, ipropSbk |
||
33 | SYM "sbkcol", sbkCol, fTrue, kwdProp, ipropSbk |
||
34 | SYM "sbkeven", sbkEvn, fTrue, kwdProp, ipropSbk |
||
35 | SYM "sbkodd", sbkOdd, fTrue, kwdProp, ipropSbk |
||
36 | SYM "sbkpage", sbkPg, fTrue, kwdProp, ipropSbk |
||
37 | SYM "pgnx", 0, fFalse, kwdProp, ipropPgnX |
||
38 | SYM "pgny", 0, fFalse, kwdProp, ipropPgnY |
||
39 | SYM "pgndec", pgDec, fTrue, kwdProp, ipropPgnFormat |
||
40 | SYM "pgnucrm", pgURom, fTrue, kwdProp, ipropPgnFormat |
||
41 | SYM "pgnlcrm", pgLRom, fTrue, kwdProp, ipropPgnFormat |
||
42 | SYM "pgnucltr", pgULtr, fTrue, kwdProp, ipropPgnFormat |
||
43 | SYM "pgnlcltr", pgLLtr, fTrue, kwdProp, ipropPgnFormat |
||
44 | SYM "paperw", 12240, fFalse, kwdProp, ipropXaPage |
||
45 | SYM "paperh", 15480, fFalse, kwdProp, ipropYaPage |
||
46 | SYM "margl", 1800, fFalse, kwdProp, ipropXaLeft |
||
47 | SYM "margr", 1800, fFalse, kwdProp, ipropXaRight |
||
48 | SYM "margt", 1440, fFalse, kwdProp, ipropYaTop |
||
49 | SYM "margb", 1440, fFalse, kwdProp, ipropYaBottom |
||
50 | SYM "pgnstart", 1, fTrue, kwdProp, ipropPgnStart |
||
51 | SYM "facingp", 1, fTrue, kwdProp, ipropFacingp |
||
52 | SYM "landscape",1, fTrue, kwdProp, ipropLandscape |
||
53 | SYM "ldblquote",0, fFalse, kwdChar, '"' ,1 |
||
54 | SYM "rdblquote",0, fFalse, kwdChar, '"' ,1 |
||
55 | SYM "bin", 0, fFalse, kwdSpec, ipfnBin ,1 |
||
56 | SYM "author", 0, fFalse, kwdDest, idestSkip |
||
57 | SYM "buptim", 0, fFalse, kwdDest, idestSkip |
||
58 | SYM "bullet", 0, fFalse, kwdChar, '*' ,1 |
||
59 | SYM "cell", 0, fFalse, kwdChar, 0x09 ,1 |
||
60 | SYM "colortbl", 0, fFalse, kwdDest, idestColor ,1 |
||
61 | SYM "comment", 0, fFalse, kwdDest, idestSkip |
||
62 | SYM "creatim", 0, fFalse, kwdDest, idestSkip |
||
63 | SYM "doccomm", 0, fFalse, kwdDest, idestSkip |
||
64 | SYM "fonttbl", 0, fFalse, kwdDest, idestSkip |
||
65 | SYM "footer", 0, fFalse, kwdDest, idestSkip |
||
66 | SYM "footerf", 0, fFalse, kwdDest, idestSkip |
||
67 | SYM "footerl", 0, fFalse, kwdDest, idestSkip |
||
68 | SYM "footerr", 0, fFalse, kwdDest, idestSkip |
||
69 | SYM "footnote", 0, fFalse, kwdDest, idestSkip |
||
70 | SYM "ftncn", 0, fFalse, kwdDest, idestSkip |
||
71 | SYM "ftnsep", 0, fFalse, kwdDest, idestSkip |
||
72 | SYM "ftnsepc", 0, fFalse, kwdDest, idestSkip |
||
73 | SYM "header", 0, fFalse, kwdDest, idestSkip |
||
74 | SYM "headerf", 0, fFalse, kwdDest, idestSkip |
||
75 | SYM "headerl", 0, fFalse, kwdDest, idestSkip |
||
76 | SYM "headerr", 0, fFalse, kwdDest, idestSkip |
||
77 | SYM "info", 0, fFalse, kwdDest, idestSkip |
||
78 | SYM "keywords", 0, fFalse, kwdDest, idestSkip |
||
79 | SYM "operator", 0, fFalse, kwdDest, idestSkip |
||
80 | SYM "pict", 0, fFalse, kwdDest, idestSkip |
||
81 | SYM "printim", 0, fFalse, kwdDest, idestSkip |
||
82 | SYM "private1", 0, fFalse, kwdDest, idestSkip |
||
83 | SYM "revtim", 0, fFalse, kwdDest, idestSkip |
||
84 | SYM "row", 0, fFalse, kwdChar, 0x0a ,1 |
||
85 | SYM "rxe", 0, fFalse, kwdDest, idestSkip |
||
86 | SYM "stylesheet",0, fFalse, kwdDest, idestSkip |
||
87 | SYM "subject", 0, fFalse, kwdDest, idestSkip |
||
88 | SYM "tc", 0, fFalse, kwdDest, idestSkip |
||
89 | SYM "title", 0, fFalse, kwdDest, idestSkip |
||
90 | SYM "trowd", 0, fFalse, kwdChar, 0x0a ,1 |
||
91 | SYM "txe", 0, fFalse, kwdDest, idestSkip |
||
92 | SYM "xe", 0, fFalse, kwdDest, idestSkip |
||
93 | SYM "{", 0, fFalse, kwdChar, '{' ,1 |
||
94 | SYM "}", 0, fFalse, kwdChar, '}' ,1 |
||
95 | SYM "\", 0, fFalse, kwdChar, '\' ,1 |
||
96 | end if |
||
97 | SYM 0xa, 0, fFalse, kwdChar, 0x0a ,1 |
||
98 | SYM 0xd, 0, fFalse, kwdChar, 0x0a ,1 |
||
99 | |||
100 | |||
101 | ; %%Function: ecApplyPropChange |
||
102 | ; |
||
103 | ; Set the property identified by _iprop_ to the value _val_. |
||
104 | ; |
||
105 | ecApplyPropChange: |
||
106 | ; in : eax-iprop, ebx - value |
||
107 | pusha |
||
108 | cmp [rds],rdsSkip |
||
109 | jne .noskip |
||
110 | .ok: |
||
111 | Return ecOK |
||
112 | .noskip: |
||
113 | lea esi,[eax*2+eax+rgprop] ;rgprop[iprop] |
||
114 | mov cx,word[esi] |
||
115 | movzx edx,byte[esi+2] |
||
116 | Prcheck Dop |
||
117 | Prcheck Sep |
||
118 | Prcheck Pap |
||
119 | Prcheck Chp |
||
120 | cmp byte[esi],actnSpec |
||
121 | jne .bad |
||
122 | .checked: |
||
123 | cmp cl,actnByte |
||
124 | jne .nob |
||
125 | mov byte[esi+edx],bl |
||
126 | jmp .ok |
||
127 | .nob: |
||
128 | cmp cl,actnWord |
||
129 | jne .now |
||
130 | mov [esi+edx],ebx |
||
131 | jmp .ok |
||
132 | .now: |
||
133 | cmp cl,actnSpec |
||
134 | jne .nos |
||
135 | call ecParseSpecialProperty |
||
136 | jmp .__ex |
||
137 | .nos: |
||
138 | cmp cl,actnFloatFS |
||
139 | jne .bad |
||
140 | mov [Chp+5],ebx |
||
141 | call updFS |
||
142 | jmp .ok |
||
143 | .bad: |
||
144 | mov eax,ecBadTable |
||
145 | Epilog |
||
146 | |||
147 | |||
148 | cmp dword[Chp+5],0 |
||
149 | jnz .no0 |
||
150 | mov dword[Chp+5],24 |
||
151 | .no0: |
||
152 | fild dword[Chp+5] |
||
153 | fmul dword[Free-4] |
||
154 | fst dword[Free+12] |
||
155 | fstp dword[Free+16] |
||
156 | ret |
||
157 | ; |
||
158 | ; %%Function: ecParseSpecialProperty |
||
159 | ; |
||
160 | ; Set a property that requires code to evaluate. |
||
161 | ; |
||
162 | |||
163 | |||
164 | ; in : eax-iprop, ebx - value |
||
165 | ; cmp al,ipropPard |
||
166 | ; jne .nopap |
||
167 | ; push eax |
||
168 | ; mov ecx,SIZE_Pap |
||
169 | ; mov edi,RetroSave+9 |
||
170 | ; xor eax,eax |
||
171 | ; rep stosb |
||
172 | ; pop eax |
||
173 | ; .nopap: |
||
174 | MemSet ipropPard,Pap |
||
175 | MemSet ipropPlain,Chp |
||
176 | MemSet ipropSectd,Sep |
||
177 | mov eax,ecBadTable |
||
178 | ret |
||
179 | .ms: |
||
180 | xor eax,eax |
||
181 | rep stosb |
||
182 | ret |
||
183 | |||
184 | |||
185 | ; %%Function: ecTranslateKeyword. |
||
186 | ; |
||
187 | ; Step 3. |
||
188 | ; Search rgsymRtf for szKeyword and evaluate it appropriately. |
||
189 | ; |
||
190 | ; Inputs: |
||
191 | ; szKeyword: The RTF control to evaluate. |
||
192 | ; param: The parameter of the RTF control. |
||
193 | ; fParam: fTrue if the control had a parameter; (that is, if param is valid |
||
194 | |||
195 | |||
196 | ecTranslateKeyword: |
||
197 | ; in: esi->pasKeyword; ebx-param, eax-fParam |
||
198 | pusha |
||
199 | mov edx,isymMax |
||
200 | mov edi,rgsymRtf |
||
201 | .next: |
||
202 | add edi,5 |
||
203 | movzx ecx,byte[edi] |
||
204 | inc ecx |
||
205 | push edi esi ecx |
||
206 | repe cmpsb |
||
207 | pop ecx esi edi |
||
208 | jz .found |
||
209 | add edi,ecx |
||
210 | ; inc edi |
||
211 | dec edx |
||
212 | test edx,edx |
||
213 | jne .next |
||
214 | cmp dl,[fSkipDestIfUnk] |
||
215 | jz .discard |
||
216 | mov [rds],rdsSkip |
||
217 | mov [fSkipDestIfUnk],dl |
||
218 | .discard: |
||
219 | Return ecOK |
||
220 | .found: |
||
221 | and [fSkipDestIfUnk],0 |
||
222 | mov cx,[edi-3] |
||
223 | cmp ch,kwdProp |
||
224 | jne .nop |
||
225 | test cl,cl |
||
226 | jnz .usedeflt |
||
227 | test al,al |
||
228 | jnz .validparm |
||
229 | .usedeflt: |
||
230 | mov ebx,[edi-5] |
||
231 | .validparm: |
||
232 | movzx eax,byte[edi-1] |
||
233 | call ecApplyPropChange |
||
234 | jmp .__ex |
||
235 | .nop: |
||
236 | movzx eax,byte[edi-1] |
||
237 | cmp ch,kwdChar |
||
238 | jne .noc |
||
239 | .pchar: |
||
240 | mov edi,[esp] |
||
241 | test eax,eax |
||
242 | jz .__ex |
||
243 | mov esi,[esp+36] |
||
244 | call ecParseChar |
||
245 | mov [esp],edi |
||
246 | mov [esp+36],esi |
||
247 | jmp .__ex |
||
248 | .noc: |
||
249 | cmp ch,kwdDest |
||
250 | jne .nod |
||
251 | call ecChangeDest |
||
252 | jmp .__ex |
||
253 | .nod: |
||
254 | cmp ch,kwdSpec |
||
255 | jne .nos |
||
256 | call ecParseSpecialKeyword |
||
257 | jmp .__ex |
||
258 | .nos: |
||
259 | cmp ch,kwdColor |
||
260 | jne .nocol |
||
261 | cmp [rds],rdsColor |
||
262 | jne .bad |
||
263 | mov edx,[colorptr] |
||
264 | mov ecx,eax |
||
265 | mov esi,0xff |
||
266 | shl esi,cl |
||
267 | not esi |
||
268 | shl ebx,cl |
||
269 | and [edx],esi |
||
270 | or [edx],ebx |
||
271 | .okk: |
||
272 | Return ecOK |
||
273 | .nocol: |
||
274 | cmp ch,kwdUC |
||
275 | jne .bad |
||
276 | mov eax,[esp+36] |
||
277 | cmp byte[eax],'\' |
||
278 | je .nobyte |
||
279 | inc dword[esp+36] |
||
280 | .nobyte: |
||
281 | cmp ebx,0x400 |
||
282 | jb .okk |
||
283 | mov eax,ebx |
||
284 | uc2oem |
||
285 | cmp ecx,1 |
||
286 | jae .pchar |
||
287 | lea eax,[ebx-0x410+0xc0] |
||
288 | jmp .pchar |
||
289 | .bad: |
||
290 | mov eax,ecBadTable |
||
291 | Epilog |
||
292 | |||
293 | |||
294 | ; |
||
295 | ; Change to the destination specified by idest. |
||
296 | ; There's usually more to do here than this... |
||
297 | |||
298 | |||
299 | ; in: eax- idest |
||
300 | cmp [rds],rdsSkip |
||
301 | jne .noskip |
||
302 | jmp .okk;Return ecOK |
||
303 | .noskip: |
||
304 | cmp eax,rdsColor |
||
305 | jne .nocol |
||
306 | mov [rds],al |
||
307 | jmp .okk |
||
308 | .nocol: |
||
309 | mov [rds],rdsSkip |
||
310 | .okk: |
||
311 | mov eax,ecOK |
||
312 | .ex: |
||
313 | ret |
||
314 | |||
315 | |||
316 | ; |
||
317 | ; The destination specified by rds is coming to a close. |
||
318 | ; If there's any cleanup that needs to be done, do it now. |
||
319 | ecEndGroupAction: |
||
320 | ; in: eax-rds |
||
321 | mov eax,ecOK |
||
322 | ret |
||
323 | |||
324 | |||
325 | ; |
||
326 | ; Evaluate an RTF control that needs special processing. |
||
327 | |||
328 | |||
329 | ; in: eax-IPFN |
||
330 | cmp [rds],rdsSkip |
||
331 | jne .noskip |
||
332 | cmp eax,ipfnBin |
||
333 | jne .ok |
||
334 | .noskip: |
||
335 | cmp eax,ipfnBin |
||
336 | jne .nobin |
||
337 | mov [ris],risBin |
||
338 | push [lParam] |
||
339 | pop [cbBin] |
||
340 | jmp .ok |
||
341 | .nobin: |
||
342 | cmp eax,ipfnSkipDest |
||
343 | jne .noskd |
||
344 | mov [fSkipDestIfUnk],fTrue |
||
345 | jmp .ok |
||
346 | .noskd: |
||
347 | cmp eax,ipfnHex |
||
348 | jne .nohex |
||
349 | mov [ris],risHex |
||
350 | jmp .ok |
||
351 | .nohex: |
||
352 | Return ecBadTable |
||
353 | .ok: |
||
354 | mov eax,ecOK |
||
355 | .__ex: |
||
356 | ret |
||
357 | |||
358 | |||
359 | rgprop: |
||
360 | ; Property descriptions |
||
361 | ;PROP rgprop [ipropMax] = { |
||
362 | PROP actnByte, propChp, 0 ; ipropBold |
||
363 | PROP actnByte, propChp, 1 ; ipropItalic |
||
364 | PROP actnByte, propChp, 2 ; ipropUnderline |
||
365 | PROP actnWord, propPap, 0 ; ipropLeftInd |
||
366 | PROP actnWord, propPap, 4 ; ipropRightInd |
||
367 | PROP actnWord, propPap, 8 ; ipropFirstInd |
||
368 | PROP actnWord, propSep, 0 ; ipropCols |
||
369 | PROP actnWord, propSep, 5 ; ipropPgnX |
||
370 | PROP actnWord, propSep, 9 ; ipropPgnY |
||
371 | PROP actnWord, propDop, 0 ; ipropXaPage |
||
372 | PROP actnWord, propDop, 4 ; ipropYaPage |
||
373 | PROP actnWord, propDop, 8 ; ipropXaLeft |
||
374 | PROP actnWord, propDop, 12 ; ipropXaRight |
||
375 | PROP actnWord, propDop, 16 ; ipropYaTop |
||
376 | PROP actnWord, propDop, 20 ; ipropYaBottom |
||
377 | PROP actnWord, propDop, 24 ; ipropPgnStart |
||
378 | PROP actnByte, propSep, 4 ; ipropSbk |
||
379 | PROP actnByte, propSep, 13 ; ipropPgnFormat |
||
380 | PROP actnByte, propDop, 28 ; ipropFacingp |
||
381 | PROP actnByte, propDop, 29 ; ipropLandscape |
||
382 | PROP actnByte, propPap, 12 ; ipropJust |
||
383 | PROP actnSpec, propPap, 0 ; ipropPard |
||
384 | PROP actnSpec, propChp, 0 ; ipropPlain |
||
385 | PROP actnSpec, propSep, 0 ; ipropSectd |
||
386 | PROP actnByte, propChp, 3 ; ipropForeColor |
||
387 | PROP actnByte, propChp, 4 ; ipropFont |
||
388 | PROP actnFloatFS,propChp, 5 ; ipropFontSize |
||
389 |