Subversion Repositories Kolibri OS

Rev

Rev 3984 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
3853 GerdtR 1
;На потом: добавит загрузку ico и возможность выбора иконки не из iconstrp
2
 
3
ICONS_DAT       equ '/rd/1/icons.dat'
4
ICON_STRIP      equ '/rd/1/iconstrp.png'
5
ICON_SIZE       equ 68
6
IMG_SIZE        equ 32
7
TEXT_BOTTOM_Y   equ 14
8
IMAGE_TOP_Y     equ 10    ;>=1
9
ALIGN_SIZE      equ 68
10
NAME_LENGTH     equ 11
11
MIN_NO_MOVING   equ 8
12
                           ;для диалога создания/редактирования
13
ICONSX          equ 20
4003 GerdtR 14
ICONSY          equ 80
3853 GerdtR 15
ICONS_DRAW_COUNTW equ 10  ;количество иконок в ширину
16
ICONS_DRAW_COUNTH equ 2   ;количество иконок в высоту
17
SPCW            equ 3     ;пробел между иконками по горизонтали
18
SPCH            equ 3
19
END_ICONS_AREAW equ ICONSX+(IMG_SIZE+SPCW)*ICONS_DRAW_COUNTW-SPCW
20
END_ICONS_AREAH equ ICONSY+(IMG_SIZE+SPCH)*ICONS_DRAW_COUNTH-SPCH
21
 
22
 
23
 
24
SizeData        equ bufStdIco+32
25
BegData         equ fiStdIco.point
26
;------------------------------------------------------------------------------
27
        use32
28
        org 0x0
29
        db 'MENUET01'   ; 8 byte id
30
        dd 0x01         ; header version
31
        dd START        ; start of code
32
        dd I_END       ; size of image
33
        dd ENDMEM        ; memory for app
34
        dd stack_area   ; esp
35
        dd 0            ; boot parameters
36
        dd 0            ; path
37
;------------------------------------------------------------------------------
38
include 'lang.inc'
39
include '../../macros.inc'
40
include '../../proc32.inc'
41
include '../../develop/libraries/box_lib/trunk/box_lib.mac'
42
include '../../dll.inc'
4003 GerdtR 43
;include '../../debug.inc'
3853 GerdtR 44
 
45
;------------------------------------------------------------------------------
46
START:          ; start of execution
47
        mcall   68,11
48
        stdcall dll.Load,IMPORTS
49
        test    eax,eax
50
        jnz     ErrLoadLibs
51
 
52
; unpack deflate
53
        mov     eax,[unpack_DeflateUnpack2]
54
        mov     [deflate_unpack],eax
55
;---------------------------------------------------------------------
56
; get size of file ICONSTRP.PNG
57
        mcall   70,fiStdIco
58
        test    eax,eax
59
        jnz     ErrorStrp
60
; get memory for ICONSTRP.PNG
61
        mov     ecx,dword[bufStdIco+32]
62
        mov     [fiStdIco.size],ecx
63
        mov     [img_size],ecx
64
        mcall   68,12
65
        mov     [fiStdIco.point],eax
66
        mov     [image_file],eax
67
; load ICONSTRP.PNG
68
        mov     dword[fiStdIco],0
69
        mcall   70,fiStdIco
70
        test    eax,eax
71
        jnz     close
72
; convert PNG to RAW
73
        xor     eax,eax
74
        mov     [return_code],eax
75
;int3
76
 
77
        push    image_file
78
        call    [cnv_png_import.Start]
79
 
80
        mov     eax,[raw_pointer]
81
        mov     ebx,[eax+32]
82
        mov     [strip_file_size],ebx
83
        mov     eax,[eax+28]
84
        add     eax,[raw_pointer]
85
        mov     [strip_file],eax
86
; back memory to system
87
        mcall   68,13,[fiStdIco.point]
88
 
89
        mov     eax,[raw_pointer]
90
        mov     eax,[eax+8]
91
        shr     eax,5
92
        mov     [icon_count],eax
93
 
94
        and     eax,0x7
95
        mov     [cur_band_compensation],eax
96
 
97
;########## загружаем данные иконок в память ##########################
98
 
99
        mcall   70,fiIni                     ;выделяем память, достаточной для хранения ini файла. Её точно хватит для хранения данных об иконках
100
        test    eax,eax
101
        jnz     ErrorIni
102
 
103
        cmp     dword[bufIni+32],0
104
        je      ErrorIni
105
        mcall   68,12,dword[bufIni+32]
106
        mov     dword[BegData],eax
107
        jmp     NoErrIni
108
 
109
  ErrorIni:
110
        mcall   70,fiRunProg
111
        mcall   -1
112
 
113
  NoErrIni:
114
        m2m     [PIcoDB],[BegData]
115
 
116
        stdcall [ini_enum_sections],IconIni,LoadIconsData
117
;int3
118
        mov     eax,dword[PIcoDB]
119
        sub     eax,[BegData]
120
        mov     dword[SizeData],eax
121
        mov     eax,[BegData]
122
        cmp     eax,[PIcoDB]
123
        jne     @f
124
        mov     dword[eax],0
125
        mov     dword[SizeData],0
126
   @@:
127
;######################################################################
128
 
129
        call    FillIconsOffs
130
 
3972 GerdtR 131
        mcall   40,0100000b
3853 GerdtR 132
 
133
        mov     eax,[icon_count]
134
        mov     bl,ICONS_DRAW_COUNTH
135
        div     bl
136
        test    ah,ah
137
        jz      @f
138
        inc     al
139
     @@:
140
        and     eax,0FFh
141
        mov     [sbIcons.max_area],eax
142
 
3962 GerdtR 143
  ;    int3
144
;        mov     eax,1
145
;        mov     eax,[IconsOffs+eax*4]
146
;        stdcall [ini_del_section],IconIni,eax
147
;    ret
3972 GerdtR 148
        ;jmp     MSGRedrawIcons
149
        mcall   51,1,BGRedrawThread,stack_bredraw
3853 GerdtR 150
 
3972 GerdtR 151
 
3853 GerdtR 152
messages:
153
        mcall   10
3972 GerdtR 154
        sub     eax,6
3853 GerdtR 155
        jz      MSGMouse
156
 
157
        jmp     messages
158
 
159
 
