Subversion Repositories Kolibri OS

Rev

Rev 529 | Rev 552 | 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
;********************************
8
;  22.02.05 was modified for work with new multi-thread ICON.
408 halyavin 9
;  8.03.07 переход на 70 функцию by SPraid
51 mikedld 10
;******************************************************************************
11
RAW_SIZE equ 350000
12
ICON_SIZE equ 32*32*3
13
GIF_SIZE equ 45000
14
REC_SIZE equ 80
529 spraid 15
ICONS_DAT equ '/sys/ICONS.DAT'
16
ICON_APP equ '/sys/ICON'
17
ICON_STRIP equ '/sys/ICONSTRP.GIF'
51 mikedld 18
 
19
  use32
20
  org    0x0
21
  db     'MENUET01'     ; 8 byte id
502 heavyiron 22
  dd     0x01           ; header version
51 mikedld 23
  dd     START          ; start of code
24
  dd     I_END          ; size of image
25
  dd     icon_data+0x30000        ; memory for app
26
  dd     icon_data+0x30000        ; esp
27
  dd     I_Param , 0x0  ; I_Param , I_Icon
485 heavyiron 28
include  '..\..\..\macros.inc'
132 diamond 29
include  'lang.inc'
51 mikedld 30
COLOR_ORDER equ MENUETOS
31
include  'gif_lite.inc'
32
;include  'debug.inc'
33
purge newline
34
;******************************************************************************
35
START:                       ; start of execution
408 halyavin 36
    mcall 70,finfo
51 mikedld 37
    cmp   ebx,GIF_SIZE
38
    ja    close
39
    mov   esi,gif_file
40
    mov   edi,strip_file
41
    mov   eax,icon_data
42
    call  ReadGIF
43
    movzx eax,word[strip_file+10]
44
    shr  eax,5
45
    mov  [icon_count],eax
46
    call load_ic
47
  boot_str:
48
    cmp   [I_Param],dword 'BOOT'
49
    je   load_icon_list2
50
      call  load_icon_list
51
 red:
52
    call draw_window         ; at first, draw the window
53
    mov  esi,[current_icon]
54
    jmp  band
55
still:
56
 
57
    mov  eax,10              ; wait here for event
485 heavyiron 58
    mcall
51 mikedld 59
 
411 heavyiron 60
    dec  eax                   ; redraw request ?
61
    jz   red
62
    dec  eax                   ; key in buffer ?
63
    jz   key
51 mikedld 64
 
65
  button:                    ; button
411 heavyiron 66
    mov  al,17              ; get id
485 heavyiron 67
    mcall
51 mikedld 68
 
69
    shr  eax,8
70
 
71
    cmp  eax,1               ; button id=1 ?
72
    je   close
73
  noclose:
74
      mov  esi,[current_icon]
75
      add  esi,12
76
    mov  ebx,[cur_band];eax
77
    cmp  eax,31
78
    jne  .no_back
79
    add  ebx,8
80
    mov  eax,[icon_count]
81
    cmp  eax,ebx
82
    jae  .drwic2
83
    xor  ebx,ebx
84
    jmp  .drwic2
85
  .no_back:
86
    cmp  eax,30
87
    jne  .no_side
88
    test ebx,ebx
89
    jnz  .dec
90
    mov  ebx,[icon_count]
91
         and  ebx,0xfffffff8
92
    add  ebx,8
93
  .dec:
94
    sub  ebx,8
95
  .drwic2:
96
    mov  [cur_band],ebx
97
  .drwic1:
98
    call draw_icon
99
    jmp  still
100
    .no_side:
101
       cmp  eax,32
102
       jne  .no_ico
103
       push ebx
104
       mcall 37,1
105
       pop  ebx
106
          shr  eax,16
107
       sub  eax,33-19
108
          mov  edi,34
109
          xor  edx,edx
110
          div  edi
111
    lea  ecx,[ebx+eax]
112
    cmp  ecx,[icon_count]
113
    jae  still
114
          mov  [sel_icon1],eax
115
          mov  ecx,eax
116
    add  eax,ebx
117
    call itoa
118
          jmp  .drwic1
119
  .no_ico:
120
    cmp  eax,11
121
    jb   no_str
122
    cmp  eax,13
123
    jg   no_str
124
    call read_string
125
    jmp  still
126
  no_str:
127
 
128
 
129
    cmp  eax,21              ; apply changes
130
    jne  no_apply
131
 
132
    ; (1) save list
133
 
408 halyavin 134
    mov  ebx,finfo							; Change by spraid
135
    mov  dword[ebx],2
51 mikedld 136
    mov  edx,REC_SIZE
137
    imul edx,dword [icons]
408 halyavin 138
    mov  [ebx+12],edx
51 mikedld 139
    mov  esi,iconlst
140
    call lst_path
409 heavyiron 141
    mov eax,70
485 heavyiron 142
    mcall
51 mikedld 143
 
144
    ; (2) terminate all icons
145
    mov  eax,9
146
    mov  ebx,I_END
411 heavyiron 147
    or      ecx,-1
485 heavyiron 148
    mcall
51 mikedld 149
    mov  edi,[ebx+30]
150
     newread2:
151
    mov  esi,1
152
   newread:
153
    inc  esi
154
    mov  eax,9
155
    mov  ebx,I_END
156
    mov  ecx,esi
485 heavyiron 157
    mcall
51 mikedld 158
    cmp  edi,[ebx+30]
159
    je   newread
160
    cmp  esi,eax
161
    jg   all_terminated
162
 
409 heavyiron 163
    cmp  [I_END+10],dword '@ICO'
51 mikedld 164
    jne  newread
165
    mov  eax,51
166
    cmp  eax,[I_END+42]
167
    jne  newread
168
    cmp  eax,[I_END+46]
