Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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
  375.