Subversion Repositories Kolibri OS

Rev

Rev 1904 | Rev 3465 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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