160
MSGMouse:
161
        mcall   37,0    ;GetMousePos
162
        xor     ebx,ebx
163
        mov     bx,ax
164
        shr     eax,16
165
        mov     ecx,ebx
166
        mov     ebx,eax
167
 
168
        mcall   34
169
        cmp     eax,1
170
        jne     messages
171
 
172
        cmp     [RButtonActiv],1
173
        je      messages
174
 
175
        mov     [MouseY],ecx
176
        mov     [MouseX],ebx
177
 
178
 
179
        mcall   37,2
180
        test    al,001b
181
        jnz     LButtonPress
182
        test    al,010b
183
        jnz     RButtonPress
184
        jmp     messages
185
 
186
ErrLoadLibs:
187
        ;dps     'Не удалось загрузить необходимые библиотеки'
188
        ;debug_newline
189
        jmp     close
190
ErrorStrp:
191
        ;dps     'Ошибка открытия iconstrp.png'
192
        ;debug_newline
193
close:
194
        mcall   -1
195
 
196
LButtonPress:
197
        stdcall GetNumIcon,[MouseX],[MouseY],-1
198
;int3
199
        cmp     eax,-1
200
        jnz     @f
201
 
202
    WaitLB1:
203
        mcall   37,2
204
        test    al,001b
205
        jz      messages
206
        ;Yield
207
        mcall   5,1
208
        jmp     WaitLB1
209
 
210
 
211
     @@:
212
        push    eax
213
        stdcall DrawIcon,eax,1
214
   WaitLB:
215
        mcall   37,2
216
        test    al,001b
217
        jz      endWaitLB
218
 
219
        mcall   37,0
220
        xor     ebx,ebx
221
        mov     bx,ax
222
        shr     eax,16
223
        sub     eax,[MouseX]
224
        jns     @f
225
        neg     eax
226
      @@:
227
        sub     ebx,[MouseY]
228
        jns     @f
229
        neg     ebx
230
      @@:
231
        cmp     [bFixIcons],0
232
        jne     @f
233
        cmp     eax,MIN_NO_MOVING
234
        ja      MovingIcon
235
        cmp     ebx,MIN_NO_MOVING
236
        ja      MovingIcon
237
      @@:
238
        ;Yield
239
        mcall   5,1     ;Sleep   1
3972 GerdtR 240
 
3853 GerdtR 241
        jmp     WaitLB
242
   endWaitLB:
243
 
244
        mcall   37,0
245
        xor     ebx,ebx
246
        mov     bx,ax
247
        shr     eax,16
248
        mov     ecx,ebx
249
        mov     ebx,eax
250
        mov     [MouseX],ebx
251
        mov     [MouseY],ecx
252
 
253
        stdcall GetNumIcon,[MouseX],[MouseY],-1
254
        cmp     eax,[esp]       ;[esp] = номер иконки
255
        jne     @f
256
 
257
        mov     edi,[IconsOffs+eax*4]
258
        or      ecx,-1
259
        xor     al,al
260
        repne   scasb
261
        mov     ebx,edi
262
        repne   scasb
263
                             ;run program
264
        mov     dword[fiRunProg+8],edi
265
        mov     dword[fiRunProg+21],ebx
266
        mcall   70,fiRunProg
267
        test    eax,80000000h
268
        jz      @f
269
 
270
        mov     dword[fiRunProg+8],ErrRunProg
271
        mov     dword[fiRunProg+21],pthNotify
272
        mcall   70,fiRunProg
273
 
274
     @@:
275
        pop     eax
276
        stdcall RestoreBackgrnd,eax
277
        jmp     messages
278
 
279
;-------------------------------------------------------------------------------
280
MovingIcon:
281
        stdcall GetNumIcon,[MouseX],[MouseY],-1
282
        mov     [SelIcon],eax
3972 GerdtR 283
        mov     [IconNoDraw],eax
3853 GerdtR 284
        stdcall RestoreBackgrnd,[SelIcon]
285
 
286
;        mov     ecx,[MaxNumIcon]
287
;        xor     ebx,ebx
288
;   .MI: push    ecx
289
;        cmp     ebx,[SelIcon]
290
;        je      @f
291
;        stdcall DrawIcon,ebx,0
292
;      @@:
293
;        inc     ebx
294
;        pop     ecx
295
;        loop    .MI
296
 
297
 
298
 
299
;dps 'Moving'
300
;debug_newline
301
;        mov     edi,[SelIcon]
302
;        mov     edi,[IconsOffs+edi*4]
303
;        or      ecx,-1
304
;        xor     al,al
305
;        repne scasb
306
;        repne scasb
307
;        repne scasb
308
;        repne scasb
309
;        xor     ebx,ebx
310
;        xor     esi,esi
311
;        mov     bx,word[edi+2]
312
;        mov     si,word[edi]
313
;        stdcall GetNumIcon,ebx,esi,[SelIcon]
314
;        cmp     eax,-1
315
;        je      @f
316
;  dps 'Q'
317
;        stdcall DrawIcon,eax,0
318
;     @@:
319
;
320
;        add     ebx,ICON_SIZE-1
321
;        stdcall GetNumIcon,ebx,esi,[SelIcon]
322
;        cmp     eax,-1
323
;        je      @f
324
;  dps 'Q'
325
;        stdcall DrawIcon,eax,0
326
;
327
;     @@:
328
;        add     esi,ICON_SIZE-1
329
;        stdcall GetNumIcon,ebx,esi,[SelIcon]
330
;        cmp     eax,-1
331
;        je      @f
332
;  dps 'Q'
333
;        stdcall DrawIcon,eax,0
334
;
335
;     @@:
336
;        sub     ebx,ICON_SIZE-1
337
;        stdcall GetNumIcon,ebx,esi,[SelIcon]
338
;        cmp     eax,-1
339
;        je      @f
340
;   dps 'Q'
341
;        stdcall DrawIcon,eax,0
342
;     @@:
343
 
344
 
345
; Sleep 40
346
 
347
;qweqwe:
348
 
349
        mov    [MovingActiv],1
3962 GerdtR 350
        mcall   51,1,MovingWnd,stack_dlg        ;CreateThread MovingWnd,stack_dlg
3853 GerdtR 351
   .WaitLB:
3962 GerdtR 352
        mcall   37,2    ;GetMouseKey
