Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
1698 IgorA 1
 
1706 IgorA 2
align 4
1705 IgorA 3
but_obj_move_up:
4
	stdcall [tl_node_move_up], tree2
5
	ret
6
7
 
1706 IgorA 8
align 4
1705 IgorA 9
but_obj_move_down:
10
	stdcall [tl_node_move_down], tree2
11
	ret
12
13
 
1706 IgorA 14
align 4
15
but_obj_copy:
16
push ecx esi edi
17
	stdcall [tl_node_get_data], tree2
18
	pop esi
19
	mov edi,[tree2.data_info] ;данные 0-го узла, используем для копирования
20
	xor ecx,ecx
21
	mov cx,word[tree2.info_size]
22
	cld
23
	rep movsb
24
pop edi esi ecx
25
	ret
26
27
 
28
align 4
29
but_obj_paste:
30
push eax ebx ecx edi
31
	mov eax,[tree2.data_info] ;данные 0-го узла, используем для копирования
1717 IgorA 32
	mov ebx,dword[eax]
33
	call find_obj_in_opt
34
	xor ecx,ecx
35
	mov cx,word[edi+obj_opt.img-obj_opt] ;cx - индекс главной иконки добавляемого объекта
36
	shl ecx,16
37
	stdcall [tl_node_add], eax, ecx, tree2 ;добавляем объект
38
	stdcall [tl_draw], tree2
39
pop edi ecx ebx eax
1706 IgorA 40
	ret
41
42
 
1698 IgorA 43
;функция обратная к данной on_file_object_select
44
align 4
45
but_element_change:
46
	;foc_obj - указатель на последний выбранный узел в tree2
47
	cmp dword[foc_obj],0
48
	je .err_obj
1714 IgorA 49
		pushad
1698 IgorA 50
		;установка текстовых свойств
1714 IgorA 51
		xor ebx,ebx
1711 IgorA 52
		mov edi,edit2
53
		@@:
1714 IgorA 54
			call get_obj_win_param
1711 IgorA 55
			inc ebx
56
			add edi,ed_struc_size
57
			cmp edi,prop_wnd_edits_end
58
		jl @b
1714 IgorA 59
60
 
61
		mov edx,dword[foc_obj]
62
		mov dword[edx+u_object.typid-u_object],0 ;на случай если ничего не выбрано
63
		stdcall [tl_node_get_data],tree3
64
		pop eax
65
		cmp eax,0
66
		je @f
67
			mov eax,dword[eax] ;берем порядковый номер (в памяти) выбранного объекта
68
			mov dword[edx+u_object.typid-u_object],eax
69
		@@:
70
71
 
72
		mov edi,ch1.flags
73
		mov eax,1
74
		xor ebx,ebx
75
		@@:
76
			bt dword[edi],1
1715 IgorA 77
			jnc .opt_no_sel
1714 IgorA 78
				or ebx,eax ;накопление отмеченных опций
79
			.opt_no_sel:
80
			shl eax,1
81
			add edi,ch_struc_size
82
			cmp edi,check_boxes_end
83
		jl @b
84
		mov dword[edx+u_object.modif-u_object],ebx
85
		popad
1698 IgorA 86
	.err_obj:
1714 IgorA 87
	call draw_constructor ;обновляем окно конструктора
1698 IgorA 88
	;call draw_window
1714 IgorA 89
	ret
1698 IgorA 90
91
 
1711 IgorA 92
; ebx - property column
93
; edi - pointer to property editbox
94
align 4
1698 IgorA 95
get_obj_win_param:
1711 IgorA 96
	pushad
97
		mov esi,ed_text
98
		stdcall get_obj_text_col, [foc_obj], ebx ;edx - смещение для текста
99
		stdcall get_obj_text_len_col, [foc_obj], ebx ;eax - длинна поля
100
		cld
1698 IgorA 101
		mov edi,edx
102
		mov ecx,eax
103
		rep movsb
104
	popad
1711 IgorA 105
	ret
1698 IgorA 106
107
 
108
;  obj - pointer to object
109
;  ind - column index
110
;output:
111
;  edx + offset
112
;  edx = 0 if not text
113
align 4
114
proc get_obj_text_col, obj:dword, ind:dword
115
	mov edx,dword[obj]
116
	add edx,4 ;goto text
1717 IgorA 117
push ebx ecx
118
	mov ecx,dword[ind]
119
	cmp cx,0
120
	je .end_fun
1698 IgorA 121
122
 
1717 IgorA 123
1698 IgorA 124
 
1717 IgorA 125
	call find_obj_in_opt ;ищем структуру с опциями объекта
1698 IgorA 126
127
 
128
	dec ecx
1717 IgorA 129
	shl ecx,1 ;умножаем на 2
130
	add edi,ecx ;+ ind*2
131
	xor ecx,ecx
1698 IgorA 132
	mov cx,word[edi] ;ecx - сдиг для искомого поля
133
	add edx,ecx
134
135
 
136
	jg @f
137
		mov edx,0 ;not text
138
	@@:
139
	cmp cx,MAX_LEN_OBJ_TXT
140
	jl @f
141
		mov edx,0 ;not text
142
	@@:
143
144
 
1717 IgorA 145
	.end_fun:
1698 IgorA 146
pop ecx ebx
1717 IgorA 147
	ret
1698 IgorA 148
endp
149
150
 
151
;  obj - указатель на объект
152
;  ind - номер поля внутри объекта
153
;output:
154
;  eax - длинна текстового поля внутри объекта
155
align 4
156
proc get_obj_text_len_col, obj:dword, ind:dword
157
	xor eax,eax
158
push ebx ecx edi
1717 IgorA 159
	mov ecx,dword[ind]
160
	mov eax,dword[obj]
1698 IgorA 161
	mov ebx,dword[eax] ;в ebx попадает код объекта
1717 IgorA 162
	xor eax,eax
1698 IgorA 163
164
 
165
166
 
167
	shl ecx,1 ;умножаем на 2
1717 IgorA 168
	add edi,ecx ;+ ind*2
169
1698 IgorA 170
 
171
	cmp ax,0
172
	jg @f
173
		mov eax,MAX_LEN_OBJ_TXT ;последние поля для удобства кодируются 0, а не MAX_LEN_OBJ_TXT, исправляем ситуацию
174
	@@:
175
	cmp dword[ind],0
176
	je .end_fun ;для первого поля сдиг = 0, потому в структуре он не хранится, т.к. известен заранее
177
	sub ax,word[edi-2] ;отнимаем сдиг для искомого поля, получаем длинну поля
178
179
 
180
	jg @f
181
		mov eax,0 ;поле пустое, не используется
182
	@@:
183
	cmp ax,MAX_LEN_OBJ_TXT
184
	jl @f
185
		mov eax,0 ;not text
186
	@@:
187
188
 
189
pop edi ecx ebx
1717 IgorA 190
	ret
1698 IgorA 191
endp
192
193
 
194
proc draw_obj_icon, o_type:dword,n_col:dword, coord_y:dword
1714 IgorA 195
	pushad
1698 IgorA 196
	xor ebx,ebx
197
	mov ebx,dword[o_type]
1717 IgorA 198
	call find_obj_in_opt
1698 IgorA 199
200
 
201
	mov ebx,[n_col]
202
	shl ebx,1
203
	add edi,ebx ;move index (+bh)
204
	xor ecx,ecx
205
	mov cx,[edi]
206
207
 
208
	jge @f
209
		jmp .end_fun ;error icon index
210
	@@:
211
212
 
213
	imul ecx,0x300
214
	add ebx,ecx
215
216
 
217
	mov ecx,0x100010 ;ecx - size:16*16
218
	mov edx,3 ;отступ от левого края рамки до иконки
1714 IgorA 219
	shl edx,16
1698 IgorA 220
	add edx,[coord_y]
221
	int 0x40
222
	.end_fun:
223
	popad
224
	ret
225
endp
226
227
 
228
proc draw_icon, ind:dword,coord_x:dword,coord_y:dword
229
	pushad
230
	mov ecx,[ind]
231
	cmp ecx,0
232
	jl .end_fun
233
		mov ebx,bmp_icon
234
		imul ecx,0x300
235
		add ebx,ecx
236
237
 
238
		mov ecx,0x100010 ;ecx - size:16*16
239
		mov edx,[coord_x]
240
		shl edx,16
241
		add edx,[coord_y]
242
		int 0x40
243
	.end_fun:
244
	popad
245
	ret
246
endp
247
248
 
249
;  ebx = cod object
1717 IgorA 250
;output:
1698 IgorA 251
;  edi = pointer to option struct
252
align 4
253
find_obj_in_opt:
254
	push ecx
255
	xor ecx,ecx ;find 'ebx' in options
1717 IgorA 256
	mov edi,obj_opt
1698 IgorA 257
	@@:
258
		cmp ebx,dword[edi] ;find
1717 IgorA 259
		je @f
1698 IgorA 260
		inc ecx
261
		cmp ecx,MAX_OBJ_TYPES
262
		je @f ;not find
263
		add edi,sizeof.ObjOpt
264
		jmp @b
265
	@@:
266
	pop ecx
267
	ret
268
269
 
270
 
271
	;нужен для ускорения последущего поиска
272
273
 
274
;eax - указатель на структуру найденного объекта
275
align 4
276
proc find_obj_in_file, o_type:dword
277
push ebx esi
278
	mov ebx,[o_type]
279
	stdcall dword[tl_node_poi_get_info], 0,tree2
280
	pop esi
281
282
 
283
		cmp esi,0
284
		je .find_no
285
286
 
287
		pop eax ;получаем данные узла
288
		cmp eax,0
289
		je .find_no
290
291
 
1717 IgorA 292
		je .find_yes
1698 IgorA 293
294
 
295
		pop esi ;переходим к следущему узлу
296
297
 
298
299
 
300
		mov dword[obj_find_last],esi
301
		jmp @f
302
	.find_no:
303
		mov dword[obj_find_last],0
304
		xor eax,eax
305
	@@:
306
pop esi ebx
307
	ret
308
endp
309
310
 
311
;eax - указатель на структуру найденного объекта
312
align 4
313
proc find_obj_in_file_next, o_type:dword
314
push ebx esi
315
	cmp dword[obj_find_last],0
316
	je .find_no
317
318
 
1717 IgorA 319
1698 IgorA 320
 
321
	pop esi ;переходим к следущему узлу
322
323
 
324
		cmp esi,0
325
		je .find_no
326
327
 
328
		pop eax ;получаем данные узла
329
		cmp eax,0
330
		je .find_no
331
332
 
1717 IgorA 333
		je .find_yes
1698 IgorA 334
335
 
336
		pop esi ;переходим к следущему узлу
337
338
 
339
340
 
341
		mov dword[obj_find_last],esi
342
		jmp @f
343
	.find_no:
344
		mov dword[obj_find_last],0
345
		xor eax,eax
346
	@@:
347
pop esi ebx
348
	ret
349
endp
350
351
 
352
but_show_constructor:
353
	mov byte[show_mode],0
354
	stdcall [buf2d_draw], buf_fon
355
	ret
356
357
 
358
but_show_code:
359
	mov byte[show_mode],1
360
	stdcall [ted_draw], tedit0
361
	ret
362
363
 
364
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
365
;output:
366
; eax - число
367
align 4
368
proc conv_str_to_int, buf:dword
369
	xor eax,eax
370
	push ebx esi
371
	xor ebx,ebx
372
	mov esi,[buf]
373
	cmp word[esi],'0x'
374
	je .load_digit_16
375
376
 
377
		mov bl,byte[esi]
378
		cmp bl,'0'
379
		jl @f
380
		cmp bl,'9'
381
		jg @f
382
			sub bl,'0'
383
			imul eax,10
384
			add eax,ebx
385
			inc esi
386
			jmp .load_digit_10
387
	jmp @f
388
389
 
390
		add esi,2
391
	.cycle_16:
392
		mov bl,byte[esi]
393
		cmp bl,'0'
394
		jl @f
395
		cmp bl,'f'
396
		jg @f
397
		cmp bl,'9'
398
		jle .us1
399
			cmp bl,'A'
400
			jl @f ;отсеиваем символы >'9' и <'A'
401
		.us1: ;составное условие
402
		cmp bl,'F'
403
		jle .us2
404
			cmp bl,'a'
405
			jl @f ;отсеиваем символы >'F' и <'a'
406
			sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
407
		.us2: ;составное условие
408
			sub bl,'0'
409
			cmp bl,9
410
			jle .cor1
411
				sub bl,7 ;convert 'A' to '10'
412
			.cor1:
413
			shl eax,4
414
			add eax,ebx
415
			inc esi
416
			jmp .cycle_16
417
	@@:
418
419
 
420
	ret
421
endp
422
>