169
    jne  newread
170
 
171
    mov  eax,18
172
    mov  ebx,2
173
    mov  ecx,esi
485 heavyiron 174
    mcall
51 mikedld 175
 
176
    jmp  newread2
177
 
184 heavyiron 178
finfo_start:
179
        dd      7
180
        dd      0
181
.params dd      0
182
        dd      0
183
        dd      0
184
        db      0
185
        dd      finfo.path
186
 
408 halyavin 187
 
188
 
51 mikedld 189
finfo:
190
        dd 0
191
        dd 0
408 halyavin 192
        dd 0
193
        dd GIF_SIZE
51 mikedld 194
        dd gif_file
195
  .path:
196
        db ICON_STRIP,0
197
        rb 31-($-.path)
198
 
408 halyavin 199
 
51 mikedld 200
   all_terminated:
201
 
202
   apply_changes:
203
 
184 heavyiron 204
        mov     ebx, finfo_start
205
        mov     dword [ebx+8], boot_str+6
206
        mov     esi, iconname
207
        call    lst_path
208
        mov     eax, 70
485 heavyiron 209
        mcall
51 mikedld 210
    jmp   still
211
 
212
  no_apply:
213
 
214
    cmp  eax,22                 ; user pressed the 'add icon' button
215
    jne  no_add_icon
216
 
217
    mov  eax,4
218
    mov  ebx,24*65536+250+8*14
411 heavyiron 219
    mov  ecx,0xc0ff0000
51 mikedld 220
    mov  edx,add_text
411 heavyiron 221
    mov  edi,0xffffff
485 heavyiron 222
    mcall
51 mikedld 223
 
224
    mov  eax,10
485 heavyiron 225
    mcall
51 mikedld 226
    cmp  eax,3
227
    jne  still
228
    mov  eax,17
485 heavyiron 229
    mcall
51 mikedld 230
    shr  eax,8
231
    cmp  eax,40
232
    jb   no_f
233
    mov  edi,eax
234
    sub  eax,40
235
 
236
    xor  edx,edx  ; bcd -> 10
237
    mov  ebx,16
238
    div  ebx
239
    imul eax,10
240
    add  eax,edx
241
 
242
    mov  ebx,eax
243
    add  ebx,icons_reserved
244
    cmp  [ebx],byte 'x'
245
    je   no_f
246
    mov  [ebx],byte 'x'
247
 
248
    mov  [cur_btn],edi
249
    xor  edx,edx
250
    mov  ebx,10
251
    div  ebx
252
    add  eax,65
253
    add  edx,65
254
    mov  [icon_default+0],dl
255
    mov  [icon_default+1],al
256
 
257
    inc  dword [icons]
258
    mov  edi,[icons]
259
    dec  edi
260
    imul edi,REC_SIZE
261
    add  edi,icon_data
262
 
263
    mov  [current_icon],edi
264
 
265
    mov  esi,icon_default
266
    mov  ecx,REC_SIZE
267
    cld
268
    rep  movsb
269
    mov  esi,[current_icon]
270
    jmp  band
271
  no_f:
272
 
273
    call draw_btns;draw_window
274
 
275
    jmp  still
276
 
277
  no_add_icon:
278
 
279
 
280
    cmp  eax,23                     ; user pressed the remove icon button
281
    jne  no_remove_icon
282
 
283
    mov  eax,4
284
    mov  ebx,24*65536+250+8*14
411 heavyiron 285
    mov  ecx,0xc0ff0000
51 mikedld 286
    mov  edx,rem_text
411 heavyiron 287
    mov  edi,0xffffff
485 heavyiron 288
    mcall
51 mikedld 289
 
290
    mov  eax,10
485 heavyiron 291
    mcall
51 mikedld 292
    cmp  eax,3
293
    jne  no_f;ound
294
    mov  eax,17
485 heavyiron 295
    mcall
51 mikedld 296
    shr  eax,8
297
    cmp  eax,40
298
    jb   red;no_f;ound
299
    sub  eax,40
300
 
301
    xor  edx,edx
302
    mov  ebx,16
303
    div  ebx
304
    imul eax,10
305
    add  eax,edx
306
 
307
    mov  ebx,eax
308
    add  ebx,icons_reserved
309
    cmp  [ebx],byte 'x'
310
    jne  red
311
    mov  [ebx],byte ' '
312
 
313
    xor  edx,edx
314
    mov  ebx,10
315
    div  ebx
316
    shl  eax,8
317
    mov  al,dl
318
 
319
    add  eax,65*256+65
320
 
321
    mov  esi,icon_data
322
    mov  edi,REC_SIZE
323
    imul edi,[icons]
324
    add  edi,icon_data
325
  news:
326
    cmp  word [esi],ax
327
    je   foundi
328
    add  esi,REC_SIZE
329
    cmp  esi,edi
330
    jb   news
331
    jmp  red
332
 
333
  foundi:
334
 
335
    mov  ecx,edi
336
    sub  ecx,esi
337
 
338
    mov  edi,esi
339
    add  esi,REC_SIZE
340
 
341
    cld
342
    rep  movsb
343
 
344
    dec  [icons]
345
 
346
    mov  eax,icon_data
347
    mov  [current_icon],eax
348
    movzx ebx,word[eax]
349
    sub  bx,'AA'
350
    shl  bl,4
351
    shr  ebx,4
352
    add  ebx,40
353
    mov  [cur_btn],ebx
354
 
355
    jmp  red
356
 
357
  no_remove_icon:
358
 
359
    cmp  eax,40                 ; user pressed button for icon position
360
    jb   no_on_screen_button
361
    mov  edi,eax
362
    sub  eax,40
363
    mov  edx,eax
364
    shl  eax,4
365
    and  edx,0xf
366
    mov  dh,ah