3853 GerdtR 353
        test    al,001b
354
        jz      .endWaitLB
355
 
356
        ;Yield
357
        mcall   5,1     ;Sleep 1
358
        jmp     .WaitLB
359
   .endWaitLB:
360
        mov    [MovingActiv],0
361
 
362
        mcall   37,0            ;GetMousePos
363
        xor     ebx,ebx
364
        mov     bx,ax
365
        shr     eax,16
366
 
367
        add     ebx,7
368
        dec     eax
369
 
370
        sub     eax,ICON_SIZE/2
371
        jns     @f
372
        xor     eax,eax
373
      @@:
374
        sub     ebx,ICON_SIZE/2
375
        jns     @f
376
        xor     ebx,ebx
377
      @@:
378
 
379
        movzx   edx,[ScreenX]
380
        sub     edx,ICON_SIZE
381
        cmp     eax,edx
382
        jbe     @f
383
        mov     eax,edx
384
      @@:
385
 
386
        movzx   edx,[ScreenY]
387
        sub     edx,ICON_SIZE
388
        cmp     ebx,edx
389
        jbe     @f
390
        mov     ebx,edx
391
      @@:
392
 
393
        xor     edx,edx
394
        mov     dx,[ScreenX]
395
        shr     edx,1
396
        cmp     eax,edx
397
        jbe     @f
398
        sub     ax,[ScreenX]
399
        inc     ax
400
      @@:
401
 
402
        xor     edx,edx
403
        mov     dx,[ScreenY]
404
        shr     edx,1
405
        cmp     ebx,edx
406
        jbe     @f
407
        sub     bx,[ScreenY]
408
        inc     bx
409
      @@:
410
 
411
        stdcall SetPosition,[SelIcon],eax,ebx
412
 
3984 GerdtR 413
 
3853 GerdtR 414
        m2m     [PIcoDB],[BegData]
415
        stdcall [ini_enum_sections],IconIni,Ini_SavePos  ;in RButton.inc
416
 
417
        mov     [bNotSave],1
3984 GerdtR 418
        mov     [IconNoDraw],-1
419
        mcall   15,3
3853 GerdtR 420
 
421
        jmp     messages
422
 
423
;-------------------------------------------------------------------------------
424
 
425
RButtonPress:
426
        cmp     [RButtonActiv],1
427
        je      messages
428
        mov     [RButtonActiv],1
429
 
430
     @@:
431
        mcall   37,2    ;GetMouseKey
432
        test    al,010b
433
        jz      @f
434
        mcall   5,1     ;Yield
435
        jmp     @b
436
     @@:
437
 
3962 GerdtR 438
        mcall   51,1,RButtonWin,stack_dlg       ;CreateThread RButtonWin,stack_dlg
3853 GerdtR 439
 
440
        jmp     messages
441
 
442
 
443
;###############################################################################
444
;ret eax = 1/0 = удача/ошибка
445
proc DrawIcon NumIcon:DWORD,Activ:DWORD ;NumIcon = 0..n
446
local   IconData:DWORD
447
   ; int3
448
        push    ebx edi esi
449
 
450
        mov     ecx,ICON_SIZE*ICON_SIZE
451
        xor     eax,eax
452
        ;mov     eax,0FFFFFFFh
453
        mov     edi,IconArea
454
        rep     stosd
455
 
456
        mov     eax,[NumIcon]
457
        cmp     eax,[MaxNumIcon]
458
        jb      @f
459
        xor     eax,eax
460
        pop     esi edi ebx
461
        ret
462
      @@:
463
 
464
        mov     esi,[IconsOffs+eax*4]
465
        mov     [IconData],esi
466
 
467
                              ;рисуем текст
468
        mov     edi,esi
469
        xor     al,al
470
        or      ecx,-1
471
        repne scasb
472
        mov     edx,esi
473
        mov     eax,edi
474
        sub     eax,esi
475
        dec     eax
476
        shl     eax,1            ;*6
477
        lea     eax,[eax*2+eax]
478
        mov     ebx,ICON_SIZE
479
        sub     ebx,eax
480
        shr     ebx,1        ;ebx = x текста
481
        shl     ebx,16
482
        mov     bx,ICON_SIZE
483
        sub     bx,TEXT_BOTTOM_Y
484
        mov     ecx,88000000h
485
        mov     edi,IconAreaH
486
        add     ebx,-1*10000h+0
487
        mcall   4
488
        add     ebx,2*10000h+0
489
        mcall   4
490
        add     ebx,-1*10000h-1
491
        mcall   4
492
        add     ebx,0*10000h+2
493
        mcall   4
494
        add     ebx,1*10000h+0
495
        mcall   4
496
        add     ebx,0*10000h+1
497
        mcall   4
498
        add     ebx,-1*10000h+0
499
        mcall   4
500
        add     ebx,0*10000h-2
501
        mov     ecx,88FFFFFFh
502
        mcall   4
503
                                    ;рисуем картинку
504
 
505
        mov     edi,esi
506
        xor     al,al
507
        or      ecx,-1
508
        repne   scasb
509
        repne   scasb
510
        repne   scasb
511
        mov     al,[edi]
512
        cmp     al,'9'
513
        ja      PathToIcon
514
        cmp     al,'/'
515
        jne     GetIconInd
516
 
517
   PathToIcon:
518
        ;stdcall LoadIcon,edi
519
        ;mov     esi,eax
520
        mov     al,30h           ;заглушка!!!!!!!!!!!!!
521
        mov     byte[edi+1],0
522
 
523
        jmp     CopyToMem
524
   GetIconInd:
525
 
526
        sub     al,30h
527
        cmp     byte[edi+1],0
528
        je      @f
529
        shl     eax,1
530
        lea     eax,[eax*4+eax]
531
        xor     edx,edx
532
        mov     dl,[edi+1]
533
        sub     dl,30h
534
        add     eax,edx
535
     @@:             ;eax=num icon
536
        cmp     eax,[icon_count]
537
        jb      @f
538
        xor     eax,eax
539
     @@:
540
        test    eax,eax
541
        je      DI1
542
        mov     ecx,eax
543
        xor     eax,eax
544
      @@:
545
        add     eax,IMG_SIZE*IMG_SIZE*4
546
        loop    @b
547
     DI1:
548
        mov     esi,eax
549
        add     esi,[raw_pointer]
550
        add     esi,0+4*11
551
 
552
  CopyToMem:
553
        mov     edi,IconArea+((IMAGE_TOP_Y*ICON_SIZE)+((ICON_SIZE-IMG_SIZE)/2))*4
554
 
555
        mov     eax,IMG_SIZE
556
        mov     edx,eax
557
      @@:
558
        mov     ecx,eax
559
        rep     movsd
560
        add     edi,(ICON_SIZE-IMG_SIZE)*4
561
        dec     edx
562
        jnz     @b
563
 
564
;-----------------
565
                                ;если надо, то рисуем обводку
566
        cmp     [Activ],0
567
        je      .NoSelect
568
 
569
        mov     edi,IconArea
570
        mov     eax,0FF000000h
571
        mov     ecx,ICON_SIZE
572
        rep     stosd
573
        ;mov     edi,IconArea+ICON_SIZE*1
574
 
575
        mov     ecx,ICON_SIZE-1
576
    @@: mov     dword[edi],eax
577
        add     edi,(ICON_SIZE)*4
578
        loop    @b
579
 
580
        mov     edi,IconArea+ICON_SIZE*2*4-4
581
        mov     ecx,ICON_SIZE-1
582
    @@: mov     dword[edi],eax
583
        add     edi,(ICON_SIZE)*4
584
        loop    @b
585
 
586
        mov     edi,IconArea+ICON_SIZE*(ICON_SIZE-1)*4+4
587
        mov     ecx,ICON_SIZE-2
588
        rep     stosd
589
 
590
 
591
        mov     edi,IconArea+ICON_SIZE*4+4
592
        mov     eax,0FFFFFFFFh
593
        mov     ecx,ICON_SIZE-2
594
        rep     stosd
595
 
596
        mov     edi,IconArea+ICON_SIZE*4+4
597
        mov     ecx,ICON_SIZE-2
598
    @@: mov     dword[edi],eax
599
        add     edi,(ICON_SIZE)*4
600
        loop    @b
601
 
602
        mov     edi,IconArea+ICON_SIZE*2*4-4*2
603
        mov     ecx,ICON_SIZE-3
604
    @@: mov     dword[edi],eax
605
        add     edi,(ICON_SIZE)*4
606
        loop    @b
607
 
608
        mov     edi,IconArea+ICON_SIZE*(ICON_SIZE-2)*4+4*2
609
        mov     ecx,ICON_SIZE-3
610
        rep     stosd
611
;--------------
612
 
613
   .NoSelect:
614
        mov     edi,[IconData]
615
        xor     al,al
616
        or      ecx,-1
617
        repne   scasb
618
        repne   scasb
619
        repne   scasb
620
        repne   scasb
621
        mov     edx,[edi]
622
 
623
        test    edx,00008000h
624
        jz      @f
625
        add     dx,[ScreenY]
626
    @@:
627
        test    edx,80000000h
628
        jz      @f
629
        rol     edx,16
630
        add     dx,[ScreenX]
631
        rol     edx,16
632
    @@:
633
 
634
        mov     ebx,IconArea
635
        mov     ecx,ICON_SIZE*10000h+ICON_SIZE
636
        mcall   25
637
 
638
;        mov     eax,1
639
        pop     esi edi ebx
640
        ret
641
endp
642
 
643
 
644
 
645
proc RestoreBackgrnd,NumIcon:DWORD
646
        push    ebx edi
647
        mov     eax,[NumIcon]
648
        cmp     eax,[MaxNumIcon]
649
        jb      @f
650
        xor     eax,eax
651
        pop     edi ebx
652
        ret
653
      @@:
654
 
655
        mov     edi,[IconsOffs+eax*4]
656
        xor     al,al
657
        or      ecx,-1
658
        repne   scasb
659
        repne   scasb
660
        repne   scasb
661
        repne   scasb
662
 
663
        mov     ax,[edi+2]
664
        test    ax,8000h
665
        jz      @f
666
        add     ax,[ScreenX]
667
      @@:
668
 
669
        mov     bx,[edi]
670
        test    bx,8000h
671
        jz      @f
672
        add     bx,[ScreenY]
673
      @@:
674
 
675
        mov     cx,ax
676
        shl     ecx,16
677
        add     ax,ICON_SIZE
678
        mov     cx,ax
679
        mov     dx,bx
680
        shl     edx,16
681
        add     bx,ICON_SIZE
682
        mov     dx,bx
683
        dec     ecx
684
        dec     edx
685
        mcall   15,9
686
        pop     edi ebx
687
        ret
688
endp
689
 
690
;ret eax=numIcon
691
proc AddIcon stdcall,x,y,lpIcon,lpName,lpExeFile,lpParams
692
        push    ebx edi esi
693
 
694
        mov     eax,[x]
695
        mov     ebx,[y]
696
 
697
        xor     edx,edx
698
        test    eax,8000h
699
        jnz     @f
700
        mov     dx,[ScreenX]    ;если надо, то преобразовываем в
701
        shr     edx,1           ;отрицательные координаты
702
        cmp     eax,edx
703
        jbe     @f
704
        sub     ax,[ScreenX]
705
        inc     eax
706
      @@:
707
 
708
        test    ebx,8000h
709
        jnz     @f
710
        mov     dx,[ScreenY]
711
        shr     edx,1
712
        cmp     ebx,edx
713
        jbe     @f
714
        sub     bx,[ScreenY]
715
        inc     ebx
716
      @@:
717
                                ;поправка на случай выхода за край экрана
718
 
719
        test    eax,8000h
720
        jnz     @f
721
        mov     dx,[ScreenX]
722
        sub     edx,ICON_SIZE
723
        cmp     eax,edx
724
        jbe     @f
725
        mov     eax,edx
726
     @@:
727
 
728
        test    ebx,8000h
729
        jnz     @f
730
        mov     dx,[ScreenY]
731
        sub     edx,ICON_SIZE
732
        cmp     ebx,edx
733
        jbe     @f
734
        mov     ebx,edx
735
     @@:
736
 
737
        mov     [x],eax
738
        mov     [y],ebx
739
 
740
        xor     al,al
741
        or      ecx,-1
742
        mov     edi,[lpName]
743
        repne   scasb
744
        sub     edi,[lpName]
745
        mov     ebx,edi
746
        mov     edi,[lpExeFile]
747
        repne   scasb
748
        sub     edi,[lpExeFile]
749
        add     ebx,edi
750
        mov     edi,[lpParams]
751
        repne   scasb
752
        sub     edi,[lpParams]
753
        add     ebx,edi
754
        mov     edi,[lpIcon]
755
        repne   scasb
756
        sub     edi,[lpIcon]
757
        add     ebx,edi
758
        add     ebx,4
759
        mov     ecx,dword[SizeData]
760
        add     ecx,ebx
761
        mov     edx,[IconsOffs]
762
        mcall   68,20
763
 
764
        mov     edx,dword[SizeData]
765
        mov     dword[SizeData],ecx
766
        mov     dword[BegData],eax
767
        mov     edi,eax
768
        add     edi,edx
769
        mov     esi,[lpName]
770
    @@: lodsb
771
        stosb
772
        test    al,al
773
        jnz     @b
774
 
775
        mov     esi,[lpExeFile]
776
    @@: lodsb
777
        stosb
778
        test    al,al
779
        jnz     @b
780
 
781
        mov     esi,[lpParams]
782
    @@: lodsb
783
        stosb
784
        test    al,al
785
        jnz     @b
786
 
787
        mov     esi,[lpIcon]
788
    @@: lodsb
789
        stosb
790
        test    al,al
791
        jnz     @b
792
 
793
        mov     eax,[x]
794
        mov     ebx,[y]
795
        shl     eax,16
796
        mov     ax,bx
797
        mov     dword[edi],eax
798
 
799
        stdcall FillIconsOffs
800
 
801
        pop     esi edi ebx
802
        ret
803
endp
804
 
805
 
806
proc EditIcon stdcall,NumIcon,lpIcon,lpName,lpExeFile,lpParams
807
        push    edi
808
        mov     eax,[NumIcon]
809
        mov     edi,[IconsOffs+eax*4]
810
        xor     al,al
811
        or      ecx,-1
812
        repne   scasb
813
        repne   scasb
814
        repne   scasb
815
        repne   scasb
816
        push    dword[edi]
817
        stdcall DelIcon,[NumIcon]
818
        pop     edx
819
        xor     eax,eax
820
        mov     ax,dx
821
        shr     edx,16
822
        stdcall AddIcon,edx,eax,DAreaIcon,DAreaName,DAreaPath,DAreaParams
823
        pop     edi
824
        ret
825
endp
826
 
827
proc SetPosition stdcall,NumIcon,x,y
828
        push    edi
829
        mov     eax,[NumIcon]
830
        mov     edi,[IconsOffs+eax*4]
831
        xor     al,al
832
        or      ecx,-1
833
        repne   scasb
834
        repne   scasb
835
        repne   scasb
836
        repne   scasb
837
        mov     eax,[x]
838
        shl     eax,16
839
        mov     ax,word[y]
840
        mov     dword[edi],eax
841
        pop     edi
842
        ret
843
endp
844
 
845
proc GetNumIcon stdcall,x,y,NumIconI  ;номер иконки, который проверять не надо или -1
846
local posX:WORD,\
847
      posY:WORD
848
        push    ebx edi
849
        mov     ecx,[MaxNumIcon]
850
        test    ecx,ecx
851
        jnz     @f
852
        or      eax,-1
853
        pop     edi ebx
854
        ret
855
     @@:
856
 
857
        xor     ebx,ebx
858
   .TestIcon:
859
        cmp     dword[NumIconI],-1
860
        je      @f
861
 
862
        cmp     ebx,[NumIconI]
863
        jne     @f
864
        inc     ebx
865
        dec     ecx
866
        test    ecx,ecx
867
        jz      .NoIcon
868
     @@:
869
 
870
        push    ecx
871
 
872
        or      ecx,-1
873
        xor     al,al
874
        mov     edi,[IconsOffs+ebx*4]
875
        repne   scasb
876
        repne   scasb
877
        repne   scasb
878
        repne   scasb
879
 
880
        mov     ax,[edi+2]
881
        test    ax,8000h
882
        jz      @f
883
        add     ax,[ScreenX]
884
      @@:
885
        mov     [posX],ax
886
 
887
        mov     ax,[edi]
888
        test    ax,8000h
889
        jz      @f
890
        add     ax,[ScreenY]
891
      @@:
892
        mov     [posY],ax
893
 
894
        mov     eax,[x]
895
        mov     edx,[y]
896
 
897
        cmp     ax,[posX]
898
        jb      @f
899
        add     word[posX],ICON_SIZE
900
        cmp     ax,[posX]
901
        ja      @f
902
 
903
        cmp     dx,[posY]
904
        jb      @f
905
        add     word[posY],ICON_SIZE
906
        cmp     dx,[posY]
907
        ja      @f
908
 
909
        jmp     .OkIcon
910
     @@:
911
 
912
        inc     ebx
913
        pop     ecx
914
 
915
        ;loop    .TestIcon
916
        dec     ecx
917
        jnz     .TestIcon
918
        jmp     .NoIcon
919
   .OkIcon:
920
        mov     eax,ebx
921
        pop     edi ebx
922
        ret
923
   .NoIcon:
924
        or      eax,-1
925
        pop     edi ebx
926
        ret
927
endp
928
 
929
proc DelIcon stdcall,NumIcon
930
        push    ebx edi esi
931
 
932
        cmp     [MaxNumIcon],0
933
        je      .end
934
 
935
        cmp     [MaxNumIcon],1
936
        je      .OhneIco
937
 
938
        mov     ebx,[NumIcon]
939
 
940
        mov     eax,[MaxNumIcon]
941
        dec     eax
942
        mov     [MaxNumIcon],eax
943
        cmp     ebx,eax
944
        je      @f
945
 
946
        shl     ebx,2
947
 
948
        mov     ecx,dword[BegData]
949
        add     ecx,dword[SizeData]
950
        sub     ecx,[IconsOffs+4+ebx]
951
 
952
        mov     edx,[IconsOffs+4+ebx]
953
        sub     edx,[IconsOffs+ebx]
954
        sub     dword[SizeData],edx
955
 
956
        mov     esi,[IconsOffs+4+ebx]
957
        mov     edi,[IconsOffs+ebx]
958
        rep     movsb
959
        jmp     .endDel
960
 
961
     @@:
962
        mov     ecx,dword[BegData]
963
        add     ecx,dword[SizeData]
964
        sub     ecx,[IconsOffs+ebx*4]
965
        sub     dword[SizeData],ecx
966
 
967
  .endDel:
968
        stdcall FillIconsOffs
969
        jmp     .end
970
 
971
.OhneIco:
972
        mov     edi,[BegData]
973
        mov     [SizeData],0
974
        mov     dword[edi],0
975
        mov     [MaxNumIcon],0
976
        mov     dword[IconsOffs],0
977
   .end:
978
        mcall   15,3
979
        pop     esi edi ebx
980
        ret
981
endp
982
                                 ;заполняет MaxNumIcon,IconsOffs
983
proc FillIconsOffs
984
        push    ebx edi
985
        mov     edi,[BegData]
986
        mov     dword[MaxNumIcon],0
987
        cmp     dword[edi],0
988
        jne     @f
989
        mov     dword[IconsOffs],0
990
        pop     edi ebx
991
        ret
992
    @@:
993
 
994
        mov     [IconsOffs],edi
995
        xor     al,al
996
        xor     edx,edx
997
        mov     ebx,dword[SizeData]
998
        add     ebx,dword[BegData]
999
        or      ecx,-1
1000
 .CalcNumIc:
1001
        repne   scasb
1002
        repne   scasb
1003
        repne   scasb
1004
        repne   scasb
1005
        add     edi,4
1006
        mov     dword[IconsOffs+edx+4],edi
1007
        inc     dword[MaxNumIcon]
1008
        add     edx,4
1009
 
1010
        cmp     edi,ebx
1011
        jae     @f
1012
        jmp     .CalcNumIc
1013
   @@:
1014
 
1015
        mov     dword[IconsOffs+edx],0
1016
        pop     edi ebx
1017
        ret
1018
endp
1019
 
1020
proc LoadIconsData stdcall,f_name,sec_name
1021
        push    ebx esi edi
1022
 
1023
        mov     edi,secRButt
1024
        mov     esi,[sec_name]
1025
    @@: lodsb
1026
        scasb
1027
        jnz     .lid1
1028
        test    al,al
1029
        jnz     @b
1030
 
1031
        mov     eax,1
1032
        pop     edi esi ebx
1033
        ret
1034
     .lid1:
1035
 
1036
        mov     edi,[PIcoDB]
1037
        mov     esi,[sec_name]
1038
    @@: lodsb
1039
        stosb
1040
        test    al,al
1041
        jnz     @b
1042
 
1043
        stdcall [ini_get_str],[f_name],[sec_name],keyPath,edi,4096,0
1044
        test    eax,eax
1045
        jz      @f
1046
        xor     eax,eax
1047
        pop     edi esi ebx
1048
        ret
1049
     @@:
1050
        xor     al,al
1051
        or      ecx,-1
1052
        repne   scasb
1053
 
1054
        stdcall [ini_get_str],[f_name],[sec_name],keyParams,edi,4096,0
1055
        test    eax,eax
1056
        jz      @f
1057
        xor     eax,eax
1058
        pop     edi esi ebx
1059
        ret
1060
     @@:
1061
        xor     al,al
1062
        or      ecx,-1
1063
        repne   scasb
1064
 
1065
        stdcall [ini_get_str],[f_name],[sec_name],keyIco,edi,4096,0
1066
        test    eax,eax
1067
        jz      @f
1068
        xor     eax,eax
1069
        pop     edi esi ebx
1070
        ret
1071
     @@:
1072
        xor     al,al
1073
        or      ecx,-1
1074
        repne   scasb
1075
 
1076
        stdcall [ini_get_int],[f_name],[sec_name],keyX,80000000h
1077
        cmp     eax,80000000h
1078
        jne     @f
1079
        xor     eax,eax
1080
        pop     edi esi ebx
1081
        ret
1082
     @@:
1083
        mov     word[edi+2],ax
1084
 
1085
        stdcall [ini_get_int],[f_name],[sec_name],keyY,80000000h
1086
        cmp     eax,80000000h
1087
        jne     @f
1088
        xor     eax,eax
1089
        pop     edi esi ebx
1090
        ret
1091
     @@:
1092
        mov     word[edi],ax
1093
        add     edi,4
1094
        mov     [PIcoDB],edi
1095
 
1096
        mov     eax,1
1097
        pop     edi esi ebx
1098
        ret
1099
endp
1100
 
4003 GerdtR 1101
include 'bgredraw.inc'
3853 GerdtR 1102
include 'RButton.inc'
1103
include 'DlgAdd.inc'
1104
include 'Moving.inc'
1105
 
1106
;'Eolite',0,'/sys/File managers/eolite',0,'/hd0/3/Muzik',0,'1',0,00010001h
1107
;-------------------------------------------------------------------------------
1108
;##### DATA ####################################################################
1109
;-------------------------------------------------------------------------------
1110
; not change this section!!!
1111
; start section
1112
;------------------------------------------------------------------------------
1113
align 4
1114
image_file     dd 0 ;+0
1115
raw_pointer    dd 0 ;+4
1116
return_code    dd 0 ;+8
1117
img_size       dd 0 ;+12
1118
deflate_unpack dd 0 ;+16        ; not use for scaling
1119
raw_pointer_2  dd 0 ;+20        ; not use for scaling
1120
;------------------------------------------------------------------------------
1121
; end section
1122
;------------------------------------------------------------------------------
1123
 
1124
 
1125
align 4
1126
fiStdIco:
1127
        dd 5
1128
        dd 0
1129
        dd 0
1130
.size   dd 0
1131
.point  dd bufStdIco
1132
        db ICON_STRIP,0
1133
 
1134
 
1135
align 4
1136
fiRunProg:            ;для запуска программ
1137
        dd 7
1138
        dd 0
1139
        dd 0
1140
        dd 0
1141
        dd ErrNotFoundIni
1142
        db 0
1143
        dd pthNotify
1144
 
1145
fiIni   dd 5           ;для ini файла
1146
        dd 0
1147
        dd 0
1148
        dd 0
1149
        dd bufIni
1150
        db '/rd/1/icon.ini',0
1151
 
1152
 
