Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1698 IgorA 1
;
2
; в этом файле собраны функции создающие програмный код
3
;
4
u_object object ;временный объект для задания смещений
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
 
23
;функция вставляет текстовую строку в текстовый редактор
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
 
36
;вставляет указанное свойство из объекта в текстовый редактор
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
 
49
macro insert_tab
50
{
51
	stdcall [ted_text_add], tedit0,txt_tab,1,ted_opt_ed_move_cursor
52
}
53
macro insert_br
54
{
55
	stdcall [ted_text_add], tedit0,txt_br,3,ted_opt_ed_move_cursor
56
}
57
macro insert_a_met
58
{
59
	stdcall [ted_text_add], tedit0,txt_a_met,3,ted_opt_ed_move_cursor
60
}
61
macro insert_0
62
{
63
	stdcall [ted_text_add], tedit0,txt_0,1,ted_opt_ed_move_cursor
64
}
65
macro insert_plus
66
{
67
	stdcall [ted_text_add], tedit0,txt_plus,1,ted_opt_ed_move_cursor
68
}
69
macro insert_xor
70
{
71
	stdcall [ted_text_add], tedit0,txt_xor,4,ted_opt_ed_move_cursor
72
}
73
macro insert_cmp
74
{
75
	stdcall [ted_text_add], tedit0,txt_cmp,4,ted_opt_ed_move_cursor
76
}
77
macro insert_reg reg_name
78
{
79
	stdcall [ted_text_add], tedit0,reg_name,3,ted_opt_ed_move_cursor
80
}
81
macro insert_reg8 reg_name
82
{
83
	stdcall [ted_text_add], tedit0,reg_name,2,ted_opt_ed_move_cursor
84
}
85
macro insert_i65p
86
{
87
	stdcall [ted_text_add], tedit0,txt_i65p,7,ted_opt_ed_move_cursor
88
}
89
 
90
 
91
;
92
macro insert_but_beg
93
{
94
	stdcall [ted_text_add], tedit0,txt_but_1,txt_but_2-txt_but_1,ted_opt_ed_move_cursor
95
}
96
macro insert_but_end
97
{
98
	stdcall [ted_text_add], tedit0,txt_but_2,txt_but_3-txt_but_2,ted_opt_ed_move_cursor
99
}
100
;
101
macro insert_key_beg
102
{
103
	stdcall [ted_text_add], tedit0,txt_key_1,txt_key_2-txt_key_1,ted_opt_ed_move_cursor
104
}
105
macro insert_key_end
106
{
107
	stdcall [ted_text_add], tedit0,txt_key_2,txt_key_3-txt_key_2,ted_opt_ed_move_cursor
108
}
109
 
110
macro insert_d_poi
111
{
112
	stdcall [ted_text_add], tedit0,txt_d_poi,1,ted_opt_ed_move_cursor
113
}
114
macro insert_ret
115
{
116
	stdcall [ted_text_add], tedit0,txt_ret,4,ted_opt_ed_move_cursor
117
}
118
 
119
 
120
align 4
121
but_code_gen:
122
	call code_gen
123
	cmp byte[show_mode],1 ;условие видимости текстового окна
124
	jne @f
125
		stdcall [ted_draw], tedit0
126
	@@:
127
	ret
128
 
129
;функция создающая код всего файла
130
align 4
131
code_gen:
132
	stdcall [ted_clear], tedit0,1
133
pushad
134
	stdcall dword[tl_node_poi_get_info], 0,tree2
135
	pop esi
136
	xor bl,bl
137
	call code_gen_obj
138
	stdcall [ted_text_add], tedit0,\
139
		txt_nl,1,ted_opt_ed_move_cursor+ted_opt_ed_change_time ;добавляем символ новой строки с опцией ted_opt_ed_change_time для возможности сохранения файла
140
	stdcall [ted_init_scroll_bars], tedit0, 4 ;меняем размеры скроллингов
141
popad
142
	ret
143
 
144
;input:
145
; bl - уровень объекта
146
; esi - указатель на узел
147
align 4
148
code_gen_obj:
149
push ebx
150
	.beg_iterat:
151
		cmp esi,0
152
		je .find_no
153
 
154
		cmp byte[esi+2],bl ;lev
155
		jl .find_no
156
 
157
		stdcall dword[tl_node_poi_get_data], esi,tree2
158
		pop eax ;получаем данные узла
159
		cmp eax,0
160
		je .find_no
161
 
162
		cmp byte[eax],C_ST
163
		jne @f
164
			stdcall get_code_struct,eax ;обработка объекта
165
			stdcall dword[tl_node_poi_get_next_info], esi,tree2
166
			pop ecx ;переходим к следущему узлу
167
			cmp ecx,0
168
			je .find_no
169
			cmp byte[ecx+2],bl ;lev
170
			jle .end_st
171
				mov esi,ecx
172
				push bx
173
					mov bl,byte[esi+2]
174
					call code_gen_obj ;рекурсивный вызов дочерних объектов
175
				pop bx
176
			.end_st:
177
			stdcall [ted_text_add], tedit0,txt_ends,6,ted_opt_ed_move_cursor
