Subversion Repositories Kolibri OS

Rev

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