Subversion Repositories Kolibri OS

Rev

Rev 1418 | Rev 1437 | 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. ;       copy_path       open_dialog_name,path,library_path,0
  265.        
  266.         start_OpenDialog        OpenDialog_data
  267.  
  268.         cmp     [OpenDialog_data.status],2 ; OpenDialog does not start
  269.         je      .sysxtree  ;    some kind of alternative, instead OpenDialog
  270.         cmp     [OpenDialog_data.status],1
  271.         je      prep_load
  272.         jmp     still
  273. ;---------------------------------------------------------------------  
  274. .sysxtree:
  275.     or   [mode],RTF_OPENING
  276.     opendialog draw_window, prep_load, st_1, fname_buf
  277.   st_1:
  278.     and  [mode],not RTF_OPENING
  279.     jmp  still;red
  280.   stilld:
  281.     jmp  still
  282. ;---------------------------------------------------------------------
  283. get_filter_data:
  284.         mov     edi,[OpenDialog_data.com_area]
  285.         test    edi,edi
  286.         jnz     @f
  287.         add     esp,4
  288.         jmp     still
  289. @@:
  290.         add     edi,4096+4
  291.         mov     esi,Filter
  292.         mov     ecx,[esi]
  293.         inc     ecx
  294.         cld
  295.         rep     movsb
  296.         mov     edi,[OpenDialog_data.com_area]
  297.         mov     [edi+4096],dword 1
  298.         ret
  299. ;---------------------------------------------------------------------
  300.  
  301.   button:
  302.     mcall 17            ; 17 - получить идентификатор нажатой кнопки
  303.     cmp   ah,2
  304.     je    key.help
  305.     cmp   ah,3
  306.     je    key.color
  307.     cmp   ah,4
  308.     je    key.alignment
  309.     cmp   ah,5
  310.     je    key.file_open
  311.     cmp   ah,6
  312.     je    key.incp
  313.     cmp   ah,7
  314.     je    key.decp
  315.   if RENDER eq FREE
  316.     cmp   ah,8
  317.     je    key.zminus
  318.     cmp   ah,9
  319.     je    key.zplus
  320.   end if
  321.     cmp   ah, 1         ; если НЕ нажата кнопка с номером 1,
  322.     jne   .noexit       ;  вернуться
  323.  
  324.   .exit:
  325.     mcall -1            ; иначе конец программы
  326.   .noexit:
  327.     cmp   ah,20
  328.     jne   still
  329.     mcall 37,1
  330.     and   eax,0xffff
  331.     cmp   eax,[HClick]
  332.     je    still
  333.     mov   [HClick],eax
  334.     sub   eax,25
  335.     mul   [HDoc]
  336.     mov   ebx,dword[prcinfo+46]
  337.     sub   ebx,25
  338.     div   ebx
  339.     dpd   eax
  340.     mov   [top],TOP
  341.     sub   [top],ax
  342.     dps   'B'
  343.     jmp   red;still
  344. ;---------------------------------------------------------------------
  345. ;---  ОПРЕДЕЛЕНИЕ И ОТРИСОВКА ОКНА  ----------------------------------
  346. ;---------------------------------------------------------------------
  347.  
  348. draw_window:
  349.  
  350.     mcall 12, 1                    ; функция 12: сообщить ОС об отрисовке окна
  351.                                    ; 1 - начинаем рисовать
  352.  
  353.     mcall 0, <10,WINW>, <100,WINH>, WIN_COLOR,0x805080D0, 0x005080D0
  354.     mcall 4, <8,8>, 0x10DDEEFF, title, titlesize-title
  355.     mov  esi,ecx
  356.     mcall 47,0x30000,isymImplemented,<114,8>
  357.     add  edx,36 shl 16
  358.     mcall ,,isymMax
  359.     add  edx,40 shl 16
  360.     mov  esi,0x104e00e7;0x10f27840
  361.     cmp  dword[fileinfo.name],N_A
  362.     jne  .noNA
  363.     mov  esi,0x10ff0000
  364.   .noNA:
  365.     mcall 4,edx,esi,fileinfo.name,[fname_size]
  366.     mov  edi,prcinfo
  367.     mcall 9,edi,-1
  368.     and  [mode],not RTF_TOEOF
  369.     mov  ebx,[edi+42]
  370.     cmp  ebx,[wSave]
  371.     je   .nochg
  372.   .chg:
  373.     mov  [wSave],ebx
  374.     or   [mode],RTF_TOEOF
  375.     and  [HDoc],0
  376.     and  [line_count],0
  377.     mov  [HClick],-100
  378.   .nochg:
  379.  
  380.  
  381. mcall 13,<5,dword[prcinfo+42]>,<21,21>,0x8000459a
  382.  
  383. mcall 8,7*65536+39,23*65536+16,5,0x459a           ;load
  384. mcall 8,46*65536+57,23*65536+16,4,0x459a ;align
  385. mcall 8,103*65536+44,23*65536+16,3,0x459a   ;color
  386. mcall 8,147*65536+37,23*65536+16,2,0x459a        ;help
  387.  
  388. mcall 8,184*65536+44,23*65536+16,7,0x459a ;prev
  389. mcall 8,229*65536+46,23*65536+16,6,0x459a      ;next
  390.  
  391. if RENDER eq FREE
  392. mcall 8,276*65536+44,23*65536+16,9,0x459a ;zoom+
  393. mcall 8,320*65536+44,23*65536+16,8,0x459a ;zoom-
  394. end if
  395.  
  396.  
  397.  
  398.  
  399. ;    sub  ebx,60
  400. ;    shl  ebx,16
  401. ;    mov  bx,12
  402. ;    mov  ecx,5 shl 16+12
  403. ;    mov  esi,0xb810e7
  404. ;    mov  edx,2
  405. ; BTN_SPACE equ 14 shl 16
  406. ;    mcall 8             ;2
  407. ;    sub  ebx,BTN_SPACE
  408. ;    inc  edx
  409. ;    mcall 8,,,,0x459a    ;3
  410. ;    sub  ebx,BTN_SPACE
  411. ;    inc  edx
  412. ;    mcall ,,,,0x107a30  ;4
  413. ;    sub  ebx,BTN_SPACE
  414. ;    inc  edx
  415. ;    mcall ,,,,0xcc0000  ;5
  416. ;    sub  ebx,BTN_SPACE
  417. ;    inc  edx
  418. ;    mcall ,,,,0x575f8c  ;6
  419. ;    sub  ebx,BTN_SPACE
  420. ;    inc  edx
  421. ;    mcall ,,,,0x575f8c  ;7
  422. ;  if RENDER eq FREE
  423. ;    sub  ebx,BTN_SPACE
  424. ;    inc  edx
  425. ;    mcall ,,,,0x6a73d0  ;8
  426. ;    sub  ebx,BTN_SPACE
  427. ;    inc  edx
  428. ;    mcall ,,,,0xd048c8  ;9
  429. ;  end if
  430. ;text
  431. ;    shr  ecx,16
  432. ;    mov  bx,cx
  433. ;    add  ebx,3 shl 16+3
  434.     mcall 4,10*65536+27,0x10ddeeff,btn_text,btn_end-btn_text
  435.  
  436.     sub  dword[prcinfo+42],LMARGIN
  437.     sub  dword[prcinfo+46],CHARH
  438.  if GUTTER eq 1
  439.     mov  ebx,LMARGIN shl 16+20
  440.     mov  ecx,20
  441.     mov  eax,4
  442.     mov  edx,arrow
  443.     mov  esi,1
  444.   .loop1:
  445.     push ecx
  446.     mcall ,,0xff0000
  447.     pop  ecx
  448.     add  ebx,50 shl 16
  449.     loop .loop1
  450.  end if
  451.     mov  ebx,dword[prcinfo+42]
  452.     shl  ebx,16
  453.     add  ebx,2 shl 16+13
  454.     mov  ecx,dword[prcinfo+46]
  455.     add  ecx,40 shl 16-35
  456.     mov  edx,20+1 shl 29
  457.     mcall 8
  458.     mov  ecx,[HClick]
  459.     shl  ecx,16
  460.     add  ecx,6-3 shl 16 + 7
  461.     mcall 13,,,0xe26830
  462.  if MODE eq RTF
  463.     test [mode],RTF_OPENING
  464.     jne  .ex
  465.     and  [mode],not (RTF_BOTTOM);+RTF_TOEOF)
  466.     mov  [colorptr],colortbl
  467.     mov  eax,DEFCOLOR
  468.     mov  edi,colortbl
  469.     mov  ecx,16
  470.     rep  stosd
  471.     xor  eax,eax
  472.     mov  [cGroup],eax
  473.     mov  edi,Chp
  474.     mov  ecx,SIZE_save
  475.     rep  stosb
  476.     mov  ax,[top]
  477.     mov  word[Free+6],10
  478.     mov  word[Free+4],ax
  479.     mov  esi,I_END
  480.     call RtfParse
  481.     dpd  eax
  482.     dps  'Lines='
  483.     mov  eax,[line_count]
  484.     dpd  eax
  485.     newline
  486. ;    movzx  eax,word[Free+4]
  487. ;    dpd  eax
  488.     mov  eax,dword[prcinfo+42]
  489.     mov  edx,WIN_COLOR
  490.     call draw_progress
  491. if BENCH eq 1
  492.     mcall 26,9
  493.     sub  eax,[bench]
  494.     dps  <13,10,'Bench='>
  495.     dpd  eax
  496. end if
  497.  else
  498.     mov  [char],0
  499.     mov  ebx,10 shl 16+TOP
  500.     mov  ecx,16
  501.   .l0:
  502.     push ecx
  503.     mov  ecx,16
  504.   .l1:
  505.     push ecx
  506.   if RENDER eq BGI
  507.     mov  edx,char
  508.     mov  ecx,0x48000000
  509.     mov  esi,1
  510.     BGIfont_Outtext
  511.   else
  512.     mcall 4,,0x10000000,char,1
  513.   end if
  514.     pop  ecx
  515.     inc  [char]
  516.     add  ebx,(CHARW+3) shl 16
  517.     loop .l1
  518.     pop  ecx
  519.     add  ebx,CHARH+2
  520.     and  ebx,0x0000ffff
  521.     add  ebx,10 shl 16
  522.     loop .l0
  523.  end if
  524.  .ex:
  525.     mcall 12, 2                    ; функция 12: сообщить ОС об отрисовке окна
  526.                                    ; 2, закончили рисовать
  527.     ret                            ; выходим из процедуры
  528.  
  529. if GUTTER eq 1
  530.    arrow db 0x19
  531. end if
  532. ;---------------------------------------------------------------------
  533. ;---  ДАННЫЕ ПРОГРАММЫ  ----------------------------------------------
  534. ;---------------------------------------------------------------------
  535.  
  536. ; интерфейс программы многоязычный
  537. ;  Вы можете задать язык в MACROS.INC (lang fix язык)
  538.  
  539. title:
  540.   db 'RTF Reader v1.    (     ):'
  541. titlesize:
  542. btn_text:
  543.     db 'Load Aligment Color Help    <      >'
  544. if RENDER eq FREE
  545.     db '    Zoom+ Zoom- '
  546.   end if
  547. btn_end:
  548. ;---------------------------------------------------------------------
  549. OpenDialog_data:
  550. .type                   dd 0
  551. .procinfo               dd procinfo ;+4
  552. .com_area_name          dd communication_area_name ;+8
  553. .com_area               dd 0 ;+12
  554. .opendir_pach           dd temp_dir_pach ;+16
  555. .dir_default_pach       dd communication_area_default_pach ;+20
  556. .start_path             dd open_dialog_path ;+24
  557. .draw_window            dd draw_window ;+28
  558. .status                 dd 0 ;+32
  559. .openfile_pach          dd fname_buf ;+36
  560. .filename_area          dd 0    ;+40
  561. .filter_area            dd Filter
  562.  
  563. communication_area_name:
  564.         db 'FFFFFFFF_open_dialog',0
  565. open_dialog_path:
  566.         db '/sys/File Managers/opendial',0
  567. communication_area_default_pach:
  568.         db '/rd/1',0
  569.  
  570. Filter:
  571. dd Filter.end - Filter
  572. .1:
  573. db 'RTF',0
  574. .end:
  575. db 0
  576. ;---------------------------------------------------------------------
  577. attrinfo:
  578.         dd      5
  579.         dd      0
  580.         dd      0
  581.         dd      0
  582.         dd      fileattr
  583.         db      0
  584.         dd      fileinfo.name
  585.  
  586. fileinfo:
  587.   dd 0
  588. .block:
  589.   dd 0
  590.   dd 0
  591. .size  dd 1
  592.   dd I_END
  593. .name:
  594. ;   db '//'
  595. ;  db ' /HD/1/RTF/texts/FASM.TXT',0
  596. ;  db '/HD/1/RTF/TEST2.RTF',0
  597. ;  db '/HD/1/RTF/texts/index_ru.RTF',0
  598. ;  db '/HD/1/RTF/texts/stas.RTF',0
  599. ;  db '/HD/1/RTF/texts/zed.RTF',0
  600. ;  db '/HD/1/RTF/PRACT.RTF',0
  601. ;  db '/HD/1/RTF/SETUP2.RTF',0
  602. ;  db '/HD/1/RTF/texts/TC_RU.RTF',0
  603. ;  db '/HD/1/RTF/texts/WORD.RTF',0
  604. ;  db '/HD/1/RTF/texts/WORD97.RTF',0
  605. ;  db '/HD/1/RTF/texts/MASTAPP.RTF',0
  606. ;  db '/HD/1/RTF/texts/1c_tor77.RTF',0
  607. ;  db '/HD/1/RTF/texts/RELATION.RTF',0
  608. ;  db '/HD/1/RTF/texts/PLANETS.RTF',0
  609. ;  db '/HD/1/RTF/texts/LOTRRUS.RTF',0
  610. ;  db '/HD/1/RTF/texts/RULEBOOK.RTF',0
  611. ;  db '/HD/1/RTF/texts/RULEBK2.RTF',0
  612. ;  db '/HD/1/RTF/texts/GLEB.RTF',0
  613. ;  db '/HD/1/RTF/texts/DWG13_14.RTF',0
  614. ;  db '/HD/1/RTF/texts/LK.RTF',0
  615.  
  616. ;  db '/HD/1/RTF/texts/JUSTIFY.RTF',0
  617.    rb  256-($-.name)
  618. ;---------------------------------------------------------------------
  619. ;blind db ?
  620. if RENDER eq PIX
  621. ;  rd 2
  622.   Free rd 9
  623. else
  624. if RENDER eq BGI
  625.   FreeFontscale dd 0.07
  626. else
  627.   Zoomscale dd 1.15
  628.   FreeFontscale dd 0.04
  629. end if
  630.   Free BGIfree FONT_NAME,0,0,1.0,1.0,char,1,0x44000000,0
  631. end if
  632. I_END0:
  633. fname_buf:
  634.         rb      1024+16
  635. fileattr rd 40/4
  636. if BENCH eq 1
  637.   bench dd ?
  638. end if
  639. tail dd ?
  640. cGroup dd ?
  641. Chp:
  642.   CHP
  643. Pap:
  644.   PAP
  645. Sep:
  646.   SEP
  647. Dop:
  648.   DOP
  649. rds db ?
  650. ris db ?
  651. cbBin dd ?
  652. lParam dd ?
  653. fSkipDestIfUnk db ?
  654. mode dd ?
  655. curheight dw ?
  656. maxheight dw ?
  657. RetroBlock dd ?
  658. RetroSave:
  659.   SAVE
  660. prcinfo rb 1024
  661. RetroPtr dd ?
  662. colorptr dd ?
  663. colortbl rd 16
  664. ct_end:
  665. fname_size dd ?
  666. max_block dd ?
  667. cur_block dd ?
  668. HDoc dd ?
  669. HClick dd ?
  670. top dw ?
  671. line_count dd ?
  672. par_count  dd ?
  673. char db ?
  674. pitch db ?
  675. wSave dd ?
  676. RetroXY dd ?
  677. RetroGroup dd ?
  678.  
  679. save_stack:
  680. rb RTFSTACKSIZE
  681. save_limit:
  682. rb BGIFONTSIZE
  683.  
  684. listptr dd ?
  685. szKeyword rb 31
  686. szParameter rb 21
  687. block_end dd ?
  688. I_END:                             ; метка конца программы
  689.  
  690. procinfo process_information
  691. rb RTFSIZE
  692. esp1:
  693. rb ESPSIZE
  694. sys_mem:
  695. rb ESPSIZE
  696. ;---------------------------------------------------------------------
  697. temp_dir_pach:
  698.         rb 4096
  699. ;---------------------------------------------------------------------
  700. esp_end:
  701.