178
			jmp .beg_iterat
179
		@@:
180
		cmp byte[eax],C_TT
181
		jne @f
182
			stdcall get_code_text,eax ;обработка объекта
183
		@@:
184
		cmp byte[eax],C_IN
185
		jne @f
186
			stdcall get_code_incl,eax ;обработка объекта
187
		@@:
188
		cmp byte[eax],C_CO
189
		jne @f
190
			stdcall get_code_comment,eax ;обработка объекта
191
		@@:
192
		cmp byte[eax],C_VR
193
		jne @f
194
			stdcall get_code_variable,eax,ebx ;обработка объекта
195
		@@:
196
		cmp byte[eax],C_WI
197
		jne @f
198
			stdcall get_code_window,eax ;обработка объекта
199
		@@:
200
		cmp byte[eax],C_AC
201
		jne @f
202
			stdcall get_code_auto,eax ;обработка объекта
203
		@@:
204
		cmp byte[eax],C_KE ;клавиатура
205
		jne @f
206
			stdcall get_code_key,eax ;обработка объекта
207
		@@:
208
 
209
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
210
		pop esi ;переходим к следущему узлу
211
 
212
		jmp .beg_iterat
213
	.find_no:
214
pop ebx
215
	ret
216
 
217
 
218
align 4
219
proc get_code_text, p_obj:dword
220
	pushad
221
		insert_nl
222
		mov ebx,dword[p_obj]
223
		stdcall get_obj_text_col,ebx,0
224
		stdcall str_len,edx
225
		stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
226
		insert_nl
227
	popad
228
	ret
229
endp
230
 
1706 IgorA 231
;обработка объекта создающего автоматичексие коды
1698 IgorA 232
align 4
233
proc get_code_auto, p_obj:dword
234
	pushad
235
		insert_nl
236
		mov ebx,dword[p_obj]
237
		mov ecx,dword[ebx+u_object.modif-u_object]
238
		bt ecx,BIT_MOD_ACM
239
		jae @f
240
			;автоматические события от мыши
241
			call get_code_auto_m
242
		@@:
243
		bt ecx,BIT_MOD_ABU
244
		jae @f
245
			;создание функции button
246
			insert_but_beg
247
			call get_code_auto_but ;коды вызова кнопок
248
			insert_but_end
249
			call get_code_a_but_fun ;коды функций, вызываемых при нажатии кнопок
250
		@@:
251
		bt ecx,BIT_MOD_ACD
252
		jae @f
253
			call get_code_auto_data_el
254
			call get_code_auto_data_dop
1706 IgorA 255
 
256
			xor edx,edx
257
			mov dl,C_LIB
258
			stdcall find_obj_in_file,edx ;eax - указатель на структуру библиотеки
259
			cmp eax,0
260
			je @f
261
				stdcall insert_text, txt_head_i
262
				stdcall insert_text, txt_d_poi
263
				insert_nl
264
				stdcall insert_text, txt_head_l
265
				stdcall insert_text, txt_db
266
				stdcall insert_text, txt_str_beg
267
				stdcall insert_text, txt_sys_err
268
				stdcall insert_text, txt_str_end
269
				insert_nl
270
 
271
				call get_code_auto_data_libs_param
272
				stdcall insert_text, txt_ll_start
273
					call get_code_auto_data_libs_struc
274
				stdcall insert_text, txt_ll_end
275
				call get_code_auto_data_libs ;таблицы импорта библиотек
1698 IgorA 276
		@@:
277
		insert_nl
278
	popad
279
	ret
280
endp
281
 
282
 
283
align 4
284
proc get_code_auto_m
285
	pushad
286
	stdcall dword[tl_node_poi_get_info], 0,tree2
287
	pop esi
288
	.beg_iterat:
289
		cmp esi,0
290
		je .find_no
291
 
292
		stdcall dword[tl_node_poi_get_data], esi,tree2
293
		pop ebx ;получаем данные узла
294
		cmp ebx,0
295
		je .find_no
296
 
297
		cmp byte[ebx],C_ED
298
		jne @f
299
			stdcall insert_text, txt_std_mouse_ed
300
			;insert_sp
301
			stdcall get_obj_text_col,ebx,0
302
			stdcall str_len,edx
303
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
304
			insert_nl
305
		@@:
306
		cmp byte[ebx],C_CB
307
		jne @f
308
			stdcall insert_text, txt_std_mouse_cb
309
			;insert_sp
310
			stdcall get_obj_text_col,ebx,0
311
			stdcall str_len,edx
312
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
313
			insert_nl
314
		@@:
315
 
316
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
317
		pop esi ;переходим к следущему узлу
318
 
319
		jmp .beg_iterat
320
	.find_no:
321
	popad
322
	ret
323
endp
324
 
325
;создание данных (структур объектов)
326
align 4
327
proc get_code_auto_data_el
328
	pushad
329
	insert_nl ;отступ для форматирования
330
 
331
	stdcall dword[tl_node_poi_get_info], 0,tree2
332
	pop esi
333
	.beg_iterat:
334
		cmp esi,0
335
		je .find_no
336
 