367
    add  edx,65*256+65
368
 
369
    mov  esi,icon_data
370
    mov  ecx,[icons]
371
    cld
372
   findl1:
373
    cmp  dx,[esi]
374
    je   foundl1
375
    add  esi,REC_SIZE
376
    loop findl1
377
    jmp  still
378
 
379
   foundl1:
380
 
381
    mov  [current_icon],esi
382
    mov  [cur_btn],edi
383
   band:
384
    add  esi,12
385
    call atoi
386
    and  eax,0xfffff8
387
    mov  [cur_band],eax
388
    call draw_btns
389
 
390
    jmp  still
391
 
392
  no_on_screen_button:
393
 
394
 
395
    jmp  still
411 heavyiron 396
 
51 mikedld 397
 
398
current_icon dd icon_data
399
 
400
 
401
print_strings:
402
 
403
    pusha
404
 
405
    mov  eax,13              ; clear text area
406
    mov  ebx,100*65536+180
407
    mov  ecx,(278+12)*65536+40
408
    mov  edx,0xffffff
485 heavyiron 409
    mcall
51 mikedld 410
 
411
          xor  edi,edi
412
    mov  eax,4               ; icon text
413
    mov  ebx,100*65536+278+14
414
    mov  ecx,3
415
  .ll:
416
    push ecx
417
    mov  ecx,0x000000
418
    mov  edx,[current_icon]
419
    add  edx,[positions+edi*4]
420
    movzx esi,byte[str_lens+edi]
421
    inc  edi
485 heavyiron 422
    mcall
51 mikedld 423
    add  ebx,14
424
    pop  ecx
425
    loop .ll
426
 
427
    popa
428
    ret
429
 
195 heavyiron 430
iconlst db ICONS_DAT,0
51 mikedld 431
 
432
load_icon_list:
433
 
434
    mov   edi,icons_reserved   ; clear reserved area
435
    mov   eax,32
436
    mov   ecx,10*9
437
    cld
438
    rep   stosb
439
 
440
    mov   ecx,[icons]          ; set used icons to reserved area
441
    mov   esi,icon_data
442
  ldl1:
443
    movzx ebx,byte [esi+1]
444
    sub   ebx,65
445
    imul  ebx,10
446
    movzx eax,byte [esi]
447
    add   ebx,eax
448
    sub   ebx,65
449
    add   ebx,icons_reserved
450
    mov   [ebx],byte 'x'
451
    add   esi,REC_SIZE
452
    loop  ldl1
453
    ret
454
 
455
lst_path:
456
    mov   ecx,30
457
    mov   edi,finfo.path
458
    rep   movsb
459
    ret
460
 
461
load_ic:
462
    mov   ebx,finfo
408 halyavin 463
    mov   dword[ebx+12],48*REC_SIZE
464
    mov   dword[ebx+16],icon_data
51 mikedld 465
    mov   esi,iconlst
466
    call  lst_path
408 halyavin 467
    mcall 70
51 mikedld 468
    lea   eax,[ebx+10]
469
    xor   edx,edx
470
    mov   ebx,REC_SIZE
471
    div   ebx
472
    mov   [icons],eax
473
        ret
474
 
475
 
476
positions dd 3,16,47
477
str_lens db 8,30,30
478
 
479
read_string:
480
    pusha
481
    sub  eax,11
482
    movzx ecx,byte[str_lens+eax]
483
    mov  [cur_str],ecx
484
    mov  eax,[positions+eax*4]
485
 
486
    mov  edi,[current_icon]
487
    add  edi,eax
488
    mov  [addr],edi
489
 
490
          add  edi,ecx
491
 
492
  .l1:
493
    dec  edi
494
    cmp  byte[edi],' '
495
    jne  .found
496
    mov  byte[edi],'_'
497
    loop .l1
498
    dec  edi
499
  .found:
500
    inc  edi
501
    push  edi
502
    call print_strings
503
 
504
    pop  edi
505
  f11:
506
    mov  eax,10
485 heavyiron 507
    mcall
51 mikedld 508
    cmp  eax,2
509
    jz   fbu
510
    jmp  rs_done
511
  fbu:
512
    mov  eax,2
485 heavyiron 513
    mcall
51 mikedld 514
    shr  eax,8
515
    cmp  eax,13
516
    je   rs_done
517
    cmp  eax,8
518
    jnz  nobsl
519
    cmp  edi,[addr]
520
    jz   f11
521
    dec  edi
522
    mov  [edi],byte '_'
523
    call print_strings
524
    jmp  f11
525
  nobsl:
526
    cmp  eax,31
527
    jbe  f11
528
    mov  [edi],al
529
    call print_strings
530
 
531
    inc  edi
532
    mov  esi,[addr]
533
    add  esi,[cur_str]
534
    cmp  esi,edi
535
    jnz  f11
536
 
537
   rs_done:
538
 
539
    mov  ecx,[addr]
540
    add  ecx,[cur_str]
541
    sub  ecx,edi
542
    mov  eax,32
543
    cld
544
    rep  stosb
545
    call print_strings
546
    popa
547
    ret
548
 
411 heavyiron 549
 key:                       ; key
550
    mov  al,2               ; just read it and ignore
485 heavyiron 551
    mcall
411 heavyiron 552
    jmp  still
553
 
51 mikedld 554
;   *********************************************
555
;   *******  WINDOW DEFINITIONS AND DRAW ********
556
;   *********************************************
557
 
558
 
559
draw_window:
560
 
561
    mov  eax,12                    ; function 12:tell os about windowdraw
562
    mov  ebx,1                     ; 1, start of draw
485 heavyiron 563
    mcall
51 mikedld 564
 
565
                                   ; DRAW WINDOW
411 heavyiron 566
    xor  eax,eax
51 mikedld 567
    mov  ebx,210*65536+300
