Subversion Repositories Kolibri OS

Rev

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