337
		stdcall dword[tl_node_poi_get_data], esi,tree2
338
		pop ebx ;получаем данные узла
339
		cmp ebx,0
340
		je .find_no
341
 
342
		cmp byte[ebx],C_ED
343
		jne @f
344
			;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
1705 IgorA 345
			stdcall insert_text_prop, ebx,0
1698 IgorA 346
			stdcall insert_text, txt_ebox
347
 
348
			mov ecx,1
349
			.prop:
350
				insert_sp
1705 IgorA 351
				stdcall insert_text_prop, ebx,ecx
1698 IgorA 352
				insert_coma
353
				inc ecx
354
				cmp ecx,10
355
			jl .prop
356
 
357
			insert_br
358
			stdcall insert_text, txt_txt
359
 
360
			mov edx,fp_icon
361
			stdcall get_obj_id, ebx,edx
1706 IgorA 362
			stdcall insert_text,edx
1698 IgorA 363
 
364
			stdcall insert_text, txt_mouse_dd
365
			insert_nl
366
		@@:
367
		;cmp byte[ebx],C_CB
368
		;jne @f
369
		;@@:
370
 
371
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
372
		pop esi ;переходим к следущему узлу
373
 
374
		jmp .beg_iterat
375
	.find_no:
376
	popad
377
	ret
378
endp
379
 
1705 IgorA 380
;данные для библиотек
381
align 4
1706 IgorA 382
proc get_code_auto_data_libs_param
383
	pushad
384
	insert_nl ;отступ для форматирования
385
 
386
	stdcall dword[tl_node_poi_get_info], 0,tree2
387
	pop esi
388
	.beg_iterat:
389
		cmp esi,0
390
		je .find_no
391
 
392
		stdcall dword[tl_node_poi_get_data], esi,tree2
393
		pop ebx ;получаем данные узла
394
		cmp ebx,0
395
		je .find_no
396
 
397
		cmp byte[ebx],C_LIB
398
		jne @f
399
			;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
400
 
401
			stdcall insert_text, txt_sys_dir
402
			;object code
403
			mov edx,fp_icon
404
			stdcall get_obj_id, ebx,edx
405
			stdcall insert_text,edx
406
			stdcall insert_text,txt_db
407
			;stdcall insert_text, txt_str_beg
408
			stdcall insert_text_prop, ebx,1
409
			;stdcall insert_text, txt_str_end
410
			insert_nl
411
 
412
			stdcall insert_text, txt_lib_name
413
			stdcall insert_text,edx
414
			stdcall insert_text,txt_db
415
			stdcall insert_text, txt_str_beg
416
			stdcall insert_text_prop, ebx,0
417
			stdcall insert_text, txt_str_end
418
			insert_nl
419
 
420
			stdcall insert_text,txt_err_m_f_lib
421
			stdcall insert_text,edx
422
			stdcall insert_text,txt_db
423
			stdcall insert_text, txt_str_beg
424
			stdcall insert_text_prop, ebx,4
425
			stdcall insert_text, txt_str_end
426
			insert_nl
427
 
428
			stdcall insert_text,txt_err_m_i_lib
429
			stdcall insert_text,edx
430
			stdcall insert_text,txt_db
431
			stdcall insert_text, txt_str_beg
432
			stdcall insert_text_prop, ebx,5
433
			stdcall insert_text, txt_str_end
434
			insert_nl
435
 
436
			insert_nl
437
		@@:
438
 
439
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
440
		pop esi ;переходим к следущему узлу
441
 
442
		jmp .beg_iterat
443
	.find_no:
444
	popad
445
	ret
446
endp
447
 
448
;данные для библиотек
449
align 4
450
proc get_code_auto_data_libs_struc
451
	pushad
452
	;insert_nl ;отступ для форматирования
453
 
454
	stdcall dword[tl_node_poi_get_info], 0,tree2
455
	pop esi
456
	.beg_iterat:
457
		cmp esi,0
458
		je .find_no
459
 
460
		stdcall dword[tl_node_poi_get_data], esi,tree2
461
		pop ebx ;получаем данные узла
462
		cmp ebx,0
463
		je .find_no
464
 
465
		cmp byte[ebx],C_LIB
466
		jne @f
467
			;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
468
 
469
			stdcall insert_text, txt_lib
470
			;object code
471
			mov edx,fp_icon
472
			stdcall get_obj_id, ebx,edx
473
			stdcall insert_text,edx
474
			insert_sp
475
			stdcall insert_text, txt_ll
476
			stdcall insert_text, txt_lib_name
477
			stdcall insert_text,edx
478
			stdcall insert_text,txt_coma
479
 
480
			stdcall insert_text, txt_lib_path
481
 
482
			stdcall insert_text, txt_sys_dir
483
			stdcall insert_text,edx
484
			stdcall insert_text,txt_coma
485
			stdcall insert_text,txt_br
486
			stdcall insert_text,txt_tab
487
 
488
			stdcall insert_text,txt_err_m_f_lib
489
			stdcall insert_text,edx
490
			stdcall insert_text,txt_coma
491
			stdcall insert_text,txt_head_l
492
			stdcall insert_text,txt_coma