1153
IconsFile       db ICON_STRIP,0
1154
NameIconsDat    db ICONS_DAT,0
1155
align 4
1156
MaxNumIcon      dd 0           ;количество иконок
3972 GerdtR 1157
IconNoDraw      dd -1           ;-1 либо номер иконки, которую не надо рисовать( когда её таскают :))
3853 GerdtR 1158
 
3921 mario79 1159
bFixIcons       dd 1
3853 GerdtR 1160
bNotSave        dd 0
1161
 
1162
LButtonActiv    dd 0
1163
RButtonActiv    dd 0
1164
MovingActiv     dd 0
3921 mario79 1165
DlgAddActiv     dd 0
3853 GerdtR 1166
 
1167
IconIni         db '/rd/1/icon.ini',0
1168
 
1169
 
3972 GerdtR 1170
 
3853 GerdtR 1171
;keyName         db 'name',0
1172
keyPath         db 'path',0
1173
keyParams       db 'param',0
1174
keyIco          db 'ico',0
1175
keyX            db 'x',0
1176
keyY            db 'y',0
3962 GerdtR 1177
keyMenuColor    db 'menucolor',0
3853 GerdtR 1178
 
1179
;-------------------------------------------------------------------------------
1180
IMPORTS:
1181
library cnv_png,'cnv_png.obj',\
1182
        archiver,'archiver.obj',\
1183
        box_lib,'box_lib.obj',\
1184
        proc_lib,'proc_lib.obj',\
1185
        libini,'libini.obj'
1186
 
1187
import  cnv_png,\
1188
        cnv_png_import.Start,'START',\
1189
        cnv_png_import.Version,'version',\
1190
        cnv_png_import.Check,'Check_Header',\
1191
        cnv_png_import.Assoc,'Associations'
1192
 
1193
import  archiver,\
1194
        unpack_DeflateUnpack2,'deflate_unpack2'
1195
 
1196
import  box_lib,\
1197
        edit_box_draw,'edit_box',\
1198
        edit_box_key,'edit_box_key',\
1199
        edit_box_mouse,'edit_box_mouse',\
1200
        scrollbar_h_draw,'scrollbar_h_draw',\
1201
        scrollbar_h_mouse,'scrollbar_h_mouse'
1202
 
1203
import  proc_lib,\
1204
        OpenDialog_Init,'OpenDialog_init',\
1205
        OpenDialog_Start,'OpenDialog_start'
1206
 
1207
import  libini,\
1208
        ini_enum_sections,'ini_enum_sections',\
1209
        ini_enum_keys,'ini_enum_keys',\
1210
        ini_get_str,'ini_get_str',\
1211
        ini_set_str,'ini_set_str',\
1212
        ini_get_color,'ini_get_color',\
1213
        ini_get_int,'ini_get_int',\
1214
        ini_set_int,'ini_set_int',\
1215
        ini_del_section,'ini_del_section'
1216
 
1217
 
1218
;ini.get_str (f_name, sec_name, key_name, buffer, buf_len, def_val)
1219
;ini.set_str (f_name, sec_name, key_name, buffer, buf_len)
1220
 
1221
 
1222
;-------------------------------------------------------------------------------
1223
;----- RButton.inc -------------------------------------------------------------
1224
;-------------------------------------------------------------------------------
1225
secRButt        db 'rbmenu',0
1226
 
1227
if lang eq ru
1228
 RMenuRedrawFon db 'Перерисовать',0
1229
 RMenuAlign     db 'Выровнять по сетке',0
1230
 RMenuAdd       db 'Добавить',0
1231
 RMenuDel       db 'Удалить',0
1232
 RMenuProp      db 'Свойства',0
1233
 RMenuOffMoving db 'Закрепить иконки',0
1234
 RMenuOnMoving  db 'Открепить иконки',0
3962 GerdtR 1235
 
3853 GerdtR 1236
else
1237
 
1238
 RMenuRedrawFon db 'Redraw',0
1239
 RMenuAlign     db 'Snap to Grid',0
1240
 RMenuAdd       db 'Add',0
1241
 RMenuDel       db 'Delete',0
1242
 RMenuProp      db 'Properties',0
1243
 RMenuOffMoving db 'Fix the icons',0
1244
 RMenuOnMoving  db 'Unfix the icons',0
1245
 
1246
end if
1247
 
1248
if lang eq ru
1249
 
1250
 ErrRunProg     db 'Ошибка запуска программы',0
1251
 WarningSave    db 'Не забудьте сохранить изменения, запустить RDSave',0
1252
 ErrNotFoundIni db 'Не найден icon.ini',0
4003 GerdtR 1253
 ErrName        db 'Имя "rbmenu" зарезервировано',0
3853 GerdtR 1254
else
1255
 
1256
 ErrRunProg     db 'Error runing program',0
1257
 WarningSave    db 'Do not forget to save the changes, run the RDSave',0
1258
 ErrNotFoundIni db 'icon.ini not found',0
4003 GerdtR 1259
 ErrName        db 'The Name "rbmenu" reserved',0
3853 GerdtR 1260
end if
1261
 
1262
 
1263
pthNotify       db '/rd/1/@notify',0
1264
 
1265
;-------------------------------------------------------------------------------
1266
;------- AddDlg.inc ---------------------------------------------------------------
1267
;-------------------------------------------------------------------------------
1268
if lang eq ru
3962 GerdtR 1269
DTitleAdd       db 'Добавить иконку',0
1270
DTitleProp      db 'Изменить иконку',0
3853 GerdtR 1271
 
1272
DCaptName       db 'Имя',0
1273
DCaptPath       db 'Путь',0
1274
DCaptParams     db 'Параметры',0
1275
DCaptIcon       db 'Иконка',0
3962 GerdtR 1276
;DCaptChange     db '.',0
3853 GerdtR 1277
DCaptCreate     db 'Создать',0
1278
DCaptProperties db 'Изменить',0
1279
DCaptCancel     db 'Отменить',0
1280
 
1281
else
3962 GerdtR 1282
DTitleAdd       db 'Add icon',0
1283
DTitleProp      db 'Change icon',0
3853 GerdtR 1284
 
