Rev 2538 | Rev 2548 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
51 | mikedld | 1 | ;******************************** |
2 | ;* * |
||
3 | ;* DESKTOP ICON MANAGER * |
||
4 | ;* * |
||
5 | ;* Compile with flat assembler * |
||
6 | ;* * |
||
7 | ;******************************** |
||
2542 | mario79 | 8 | ; version: 3.01 |
9 | ; last update: 02/04/2012 |
||
10 | ; changed by: Marat Zakiyanov aka Mario79, aka Mario |
||
11 | ; changes: Fix for previous revision - not drawed icons after |
||
12 | ; startup in certain cases. |
||
13 | ;--------------------------------------------------------------------- |
||
2538 | mario79 | 14 | ; version: 3.00 |
15 | ; last update: 02/04/2012 |
||
16 | ; changed by: Marat Zakiyanov aka Mario79, aka Mario |
||
17 | ; changes: Program used only 2 threads: draw and mouse |
||
18 | ; Used new kernel functions: 25, 34, 15.8, 4 (redirect). |
||
19 | ; Used PNG icons with transparent. |
||
20 | ;--------------------------------------------------------------------- |
||
2476 | mario79 | 21 | ; version: 2.11 |
22 | ; last update: 19/03/2012 |
||
23 | ; changed by: Marat Zakiyanov aka Mario79, aka Mario |
||
24 | ; changes: The program uses only 140 Kb memory is now. |
||
25 | ; Some speedup. |
||
2475 | mario79 | 26 | ;--------------------------------------------------------------------- |
27 | ; version: 2.1 |
||
28 | ; last update: 17/03/2012 |
||
29 | ; changed by: Marat Zakiyanov aka Mario79, aka Mario |
||
30 | ; changes: Global optimization! The program uses |
||
31 | ; only 161 KB of memory instead of 603 kb is now. |
||
32 | ;--------------------------------------------------------------------- |
||
33 | ; version: 2.02 |
||
34 | ; last update: 15/03/2012 |
||
35 | ; changed by: Marat Zakiyanov aka Mario79, aka Mario |
||
36 | ; changes: some optimisations and code refactoring |
||
37 | ;--------------------------------------------------------------------- |
||
38 | ; version: 2.01 |
||
39 | ; last update: 27/09/2011 |
||
40 | ; changed by: Marat Zakiyanov aka Mario79, aka Mario |
||
41 | ; changes: deactivate the window after click |
||
42 | ; (working to kernel r.2244 and above) |
||
43 | ;--------------------------------------------------------------------- |
||
44 | ; Many fix's and changes created by: |
||
45 | ; Halyavin, Diamond, Heavyiron, |
||
46 | ; SPraid, Dunkaist |
||
47 | ;--------------------------------------------------------------------- |
||
48 | ; version: 2.00 |
||
2538 | mario79 | 49 | ; last update: 22/02/2005 |
2475 | mario79 | 50 | ; changed by: Willow and Mario79 |
51 | ; changes: modified for work with new multi-thread ICON. |
||
51 | mikedld | 52 | ;****************************************************************************** |
2538 | mario79 | 53 | ICON_SIZE equ 32*32*4 |
51 | mikedld | 54 | REC_SIZE equ 80 |
2538 | mario79 | 55 | ICONS_DAT equ '/sys/icons.dat' |
56 | ICON_APP equ '/sys/icon' |
||
57 | ICON_STRIP equ '/rd/1/iconstrp.png' |
||
2469 | mario79 | 58 | ;------------------------------------------------------------------------------ |
59 | use32 |
||
60 | org 0x0 |
||
2475 | mario79 | 61 | db 'MENUET01' ; 8 byte id |
62 | dd 0x01 ; header version |
||
63 | dd START ; start of code |
||
64 | dd IM_END ; size of image |
||
65 | dd I_END ; memory for app |
||
66 | dd stack_area ; esp |
||
67 | dd I_Param ; boot parameters |
||
2538 | mario79 | 68 | dd path ; path |
2469 | mario79 | 69 | ;------------------------------------------------------------------------------ |
2538 | mario79 | 70 | include 'lang.inc' |
2469 | mario79 | 71 | include '../../../macros.inc' |
2538 | mario79 | 72 | include '../../../develop/libraries/box_lib/load_lib.mac' |
51 | mikedld | 73 | COLOR_ORDER equ MENUETOS |
2469 | mario79 | 74 | ;include 'debug.inc' |
75 | ;------------------------------------------------------------------------------ |
||
2538 | mario79 | 76 | @use_library ;use load lib macros |
77 | ;------------------------------------------------------------------------------ |
||
2475 | mario79 | 78 | START: ; start of execution |
2476 | mario79 | 79 | mcall 68,11 |
2538 | mario79 | 80 | ;--------------------------------------------------------------------- |
81 | load_libraries l_libs_start,end_l_libs |
||
82 | test eax,eax |
||
83 | jnz close |
||
84 | |||
85 | ; unpack deflate |
||
86 | mov eax,[unpack_DeflateUnpack2] |
||
87 | mov [deflate_unpack],eax |
||
88 | ;--------------------------------------------------------------------- |
||
2476 | mario79 | 89 | ; get size of file ICONSTRP.GIF |
2469 | mario79 | 90 | mcall 70,finfo |
2476 | mario79 | 91 | test eax,eax |
92 | jnz close |
||
93 | ; get memory for ICONSTRP.GIF |
||
2538 | mario79 | 94 | mov ecx,[procinfo+32] |
2476 | mario79 | 95 | mov [finfo.size],ecx |
2538 | mario79 | 96 | mov [img_size],ecx |
2476 | mario79 | 97 | mcall 68,12 |
98 | mov [finfo.point],eax |
||
2538 | mario79 | 99 | mov [image_file],eax |
2476 | mario79 | 100 | ; load ICONSTRP.GIF |
101 | mov [finfo],dword 0 |
||
102 | mcall 70,finfo |
||
103 | test eax,eax |
||
104 | jnz close |
||
2538 | mario79 | 105 | ; convert PNG to RAW |
106 | xor eax,eax |
||
107 | mov [return_code],eax |
||
108 | |||
109 | push image_file |
||
110 | call [cnv_png_import.Start] |
||
111 | |||
112 | mov eax,[raw_pointer] |
||
113 | mov eax,[eax+28] |
||
114 | add eax,[raw_pointer] |
||
2476 | mario79 | 115 | mov [strip_file],eax |
116 | ; back memeory to system |
||
117 | mcall 68,13,[finfo.point] |
||
2538 | mario79 | 118 | |
119 | mov eax,[raw_pointer] |
||
120 | mov eax,[eax+8] |
||
2469 | mario79 | 121 | shr eax,5 |
122 | mov [icon_count],eax |
||
2476 | mario79 | 123 | ; load ICON.DAT |
2469 | mario79 | 124 | call load_ic |
125 | boot_str: |
||
126 | cmp [I_Param],dword 'BOOT' |
||
2538 | mario79 | 127 | je START2 |
128 | ;------------------------------------------------------------------------------ |
||
129 | ; ICON EDITOR MODE - START1 entering label |
||
130 | ;------------------------------------------------------------------------------ |
||
131 | START1: |
||
2469 | mario79 | 132 | call load_icon_list |
2538 | mario79 | 133 | ;------------------------------------------------------------------------------ |
134 | align 4 |
||
2469 | mario79 | 135 | red: |
2475 | mario79 | 136 | call draw_window ; at first, draw the window |
2469 | mario79 | 137 | mov esi,[current_icon] |
138 | jmp band |
||
139 | ;------------------------------------------------------------------------------ |
||
140 | align 4 |
||
51 | mikedld | 141 | still: |
2469 | mario79 | 142 | mcall 10 ; wait here for event |
2475 | mario79 | 143 | dec eax ; redraw request ? |
2469 | mario79 | 144 | jz red |
145 | |||
2475 | mario79 | 146 | dec eax ; key in buffer ? |
2469 | mario79 | 147 | jz key |
148 | ;------------------------------------------------------------------------------ |
||
149 | align 4 |
||
2475 | mario79 | 150 | button: |
2469 | mario79 | 151 | mcall 17 ; get id |
152 | shr eax,8 |
||
51 | mikedld | 153 | |
2475 | mario79 | 154 | cmp eax,1 ; button id=1 ? |
2469 | mario79 | 155 | je close |
2538 | mario79 | 156 | |
157 | mov esi,[current_icon] |
||
158 | add esi,12 |
||
159 | mov ebx,[cur_band] |
||
160 | |||
161 | cmp eax,11 |
||
162 | jb @f |
||
163 | cmp eax,13 |
||
164 | ja @f |
||
165 | call read_string |
||
166 | jmp still |
||
2469 | mario79 | 167 | ;-------------------------------------- |
168 | align 4 |
||
2538 | mario79 | 169 | @@: |
170 | cmp eax,21 ; apply changes |
||
171 | je apply |
||
172 | |||
173 | cmp eax,22 ; user pressed the 'add icon' button |
||
174 | je add_icon |
||
175 | |||
176 | cmp eax,23 ; user pressed the remove icon button |
||
177 | je remove_icon |
||
178 | |||
179 | |||
180 | cmp eax,30 ; left arrow to icons bar |
||
181 | je arrow.left |
||
182 | |||
2469 | mario79 | 183 | cmp eax,31 ; right arrow to icons bar |
2538 | mario79 | 184 | je arrow.right |
185 | |||
186 | cmp eax,32 |
||
187 | je ico |
||
51 | mikedld | 188 | |
2538 | mario79 | 189 | cmp eax,40 ; user pressed button for icon position |
190 | jae press_button_for_icon_position |
||
191 | |||
192 | jmp still |
||
193 | ;------------------------------------------------------------------------------ |
||
194 | align 4 |
||
195 | arrow: |
||
196 | .right: |
||
197 | |||
2469 | mario79 | 198 | mov eax,[icon_count] |
2538 | mario79 | 199 | sub eax,8 |
200 | cmp ebx,eax |
||
201 | jae still ;.drwic2 |
||
51 | mikedld | 202 | |
2538 | mario79 | 203 | add ebx,1 |
2469 | mario79 | 204 | jmp .drwic2 |
205 | ;-------------------------------------- |
||
206 | align 4 |
||
2538 | mario79 | 207 | .left: |
2469 | mario79 | 208 | test ebx,ebx |
2538 | mario79 | 209 | jz still |
51 | mikedld | 210 | |
2538 | mario79 | 211 | sub ebx,1 |
2469 | mario79 | 212 | ;-------------------------------------- |
213 | align 4 |
||
214 | .drwic2: |
||
215 | mov [cur_band],ebx |
||
216 | ;-------------------------------------- |
||
217 | align 4 |
||
218 | .drwic1: |
||
219 | call draw_icon |
||
220 | jmp still |
||
2538 | mario79 | 221 | ;------------------------------------------------------------------------------ |
2469 | mario79 | 222 | align 4 |
2538 | mario79 | 223 | ico: |
2469 | mario79 | 224 | push ebx |
225 | mcall 37,1 |
||
226 | pop ebx |
||
227 | shr eax,16 |
||
228 | sub eax,33-19 |
||
229 | mov edi,34 |
||
230 | xor edx,edx |
||
231 | div edi |
||
232 | lea ecx,[ebx+eax] |
||
233 | cmp ecx,[icon_count] |
||
234 | jae still |
||
51 | mikedld | 235 | |
2469 | mario79 | 236 | mov ecx,eax |
237 | add eax,ebx |
||
238 | call itoa |
||
2538 | mario79 | 239 | jmp arrow.drwic1 |
240 | ;------------------------------------------------------------------------------ |
||
2475 | mario79 | 241 | align 4 |
2538 | mario79 | 242 | apply: |
2469 | mario79 | 243 | ; (1) save list |
2538 | mario79 | 244 | mov ebx,finfo |
2469 | mario79 | 245 | mov dword[ebx],2 |
246 | mov edx,REC_SIZE |
||
247 | imul edx,dword [icons] |
||
248 | mov [ebx+12],edx |
||
249 | mov esi,iconlst |
||
250 | call lst_path |
||
251 | mcall 70 |
||
252 | ; (2) terminate all icons |
||
2475 | mario79 | 253 | or ecx,-1 |
2538 | mario79 | 254 | mcall 9,procinfo |
2469 | mario79 | 255 | mov edi,[ebx+30] |
256 | ;-------------------------------------- |
||
257 | align 4 |
||
258 | newread2: |
||
259 | mov esi,1 |
||
260 | ;-------------------------------------- |
||
261 | align 4 |
||
262 | newread: |
||
263 | inc esi |
||
264 | mov ecx,esi |
||
2538 | mario79 | 265 | mcall 9,procinfo |
266 | |||
2469 | mario79 | 267 | cmp edi,[ebx+30] |
268 | je newread |
||
51 | mikedld | 269 | |
2469 | mario79 | 270 | cmp esi,eax |
2538 | mario79 | 271 | jg .apply_changes |
51 | mikedld | 272 | |
2475 | mario79 | 273 | mov eax,[ebx+10] |
2469 | mario79 | 274 | and eax,not 20202020h |
275 | cmp eax,'@ICO' |
||
276 | jz @f |
||
277 | cmp eax,'ICON' |
||
278 | jne newread |
||
279 | ;-------------------------------------- |
||
280 | align 4 |
||
281 | @@: |
||
2538 | mario79 | 282 | xor eax,eax |
2475 | mario79 | 283 | cmp eax,[ebx+42] |
2469 | mario79 | 284 | jne newread |
51 | mikedld | 285 | |
2475 | mario79 | 286 | cmp eax,[ebx+46] |
2469 | mario79 | 287 | jne newread |
51 | mikedld | 288 | |
2469 | mario79 | 289 | mov ecx,esi |
290 | mcall 18,2 |
||
2538 | mario79 | 291 | |
2469 | mario79 | 292 | jmp newread2 |
2538 | mario79 | 293 | ;-------------------------------------- |
2469 | mario79 | 294 | align 4 |
2538 | mario79 | 295 | .apply_changes: |
2469 | mario79 | 296 | mov ebx, finfo_start |
297 | mov dword [ebx+8], boot_str+6 |
||
298 | mov esi, iconname |
||
299 | call lst_path |
||
300 | mcall 70 |
||
2538 | mario79 | 301 | mcall 68,1 |
302 | mcall 15,3 |
||
2469 | mario79 | 303 | jmp still |
304 | ;------------------------------------------------------------------------------ |
||
305 | align 4 |
||
2538 | mario79 | 306 | add_icon: |
2469 | mario79 | 307 | mov ebx,24*65536+250+8*14 |
308 | mcall 4,,0xc0ff0000,add_text,,0xffffff |
||
408 | halyavin | 309 | |
2469 | mario79 | 310 | mcall 10 |
311 | cmp eax,3 |
||
312 | jne still |
||
51 | mikedld | 313 | |
2469 | mario79 | 314 | mcall 17 |
315 | shr eax,8 |
||
316 | cmp eax,40 |
||
317 | jb no_f |
||
318 | mov edi,eax |
||
319 | sub eax,40 |
||
320 | |||
2475 | mario79 | 321 | xor edx,edx ; bcd -> 10 |
2469 | mario79 | 322 | mov ebx,16 |
323 | div ebx |
||
324 | ; multiply x10 |
||
325 | shl eax,1 ; multiply x2 |
||
326 | lea eax,[eax+eax*4] ; multiply x5 |
||
327 | add eax,edx |
||
328 | |||
329 | mov ebx,eax |
||
330 | add ebx,icons_reserved |
||
331 | cmp [ebx],byte 'x' |
||
332 | je no_f |
||
333 | mov [ebx],byte 'x' |
||
334 | |||
335 | mov [cur_btn],edi |
||
336 | xor edx,edx |
||
337 | mov ebx,10 |
||
338 | div ebx |
||
339 | add eax,65 |
||
340 | add edx,65 |
||
341 | mov [icon_default+0],dl |
||
342 | mov [icon_default+1],al |
||
343 | |||
344 | inc dword [icons] |
||
345 | mov edi,[icons] |
||
346 | dec edi |
||
347 | imul edi,REC_SIZE |
||
348 | add edi,icon_data |
||
349 | |||
350 | mov [current_icon],edi |
||
51 | mikedld | 351 | |
2469 | mario79 | 352 | mov esi,icon_default |
353 | mov ecx,REC_SIZE |
||
354 | cld |
||
355 | rep movsb |
||
356 | mov esi,[current_icon] |
||
357 | jmp band |
||
358 | ;-------------------------------------- |
||
359 | align 4 |
||
360 | no_f: |
||
361 | call draw_btns ;draw_window |
||
362 | jmp still |
||
2538 | mario79 | 363 | ;------------------------------------------------------------------------------ |
2469 | mario79 | 364 | align 4 |
2538 | mario79 | 365 | remove_icon: |
2469 | mario79 | 366 | mov ebx,24*65536+250+8*14 |
367 | mcall 4,,0xc0ff0000,rem_text,,0xffffff |
||
368 | |||
369 | mcall 10 |
||
370 | cmp eax,3 |
||
2476 | mario79 | 371 | jne no_f |
51 | mikedld | 372 | |
2469 | mario79 | 373 | mcall 17 |
374 | shr eax,8 |
||
375 | cmp eax,40 |
||
2475 | mario79 | 376 | jb red |
2469 | mario79 | 377 | sub eax,40 |
378 | |||
379 | xor edx,edx |
||
380 | mov ebx,16 |
||
381 | div ebx |
||
382 | ; multiply x10 |
||
383 | shl eax,1 ; multiply x2 |
||
384 | lea eax,[eax+eax*4] ; multiply x5 |
||
385 | add eax,edx |
||
386 | |||
387 | mov ebx,eax |
||
388 | add ebx,icons_reserved |
||
389 | cmp [ebx],byte 'x' |
||
390 | jne red |
||
391 | mov [ebx],byte ' ' |
||
392 | |||
393 | xor edx,edx |
||
394 | mov ebx,10 |
||
395 | div ebx |
||
396 | shl eax,8 |
||
397 | mov al,dl |
||
398 | |||
399 | add eax,65*256+65 |
||
400 | |||
401 | mov esi,icon_data |
||
402 | mov edi,REC_SIZE |
||
403 | imul edi,[icons] |
||
404 | add edi,icon_data |
||
405 | ;-------------------------------------- |
||
406 | align 4 |
||
407 | news: |
||
408 | cmp word [esi],ax |
||
409 | je foundi |
||
410 | add esi,REC_SIZE |
||
411 | cmp esi,edi |
||
412 | jb news |
||
413 | jmp red |
||
414 | ;-------------------------------------- |
||
415 | align 4 |
||
416 | foundi: |
||
417 | mov ecx,edi |
||
418 | sub ecx,esi |
||
419 | |||
420 | mov edi,esi |
||
421 | add esi,REC_SIZE |
||
422 | |||
423 | cld |
||
424 | rep movsb |
||
425 | |||
426 | dec [icons] |
||
427 | |||
428 | mov eax,icon_data |
||
429 | mov [current_icon],eax |
||
430 | movzx ebx,word[eax] |
||
431 | sub bx,'AA' |
||
432 | shl bl,4 |
||
433 | shr ebx,4 |
||
434 | add ebx,40 |
||
435 | mov [cur_btn],ebx |
||
436 | jmp red |
||
2538 | mario79 | 437 | ;------------------------------------------------------------------------------ |
2469 | mario79 | 438 | align 4 |
2538 | mario79 | 439 | press_button_for_icon_position: |
2469 | mario79 | 440 | mov edi,eax |
441 | sub eax,40 |
||
442 | mov edx,eax |
||
443 | shl eax,4 |
||
444 | and edx,0xf |
||
445 | mov dh,ah |
||
446 | add edx,65*256+65 |
||
447 | mov esi,icon_data |
||
448 | mov ecx,[icons] |
||
449 | cld |
||
450 | ;-------------------------------------- |
||
451 | align 4 |
||
452 | findl1: |
||
453 | cmp dx,[esi] |
||
454 | je foundl1 |
||
455 | add esi,REC_SIZE |
||
456 | loop findl1 |
||
457 | jmp still |
||
458 | ;-------------------------------------- |
||
459 | align 4 |
||
460 | foundl1: |
||
461 | mov [current_icon],esi |
||
462 | mov [cur_btn],edi |
||
463 | ;-------------------------------------- |
||
464 | align 4 |
||
465 | band: |
||
466 | add esi,12 |
||
2538 | mario79 | 467 | call ASCII_to_icon_number |
2469 | mario79 | 468 | and eax,0xfffff8 |
469 | mov [cur_band],eax |
||
470 | call draw_btns |
||
471 | jmp still |
||
472 | ;------------------------------------------------------------------------------ |
||
473 | align 4 |
||
51 | mikedld | 474 | print_strings: |
2469 | mario79 | 475 | pusha |
476 | mcall 13,<100,180>,<278+12,40>,0xffffff ; clear text area |
||
477 | xor edi,edi |
||
2475 | mario79 | 478 | mov eax,4 ; icon text |
2469 | mario79 | 479 | mov ebx,100*65536+278+14 |
480 | mov ecx,3 |
||
481 | ;-------------------------------------- |
||
482 | align 4 |
||
483 | .ll: |
||
484 | push ecx |
||
485 | mov ecx,0x000000 |
||
486 | mov edx,[current_icon] |
||
487 | add edx,[positions+edi*4] |
||
488 | movzx esi,byte[str_lens+edi] |
||
489 | inc edi |
||
490 | mcall |
||
491 | add ebx,14 |
||
492 | pop ecx |
||
493 | loop .ll |
||
51 | mikedld | 494 | |
2469 | mario79 | 495 | popa |
496 | ret |
||
497 | ;------------------------------------------------------------------------------ |
||
498 | align 4 |
||
51 | mikedld | 499 | load_icon_list: |
2475 | mario79 | 500 | mov edi,icons_reserved ; clear reserved area |
2469 | mario79 | 501 | mov eax,32 |
502 | mov ecx,10*9 |
||
503 | cld |
||
504 | rep stosb |
||
51 | mikedld | 505 | |
2475 | mario79 | 506 | mov ecx,[icons] ; set used icons to reserved area |
2469 | mario79 | 507 | mov esi,icon_data |
508 | ;-------------------------------------- |
||
509 | align 4 |
||
510 | ldl1: |
||
511 | movzx ebx,byte [esi+1] |
||
512 | sub ebx,65 |
||
513 | ; multiply x10 |
||
514 | shl ebx,1 ; multiply x2 |
||
515 | lea ebx,[ebx+ebx*4] ; multiply x5 |
||
516 | movzx eax,byte [esi] |
||
517 | add ebx,eax |
||
518 | sub ebx,65 |
||
519 | add ebx,icons_reserved |
||
520 | mov [ebx],byte 'x' |
||
521 | add esi,REC_SIZE |
||
522 | loop ldl1 |
||
523 | ret |
||
524 | ;------------------------------------------------------------------------------ |
||
525 | align 4 |
||
51 | mikedld | 526 | lst_path: |
2469 | mario79 | 527 | mov ecx,30 |
528 | mov edi,finfo.path |
||
529 | rep movsb |
||
530 | ret |
||
531 | ;------------------------------------------------------------------------------ |
||
532 | align 4 |
||
51 | mikedld | 533 | load_ic: |
2469 | mario79 | 534 | mov ebx,finfo |
535 | mov dword[ebx+12],48*REC_SIZE |
||
536 | mov dword[ebx+16],icon_data |
||
537 | mov esi,iconlst |
||
538 | call lst_path |
||
539 | mcall 70 |
||
540 | lea eax,[ebx+10] |
||
541 | xor edx,edx |
||
542 | mov ebx,REC_SIZE |
||
543 | div ebx |
||
544 | mov [icons],eax |
||
545 | ret |
||
546 | ;------------------------------------------------------------------------------ |
||
547 | align 4 |
||
51 | mikedld | 548 | read_string: |
2469 | mario79 | 549 | pusha |
550 | sub eax,11 |
||
551 | movzx ecx,byte[str_lens+eax] |
||
552 | mov [cur_str],ecx |
||
553 | mov eax,[positions+eax*4] |
||
554 | mov edi,[current_icon] |
||
555 | add edi,eax |
||
556 | mov [addr],edi |
||
557 | add edi,ecx |
||
558 | ;-------------------------------------- |
||
559 | align 4 |
||
560 | .l1: |
||
561 | dec edi |
||
562 | cmp byte[edi],' ' |
||
563 | jne .found |
||
51 | mikedld | 564 | |
2469 | mario79 | 565 | mov byte[edi],'_' |
566 | loop .l1 |
||
51 | mikedld | 567 | |
2469 | mario79 | 568 | dec edi |
569 | ;-------------------------------------- |
||
570 | align 4 |
||
571 | .found: |
||
572 | inc edi |
||
573 | push edi |
||
574 | call print_strings |
||
575 | pop edi |
||
576 | ;-------------------------------------- |
||
577 | align 4 |
||
578 | f11: |
||
579 | mcall 10 |
||
580 | cmp eax,2 |
||
581 | jz fbu |
||
582 | jmp rs_done |
||
583 | ;-------------------------------------- |
||
584 | align 4 |
||
585 | fbu: |
||
586 | mcall 2 |
||
587 | shr eax,8 |
||
588 | cmp eax,13 |
||
589 | je rs_done |
||
590 | cmp eax,8 |
||
591 | jnz nobsl |
||
592 | cmp edi,[addr] |
||
593 | jz f11 |
||
594 | dec edi |
||
595 | mov [edi],byte '_' |
||
596 | call print_strings |
||
597 | jmp f11 |
||
598 | ;-------------------------------------- |
||
599 | align 4 |
||
600 | nobsl: |
||
601 | cmp eax,31 |
||
602 | jbe f11 |
||
603 | mov [edi],al |
||
604 | call print_strings |
||
605 | inc edi |
||
606 | mov esi,[addr] |
||
607 | add esi,[cur_str] |
||
608 | cmp esi,edi |
||
609 | jnz f11 |
||
610 | ;-------------------------------------- |
||
611 | align 4 |
||
612 | rs_done: |
||
613 | mov ecx,[addr] |
||
614 | add ecx,[cur_str] |
||
615 | sub ecx,edi |
||
616 | mov eax,32 |
||
617 | cld |
||
618 | rep stosb |
||
619 | call print_strings |
||
620 | popa |
||
621 | ret |
||
622 | ;------------------------------------------------------------------------------ |
||
623 | align 4 |
||
2475 | mario79 | 624 | key: |
625 | mcall 2 ; just read it and ignore |
||
2469 | mario79 | 626 | jmp still |
627 | ;------------------------------------------------------------------------------ |
||
51 | mikedld | 628 | ; ********************************************* |
629 | ; ******* WINDOW DEFINITIONS AND DRAW ******** |
||
630 | ; ********************************************* |
||
2469 | mario79 | 631 | align 4 |
51 | mikedld | 632 | draw_window: |
2469 | mario79 | 633 | mcall 12,1 |
2475 | mario79 | 634 | ; DRAW WINDOW |
2469 | mario79 | 635 | xor eax,eax |
636 | xor esi,esi |
||
637 | mcall ,<210,300>,<30,(390-14)>,0x14ffffff,,title |
||
51 | mikedld | 638 | |
2469 | mario79 | 639 | mcall 13,<20,260>,<35,200>,0x3366cc ; WINDOW AREA |
51 | mikedld | 640 | |
2469 | mario79 | 641 | mcall 38,<150,150>,<35,235>,0xffffff ; VERTICAL LINE ON WINDOW AREA |
51 | mikedld | 642 | |
2469 | mario79 | 643 | mcall ,<20,280>,<135,135> ; HOROZONTAL LINE ON WINDOW AREA |
51 | mikedld | 644 | |
2469 | mario79 | 645 | mcall 8,<20,72>,<(275+1+14),(13-2)>,11,[bcolor] ;id 11 TEXT ENTER BUTTONS |
646 | |||
647 | inc edx |
||
648 | add ecx,14*65536 |
||
649 | mcall ; id 12 |
||
650 | |||
651 | inc edx |
||
652 | add ecx,14*65536 |
||
653 | mcall ; id 13 |
||
51 | mikedld | 654 | |
2469 | mario79 | 655 | mcall ,<20,259>,<(329+2),(15-4)>,21 ; id 21 APPLY AND SAVE CHANGES BUTTON |
51 | mikedld | 656 | |
2469 | mario79 | 657 | add ecx,14*65536 |
658 | inc edx |
||
659 | mcall ,<20,(129-2)> ; id 22 ADD ICON BUTTON |
||
51 | mikedld | 660 | |
2469 | mario79 | 661 | add ebx,(130+2)*65536 |
662 | inc edx |
||
663 | mcall ; id 23 REMOVE ICON BUTTON |
||
51 | mikedld | 664 | |
2469 | mario79 | 665 | mcall ,<(20-14),8>,<(260-23),32>,30 + 1 shl 30 ; id 30 IMAGE BUTTON |
51 | mikedld | 666 | |
2469 | mario79 | 667 | inc edx |
668 | add ebx,(36*7+26) shl 16 |
||
669 | mcall ; id 31 |
||
51 | mikedld | 670 | |
2469 | mario79 | 671 | add edx,1 + 1 shl 29 |
672 | mcall ,<(33-19),(34*8)> ; id 32 |
||
673 | |||
674 | mcall 4,<(23-15),(273-24)>,0,arrows,1 |
||
51 | mikedld | 675 | |
2469 | mario79 | 676 | add ebx,(36*7+27)shl 16 |
677 | add edx,2 |
||
678 | mcall |
||
51 | mikedld | 679 | |
2469 | mario79 | 680 | dec edx |
681 | mcall ,<120,250> |
||
51 | mikedld | 682 | |
2469 | mario79 | 683 | lea edx,[ebx+8 shl 16] |
684 | mcall 47,0x30000,[icon_count],,0 |
||
51 | mikedld | 685 | |
2469 | mario79 | 686 | mov eax,4 |
687 | mov ebx,24 shl 16+(250+14+14+14) |
||
688 | mov ecx,0xffffff |
||
689 | mov edx,text |
||
690 | mov esi,47 |
||
691 | ;-------------------------------------- |
||
692 | align 4 |
||
2538 | mario79 | 693 | .newline: |
2469 | mario79 | 694 | mov ecx,[edx] |
695 | add edx,4 |
||
696 | mcall |
||
697 | add ebx,14 |
||
698 | add edx,47 |
||
699 | cmp [edx],byte 'x' |
||
2538 | mario79 | 700 | jne .newline |
2469 | mario79 | 701 | ;-------------------------------------- |
702 | align 4 |
||
703 | draw_btns: |
||
2475 | mario79 | 704 | mov eax,0 ; DRAW BUTTONS ON WINDOW AREA |
2469 | mario79 | 705 | mov ebx,20 shl 16+25 |
706 | mov ecx,35 shl 16+19 |
||
707 | mov edi,icon_table |
||
708 | mov edx,40 |
||
709 | ;-------------------------------------- |
||
710 | align 4 |
||
711 | newbline: |
||
712 | cmp [edi],byte 'x' |
||
713 | jne no_button |
||
51 | mikedld | 714 | |
2469 | mario79 | 715 | mov esi,0x5577cc |
716 | cmp [edi+90],byte 'x' |
||
717 | jne nores |
||
51 | mikedld | 718 | |
2469 | mario79 | 719 | mov esi,0xcc5555 |
720 | cmp edx,[cur_btn] |
||
721 | jne nores |
||
51 | mikedld | 722 | |
2469 | mario79 | 723 | mov esi,0xe7e05a |
724 | ;-------------------------------------- |
||
725 | align 4 |
||
726 | nores: |
||
727 | push eax |
||
728 | mcall 8 |
||
729 | pop eax |
||
730 | ;-------------------------------------- |
||
731 | align 4 |
||
732 | no_button: |
||
733 | add ebx,26 shl 16 |
||
51 | mikedld | 734 | |
2469 | mario79 | 735 | inc edi |
736 | inc edx |
||
737 | inc al |
||
738 | cmp al,9 |
||
739 | jbe newbline |
||
740 | |||
741 | mov al,0 |
||
742 | add edx,6 |
||
743 | ror ebx,16 |
||
744 | mov bx,20 |
||
745 | ror ebx,16 |
||
746 | add ecx,20 shl 16 |
||
747 | inc ah |
||
2538 | mario79 | 748 | cmp ah,8 |
2469 | mario79 | 749 | jbe newbline |
51 | mikedld | 750 | |
2469 | mario79 | 751 | call print_strings |
752 | call draw_icon |
||
753 | mcall 12,2 |
||
754 | ret |
||
755 | ;------------------------------------------------------------------------------ |
||
756 | align 4 |
||
51 | mikedld | 757 | draw_icon: |
2469 | mario79 | 758 | mcall 13,<(33-20),(34*8+2)>,<(260-24),(37+15-2)>,0xffffff |
759 | mov esi,[current_icon] |
||
760 | add esi,12 |
||
2538 | mario79 | 761 | call ASCII_to_icon_number |
2469 | mario79 | 762 | push eax |
763 | cmp eax,[cur_band] |
||
764 | jb .nou |
||
765 | sub eax,[cur_band] |
||
766 | cmp eax,7 |
||
767 | ja .nou |
||
768 | imul eax,34 shl 16 |
||
769 | lea ebx,[eax+(33-19) shl 16] |
||
770 | mov bx,34 |
||
771 | mcall 13,,<(236+35),3>,0xff0000 |
||
772 | mov eax,[esp] |
||
773 | ;-------------------------------------- |
||
774 | align 4 |
||
775 | .nou: |
||
776 | mov eax,[cur_band] |
||
777 | push eax |
||
778 | imul eax,ICON_SIZE |
||
2476 | mario79 | 779 | mov ebx,[strip_file] |
2538 | mario79 | 780 | add ebx,eax |
2469 | mario79 | 781 | mov ecx,8 |
782 | mov edx,(33-18) shl 16+238 |
||
783 | ;-------------------------------------- |
||
784 | align 4 |
||
785 | .nxt: |
||
786 | push ecx |
||
2538 | mario79 | 787 | pusha |
788 | mov ebp,0 |
||
789 | mcall 65,,<32,32>,,32 |
||
790 | popa |
||
2469 | mario79 | 791 | pop ecx |
792 | add ebx,ICON_SIZE |
||
793 | add edx,34 shl 16 |
||
794 | loop .nxt |
||
51 | mikedld | 795 | |
2469 | mario79 | 796 | mcall 4,<45,280-2>,0,rep_text,rep_text_len-rep_text |
797 | lea edx,[ebx+(8*5)shl 16] |
||
798 | pop ecx |
||
799 | mcall 47,0x30000,,,0xff |
||
800 | |||
801 | add ecx,7 |
||
802 | add edx,(3*8+4)shl 16 |
||
803 | mcall |
||
804 | |||
805 | add edx,(5*8+4)shl 16 |
||
806 | mcall ,,[icon_count] |
||
807 | |||
808 | pop ecx |
||
809 | add edx,(10*8+4)shl 16 |
||
810 | mcall ,,,,0xff0000 |
||
811 | ret |
||
812 | ;------------------------------------------------------------------------------ |
||
813 | align 4 |
||
814 | close: |
||
815 | or eax,-1 |
||
816 | mcall |
||
817 | ;------------------------------------------------------------------------------ |
||
2538 | mario79 | 818 | ; ICON PROCESSING MODE - START2 entering label |
2475 | mario79 | 819 | ;------------------------------------------------------------------------------ |
2469 | mario79 | 820 | align 4 |
2538 | mario79 | 821 | START2: |
822 | mcall 40,10000b ; only Event 5 - draw background |
||
823 | |||
2542 | mario79 | 824 | mcall 48,5 |
825 | mov [warea.by_x],eax |
||
826 | mov [warea.by_y],ebx |
||
827 | |||
2538 | mario79 | 828 | mcall 51,1,START_mouse_thread,stack_mouse_thread |
2542 | mario79 | 829 | |
830 | xor eax,eax |
||
831 | mov [x_left],eax |
||
832 | mov [y_top],eax |
||
833 | |||
834 | mcall 14 |
||
835 | mov ebx,eax |
||
836 | shr eax,16 |
||
837 | and ebx,0xffff |
||
838 | mov [x_right],eax |
||
839 | mov [y_bottom],ebx |
||
840 | jmp still2.1 |
||
2469 | mario79 | 841 | ;------------------------------------------------------------------------------ |
842 | align 4 |
||
51 | mikedld | 843 | still2: |
2469 | mario79 | 844 | mcall 10 |
51 | mikedld | 845 | |
2538 | mario79 | 846 | mcall 15,8 |
847 | |||
848 | mov ecx,eax |
||
849 | shr ecx,16 |
||
850 | mov [x_left],ecx |
||
851 | and eax,0xffff |
||
852 | mov [x_right],eax |
||
853 | |||
854 | mov ecx,ebx |
||
855 | shr ecx,16 |
||
856 | mov [y_top],ecx |
||
857 | and ebx,0xffff |
||
858 | mov [y_bottom],ebx |
||
859 | |||
2542 | mario79 | 860 | mcall 48,5 |
861 | mov [warea.by_x],eax |
||
862 | mov [warea.by_y],ebx |
||
863 | .1: |
||
2538 | mario79 | 864 | mov ecx,[icons] |
865 | mov ebx,icon_data |
||
866 | ;-------------------------------------- |
||
2469 | mario79 | 867 | align 4 |
2538 | mario79 | 868 | .start_new: |
869 | push ebx ecx |
||
870 | mov [adress_of_icon_data],ebx |
||
871 | mov eax,[ebx] |
||
2469 | mario79 | 872 | call calc_icon_pos |
2538 | mario79 | 873 | mov [current_X],ebx |
874 | mov [current_Y],eax |
||
875 | |||
876 | call draw_picture |
||
877 | pop ecx ebx |
||
878 | add ebx,REC_SIZE |
||
879 | dec ecx |
||
880 | jnz .start_new |
||
2469 | mario79 | 881 | jmp still2 |
2538 | mario79 | 882 | ;------------------------------------------------------------------------------ |
2469 | mario79 | 883 | align 4 |
2538 | mario79 | 884 | draw_picture: |
885 | mov eax,[current_X] |
||
886 | cmp eax,[x_right] |
||
887 | ja .exit |
||
51 | mikedld | 888 | |
2538 | mario79 | 889 | add eax,52 |
890 | cmp eax,[x_left] |
||
891 | jb .exit |
||
892 | |||
893 | mov eax,[current_Y] |
||
894 | cmp eax,[y_bottom] |
||
895 | ja .exit |
||
896 | |||
897 | add eax,52 |
||
898 | cmp eax,[y_top] |
||
899 | jb .exit |
||
2469 | mario79 | 900 | ;-------------------------------------- |
901 | align 4 |
||
2245 | mario79 | 902 | @@: |
2538 | mario79 | 903 | mov edi,[adress_of_icon_data] ;[ebp+8] |
904 | lea esi,[edi+12] |
||
905 | call ASCII_to_icon_number |
||
906 | ; protect for icon area RAW size limit |
||
907 | cmp eax,[icon_count] |
||
908 | jbe @f |
||
2469 | mario79 | 909 | ;-------------------------------------- |
910 | align 4 |
||
2538 | mario79 | 911 | .exit: |
2469 | mario79 | 912 | ret |
913 | ;-------------------------------------- |
||
914 | align 4 |
||
2476 | mario79 | 915 | @@: |
2538 | mario79 | 916 | push eax |
917 | mcall 68,12,52*52*4+8 |
||
918 | mov [draw_area],eax |
||
919 | mov ebx,52 |
||
920 | mov [eax],ebx |
||
921 | mov [eax+4],ebx |
||
922 | pop eax |
||
2475 | mario79 | 923 | |
2538 | mario79 | 924 | shl eax,12 ; multiply x4096 |
925 | add eax,[strip_file] |
||
926 | mov esi,eax |
||
51 | mikedld | 927 | |
2538 | mario79 | 928 | mov edi,[draw_area] |
929 | add edi,(52-32)/2*4+8 |
||
930 | mov ebx,32 |
||
931 | cld |
||
2469 | mario79 | 932 | ;-------------------------------------- |
2538 | mario79 | 933 | align 4 |
934 | .y: |
||
935 | mov ecx,32 |
||
936 | rep movsd |
||
2475 | mario79 | 937 | |
2538 | mario79 | 938 | add edi,(52-32)*4 |
939 | dec ebx |
||
940 | jnz .y |
||
2476 | mario79 | 941 | |
2538 | mario79 | 942 | call draw_text |
2475 | mario79 | 943 | |
2538 | mario79 | 944 | mov edx,[current_X] ;[ebp+0] |
945 | shl edx,16 |
||
946 | add edx,[current_Y] ;[ebp+4] |
||
947 | mov ebx,[draw_area] |
||
948 | add ebx,8 |
||
949 | mcall 25,,<52,52> |
||
950 | mcall 68,13,[draw_area] |
||
2469 | mario79 | 951 | ret |
952 | ;------------------------------------------------------------------------------ |
||
953 | align 4 |
||
954 | draw_text: |
||
2538 | mario79 | 955 | mov esi,[adress_of_icon_data] ;[ebp+8] |
2469 | mario79 | 956 | add esi,3 |
957 | push edi |
||
958 | mov edi,title |
||
959 | mov ecx,8/4 |
||
960 | cld |
||
961 | rep movsd |
||
962 | pop edi |
||
963 | mov eax,title |
||
964 | ;-------------------------------------- |
||
965 | align 4 |
||
966 | news2: |
||
967 | cmp [eax],byte 33 |
||
968 | jb founde |
||
969 | inc eax |
||
970 | cmp eax,title+8 ;11 |
||
971 | jb news2 |
||
972 | ;-------------------------------------- |
||
973 | align 4 |
||
974 | founde: |
||
975 | sub eax,title |
||
976 | mov [tl],eax |
||
977 | |||
978 | mov eax,[tl] |
||
2475 | mario79 | 979 | lea eax,[eax+eax*2] ; eax *= char_width/2 |
2469 | mario79 | 980 | shl eax,16 |
981 | |||
982 | mov ebx,27 shl 16+40 |
||
983 | sub ebx,eax |
||
984 | |||
2475 | mario79 | 985 | xor ecx,ecx ; black shade of text |
2538 | mario79 | 986 | or ecx,0x08000000 ; redirect the output to the user area |
2475 | mario79 | 987 | add ebx,1 shl 16 ;*65536+1 |
2538 | mario79 | 988 | |
989 | mov edi,[draw_area] |
||
2469 | mario79 | 990 | mcall 4,,,title,[tl] |
51 | mikedld | 991 | |
2469 | mario79 | 992 | inc ebx |
993 | mcall |
||
51 | mikedld | 994 | |
2469 | mario79 | 995 | add ebx,1 shl 16 |
996 | mcall |
||
51 | mikedld | 997 | |
2469 | mario79 | 998 | inc ebx |
999 | mcall |
||
51 | mikedld | 1000 | |
2469 | mario79 | 1001 | sub ebx,1 shl 16 |
1002 | mcall |
||
51 | mikedld | 1003 | |
2469 | mario79 | 1004 | dec ebx |
1005 | sub ebx,1 shl 16 |
||
1006 | mcall |
||
51 | mikedld | 1007 | |
2469 | mario79 | 1008 | sub ebx,1 shl 16 |
1009 | dec ebx |
||
1010 | mcall |
||
51 | mikedld | 1011 | |
2469 | mario79 | 1012 | dec ebx |
1013 | add ebx,1 shl 16 |
||
1014 | mcall |
||
51 | mikedld | 1015 | |
2469 | mario79 | 1016 | inc ebx |
2538 | mario79 | 1017 | mov ecx,0xffffff ; white text |
1018 | or ecx,0x08000000 ; redirect the output to the user area |
||
1019 | mcall |
||
2469 | mario79 | 1020 | ret |
1021 | ;------------------------------------------------------------------------------ |
||
1022 | align 4 |
||
2538 | mario79 | 1023 | ASCII_to_icon_number: |
1024 | ; |
||
1025 | ; in: |
||
1026 | ; esi - adress of icon ASCII text number (line start + 12) |
||
1027 | ; |
||
1028 | ; out: |
||
1029 | ; eax - number of icon |
||
1030 | ; |
||
1031 | push esi |
||
1032 | xor eax,eax |
||
1033 | xor ebx,ebx |
||
2475 | mario79 | 1034 | ;-------------------------------------- |
1035 | align 4 |
||
2538 | mario79 | 1036 | .next: |
1037 | lodsb |
||
1038 | cmp al,'0' |
||
1039 | jb .done |
||
1040 | cmp al,'9' |
||
1041 | ja .done |
||
1042 | sub eax,'0' |
||
1043 | ; multiply x10 |
||
1044 | shl ebx,1 ; multiply x2 |
||
1045 | lea ebx,[ebx+ebx*4] ; multiply x5 |
||
1046 | add ebx,eax |
||
1047 | jmp .next |
||
2469 | mario79 | 1048 | ;-------------------------------------- |
1049 | align 4 |
||
2538 | mario79 | 1050 | .done: |
1051 | pop esi |
||
1052 | mov eax,ebx |
||
1053 | ret |
||
1054 | ;------------------------------------------------------------------------------ |
||
2469 | mario79 | 1055 | align 4 |
2538 | mario79 | 1056 | itoa: |
1057 | add esi,2 |
||
1058 | mov ebx,10 |
||
1059 | mov ecx,3 |
||
2469 | mario79 | 1060 | ;-------------------------------------- |
1061 | align 4 |
||
2538 | mario79 | 1062 | .l0: |
1063 | xor edx,edx |
||
1064 | div ebx |
||
1065 | add dl,'0' |
||
1066 | mov [esi],dl |
||
1067 | dec esi |
||
1068 | loop .l0 |
||
2469 | mario79 | 1069 | ret |
1070 | ;------------------------------------------------------------------------------ |
||
2538 | mario79 | 1071 | align 4 |
1072 | calc_icon_pos: |
||
1073 | ; in: |
||
1074 | ; eax - dword [icon_position] |
||
1075 | ; out: |
||
1076 | ; eax - current Y |
||
1077 | ; ebx - current X |
||
1078 | push eax |
||
1079 | movzx eax,al |
||
1080 | sub eax,'A' ;eax - number of letter |
||
1081 | cmp eax,4 |
||
1082 | jg no_left |
||
51 | mikedld | 1083 | |
2538 | mario79 | 1084 | shl eax,6 ;imul eax,64 |
1085 | add eax,16 |
||
1086 | movzx ebx,[warea.left] |
||
1087 | add eax,ebx |
||
1088 | jmp x_done |
||
1089 | ;-------------------------------------- |
||
2475 | mario79 | 1090 | align 4 |
2538 | mario79 | 1091 | no_left: |
1092 | sub eax,9 |
||
1093 | sal eax,6 ;imul eax,64 |
||
1094 | sub eax,16+52-1 |
||
1095 | movzx ebx,[warea.right] |
||
1096 | add eax,ebx |
||
1097 | ;-------------------------------------- |
||
2475 | mario79 | 1098 | align 4 |
2538 | mario79 | 1099 | x_done: |
1100 | mov ebx,eax |
||
1101 | pop eax |
||
1102 | push ebx |
||
1103 | movzx eax,ah |
||
1104 | sub eax,'A' ; eax - number of letter |
||
1105 | cmp eax,4 |
||
1106 | jg no_up |
||
1107 | |||
1108 | shl eax,6 ;imul eax,80 |
||
1109 | add eax,16 |
||
1110 | movzx ebx,[warea.top] |
||
1111 | add eax,ebx |
||
1112 | jmp y_done |
||
1113 | ;-------------------------------------- |
||
2475 | mario79 | 1114 | align 4 |
2538 | mario79 | 1115 | no_up: |
1116 | sub eax,9 |
||
1117 | shl eax,6 ;imul eax,80 |
||
1118 | sub eax,16-1 |
||
1119 | movzx ebx,[warea.bottom] |
||
1120 | add eax,ebx |
||
1121 | ;-------------------------------------- |
||
2475 | mario79 | 1122 | align 4 |
2538 | mario79 | 1123 | y_done: |
1124 | pop ebx |
||
1125 | ret |
||
2475 | mario79 | 1126 | ;------------------------------------------------------------------------------ |
2538 | mario79 | 1127 | include 'mouse.inc' |
2475 | mario79 | 1128 | ;------------------------------------------------------------------------------ |
2538 | mario79 | 1129 | include 'data.inc' |
2475 | mario79 | 1130 | ;------------------------------------------------------------------------------ |
2538 | mario79 | 1131 | IM_END: |
2475 | mario79 | 1132 | ;------------------------------------------------------------------------------ |
2538 | mario79 | 1133 | include 'dat_area.inc' |
1134 | ;------------------------------------------------------------------------------ |
||
51 | mikedld | 1135 | I_END: |
2538 | mario79 | 1136 | ;------------------------------------------------------------------------------52,52>45,280-2>32,32>(236+35),3>(260-24),(37+15-2)>(33-20),(34*8+2)>120,250>(23-15),(273-24)>(33-19),(34*8)>(260-23),32>(20-14),8>20,(129-2)>(329+2),(15-4)>20,259>(275+1+14),(13-2)>20,72>135,135>20,280>35,235>150,150>35,200>20,260>30,(390-14)>210,300>278+12,40>100,180> |