493
 
494
			stdcall insert_text_prop, ebx,2
495
			stdcall insert_text,txt_coma
496
 
497
			stdcall insert_text,txt_err_m_i_lib
498
			stdcall insert_text,edx
499
			stdcall insert_text,txt_coma
500
			stdcall insert_text,txt_head_i
501
 
502
			insert_nl
503
		@@:
504
 
505
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
506
		pop esi ;переходим к следущему узлу
507
 
508
		jmp .beg_iterat
509
	.find_no:
510
	popad
511
	ret
512
endp
513
 
514
;данные для библиотек
515
align 4
1705 IgorA 516
proc get_code_auto_data_libs
517
	pushad
518
	insert_nl ;отступ для форматирования
519
 
520
	stdcall dword[tl_node_poi_get_info], 0,tree2
521
	pop esi
522
	.beg_iterat:
523
		cmp esi,0
524
		je .find_no
525
 
526
		stdcall dword[tl_node_poi_get_data], esi,tree2
527
		pop ebx ;получаем данные узла
528
		cmp ebx,0
529
		je .find_no
530
 
531
		cmp byte[ebx],C_LIB
532
		jne @f
533
			;0,1,2,3,4,5 - l_nam,s_dir,i_met,...
534
			stdcall insert_text, txt_align_4
535
			stdcall insert_text_prop, ebx,2
536
			stdcall insert_text, txt_d_poi
537
			insert_nl
538
 
539
			call get_code_lib_table
540
		@@:
541
 
542
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
543
		pop esi ;переходим к следущему узлу
544
 
545
		jmp .beg_iterat
546
	.find_no:
547
	popad
548
	ret
549
endp
550
 
551
;input:
552
; esi
553
align 4
554
get_code_lib_table:
555
pushad
556
	mov bl,byte[esi+2]
557
	mov edi,esi
558
	stdcall dword[tl_node_poi_get_data], esi,tree2
559
	pop edx ;получение данных родительского объекта
560
	cmp edx,0
561
	je @f
562
	@@:
563
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
564
		pop esi ;переходим к следущему узлу
565
		cmp esi,0
566
		je @f
567
		cmp byte[esi+2],bl ;lev
568
		jle @f
569
			stdcall dword[tl_node_poi_get_data], esi,tree2
570
			pop ecx ;получаем данные узла
571
			cmp ecx,0
572
			je @f
573
			cmp byte[ecx],C_IFN
574
			jne @b
575
				;вставка указателя на функцию
576
				insert_tab
577
				stdcall insert_text_prop, ecx,0
578
				stdcall insert_text, txt_dd
579
				stdcall insert_text_prop, edx,3 ;приставка к функции
580
				stdcall insert_text_prop, ecx,0
581
				insert_nl
582
			jmp @b
583
	@@:
584
	stdcall insert_text, txt_dd_0_0
585
	mov esi,edi
586
	@@:
587
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
588
		pop esi ;переходим к следущему узлу
589
		cmp esi,0
590
		je @f
591
		cmp byte[esi+2],bl ;lev
592
		jle @f
593
			stdcall dword[tl_node_poi_get_data], esi,tree2
594
			pop ecx ;получаем данные узла
595
			cmp ecx,0
596
			je @f
597
			cmp byte[ecx],C_IFN
598
			jne @b
599
				;вставка имени импортированной функции
600
				insert_tab
601
				stdcall insert_text_prop, edx,3 ;приставка к функции
602
				stdcall insert_text_prop, ecx,0
603
				stdcall insert_text, txt_db
604
				stdcall insert_text, txt_str_beg
605
				stdcall insert_text_prop, ecx,1
606
				stdcall insert_text, txt_str_end
607
				insert_nl
608
			jmp @b
609
	@@:
610
popad
611
	ret
612
 
1698 IgorA 613
;
614
align 4
615
proc get_code_auto_data_dop
616
	pushad
617
	insert_nl ;отступ для форматирования
618
 
619
	stdcall dword[tl_node_poi_get_info], 0,tree2
620
	pop esi
621
	.beg_iterat:
622
		cmp esi,0
623
		je .find_no
624
 
625
		stdcall dword[tl_node_poi_get_data], esi,tree2
626
		pop ebx ;получаем данные узла
627
		cmp ebx,0
628
		je .find_no
629
 
630
		cmp byte[ebx],C_ED
631
		jne @f
632
			;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
633
			stdcall insert_text, txt_txt
634
 
635
			mov edx,fp_icon
636
			stdcall get_obj_id, ebx,edx
637
			stdcall str_len,edx ;eax = len(fp_icon)
638
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
639
			stdcall insert_text, txt_times
640
 
641
			stdcall get_obj_text_col,ebx,9
642
			stdcall str_len,edx
643
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
644
 
645
			insert_plus
646
			stdcall insert_text, txt_2
647
			stdcall insert_text, txt_db
648
			insert_0
649
			insert_nl
650
		@@:
651
		;cmp byte[ebx],C_CB
652
		;jne @f
653
		;@@:
654
 
655
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
656
		pop esi ;переходим к следущему узлу
657
 
658
		jmp .beg_iterat
