Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
3380 mario79 1
;*****************************************************************************
2
; Color Dialog - for Kolibri OS
3
; Copyright (c) 2013, Marat Zakiyanov aka Mario79, aka Mario
4
; All rights reserved.
5
;
6
; Redistribution and use in source and binary forms, with or without
7
; modification, are permitted provided that the following conditions are met:
8
;        * Redistributions of source code must retain the above copyright
9
;          notice, this list of conditions and the following disclaimer.
10
;        * Redistributions in binary form must reproduce the above copyright
11
;          notice, this list of conditions and the following disclaimer in the
12
;          documentation and/or other materials provided with the distribution.
13
;        * Neither the name of the  nor the
14
;          names of its contributors may be used to endorse or promote products
15
;          derived from this software without specific prior written permission.
16
;
17
; THIS SOFTWARE IS PROVIDED BY Marat Zakiyanov ''AS IS'' AND ANY
18
; EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
19
; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
20
; DISCLAIMED. IN NO EVENT SHALL  BE LIABLE FOR ANY
21
; DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
22
; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
23
; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
24
; ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25
; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
26
; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27
;*****************************************************************************
3417 mario79 28
;---------------------------------------------------------------------
29
;Some documentation for memory
30
;
31
;area name db 'FFFFFFFF_color_dialog',0 ; FFFFFFFF = PID
32
;
33
; communication area data
34
; flag  ; +0
35
; dw 0   ; 0 - empty, 1 - OK, color selected
36
;          2 - use another method/not found program, 3 - cancel
37
;
38
; type of dialog:  0-Palette&Tone
39
; dw 0 ; +2
40
;
41
; window X size ; +4
42
; dw 0
43
;
3587 fedesco 44
; window X position ; +6
3417 mario79 45
; dw 0
46
;
47
; window y size ; +8
48
; dw 0
49
;
50
; window Y position ; +10
51
; dw 0
52
;
53
; ColorDialog WINDOW SLOT ; +12
54
; dd 0
55
;
56
; Color type ; +16
57
; dd 0
58
;
59
; Color value ; +20
60
; dd 0
3473 mario79 61
 
62
; First start flag ; +24
63
; dd 0 ; 0 - first start, 1 - subsequent starts
64
;
65
; Old colors ; +28
66
; rd 10
67
;
68
; Free area ; +68
3417 mario79 69
;---------------------------------------------------------------------
3380 mario79 70
  use32
8288 IgorA 71
  org	 0
3380 mario79 72
  db	 'MENUET01'
8288 IgorA 73
  dd	 1, START, IM_END, I_END, stacktop, param, path
3380 mario79 74
;---------------------------------------------------------------------
75
include '../../macros.inc'
8288 IgorA 76
include '../../proc32.inc'
8271 IgorA 77
include '../../KOSfuncs.inc'
78
include '../../load_lib.mac'
3469 mario79 79
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
3380 mario79 80
;include 'lang.inc'
3469 mario79 81
;include '../../debug.inc'
82
@use_library
3380 mario79 83
;---------------------------------------------------------------------
84
p_start_x = 10
85
p_start_y = 10
86
 
87
p_size_x = 20
88
p_size_y = 256
89
;--------------------------------------
90
t_start_x = 40
91
t_start_y = 10
92
;--------------------------------------
93
w_start_x = 200
94
w_start_y = 200
95
 
96
w_size_x = 400
97
w_size_y = 350
98
;--------------------------------------
99
c_start_x = t_start_x + p_size_y + 10
100
c_start_y = 10
101
 
8288 IgorA 102
c_size_x = 27
3380 mario79 103
c_size_y = 20
8288 IgorA 104
ed_size_x = 53
3380 mario79 105
;---------------------------------------------------------------------
3463 mario79 106
x_minimal_size equ 350
107
y_minimal_size equ 250
108
;---------------------------------------------------------------------
3380 mario79 109
START:
8288 IgorA 110
	mcall	SF_SYS_MISC,SSF_HEAP_INIT
111
	;mcall	SF_KEYBOARD,SSF_SET_INPUT_MODE,1
112
	mcall	SF_SET_EVENTS_MASK,0x27
3473 mario79 113
;--------------------------------------
3469 mario79 114
load_libraries	l_libs_start,end_l_libs
115
	test	eax,eax
116
	jnz	button.exit_2
3473 mario79 117
;--------------------------------------
8288 IgorA 118
	call	get_communication_area
119
	call	get_active_pocess
120
	call	clear_colors_history
3380 mario79 121
	xor	eax,eax
122
	mov	al,p_size_x
123
	mov	[palette_SIZE_X],eax
124
	mov	ax,p_size_y
125
	mov	[palette_SIZE_Y],eax
126
	mov	[tone_SIZE_X],eax
127
	mov	[tone_SIZE_Y],eax
128
	mov	eax,0xff0000
129
	mov	[tone_color],eax
130
	mov	[selected_color],eax
3469 mario79 131
	call	prepare_scrollbars_position_from_color
3380 mario79 132
;--------------------------------------
133
	mov	ecx,[palette_SIZE_Y]
134
	imul	ecx,[palette_SIZE_X]
135
	lea	ecx,[ecx*3]
136
	inc	ecx	;reserve for stosd
8288 IgorA 137
	mcall	SF_SYS_MISC,SSF_MEM_ALLOC
3380 mario79 138
	mov	[palette_area],eax
139
;--------------------------------------
140
	call	create_palette
3587 fedesco 141
;--------------------------------------
3380 mario79 142
	mov	ecx,[tone_SIZE_Y]
143
	imul	ecx,[tone_SIZE_X]
144
	lea	ecx,[ecx*3]
145
	inc	ecx	;reserve for stosd
8288 IgorA 146
	mcall	SF_SYS_MISC,SSF_MEM_ALLOC
3380 mario79 147
	mov	[tone_area],eax
148
;--------------------------------------
149
	call    create_tone
150
;---------------------------------------------------------------------
151
align 4
152
red:
153
	call	draw_window
154
;---------------------------------------------------------------------
155
align 4
156
still:
8288 IgorA 157
	mcall	SF_WAIT_EVENT
3380 mario79 158
 
159
	cmp	eax,1
160
	je	red
161
 
162
	cmp	eax,2
163
	je	key
164
 
165
	cmp	eax,3
3469 mario79 166
	je	button
3587 fedesco 167
 
3469 mario79 168
	cmp	eax,6
169
	je	mouse
3587 fedesco 170
 
3469 mario79 171
	jmp	still
3380 mario79 172
;---------------------------------------------------------------------
173
align 4
174
button:
8288 IgorA 175
	mcall	SF_GET_BUTTON
3380 mario79 176
 
177
	cmp	ah, 2
178
	je	palette_button
3587 fedesco 179
 
3380 mario79 180
	cmp	ah, 3
181
	je	tone_button
3417 mario79 182
 
183
	cmp	ah, 4
184
	je	color_button
3587 fedesco 185
 
3473 mario79 186
	cmp	ah, 30
187
	jb	@f
3587 fedesco 188
 
3473 mario79 189
	cmp	ah, 39
190
	ja	@f
3587 fedesco 191
 
3473 mario79 192
	sub	ah,30
193
	movzx	eax,ah
194
	shl	eax,2
195
	add	eax,[communication_area]
196
	add	eax,28
197
	mov	eax,[eax]
198
	mov	[selected_color],eax
199
	call	prepare_scrollbars_position_from_color
200
	call	draw_selected_color
201
	call	draw_scrollbars
202
	jmp	still
203
;--------------------------------------
204
align 4
205
@@:
3380 mario79 206
	cmp	ah, 1
207
	jne	still
3473 mario79 208
;--------------------------------------
209
align 4
3380 mario79 210
.exit:
3417 mario79 211
	mov	eax,[communication_area]
212
	mov	[eax],word 3
3473 mario79 213
	jmp	@f
3417 mario79 214
; dps "CD flag value: cancel "
3473 mario79 215
;--------------------------------------
216
align 4
3417 mario79 217
.exit_1:
3473 mario79 218
;--------------------------------------
219
	call	scroll_colors_history
220
;--------------------------------------
221
align 4
222
@@:
223
;	mov	ax,[eax]
224
;	and	eax,0xffff
3417 mario79 225
; dps "CD flag value: "
226
; dpd eax
227
; newline
228
 
3463 mario79 229
	call	get_window_param
230
	mov	ebx,[communication_area]
231
	mov	ecx,procinfo
232
;	mov	eax,[window_x]
8288 IgorA 233
	mov	eax,[ecx+process_information.box.left]
3463 mario79 234
	shl	eax,16
8288 IgorA 235
	add	eax,[ecx+process_information.box.width]
3463 mario79 236
	mov	[ebx+4],eax
237
;	mov	eax,[window_y]
8288 IgorA 238
	mov	eax,[ecx+process_information.box.top]
3463 mario79 239
	shl	eax,16
8288 IgorA 240
	add	eax,[ecx+process_information.box.height]
3463 mario79 241
	mov	[ebx+8],eax
3473 mario79 242
;--------------------------------------
243
align 4
3469 mario79 244
.exit_2:
8288 IgorA 245
	mcall	SF_TERMINATE_PROCESS
3380 mario79 246
;---------------------------------------------------------------------
3473 mario79 247
align 4
3463 mario79 248
get_window_param:
8288 IgorA 249
	mcall	SF_THREAD_INFO,procinfo,-1
250
	mov	eax,[ebx+process_information.client_box.height]
3463 mario79 251
	inc	eax
252
;	mov	[window_high],eax
8288 IgorA 253
	mov	eax,[ebx+process_information.client_box.width]
3463 mario79 254
	inc	eax
255
;	mov	[window_width],eax
8288 IgorA 256
	mov	eax,dword[ebx+process_information.wnd_state]
3463 mario79 257
;	mov	[window_status],eax
258
	ret
259
;---------------------------------------------------------------------
3380 mario79 260
align 4
3417 mario79 261
get_communication_area:
8288 IgorA 262
	movzx	eax,byte[param]
3417 mario79 263
	test	eax,eax
264
	jz	@f
8288 IgorA 265
	mcall	SF_SYS_MISC,SSF_MEM_OPEN,param,,0x01
3417 mario79 266
	mov	[communication_area],eax
267
;	movzx	ebx,word [eax+2]
268
;	mov	[color_dialog_type],ebx
269
 
3463 mario79 270
	mov	ebx,[eax+4]
3469 mario79 271
;	cmp	bx,word x_minimal_size ;300
272
;	jb	@f
3476 mario79 273
	mov	bx,510
3463 mario79 274
	mov	[window_x],ebx
275
	mov	ebx,[eax+8]
3469 mario79 276
;	cmp	bx,word y_minimal_size ;200
277
;	jb	@f
6054 leency 278
	mov	bx,340
3463 mario79 279
	mov	[window_y],ebx
3417 mario79 280
@@:
281
	ret
282
;---------------------------------------------------------------------
283
align 4
284
get_active_pocess:
8288 IgorA 285
	mcall	SF_THREAD_INFO,procinfo,-1
286
	mov	ecx,[ebx+process_information.PID]
287
	mcall	SF_SYSTEM,SSF_GET_THREAD_SLOT
3417 mario79 288
	mov	[active_process],eax	; WINDOW SLOT
3587 fedesco 289
	mov	ebx,[communication_area]
3417 mario79 290
	test	ebx,ebx
291
	jz	.1
292
	mov	[ebx+12],eax	; WINDOW SLOT to com. area
293
.1:
294
	ret
295
;---------------------------------------------------------------------
296
align 4
3473 mario79 297
clear_colors_history:
298
	mov	edi,[communication_area]
299
	cmp	[edi+24],dword 1
300
	je	@f
301
	mov	[edi+24],dword 1
302
	add	edi,28
303
	mov	ecx,10
304
	cld
305
	mov	eax,0xffffff
306
	rep	stosd
307
@@:
308
	ret
309
;---------------------------------------------------------------------
310
align 4
311
scroll_colors_history:
312
	mov	edi,[communication_area]
313
	add	edi,28
314
	mov	eax,[selected_color]
315
	cmp	[edi],eax
316
	je	@f
317
	mov	ecx,9
318
	mov	esi,edi
319
	add	esi,32
320
	add	edi,36
321
	std
322
	rep	movsd
323
	mov	edi,[communication_area]
324
	mov	[edi+28],eax
325
@@:
326
	ret
327
;---------------------------------------------------------------------
328
align 4
3380 mario79 329
palette_button:
8288 IgorA 330
	mcall	SF_MOUSE_GET,SSF_WINDOW_POSITION
3380 mario79 331
	and	eax,0xffff
332
	sub	eax,p_start_y
333
	imul	eax,p_size_x
334
	lea	eax,[eax+eax*2]
335
	add	eax,[palette_area]
336
	mov	eax,[eax]
337
	mov	[tone_color],eax
338
	mov	[selected_color],eax
3469 mario79 339
	call	prepare_scrollbars_position_from_color
3380 mario79 340
	call	create_and_draw_tone
341
	call	draw_selected_color
3469 mario79 342
	call	draw_scrollbars
3380 mario79 343
	jmp	still
344
;---------------------------------------------------------------------
345
align 4
346
tone_button:
8288 IgorA 347
	mcall	SF_MOUSE_GET,SSF_WINDOW_POSITION
3380 mario79 348
	mov	ebx,eax
349
	and	eax,0xffff
350
	shr	ebx,16
351
	sub	eax,t_start_y
352
	imul	eax,p_size_y
353
	sub	ebx,t_start_x
354
	add	eax,ebx
355
	lea	eax,[eax+eax*2]
356
	add	eax,[tone_area]
357
	mov	eax,[eax]
358
	mov	[selected_color],eax
3469 mario79 359
	call	prepare_scrollbars_position_from_color
3380 mario79 360
	call	draw_selected_color
3469 mario79 361
	call	draw_scrollbars
3380 mario79 362
	jmp	still
363
;---------------------------------------------------------------------
364
align 4
3417 mario79 365
color_button:
366
	mov	eax,[communication_area]
367
	mov	[eax],word 1
368
	mov	ebx,[selected_color]
3463 mario79 369
	and	ebx,0xffffff
3417 mario79 370
	mov	[eax+20],ebx
371
; dps "CD flag value: OK "
372
	jmp	button.exit_1
373
;---------------------------------------------------------------------
374
align 4
3469 mario79 375
prepare_scrollbars_position_from_color:
376
; in: eax = selected color
377
	movzx	ebx,al
8288 IgorA 378
	inc bl
379
	neg bl
3469 mario79 380
	mov	[scroll_bar_data_blue.position],ebx
381
	shr	eax,8
382
	mov	bl,al
8288 IgorA 383
	inc bl
384
	neg bl
3469 mario79 385
	mov	[scroll_bar_data_green.position],ebx
386
	shr	eax,8
387
	mov	bl,al
8288 IgorA 388
	inc bl
389
	neg bl
3469 mario79 390
	mov	[scroll_bar_data_red.position],ebx
391
	ret
392
;---------------------------------------------------------------------
393
align 4
394
prepare_color_from_scrollbars_position:
395
; out: ebx = selected color
396
	mov	eax,[scroll_bar_data_red.position]
8288 IgorA 397
	inc al
398
	neg al
3469 mario79 399
	movzx	ebx,al
400
	shl	ebx,8
401
	mov	eax,[scroll_bar_data_green.position]
8288 IgorA 402
	inc al
403
	neg al
3469 mario79 404
	mov	bl,al
405
	shl	ebx,8
406
	mov	eax,[scroll_bar_data_blue.position]
8288 IgorA 407
	inc al
408
	neg al
3469 mario79 409
	mov	bl,al
410
	ret
3587 fedesco 411
;---------------------------------------------------------------------
3469 mario79 412
align 4
3380 mario79 413
key:
8288 IgorA 414
	mcall	SF_GET_KEY
415
	test word[edit1.flags],10b ;ed_focus
416
	je still
417
	stdcall [edit_box_key], edit1
418
	stdcall conv_str_to_int, [edit1.text]
419
	cmp [selected_color],eax
420
	je still
421
	mov	[selected_color],eax
422
	call	prepare_scrollbars_position_from_color
423
	;call	draw_selected_color
424
	mcall	SF_DRAW_RECT,,,[selected_color]
425
	call	draw_scrollbars
3380 mario79 426
	jmp	still
427
;---------------------------------------------------------------------
428
align 4
3469 mario79 429
mouse:
430
	cmp	[scroll_bar_data_red.delta2],0
431
	jne	.red
432
	cmp	[scroll_bar_data_green.delta2],0
433
	jne	.green
434
	cmp	[scroll_bar_data_blue.delta2],0
3587 fedesco 435
	jne	.blue
3469 mario79 436
;--------------------------------------
437
align 4
438
.red:
8288 IgorA 439
	stdcall	[scrollbar_ver_mouse], scroll_bar_data_red
3469 mario79 440
	cmp	[scroll_bar_data_red.delta2],0
441
	jne	@f
442
;--------------------------------------
443
align 4
444
.green:
8288 IgorA 445
	stdcall	[scrollbar_ver_mouse], scroll_bar_data_green
3469 mario79 446
	cmp	[scroll_bar_data_green.delta2],0
447
	jne	@f
448
;--------------------------------------
449
align 4
450
.blue:
8288 IgorA 451
	stdcall	[scrollbar_ver_mouse], scroll_bar_data_blue
452
	cmp	[scroll_bar_data_blue.delta2],0
453
	jne	@f
3469 mario79 454
;--------------------------------------
455
align 4
456
@@:
8288 IgorA 457
	stdcall [edit_box_mouse], edit1
3469 mario79 458
	call	prepare_color_from_scrollbars_position
459
	cmp	[selected_color],ebx
460
	je	still
461
	mov	[selected_color],ebx
462
	call	draw_selected_color
463
	jmp	still
464
;---------------------------------------------------------------------
465
align 4
3380 mario79 466
draw_selected_color:
8288 IgorA 467
	mcall	SF_DRAW_RECT,,,[selected_color]
468
	stdcall hex_in_str, sz_0x+2,[selected_color],6
469
	mov byte[sz_0x+8],0
470
	stdcall [edit_box_set_text],edit1,sz_0x
471
	stdcall [edit_box_draw],edit1
3380 mario79 472
	ret
473
;---------------------------------------------------------------------
474
align 4
475
create_and_draw_tone:
476
	call    create_tone
477
	call    draw_tone
478
	ret
479
;---------------------------------------------------------------------
480
align 4
481
draw_tone:
8288 IgorA 482
	mcall	SF_PUT_IMAGE_EXT,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>,,24
3380 mario79 483
	ret
484
;---------------------------------------------------------------------
8288 IgorA 485
align 4
3469 mario79 486
draw_scrollbars:
8288 IgorA 487
	stdcall	[scrollbar_ver_draw], scroll_bar_data_red
488
	stdcall	[scrollbar_ver_draw], scroll_bar_data_green
489
	stdcall	[scrollbar_ver_draw], scroll_bar_data_blue
3469 mario79 490
	ret
491
;---------------------------------------------------------------------
3476 mario79 492
align 4
493
draw_history_frame:
8288 IgorA 494
	mov	[frame_data.x],dword (c_start_x+c_size_x+ed_size_x+10*2)*65536+80
3476 mario79 495
	mov	[frame_data.y],dword (p_start_y+5)*65536+(p_size_y-5)
496
 
497
	mov	[frame_data.draw_text_flag],dword 1
3587 fedesco 498
 
3476 mario79 499
	mov	[frame_data.text_pointer],dword history_text
8288 IgorA 500
	stdcall	[Frame_draw], frame_data
3476 mario79 501
	ret
502
;---------------------------------------------------------------------
503
align 4
3473 mario79 504
draw_button_row:
505
	mov	edx,0x60000000 + 30		; BUTTON ROW
506
;	mov	ebx,220*65536+14
8288 IgorA 507
	mov	ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14
3476 mario79 508
	mov	ecx,25*65536+14
8288 IgorA 509
	mov	eax,SF_DEFINE_BUTTON
3473 mario79 510
;-----------------------------------
3476 mario79 511
align 4
3473 mario79 512
.newb:
513
	mcall
3476 mario79 514
	add	ecx,24*65536
3473 mario79 515
	inc	edx
516
	cmp	edx,0x60000000 + 39
517
	jbe	.newb
518
	ret
519
;---------------------------------------------------------------------
3476 mario79 520
align 4
521
draw_color_value:
8288 IgorA 522
	movzx ebx,word[frame_data.x_start]
523
	shl ebx,16
524
	add ebx,(22 shl 16)+39
3476 mario79 525
	mov	ecx,28*65536+11
526
	mov	edx,0xffffff
8288 IgorA 527
	mov	eax,SF_DRAW_RECT
3476 mario79 528
	mov	edi,10
529
	mov	esi,[communication_area]
530
	add	esi,28
531
;-----------------------------------
532
align 4
3587 fedesco 533
@@:
3476 mario79 534
	mcall
535
	pusha
8288 IgorA 536
	lea	edx,[ebx+(2 shl 16)]
3476 mario79 537
	shr	ecx,16
538
	mov	dx,cx
539
	add	dx,2
540
	mov	ecx,[esi]
541
	and	ecx,0xffffff
8288 IgorA 542
	mcall	SF_DRAW_NUMBER,0x00060100,,,0
3476 mario79 543
	popa
3587 fedesco 544
 
3476 mario79 545
	add	ecx,24*65536
546
	add	esi,4
547
	dec	edi
548
	jnz	@b
549
 
550
	ret
551
;---------------------------------------------------------------------
552
align 4
3473 mario79 553
draw_colours:
554
	mov	edi,10
555
	mov	esi,[communication_area]
556
	add	esi,28
557
;	mov	ebx,220*65536+14
8288 IgorA 558
	mov	ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14
3476 mario79 559
	mov	ecx,27*65536+14
8288 IgorA 560
	mov	eax,SF_DRAW_RECT
3473 mario79 561
	mov	[frame_data.draw_text_flag],dword 0
562
;--------------------------------------
3476 mario79 563
align 4
3473 mario79 564
newcol:
565
	mov	edx,[esi]
566
	mcall
567
 
568
	push	ebx ecx
569
 
570
	sub	ebx,2 shl 16
571
	add	bx,4
572
	sub	ecx,2 shl 16
573
	add	cx,4
3587 fedesco 574
 
3473 mario79 575
	mov	[frame_data.x],ebx
3587 fedesco 576
	mov	[frame_data.y],ecx
3473 mario79 577
 
8288 IgorA 578
	stdcall	[Frame_draw], frame_data
3473 mario79 579
 
580
	pop	ecx ebx
581
 
3476 mario79 582
	add	ecx,24*65536
3473 mario79 583
	add	esi,4
3587 fedesco 584
 
3473 mario79 585
	dec	edi
586
	jnz	newcol
587
 
588
	ret
589
;----------------------------------------------------------------------
3380 mario79 590
align 4
591
draw_window:
8288 IgorA 592
	mcall	SF_REDRAW,SSF_BEGIN_DRAW
593
;	mcall	SF_CREATE_WINDOW, , , 0x33AABBCC,,title
3469 mario79 594
	xor	esi,esi
8288 IgorA 595
	mcall	SF_CREATE_WINDOW,[window_x],[window_y], 0x34EEEeee,,title
596
	mcall	SF_DEFINE_BUTTON,,,0x60000002
3380 mario79 597
	mcall	,,,0x60000003
6054 leency 598
	mcall	,<296,80>,<280,22>,4,0x37A4D4
599
	mcall	,<402,80>,        ,1
8288 IgorA 600
	mcall   SF_DRAW_TEXT,<332,289>,0x802C7B9E,OK_Cancel
6054 leency 601
	mcall   ,<331,288>,0x80FFFfff
3469 mario79 602
	xor	ebp,ebp
8288 IgorA 603
	mcall	SF_PUT_IMAGE_EXT,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,,24
3380 mario79 604
	call	draw_tone
605
	call	draw_selected_color
3469 mario79 606
	xor	eax,eax
607
	inc	eax
