Subversion Repositories Kolibri OS

Rev

Rev 1399 | Rev 1436 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;   RTF READER FOR MENUET v1.
  2. ;   Written in pure assembler by Ivushkin Andrey aka Willow
  3. ;
  4. ;---------------------------------------------------------------------
  5. M64 equ 64*1024
  6. N_A equ 0x412f4e
  7. RTFSIZE equ M64
  8. RTFSTACKSIZE equ M64
  9. BGIFONTSIZE equ 120*1024
  10. ESPSIZE equ M64
  11. LMARGIN equ 20
  12. CHARW equ 6
  13. CHARH equ 11
  14. WINW equ 600
  15. WINH equ 450
  16. WIN_COLOR equ 0x3f0f0f0
  17. DEFCOLOR equ 0x303030
  18. ;RENDER equ PIX
  19. ;RENDER equ BGI
  20. RENDER equ FREE
  21.  
  22. BGIFONT_PATH equ '/sys/fonts/'
  23. FONT_NAME equ 'LITT'
  24. TOP =55
  25. MODE equ RTF
  26. INVALHEX equ 0
  27. RTF_COLORLESS equ 1
  28. RTF_ALIGNLESS equ 2
  29. RTF_NO1STLINE equ 4
  30. RTF_OPENING   equ 8
  31. RTF_HELP     equ 16
  32. RTF_VALID     equ 32
  33. RTF_BLIND     equ 64
  34. RTF_TOEOF     equ 128
  35. RTF_BOTTOM   equ 256
  36. STEPBYSTEP equ 10
  37. DEBUG_BLOCK equ 10
  38. SHOWALIGN equ 10
  39. GUTTER equ 10
  40. BENCH equ 0;1
  41. syms equ 12
  42.  
  43.   use32              ; включить 32-битный режим ассемблера
  44.   org    0x0         ; адресация с нуля
  45.  
  46.   db     'MENUET01'  ; 8-байтный идентификатор MenuetOS
  47.   dd     0x01        ; версия заголовка (всегда 1)
  48.   dd     START       ; адрес первой команды
  49.   dd     I_END0      ; размер программы
  50.   dd     esp_end     ; количество памяти
  51.   dd     sys_mem     ; адрес вершины стэка
  52.   dd     fname_buf   ; адрес буфера для параметров (не используется)
  53.   dd     0x0         ; зарезервировано
  54.  
  55. include '..\..\..\MACROS.INC' ; макросы облегчают жизнь ассемблерщиков!
  56. include '..\..\..\develop\libraries\box_lib\load_lib.mac'
  57. include '..\..\..\develop\libraries\box_lib\asm\trunk\opendial.mac'
  58.  
  59. ;include 'MACROS.INC'
  60. ;include 'load_lib.mac'
  61. ;include 'opendial.mac'
  62.  
  63. include 'debug.inc'
  64.  
  65.         use_OpenDialog
  66. if ~ RENDER eq PIX
  67.   TOP=TOP+4
  68.   include 'bgifont.inc'
  69. end if
  70. include 'rtf_lite.inc'
  71. include 'ascl.inc'
  72. ;---------------------------------------------------------------------
  73. ;---  НАЧАЛО ПРОГРАММЫ  ----------------------------------------------
  74. ;---------------------------------------------------------------------
  75. help_file:
  76. file  'reader.rtf'
  77. help_end:
  78.  
  79. START:
  80.         mcall 68, 11
  81. ;OpenDialog initialisation
  82. init_OpenDialog OpenDialog_data
  83.  
  84.     mov  [pitch],2
  85.   if ~ RENDER eq PIX
  86.     mov  edx,FONT_NAME
  87.     mov  edi,save_limit
  88.     BGIfont_Prepare
  89.   end if
  90.  start2:
  91.     cmp  byte[fname_buf],0
  92.     je   load_file;top_red
  93.     jmp  noactivate
  94.  prep_load:
  95. ;    mcall 18,3,dword[prcinfo+30]
  96.  noactivate:
  97. ;    and  ebp,not RTF_OPENING
  98. ;    and  ebp,not RTF_HELP
  99.  
  100. ;    and  [mode],not RTF_OPENING
  101.     and  [mode],not (RTF_HELP+RTF_OPENING)
  102.     mov  ecx,16
  103.     mov  edi,fileinfo.name
  104.     mov  esi,fname_buf
  105.     rep  movsd
  106.  load_file:
  107.         mov     eax, 70
  108.         and     [fileattr+32], 0
  109.         mov     ebx, attrinfo
  110.         mcall
  111.         mov     ebx, [fileattr+32]
  112.         test    eax, eax
  113.         jz      .sizok
  114.         mov     dword [fileinfo.name], N_A
  115. .sizok:
  116.     and  [wSave],0
  117.     mov  [HClick],-100
  118.     mov  eax,ebx
  119.     and  eax,RTFSIZE-1
  120.     add  eax,I_END
  121.     mov  [tail],eax
  122.     shr  ebx,16
  123. ;    dpd ebx
  124.     mov  [max_block],ebx
  125.     xor  eax,eax
  126.     mov  ecx,256
  127.     mov  edi,fileinfo.name
  128.     repne scasb
  129.     sub  edi,fileinfo.name+1
  130.     mov  [fname_size],edi
  131. top_red:
  132.     mov  [top],TOP
  133. red:                    ; перерисовать окно
  134.  
  135.     call draw_window    ; вызываем процедуру отрисовки окна
  136.  
  137. ;---------------------------------------------------------------------
  138. ;---  ЦИКЛ ОБРАБОТКИ СОБЫТИЙ  ----------------------------------------
  139. ;---------------------------------------------------------------------
  140.  
  141. still:
  142.     mcall 10            ; функция 10 - ждать события
  143.  
  144.     cmp  eax,1          ; перерисовать окно ?
  145.     je   red            ; если да - на метку red
  146.     cmp  eax,3          ; нажата кнопка ?
  147.     je   button         ; если да - на button
  148.  
  149. ;---------------------------------------------------------------------
  150.  
  151.  
  152.   key:                  ; нажата клавиша на клавиатуре
  153.     mcall 2             ; функция 2 - считать код символа (в ah)
  154.     cmp  ah,104         ; HELP
  155.     jne  .nohelp
  156.   .help:
  157.     xor  [mode],RTF_HELP
  158.     test [mode],RTF_HELP
  159.     jz   load_file
  160.     mov  ecx,help_end-help_file
  161.     mov  [block_end],ecx
  162.     add  [block_end],I_END
  163.     mov  [tail],ecx
  164.     add  [tail],I_END
  165.     mov  esi,help_file
  166.     mov  edi,I_END
  167.     rep  movsb
  168. ;    or   [mode],RTF_HELP
  169.     xor  eax,eax
  170.     mov  [max_block],eax
  171.     jmp  top_red
  172.   .nohelp:
  173. ;    test [mode],RTF_HELP
  174. ;    jz   .nohelp2
  175. ;    and  [mode],not RTF_HELP
  176. ;    cmp  dword[fileinfo.name],N_A
  177. ;    je   still
  178. ;    jmp  prep_load
  179.   .nohelp2:
  180.     cmp  ah,114         ; R - redraw
  181.     je   red
  182.     cmp  ah,99          ; C - color
  183.     jne  .nocolor
  184.   .color:
  185.     xor  [mode],RTF_COLORLESS
  186.     jmp  red
  187.   .nocolor:
  188.     cmp  ah,97          ; A - alignment
  189.     jne  .noalign
  190.   .alignment:
  191.     xor  [mode],RTF_ALIGNLESS
  192.     jmp  red
  193.   .noalign:
  194.     cmp  ah,44          ; < - pitch dec
  195.     jne  .nopd
  196.   .decp:
  197.     dec  [pitch]
  198.     jmp  red
  199.   .nopd:
  200.     cmp  ah,46          ; < - pitch inc
  201.     jne  .nopi
  202.   .incp:
  203.     inc  [pitch]
  204.     jmp  red
  205.   .nopi:
  206.     cmp  ah,180         ; Home
  207.     je   top_red
  208.     mov  ebx,dword[prcinfo+46]
  209.     sub  ebx,TOP+15
  210.     cmp  ah,183 ;PgDn
  211.     jne  .nopgdn
  212.     sub  [top],bx
  213.     jmp  red
  214.   .nopgdn:
  215.     cmp  ah,177 ;arrDn
  216.     jne  .noardn
  217.     sub  [top],CHARH
  218.     jmp  red
  219.   .noardn:
  220.     mov  cx,[top]
  221.     cmp  ah,184 ;PgUp
  222.     jne  .nopgup
  223.     add  [top],bx
  224.     cmp  [top],TOP
  225.     jl   red
  226.     mov  [top],TOP
  227.     cmp  cx,[top]
  228.     je   still
  229.     jmp  red
  230.   .nopgup:
  231.     cmp  ah,178 ;arrUp
  232.     jne  .noarup
  233.     add  [top],CHARH
  234.     cmp  [top],TOP
  235.     jl   red
  236.     mov  [top],TOP
  237.     cmp  cx,[top]
  238.     je   still
  239.     jmp  red
  240.   .noarup:
  241.   if  RENDER eq FREE
  242.     cmp  ah,56 ;zoom+
  243.     jne  .noplus
  244.   .zplus:
  245.     fld  [FreeFontscale]
  246.     fmul [Zoomscale]
  247.   .zoom:
  248.     fstp [FreeFontscale]
  249.     jmp  red
  250.   .noplus:
  251.     cmp  ah,54 ;zoom-
  252.     jne  .nominus
  253.   .zminus:
  254.     fld  [FreeFontscale]
  255.     fdiv [Zoomscale]
  256.     jmp  .zoom
  257.   .nominus:
  258.   end if
  259.     cmp  ah,108         ; L - load
  260.     jne  stilld
  261.   .file_open:
  262. ;---------------------------------------------------------------------
  263. ;OpenDialog_start:
  264.         call    get_filter_data
  265. ;       copy_path       open_dialog_name,path,library_path,0
  266.        
  267.         start_OpenDialog        OpenDialog_data
  268.  
  269.         cmp     [OpenDialog_data.status],2 ; OpenDialog does not start
  270.         je      .sysxtree  ;    some kind of alternative, instead OpenDialog
  271.         cmp     [OpenDialog_data.status],1
  272. ;       jne     still ; OpenDialog user say cancel
  273. ;       copy path
  274. ;       call    draw_window
  275.         je      prep_load
  276.        
  277. ;.copy_dir_path:
  278. ;    mov   esi,fname_buf
  279. ;    mov   edi,temp_dir_pach
  280. ;       call  copy_dir_path
  281.        
  282.         jmp     still ; OpenDialog user selected the target file
  283.         ; [OpenDialog_data.openfile_pach] pointer of area the target file  
  284.  
  285. ;---------------------------------------------------------------------  
  286. .sysxtree:
  287.     or   [mode],RTF_OPENING
  288.     opendialog draw_window, prep_load, st_1, fname_buf
  289.   st_1:
  290.     and  [mode],not RTF_OPENING
  291.     jmp  still;red
  292.   stilld:
  293.     jmp  still
  294. ;---------------------------------------------------------------------
  295. get_filter_data:
  296.         mov     edi,[OpenDialog_data.com_area]
  297.         test    edi,edi
  298.         jnz     @f
  299.         add     esp,4
  300.         jmp     still
  301. @@:
  302.         add     edi,4096+4
  303.         mov     esi,Filter
  304.         mov     ecx,[esi]
  305.         inc     ecx
  306.         cld
  307.         rep     movsb
  308.         mov     edi,[OpenDialog_data.com_area]
  309.         mov     [edi+4096],dword 1
  310.         ret
  311. ;---------------------------------------------------------------------
  312.  
  313.   button:
  314.     mcall 17            ; 17 - получить идентификатор нажатой кнопки
  315.     cmp   ah,2
  316.     je    key.help
  317.     cmp   ah,3
  318.     je    key.color
  319.     cmp   ah,4
  320.     je    key.alignment
  321.     cmp   ah,5
  322.     je    key.file_open
  323.     cmp   ah,6
  324.     je    key.incp
  325.     cmp   ah,7
  326.     je    key.decp
  327.   if RENDER eq FREE
  328.     cmp   ah,8
  329.     je    key.zminus
  330.     cmp   ah,9
  331.     je    key.zplus
  332.   end if
  333.     cmp   ah, 1         ; если НЕ нажата кнопка с номером 1,
  334.     jne   .noexit       ;  вернуться
  335.  
  336.   .exit:
  337.     mcall -1            ; иначе конец программы
  338.   .noexit:
  339.     cmp   ah,20
  340.     jne   still
  341.     mcall 37,1
  342.     and   eax,0xffff
  343.     cmp   eax,[HClick]
  344.     je    still
  345.     mov   [HClick],eax
  346.     sub   eax,25
  347.     mul   [HDoc]
  348.     mov   ebx,dword[prcinfo+46]
  349.     sub   ebx,25
  350.     div   ebx
  351.     dpd   eax
  352.     mov   [top],TOP
  353.     sub   [top],ax
  354.     dps   'B'
  355.     jmp   red;still
  356. ;---------------------------------------------------------------------
  357. ;---  ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА  ----------------------------------
  358. ;---------------------------------------------------------------------
  359.  
  360. draw_window:
  361.  
  362.     mcall 12, 1                    ; функция 12: сообщить ОС об отрисовке окна
  363.                                    ; 1 - начинаем рисовать
  364.  
  365.     mcall 0, <10,WINW>, <100,WINH>, WIN_COLOR,0x805080D0, 0x005080D0
  366.     mcall 4, <8,8>, 0x10DDEEFF, title, titlesize-title
  367.     mov  esi,ecx
  368.     mcall 47,0x30000,isymImplemented,<114,8>
  369.     add  edx,36 shl 16
  370.     mcall ,,isymMax
  371.     add  edx,40 shl 16
  372.     mov  esi,0x104e00e7;0x10f27840
  373.     cmp  dword[fileinfo.name],N_A
  374.     jne  .noNA
  375.     mov  esi,0x10ff0000
  376.   .noNA:
  377.     mcall 4,edx,esi,fileinfo.name,[fname_size]
  378.     mov  edi,prcinfo
  379.     mcall 9,edi,-1
  380.     and  [mode],not RTF_TOEOF
  381.     mov  ebx,[edi+42]
  382.     cmp  ebx,[wSave]
  383.     je   .nochg
  384.   .chg:
  385.     mov  [wSave],ebx
  386.     or   [mode],RTF_TOEOF
  387.     and  [HDoc],0
  388.     and  [line_count],0
  389.     mov  [HClick],-100
  390.   .nochg:
  391.  
  392.  
  393. mcall 13,<5,dword[prcinfo+42]>,<21,21>,0x8000459a
  394.  
  395. mcall 8,7*65536+39,23*65536+16,5,0x459a           ;load
  396. mcall 8,46*65536+57,23*65536+16,4,0x459a ;align
  397. mcall 8,103*65536+44,23*65536+16,3,0x459a   ;color
  398. mcall 8,147*65536+37,23*65536+16,2,0x459a        ;help
  399.  
  400. mcall 8,184*65536+44,23*65536+16,7,0x459a ;prev
  401. mcall 8,229*65536+46,23*65536+16,6,0x459a      ;next
  402.  
  403. if RENDER eq FREE
  404. mcall 8,276*65536+44,23*65536+16,9,0x459a ;zoom+
  405. mcall 8,320*65536+44,23*65536+16,8,0x459a ;zoom-
  406. end if
  407.  
  408.  
  409.  
  410.  
  411. ;    sub  ebx,60
  412. ;    shl  ebx,16
  413. ;    mov  bx,12
  414. ;    mov  ecx,5 shl 16+12
  415. ;    mov  esi,0xb810e7
  416. ;    mov  edx,2
  417. ; BTN_SPACE equ 14 shl 16
  418. ;    mcall 8             ;2
  419. ;    sub  ebx,BTN_SPACE
  420. ;    inc  edx
  421. ;    mcall 8,,,,0x459a    ;3
  422. ;    sub  ebx,BTN_SPACE
  423. ;    inc  edx
  424. ;    mcall ,,,,0x107a30  ;4
  425. ;    sub  ebx,BTN_SPACE
  426. ;    inc  edx
  427. ;    mcall ,,,,0xcc0000  ;5
  428. ;    sub  ebx,BTN_SPACE
  429. ;    inc  edx
  430. ;    mcall ,,,,0x575f8c  ;6
  431. ;    sub  ebx,BTN_SPACE
  432. ;    inc  edx
  433. ;    mcall ,,,,0x575f8c  ;7
  434. ;  if RENDER eq FREE
  435. ;    sub  ebx,BTN_SPACE
  436. ;    inc  edx
  437. ;    mcall ,,,,0x6a73d0  ;8
  438. ;    sub  ebx,BTN_SPACE
  439. ;    inc  edx
  440. ;    mcall ,,,,0xd048c8  ;9
  441. ;  end if
  442. ;text
  443. ;    shr  ecx,16
  444. ;    mov  bx,cx
  445. ;    add  ebx,3 shl 16+3
  446.     mcall 4,10*65536+27,0x10ddeeff,btn_text,btn_end-btn_text
  447.  
  448.     sub  dword[prcinfo+42],LMARGIN
  449.     sub  dword[prcinfo+46],CHARH
  450.  if GUTTER eq 1
  451.     mov  ebx,LMARGIN shl 16+20
  452.     mov  ecx,20
  453.     mov  eax,4
  454.     mov  edx,arrow
  455.     mov  esi,1
  456.   .loop1:
  457.     push ecx
  458.     mcall ,,0xff0000
  459.     pop  ecx
  460.     add  ebx,50 shl 16
  461.     loop .loop1
  462.  end if
  463.     mov  ebx,dword[prcinfo+42]
  464.     shl  ebx,16
  465.     add  ebx,2 shl 16+13
  466.     mov  ecx,dword[prcinfo+46]
  467.     add  ecx,40 shl 16-35
  468.     mov  edx,20+1 shl 29
  469.     mcall 8
  470.     mov  ecx,[HClick]
  471.     shl  ecx,16
  472.     add  ecx,6-3 shl 16 + 7
  473.     mcall 13,,,0xe26830
  474.  if MODE eq RTF
  475.     test [mode],RTF_OPENING
  476.     jne  .ex
  477.     and  [mode],not (RTF_BOTTOM);+RTF_TOEOF)
  478.     mov  [colorptr],colortbl
  479.     mov  eax,DEFCOLOR
  480.     mov  edi,colortbl
  481.     mov  ecx,16
  482.     rep  stosd
  483.     xor  eax,eax
  484.     mov  [cGroup],eax
  485.     mov  edi,Chp
  486.     mov  ecx,SIZE_save
  487.     rep  stosb
  488.     mov  ax,[top]
  489.     mov  word[Free+6],10
  490.     mov  word[Free+4],ax
  491.     mov  esi,I_END
  492.     call RtfParse
  493.     dpd  eax
  494.     dps  'Lines='
  495.     mov  eax,[line_count]
  496.     dpd  eax
  497.     newline
  498. ;    movzx  eax,word[Free+4]
  499. ;    dpd  eax
  500.     mov  eax,dword[prcinfo+42]
  501.     mov  edx,WIN_COLOR
  502.     call draw_progress
  503. if BENCH eq 1
  504.     mcall 26,9
  505.     sub  eax,[bench]
  506.     dps  <13,10,'Bench='>
  507.     dpd  eax
  508. end if
  509.  else
  510.     mov  [char],0
  511.     mov  ebx,10 shl 16+TOP
  512.     mov  ecx,16
  513.   .l0:
  514.     push ecx
  515.     mov  ecx,16
  516.   .l1:
  517.     push ecx
  518.   if RENDER eq BGI
  519.     mov  edx,char
  520.     mov  ecx,0x48000000
  521.     mov  esi,1
  522.     BGIfont_Outtext
  523.   else
  524.     mcall 4,,0x10000000,char,1
  525.   end if
  526.     pop  ecx
  527.     inc  [char]
  528.     add  ebx,(CHARW+3) shl 16
  529.     loop .l1
  530.     pop  ecx
  531.     add  ebx,CHARH+2
  532.     and  ebx,0x0000ffff
  533.     add  ebx,10 shl 16
  534.     loop .l0
  535.  end if
  536.  .ex:
  537.     mcall 12, 2                    ; функция 12: сообщить ОС об отрисовке окна
  538.                                    ; 2, закончили рисовать
  539.     ret                            ; выходим из процедуры
  540.  
  541. if GUTTER eq 1
  542.    arrow db 0x19
  543. end if
  544. ;---------------------------------------------------------------------
  545. ;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
  546. ;---------------------------------------------------------------------
  547.  
  548. ; интерфейс программы многоязычный
  549. ;  Вы можете задать язык в MACROS.INC (lang fix язык)
  550.  
  551. title:
  552.   db 'RTF Reader v1.    (     ):'
  553. titlesize:
  554. btn_text:
  555.     db 'Load Aligment Color Help    <      >'
  556. if RENDER eq FREE
  557.     db '    Zoom+ Zoom- '
  558.   end if
  559. btn_end:
  560. ;---------------------------------------------------------------------
  561. OpenDialog_data:
  562. .type                   dd 0
  563. .procinfo               dd procinfo ;+4
  564. .com_area_name          dd communication_area_name ;+8
  565. .com_area               dd 0 ;+12
  566. .opendir_pach           dd temp_dir_pach ;+16
  567. .dir_default_pach       dd communication_area_default_pach ;+20
  568. .start_path             dd open_dialog_path ;+24
  569. .draw_window            dd draw_window ;+28
  570. .status                 dd 0 ;+32
  571. .openfile_pach          dd fname_buf ;+36
  572.  
  573. communication_area_name:
  574.         db 'FFFFFFFF_open_dialog',0
  575. open_dialog_path:
  576.         db '/sys/File Managers/opendial',0
  577. communication_area_default_pach:
  578.         db '/rd/1',0
  579.  
  580. Filter:
  581. dd  Filter.end - Filter
  582. db 'RTF',0
  583. .end:
  584. db 0
  585. ;---------------------------------------------------------------------
  586. attrinfo:
  587.         dd      5
  588.         dd      0
  589.         dd      0
  590.         dd      0
  591.         dd      fileattr
  592.         db      0
  593.         dd      fileinfo.name
  594.  
  595. fileinfo:
  596.   dd 0
  597. .block:
  598.   dd 0
  599.   dd 0
  600. .size  dd 1
  601.   dd I_END
  602. .name:
  603. ;   db '//'
  604. ;  db ' /HD/1/RTF/texts/FASM.TXT',0
  605. ;  db '/HD/1/RTF/TEST2.RTF',0
  606. ;  db '/HD/1/RTF/texts/index_ru.RTF',0
  607. ;  db '/HD/1/RTF/texts/stas.RTF',0
  608. ;  db '/HD/1/RTF/texts/zed.RTF',0
  609. ;  db '/HD/1/RTF/PRACT.RTF',0
  610. ;  db '/HD/1/RTF/SETUP2.RTF',0
  611. ;  db '/HD/1/RTF/texts/TC_RU.RTF',0
  612. ;  db '/HD/1/RTF/texts/WORD.RTF',0
  613. ;  db '/HD/1/RTF/texts/WORD97.RTF',0
  614. ;  db '/HD/1/RTF/texts/MASTAPP.RTF',0
  615. ;  db '/HD/1/RTF/texts/1c_tor77.RTF',0
  616. ;  db '/HD/1/RTF/texts/RELATION.RTF',0
  617. ;  db '/HD/1/RTF/texts/PLANETS.RTF',0
  618. ;  db '/HD/1/RTF/texts/LOTRRUS.RTF',0
  619. ;  db '/HD/1/RTF/texts/RULEBOOK.RTF',0
  620. ;  db '/HD/1/RTF/texts/RULEBK2.RTF',0
  621. ;  db '/HD/1/RTF/texts/GLEB.RTF',0
  622. ;  db '/HD/1/RTF/texts/DWG13_14.RTF',0
  623. ;  db '/HD/1/RTF/texts/LK.RTF',0
  624.  
  625. ;  db '/HD/1/RTF/texts/JUSTIFY.RTF',0
  626.    rb  256-($-.name)
  627. ;---------------------------------------------------------------------
  628. ;blind db ?
  629. if RENDER eq PIX
  630. ;  rd 2
  631.   Free rd 9
  632. else
  633. if RENDER eq BGI
  634.   FreeFontscale dd 0.07
  635. else
  636.   Zoomscale dd 1.15
  637.   FreeFontscale dd 0.04
  638. end if
  639.   Free BGIfree FONT_NAME,0,0,1.0,1.0,char,1,0x44000000,0
  640. end if
  641. I_END0:
  642. fname_buf:
  643.         rb      1024+16
  644. fileattr rd 40/4
  645. if BENCH eq 1
  646.   bench dd ?
  647. end if
  648. tail dd ?
  649. cGroup dd ?
  650. Chp:
  651.   CHP
  652. Pap:
  653.   PAP
  654. Sep:
  655.   SEP
  656. Dop:
  657.   DOP
  658. rds db ?
  659. ris db ?
  660. cbBin dd ?
  661. lParam dd ?
  662. fSkipDestIfUnk db ?
  663. mode dd ?
  664. curheight dw ?
  665. maxheight dw ?
  666. RetroBlock dd ?
  667. RetroSave:
  668.   SAVE
  669. prcinfo rb 1024
  670. RetroPtr dd ?
  671. colorptr dd ?
  672. colortbl rd 16
  673. ct_end:
  674. fname_size dd ?
  675. max_block dd ?
  676. cur_block dd ?
  677. HDoc dd ?
  678. HClick dd ?
  679. top dw ?
  680. line_count dd ?
  681. par_count  dd ?
  682. char db ?
  683. pitch db ?
  684. wSave dd ?
  685. RetroXY dd ?
  686. RetroGroup dd ?
  687.  
  688. save_stack:
  689. rb RTFSTACKSIZE
  690. save_limit:
  691. rb BGIFONTSIZE
  692.  
  693. listptr dd ?
  694. szKeyword rb 31
  695. szParameter rb 21
  696. block_end dd ?
  697. I_END:                             ; метка конца программы
  698.  
  699. procinfo process_information
  700. rb RTFSIZE
  701. esp1:
  702. rb ESPSIZE
  703. sys_mem:
  704. rb ESPSIZE
  705. ;---------------------------------------------------------------------
  706. temp_dir_pach:
  707.         rb 4096
  708. ;---------------------------------------------------------------------
  709. esp_end:
  710.