Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Regard whitespace Rev 30 → Rev 31

/programs/rtfread/trunk/rtftype.inc
0,0 → 1,374
macro Return _result
{
mov eax,_result
jmp .__ex
}
 
macro Epilog
{
.__ex:
mov [esp+28],eax
popa
ret
}
 
macro isdigit _reg, lbl_fail
{
cmp _reg,'0'
jb lbl_fail
cmp _reg,'9'
ja lbl_fail
}
 
macro islower _reg, lbl_fail
{
cmp _reg,'a'
jb lbl_fail
cmp _reg,'z'
ja lbl_fail
}
 
macro isalpha _reg, lbl_fail
{
local .ok
cmp _reg,'A'
jb lbl_fail
cmp _reg,'Z'
jbe .ok
islower _reg, lbl_fail
.ok:
}
 
macro dump _ptr, _len
{
if DEBUG_BLOCK eq 1
pusha
lea edx,[_ptr]
dps 'Dump at '
dpd edx
newline
mov eax,0x0d0a
xchg eax,[edx+_len]
pusha
call debug_outstr
popa
mov [edx+_len],eax
mcall 10
mcall 2
popa
end if
}
 
macro lods_block
{
local .noeof,.eof,.lod,.nog
.lod:
lodsb
cmp esi,[block_end]
jb .noeof
dump esi-20,20
mov esi,[cur_block]
cmp esi,[max_block]
jae .eof
if DEBUG_BLOCK eq 1
pusha
mcall 4,[Free+4],0xff0000,sym,1
popa
; dps 'Block='
; dpd esi
end if
call read_next_block
; test [mode],RTF_TOEOF
; jz .nog
test [mode],RTF_BLIND
jne .nog
mov eax,dword[prcinfo+42]
mul [cur_block]
div [max_block]
mov edx,0xff0000
call draw_progress
.nog:
dump esi,20
jmp .noeof;lod
.eof:
mov eax,ecOK;ecEndOfFile
jmp .__ex
.noeof:
}
 
macro RetError routine, route
{
call routine
test eax,eax
if route eq
je .getc
else
je route
end if
Return eax
}
 
macro Prcheck _prop
{
local .no
cmp ch, prop#_prop
jne .no
mov esi, _prop
jmp .checked
.no:
}
 
macro MemSet _prop,_struc
{
local .no
cmp al,_prop
jne .no
mov ecx,SIZE_#_struc
mov edi, _struc
jmp .ms
.no:
}
 
macro atoi
{
; in: esi->pasParameter
; out: eax->long
local .nxt
push ebx ecx
xor eax,eax
xor ebx,ebx
movzx ecx,byte[esi]
inc esi
.nxt:
lodsb
sub eax,'0'
imul ebx,10
add ebx,eax
loop .nxt
mov eax,ebx
pop ecx ebx
}
 
macro uc2oem
{
local .ex1
push edi
mov ecx,(oemutbl-uctbl)/2+1
mov edi,uctbl
repne scasw
jne .ex1
sub edi,uctbl
shr edi,1
dec edi
mov al,[oemutbl+edi]
.ex1:
pop edi
}
 
macro ansi2oem
{
local .ex2,.notintbl
push edi ecx
mov ecx,oematbl-ansitbl
mov edi,ansitbl
repne scasb
jne .notintbl
dec edi
mov al,[oematbl-ansitbl+edi]
jmp .ex2
.notintbl:
cmp al,0xc0
jb .ex2
sub al,0x40
cmp al,0xb0
jb .ex2
add al,0x30
.ex2:
pop ecx edi
}
 
draw_progress:
lea ebx,[eax+05 shl 16]
mov ecx,dword[prcinfo+46]
shl ecx,16
add ecx,2+5 shl 16
mcall 13
ret
 
fTrue equ 1
fFalse equ 0
 
macro CHP ; CHaracter Properties
{
db ?;fBold; 0
db ?;fUnderline; 1
db ?;fItalic; 2
db ?;fColor 3
db ?;fFont 4
dd ?;fFontSize 5
}
SIZE_Chp equ 9
 
macro PAP ; PAragraph Properties
{
dd ?;xaLeft; ; left indent in twips 0
dd ?;xaRight; ; right indent in twips 4
dd ?;xaFirst; ; first line indent in twips 8
db ?; just; ; justification 12
}
SIZE_Pap equ 13
 
