Subversion Repositories Kolibri OS

Rev

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

  1. ;Îãðîìíàÿ áëàãîäàðíîñòü Maxxxx32, Diamond, Heavyiron
  2. ;è äðóãèì ïðîãðàììèñòàì, à òàêæå
  3. ;Òåïëîâó Àëåêñåþ (<Lrz> www.lrz.land.ru)
  4.  
  5.  
  6. use32
  7.   org 0x0
  8.   db 'MENUET01' ;èäåíòèô. èñïîëíÿåìîãî ôàéëà âñåãäà 8 áàéò
  9.   dd 0x01
  10.   dd start
  11.   dd i_end ; ðàçìåð ïðèëîæåíèÿ
  12.   dd mem
  13.   dd stacktop
  14.   dd file_name;buf_cmd_lin
  15.   dd sys_path
  16.  
  17. MAX_COLOR_WORD_LEN equ 40
  18. maxChars equ 100002 ;(...+2)
  19. BUF_SIZE equ 1000 ;bufer for copy|paste
  20. maxColWords equ 10000
  21.  
  22.  
  23. include '../../macros.inc'
  24. ;include '../../develop/libraries/box_lib/load_lib.mac'
  25. include 'load_lib.mac' ;include old file
  26. include '../../develop/libraries/box_lib/trunk/tree_list.mac'
  27. include '../../develop/libraries/box_lib/trunk/editbox.mac'
  28.  
  29. include 't_data.inc'
  30. include 'strlen.inc'
  31. include 't_work.inc' ;text work functions
  32. include 't_draw.inc' ;draw main window functions
  33. include 't_button.inc'
  34.  
  35. @use_library
  36.  
  37. start:
  38.   mov eax,48
  39.   mov ebx,3
  40.   mov ecx,sc
  41.   mov edx,sizeof.system_colors
  42.   mcall
  43.  
  44.   m2m [wScr.bckg_col],[sc.work]
  45.   m2m [wScr.frnt_col],[sc.work_button]
  46.   m2m [wScr.line_col],[sc.work_button_text]
  47.  
  48.   m2m [hScr.bckg_col],[sc.work]
  49.   m2m [hScr.frnt_col],[sc.work_button]
  50.   m2m [hScr.line_col],[sc.work_button_text]
  51.  
  52.  
  53.   mcall 68,11
  54.   or eax,eax
  55.   jz button.exit
  56.  
  57.   mcall 66,1,1 ;scan code
  58.   ;mcall 26,2,1,conv_tabl
  59.  
  60.   mov ecx,sizeof.symbol*maxChars
  61.   call mem_Alloc
  62.   mov [tex],eax
  63.   mov [tex_1],eax
  64.   add [tex_1],sizeof.symbol
  65.   mov [tex_end],eax
  66.   add [tex_end],sizeof.symbol*maxChars
  67.  
  68.   mcall 40,0x27
  69.  
  70.   call Clear
  71.  
  72. ;-------------------------------------------------
  73.   mov ecx,maxColWords*sizeof.TexColViv
  74.   add ecx,40
  75.   call mem_Alloc
  76.   mov [options_file],eax
  77.   mov [options_file_end],eax
  78.   add [options_file_end],maxColWords*sizeof.TexColViv
  79.   add [options_file_end],40
  80.  
  81. ;-------------------------------------------------
  82. ; init bmp file
  83.   mov ecx,1200*18
  84.   call mem_Alloc
  85.   mov [bmp_icon],eax
  86.  
  87.   mov esi,file_name
  88.   call strlen
  89.   mov ecx,eax
  90.   mov edi,buf_cmd_lin
  91.   rep movsb
  92.  
  93.   copy_path fn_icon,sys_path,file_name
  94.  
  95.   mov eax,70 ;load icon file
  96.   mov [run_file_70.func_n], 0
  97.   mov [run_file_70.param1], 54
  98.   mov [run_file_70.param2], 0
  99.   mov [run_file_70.param3], 1200*18
  100.   m2m [run_file_70.param4], [bmp_icon]
  101.   mov [run_file_70.rezerv], 0
  102.   mov [run_file_70.name], file_name
  103.   mov ebx,run_file_70
  104.   int 0x40
  105.  
  106.   cmp ebx,-1
  107.   mov [err_ini0],1
  108.   je @f ;if open file
  109.     mov [err_ini0],0
  110.   @@:
  111.  
  112. load_libraries l_libs_start,load_lib_end
  113.  
  114. ;¯à®¢¥àª  ­  ᪮«ìª® 㤠筮 § £ã§¨« áì ­ è  «¨¡ 
  115.         mov     ebp,lib0
  116.         cmp     dword [ebp+ll_struc_size-4],0
  117.         jz      @f
  118.         mcall   -1      ;exit not correct
  119. @@:
  120.         mov     ebp,lib1 ;
  121.         cmp     dword [ebp+ll_struc_size-4],0
  122.         jz      @f
  123.         mcall   -1      ;exit not correct
  124. @@:
  125.  
  126.  
  127. ;---------------------------------------------------------------------
  128.   push dword tree1
  129.   call dword[tl_data_init]
  130. ;---------------------------------------------------------------------
  131. ; ÷èòàåì bmp ôàéë ñ êóðñîðàìè è ëèíèÿìè
  132.   copy_path fn_icon_tl_sys,sys_path,file_name
  133.  
  134.   mov ecx,3*256*13
  135.   call mem_Alloc
  136.   mov dword[tree1.data_img_sys],eax
  137.  
  138.   mov [run_file_70.func_n], 0
  139.   mov [run_file_70.param1], 54
  140.   mov [run_file_70.param2], 0
  141.   mov [run_file_70.param3], 3*256*13
  142.   mov [run_file_70.param4], eax
  143.   mov [run_file_70.rezerv], 0
  144.   mov [run_file_70.name], file_name
  145.  
  146.   mov eax,70 ;load icon file
  147.   mov ebx,run_file_70
  148.   int 0x40
  149.   cmp ebx,0
  150.   jg @f
  151.     mov dword[tree1.data_img_sys],0
  152.   @@:
  153. ;---------------------------------------------------------------------
  154. ; ÷èòàåì bmp ôàéë ñ èêîíêàìè óçëîâ
  155.   copy_path fn_icon_tl_nod,sys_path,file_name
  156.  
  157.   mov ecx,3*256*2
  158.   call mem_Alloc
  159.   mov dword[tree1.data_img],eax
  160.  
  161. ;  mov [run_file_70.func_n], 0
  162. ;  mov [run_file_70.param1], 54
  163. ;  mov [run_file_70.param2], 0
  164.   mov [run_file_70.param3], 3*256*2
  165.   mov [run_file_70.param4], eax
  166. ;  mov [run_file_70.rezerv], 0
  167. ;  mov [run_file_70.name], file_name
  168.  
  169.   mov eax,70 ;load icon file
  170.   mov ebx,run_file_70
  171.   int 0x40
  172.   cmp ebx,0
  173.   jg @f
  174.     mov dword[tree1.data_img],0
  175.   @@:
  176. ;------------------------------------------------------------------------------
  177.   copy_path fn_syntax_dir,sys_path,file_name ;áåðåì ïóòü ê ïàïêå ñ ôàéëàìè ñèíòàêñèñà
  178.   mov eax,70
  179.   mov ebx,tree_file_struct
  180.   int 0x40
  181.  
  182. cmp ebx,-1
  183. je .end_dir_init
  184.  
  185.   mov eax,dir_mem
  186.   add eax,32+4+1+3+4*6+8
  187. mov ecx,ebx
  188. @@:
  189.   cmp byte[eax],'.' ;ôèëüòðóåì ôàéëû ñ èìåíàìè '.' è '..'
  190.   je .filter
  191.     push dword tree1
  192.     push dword 0x10000 ;1*2^16 - ãäå 1 íîìåð èêîíêè ñ êíèãîé
  193.     push dword eax
  194.     call dword[tl_node_add]
  195.  
  196.     push dword tree1
  197.     call dword[tl_cur_next]
  198.   .filter:
  199.   add eax,304
  200.   loop @b
  201. .end_dir_init:
  202.  
  203. ;  push dword tree1
  204. ;  push dword 0
  205. ;  push dword file_name
  206. ;  call dword[tl_node_add]
  207.  
  208.  
  209. ;--- load color option file ---
  210.   call InitColText
  211.  
  212. ;--- get cmd line ---
  213.   cmp byte[buf_cmd_lin+3],0 ;buf_cmd_lin
  214.   je @f ;if file names exist
  215.     mov esi,buf_cmd_lin
  216.     call strlen ;eax=strlen
  217.     mov [edit1.size],eax
  218.     call but_OpenFile
  219.   @@:
  220.  
  221.  
  222. red_win:
  223.   mov eax,12
  224.   mov ebx,1
  225.   mcall
  226.  
  227.   xor eax,eax
  228.   mov ebx,10*65536+485
  229.   mov ecx,10*65536+280
  230.   mov edx,[sc.work]
  231.   or  edx,0x73000000
  232.   mov edi,hed
  233.   mcall
  234.  
  235.   mcall 9,procinfo,-1
  236.   call EvSize
  237.  
  238.   mov eax,13 ;rect
  239.   xor ebx,ebx
  240.   xor ecx,ecx
  241.   mov bx,word [procinfo.client_box.width]
  242.   inc bx
  243.   mov cx,word [wndMain.top]
  244.   mcall
  245.  
  246.   push dword edit1
  247.   call [edit_box_draw]
  248.  
  249. ; draw for Menu 1
  250.   push dword menu_data_1
  251.   call [menu_bar_draw]
  252.  
  253.   call draw_but_toolbar
  254.  
  255.   cmp [err_ini0],1
  256.   jne @f
  257.     mov eax,4
  258.     mov ebx,[wndMain.left]
  259.     add ebx,[recMain.left]
  260.     shl ebx,16
  261.     add ebx,[wndMain.top]
  262.     add ebx,[recMain.top]
  263.     mov ecx,0x80ff0000
  264.     mov edx,txtErrIni0
  265.     int 0x40
  266.  
  267.     add ebx,10 ;move <--y-->
  268.     mov ecx,0x80ff0080
  269.     mov edx,file_name
  270.     int 0x40
  271.   @@:
  272.  
  273.   cmp [err_ini0],1
  274.   je @f
  275.     call draw_main_win
  276.   @@:
  277.  
  278.   cmp [err_opn],1
  279.   jne @f
  280.     ;mov eax,4
  281.     mov ebx,10*65536+35
  282.     mov ecx,0x80ff0000
  283.     mov edx,txtErrOpen
  284.     mcall
  285.   @@:
  286.  
  287.   mov eax,12
  288.   mov ebx,2
  289.   mcall
  290.  
  291. still:
  292.   mov eax,10
  293.   mcall
  294.  
  295.   cmp al,1 ;èçì. ïîëîæåíèå îêíà
  296.   jz red_win
  297.   cmp al,2
  298.   jz key
  299.   cmp al,3
  300.   jz button
  301.   cmp al,6
  302.   jz mouse
  303.  
  304.   jmp still
  305.  
  306.  
  307.  
  308. mouse:
  309.   push dword edit1
  310.   call [edit_box_mouse]
  311.  
  312.   test word [edit1.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  313.   jne still
  314.  
  315. ;-----------------------------------------------
  316.   cmp [hScr.delta2],0
  317.   jne .horizontal
  318. .vertical:
  319.   mov eax,[wScr.max_area]
  320.   cmp eax,[wScr.cur_area]
  321.   jbe .horizontal
  322. ; mouse event for Vertical ScrollBar
  323.   push dword wScr
  324.   call [scrollbar_ver_mouse]
  325.   mov eax,wScr.redraw
  326.   xor ebx,ebx
  327.   cmp [eax],ebx
  328.   je @f
  329.   mov [eax],ebx
  330.  
  331.   call draw_main_win
  332.   ;call mouse_wnd_main
  333.   jmp still
  334. @@:
  335.   cmp [wScr.delta2],0
  336.   jne still
  337. .horizontal:
  338.     mov   eax,[hScr.max_area]
  339.     cmp   eax,[hScr.cur_area]
  340.     jbe   .other
  341. ; mouse event for Horizontal ScrollBar
  342.         push dword hScr
  343.         call [scrollbar_hor_mouse]
  344.         mov eax,hScr.redraw
  345.         xor ebx,ebx
  346.         cmp [eax],ebx
  347.         je .other
  348.         mov [eax],ebx
  349.   call draw_main_win
  350.   jmp still
  351. .other:
  352.   cmp [wScr.delta2],0
  353.   jne still
  354.   cmp [hScr.delta2],0
  355.   jne still
  356.  
  357.   call mouse_wnd_main
  358.  
  359.   cmp byte[panel_id],TE_PANEL_FIND ;if not panel
  360.   jne @f
  361.     push dword edit2
  362.     call [edit_box_mouse]
  363.   @@:
  364.   cmp byte[panel_id],TE_PANEL_SYNTAX ;if not panel
  365.   jne .menu_bar_1 ;@f
  366.   push dword tree1
  367.   call [tl_mouse]
  368. ;-----------------------------------------------
  369. .menu_bar_1:
  370.   mov [menu_data_1.get_mouse_flag],1
  371. ; mouse event for Menu 1
  372.   push  dword menu_data_1
  373.   call  [menu_bar_mouse]
  374.   cmp   [menu_data_1.click],dword 1
  375.   jne   .mnu_1
  376.   cmp [menu_data_1.cursor_out],dword 4
  377.   je    button.exit    
  378.   cmp [menu_data_1.cursor_out],dword 3
  379.   jne   @f
  380.     call but_SaveFile
  381.   @@:
  382.   cmp [menu_data_1.cursor_out],dword 2
  383.   jne   @f
  384.     call but_OpenFile
  385.   @@:
  386.   cmp [menu_data_1.cursor_out],dword 1
  387.   jne   @f
  388.     call but_NewFile
  389.   @@:
  390.   ;cmp [menu_data_1.cursor_out],dword 0
  391.   ;jne @f
  392. .mnu_1:
  393.   jmp still
  394. ;---------------------------------------------------------------------
  395.  
  396. KeyConvertToASCII:
  397.   mov ebx,conv_tabl ;convert scan to ascii
  398.   ror ax,8
  399.   xor ah,ah
  400.   add bx,ax
  401.   mov ah,byte[ebx]
  402.   ret
  403.  
  404. key:
  405.   mov ecx,1
  406.   mcall 66,3
  407.   xor ebx,ebx
  408.   test al,0x03 ;[Shift]
  409.   jz @f
  410.     inc cl
  411.     or ebx,KM_SHIFT
  412.   @@:
  413.   test al,0x0c ;[Ctrl]
  414.   jz @f
  415.     or ebx,KM_CTRL
  416.   @@:
  417.   test al,0x30 ;[Alt]
  418.   jz @f
  419.     or ebx,KM_ALT
  420.   @@:
  421.   test al,0x80 ;[NumLock]
  422.   jz @f
  423.     or ebx,KM_NUMLOCK
  424.   @@:
  425.  
  426.   mov [keyUpr],ebx
  427.   mcall 26,2,,conv_tabl
  428.   mcall 2
  429.  
  430. ;  push dword tree1 ;???
  431. ;  call [tl_key]    ;???
  432.  
  433.   test word [edit1.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  434.   je @f
  435.     cmp ah,0x80 ;if key up
  436.     ja still
  437.     cmp ah,42 ;[Shift] (left)
  438.     je still
  439.     cmp ah,54 ;[Shift] (right)
  440.     je still
  441.     cmp ah,56 ;[Alt]
  442.     je still
  443.     cmp ah,29 ;[Ctrl]
  444.     je still
  445.     cmp ah,69 ;[Pause Break]
  446.     je still
  447. ;    cmp [keyUpr],0
  448. ;    jne still
  449.  
  450.     call KeyConvertToASCII
  451.  
  452.     push dword edit1
  453.     call [edit_box_key]
  454.     jmp still
  455.   @@:
  456.  
  457.   test word [edit2.flags],10b;ed_focus ; ¥á«¨ ­¥ ¢ 䮪ãá¥, ¢ë室¨¬
  458.   je @f
  459.     cmp ah,0x80 ;if key up
  460.     ja still
  461.     cmp ah,42 ;[Shift] (left)
  462.     je still
  463.     cmp ah,54 ;[Shift] (right)
  464.     je still
  465.     cmp ah,56 ;[Alt]
  466.     je still
  467.     cmp ah,29 ;[Ctrl]
  468.     je still
  469.     cmp ah,69 ;[Pause Break]
  470.     je still
  471. ;    cmp [keyUpr],0
  472. ;    jne still
  473.  
  474.     call KeyConvertToASCII
  475.     push dword edit2
  476.     call [edit_box_key]
  477.     jmp still
  478.   @@:
  479.  
  480.   cmp ah,KEY_F1 ;[F1]
  481.   jne @f
  482.     call ShowHelpF1
  483.     jmp still
  484.   @@:
  485.   cmp ah,KEY_F3 ;[F3]
  486.   jne @f
  487.     call but_FindText
  488.     jmp still
  489.   @@:
  490.  
  491.   test [keyUpr],KM_CTRL ;Ctrl+...
  492.   jz .key_Ctrl
  493.  
  494.     cmp ah,24 ;Ctrl+O
  495.     jne @f
  496.       call but_OpenFile
  497.     @@:
  498.     cmp ah,33 ;Ctrl+F
  499.     jne @f
  500.     cmp byte[panel_id],TE_PANEL_FIND
  501.     je @f
  502.       call but_find
  503.     @@:
  504.     cmp ah,44 ;Ctrl+Z
  505.     je but_undo
  506.     cmp ah,46 ;Ctrl+C
  507.     jne @f
  508.       call but_Copy
  509.     @@:
  510.     cmp ah,47 ;Ctrl+V
  511.     je but_paste
  512.     cmp ah,49 ;Ctrl+N
  513.     jne @f
  514.       call but_NewFile
  515.     @@:
  516.     cmp ah,199 ;Ctrl+Home
  517.     jne @f
  518.       call but_CtrlHome
  519.     @@:
  520.     ;jmp still
  521.   .key_Ctrl:
  522.  
  523.   test [keyUpr],KM_SHIFT ;Shift+...
  524.   jz .key_Shift
  525.     cmp ah,72 ;Shift+Up
  526.     jne @f
  527.       call sel_KeyUp
  528.     @@:
  529.     cmp ah,75 ;Shift+Left
  530.     jne @f
  531.       call sel_KeyLeft
  532.     @@:
  533.     cmp ah,77 ;Shift+Right
  534.     jne @f
  535.       call sel_KeyRight
  536.     @@:
  537.     cmp ah,80 ;Shift+Down
  538.     jne @f
  539.       call sel_KeyDown
  540.     @@:
  541.     ;mov [dragk],1 ;íà÷èíàåì âûäåëåíèå îò êëàâèàòóðû
  542.     jmp .key_MoveCur
  543.   .key_Shift:
  544. ;-------------------------------------------------
  545.   cmp ah,72 ;178 ;Up
  546.   jne @f
  547.     push dx
  548.     call draw_cursor_sumb
  549.     call CurMoveUp
  550.     cmp dl,8
  551.     jne .no_red_0
  552.       call OnInitialUpdate
  553.       call draw_main_win
  554.       pop dx
  555.       jmp @f
  556.     .no_red_0:
  557.     call draw_main_cursor
  558.     pop dx
  559.     mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
  560.   @@:
  561.   cmp ah,80 ;177 ;Down
  562.   jne @f
  563.     push dx
  564.     call draw_cursor_sumb
  565.     call CurMoveDown
  566.     cmp dl,8
  567.     jne .no_red_1
  568.       call OnInitialUpdate
  569.       call draw_main_win
  570.       pop dx
  571.       jmp @f
  572.     .no_red_1:
  573.     call draw_main_cursor
  574.     pop dx
  575.     mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
  576.   @@:
  577.   cmp ah,75 ;176 ;Left
  578.   jne @f
  579.     push dx
  580.     call draw_cursor_sumb
  581.     call CurMoveLeft
  582.     cmp dl,8
  583.     jne .no_red_2
  584.       call OnInitialUpdate
  585.       call draw_main_win
  586.       pop dx
  587.       jmp @f
  588.     .no_red_2:
  589.     call draw_main_cursor
  590.     pop dx
  591.     mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
  592.   @@:
  593.   cmp ah,77 ;179 ;Right
  594.   jne @f
  595.     push dx
  596.     call draw_cursor_sumb
  597.     call CurMoveRight
  598.     cmp dl,8
  599.     jne .no_red_3
  600.       call OnInitialUpdate
  601.       call draw_main_win
  602.       pop dx
  603.       jmp @f
  604.     .no_red_3:
  605.     call draw_main_cursor
  606.     pop dx
  607.     mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
  608.   @@:
  609.   cmp ah,71 ;180 ;Home
  610.   jne @f
  611.     push dx
  612.     call draw_cursor_sumb
  613.     call CurMoveX_FirstChar
  614.     cmp dl,8
  615.     jne .no_red_4
  616.       call OnInitialUpdate
  617.       call draw_main_win
  618.       pop dx
  619.       jmp @f
  620.     .no_red_4:
  621.     call draw_main_cursor
  622.     pop dx
  623.     mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
  624.   @@:
  625.   cmp ah,79 ;181 ;End
  626.   jne @f
  627.     push dx
  628.     call draw_cursor_sumb
  629.     call CurMoveX_LastChar
  630.     cmp dl,8
  631.     jne .no_red_5
  632.       call OnInitialUpdate
  633.       call draw_main_win
  634.       pop dx
  635.       jmp @f
  636.     .no_red_5:
  637.     call draw_main_cursor
  638.     pop dx
  639.     mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
  640.   @@:
  641.   cmp ah,73 ;184 ;PageUp
  642.   jne @f
  643.     push dx
  644.     call CurMovePageUp
  645.     cmp dl,0
  646.     pop dx
  647.     je @f
  648.     call OnInitialUpdate
  649.     call draw_main_win
  650.   @@:
  651.   cmp ah,81 ;183 ;PageDown
  652.   jne @f
  653.     push dx
  654.     call CurMovePageDown
  655.     cmp dl,0
  656.     pop dx
  657.     je @f
  658.     call OnInitialUpdate
  659.     call draw_main_win
  660.     mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
  661.   @@:
  662. ;-------------------------------------------------
  663.     cmp [keyUpr],0
  664.     jne still
  665.   .key_MoveCur:
  666.  
  667.   cmp ah,69 ;[Pause Break]
  668.   je still
  669.   cmp ah,120 ;[Fn]
  670.   je still
  671.   cmp ah,0x80 ;if key up
  672.   ja still
  673.   call KeyConvertToASCII
  674.  
  675.   ;mov [dragk],0 ;çàêàí÷èâàåì âûäåëåíèå îò êëàâèàòóðû
  676.  
  677.   push ebx
  678.   xor ebx,ebx
  679.   mov bl,ah
  680.   add ebx,EvChar ;add char to text
  681.   cmp byte [ebx],1
  682.   jne @f
  683.     push esi edi
  684.     call SetUndo
  685.     mov bx,0x0101
  686.     call SelTextDel
  687.     mov esi,1
  688.     mov byte [key_new],ah
  689.     mov edi,dword key_new
  690.     cmp [curMod],1
  691.     je .no_ins_mod
  692.       call TextDel
  693.       xor bl,1
  694.     .no_ins_mod:
  695.     call TextAdd
  696.     call draw_but_toolbar
  697.     cmp byte [key_new],13
  698.     jne .dr_m_win
  699.       call draw_main_win
  700.       jmp .dr_cur_l
  701.     .dr_m_win:
  702.       call draw_cur_line
  703.     .dr_cur_l:
  704.     pop edi esi
  705.   @@:
  706.   pop ebx
  707.  
  708.   cmp ah,8 ;[<-]
  709.   jne @f
  710.     push ax bx
  711.     call SetUndo
  712.  
  713.     mov bx,0x0001
  714.     call SelTextDel
  715.     cmp al,1
  716.     je .del_one_b
  717.       call TextDel
  718.     .del_one_b:
  719.     call draw_but_toolbar
  720.     call draw_main_win
  721.     pop bx ax
  722.   @@:
  723.  
  724.   cmp ah,182 ;Delete
  725.   jne @f
  726.     push ax bx
  727.     call SetUndo
  728.  
  729.     mov bx,0x0101
  730.     call SelTextDel
  731.     cmp al,1
  732.     je .del_one_d
  733.       call TextDel
  734.     .del_one_d:
  735.     call draw_but_toolbar
  736.     call draw_main_win
  737.     pop bx ax
  738.   @@:
  739.  
  740.   cmp ah,185 ;Ins
  741.   jne @f
  742.     call draw_cursor_sumb
  743.     xor [curMod],1
  744.     call draw_main_cursor
  745.   @@:
  746.  
  747.   jmp still
  748.  
  749. button:
  750. ;  cmp [menu_active],1 ;åñëè íàæàëè ìåíþ, òî ñíà÷àëà ðåàêöèÿ íà ìåíþ
  751. ;  jne @f ;mouse.menu_bar_1
  752. ;    mov [menu_active],0
  753. ;    jmp still
  754. ;  @@:
  755.  
  756.   mcall 17 ;ïîëó÷èòü êîä íàæàòîé êíîïêè
  757.   cmp ah,3
  758.   jne @f
  759.     call but_NewFile
  760.   @@:
  761.   cmp ah,4
  762.   jne @f
  763.     call but_OpenFile
  764.   @@:
  765.   cmp ah,5
  766.   jne @f
  767.     call but_SaveFile
  768.   @@:
  769.   cmp ah,6
  770.   jz  but_select_word
  771.   cmp ah,7
  772.   jz  but_cut
  773.   cmp ah,8
  774.   jne @f
  775.     call but_Copy
  776.   @@:
  777.   cmp ah,9
  778.   jz  but_paste
  779.   cmp ah,10
  780.   jz  but_find
  781.   cmp ah,11
  782.   jz  but_replace
  783.   cmp ah,12
  784.   jz  but_find_key_w
  785.   cmp ah,13
  786.   jz  but_sumb_upper
  787.   cmp ah,14
  788.   jz  but_sumb_lover
  789.   cmp ah,15
  790.   jz  but_reverse
  791.   cmp ah,16
  792.   jz  but_undo
  793.   cmp ah,17
  794.   jz  but_redo
  795.   cmp ah,18
  796.   jz  but_sumb_invis
  797.   cmp ah,19
  798.   jz  but_k_words_show
  799.   cmp ah,20
  800.   jz  but_synt_show
  801.  
  802.   cmp ah,200
  803.   jne @f
  804.     call but_OpenSyntax
  805.   @@:
  806.   cmp ah,201
  807.   jne @f
  808.     call but_FindText
  809.   @@:
  810.  
  811.   cmp ah,1
  812.   jne still
  813. .exit:
  814.   ;push eax
  815.   call CanSave
  816.   cmp al,1
  817.   jne @f
  818.     push thread
  819.     push msgbox_8
  820.     call [mb_create] ;message: save changes in file?
  821.     jmp still
  822.   @@:
  823.   mov ecx,[tex]
  824.   call mem_Free
  825.   mov ecx,[bmp_icon]
  826.   call mem_Free
  827.   mov ecx,[options_file]
  828.   call mem_Free
  829.   push dword tree1
  830.   call dword[tl_data_clear]
  831.   mcall -1 ;âûõîä èç ïðîãðàììû
  832.  
  833.  
  834.  
  835. txtErrOpen db '¥ ­ ©¤¥­ ä ©«, ¯à®¢¥àì⥠¯à ¢¨«ì­®áâì ¨¬¥­¨',0
  836. txtErrIni0 db '¥ ®âªàë«áï ä ©« á ¨ª®­ª ¬¨',0
  837. err_ini0 db 0
  838.  
  839. edit1 edit_box 250, 220, 5, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_cmd_lin, mouse_dd, 0
  840. edit2 edit_box TE_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0
  841.  
  842. buf_cmd_lin db 302 dup(0)
  843. buf_find db 302 dup(0)
  844.  
  845. err_message_found_lib0   db 'Sorry I cannot found library box_lib.obj',0
  846. head_f_i0:
  847. head_f_l0         db 'System error',0
  848. err_message_import0      db 'Error on load import library box_lib.obj',0
  849. err_message_found_lib1  db 'Sorry I cannot found library msgbox.obj',0
  850. ;head_f_i1:
  851. ;head_f_l1      db 'System error',0
  852. err_message_import1     db 'Error on load import library msgbox.obj',0
  853.  
  854. ;library structures
  855. l_libs_start:
  856.   lib0 l_libs boxlib_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l0, myimport,err_message_import0, head_f_i0
  857.   lib1 l_libs msgbox_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l0, msgbox_lib_import, err_message_import1, head_f_i0
  858. load_lib_end:
  859.  
  860.  
  861. i_end:
  862.   align 16
  863.   procinfo process_information
  864.   thread:
  865.     rb 1024
  866. stacktop:
  867.   sys_path:
  868.     rb 4096
  869.   file_name:
  870.     rb 4096
  871.   file_name_rez:
  872.     rb 4096
  873.   file_info:
  874.     rb 40
  875. mem:
  876.