Subversion Repositories Kolibri OS

Rev

Rev 3465 | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1698 IgorA 1
;
1727 IgorA 2
; в этом файле собраны функции создающие програмный код
1698 IgorA 3
;
1727 IgorA 4
u_object object ;временный объект для задания смещений
1698 IgorA 5
 
6
macro insert_coma
7
{
8
	stdcall [ted_text_add], tedit0,txt_coma,1,ted_opt_ed_move_cursor
9
}
10
macro insert_nl
11
{
12
	stdcall [ted_text_add], tedit0,txt_nl,1,ted_opt_ed_move_cursor
13
}
14
macro insert_com
15
{
16
	stdcall [ted_text_add], tedit0,txt_com,1,ted_opt_ed_move_cursor
17
}
18
macro insert_sp
19
{
20
	stdcall [ted_text_add], tedit0,txt_sp,1,ted_opt_ed_move_cursor
21
}
22
 
1727 IgorA 23
;функция вставляет текстовую строку в текстовый редактор
1698 IgorA 24
align 4
25
proc insert_text, txt:dword
26
	push eax
27
	stdcall str_len,dword[txt]
28
	cmp eax,1
29
	jl @f
30
		stdcall [ted_text_add], tedit0,dword[txt],eax,ted_opt_ed_move_cursor
31
	@@:
32
	pop eax
33
	ret
34
endp
35
 
1727 IgorA 36
;вставляет указанное текстовое свойство из объекта в текстовый редактор
1698 IgorA 37
align 4
38
proc insert_text_prop, p_obj:dword,index:dword
39
	push eax edx
40
		mov eax,[p_obj]
41
		mov edx,[index]
42
		stdcall get_obj_text_col,eax,edx
43
		stdcall str_len,edx
44
		stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
45
	pop edx eax
46
	ret
47
endp
48
 
1727 IgorA 49
;вставляет указанное битовое свойство из объекта в текстовый редактор
50
align 4
51
proc insert_bit_prop, p_obj:dword,index:dword
52
	push ebx ecx edi
53
		mov ebx,[p_obj]
54
		mov ecx,[index]
55
		test_bool_prop ebx,ecx
56
		jnc @f ;если пользователь не выбрал в объекте данное свойство
57
			mov ebx,dword[ebx]
58
			call find_obj_in_opt
59
			mov ecx,dword[edi+obj_opt.bit_val-obj_opt] ;ecx - смещение значений свойств (констант)
60
			cmp byte[ecx],0
61
			je @f ;если у объекта нет заданных битовых свойств
62
				add ecx,obj_opt ;добавляем начало файла с опциями
63
				stdcall get_string_by_ind, ecx,[index]
64
				cmp byte[edi],0
65
				je @f ;если у объекта битовое свойство пустое
66
				stdcall insert_text, txt_plus
67
				stdcall insert_text, edi
68
		@@:
69
	pop edi ecx ebx
70
	ret
71
endp
72
 
73
;функция вставляет 2 параметра по 16 бит в виде:
1720 IgorA 74
; (_p1_ shl 16 + _p2_)
75
align 4
76
proc insert_2_prop_16_bit, obj:dword, p_hi:dword, p_lo:dword
77
	stdcall insert_text, txt_skob_o
78
	stdcall insert_text_prop, [obj],[p_hi]
79
	stdcall insert_text, txt_shl_16
80
	stdcall insert_text, txt_skob_c
81
	stdcall insert_text, txt_plus
82
	stdcall insert_text_prop, [obj],[p_lo]
83
	ret
84
endp
85
 
1727 IgorA 86
;вставляем строку вида:
1720 IgorA 87
; txt_(n) db (s)
88
align 4
89
proc insert_text_label_data, obj:dword, col:dword
90
	push eax edx
91
	mov eax,[obj]
92
		stdcall insert_text, txt_txt
3465 IgorA 93
		mov edx,file_name
1720 IgorA 94
		stdcall get_obj_id_str, eax,edx ;edx = 'n'
95
		stdcall str_cat, edx,txt_db ;edx = 'n db '
96
		stdcall insert_text, edx
97
		stdcall insert_text_prop, eax,[col]
98
		insert_nl
99
	pop edx eax
100
	ret
101
endp
102
 
1698 IgorA 103
macro insert_tab
104
{
105
	stdcall [ted_text_add], tedit0,txt_tab,1,ted_opt_ed_move_cursor
106
}
107
macro insert_br
108
{
109
	stdcall [ted_text_add], tedit0,txt_br,3,ted_opt_ed_move_cursor
110
}
111
macro insert_a_met
112
{
113
	stdcall [ted_text_add], tedit0,txt_a_met,3,ted_opt_ed_move_cursor
114
}
115
macro insert_0
116
{
117
	stdcall [ted_text_add], tedit0,txt_0,1,ted_opt_ed_move_cursor
118
}
119
macro insert_plus
120
{
121
	stdcall [ted_text_add], tedit0,txt_plus,1,ted_opt_ed_move_cursor
122
}
123
macro insert_xor
124
{
125
	stdcall [ted_text_add], tedit0,txt_xor,4,ted_opt_ed_move_cursor
126
}
127
macro insert_cmp
128
{
129
	stdcall [ted_text_add], tedit0,txt_cmp,4,ted_opt_ed_move_cursor
130
}
131
macro insert_reg reg_name
132
{
133
	stdcall [ted_text_add], tedit0,reg_name,3,ted_opt_ed_move_cursor
134
}
135
macro insert_reg8 reg_name
136
{
137
	stdcall [ted_text_add], tedit0,reg_name,2,ted_opt_ed_move_cursor
138
}
139
 
140
;
141
macro insert_key_beg
142
{
143
	stdcall [ted_text_add], tedit0,txt_key_1,txt_key_2-txt_key_1,ted_opt_ed_move_cursor
144
}
145
macro insert_key_end
146
{
147
	stdcall [ted_text_add], tedit0,txt_key_2,txt_key_3-txt_key_2,ted_opt_ed_move_cursor
148
}
149
 
150
macro insert_d_poi
151
{
152
	stdcall [ted_text_add], tedit0,txt_d_poi,1,ted_opt_ed_move_cursor
153
}
154
macro insert_ret
155
{
156
	stdcall [ted_text_add], tedit0,txt_ret,4,ted_opt_ed_move_cursor
157
}
158
 
159
 
160
align 4
1711 IgorA 161
but_update:
162
	call draw_constructor
1727 IgorA 163
	cmp byte[show_mode],0 ;условие видимости окна конструктора
1711 IgorA 164
	jne @f
165
		stdcall [buf2d_draw], buf_fon
166
	@@:
1698 IgorA 167
	call code_gen
1727 IgorA 168
	cmp byte[show_mode],1 ;условие видимости текстового окна
1698 IgorA 169
	jne @f
170
		stdcall [ted_draw], tedit0
171
	@@:
172
	ret
173
 
1727 IgorA 174
;функция создающая код всего файла
1698 IgorA 175
align 4
176
code_gen:
177
	stdcall [ted_clear], tedit0,1
178
pushad
5917 IgorA 179
	stdcall dword[tl_node_poi_get_info], tree2,0
180
	mov esi,eax
1698 IgorA 181
	xor bl,bl
182
	call code_gen_obj
183
	stdcall [ted_text_add], tedit0,\
1727 IgorA 184
		txt_nl,1,ted_opt_ed_move_cursor+ted_opt_ed_change_time ;добавляем символ новой строки с опцией ted_opt_ed_change_time для возможности сохранения файла
185
	stdcall [ted_init_scroll_bars], tedit0, 4 ;меняем размеры скроллингов
1698 IgorA 186
popad
187
	ret
188
 
189
;input:
1727 IgorA 190
; bl - уровень объекта
191
; esi - указатель на узел
1698 IgorA 192
align 4
193
code_gen_obj:
1732 IgorA 194
push eax ebx edx
1698 IgorA 195
	.beg_iterat:
196
		cmp esi,0
197
		je .find_no
198
 
199
		cmp byte[esi+2],bl ;lev
200
		jl .find_no
201
 
5917 IgorA 202
		stdcall dword[tl_node_poi_get_data], tree2,esi
1698 IgorA 203
		cmp eax,0
204
		je .find_no
205
 
1717 IgorA 206
		cmp dword[eax],C_STR
