Subversion Repositories Kolibri OS

Rev

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

  1. use32
  2.         org 0x0
  3.         db 'MENUET01'
  4.         dd 0x1
  5.         dd start
  6.         dd i_end
  7.         dd mem
  8.         dd stacktop
  9.         dd buf_cmd_lin
  10.         dd sys_path
  11.  
  12. include '../../macros.inc'
  13. include '../../proc32.inc'
  14. include '../../develop/libraries/box_lib/load_lib.mac'
  15. include '../../develop/libraries/box_lib/trunk/box_lib.mac'
  16. include '../../dll.inc'
  17. include '../../system/skincfg/trunk/kglobals.inc'
  18. include '../../system/skincfg/trunk/unpacker.inc'
  19. include 'strlen.inc'
  20. include 'obj_codes.inc'
  21.  
  22. @use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load
  23.  
  24. hed db 'kol_f_edit 16.11.15',0
  25.  
  26. sizeof.TreeList equ 20 ;need for element 'tree_list'
  27.  
  28. BUF_STRUCT_SIZE equ 21
  29. buf2d_data equ dword[edi] ;данные буфера изображения
  30. buf2d_w equ dword[edi+8] ;ширина буфера
  31. buf2d_h equ dword[edi+12] ;высота буфера
  32. buf2d_l equ word[edi+4] ;отступ слева
  33. buf2d_t equ word[edi+6] ;отступ сверху
  34. buf2d_size_lt equ dword[edi+4] ;отступ слева и справа для буфера
  35. buf2d_color equ dword[edi+16] ;цвет фона буфера
  36. buf2d_bits equ byte[edi+20] ;количество бит в 1-й точке изображения
  37.  
  38.  
  39. MAX_CED_OBJECTS equ 200
  40. MAX_OPT_FIELDS equ 11
  41. MAX_OBJ_TYPES equ 17 ;максимальное число объектов
  42. MAX_OBJ_CAPTIONS equ 1000 ;размер дополнительных подписей подписей
  43. WND_CAPT_COLOR equ 0xb0d0ff
  44. BUF_SIZE equ 1000
  45.  
  46. ;modif
  47. BIT_MOD_ACI equ 0 ;первоначальные настройки элементов
  48. BIT_MOD_ACM equ 1 ;события от мыши
  49. BIT_MOD_ACD equ 2 ;данные объектов
  50. BIT_MOD_ABU equ 3 ;связывание кнопок
  51. BIT_MOD_WI_CAPT equ 0 ;стиль окна подпись
  52. BIT_MOD_WI_CORD_OTN_CL_OBL equ 1 ;стиль окна координаты относительно клиентской области
  53. BIT_MOD_WI_REDR equ 2 ;стиль окна перерисовка окна
  54. BIT_MOD_WI_GRAD equ 3 ;стиль окна градиент
  55. BIT_MOD_CHE equ 0 ; ch_flag_en - выбран CheckBox
  56. BIT_MOD_CHE_T equ 1 ;сверху
  57. BIT_MOD_CHE_M equ 2 ;по центру
  58. BIT_MOD_CHE_B equ 3 ;снизу
  59. BIT_MOD_TXT_ASCII_0 equ 0 ;текст заканчив. 0
  60. BIT_MOD_TXT_NO_TRAN equ 1 ;текст прозрачный
  61. BIT_MOD_TXT_CHAR2 equ 2 ;текст 2-м шрифтом
  62. BIT_MOD_EDIT_FOC equ 0 ;EditBox в фокусе
  63. BIT_MOD_EDIT_FIO equ 1 ;
  64. ;CPP_MOD_RE_GR equ 1 ;градиентный прямоугольник
  65. BIT_MOD_BUT_NFON equ 0 ;стиль Button не рисовать кнопку
  66. BIT_MOD_BUT_NBORD equ 1 ;стиль Button не рисовать границу
  67. BIT_MOD_IMPORT_FUNCT_COMMENT equ 0 ;коментировать функцию
  68.  
  69. macro load_image_file path,buf,size { ;макрос для загрузки изображений
  70.         ;path - может быть переменной или строковым параметром
  71.         if path eqtype '' ;проверяем задан ли строкой параметр path
  72.                 jmp @f
  73.                         local .path_str
  74.                         .path_str db path ;формируем локальную переменную
  75.                         db 0
  76.                 @@:
  77.                 ;32 - стандартный адрес по которому должен быть буфер с системным путем
  78.                 copy_path .path_str,[32],file_name,0
  79.         else
  80.                 copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
  81.         end if
  82.  
  83.         stdcall mem.Alloc, dword size ;выделяем память для изображения
  84.         mov [buf],eax
  85.  
  86.         mov [run_file_70.Function], 0
  87.         mov [run_file_70.Position], 0
  88.         mov [run_file_70.Flags], 0
  89.         mov [run_file_70.Count], dword size
  90.         m2m [run_file_70.Buffer], eax
  91.         mov byte[run_file_70+20], 0
  92.         mov [run_file_70.FileName], file_name
  93.         mcall 70,run_file_70 ;загружаем файл изображения
  94.         cmp ebx,0xffffffff
  95.         je @f
  96.                 ;определяем вид изображения и переводим его во временный буфер image_data
  97.                 stdcall dword[img_decode], dword[buf],ebx,0
  98.                 mov dword[image_data],eax
  99.                 ;преобразуем изображение к формату rgb
  100.                 stdcall dword[img_to_rgb2], dword[image_data],dword[buf]
  101.                 ;удаляем временный буфер image_data
  102.                 stdcall dword[img_destroy], dword[image_data]
  103.         @@:
  104. }
  105.  
  106. struct FileInfoBlock
  107.         Function dd ?
  108.         Position dd ?
  109.         Flags    dd ?
  110.         Count    dd ?
  111.         Buffer   dd ?
  112.         rezerv   db ?
  113.         FileName dd ?
  114. ends
  115.  
  116. struct object
  117.         id dd ? ;идентификатор объекта
  118.         txt rb MAX_LEN_OBJ_TXT ;текстовые свойства
  119.         lvl db 0
  120.         clo db 0
  121.         typid dd ? ;номер объекта определяющего тип переменной
  122.         modif dd ? ;битовые свойства
  123. ends
  124.  
  125. struct ObjOpt
  126.         dd ?
  127.         bl_type db ?
  128.         graph db ?
  129.         info rb 30
  130.         caption rb MAX_OPT_CAPTION
  131.         Col rw MAX_OPT_FIELDS
  132.         img rw MAX_OPT_FIELDS ;индексы картинок (в файле 'icon.bmp')
  133.         bit_prop dd 0 ;битовые свойства (подписи, названия)
  134.         bit_val dd 0 ;битовые свойства (значения, константы)
  135. ends
  136.  
  137. SKIN_H equ 22
  138. SKIN_W1 equ 5
  139. SKIN_W2 equ 7
  140. SKIN_W3 equ 23
  141. fn_skin_1 db 'left.bmp',0
  142. fn_skin_2 db 'base.bmp',0
  143. fn_skin_3 db 'oper.bmp',0
  144. IMAGE_FILE_SKIN1_SIZE equ 3*(SKIN_W1+3)*SKIN_H+54
  145. IMAGE_FILE_SKIN2_SIZE equ 3*(SKIN_W2+3)*SKIN_H+54
  146. IMAGE_FILE_SKIN3_SIZE equ 3*(SKIN_W3+3)*SKIN_H+54
  147.  
  148. IMAGE_FILE_FONT1_SIZE equ 96*144*3 ;размер файла с 1-м системным шрифтом
  149.  
  150. fn_icon db 'icon.bmp',0
  151. count_main_icons equ 35 ;число иконок в файле icon.bmp
  152. bmp_icon rb 0x300*count_main_icons
  153.  
  154. TREE_ICON_SYS16_BMP_SIZE equ 256*3*11+54 ;размер bmp файла с системными иконками
  155. icon_tl_sys dd 0 ;указатеель на память для хранения системных иконок
  156. icon_font_s1 dd 0 ;указатель на временную память для загрузки шрифта
  157.  
  158. fn_syntax db 'asm.syn',0 ;имя загружаемого файла синтаксиса
  159.  
  160. ;макрос для проверки битового свойства
  161. macro test_bool_prop obj_reg,n_prop
  162. {
  163.         bt dword[obj_reg+u_object.modif-u_object],n_prop
  164. }
  165.  
  166. include 'ced_wnd_m.inc'
  167. include 'ced_wnd_prop.inc' ;файл с функциями окна свойств объекта
  168. include 'ced_constr.inc' ;файл с функциями окна конструктора
  169. include 'ced_code_g.inc' ;файл с функциями генерирования кодов
  170.  
  171. align 4
  172. start:
  173.         load_libraries l_libs_start,load_lib_end
  174.  
  175.         ;проверка на сколько удачно загузилась наша либа
  176.         mov     ebp,lib0
  177.         cmp     dword [ebp+ll_struc_size-4],0
  178.         jz      @f
  179.                 mcall -1 ;exit not correct
  180.         @@:
  181.         mov     ebp,lib1
  182.         cmp     dword [ebp+ll_struc_size-4],0
  183.         jz      @f
  184.                 mcall -1 ;exit not correct
  185.         @@:
  186.         mov     ebp,lib2
  187.         cmp     dword [ebp+ll_struc_size-4],0
  188.         jz      @f
  189.                 mcall -1 ;exit not correct
  190.         @@:
  191.         mov     ebp,lib3
  192.         cmp     dword [ebp+ll_struc_size-4],0
  193.         jz      @f
  194.                 mcall -1 ;exit not correct
  195.         @@:
  196.  
  197.         ;задание размеров полей со свойствами
  198.         mov eax,prop_edits_top
  199.         mov ebx,16+6 ;ширина иконки + отступы
  200.         mov edi,edit2
  201.         @@:
  202.                 mov ed_top,eax ;отступ сверху
  203.                 mov ed_left,ebx ;отступ слева
  204.                 add edi,ed_struc_size
  205.                 add eax,prop_edits_height
  206.                 cmp edi,prop_wnd_edits_end
  207.                 jl @b
  208.  
  209.         stdcall [buf2d_create], buf_fon
  210.  
  211.         mcall 48,3,sc,sizeof.system_colors
  212.         mcall 40,0x27
  213.  
  214.         stdcall dword[tl_data_init], tree1
  215.         stdcall dword[tl_data_init], tree2
  216.  
  217.         copy_path fn_icon,sys_path,file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой
  218.         mov [run_file_70.Function], 0
  219.         mov [run_file_70.Position], 54
  220.         mov [run_file_70.Flags], 0
  221.         mov [run_file_70.Count], 0x300*count_main_icons
  222.         mov [run_file_70.Buffer], bmp_icon
  223.         mov [run_file_70.rezerv], 0
  224.         mov [run_file_70.FileName], file_name
  225.         mcall 70,run_file_70
  226.  
  227.         cmp ebx,-1
  228.         mov [err_ini0],1
  229.         je @f ;if open file
  230.                 mov [err_ini0],0
  231.                 mov dword[tree1.data_img],bmp_icon
  232.                 mov dword[tree2.data_img],bmp_icon
  233.         @@:
  234.  
  235.         ;системные иконки 16*16 для tree_list
  236.         load_image_file 'tl_sys_16.png', icon_tl_sys,TREE_ICON_SYS16_BMP_SIZE
  237.         ;если изображение не открылось, то в icon_tl_sys будут
  238.         ;не инициализированные данные, но ошибки не будет, т. к. буфер нужного размера
  239.         mov eax,dword[icon_tl_sys]
  240.         mov dword[tree1.data_img_sys],eax
  241.         mov dword[tree2.data_img_sys],eax
  242.  
  243.         ;1-й файл скина
  244.         load_image_file fn_skin_1, icon_font_s1,IMAGE_FILE_SKIN1_SIZE
  245.         stdcall [buf2d_create_f_img], buf_skin1,[icon_font_s1] ;создаем буфер
  246.         stdcall mem.Free,[icon_font_s1] ;освобождаем память
  247.         ;2-й файл скина
  248.         load_image_file fn_skin_2, icon_font_s1,IMAGE_FILE_SKIN2_SIZE
  249.         stdcall [buf2d_create_f_img], buf_skin2,[icon_font_s1] ;создаем буфер
  250.         stdcall mem.Free,[icon_font_s1] ;освобождаем память
  251.         ;3-й файл скина
  252.         load_image_file fn_skin_3, icon_font_s1,IMAGE_FILE_SKIN3_SIZE
  253.         stdcall [buf2d_create_f_img], buf_skin3,[icon_font_s1] ;создаем буфер
  254.         stdcall mem.Free,[icon_font_s1] ;освобождаем память
  255.  
  256.         ;символы 1-го системного шрифта
  257.         load_image_file 'font6x9.bmp', icon_font_s1,IMAGE_FILE_FONT1_SIZE
  258.         stdcall [buf2d_create_f_img], buf_font,[icon_font_s1] ;создаем буфер
  259.         stdcall mem.Free,[icon_font_s1] ;освобождаем память
  260.         stdcall [buf2d_conv_24_to_8], buf_font,1 ;делаем буфер прозрачности 8 бит
  261.         stdcall [buf2d_convert_text_matrix], buf_font
  262.  
  263.  
  264.         copy_path fn_obj_opt,sys_path,fp_obj_opt,0
  265.         ;load options file
  266.         mov [run_file_70.Position], 0
  267.         mov [run_file_70.Count], sizeof.ObjOpt*MAX_OBJ_TYPES+MAX_OBJ_CAPTIONS
  268.         mov [run_file_70.Buffer], obj_opt
  269.         mov [run_file_70.FileName], fp_obj_opt
  270.         mcall 70,run_file_70
  271.  
  272.         cmp ebx,-1
  273.         mov [err_ini1],1
  274.         je .open_end ;jmp if not open file
  275.                 mov [err_ini1],0
  276.  
  277.                 mov eax,obj_opt ;добавляем объекты
  278.                 @@:
  279.                         mov ebx,dword[eax]
  280.                         cmp ebx,0
  281.                         je @f
  282.                         ;xor ecx,ecx ;в ecx будет индекс иконки
  283.                         mov cx,word[eax+obj_opt.img-obj_opt]
  284.                         cmp cx,0
  285.                         jge .zero
  286.                                 xor cx,cx ;что-бы не глючило с отрицательным индексом
  287.                         .zero:
  288.                         shl ecx,16
  289.                         stdcall dword[tl_node_add], tree1,ecx,eax ;добавляем название объекта
  290.                         stdcall dword[tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок
  291.                         add eax,sizeof.ObjOpt ;переход на следующий объект
  292.                         jmp @b
  293.                 @@:
  294.                 stdcall dword[tl_cur_beg], tree1 ;переносим курсор вверх
  295.  
  296.         .open_end:
  297.  
  298.         stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога
  299.         stdcall [ted_init], tedit0
  300.         copy_path fn_syntax,sys_path,file_name,0
  301.  
  302.         ; *** init syntax file ***
  303.         ; проверяем размер файла синтаксиса
  304.         mov [run_file_70.Function], 5
  305.         mov [run_file_70.Position], 0
  306.         mov [run_file_70.Flags], 0
  307.         mov dword[run_file_70.Count], 0
  308.         mov dword[run_file_70.Buffer], open_b
  309.         mov byte[run_file_70+20], 0
  310.         mov dword[run_file_70.FileName], file_name
  311.         mcall 70,run_file_70
  312.         cmp eax,0
  313.         jne @f
  314.  
  315.         mov edi,tedit0
  316.         mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
  317.         mov ted_syntax_file_size,ecx
  318.  
  319.         stdcall mem.Alloc,ecx ;выделяем память для файла синтаксиса
  320.         mov ted_syntax_file,eax
  321.  
  322.         ;пробуем открыть файл синтаксиса
  323.         call open_unpac_synt_file
  324.         jmp .end_0
  325.         @@:
  326.                 notify_window_run txt_not_syntax_file
  327.         .end_0:
  328.  
  329.         ;get cmd line
  330.         cmp [buf_cmd_lin],0
  331.         je @f ;if file names exist
  332.                 mov esi,buf_cmd_lin
  333.                 call strlen ;eax=strlen
  334.                 mov edi,[edit1.text]
  335.                 mov [edit1.size],eax
  336.                 mov ecx,eax
  337.                 rep movsb
  338.                 call but_open_proj
  339.         @@:
  340.  
  341.  
  342.  
  343. align 4
  344. red_win:
  345.         call draw_window
  346.  
  347. align 4
  348. still:
  349.         mcall 10
  350.  
  351.         cmp al,1
  352.         jne @f
  353.                 call draw_window
  354.         @@:
  355.         cmp al,2
  356.         jz key
  357.         cmp al,3
  358.         jz button
  359.         cmp al,6
  360.         jne @f
  361.                 call mouse
  362.         @@:
  363.  
  364.         jmp still
  365.  
  366. align 4
  367. draw_window:
  368. pushad
  369.         mcall 12,1
  370.  
  371.         xor eax,eax
  372.         mov ebx,20*65536+670
  373.         mov ecx,20*65536+370
  374.         mov edx,[sc.work]
  375.         or  edx,0x33000000
  376.         mov edi,hed
  377.         int 0x40
  378.  
  379.         mov eax,8 ;button 'Open Project'
  380.         mov esi,0x80ff
  381.         mov ebx,230*65536+18
  382.         mov ecx,5*65536+18
  383.         mov edx,5
  384.         int 0x40
  385.         stdcall draw_icon, 22,231,6 ;22 - open
  386.  
  387.         ;button 'Save Project'
  388.         mov ebx,250*65536+18
  389.         mov ecx,5*65536+18
  390.         mov edx,6
  391.         int 0x40
  392.         stdcall draw_icon, 17,251,6 ;17 - save
  393.  
  394.         ;button 'Show Constructor'
  395.         mov ebx,310*65536+18
  396.         mov ecx,5*65536+18
  397.         mov edx,11
  398.         int 0x40
  399.         stdcall draw_icon, 12,311,6 ;12 - window
  400.  
  401.         ;button 'Show Code'
  402.         mov ebx,330*65536+18
  403.         mov edx,12
  404.         int 0x40
  405.         stdcall draw_icon, 11,331,6 ;11 - text
  406.  
  407.         ;button 'Update: Code, Constructor'
  408.         mov ebx,350*65536+18
  409.         mov edx,13
  410.         int 0x40
  411.         stdcall draw_icon, 32,351,6 ;32 - update
  412.  
  413.         ;button 'Save Code'
  414.         mov ebx,370*65536+18
  415.         mov edx,14
  416.         int 0x40
  417.         stdcall draw_icon, 17,371,6 ;17 - save
  418.  
  419.         ;button ']P'
  420.         mov ebx,390*65536+18
  421.         mov edx,15
  422.         int 0x40
  423.         stdcall draw_icon, 18,391,6 ;18 - знак конца абзаца
  424.  
  425.         ;button 'Show color text'
  426.         mov ebx,410*65536+18
  427.         mov edx,16
  428.         int 0x40
  429.         stdcall draw_icon, 19,411,6
  430.  
  431.         ;button 'Add Object'
  432.         mov ebx,125*65536+18
  433.         mov ecx,30*65536+18
  434.         mov edx,31
  435.         int 0x40
  436.         stdcall draw_icon, 14,126,31 ;14 - add object
  437.  
  438.         ;button 'Move Up'
  439.         mov ebx,155*65536+18
  440.         mov edx,21
  441.         int 0x40
  442.         stdcall draw_icon, 23,156,31 ;23 - move up
  443.  
  444.         ;button 'Move Down'
  445.         mov ebx,175*65536+18
  446.         mov edx,22
  447.         int 0x40
  448.         stdcall draw_icon, 24,176,31 ;24 - move down
  449.  
  450.         ;button 'Copy'
  451.         mov ebx,195*65536+18
  452.         mov edx,23
  453.         int 0x40
  454.         stdcall draw_icon, 30,196,31 ;30 - copy
  455.  
  456.         ;button 'Paste'
  457.         mov ebx,215*65536+18
  458.         mov edx,24
  459.         int 0x40
  460.         stdcall draw_icon, 31,216,31 ;31 - paste
  461.  
  462.         ;button 'Property'
  463.         mov ebx,235*65536+18
  464.         mov edx,25
  465.         int 0x40
  466.         stdcall draw_icon, 7,236,31 ;7 - property
  467.  
  468.         ;button 'Undo'
  469.         mov ebx,255*65536+18
  470.         mov edx,26
  471.         int 0x40
  472.         stdcall draw_icon, 33,256,31 ;33 - undo
  473.  
  474.         ;button 'Redo'
  475.         mov ebx,275*65536+18
  476.         mov edx,27
  477.         int 0x40
  478.         stdcall draw_icon, 34,276,31 ;34 - redo
  479.  
  480. ; 10 30 50 70 90
  481.  
  482.         cmp [err_opn],1
  483.         jne @f
  484.                 mcall 4,10*65536+35,0x80ff0000,txtErrOpen
  485.         @@:
  486.  
  487.         stdcall [edit_box_draw], dword edit1
  488.         stdcall [edit_box_draw], dword edit_sav
  489.  
  490.         mov dword[w_scr_t1.all_redraw],1
  491.         ;stdcall [scrollbar_ver_draw],dword w_scr_t1
  492.         stdcall [tl_draw],dword tree1
  493.         mov dword[w_scr_t2.all_redraw],1
  494.         ;stdcall [scrollbar_ver_draw],dword w_scr_t2
  495.         stdcall [tl_draw],dword tree2
  496.  
  497.         cmp byte[show_mode],0 ;условие видимости окна конструктора
  498.         jne @f
  499.                 stdcall [buf2d_draw], buf_fon
  500.         @@:
  501.         cmp byte[show_mode],1 ;условие видимости текстового окна
  502.         jne @f
  503.                 stdcall [ted_draw], tedit0
  504.         @@:
  505.         mcall 12,2
  506. popad
  507.         ret
  508.  
  509. align 4
  510. mouse:
  511.         stdcall [edit_box_mouse], dword edit1
  512.         stdcall [edit_box_mouse], dword edit_sav
  513.         stdcall [tl_mouse], dword tree1
  514.         stdcall [tl_mouse], dword tree2
  515.         cmp byte[show_mode],1 ;условие видимости текстового окна
  516.         jne @f
  517.                 stdcall [ted_mouse], tedit0
  518.         @@:
  519.         ret
  520.  
  521.  
  522. align 4
  523. key:
  524.         mcall 2
  525.         stdcall [edit_box_key], dword edit1
  526.         stdcall [edit_box_key], dword edit_sav
  527.         stdcall [tl_key], dword tree1
  528.         stdcall [tl_key], dword tree2
  529.  
  530.         jmp still
  531.  
  532. align 4
  533. button:
  534.         mcall 17
  535.         cmp ah,5
  536.         jne @f
  537.                 call but_open_proj
  538.                 jmp still
  539.         @@:
  540.         cmp ah,6
  541.         jne @f
  542.                 call but_save_proj
  543.                 jmp still
  544.         @@:
  545.         ;cmp ah,10
  546.         ;jne @f
  547.                 ;call but_element_change
  548.         ;@@:
  549.         cmp ah,11
  550.         jne @f
  551.                 call but_show_constructor
  552.                 jmp still
  553.         @@:
  554.         cmp ah,12
  555.         jne @f
  556.                 call but_show_code
  557.                 jmp still
  558.         @@:
  559.         cmp ah,13
  560.         jne @f
  561.                 call but_update
  562.                 jmp still
  563.         @@:
  564.         cmp ah,14
  565.         jne @f
  566.                 call but_save_asm
  567.                 jmp still
  568.         @@:
  569.         cmp ah,15
  570.         jne @f
  571.                 call but_show_invis
  572.                 jmp still
  573.         @@:
  574.         cmp ah,16
  575.         jne @f
  576.                 call but_show_syntax
  577.                 jmp still
  578.         @@:
  579.         cmp ah,21
  580.         jne @f
  581.                 call but_obj_move_up
  582.                 jmp still
  583.         @@:
  584.         cmp ah,22
  585.         jne @f
  586.                 call but_obj_move_down
  587.                 jmp still
  588.         @@:
  589.         cmp ah,23
  590.         jne @f
  591.                 call but_obj_copy
  592.                 jmp still
  593.         @@:
  594.         cmp ah,24
  595.         jne @f
  596.                 call but_obj_paste
  597.                 jmp still
  598.         @@:
  599.         cmp ah,25
  600.         jne @f
  601.                 call on_file_object_select
  602.                 jmp still
  603.         @@:
  604.         cmp ah,26
  605.         jne @f
  606.                 stdcall [tl_info_undo], tree2
  607.                 stdcall [tl_draw], tree2
  608.                 jmp still
  609.         @@:
  610.         cmp ah,27
  611.         jne @f
  612.                 stdcall [tl_info_redo], tree2
  613.                 stdcall [tl_draw], tree2
  614.                 jmp still
  615.         @@:
  616.         cmp ah,31
  617.         jne @f
  618.                 call on_add_object
  619.                 jmp still
  620.         @@:
  621.         cmp ah,1
  622.         jne still
  623. .exit:
  624.         stdcall mem.Free,[icon_tl_sys]
  625.         mov dword[tree1.data_img],0
  626.         mov dword[tree2.data_img],0
  627.         mov dword[tree1.data_img_sys],0
  628.         mov dword[tree2.data_img_sys],0
  629.         stdcall dword[tl_data_clear], tree1
  630.         stdcall dword[tl_data_clear], tree2
  631.         stdcall [buf2d_delete],buf_fon ;удаляем буфер
  632.         stdcall [buf2d_delete],buf_font ;удаляем буфер  
  633.         stdcall [buf2d_delete],buf_skin1
  634.         stdcall [buf2d_delete],buf_skin2
  635.         stdcall [buf2d_delete],buf_skin3
  636.         stdcall [ted_delete], tedit0
  637.         cmp dword[unpac_mem],0
  638.         je @f
  639.                 stdcall mem.Free,[unpac_mem]
  640.         @@:
  641.         mcall -1
  642.  
  643. align 4
  644. open_file_data dd 0 ;указатель на память для открытия файлов
  645. open_file_size dd 0 ;размер открытого файла
  646.  
  647. align 4
  648. but_open_proj:
  649.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  650.         pushad
  651.         mov [OpenDialog_data.type],0
  652.         stdcall [OpenDialog_Start],OpenDialog_data
  653.         cmp [OpenDialog_data.status],2
  654.         je .open_end
  655.         ;код при удачном открытии диалога
  656.  
  657.         mov [run_file_70.Function], 5
  658.         mov [run_file_70.Position], 0
  659.         mov [run_file_70.Flags], 0
  660.         mov dword[run_file_70.Count], 0
  661.         mov dword[run_file_70.Buffer], open_b
  662.         mov byte[run_file_70+20], 0
  663.         mov dword[run_file_70.FileName], openfile_path
  664.         mcall 70,run_file_70
  665.  
  666.         mov ecx,dword[open_b+32] ;+32 qword: размер файла в байтах
  667.         mov [open_file_size],ecx
  668.         stdcall mem.ReAlloc,[open_file_data],ecx
  669.         mov [open_file_data],eax
  670.        
  671.         mov [run_file_70.Function], 0
  672.         mov [run_file_70.Position], 0
  673.         mov [run_file_70.Flags], 0
  674.         mov dword[run_file_70.Count], ecx
  675.         m2m dword[run_file_70.Buffer], eax
  676.         mov byte[run_file_70+20], 0
  677.         mov dword[run_file_70.FileName], openfile_path
  678.         mcall 70,run_file_70 ;загружаем файл
  679.         cmp ebx,0xffffffff
  680.         mov [err_opn],1
  681.         je .open_end ;if open file
  682.                 mov [err_opn],0
  683.                 stdcall [edit_box_set_text], edit1,openfile_path
  684.  
  685.                 stdcall dword[tl_info_clear], tree2
  686.                 mov eax,[open_file_data] ;добавляем объекты
  687.                 @@:
  688.                         mov ebx,dword[eax]
  689.                         cmp ebx,0
  690.                         je @f
  691.  
  692.                         call find_obj_in_opt ;edi = pointer to ObjOpt struct
  693.  
  694.                         mov cx,word[edi+obj_opt.img-obj_opt]
  695.                         cmp cx,0
  696.                         jge .zero
  697.                                 xor cx,cx ;что-бы не глючило с отрицательным индексом
  698.                         .zero:
  699.                         shl ecx,16 ;в ecx индекс иконки
  700.                         mov cl,byte[eax+u_object.lvl-u_object] ;уровень объекта
  701.  
  702.                         ;tl_node_close_open - не подходит, т.к. действует на узлы имеющие дочерние
  703.                         mov ch,byte[eax+u_object.clo-u_object] ;закрытый/открытый
  704.  
  705.                         stdcall dword[tl_node_add], tree2,ecx,eax ;добавляем объект
  706.  
  707.                         stdcall dword[tl_cur_next], tree2 ;переносим курсор вниз, что-бы не поменялся порядок
  708.                         add eax,sizeof.object ;переход на следующий объект
  709.                         jmp @b
  710.                 @@:
  711.                 stdcall dword[tl_cur_beg], tree2 ;переносим курсор вверх
  712.  
  713.                 mov [foc_obj],0
  714.                 call draw_constructor
  715.                 call code_gen
  716.         .open_end:
  717.         call draw_window ;перерисовка окна идет в любом случае, даже если файл не открылся
  718.         popad
  719.         ret
  720.  
  721. ;сохранение файла проэкта на диск
  722. align 4
  723. but_save_proj:
  724.         copy_path open_dialog_name,communication_area_default_path,file_name,0
  725.         pushad
  726.         mov [OpenDialog_data.type],1
  727.         stdcall [OpenDialog_Start],OpenDialog_data
  728.         cmp [OpenDialog_data.status],2
  729.         je .end_save_file
  730.         ;код при удачном открытии диалога
  731.  
  732.         ;берем размер памяти, необходимой для сохранения файла
  733.         xor ecx,ecx
  734.         stdcall [tl_node_poi_get_info], tree2,0
  735.         @@:
  736.                 cmp eax,0
  737.                 je @f
  738.                 inc ecx
  739.                 stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу
  740.                 jmp @b
  741.         @@:
  742.         ;movzx eax,word[tree2.info_size]
  743.         imul ecx,sizeof.object ;eax
  744.         add ecx,4 ;метка конца файла
  745.         mov [open_file_size],ecx
  746.         stdcall mem.ReAlloc,[open_file_data],ecx
  747.         mov [open_file_data],eax
  748.  
  749.         mov edi,[open_file_data]
  750.         stdcall [tl_node_poi_get_info], tree2,0
  751.         mov edx,eax
  752.         @@:
  753.                 cmp edx,0
  754.                 je @f
  755.                 stdcall [tl_node_poi_get_data], tree2,edx
  756.                 mov esi,eax ;получаем данные узла
  757.  
  758.                 mov bl,byte[edx+2] ;bl - уровень объекта
  759.                 mov byte[esi+u_object.lvl-u_object],bl
  760.                 mov bl,byte[edx+3] ;bl - открытие/закрытие объекта
  761.                 mov byte[esi+u_object.clo-u_object],bl
  762.  
  763.                 ;вычисляем новый индекс для типа объекта
  764.                 mov ebx,[esi+u_object.typid-u_object] ;ebx - тип объекта
  765.                 ;сохраняем тип объекта
  766.                 push ebx
  767.                         imul ebx,sizeof.TreeList
  768.                         add ebx,[tree2.data_nodes] ;ebx - указатель объект указывающий тип
  769.                         stdcall get_obj_npp,ebx
  770.                         mov [esi+u_object.typid-u_object],eax
  771.                         mov eax,esi
  772.                         ;копируем объект в память для сохранения
  773.                         movzx ecx,word[tree2.info_size]
  774.                         cld
  775.                         rep movsb
  776.                 ;восстанавливаем тип объекта
  777.                 pop dword[eax+u_object.typid-u_object]
  778.  
  779.                 stdcall [tl_node_poi_get_next_info], tree2,edx
  780.                 mov edx,eax ;переходим к следущему узлу
  781.                 jmp @b
  782.         @@:
  783.         mov dword[edi],0 ;метка конца файла
  784.         add edi,4
  785.  
  786.         stdcall [edit_box_set_text], edit1,openfile_path
  787.         mov ecx,[open_file_size] ;ecx - размер сохраняемого файла      
  788.         mov [run_file_70.Function], 2
  789.         mov [run_file_70.Position], 0
  790.         mov [run_file_70.Flags], 0
  791.         mov [run_file_70.Count], ecx
  792.         m2m [run_file_70.Buffer], [open_file_data]
  793.         mov [run_file_70.rezerv], 0
  794.         mov dword[run_file_70.FileName], openfile_path
  795.         mcall 70,run_file_70
  796.  
  797.         .end_save_file:
  798.         popad
  799.         ret
  800.  
  801. ;берет номер по порядку по указателю на структуру объекта
  802. ;output:
  803. ; eax - номер объекта
  804. align 4
  805. proc get_obj_npp uses ebx ecx, p_obj_str:dword
  806.         mov ecx,2
  807.         mov ebx,[p_obj_str]
  808.  
  809.         stdcall [tl_node_poi_get_info], tree2,0
  810.         @@:
  811.                 cmp eax,0
  812.                 je .no_exist
  813.                 cmp eax,ebx
  814.                 je @f
  815.  
  816.                 inc ecx
  817.                 stdcall [tl_node_poi_get_next_info], tree2,eax ;переходим к следущему узлу
  818.                 jmp @b
  819.         .no_exist: ;когда идет ссылка на не существующий объект
  820.                 xor ecx,ecx ;обнуляем указатель, что-бы не сохранять в файл мусор
  821.         @@:
  822.         mov eax,ecx
  823.         ret
  824. endp
  825.  
  826. ;функция для сохранения созданного asm файла
  827. align 4
  828. but_save_asm:
  829.         push edi
  830.         mov edi, tedit0
  831.  
  832.         stdcall [ted_save_file],edi,run_file_70,[edit_sav.text]
  833.         cmp ted_err_save,0
  834.         jne @f
  835.                 stdcall [mb_create],msgbox_1,thread ;message: Файл был сохранен
  836.         @@:
  837.         pop edi
  838.         ret
  839.  
  840. ;функция для показа/скрытия невидимых символов
  841. align 4
  842. but_show_invis:
  843.         push edi
  844.         mov edi,tedit0
  845.  
  846.         xor ted_mode_invis,1
  847.         cmp byte[show_mode],1 ;условие видимости текстового окна
  848.         jne @f
  849.                 stdcall [ted_draw],edi
  850.         @@:
  851.         pop edi
  852.         ret
  853.  
  854. ;
  855. align 4
  856. but_show_syntax:
  857.         push edi
  858.         mov edi,tedit0
  859.  
  860.         xor ted_mode_color,1
  861.         cmp byte[show_mode],1 ;условие видимости текстового окна
  862.         jne @f
  863.                 stdcall [ted_draw],edi
  864.         @@:
  865.         pop edi
  866.         ret
  867.  
  868. align 4
  869. ted_save_err_msg:
  870.         mov byte[msgbox_0.err],al
  871.         stdcall [mb_create],msgbox_0,thread ;message: Can-t save text file!
  872.         ret
  873.  
  874. ;функция вызываемая при нажатии Enter в окне tree2
  875. ;обновляет текстовые поля значениями параметров взятых из объектов
  876. ;функция обратная к данной but_element_change
  877. align 4
  878. on_file_object_select:
  879.         cmp byte[prop_wnd_run],0
  880.         jne @f
  881.                 mov byte[prop_wnd_run],1
  882.                 stdcall [tl_node_get_data], tree2
  883.                 mov dword[foc_obj],eax
  884.                 cmp eax,0
  885.                 je @f
  886.                         pushad
  887.                         ;все действия по настройке элементов управления выполняются в окне со свойствами
  888.                         mcall 51,1,prop_start,prop_thread
  889.                         popad
  890.         @@:
  891.         ;call draw_window
  892.         ret
  893.  
  894. ;функция вызываемая при нажатии Enter в окне tree1
  895. ;добавляет новый объект в окно tree2
  896. align 4
  897. on_add_object:
  898. push eax ebx ecx
  899.         stdcall [tl_node_get_data], tree1
  900.         cmp eax,0
  901.         je @f
  902.                 xor ecx,ecx
  903.                 mov cx,word[eax+obj_opt.img-obj_opt] ;cx - индекс главной иконки добавляемого объекта
  904.  
  905.                 cmp ecx,count_main_icons ;в старших битах ecx будут 0, потому отрицательные числа тоже проверяются
  906.                 jl .end_0
  907.                         ;если иконки нет, по умолчанию берем 0-ю
  908.                         xor cx,cx
  909.                 .end_0:
  910.  
  911.                 shl ecx,16
  912.                 stdcall mem_clear, u_object,sizeof.object
  913.                 mov ebx,dword[eax]
  914.                 mov dword[u_object.id],ebx
  915.                 stdcall dword[tl_node_add], tree2,ecx,u_object ;добавляем объект
  916.         @@:
  917. pop ecx ebx eax
  918.         call draw_window
  919.         ret
  920.  
  921. align 4
  922. but_ctrl_o:
  923.         ret
  924. align 4
  925. but_ctrl_n:
  926.         ret
  927. align 4
  928. but_ctrl_s:
  929.         ret
  930.  
  931. ;открытие и распаковка файла подсветки синтаксиса
  932. ;input:
  933. ; ted_syntax_file - буфер для открываемого файла синтаксиса
  934. ; ted_syntax_file_size - размер открываемого файла синтаксиса
  935. ;output:
  936. ; ebx - число прочитанных байт из файла
  937. align 4
  938. open_unpac_synt_file:
  939. push eax edi esi
  940.         mov edi, tedit0
  941.         mov [run_file_70.Function], 0
  942.         mov [run_file_70.Position], 0
  943.         mov [run_file_70.Flags], 0
  944.         mov ecx, ted_syntax_file_size
  945.         mov dword[run_file_70.Count], ecx
  946.         m2m dword[run_file_70.Buffer], ted_syntax_file
  947.         mov byte[run_file_70+20], 0
  948.         mov [run_file_70.FileName], file_name
  949.         mcall 70, run_file_70
  950.         cmp ebx,-1
  951.         jne .end_0
  952.                 ;если возникли ошибки при открытии файла синтаксиса
  953.                 mov byte[txt_not_syntax_file.err],'0'
  954.                 add byte[txt_not_syntax_file.err],al
  955.                 notify_window_run txt_not_syntax_file ;Can-t open color options file!
  956.                 jmp @f
  957.         .end_0:
  958.  
  959.                 mov eax,ted_syntax_file
  960.                 cmp dword[eax],'KPCK'
  961.                 jne .end_unpack
  962.  
  963.                 mov ecx,dword[eax+4] ;ecx - размер файла синтаксиса после распаковки
  964.                 cmp dword[unpac_mem],0
  965.                 jne .end_1
  966.                         ;первоначальное выделение временной памяти для распаковки файла
  967.                         stdcall mem.Alloc,ecx
  968.                         mov [unpac_mem],eax
  969.                         mov [unpac_mem_size],ecx
  970.                 .end_1:
  971.                 cmp dword[unpac_mem_size],ecx
  972.                 jge .end_2
  973.                         ;если для распакованого файла не хватает временной памяти
  974.                         stdcall mem.ReAlloc,[unpac_mem],ecx ;заново выделяем временную память
  975.                         mov [unpac_mem],eax
  976.                         mov [unpac_mem_size],ecx
  977.                 .end_2:
  978.  
  979.                 ;распаковка файла во временную память
  980.                 stdcall unpack,ted_syntax_file,[unpac_mem]
  981.  
  982.                 cmp ted_syntax_file_size,ecx
  983.                 jge .end_3
  984.                         ;если для распакованого файла не хватает памяти
  985.                         stdcall mem.ReAlloc,ted_syntax_file,ecx ;заново выделяем память
  986.                         mov ted_syntax_file,eax
  987.                         mov ted_syntax_file_size,ecx
  988.                 .end_3:
  989.  
  990.                 ;копирование распакованного файла из временной памяти в память элемента
  991.                 mov edi,ted_syntax_file
  992.                 mov esi,[unpac_mem]
  993.                 cld
  994.                 rep movsb
  995.  
  996.                 .end_unpack:
  997.                 ;применение файла подсветки
  998.                 stdcall [ted_init_syntax_file], tedit0
  999.         @@:
  1000. pop esi edi eax
  1001.         ret
  1002.  
  1003. align 4
  1004. txt_not_syntax_file:
  1005.         db 'Ошибка при открытии файла с цветовыми настройками! (Код ошибки ='
  1006.         .err: db '?'
  1007.         db ')',0
  1008.  
  1009. align 4
  1010. buf_fon: ;фоновый буфер
  1011.         dd 0 ;указатель на буфер изображения
  1012.         dw 310 ;+4 left
  1013.         dw 50 ;+6 top
  1014.         dd 340 ;+8 w
  1015.         dd 280 ;+12 h
  1016.         dd 0xffffff ;+16 color
  1017.         db 24 ;+20 bit in pixel
  1018.  
  1019. align 4
  1020. buf_font: ;буфер матрицы со шрифтом
  1021.         dd 0 ;указатель на буфер изображения
  1022.         dw 25 ;+4 left
  1023.         dw 25 ;+6 top
  1024.         dd 96 ;+8 w
  1025.         dd 144 ;+12 h
  1026.         dd 0 ;+16 color
  1027.         db 24 ;+20 bit in pixel
  1028.  
  1029. align 4
  1030. buf_skin1:
  1031.         dd 0 ;указатель на буфер изображения
  1032.         dw 0 ;+4 left
  1033.         dw 0 ;+6 top
  1034.         dd SKIN_W1 ;+8 w
  1035.         dd SKIN_H ;+12 h
  1036.         dd 0 ;+16 color
  1037.         db 24 ;+20 bit in pixel
  1038. align 4
  1039. buf_skin2:
  1040.         dd 0 ;указатель на буфер изображения
  1041.         dw 0 ;+4 left
  1042.         dw 0 ;+6 top
  1043.         dd SKIN_W2 ;+8 w
  1044.         dd SKIN_H ;+12 h
  1045.         dd 0 ;+16 color
  1046.         db 24 ;+20 bit in pixel
  1047. align 4
  1048. buf_skin3:
  1049.         dd 0 ;указатель на буфер изображения
  1050.         dw 0 ;+4 left
  1051.         dw 0 ;+6 top
  1052.         dd SKIN_W3 ;+8 w
  1053.         dd SKIN_H ;+12 h
  1054.         dd 0 ;+16 color
  1055.         db 24 ;+20 bit in pixel
  1056.  
  1057. show_mode db 0 ;режим для показа определенного окна
  1058. txtErrOpen db 'Не найден файл, проверьте правильность имени',0
  1059. txtErrIni1 db 'Не открылся файл с опциями',0
  1060. err_opn db 0 ;рез. открытия файла проэкта
  1061. err_ini0 db 0 ;рез. открытия файла с иконками
  1062. err_ini1 db 0 ;рез. открытия файла с опциями
  1063. unpac_mem dd 0
  1064. unpac_mem_size dd 0
  1065.  
  1066. edit1 edit_box 210, 10, 5, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text1, mouse_dd, 0, 7, 7
  1067.  
  1068. edit2 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text2, mouse_dd, 0
  1069. edit3 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text3, mouse_dd, 0
  1070. edit4 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text4, mouse_dd, 0
  1071. edit5 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text5, mouse_dd, 0
  1072. edit6 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text6, mouse_dd, 0
  1073. edit7 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text7, mouse_dd, 0
  1074. edit8 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text8, mouse_dd, 0
  1075. edit9 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text9, mouse_dd, 0
  1076. edit10 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text10, mouse_dd, 0
  1077. edit11 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text11, mouse_dd, 0
  1078. edit12 edit_box 115, 32, 20, 0xffffff, 0x80ff, 0xff, 0x808080, 0, MAX_LEN_OBJ_TXT, ed_text12, mouse_dd, 0
  1079. prop_wnd_edits_end: ;конец текстовых полей, отвечающих за свойства
  1080.  
  1081. edit_sav edit_box 210, 310, 30, 0xffffff, 0xff80, 0xff, 0xff0000, 0x4080, 300, ed_text_sav, mouse_dd, 0
  1082.  
  1083.  
  1084. ed_text1 db '/hd0/1/',0
  1085.         rb 295
  1086. ed_text2 rb MAX_LEN_OBJ_TXT+2
  1087. ed_text3 rb MAX_LEN_OBJ_TXT+2
  1088. ed_text4 rb MAX_LEN_OBJ_TXT+2
  1089. ed_text5 rb MAX_LEN_OBJ_TXT+2
  1090. ed_text6 rb MAX_LEN_OBJ_TXT+2
  1091. ed_text7 rb MAX_LEN_OBJ_TXT+2
  1092. ed_text8 rb MAX_LEN_OBJ_TXT+2
  1093. ed_text9 rb MAX_LEN_OBJ_TXT+2
  1094. ed_text10 rb MAX_LEN_OBJ_TXT+2
  1095. ed_text11 rb MAX_LEN_OBJ_TXT+2
  1096. ed_text12 rb MAX_LEN_OBJ_TXT+2
  1097. ed_text_sav rb 302
  1098.  
  1099. txt_null db 'null',0
  1100. mouse_dd dd ?
  1101.  
  1102. el_focus dd tree1
  1103. ;дерево со списком возможных типов объектов
  1104. tree1 tree_list sizeof.ObjOpt,20+2, tl_key_no_edit+tl_draw_par_line+tl_list_box_mode,\
  1105.         16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,50,125,280, 0,obj_opt.info-obj_opt,0, el_focus,\
  1106.         w_scr_t1,on_add_object
  1107. ;дерево с объектами в пользовательском файле
  1108. tree2 tree_list sizeof.object,MAX_CED_OBJECTS+2, tl_draw_par_line,\
  1109.         16,16, 0xffffff,0xb0d0ff,0xd000ff, 155,50,130,280, 13,u_object.txt-u_object,MAX_LEN_OBJ_TXT, el_focus,\
  1110.         w_scr_t2,on_file_object_select
  1111.  
  1112. msgbox_0:
  1113.   db 1,0
  1114.   db 'Warning',0
  1115.   db 'Error saving file!',13,\
  1116.      'Maybe the file name is not entered correctly.',13,\
  1117.      '  (error code ='
  1118.   .err: db '?'
  1119.   db ')',0
  1120.   db 'Close',0
  1121.   db 0
  1122.  
  1123. msgbox_1:
  1124.         db 1,0
  1125.         db ':)',0
  1126.         db 'File was saved',0
  1127.         db 'Ok',0
  1128.         db 0
  1129.  
  1130. struct TexSelect
  1131.         x0 dd ?
  1132.         y0 dd ?
  1133.         x1 dd ?
  1134.         y1 dd ?
  1135. ends
  1136. ;------------------------------------------------------------------------------
  1137. align 4
  1138. tedit0: ;структура текстового редактора
  1139.         .wnd BOX 310,50,325,260 ;+ 0
  1140.         .rec BOX 30,13,7,10   ;+16
  1141.         .drag_m db 0 ;+32 выделение от мыши
  1142.         .drag_k db 0 ;+33 выделение от клавиатуры
  1143.         .sel  TexSelect 0,0,0,0 ;+34 структура выделения
  1144.         .seln TexSelect ;+50 дополнительная структура выделения
  1145.         .tex      dd 0 ;+66 text memory pointer
  1146.         .tex_1    dd 0 ;+70 text first symbol pointer
  1147.         .tex_end  dd 0 ;+74 text end memory pointer
  1148.         .cur_x    dd 0 ;+78 координата x курсора
  1149.         .cur_y    dd 0 ;+82 координата y курсора
  1150.         .max_chars dd 25002 ;+86 максимальное число символов в одном документе
  1151.         .count_colors_text dd 1 ;+90 колличество цветов текста
  1152.         .count_key_words   dd 0 ;+94 колличество ключевых слов
  1153.         .color_cursor      dd 0xff0000 ;+98 цвет курсора
  1154.         .color_wnd_capt    dd 0x0080c0 ;+102 цвет полей вокруг окна
  1155.         .color_wnd_work    dd      0x0 ;+106 цвет фона окна
  1156.         .color_wnd_bord    dd 0xffffff ;+110 цвет текста на полях
  1157.         .color_select      dd 0x0000ff ;+114 цвет выделения
  1158.         .color_cur_text    dd 0xffff00 ;+118 цвет символа под курсором
  1159.         .color_wnd_text    dd 0x80ffff ;+122 цвет текста в окне
  1160.         .syntax_file       dd 0 ;+126 указатель на начало файла синтаксиса
  1161.         .syntax_file_size  dd 55*1024 ;+130 максимальный размер файла синтаксиса
  1162.         .text_colors       dd 0 ;+134 указатель на массив цветов текста
  1163.         .help_text_f1      dd 0 ;+138 указатель на текст справки (по нажатии F1)
  1164.         .help_id           dd -1 ;+142 идентификатор для справки
  1165.         .key_words_data    dd 0 ;+146 указатель на структуры ключевых слов TexColViv
  1166.         .tim_ch      dd ? ;+150 количество изменений в файле
  1167.         .tim_undo    dd ? ;+154 количество отмененных действий
  1168.         .tim_ls      dd ? ;+158 время последнего сохранения
  1169.         .tim_co      dd ? ;+162 время последней цветовой разметки
  1170.         .el_focus    dd el_focus ;+166 указатель на переменную элемента в фокусе
  1171.         .err_save    db 0 ;+170 ошибка сохранения файла
  1172.         .panel_id    db 0 ;+171 номер открытой панели
  1173.         .key_new     db 0 ;+172 символ, который будет добавлятся с клавиатуры
  1174.         .symbol_new_line db 20 ;+173 символ завершения строки
  1175.         .scr_w       dd scrol_w1 ;+174 вертикальный скроллинг
  1176.         .scr_h       dd scrol_h1 ;+178 горизонтальный скроллинг
  1177.         .arr_key_pos dd 0 ;+182 указатель на массив позиций ключевых слов
  1178.         .buffer      dd text_buffer ;+186 указатель на буфер копирования/вставки
  1179.         .buffer_find dd 0 ;+190 указатель на буфер для поиска
  1180.         .cur_ins     db 1 ;+194 режим работы курсора (обычный или замена)
  1181.         .mode_color  db 1 ;+195 режим выделения слов цветом (0-выкл. 1-вкл.)
  1182.         .mode_invis  db 0 ;+196 режим показа непечатаемых символов
  1183.         .gp_opt      db 0 ;+197 опции возвращаемые функцией ted_get_pos_by_cursor
  1184.         .fun_on_key_ctrl_o dd but_ctrl_o ;+198 указатель на функцию вызываемую при нажатии Ctrl+O (открытие файла)
  1185.         .fun_on_key_ctrl_f dd 0 ;+202 ... Ctrl+F (вызова/скрытия панели поиска)
  1186.         .fun_on_key_ctrl_n dd but_ctrl_n ;+206 ... Ctrl+N (создание нового документа)
  1187.         .fun_on_key_ctrl_s dd 0 ;+210 ... Ctrl+S
  1188.         .buffer_size       dd BUF_SIZE ;+214 размер буфера копирования/вставки
  1189.         .fun_find_err      dd 0 ;+218 указатель на функцию вызываемую если поиск закончился неудачно
  1190.         .fun_init_synt_err dd 0 ;+222 указатель на функцию вызываемую при ошибочном открытии файла синтаксиса
  1191.         .fun_draw_panel_buttons dd 0 ;+226 указатель на функцию рисования панели с кнопками
  1192.         .fun_draw_panel_find    dd 0 ;+230 указатель на функцию рисования панели поиска
  1193.         .fun_draw_panel_syntax  dd 0 ;+234 указатель на функцию рисования панели синтаксиса
  1194.         .fun_save_err           dd ted_save_err_msg ;+238 указатель на функцию вызываемую если сохранение файла закончилось неудачно
  1195.         .increase_size dd 1000 ;+242 число символов на которые будет увечиваться память при нехватке
  1196.         .ptr_free_symb dd ? ;+246 указатель на свободную память, в которую можно добавлять символ (используется внутри элемента для ускорения вставки текста)
  1197. ;------------------------------------------------------------------------------
  1198. align 4
  1199. scrol_w1:
  1200. .x:
  1201. .size_x   dw 16 ;+0
  1202. .start_x  dw 85 ;+2
  1203. .y:
  1204. .size_y   dw 100 ; +4
  1205. .start_y  dw  15 ; +6
  1206. .btn_high dd  15 ; +8
  1207. .type     dd   1 ;+12
  1208. .max_area dd 100 ;+16
  1209. rb 4+4
  1210. .bckg_col dd 0xeeeeee ;+28
  1211. .frnt_col dd 0xbbddff ;+32
  1212. .line_col dd 0x808080 ;+36
  1213. .redraw   dd   0 ;+40
  1214. .delta    dw   0 ;+44
  1215. .delta2   dw   0 ;+46
  1216. .run_x:
  1217. rb 32
  1218. .all_redraw dd 0 ;+80
  1219. .ar_offset  dd 1 ;+84
  1220. ;---------------------------------------------------------------------
  1221. align 4
  1222. scrol_h1:
  1223. .x:
  1224. .size_x     dw 85 ;+0
  1225. .start_x    dw 30 ;+2
  1226. .y:
  1227. .size_y     dw 16 ;+4
  1228. .start_y    dw 100 ;+6
  1229. .btn_high   dd 15 ;+8
  1230. .type       dd 1  ;+12
  1231. .max_area   dd 100 ;+16
  1232. rb 4+4
  1233. .bckg_col   dd 0xeeeeee ;+28
  1234. .frnt_col   dd 0xbbddff ;+32
  1235. .line_col   dd 0x808080 ;+36
  1236. .redraw     dd 0  ;+40
  1237. .delta      dw 0  ;+44
  1238. .delta2     dw 0  ;+46
  1239. .run_x:
  1240. rb 32
  1241. .all_redraw dd 0 ;+80
  1242. .ar_offset  dd 1 ;+84
  1243.  
  1244.  
  1245.  
  1246. align 4
  1247. w_scr_t1:
  1248. .size_x     dw 16 ;+0
  1249. rb 2+2+2
  1250. .btn_high   dd 15 ;+8
  1251. .type       dd 1  ;+12
  1252. .max_area   dd 100  ;+16
  1253. rb 4+4
  1254. .bckg_col   dd 0xeeeeee ;+28
  1255. .frnt_col   dd 0xbbddff ;+32
  1256. .line_col   dd 0  ;+36
  1257. rb 4+2+2
  1258. .run_x:
  1259. rb 32
  1260. .all_redraw dd 0 ;+80
  1261. .ar_offset  dd 1 ;+84
  1262.  
  1263. align 4
  1264. w_scr_t2:
  1265. .size_x     dw 16 ;+0
  1266. rb 2+2+2
  1267. .btn_high   dd 15 ;+8
  1268. .type       dd 1  ;+12
  1269. .max_area   dd 100  ;+16
  1270. rb 4+4
  1271. .bckg_col   dd 0xeeeeee ;+28
  1272. .frnt_col   dd 0xbbddff ;+32
  1273. .line_col   dd 0  ;+36
  1274. rb 4+2+2
  1275. .run_x:
  1276. rb 32
  1277. .all_redraw dd 0 ;+80
  1278. .ar_offset  dd 1 ;+84
  1279.  
  1280. ;данные для диалога открытия файлов
  1281. align 4
  1282. OpenDialog_data:
  1283. .type                   dd 0 ;0 - открыть, 1 - сохранить, 2 - выбрать дтректорию
  1284. .procinfo               dd procinfo     ;+4
  1285. .com_area_name          dd communication_area_name      ;+8
  1286. .com_area               dd 0    ;+12
  1287. .opendir_path           dd plugin_path  ;+16
  1288. .dir_default_path       dd default_dir ;+20
  1289. .start_path             dd file_name ;+24 путь к диалогу открытия файлов
  1290. .draw_window            dd draw_window  ;+28
  1291. .status                 dd 0    ;+32
  1292. .openfile_path          dd openfile_path        ;+36 путь к открываемому файлу
  1293. .filename_area          dd filename_area        ;+40
  1294. .filter_area            dd Filter
  1295. .x:
  1296. .x_size                 dw 420 ;+48 ; Window X size
  1297. .x_start                dw 10 ;+50 ; Window X position
  1298. .y:
  1299. .y_size                 dw 320 ;+52 ; Window y size
  1300. .y_start                dw 10 ;+54 ; Window Y position
  1301.  
  1302. default_dir db '/rd/1',0
  1303.  
  1304. communication_area_name:
  1305.         db 'FFFFFFFF_open_dialog',0
  1306. open_dialog_name:
  1307.         db 'opendial',0
  1308. communication_area_default_path:
  1309.         db '/rd/1/File managers/',0
  1310.  
  1311. Filter:
  1312. dd Filter.end - Filter ;.1
  1313. .1:
  1314. db 'CED',0
  1315. db 'ASM',0
  1316. .end:
  1317. db 0
  1318.  
  1319.  
  1320. data_of_code dd 0
  1321. sc system_colors
  1322.  
  1323. image_data dd 0 ;память для преобразования картинки функциями libimg
  1324.  
  1325. text_buffer db BUF_SIZE dup(0)
  1326. fn_obj_opt db 'ob_o.opt',0
  1327. obj_opt ObjOpt
  1328.         rb sizeof.ObjOpt*(MAX_OBJ_TYPES-1)+MAX_OBJ_CAPTIONS
  1329.         db 0 ;eof options
  1330.  
  1331. cur_x dd 0
  1332. cur_y dd 0
  1333. foc_obj dd 0 ;объект в фокусе
  1334. obj_count_txt_props dd 0 ;количество используемых текстовых свойств
  1335. obj_m_win dd 0 ;структура главного окна
  1336.  
  1337. ;
  1338. if 1 ;lang eq ru
  1339.  
  1340.         err_message_found_lib0 db 'Не найдена библиотека box_lib.obj',0  ;строка, которая будет в сформированном окне, если библиотека не будет найдена
  1341.         err_message_import0 db 'Ошибка при импорте библиотеки box_lib.obj',0
  1342.         err_message_found_lib1 db 'Не найдена библиотека proc_lib.obj',0
  1343.         err_message_import1 db 'Ошибка при импорте библиотеки proc_lib.obj',0
  1344.         err_message_found_lib2 db 'Не удалось найти библиотеку buf2d.obj',0
  1345.         err_message_import2 db 'Ошибка при импорте библиотеки buf2d.obj',0
  1346.         err_message_found_lib3 db 'Не удалось найти библиотеку libimg.obj',0
  1347.         err_message_import3 db 'Ошибка при импорте библиотеки libimg.obj',0
  1348.         err_message_found_lib4 db 'Не удалось найти библиотеку msgbox.obj',0
  1349.         err_message_import4 db 'Ошибка при импорте библиотеки msgbox.obj',0
  1350.  
  1351.         head_f_i:
  1352.         head_f_l db 'Системная ошибка',0 ;заголовок окна, при возникновении ошибки
  1353. else
  1354.  
  1355.         err_message_found_lib0 db 'Sorry I cannot found library box_lib.obj',0
  1356.         err_message_import0 db 'Error on load import library box_lib.obj',0
  1357.         err_message_found_lib1 db 'Sorry I cannot found library proc_lib.obj',0
  1358.         err_message_import1 db 'Error on load import library proc_lib.obj',0
  1359.         err_message_found_lib2 db 'Sorry I cannot found library buf2d.obj',0
  1360.         err_message_import2 db 'Error on load import library buf2d.obj',0
  1361.         err_message_found_lib3 db 'Sorry I cannot found library libimg.obj',0
  1362.         err_message_import3 db 'Error on load import library libimg.obj',0
  1363.         err_message_found_lib4 db 'Sorry I cannot found library msgbox.obj',0
  1364.         err_message_import4 db 'Error on load import library msgbox.obj',0
  1365.  
  1366.         head_f_i:
  1367.         head_f_l db 'System error',0 ;заголовок окна, при возникновении ошибки
  1368. end if
  1369.  
  1370.         system_dir0 db '/sys/lib/'
  1371.         lib0_name db 'box_lib.obj',0
  1372.  
  1373.         system_dir1 db '/sys/lib/'
  1374.         lib1_name db 'proc_lib.obj',0
  1375.  
  1376.         system_dir2 db '/sys/lib/'
  1377.         lib2_name db 'buf2d.obj',0
  1378.  
  1379.         system_dir3 db '/sys/lib/'
  1380.         lib3_name db 'libimg.obj',0
  1381.  
  1382.         system_dir4 db '/sys/lib/'
  1383.         lib4_name db 'msgbox.obj',0
  1384.  
  1385. align 4
  1386. import_buf2d_lib:
  1387.         dd sz_lib_init
  1388.         buf2d_create dd sz_buf2d_create
  1389.         buf2d_create_f_img dd sz_buf2d_create_f_img
  1390.         buf2d_clear dd sz_buf2d_clear
  1391.         buf2d_draw dd sz_buf2d_draw
  1392.         buf2d_delete dd sz_buf2d_delete
  1393.         buf2d_line dd sz_buf2d_line
  1394.         buf2d_rect_by_size dd sz_buf2d_rect_by_size
  1395.         buf2d_filled_rect_by_size dd sz_buf2d_filled_rect_by_size
  1396.         ;buf2d_circle dd sz_buf2d_circle
  1397.         buf2d_img_hdiv2 dd sz_buf2d_img_hdiv2
  1398.         buf2d_img_wdiv2 dd sz_buf2d_img_wdiv2
  1399.         buf2d_conv_24_to_8 dd sz_buf2d_conv_24_to_8
  1400.         buf2d_conv_24_to_32 dd sz_buf2d_conv_24_to_32
  1401.         buf2d_bit_blt dd sz_buf2d_bit_blt
  1402.         buf2d_bit_blt_transp dd sz_buf2d_bit_blt_transp
  1403.         buf2d_bit_blt_alpha dd sz_buf2d_bit_blt_alpha
  1404.         ;buf2d_curve_bezier dd sz_buf2d_curve_bezier
  1405.         buf2d_convert_text_matrix dd sz_buf2d_convert_text_matrix
  1406.         buf2d_draw_text dd sz_buf2d_draw_text
  1407.         ;buf2d_crop_color dd sz_buf2d_crop_color
  1408.         buf2d_offset_h dd sz_buf2d_offset_h    
  1409. dd 0,0
  1410.         sz_lib_init db 'lib_init',0
  1411.         sz_buf2d_create db 'buf2d_create',0
  1412.         sz_buf2d_create_f_img db 'buf2d_create_f_img',0
  1413.         sz_buf2d_clear db 'buf2d_clear',0
  1414.         sz_buf2d_draw db 'buf2d_draw',0
  1415.         sz_buf2d_delete db 'buf2d_delete',0
  1416.         sz_buf2d_line db 'buf2d_line',0
  1417.         sz_buf2d_rect_by_size db 'buf2d_rect_by_size',0 ;рисование прямоугольника, 2-я координата задана по размеру
  1418.         sz_buf2d_filled_rect_by_size db 'buf2d_filled_rect_by_size',0
  1419.         ;sz_buf2d_circle db 'buf2d_circle',0 ;рисование окружности
  1420.         sz_buf2d_img_hdiv2 db 'buf2d_img_hdiv2',0
  1421.         sz_buf2d_img_wdiv2 db 'buf2d_img_wdiv2',0
  1422.         sz_buf2d_conv_24_to_8 db 'buf2d_conv_24_to_8',0
  1423.         sz_buf2d_conv_24_to_32 db 'buf2d_conv_24_to_32',0
  1424.         sz_buf2d_bit_blt db 'buf2d_bit_blt',0
  1425.         sz_buf2d_bit_blt_transp db 'buf2d_bit_blt_transp',0
  1426.         sz_buf2d_bit_blt_alpha db 'buf2d_bit_blt_alpha',0
  1427.         ;sz_buf2d_curve_bezier db 'buf2d_curve_bezier',0
  1428.         sz_buf2d_convert_text_matrix db 'buf2d_convert_text_matrix',0
  1429.         sz_buf2d_draw_text db 'buf2d_draw_text',0
  1430.         ;sz_buf2d_crop_color db 'buf2d_crop_color',0
  1431.         sz_buf2d_offset_h db 'buf2d_offset_h',0
  1432.  
  1433. align 4
  1434. import_box_lib:
  1435.         dd alib_init2
  1436.  
  1437.         edit_box_draw dd aEdit_box_draw
  1438.         edit_box_key dd aEdit_box_key
  1439.         edit_box_mouse dd aEdit_box_mouse
  1440.         edit_box_set_text dd aEdit_box_set_text
  1441.  
  1442.         init_checkbox dd aInit_checkbox
  1443.         check_box_draw dd aCheck_box_draw
  1444.         check_box_mouse dd aCheck_box_mouse
  1445.  
  1446.         scrollbar_ver_draw dd aScrollbar_ver_draw
  1447.         scrollbar_hor_draw dd aScrollbar_hor_draw
  1448.  
  1449.         tl_data_init dd sz_tl_data_init
  1450.         tl_data_clear dd sz_tl_data_clear
  1451.         tl_info_clear dd sz_tl_info_clear
  1452.         tl_key dd sz_tl_key
  1453.         tl_mouse dd sz_tl_mouse
  1454.         tl_draw dd sz_tl_draw
  1455.         tl_info_undo dd sz_tl_info_undo
  1456.         tl_info_redo dd sz_tl_info_redo
  1457.         tl_node_add dd sz_tl_node_add
  1458.         tl_node_set_data dd sz_tl_node_set_data
  1459.         tl_node_get_data dd sz_tl_node_get_data
  1460.         tl_node_delete dd sz_tl_node_delete
  1461.         tl_node_move_up dd sz_tl_node_move_up
  1462.         tl_node_move_down dd sz_tl_node_move_down
  1463.         tl_cur_beg dd sz_tl_cur_beg
  1464.         tl_cur_next dd sz_tl_cur_next
  1465.         tl_cur_perv dd sz_tl_cur_perv
  1466.         tl_node_close_open dd sz_tl_node_close_open
  1467.         tl_node_lev_inc dd sz_tl_node_lev_inc
  1468.         tl_node_lev_dec dd sz_tl_node_lev_dec
  1469.         tl_node_poi_get_info dd sz_tl_node_poi_get_info
  1470.         tl_node_poi_get_next_info dd sz_tl_node_poi_get_next_info
  1471.         tl_node_poi_get_data dd sz_tl_node_poi_get_data
  1472.  
  1473.         ted_but_sumb_upper dd sz_ted_but_sumb_upper
  1474.         ted_but_sumb_lover dd sz_ted_but_sumb_lover
  1475.         ted_can_save dd sz_ted_can_save
  1476.         ted_clear dd sz_ted_clear
  1477.         ted_delete dd sz_ted_delete
  1478.         ted_draw dd sz_ted_draw
  1479.         ted_init dd sz_ted_init
  1480.         ted_init_scroll_bars dd sz_ted_init_scroll_bars
  1481.         ted_init_syntax_file dd sz_ted_init_syntax_file
  1482.         ted_is_select dd sz_ted_is_select
  1483.         ted_key dd sz_ted_key
  1484.         ted_mouse dd sz_ted_mouse
  1485.         ted_open_file dd sz_ted_open_file
  1486.         ted_save_file dd sz_ted_save_file
  1487.         ted_text_add dd sz_ted_text_add
  1488.         ted_but_select_word dd sz_ted_but_select_word
  1489.         ted_but_cut dd sz_ted_but_cut
  1490.         ted_but_copy dd sz_ted_but_copy
  1491.         ted_but_paste dd sz_ted_but_paste
  1492.         ted_but_undo dd sz_ted_but_undo
  1493.         ted_but_redo dd sz_ted_but_redo
  1494.         ted_but_reverse dd sz_ted_but_reverse
  1495.         ted_but_find_next dd sz_ted_but_find_next
  1496.         ted_text_colored dd sz_ted_text_colored
  1497.         ;version_text_edit dd sz_ted_version
  1498.  
  1499. dd 0,0
  1500.  
  1501.         alib_init2 db 'lib_init',0
  1502.  
  1503.         aEdit_box_draw  db 'edit_box',0
  1504.         aEdit_box_key   db 'edit_box_key',0
  1505.         aEdit_box_mouse db 'edit_box_mouse',0
  1506.         aEdit_box_set_text db 'edit_box_set_text',0
  1507.  
  1508.         aInit_checkbox db 'init_checkbox2',0
  1509.         aCheck_box_draw db 'check_box_draw2',0
  1510.         aCheck_box_mouse db 'check_box_mouse2',0
  1511.  
  1512.         aScrollbar_ver_draw  db 'scrollbar_v_draw',0
  1513.         aScrollbar_hor_draw  db 'scrollbar_h_draw',0
  1514.  
  1515.         sz_tl_data_init db 'tl_data_init',0
  1516.         sz_tl_data_clear db 'tl_data_clear',0
  1517.         sz_tl_info_clear db 'tl_info_clear',0
  1518.         sz_tl_key db 'tl_key',0
  1519.         sz_tl_mouse db 'tl_mouse',0
  1520.         sz_tl_draw db 'tl_draw',0
  1521.         sz_tl_info_undo db 'tl_info_undo',0
  1522.         sz_tl_info_redo db 'tl_info_redo',0
  1523.         sz_tl_node_add db 'tl_node_add',0
  1524.         sz_tl_node_set_data db 'tl_node_set_data',0
  1525.         sz_tl_node_get_data db 'tl_node_get_data',0
  1526.         sz_tl_node_delete db 'tl_node_delete',0
  1527.         sz_tl_node_move_up db 'tl_node_move_up',0
  1528.         sz_tl_node_move_down db 'tl_node_move_down',0
  1529.         sz_tl_cur_beg db 'tl_cur_beg',0
  1530.         sz_tl_cur_next db 'tl_cur_next',0
  1531.         sz_tl_cur_perv db 'tl_cur_perv',0
  1532.         sz_tl_node_close_open db 'tl_node_close_open',0
  1533.         sz_tl_node_lev_inc db 'tl_node_lev_inc',0
  1534.         sz_tl_node_lev_dec db 'tl_node_lev_dec',0
  1535.         sz_tl_node_poi_get_info db 'tl_node_poi_get_info',0
  1536.         sz_tl_node_poi_get_next_info db 'tl_node_poi_get_next_info',0
  1537.         sz_tl_node_poi_get_data db 'tl_node_poi_get_data',0
  1538.  
  1539.         sz_ted_but_sumb_upper   db 'ted_but_sumb_upper',0
  1540.         sz_ted_but_sumb_lover   db 'ted_but_sumb_lover',0
  1541.         sz_ted_can_save                 db 'ted_can_save',0
  1542.         sz_ted_clear                    db 'ted_clear',0
  1543.         sz_ted_delete                   db 'ted_delete',0
  1544.         sz_ted_draw                             db 'ted_draw',0
  1545.         sz_ted_init                             db 'ted_init',0
  1546.         sz_ted_init_scroll_bars db 'ted_init_scroll_bars',0
  1547.         sz_ted_init_syntax_file db 'ted_init_syntax_file',0
  1548.         sz_ted_is_select                db 'ted_is_select',0
  1549.         sz_ted_key                              db 'ted_key',0
  1550.         sz_ted_mouse                    db 'ted_mouse',0
  1551.         sz_ted_open_file                db 'ted_open_file',0
  1552.         sz_ted_save_file                db 'ted_save_file',0
  1553.         sz_ted_text_add                 db 'ted_text_add',0
  1554.         sz_ted_but_select_word  db 'ted_but_select_word',0
  1555.         sz_ted_but_cut                  db 'ted_but_cut',0
  1556.         sz_ted_but_copy                 db 'ted_but_copy',0
  1557.         sz_ted_but_paste                db 'ted_but_paste',0
  1558.         sz_ted_but_undo                 db 'ted_but_undo',0
  1559.         sz_ted_but_redo                 db 'ted_but_redo',0
  1560.         sz_ted_but_reverse              db 'ted_but_reverse',0
  1561.         sz_ted_but_find_next    db 'ted_but_find_next',0
  1562.         sz_ted_text_colored             db 'ted_text_colored',0
  1563.         ;sz_ted_version db 'version_text_edit',0
  1564.  
  1565. align 4
  1566. import_proc_lib:
  1567.         OpenDialog_Init dd aOpenDialog_Init
  1568.         OpenDialog_Start dd aOpenDialog_Start
  1569. dd 0,0
  1570.         aOpenDialog_Init db 'OpenDialog_init',0
  1571.         aOpenDialog_Start db 'OpenDialog_start',0
  1572.  
  1573. align 4
  1574. import_libimg:
  1575.         dd alib_init1
  1576.         img_is_img  dd aimg_is_img
  1577.         img_info    dd aimg_info
  1578.         img_from_file dd aimg_from_file
  1579.         img_to_file dd aimg_to_file
  1580.         img_from_rgb dd aimg_from_rgb
  1581.         img_to_rgb  dd aimg_to_rgb
  1582.         img_to_rgb2 dd aimg_to_rgb2
  1583.         img_decode  dd aimg_decode
  1584.         img_encode  dd aimg_encode
  1585.         img_create  dd aimg_create
  1586.         img_destroy dd aimg_destroy
  1587.         img_destroy_layer dd aimg_destroy_layer
  1588.         img_count   dd aimg_count
  1589.         img_lock_bits dd aimg_lock_bits
  1590.         img_unlock_bits dd aimg_unlock_bits
  1591.         img_flip    dd aimg_flip
  1592.         img_flip_layer dd aimg_flip_layer
  1593.         img_rotate  dd aimg_rotate
  1594.         img_rotate_layer dd aimg_rotate_layer
  1595.         img_draw    dd aimg_draw
  1596.  
  1597. dd 0,0
  1598.  
  1599.         alib_init1   db 'lib_init',0
  1600.         aimg_is_img  db 'img_is_img',0 ;определяет по данным, может ли библиотека сделать из них изображение
  1601.         aimg_info    db 'img_info',0
  1602.         aimg_from_file db 'img_from_file',0
  1603.         aimg_to_file db 'img_to_file',0
  1604.         aimg_from_rgb db 'img_from_rgb',0
  1605.         aimg_to_rgb  db 'img_to_rgb',0 ;преобразование изображения в данные RGB
  1606.         aimg_to_rgb2 db 'img_to_rgb2',0
  1607.         aimg_decode  db 'img_decode',0 ;автоматически определяет формат графических данных
  1608.         aimg_encode  db 'img_encode',0
  1609.         aimg_create  db 'img_create',0
  1610.         aimg_destroy db 'img_destroy',0
  1611.         aimg_destroy_layer db 'img_destroy_layer',0
  1612.         aimg_count   db 'img_count',0
  1613.         aimg_lock_bits db 'img_lock_bits',0
  1614.         aimg_unlock_bits db 'img_unlock_bits',0
  1615.         aimg_flip    db 'img_flip',0
  1616.         aimg_flip_layer db 'img_flip_layer',0
  1617.         aimg_rotate  db 'img_rotate',0
  1618.         aimg_rotate_layer db 'img_rotate_layer',0
  1619.         aimg_draw    db 'img_draw',0
  1620.  
  1621. align 4
  1622. import_msgbox_lib:
  1623.         mb_create dd amb_create
  1624.         mb_reinit dd amb_reinit
  1625.         mb_setfunctions dd amb_setfunctions
  1626. dd 0,0
  1627.         amb_create db 'mb_create',0
  1628.         amb_reinit db 'mb_reinit',0
  1629.         amb_setfunctions db 'mb_setfunctions',0
  1630.  
  1631. ;library structures
  1632. l_libs_start:
  1633.         lib0 l_libs lib0_name, sys_path, library_path, system_dir0, err_message_found_lib0, head_f_l, import_box_lib, err_message_import0, head_f_i
  1634.         lib1 l_libs lib1_name, sys_path, library_path, system_dir1, err_message_found_lib1, head_f_l, import_proc_lib,err_message_import1, head_f_i
  1635.         lib2 l_libs lib2_name, sys_path, library_path, system_dir2, err_message_found_lib2, head_f_l, import_buf2d_lib, err_message_import2, head_f_i
  1636.         lib3 l_libs lib3_name, sys_path, library_path, system_dir3, err_message_found_lib3, head_f_l, import_libimg, err_message_import3, head_f_i
  1637.         lib4 l_libs lib4_name, sys_path, library_path, system_dir4, err_message_found_lib4, head_f_l, import_msgbox_lib, err_message_import4, head_f_i
  1638. load_lib_end:
  1639.  
  1640.  
  1641. align 16
  1642. run_file_70 FileInfoBlock
  1643. open_b rb 560
  1644.  
  1645. IncludeIGlobals
  1646. i_end:
  1647. IncludeUGlobals
  1648.         procinfo process_information
  1649.         buf_cmd_lin rb 1024
  1650.         file_name rb 1024 ;icon file path
  1651.         fp_obj_opt rb 1024 ;obj options file patch
  1652.         rb 1024
  1653.         prop_thread:
  1654.         rb 1024
  1655.         thread: ;вверху дочерний стек для окна сообщения
  1656.         rb 1024
  1657. stacktop: ;вверху стек основной программы
  1658.         sys_path rb 1024
  1659.         library_path rb 1024
  1660.         plugin_path rb 4096
  1661.         openfile_path rb 4096
  1662.         filename_area rb 256
  1663. mem:
  1664.