659
	.find_no:
660
	popad
661
	ret
662
endp
663
 
664
;связываем кнопки с функциями
665
align 4
666
proc get_code_auto_but
667
	pushad
668
	stdcall dword[tl_node_poi_get_info], 0,tree2
669
	pop esi
670
	.beg_iterat:
671
		cmp esi,0
672
		je .find_no
673
 
674
		stdcall dword[tl_node_poi_get_data], esi,tree2
675
		pop ebx ;получаем данные узла
676
		cmp ebx,0
677
		je .find_no
678
 
679
		cmp byte[ebx],C_BU
680
		jne @f
681
			insert_tab
682
			insert_cmp
683
			insert_reg8 txt_ah
684
			insert_coma
685
			stdcall get_obj_text_col,ebx,0
686
			stdcall str_len,edx
687
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
688
			insert_nl
689
			insert_tab
690
			stdcall insert_text, txt_jne_f
691
			insert_nl
692
			insert_tab
693
			insert_tab
694
			stdcall insert_text, txt_call
695
			stdcall get_obj_text_col,ebx,6
696
			stdcall str_len,edx
697
			cmp eax,1
698
			jl .c_fun
699
				stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
700
			.c_fun:
701
			insert_nl
702
			insert_tab
703
			insert_a_met ;@@:
704
			insert_nl
705
		@@:
706
 
707
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
708
		pop esi ;переходим к следущему узлу
709
 
710
		jmp .beg_iterat
711
	.find_no:
712
	popad
713
	ret
714
endp
715
 
716
;берем коды для функций нажатий на кнопки
717
align 4
718
proc get_code_a_but_fun
719
	pushad
720
	stdcall dword[tl_node_poi_get_info], 0,tree2
721
	pop esi
722
	.beg_iterat:
723
		cmp esi,0
724
		je .find_no
725
 
726
		stdcall dword[tl_node_poi_get_data], esi,tree2
727
		pop ebx ;получаем данные узла
728
		cmp ebx,0
729
		je .find_no
730
 
731
		cmp byte[ebx],C_BU
732
		jne @f
733
			stdcall get_obj_text_col,ebx,6
734
			stdcall str_len,edx
735
			cmp eax,1
736
			jl .c_fun
737
				insert_nl
738
				stdcall insert_text, txt_align_4
739
				stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
740
				insert_d_poi
741
				insert_nl
742
				insert_tab
743
				insert_ret
744
			.c_fun:
745
		@@:
746
 
747
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
748
		pop esi ;переходим к следущему узлу
749
 
750
		jmp .beg_iterat
751
	.find_no:
752
	popad
753
	ret
754
endp
755
 
756
align 4
757
proc get_code_key, p_obj:dword
758
	pushad
759
		insert_nl
760
		mov ebx,dword[p_obj]
761
 
762
		insert_key_beg
763
		call get_code_funct_key ;коды вызова кнопок
764
		insert_key_end
765
 
766
		insert_nl
767
	popad
768
	ret
769
endp
770
 
771
align 4
772
proc get_code_funct_key
773
	pushad
774
	stdcall dword[tl_node_poi_get_info], 0,tree2
775
	pop esi
776
	.beg_iterat:
777
		cmp esi,0
778
		je .find_no
779
 
780
		stdcall dword[tl_node_poi_get_data], esi,tree2
781
		pop ebx ;получаем данные узла
782
		cmp ebx,0
783
		je .find_no
784
 
785
		cmp byte[ebx],C_ED
786
		jne @f
787
			stdcall insert_text, txt_std_key_ed
788
			stdcall insert_text_prop,ebx,0
789
			insert_nl
790
		@@:
791
 
792
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
793
		pop esi ;переходим к следущему узлу
794
 
795
		jmp .beg_iterat
796
	.find_no:
797
	popad
798
	ret
799
endp
800
 
801
;объекты подключения файлов 'include ...'
802
align 4
803
proc get_code_incl, p_obj:dword
804
	pushad
805
		stdcall insert_text, txt_incl
806
		mov ebx,dword[p_obj]
807
		stdcall insert_text_prop,ebx,0
808
 
809
		stdcall get_obj_text_col,ebx,1
810
		stdcall str_len,edx
811
		cmp eax,1
812
		jl @f
813
			insert_sp
814
			insert_com
815
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
816
		@@:
817
 
818
		insert_nl
819
	popad
820
	ret
821
endp
822
 
823
align 4
824
proc get_code_comment, p_obj:dword
825
	insert_com
826
	stdcall insert_text_prop, dword[p_obj],0
827
	insert_nl
828
	ret
829
endp
830
 
831
;создаем код задания окна
832
align 4
833
proc get_code_window, p_obj:dword
834
	pushad
835
		mov ebx,dword[p_obj]
836
		;2,3,4,5,6 - x,y,w,h,col_bkg
837
 
838
		stdcall insert_text, txt_draw_wb
839
 
840
		insert_tab
841
		insert_xor
842
		insert_reg txt_eax
843
		insert_coma
844
		insert_reg txt_eax
845
		insert_nl
846
 
847
		;mov ebx,...
848
		insert_tab
849
		stdcall insert_text, txt_mov
850
		insert_reg txt_ebx
851
		insert_coma
852
		stdcall insert_text_prop, ebx,2
853
		insert_i65p
854
		stdcall insert_text_prop, ebx,4
855
		insert_nl
856
 
857
		;mov ecx,...
858
		insert_tab
859
		stdcall insert_text, txt_mov
860
		insert_reg txt_ecx
861
		insert_coma
862
		stdcall insert_text_prop, ebx,3
863
		insert_i65p
864
		stdcall insert_text_prop, ebx,5
865
		insert_nl
866
 
867
		;mov edx,...
868
		insert_tab
869
		stdcall insert_text, txt_mov
870
		insert_reg txt_edx
871
		insert_coma
872
		stdcall insert_text_prop, ebx,6
873
		insert_nl
874
 
875
		;or edx,0x33000000
1705 IgorA 876
		insert_tab
1698 IgorA 877
		stdcall insert_text, txt_or
878
		insert_reg txt_edx
879
		insert_coma
880
		stdcall insert_text, txt_0x33000000
881
		insert_nl
882
 
883
		;mov edi,...
884
		insert_tab
885
		stdcall insert_text, txt_mov
886
		insert_reg txt_edi
887
		insert_coma
888
		stdcall insert_text_prop, ebx,0
889
		insert_nl
890
 
891
		insert_tab
892
		stdcall insert_text, txt_i_40
1705 IgorA 893
		insert_nl
1698 IgorA 894
 
895
		call get_code_draw_obj
896
 
1705 IgorA 897
		stdcall insert_text, txt_draw_we ;код завершающий функцию рисования
1698 IgorA 898
	popad
899
	ret
900
endp
901
 
902
 
903
;формируем вызов функций для рисования объектов
904
align 4
905
proc get_code_draw_obj
906
	pushad
907
	stdcall dword[tl_node_poi_get_info], 0,tree2
908
	pop esi
909
	.beg_iterat:
910
		cmp esi,0
911
		je .find_no
912
 
913
		stdcall dword[tl_node_poi_get_data], esi,tree2
914
		pop ebx ;получаем данные узла
915
		cmp ebx,0
916
		je .find_no
917
 
918
		cmp byte[ebx],C_ED
919
		jne @f
920
			stdcall insert_text, txt_editb_draw
921
			stdcall insert_text_prop, ebx,0
922
			insert_nl
923
		@@:
924
		cmp byte[ebx],C_CB
925
		jne @f
926
			stdcall insert_text, txt_cbox_draw
927
			stdcall insert_text_prop, ebx,0
928
			insert_nl
929
		@@:
930
		cmp byte[ebx],C_BU
931
		jne @f
932
			insert_tab
933
			stdcall insert_text, txt_mov
934
			insert_reg txt_eax
935
			insert_coma
936
			stdcall insert_text, txt_8
937
			insert_nl
938
 
939
			insert_tab
940
			stdcall insert_text, txt_mov
941
			insert_reg txt_ebx
942
			insert_coma
943
			stdcall insert_text_prop, ebx,1
944
			insert_i65p
945
			stdcall insert_text_prop, ebx,3
946
			insert_nl
947
 
948
			insert_tab
949
			stdcall insert_text, txt_mov
950
			insert_reg txt_ecx
951
			insert_coma
952
			stdcall insert_text_prop, ebx,2
953
			insert_i65p
954
			stdcall insert_text_prop, ebx,4
955
			insert_nl
956
 
957
			insert_tab
958
			stdcall insert_text, txt_mov
959
			insert_reg txt_edx
960
			insert_coma
961
			stdcall insert_text_prop, ebx,0
962
			insert_nl
963
 
964
			insert_tab
965
			stdcall insert_text, txt_or
966
			insert_reg txt_edx
967
			insert_coma
968
			stdcall insert_text, txt_but_create
969
			insert_nl
970
 
971
			insert_tab
972
			stdcall insert_text, txt_mov
973
			insert_reg txt_esi
974
			insert_coma
975
			stdcall insert_text_prop, ebx,5 ;button color
976
			insert_nl
977
 
978
			insert_tab
979
			stdcall insert_text, txt_i_40
980
			insert_nl
981
		@@:
982
		cmp byte[ebx],C_RE
983
		jne @f
984
			insert_tab
985
			stdcall insert_text, txt_mov
986
			insert_reg txt_eax
987
			insert_coma
988
			stdcall insert_text, txt_1
989
			stdcall insert_text, txt_3
990
			insert_nl
991
 
992
			insert_tab
993
			stdcall insert_text, txt_mov
994
			insert_reg txt_ebx
995
			insert_coma
996
			stdcall insert_text_prop, ebx,1
997
			insert_i65p
998
			stdcall insert_text_prop, ebx,3
999
			insert_nl
1000
 
1001
			insert_tab
1002
			stdcall insert_text, txt_mov
1003
			insert_reg txt_ecx
1004
			insert_coma
1005
			stdcall insert_text_prop, ebx,2
1006
			insert_i65p
1007
			stdcall insert_text_prop, ebx,4
1008
			insert_nl