568
    mov  ecx,30*65536+390-14
551 spraid 569
    mov  edx,0x14ffffff
485 heavyiron 570
    mov  edi,title       ; WINDOW LABEL
571
    mcall
51 mikedld 572
 
573
    mov  eax,13                    ; WINDOW AREA
574
    mov  ebx,20*65536+260
575
    mov  ecx,35*65536+200
576
    mov  edx,0x3366cc
485 heavyiron 577
    mcall
51 mikedld 578
 
579
    mov  eax,38                    ; VERTICAL LINE ON WINDOW AREA
580
    mov  ebx,150*65536+150
581
    mov  ecx,35*65536+235
582
    mov  edx,0xffffff
485 heavyiron 583
    mcall
51 mikedld 584
 
585
    mov  eax,38                    ; HOROZONTAL LINE ON WINDOW AREA
586
    mov  ebx,20*65536+280
587
    mov  ecx,135*65536+135
588
    mov  edx,0xffffff
485 heavyiron 589
    mcall
51 mikedld 590
 
591
    mov  eax,8                     ; TEXT ENTER BUTTONS
592
    mov  ebx,20*65536+72
593
    mov  ecx,(275+1+14)*65536+13-2
594
    mov  edx,11
595
    mov  esi,[bcolor]
485 heavyiron 596
    mcall
51 mikedld 597
    inc  edx
598
    add  ecx,14*65536
485 heavyiron 599
    mcall
51 mikedld 600
    inc  edx
601
    add  ecx,14*65536
485 heavyiron 602
    mcall
51 mikedld 603
 
604
;    mov  eax,8                     ; APPLY AND SAVE CHANGES BUTTON
605
    mov  ebx,20*65536+259
606
    mov  ecx,(329+2)*65536+15-4
607
    mov  edx,21
608
    mov  esi,[bcolor]
485 heavyiron 609
    mcall
51 mikedld 610
 
611
;    mov  eax,8                     ; ADD ICON BUTTON
612
    mov  ebx,20*65536+129-2
613
    add  ecx,14*65536
614
    inc  edx
485 heavyiron 615
    mcall
51 mikedld 616
 
617
;    mov  eax,8                     ; REMOVE ICON BUTTON
618
    add  ebx,(130+2)*65536
619
    inc  edx
485 heavyiron 620
    mcall
51 mikedld 621
 
622
    mcall ,<20-14,8>,<260-23,32>,30+1 shl 30    ; IMAGE BUTTON
623
    inc  edx
624
    add  ebx,(36*7+26) shl 16
625
    mcall
626
    add  edx,1+1 shl 29
627
    mov  ebx,(33-19) shl 16+(34*8)
628
    mcall
629
    mcall 4,<23-15,273-24>,0,arrows,1
630
    add  ebx,(36*7+27)shl 16
631
    add  edx,2
632
    mcall
633
    dec  edx
634
    mcall ,<120,250>
635
    lea  edx,[ebx+8 shl 16]
636
    mov  ecx,[icon_count]
637
    mcall 47,0x30000,,,0
638
 
639
;;
411 heavyiron 640
    mov  eax,4
51 mikedld 641
    mov  ebx,24*65536+250+14+14+14
642
    mov  ecx,0xffffff
643
    mov  edx,text
644
    mov  esi,47
645
  newline:
646
    mov  ecx,[edx]
647
    add  edx,4
485 heavyiron 648
    mcall
51 mikedld 649
    add  ebx,14
650
    add  edx,47
651
    cmp  [edx],byte 'x'
652
    jne  newline
653
draw_btns:
654
;;
655
    mov  eax,0                     ; DRAW BUTTONS ON WINDOW AREA
656
    mov  ebx,20*65536+25
657
    mov  ecx,35*65536+19
658
    mov  edi,icon_table
659
    mov  edx,40
660
   newbline:
661
 
662
    cmp  [edi],byte 'x'
663
    jne  no_button
664
 
665
    mov  esi,0x5577cc
666
    cmp  [edi+90],byte 'x'
667
    jne  nores
668
    mov  esi,0xcc5555
669
    cmp  edx,[cur_btn]
670
    jne  nores
671
    mov  esi,0xe7e05a
672
  nores:
673
 
674
    push eax
675
    mov  eax,8
485 heavyiron 676
    mcall
51 mikedld 677
    pop  eax
678
 
679
  no_button:
680
 
681
    add  ebx,26*65536
682
 
683
    inc  edi
684
    inc  edx
685
 
686
    inc  al
687
    cmp  al,9
688
    jbe  newbline
689
    mov  al,0
690
 
691
    add  edx,6
692
 
693
    ror  ebx,16
694
    mov  bx,20
695
    ror  ebx,16
696
    add  ecx,20*65536
697
 
698
    inc  ah
699
    cmp  ah,8;9
700
    jbe  newbline
701
    call print_strings
702
    call draw_icon
703
    mov  eax,12                    ; function 12:tell os about windowdraw
704
    mov  ebx,2                     ; 2, end of draw
485 heavyiron 705
    mcall
51 mikedld 706
 
707
    ret
708
 
709
draw_icon:
710
    mcall 13,<33-20,34*8+2>,<260-24,37+15-2>,0xffffff
711
    mov  esi,[current_icon]
712
    add  esi,12
713
    call atoi
714
    push eax
715
    cmp  eax,[cur_band]
716
    jb   .nou
717
    sub  eax,[cur_band]
718
    cmp  eax,7
719
    ja   .nou
720
    imul eax,34 shl 16
721
    lea  ebx,[eax+(33-19) shl 16]
722
    mov  bx,34
723
    mcall 13,,<236+35,3>,0xff0000
724
    mov  eax,[esp]
725
  .nou:
726
    mov  eax,[cur_band]
