Subversion Repositories Kolibri OS

Rev

Rev 483 | 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.         test    word ed_flags,ed_mouse_on
  295.         jne     .mouse_wigwag
  296. ;----------------------------------------------------------
  297. ;--- ¯à®¢¥à塞, ¯®¯ ¤ ¥â «¨ ªãàá®à ¢ edit box -------------
  298. ;----------------------------------------------------------
  299.         mov     ebx,[procinfo.box.top]
  300.         add     ebx,ed_top
  301. if scr_h eq
  302. else
  303.         add     ebx,scr_h
  304. end if
  305.         cmp     ax,bx
  306.         jl      ._blur;.mouse_end_no_focus
  307.  
  308.         add     ebx,ed_height
  309.         cmp     ax,bx
  310.         jg      ._blur;.mouse_end_no_focus
  311.  
  312.         shr     eax,16
  313.  
  314.         mov     ebx,[procinfo.box.left]
  315.         add     ebx,ed_left
  316. if scr_w eq
  317. else
  318.         add     ebx,scr_w
  319. end if
  320.         cmp     ax,bx
  321.         jl      ._blur;.mouse_end_no_focus
  322.  
  323.         add     ebx,ed_width
  324.         cmp     ax,bx
  325.         jg      ._blur;.mouse_end_no_focus
  326. ;--- ¨§¬¥­ï¥¬ ¯®§¨æ¨î ªãàá®à  ---
  327.         push    eax
  328.         mov     ebp,ed_color
  329.         call    .clear_cursor
  330.         pop     eax
  331. ._mvpos:
  332.         mov     ebx,dword [procinfo.box.left]
  333.         xor     edx,edx
  334.         sub     eax,ed_left
  335.         sub     eax,ebx
  336. if scr_w eq
  337. else
  338.         add     ebx,scr_w
  339.         sub     eax,2
  340. end if
  341.         mov     ebx,6
  342.         div     bx
  343.         add     eax,ed_offset
  344.         cmp     eax,ed_size
  345.         jna     ._mshift
  346.         mov     eax,ed_size
  347. ._mshift:
  348. ;;;;;;;
  349. ;;‘¥ªæ¨ï ®¡à ¡®âª¨ shift ¨ ¢ë¤¥«¥­¨ï ¯® shift
  350. ;;;;;;;
  351.         test    word ed_flags,ed_shift_bac
  352.         je      @f
  353.         mov     ebp,dword       ed_color
  354.         mov     ebx,dword ed_shift_pos
  355.         push    eax
  356.         call    .sh_cl_
  357.         and     word ed_flags,ed_shift_bac_cl
  358.         pop     eax
  359. @@:    
  360.         test    word ed_flags,ed_mouse_on
  361.         jne     @f
  362.        
  363.         mov     dword ed_shift_pos,eax
  364.         or      word  ed_flags,ed_mouse_on
  365.         mov     dword ed_pos,eax
  366.         mov     dword [mouse_flag],edi          ;ãáâ ­®¢¨¬ ¨¤¥­â¨ä¨ª â®à
  367.         bts     word ed_flags,1                 ;ãáâ ­®¢ª  䮪ãá 
  368.         jmp     .m_sh
  369. @@:            
  370.         cmp     eax,dword ed_shift_pos  ;¥á«¨ ¯®§¨æ¨¨ ­¥ ¨§¬¥­¨«¨áì
  371.         je      .mouse_ex
  372.         mov     ed_pos,eax
  373.         mov     ebp,dword shift_color
  374.         mov     ebx,dword ed_shift_pos
  375.         call    .sh_cl_
  376.         or      word ed_flags,ed_mous_adn_b     ;ãáâ ­®¢¨¬ ¡¨â çâ® ¬ë ¢ë¤¥«¨«¨ +shift_on +
  377. .m_sh:  call    .draw_text
  378.         call    .draw_cursor
  379. ;----------------------------------------------------------
  380. ;--- ¯à®æ¥¤ãà  ãáâ ­®¢ª¨ 䮪ãá  ---------------------------
  381. ;----------------------------------------------------------
  382.         jmp     .drc
  383. ._blur:
  384.         test    word ed_flags,ed_always_focus
  385.         jne     .mouse_ex
  386.         btr     word ed_flags,1 ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  387.         jnc     .mouse_ex
  388.  
  389.         mov     ebp,ed_color
  390.         call    .clear_cursor
  391. .drc:   call    .draw_border
  392. .mouse_ex:
  393.  
  394. edit_ex
  395. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  396. ;Ž¡é¨¥ ä㭪樨 ®¡à ¡®âª¨
  397. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  398. use_general_func
  399. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  400. ;”㭪樨 ¤«ï à ¡®âë á key
  401. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  402. use_key_func
  403. ;----------------------------------------------------------
  404. ;--- ¯à®æ¥¤ãà  à §¬ë¢ ­¨ï 䮪ãá  --------------------------
  405. ;----------------------------------------------------------
  406. ;.blur:
  407. ;pusha
  408. ;._blur:
  409.         ;btr     ed_flags,1
  410.         ;jnc     @f
  411.         ;call    .draw_border
  412.         ;call    .clear_cursor
  413. ;@@:
  414. ;edit_ex
  415.  
  416. ;----------------------------------------------------------
  417. ;--- Ž¡à ¡®âª  .mouse_wigwag
  418. ;----------------------------------------------------------
  419. .mouse_wigwag:
  420.         shr     eax,16
  421.         or      word ed_flags,ed_shift_bac+ed_shift_on+ed_shift
  422. ;;;;;;;;;;;;;;;;;;
  423. ;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ª®£¤  ¯à®¨á室¨â ¢ë室 §  ¯à¥¤¥«ë editbox
  424. ;;;;;;;;;;;;;;;;;;
  425.         mov     ebx,[procinfo.box.left]
  426.         add     ebx,ed_left
  427. if scr_w eq
  428. else
  429.         add     ebx,scr_w
  430. end if
  431.         cmp     eax,ebx
  432.         jb      .mleft
  433.  
  434.         add     ebx,ed_width
  435.         cmp     eax,ebx
  436.         ja      .mright
  437.  
  438.         sub     ebx,ed_width
  439.  
  440.         xor     edx,edx
  441.         sub     eax,ebx ; ¢ëç⨬ ¨§ ª®®à¤¨­ â ¬ë誨 ¯® ®á¨ å ª®®à¤¨­ âë ¤® editbox ¯® ®á¨ å
  442.         mov     ebx,6
  443.         div     ebx
  444. ;;;;;;;;;;;;;;;;;;
  445. ;;¯à®æ¥¤ãà  ®¡à ¡®âª¨ ¯®«®¦¥­¨ï ¢ë¤¥«¥­­®£® ⥪áâ , ¢ ¯à¥¤¥« å ®¡« á⨠editbox
  446. ;;;;;;;;;;;;;;;;;;
  447. ;®«ã稫¨ ª®®à¤¨­ âë ¢ eax ¬ë誨, â.¥. ªã¤  ®­  ¯¥à¥¬¥á⨫ áì
  448. ;¨á®¢ ­¨¥ § ªà è¥­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ®ç¨á⪠ ¨å
  449.         add     eax,ed_offset   ;¤®¡ ¢¨¬ ᬥ饭¨¥
  450.         cmp     eax,dword ed_size       ;¥á«¨ ¢ë諨 §  ¯à¥¤¥«ë, â® ­¨ç¥£® ­¥ ¤¥« âì
  451.         ja      .mwigvag
  452. .mdraw:
  453.         mov     dword   ed_pos,eax ;á®åà ­¨¬ ­®¢®¥ §­ ç¥­¨¥
  454. ;¨á®¢ ­¨¥ § ªà è¥­ëå ¯àאַ㣮«ì­¨ª®¢ ¨ ®ç¨á⪠ ¨å
  455.         mov     ecx,dword       ed_shift_pos
  456.         mov     ebx,dword       ed_shift_pos_old
  457.         mov     dword   ed_shift_pos_old,eax    ;¢­¥á¥¬ ­®¢®¥ §­ ç¥­¨¥ áâ à®© ¯®§¨æ¨¨ ªãàá®à 
  458. ;¯à®¢¥àª  ¨ à¨á®¢ ­¨¥ § ªà è¥­ëå ®¡« á⥩
  459.         cmp     ecx,ebx         ;¢ëïá­ï¥¬ ªã¤  ¡ë«® ¤¢¨¦¥­¨¥ ­  ®¤¨­ è £ ­ § ¤
  460.         je      .m1_shem        ;¤¢¨¦¥­¨ï ­¥ ¡ë«® à ­¥¥
  461.         jb      .msmaller       ;¤¢¨¦¥­¨¥ ¡ë«® ->
  462.         cmp     ebx,eax         ;¤¢¨¦¥­¨¥ ¡ë«® ¤® í⮣® <- ¨ âãâ ¬ë ¯à®¢¥à塞 ᥩç á ªã¤  ¤¢¨¦¥­¨¥ ¯à®¨á室¨â
  463.         ja      .m1_shem        ;¥á«¨ ¡ë«® ¤¢¨¦¥­¨¥ <- â® ­ã¦­® § ªà á¨âì ®¡« áâì
  464.         je      .mwigvag        ;¥á«¨ ¨§¬¥­¥­¨ï ­¥ ¡ë«®, â® ­¨ç¥£® ­¥ ¤¥« âì
  465.         mov     ebp,ed_color    ;âã⠭㦭® ®ç¨áâ¨âì ®¡« áâì c ed_pos ed_shift_pos_old
  466. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  467.         call    .sh_cl_
  468.         jmp     .mwigvag
  469. .msmaller:
  470.         cmp     ebx,eax
  471.         jb      .m1_shem
  472.         mov     ebp,ed_color
  473. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  474.         call    .sh_cl_
  475.         jmp     .mwigvag
  476. ;alike  =
  477. .m1_shem:
  478.         mov     ebp,shift_color
  479. ;¢å®¤­ë¥ ¯ à ¬¥âàë ebp=color ebx=ed_shift_pos
  480.         mov     ebx,ecx
  481.         call    .sh_cl_
  482.         jmp     .mwigvag
  483. .mwigvag:
  484.         and     word ed_flags,ed_shift_mcl
  485.         jmp     .draw_cursor_text
  486. ;       popa
  487. ;       ret
  488. .mleft:
  489.         mov     eax,ed_pos
  490.         cmp     eax,0                                        
  491.         jbe      .mwigvag
  492.         dec     eax
  493.         call    .check_offset
  494.         push    eax
  495.         mov     ebx,ed_shift_pos
  496.         mov     ebp,shift_color
  497.         call    .sh_cl_
  498.         pop     eax
  499.         jmp     .mdraw
  500. .mright:
  501.         mov     eax,ed_pos
  502.         mov     ebx,ed_size
  503.         cmp     eax,ebx
  504.         jae     .mwigvag
  505.         inc     eax
  506.         call    .check_offset
  507.         mov     ebx,ed_shift_pos
  508.         mov     ebp,shift_color
  509.         push    eax
  510.         call    .sh_cl_
  511.         pop     eax
  512.         jmp     .mdraw  
  513.  
  514. }
  515. ed_figure_only= 1000000000000000b   ;®¤­¨ ᨬ¢®«ë
  516. ed_always_focus= 100000000000000b
  517. ed_focus=                     10b   ;䮪ãá ¯à¨«®¦¥­¨ï
  518. ed_shift_on=                1000b   ;¥á«¨ ­¥ ãáâ ­®¢«¥­ -§­ ç¨â ¢¯¥à¢ë¥ ­ ¦ â shift,¥á«¨ ¡ë« ãáâ ­®¢«¥­, §­ ç¨â ¬ë 㦥 çâ® - â® ¤¥« «¨ 㤥ন¢ ï shift
  519. ed_shift_on_off=1111111111110111b
  520. ed_shift=                    100b   ;¢ª«îç ¥âáï ¯à¨ ­ ¦ â¨¨ ­  shift â.¥. ¥á«¨ ­ ¦¨¬ î
  521. ed_shift_off=   1111111111111011b
  522. ed_shift_bac=              10000b   ;¡¨â ¤«ï ®ç¨á⪨ ¢ë¤¥«¥­®£® shift â.¥. ¯à¨ ãáâ ­®¢ª¥ £®¢®à¨â çâ® ¥áâì ¢ë¤¥«¥­¨¥
  523. ed_shift_bac_cl=1111111111101111b   ;®ç¨á⪠ ¯à¨ 㤠«¥­¨¨ ¢ë¤¥«¥­¨ï
  524. ed_shift_cl=    1111111111100011b
  525. ed_shift_mcl=   1111111111111011b
  526. ed_left_fl=               100000b
  527. ed_right_fl=    1111111111011111b
  528. ed_offset_fl=            1000000b
  529. ed_offset_cl=   1111111110111111b
  530. ed_insert=              10000000b
  531. ed_insert_cl=   1111111101111111b
  532. ed_mouse_on =          100000000b
  533. ed_mous_adn_b=         100011000b
  534. ed_mouse_on_off=1111111011111111b
  535. ed_height=14 ; ¢ëá®â 
  536. macro draw_edit_boxes start,_end,use_f9,procinfo
  537. {
  538. if use_f9 eq
  539. else
  540.         mcall   9,procinfo,-1
  541. end if
  542.         mov     edi,start
  543.         mov     ecx,((_end-start)/ed_struc_size)
  544. @@:
  545.         call    edit_box.draw
  546.         add     edi,ed_struc_size
  547.         loop    @b
  548. }
  549.  
  550. macro mouse_edit_boxes start,_end
  551. {
  552.         mov     edi,start
  553.         mov     ecx,((_end-start)/ed_struc_size)
  554. @@:
  555.         call    edit_box.mouse
  556.         add     edi,ed_struc_size
  557.         loop    @b
  558. }
  559.  
  560. macro key_edit_boxes start,end
  561. {
  562.         mov     edi,start
  563.         mov     ecx,((end-start)/ed_struc_size)
  564. @@:
  565.         call    edit_box.key
  566.         add     edi,ed_struc_size
  567.         loop    @b
  568. }
  569. ed_struc_size=70
  570. struc  edit_box width,left,top,color,shift_color,focus_border_color,\
  571.        blur_border_color,text_color,max,text,flags,size,pos
  572. {
  573. .width dd width
  574. .left dd left
  575. .top dd top
  576. .color dd color
  577. .shift_color dd shift_color
  578. .focus_border_color dd focus_border_color
  579. .blur_border_color dd blur_border_color
  580. .text_color dd text_color
  581. .max dd max
  582. .text dd text
  583. .flags dw flags+0
  584. .size dd size+0
  585. .pos dd pos+0
  586. .offset dd 0
  587. .cl_curs_x dd 0
  588. .cl_curs_y dd 0
  589. .shift   dd 0
  590. .shift_old   dd 0
  591. }
  592.  
  593.  
  594. macro edit_boxes_set_sys_color start,end,color_table
  595. {
  596.         mov     edi,start
  597.         mov     ecx,((end-start)/ed_struc_size)
  598.         mov     esi,color_table
  599. @@:
  600.         mov     eax,[esi+36]
  601.         mov     ebx,[esi+20]
  602.         mov     ed_focus_border_color,eax
  603.         shr     bh,1
  604.         shr     bl,1
  605.         shr     ah,1
  606.         shr     al,1
  607.         add     ah,bh
  608.         add     al,bl
  609.         ror     eax,16
  610.         ror     ebx,16
  611.         shr     bl,1
  612.         shr     al,1
  613.         add     al,bl
  614.         ror     eax,16
  615.         mov     ed_blur_border_color,eax
  616.         add     edi,ed_struc_size
  617.         loop    @b
  618. }
  619.  
  620. macro draw_edit_box ed_ptr,use_f9,procinfo
  621. {
  622. if use_f9 eq
  623. else
  624.         mcall   9,procinfo,-1
  625. end if
  626.         mov     edi,ed_ptr
  627.         call    edit_box.draw
  628. }
  629.  
  630. macro mouse_edit_box ed_ptr
  631. {
  632.         mov     edi,ed_ptr
  633.         call    edit_box.mouse
  634. }
  635.  
  636. macro key_edit_box ed_ptr
  637. {
  638.         mov     edi,ed_ptr
  639.         call    edit_box.key
  640. }
  641. macro default_box ed_ptr
  642. {
  643. pusha
  644. ;       xor     eax,eax
  645. ;       mov     ed_shift_pos,eax
  646. ;       mov     ed_shift_pos_old,eax
  647.         and     word ed_flags,ed_shift_cl
  648. ;       mov     ed_offset,eax
  649. popa
  650. }