Subversion Repositories Kolibri OS

Rev

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