Subversion Repositories Kolibri OS

Rev

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

  1. struct FileInfoBlock
  2.         Function dd ?
  3.         Position dd ?
  4.         Flags    dd ?
  5.         Count    dd ?
  6.         Buffer   dd ?
  7.                 db ?
  8.         FileName dd ?
  9. ends
  10.  
  11. struct symbol
  12.         c db ?    ; +0 символ
  13.         col db ?  ; +1 цвет
  14.         perv dd ? ; +2
  15.         next dd ? ; +6 указатели
  16.         tc dd ?   ;+10 врем. создания
  17.         td dd ?   ;+14 врем. удаления
  18. ends
  19.  
  20. sc system_colors
  21.  
  22. bmp_icon dd 0
  23. run_file_70 FileInfoBlock        
  24.  
  25.  
  26. ;input:
  27. ; al = код ошибки
  28. align 4
  29. ted_on_init_synt_err:
  30.         mov byte[msgbox_3.err],'0'
  31.         add byte[msgbox_3.err],al
  32.         stdcall [mb_create],msgbox_3,thread ;message: Can-t open color options file!
  33.         ret
  34.  
  35.  
  36. align 4
  37. ted_but_new_file:
  38.   push eax ebx
  39.   stdcall [ted_can_save], tedit0
  40.   cmp al,1
  41.   jne @f
  42.     stdcall [mb_create],msgbox_2,thread ;message: save changes in file?
  43.     ;mov eax,5
  44.     ;mov ebx,50
  45.     ;int 0x40
  46.     stdcall [mb_setfunctions],msgbox_2_funct
  47.     jmp .ret_f
  48.   @@:
  49.   call On_NewFile
  50.   .ret_f:
  51.   pop ebx eax
  52.   ret
  53.  
  54. align 4
  55. On_NewFile:
  56.   stdcall [ted_clear], tedit0,1
  57.   call draw_but_toolbar
  58.   stdcall [ted_draw], tedit0
  59.   ret
  60.  
  61. align 4
  62. On_SaveAndNewFile:
  63.   push edi
  64.   mov edi, tedit0
  65.  
  66.   stdcall [ted_but_save_file],edi,run_file_70,[edit1.text]
  67.   cmp ted_err_save,0
  68.   jne @f
  69.     call On_NewFile
  70.   @@:
  71.   pop edi
  72.   ret
  73.  
  74. ;description:
  75. ; функция открытия файла без окна сообщения
  76. align 4
  77. but_no_msg_OpenFile:
  78.         push eax ebx
  79.         stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
  80.         call ted_messages_after_open_file
  81.         pop ebx eax
  82.         ret
  83.  
  84. ;description:
  85. ; функция открытия файла с возможным окном сообщения (о возможности отменить открытие)
  86. align 4
  87. ted_but_open_file:
  88.         pushad
  89.  
  90.         stdcall [ted_can_save], tedit0
  91.         cmp al,1
  92.         jne @f
  93.                 stdcall [mb_create],msgbox_5,thread ;message: save changes in file?
  94.                 stdcall [mb_setfunctions],msgbox_5_funct
  95.                 jmp .ret_f
  96.         .no_msg: ;метка для вызова функции через кнопку в сообщении msgbox_5
  97.                 pushad
  98.         @@:
  99.  
  100.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  101.         mov [OpenDialog_data.type],0
  102.         stdcall [OpenDialog_Start],OpenDialog_data
  103.         cmp [OpenDialog_data.status],2
  104.         jne @f
  105.                 stdcall mem_spac, msgbox_9.fdp,100
  106.                 mov esi,file_name
  107.                 call strlen
  108.                 cmp eax,100
  109.                 jle .no_crop
  110.                         mov eax,100
  111.                 .no_crop:
  112.                 stdcall mem_copy, esi,msgbox_9.fdp,eax
  113.                 stdcall [mb_create],msgbox_9,thread ;message: error run 'open file dialog'
  114.                 jmp .ret_f
  115.         @@:
  116.         cmp [OpenDialog_data.status],1
  117.         jne .ret_f
  118.                 mov esi,[OpenDialog_data.openfile_path]
  119.                 call strlen
  120.                 mov [edit1.size],eax
  121.                 mov [edit1.pos],eax
  122.                 stdcall [edit_box_draw], edit1
  123.  
  124.                 ;ищем есть ли файл подсветки для открываемого текстового файла
  125.                 mov edx,[edit1.text]
  126.                 add edx,eax
  127.                 .f_beg:
  128.                 cmp byte[edx],'.'
  129.                 je .found
  130.                         dec edx
  131.                         cmp edx,[edit1.text]
  132.                         jg .f_beg
  133.                 .found:
  134.                 inc edx ;edx - указатель на расширение открытого файла
  135.  
  136.                 mov ebx,synt_auto_open
  137.                 .cycle_0:
  138.                         add ebx,32
  139.                         stdcall strcmp,ebx,edx ;сравниваем расширение открытого файла со значениями открытыми с ini файла
  140.                         test eax,eax
  141.                         jz .ok
  142.                         add ebx,32
  143.                         cmp byte[ebx],0
  144.                         jne .cycle_0
  145.                 jmp .end_0
  146.                 .ok: ;открытие файла подсветки в зависимости от найденного расширения
  147.                         sub ebx,32
  148.                         ;mov ecx,ebx
  149.                         ;mcall 71,1
  150.                         call open_unpac_synt_file
  151.                 .end_0:
  152.  
  153.                 stdcall [ted_open_file], tedit0,run_file_70,[edit1.text]
  154.                 call ted_messages_after_open_file
  155.  
  156.         .ret_f:
  157.         popad
  158.         ret
  159.  
  160. ;description:
  161. ; копирование памяти
  162. align 4
  163. proc mem_copy, source:dword, destination:dword, len:dword
  164.   push ecx esi edi
  165.     cld
  166.     mov esi, dword[source]
  167.     mov edi, dword[destination]
  168.     mov ecx, dword[len]
  169.     rep movsb
  170.   pop edi esi ecx
  171.   ret
  172. endp
  173.  
  174. ;description:
  175. ; заполнение памяти пробелами
  176. align 4
  177. proc mem_spac, mem:dword, len:dword
  178.   push eax ecx edi
  179.     cld
  180.     mov al,' '
  181.     mov edi, dword[mem]
  182.     mov ecx, dword[len]
  183.     repne stosb
  184.   pop edi ecx eax
  185.   ret
  186. endp
  187.  
  188. ;input:
  189. ; eax = код ошибки
  190. ; ebx = колличество прочитанных байт
  191. align 4
  192. ted_messages_after_open_file:
  193.         push ecx edi
  194.         cmp eax,0
  195.         je @f
  196.         cmp eax,6
  197.         je @f
  198.                 cmp ax,10
  199.                 jl .zifra_0_9
  200.                         mov al,'?'
  201.                         sub ax,48
  202.                 .zifra_0_9:
  203.                 add ax,48
  204.  
  205.                 mov byte[msgbox_4.err],al
  206.                 stdcall [mb_create],msgbox_4,thread ;message: Can-t open text file!
  207.                 jmp .ret_f
  208.         @@:
  209.         cmp ebx,-1
  210.         je .ret_f
  211.                 ;if open file
  212.                 mov edi,tedit0
  213.                 mov ecx,ted_max_chars
  214.                 sub ecx,2 ;ecx = максимальное число байт, для которых была выделена память
  215.                 cmp ebx,ecx
  216.                 jl .ret_f
  217.                         stdcall [mb_create],msgbox_1,thread
  218.         .ret_f:
  219.         pop edi ecx
  220.         ret
  221.  
  222. align 4
  223. ted_save_err_msg:
  224.         mov byte[msgbox_6.err],al
  225.         stdcall [mb_create],msgbox_6,thread ;message: Can-t save text file!
  226.         ret
  227.  
  228. ;description:
  229. ; функция нажатия на кнопку [Применить] в панели синтаксиса
  230. align 4
  231. proc ted_but_open_syntax uses eax ebx ecx edi, edit:dword
  232.         mov edi,dword[edit]
  233.         cmp ted_panel_id,TED_PANEL_SYNTAX
  234.         jne @f
  235.                 stdcall dword[tl_node_get_data], tree1
  236.                 pop dword[fn_col_option]
  237.                 mov ebx,dword[fn_col_option]
  238.                 call open_unpac_synt_file
  239.                 cmp ebx,-1
  240.                 je @f
  241.  
  242.                 call [ted_text_colored]
  243.                 stdcall [ted_draw],edi
  244.         @@:
  245.         ret
  246. endp
  247.  
  248. ;открытие и распаковка файла подсветки синтаксиса
  249. ;input:
  250. ; ebx - указатель на имя открываемого файла синтаксиса (без пути и папки info)
  251. ;output:
  252. ; ebx - число прочитанных байт из файла
  253. ; ecx - разрушается
  254. align 4
  255. open_unpac_synt_file:
  256. push eax edi esi
  257.         mov edi,last_open_synt_file
  258.         stdcall strcmp,ebx,edi ;сравниваем имя подключенного файла с подключенным ранее файлом
  259.         test eax,eax
  260.         jz @f
  261.  
  262.         ;копируем имя подключенного файла (для избежания повторных подключений)
  263.         mov esi,ebx
  264.         mov ecx,32
  265.         cld
  266.         rep movsb
  267.  
  268.         copy_path ebx,fn_syntax_dir,file_name_rez,0
  269.         copy_path file_name_rez,sys_path,file_name,0
  270.         mov edi, tedit0
  271.         mov [run_file_70.Function], 0
  272.         mov [run_file_70.Position], 0
  273.         mov [run_file_70.Flags], 0
  274.         mov ecx, ted_syntax_file_size
  275.         mov dword[run_file_70.Count], ecx
  276.         m2m dword[run_file_70.Buffer], ted_syntax_file
  277.         mov byte[run_file_70+20], 0
  278.         mov [run_file_70.FileName], file_name
  279.         mcall 70, run_file_70
  280.         cmp ebx,-1
  281.         jne .end_0
  282.                 call ted_on_init_synt_err
  283.                 jmp @f
  284.         .end_0:
  285.                 mov eax,ted_syntax_file
  286.                 cmp dword[eax],'KPCK'
  287.                 jne .end_unpack
  288.                 cmp dword[eax+4],ecx
  289.                 jg @f ;если для распакованого файла не хватает выделенной памяти
  290.                 cmp dword[unpac_mem],0
  291.                 jne .end_1
  292.                         ;выделение памяти для распаковки файла
  293.                         stdcall mem.Alloc,ecx
  294.                         mov [unpac_mem],eax
  295.                 .end_1:
  296.                 stdcall unpack,ted_syntax_file,[unpac_mem]
  297.                 mov edi,ted_syntax_file
  298.                 mov esi,[unpac_mem]
  299.                 mov ecx,[edi+4]
  300.                 cld
  301.                 rep movsb
  302.                 .end_unpack:
  303.                 stdcall [ted_init_syntax_file], tedit0
  304.         @@:
  305. pop esi edi eax
  306.         ret
  307.  
  308. ;description:
  309. ; вызов/скрытие панели поиска
  310. align 4
  311. proc ted_but_find
  312.   push edi
  313.   mov edi,tedit0
  314.  
  315.   cmp ted_panel_id,TED_PANEL_NULL
  316.   je @f
  317.     mov ted_panel_id,TED_PANEL_NULL
  318.     mov ted_wnd_l,0
  319.     jmp .e_if
  320.   @@:
  321.     mov ted_panel_id,TED_PANEL_FIND
  322.     mov ted_wnd_l,TED_PANEL_WIDTH
  323.   .e_if:
  324.   call EvSize
  325.   stdcall [ted_draw],edi
  326.   pop edi
  327.   ret
  328. endp
  329.  
  330. align 4
  331. ted_on_find_err:
  332.         stdcall [mb_create],msgbox_7,thread ;message: Can not find text
  333.         ret
  334.  
  335. ;description:
  336. ; кнопка [Заменить] на панели
  337. align 4
  338. but_replace:
  339.         ; пока не сделано
  340.         ret
  341.  
  342. ;description:
  343. ; функция поиска информации в списке ключевых слов
  344. align 4
  345. but_find_key_w:
  346.         cmp byte[wnd_k_words_run],0
  347.         jne @f
  348.                 pushad
  349.                 mcall 51,1,prop_start,thread_coords
  350.                 popad
  351.         @@:
  352.         ret
  353.  
  354. ;description:
  355. ; выделение/скрытие непечатаемых символов
  356. align 4
  357. proc but_sumb_invis, edit:dword
  358.   push edi
  359.   mov edi,dword[edit]
  360.  
  361.   xor ted_mode_invis,1
  362.   call draw_but_toolbar
  363.   stdcall [ted_draw],edi
  364.   pop edi
  365.   ret
  366. endp
  367.  
  368. ;description:
  369. ; выделение/скрытие ключевых слов
  370. align 4
  371. proc but_k_words_show, edit:dword
  372.   push edi
  373.   mov edi,dword[edit]
  374.  
  375.   xor ted_mode_color,1
  376.   cmp ted_mode_color,0
  377.   je @f
  378.     call [ted_text_colored]
  379.   @@:
  380.   call draw_but_toolbar
  381.   stdcall [ted_draw],edi
  382.   pop edi
  383.   ret
  384. endp
  385.  
  386. ;description:
  387. ; вызов/скрытие панели с файлами синтаксиса
  388. align 4
  389. proc but_synt_show, edit:dword
  390.   push edi
  391.   mov edi,[edit]
  392.  
  393.   cmp ted_panel_id,TED_PANEL_NULL
  394.   je @f
  395.     mov ted_panel_id,TED_PANEL_NULL
  396.     mov ted_wnd_l,0
  397.     jmp .e_if
  398.   @@:
  399.     mov ted_panel_id,TED_PANEL_SYNTAX
  400.     mov ted_wnd_l,TED_PANEL_WIDTH
  401.   .e_if:
  402.   call EvSize
  403.   stdcall [ted_draw],edi
  404.   pop edi
  405.   ret
  406. endp
  407.