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 |
13 | ; * Neither the name of 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 |
20 | ; DISCLAIMED. IN NO EVENT SHALL |
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, |
436 | mcall SF_DRAW_RECT, |
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, |
479 | mcall SF_DRAW_RECT, |
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]>, |
494 | mcall SF_PUT_IMAGE_EXT,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>, |
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, |
605 | ; mcall SF_CREATE_WINDOW, |
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, |
608 | mcall SF_DEFINE_BUTTON, |
611 | mcall , |
609 | mcall , |
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]>, |
615 | mcall SF_PUT_IMAGE_EXT,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>, |
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 | ;---------------------------------------------------------------------'a' |
712 | ;---------------------------------------------------------------------[palette_SIZE_X],[palette_SIZE_Y]>331,288>332,289>402,80>280,22>296,80>[tone_SIZE_X],[tone_SIZE_Y]> |
715 | >'A' |
- | |
716 | >[palette_SIZE_X],[palette_SIZE_Y]>331,288>332,289>402,80>280,22>296,80>[tone_SIZE_X],[tone_SIZE_Y]> |
- |