1009
 
1010
			insert_tab
1011
			stdcall insert_text, txt_mov
1012
			insert_reg txt_edx
1013
			insert_coma
1014
			stdcall insert_text_prop, ebx,0 ;rect color
1015
			insert_nl
1016
 
1017
			insert_tab
1018
			stdcall insert_text, txt_i_40
1019
			insert_nl
1020
		@@:
1021
 
1022
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
1023
		pop esi ;переходим к следущему узлу
1024
 
1025
		jmp .beg_iterat
1026
	.find_no:
1027
	popad
1028
	ret
1029
endp
1030
 
1031
 
1032
 
1033
align 4
1034
proc get_code_struct, p_obj:dword
1035
	pushad
1036
		mov ebx,dword[p_obj]
1037
		;0 - name
1038
 
1039
		stdcall [ted_text_add], tedit0,txt_struct,7,ted_opt_ed_move_cursor
1705 IgorA 1040
		stdcall insert_text_prop, ebx,0
1698 IgorA 1041
		insert_nl
1042
 
1043
	popad
1044
	ret
1045
endp
1046
 
1047
;создать код объявления переменной
1048
align 4
1049
proc get_code_variable, p_obj:dword,o_lev:dword
1050
	pushad
1051
		mov ebx,dword[p_obj]
1052
		;0,1,2 - name,value,comment
1053
 
1054
		mov ecx,dword[o_lev]
1055
		cmp cl,0
1056
		je .no_tab ;избегаем зацикливания (0-1 = 2^32-1)
1057
		and cx,0xff
1058
		cld
1059
		@@:
1060
			insert_tab ;формирование отступа перед переменной
1061
		loop @b
1062
		.no_tab:
1063
 
1705 IgorA 1064
		stdcall insert_text_prop, ebx,0 ;имя переменной
1698 IgorA 1065
		insert_sp
1066
 
1067
		mov ecx,dword[ebx+u_object.typid-u_object] ;ecx - относительный индекс родительского объекта (в памяти)
1068
		xor eax,eax
1069
		mov ax,[tree2.info_size]
1070
		imul ecx,eax ;умножаем индекс на размер структуры
1071
		add ecx,[tree2.data_info] ;ecx - указатель данные родительского узла
1072
 
1073
		;проверку на правильность ecx ???
1074
 
1705 IgorA 1075
		stdcall insert_text_prop, ecx,0 ;тип переменной
1698 IgorA 1076
		insert_sp
1705 IgorA 1077
		stdcall insert_text_prop, ebx,1 ;значение
1698 IgorA 1078
 
1705 IgorA 1079
		stdcall get_obj_text_col,ebx,2 ;комментарий
1698 IgorA 1080
		stdcall str_len,edx
1081
		cmp eax,1
1082
		jl @f
1083
			insert_sp
1084
			insert_com
1085
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
1086
		@@:
1087
		insert_nl
1088
 
1089
	popad
1090
	ret
1091
endp
1092
 
1093
 
1094
 
1095
;--- текстовые константы ---
1705 IgorA 1096
txt_str_beg db 39,0
1097
txt_str_end db 39,',0',0
1698 IgorA 1098
txt_coma db ',',0
1099
txt_i_40 db 'int 0x40',13,0
1100
txt_0 db '0',0
1101
txt_1 db '1',0
1102
txt_2 db '2',0
1103
txt_3 db '3',0
1104
txt_4 db '4',0
1105
txt_8 db '8',0
1106
txt_plus db '+',0
1107
txt_nl db 13,0
1108
txt_com db ';',0
1109
txt_sp db ' ',0
1110
txt_tab db 9,0
1111
txt_br db '\',13,9,0
1705 IgorA 1112
txt_txt db 'txt_',0
1113
txt_db db ' db ',0
1114
txt_dd db ' dd ',0
1115
txt_dd_0_0 db 9,'dd 0,0',13,0
1116
txt_mouse_dd db ', mouse_dd, ',0
1117
txt_times db ':',13,9,'times ',0
1698 IgorA 1118
txt_draw_wb:
1119
	db 13,'align 4',13,'draw_window:',13,'pushad',13,9,'mcall 12,1',13,0
1120
txt_draw_we:
1121
	db 9,'mcall 12,2',13,'popad',13,9,'ret',13,0
