Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | 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 '/rd/1/'
  23. FONT_NAME equ 'LITT'
  24. TOP =35
  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 'lang.inc'
  56. include 'macros.inc' ; ¬ ªà®áë ®¡«¥£ç îâ ¦¨§­ì  áᥬ¡«¥à騪®¢!
  57. include 'debug.inc'
  58. if ~ RENDER eq PIX
  59.   TOP=TOP+4
  60.   include 'bgifont.inc'
  61. end if
  62. include 'rtf_lite.inc'
  63. include 'ascl.inc'
  64. ;---------------------------------------------------------------------
  65. ;---  €—€‹Ž Žƒ€ŒŒ›  ----------------------------------------------
  66. ;---------------------------------------------------------------------
  67. help_file:
  68. file  'reader.rtf'
  69. help_end:
  70.  
  71. START:
  72.     mov  [pitch],2
  73.   if ~ RENDER eq PIX
  74.     mov  edx,FONT_NAME
  75.     mov  edi,save_limit
  76.     BGIfont_Prepare
  77.   end if
  78.  start2:
  79.     cmp  byte[fname_buf],0
  80.     je   load_file;top_red
  81.     jmp  noactivate
  82.  prep_load:
  83. ;    mcall 18,3,dword[prcinfo+30]
  84.  noactivate:
  85. ;    and  ebp,not RTF_OPENING
  86. ;    and  ebp,not RTF_HELP
  87.  
  88. ;    and  [mode],not RTF_OPENING
  89.     and  [mode],not (RTF_HELP+RTF_OPENING)
  90.     mov  ecx,16
  91.     mov  edi,fileinfo.name
  92.     mov  esi,fname_buf
  93.     rep  movsd
  94.  load_file:
  95.     xor  eax,eax
  96.     mov  ebx,fileinfo
  97.     mov  [ebx+4],eax
  98.     inc  eax
  99.     mov  [fileinfo.size],eax
  100.     mcall 58
  101.     dpd  ebx
  102.     and  [wSave],0
  103.     mov  [HClick],-100
  104.  load_help:
  105.     test eax,eax
  106.     jz   .sizok
  107.     cmp  eax,5
  108.     je   .sizok
  109.   .nosizok:
  110.     mov  dword[fileinfo.name],N_A
  111.   .sizok:
  112.     mov  eax,ebx
  113.     and  eax,RTFSIZE-1
  114.     add  eax,I_END
  115.     mov  [tail],eax
  116.     shr  ebx,16
  117. ;    dpd ebx
  118.     mov  [max_block],ebx
  119.     xor  eax,eax
  120.     mov  ecx,256
  121.     mov  edi,fileinfo.name
  122.     repne scasb
  123.     sub  edi,fileinfo.name+1
  124.     mov  [fname_size],edi
  125. top_red:
  126.     mov  [top],TOP
  127. red:                    ; ¯¥à¥à¨á®¢ âì ®ª­®
  128.  
  129.     call draw_window    ; ¢ë§ë¢ ¥¬ ¯à®æ¥¤ãàã ®âà¨á®¢ª¨ ®ª­ 
  130.  
  131. ;---------------------------------------------------------------------
  132. ;---  –ˆŠ‹ Ž€Ž’Šˆ ‘Ž›’ˆ‰  ----------------------------------------
  133. ;---------------------------------------------------------------------
  134.  
  135. still:
  136.     mcall 10            ; äã­ªæ¨ï 10 - ¦¤ âì ᮡëâ¨ï
  137.  
  138.     cmp  eax,1          ; ¯¥à¥à¨á®¢ âì ®ª­® ?
  139.     je   red            ; ¥á«¨ ¤  - ­  ¬¥âªã red
  140.     cmp  eax,3          ; ­ ¦ â  ª­®¯ª  ?
  141.     je   button         ; ¥á«¨ ¤  - ­  button
  142.     cmp  eax,2          ; ­ ¦ â  ª« ¢¨è  ?
  143.     je   key            ; ¥á«¨ ¤  - ­  key
  144.  
  145.     jmp  still          ; ¥á«¨ ¤à㣮¥ ᮡë⨥ - ¢ ­ ç «® 横« 
  146.  
  147.  
  148. ;---------------------------------------------------------------------
  149.  
  150.  
  151.   key:                  ; ­ ¦ â  ª« ¢¨è  ­  ª« ¢¨ âãà¥
  152.     mcall 2             ; äã­ªæ¨ï 2 - áç¨â âì ª®¤ ᨬ¢®«  (¢ ah)
  153.     cmp  ah,104         ; HELP
  154.     jne  .nohelp
  155.   .help:
  156.     xor  [mode],RTF_HELP
  157.     test [mode],RTF_HELP
  158.     jz   load_file
  159.     mov  ecx,help_end-help_file
  160.     mov  [block_end],ecx
  161.     add  [block_end],I_END
  162.     mov  [tail],ecx
  163.     add  [tail],I_END
  164.     mov  esi,help_file
  165.     mov  edi,I_END
  166.     rep  movsb
  167. ;    or   [mode],RTF_HELP
  168.     xor  eax,eax
  169.     mov  [max_block],eax
  170.     jmp  top_red
  171.   .nohelp:
  172. ;    test [mode],RTF_HELP
  173. ;    jz   .nohelp2
  174. ;    and  [mode],not RTF_HELP
  175. ;    cmp  dword[fileinfo.name],N_A
  176. ;    je   still
  177. ;    jmp  prep_load
  178.   .nohelp2:
  179.     cmp  ah,114         ; R - redraw
  180.     je   red
  181.     cmp  ah,99          ; C - color
  182.     jne  .nocolor
  183.   .color:
  184.     xor  [mode],RTF_COLORLESS
  185.     jmp  red
  186.   .nocolor:
  187.     cmp  ah,97          ; A - alignment
  188.     jne  .noalign
  189.   .alignment:
  190.     xor  [mode],RTF_ALIGNLESS
  191.     jmp  red
  192.   .noalign:
  193.     cmp  ah,44          ; < - pitch dec
  194.     jne  .nopd
  195.   .decp:
  196.     dec  [pitch]
  197.     jmp  red
  198.   .nopd:
  199.     cmp  ah,46          ; < - pitch inc
  200.     jne  .nopi
  201.   .incp:
  202.     inc  [pitch]
  203.     jmp  red
  204.   .nopi:
  205.     cmp  ah,180         ; Home
  206.     je   top_red
  207.     mov  ebx,dword[prcinfo+46]
  208.     sub  ebx,TOP+15
  209.     cmp  ah,183 ;PgDn
  210.     jne  .nopgdn
  211.     sub  [top],bx
  212.     jmp  red
  213.   .nopgdn:
  214.     cmp  ah,177 ;arrDn
  215.     jne  .noardn
  216.     sub  [top],CHARH
  217.     jmp  red
  218.   .noardn:
  219.     mov  cx,[top]
  220.     cmp  ah,184 ;PgUp
  221.     jne  .nopgup
  222.     add  [top],bx
  223.     cmp  [top],TOP
  224.     jl   red
  225.     mov  [top],TOP
  226.     cmp  cx,[top]
  227.     je   still
  228.     jmp  red
  229.   .nopgup:
  230.     cmp  ah,178 ;arrUp
  231.     jne  .noarup
  232.     add  [top],CHARH
  233.     cmp  [top],TOP
  234.     jl   red
  235.     mov  [top],TOP
  236.     cmp  cx,[top]
  237.     je   still
  238.     jmp  red
  239.   .noarup:
  240.   if  RENDER eq FREE
  241.     cmp  ah,56 ;zoom+
  242.     jne  .noplus
  243.   .zplus:
  244.     fld  [FreeFontscale]
  245.     fmul [Zoomscale]
  246.   .zoom:
  247.     fstp [FreeFontscale]
  248.     jmp  red
  249.   .noplus:
  250.     cmp  ah,54 ;zoom-
  251.     jne  .nominus
  252.   .zminus:
  253.     fld  [FreeFontscale]
  254.     fdiv [Zoomscale]
  255.     jmp  .zoom
  256.   .nominus:
  257.   end if
  258.     cmp  ah,108         ; L - load
  259.     jne  stilld
  260.   .file_open:
  261.     or   [mode],RTF_OPENING
  262.     opendialog draw_window, prep_load, st_1, fname_buf
  263.   st_1:
  264.     and  [mode],not RTF_OPENING
  265.     jmp  still;red
  266.   stilld:
  267.     jmp  still
  268.  
  269. ;---------------------------------------------------------------------
  270.  
  271.   button:
  272.     mcall 17            ; 17 - ¯®«ãç¨âì ¨¤¥­â¨ä¨ª â®à ­ ¦ â®© ª­®¯ª¨
  273.     cmp   ah,2
  274.     je    key.help
  275.     cmp   ah,3
  276.     je    key.color
  277.     cmp   ah,4
  278.     je    key.alignment
  279.     cmp   ah,5
  280.     je    key.file_open
  281.     cmp   ah,6
  282.     je    key.incp
  283.     cmp   ah,7
  284.     je    key.decp
  285.   if RENDER eq FREE
  286.     cmp   ah,8
  287.     je    key.zminus
  288.     cmp   ah,9
  289.     je    key.zplus
  290.   end if
  291.     cmp   ah, 1         ; ¥á«¨ … ­ ¦ â  ª­®¯ª  á ­®¬¥à®¬ 1,
  292.     jne   .noexit       ;  ¢¥à­ãâìáï
  293.  
  294.   .exit:
  295.     mcall -1            ; ¨­ ç¥ ª®­¥æ ¯à®£à ¬¬ë
  296.   .noexit:
  297.     cmp   ah,20
  298.     jne   still
  299.     mcall 37,1
  300.     and   eax,0xffff
  301.     cmp   eax,[HClick]
  302.     je    still
  303.     mov   [HClick],eax
  304.     sub   eax,25
  305.     mul   [HDoc]
  306.     mov   ebx,dword[prcinfo+46]
  307.     sub   ebx,25
  308.     div   ebx
  309.     dpd   eax
  310.     mov   [top],TOP
  311.     sub   [top],ax
  312.     dps   'B'
  313.     jmp   red;still
  314. ;---------------------------------------------------------------------
  315. ;---  Ž…„…‹…ˆ… ˆ Ž’ˆ‘Ž‚Š€ ŽŠ€  ----------------------------------
  316. ;---------------------------------------------------------------------
  317.  
  318. draw_window:
  319.  
  320.     mcall 12, 1                    ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 
  321.                                    ; 1 - ­ ç¨­ ¥¬ à¨á®¢ âì
  322.     mcall 0, <10,WINW>, <100,WINH>, WIN_COLOR,0x805080D0, 0x005080D0
  323.     mcall 9,procinfo,-1
  324.     mov   eax,[procinfo.x_size]
  325.     cmp   eax,1
  326.     ja    .temp12345
  327.     ret
  328.   .temp12345:
  329.  
  330.     mcall 4, <8,8>, 0x10DDEEFF, header, headersize-header
  331.     mov  esi,ecx
  332.     mcall 47,0x30000,isymImplemented,<114,8>
  333.     add  edx,36 shl 16
  334.     mcall ,,isymMax
  335.     add  edx,40 shl 16
  336.     mov  esi,0x104e00e7;0x10f27840
  337.     cmp  dword[fileinfo.name],N_A
  338.     jne  .noNA
  339.     mov  esi,0x10ff0000
  340.   .noNA:
  341.     mcall 4,edx,esi,fileinfo.name,[fname_size]
  342.     mov  edi,prcinfo
  343.     mcall 9,edi,-1
  344.     and  [mode],not RTF_TOEOF
  345.     mov  ebx,[edi+42]
  346.     cmp  ebx,[wSave]
  347.     je   .nochg
  348.   .chg:
  349.     mov  [wSave],ebx
  350.     or   [mode],RTF_TOEOF
  351.     and  [HDoc],0
  352.     and  [line_count],0
  353.     mov  [HClick],-100
  354.   .nochg:
  355.     sub  ebx,60
  356.     shl  ebx,16
  357.     mov  bx,12
  358.     mov  ecx,5 shl 16+12
  359.     mov  esi,0xb810e7
  360.     mov  edx,2
  361.  BTN_SPACE equ 14 shl 16
  362.     mcall 8             ;2
  363.     sub  ebx,BTN_SPACE
  364.     inc  edx
  365.     mcall 8,,,,0x459a    ;3
  366.     sub  ebx,BTN_SPACE
  367.     inc  edx
  368.     mcall ,,,,0x107a30  ;4
  369.     sub  ebx,BTN_SPACE
  370.     inc  edx
  371.     mcall ,,,,0xcc0000  ;5
  372.     sub  ebx,BTN_SPACE
  373.     inc  edx
  374.     mcall ,,,,0x575f8c  ;6
  375.     sub  ebx,BTN_SPACE
  376.     inc  edx
  377.     mcall ,,,,0x575f8c  ;7
  378.   if RENDER eq FREE
  379.     sub  ebx,BTN_SPACE
  380.     inc  edx
  381.     mcall ,,,,0x6a73d0  ;8
  382.     sub  ebx,BTN_SPACE
  383.     inc  edx
  384.     mcall ,,,,0xd048c8  ;9
  385.   end if
  386.     shr  ecx,16
  387.     mov  bx,cx
  388.     add  ebx,3 shl 16+3
  389.     mcall 4,,0x10ddeeff,btn_text,btn_end-btn_text
  390.     sub  dword[prcinfo+42],LMARGIN
  391.     sub  dword[prcinfo+46],CHARH
  392.  if GUTTER eq 1
  393.     mov  ebx,LMARGIN shl 16+20
  394.     mov  ecx,20
  395.     mov  eax,4
  396.     mov  edx,arrow
  397.     mov  esi,1
  398.   .loop1:
  399.     push ecx
  400.     mcall ,,0xff0000
  401.     pop  ecx
  402.     add  ebx,50 shl 16
  403.     loop .loop1
  404.  end if
  405.     mov  ebx,dword[prcinfo+42]
  406.     shl  ebx,16
  407.     add  ebx,7 shl 16+7
  408.     mov  ecx,dword[prcinfo+46]
  409.     add  ecx,25 shl 16-25
  410.     mov  edx,20+1 shl 29
  411.     mcall 8
  412.     mov  ecx,[HClick]
  413.     shl  ecx,16
  414.     add  ecx,6-3 shl 16
  415.     mcall 13,,,0xe26830
  416.  if MODE eq RTF
  417.     test [mode],RTF_OPENING
  418.     jne  .ex
  419.     and  [mode],not (RTF_BOTTOM);+RTF_TOEOF)
  420.     mov  [colorptr],colortbl
  421.     mov  eax,DEFCOLOR
  422.     mov  edi,colortbl
  423.     mov  ecx,16
  424.     rep  stosd
  425.     xor  eax,eax
  426.     mov  [cGroup],eax
  427.     mov  edi,Chp
  428.     mov  ecx,SIZE_save
  429.     rep  stosb
  430.     mov  ax,[top]
  431.     mov  word[Free+6],10
  432.     mov  word[Free+4],ax
  433.     mov  esi,I_END
  434.     call RtfParse
  435.     dpd  eax
  436.     dps  'Lines='
  437.     mov  eax,[line_count]
  438.     dpd  eax
  439.     newline
  440. ;    movzx  eax,word[Free+4]
  441. ;    dpd  eax
  442.     mov  eax,dword[prcinfo+42]
  443.     mov  edx,WIN_COLOR
  444.     call draw_progress
  445. if BENCH eq 1
  446.     mcall 26,9
  447.     sub  eax,[bench]
  448.     dps  <13,10,'Bench='>
  449.     dpd  eax
  450. end if
  451.  else
  452.     mov  [char],0
  453.     mov  ebx,10 shl 16+TOP
  454.     mov  ecx,16
  455.   .l0:
  456.     push ecx
  457.     mov  ecx,16
  458.   .l1:
  459.     push ecx
  460.   if RENDER eq BGI
  461.     mov  edx,char
  462.     mov  ecx,0x48000000
  463.     mov  esi,1
  464.     BGIfont_Outtext
  465.   else
  466.     mcall 4,,0x10000000,char,1
  467.   end if
  468.     pop  ecx
  469.     inc  [char]
  470.     add  ebx,(CHARW+3) shl 16
  471.     loop .l1
  472.     pop  ecx
  473.     add  ebx,CHARH+2
  474.     and  ebx,0x0000ffff
  475.     add  ebx,10 shl 16
  476.     loop .l0
  477.  end if
  478.  .ex:
  479.     mcall 12, 2                    ; äã­ªæ¨ï 12: á®®¡é¨âì Ž‘ ®¡ ®âà¨á®¢ª¥ ®ª­ 
  480.                                    ; 2, § ª®­ç¨«¨ à¨á®¢ âì
  481.     ret                            ; ¢ë室¨¬ ¨§ ¯à®æ¥¤ãàë
  482.  
  483. if GUTTER eq 1
  484.    arrow db 0x19
  485. end if
  486. ;---------------------------------------------------------------------
  487. ;---  „€›… Žƒ€ŒŒ›  ----------------------------------------------
  488. ;---------------------------------------------------------------------
  489.  
  490. ; ¨­â¥àä¥©á ¯à®£à ¬¬ë ¬­®£®ï§ëç­ë©
  491. ;  ‚ë ¬®¦¥â¥ § ¤ âì ï§ëª ¢ MACROS.INC (lang fix ï§ëª)
  492. procinfo process_information
  493. header:
  494.   db 'RTF READER v1.    (     ):'
  495. headersize:
  496. btn_text:
  497.   if RENDER eq FREE
  498.     db '+ - '
  499.   end if
  500.     db '< > L A C H'
  501. btn_end:
  502.  
  503. fileinfo:
  504.   dd 0
  505. .block:
  506.   dd 0
  507. .size  dd 1
  508.   dd I_END
  509.   dd sys_mem
  510. .name:
  511. ;   db '//'
  512. ;  db ' /HD/1/RTF/texts/FASM.TXT',0
  513. ;  db '/HD/1/RTF/TEST2.RTF',0
  514. ;  db '/HD/1/RTF/texts/index_ru.RTF',0
  515. ;  db '/HD/1/RTF/texts/stas.RTF',0
  516. ;  db '/HD/1/RTF/texts/zed.RTF',0
  517. ;  db '/HD/1/RTF/PRACT.RTF',0
  518. ;  db '/HD/1/RTF/SETUP2.RTF',0
  519. ;  db '/HD/1/RTF/texts/TC_RU.RTF',0
  520. ;  db '/HD/1/RTF/texts/WORD.RTF',0
  521. ;  db '/HD/1/RTF/texts/WORD97.RTF',0
  522. ;  db '/HD/1/RTF/texts/MASTAPP.RTF',0
  523. ;  db '/HD/1/RTF/texts/1c_tor77.RTF',0
  524. ;  db '/HD/1/RTF/texts/RELATION.RTF',0
  525. ;  db '/HD/1/RTF/texts/PLANETS.RTF',0
  526. ;  db '/HD/1/RTF/texts/LOTRRUS.RTF',0
  527.   db '/HD/1/RTF/texts/RULEBOOK.RTF',0
  528. ;  db '/HD/1/RTF/texts/RULEBK2.RTF',0
  529. ;  db '/HD/1/RTF/texts/GLEB.RTF',0
  530. ;  db '/HD/1/RTF/texts/DWG13_14.RTF',0
  531. ;  db '/HD/1/RTF/texts/LK.RTF',0
  532.  
  533. ;  db '/HD/1/RTF/texts/JUSTIFY.RTF',0
  534.    rb  256-($-.name)
  535. ;---------------------------------------------------------------------
  536. ;blind db ?
  537. if RENDER eq PIX
  538. ;  rd 2
  539.   Free rd 9
  540. else
  541. if RENDER eq BGI
  542.   FreeFontscale dd 0.07
  543. else
  544.   Zoomscale dd 1.15
  545.   FreeFontscale dd 0.04
  546. end if
  547.   Free BGIfree FONT_NAME,0,0,1.0,1.0,char,1,0x44000000,0
  548. end if
  549. I_END0:
  550. if BENCH eq 1
  551.   bench dd ?
  552. end if
  553. tail dd ?
  554. cGroup dd ?
  555. Chp:
  556.   CHP
  557. Pap:
  558.   PAP
  559. Sep:
  560.   SEP
  561. Dop:
  562.   DOP
  563. rds db ?
  564. ris db ?
  565. cbBin dd ?
  566. lParam dd ?
  567. fSkipDestIfUnk db ?
  568. mode dd ?
  569. curheight dw ?
  570. maxheight dw ?
  571. RetroBlock dd ?
  572. RetroSave:
  573.   SAVE
  574. prcinfo rb 1024
  575. RetroPtr dd ?
  576. colorptr dd ?
  577. colortbl rd 16
  578. ct_end:
  579. fname_size dd ?
  580. max_block dd ?
  581. cur_block dd ?
  582. HDoc dd ?
  583. HClick dd ?
  584. top dw ?
  585. line_count dd ?
  586. par_count  dd ?
  587. char db ?
  588. pitch db ?
  589. wSave dd ?
  590. RetroXY dd ?
  591. RetroGroup dd ?
  592.  
  593. save_stack:
  594. rb RTFSTACKSIZE
  595. save_limit:
  596. rb BGIFONTSIZE
  597. fname_buf rd 16
  598.  
  599. listptr dd ?
  600. szKeyword rb 31
  601. szParameter rb 21
  602. block_end dd ?
  603. I_END:                             ; ¬¥âª  ª®­æ  ¯à®£à ¬¬ë
  604. rb RTFSIZE
  605. esp1:
  606. rb ESPSIZE
  607. sys_mem:
  608. rb ESPSIZE
  609. esp_end: