Subversion Repositories Kolibri OS

Rev

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

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