Subversion Repositories Kolibri OS

Rev

Rev 7861 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. use32
  2.   org 0
  3.   db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
  4.   dd 1, start, i_end, mem, stacktop, file_name, sys_path
  5.  
  6. MAX_COLOR_WORD_LEN equ 40
  7. BUF_SIZE equ 4096 ;buffer for copy|paste
  8. CAPT_PATH_WIDTH equ 50 ;ширина подписи перед текстовым полем
  9.  
  10. include '../../macros.inc'
  11. include '../../proc32.inc'
  12. include '../../KOSfuncs.inc'
  13. include '../../load_img.inc'
  14. include '../../load_lib.mac'
  15. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  16. include '../../system/skincfg/trunk/kglobals.inc'
  17. include '../../system/skincfg/trunk/unpacker.inc'
  18. include 'te_data.inc'
  19. include 'te_work.inc' ;text work functions
  20.  
  21. @use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  22.  
  23. icon_tl_sys dd 0 ;указатель на память для хранения системных иконок
  24.  
  25. align 4
  26. start:
  27.         mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors
  28.  
  29.         mcall SF_SYS_MISC,SSF_HEAP_INIT
  30.         or eax,eax
  31.         jz button.exit
  32.  
  33.         mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 ;scan code
  34.         mcall SF_SET_EVENTS_MASK,0xC0000027
  35.  
  36.         load_libraries l_libs_start,load_lib_end
  37.  
  38.         ;проверка на сколько удачно загузилась библиотека
  39.         cmp dword[lib0+ll_struc_size-4],0
  40.         jz @f
  41.                 mcall -1 ;exit not correct
  42.         @@:
  43.  
  44. ;---------------------------------------------------------------------
  45.         stdcall [tl_data_init], tree1
  46.  
  47. ; читаем файл с курсорами и линиями
  48.         include_image_file '..\..\media\log_el\trunk\tl_sys_16.png', icon_tl_sys
  49.         mov eax,[icon_tl_sys]
  50.         mov [tree1.data_img_sys],eax
  51. ;---------------------------------------------------------------------
  52. ; читаем bmp файл с иконками узлов
  53.         include_image_file '..\t_edit\tl_nod_16.png', icon_tl_sys
  54.         mov eax,[icon_tl_sys]
  55.         mov [tree1.data_img],eax
  56. ;------------------------------------------------------------------------------
  57.         copy_path fn_syntax_dir,sys_path,file_name,0 ;берем путь к папке с файлами синтаксиса
  58.         mcall SF_FILE,tree_file_struct
  59.  
  60.         cmp ebx,2
  61.         jg @f
  62.                 notify_window_run file_name ;сообщение если не удалось открыть файлы
  63.                 jmp .end_dir_init
  64.         @@:
  65.         ;cmp ebx,0
  66.         ;jle .end_dir_init
  67.                 mov eax,dir_mem+32+40
  68.                 mov ecx,ebx
  69.                 @@:
  70.                         cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..'
  71.                         je .filter
  72.                         stdcall [tl_node_add],tree1,0x10000,eax ;1*2^16 - где 1 номер иконки с книгой
  73.                         stdcall [tl_cur_next],tree1
  74.                 .filter:
  75.                         add eax,304
  76.                 loop @b
  77.                 stdcall [tl_cur_beg],tree1 ;ставим курсор на начало списка
  78.                 or dword[tree1.style], tl_cursor_pos_limited ;ограничиваем движение курсора в пределах списка
  79.         .end_dir_init:
  80.  
  81.         xor eax,eax
  82.         inc eax
  83.         mov [scrol_w1.type],eax
  84.         mov [scrol_h1.type],eax
  85.         mov [ws_dir_lbox.type],eax
  86.  
  87. ;--- load color option file ---
  88. stdcall [ted_init], tedit0
  89. mov byte[file_name],0
  90.  
  91. align 4
  92. red_win:
  93.         call draw_window
  94.  
  95. align 4
  96. still:
  97.   mcall SF_WAIT_EVENT
  98.  
  99.   cmp al,1 ;изм. положение окна
  100.   jz red_win
  101.   cmp al,2
  102.   jz key
  103.   cmp al,3
  104.   jz button
  105.   cmp al,6
  106.   jz mouse
  107.  
  108.   jmp still
  109.  
  110.  
  111. align 4
  112. draw_window:
  113.         pushad
  114.         mcall SF_REDRAW,SSF_BEGIN_DRAW
  115.  
  116.         mov edx,[sc.work]
  117.         or  edx,0x33000000
  118.         mov edi,hed
  119.         mcall SF_CREATE_WINDOW,<10,555>,<10,333>
  120.  
  121.         mcall SF_THREAD_INFO,procinfo,-1
  122.         mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t
  123.         call EvSize
  124.  
  125.         mov esi,[sc.work_button];0xd0
  126.         mcall SF_DEFINE_BUTTON,5*65536+90,195*65536+20,200
  127.  
  128.         mov ebx,100*65536+85
  129.         mov ecx,195*65536+20
  130.         mov edx,201
  131.         mov esi,0xd00000
  132.         mcall
  133.  
  134.         mov ecx,[sc.work_button_text]
  135.         or  ecx,0x80000000
  136.         mcall SF_DRAW_TEXT,10*65536+200,,txt_load_f
  137.  
  138.         mov ecx,0xffff00
  139.         or  ecx,0x80000000
  140.         mcall ,105*65536+200,,txt_save_f
  141.  
  142.         mov ecx,[sc.work_text]
  143.         or  ecx,0x80000000
  144.         mcall ,195*65536+10,,txt_inp_file
  145.  
  146.         add ebx,20
  147.         mov edx,txt_out_file
  148.         int 0x40
  149.  
  150.         stdcall [PathShow_draw], PathShow_data_1
  151.        
  152.         stdcall [edit_box_draw], edit1
  153.         stdcall [tl_draw], tree1
  154.  
  155.         ;scroll 1
  156.         mov [ws_dir_lbox.all_redraw],1
  157.         stdcall [scrollbar_ver_draw],ws_dir_lbox
  158.         stdcall [ted_draw], tedit0
  159.  
  160.         mcall SF_REDRAW,SSF_END_DRAW
  161.         popad
  162.         ret
  163.  
  164. MIN_M_WND_H equ 100 ;минимальная высота главного окна
  165. ;input:
  166. ; edi = pointer to tedit struct
  167. align 4
  168. EvSize:
  169.         pushad
  170.         mov ebx,ted_scr_h
  171.         mov esi,ted_scr_w
  172.  
  173.         m2m ted_wnd_w,[procinfo.client_box.width] ;ставим ширину окна редактора равной ширине всего окна
  174.         mov eax,ted_wnd_l
  175.         sub ted_wnd_w,eax ;отнимаем отступ слева
  176.         movzx eax,word[esi+sb_offs_size_x]
  177.         sub ted_wnd_w,eax ;отнимаем ширину верт. скроллинга
  178.  
  179.         m2m ted_wnd_h,[procinfo.client_box.height] ;ставим высоту окна редактора равной высоте всего окна
  180.         cmp ted_wnd_h,MIN_M_WND_H
  181.         jg @f
  182.                 mov ted_wnd_h,MIN_M_WND_H
  183.         @@:
  184.  
  185.         movzx eax,word[ebx+sb_offs_size_y]
  186.         sub ted_wnd_h,eax             ;отнимаем высоту гориз. скроллинга
  187.         mov eax,ted_wnd_t
  188.         sub ted_wnd_h,eax             ;отнимаем отступ сверху
  189.  
  190.         stdcall [ted_init_scroll_bars], tedit0,2
  191.         popad
  192.         ret
  193.  
  194. align 4
  195. mouse:
  196.         stdcall [tl_mouse],tree1
  197.         stdcall [edit_box_mouse],edit1
  198.         stdcall [ted_mouse], tedit0
  199.         jmp still
  200.  
  201. ;output:
  202. ; ah = symbol
  203. align 4
  204. proc KeyConvertToASCII, table:dword
  205.         push ebx
  206.         mov ebx,dword[table] ;convert scan to ascii
  207.         shr ax,8
  208.         add bx,ax
  209.         mov ah,byte[ebx]
  210.         pop ebx
  211.         ret
  212. endp
  213.  
  214. align 4
  215. key:
  216.         mcall SF_KEYBOARD,SSF_GET_CONTROL_KEYS ;66.3 получить состояние управляющих клавиш
  217.         xor esi,esi
  218.         mov ecx,1
  219.         test al,3 ;[Shift]
  220.         jz @f
  221.                 mov cl,2
  222.                 or esi,KM_SHIFT
  223.         @@:
  224.         test al,0x0c ;[Ctrl]
  225.         jz @f
  226.                 or esi,KM_CTRL
  227.         @@:
  228.         test al,0x30 ;[Alt]
  229.         jz @f
  230.                 mov cl,3
  231.                 or esi,KM_ALT
  232.         @@:
  233.         test al,0x80 ;[NumLock]
  234.         jz @f
  235.                 or esi,KM_NUMLOCK
  236.         @@:
  237.  
  238.         mcall SF_SYSTEM_GET,SSF_KEYBOARD_LAYOUT,,conv_tabl ;26.2 получить раскладку клавиатуры
  239.         mcall SF_GET_KEY
  240.         stdcall [tl_key],tree1
  241.  
  242.         test word [edit1.flags],10b;ed_focus ; если не в фокусе, выходим
  243.         je @f
  244.                 cmp ah,0x80 ;if key up
  245.                 ja still
  246.                 cmp ah,42 ;[Shift] (left)
  247.                 je still
  248.                 cmp ah,54 ;[Shift] (right)
  249.                 je still
  250.                 cmp ah,56 ;[Alt]
  251.                 je still
  252.                 cmp ah,29 ;[Ctrl]
  253.                 je still
  254.                 cmp ah,69 ;[Pause Break]
  255.                 je still
  256.  
  257.                 stdcall KeyConvertToASCII, conv_tabl
  258.                 stdcall [edit_box_key],edit1
  259.                 jmp still
  260.         @@:
  261.  
  262.         stdcall [ted_key], tedit0, conv_tabl,esi
  263.         jmp still
  264.  
  265. align 4
  266. button:
  267.         mcall SF_GET_BUTTON
  268.  
  269.         cmp ah,200
  270.         jne @f
  271.                 call but_OpenSyntax
  272.         @@:
  273.         cmp ah,201
  274.         jne @f
  275.                 call but_SaveSyntax
  276.         @@:
  277.  
  278.         cmp ah,1
  279.         jne still
  280. .exit:
  281.         stdcall mem.Free,[options_file]
  282.         stdcall mem.Free,[unpac_mem]
  283.  
  284.         stdcall [tl_data_clear], tree1
  285.         stdcall [ted_delete], tedit0
  286.         mcall SF_TERMINATE_PROCESS ;выход из программы
  287.  
  288. align 4
  289. but_OpenSyntax:
  290. push eax
  291.         stdcall [tl_node_get_data],tree1
  292.         mov [fn_col_option],eax
  293.         call InitColText
  294. pop eax
  295.         ret
  296.  
  297. align 4
  298. but_SaveSyntax:
  299.         stdcall [ted_save_file], tedit0,run_file_70,[edit1.text]
  300.         ret
  301.  
  302. ;description:
  303. ; функция вызываемую при нажатии Ctrl+N,O,F,S,H,G
  304. align 4
  305. proc ted_but_ctrl_all uses eax, opt_key:dword
  306.         mov eax,[opt_key]
  307.         cmp al,'N' ;Ctrl+N
  308.         jne @f
  309.                 call but_ctrl_n
  310.                 jmp .end0
  311.         @@:
  312.         cmp al,'O' ;Ctrl+O
  313.         jne @f
  314.                 call but_ctrl_o
  315.         @@:
  316.         ;cmp al,'S' ;Ctrl+S
  317.         ;cmp al,'F' ;Ctrl+F
  318.         ;cmp al,'G' ;Ctrl+G
  319.         ;cmp al,'H' ;Ctrl+H
  320.         .end0:
  321.         ret
  322. endp
  323.  
  324. align 4
  325. but_ctrl_o:
  326.         push eax
  327.         call get_wnd_in_focus
  328.         or eax,eax
  329.         jz @f
  330.                 stdcall [ted_open_file], eax,str_file_70,[edit1.text]
  331.         @@:
  332.         pop eax
  333.         ret
  334.  
  335. ;создание нового файла
  336. align 4
  337. but_ctrl_n:
  338.         push eax
  339.         call get_wnd_in_focus
  340.         or eax,eax
  341.         jz @f
  342.                 stdcall [ted_clear], eax,1
  343.                 stdcall [ted_draw], eax
  344.         @@:
  345.         pop eax
  346.         ret
  347.  
  348. ;определяем какое из окон редактора в фокусе
  349. align 4
  350. get_wnd_in_focus:
  351.         xor eax,eax
  352.         cmp dword[el_focus],tedit0
  353.         jne @f
  354.                 mov eax,tedit0
  355.         @@:
  356.         ;cmp dword[el_focus],tedit1
  357.         ;jne @f
  358.         ;       mov eax,tedit1
  359.         ;@@:
  360.         ret
  361.  
  362. hed db 'TextEditor syntax file converter 18.12.20',0 ;подпись окна
  363. conv_tabl rb 128 ; таблица для конвертирования scan-кода в ascii-код
  364.  
  365. txt_load_f db 'Загр. файл',0
  366. txt_save_f db 'Сохр. файл',0
  367. txt_inp_file db 'Исх. файл:',0
  368. txt_out_file db 'Вых. файл:',0
  369.  
  370. ;library structures
  371. l_libs_start:
  372.         lib0 l_libs lib_name_0, file_name, system_dir_0, import_box_lib
  373.         lib1 l_libs lib_name_1, file_name, system_dir_1, import_libimg
  374. load_lib_end:
  375.  
  376. IncludeIGlobals
  377.  
  378. align 16
  379. i_end:
  380. IncludeUGlobals
  381.         procinfo process_information
  382.         rb 1024
  383. thread:
  384.         rb 1024
  385. stacktop:
  386.         sys_path rb 4096
  387.         file_name rb 4096
  388.         file_name_rez rb 4096
  389. mem:
  390.