Subversion Repositories Kolibri OS

Rev

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