Subversion Repositories Kolibri OS

Rev

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