1285
DCaptName       db 'Name',0
1286
DCaptPath       db 'Path',0
1287
DCaptParams     db 'Parameters',0
1288
DCaptIcon       db 'Icon',0
3962 GerdtR 1289
;DCaptChange     db '.',0
3853 GerdtR 1290
DCaptCreate     db 'Create',0
1291
DCaptProperties db 'Change',0
1292
DCaptCancel     db 'Cancel',0
1293
end if
1294
 
1295
;/не менять положение
1296
edtName    edit_box NAME_LENGTH*6+4,70+20+IMG_SIZE,6,0FFFFFFh,06F9480h,0FFh,0h,0,NAME_LENGTH,\
1297
                DAreaName,mouse_dd,0,0,0
1298
edtExePath edit_box 281-3-20-IMG_SIZE,70+20+IMG_SIZE,26,0FFFFFFh,06F9480h,0FFh,0h,0,256,\
1299
                DAreaPath,mouse_dd,0,0,0
1300
edtParams  edit_box 295-20-IMG_SIZE,70+20+IMG_SIZE,46,0FFFFFFh,06F9480h,0FFh,0h,0,256,\
1301
                DAreaParams,mouse_dd,0,0,0
1302
edtIcon    edit_box 295-20-IMG_SIZE,70+20+IMG_SIZE,66,0FFFFFFh,06F9480h,0FFh,0h,0,256,\
1303
                DAreaIcon,mouse_dd,0,0,0
1304
endEdits:
1305
;\
1306
 
1307
sbIcons:
1308
             dw END_ICONS_AREAW-ICONSX
1309
             dw ICONSX
1310
             dw 15
1311
             dw END_ICONS_AREAH+3
1312
             dd 0
1313
             dd 1
1314
 .max_area   dd 0
1315
 .cur_area   dd ICONS_DRAW_COUNTW
1316
 .position   dd 0
1317
 .bckg_col   dd 0
1318
 .frnt_col   dd 0
1319
 .line_col   dd 0
1320
 .redraw     dd 0
1321
 .delta      dd 0
1322
 .delta2     dd 0
1323
 .r_size_x   dw 0
1324
 .r_start_x  dw 0
1325
 .r_size_y   dw 0
1326
 .r_start_y  dw 0
1327
 .m_pos      dd 0
1328
 .m_pos2     dd 0
1329
 .m_keys     dd 0
1330
 .run_size   dd 0
1331
 .position2  dd 0
1332
 .work_size  dd 0
1333
 .all_redraw dd 0
1334
 .ar_offset  dd 0
1335
 
1336
;-------------------------------------------------------------------------------
1337
OpenDialog_data:
1338
.type                   dd 0
1339
.procinfo               dd RBProcInfo       ;+4
1340
.com_area_name          dd communication_area_name      ;+8
1341
.com_area               dd 0    ;+12
1342
.opendir_pach           dd temp_dir_pach        ;+16
1343
.dir_default_pach       dd communication_area_default_pach      ;+20
1344
.start_path             dd open_dialog_path     ;+24
1345
.draw_window            dd DRedraw;draw_window_for_OD   ;+28
1346
.status                 dd 0    ;+32
1347
.openfile_pach          dd DAreaPath;fname_Info   ;+36
1348
.filename_area          dd 0;DAreaPath        ;+40
1349
.filter_area            dd Filter
1350
.x:
1351
.x_size                 dw 420 ;+48 ; Window X size
1352
.x_start                dw 100 ;+50 ; Window X position
1353
.y:
1354
.y_size                 dw 320 ;+52 ; Window y size
1355
.y_start                dw 100 ;+54 ; Window Y position
1356
 
1357
communication_area_name:
1358
        db 'FFFFFFFF_open_dialog',0
1359
open_dialog_path:
1360
        db '/sys/File managers/opendial',0
1361
 
1362
communication_area_default_pach:
1363
        db '/sys',0
1364
 
1365
Filter  dd 0
1366
 
1367
;open_dialog     db 0
1368
;-------------------------------------------------------------------------------
1369
 
1370
;/не разделять
1371
align 4
1372
IconAreaH       dd ICON_SIZE,ICON_SIZE
1373
I_END:
1374
;##### UDATA ###################################################################
1375
IconArea        rb 4*ICON_SIZE*ICON_SIZE
1376
;\
1377
 
1378
ScreenX         rw 1
1379
ScreenY         rw 1
1380
 
1381
MouseX          rd 1
1382
MouseY          rd 1
1383
 
1384
RBSlot          rd 1
1385
 
1386
AddX            rd 1
1387
AddY            rd 1
1388
 
1389
SelIcon         rd 1
3921 mario79 1390
DlgSelIcon      rd 1
3962 GerdtR 1391
slotDlgAdd      rd 1
3853 GerdtR 1392
 
1393
sc              system_colors
1394
 
1395
align 4
1396
bufStdIco       rb 40
1397
IconsOffs       rd 100
1398
PIcoDB          rd 1
1399
 
3962 GerdtR 1400
 
3853 GerdtR 1401
align 4
1402
icon_count      rd 1
1403
strip_file      rd 1
1404
strip_file_size rd 1
1405
 
1406
cur_band_compensation rd 1
1407
 
1408
;---- RButton -----------------------------------------------------------------------
1409
bufIni          rb 40
1410
NumUserButt     rd 1
1411
RBUser          rd 16*2+1
1412
RMenuW          rw 1
1413
RMenuH          rw 1
1414
RMenuHsb        rw 1
1415
 
1416
MaxPage         rd 1
3962 GerdtR 1417
RBMenuColor     rd 1
3853 GerdtR 1418
mouse_dd        rd 1
1419
 
1420
DAreaName       rb NAME_LENGTH+1
1421
DAreaPath       rb 256+1
1422
DAreaParams     rb 256+1
1423
DAreaIcon       rb 256+1
1424
 
1425
align 4
1426
RBProcInfo      rb 1024
3962 GerdtR 1427
align 4
3853 GerdtR 1428
 
1429
; OpenDialog
1430
temp_dir_pach   rb 1024
1431
fname_Info      rb 1024
1432
;-------------------------------------------------------------------------------
1433
                rb 1024
1434
stack_dlg:
1435
align 4
1436
                rb 1024
3972 GerdtR 1437
stack_bredraw:
1438
                rb 1024
3853 GerdtR 1439
stack_area:
1440
;------------------------------------------------------------------------------
1441
ENDMEM: