Subversion Repositories Kolibri OS

Rev

Rev 8993 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

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