Subversion Repositories Kolibri OS

Rev

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

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