608
	mov	[scroll_bar_data_red.all_redraw],eax
609
	mov	[scroll_bar_data_green.all_redraw],eax
610
	mov	[scroll_bar_data_blue.all_redraw],eax
611
	call	draw_scrollbars
3476 mario79 612
	call	draw_history_frame
3473 mario79 613
	call	draw_button_row
614
	call	draw_colours
3476 mario79 615
	call	draw_color_value
8288 IgorA 616
	mcall	SF_REDRAW,SSF_END_DRAW
3380 mario79 617
	ret
618
;---------------------------------------------------------------------
8288 IgorA 619
align 4
620
proc hex_in_str, buf:dword,val:dword,zif:dword
621
pushad
622
	mov edi,[buf]
623
	mov ecx,[zif]
624
	add edi,ecx
625
	dec edi
626
	mov ebx,[val]
627
 
628
	.cycle:
629
		mov al,bl
630
		and al,0xf
631
		cmp al,10
632
		jl @f
633
			add al,'A'-'0'-10
634
		@@:
635
		add al,'0'
636
		mov byte[edi],al
637
		dec edi
638
		shr ebx,4
639
	loop .cycle
640
popad
641
	ret
642
endp
643
;---------------------------------------------------------------------
644
;input:
645
; buf - указатель на строку, число должно быть в 10 или 16 ричном виде
646
;output:
647
; eax - число
648
align 4
649
proc conv_str_to_int uses ebx ecx esi, buf:dword
650
	xor eax,eax
651
	xor ebx,ebx
652
	mov esi,[buf]
653
 
654
	;на случай если перед числом находятся пробелы
655
	@@:
656
	cmp byte[esi],' '
657
	jne @f
658
		inc esi
659
		jmp @b
660
	@@:
661
 
662
	;определение отрицательных чисел
663
	xor ecx,ecx
664
	inc ecx
665
	cmp byte[esi],'-'
666
	jne @f
667
		dec ecx
668
		inc esi
669
	@@:
670
 
671
	cmp word[esi],'0x'
672
	je .load_digit_16
673
 
674
	.load_digit_10: ;считывание 10-тичных цифр
675
		mov bl,byte[esi]
676
		cmp bl,'0'
677
		jl @f
678
		cmp bl,'9'
679
		jg @f
680
			sub bl,'0'
681
			imul eax,10
682
			add eax,ebx
683
			inc esi
684
			jmp .load_digit_10
685
	jmp @f
686
 
687
	.load_digit_16: ;считывание 16-ричных цифр
688
		add esi,2
689
	.cycle_16:
690
		mov bl,byte[esi]
691
		cmp bl,'0'
692
		jl @f
693
		cmp bl,'f'
694
		jg @f
695
		cmp bl,'9'
696
		jle .us1
697
			cmp bl,'A'
698
			jl @f ;отсеиваем символы >'9' и <'A'
699
		.us1: ;составное условие
700
		cmp bl,'F'
701
		jle .us2
702
			cmp bl,'a'
703
			jl @f ;отсеиваем символы >'F' и <'a'
704
			sub bl,32 ;переводим символы в верхний регистр, для упрощения их последущей обработки
705
		.us2: ;составное условие
706
			sub bl,'0'
707
			cmp bl,9
708
			jle .cor1
709
				sub bl,7 ;convert 'A' to '10'
710
			.cor1:
711
			shl eax,4
712
			add eax,ebx
713
			inc esi
714
			jmp .cycle_16
715
	@@:
716
	cmp ecx,0 ;если число отрицательное
717
	jne @f
718
		sub ecx,eax
719
		mov eax,ecx
720
	@@:
721
	ret
722
endp
723
;---------------------------------------------------------------------
3380 mario79 724
include 'palette.inc'
725
;---------------------------------------------------------------------
726
include 'tone.inc'
727
;---------------------------------------------------------------------
728
include 'i_data.inc'
729
;---------------------------------------------------------------------
730
IM_END:
731
;---------------------------------------------------------------------
732
include 'u_data.inc'
733
;---------------------------------------------------------------------
734
I_END:
3587 fedesco 735
;---------------------------------------------------------------------