Subversion Repositories Kolibri OS

Rev

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

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