Subversion Repositories Kolibri OS

Rev

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