727
    and  eax,0xfffffff8
728
    push eax
729
    imul eax,ICON_SIZE
730
    lea  ebx,[strip_file+12+eax]
731
    mov  ecx,8
732
    mov  edx,(33-18) shl 16+238
733
  .nxt:
734
    push ecx
735
    mcall 7,,<32,32>
736
    pop  ecx
737
    add  ebx,ICON_SIZE
738
    add  edx,34 shl 16
739
    loop .nxt
740
 
741
    mcall 4,<45,280-2>,0,rep_text,rep_text_len-rep_text
742
    lea  edx,[ebx+(8*5)shl 16]
743
    pop  ecx
744
    mcall 47,0x30000,,,0xff
745
    add  ecx,7
746
    add  edx,(3*8+4)shl 16
747
    mcall
748
    mov  ecx,[icon_count]
749
    add  edx,(5*8+4)shl 16
750
    mcall
751
    pop  ecx
752
    add  edx,(10*8+4)shl 16
753
    mcall ,,,,0xff0000
754
    ret
755
 
756
; DATA AREA
757
 
758
 
759
bcolor dd 0x335599
760
 
761
icon_table:
762
 
763
    times 4  db  'xxxx  xxxx'
764
    times 2  db  '          '
765
    times 1  db  '          '
766
    times 2  db  'xxxx  xxxx'
767
;    times 1  db  '          '
768
 
769
icons_reserved:
770
    times 9  db  '          '
771
 
772
if lang eq ru
773
  text:
774
      db 255,255,255,0,   '   ’…Љ‘’                                       '
775
      db 255,255,255,0,   ' ЏђЋѓђЂЊЊЂ                                     '
776
      db 255,255,255,0,   ' ЏЂђЂЊ…’ђ›                                     '
777
      db 255,255,255,0,   '                 Џђ€Њ…Ќ€’њ                     '
778
      db 255,255,255,0,   '      „ЋЃЂ‚€’њ              “„Ђ‹€’њ            '
779
      db 0,0,0,0,         'ЌЂ†Њ€’… ЌЂ ЏЋ‡€–€ћ €ЉЋЌЉ€ „‹џ ђ…„ЂЉ’€ђЋ‚ЂЌ€џ   '
780
      db                  'x' ; <- END MARKER, DONT DELETE
781
 
485 heavyiron 782
add_text               db 'ЌЂ†Њ€’… ЌЂ ЏЋ‡€–€ћ Ќ…€‘ЏЋ‹њ‡“…ЊЋ‰ €ЉЋЌЉ€     ',0
783
rem_text               db 'ЌЂ†Њ€’… ЌЂ ЏЋ‡€–€ћ €‘ЏЋ‹њ‡“…ЊЋ‰ €ЉЋЌЉ€       ',0
784
title                 db 'ЊҐ­Ґ¤¦Ґа ЁЄ®­®Є',0
411 heavyiron 785
 
786
else if lang eq ge
51 mikedld 787
  text:
788
      db 255,255,255,0,   '   TITLE                                       '
789
      db 255,255,255,0,   '  APP NAME                                     '
411 heavyiron 790
      db 255,255,255,0,   ' PARAMETER                                     '
791
      db 255,255,255,0,   '                ANWENDEN                       '
792
      db 255,255,255,0,   '     HINZUFUEGEN              ENTFERNEN        '
793
      db 0,0,0,0,         'AUF BUTTON KLICKEN, UM ICON ZU EDITIEREN       '
51 mikedld 794
      db                  'x' ; <- END MARKER, DONT DELETE
795
 
485 heavyiron 796
add_text               db 'AUF UNBENUTZTE ICONPOSITION KLICKEN          ',0
797
rem_text               db 'ICON ANKLICKEN; DAS GELOESCHT WERDEN SOLL    ',0
798
title                 db 'Icon Manager',0
411 heavyiron 799
 
135 diamond 800
else
801
  text:
802
      db 255,255,255,0,   '   TITLE                                       '
803
      db 255,255,255,0,   '  APP NAME                                     '
411 heavyiron 804
      db 255,255,255,0,   ' PARAMETERS                                    '
805
      db 255,255,255,0,   '                APPLY CHANGES                  '
806
      db 255,255,255,0,   '      ADD ICON              REMOVE ICON        '
807
      db 0,0,0,0,         'CLICK BUTTON ON ICON POSITION FOR EDIT         '
135 diamond 808
      db                  'x' ; <- END MARKER, DONT DELETE
485 heavyiron 809
add_text               db 'CLICK ON A NOT USED POSITION                 ',0
810
rem_text               db 'CLICK ICON POSITION; YOU WANT TO DELETE      ',0
811
title                 db 'Icon Manager',0
51 mikedld 812
 
132 diamond 813
end if
135 diamond 814
 
51 mikedld 815
arrows db ''
816
iconname:
817
      db ICON_APP,0
818
 
819
icon_default:
820
   db   'AA-SYSXTREE-000-/RD/1/SYSXTREE                '
821
   db   '-                              *'
822
   db   13,10
823
 
824
rep_text:
825
if lang eq ru
826
     db '‡ЌЂ—Љ€    -     €‡    , ‚›ЃђЂЌ #'
827
else
828
     db 'ICONS     -     OF    , SELECTED'
829
end if
830
 
831
rep_text_len:
832
 
833
;//////////////////////////
834
get_bg_info:
835
    mov  eax,39
836
    mov  ebx,4
485 heavyiron 837
    mcall
51 mikedld 838
    mov  [bgrdrawtype],eax
839
 
840
    mov  eax,39     ; get background size
841
    mov  ebx,1
485 heavyiron 842
    mcall
51 mikedld 843
    mov  [bgrxy],eax
844
 
845
    mov  ebx,eax
846
    shr  eax,16
