Subversion Repositories Kolibri OS

Rev

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