Subversion Repositories Kolibri OS

Rev

Rev 1705 | Go to most recent revision | Details | 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
 
231
align 4
232
proc get_code_auto, p_obj:dword
233
	pushad
234
		insert_nl
235
		mov ebx,dword[p_obj]
236
		mov ecx,dword[ebx+u_object.modif-u_object]
237
		bt ecx,BIT_MOD_ACM
238
		jae @f
239
			;автоматические события от мыши
240
			call get_code_auto_m
241
		@@:
242
		bt ecx,BIT_MOD_ABU
243
		jae @f
244
			;создание функции button
245
			insert_but_beg
246
			call get_code_auto_but ;коды вызова кнопок
247
			insert_but_end
248
			call get_code_a_but_fun ;коды функций, вызываемых при нажатии кнопок
249
		@@:
250
		bt ecx,BIT_MOD_ACD
251
		jae @f
252
			call get_code_auto_data_el
253
			call get_code_auto_data_dop
254
		@@:
255
		insert_nl
256
	popad
257
	ret
258
endp
259
 
260
 
261
align 4
262
proc get_code_auto_m
263
	pushad
264
	stdcall dword[tl_node_poi_get_info], 0,tree2
265
	pop esi
266
	.beg_iterat:
267
		cmp esi,0
268
		je .find_no
269
 
270
		stdcall dword[tl_node_poi_get_data], esi,tree2
271
		pop ebx ;получаем данные узла
272
		cmp ebx,0
273
		je .find_no
274
 
275
		cmp byte[ebx],C_ED
276
		jne @f
277
			stdcall insert_text, txt_std_mouse_ed
278
			;insert_sp
279
			stdcall get_obj_text_col,ebx,0
280
			stdcall str_len,edx
281
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
282
			insert_nl
283
		@@:
284
		cmp byte[ebx],C_CB
285
		jne @f
286
			stdcall insert_text, txt_std_mouse_cb
287
			;insert_sp
288
			stdcall get_obj_text_col,ebx,0
289
			stdcall str_len,edx
290
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
291
			insert_nl
292
		@@:
293
 
294
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
295
		pop esi ;переходим к следущему узлу
296
 
297
		jmp .beg_iterat
298
	.find_no:
299
	popad
300
	ret
301
endp
302
 
303
;создание данных (структур объектов)
304
align 4
305
proc get_code_auto_data_el
306
	pushad
307
	insert_nl ;отступ для форматирования
308
 
309
	stdcall dword[tl_node_poi_get_info], 0,tree2
310
	pop esi
311
	.beg_iterat:
312
		cmp esi,0
313
		je .find_no
314
 
315
		stdcall dword[tl_node_poi_get_data], esi,tree2
316
		pop ebx ;получаем данные узла
317
		cmp ebx,0
318
		je .find_no
319
 
320
		cmp byte[ebx],C_ED
321
		jne @f
322
			;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
323
			stdcall get_obj_text_col,ebx,0
324
			stdcall str_len,edx
325
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
326
			stdcall insert_text, txt_ebox
327
 
328
			mov ecx,1
329
			.prop:
330
				insert_sp
331
				stdcall get_obj_text_col,ebx,ecx
332
				stdcall str_len,edx
333
				stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
334
				insert_coma
335
				inc ecx
336
				cmp ecx,10
337
			jl .prop
338
 
339
			insert_br
340
			;insert_tab
341
			stdcall insert_text, txt_txt
342
 
343
			mov edx,fp_icon
344
			stdcall get_obj_id, ebx,edx
345
			stdcall str_len,edx ;eax = len(fp_icon)
346
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
347
 
348
			;insert_coma
349
			;insert_sp
350
			stdcall insert_text, txt_mouse_dd
351
			insert_nl
352
		@@:
353
		;cmp byte[ebx],C_CB
354
		;jne @f
355
		;@@:
356
 
357
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
358
		pop esi ;переходим к следущему узлу
359
 
360
		jmp .beg_iterat
361
	.find_no:
362
	popad
363
	ret
364
endp
365
 
