Subversion Repositories Kolibri OS

Rev

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