Subversion Repositories Kolibri OS

Rev

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

  1. ;Огромная благодарность всем, кто помогал: кодом/советом/дизайном ...
  2.  
  3. use32
  4.   org 0x0
  5.   db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт
  6.   dd 0x01
  7.   dd start
  8.   dd i_end ; размер приложения
  9.   dd mem
  10.   dd stacktop
  11.   dd file_name ; command line
  12.   dd sys_path
  13.  
  14. MAX_COLOR_WORD_LEN equ 40
  15. maxChars equ 100002 ;(...+2)
  16. BUF_SIZE equ 4096 ;buffer for copy|paste
  17. maxSyntaxFileSize equ 410000
  18. TOOLBAR_ICONS_SIZE equ 1200*20
  19.  
  20. include '../../proc32.inc'
  21. ;include '../../config.inc'
  22. include '../../macros.inc'
  23. include '../../dll.inc'
  24. include '../../develop/libraries/box_lib/load_lib.mac'
  25. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  26. include '../../system/desktop/trunk/kglobals.inc'
  27. include '../../system/desktop/trunk/unpacker.inc'
  28. include 'lang.inc'
  29.  
  30. include 't_data.inc'
  31. include 't_menu.inc'
  32. include 'strlen.inc'
  33. include 't_draw.inc' ;draw main window functions
  34. include 't_button.inc' ;text work functions
  35. include 'wnd_k_words.inc'
  36.  
  37. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load
  38.  
  39.  
  40. ;Макрос для загрузки изображений с использованием библиотеки libimg.obj
  41. ;для использования макроса нужны переменные:
  42. ; - run_file_70 FileInfoBlock
  43. ; - image_data dd 0
  44. macro load_image_file path,buf,size
  45. {
  46.         ;path - может быть переменной или строковым параметром
  47.         if path eqtype '' ;проверяем задан ли строкой параметр path
  48.                 jmp @f
  49.                         local .path_str
  50.                         .path_str db path ;формируем локальную переменную
  51.                         db 0
  52.                 @@:
  53.                 ;32 - стандартный адрес по которому должен быть буфер с системным путем
  54.                 copy_path .path_str,[32],file_name,0x0
  55.         else
  56.                 copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
  57.         end if
  58.  
  59.         stdcall mem.Alloc, dword size ;выделяем память для изображения
  60.         mov [buf],eax
  61.  
  62.         mov eax,70 ;70-я функция работа с файлами
  63.         mov [run_file_70.Function], 0
  64.         mov [run_file_70.Position], 0
  65.         mov [run_file_70.Flags], 0
  66.         mov [run_file_70.Count], dword size
  67.         m2m [run_file_70.Buffer], [buf]
  68.         mov byte[run_file_70+20], 0
  69.         mov [run_file_70.FileName], file_name
  70.         mov ebx,run_file_70
  71.         int 0x40 ;загружаем файл изображения
  72.         cmp ebx,0xffffffff
  73.         je @f
  74.                 ;определяем вид изображения и переводим его во временный буфер image_data
  75.                 stdcall dword[img_decode], dword[buf],ebx,0
  76.                 mov dword[image_data],eax
  77.                 ;преобразуем изображение к формату rgb
  78.                 stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
  79.                 ;удаляем временный буфер image_data
  80.                 stdcall dword[img_destroy], dword[image_data]
  81.         @@:
  82. }
  83.  
  84. image_data dd 0 ;указатель на временную память. для нужен преобразования изображения
  85. icon_tl_sys dd 0 ;указатель на память для хранения системных иконок
  86.  
  87. align 4
  88. start:
  89.         mcall 48,3,sc,sizeof.system_colors
  90.  
  91.         mcall 68,11
  92.         or eax,eax
  93.         jz button.exit
  94.  
  95.         mcall 66,1,1 ;scan code
  96.         mcall 40,0xC0000027
  97.  
  98.         mov esi,file_name
  99.         call strlen
  100.         mov ecx,eax
  101.         mov edi,openfile_path
  102.         cld
  103.         rep movsb ;копируем имя файла в буфер openfile_path
  104.  
  105. load_libraries l_libs_start,load_lib_end
  106.  
  107. ;проверка на сколько удачно загузились библиотеки
  108. mov     ebp,lib0
  109. .test_lib_open:
  110.         cmp     dword [ebp+ll_struc_size-4],0
  111.         jz      @f
  112.         mcall -1 ;exit not correct
  113. @@:
  114.         add ebp,ll_struc_size
  115.         cmp ebp,load_lib_end
  116.         jl .test_lib_open
  117.  
  118. ;---------------------------------------------------------------------
  119.         stdcall [ted_init], tedit0
  120.         stdcall dword[tl_data_init], tree1
  121.  
  122. ; OpenDialog initialisation
  123.         stdcall [OpenDialog_Init],OpenDialog_data
  124.  
  125. ; kmenu initialisation 
  126.         stdcall [kmenu_init], sc
  127.        
  128.         stdcall [ksubmenu_new]
  129.         mov [main_menu], eax
  130.        
  131.         stdcall [ksubmenu_new]
  132.         mov [main_menu_file], eax
  133.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_New, 3
  134.         stdcall [ksubmenu_add], [main_menu_file], eax
  135.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Open, 4
  136.         stdcall [ksubmenu_add], [main_menu_file], eax
  137.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Save, 5
  138.         stdcall [ksubmenu_add], [main_menu_file], eax
  139.         stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
  140.         stdcall [ksubmenu_add], [main_menu_file], eax
  141.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_File_Exit, 199
  142.         stdcall [ksubmenu_add], [main_menu_file], eax  
  143.         stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_File, [main_menu_file]
  144.         stdcall [ksubmenu_add], [main_menu], eax
  145.  
  146.         stdcall [ksubmenu_new]
  147.         mov [main_menu_changes], eax
  148.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Changes_Undo, 16
  149.         stdcall [ksubmenu_add], [main_menu_changes], eax
  150.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Changes_Redo, 17
  151.         stdcall [ksubmenu_add], [main_menu_changes], eax
  152.         stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_Changes, [main_menu_changes]
  153.         stdcall [ksubmenu_add], [main_menu], eax
  154.        
  155.         stdcall [ksubmenu_new]
  156.         mov [main_menu_buf], eax
  157.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Buf_Cut, 7
  158.         stdcall [ksubmenu_add], [main_menu_buf], eax
  159.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Buf_Copy, 8
  160.         stdcall [ksubmenu_add], [main_menu_buf], eax
  161.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Buf_Paste, 9
  162.         stdcall [ksubmenu_add], [main_menu_buf], eax   
  163.         stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_Buf, [main_menu_buf]
  164.         stdcall [ksubmenu_add], [main_menu], eax
  165.  
  166.         stdcall [ksubmenu_new]
  167.         mov [main_menu_search], eax
  168.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Search_Text, 10
  169.         stdcall [ksubmenu_add], [main_menu_search], eax
  170.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Search_Keywords, 12
  171.         stdcall [ksubmenu_add], [main_menu_search], eax
  172.         stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_Search, [main_menu_search]
  173.         stdcall [ksubmenu_add], [main_menu], eax
  174.  
  175.         stdcall [ksubmenu_new]
  176.         mov [main_menu_view], eax
  177.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_UseSyntax, 19
  178.         stdcall [ksubmenu_add], [main_menu_view], eax
  179.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_ChooseSyntax, 20
  180.         stdcall [ksubmenu_add], [main_menu_view], eax
  181.         stdcall [kmenuitem_new], KMENUITEM_SEPARATOR, 0, 0
  182.         stdcall [ksubmenu_add], [main_menu_view], eax
  183.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Veiw_LineBreak, 18
  184.         stdcall [ksubmenu_add], [main_menu_view], eax  
  185.         stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_View, [main_menu_view]
  186.         stdcall [ksubmenu_add], [main_menu], eax
  187.  
  188.         stdcall [ksubmenu_new]
  189.         mov [main_menu_encoding], eax
  190.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Encoding_1251to866, 21
  191.         stdcall [ksubmenu_add], [main_menu_encoding], eax
  192.         stdcall [kmenuitem_new], KMENUITEM_NORMAL, sz_main_menu_Encoding_866to1251, 22
  193.         stdcall [ksubmenu_add], [main_menu_encoding], eax      
  194.         stdcall [kmenuitem_new], KMENUITEM_SUBMENU, sz_main_menu_Encoding, [main_menu_encoding]
  195.         stdcall [ksubmenu_add], [main_menu], eax
  196.        
  197. ; init toolbar file
  198.         load_image_file 'te_icon.png', bmp_icon,TOOLBAR_ICONS_SIZE*2 ;умножение на 2 для серых кнопок
  199.         mov eax,[bmp_icon]
  200.         add eax,TOOLBAR_ICONS_SIZE
  201.         stdcall img_to_gray, [bmp_icon],eax,(TOOLBAR_ICONS_SIZE)/3
  202. ;---------------------------------------------------------------------
  203. ; читаем файл с курсорами и линиями
  204.         load_image_file 'tl_sys_16.png', icon_tl_sys,54+3*256*13
  205.         mov eax,dword[icon_tl_sys]
  206.         mov dword[tree1.data_img_sys],eax
  207. ;---------------------------------------------------------------------
  208. ; читаем файл с иконками узлов
  209.         load_image_file 'tl_nod_16.png', icon_tl_sys,54+3*256*2
  210.         mov eax,dword[icon_tl_sys]
  211.         mov dword[tree1.data_img],eax
  212. ;------------------------------------------------------------------------------
  213.   copy_path fn_syntax_dir,sys_path,file_name,0x0 ;берем путь к папке с файлами синтаксиса
  214.   mov eax,70
  215.   mov ebx,tree_file_struct
  216.   int 0x40
  217.  
  218. cmp ebx,-1
  219. je .end_dir_init
  220.  
  221.   mov eax,dir_mem
  222.   add eax,32+4+1+3+4*6+8
  223. mov ecx,ebx
  224. @@:
  225.   cmp byte[eax],'.' ;фильтруем файлы с именами '.' и '..'
  226.   je .filter
  227.     ;0x10000 ;1*2^16 - где 1 номер иконки с книгой
  228.     stdcall dword[tl_node_add], eax,0x10000, tree1
  229.  
  230.     stdcall dword[tl_cur_next], tree1
  231.   .filter:
  232.   add eax,304
  233.   loop @b
  234.   stdcall dword[tl_cur_beg],tree1 ;ставим курсор на начало списка
  235. .end_dir_init:
  236.  
  237. ;--- load ini file ---
  238.         copy_path ini_name,sys_path,file_name,0
  239.         ;window startup pozition
  240.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_l,ini_def_window_l
  241.         mov word[wnd_s_pos+2],ax
  242.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_w,ini_def_window_w
  243.         mov word[wnd_s_pos],ax
  244.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_t,ini_def_window_t
  245.         mov word[wnd_s_pos+6],ax
  246.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_window_h,ini_def_window_h
  247.         mov word[wnd_s_pos+4],ax
  248.         ;scrool type
  249.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_scroll_type,ini_def_scroll_type
  250.         mov [wScr.type],eax
  251.         mov [hScr.type],eax
  252.         mov [ws_dir_lbox.type],eax
  253.     mov [w_scr_t3.type],eax
  254.         ;symbol size
  255.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_symbol_w,ini_def_symbol_w
  256.         mov dword[tedit0.rec.width],eax
  257.         stdcall dword[ini_get_int],file_name,ini_sec_window,key_symbol_h,ini_def_symbol_h
  258.         mov dword[tedit0.rec.height],eax
  259.         lea eax,[eax+eax*2]
  260.         mov dword[tedit0.rec.top],eax
  261.         ;файловые расширения
  262.         xor edx,edx
  263.         mov ebx,synt_auto_open
  264.         @@:
  265.                 ;берем имя файла
  266.                 stdcall dword[ini_get_str],file_name,ini_sec_options,key_synt_file,ebx,32,ini_def_synt_f
  267.                 cmp byte[ebx],0
  268.                 je @f
  269.                 inc byte[key_synt_file.numb]
  270.                 add ebx,32
  271.                 ;берем расширения
  272.                 stdcall dword[ini_get_str],file_name,ini_sec_options,key_synt_ext,ebx,32,ini_def_synt_f
  273.                 inc byte[key_synt_ext.numb]
  274.                 add ebx,32
  275.                 inc edx
  276.                 cmp edx,max_synt_auto_open
  277.                 jl @b
  278.         @@:
  279.  
  280. ;--- load color option file ---
  281.         mov ebx,dword[fn_col_option]
  282.         call open_unpac_synt_file
  283.  
  284. ;--- get cmd line ---
  285.         cmp byte[openfile_path+3],0 ;openfile_path
  286.         je @f ;if file names exist
  287.                 mov esi,openfile_path
  288.                 call strlen ;eax=strlen
  289.                 call but_no_msg_OpenFile
  290.         @@:
  291.  
  292.  
  293.  
  294. align 4
  295. red_win:
  296.   call draw_window
  297.  
  298. align 4
  299. still:
  300.         mcall 10
  301.         cmp dword[exit_code],1
  302.         je button.exit
  303.  
  304.         cmp al,1 ;изменилось положение окна
  305.         jz red_win
  306.         cmp al,2
  307.         jz key
  308.         cmp al,3
  309.         jz button
  310.         cmp al,6 ;мышь
  311.         jne @f
  312.                 jmp mouse
  313.         @@:
  314.         jmp still
  315.  
  316. align 4
  317. draw_window:
  318.         mcall 12,1
  319.  
  320.         mov edx,[sc.work]
  321.         or  edx,0x73000000
  322.         mov edi,hed
  323.         mcall 0,dword[wnd_s_pos],dword[wnd_s_pos+4]
  324.  
  325.         mcall 9,procinfo,-1
  326.         mov edi,tedit0 ;значение edi нужно для EvSize и ted_wnd_t
  327.         call EvSize
  328.  
  329.         mov eax,13 ;верхний прямоугольник, для очистки верхней панели
  330.         xor ebx,ebx
  331.         mov ecx,ted_wnd_t
  332.         mov bx,word[procinfo.client_box.width]
  333.         inc bx
  334.         int 0x40
  335.  
  336.         call draw_but_toolbar
  337.        
  338.         stdcall [kmainmenu_draw], [main_menu]
  339.  
  340.         stdcall [ted_draw], tedit0
  341.  
  342.         mcall 12,2
  343.         ret
  344.  
  345. align 4
  346. mouse:
  347.         stdcall [kmainmenu_dispatch_cursorevent], [main_menu]
  348.         stdcall [ted_mouse], tedit0
  349.  
  350.         cmp byte[tedit0.panel_id],TED_PANEL_FIND ;if not panel
  351.         jne @f
  352.                 stdcall [edit_box_mouse], dword edit2
  353.         @@:
  354.         cmp byte[tedit0.panel_id],TED_PANEL_SYNTAX ;if not panel
  355.         jne .mouse_end
  356.         stdcall [tl_mouse], tree1
  357. .mouse_end:
  358.         jmp still
  359. ;---------------------------------------------------------------------
  360.  
  361. ;output:
  362. ; ah = symbol
  363. align 4
  364. proc KeyConvertToASCII, table:dword
  365.   push ebx
  366.   mov ebx,dword[table] ;convert scan to ascii
  367.   ror ax,8
  368.   xor ah,ah
  369.   add bx,ax
  370.   mov ah,byte[ebx]
  371.   pop ebx
  372.   ret
  373. endp
  374.  
  375. align 4
  376. key:
  377.   mcall 66,3 ;66.3 получить состояние управляющих клавиш
  378.   xor esi,esi
  379.   mov ecx,1
  380.   test al,0x03 ;[Shift]
  381.   jz @f
  382.     mov cl,2
  383.     or esi,KM_SHIFT
  384.   @@:
  385.   test al,0x0c ;[Ctrl]
  386.   jz @f
  387.     or esi,KM_CTRL
  388.   @@:
  389.   test al,0x30 ;[Alt]
  390.   jz @f
  391.     mov cl,3
  392.     or esi,KM_ALT
  393.   @@:
  394.   test al,0x80 ;[NumLock]
  395.   jz @f
  396.     or esi,KM_NUMLOCK
  397.   @@:
  398.  
  399.   mcall 26,2,,conv_tabl ;26.2 получить раскладку клавиатуры
  400.   mcall 2 ;получаем код нажатой клавиши
  401.   stdcall [tl_key], tree1
  402.  
  403.   test word [edit2.flags],10b;ed_focus ; если не в фокусе, выходим
  404.   je @f
  405.     cmp ah,0x80 ;if key up
  406.     ja still
  407.     cmp ah,42 ;[Shift] (left)
  408.     je still
  409.     cmp ah,54 ;[Shift] (right)
  410.     je still
  411.     cmp ah,56 ;[Alt]
  412.     je still
  413.     cmp ah,29 ;[Ctrl]
  414.     je still
  415.     cmp ah,69 ;[Pause Break]
  416.     je still
  417.  
  418.     stdcall KeyConvertToASCII, dword conv_tabl
  419.     stdcall [edit_box_key], dword edit2
  420.     jmp still
  421.   @@:
  422.  
  423.   stdcall [ted_key], tedit0, conv_tabl,esi
  424.   jmp still
  425.  
  426. align 4
  427. button:
  428.  
  429.   mcall 17 ;получить код нажатой кнопки
  430.   cmp ah,3
  431.   jne @f
  432.     call ted_but_new_file
  433.   @@:
  434.   cmp ah,4
  435.   jne @f
  436.     call ted_but_open_file
  437.   @@:
  438.   cmp ah,5
  439.   jne @f
  440.     call ted_but_save_file
  441.   @@:
  442.   cmp ah,6
  443.   jne @f
  444.     stdcall [ted_but_select_word], tedit0
  445.   @@:
  446.   cmp ah,7
  447.   jne @f
  448.     stdcall [ted_but_cut], tedit0
  449.   @@:
  450.   cmp ah,8
  451.   jne @f
  452.     stdcall [ted_but_copy], tedit0
  453.   @@:
  454.   cmp ah,9
  455.   jne @f
  456.     stdcall [ted_but_paste], tedit0
  457.   @@:
  458.   cmp ah,10
  459.   jne @f
  460.     call ted_but_find
  461.   @@:
  462.   cmp ah,11
  463.   jne @f
  464.     call but_replace
  465.   @@:
  466.   cmp ah,12
  467.   jne @f
  468.     call but_find_key_w
  469.   @@:
  470.   cmp ah,13
  471.   jne @f
  472.     stdcall [ted_but_sumb_upper], tedit0
  473.   @@:
  474.   cmp ah,14
  475.   jne @f
  476.     stdcall [ted_but_sumb_lover], tedit0
  477.   @@:
  478.   cmp ah,15
  479.   jne @f
  480.     stdcall [ted_but_reverse], tedit0
  481.   @@:
  482.   cmp ah,16
  483.   jne @f
  484.     stdcall [ted_but_undo], tedit0
  485.   @@:
  486.   cmp ah,17
  487.   jne @f
  488.     stdcall [ted_but_redo], tedit0
  489.   @@:
  490.   cmp ah,18
  491.   jne @f
  492.     stdcall but_sumb_invis, tedit0
  493.   @@:
  494.   cmp ah,19
  495.   jne @f
  496.     stdcall but_k_words_show, tedit0
  497.   @@:
  498.   cmp ah,20
  499.   jne @f
  500.     stdcall but_synt_show, tedit0
  501.   @@:
  502.   cmp ah,21
  503.   jne @f
  504.     stdcall [ted_but_convert_by_table],tedit0,tbl_1251_866
  505.   @@:
  506.   cmp ah,22
  507.   jne @f
  508.     stdcall [ted_but_convert_by_table],tedit0,tbl_866_1251
  509.   @@:
  510.  
  511.   cmp ah,200
  512.   jne @f
  513.     stdcall ted_but_open_syntax, tedit0
  514.   @@:
  515.   cmp ah,201
  516.   jne @f
  517.     stdcall [ted_but_find_next], tedit0
  518.   @@:
  519.  
  520.   cmp ah,1
  521.   je .exit
  522.  
  523.   cmp ah,199
  524.   je .exit
  525.  
  526.   jmp still
  527. .exit:
  528.         cmp dword[exit_code],1
  529.         je @f
  530.         stdcall [ted_can_save], tedit0
  531.         cmp al,1
  532.         jne @f
  533.                 stdcall [mb_create],msgbox_2,thread ;message: save buf in file?
  534.                 stdcall [mb_setfunctions],msgbox_2E_funct
  535.                 jmp still
  536.         @@:
  537.         stdcall mem.Free,[bmp_icon]
  538.         cmp dword[unpac_mem],0
  539.         je @f
  540.                 stdcall mem.Free,[unpac_mem]
  541.         @@:
  542.  
  543.         stdcall [ted_delete], tedit0
  544.         stdcall dword[tl_data_clear], tree1
  545.         mcall -1 ;выход из программы
  546.  
  547. edit2 edit_box TED_PANEL_WIDTH-1, 0, 20, 0xffffff, 0xff80, 0xff0000, 0xff, 0x4080, 300, buf_find, mouse_dd, 0
  548.  
  549. unpac_mem dd 0
  550.  
  551. if lang eq ru
  552.   head_f_i:
  553.   head_f_l db 'Системная ошибка',0
  554.   err_message_found_lib0 db 'Не найдена библиотека ',39,'box_lib.obj',39,0
  555.   err_message_import0 db 'Ошибка при импорте библиотеки ',39,'box_lib.obj',39,0
  556.   err_message_found_lib1 db 'Не найдена библиотека ',39,'msgbox.obj',39,0
  557.   err_message_import1 db 'Ошибка при импорте библиотеки ',39,'msgbox.obj',39,0
  558.   err_message_found_lib2 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0
  559.   err_message_import2 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0
  560.   err_message_found_lib_3 db 'Не найдена библиотека ',39,'libimg.obj',39,0
  561.   err_message_import_3 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,0
  562.   err_message_found_lib_4 db 'Не найдена библиотека ',39,'libini.obj',39,0
  563.   err_message_import_4 db 'Ошибка при импорте библиотеки ',39,'libini.obj',39,0
  564.   err_message_found_lib_5 db 'Не найдена библиотека ',39,'libkmenu.obj',39,0
  565.   err_message_import_5 db 'Ошибка при импорте библиотеки ',39,'libkmenu.obj',39,0
  566. else
  567.   head_f_i:
  568.   head_f_l db 'System error',0
  569.   err_message_found_lib0 db 'Sorry I cannot found library ',39,'box_lib.obj',39,0
  570.   err_message_import0 db 'Error on load import library ',39,'box_lib.obj',39,0
  571.   err_message_found_lib1 db 'Sorry I cannot found library ',39,'msgbox.obj',39,0
  572.   err_message_import1 db 'Error on load import library ',39,'msgbox.obj',39,0
  573.   err_message_found_lib2 db 'Sorry I cannot found library ',39,'proc_lib.obj',39,0
  574.   err_message_import2 db 'Error on load import library ',39,'proc_lib.obj',39,0
  575.   err_message_found_lib_3 db 'Sorry I cannot found library ',39,'libimg.obj',39,0
  576.   err_message_import_3 db 'Error on load import library ',39,'libimg.obj',39,0
  577.   err_message_found_lib_4 db 'Sorry I cannot found library ',39,'libini.obj',39,0
  578.   err_message_import_4 db 'Error on load import library ',39,'libini.obj',39,0
  579.   err_message_found_lib_5 db 'Sorry I cannot found library ',39,'libkmenu.obj',39,0
  580.   err_message_import_5 db 'Error on load import library ',39,'libkmenu.obj',39,0
  581. end if
  582.  
  583. ;library structures
  584. l_libs_start:
  585.         lib0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\
  586.                 err_message_found_lib0, head_f_l, import_box_lib,err_message_import0, head_f_i
  587.         lib1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\
  588.                 err_message_found_lib1, head_f_l, import_msgbox_lib, err_message_import1, head_f_i
  589.         lib2 l_libs lib_name_2, sys_path, file_name, system_dir_2,\
  590.                 err_message_found_lib2, head_f_l, import_proclib, err_message_import2, head_f_i
  591.         lib3 l_libs lib_name_3, sys_path, file_name, system_dir_3,\
  592.                 err_message_found_lib_3, head_f_l, import_libimg, err_message_import_3, head_f_i
  593.         lib4 l_libs lib_name_4, sys_path, file_name, system_dir_4,\
  594.                 err_message_found_lib_4, head_f_l, import_libini, err_message_import_4, head_f_i
  595.         lib5 l_libs lib_name_5, sys_path, file_name, system_dir_5,\
  596.                 err_message_found_lib_5, head_f_l, import_libkmenu, err_message_import_5, head_f_i
  597. load_lib_end:
  598.  
  599. IncludeIGlobals
  600. hed db 'TextEdit '
  601. i_end:
  602.         openfile_path: ;полный путь к файлу с которым идет работа
  603.                 rb 4096
  604.         dir_mem rb 32+304*count_of_dir_list_files
  605.         wnd_s_pos: ;место для настроек стартовой позиции окна
  606.                 rq 1
  607.         last_open_synt_file rb 32 ;имя последнего подключенного файла синтаксиса
  608.         buf rb BUF_SIZE ;буфер для копирования и вставки
  609.         buf_find rb 302 ;буфер для поиска текста
  610. IncludeUGlobals
  611.         align 16
  612.         procinfo process_information
  613.                 rb 1024
  614.         thread:
  615.         rb 1024
  616.     thread_coords:
  617.         rb 4096
  618. stacktop:
  619.         sys_path: ;путь откуда запустился исполняемый файл
  620.                 rb 4096
  621.         file_name: ;параметры запуска
  622.                 rb 4096
  623.         syntax_path: ;имя подключаемого файла синтаксиса
  624.                 rb 4096
  625.         plugin_path:
  626.                 rb 4096
  627.         text_work_area: ;путь к файлу, который показывается в окне
  628.                 rb 4096
  629.         filename_area: ;имя файла для диалога открытия/закрытия
  630.                 rb 256
  631.         file_info:
  632.                 rb 40
  633. mem:
  634.