Subversion Repositories Kolibri OS

Rev

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

  1. ; SEE YOU File FAQ.txt and HISTORY. Good Like!
  2. ;;;;;;;;;;;;;;;;;;
  3. include 'editbox.mac'    ;¬ ªà®á ª®â®àë© ¤®«¦¥­ ®¡«¥£ç¨âì ¦¨§­ì :) ᯥ樠«ì­® ¤«ï editbox
  4. ;;;;;;;;;;;;;;;;;;
  5. macro use_edit_box procinfo,scr_h,scr_w
  6. {
  7. edit_box:
  8. ed_width        equ [edi]               ;è¨à¨­  ª®¬¯®­¥­â 
  9. ed_left         equ [edi+4]             ;¯®«®¦¥­¨¥ ¯® ®á¨ å
  10. ed_top          equ [edi+8]             ;¯®«®¦¥­¨¥ ¯® ®á¨ ã
  11. ed_color        equ [edi+12]            ;梥â ä®­  ª®¬¯®­¥­â 
  12. shift_color     equ [edi+16]            ;=0x6a9480
  13. ed_focus_border_color   equ [edi+20]    ;梥â à ¬ª¨ ª®¬¯®­¥­â 
  14. ed_blur_border_color    equ [edi+24]    ;梥⠭¥  ªâ¨¢­®£® ª®¬¯®­¥­â 
  15. ed_text_color   equ [edi+28]            ;梥â ⥪áâ 
  16. ed_max          equ [edi+32]                    ;ª®«-¢® ᨬ¢®«®¢ ª®â®àë¥ ¬®¦­® ¬ ªá¨¬ «ì­® ¢¢¥áâ¨
  17. ed_text         equ [edi+36]                    ;㪠§ â¥«ì ­  ¡ãä¥à
  18. ed_flags        equ [edi+40]            ;ä« £¨
  19. ed_size equ [edi+42]                    ;ª®«-¢® ᨬ¢®«®¢
  20. ed_pos  equ [edi+46]                    ;¯®§¨æ¨ï ªãàá®à 
  21. ed_offset       equ [edi+50]            ;ᬥ饭¨¥
  22. cl_curs_x       equ [edi+54]            ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® å
  23. cl_curs_y       equ [edi+58]            ;¯à¥¤ë¤ã饥 ª®®à¤¨­ â  ªãàá®à  ¯® ã
  24. ed_shift_pos    equ [edi+62]            ;¯®«®¦¥­¨¥ ªãàá®à 
  25. ed_shift_pos_old equ [edi+66]           ;áâ à®¥ ¯®«®¦¥­¨¥ ªãàá®à 
  26. ;==========================================================
  27. ;=== ¯à®æ¥¤ãà  ¯à®à¨á®¢ª¨ =================================
  28. ;==========================================================
  29. .draw:
  30. pusha
  31. ;--- à¨á㥬 à ¬ªã ---
  32.         call    .draw_border            ; ”ã­ªæ¨ï áâ ¡¨«ì­ 
  33. .draw_bg_cursor_text:
  34. ;--- ¨§¬¥­ï¥¬ ᬥ饭¨¥, ¥á«¨ ­ ¤® ---
  35.         call    .check_offset           ;¢ëç¨á«¥­¨¥ ¯®§¨æ¨¨ ªãàá®à  áâ ¡¨«ì­ 
  36. ;--- à¨á㥬 ¢­ãâ७­îî ®¡« áâì ---
  37.         call    .draw_bg                ;­ à¨á®¢ âì ¯àאַ㣮«ì­¨ª à ¡®ç¥© ®¡« áâ¨
  38. ;---- à¨á㥬 ¢ë¤¥«¥­¨¥, ¯® shift ¥á«¨ ¥áâì
  39.         call    .draw_shift
  40. .draw_cursor_text:
  41. ;--- à¨á㥬 ªãàá®à ---
  42.         ;--- ¬®¦¥â ¥£® ­¥ ­ ¤® à¨á®¢ âì ----
  43.         test    word ed_flags,ed_focus
  44.         je     @f
  45.         call    .draw_cursor
  46. @@:
  47.         call    .draw_text
  48. edit_ex
  49. ;==========================================================
  50. ;=== ®¡à ¡®âª  ª« ¢¨ âãàë =================================
  51. ;==========================================================
  52. .key:
  53. pusha
  54.         test    word ed_flags,ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  55.         je      .no_figure
  56. ;à®¢¥àª  ­ ¦ â shift ?
  57.         call    .check_shift
  58. ;----------------------------------------------------------
  59. ;--- ¯à®¢¥à塞, çâ® ­ ¦ â® --------------------------------
  60. ;----------------------------------------------------------
  61. use_key_process  backspase,delete,left,right,home,end,insert
  62. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  63. ;‡ £«ã誠 ­  ®¡à ¡®âªã ª« ¢¨è ¢¢¥àå ¨ ¢­¨§ â.¥. ¯à¨ ®¡­ à㦥­¨¨ íâ¨å ª®¤®¢ ¯à®¨á室¨â ¢ë室 ¨§ ®¡à ¡®â稪 
  64. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;    
  65. use_key_no_process   up,down,esc
  66. ;--- ­ ¦ â  ¤àã£ ï ª« ¢¨è  ---
  67. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  68. ;à®¢¥àª  ãáâ ­®¢«¥­ «¨ ä« £ ¯à¨ ª®â®à®¬ ­ã¦­® ¢ë¢®¤¨âì ⮫쪮 æ¨äàë ¢ ­ã¦­®¬ ¡®ªá¥ ¥á«¨ â ª®©­¥®¡å®¤¨¬®á⨠­¥â ­ã¦­® § ª®¬¥­â¨à®¢ âì ¬ ªà®á
  69. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  70. use_key_figures_only
  71. ;¯à®¢¥àª  ­  shift
  72. @@:     test    word ed_flags,ed_shift_on
  73.         je      @f
  74.         ;‚室­ë¥ ¤ ­­ë¥ edx=ed_size;ecx=ed_pos
  75.         push    eax
  76.         mov     edx,ed_size
  77.         mov     ecx,ed_pos
  78.         pusha
  79. ;clear
  80. ;        mov     ebp,edx ;ed_size
  81. ;        call    .clear_bg
  82.         mov     ebp,ed_color
  83.         mov     ebx,dword       ed_shift_pos
  84.         call    .sh_cl_
  85.  
  86. .sh_nxt:popa
  87.         call    .del_char
  88. ;;;;
  89.         mov     eax,dword ed_shift_pos
  90.         mov     ebx,ed_size
  91.         sub     ebx,eax
  92.         mov     ed_size,ebx
  93.         pop     eax
  94.         ; ¯à®¢¥à塞, ­ å®¤¨âáï «¨ ªãàá®à ¢ ª®­æ¥
  95. @@:     mov     ecx,ed_size
  96.         mov     edx, ed_max
  97.         test    word ed_flags,ed_insert
  98.         jne     @f
  99.         cmp     ecx,edx
  100.         jae     .no_figure
  101. @@:     mov     ebx, ed_pos
  102.         cmp     ebx,edx
  103.         jl      @f ; ¥á«¨ ¬¥­ìè¥ ¨«¨ à ¢­®
  104. .no_figure:
  105. edit_ex
  106. .insert: test   word ed_flags,ed_insert ;not    word ed_insert
  107.          je     .insert_1
  108.          and    word ed_flags,ed_insert_cl
  109.         jmp     .no_figure
  110. .insert_1:
  111.         or      word ed_flags,ed_insert
  112.         jmp     .no_figure
  113. .ins_v:
  114.         dec     dword [ebp+42];ed_size    ;processing is insert
  115.         sub     esi,ecx
  116.         add     esi,ebx
  117.         mov     edi,esi
  118. ;clear
  119. pusha
  120.         mov     edi,ebp
  121.         mov     ebp,ed_pos
  122.         call    .clear_bg
  123. popa
  124.         jmp     .In_k
  125. @@:     ; ᤢ¨£ ¥¬ ᨬ¢®«ë ¯®á«¥ ªãàá®à  ¢¯à ¢®
  126.         mov     ecx,ed_size
  127.         push    edi eax
  128.         mov     ebp,edi
  129.         mov     esi,ed_text     ; “ª § â¥«ì ­  ¡ãä¥à
  130.                                 ;ã¤¥¬ à ¡®â âì á® áâப®©
  131.         add     esi,ecx         ;add ed_size ¤®¡ ¢¨¬ max size
  132.         mov     edi,esi
  133.  
  134.         cmp     ecx,ebx         ;…᫨ ã ­ á ¯®§¨æ¨ï ªãàá®à  = ⥪ã饬ã à §¬¥àã ­ ¯¥ç â ­­ëå ᨬ¢®«®¢ â.¥. ªãàá®à á⮨⠢ ª®­æ¥
  135.         je      .In_k
  136.  
  137.         test    word [ebp+40],ed_insert ;IF insert is enable  â.ª. edi ¨§¬¥­¥­  ¤à¥á㥬 ç¥à¥§ ebp
  138.         jne     .ins_v
  139. ;clear
  140. pusha
  141.         mov     edi,ebp
  142.         mov     ebp,ed_size
  143.         call    .clear_bg
  144. popa
  145.         sub     ecx,ebx         ; ©¤¥¬ ª®«-¢® ᨬ¢®«®¢ ¤«ï ¯¥à¥¤¢¨¦¥­¨ï.
  146.         inc     edi             ;‘¬¥á⨬ ­ è¨ ᨬ¢®«ë ¢ ¯à ¢®
  147.         std
  148.         inc     ecx
  149.    @@:  
  150.         ;--------
  151.         lodsb
  152.         stosb
  153.         ;--------
  154.         loop    @b
  155. .In_k:  cld
  156.         pop eax
  157.         mov al,ah
  158.         stosb
  159.         pop edi
  160. ; ¢áâ ¢«ï¥¬ ª®¤ ª« ¢¨è¨ â㤠, £¤¥ ªãàá®à
  161.         ; 㢥«¨ç¨¢ ¥¬ §­ ç¥­¨¥ à §¬¥à  ¨ ¯®§¨æ¨¨
  162.         inc      dword ed_size
  163.         inc      dword ed_pos
  164.         call    .draw_all2
  165.         jmp     .shift;.draw_cursor_text
  166. .delete:        
  167.         mov     edx,ed_size
  168.         mov     ecx,ed_pos
  169.         cmp     edx,ecx
  170.         jg      .bac_del
  171.         test    word ed_flags,ed_shift_on
  172.         jne     .del_bac
  173. edit_ex
  174. .bac_del:      
  175.         call    .del_char
  176.         jmp     .draw_all
  177.        
  178. ;--- ­ ¦ â  ª« ¢¨è  backspace ---
  179. .backspace:
  180.         ; ¯à®¢¥à塞, ªãàá®à ã «¥¢®£® ªà ï ?
  181.         mov     ecx,ed_pos
  182.         test    ecx,ecx
  183.         jnz     .del_bac
  184.         test    word ed_flags,ed_shift_on
  185.         jne     .bac_del
  186.  
  187. edit_ex
  188. .del_bac:
  189.         mov     edx,ed_size
  190.         cmp     edx,ecx ;if ed_pos=ed_size
  191.         je      @f
  192.         dec     ecx
  193.         call    .del_char
  194. @@:     test    word ed_flags,ed_shift_on
  195.         jne     .bac_del
  196.         dec      dword ed_pos
  197. .draw_all:
  198.         push    .shift;.draw_cursor_text;eax
  199.  
  200.         test    word ed_flags,ed_shift_on
  201.         je      @f
  202.         mov     eax,dword ed_shift_pos
  203.         mov     ebx,ed_size
  204.         sub     ebx,eax
  205.         mov     ed_size,ebx
  206.  
  207.         mov     ebp,ed_color
  208.         call    .clear_cursor
  209.         call    .check_offset
  210.         call    .draw_bg
  211.         ret
  212. @@:     dec      dword ed_size
  213.  
  214. .draw_all2:
  215.         and    word ed_flags,ed_shift_cl
  216.         mov     ebp,ed_color
  217.         call    .clear_cursor
  218.         call    .check_offset
  219.         mov     ebp,ed_size
  220.         call    .clear_bg
  221.         ret
  222. ;--- ­ ¦ â  ª« ¢¨è  left ---
  223. .left:  mov     ebx,ed_pos
  224.         test    ebx,ebx
  225.         jz      .sh_st_of
  226.         or      word ed_flags,ed_left_fl
  227.         call    .sh_first_sh
  228.         dec      dword ed_pos
  229.         call    .sh_enable
  230.         jmp     .draw_cursor_text
  231. ;--- ­ ¦ â  ª« ¢¨è  right ---
  232. .right: mov     ebx,ed_pos
  233.         cmp     ebx,ed_size
  234.         je      .sh_st_of
  235.         and     word ed_flags,ed_right_fl
  236.         call    .sh_first_sh
  237.         inc     dword  ed_pos
  238.         call    .sh_enable
  239.         jmp     .draw_cursor_text
  240. .home:  
  241.         mov     ebx,ed_pos
  242.         test    ebx,ebx
  243.         jz      .sh_st_of
  244.         call    .sh_first_sh
  245.         xor     eax,eax
  246.         mov     ed_pos,eax
  247.         call    .sh_home_end
  248.         jmp     .draw_cursor_text
  249. .end:  
  250.         mov     ebx,ed_pos
  251.         cmp     ebx,dword ed_size
  252.         je      .sh_st_of
  253.         call    .sh_first_sh
  254.         mov     eax,ed_size
  255.         mov     ed_pos,eax
  256.         call    .sh_home_end
  257.         jmp     .draw_cursor_text
  258. ;==========================================================
  259. ;=== ®¡à ¡®âª  ¬ëè¨ =======================================
  260. ;==========================================================
  261. .mouse:
  262. pusha
  263. ;debug
  264. ;----------------------------------------------------------
  265. ;--- ¯®«ãç ¥¬ á®áâ®ï­¨¥ ª­®¯®ª ¬ëè¨ -----------------------
  266. ;----------------------------------------------------------    
  267.         mcall   37,2
  268. ;----------------------------------------------------------
  269. ;--- ¯à®¢¥à塞 á®áâ®ï­¨¥ ----------------------------------
  270. ;----------------------------------------------------------
  271.         test    eax,1              
  272.         jnz     .mouse_left_button
  273.         and     word ed_flags,ed_mouse_on_off
  274.         xor     ebx,ebx
  275.         mov     dword [mouse_flag],ebx
  276. edit_ex
  277. .mouse_left_button:
  278. ;----------------------------------------------------------
  279. ;--- ¡«®ª¨à®¢ª  ®â 䮪ãá¨à®¢ª¨ ¢ ¤àã£¨å ¡®ªá å ¯à¨ ¯®¯ ¤ ­¨¨ ­  ­¨å ªãàá®à 
  280. ;----------------------------------------------------------
  281.         mov     eax,dword [mouse_flag]
  282.         test    eax,eax
  283.         jz      @f
  284.         cmp     eax,edi
  285.         je      @f
  286.         jmp     ._blur
  287. ;----------------------------------------------------------
  288. ;--- ¯®«ãç ¥¬ ª®®à¤¨­ âë ¬ëè¨ ®â­®á¨â¥«ì­® 0 â.¥ ¢á¥© ®¡« á⨠íªà ­ 
  289. ;----------------------------------------------------------
  290. @@:     mcall   37,0
  291. ;----------------------------------------------------------
  292. ;--- € ­¥ 㤥ন¢ ¥¬ «¨ ¬ë ª« ¢¨èã ¬ë誨, ¯¥à¥¬¥é ï ªãàá®à, ¢® ¢á¥ à §­ë¥ áâ®à®­ë?
  293. ;----------------------------------------------------------
  294.         mov     ecx,procinfo
  295.         test    word ed_flags,ed_mouse_on
  296.         jne     .mouse_wigwag
  297. ;----------------------------------------------------------
  298. ;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
  299. ;----------------------------------------------------------
  300.         mov     ebx,dword [ecx+38]
  301.         add     ebx,ed_top
  302. if scr_h eq
  303. else
  304.         add     ebx,scr_h
  305. end if
  306.         cmp     ax,bx
  307.         jl      ._blur;.mouse_end_no_focus
  308.  
  309.         add     ebx,ed_height
  310.         cmp     ax,bx
  311.         jg      ._blur;.mouse_end_no_focus
  312.  
  313.         shr     eax,16
  314.  
  315.         mov     ebx,dword [ecx+34]
  316.         add     ebx,ed_left
  317. if scr_w eq
  318. else
  319.         add     ebx,scr_w
  320. end if
  321.         cmp     ax,bx
  322.         jl      ._blur;.mouse_end_no_focus
  323.  
  324.         add     ebx,ed_width
  325.         cmp     ax,bx
  326.         jg      ._blur;.mouse_end_no_focus
  327. ;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
  328.         push    eax
  329.         mov     ebp,ed_color
  330.         call    .clear_cursor
  331.         pop     eax
  332. ._mvpos:
  333.         mov     ecx,procinfo
  334.         mov     ebx,dword [ecx+34]
  335.         xor     edx,edx
  336.         sub     eax,ed_left
  337.         sub     eax,ebx
  338. if scr_w eq
  339. else
  340.         add     ebx,scr_w
  341.         sub     eax,2
  342. end if
  343.         mov     ebx,6
  344.         div     bx
  345.         add     eax,ed_offset
  346.         cmp     eax,ed_size
  347.         jna     ._mshift
  348.         mov     eax,ed_size
  349. ._mshift:
  350. ;;;;;;;
  351. ;;‘¥ªæ¨ï ®¡à ¡®âª¨ shift ¨ ¢ë¤¥«¥­¨ï ¯® shift
  352. ;;;;;;;
  353.         test    word ed_flags,ed_shift_bac
  354.         je      @f
  355.         mov     ebp,dword       ed_color
  356.         mov     ebx,dword ed_shift_pos
  357.         push    eax
  358.         call    .sh_cl_
  359.         and     word ed_flags,ed_shift_bac_cl
  360.         pop     eax
  361. @@:    
  362.         test    word ed_flags,ed_mouse_on
  363.         jne     @f
  364.        
  365.         mov     dword ed_shift_pos,eax
  366.         or      word  ed_flags,ed_mouse_on
  367.         mov     dword ed_pos,eax
  368.         mov     dword [mouse_flag],edi          ;ãáâ ­®¢¨¬ ¨¤¥­â¨ä¨ª â®à
  369.         bts     word ed_flags,1                 ;ãáâ ­®¢ª  䮪ãá 
  370.         jmp     .m_sh
  371. @@:            
  372.         cmp     eax,dword ed_shift_pos  ;¥á«¨ ¯®§¨æ¨¨ ­¥ ¨§¬¥­¨«¨áì
  373.         je      .mouse_ex
  374.         mov     ed_pos,eax
  375.         mov     ebp,dword shift_color
  376.         mov     ebx,dword ed_shift_pos
  377.         call    .sh_cl_
  378.         or      word ed_flags,ed_mous_adn_b     ;ãáâ ­®¢¨¬ ¡¨â çâ® ¬ë ¢ë¤¥«¨«¨ +shift_on +
  379. .m_sh:  call    .draw_text
  380.         call    .draw_cursor
  381. ;----------------------------------------------------------
  382. ;--- ¯à®æ¥¤ãà  ãáâ ­®¢ª¨ 䮪ãá  ---------------------------
  383. ;----------------------------------------------------------
  384.         jmp     .drc
  385. ._blur:
  386.         test    word ed_flags,ed_always_focus
  387.         jne     .mouse_ex
  388.         btr     word ed_flags,1 ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  389.         jnc     .mouse_ex
  390.  
  391.         mov     ebp,ed_color
  392.         call    .clear_cursor
  393. .drc:   call    .draw_border
  394. .mouse_ex:
  395.  
  396. edit_ex
  397. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  398. ;Ž¡é¨¥ ä㭪樨 ®¡à ¡®âª¨
  399. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  400. use_general_func
  401. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  402. ;”㭪樨 ¤«ï à ¡®âë á key
  403. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  404. use_key_func
  405. ;----------------------------------------------------------
  406. ;--- ¯à®æ¥¤ãà  à §¬ë¢ ­¨ï 䮪ãá  --------------------------
  407. ;----------------------------------------------------------
  408. ;.blur:
  409. ;pusha
  410. ;._blur:
  411.         ;btr     ed_flags,1
  412.         ;jnc     @f
  413.         ;call    .draw_border
  414.         ;call    .clear_cursor
  415. ;@@:
  416. ;edit_ex
  417.  
  418. ;----------------------------------------------------------
  419. ;--- Ž¡à ¡®âª  .mouse_wigwag
  420. ;----------------------------------------------------------
  421. .mouse_wigwag:
  422.         shr     eax,16
  423.         or      word ed_flags,ed_shift_bac+ed_shift_on+ed_shift
  424. ;;;;;;;;;;;;;;;;;;
  425. ;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ª®£¤  ¯à®¨á室¨â ¢ë室 §  ¯à¥¤¥«ë editbox
  426. ;;;;;;;;;;;;;;;;;;
  427.         mov     ecx,procinfo
  428.         mov     ebx,dword [ecx+34]
  429.         add     ebx,ed_left
  430. if scr_w eq
  431. else
  432.         add     ebx,scr_w
  433. end if
  434.         cmp     eax,ebx
  435.         jb      .mleft
  436.  
  437.         add     ebx,ed_width
  438.         cmp     eax,ebx
  439.         ja      .mright
  440.  
  441.         sub     ebx,ed_width
  442.  
  443.         xor     edx,edx
  444.         sub     eax,ebx ; ¢ëç⨬ ¨§ ª®®à¤¨­ â ¬ë誨 ¯® ®á¨ å ª®®à¤¨­ âë ¤® editbox ¯® ®á¨ å
  445.         mov     ebx,6
  446.         div     ebx
  447. ;;;;;;;;;;;;;;;;;;
  448. ;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ¢ ¯à¥¤¥« å ®¡« á⨠editbox
  449. ;;;;;;;;;;;;;;;;;;
  450. ;®«ã稫¨ ª®®à¤¨­ âë ¢ eax ¬ë誨, â.¥. ªã¤  ®­  ¯¥à¥¬¥á⨫ áì
  451. ;¨á®¢ ­¨¥ § ªà è¥­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ®ç¨á⪠ ¨å
  452.         add     eax,ed_offset   ;¤®¡ ¢¨¬ ᬥ饭¨¥
  453.         cmp     eax,dword ed_size       ;¥á«¨ ¢ë諨 §  ¯à¥¤¥«ë, â® ­¨ç¥£® ­¥ ¤¥« âì
  454.         ja      .mwigvag
  455. .mdraw:
  456.         mov     dword   ed_pos,eax ;á®åà ­¨¬ ­®¢®¥ §­ ç¥­¨¥
  457. ;¨á®¢ ­¨¥ § ªà è¥­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ®ç¨á⪠ ¨å
  458.         mov     ecx,dword       ed_shift_pos
  459.         mov     ebx,dword       ed_shift_pos_old
  460.         mov     dword   ed_shift_pos_old,eax    ;¢­¥á¥¬ ­®¢®¥ §­ ç¥­¨¥ áâ à®© ¯®§¨æ¨¨ ªãàá®à 
  461. ;¯à®¢¥àª  ¨ à¨á®¢ ­¨¥ § ªà è¥­ëå ®¡« á⥩
  462.         cmp     ecx,ebx         ;¢ëïá­ï¥¬ ªã¤  ¡ë«® ¤¢¨¦¥­¨¥ ­  ®¤¨­ è £ ­ § ¤
  463.         je      .m1_shem        ;¤¢¨¦¥­¨ï ­¥ ¡ë«® à ­¥¥
  464.         jb      .msmaller       ;¤¢¨¦¥­¨¥ ¡ë«® ->
  465.         cmp     ebx,eax         ;¤¢¨¦¥­¨¥ ¡ë«® ¤® í⮣® <- ¨ âãâ ¬ë ¯à®¢¥à塞 ᥩç á ªã¤  ¤¢¨¦¥­¨¥ ¯à®¨á室¨â
  466.         ja      .m1_shem        ;¥á«¨ ¡ë«® ¤¢¨¦¥­¨¥ <- â® ­ã¦­® § ªà á¨âì ®¡« áâì
  467.         je      .mwigvag        ;¥á«¨ ¨§¬¥­¥­¨ï ­¥ ¡ë«®, â® ­¨ç¥£® ­¥ ¤¥« âì
  468.         mov     ebp,ed_color    ;âã⠭㦭® ®ç¨áâ¨âì ®¡« áâì c ed_pos ed_shift_pos_old
  469. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  470.         call    .sh_cl_
  471.         jmp     .mwigvag
  472. .msmaller:
  473.         cmp     ebx,eax
  474.         jb      .m1_shem
  475.         mov     ebp,ed_color
  476. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  477.         call    .sh_cl_
  478.         jmp     .mwigvag
  479. ;alike  =
  480. .m1_shem:
  481.         mov     ebp,shift_color
  482. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  483.         mov     ebx,ecx
  484.         call    .sh_cl_
  485.         jmp     .mwigvag
  486. .mwigvag:
  487.         and     word ed_flags,ed_shift_mcl
  488.         jmp     .draw_cursor_text
  489. ;       popa
  490. ;       ret
  491. .mleft:
  492.         mov     eax,ed_pos
  493.         cmp     eax,0                                        
  494.         jbe      .mwigvag
  495.         dec     eax
  496.         call    .check_offset
  497.         push    eax
  498.         mov     ebx,ed_shift_pos
  499.         mov     ebp,shift_color
  500.         call    .sh_cl_
  501.         pop     eax
  502.         jmp     .mdraw
  503. .mright:
  504.         mov     eax,ed_pos
  505.         mov     ebx,ed_size
  506.         cmp     eax,ebx
  507.         jae     .mwigvag
  508.         inc     eax
  509.         call    .check_offset
  510.         mov     ebx,ed_shift_pos
  511.         mov     ebp,shift_color
  512.         push    eax
  513.         call    .sh_cl_
  514.         pop     eax
  515.         jmp     .mdraw  
  516.  
  517. }
  518. ed_figure_only= 1000000000000000b   ;®¤­¨ ᨬ¢®«ë
  519. ed_always_focus= 100000000000000b
  520. ed_focus=                     10b   ;䮪ãá ¯à¨«®¦¥­¨ï
  521. ed_shift_on=                1000b   ;¥á«¨ ­¥ ãáâ ­®¢«¥­ -§­ ç¨â ¢¯¥à¢ë¥ ­ ¦ â shift,¥á«¨ ¡ë« ãáâ ­®¢«¥­, §­ ç¨â ¬ë 㦥 çâ® - â® ¤¥« «¨ 㤥ন¢ ï shift
  522. ed_shift_on_off=1111111111110111b
  523. ed_shift=                    100b   ;¢ª«îç ¥âáï ¯à¨ ­ ¦ â¨¨ ­  shift â.¥. ¥á«¨ ­ ¦¨¬ î
  524. ed_shift_off=   1111111111111011b
  525. ed_shift_bac=              10000b   ;¡¨â ¤«ï ®ç¨á⪨ ¢ë¤¥«¥­®£® shift â.¥. ¯à¨ ãáâ ­®¢ª¥ £®¢®à¨â çâ® ¥áâì ¢ë¤¥«¥­¨¥
  526. ed_shift_bac_cl=1111111111101111b   ;®ç¨á⪠ ¯à¨ 㤠«¥­¨¨ ¢ë¤¥«¥­¨ï
  527. ed_shift_cl=    1111111111100011b
  528. ed_shift_mcl=   1111111111111011b
  529. ed_left_fl=               100000b
  530. ed_right_fl=    1111111111011111b
  531. ed_offset_fl=            1000000b
  532. ed_offset_cl=   1111111110111111b
  533. ed_insert=              10000000b
  534. ed_insert_cl=   1111111101111111b
  535. ed_mouse_on =          100000000b
  536. ed_mous_adn_b=         100011000b
  537. ed_mouse_on_off=1111111011111111b
  538. ed_height=14 ; ¢ëá®â 
  539. macro draw_edit_boxes start,_end,use_f9,procinfo
  540. {
  541. if use_f9 eq
  542. else
  543.         mcall   9,procinfo,-1
  544. end if
  545.         mov     edi,start
  546.         mov     ecx,((_end-start)/ed_struc_size)
  547. @@:
  548.         call    edit_box.draw
  549.         add     edi,ed_struc_size
  550.         loop    @b
  551. }
  552.  
  553. macro mouse_edit_boxes start,_end
  554. {
  555.         mov     edi,start
  556.         mov     ecx,((_end-start)/ed_struc_size)
  557. @@:
  558.         call    edit_box.mouse
  559.         add     edi,ed_struc_size
  560.         loop    @b
  561. }
  562.  
  563. macro key_edit_boxes start,end
  564. {
  565.         mov     edi,start
  566.         mov     ecx,((end-start)/ed_struc_size)
  567. @@:
  568.         call    edit_box.key
  569.         add     edi,ed_struc_size
  570.         loop    @b
  571. }
  572. ed_struc_size=70
  573. struc  edit_box width,left,top,color,shift_color,focus_border_color,\
  574.        blur_border_color,text_color,max,text,flags,size,pos
  575. {
  576. .width dd width
  577. .left dd left
  578. .top dd top
  579. .color dd color
  580. .shift_color dd shift_color
  581. .focus_border_color dd focus_border_color
  582. .blur_border_color dd blur_border_color
  583. .text_color dd text_color
  584. .max dd max
  585. .text dd text
  586. .flags dw flags+0
  587. .size dd size+0
  588. .pos dd pos+0
  589. .offset dd 0
  590. .cl_curs_x dd 0
  591. .cl_curs_y dd 0
  592. .shift   dd 0
  593. .shift_old   dd 0
  594. }
  595.  
  596.  
  597. macro edit_boxes_set_sys_color start,end,color_table
  598. {
  599.         mov     edi,start
  600.         mov     ecx,((end-start)/ed_struc_size)
  601.         mov     esi,color_table
  602. @@:
  603.         mov     eax,[esi+36]
  604.         mov     ebx,[esi+20]
  605.         mov     ed_focus_border_color,eax
  606.         shr     bh,1
  607.         shr     bl,1
  608.         shr     ah,1
  609.         shr     al,1
  610.         add     ah,bh
  611.         add     al,bl
  612.         ror     eax,16
  613.         ror     ebx,16
  614.         shr     bl,1
  615.         shr     al,1
  616.         add     al,bl
  617.         ror     eax,16
  618.         mov     ed_blur_border_color,eax
  619.         add     edi,ed_struc_size
  620.         loop    @b
  621. }
  622.  
  623. macro draw_edit_box ed_ptr,use_f9,procinfo
  624. {
  625. if use_f9 eq
  626. else
  627.         mcall   9,procinfo,-1
  628. end if
  629.         mov     edi,ed_ptr
  630.         call    edit_box.draw
  631. }
  632.  
  633. macro mouse_edit_box ed_ptr
  634. {
  635.         mov     edi,ed_ptr
  636.         call    edit_box.mouse
  637. }
  638.  
  639. macro key_edit_box ed_ptr
  640. {
  641.         mov     edi,ed_ptr
  642.         call    edit_box.key
  643. }
  644. macro default_box ed_ptr
  645. {
  646. pusha
  647. ;       xor     eax,eax
  648. ;       mov     ed_shift_pos,eax
  649. ;       mov     ed_shift_pos_old,eax
  650.         and     word ed_flags,ed_shift_cl
  651. ;       mov     ed_offset,eax
  652. popa
  653. }