1720 IgorA 207
		jne .no_struct
1727 IgorA 208
			stdcall get_obj_text_col, eax,1 ;edx - указатель на 1-е свойство структуры
1720 IgorA 209
			stdcall insert_text,txt_struc
210
			cmp byte[edx],0
211
			jne @f
212
				stdcall insert_text,txt_t
213
			@@:
214
			insert_sp
1717 IgorA 215
			stdcall insert_text_prop, eax,0
1720 IgorA 216
 
217
			cmp byte[edx],0
218
			je @f
1727 IgorA 219
				;если структура задана макросом
1720 IgorA 220
				insert_sp
221
				stdcall insert_text_prop, eax,1
222
				insert_nl
223
				stdcall insert_text, txt_skob_fo
224
			@@:
1717 IgorA 225
			insert_nl
1732 IgorA 226
			stdcall get_code_children_objects, esi
227
			call move_next_no_child_objects ;пропуск дочерних обектов
1720 IgorA 228
			cmp byte[edx],0
229
			je @f
1727 IgorA 230
				;если структура задана макросом
1720 IgorA 231
				stdcall insert_text, txt_skob_fc
232
				insert_nl
233
			@@:
1717 IgorA 234
			stdcall insert_text,txt_ends
1720 IgorA 235
		.no_struct:
1717 IgorA 236
		cmp dword[eax],C_TXT
1698 IgorA 237
		jne @f
1727 IgorA 238
			stdcall get_code_text,eax ;обработка объекта
1698 IgorA 239
		@@:
1717 IgorA 240
		cmp dword[eax],C_INC
1698 IgorA 241
		jne @f
1727 IgorA 242
			stdcall get_code_incl,eax ;обработка объекта
1698 IgorA 243
		@@:
1717 IgorA 244
		cmp dword[eax],C_VAR
1698 IgorA 245
		jne @f
1727 IgorA 246
			stdcall get_code_variable,eax,ebx ;обработка объекта
1698 IgorA 247
		@@:
1717 IgorA 248
		cmp dword[eax],C_WND
1698 IgorA 249
		jne @f
1727 IgorA 250
			stdcall get_code_window,eax ;обработка объекта
1732 IgorA 251
			stdcall get_code_children_objects, esi ;обработка дочерних обектов
252
			call move_next_no_child_objects ;пропуск дочерних обектов
253
			stdcall insert_text, txt_draw_we ;код завершающий функцию рисования
1698 IgorA 254
		@@:
1717 IgorA 255
		cmp dword[eax],C_ACO
1698 IgorA 256
		jne @f
1732 IgorA 257
			stdcall get_code_auto,esi ;обработка объекта
258
			call move_next_no_child_objects ;пропуск дочерних обектов
1698 IgorA 259
		@@:
1727 IgorA 260
		cmp dword[eax],C_KEY ;клавиатура
1698 IgorA 261
		jne @f
1727 IgorA 262
			stdcall get_code_key,eax ;обработка объекта
1698 IgorA 263
		@@:
264
 
5917 IgorA 265
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
266
		mov esi,eax ;переходим к следущему узлу
1698 IgorA 267
 
268
		jmp .beg_iterat
269
	.find_no:
1732 IgorA 270
pop edx ebx eax
1698 IgorA 271
	ret
272
 
1732 IgorA 273
;взять коды дочерних объектов
274
align 4
5917 IgorA 275
proc get_code_children_objects uses eax ebx esi, p_node:dword
276
	mov esi,[p_node]
277
	mov bl,byte[esi+2] ;сохраняем уровень текущего объекта
1732 IgorA 278
 
5917 IgorA 279
	stdcall dword[tl_node_poi_get_next_info], tree2,esi
280
	cmp eax,0 ;если достигли конца списка объектов
281
	je @f
282
	cmp byte[eax+2],bl ;если уровень следующего объекта больше или равен текущему
283
	jle @f ;то дочерних узлов нет
284
		mov esi,eax
285
		mov bl,byte[esi+2]
286
		call code_gen_obj ;рекурсивный вызов дочерних объектов
287
	@@:
1732 IgorA 288
	ret
289
endp
290
 
291
;пропуск всех дочерних объектов
292
;input:
293
; esi - указатель на узел
294
;outpet:
295
; esi - указатель следущий не дочерний (относительно входящего) на узел
296
align 4
297
move_next_no_child_objects:
298
	push eax ebx
299
		mov bl,byte[esi+2] ;сохраняем уровень текущего объекта
300
		@@:
5917 IgorA 301
			stdcall dword[tl_node_poi_get_next_info], tree2,esi
1732 IgorA 302
			cmp eax,0 ;если достигли конца списка объектов
303
			je @f
304
			cmp byte[eax+2],bl ;если уровень следующего объекта больше или равен текущему
305
			jle @f ;то дочерних узлов нет
306
			mov esi,eax ;если следущий узел оказался дочерним, переставляем указатель
307
			jmp @b
308
		@@:
309
	pop ebx eax
310
	ret
311
 
1727 IgorA 312
;добавление объекта с програмным кодом (текстом)
1698 IgorA 313
align 4
314
proc get_code_text, p_obj:dword
1717 IgorA 315
	;pushad
1698 IgorA 316
		insert_nl
1717 IgorA 317
		stdcall insert_text_prop, dword[p_obj],0
1698 IgorA 318
		insert_nl
1717 IgorA 319
	;popad
1698 IgorA 320
	ret
321
endp
322
 
1727 IgorA 323
;обработка объекта создающего автоматичексие коды
1698 IgorA 324
align 4
1732 IgorA 325
proc get_code_auto, p_node:dword
1698 IgorA 326
	pushad
327
		insert_nl
1732 IgorA 328
		mov esi,dword[p_node]
5917 IgorA 329
		stdcall dword[tl_node_poi_get_data], tree2,esi
330
		mov ebx,eax ;получаем данные узла
1732 IgorA 331
 
1720 IgorA 332
		test_bool_prop ebx,BIT_MOD_ACI
333
		jae @f
334
			mov edx,C_CHB
335
			stdcall find_obj_in_file,edx ;eax - указатель на структуру check_box
336
			cmp eax,0
337
			je @f
338
				stdcall insert_text, txt_std_init_cb
339
		@@:
1717 IgorA 340
		test_bool_prop ebx,BIT_MOD_ACM
1698 IgorA 341
		jae @f
1727 IgorA 342
			;автоматические события от мыши
1698 IgorA 343
			call get_code_auto_m
344
		@@:
1717 IgorA 345
		test_bool_prop ebx,BIT_MOD_ABU
1698 IgorA 346
		jae @f
1727 IgorA 347
			;создание функции button
1732 IgorA 348
			stdcall insert_text, txt_but_beg
1727 IgorA 349
			call get_code_auto_but ;коды вызова кнопок
1732 IgorA 350
			stdcall insert_text, txt_but_mid
351
			stdcall get_code_children_objects, esi
352
			;конец функции button (кнопка id=-1, завершение программы)
353
			stdcall insert_text, txt_but_end
354
 
1727 IgorA 355
			call get_code_a_but_fun ;коды функций, вызываемых при нажатии кнопок
1698 IgorA 356
		@@:
1717 IgorA 357
		test_bool_prop ebx,BIT_MOD_ACD
1698 IgorA 358
		jae @f
359
			call get_code_auto_data_el
1720 IgorA 360
 
361
			mov edx,C_CHB
362
			stdcall find_obj_in_file,edx ;eax - указатель на структуру check_box
363
			cmp eax,0
364
			je .no_check
365
				stdcall insert_text, txt_cb_b
366
				call get_code_auto_data_el_cbox
367
				stdcall insert_text, txt_cb_e
368
			.no_check:
369
 
1698 IgorA 370
			call get_code_auto_data_dop
1706 IgorA 371
 
1717 IgorA 372
			mov edx,C_LIB
1727 IgorA 373
			stdcall find_obj_in_file,edx ;eax - указатель на структуру библиотеки
1706 IgorA 374
			cmp eax,0
375
			je @f
1720 IgorA 376
				insert_nl
1706 IgorA 377
				stdcall insert_text, txt_head_i
378
				stdcall insert_text, txt_d_poi
379
				insert_nl
380
				stdcall insert_text, txt_head_l
381
				stdcall insert_text, txt_db
382
				stdcall insert_text, txt_str_beg
383
				stdcall insert_text, txt_sys_err
384
				stdcall insert_text, txt_str_end
385
				insert_nl
386
 
387
				call get_code_auto_data_libs_param
388
				stdcall insert_text, txt_ll_start
5917 IgorA 389
				call get_code_auto_data_libs_struc
1706 IgorA 390
				stdcall insert_text, txt_ll_end
1727 IgorA 391
				call get_code_auto_data_libs ;таблицы импорта библиотек
1698 IgorA 392
		@@:
393
		insert_nl
394
	popad
395
	ret
396
endp
397
 
398
align 4
399
proc get_code_auto_m
400
	pushad
5917 IgorA 401
	stdcall dword[tl_node_poi_get_info], tree2,0
402
	mov esi,eax
1698 IgorA 403
	.beg_iterat:
404
		cmp esi,0
405
		je .find_no
406
 
5917 IgorA 407
		stdcall dword[tl_node_poi_get_data], tree2,esi
408
		cmp eax,0
1698 IgorA 409
		je .find_no
5917 IgorA 410
		mov ebx,eax ;получаем данные узла
1698 IgorA 411
 
1717 IgorA 412
		cmp dword[ebx],C_EDB
1698 IgorA 413
		jne @f
414
			stdcall insert_text, txt_std_mouse_ed
1720 IgorA 415
			stdcall insert_text_prop, ebx,0
1698 IgorA 416
			insert_nl
417
		@@:
1717 IgorA 418
		cmp dword[ebx],C_CHB
1698 IgorA 419
		jne @f
420
			stdcall insert_text, txt_std_mouse_cb
1720 IgorA 421
			stdcall insert_text_prop, ebx,0
1698 IgorA 422
			insert_nl
423
		@@:
424
 
5917 IgorA 425
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
426
		mov esi,eax ;переходим к следущему узлу
1698 IgorA 427
 
428
		jmp .beg_iterat
429
	.find_no:
430
	popad
431
	ret
432
endp
433
 
1727 IgorA 434
;создание данных (структур объектов)
1698 IgorA 435
align 4
436
proc get_code_auto_data_el
437
	pushad
1727 IgorA 438
	insert_nl ;отступ для форматирования
1698 IgorA 439
 
5917 IgorA 440
	stdcall dword[tl_node_poi_get_info], tree2,0
441
	mov esi,eax
1698 IgorA 442
	.beg_iterat:
443
		cmp esi,0
444
		je .find_no
445
 
5917 IgorA 446
		stdcall dword[tl_node_poi_get_data], tree2,esi
447
		cmp eax,0
1698 IgorA 448
		je .find_no
5917 IgorA 449
		mov ebx,eax ;получаем данные узла
1698 IgorA 450
 
1717 IgorA 451
		cmp dword[ebx],C_EDB
1698 IgorA 452
		jne @f
453
			;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
1705 IgorA 454
			stdcall insert_text_prop, ebx,0
1698 IgorA 455
			stdcall insert_text, txt_ebox
456
 
457
			mov ecx,1
458
			.prop:
459
				insert_sp
1705 IgorA 460
				stdcall insert_text_prop, ebx,ecx
1698 IgorA 461
				insert_coma
462
				inc ecx
463
				cmp ecx,10
464
			jl .prop
465
 
466
			insert_br
467
			stdcall insert_text, txt_txt
468
 
3465 IgorA 469
			mov edx,file_name
1714 IgorA 470
			stdcall get_obj_id_str, ebx,edx
1720 IgorA 471
			stdcall insert_text, edx
1698 IgorA 472
 
473
			stdcall insert_text, txt_mouse_dd
1711 IgorA 474
 
1727 IgorA 475
			stdcall insert_text, txt_0 ;свойства editbox
476
			stdcall insert_bit_prop, ebx,BIT_MOD_EDIT_FOC
477
			stdcall insert_bit_prop, ebx,BIT_MOD_EDIT_FIO
478
 
479
			xchg eax,edx ;сохраняем значение edx
1711 IgorA 480
			stdcall get_obj_text_col,ebx,10
1727 IgorA 481
			cmp byte[edx],0 ;проверяем пустая ли строка при запуске editbox
1711 IgorA 482
			je .null_string
1727 IgorA 483
				xchg eax,edx ;востанавливаем значение edx
1711 IgorA 484
				stdcall insert_text, txt_coma
485
 
486
				stdcall insert_text, txt_txt
1727 IgorA 487
				stdcall insert_text, edx
488
				stdcall insert_text, txt_met_end
489
				stdcall insert_text, txt_minus
1711 IgorA 490
				stdcall insert_text, txt_txt
1727 IgorA 491
				stdcall insert_text, edx
492
				stdcall insert_text, txt_minus
1711 IgorA 493
				stdcall insert_text, txt_1
494
				stdcall insert_text, txt_coma
495
 
496
				stdcall insert_text, txt_txt
1727 IgorA 497
				stdcall insert_text, edx
498
				stdcall insert_text, txt_met_end
499
				stdcall insert_text, txt_minus
1711 IgorA 500
				stdcall insert_text, txt_txt
1727 IgorA 501
				stdcall insert_text, edx
502
				stdcall insert_text, txt_minus
1711 IgorA 503
				stdcall insert_text, txt_1
504
			.null_string:
1698 IgorA 505
			insert_nl
506
		@@:
1717 IgorA 507
		cmp dword[ebx],C_DTT
1711 IgorA 508
		jne @f
1720 IgorA 509
			stdcall insert_text_label_data, ebx,0
510
		@@:
511
 
5917 IgorA 512
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
513
		mov esi,eax ;переходим к следущему узлу
1720 IgorA 514
 
515
		jmp .beg_iterat
516
	.find_no:
517
	popad
518
	ret
519
endp
520
 
521
align 4
522
proc get_code_auto_data_el_cbox
523
	pushad
1727 IgorA 524
	insert_nl ;отступ для форматирования
1720 IgorA 525
 
5917 IgorA 526
	stdcall dword[tl_node_poi_get_info], tree2,0
527
	mov esi,eax
1720 IgorA 528
	.beg_iterat:
529
		cmp esi,0
530
		je .find_no
531
 
5917 IgorA 532
		stdcall dword[tl_node_poi_get_data], tree2,esi
533
		cmp eax,0
1720 IgorA 534
		je .find_no
5917 IgorA 535
		mov ebx,eax ;получаем данные узла
1720 IgorA 536
 
537
		cmp dword[ebx],C_CHB
538
		jne .no_check
539
			;1,2,3,4,5, 6,7,8, 9 - ot_x,ot_y,w,h,ot_w_txt, col_fon,col_frame,col_txt, txt
540
 
541
			stdcall insert_text_prop, ebx,0
542
			stdcall insert_text, txt_cbox
543
			insert_sp
544
 
545
			stdcall insert_2_prop_16_bit, ebx,1,3
546
			stdcall insert_text, txt_coma
547
			stdcall insert_2_prop_16_bit, ebx,2,4
548
			stdcall insert_text, txt_coma
549
 
550
			stdcall insert_text_prop, ebx,5
551
			stdcall insert_text, txt_coma
552
			insert_sp
553
 
554
			stdcall insert_text_prop, ebx,6
555
			stdcall insert_text, txt_coma
556
			stdcall insert_text_prop, ebx,7
557
			stdcall insert_text, txt_coma
558
			stdcall insert_text_prop, ebx,8
559
			stdcall insert_text, txt_coma
560
			stdcall insert_text, txt_br
561
 
1711 IgorA 562
			stdcall insert_text, txt_txt
3465 IgorA 563
			mov edx,file_name
1714 IgorA 564
			stdcall get_obj_id_str, ebx,edx
1720 IgorA 565
			stdcall insert_text, edx
566
			stdcall insert_text, txt_coma
567
 
1727 IgorA 568
			;флаги
1720 IgorA 569
			stdcall insert_text,txt_0
1727 IgorA 570
			stdcall insert_bit_prop, ebx,BIT_MOD_CHE
571
			stdcall insert_bit_prop, ebx,BIT_MOD_CHE_T
572
			stdcall insert_bit_prop, ebx,BIT_MOD_CHE_M
573
			stdcall insert_bit_prop, ebx,BIT_MOD_CHE_B
1720 IgorA 574
 
1711 IgorA 575
			insert_nl
1720 IgorA 576
		.no_check:
577
		cmp dword[ebx],C_DTT
578
		jne @f
579
			stdcall insert_text_label_data, ebx,0
1711 IgorA 580
		@@:
1698 IgorA 581
 
5917 IgorA 582
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
583
		mov esi,eax ;переходим к следущему узлу
1698 IgorA 584
 
585
		jmp .beg_iterat
586
	.find_no:
587
	popad
588
	ret
589
endp
590
 
1727 IgorA 591
;данные для библиотек
1705 IgorA 592
align 4
1706 IgorA 593
proc get_code_auto_data_libs_param
594
	pushad
1727 IgorA 595
	insert_nl ;отступ для форматирования
1706 IgorA 596
 
5917 IgorA 597
	stdcall dword[tl_node_poi_get_info], tree2,0
598
	mov esi,eax
1706 IgorA 599
	.beg_iterat:
600
		cmp esi,0
601
		je .find_no
602
 
5917 IgorA 603
		stdcall dword[tl_node_poi_get_data], tree2,esi
604
		cmp eax,0
1706 IgorA 605
		je .find_no
5917 IgorA 606
		mov ebx,eax ;получаем данные узла
1706 IgorA 607
 
1717 IgorA 608
		cmp dword[ebx],C_LIB
1706 IgorA 609
		jne @f
610
			;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
611
 
612
			stdcall insert_text, txt_sys_dir
613
			;object code
3465 IgorA 614
			mov edx,file_name
1714 IgorA 615
			stdcall get_obj_id_str, ebx,edx
1706 IgorA 616
			stdcall insert_text,edx
617
			stdcall insert_text,txt_db
618
			;stdcall insert_text, txt_str_beg
619
			stdcall insert_text_prop, ebx,1
620
			;stdcall insert_text, txt_str_end
621
			insert_nl
622
 
623
			stdcall insert_text, txt_lib_name
624
			stdcall insert_text,edx
625
			stdcall insert_text,txt_db
626
			stdcall insert_text, txt_str_beg
627
			stdcall insert_text_prop, ebx,0
628
			stdcall insert_text, txt_str_end
629
			insert_nl
630
 
631
			stdcall insert_text,txt_err_m_f_lib
632
			stdcall insert_text,edx
633
			stdcall insert_text,txt_db
634
			stdcall insert_text, txt_str_beg
635
			stdcall insert_text_prop, ebx,4
636
			stdcall insert_text, txt_str_end
637
			insert_nl
638
 
639
			stdcall insert_text,txt_err_m_i_lib
640
			stdcall insert_text,edx
641
			stdcall insert_text,txt_db
642
			stdcall insert_text, txt_str_beg
643
			stdcall insert_text_prop, ebx,5
644
			stdcall insert_text, txt_str_end
645
			insert_nl
646
 
647
			insert_nl
648
		@@:
649
 
5917 IgorA 650
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
651
		mov esi,eax ;переходим к следущему узлу
1706 IgorA 652
		jmp .beg_iterat
653
	.find_no:
654
	popad
655
	ret
656
endp
657
 
1727 IgorA 658
;данные для библиотек
1706 IgorA 659
align 4
660
proc get_code_auto_data_libs_struc
661
	pushad
1727 IgorA 662
	;insert_nl ;отступ для форматирования
1706 IgorA 663
 
5917 IgorA 664
	stdcall dword[tl_node_poi_get_info], tree2,0
665
	mov esi,eax
1706 IgorA 666
	.beg_iterat:
667
		cmp esi,0
668
		je .find_no
669
 
5917 IgorA 670
		stdcall dword[tl_node_poi_get_data], tree2,esi
671
		cmp eax,0
1706 IgorA 672
		je .find_no
5917 IgorA 673
		mov ebx,eax ;получаем данные узла
1717 IgorA 674
		cmp dword[ebx],C_LIB
1706 IgorA 675
		jne @f
676
			;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
677
 
678
			stdcall insert_text, txt_lib
679
			;object code
3465 IgorA 680
			mov edx,file_name
1714 IgorA 681
			stdcall get_obj_id_str, ebx,edx
1706 IgorA 682
			stdcall insert_text,edx
683
			insert_sp
684
			stdcall insert_text, txt_ll
685
			stdcall insert_text, txt_lib_name
686
			stdcall insert_text,edx
687
			stdcall insert_text,txt_coma
688
 
689
			stdcall insert_text, txt_lib_path
690
 
691
			stdcall insert_text, txt_sys_dir
692
			stdcall insert_text,edx
693
			stdcall insert_text,txt_coma
694
			stdcall insert_text,txt_br
695
			stdcall insert_text,txt_tab
696
 
697
			stdcall insert_text,txt_err_m_f_lib
698
			stdcall insert_text,edx
699
			stdcall insert_text,txt_coma
700
			stdcall insert_text,txt_head_l
701
			stdcall insert_text,txt_coma
702
 
703
			stdcall insert_text_prop, ebx,2
704
			stdcall insert_text,txt_coma
705
 
706
			stdcall insert_text,txt_err_m_i_lib
707
			stdcall insert_text,edx
708
			stdcall insert_text,txt_coma
709
			stdcall insert_text,txt_head_i
710
 
711
			insert_nl
712
		@@:
713
 
5917 IgorA 714
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
715
		mov esi,eax ;переходим к следущему узлу
1706 IgorA 716
 
717
		jmp .beg_iterat
718
	.find_no:
719
	popad
720
	ret
721
endp
722
 
1727 IgorA 723
;данные для библиотек
1706 IgorA 724
align 4
1705 IgorA 725
proc get_code_auto_data_libs
726
	pushad
1727 IgorA 727
	insert_nl ;отступ для форматирования
1705 IgorA 728
 
5917 IgorA 729
	stdcall dword[tl_node_poi_get_info], tree2,0
730
	mov esi,eax
1705 IgorA 731
	.beg_iterat:
732
		cmp esi,0
733
		je .find_no
734
 
5917 IgorA 735
		stdcall dword[tl_node_poi_get_data], tree2,esi
736
		cmp eax,0
1705 IgorA 737
		je .find_no
5917 IgorA 738
		mov ebx,eax ;получаем данные узла
1717 IgorA 739
		cmp dword[ebx],C_LIB
1705 IgorA 740
		jne @f
741
			;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
742
			stdcall insert_text, txt_align_4
743
			stdcall insert_text_prop, ebx,2
744
			stdcall insert_text, txt_d_poi
745
			insert_nl
746
 
747
			call get_code_lib_table
748
		@@:
749
 
5917 IgorA 750
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
751
		mov esi,eax ;переходим к следущему узлу
1705 IgorA 752
 
753
		jmp .beg_iterat
754
	.find_no:
755
	popad
756
	ret
757
endp
758
 
759
;input:
760
; esi
761
align 4
762
get_code_lib_table:
763
pushad
764
	mov bl,byte[esi+2]
765
	mov edi,esi
5917 IgorA 766
	stdcall dword[tl_node_poi_get_data], tree2,esi
767
	mov edx,eax ;получение данных родительского объекта
768
	cmp eax,0
1705 IgorA 769
	je @f
770
	@@:
5917 IgorA 771
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
772
		mov esi,eax ;переходим к следущему узлу
1705 IgorA 773
		cmp esi,0
774
		je @f
775
		cmp byte[esi+2],bl ;lev
776
		jle @f
5917 IgorA 777
			stdcall dword[tl_node_poi_get_data], tree2,esi
778
			cmp eax,0
1705 IgorA 779
			je @f
5917 IgorA 780
			cmp dword[eax],C_IFN
1705 IgorA 781
			jne @b
5917 IgorA 782
				mov ecx,eax ;получаем данные узла
1727 IgorA 783
				;вставка указателя на функцию
1720 IgorA 784
				test_bool_prop ecx,BIT_MOD_IMPORT_FUNCT_COMMENT
785
				jae .no_com_0
786
					stdcall insert_text, txt_com
787
				.no_com_0:
1705 IgorA 788
				insert_tab
789
				stdcall insert_text_prop, ecx,0
790
				stdcall insert_text, txt_dd
1727 IgorA 791
				stdcall insert_text_prop, edx,3 ;приставка к функции
1705 IgorA 792
				stdcall insert_text_prop, ecx,0
793
				insert_nl
794
			jmp @b
795
	@@:
796
	stdcall insert_text, txt_dd_0_0
797
	mov esi,edi
798
	@@:
5917 IgorA 799
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
800
		mov esi,eax ;переходим к следущему узлу
1705 IgorA 801
		cmp esi,0
802
		je @f
803
		cmp byte[esi+2],bl ;lev
804
		jle @f
5917 IgorA 805
			stdcall dword[tl_node_poi_get_data], tree2,esi
806
			cmp eax,0
1705 IgorA 807
			je @f
5917 IgorA 808
			cmp dword[eax],C_IFN
1705 IgorA 809
			jne @b
5917 IgorA 810
				mov ecx,eax ;получаем данные узла
1727 IgorA 811
				;вставка имени импортированной функции
1720 IgorA 812
				test_bool_prop ecx,BIT_MOD_IMPORT_FUNCT_COMMENT
813
				jae .no_com_1
814
					stdcall insert_text, txt_com
815
				.no_com_1:
1705 IgorA 816
				insert_tab
1727 IgorA 817
				stdcall insert_text_prop, edx,3 ;приставка к функции
1705 IgorA 818
				stdcall insert_text_prop, ecx,0
819
				stdcall insert_text, txt_db
820
				stdcall insert_text, txt_str_beg
821
				stdcall insert_text_prop, ecx,1
822
				stdcall insert_text, txt_str_end
823
				insert_nl
824
			jmp @b
825
	@@:
826
popad
827
	ret
828
 
1698 IgorA 829
;
830
align 4
831
proc get_code_auto_data_dop
832
	pushad
1727 IgorA 833
	insert_nl ;отступ для форматирования
1698 IgorA 834
 
5917 IgorA 835
	stdcall dword[tl_node_poi_get_info], tree2,0
836
	mov esi,eax
1698 IgorA 837
	.beg_iterat:
838
		cmp esi,0
839
		je .find_no
840
 
5917 IgorA 841
		stdcall dword[tl_node_poi_get_data], tree2,esi
842
		cmp eax,0
1698 IgorA 843
		je .find_no
5917 IgorA 844
		mov ebx,eax ;получаем данные узла
1698 IgorA 845
 
1717 IgorA 846
		cmp dword[ebx],C_EDB
1698 IgorA 847
		jne @f
848
			;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
1727 IgorA 849
 
850
			;формируем текстовые данные для editbox-ов
1698 IgorA 851
			stdcall insert_text, txt_txt
3465 IgorA 852
			mov edx,file_name
1714 IgorA 853
			stdcall get_obj_id_str, ebx,edx
1711 IgorA 854
			stdcall insert_text,edx
1698 IgorA 855
 
1711 IgorA 856
			stdcall get_obj_text_col,ebx,10
857
			cmp byte[edx],0
858
			je .no_text
859
				stdcall insert_text, txt_d_poi
860
				stdcall insert_text, txt_db
861
				stdcall insert_text, txt_str_beg
862
				stdcall str_len,edx
863
				stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
864
				stdcall insert_text, txt_str_end
865
				insert_nl
1698 IgorA 866
 
1711 IgorA 867
				insert_tab
868
				stdcall insert_text, txt_met_end
869
				stdcall insert_text, txt_rb
870
				stdcall insert_text, txt_txt
3465 IgorA 871
				mov edx,file_name
1714 IgorA 872
				stdcall get_obj_id_str, ebx,edx
1711 IgorA 873
				stdcall insert_text,edx
874
 
875
				stdcall insert_text, txt_minus
876
				stdcall insert_text, txt_txt
877
				stdcall insert_text,edx
878
				stdcall insert_text, txt_met_end
879
 
880
				insert_plus
881
				stdcall insert_text_prop,ebx,9
882
				insert_plus
883
				stdcall insert_text, txt_3
884
 
885
				insert_nl
886
 
887
				jmp @f
888
 
1727 IgorA 889
			.no_text: ;первоначально текст не задан
1711 IgorA 890
				stdcall insert_text, txt_times
891
 
892
				stdcall insert_text_prop,ebx,9
893
				insert_plus
894
				stdcall insert_text, txt_2
895
				stdcall insert_text, txt_db
896
				insert_0
897
				insert_nl
1698 IgorA 898
		@@:
1720 IgorA 899
		cmp dword[ebx],C_CHB
900
		jne @f
901
			stdcall insert_text_label_data, ebx,9
902
		@@:
5917 IgorA 903
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
904
		mov esi,eax ;переходим к следущему узлу
1698 IgorA 905
 
906
		jmp .beg_iterat
907
	.find_no:
908
	popad
909
	ret
910
endp
911
 
1727 IgorA 912
;связываем кнопки с функциями
1698 IgorA 913
align 4
914
proc get_code_auto_but
915
	pushad
5917 IgorA 916
	stdcall dword[tl_node_poi_get_info], tree2,0
917
	mov esi,eax
1698 IgorA 918
	.beg_iterat:
919
		cmp esi,0
920
		je .find_no
921
 
5917 IgorA 922
		stdcall dword[tl_node_poi_get_data], tree2,esi
923
		cmp eax,0
1698 IgorA 924
		je .find_no
5917 IgorA 925
		mov ebx,eax ;получаем данные узла
1698 IgorA 926
 
1717 IgorA 927
		cmp dword[ebx],C_BUT
1698 IgorA 928
		jne @f
929
			insert_tab
930
			insert_cmp
931
			insert_reg8 txt_ah
932
			insert_coma
933
			stdcall get_obj_text_col,ebx,0
934
			stdcall str_len,edx
935
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
936
			insert_nl
937
			insert_tab
938
			stdcall insert_text, txt_jne_f
939
			insert_nl
940
			insert_tab
941
			insert_tab
942
			stdcall insert_text, txt_call
943
			stdcall get_obj_text_col,ebx,6
944
			stdcall str_len,edx
945
			cmp eax,1
946
			jl .c_fun
947
				stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
948
			.c_fun:
949
			insert_nl
950
			insert_tab
951
			insert_a_met ;@@:
952
			insert_nl
953
		@@:
954
 
5917 IgorA 955
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
956
		mov esi,eax ;переходим к следущему узлу
1698 IgorA 957
 
958
		jmp .beg_iterat
959
	.find_no:
960
	popad
961
	ret
962
endp
963
 
1727 IgorA 964
;берем коды для функций нажатий на кнопки
1698 IgorA 965
align 4
966
proc get_code_a_but_fun
967
	pushad
5917 IgorA 968
	stdcall dword[tl_node_poi_get_info], tree2,0
969
	mov esi,eax
1698 IgorA 970
	.beg_iterat:
971
		cmp esi,0
972
		je .find_no
973
 
5917 IgorA 974
		stdcall dword[tl_node_poi_get_data], tree2,esi
975
		cmp eax,0
1698 IgorA 976
		je .find_no
5917 IgorA 977
		mov ebx,eax ;получаем данные узла
1698 IgorA 978
 
1717 IgorA 979
		cmp dword[ebx],C_BUT
1698 IgorA 980
		jne @f
981
			stdcall get_obj_text_col,ebx,6
982
			stdcall str_len,edx
983
			cmp eax,1
984
			jl .c_fun
985
				insert_nl
986
				stdcall insert_text, txt_align_4
987
				stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
988
				insert_d_poi
989
				insert_nl
990
				insert_tab
991
				insert_ret
992
			.c_fun:
993
		@@:
994
 
5917 IgorA 995
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
996
		mov esi,eax ;переходим к следущему узлу
1698 IgorA 997
 
998
		jmp .beg_iterat
999
	.find_no:
1000
	popad
1001
	ret
1002
endp
1003
 
1004
align 4
1005
proc get_code_key, p_obj:dword
1006
	pushad
1007
		insert_nl
1008
		mov ebx,dword[p_obj]
1009
 
1010
		insert_key_beg
1727 IgorA 1011
		call get_code_funct_key ;коды вызова кнопок
1698 IgorA 1012
		insert_key_end
1013
 
1014
		insert_nl
1015
	popad
1016
	ret
1017
endp
1018
 
1019
align 4
1020
proc get_code_funct_key
1021
	pushad
5917 IgorA 1022
	stdcall dword[tl_node_poi_get_info], tree2,0
1023
	mov esi,eax
1698 IgorA 1024
	.beg_iterat:
1025
		cmp esi,0
1026
		je .find_no
1027
 
5917 IgorA 1028
		stdcall dword[tl_node_poi_get_data], tree2,esi
1029
		cmp eax,0
1698 IgorA 1030
		je .find_no
1031
 
5917 IgorA 1032
		mov ebx,eax ;получаем данные узла
1717 IgorA 1033
		cmp dword[ebx],C_EDB
1698 IgorA 1034
		jne @f
1035
			stdcall insert_text, txt_std_key_ed
1036
			stdcall insert_text_prop,ebx,0
1037
			insert_nl
1038
		@@:
1039
 
5917 IgorA 1040
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
1041
		mov esi,eax ;переходим к следущему узлу
1698 IgorA 1042
 
1043
		jmp .beg_iterat
1044
	.find_no:
1045
	popad
1046
	ret
1047
endp
1048
 
1727 IgorA 1049
;объекты подключения файлов 'include ...'
1698 IgorA 1050
align 4
1051
proc get_code_incl, p_obj:dword
1052
	pushad
1053
		stdcall insert_text, txt_incl
1054
		mov ebx,dword[p_obj]
1055
		stdcall insert_text_prop,ebx,0
1056
 
1057
		stdcall get_obj_text_col,ebx,1
1058
		stdcall str_len,edx
1059
		cmp eax,1
1060
		jl @f
1061
			insert_sp
1062
			insert_com
1063
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
1064
		@@:
1065
 
1066
		insert_nl
1067
	popad
1068
	ret
1069
endp
1070
 
1727 IgorA 1071
;создаем код задания окна
1698 IgorA 1072
align 4
1073
proc get_code_window, p_obj:dword
1074
	pushad
1075
		mov ebx,dword[p_obj]
1076
		;2,3,4,5,6 - x,y,w,h,col_bkg
1077
 
1078
		stdcall insert_text, txt_draw_wb
1079
 
1080
		insert_tab
1081
		insert_xor
1082
		insert_reg txt_eax
1083
		insert_coma
1084
		insert_reg txt_eax
1085
		insert_nl
1086
 
1904 IgorA 1087
		;mov ebx,... задается ширина окна и отступ от левого края экрана
1698 IgorA 1088
		insert_tab
1089
		stdcall insert_text, txt_mov
1090
		insert_reg txt_ebx
1091
		insert_coma
1720 IgorA 1092
		stdcall insert_2_prop_16_bit, ebx,2,4
1698 IgorA 1093
		insert_nl
1094
 
1904 IgorA 1095
		;mov ecx,... задается высота окна и отступ от верхнего края экрана
1698 IgorA 1096
		insert_tab
1097
		stdcall insert_text, txt_mov
1098
		insert_reg txt_ecx
1099
		insert_coma
1720 IgorA 1100
		stdcall insert_2_prop_16_bit, ebx,3,5
1698 IgorA 1101
		insert_nl
1102
 
1904 IgorA 1103
		;mov edx,... задается цвет рабочей области окна
1698 IgorA 1104
		insert_tab
1105
		stdcall insert_text, txt_mov
1106
		insert_reg txt_edx
1107
		insert_coma
1108
		stdcall insert_text_prop, ebx,6
1109
		insert_nl
1110
 
1111
		;or edx,0x33000000
1705 IgorA 1112
		insert_tab
1698 IgorA 1113
		stdcall insert_text, txt_or
1114
		insert_reg txt_edx
1115
		insert_coma
1904 IgorA 1116
		stdcall insert_text,txt_skob_o
1117
		stdcall insert_text_prop, ebx,1 ;стиль окна
1118
		stdcall insert_text,txt_shl_24
1119
		stdcall insert_text,txt_skob_c
1120
		stdcall insert_bit_prop, ebx,BIT_MOD_WI_CAPT
1121
		stdcall insert_bit_prop, ebx,BIT_MOD_WI_CORD_OTN_CL_OBL
1122
		stdcall insert_bit_prop, ebx,BIT_MOD_WI_REDR
1123
		stdcall insert_bit_prop, ebx,BIT_MOD_WI_GRAD
1698 IgorA 1124
		insert_nl
1125
 
1126
		;mov edi,...
1127
		insert_tab
1128
		stdcall insert_text, txt_mov
1129
		insert_reg txt_edi
1130
		insert_coma
1131
		stdcall insert_text_prop, ebx,0
1132
		insert_nl
1133
 
1134
		insert_tab
1135
		stdcall insert_text, txt_i_40
1705 IgorA 1136
		insert_nl
1698 IgorA 1137
 
1138
		call get_code_draw_obj
1139
	popad
1140
	ret
1141
endp
1142
 
1143
 
1727 IgorA 1144
;формируем вызов функций для рисования объектов
1698 IgorA 1145
align 4
1146
proc get_code_draw_obj
1147
	pushad
5917 IgorA 1148
	stdcall dword[tl_node_poi_get_info], tree2,0
1149
	mov esi,eax
1698 IgorA 1150
	.beg_iterat:
1151
		cmp esi,0
1152
		je .find_no
1153
 
5917 IgorA 1154
		stdcall dword[tl_node_poi_get_data], tree2,esi
1155
		cmp eax,0
1698 IgorA 1156
		je .find_no
5917 IgorA 1157
		mov ebx,eax ;получаем данные узла
1698 IgorA 1158
 
1717 IgorA 1159
		cmp dword[ebx],C_EDB
1698 IgorA 1160
		jne @f
1161
			stdcall insert_text, txt_editb_draw
1162
			stdcall insert_text_prop, ebx,0
1163
			insert_nl
1164
		@@:
1717 IgorA 1165
		cmp dword[ebx],C_CHB
1698 IgorA 1166
		jne @f
1167
			stdcall insert_text, txt_cbox_draw
1168
			stdcall insert_text_prop, ebx,0
1169
			insert_nl
1170
		@@:
1717 IgorA 1171
		cmp dword[ebx],C_BUT
1172
		jne .ob_draw_but
1698 IgorA 1173
			insert_tab
1174
			stdcall insert_text, txt_mov
1175
			insert_reg txt_eax
1176
			insert_coma
1177
			stdcall insert_text, txt_8
1178
			insert_nl
1179
 
1180
			insert_tab
1181
			stdcall insert_text, txt_mov
1182
			insert_reg txt_ebx
1183
			insert_coma
1720 IgorA 1184
			stdcall insert_2_prop_16_bit, ebx,1,3
1698 IgorA 1185
			insert_nl
1186
 
1187
			insert_tab
1188
			stdcall insert_text, txt_mov
1189
			insert_reg txt_ecx
1190
			insert_coma
1720 IgorA 1191
			stdcall insert_2_prop_16_bit, ebx,2,4
1698 IgorA 1192
			insert_nl
1193
 
1194
			insert_tab
1195
			stdcall insert_text, txt_mov
1196
			insert_reg txt_edx
1197
			insert_coma
1198
			stdcall insert_text_prop, ebx,0
1717 IgorA 1199
			test_bool_prop ebx,BIT_MOD_BUT_NFON
1200
			jnc @f
1201
				stdcall insert_text, txt_plus
1202
				stdcall insert_text, txt_bit_30
1203
			@@:
1204
			test_bool_prop ebx,BIT_MOD_BUT_NBORD
1205
			jnc @f
1206
				stdcall insert_text, txt_plus
1207
				stdcall insert_text, txt_bit_29
1208
			@@:
1698 IgorA 1209
			insert_nl
1210
 
1211
			insert_tab
1212
			stdcall insert_text, txt_mov
1213
			insert_reg txt_esi
1214
			insert_coma
1215
			stdcall insert_text_prop, ebx,5 ;button color
1216
			insert_nl
1217
 
1218
			insert_tab
1219
			stdcall insert_text, txt_i_40
1220
			insert_nl
1717 IgorA 1221
		.ob_draw_but:
1222
		cmp dword[ebx],C_REC
1698 IgorA 1223
		jne @f
1224
			insert_tab
1225
			stdcall insert_text, txt_mov
1226
			insert_reg txt_eax
1227
			insert_coma
1228
			stdcall insert_text, txt_1
1229
			stdcall insert_text, txt_3
1230
			insert_nl
1231
 
1232
			insert_tab
1233
			stdcall insert_text, txt_mov
1234
			insert_reg txt_ebx
1235
			insert_coma
1720 IgorA 1236
			stdcall insert_2_prop_16_bit, ebx,1,3
1698 IgorA 1237
			insert_nl
1238
 
1239
			insert_tab
1240
			stdcall insert_text, txt_mov
1241
			insert_reg txt_ecx
1242
			insert_coma
1720 IgorA 1243
			stdcall insert_2_prop_16_bit, ebx,2,4
1698 IgorA 1244
			insert_nl
1245
 
1246
			insert_tab
1247
			stdcall insert_text, txt_mov
1248
			insert_reg txt_edx
1249
			insert_coma
1250
			stdcall insert_text_prop, ebx,0 ;rect color
1251
			insert_nl
1252
 
1253
			insert_tab
1254
			stdcall insert_text, txt_i_40
1255
			insert_nl
1256
		@@:
1727 IgorA 1257
		cmp dword[ebx],C_DTT ;рисование текста через сист. ф. 4
1717 IgorA 1258
		jne .ob_draw_text
1711 IgorA 1259
			insert_tab
1260
			stdcall insert_text, txt_mov
1261
			insert_reg txt_eax
1262
			insert_coma
1263
			stdcall insert_text, txt_4
1264
			insert_nl
1698 IgorA 1265
 
1711 IgorA 1266
			insert_tab
1267
			stdcall insert_text, txt_mov
1268
			insert_reg txt_ebx
1269
			insert_coma
1720 IgorA 1270
			stdcall insert_2_prop_16_bit, ebx,1,2
1711 IgorA 1271
			insert_nl
1272
 
1273
			insert_tab
1274
			stdcall insert_text, txt_mov
1275
			insert_reg txt_ecx
1276
			insert_coma
1277
			stdcall insert_text_prop, ebx,3
1727 IgorA 1278
			stdcall insert_bit_prop, ebx,BIT_MOD_TXT_ASCII_0 ;31 - бит для строки ASCIIZ
1279
			stdcall insert_bit_prop, ebx,BIT_MOD_TXT_NO_TRAN ;30 - бит для не прозрачного текста
1280
			stdcall insert_bit_prop, ebx,BIT_MOD_TXT_CHAR2 ;28 - бит для 2-го сист. шрифта
1711 IgorA 1281
			insert_nl
1282
 
1283
			insert_tab
1284
			stdcall insert_text, txt_mov
1285
			insert_reg txt_edx
1286
			insert_coma
1287
			stdcall insert_text, txt_txt
3465 IgorA 1288
			mov edx,file_name
1714 IgorA 1289
			stdcall get_obj_id_str, ebx,edx
1711 IgorA 1290
			stdcall insert_text,edx
1291
			insert_nl
1292
 
1293
;mov esi,...
1717 IgorA 1294
			test_bool_prop ebx,BIT_MOD_TXT_NO_TRAN
1295
			jnc @f
1296
				insert_tab
1297
				stdcall insert_text, txt_mov
1298
				insert_reg txt_edi
1299
				insert_coma
1727 IgorA 1300
				stdcall insert_text_prop, ebx,4 ;цвет фона
1717 IgorA 1301
				insert_nl
1302
			@@:
1711 IgorA 1303
 
1304
			insert_tab
1305
			stdcall insert_text, txt_i_40
1306
			insert_nl
1717 IgorA 1307
		.ob_draw_text:
1711 IgorA 1308
 
5917 IgorA 1309
		stdcall dword[tl_node_poi_get_next_info], tree2,esi
1310
		mov esi,eax ;переходим к следущему узлу
1698 IgorA 1311
 
1312
		jmp .beg_iterat
1313
	.find_no:
1314
	popad
1315
	ret
1316
endp
1317
 
1727 IgorA 1318
;создать код объявления переменной
1698 IgorA 1319
align 4
1320
proc get_code_variable, p_obj:dword,o_lev:dword
1321
	pushad
1322
		mov ebx,dword[p_obj]
1323
		;0,1,2 - name,value,comment
1324
 
1325
		mov ecx,dword[o_lev]
1326
		cmp cl,0
1727 IgorA 1327
		je .no_tab ;избегаем зацикливания (0-1 = 2^32-1)
1717 IgorA 1328
		and ecx,0xff
1698 IgorA 1329
		cld
1330
		@@:
1727 IgorA 1331
			insert_tab ;формирование отступа перед переменной
1698 IgorA 1332
		loop @b
1333
		.no_tab:
1334
 
1727 IgorA 1335
		stdcall insert_text_prop, ebx,0 ;имя переменной
1698 IgorA 1336
		insert_sp
1337
 
1727 IgorA 1338
		mov ecx,dword[ebx+u_object.typid-u_object] ;ecx - относительный индекс родительского объекта (в памяти)
1698 IgorA 1339
		xor eax,eax
1340
		mov ax,[tree2.info_size]
1727 IgorA 1341
		imul ecx,eax ;умножаем индекс на размер структуры
1342
		add ecx,[tree2.data_info] ;ecx - указатель данные родительского узла
1698 IgorA 1343
 
1727 IgorA 1344
		;проверку на правильность ecx ???
1698 IgorA 1345
 
1727 IgorA 1346
		stdcall insert_text_prop, ecx,0 ;тип переменной
1698 IgorA 1347
		insert_sp
1727 IgorA 1348
		stdcall insert_text_prop, ebx,1 ;значение
1698 IgorA 1349
 
1727 IgorA 1350
		stdcall get_obj_text_col,ebx,2 ;комментарий
1698 IgorA 1351
		stdcall str_len,edx
1352
		cmp eax,1
1353
		jl @f
1354
			insert_sp
1355
			insert_com
1356
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
1357
		@@:
1358
		insert_nl
1359
 
1360
	popad
1361
	ret
1362
endp
1363
 
1364
 
1365
 
1727 IgorA 1366
;--- текстовые константы ---
1705 IgorA 1367
txt_str_beg db 39,0
1368
txt_str_end db 39,',0',0
1698 IgorA 1369
txt_coma db ',',0
1720 IgorA 1370
txt_skob_o db '(',0
1371
txt_skob_c db ')',0
1727 IgorA 1372
txt_skob_fo db '{',0 ;скобка фигурная открывающая
1373
txt_skob_fc db '}',0 ;скобка фигурная закрывающая
1698 IgorA 1374
txt_i_40 db 'int 0x40',13,0
1375
txt_0 db '0',0
1376
txt_1 db '1',0
1377
txt_2 db '2',0
1378
txt_3 db '3',0
1379
txt_4 db '4',0
1380
txt_8 db '8',0
1381
txt_plus db '+',0
1711 IgorA 1382
txt_minus db '-',0
1383
;txt_dol db '$',0
1698 IgorA 1384
txt_nl db 13,0
1385
txt_com db ';',0
1386
txt_sp db ' ',0
1387
txt_tab db 9,0
1388
txt_br db '\',13,9,0
1705 IgorA 1389
txt_txt db 'txt_',0
1390
txt_db db ' db ',0
1391
txt_dd db ' dd ',0
1711 IgorA 1392
txt_rb db ' rb ',0
1705 IgorA 1393
txt_dd_0_0 db 9,'dd 0,0',13,0
1394
txt_mouse_dd db ', mouse_dd, ',0
1395
txt_times db ':',13,9,'times ',0
1698 IgorA 1396
txt_draw_wb:
1397
	db 13,'align 4',13,'draw_window:',13,'pushad',13,9,'mcall 12,1',13,0
1398
txt_draw_we:
1399
	db 9,'mcall 12,2',13,'popad',13,9,'ret',13,0