366
;
367
align 4
368
proc get_code_auto_data_dop
369
	pushad
370
	insert_nl ;отступ для форматирования
371
 
372
	stdcall dword[tl_node_poi_get_info], 0,tree2
373
	pop esi
374
	.beg_iterat:
375
		cmp esi,0
376
		je .find_no
377
 
378
		stdcall dword[tl_node_poi_get_data], esi,tree2
379
		pop ebx ;получаем данные узла
380
		cmp ebx,0
381
		je .find_no
382
 
383
		cmp byte[ebx],C_ED
384
		jne @f
385
			;1,2,3,4,...,6,...8,...,10 - w,x,y,col_fon,...,col_frame,...,col_txt,...,txt
386
			stdcall insert_text, txt_txt
387
 
388
			mov edx,fp_icon
389
			stdcall get_obj_id, ebx,edx
390
			stdcall str_len,edx ;eax = len(fp_icon)
391
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
392
			stdcall insert_text, txt_times
393
 
394
			stdcall get_obj_text_col,ebx,9
395
			stdcall str_len,edx
396
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
397
 
398
			insert_plus
399
			stdcall insert_text, txt_2
400
			stdcall insert_text, txt_db
401
			insert_0
402
			insert_nl
403
		@@:
404
		;cmp byte[ebx],C_CB
405
		;jne @f
406
		;@@:
407
 
408
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
409
		pop esi ;переходим к следущему узлу
410
 
411
		jmp .beg_iterat
412
	.find_no:
413
	popad
414
	ret
415
endp
416
 
417
;связываем кнопки с функциями
418
align 4
419
proc get_code_auto_but
420
	pushad
421
	stdcall dword[tl_node_poi_get_info], 0,tree2
422
	pop esi
423
	.beg_iterat:
424
		cmp esi,0
425
		je .find_no
426
 
427
		stdcall dword[tl_node_poi_get_data], esi,tree2
428
		pop ebx ;получаем данные узла
429
		cmp ebx,0
430
		je .find_no
431
 
432
		cmp byte[ebx],C_BU
433
		jne @f
434
			insert_tab
435
			insert_cmp
436
			insert_reg8 txt_ah
437
			insert_coma
438
			stdcall get_obj_text_col,ebx,0
439
			stdcall str_len,edx
440
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
441
			insert_nl
442
			insert_tab
443
			stdcall insert_text, txt_jne_f
444
			insert_nl
445
			insert_tab
446
			insert_tab
447
			stdcall insert_text, txt_call
448
			stdcall get_obj_text_col,ebx,6
449
			stdcall str_len,edx
450
			cmp eax,1
451
			jl .c_fun
452
				stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
453
			.c_fun:
454
			insert_nl
455
			insert_tab
456
			insert_a_met ;@@:
457
			insert_nl
458
		@@:
459
 
460
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
461
		pop esi ;переходим к следущему узлу
462
 
463
		jmp .beg_iterat
464
	.find_no:
465
	popad
466
	ret
467
endp
468
 
469
;берем коды для функций нажатий на кнопки
470
align 4
471
proc get_code_a_but_fun
472
	pushad
473
	stdcall dword[tl_node_poi_get_info], 0,tree2
474
	pop esi
475
	.beg_iterat:
476
		cmp esi,0
477
		je .find_no
478
 
479
		stdcall dword[tl_node_poi_get_data], esi,tree2
480
		pop ebx ;получаем данные узла
481
		cmp ebx,0
482
		je .find_no
483
 
484
		cmp byte[ebx],C_BU
485
		jne @f
486
			stdcall get_obj_text_col,ebx,6
487
			stdcall str_len,edx
488
			cmp eax,1
489
			jl .c_fun
490
				insert_nl
491
				stdcall insert_text, txt_align_4
492
				stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
493
				insert_d_poi
494
				insert_nl
495
				insert_tab
496
				insert_ret
497
			.c_fun:
498
		@@:
499
 
500
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
501
		pop esi ;переходим к следущему узлу
502
 
503
		jmp .beg_iterat
504
	.find_no:
505
	popad
506
	ret
