Subversion Repositories Kolibri OS

Rev

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

  1. ;   RTF READER FOR KOLIBRI >= 0.7.7.0
  2. ;   Written in pure assembler by Ivushkin Andrey aka Willow
  3. ;   Menu_bar and scroll_bar from box_lib provided by dunkaist
  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 15
  12. CHARW equ 6
  13. CHARH equ 11
  14. WINW  equ 600
  15. WINH  equ 450
  16. WIN_COLOR equ 0x73f0f0f0
  17. DEFCOLOR equ 0x303030
  18. RENDER equ FREE
  19.  
  20. BGIFONT_PATH equ '/sys/fonts/'
  21. FONT_NAME equ 'LITT'
  22. TOP = 45
  23. MODE equ RTF
  24. INVALHEX equ 0
  25. RTF_COLORLESS equ 1
  26. RTF_ALIGNLESS equ 2
  27. RTF_NO1STLINE equ 4
  28. RTF_OPENING   equ 8
  29. RTF_HELP      equ 16
  30. RTF_VALID     equ 32
  31. RTF_BLIND     equ 64
  32. RTF_TOEOF     equ 128
  33. RTF_BOTTOM    equ 256
  34. STEPBYSTEP equ 10
  35. DEBUG_BLOCK equ 10
  36. SHOWALIGN equ 10
  37. GUTTER equ 10
  38. BENCH  equ 0;1
  39. syms equ 12
  40.  
  41. ;-------------------------------
  42.  
  43. SCROLL_WIDTH_SIZE       equ     15
  44. AR_OFFSET               equ     10
  45.  
  46. ;-------------------------------
  47.  
  48.   use32              ; ¢ª«îç¨âì 32-¡¨â­ë© ०¨¬  áᥬ¡«¥à 
  49.   org    0x0         ;  ¤à¥á æ¨ï á ­ã«ï
  50.  
  51.   db     'MENUET01'  ; 8-¡ ©â­ë© ¨¤¥­â¨ä¨ª â®à MenuetOS
  52.   dd     0x01        ; ¢¥àá¨ï § £®«®¢ª  (¢á¥£¤  1)
  53.   dd     START       ;  ¤à¥á ¯¥à¢®© ª®¬ ­¤ë
  54.   dd     I_END0      ; à §¬¥à ¯à®£à ¬¬ë
  55.   dd     esp_end     ; ª®«¨ç¥á⢮ ¯ ¬ïâ¨
  56.   dd     sys_mem     ;  ¤à¥á ¢¥à設ë áâíª 
  57.   dd     fname_buf   ;  ¤à¥á ¡ãä¥à  ¤«ï ¯ à ¬¥â஢
  58.   dd     cur_dir_path ; ¯ãâì ª ¯à®£à ¬¬¥
  59.  
  60. include '../../../config.inc' ;for nightbuild
  61. include '../../../macros.inc' ; ¬ ªà®áë ®¡«¥£ç îâ ¦¨§­ì  áᥬ¡«¥à騪®¢!
  62. include '../../../develop/libraries/box_lib/trunk/box_lib.mac'
  63. include '../../../develop/libraries/box_lib/load_lib.mac'
  64.  
  65. @use_library
  66.  
  67. ; include '../../../debug.inc'
  68.  
  69. TOP=TOP+4
  70. include 'bgifont.inc'
  71. include 'rtf_lite.inc'
  72. ;---------------------------------------------------------------------
  73. ;---  €—€‹Ž Žƒ€ŒŒ›  ----------------------------------------------
  74. ;---------------------------------------------------------------------
  75. START:
  76.         mcall 68, 11
  77.         mcall 40, 0x80000027
  78.  
  79. load_libraries l_libs_start,end_l_libs
  80.  
  81. ;OpenDialog     initialisation
  82.         push    dword OpenDialog_data
  83.         call    [OpenDialog_Init]
  84.  
  85.     mov  [pitch],2
  86.     mov  edx,FONT_NAME
  87.     mov  edi,save_limit
  88.     BGIfont_Prepare
  89.  start2:
  90.     cmp  byte[fname_buf],0
  91.     je   load_file;top_red
  92.     jmp  noactivate
  93.  prep_load:
  94.     mov  [is_scroll_bar_needed],    0
  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.     mov  [scroll_bar_data_vertical.position],0
  134. red:                    ; ¯¥à¥à¨á®¢ âì ®ª­®
  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.     cmp  eax,6
  149.     je   mouse
  150.  
  151. ;---------------------------------------------------------------------
  152.  
  153.  
  154. key:                  ; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
  155.     mcall 2           ; äã­ªæ¨ï 2 - áç¨â âì ª®¤ ᨬ¢®«  (¢ ah)
  156.         ;Leency[
  157.         cmp eax,1
  158.         jne .getkeyi
  159.         mov ah,dh
  160.         jmp .next
  161.  
  162. .getkeyi:
  163.         mov dh,ah
  164.         jmp key
  165.  
  166. .next:  ;]Leency
  167.     cmp  ah,104         ; HELP
  168.     jne  .nohelp
  169.   .help:
  170.     mov  [is_scroll_bar_needed],    0
  171.     xor  [mode],RTF_HELP
  172.     test [mode],RTF_HELP
  173.     jz   load_file
  174.     mov  dword[HDoc],200                        ; it makes the help page not scroll
  175.     mov  ecx,help_end-help_file
  176.     mov  [block_end],ecx
  177.     add  [block_end],I_END
  178.     mov  [tail],ecx
  179.     add  [tail],I_END
  180.     mov  esi,help_file
  181.     mov  edi,I_END
  182.     rep  movsb
  183. ;    or   [mode],RTF_HELP
  184.     xor  eax,eax
  185.     mov  [max_block],eax
  186.     jmp  top_red
  187.   .nohelp:
  188. ;    test [mode],RTF_HELP
  189. ;    jz   .nohelp2
  190. ;    and  [mode],not RTF_HELP
  191. ;    cmp  dword[fileinfo.name],N_A
  192. ;    je   still
  193. ;    jmp  prep_load
  194.   .nohelp2:
  195.     cmp  ah,114         ; R - redraw
  196.     je   red
  197.     cmp  ah,99          ; C - color
  198.     jne  .nocolor
  199.   .color:
  200.     xor  [mode],RTF_COLORLESS
  201.     jmp  red
  202.   .nocolor:
  203.     cmp  ah,97          ; A - alignment
  204.     jne  .noalign
  205.   .alignment:
  206.     xor  [mode],RTF_ALIGNLESS
  207.     jmp  red
  208.   .noalign:
  209.     cmp  ah,44          ; < - pitch dec
  210.     jne  .nopd
  211.   .decp:
  212.     dec  [pitch]
  213.     jmp  red
  214.   .nopd:
  215.     cmp  ah,46          ; < - pitch inc
  216.     jne  .nopi
  217.   .incp:
  218.     inc  [pitch]
  219.     jmp  red
  220.   .nopi:
  221.     cmp  ah,180         ; Home
  222.     je   top_red
  223.    
  224.     cmp  dword[is_scroll_bar_needed], 0
  225.      je  still
  226.    
  227.     mov  ebx,dword[prcinfo+46]
  228.     sub  ebx,TOP+15
  229.     cmp  ah,183 ;PgDn
  230.     jne  .nopgdn
  231. ;    sub  [top],bx
  232.  
  233.     cmp  dword[is_scroll_bar_needed], 0
  234.      je  still
  235.    
  236.     mov  eax, [scroll_bar_data_vertical.position]
  237.     add  eax, AR_OFFSET*7
  238.     mov  ebx, [scroll_bar_data_vertical.max_area]
  239.     sub  ebx, [scroll_bar_data_vertical.cur_area]
  240.     cmp  eax, ebx
  241.     mov  dword[scroll_bar_data_vertical.position], eax
  242.     jl  @f
  243.     mov  dword[scroll_bar_data_vertical.position], ebx
  244.   @@:
  245.     call Set_position
  246.     jmp  red
  247.   .nopgdn:
  248.     cmp  ah,177 ;arrDn
  249.     jne  .noardn
  250. ;    sub  [top],CHARH
  251.  
  252.     cmp  dword[is_scroll_bar_needed], 0
  253.      je  still
  254.    
  255.     mov  eax, [scroll_bar_data_vertical.position]
  256.     add  eax, AR_OFFSET
  257.     mov  ebx, [scroll_bar_data_vertical.max_area]
  258.     sub  ebx, [scroll_bar_data_vertical.cur_area]
  259.     cmp  eax, ebx
  260.     mov  dword[scroll_bar_data_vertical.position], eax
  261.     jl  @f
  262.     mov  dword[scroll_bar_data_vertical.position], ebx
  263.   @@:
  264.     call Set_position
  265.  
  266.     jmp  red
  267.   .noardn:
  268.     mov  cx,[top]
  269.     cmp  ah,184 ;PgUp
  270.     jne  .nopgup
  271. ;    add  [top],bx
  272. ;    cmp  [top],TOP
  273. ;    jl   red
  274. ;    mov  [top],TOP
  275. ;    cmp  cx,[top]
  276. ;    je   still
  277.  
  278.     cmp  dword[is_scroll_bar_needed], 0
  279.      je  still
  280.    
  281.     cmp  dword[scroll_bar_data_vertical.position], AR_OFFSET*7
  282.     sub  dword[scroll_bar_data_vertical.position], AR_OFFSET*7
  283.     jg  @f
  284.     mov  dword[scroll_bar_data_vertical.position], 0
  285.   @@:
  286.     call Set_position
  287.     jmp  red
  288.   .nopgup:
  289.     cmp  ah,178 ;arrUp
  290.     jne  .noarup
  291. ;    add  [top],CHARH
  292.  
  293.     cmp  dword[is_scroll_bar_needed], 0
  294.      je  still
  295.    
  296.     cmp  dword[scroll_bar_data_vertical.position], AR_OFFSET
  297.     sub  dword[scroll_bar_data_vertical.position], AR_OFFSET
  298.     jg  @f
  299.     mov  dword[scroll_bar_data_vertical.position], 0
  300.   @@:
  301.     call Set_position
  302.  
  303. ;    cmp  [top],TOP
  304. ;    jl   red
  305. ;    mov  [top],TOP
  306. ;    cmp  cx,[top]
  307. ;    je   still
  308.     jmp  red
  309.   .noarup:
  310.     cmp  ah,56 ;zoom+
  311.     jne  .noplus
  312.   .zplus:
  313.     fld  [FreeFontscale]
  314.     fmul [Zoomscale]
  315.   .zoom:
  316.     fstp [FreeFontscale]
  317.     jmp  red
  318.   .noplus:
  319.     cmp  ah,54 ;zoom-
  320.     jne  .nominus
  321.   .zminus:
  322.     fld  [FreeFontscale]
  323.     fdiv [Zoomscale]
  324.     jmp  .zoom
  325.   .nominus:
  326.     cmp  ah,0xB5        ; end
  327.     jne  .pre_file_open
  328.   .end:
  329.  
  330.     cmp  dword[is_scroll_bar_needed], 0
  331.      je  still
  332.    
  333.     mov  eax, [scroll_bar_data_vertical.max_area]
  334.     sub  eax, [scroll_bar_data_vertical.cur_area]
  335.     mov  dword[scroll_bar_data_vertical.position], eax
  336.     call Set_position
  337.     jmp  red
  338.   .pre_file_open:
  339.     cmp  ah,108         ; L - load
  340.     jne  still
  341.   .file_open:
  342. ;---------------------------------------------------------------------
  343. ;OpenDialog_start:
  344. ;       copy_path       open_dialog_name,path,library_path,0
  345.        
  346.         push    dword OpenDialog_data
  347.         call    [OpenDialog_Start]
  348.  
  349. ;       cmp     [OpenDialog_data.status],2 ; OpenDialog does not start
  350. ;       je      .sysxtree  ;    some kind of alternative, instead OpenDialog
  351.         cmp     [OpenDialog_data.status],1
  352.         je      prep_load
  353.         jmp     still
  354. ;---------------------------------------------------------------------  
  355. ;.sysxtree:
  356. ;    or   [mode],RTF_OPENING
  357. ;    opendialog draw_window, prep_load, st_1, fname_buf
  358. ;  st_1:
  359. ;    and  [mode],not RTF_OPENING
  360. ;    jmp  still;red
  361. ;  stilld:
  362. ;    jmp  still
  363. ;---------------------------------------------------------------------
  364.  
  365.   button:
  366.     mcall 17            ; 17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  367.  
  368.     cmp   ah, 1         ; ¥á«¨ ­ ¦ â  ª­®¯ª  á ­®¬¥à®¬ 1,
  369.     je    .exit
  370.     jmp still
  371.    
  372.   .exit:
  373.     mcall -1            ; ¨­ ç¥ ª®­¥æ ¯à®£à ¬¬ë
  374.    
  375.  
  376. ;---------------------------------------------------------------------
  377. ;---  MOUSE EVENT PROCESSING  ----------------------------------------
  378. ;---------------------------------------------------------------------    
  379. mouse:
  380.         mcall   37,7
  381.         test    eax,    eax
  382.         je      .menu_bar_1;.mouse
  383.         jmp     still
  384.  
  385.  
  386. .menu_bar_1:
  387.         call    .set_mouse_flag
  388. @@:
  389.         push    dword menu_data_1       ;mouse event for Menu 1
  390.         call    [menu_bar_mouse]
  391.         cmp     [menu_data_1.click],dword 1
  392.         jne     .menu_bar_2
  393.         cmp     [menu_data_1.cursor_out],dword 0
  394.         jne     .analyse_out_menu_1
  395.         jmp     .menu_bar_1
  396. .menu_bar_2:
  397.         push    dword menu_data_2
  398.         call    [menu_bar_mouse]
  399.         cmp     [menu_data_2.click],dword 1
  400.         jne     .menu_bar_3
  401.         cmp     [menu_data_2.cursor_out],dword 0
  402.         jne     .analyse_out_menu_2
  403.         jmp     .menu_bar_1
  404. .menu_bar_3:
  405.         push    dword menu_data_3
  406.         call    [menu_bar_mouse]
  407.         cmp     [menu_data_3.click],dword 1
  408.         jne     .scroll_bar
  409.         cmp     [menu_data_3.cursor_out],dword 0
  410.         jne     .analyse_out_menu_3
  411.         jmp     .menu_bar_1
  412.  
  413. .set_mouse_flag:
  414.         xor     eax,eax
  415.         inc     eax
  416.         mov     [menu_data_1.get_mouse_flag],eax
  417.         mov     [menu_data_2.get_mouse_flag],eax
  418.         mov     [menu_data_3.get_mouse_flag],eax
  419.         ret
  420.  
  421. .analyse_out_menu_1:
  422.         cmp     [menu_data_1.cursor_out],dword 1
  423.         je      key.file_open
  424.         cmp     [menu_data_1.cursor_out],dword 2
  425.         je      button.exit
  426.         jmp     red
  427.  
  428. .analyse_out_menu_2:
  429.         cmp     [menu_data_2.cursor_out],dword 1
  430.         je      key.zplus
  431.         cmp     [menu_data_2.cursor_out],dword 2
  432.         je      key.zminus
  433.         cmp     [menu_data_2.cursor_out],dword 3
  434.         je      key.incp
  435.         cmp     [menu_data_2.cursor_out],dword 4
  436.         je      key.decp
  437.         cmp     [menu_data_2.cursor_out],dword 5
  438.         je      key.alignment
  439.         cmp     [menu_data_2.cursor_out],dword 6
  440.         je      key.color
  441.         jmp     red
  442.  
  443. .analyse_out_menu_3:
  444.         cmp     [menu_data_3.cursor_out],dword 1
  445.         je      key.help
  446.         jmp     red
  447.  
  448. .scroll_bar:
  449.         cmp     dword[is_scroll_bar_needed], 0
  450.         je      still
  451. .vertical:
  452.         mov     eax,[scroll_bar_data_vertical.max_area]
  453.         cmp     eax,[scroll_bar_data_vertical.cur_area]
  454.         jbe     still
  455. ; mouse event for Vertical ScrollBar
  456.  
  457.         push    dword scroll_bar_data_vertical
  458.         call    [scrollbar_ver_mouse]
  459.  
  460.         call    Set_position
  461.        
  462.         mov     eax,scroll_bar_data_vertical.redraw
  463.         xor     ebx,ebx
  464.         cmp     [eax],ebx
  465.         je      @f
  466.         mov     [eax],ebx
  467.         jmp     red
  468. @@:
  469.         cmp     [scroll_bar_data_vertical.delta2],0
  470.         jne     still
  471. .other:
  472.         jmp     still
  473. ;---------------------------------------------------------------------
  474. ;---  Ž…„…‹…ˆ… ˆ Ž’ˆ‘Ž‚Š€ ŽŠ€  ----------------------------------
  475. ;---------------------------------------------------------------------
  476.  
  477. draw_window:
  478.  
  479.     mcall 9, procinfo2, -1
  480.     test [procinfo2.wnd_state], 0x04
  481.     jz   @f
  482.     mcall 0, <10,WINW>, <100,WINH>, WIN_COLOR,0x80000000, window_title
  483.     ret
  484.   @@:
  485.     mov  edx, -1
  486.     mov  esi, -1
  487.    
  488.     mov  eax, [procinfo2.box.width]
  489.     cmp  eax, [window_width]
  490.      je  @f
  491.     mov  [is_scroll_bar_needed],    0
  492.     cmp  eax, 140
  493.      jnl @f
  494.     mov  eax, 140
  495.   @@:
  496.     mov  edx, eax
  497.     mov  [window_width],    eax
  498.  
  499.     mov  eax, [procinfo2.box.height]
  500.     cmp  eax, [window_height]
  501.      je  @f
  502.     mov  [is_scroll_bar_needed],    0
  503.     cmp  eax, 80
  504.      jnl @f
  505.     mov  eax, 80
  506.   @@:
  507.     mov  esi, eax
  508.     mov  [window_height],   eax
  509.  
  510.     mcall 67, -1, -1
  511.  
  512.     mcall 12, 1
  513. ;    mcall 0, <10,WINW>, <100,WINH>, WIN_COLOR,0x805080D0, 0x005080D0
  514. ;    mcall 4, <8,8>, 0x10DDEEFF, title, titlesize-title
  515.     mcall 0, <10,WINW>, <100,WINH>, WIN_COLOR,0x80000000, window_title
  516.  
  517. ;---------------------------------------------
  518.     mcall 9, procinfo2, -1
  519.  
  520.         mcall 48,4
  521.         mov [skin_height], eax
  522.  
  523.         mov  ebx,0*65536-9
  524.     add  ebx, [procinfo2.box.width]
  525.  
  526.         cmp  [is_scroll_bar_needed], 0
  527.         je  @f
  528.           sub ebx, SCROLL_WIDTH_SIZE
  529.           dec ebx
  530.         @@:
  531.        
  532.         mov  ecx, 19*65536-23
  533.     add  ecx, [procinfo2.box.height]
  534.         sub  ecx, [skin_height]
  535.        
  536.         mov  eax, 13
  537.         mov  edx, 0xf0f0f0
  538.         int 0x40
  539. ;---------------------------------------------
  540.     cmp  [is_scroll_bar_needed],    0
  541.      je  @f
  542.     call Set_scroll_position
  543.         xor     eax,eax
  544.         inc     eax
  545.         mov     [scroll_bar_data_vertical.all_redraw],eax
  546. ; draw for Vertical ScrollBar
  547.         push    dword scroll_bar_data_vertical
  548.         call    [scrollbar_ver_draw]
  549. ; reset all_redraw flag
  550.         xor     eax,eax
  551.         mov     [scroll_bar_data_vertical.all_redraw],eax
  552.   @@:
  553. ;---------------------------------------------
  554.         ;po-moumu eto govno mamonta
  555.        
  556.     ;mcall 47,0x30000,isymImplemented,<114,8>, 0x10DDEEFF
  557.     ;add  edx,36 shl 16
  558.     ;mcall ,,isymMax
  559.     add  edx,40 shl 16
  560.     mov  esi,0x104e00e7;0x10f27840
  561.     cmp  dword[fileinfo.name],N_A
  562.     jne  .noNA
  563.     mov  esi,0x10ff0000
  564.   .noNA:
  565. ;    mcall 4,edx,esi,fileinfo.name,[fname_size]
  566.     mcall 9,prcinfo,-1
  567.     and  [mode],not RTF_TOEOF
  568.     mov  ebx,[edi+42]
  569.     cmp  ebx,[wSave]
  570.     je   .nochg
  571.   .chg:
  572.     mov  [wSave],ebx
  573.     or   [mode],RTF_TOEOF
  574.     and  [HDoc],0
  575.     and  [line_count],0
  576. ;    mov  [HClick],-100
  577.   .nochg:
  578.  
  579. ;---------------------------------------------
  580.     call  Set_scroll_position
  581.  
  582. ;---------------------------------------------
  583.     mov ebx, dword[prcinfo+0x3E]
  584.     mcall     38, , 65536*18+18, 0x8b8b89
  585.     inc ebx
  586.     mcall     13, , 65536*0+18, 0xe9e9e2
  587. ;---------------------------------------------
  588. ; draw for Menu 1
  589.         push    dword menu_data_1
  590.         call    [menu_bar_draw]
  591. ; draw for Menu 2
  592.         push    dword menu_data_2
  593.         call    [menu_bar_draw]
  594. ; draw for Menu 3
  595.         push    dword menu_data_3
  596.         call    [menu_bar_draw]        
  597. ;---------------------------------------------
  598.  
  599.     sub  dword[prcinfo+42],2*LMARGIN+SCROLL_WIDTH_SIZE
  600.     sub  dword[prcinfo+46],CHARH+25
  601.    
  602.  if GUTTER eq 1
  603.     mov  ebx,LMARGIN shl 16+20
  604.     mov  ecx,20
  605.     mov  eax,4
  606.     mov  edx,arrow
  607.     mov  esi,1
  608.   .loop1:
  609.     push ecx
  610.     mcall ,,0xff0000
  611.     pop  ecx
  612.     add  ebx,50 shl 16
  613.     loop .loop1
  614.  end if
  615.  if MODE eq RTF
  616.     test [mode],RTF_OPENING
  617.     jne  .ex
  618.     and  [mode],not (RTF_BOTTOM);+RTF_TOEOF)
  619.     mov  [colorptr],colortbl
  620.     mov  eax,DEFCOLOR
  621.     mov  edi,colortbl
  622.     mov  ecx,16
  623.     rep  stosd
  624.     xor  eax,eax
  625.     mov  [cGroup],eax
  626.     mov  edi,Chp
  627.     mov  ecx,SIZE_save
  628.     rep  stosb
  629.     mov  ax,[top]
  630.     mov  word[Free+6],10
  631.     mov  word[Free+4],ax
  632.     mov  esi,I_END
  633.     call RtfParse
  634. ;    dpd  eax
  635. ;    dps  'Lines='
  636.     mov  eax,[line_count]
  637. ;    dpd  eax
  638. ;    newline
  639. ;    movzx  eax,word[Free+4]
  640. ;    dpd  eax
  641.     mov  eax,dword[prcinfo+42]
  642.     mov  edx,WIN_COLOR
  643.     call draw_progress
  644. if BENCH eq 1
  645.     mcall 26,9
  646.     sub  eax,[bench]
  647. ;    dps  <13,10,'Bench='>
  648. ;    dpd  eax
  649. end if
  650.  else
  651.     mov  [char],0
  652.     mov  ebx,10 shl 16+TOP
  653.     mov  ecx,16
  654.   .l0:
  655.     push ecx
  656.     mov  ecx,16
  657.   .l1:
  658.     push ecx
  659.     mcall 4,,0x10000000,char,1
  660.     pop  ecx
  661.     inc  [char]
  662.     add  ebx,(CHARW+3) shl 16
  663.     loop .l1
  664.     pop  ecx
  665.     add  ebx,CHARH+2
  666.     and  ebx,0x0000ffff
  667.     add  ebx,10 shl 16
  668.     loop .l0
  669.  end if
  670.  .ex:
  671. call Set_position
  672. ;---------------------------------------------
  673.     cmp  dword[is_scroll_bar_needed], 0
  674.      je  @f
  675.         xor     eax,eax
  676.         inc     eax
  677.         mov     [scroll_bar_data_vertical.all_redraw],eax
  678. ; draw for Vertical ScrollBar
  679.         push    dword scroll_bar_data_vertical
  680.         call    [scrollbar_ver_draw]
  681. ; reset all_redraw flag
  682.         xor     eax,eax
  683.         mov     [scroll_bar_data_vertical.all_redraw],eax
  684.   @@:
  685. ;---------------------------------------------
  686.     mcall 12, 2
  687.     ret
  688.  
  689. ;---------------------------------------------------------------------
  690. Set_position:
  691.     mov  eax, dword[prcinfo+46]
  692.     cmp  eax, [HDoc]
  693.     mov  dword[is_scroll_bar_needed], 0
  694.      jnl .quit
  695.     mov  dword[is_scroll_bar_needed], 1
  696.  
  697.     mov  eax, [scroll_bar_data_vertical.max_area]
  698.     mul  dword[prcinfo+46]
  699.     div  dword[HDoc]
  700.     cmp  eax, [scroll_bar_data_vertical.max_area]
  701.     mov  dword[scroll_bar_data_vertical.cur_area],eax
  702.      jng @f
  703.     mov  eax, [scroll_bar_data_vertical.max_area]
  704.     mov  dword[scroll_bar_data_vertical.cur_area], eax
  705.   @@:
  706.     mov eax, [HDoc]
  707.     cmp eax, dword[prcinfo+46]
  708.     sub eax, dword[prcinfo+46]
  709.     add eax, 20                    ; height of clear area under text when you are at the end of document
  710.      jg @f
  711.     mov eax, 0
  712.   @@:
  713.     mul [scroll_bar_data_vertical.position]
  714.     mov ebx, [scroll_bar_data_vertical.max_area]
  715.     sub ebx, [scroll_bar_data_vertical.cur_area]
  716.     div ebx
  717.    
  718.     mov dword[top], TOP
  719.     sub dword[top], eax
  720.    
  721.   .quit:
  722.     ret
  723. ;---------------------------------------------------------------------
  724. Set_scroll_position:
  725.     mcall 9, procinfo2, -1
  726.     mov eax, dword[procinfo2+0x3E]
  727.     sub eax, SCROLL_WIDTH_SIZE
  728.     mov word[scroll_bar_data_vertical.start_x], ax
  729.  
  730.     mov eax, dword[procinfo2+0x42]
  731.     sub eax, 17
  732.     mov word[scroll_bar_data_vertical.size_y], ax
  733.    
  734.     ret
  735. ;---------------------------------------------------------------------
  736.  
  737. if GUTTER eq 1
  738.    arrow db 0x19
  739. end if
  740. ;---------------------------------------------------------------------
  741. ;---  „€›… Žƒ€ŒŒ›  ----------------------------------------------
  742. ;---------------------------------------------------------------------
  743.  
  744. ; ¨­â¥àä¥©á ¯à®£à ¬¬ë ¬­®£®ï§ëç­ë©
  745. ;  ‚ë ¬®¦¥â¥ § ¤ âì ï§ëª ¢ MACROS.INC (lang fix ï§ëª)
  746.  
  747. window_title:           db      'RtfRead v1.4',0
  748. is_scroll_bar_needed    dd      0x0
  749. window_width            dd      0x0
  750. window_height           dd      0x0
  751. skin_height             dd      0x0
  752. ;---------------------------------------------------------------------
  753. l_libs_start:
  754.  
  755. library01  l_libs system_dir_ProcLib+9, cur_dir_path, library_path, system_dir_ProcLib, \
  756. err_message_found_lib2, head_f_l, ProcLib_import, err_message_import2, head_f_i
  757.  
  758. library02  l_libs system_dir_Boxlib+9, cur_dir_path, library_path, system_dir_Boxlib, \
  759. err_message_found_lib1, head_f_l, Box_lib_import, err_message_import1, head_f_i
  760.  
  761. end_l_libs:
  762. ;---------------------------------------------------------------------
  763. system_dir_ProcLib      db '/sys/lib/proc_lib.obj',0
  764. system_dir_Boxlib       db '/sys/lib/box_lib.obj',0
  765.  
  766. head_f_i:
  767. head_f_l                db 'error',0
  768.  
  769. err_message_found_lib1  db 'box_lib.obj - Not found!',0
  770. err_message_found_lib2  db 'proc_lib.obj - Not found!',0
  771.  
  772. err_message_import1     db 'box_lib.obj - Wrong import!',0
  773. err_message_import2     db 'proc_lib.obj - Wrong import!',0
  774.  
  775. ;---------------------------------------------------------------------
  776. align 4
  777. ProcLib_import:
  778. OpenDialog_Init         dd aOpenDialog_Init
  779. OpenDialog_Start        dd aOpenDialog_Start
  780. ;OpenDialog__Version    dd aOpenDialog_Version
  781.         dd      0
  782.         dd      0
  783. aOpenDialog_Init        db 'OpenDialog_init',0
  784. aOpenDialog_Start       db 'OpenDialog_start',0
  785. ;aOpenDialog_Version    db 'Version_OpenDialog',0
  786. ;---------------------------------------------------------------------
  787. OpenDialog_data:
  788. .type                   dd 0
  789. .procinfo               dd procinfo ;+4
  790. .com_area_name          dd communication_area_name ;+8
  791. .com_area               dd 0 ;+12
  792. .opendir_pach           dd temp_dir_pach ;+16
  793. .dir_default_pach       dd communication_area_default_pach ;+20
  794. .start_path             dd open_dialog_path ;+24
  795. .draw_window            dd draw_window ;+28
  796. .status                 dd 0 ;+32
  797. .openfile_pach          dd fname_buf ;+36
  798. .filename_area          dd 0    ;+40
  799. .filter_area            dd Filter
  800. .x:
  801. .x_size                 dw 420 ;+48 ; Window X size
  802. .x_start                dw 10 ;+50 ; Window X position
  803. .y:
  804. .y_size                 dw 320 ;+52 ; Window y size
  805. .y_start                dw 10 ;+54 ; Window Y position
  806.  
  807. communication_area_name:
  808.         db 'FFFFFFFF_open_dialog',0
  809. open_dialog_path:
  810. if __nightbuild eq yes
  811.     db '/sys/MANAGERS/opendial',0
  812. else
  813.     db '/sys/File Managers/opendial',0
  814. end if
  815. communication_area_default_pach:
  816.         db '/rd/1',0
  817.  
  818. Filter:
  819. dd Filter.end - Filter
  820. .1:
  821. db 'RTF',0
  822. .end:
  823. db 0
  824. ;---------------------------------------------------------------------
  825. attrinfo:
  826.         dd      5
  827.         dd      0
  828.         dd      0
  829.         dd      0
  830.         dd      fileattr
  831.         db      0
  832.         dd      fileinfo.name
  833.  
  834. fileinfo:
  835.   dd 0
  836. .block:
  837.   dd 0
  838.   dd 0
  839. .size  dd 1
  840.   dd I_END
  841. .name:
  842.  
  843. ;  db '/HD/1/RTF/texts/index_ru.RTF',0
  844.  
  845.    rb  256-($-.name)
  846. ;---------------------------------------------------------------------
  847. align   4
  848. Box_lib_import:
  849.  
  850. menu_bar_draw           dd aMenu_bar_draw
  851. menu_bar_mouse          dd aMenu_bar_mouse
  852.  
  853. scrollbar_ver_draw      dd aScrollbar_ver_draw
  854. scrollbar_ver_mouse     dd aScrollbar_ver_mouse
  855.  
  856.         dd 0
  857.         dd 0
  858.  
  859. aMenu_bar_draw          db 'menu_bar_draw',0
  860. aMenu_bar_mouse         db 'menu_bar_mouse',0
  861. ;aVersion_menu_bar       db 'version_menu_bar',0
  862.  
  863. aScrollbar_ver_draw     db 'scrollbar_v_draw',0
  864. aScrollbar_ver_mouse    db 'scrollbar_v_mouse',0
  865. ;---------------------------------------------------------------------
  866. align   4
  867. menu_data_1:
  868. .type:          dd 0    ;+0
  869. .x:
  870. .size_x         dw 40   ;+4
  871. .start_x        dw 2    ;+6
  872. .y:
  873. .size_y         dw 15   ;+8
  874. .start_y        dw 2    ;+10
  875. .text_pointer:  dd menu_text_area       ;0      ;+12
  876. .pos_pointer:   dd menu_text_area.1     ;0      ;+16
  877. .text_end       dd menu_text_area.end   ;0      ;+20
  878. .mouse_pos      dd 0    ;+24
  879. .mouse_keys     dd 0    ;+28
  880. .x1:
  881. .size_x1        dw 40   ;+32
  882. .start_x1       dw 2    ;+34
  883. .y1:
  884. .size_y1        dw 100  ;+36
  885. .start_y1       dw 18   ;+38
  886. .bckg_col       dd 0xeeeeee     ;+40
  887. .frnt_col       dd 0xff ;+44
  888. .menu_col       dd 0xffffff     ;+48
  889. .select         dd 0    ;+52
  890. .out_select     dd 0    ;+56
  891. .buf_adress     dd 0    ;+60
  892. .procinfo       dd 0    ;+64
  893. .click          dd 0    ;+68
  894. .cursor         dd 0    ;+72
  895. .cursor_old     dd 0    ;+76
  896. .interval       dd 16   ;+80
  897. .cursor_max     dd 0    ;+84
  898. .extended_key   dd 0    ;+88
  899. .menu_sel_col   dd 0x00cc00     ;+92
  900. .bckg_text_col  dd 0    ;+96
  901. .frnt_text_col  dd 0xffffff     ;+100
  902. .mouse_keys_old dd 0    ;+104
  903. .font_height    dd 8    ;+108
  904. .cursor_out     dd 0    ;+112
  905. .get_mouse_flag dd 0    ;+116
  906.  
  907. menu_text_area:
  908.         db 'File',0
  909. .1:
  910.         db 'Open',0
  911.         db 'Exit',0
  912. .end:
  913.         db 0
  914. ;---------------------------------------------------------------------
  915. align   4
  916. menu_data_2:
  917. .type:          dd 0    ;+0
  918. .x:
  919. .size_x         dw 40   ;+4
  920. .start_x        dw 43   ;+6
  921. .y:
  922. .size_y         dw 15   ;+8
  923. .start_y        dw 2    ;+10
  924. .text_pointer:  dd menu_text_area_2     ;0      ;+12
  925. .pos_pointer:   dd menu_text_area_2.1   ;0      ;+16
  926. .text_end       dd menu_text_area_2.end ;0      ;+20
  927. .mouse_pos      dd 0    ;+24
  928. .mouse_keys     dd 0    ;+28
  929. .x1:
  930. .size_x1        dw 50   ;+32
  931. .start_x1       dw 43   ;+34
  932. .y1:
  933. .size_y1        dw 100  ;+36
  934. .start_y1       dw 18   ;+38
  935. .bckg_col       dd 0xeeeeee     ;+40
  936. .frnt_col       dd 0xff ;+44
  937. .menu_col       dd 0xffffff     ;+48
  938. .select         dd 0    ;+52
  939. .out_select     dd 0    ;+56
  940. .buf_adress     dd 0    ;+60
  941. .procinfo       dd 0    ;+64
  942. .click          dd 0    ;+68
  943. .cursor         dd 0    ;+72
  944. .cursor_old     dd 0    ;+76
  945. .interval       dd 16   ;+80
  946. .cursor_max     dd 0    ;+84
  947. .extended_key   dd 0    ;+88
  948. .menu_sel_col   dd 0x00cc00     ;+92
  949. .bckg_text_col  dd 0    ;       +96
  950. .frnt_text_col  dd 0xffffff     ;+100
  951. .mouse_keys_old dd 0    ;+104
  952. .font_height    dd 8    ;+108
  953. .cursor_out     dd 0    ;+112
  954. .get_mouse_flag dd 0    ;+116
  955.  
  956. menu_text_area_2:
  957.         db 'View',0
  958. .1:
  959.         db 'Zoom +',0
  960.         db 'Zoom -',0
  961.         db ' > >',0
  962.         db ' << ',0
  963.         db 'Align',0
  964.         db 'Color',0
  965. .end:
  966.         db 0
  967. ;---------------------------------------------------------------------
  968. align   4
  969. menu_data_3:
  970. .type:          dd 0    ;+0
  971. .x:
  972. .size_x         dw 40   ;+4
  973. .start_x        dw 84   ;+6
  974. .y:
  975. .size_y         dw 15   ;+8
  976. .start_y        dw 2    ;+10
  977. .text_pointer:  dd menu_text_area_3     ;0      ;+12
  978. .pos_pointer:   dd menu_text_area_3.1   ;0      ;+16
  979. .text_end       dd menu_text_area_3.end ;0      ;+20
  980. .mouse_pos      dd 0    ;+24
  981. .mouse_keys     dd 0    ;+28
  982. .x1:
  983. .size_x1        dw 40   ;+32
  984. .start_x1       dw 84   ;+34
  985. .y1:
  986. .size_y1        dw 100  ;+36
  987. .start_y1       dw 18   ;+38
  988. .bckg_col       dd 0xeeeeee     ;+40
  989. .frnt_col       dd 0xff ;+44
  990. .menu_col       dd 0xffffff     ;+48
  991. .select         dd 0    ;+52
  992. .out_select     dd 0    ;+56
  993. .buf_adress     dd 0    ;+60
  994. .procinfo       dd 0    ;+64
  995. .click          dd 0    ;+68
  996. .cursor         dd 0    ;+72
  997. .cursor_old     dd 0    ;+76
  998. .interval       dd 16   ;+80
  999. .cursor_max     dd 0    ;+84
  1000. .extended_key   dd 0    ;+88
  1001. .menu_sel_col   dd 0x00cc00     ;+92
  1002. .bckg_text_col  dd 0    ;       +96
  1003. .frnt_text_col  dd 0xffffff     ;+100
  1004. .mouse_keys_old dd 0    ;+104
  1005. .font_height    dd 8    ;+108
  1006. .cursor_out     dd 0    ;+112
  1007. .get_mouse_flag dd 0    ;+116
  1008.  
  1009. menu_text_area_3:
  1010.         db 'Help',0
  1011. .1:
  1012.         db 'Home',0
  1013. .end:
  1014.         db 0
  1015. ;---------------------------------------------------------------------
  1016. align   4
  1017. scroll_bar_data_vertical:
  1018. .x:
  1019. .size_x         dw SCROLL_WIDTH_SIZE;+0
  1020. .start_x        dw WINW-25  ;+2
  1021. .y:
  1022. .size_y         dw WINH-45  ;+4
  1023. .start_y        dw 19   ;+6
  1024. .btn_high       dd SCROLL_WIDTH_SIZE    ;+8
  1025. .type           dd 0    ;+12
  1026. .max_area       dd 300       ;+16
  1027. .cur_area       dd 50   ;+20
  1028. .position       dd 0    ;+24
  1029. .bckg_col       dd 0xAAAAAA     ;+28
  1030. .frnt_col       dd 0xCCCCCC     ;+32
  1031. .line_col       dd 0    ;+36
  1032. .redraw         dd 0    ;+40
  1033. .delta          dw 0    ;+44
  1034. .delta2         dw 0    ;+46
  1035. .run_x:
  1036. .r_size_x       dw 0    ;+48
  1037. .r_start_x      dw 0    ;+50
  1038. .run_y:
  1039. .r_size_y       dw 0    ;+52
  1040. .r_start_y      dw 0    ;+54
  1041. .m_pos          dd 0    ;+56
  1042. .m_pos_2        dd 0    ;+60
  1043. .m_keys         dd 0    ;+64
  1044. .run_size       dd 0    ;+68
  1045. .position2      dd 0    ;+72
  1046. .work_size      dd 0    ;+76
  1047. .all_redraw     dd 0    ;+80
  1048. .ar_offset      dd AR_OFFSET   ;+84
  1049.  
  1050. ;---------------------------------------------------------------------
  1051. ;blind db ?
  1052.  
  1053.   Zoomscale dd 1.15
  1054.   FreeFontscale dd 0.04
  1055.  
  1056.   Free BGIfree FONT_NAME,0,0,1.0,1.0,char,1,0x44000000,0
  1057.  
  1058.  
  1059. I_END0:
  1060. fname_buf:
  1061.         rb      1024+16
  1062. fileattr rd 40/4
  1063. if BENCH eq 1
  1064.   bench dd ?
  1065. end if
  1066. tail dd ?
  1067. cGroup dd ?
  1068. Chp:
  1069.   CHP
  1070. Pap:
  1071.   PAP
  1072. Sep:
  1073.   SEP
  1074. Dop:
  1075.   DOP
  1076. rds db ?
  1077. ris db ?
  1078. cbBin dd ?
  1079. lParam dd ?
  1080. fSkipDestIfUnk db ?
  1081. mode dd ?
  1082. curheight dw ?
  1083. maxheight dw ?
  1084. RetroBlock dd ?
  1085. RetroSave:
  1086.   SAVE
  1087. prcinfo rb 1024
  1088. RetroPtr dd ?
  1089. colorptr dd ?
  1090. colortbl rd 16
  1091. ct_end:
  1092. fname_size dd ?
  1093. max_block dd ?
  1094. cur_block dd ?
  1095. HDoc dd ?
  1096. ;HClick dd ?
  1097. top dw ?
  1098. line_count dd ?
  1099. par_count  dd ?
  1100. char db ?
  1101. pitch db ?
  1102. wSave dd ?
  1103. RetroXY dd ?
  1104. RetroGroup dd ?
  1105.  
  1106. save_stack:
  1107. rb RTFSTACKSIZE
  1108. save_limit:
  1109. rb BGIFONTSIZE
  1110.  
  1111. listptr dd ?
  1112. szKeyword rb 31
  1113. szParameter rb 21
  1114. block_end dd ?
  1115.  
  1116. help_file:
  1117.     file  'reader.rtf'
  1118. help_end:
  1119.  
  1120. litt_file:
  1121.         file 'litt.chr'
  1122. litt_end:  
  1123.  
  1124. ;---------------------------------------------------------------------
  1125. I_END:                             ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë
  1126. rb RTFSIZE
  1127. esp1:
  1128. rb ESPSIZE
  1129. procinfo process_information
  1130. procinfo2 process_information
  1131. ;---------------------------------------------------------------------
  1132. temp_dir_pach:
  1133.         rb 4096
  1134. cur_dir_path:
  1135.         rb 4096
  1136. library_path:
  1137.         rb 4096
  1138. ;---------------------------------------------------------------------
  1139.     rb ESPSIZE                      ;stack
  1140. esp_end:
  1141. sys_mem:
  1142.