Subversion Repositories Kolibri OS

Rev

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