507
endp
508
 
509
align 4
510
proc get_code_key, p_obj:dword
511
	pushad
512
		insert_nl
513
		mov ebx,dword[p_obj]
514
 
515
		insert_key_beg
516
		call get_code_funct_key ;коды вызова кнопок
517
		insert_key_end
518
 
519
		insert_nl
520
	popad
521
	ret
522
endp
523
 
524
align 4
525
proc get_code_funct_key
526
	pushad
527
	stdcall dword[tl_node_poi_get_info], 0,tree2
528
	pop esi
529
	.beg_iterat:
530
		cmp esi,0
531
		je .find_no
532
 
533
		stdcall dword[tl_node_poi_get_data], esi,tree2
534
		pop ebx ;получаем данные узла
535
		cmp ebx,0
536
		je .find_no
537
 
538
		cmp byte[ebx],C_ED
539
		jne @f
540
			stdcall insert_text, txt_std_key_ed
541
			stdcall insert_text_prop,ebx,0
542
			insert_nl
543
		@@:
544
 
545
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
546
		pop esi ;переходим к следущему узлу
547
 
548
		jmp .beg_iterat
549
	.find_no:
550
	popad
551
	ret
552
endp
553
 
554
;объекты подключения файлов 'include ...'
555
align 4
556
proc get_code_incl, p_obj:dword
557
	pushad
558
		stdcall insert_text, txt_incl
559
		mov ebx,dword[p_obj]
560
		stdcall insert_text_prop,ebx,0
561
 
562
		stdcall get_obj_text_col,ebx,1
563
		stdcall str_len,edx
564
		cmp eax,1
565
		jl @f
566
			insert_sp
567
			insert_com
568
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
569
		@@:
570
 
571
		insert_nl
572
	popad
573
	ret
574
endp
575
 
576
align 4
577
proc get_code_comment, p_obj:dword
578
	insert_com
579
	stdcall insert_text_prop, dword[p_obj],0
580
	insert_nl
581
	ret
582
endp
583
 
584
;создаем код задания окна
585
align 4
586
proc get_code_window, p_obj:dword
587
	pushad
588
		mov ebx,dword[p_obj]
589
		;2,3,4,5,6 - x,y,w,h,col_bkg
590
 
591
		stdcall insert_text, txt_draw_wb
592
 
593
		insert_tab
594
		insert_xor
595
		insert_reg txt_eax
596
		insert_coma
597
		insert_reg txt_eax
598
		insert_nl
599
 
600
		;mov ebx,...
601
		insert_tab
602
		stdcall insert_text, txt_mov
603
		insert_reg txt_ebx
604
		insert_coma
605
		stdcall insert_text_prop, ebx,2
606
		insert_i65p
607
		stdcall insert_text_prop, ebx,4
608
		insert_nl
609
 
610
		;mov ecx,...
611
		insert_tab
612
		stdcall insert_text, txt_mov
613
		insert_reg txt_ecx
614
		insert_coma
615
		stdcall insert_text_prop, ebx,3
616
		insert_i65p
617
		stdcall insert_text_prop, ebx,5
618
		insert_nl
619
 
620
		;mov edx,...
621
		insert_tab
622
		stdcall insert_text, txt_mov
623
		insert_reg txt_edx
624
		insert_coma
625
		stdcall insert_text_prop, ebx,6
626
		insert_nl
627
 
628
		;or edx,0x33000000
629
		stdcall insert_text, txt_or
630
		insert_reg txt_edx
631
		insert_coma
632
		stdcall insert_text, txt_0x33000000
633
		insert_nl
634
 
635
		;mov edi,...
636
		insert_tab
637
		stdcall insert_text, txt_mov
638
		insert_reg txt_edi
639
		insert_coma
640
		stdcall insert_text_prop, ebx,0
641
		insert_nl
642
 
643
		insert_tab
644
		stdcall insert_text, txt_i_40
645
 
646
		call get_code_draw_obj
647
 
648
		stdcall insert_text, txt_draw_we
649
	popad
650
	ret
651
endp
652
 
653
 