847
    and  ebx,0xffff
848
    mov  [bgrx],eax
849
    mov  [bgry],ebx
850
    ret
851
 
852
calc_icon_pos:
853
    movzx eax,byte [ebp-20]    ; x position
854
    sub  eax,'A'        ;eax - number of letter
855
    cmp  eax,4
856
    jg     no_left
857
    shl  eax,6 ;imul eax,64
858
    add  eax,16
859
    movzx ebx,[warea.left]
860
    add  eax,ebx
861
    jmp  x_done
485 heavyiron 862
 
51 mikedld 863
  no_left:
864
    sub  eax,9
865
    sal  eax,6 ;imul eax,64
866
    sub  eax,16+52-1
867
    movzx ebx,[warea.right]
868
    add  eax,ebx
869
  x_done:
870
    mov  [ebp-12],eax
871
 
872
    movzx eax,byte [ebp-20+1]  ; y position
873
    sub  eax,'A'        ; eax - number of letter
874
    cmp  eax,4
875
    jg     no_up
876
    shl  eax,6            ;imul eax,80
877
    add  eax,16
878
    movzx ebx,[warea.top]
879
    add  eax,ebx
880
    jmp  y_done
881
  no_up:
882
    sub  eax,9
883
    shl  eax,6            ;imul eax,80
884
    sub  eax,16-1
885
    movzx ebx,[warea.bottom]
886
    add  eax,ebx
887
  y_done:
888
    mov  [ebp-8],eax
889
    ret
890
 
891
;START2:
892
load_icon_list2:
893
    call  get_bg_info
894
 
895
        mcall   48,5
896
        mov     [warea.by_x],eax
897
        mov     [warea.by_y],ebx
898
 
899
        mov     eax,14
485 heavyiron 900
        mcall
51 mikedld 901
        add     eax,0x00010001
902
        mov     [scrxy],eax
903
 
904
apply_changes2:
905
 
906
    mov  edi,[icons]
907
    mov  esi,icon_data
908
    mov  ebp,0x5000 ; threads stack starting point
909
 
910
  start_new:
911
    mov eax,[esi]
912
    mov [ebp-20],eax
913
    call calc_icon_pos
914
 
915
    mov  eax,51
916
    mov  ebx,1
917
    mov  ecx,thread
918
    mov  edx,ebp
919
    mov  dword[ebp-4],esi
485 heavyiron 920
    mcall
51 mikedld 921
    add  ebp,0x100
922
 
923
    mov  eax,5
924
    mov  ebx,1
925
wait_thread_start:         ;wait until thread draw itself first time
926
    cmp  [create_thread_event],bl
927
    jz     wait_thread_end
485 heavyiron 928
    mcall
51 mikedld 929
    jmp  wait_thread_start
930
wait_thread_end:
931
    dec  [create_thread_event]     ;reset event
932
 
933
 
934
    add  esi,REC_SIZE
935
    dec  edi
936
    jnz  start_new
937
  close:
938
    or     eax,-1
485 heavyiron 939
    mcall
51 mikedld 940
 
941
thread:
942
;   pop  ebp ;ebp - address of our icon
943
    sub  esp,12
944
    mov  ebp,esp
945
    sub  esp,16
946
    call draw_window2
947
    mov  [create_thread_event],1
948
    mov  eax,40
949
    mov  ebx,010101b
485 heavyiron 950
    mcall
51 mikedld 951
 
952
still2:
953
 
954
    mov  eax,10
485 heavyiron 955
    mcall
51 mikedld 956
 
957
    cmp  eax,1
958
    je     red2
959
    cmp  eax,3
960
    je     button2
961
 
962
    call  get_bg_info
963
    mov   eax,5
964
    mov   ebx,1
965
    call  draw_icon2
966
 
967
    jmp  still2
968
 
969
  red2:
970
        mcall   14
971
        add     eax,0x00010001
972
        mov     [scrxy],eax
973
        mcall   48,5
974
        mov     [warea.by_x],eax
975
        mov     [warea.by_y],ebx
976
        add     ebp,+12
977
        call    calc_icon_pos
978
        add     ebp,-12
979
        mcall   9,I_END,-1
485 heavyiron 980
        mov     eax,[I_END+process_information.box.left]
51 mikedld 981
        cmp     eax,[ebp+0]
982
        jne     @f
485 heavyiron 983
        mov     eax,[I_END+process_information.box.top]
51 mikedld 984
        cmp     eax,[ebp+4]
985
        je      .lp1
986
    @@: call    get_bg_info
987
        mcall   67,[ebp+0],[ebp+4],51,51
988
 
989
  .lp1: call    draw_window2
990
        jmp     still2
991
 
992
  button2:
411 heavyiron 993
    mov  al,17
485 heavyiron 994
    mcall
51 mikedld 995
 
996
 
997
    mov  esi,[ebp+8]
998
          mov  ebx,1
999
          mov  edi,finfo.path
1000
          call fill_paths
1001
          inc  ebx
1002
       mov  edi,param_str
184 heavyiron 1003
    mov  dword[finfo_start+8],edi
51 mikedld 1004
          call fill_paths
1005
          cmp  byte[edi],0
1006
    jne  .no0
184 heavyiron 1007
    and  dword[finfo_start+8],0
51 mikedld 1008
  .no0:
184 heavyiron 1009
    mov  ebx,finfo_start
1010
    mov  eax,70
485 heavyiron 1011
    mcall
51 mikedld 1012
    jmp  still2
1013
 
1014
fill_paths:
1015
        push esi edi
1016
;        dps  '>'
1017
        movzx ecx,byte[str_lens+ebx]
1018
        add  esi,[positions+ebx*4]
1019
        push esi
1020
        add  esi,ecx
1021
 
1022
    .l1:
