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