macro SEP
{
dd ?;cCols; ; number of columns 0
db ?;sbk; ; section break type 4
dd ?;xaPgn; ; x position of page number in twips 5
dd ?;yaPgn; ; y position of page number in twips 9
db ?;pgnFormat; ; how the page number is formatted 13
} ; SEction Properties
SIZE_Sep equ 14
 
macro DOP
{
dd ?;xaPage; ; page width in twips 0
dd ?;yaPage; ; page height in twips 4
dd ?;xaLeft; ; left margin in twips 8
dd ?;yaTop; ; top margin in twips 12
dd ?;xaRight; ; right margin in twips 16
dd ?;yaBottom; ; bottom margin in twips 20
dd ?;pgnStart; ; starting page number in twips 24
db ?;fFacingp; ; facing pages enabled? 28
db ?;fLandscape; ; landscape or portrait?? 29
} ; ; DOcument Properties
SIZE_Dop equ 30
 
justL equ 0
justF equ 1
justR equ 2
justC equ 3
 
sbkNon equ 0
sbkCol equ 1
sbkEvn equ 2
sbkOdd equ 3
sbkPg equ 4
 
pgDec equ 0
pgURom equ 1
pgLRom equ 2
pgULtr equ 3
pgLLtr equ 4
 
rdsNorm equ 0
rdsSkip equ 1 ; Rtf Destination State
rdsColor equ 2
 
risNorm equ 0
risBin equ 1
risHex equ 2 ; Rtf Internal State
 
macro SAVE ; property save macrostructure
{
CHP ;chp; 0
PAP ;pap; 9
SEP ;sep; 22
DOP ;dop; 36
RDS db ?;rds; 66
RIS db ?;ris; 67
}
SIZE_save equ (SIZE_Chp+SIZE_Pap+SIZE_Sep+SIZE_Dop+2)
 
; What types of properties are there?
ipropBold equ 0
ipropItalic equ 1
ipropUnderline equ 2
ipropLeftInd equ 3
ipropRightInd equ 4
ipropFirstInd equ 5
ipropCols equ 6
ipropPgnX equ 7
ipropPgnY equ 8
ipropXaPage equ 9
ipropYaPage equ 10
ipropXaLeft equ 11
ipropXaRight equ 12
ipropYaTop equ 13
ipropYaBottom equ 14
ipropPgnStart equ 15
ipropSbk equ 16
ipropPgnFormat equ 17
ipropFacingp equ 18
ipropLandscape equ 19
ipropJust equ 20
ipropPard equ 21
ipropPlain equ 22
ipropSectd equ 23
ipropForeColor equ 24
ipropFont equ 25
ipropFontSize equ 26
ipropMax equ 27
 
 
actnSpec equ 0
actnByte equ 1
actnWord equ 2
actnFloatFS equ 3
 
propChp equ 0
propPap equ 1
propSep equ 2
propDop equ 3
 
macro PROP _actn,_prop,_offset
{
db _actn; 0 ; size of value
db _prop; 1 ; macrostructure containing value
db _offset; 2 ; offset of value from base of macrostructure
}
PROP_SIZE equ 3
 
ipfnBin equ 0
ipfnHex equ 1
ipfnSkipDest equ 2
 
idestPict equ 0
idestSkip equ 1
idestColor equ 2
 
kwdChar equ 0
kwdDest equ 1
kwdProp equ 2
kwdSpec equ 3
kwdColor equ 4
kwdUC equ 5
 
isymMax =0
isymImplemented=0
macro SYM _szKeyword,_dflt,_fPassDflt,_kwd,_idx,_impl
{
local .r
if _impl eq 1
isymImplemented=isymImplemented+1
end if
dw _dflt; 0 ; default value to use
db _fPassDflt; 2 ; true to use default value from this table
db _kwd; 3 ; base action to take
db _idx; 4 ; index into property table if kwd == kwdProp
; index into destination table if kwd == kwdDest
; character to print if kwd == kwdChar
db .r-$-1 ; 5
db _szKeyword; ; RTF keyword
.r:
isymMax=isymMax+1
}
; RTF parser error codes
 
ecOK equ 0 ; Everything's fine!
ecStackUnderflow equ 1 ; Unmatched '}'
ecStackOverflow equ 2 ; Too many '{' -- memory exhausted
ecUnmatchedBrace equ 3 ; RTF ended during an open group.
ecInvalidHex equ 4 ; invalid hex character found in data
ecBadTable equ 5 ; RTF table (sym or prop) invalid
ecAssertion equ 6 ; Assertion failure
ecEndOfFile equ 7 ; End of file reached while reading RTF
ecOutOfWindow equ 8 ; Decoding interrupted after window edge
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property