1706 IgorA 1122
txt_sys_dir db 'system_dir_',0
1123
txt_lib_name db 'lib_name_',0
1124
txt_lib_path db ' sys_path, library_path, ',0
1125
txt_sys_err db '‘Ёб⥬­ п ®иЁЎЄ ',0
1126
txt_ll_start db 'l_libs_start:',13,0
1127
txt_lib db 9,'lib_',0
1128
txt_ll db 'l_libs ',0
1129
txt_err_m_f_lib db 'err_msg_found_lib_',0
1130
txt_head_l db 'head_f_l',0
1131
txt_err_m_i_lib db 'err_msg_import_',0
1132
txt_head_i db 'head_f_i',0
1133
txt_ll_end db 'l_libs_end:',13,0
1698 IgorA 1134
txt_but_create db '0x40000000',0 ;tmp
1135
txt_0x33000000 db '0x33000000',0 ;tmp
1136
txt_struct db 'struct ',0
1137
txt_ends db 'ends',13,13,0
1138
txt_mov db 'mov ',0
1139
txt_xor db 'xor ',0
1140
txt_or db 'or  ',0
1141
txt_cmp db 'cmp ',0
1142
txt_call db 'call ',0
1143
txt_jne_f db 'jne @f',0
1144
txt_a_met db '@@:',0
1145
txt_ah db 'ah',0
1146
txt_eax db 'eax',0
1147
txt_ebx db 'ebx',0
1148
txt_ecx db 'ecx',0
1149
txt_edx db 'edx',0
1150
txt_edi db 'edi',0
1151
txt_esi db 'esi',0
1152
txt_align_4 db 'align 4',13,0
1153
txt_d_poi db ':',0
1154
txt_ret db 'ret',13,0
1155
txt_i65p db '*65536+',0
1156
txt_std_mouse_ed:
1157
	db 9,'stdcall [edit_box_mouse], ',0
1158
txt_std_mouse_cb:
1159
	db 9,'stdcall [check_box_mouse], ',0
1160
txt_std_key_ed:
1161
	db 9,'stdcall [edit_box_key], ',0
1162
txt_incl:
1163
	db 'include ',0
1706 IgorA 1164
txt_ebox db ' edit_box',0
1698 IgorA 1165
txt_editb_draw:
1166
	db 9,'stdcall [edit_box_draw], ',0
1167
txt_cbox_draw:
1168
	db 9,'stdcall [check_box_draw], ',0
1169
 
1170
txt_but_1:
1171
db 'align 4',13,'button:',13,9,'mcall 17',13
1172
txt_but_2:
1173
db 9,'cmp ah,1',13,9,'jne still',13,'.exit:',13,9,'mcall -1',13
1174
txt_but_3:
1175
 
1176
txt_key_1:
1177
db 'align 4',13,'key:',13,9,'mcall 2',13
1178
txt_key_2:
1179
db 9,'jmp still',13
1180
txt_key_3:
1181
 
1182
align 4
1183
proc get_obj_id, p_obj:dword, txt_buf:dword
1184
	push eax ecx edx
1185
	mov eax,dword[p_obj]
1186
	sub eax,[tree2.data_info]
1187
	xor edx,edx
1188
	xor ecx,ecx
1189
	mov cx,word[tree2.info_size]
1190
	div ecx
1191
 
1192
	mov edx,dword[txt_buf]
1193
	mov byte[edx],0
1194
	stdcall str_cat_value,edx,eax
1195
	pop edx ecx eax
1196
	ret
1197
endp
1198
 
1199
;--- текстовые функции ---
1200
 
1201
align 4
1202
proc mem_clear, mem:dword, len:dword
1203
	push eax ecx edi
1204
	cld
1205
	xor al,al
1206
	mov edi, dword[mem]
1207
	mov ecx, dword[len]
1208
	repne stosb
1209
	pop edi ecx eax
1210
	ret
1211
endp
1212
 
1213
align 4
1214
proc str_cat, str1:dword, str2:dword
1215
	push eax ecx edi esi
1216
	mov esi,dword[str2]
1217
	stdcall str_len,esi
1218
	mov ecx,eax
1219
	inc ecx
1220
	mov edi,dword[str1]
1221
	stdcall str_len,edi
1222
	add edi,eax
1223
	cld
1224
	repne movsb
1225
	pop esi edi ecx eax
1226
	ret
1227
endp
1228
 
1229
align 4
1230
proc str_cat_value, str1:dword, value:dword
1231
	pushad
1232
	mov edi,[str1]
1233
	stdcall str_len,edi
1234
	add edi,eax
1235
	mov eax,[value]
1236
	call tl_convert_to_str
1237
	popad
1238
	ret
1239
endp
1240
 
1241
;output:
1242
; eax = strlen
1243
align 4
1244
proc str_len, str1:dword
1245
	mov eax,[str1]
1246
	@@:
1247
		cmp byte[eax],0
1248
		je @f
1249
		inc eax
1250
		jmp @b
1251
	@@:
1252
	sub eax,[str1]
1253
	ret
1254
endp
1255
 
1256
;input:
1257
; eax = value
1258
; edi = string buffer
1259
align 4
1260
tl_convert_to_str:
1261
	pushad
1262
	stdcall mem_clear,edi,12
1263
	call .str
1264
	popad
1265
	ret
1266
 
1267
align 4
1268
.str:
1269
	mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число
1270
		;преревод числа в ASCII строку входные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной
1271
	cmp eax,ecx  ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax
1272
	jb @f
1273
		xor edx,edx ;очистить edx
1274
		div ecx     ;разделить - остаток в edx
1275
		push edx    ;положить в стек
1276
		;dec edi    ;смещение необходимое для записи с конца строки
1277
		call .str   ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx
1278
		pop eax
1279
	@@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная))
1280
	or al,0x30  ;данная команда короче  чем две выше
1281
	stosb	    ;записать элемент из регистра al в ячеку памяти es:edi
1282
	ret