Subversion Repositories Kolibri OS

Rev

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