1023
        dec  esi
1024
        cmp  byte[esi],' '
1025
        jnz   .found
1026
        loop .l1
1027
  pop  esi
1028
  jmp  .noms
1029
    .found:
1030
        lea  ecx,[esi+1]
1031
        pop  esi
1032
        sub  ecx,esi
1033
        rep  movsb
1034
 .noms:
1035
        and  byte[edi],0
1036
;        call debug_outstr
1037
;        dps  <'<',13,10>
1038
        pop  edi esi
1039
        ret
1040
 
1041
atoi:
1042
        push esi
1043
        xor  eax,eax
1044
        xor  ebx,ebx
1045
  .nxt:
1046
    lodsb
1047
    cmp  al,'0'
1048
    jb   .done
1049
    cmp  al,'9'
1050
    ja   .done
1051
    sub  eax,'0'
1052
    imul ebx,10
1053
    add  ebx,eax
1054
    jmp  .nxt
1055
  .done:
1056
      pop  esi
1057
      mov  eax,ebx
1058
        ret
1059
 
1060
itoa:
1061
        add  esi,2
1062
    mov ebx,10
1063
    mov ecx,3
1064
  .l0:
1065
    xor edx,edx
1066
    div ebx
1067
    add dl,'0'
1068
    mov [esi],dl
1069
    dec esi
1070
    loop .l0
1071
        ret
1072
 
1073
draw_picture:
1074
    mov  [image],0x3000
1075
    mov  edi,[ebp+8]
1076
    lea  esi,[edi+12]
1077
    call atoi
1078
          cmp  eax,[icon_count]
1079
          ja  toponly.ex
1080
          imul eax,(32*3*32)
1081
          lea  edi,[eax+strip_file+12]
1082
    xor  ebx,ebx
1083
    xor  ecx,ecx
1084
    mov  esi,edi;strip_file+12+(32*3*32)*2
1085
 
1086
    mov  [pixpos],0
1087
  newb:
1088
    push ebx
1089
    push ecx
1090
 
1091
    cmp  ebx,10
1092
    jb     yesbpix
1093
    cmp  ebx,42
1094
    jge  yesbpix
1095
    cmp  ecx,31;2
1096
    jg     yesbpix
1097
 
1098
    push esi
1099
    mov  esi,edi
1100
    add  esi,[pixpos]
1101
 
1102
no_correction_pixpos:
1103
    add  [pixpos],3
1104
    mov  eax,[esi]
1105
    and  eax,0xffffff
1106
 
1107
    pop  esi
1108
 
1109
    cmp eax,0
1110
    je    yesbpix
1111
    cmp eax,0xfffcff ;f5f5f5
1112
    je    yesbpix
1113
    jmp nobpix
1114
 
1115
  yesbpix:
1116
 
1117
  stretch:
1118
    cmp   [bgrdrawtype],dword 2
1119
    jne   nostretch
1120
    mov   eax,[ebp+4]
1121
    add   eax,ecx
1122
    imul  eax,[bgry]
1123
    cdq
1124
    movzx ebx,word [scrxy]
1125
    div   ebx
1126
    imul  eax,[bgrx]
1127
    push  eax
1128
    mov   eax,[ebp+0]
1129
    add   eax,[esp+8]
1130
    imul  eax,[bgrx]
1131
    cdq
1132
    movzx ebx,word [scrxy+2]
1133
    div   ebx
1134
    add   eax,[esp]
1135
    add   esp,4
1136
 
1137
    jmp   notiled
1138
 
1139
  nostretch:
1140
 
1141
    cmp   [bgrdrawtype],dword 1
1142
    jne   notiled
1143
    mov   eax,[ebp+4]
1144
    add   eax,ecx
1145
    cdq
1146
    movzx ebx,word [bgrxy]
1147
    div   ebx
1148
    mov   eax,edx
1149
    imul  eax,[bgrx]
1150
    push  eax
1151
    mov   eax,[ebp+0]
1152
    add   eax,[esp+8]
1153
    movzx ebx,word [bgrxy+2]
1154
    cdq
1155
    div   ebx
1156
    mov   eax,edx
1157
    add   eax,[esp]
1158
    add   esp,4
1159
 
1160
  notiled:
1161
 
1162
    lea  ecx,[eax+eax*2]
1163
    mov  eax,39
1164
    mov  ebx,2
485 heavyiron 1165
    mcall
51 mikedld 1166
 
1167
  nobpix:
1168
 
1169
    pop  ecx
1170
    pop  ebx
1171
 
1172
    mov  edx,eax
1173
    mov  eax,[image]
1174
    mov  [eax],edx
1175
    mov  [eax],dl
1176
    inc  eax
1177
    ror  edx,8
1178
    mov  [eax],dl
1179
    inc  eax
1180
    ror  edx,8
1181
    mov  [eax],dl
1182
    inc  eax
1183
    mov  [image],eax
1184
    inc  ebx
1185
    mov  eax,[yw]
1186
    inc  eax
1187
    cmp  ebx,eax
1188
    jnz  newb
1189
    xor  ebx,ebx
1190
 
1191
    inc  ecx
1192
 
1193
    mov  eax,[ya]
1194
    add  [pixpos],eax
1195
 
1196
    cmp  [top],1
1197
    jne  notop
1198
    cmp  ecx,38
1199
    je     toponly
1200
 
1201
  notop:
1202
 
1203
    cmp  ecx,52
1204
    jnz  newb
1205
 
1206
  toponly:
1207
 
1208
    mov  eax,7
1209
    mov  ebx,0x3000
1210
    mov  ecx,52 shl 16 + 52
1211
    xor  edx,edx
485 heavyiron 1212
    mcall
51 mikedld 1213
  .ex:
1214
    mov  [load_pic],0
1215
    ret
1216
 