1706 IgorA 1400
txt_sys_dir db 'system_dir_',0
1401
txt_lib_name db 'lib_name_',0
1402
txt_lib_path db ' sys_path, library_path, ',0
1403
txt_sys_err db 'Системная ошибка',0
1404
txt_ll_start db 'l_libs_start:',13,0
1405
txt_lib db 9,'lib_',0
1406
txt_ll db 'l_libs ',0
1407
txt_err_m_f_lib db 'err_msg_found_lib_',0
1408
txt_head_l db 'head_f_l',0
1409
txt_err_m_i_lib db 'err_msg_import_',0
1410
txt_head_i db 'head_f_i',0
1411
txt_ll_end db 'l_libs_end:',13,0
1727 IgorA 1412
;txt_bit_28 db '0x10000000',0
1717 IgorA 1413
txt_bit_29 db '0x20000000',0
1414
txt_bit_30 db '0x40000000',0
1727 IgorA 1415
;txt_bit_31 db '0x80000000',0
1720 IgorA 1416
txt_struc db 'struc',0
1417
txt_t db 't',0
1711 IgorA 1418
txt_met_end db '.end',0
1698 IgorA 1419
txt_ends db 'ends',13,13,0
1420
txt_mov db 'mov ',0
1421
txt_xor db 'xor ',0
1422
txt_or db 'or  ',0
1423
txt_cmp db 'cmp ',0
1424
txt_call db 'call ',0
1425
txt_jne_f db 'jne @f',0
1426
txt_a_met db '@@:',0
1427
txt_ah db 'ah',0
1428
txt_eax db 'eax',0
1429
txt_ebx db 'ebx',0
1430
txt_ecx db 'ecx',0
1431
txt_edx db 'edx',0
1432
txt_edi db 'edi',0
1433
txt_esi db 'esi',0
1434
txt_align_4 db 'align 4',13,0
1435
txt_d_poi db ':',0
1436
txt_ret db 'ret',13,0
1720 IgorA 1437
txt_shl_16 db ' shl 16',0
1904 IgorA 1438
txt_shl_24 db ' shl 24',0
1698 IgorA 1439
txt_std_mouse_ed:
1440
	db 9,'stdcall [edit_box_mouse], ',0
1720 IgorA 1441
txt_std_init_cb:
1442
	db 9,'init_checkboxes2 check_boxes,check_boxes_end',13,0
1698 IgorA 1443
txt_std_mouse_cb:
1444
	db 9,'stdcall [check_box_mouse], ',0
1445
txt_std_key_ed:
1446
	db 9,'stdcall [edit_box_key], ',0
1447
txt_incl:
1448
	db 'include ',0
1720 IgorA 1449
 
1450
txt_cbox db ' check_box2',0
1451
txt_cb_b db 13,'check_boxes:',0
1452
txt_cb_e db 'check_boxes_end:',13,0
1453
 
1706 IgorA 1454
txt_ebox db ' edit_box',0
1732 IgorA 1455
txt_editb_draw db 9,'stdcall [edit_box_draw], ',0
1456
txt_cbox_draw db 9,'stdcall [check_box_draw], ',0
1698 IgorA 1457
 
1732 IgorA 1458
;начало функции кнопок
1459
txt_but_beg db 'align 4',13,'button:',13,9,'mcall 17',13,0
1460
txt_but_mid db 9,'cmp ah,1',13,9,'jne still',13,'.exit:',13,0
1461
;конец функции кнопок (завершение програмы)
1462
txt_but_end db 9,'mcall -1',13,0
1698 IgorA 1463
 
1464
txt_key_1:
1465
db 'align 4',13,'key:',13,9,'mcall 2',13
1466
txt_key_2:
1467
db 9,'jmp still',13
1468
txt_key_3:
1469
 
1727 IgorA 1470
;получаем порядковый номер объекта относительно памяти элемента tree2
1714 IgorA 1471
;output:
1727 IgorA 1472
; txt_buf - строка с номером объекта
1698 IgorA 1473
align 4
1714 IgorA 1474
proc get_obj_id_str, p_obj:dword, txt_buf:dword
1698 IgorA 1475
	push eax ecx edx
1476
	mov eax,dword[p_obj]
1477
	sub eax,[tree2.data_info]
1478
	xor edx,edx
1479
	xor ecx,ecx
1480
	mov cx,word[tree2.info_size]
1481
	div ecx
1482
 
1483
	mov edx,dword[txt_buf]
1484
	mov byte[edx],0
1485
	stdcall str_cat_value,edx,eax
1486
	pop edx ecx eax
1487
	ret
1488
endp
1489
 
1727 IgorA 1490
;получаем порядковый номер объекта относительно памяти элемента tree2
1714 IgorA 1491
;output:
1727 IgorA 1492
; eax - номер объекта
1714 IgorA 1493
align 4
1494
proc get_obj_id, p_obj:dword
1495
	push ecx edx
1496
	mov eax,dword[p_obj]
1497
	sub eax,[tree2.data_info]
1498
	xor edx,edx
1499
	xor ecx,ecx
1500
	mov cx,word[tree2.info_size]
1501
	div ecx
1502
	pop edx ecx
1503
	ret
1504
endp
1505
 
1727 IgorA 1506
;--- текстовые функции ---
1698 IgorA 1507
 
1727 IgorA 1508
;выбираем строку из масива, по указанному индексу
1509
;input:
1510
; str - указатель на масив строк
1511
; ind - индекс искомой строки
1512
;output:
1513
; edi - указатель на найденую строку
1698 IgorA 1514
align 4
1727 IgorA 1515
proc get_string_by_ind, str:dword, ind:dword
1516
push eax ebx ecx
1517
	mov edi,[str]
1518
	mov ebx,[ind]
1519
	xor al,al ;0 - символ конца строки
1520
	@@:
1521
		cmp ebx,0
1522
		jle @f ;если найдена строка с указанным индексом
1523
		xor ecx,ecx
1524
		dec ecx ;ecx - число просматриваемых байт
1525
		cld
1526
		repne scasb ;ищем конец строки (al=0)
1527
		cmp byte[edi],0
1528
		je @f ;если следующей строки нет выход из цикла
1529
		dec ebx
1530
		jmp @b
1531
	@@:
1532
pop ecx ebx eax
1533
	ret
1534
endp
1535
 
1536
align 4
1698 IgorA 1537
proc mem_clear, mem:dword, len:dword
1538
	push eax ecx edi
1539
	cld
1540
	xor al,al
1541
	mov edi, dword[mem]
1542
	mov ecx, dword[len]
1543
	repne stosb
1544
	pop edi ecx eax
1545
	ret
1546
endp
1547
 
1548
align 4
1549
proc str_cat, str1:dword, str2:dword
1550
	push eax ecx edi esi
1551
	mov esi,dword[str2]
1552
	stdcall str_len,esi
1553
	mov ecx,eax
1554
	inc ecx
1555
	mov edi,dword[str1]
1556
	stdcall str_len,edi
1557
	add edi,eax
1558
	cld
1559
	repne movsb
1560
	pop esi edi ecx eax
1561
	ret
1562
endp
1563
 
1564
align 4
1565
proc str_cat_value, str1:dword, value:dword
1566
	pushad
1567
	mov edi,[str1]
1568
	stdcall str_len,edi
1569
	add edi,eax
1570
	mov eax,[value]
1571
	call tl_convert_to_str
1572
	popad
1573
	ret
1574
endp
1575
 
1576
;output:
1577
; eax = strlen
1578
align 4
1579
proc str_len, str1:dword
1580
	mov eax,[str1]
1581
	@@:
1582
		cmp byte[eax],0
1583
		je @f
1584
		inc eax
1585
		jmp @b
1586
	@@:
1587
	sub eax,[str1]
1588
	ret
1589
endp
1590
 
1591
;input:
1592
; eax = value
1593
; edi = string buffer
1594
align 4
1595
tl_convert_to_str:
1596
	pushad
1597
	stdcall mem_clear,edi,12
1598
	call .str
1599
	popad
1600
	ret
1601
 
1602
align 4
1603
.str:
1727 IgorA 1604
	mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число
1605
		;преревод числа в ASCII строку входные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной
1606
	cmp eax,ecx  ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax
1698 IgorA 1607
	jb @f
1727 IgorA 1608
		xor edx,edx ;очистить edx
1609
		div ecx     ;разделить - остаток в edx
1610
		push edx    ;положить в стек
1611
		;dec edi    ;смещение необходимое для записи с конца строки
1612
		call .str   ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx
1698 IgorA 1613
		pop eax
1727 IgorA 1614
	@@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная))
1615
	or al,0x30  ;данная команда короче  чем две выше
1616
	stosb	    ;записать элемент из регистра al в ячеку памяти es:edi
1698 IgorA 1617
	ret