654
;формируем вызов функций для рисования объектов
655
align 4
656
proc get_code_draw_obj
657
	pushad
658
	stdcall dword[tl_node_poi_get_info], 0,tree2
659
	pop esi
660
	.beg_iterat:
661
		cmp esi,0
662
		je .find_no
663
 
664
		stdcall dword[tl_node_poi_get_data], esi,tree2
665
		pop ebx ;получаем данные узла
666
		cmp ebx,0
667
		je .find_no
668
 
669
		cmp byte[ebx],C_ED
670
		jne @f
671
			stdcall insert_text, txt_editb_draw
672
			stdcall insert_text_prop, ebx,0
673
			insert_nl
674
		@@:
675
		cmp byte[ebx],C_CB
676
		jne @f
677
			stdcall insert_text, txt_cbox_draw
678
			stdcall insert_text_prop, ebx,0
679
			insert_nl
680
		@@:
681
		cmp byte[ebx],C_BU
682
		jne @f
683
			insert_tab
684
			stdcall insert_text, txt_mov
685
			insert_reg txt_eax
686
			insert_coma
687
			stdcall insert_text, txt_8
688
			insert_nl
689
 
690
			insert_tab
691
			stdcall insert_text, txt_mov
692
			insert_reg txt_ebx
693
			insert_coma
694
			stdcall insert_text_prop, ebx,1
695
			insert_i65p
696
			stdcall insert_text_prop, ebx,3
697
			insert_nl
698
 
699
			insert_tab
700
			stdcall insert_text, txt_mov
701
			insert_reg txt_ecx
702
			insert_coma
703
			stdcall insert_text_prop, ebx,2
704
			insert_i65p
705
			stdcall insert_text_prop, ebx,4
706
			insert_nl
707
 
708
			insert_tab
709
			stdcall insert_text, txt_mov
710
			insert_reg txt_edx
711
			insert_coma
712
			stdcall insert_text_prop, ebx,0
713
			insert_nl
714
 
715
			insert_tab
716
			stdcall insert_text, txt_or
717
			insert_reg txt_edx
718
			insert_coma
719
			stdcall insert_text, txt_but_create
720
			insert_nl
721
 
722
			insert_tab
723
			stdcall insert_text, txt_mov
724
			insert_reg txt_esi
725
			insert_coma
726
			stdcall insert_text_prop, ebx,5 ;button color
727
			insert_nl
728
 
729
			insert_tab
730
			stdcall insert_text, txt_i_40
731
			insert_nl
732
		@@:
733
		cmp byte[ebx],C_RE
734
		jne @f
735
			insert_tab
736
			stdcall insert_text, txt_mov
737
			insert_reg txt_eax
738
			insert_coma
739
			stdcall insert_text, txt_1
740
			stdcall insert_text, txt_3
741
			insert_nl
742
 
743
			insert_tab
744
			stdcall insert_text, txt_mov
745
			insert_reg txt_ebx
746
			insert_coma
747
			stdcall insert_text_prop, ebx,1
748
			insert_i65p
749
			stdcall insert_text_prop, ebx,3
750
			insert_nl
751
 
752
			insert_tab
753
			stdcall insert_text, txt_mov
754
			insert_reg txt_ecx
755
			insert_coma
756
			stdcall insert_text_prop, ebx,2
757
			insert_i65p
758
			stdcall insert_text_prop, ebx,4
759
			insert_nl
760
 
761
			insert_tab
762
			stdcall insert_text, txt_mov
763
			insert_reg txt_edx
764
			insert_coma
765
			stdcall insert_text_prop, ebx,0 ;rect color
766
			insert_nl
767
 
768
			insert_tab
769
			stdcall insert_text, txt_i_40
770
			insert_nl
771
		@@:
772
 
773
		stdcall dword[tl_node_poi_get_next_info], esi,tree2
774
		pop esi ;переходим к следущему узлу
775
 
776
		jmp .beg_iterat
777
	.find_no:
778
	popad
779
	ret
780
endp
781
 
782
 
783
 
784
align 4
785
proc get_code_struct, p_obj:dword
786
	pushad
787
		mov ebx,dword[p_obj]
788
		;0 - name
789
 
790
		stdcall [ted_text_add], tedit0,txt_struct,7,ted_opt_ed_move_cursor
791
		stdcall get_obj_text_col,ebx,0
792
		stdcall str_len,edx
793
		stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
794
		insert_nl
795
 
796
	popad
797
	ret
798
endp
799
 
800
;создать код объявления переменной
801
align 4
802
proc get_code_variable, p_obj:dword,o_lev:dword
803
	pushad
804
		mov ebx,dword[p_obj]
805
		;0,1,2 - name,value,comment
806
 
807
		mov ecx,dword[o_lev]
808
		cmp cl,0
809
		je .no_tab ;избегаем зацикливания (0-1 = 2^32-1)
810
		and cx,0xff
811
		cld
812
		@@:
813
			insert_tab ;формирование отступа перед переменной
814
		loop @b
815
		.no_tab:
816
 
817
		stdcall get_obj_text_col,ebx,0
818
		stdcall str_len,edx
819
		stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
820
		insert_sp
821
 
822
		mov ecx,dword[ebx+u_object.typid-u_object] ;ecx - относительный индекс родительского объекта (в памяти)
823
		xor eax,eax
824
		mov ax,[tree2.info_size]
825
		imul ecx,eax ;умножаем индекс на размер структуры
826
		add ecx,[tree2.data_info] ;ecx - указатель данные родительского узла
827
 
828
		;проверку на правильность ecx ???
829
 
830
		stdcall get_obj_text_col,ecx,0
831
		stdcall str_len,edx
832
		stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
833
		insert_sp
834
 
835
		stdcall get_obj_text_col,ebx,1
836
		stdcall str_len,edx
837
		stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
838
 
839
		stdcall get_obj_text_col,ebx,2
840
		stdcall str_len,edx
841
		cmp eax,1
842
		jl @f
843
			insert_sp
844
			insert_com
845
			stdcall [ted_text_add], tedit0,edx,eax,ted_opt_ed_move_cursor
846
		@@:
847
		insert_nl
848
 
849
	popad
850
	ret
851
endp
852
 
853
 
854
 
855
;--- текстовые константы ---
856
txt_coma db ',',0
857
txt_i_40 db 'int 0x40',13,0
858
txt_0 db '0',0
859
txt_1 db '1',0
860
txt_2 db '2',0
861
txt_3 db '3',0
862
txt_4 db '4',0
863
txt_8 db '8',0
864
txt_plus db '+',0
865
txt_nl db 13,0
866
txt_com db ';',0
867
txt_sp db ' ',0
868
txt_tab db 9,0
869
txt_br db '\',13,9,0
870
txt_txt:
871
	db 'txt_',0
872
txt_db:
873
	db ' db ',0
874
txt_mouse_dd:
875
	db ', mouse_dd, ',0
876
txt_times:
877
	db ':',13,9,'times ',0
878
txt_draw_wb:
879
	db 13,'align 4',13,'draw_window:',13,'pushad',13,9,'mcall 12,1',13,0
880
txt_draw_we:
881
	db 9,'mcall 12,2',13,'popad',13,9,'ret',13,0
882
txt_but_create db '0x40000000',0 ;tmp
883
txt_0x33000000 db '0x33000000',0 ;tmp
884
txt_struct db 'struct ',0
885
txt_ends db 'ends',13,13,0
886
txt_mov db 'mov ',0
887
txt_xor db 'xor ',0
888
txt_or db 'or  ',0
889
txt_cmp db 'cmp ',0
890
txt_call db 'call ',0
891
txt_jne_f db 'jne @f',0
892
txt_a_met db '@@:',0
893
txt_ah db 'ah',0
894
txt_eax db 'eax',0
895
txt_ebx db 'ebx',0
896
txt_ecx db 'ecx',0
897
txt_edx db 'edx',0
898
txt_edi db 'edi',0
899
txt_esi db 'esi',0
900
txt_align_4 db 'align 4',13,0
901
txt_d_poi db ':',0
902
txt_ret db 'ret',13,0
903
txt_i65p db '*65536+',0
904
txt_std_mouse_ed:
905
	db 9,'stdcall [edit_box_mouse], ',0
906
txt_std_mouse_cb:
907
	db 9,'stdcall [check_box_mouse], ',0
908
txt_std_key_ed:
909
	db 9,'stdcall [edit_box_key], ',0
910
txt_incl:
911
	db 'include ',0
912
txt_ebox:
913
	db ' edit_box'
914
	.end: db 0
915
txt_editb_draw:
916
	db 9,'stdcall [edit_box_draw], ',0
917
txt_cbox_draw:
918
	db 9,'stdcall [check_box_draw], ',0
919
 
920
txt_but_1:
921
db 'align 4',13,'button:',13,9,'mcall 17',13
922
txt_but_2:
923
db 9,'cmp ah,1',13,9,'jne still',13,'.exit:',13,9,'mcall -1',13
924
txt_but_3:
925
 
926
txt_key_1:
927
db 'align 4',13,'key:',13,9,'mcall 2',13
928
txt_key_2:
929
db 9,'jmp still',13
930
txt_key_3:
931
 
932
align 4
933
proc get_obj_id, p_obj:dword, txt_buf:dword
934
	push eax ecx edx
935
	mov eax,dword[p_obj]
936
	sub eax,[tree2.data_info]
937
	xor edx,edx
938
	xor ecx,ecx
939
	mov cx,word[tree2.info_size]
940
	div ecx
941
 
942
	mov edx,dword[txt_buf]
943
	mov byte[edx],0
944
	stdcall str_cat_value,edx,eax
945
	pop edx ecx eax
946
	ret
947
endp
948
 
949
;--- текстовые функции ---
950
 
951
align 4
952
proc mem_clear, mem:dword, len:dword
953
	push eax ecx edi
954
	cld
955
	xor al,al
956
	mov edi, dword[mem]
957
	mov ecx, dword[len]
958
	repne stosb
959
	pop edi ecx eax
960
	ret
961
endp
962
 
963
align 4
964
proc str_cat, str1:dword, str2:dword
965
	push eax ecx edi esi
966
	mov esi,dword[str2]
967
	stdcall str_len,esi
968
	mov ecx,eax
969
	inc ecx
970
	mov edi,dword[str1]
971
	stdcall str_len,edi
972
	add edi,eax
973
	cld
974
	repne movsb
975
	pop esi edi ecx eax
976
	ret
977
endp
978
 
979
align 4
980
proc str_cat_value, str1:dword, value:dword
981
	pushad
982
	mov edi,[str1]
983
	stdcall str_len,edi
984
	add edi,eax
985
	mov eax,[value]
986
	call tl_convert_to_str
987
	popad
988
	ret
989
endp
990
 
991
;output:
992
; eax = strlen
993
align 4
994
proc str_len, str1:dword
995
	mov eax,[str1]
996
	@@:
997
		cmp byte[eax],0
998
		je @f
999
		inc eax
1000
		jmp @b
1001
	@@:
1002
	sub eax,[str1]
1003
	ret
1004
endp
1005
 
1006
;input:
1007
; eax = value
1008
; edi = string buffer
1009
align 4
1010
tl_convert_to_str:
1011
	pushad
1012
	stdcall mem_clear,edi,12
1013
	call .str
1014
	popad
1015
	ret
1016
 
1017
align 4
1018
.str:
1019
	mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число
1020
		;преревод числа в ASCII строку входные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной
1021
	cmp eax,ecx  ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax
1022
	jb @f
1023
		xor edx,edx ;очистить edx
1024
		div ecx     ;разделить - остаток в edx
1025
		push edx    ;положить в стек
1026
		;dec edi    ;смещение необходимое для записи с конца строки
1027
		call .str   ;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx
1028
		pop eax
1029
	@@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная))
1030
	or al,0x30  ;данная команда короче  чем две выше
1031
	stosb	    ;записать элемент из регистра al в ячеку памяти es:edi
1032
	ret