1217
draw_text:
1218
 
1219
    mov  esi,[ebp+8]
1220
    add  esi,3
1221
    push edi
485 heavyiron 1222
    mov  edi,title
51 mikedld 1223
    mov  ecx,8
1224
    cld
1225
    rep  movsb
1226
    pop  edi
485 heavyiron 1227
    mov   eax,title
51 mikedld 1228
  news2:
1229
    cmp   [eax],byte 33
1230
    jb      founde
1231
    inc   eax
485 heavyiron 1232
    cmp   eax,title+8;11
51 mikedld 1233
    jb      news2
1234
   founde:
485 heavyiron 1235
    sub   eax,title
51 mikedld 1236
    mov   [tl],eax
1237
 
1238
    mov   eax,[tl]
1239
    lea   eax,[eax+eax*2]  ; eax *= char_width/2
1240
    shl   eax,16
1241
 
411 heavyiron 1242
    mov   ebx,27*65536+40
51 mikedld 1243
    sub   ebx,eax
1244
 
1245
    mov   eax,4
1246
    xor   ecx,ecx         ; black shade of text
485 heavyiron 1247
    mov   edx,title
51 mikedld 1248
    mov   esi,[tl]
1249
    add   ebx,1 shl 16      ;*65536+1
485 heavyiron 1250
    mcall
51 mikedld 1251
    inc   ebx
485 heavyiron 1252
    mcall
51 mikedld 1253
    add   ebx,1 shl 16
485 heavyiron 1254
    mcall
51 mikedld 1255
    inc   ebx
485 heavyiron 1256
    mcall
51 mikedld 1257
    sub   ebx,1 shl 16
485 heavyiron 1258
    mcall
51 mikedld 1259
    dec   ebx
1260
    sub   ebx,1 shl 16
485 heavyiron 1261
    mcall
51 mikedld 1262
    sub   ebx,1 shl 16
1263
    dec   ebx
485 heavyiron 1264
    mcall
51 mikedld 1265
    dec   ebx
1266
    add   ebx,1 shl 16
485 heavyiron 1267
    mcall
51 mikedld 1268
    inc   ebx
1269
    mov   ecx,0xffffff
1270
 
485 heavyiron 1271
    mcall
51 mikedld 1272
    mov   [draw_pic],0
1273
    ret
1274
 
1275
;   *********************************************
1276
;   *******  WINDOW DEFINITIONS AND DRAW ********
1277
;   *********************************************
1278
 
1279
 
1280
draw_window2:
1281
 
1282
    mov  eax,12            ; function 12:tell os about windowdraw
1283
    mov  ebx,1               ; 1, start of draw
485 heavyiron 1284
    mcall
51 mikedld 1285
 
1286
                   ; DRAW WINDOW
1287
    xor  eax,eax             ; function 0 : define and draw window
1288
    mov  ebx,[ebp+0-2]
1289
    mov  ecx,[ebp+4-2]
1290
    add  ebx,[yw]           ; [x start] *65536 + [x size]
1291
    add  ecx,51            ; [y start] *65536 + [y size]
1292
    mov  edx,0x01000000        ; color of work area RRGGBB,8->color gl
485 heavyiron 1293
    mcall
51 mikedld 1294
 
1295
    mov  eax,8      ; button
1296
    mov  ebx,51
1297
    mov  ecx,50
411 heavyiron 1298
    mov  edx,0x40000001
485 heavyiron 1299
    mcall
51 mikedld 1300
 
1301
    mov  eax,5
1302
    mov  ebx,1
1303
draw_icon2:
1304
    xchg [load_pic],bl
1305
    test bl,bl
1306
    je     draw_icon_end
485 heavyiron 1307
    mcall
51 mikedld 1308
    jmp  draw_icon2
1309
draw_icon_end:
1310
 
1311
    mov  eax,5
1312
    mov  ebx,1
1313
draw_icon_2:
1314
    xchg [draw_pic],bl
1315
    test bl,bl
1316
    je     draw_icon_end_2
485 heavyiron 1317
    mcall
51 mikedld 1318
    jmp  draw_icon_2
1319
draw_icon_end_2:
1320
 
1321
    mov  eax,9
1322
    mov  ebx,process_table
1323
    mov  ecx,-1
485 heavyiron 1324
    mcall
51 mikedld 1325
 
1326
    call draw_picture
1327
    call draw_text
1328
 
1329
    mov  eax,12
1330
    mov  ebx,2
485 heavyiron 1331
    mcall
51 mikedld 1332
 
1333
    ret
1334
 
1335
tl        dd      8
1336
yw        dd     51
1337
ya        dd      0
1338
cur_btn   dd 40
1339
 
1340
draw_pic    db      0
1341
load_pic    db      0
1342
create_thread_event db 0
1343
 
1344
 
1345
image          dd  0x3000
1346
 
1347
I_Param:
1348
 
1349
 icon_data = I_END+0x1400
1350
 process_table = I_END+0x2400
1351
 
1352
bgrx dd ?
1353
bgry dd ?
1354
param_str rb 31
1355
 
1356
;//////////////////////////
1357
 
1358
bgrxy        dd    ?
1359
warea:
1360
 .by_x:
1361
  .right  dw ?
1362
  .left   dw ?
1363
 .by_y:
1364
  .bottom dw ?
1365
  .top    dw ?
1366
scrxy        dd    ?
1367
bgrdrawtype  dd    ?
1368
 
1369
pixpos dd    ?
1370
top      dd ?
1371
icons dd ?
1372
addr  dd ?
1373
cur_str    dd ?
1374
cur_band   dd ?
1375
sel_icon1  rd 1
1376
icon_count rd 1
1377
gif_file  rb  GIF_SIZE
1378
strip_file rb RAW_SIZE
1379
 
1380
I_END: