Subversion Repositories Kolibri OS

Rev

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

Rev Author Line No. Line
180 heavyiron 1
use32
2
        db      'MENUET01'
3
        dd      1
4
        dd      start
5
        dd      i_end
6
memsize dd      mem
7
        dd      stacktop
8
        dd      0, 0
9
 
10
include 'lang.inc'
11
include 'font.inc'
12
include 'sort.inc'
13
include 'kglobals.inc'
14
include 'memalloc.inc'
15
include 'dialogs.inc'
16
include 'viewer.inc'
314 diamond 17
include 'tools.inc'
180 heavyiron 18
 
19
start:
20
        mov     eax, mem
21
        call    mf_init
283 diamond 22
        call    init_console
180 heavyiron 23
        call    draw_window
24
        push    66
25
        pop     eax
26
        push    1
27
        pop     ebx
28
        mov     ecx, ebx
29
        int     40h     ; set keyboard mode to scancodes
30
        mov     esi, def_left_dir
31
        mov     edi, panel1_dir
32
@@:
33
        lodsb
34
        stosb
35
        test    al, al
36
        jnz     @b
37
        mov     esi, def_right_dir
38
        mov     edi, panel2_dir
39
@@:
40
        lodsb
41
        stosb
42
        test    al, al
43
        jnz     @b
283 diamond 44
        mov     eax, 200
180 heavyiron 45
        mov     [panel1_nfa], eax
46
        mov     [panel2_nfa], eax
283 diamond 47
        mov     eax, 200*4 + 32 + 200*304
48
        push    eax
49
        call    mf_alloc
50
        mov     [panel1_files], eax
51
        pop     eax
52
        call    mf_alloc
53
        mov     [panel2_files], eax
54
        test    eax, eax
55
        jz      exit
56
        cmp     [panel1_files], eax
57
        jz      exit
180 heavyiron 58
        mov     [panel1_sortmode], 0    ; sort by name
59
        mov     [panel2_sortmode], 0
60
        mov     [num_screens], 1
61
        mov     eax, 8
62
        call    mf_alloc
63
        mov     [screens], eax
314 diamond 64
        test    eax, eax
65
        jz      exit
180 heavyiron 66
        mov     ecx, panels_vtable
67
        mov     [eax], ecx
68
        mov     [active_screen_vtable], ecx
69
        call    draw_keybar
70
        call    draw_cmdbar
314 diamond 71
        mov     [prev_dir], 0
180 heavyiron 72
        mov     ebp, panel1_data
73
        call    read_folder
74
        call    draw_panel
314 diamond 75
        mov     [bSilentFolderMode], 1
180 heavyiron 76
        mov     ebp, panel2_data
77
        call    read_folder
78
        call    draw_panel
79
event:
80
        push    10
81
        pop     eax
82
        int     40h
83
        dec     eax
84
        jz      redraw
85
        dec     eax
86
        jz      key
87
; button - we have only one button, close
88
exit:
89
        or      eax, -1
90
        int     40h
91
redraw:
283 diamond 92
; query kbd state from OS
93
        mov     al, 66
94
        push    3
95
        pop     ebx
96
        int     0x40
97
        and     eax, 0x3F
98
        cmp     al, [ctrlstate]
99
        mov     [ctrlstate], al
100
        jz      @f
101
        call    draw_keybar
102
@@:
180 heavyiron 103
        mov     al, 9
104
        mov     ebx, procinfo
105
        or      ecx, -1
106
        int     40h
107
; test if rolled up
108
; height of rolled up window is [skinh]+3
109
        mov     eax, [ebx+46]
110
        sub     eax, [skinh]
111
        cmp     eax, 5
112
        ja      @f
113
        mov     al, 12
114
        push    1
115
        pop     ebx
116
        int     0x40
117
        xor     eax, eax
118
; ebx, ecx, edi are ignored by function 0 after first redraw
314 diamond 119
        mov     edx, 0x53000000
180 heavyiron 120
        int     0x40
121
        mov     al, 12
122
        inc     ebx
123
        int     0x40
124
        jmp     event
125
@@:
126
        xor     ecx, ecx
127
        mov     eax, [ebx+42]
314 diamond 128
        mov     [wnd_width], eax
283 diamond 129
        sub     eax, 5*2-1
180 heavyiron 130
        jae     @f
131
        xor     eax, eax
132
@@:
133
        cdq
134
        mov     esi, font_width
135
        div     esi
136
        cmp     eax, 54
137
        jae     @f
138
        mov     al, 54
139
        mov     ch, 1
140
@@:
141
        cmp     eax, 255
142
        jbe     @f
143
        mov     eax, 255
144
        mov     ch, 1
145
@@:
146
        cmp     eax, [cur_width]
147
        mov     [cur_width], eax
148
        setnz   cl
149
        or      cl, ch
150
        test    edx, edx
314 diamond 151
        mov     [fill_width], edx
180 heavyiron 152
        setnz   ch
153
        mov     eax, [ebx+46]
314 diamond 154
        mov     [wnd_height], eax
180 heavyiron 155
        sub     eax, [skinh]
283 diamond 156
        sub     eax, 5-1
180 heavyiron 157
        jns     @f
158
        xor     eax, eax
159
@@:
160
        cdq
161
        mov     esi, font_height
162
        div     esi
163
        cmp     eax, 8
164
        jae     @f
165
        mov     al, 8
166
        mov     cl, 1
167
@@:
168
        cmp     eax, 255
169
        jbe     @f
170
        mov     eax, 255
171
        mov     cl, 1
172
@@:
314 diamond 173
        mov     [fill_height], edx
180 heavyiron 174
        cmp     eax, [cur_height]
175
        mov     [cur_height], eax
283 diamond 176
        jnz     .resize
177
        test    cl, cl
178
        jnz     .resize
179
        test    edx, edx
180
        setnz   cl
180 heavyiron 181
        or      cl, ch
182
        jz      @f
283 diamond 183
        test    byte [ebx+70], 1
184
        jnz     @f
185
.resize:
180 heavyiron 186
        push    67
187
        pop     eax
188
        or      ebx, -1
189
        or      ecx, -1
190
        mov     edx, [cur_width]
191
        imul    edx, font_width
283 diamond 192
        add     edx, 5*2-1
180 heavyiron 193
        mov     esi, [cur_height]
194
        imul    esi, font_height
195
        add     esi, [skinh]
283 diamond 196
        add     esi, 5-1
180 heavyiron 197
        int     40h
283 diamond 198
.resize_draw:
199
        call    init_console
200
;        call    draw_window
180 heavyiron 201
        call    draw_keybar
202
        mov     ebp, [active_screen_data]
203
        mov     eax, [active_screen_vtable]
204
        call    dword [eax+screen_vtable.OnRedraw]
205
        jmp     event
206
@@:
207
        call    draw_window
208
        jmp     event
283 diamond 209
alt_f9:
210
        cmp     [saved_width], -1
211
        jz      @f
212
        mov     eax, [saved_width]
213
        mov     [cur_width], eax
214
        or      [saved_width], -1
215
        mov     eax, [saved_height]
216
        mov     [cur_height], eax
217
        or      [saved_height], -1
218
        jmp     redraw.resize
219
@@:
220
        push    48
221
        pop     eax
222
        push    5
223
        pop     ebx
224
        int     0x40
225
        push    eax
226
        sub     eax, [esp+2]
227
        inc     eax
228
        movzx   eax, ax
229
        sub     eax, 10
230
        xor     edx, edx
231
        mov     ecx, font_width
232
        div     ecx
233
        xchg    [cur_width], eax
234
        mov     [saved_width], eax
235
        mov     eax, ebx
236
        shr     ebx, 16
237
        sub     eax, ebx
238
        sub     eax, 5-1
239
        sub     eax, [skinh]
240
        xor     edx, edx
241
        mov     ecx, font_height
242
        div     ecx
243
        xchg    [cur_height], eax
244
        mov     [saved_height], eax
245
        mov     ecx, ebx
246
        pop     ebx
247
        shr     ebx, 16
248
        mov     edx, [cur_width]
249
        imul    edx, font_width
250
        add     edx, 5*2-1
251
        mov     esi, [cur_height]
252
        imul    esi, font_height
253
        add     esi, [skinh]
254
        add     esi, 4
255
        push    67
256
        pop     eax
257
        int     0x40
258
        jmp     redraw.resize_draw
180 heavyiron 259
key:
260
        mov     al, 2
261
        int     40h
262
        test    al, al
263
        jnz     event
264
        xchg    al, ah
265
        cmp     al, 0xE0
266
        jnz     @f
267
        mov     [bWasE0], 1
268
        jmp     event
269
@@:
270
        xchg    ah, [bWasE0]
271
        mov     ebp, [active_screen_data]
272
        mov     edx, [active_screen_vtable]
273
        cmp     al, 0x1D
274
        jz      .ctrl_down
275
        cmp     al, 0x9D
276
        jz      .ctrl_up
277
        cmp     al, 0x2A
278
        jz      .lshift_down
279
        cmp     al, 0xAA
280
        jz      .lshift_up
281
        cmp     al, 0x36
282
        jz      .rshift_down
283
        cmp     al, 0xB6
284
        jz      .rshift_up
285
        cmp     al, 0x38
286
        jz      .alt_down
287
        cmp     al, 0xB8
288
        jz      .alt_up
289
        call    [edx+screen_vtable.OnKey]
290
        jmp     event
291
.ctrl_down:
292
        test    ah, ah
293
        jnz     .rctrl_down
294
        or      [ctrlstate], 4
295
        jmp     .keybar
296
.rctrl_down:
297
        or      [ctrlstate], 8
298
        jmp     .keybar
299
.ctrl_up:
300
        test    ah, ah
301
        jnz     .rctrl_up
302
        and     [ctrlstate], not 4
303
        jmp     .keybar
304
.rctrl_up:
305
        and     [ctrlstate], not 8
306
.keybar:
307
        call    draw_keybar
308
        call    draw_image
309
@@:     jmp     event
310
.lshift_down:
311
; ignore E0 2A sequence
312
; e.g. arrow keys with NumLock on generate sequence E0 2A E0 xx / E0 xx+80 E0 AA
313
; where xx is scancode, so we can safely ignore E0 2A
314
        test    ah, ah
315
        jnz     @b
316
        or      [ctrlstate], 1
317
        jmp     .keybar
318
.lshift_up:
319
; ignore E0 AA sequence
320
        test    ah, ah
321
        jnz     @b
322
        and     [ctrlstate], not 1
323
        jmp     .keybar
324
.rshift_down:
325
        or      [ctrlstate], 2
326
        jmp     .keybar
327
.rshift_up:
328
        and     [ctrlstate], not 2
329
        jmp     .keybar
330
.alt_down:
331
        test    ah, ah
332
        jnz     .ralt_down
333
        or      [ctrlstate], 0x10
334
        jmp     .keybar
335
.ralt_down:
336
        or      [ctrlstate], 0x20
337
        jmp     .keybar
338
.alt_up:
339
        test    ah, ah
340
        jnz     .ralt_up
341
        and     [ctrlstate], not 0x10
342
        jmp     .keybar
343
.ralt_up:
344
        and     [ctrlstate], not 0x20
345
        jmp     .keybar
346
 
347
process_ctrl_keys:
348
        cmp     byte [esi], 0
349
        jz      .done
350
        push    ecx
351
        cmp     al, [esi]
352
        jz      .check
353
.cont:
354
        pop     ecx
355
        add     esi, 8
356
        jmp     process_ctrl_keys
357
.done:
358
        stc
359
        ret
360
.check:
361
        mov     cl, 0
362
        call    .check_ctrlkey
363
        jc      .cont
364
        mov     cl, 2
365
        call    .check_ctrlkey
366
        jc      .cont
367
        mov     cl, 4
368
        call    .check_ctrlkey
369
        jc      .cont
370
        pop     ecx
371
        call    dword [esi+4]
372
        clc
373
        ret
374
.check_ctrlkey:
375
        push    eax edx
376
        movzx   edx, [ctrlstate]
377
        shr     edx, cl
378
        add     cl, cl
379
        movzx   eax, word [esi+2]
380
        shr     eax, cl
381
        and     eax, 15
382
        cmp     al, ctrlkey_tests_num
383
        jae     .fail
384
        xchg    eax, edx
385
        and     al, 3
386
        call    [ctrlkey_tests + edx*4]
387
        cmp     al, 1
388
        pop     edx eax
389
        ret
390
.fail:
391
        stc
392
        pop     edx eax
393
        ret
394
 
395
ctrlkey_test0:
396
        test    al, al
397
        setz    al
398
        ret
399
ctrlkey_test1:
400
        test    al, al
401
        setnp   al
402
        ret
403
ctrlkey_test2:
404
        cmp     al, 3
405
        setz    al
406
        ret
407
ctrlkey_test3:
408
        cmp     al, 1
409
        setz    al
410
        ret
411
ctrlkey_test4:
412
        cmp     al, 2
413
        setz    al
414
        ret
415
 
416
new_screen:
314 diamond 417
        call    xmalloc
180 heavyiron 418
        test    eax, eax
419
        jnz     @f
420
        ret
421
@@:
422
        mov     ebp, eax
423
        mov     ebx, [num_screens]
424
        inc     ebx
425
        shl     ebx, 3
426
        mov     eax, [screens]
314 diamond 427
        call    xrealloc
180 heavyiron 428
        test    eax, eax
429
        jnz     @f
430
        mov     eax, ebp
431
        call    mf_free
432
        xor     eax, eax
433
        ret
434
@@:
435
        mov     [screens], eax
436
        inc     [num_screens]
437
        mov     [eax+ebx-8], edx
438
        mov     [eax+ebx-4], ebp
439
        mov     eax, [num_screens]
440
        dec     eax
441
        mov     [active_screen], eax
442
        mov     [active_screen_vtable], edx
443
        mov     [active_screen_data], ebp
444
        jmp     draw_keybar
445
 
446
next_screen:
447
        mov     eax, [active_screen]
448
        inc     eax
449
        cmp     eax, [num_screens]
450
        jnz     @f
451
        xor     eax, eax
452
@@:     mov     [active_screen], eax
453
        jmp     change_screen
454
 
455
delete_active_screen:
456
        mov     edi, [screens]
457
        mov     eax, [active_screen]
458
        shl     eax, 3
459
        add     edi, eax
460
        push    dword [edi+4]
461
        lea     esi, [edi+8]
462
        mov     ecx, [num_screens]
463
        sub     ecx, [active_screen]
464
        dec     ecx
465
        add     ecx, ecx
466
        rep     movsd
467
        dec     [num_screens]
468
        mov     ebx, [num_screens]
469
        shl     ebx, 3
470
        mov     eax, [screens]
314 diamond 471
        call    mf_realloc      ; must succeed, because we decrease size
180 heavyiron 472
        pop     eax
473
        call    mf_free
474
        and     [active_screen], 0
475
 
476
change_screen:
477
        pusha
478
        mov     eax, [active_screen]
479
        mov     esi, [screens]
480
        mov     ebp, [esi+eax*8+4]
481
        mov     eax, [esi+eax*8]
482
        mov     [active_screen_vtable], eax
483
        mov     [active_screen_data], ebp
484
        call    draw_keybar
485
        call    [eax+screen_vtable.OnRedraw]
486
        popa
487
        ret
488
 
489
F12:
490
        mov     eax, [cur_width]
491
        add     eax, 8
492
        mov     esi, eax
493
        mul     [num_screens]
314 diamond 494
        call    xmalloc
180 heavyiron 495
        test    eax, eax
496
        jnz     @f
497
        ret
498
@@:
499
        mov     ebx, eax
500
        mov     edi, eax
501
        xor     ecx, ecx
502
.next:
503
        xor     eax, eax
504
        stosd
505
        inc     ecx
506
        cmp     ecx, [num_screens]
507
        jz      @f
508
        lea     eax, [edi+esi-4]
509
        mov     dword [edi-4], eax
510
@@:
511
        xor     eax, eax
512
        stosd
513
        dec     ecx
514
        jz      @f
515
        lea     eax, [edi-8]
516
        sub     eax, esi
517
        mov     dword [edi-4], eax
518
@@:
519
        mov     al, '&'
520
        stosb
521
        cmp     ecx, 36
522
        jae     .noletter
523
        lea     eax, [ecx+'0']
524
        cmp     al, '9'
525
        jbe     @f
526
        add     al, 7
527
@@:
528
        stosb
529
        mov     al, '.'
530
        stosb
531
        jmp     .letter_done
532
.noletter:
533
        mov     al, ' '
534
        stosb
535
        stosb
536
.letter_done:
537
        mov     al, ' '
538
        stosb
539
        pushad
540
        mov     eax, [screens]
541
        mov     ebp, [eax+ecx*8+4]
542
        mov     eax, [eax+ecx*8]
543
        mov     ecx, [cur_width]
544
        sub     ecx, 12
545
        call    [eax + screen_vtable.getname]
546
        popad
547
        sub     edi, 4
548
        add     edi, [cur_width]
549
        inc     ecx
550
        cmp     ecx, [num_screens]
551
        jb      .next
552
        mov     eax, [active_screen]
553
        mul     esi
554
        add     eax, ebx
555
        push    1
556
        push    aScreens
557
        push    eax
558
        call    menu
559
        cmp     eax, -1
560
        jz      @f
561
        sub     eax, ebx
562
        div     esi
563
        mov     [active_screen], eax
564
@@:
565
        mov     eax, ebx
566
        call    mf_free
567
        jmp     change_screen
568
 
569
panels_OnKey:
570
        mov     ebp, [active_panel]
571
        mov     ecx, [ebp + panel1_index - panel1_data]
572
        mov     edx, [ebp + panel1_start - panel1_data]
573
        mov     ebx, [ebp + panel1_colst - panel1_data]
574
        add     ebx, edx
575
        mov     esi, panels_ctrlkeys
576
        jmp     process_ctrl_keys
577
.ret:
578
        ret
579
.up:
580
        jecxz   .ret
581
        dec     ecx
582
        mov     [ebp + panel1_index - panel1_data], ecx
583
        cmp     ecx, edx
584
        jae     .done_redraw
585
        mov     [ebp + panel1_start - panel1_data], ecx
586
.done_redraw:
587
;        call    draw_panel
588
;        ret
589
        jmp     draw_panel
590
.down:
591
        inc     ecx
592
        cmp     ecx, [ebp + panel1_numfiles - panel1_data]
593
        jae     .ret
594
        mov     [ebp + panel1_index - panel1_data], ecx
595
        cmp     ecx, ebx
596
        jb      .done_redraw
597
        sub     ecx, [ebp + panel1_colst - panel1_data]
598
        inc     ecx
599
        mov     [ebp + panel1_start - panel1_data], ecx
600
        jmp     .done_redraw
601
.left:
602
        jecxz   .ret
603
        sub     ecx, [ebp + panel1_colsz - panel1_data]
604
        jae     @f
605
        xor     ecx, ecx
606
@@:
607
        mov     [ebp + panel1_index - panel1_data], ecx
608
        cmp     ecx, edx
609
        jae     .done_redraw
610
        sub     edx, [ebp + panel1_colsz - panel1_data]
611
        jae     @f
612
        xor     edx, edx
613
@@:
614
        mov     [ebp + panel1_start - panel1_data], edx
615
        jmp     .done_redraw
616
.right:
617
        add     ecx, [ebp + panel1_colsz - panel1_data]
618
        cmp     ecx, [ebp + panel1_numfiles - panel1_data]
619
        jb      @f
620
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
621
        dec     ecx
622
@@:
623
        mov     [ebp + panel1_index - panel1_data], ecx
624
        cmp     ecx, ebx
625
        jb      .done_redraw
626
        add     ebx, [ebp + panel1_colsz - panel1_data]
627
        cmp     ebx, [ebp + panel1_numfiles - panel1_data]
628
        jbe     @f
629
        mov     ebx, [ebp + panel1_numfiles - panel1_data]
630
@@:
631
        sub     ebx, [ebp + panel1_colst - panel1_data]
632
        jae     @f
633
        xor     ebx, ebx
634
@@:
635
        mov     [ebp + panel1_start - panel1_data], ebx
636
        jmp     .done_redraw
637
.tab:
638
        xor     [active_panel], panel1_data xor panel2_data
639
        call    draw_cmdbar
640
        call    draw_panel
641
        mov     ebp, [active_panel]
642
        jmp     .done_redraw
643
.home:
644
        and     [ebp + panel1_start - panel1_data], 0
645
        and     [ebp + panel1_index - panel1_data], 0
646
        jmp     .done_redraw
647
.end:
648
        mov     eax, [ebp + panel1_numfiles - panel1_data]
649
        dec     eax
650
        mov     [ebp + panel1_index - panel1_data], eax
651
        inc     eax
652
        sub     eax, [ebp + panel1_colst - panel1_data]
653
        jae     @f
654
        xor     eax, eax
655
@@:
656
        mov     [ebp + panel1_start - panel1_data], eax
657
        jmp     .done_redraw
658
.enter:
183 diamond 659
        call    get_curfile_folder_entry
180 heavyiron 660
        test    byte [ecx], 10h
661
        jnz     .enter_folder
283 diamond 662
        call    find_extension
663
        jc      .run_app
664
        jnz     .run_app
180 heavyiron 665
.run_association:
283 diamond 666
        mov     eax, [edi+4]
667
.run_association2:
180 heavyiron 668
        mov     [execparams], execdata
669
        mov     [execptr], eax
670
        jmp     .dorun
671
.run_app:
672
        mov     [execptr], execdata
673
        and     [execparams], 0
674
.dorun:
675
        lea     esi, [ebp + panel1_dir - panel1_data]
676
        mov     edi, execdata
677
@@:
678
        lodsb
679
        test    al, al
680
        jz      @f
681
        stosb
321 diamond 682
        cmp     edi, execdataend-1
683
        jae     .bigfilename
180 heavyiron 684
        jmp     @b
685
@@:
686
        lea     esi, [ecx+40]
687
        mov     al, '/'
688
        stosb
689
@@:
690
        lodsb
691
        stosb
321 diamond 692
        cmp     edi, execdataend
693
        ja      .bigfilename
180 heavyiron 694
        test    al, al
695
        jnz     @b
283 diamond 696
; for fasm call - special handling, because
697
; 1) fasm command line convention is different : fasm infile,outfile[,path] rather than tinypad infile
698
; 2) fasm will probably create new file in directory, so we want to reload panel data
699
        xor     edx, edx
700
        cmp     [execparams], edx
701
        jz      .nofasm
702
        cmp     [execptr], fasm
703
        jnz     .nofasm
321 diamond 704
        cmp     edi, execdata+(execdataend-execdata)/2
705
        ja      .bigfilename
283 diamond 706
        mov     esi, execdata
707
@@:
708
        lodsb
709
        stosb
710
        test    al, al
711
        jnz     @b
712
        mov     byte [esi-1], ','
713
        inc     edx
714
; output file: no extension if input file has extension, '.bin' otherwise
715
        push    edi
716
@@:
717
        dec     edi
718
        cmp     byte [edi], '.'
719
        jz      .ptfound
720
        cmp     byte [edi], '/'
721
        jnz     @b
722
        pop     edi
321 diamond 723
        cmp     edi, execdataend-4
724
        ja      .bigfilename
283 diamond 725
        mov     dword [edi-1], '.bin'
726
        mov     byte [edi+3], 0
727
        jmp     .nofasm
728
.ptfound:
729
        mov     byte [edi], 0
730
        pop     edi
731
.nofasm:
321 diamond 732
        mov     ebx, execinfo
733
; if command line is more than 256 symbols, the kernel will truncate it
734
; we does not want this!
735
; N.B. We know that command line is either NULL or execdata, which is always ASCIIZ string,
736
;      but can be up to 1023 symbols
737
        mov     esi, [ebx+8]
738
        test    esi, esi
739
        jz      .cmdlinelenok
740
@@:
741
        lodsb
742
        test    al, al
743
        jnz     @b
744
        sub     esi, [ebx+8]
745
        dec     esi
746
        cmp     esi, 256
747
        ja      .bigcmdline
748
.cmdlinelenok:
180 heavyiron 749
        push    70
750
        pop     eax
751
        int     40h
321 diamond 752
        neg     eax
753
        js      @f
754
        push    aContinue
755
        mov     esi, esp
756
        call    get_error_msg
757
        push    eax
758
        push    aRunError
759
        mov     eax, esp
760
        push    esi
761
        push    1
762
        push    eax
763
        push    2
764
        push    -1
765
        push    -1
766
        push    aError
767
        call    SayErr
768
        add     esp, 3*4
769
        ret
770
@@:
283 diamond 771
        test    edx, edx
772
        jz      @f
773
        push    5
774
        pop     eax
775
        push    20
776
        pop     ebx
777
        int     0x40
778
        jmp     .ctrl_r
779
@@:
180 heavyiron 780
        ret
321 diamond 781
.bigfilename3:
782
        pop     esi
783
.bigfilename2:
784
        pop     esi
785
.bigfilename:
786
        mov     eax, aFileNameTooBig
787
@@:
788
        push    aContinue
789
        mov     esi, esp
790
        push    eax
791
        mov     eax, esp
792
        push    esi
793
        push    1
794
        push    eax
795
        push    1
796
        push    -1
797
        push    -1
798
        push    aError
799
        call    SayErr
800
        add     esp, 2*4
801
        ret
802
.bigcmdline:
803
        mov     eax, aCmdLineTooBig
804
        jmp     @b
805
.bigfoldername2:
806
        mov     byte [ecx], 0
807
.bigfoldername:
808
        mov     eax, aFolderNameTooBig
809
        jmp     @b
810
.copytoself:
811
        mov     eax, aCannotCopyToSelf
812
        jmp     @b
180 heavyiron 813
.enter_folder:
814
        lea     esi, [ecx+40]
815
        cmp     word [esi], '..'
816
        jnz     @f
817
        cmp     byte [esi+2], 0
818
        jz      .dotdot
819
@@:
314 diamond 820
        push    esi
821
        lea     esi, [ebp + panel1_dir - panel1_data]
822
        mov     edi, prev_dir
823
@@:
824
        lodsb
825
        stosb
826
        test    al, al
827
        jnz     @b
828
        lea     edi, [esi-1]
321 diamond 829
        lea     edx, [ebp + panel1_dir - panel1_data + 1024]
830
        cmp     esi, edx
314 diamond 831
        pop     esi
321 diamond 832
        jae     .bigfoldername
833
        mov     ecx, edi
180 heavyiron 834
        mov     al, '/'
835
        cmp     [edi-1], al
836
        jz      @f
837
        stosb
838
@@:
839
        lodsb
321 diamond 840
        cmp     edi, edx
841
        jae     .bigfoldername2
180 heavyiron 842
        stosb
843
        test    al, al
844
        jnz     @b
845
.reread:
846
        call    read_folder
847
.done_cmdbar:
848
        call    draw_cmdbar
849
        jmp     .done_redraw
850
.dotdot:
851
        lea     edi, [ebp + panel1_dir - panel1_data]
852
        mov     al, 0
853
        or      ecx, -1
854
        repnz   scasb
855
        dec     edi
856
        mov     al, '/'
857
        std
858
        repnz   scasb
859
        cld
860
        inc     edi
861
        mov     byte [edi], 0
862
        inc     edi
863
        push    edi
864
        call    read_folder
865
        pop     edi
866
        mov     edx, [ebp + panel1_files - panel1_data]
867
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
868
.scanloop:
869
        mov     esi, [edx]
321 diamond 870
        add     esi, 40
180 heavyiron 871
        push    esi edi
872
@@:
873
        lodsb
874
        call    match_symbol
875
        jnz     @f
876
        inc     edi
877
        test    al, al
878
        jnz     @b
879
@@:
880
        pop     edi esi
881
        jz      .scanfound
882
        add     edx, 4
883
        loop    .scanloop
884
        jmp     .scandone
885
.scanfound:
886
        sub     edx, [ebp + panel1_files - panel1_data]
887
        shr     edx, 2
888
        mov     [ebp + panel1_index - panel1_data], edx
889
        sub     edx, [ebp + panel1_colst - panel1_data]
890
        jb      .scandone
891
        inc     edx
892
        mov     [ebp + panel1_start - panel1_data], edx
893
.scandone:
894
        jmp     .done_cmdbar
895
.ctrl_f39:
896
        sub     al, 0x3D
897
        add     al, al
898
        mov     ah, [ebp + panel1_sortmode - panel1_data]
899
        and     ah, 0xFE
900
        cmp     al, ah
901
        jnz     @f
902
        and     [ebp + panel1_sortmode - panel1_data], 1
903
        or      al, [ebp + panel1_sortmode - panel1_data]
904
        xor     al, 1
905
@@:
906
        mov     [ebp + panel1_sortmode - panel1_data], al
907
        mov     eax, [ebp + panel1_index - panel1_data]
908
        mov     ecx, [ebp + panel1_files - panel1_data]
909
        push    dword [ecx+eax*4]
910
        push    ecx
911
        call    sort_files
912
        pop     edi
913
        pop     eax
914
        or      ecx, -1
915
        repnz   scasd
916
        not     ecx
917
        dec     ecx
918
        mov     [ebp + panel1_index - panel1_data], ecx
919
        sub     ecx, [ebp + panel1_start - panel1_data]
920
        jb      .less_start
921
        sub     ecx, [ebp + panel1_colst - panel1_data]
922
        jae     .gr_end
923
@@:     jmp     .done_redraw
924
.less_start:
925
        add     [ebp + panel1_start - panel1_data], ecx
926
        jmp     @b
927
.gr_end:
928
        inc     ecx
929
        add     [ebp + panel1_start - panel1_data], ecx
930
        jmp     @b
931
.alt_f12:
932
        mov     ebp, panel1_data
933
        cmp     al, 0x3B
934
        jz      @f
935
        mov     ebp, panel2_data
936
@@:
937
; get drives list
938
        mov     ebx, dirinfo
939
        mov     [ebx+dirinfo.size-dirinfo], 1
940
        mov     [ebx+dirinfo.dirdata-dirinfo], driveinfo
941
        mov     [ebx+dirinfo.name-dirinfo], tmpname
942
        mov     byte [tmpname], '/'
943
        xor     ecx, ecx
944
.drive_loop_e:
945
        mov     byte [tmpname+1], 0
946
        push    70
947
        pop     eax
948
        int     40h
949
        mov     ebx, dirinfo
950
        test    eax, eax
951
        jnz     .drive_loop_e_done
952
        mov     esi, driveinfo+32+40
953
        mov     edi, tmpname+1
954
@@:
955
        lodsb
956
        stosb
957
        test    al, al
958
        jnz     @b
959
        push    [ebx+dirinfo.first-dirinfo]
960
        and     [ebx+dirinfo.first-dirinfo], 0
961
.drive_loop_i:
962
        push    70
963
        pop     eax
964
        int     40h
965
        mov     ebx, dirinfo
966
        test    eax, eax
967
        jnz     .drive_loop_i_done
968
        mov     eax, 32+8
314 diamond 969
        call    xmalloc
180 heavyiron 970
        test    eax, eax
971
        jz      .drive_loop_i_done
972
        jecxz   @f
973
        mov     [ecx], eax
974
@@:
975
        and     dword [eax], 0
976
        mov     [eax+4], ecx
977
        mov     ecx, eax
978
        lea     edi, [eax+8]
979
        mov     esi, tmpname
980
@@:
981
        lodsb
982
        test    al, al
983
        jz      @f
984
        stosb
985
        jmp     @b
986
@@:
987
        mov     esi, driveinfo+32+40
988
        mov     al, '/'
989
        stosb
990
@@:
991
        lodsb
992
        stosb
993
        test    al, al
994
        jnz     @b
995
        inc     [ebx+dirinfo.first-dirinfo]
996
        jmp     .drive_loop_i
997
.drive_loop_i_done:
998
        pop     [ebx+dirinfo.first-dirinfo]
999
        inc     [ebx+dirinfo.first-dirinfo]
1000
        jmp     .drive_loop_e
1001
.drive_loop_e_done:
1002
        and     [ebx+dirinfo.first-dirinfo], 0
1003
        lea     edi, [ebp + panel1_dir - panel1_data]
1004
.find_cur_drive_loop:
1005
        push    edi
1006
        lea     esi, [ecx+8]
1007
@@:
1008
        lodsb
1009
        test    al, al
1010
        jz      .cur_drive_found
1011
        call    match_symbol
1012
        jnz     @f
1013
        inc     edi
1014
        jmp     @b
1015
@@:
1016
        cmp     dword [ecx+4], 0
1017
        jz      @f
1018
        pop     edi
1019
        mov     ecx, [ecx+4]
1020
        jmp     .find_cur_drive_loop
1021
@@:
1022
.cur_drive_found:
1023
        pop     edi
1024
        push    1
1025
        push    aDrive
1026
        push    ecx
1027
        mov     eax, [ebp + panel1_height - panel1_data]
1028
        sub     eax, 2
1029
        jae     @f
1030
        add     eax, 2
1031
@@:
1032
        push    eax
1033
        push    [ebp + panel1_width - panel1_data]
1034
        push    [ebp + panel1_top - panel1_data]
1035
        push    [ebp + panel1_left - panel1_data]
1036
        call    menu_centered_in
1037
        cmp     eax, -1
1038
        jz      .ret2
1039
        lea     esi, [eax+8]
1040
        lea     edi, [ebp + panel1_dir - panel1_data]
314 diamond 1041
        push    ecx esi edi
1042
        mov     esi, edi
1043
        mov     edi, prev_dir
1044
        mov     ecx, 1024/4
1045
        rep     movsd
1046
        pop     edi esi ecx
180 heavyiron 1047
@@:
1048
        lodsb
1049
        stosb
1050
        test    al, al
1051
        jnz     @b
1052
@@:
1053
        cmp     dword [ecx+4], 0
1054
        jz      @f
1055
        mov     ecx, [ecx+4]
1056
        jmp     @b
1057
@@:
1058
        mov     eax, ecx
1059
        mov     ecx, [ecx]
1060
        call    mf_free
1061
        test    ecx, ecx
1062
        jnz     @b
1063
        call    read_folder
1064
        jmp     .done_redraw
283 diamond 1065
.shift_f5:
1066
        call    get_curfile_folder_entry
1067
        lea     esi, [ecx+40]
1068
        mov     edi, CopyDestEditBuf
1069
        mov     eax, CopyDestEditBuf.length
1070
        stosd
1071
        scasd
1072
        xor     eax, eax
1073
        stosd
1074
        mov     edx, edi
1075
@@:
1076
        lodsb
1077
        test    al, al
1078
        jz      .f5_common
1079
        stosb
1080
        jmp     @b
1081
.f5:
1082
        mov     edi, CopyDestEditBuf
1083
        mov     eax, CopyDestEditBuf.length
1084
        stosd
1085
        scasd
1086
        xor     eax, eax
1087
        stosd
1088
        mov     edx, edi
1089
        mov     esi, ebp
1090
        xor     esi, panel1_data xor panel2_data
1091
        add     esi, panel1_dir - panel1_data
1092
@@:
1093
        lodsb
1094
        test    al, al
1095
        jz      @f
321 diamond 1096
        cmp     edi, CopyDestEditBuf+12+511
1097
        jae     .bigfoldername
283 diamond 1098
        stosb
1099
        jmp     @b
1100
@@:
1101
        mov     al, '/'
1102
        stosb
1103
.f5_common:
1104
        mov     byte [edi], 0
1105
        sub     edi, edx
1106
        mov     [edx-8], edi
1107
        mov     edi, CopySourceTextBuf
1108
        mov     esi, aCopy1
1109
@@:
1110
        lodsb
1111
        test    al, al
1112
        jz      @f
1113
        stosb
1114
        jmp     @b
1115
@@:
1116
        call    get_curfile_folder_entry
1117
        lea     esi, [ecx+40]
1118
        lea     eax, [esi+1]
1119
@@:
1120
        inc     esi
1121
        cmp     byte [esi-1], 0
1122
        jnz     @b
1123
        sub     esi, eax
1124
        xchg    eax, esi
1125
        dec     esi
1126
        mov     edx, [cur_width]
1127
        sub     edx, 50
1128
        sub     eax, edx
1129
        jbe     @f
1130
        add     esi, eax
1131
        mov     al, '.'
1132
        stosb
1133
        stosb
1134
        stosb
1135
@@:
1136
        lodsb
1137
        test    al, al
1138
        jz      @f
1139
        stosb
1140
        jmp     @b
1141
@@:
1142
        mov     esi, aCopy2
1143
@@:
1144
        lodsb
1145
        stosb
1146
        test    al, al
1147
        jnz     @b
1148
        mov     ebx, copy_dlgdata
1149
        mov     eax, [cur_width]
1150
        sub     eax, 12
1151
        mov     [ebx + dlgtemplate.width], eax
1152
        dec     eax
1153
        dec     eax
1154
        mov     [ebx - copy_dlgdata + copy_dlgdata.width2], eax
1155
        mov     [ebx - copy_dlgdata + copy_dlgdata.width3], eax
1156
        shr     eax, 1
1157
        dec     eax
1158
        dec     eax
1159
        mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x2], eax
1160
        sub     eax, aCopyLength-1
1161
        mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x1], eax
1162
        add     eax, aCopyLength+3
1163
        mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x1], eax
1164
        add     eax, aCancelBLength - 1
1165
        mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x2], eax
1166
        mov     byte [ebx - copy_dlgdata + copy_dlgdata.flags0], 0xC
1167
        and     byte [ebx - copy_dlgdata + copy_dlgdata.flags1], not 4
1168
        and     byte [ebx - copy_dlgdata + copy_dlgdata.flags2], not 4
1169
        push    ebx
1170
        call    DialogBox
1171
        cmp     eax, copy_dlgdata.copy_btn
1172
        jnz     .ret2
1173
; Копируем
1174
        mov     esi, CopyDestEditBuf+12
1175
        mov     edi, esi
1176
        xor     eax, eax
1177
        or      ecx, -1
1178
        repnz   scasb
1179
        dec     edi
1180
        dec     edi
1181
        cmp     edi, esi
1182
        jb      .ret2
1183
        cmp     byte [edi], '/'
1184
        jnz     @f
1185
; Наличие/отсутствие заканчивающего слэша важно только для копирования папок
1186
        cmp     edi, esi
1187
        jz      @f
1188
        mov     byte [edi], 0
1189
        dec     edi
1190
@@:
1191
; Если путь не начинается со слэша, считаем его относительно текущей папки
1192
        cmp     byte [esi], '/'
1193
        jz      .copy_absolute_path
1194
        push    esi
1195
        push    edi
1196
        lea     edi, [ebp + panel1_dir - panel1_data]
1197
        or      ecx, -1
1198
        xor     eax, eax
1199
        repnz   scasb
1200
        not     ecx
1201
        pop     edi
321 diamond 1202
        push    edi
1203
        add     edi, ecx
1204
        cmp     edi, CopyDestEditBuf+12+513
1205
        pop     edi
1206
        jb      @f
1207
        pop     esi
1208
        jmp     .bigfilename
1209
@@:
283 diamond 1210
        lea     edx, [edi+2]
1211
        sub     edx, esi
1212
        lea     edi, [edi+ecx+1]
1213
        xchg    ecx, edx
1214
        std
1215
        lea     esi, [esi+ecx-1]
1216
        rep     movsb
1217
        cld
1218
        pop     edi
1219
        lea     esi, [ebp + panel1_dir - panel1_data]
1220
        push    edi
1221
        mov     ecx, edx
1222
        rep     movsb
1223
        mov     byte [edi-1], '/'
1224
        pop     esi
1225
.copy_absolute_path:
1226
; Получаем атрибуты назначения
1227
        mov     cl, 0x10
1228
        xor     eax, eax
1229
        mov     edi, esi
1230
.countslashloop:
1231
        cmp     byte [edi], '/'
1232
        jnz     @f
1233
        inc     eax
1234
@@:
1235
        inc     edi
1236
        cmp     byte [edi], 0
1237
        jnz     .countslashloop
1238
        cmp     eax, 2
1239
        jbe     @f
1240
        mov     ebx, attrinfo
1241
        mov     [attrinfo.attr], 0
1242
        mov     [ebx + attrinfo.name - attrinfo], esi
1243
        push    70
1244
        pop     eax
1245
        int     0x40
1246
        mov     cl, byte [attrinfo.attr]
1247
@@:
1248
        test    cl, 0x10
1249
        jz      .copyfile
1250
; Нам подсунули каталог назначения, дописываем имя файла
321 diamond 1251
        cmp     edi, CopyDestEditBuf+12+513
1252
        jae     .bigfilename
283 diamond 1253
        mov     al, '/'
1254
        stosb
1255
        push    esi
1256
        call    get_curfile_folder_entry
1257
        lea     esi, [ecx+40]
1258
@@:
1259
        lodsb
321 diamond 1260
        cmp     edi, CopyDestEditBuf+12+513
1261
        jae     .bigfilename2
283 diamond 1262
        stosb
1263
        test    al, al
1264
        jnz     @b
1265
        pop     esi
1266
.copyfile:
1267
; Имя исходного файла
1268
        push    esi
1269
        lea     esi, [ebp+panel1_dir-panel1_data]
1270
        mov     edi, saved_file_name
1271
        push    edi
1272
@@:
1273
        lodsb
1274
        test    al, al
1275
        jz      @f
1276
        stosb
1277
        jmp     @b
1278
@@:
1279
        mov     al, '/'
1280
        stosb
1281
        call    get_curfile_folder_entry
1282
        lea     esi, [ecx+40]
1283
@@:
1284
        lodsb
321 diamond 1285
        cmp     edi, saved_file_name+1024
1286
        jae     .bigfilename3
283 diamond 1287
        stosb
1288
        test    al, al
1289
        jnz     @b
1290
        pop     esi
1291
        pop     edi
1292
; Нельзя скопировать файл поверх самого себя!
1293
        push    esi edi
1294
        call    strcmpi
1295
        pop     edi esi
321 diamond 1296
        jz      .copytoself
283 diamond 1297
; Собственно, копируем
1298
; esi->source name, edi->destination name
1299
        mov     [writeinfo.code], 2
1300
        mov     [writeinfo.name], edi
1301
        and     dword [writeinfo.first], 0
1302
        and     dword [writeinfo.first+4], 0
1303
        mov     [writeinfo.data], copy_buffer
1304
        mov     ebx, readinfo
1305
        and     dword [ebx+readinfo.first-readinfo], 0
1306
        and     dword [ebx+readinfo.first+4-readinfo], 0
1307
        mov     [ebx+readinfo.size-readinfo], copy_buffer_size
1308
        mov     [ebx+readinfo.data-readinfo], copy_buffer
1309
        mov     [ebx+readinfo.name-readinfo], esi
1310
.copyloop:
1311
        mov     ebx, readinfo
1312
        push    70
1313
        pop     eax
1314
        int     0x40
321 diamond 1315
        test    eax, eax
1316
        jz      .copyreadok
1317
        cmp     eax, 6
1318
        jz      .copyreadok
1319
        push    esi
1320
        push    aCannotReadFile
1321
        call    get_error_msg
1322
        push    eax
1323
        mov     eax, esp
1324
        push    RetryOrCancelBtn
1325
        push    2
1326
        push    eax
1327
        push    3
1328
        push    -1
1329
        push    -1
1330
        push    aError
1331
        call    SayErr
1332
        add     esp, 3*4
1333
        test    eax, eax
1334
        jz      .copyloop
1335
        jmp     .copyfailed
1336
.copyreadok:
283 diamond 1337
        test    ebx, ebx
1338
        jz      .copydone
1339
        add     dword [readinfo.first], ebx
1340
        adc     dword [readinfo.first+4], 0
1341
        mov     [writeinfo.size], ebx
321 diamond 1342
.copywrite:
283 diamond 1343
        mov     ebx, writeinfo
1344
        push    70
1345
        pop     eax
1346
        int     0x40
321 diamond 1347
        test    eax, eax
1348
        jz      .copywriteok
1349
        push    edi
1350
        push    aCannotWriteFile
1351
        call    get_error_msg
1352
        push    eax
1353
        mov     eax, esp
1354
        push    RetryOrCancelBtn
1355
        push    2
1356
        push    eax
1357
        push    3
1358
        push    -1
1359
        push    -1
1360
        push    aError
1361
        call    SayErr
1362
        add     esp, 3*4
1363
        test    eax, eax
1364
        jz      .copywrite
1365
        jmp     .copyfailed
1366
.copywriteok:
283 diamond 1367
        mov     ecx, [writeinfo.size]
1368
        add     dword [writeinfo.first], ecx
1369
        adc     dword [writeinfo.first+4], 0
1370
        mov     [writeinfo.code], 3
1371
        cmp     ecx, copy_buffer_size
1372
        jz      .copyloop
1373
.copydone:
1374
        push    ebp
1375
        call    .ctrl_r
1376
        pop     ebp
1377
        xor     ebp, panel1_data xor panel2_data
1378
        jmp     .ctrl_r
321 diamond 1379
.copyfailed:
1380
        cmp     [bConfirmDeleteIncomplete], 0
1381
        jz      @f
1382
        cmp     [writeinfo.code], 2
1383
        jz      .copydone
1384
        push    aIncompleteFile
1385
        mov     eax, esp
1386
        push    DeleteOrKeepBtn
1387
        push    2
1388
        push    eax
1389
        push    1
1390
        push    -1
1391
        push    -1
1392
        push    aCopyCaption
1393
        call    SayErr
1394
        add     esp, 4
1395
        test    eax, eax
1396
        jnz     .copydone
1397
@@:
1398
        mov     ebx, delinfo
1399
        push    dword [ebx+21]
1400
        mov     dword [ebx+21], edi
1401
        push    70
1402
        pop     eax
1403
        int     0x40
1404
; ignore errors
1405
        pop     dword [delinfo+21]
1406
        jmp     .copydone
283 diamond 1407
 
180 heavyiron 1408
.f3:
1409
        call    view_file
1410
.ret2:
1411
        ret
1412
.f8:
183 diamond 1413
        call    get_curfile_folder_entry
1414
        cmp     [bConfirmDelete], 0
1415
        jz      .f8_allowed
1416
        mov     ebx, f8_confirm_dlgdata
1417
        mov     esi, aConfirmDeleteText
1418
        mov     edi, aConfirmDeleteTextBuf
1419
@@:
1420
        lodsb
1421
        stosb
1422
        test    al, al
1423
        jnz     @b
1424
        dec     edi
1425
        mov     esi, aDeleteFolder
1426
        test    byte [ecx], 10h
1427
        jnz     @f
1428
        mov     esi, aDeleteFile
1429
@@:
1430
        lodsb
1431
        stosb
1432
        test    al, al
1433
        jnz     @b
1434
        lea     esi, [ecx+40]
1435
        mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.name], esi
1436
        or      eax, -1
1437
@@:
1438
        inc     eax
1439
        cmp     byte [eax+esi], 0
1440
        jnz     @b
1441
        sub     edi, aConfirmDeleteTextBuf+1
1442
        cmp     eax, edi
1443
        jae     @f
1444
        mov     eax, edi
1445
@@:
1446
        inc     eax
1447
        inc     eax
1448
        mov     edx, [cur_width]
1449
        sub     edx, 8
1450
        cmp     eax, edx
1451
        jbe     @f
1452
        mov     eax, edx
1453
@@:
1454
        mov     [ebx + dlgtemplate.width], eax
1455
        dec     eax
1456
        dec     eax
1457
        mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.width2], eax
1458
        mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.width3], eax
1459
        shr     eax, 1
1460
        mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.del_x2], eax
1461
        sub     eax, aDeleteLength-1
1462
        mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.del_x1], eax
1463
        add     eax, aDeleteLength
1464
        mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.cnl_x1], eax
1465
        add     eax, aCancelLength - 1
1466
        mov     [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.cnl_x2], eax
1467
        or      byte [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.flags1], 4
1468
        and     byte [ebx - f8_confirm_dlgdata + f8_confirm_dlgdata.flags2], not 4
1469
        push    ebx
1470
        call    DialogBox
1471
        cmp     eax, f8_confirm_dlgdata.del_btn
1472
        jnz     .ret2
1473
.f8_allowed:
180 heavyiron 1474
        lea     esi, [ebp + panel1_dir - panel1_data]
1475
        mov     edi, execdata
1476
@@:
1477
        lodsb
1478
        test    al, al
1479
        jz      @f
1480
        stosb
1481
        jmp     @b
1482
@@:
1483
        lea     esi, [ecx+40]
1484
        mov     al, '/'
1485
        stosb
1486
@@:
1487
        lodsb
321 diamond 1488
        cmp     edi, execdataend
1489
        jae     .bigfilename
180 heavyiron 1490
        stosb
1491
        test    al, al
1492
        jnz     @b
321 diamond 1493
.retrydel:
180 heavyiron 1494
        push    70
1495
        pop     eax
1496
        mov     ebx, delinfo
1497
        int     0x40
321 diamond 1498
        test    eax, eax
1499
        jz      .ctrl_r
1500
        push    execdata
1501
        push    aCannotDeleteFolder
1502
        call    get_curfile_folder_entry
1503
        test    byte [ecx], 10h
1504
        jnz     @f
1505
        mov     dword [esp], aCannotDeleteFile
1506
@@:
1507
        call    get_error_msg
1508
        push    eax
1509
        mov     eax, esp
1510
        push    RetryOrCancelBtn
1511
        push    2
1512
        push    eax
1513
        push    3
1514
        push    -1
1515
        push    -1
1516
        push    aError
1517
        call    SayErr
1518
        add     esp, 3*4
1519
        test    eax, eax
1520
        jz      .retrydel
180 heavyiron 1521
.ctrl_r:
1522
; Rescan panel
1523
;       call    read_folder
1524
;       jmp     .done_redraw
1525
        mov     eax, [ebp + panel1_index - panel1_data]
1526
        push    eax
183 diamond 1527
        call    get_curfile_name
283 diamond 1528
        mov     esi, ecx
180 heavyiron 1529
        mov     edi, saved_file_name
1530
@@:
1531
        lodsb
1532
        stosb
1533
        test    al, al
1534
        jnz     @b
1535
        push    [ebp + panel1_start - panel1_data]
1536
        call    read_folder
1537
        pop     [ebp + panel1_start - panel1_data]
1538
        pop     [ebp + panel1_index - panel1_data]
1539
        or      eax, -1
1540
@@:
1541
        inc     eax
1542
        cmp     eax, [ebp + panel1_numfiles - panel1_data]
1543
        jae     .ctrl_r.notfound
1544
        mov     ecx, [ebp + panel1_files - panel1_data]
321 diamond 1545
        mov     esi, [ecx+eax*4]
1546
        add     esi, 40
180 heavyiron 1547
        mov     edi, saved_file_name
1548
        call    strcmpi
1549
        jnz     @b
1550
.ctrl_r.found:
1551
        mov     [ebp + panel1_index - panel1_data], eax
1552
.ctrl_r.notfound:
1553
        mov     eax, [ebp + panel1_numfiles - panel1_data]
1554
        dec     eax
1555
        cmp     [ebp + panel1_index - panel1_data], eax
1556
        jbe     @f
1557
        mov     [ebp + panel1_index - panel1_data], eax
1558
@@:
1559
        mov     eax, [ebp + panel1_index - panel1_data]
1560
        cmp     [ebp + panel1_start - panel1_data], eax
1561
        jbe     @f
1562
        mov     [ebp + panel1_start - panel1_data], eax
1563
@@:
1564
        inc     eax
1565
        sub     eax, [ebp + panel1_colst - panel1_data]
1566
        jae     @f
1567
        xor     eax, eax
1568
@@:
1569
        cmp     [ebp + panel1_start - panel1_data], eax
1570
        jae     @f
1571
        mov     [ebp + panel1_start - panel1_data], eax
1572
@@:
1573
        mov     eax, [ebp + panel1_numfiles - panel1_data]
1574
        sub     eax, [ebp + panel1_colst - panel1_data]
1575
        jbe     @f
1576
        cmp     [ebp + panel1_start - panel1_data], eax
1577
        jbe     @f
1578
        mov     [ebp + panel1_start - panel1_data], eax
1579
@@:
1580
        jmp     .done_redraw
283 diamond 1581
.menu:
1582
; display context menu
1583
; ignore folders
1584
        call    get_curfile_folder_entry
1585
        test    byte [ecx], 10h
1586
        jz      @f
1587
.menuret:
1588
        ret
1589
@@:
1590
        call    find_extension
1591
        jc      .menuret
1592
        jnz     .menuret
1593
; known extension
1594
        mov     ebx, [edi+8]
1595
        test    ebx, ebx
1596
        jz      .menuret
1597
        mov     ecx, esi
1598
@@:
1599
        inc     ecx
1600
        cmp     byte [ecx-1], 0
1601
        jnz     @b
1602
        sub     ecx, esi        ; ecx = длина имени файла+1 = длина заголовка+1
1603
        cmp     ecx, 15
1604
        jb      @f
1605
        mov     cl, 15
1606
@@:
1607
        xor     edx, edx
1608
.menucreateloop:
1609
        mov     eax, [ebx]
1610
        test    eax, eax
1611
        jz      .menucreated
1612
@@:
1613
        inc     eax
1614
        cmp     byte [eax-1], 0
1615
        jnz     @b
1616
        sub     eax, [ebx]
1617
        cmp     eax, ecx
1618
        ja      @f
1619
        mov     eax, ecx
1620
@@:
1621
        add     eax, 12
314 diamond 1622
        call    xmalloc
283 diamond 1623
        test    eax, eax
1624
        jz      .menucreated
1625
        add     eax, 4
1626
        test    edx, edx
1627
        jz      @f
1628
        mov     [edx], eax
1629
@@:
1630
        mov     [eax+4], edx
1631
        mov     edx, eax
1632
        push    esi
1633
        mov     esi, [ebx+4]
1634
        mov     [eax-4], esi
1635
        mov     esi, [ebx]
1636
        lea     edi, [eax+8]
1637
@@:
1638
        lodsb
1639
        stosb
1640
        test    al, al
1641
        jnz     @b
1642
        sub     esi, [ebx]
1643
        sub     esi, ecx
1644
        jae     .menunoadd
1645
        neg     esi
1646
@@:
1647
        mov     byte [edi-1], ' '
1648
        stosb
1649
        dec     esi
1650
        jnz     @b
1651
.menunoadd:
1652
        pop     esi
1653
        add     ebx, 8
1654
        jmp     .menucreateloop
1655
.menucreated:
1656
        test    edx, edx
1657
        jz      .menuret
1658
        and     dword [edx], 0
1659
@@:
1660
        cmp     dword [edx+4], 0
1661
        jz      @f
1662
        mov     edx, [edx+4]
1663
        jmp     @b
1664
@@:
1665
        push    1
1666
        push    esi
1667
        push    edx
1668
        call    menu
1669
        cmp     eax, -1
1670
        jz      .menuret
1671
        push    dword [eax-4]
1672
@@:
1673
        test    edx, edx
1674
        jz      @f
1675
        lea     eax, [edx-4]
1676
        mov     edx, [edx]
1677
        call    mf_free
1678
        jmp     @b
1679
@@:
1680
        pop     eax
1681
        call    get_curfile_folder_entry
1682
        jmp     .run_association2
321 diamond 1683
.f7:
1684
        mov     dword [CopyDestEditBuf], CopyDestEditBuf.length
1685
        and     dword [CopyDestEditBuf+4], 0
1686
        and     dword [CopyDestEditBuf+8], 0
1687
        mov     byte [CopyDestEditBuf+12], 0
1688
        mov     ebx, mkdir_dlgdata
1689
        mov     eax, [cur_width]
1690
        sub     eax, 12
1691
        mov     [ebx + dlgtemplate.width], eax
1692
        dec     eax
1693
        dec     eax
1694
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.width2], eax
1695
        shr     eax, 1
1696
        dec     eax
1697
        dec     eax
1698
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x2], eax
1699
        sub     eax, a_ContinueLength-1
1700
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x1], eax
1701
        add     eax, a_ContinueLength+3
1702
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x1], eax
1703
        add     eax, aCancelBLength - 1
1704
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x2], eax
1705
        mov     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags0], 0xC
1706
        and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags1], not 4
1707
        and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags2], not 4
1708
        push    ebx
1709
        call    DialogBox
1710
        cmp     eax, mkdir_dlgdata.cont_btn
1711
        jnz     .ret2
1712
        mov     esi, CopyDestEditBuf+12
1713
        cmp     byte [esi], 0
1714
        jz      .ret2
1715
        cmp     byte [esi], '/'
1716
        jz      .mkdir_absolute_path
1717
        push    esi
1718
        lea     edi, [ebp + panel1_dir - panel1_data]
1719
        or      ecx, -1
1720
        xor     eax, eax
1721
        repnz   scasb
1722
        not     ecx
1723
        mov     edi, esi
1724
@@:
1725
        cmp     byte [edi+1], 0
1726
        jz      @f
1727
        inc     edi
1728
        jmp     @b
1729
@@:
1730
        push    edi
1731
        add     edi, ecx
1732
        cmp     edi, CopyDestEditBuf+12+513
1733
        pop     edi
1734
        jb      @f
1735
        pop     esi
1736
        jmp     .bigfilename
1737
@@:
1738
        lea     edx, [edi+2]
1739
        sub     edx, esi
1740
        lea     edi, [edi+ecx+1]
1741
        xchg    ecx, edx
1742
        std
1743
        lea     esi, [esi+ecx-1]
1744
        rep     movsb
1745
        cld
1746
        pop     edi
1747
        lea     esi, [ebp + panel1_dir - panel1_data]
1748
        push    edi
1749
        mov     ecx, edx
1750
        rep     movsb
1751
        mov     byte [edi-1], '/'
1752
        pop     esi
1753
.mkdir_absolute_path:
1754
.mkdir_retry:
1755
        push    70
1756
        pop     eax
1757
        mov     ebx, mkdirinfo
1758
        int     0x40
1759
        test    eax, eax
1760
        jz      @f
1761
        push    CopyDestEditBuf+12
1762
        push    aCannotMakeFolder
1763
        call    get_error_msg
1764
        push    eax
1765
        mov     eax, esp
1766
        push    RetryOrCancelBtn
1767
        push    2
1768
        push    eax
1769
        push    3
1770
        push    -1
1771
        push    -1
1772
        push    aError
1773
        call    SayErr
1774
        add     esp, 3*4
1775
        test    eax, eax
1776
        jz      .mkdir_retry
1777
@@:
1778
        jmp     .copydone
180 heavyiron 1779
 
1780
panels_OnRedraw:
1781
        call    draw_cmdbar
1782
        mov     ebp, panel1_data
1783
        call    draw_panel
1784
        mov     ebp, panel2_data
1785
        call    draw_panel
1786
        ret
1787
 
1788
init_console:
283 diamond 1789
        mov     eax, [console_data_ptr]
1790
        call    mf_free
1791
        mov     eax, [cur_width]
1792
        mul     [cur_height]
1793
        mov     ecx, eax
1794
        add     eax, eax
1795
        add     eax, eax
1796
        call    mf_alloc
1797
        test    eax, eax
1798
        jz      exit
1799
        mov     [console_data_ptr], eax
1800
        mov     edi, eax
180 heavyiron 1801
        mov     ax, 0720h
1802
        rep     stosw
283 diamond 1803
        mov     [panel1_left], ecx
1804
        mov     [panel1_top], ecx
1805
        mov     [panel2_top], ecx
180 heavyiron 1806
        mov     eax, [cur_width]
1807
        inc     eax
1808
        shr     eax, 1
1809
        mov     [panel1_width], eax
1810
        mov     [panel2_left], eax
1811
        sub     eax, [cur_width]
1812
        neg     eax
1813
        mov     [panel2_width], eax
1814
        mov     eax, [cur_height]
1815
        dec     eax
1816
        dec     eax
1817
        mov     [panel1_height], eax
1818
        mov     [panel2_height], eax
1819
        ret
1820
 
183 diamond 1821
get_curfile_folder_entry:
1822
        mov     ecx, [ebp + panel1_index - panel1_data]
321 diamond 1823
        shl     ecx, 2
183 diamond 1824
        add     ecx, [ebp + panel1_files - panel1_data]
321 diamond 1825
        mov     ecx, [ecx]
183 diamond 1826
        ret
1827
get_curfile_name:
1828
        call    get_curfile_folder_entry
1829
        add     ecx, 40
1830
        ret
1831
 
180 heavyiron 1832
panels_getname:
1833
if lang eq ru
1834
        mov     eax, 'Пане'
1835
        stosd
1836
        mov     eax, 'ли  '
1837
        stosd
1838
        mov     eax, '    '
1839
        stosd
1840
        stosb
1841
else
1842
        mov     eax, 'Pane'
1843
        stosd
1844
        mov     eax, 'ls  '
1845
        stosd
1846
        mov     eax, '    '
1847
        stosd
1848
        stosb
1849
end if
1850
        sub     ecx, 13
1851
        mov     ebp, [active_panel]
1852
        lea     esi, [ebp + panel1_dir - panel1_data]
1853
        push    3
1854
        pop     edx
1855
@@:
1856
        lodsb
1857
        stosb
1858
        dec     ecx
1859
        test    al, al
1860
        jz      @f
1861
        cmp     al, '/'
1862
        jnz     @b
1863
        dec     edx
1864
        jnz     @b
1865
@@:
1866
        test    al, al
1867
        jnz     @f
1868
        dec     esi
1869
        dec     edi
1870
@@:
1871
        push    esi
1872
@@:
1873
        lodsb
1874
        test    al, al
1875
        jnz     @b
1876
        dec     esi
1877
        mov     ebx, esi
1878
        sub     ebx, [esp]
1879
        dec     esi
1880
        push    esi
1881
        mov     esi, [ebp + panel1_index - panel1_data]
321 diamond 1882
        shl     esi, 2
1883
        add     esi, [ebp + panel1_files - panel1_data]
1884
        mov     esi, [esi]
1885
        add     esi, 40
180 heavyiron 1886
        push    esi
1887
@@:
1888
        lodsb
1889
        test    al, al
1890
        jnz     @b
1891
        add     ebx, esi
1892
        sub     ebx, [esp]
1893
        dec     esi
1894
        cmp     ebx, ecx
1895
        jbe     @f
1896
        mov     al, '.'
1897
        stosb
1898
        stosb
1899
        stosb
1900
        sub     ecx, 3
1901
        mov     ebx, ecx
1902
@@:
1903
        add     edi, ebx
1904
        inc     ecx
1905
        std
1906
@@:
1907
        movsb
1908
        dec     ecx
1909
        jz      .nodir
1910
        cmp     esi, [esp]
1911
        jae     @b
1912
        mov     al, '/'
1913
        stosb
1914
        dec     ecx
1915
        jz      .nodir
1916
        mov     esi, [esp+4]
1917
@@:
1918
        cmp     esi, [esp+8]
1919
        jb      .nodir
1920
        movsb
1921
        loop    @b
1922
.nodir:
1923
        cld
1924
        pop     eax
1925
        pop     eax
1926
        pop     eax
1927
        ret
1928
 
1929
draw_window:
1930
        push    12
1931
        pop     eax
1932
        push    1
1933
        pop     ebx
1934
        int     40h
1935
        mov     al, 48
1936
        mov     bl, 4
1937
        int     40h
1938
        mov     [skinh], eax
1939
        mov     ebx, [cur_width]
1940
        imul    ebx, font_width
283 diamond 1941
        add     ebx, 100*65536 + 5*2-1
180 heavyiron 1942
        mov     ecx, [cur_height]
1943
        imul    ecx, font_height
283 diamond 1944
        lea     ecx, [eax+ecx+5-1+100*65536]
180 heavyiron 1945
        xor     eax, eax
314 diamond 1946
        mov     edx, 0x53000000
180 heavyiron 1947
        mov     edi, header
1948
        int     40h
314 diamond 1949
        mov     al, 13
1950
        xor     edx, edx
1951
        cmp     [fill_width], 0
1952
        jz      @f
1953
        mov     ebx, [wnd_width]
1954
        sub     ebx, [fill_width]
1955
        sub     ebx, 5-1
1956
        shl     ebx, 16
1957
        mov     bx, word [fill_width]
1958
        mov     ecx, [skinh-2]
1959
        mov     cx, word [wnd_height]
1960
        sub     cx, word [skinh]
1961
        sub     cx, 5-1
1962
        int     0x40
1963
@@:
1964
        cmp     [fill_height], 0
1965
        jz      @f
1966
        mov     al, 13
1967
        xor     edx, edx
1968
        mov     ebx, 50000h
1969
        mov     bx, word [wnd_width]
1970
        sub     ebx, 9
1971
        mov     ecx, [wnd_height]
1972
        sub     ecx, [fill_height]
1973
        sub     ecx, 5-1
1974
        shl     ecx, 16
1975
        mov     cx, word [fill_height]
1976
        int     0x40
1977
@@:
283 diamond 1978
;        xor     ecx, ecx
1979
;        call    draw_image
1980
        and     [min_x], 0
1981
        and     [min_y], 0
1982
        mov     eax, [cur_width]
1983
        dec     eax
1984
        mov     [max_x], eax
1985
        mov     eax, [cur_height]
1986
        dec     eax
1987
        mov     [max_y], eax
1988
        call    draw_image.force
1989
        mov     al, 12
180 heavyiron 1990
        push    2
1991
        pop     ebx
1992
        int     40h
1993
        ret
1994
 
1995
draw_image.nomem:
1996
        mov     al, 13
1997
        xor     edx, edx
1998
        mov     ebx, [cur_width]
1999
        imul    ebx, font_width
2000
        add     ebx, 5*65536
2001
        mov     ecx, [skinh-2]
2002
        mov     cx, word [cur_height]
2003
        imul    cx, font_height
2004
        int     40h
2005
        mov     al, 4
2006
        mov     ebx, 32*65536+32
2007
        mov     ecx, 0xFFFFFF
2008
        mov     edx, nomem_draw
2009
        push    nomem_draw.size
2010
        pop     esi
2011
        int     40h
2012
        ret
2013
 
2014
draw_image:
283 diamond 2015
; determine draw rectangle
2016
        and     [max_x], 0
2017
        or      [min_x], -1
2018
        or      [min_y], -1
2019
        mov     esi, [console_data_ptr]
2020
        xor     eax, eax
2021
        xor     edx, edx
2022
        mov     ecx, [cur_width]
2023
        imul    ecx, [cur_height]
2024
.m1:
2025
        mov     bx, [esi]
2026
        cmp     bx, [esi+ecx*2]
2027
        jz      .m2
2028
        cmp     eax, [min_x]
2029
        ja      @f
2030
        mov     [min_x], eax
2031
@@:
2032
        cmp     eax, [max_x]
2033
        jb      @f
2034
        mov     [max_x], eax
2035
@@:
2036
        cmp     edx, [min_y]
2037
        jae     @f
2038
        mov     [min_y], edx
2039
@@:
2040
        mov     [max_y], edx
2041
.m2:
2042
        add     esi, 2
2043
        inc     eax
2044
        cmp     eax, [cur_width]
2045
        jb      .m1
2046
        xor     eax, eax
2047
        inc     edx
2048
        cmp     edx, [cur_height]
2049
        jb      .m1
2050
        mov     eax, [cursor_x]
2051
        cmp     eax, -1
2052
        jz      .m3
2053
        cmp     eax, [min_x]
2054
        ja      @f
2055
        mov     [min_x], eax
2056
@@:
2057
        cmp     eax, [max_x]
2058
        jb      @f
2059
        mov     [max_x], eax
2060
@@:
2061
        mov     edx, [cursor_y]
2062
        cmp     edx, [min_y]
2063
        ja      @f
2064
        mov     [min_y], edx
2065
@@:
2066
        cmp     edx, [max_y]
2067
        jb      @f
2068
        mov     [max_y], edx
2069
@@:
2070
.m3:
2071
        xchg    eax, [old_cursor_x]
2072
        xchg    edx, [old_cursor_y]
2073
        cmp     eax, -1
2074
        jz      .m4
2075
        cmp     eax, [min_x]
2076
        ja      @f
2077
        mov     [min_x], eax
2078
@@:
2079
        cmp     eax, [max_x]
2080
        jb      @f
2081
        mov     [max_x], eax
2082
@@:
2083
        cmp     edx, [min_y]
2084
        ja      @f
2085
        mov     [min_y], edx
2086
@@:
2087
        cmp     edx, [max_y]
2088
        jb      @f
2089
        mov     [max_y], edx
2090
@@:
2091
.m4:
2092
        cmp     [min_y], -1
2093
        jz      .nodraw
2094
.force:
180 heavyiron 2095
; allocate memory for image
283 diamond 2096
        mov     ecx, [max_x]
2097
        sub     ecx, [min_x]
2098
        inc     ecx
2099
        mov     [used_width], ecx
2100
        mov     edx, [max_y]
2101
        sub     edx, [min_y]
2102
        inc     edx
2103
        mov     [used_height], edx
2104
        imul    ecx, edx
2105
        imul    ecx, font_width*font_height
2106
        add     ecx, [heapend]
2107
        push    64
2108
        pop     eax
2109
        push    1
2110
        pop     ebx
2111
        int     0x40
180 heavyiron 2112
        test    eax, eax
283 diamond 2113
        jnz     draw_image.nomem
2114
        mov     edi, [heapend]
2115
        mov     esi, [console_data_ptr]
2116
        mov     eax, [min_y]
2117
        imul    eax, [cur_width]
2118
        add     eax, [min_x]
2119
        lea     esi, [esi+eax*2]
2120
        mov     ecx, [used_height]
180 heavyiron 2121
.lh:
283 diamond 2122
        push    ecx esi
2123
        mov     ecx, [used_width]
2124
.lw:
180 heavyiron 2125
        push    ecx
283 diamond 2126
        mov     ebx, [esi]
2127
        mov     eax, [cur_width]
2128
        imul    eax, [cur_height]
2129
        mov     [eax*2+esi], bx
2130
        movzx   eax, bl
2131
        push    edi
2132
        movzx   ebx, bh
2133
        mov     ebp, ebx
2134
        shr     ebp, 4
2135
        and     ebx, 0xF
2136
        sub     ebx, ebp
2137
        add     esi, 2
180 heavyiron 2138
if font_width > 8
2139
        lea     edx, [eax+eax+font]
2140
else
2141
        lea     edx, [eax+font]
2142
end if
2143
        mov     ecx, font_height
2144
.sh:
283 diamond 2145
        push    ecx edx edi
180 heavyiron 2146
        xor     ecx, ecx
283 diamond 2147
        mov     edx, [edx]
180 heavyiron 2148
.sw:
283 diamond 2149
        shr     edx, 1
2150
        sbb     eax, eax
2151
        and     eax, ebx
2152
        add     eax, ebp
2153
        mov     [edi], al
2154
        add     ecx, 1
2155
        add     edi, 1
180 heavyiron 2156
        cmp     ecx, font_width
2157
        jb      .sw
283 diamond 2158
        pop     edi edx ecx
2159
        mov     eax, [used_width]
2160
        imul    eax, font_width
180 heavyiron 2161
        add     edi, eax
2162
if font_width > 8
2163
        add     edx, 256*2
2164
else
2165
        add     edx, 256
2166
end if
2167
        loop    .sh
283 diamond 2168
        pop     edi
2169
.skip_symbol:
2170
        pop     ecx
2171
        add     edi, font_width
2172
        dec     ecx
2173
        jnz     .lw
2174
        mov     eax, [used_width]
2175
        imul    eax, (font_height-1)*font_width
180 heavyiron 2176
        add     edi, eax
283 diamond 2177
        pop     esi ecx
2178
        add     esi, [cur_width]
2179
        add     esi, [cur_width]
2180
        dec     ecx
2181
        jnz     .lh
2182
; cursor
2183
        mov     eax, [cursor_y]
2184
        inc     eax
2185
        jz      .nocursor
2186
        sub     eax, [min_y]
2187
        mul     [used_width]
2188
        imul    eax, font_height*font_width
2189
        mov     edx, [cursor_x]
2190
        sub     edx, [min_x]
2191
        inc     edx
2192
        imul    edx, font_width
2193
        add     eax, edx
2194
        add     eax, [heapend]
2195
        mov     edx, [used_width]
2196
        imul    edx, font_width
2197
        neg     edx
2198
        mov     ecx, (font_height*15+50)/100
2199
.cursor_loop:
2200
        push    ecx
2201
        mov     ecx, font_width
2202
        add     eax, edx
2203
        push    eax
2204
@@:
2205
;        add     byte [eax-1], 0x10
2206
        xor     byte [eax-1], 7
2207
        sub     eax, 1
2208
        loop    @b
2209
        pop     eax
180 heavyiron 2210
        pop     ecx
283 diamond 2211
        loop    .cursor_loop
2212
.nocursor:
2213
        mov     ecx, [used_width]
2214
        imul    ecx, font_width*65536
2215
        mov     cx, word [used_height]
2216
        imul    cx, font_height
2217
        mov     edx, [min_x]
2218
        imul    edx, font_width
2219
        add     edx, 5
2220
        shl     edx, 16
2221
        mov     dx, word [min_y]
2222
        imul    dx, font_height
2223
        add     edx, [skinh]
2224
        push    65
180 heavyiron 2225
        pop     eax
283 diamond 2226
        mov     ebx, [heapend]
2227
        push    8
2228
        pop     esi
2229
        mov     edi, console_colors
314 diamond 2230
        xor     ebp, ebp
283 diamond 2231
        int     0x40
2232
        push    64
2233
        pop     eax
2234
        push    1
2235
        pop     ebx
2236
        mov     ecx, [heapend]
2237
        int     0x40
2238
.nodraw:
180 heavyiron 2239
        ret
2240
 
2241
get_console_ptr:
2242
; in: eax=x, edx=y
2243
; out: edi->console data
2244
        push    edx
2245
        imul    edx, [cur_width]
2246
        add     edx, eax
283 diamond 2247
        mov     edi, [console_data_ptr]
2248
        lea     edi, [edi + edx*2]
180 heavyiron 2249
        pop     edx
2250
        ret
2251
 
2252
draw_keybar:
2253
        pushad
2254
        xor     eax, eax
2255
        test    [ctrlstate], 3
2256
        jz      @f
2257
        inc     eax
2258
@@:
2259
        test    [ctrlstate], 0xC
2260
        jz      @f
2261
        or      al, 2
2262
@@:
2263
        test    [ctrlstate], 0x30
2264
        jz      @f
2265
        or      al, 4
2266
@@:
2267
        imul    eax, 6*12
2268
        mov     esi, [active_screen_vtable]
2269
        mov     esi, [esi+screen_vtable.keybar]
2270
        add     esi, eax
2271
        xor     ecx, ecx
2272
        inc     ecx
2273
        xor     eax, eax
2274
        mov     edx, [cur_height]
2275
        dec     edx
2276
        call    get_console_ptr
2277
        push    6
2278
        pop     ebx
2279
        mov     eax, [cur_width]
2280
        sub     eax, 11+9+3*2+6
2281
        cmp     eax, 7*11
2282
        jl      @f
2283
        cdq
2284
        mov     bl, 11
2285
        div     ebx
2286
        mov     ebx, eax
2287
@@:
2288
        xor     edx, edx
2289
.l:
2290
        add     edx, 7
2291
        cmp     cl, 10
2292
        jb      @f
2293
        inc     edx
2294
@@:
2295
        cmp     edx, [cur_width]
2296
        ja      .ret
2297
        cmp     cl, 10
2298
        jae     .twodig
2299
        lea     eax, [ecx+'0']
2300
        stosb
2301
        mov     al, [keybar_number_color]
2302
        stosb
2303
        jmp     .cmn
2304
.twodig:
2305
        mov     al, cl
2306
        cbw
2307
        div     [_10]
2308
        add     al, '0'
2309
        stosb
2310
        mov     al, [keybar_number_color]
2311
        stosb
2312
        xchg    al, ah
2313
        add     al, '0'
2314
        stosw
2315
.cmn:
2316
        mov     ah, [keybar_name_color]
2317
        push    ecx
2318
        mov     cl, 6
2319
@@:
2320
        lodsb
2321
        stosw
2322
        loop    @b
2323
        mov     al, ' '
2324
        lea     ecx, [ebx-6]
2325
        cmp     byte [esp], 12
2326
        jz      .ret_pop
2327
        add     edx, ecx
2328
        rep     stosw
2329
        pop     ecx
2330
        inc     edx
2331
        cmp     edx, [cur_width]
2332
        ja      .ret
2333
        mov     ah, [keybar_bgr_color]
2334
        stosw
2335
        inc     ecx
2336
        jmp     .l
2337
.ret_pop:
2338
        pop     ecx
2339
.ret:
2340
        cmp     byte [edi-2], ' '
2341
        jnz     @f
2342
        dec     edi
2343
        dec     edi
2344
@@:
2345
        push    edi
283 diamond 2346
        xor     eax, eax
180 heavyiron 2347
        mov     edx, [cur_height]
2348
        call    get_console_ptr
2349
        mov     ecx, edi
2350
        pop     edi
2351
        sub     ecx, edi
2352
        shr     ecx, 1
2353
        mov     al, ' '
2354
        mov     ah, [keybar_name_color]
2355
        rep     stosw
2356
.done:
2357
        popad
2358
        ret
2359
 
2360
draw_cmdbar:
2361
        mov     esi, [active_panel]
2362
        add     esi, panel1_dir - panel1_data
2363
        xor     eax, eax
2364
        mov     edx, [cur_height]
2365
        dec     edx
2366
        dec     edx
2367
        call    get_console_ptr
2368
        mov     ah, [cmdbar_prefix_color]
2369
        mov     ecx, [cur_width]
2370
        dec     ecx
2371
@@:
2372
        lodsb
2373
        test    al, al
2374
        jz      @f
2375
        stosw
2376
        loop    @b
2377
@@:
2378
        mov     al, '>'
2379
        stosw
2380
        mov     al, ' '
2381
        mov     ah, [cmdbar_normal_color]
2382
        rep     stosw
2383
        ret
2384
 
2385
draw_border:
2386
        push    edi
2387
        mov     al, 0xC9
2388
        stosw
2389
        mov     al, 0xCD
2390
        lea     ecx, [ebx-2]
2391
        rep     stosw
2392
        mov     al, 0xBB
2393
        stosw
2394
        pop     edi
2395
        add     edi, [cur_width]
2396
        add     edi, [cur_width]
2397
        lea     ecx, [edx-2]
2398
.l:
2399
        push    edi
2400
        mov     al, 0xBA
2401
        stosw
2402
        mov     al, 0x20
2403
        push    ecx
2404
        lea     ecx, [ebx-2]
2405
        rep     stosw
2406
        pop     ecx
2407
        mov     al, 0xBA
2408
        stosw
2409
        pop     edi
2410
        add     edi, [cur_width]
2411
        add     edi, [cur_width]
2412
        loop    .l
2413
        mov     al, 0xC8
2414
        stosw
2415
        mov     al, 0xCD
2416
        lea     ecx, [ebx-2]
2417
        rep     stosw
2418
        mov     al, 0xBC
2419
        stosw
2420
        ret
2421
 
2422
draw_panel:
2423
        mov     eax, [ebp + panel1_left - panel1_data]
2424
        mov     edx, [ebp + panel1_top - panel1_data]
2425
        call    get_console_ptr
2426
; draw border
2427
        mov     ah, [panel_border_color]
2428
        mov     ebx, [ebp + panel1_width - panel1_data]
2429
        mov     edx, [ebp + panel1_height - panel1_data]
2430
        call    draw_border
2431
        push    eax
2432
        mov     eax, [ebp + panel1_left - panel1_data]
2433
        mov     edx, [ebp + panel1_top - panel1_data]
2434
        add     edx, [ebp + panel1_height - panel1_data]
2435
        sub     edx, 3
2436
        call    get_console_ptr
2437
        pop     eax
2438
        mov     al, 0xC7
2439
        stosw
2440
        mov     al, 0xC4
2441
        lea     ecx, [ebx-2]
2442
        rep     stosw
2443
        mov     al, 0xB6
2444
        stosw
2445
        mov     eax, [ebp + panel1_width - panel1_data]
2446
        sub     eax, 3
2447
        shr     eax, 1
2448
        mov     [column_width], eax
2449
        mov     eax, [ebp + panel1_left - panel1_data]
2450
        inc     eax
2451
        mov     [column_left], eax
2452
        add     eax, [column_width]
2453
        mov     edx, [ebp + panel1_top - panel1_data]
2454
        inc     edx
2455
        mov     [column_top], edx
2456
        dec     edx
2457
        call    get_console_ptr
2458
        mov     ah, [panel_border_color]
2459
        mov     al, 0xD1
2460
        mov     [edi], ax
2461
        add     edi, [cur_width]
2462
        add     edi, [cur_width]
2463
        mov     ecx, [ebp + panel1_height - panel1_data]
2464
        sub     ecx, 4
2465
        mov     [column_height], ecx
2466
        mov     al, 0xB3
2467
@@:
2468
        mov     [edi], ax
2469
        add     edi, [cur_width]
2470
        add     edi, [cur_width]
2471
        loop    @b
2472
        mov     al, 0xC1
2473
        stosw
2474
        mov     eax, [column_height]
2475
        dec     eax
2476
        mov     [ebp + panel1_colsz - panel1_data], eax
2477
        add     eax, eax
2478
        mov     [ebp + panel1_colst - panel1_data], eax
2479
        mov     eax, [ebp + panel1_start - panel1_data]
2480
        mov     [column_index], eax
2481
        call    draw_column
2482
        mov     eax, [ebp + panel1_width - panel1_data]
2483
        sub     eax, 3
2484
        mov     ecx, [column_width]
2485
        sub     eax, ecx
2486
        mov     [column_width], eax
2487
        inc     ecx
2488
        add     [column_left], ecx
2489
        call    draw_column
2490
; Заголовок панели (текущая папка)
2491
        lea     esi, [ebp + panel1_dir - panel1_data]
2492
        mov     edi, cur_header
2493
        mov     ecx, [ebp + panel1_width - panel1_data]
2494
        sub     ecx, 7
2495
        movsb
2496
@@:
2497
        lodsb
2498
        stosb
2499
        dec     ecx
2500
        test    al, al
2501
        jz      .header_created
2502
        cmp     al, '/'
2503
        jnz     @b
2504
        mov     edx, esi
2505
@@:
2506
        lodsb
2507
        test    al, al
2508
        jnz     @b
2509
        sub     esi, edx
2510
        dec     esi
2511
        cmp     esi, ecx
2512
        jbe     @f
2513
        mov     word [edi], '..'
2514
        mov     byte [edi+2], '.'
2515
        add     edi, 3
2516
        sub     ecx, 3
2517
        add     edx, esi
2518
        sub     edx, ecx
2519
@@:
2520
        mov     esi, edx
2521
@@:
2522
        lodsb
2523
        stosb
2524
        dec     ecx
2525
        test    al, al
2526
        jnz     @b
2527
.header_created:
2528
        mov     edx, [ebp + panel1_top - panel1_data]
2529
        mov     eax, [ebp + panel1_left - panel1_data]
2530
        shr     ecx, 1
2531
        lea     eax, [eax+ecx+3]
2532
        call    get_console_ptr
2533
        mov     ah, [panel_active_header_color]
2534
        cmp     ebp, [active_panel]
2535
        jz      @f
2536
        mov     ah, [panel_header_color]
2537
@@:
2538
        mov     al, ' '
2539
        stosw
2540
        mov     esi, cur_header
2541
@@:
2542
        lodsb
2543
        test    al, al
2544
        jz      @f
2545
        stosw
2546
        jmp     @b
2547
@@:
2548
        mov     al, ' '
2549
        stosw
2550
        mov     edx, [ebp + panel1_top - panel1_data]
2551
        inc     edx
2552
        mov     eax, [ebp + panel1_left - panel1_data]
2553
        inc     eax
2554
        call    get_console_ptr
2555
        movzx   eax, [ebp + panel1_sortmode - panel1_data]
2556
        mov     al, [compare_names+eax]
2557
        stosb
2558
        cmp     [ebp + panel1_numfiles - panel1_data], 0
2559
        jz      .skip_curinfo
2560
; Информация о выбранном файле
2561
        mov     ebx, [ebp + panel1_index - panel1_data]
2562
        mov     eax, [ebp + panel1_files - panel1_data]
2563
        mov     ebx, [eax+ebx*4]
2564
        mov     eax, [ebp + panel1_left - panel1_data]
2565
        add     eax, [ebp + panel1_width - panel1_data]
2566
        dec     eax
2567
        mov     edx, [ebp + panel1_top - panel1_data]
2568
        add     edx, [ebp + panel1_height - panel1_data]
2569
        dec     edx
2570
        dec     edx
2571
        call    get_console_ptr
2572
        mov     ecx, [ebp + panel1_width - panel1_data]
2573
        dec     ecx
2574
        dec     ecx
2575
; Время модификации
2576
        sub     edi, 5*2
2577
        sub     ecx, 6
2578
        mov     al, [ebx+24+2]
2579
        aam
2580
        or      ax, 0x3030
2581
        mov     [edi], ah
2582
        mov     [edi+2], al
2583
        mov     [edi+4], byte ':'
2584
        mov     al, [ebx+24+1]
2585
        aam
2586
        or      ax, 0x3030
2587
        mov     [edi+6], ah
2588
        mov     [edi+8], al
2589
        mov     al, [panel_normal_color]
2590
        mov     [edi+1], al
2591
        mov     [edi+3], al
2592
        mov     [edi+5], al
2593
        mov     [edi+7], al
2594
        mov     [edi+9], al
2595
        dec     edi
2596
        mov     [edi], al
2597
        dec     edi
2598
        mov     byte [edi], ' '
2599
; Дата модификации
2600
        sub     edi, 8*2
2601
        sub     ecx, 9
2602
        mov     al, [ebx+28+0]
2603
        aam
2604
        or      ax, 0x3030
2605
        mov     [edi], ah
2606
        mov     [edi+2], al
2607
        mov     [edi+4], byte '.'
2608
        mov     al, [ebx+28+1]
2609
        aam
2610
        or      ax, 0x3030
2611
        mov     [edi+6], ah
2612
        mov     [edi+8], al
2613
        mov     [edi+10], byte '.'
2614
        mov     ax, [ebx+28+2]
2615
        div     [_100]
2616
        mov     al, ah
2617
        aam
2618
        or      ax, 0x3030
2619
        mov     [edi+12], ah
2620
        mov     [edi+14], al
2621
        mov     al, [panel_normal_color]
2622
        mov     [edi+1], al
2623
        mov     [edi+3], al
2624
        mov     [edi+5], al
2625
        mov     [edi+7], al
2626
        mov     [edi+9], al
2627
        mov     [edi+11], al
2628
        mov     [edi+13], al
2629
        mov     [edi+15], al
2630
        dec     edi
2631
        mov     [edi], al
2632
        dec     edi
2633
        mov     [edi], byte ' '
2634
; Размер
2635
        std
2636
        mov     ah, [panel_normal_color]
2637
        dec     edi
2638
        dec     edi
2639
        dec     ecx
2640
        test    byte [ebx], 0x10
2641
        jz      .size_file
2642
        push    ecx
2643
        mov     esi, aFolder+aFolder.size-1
2644
        mov     ecx, aFolder.size
2645
        cmp     word [ebx+40], '..'
2646
        jnz     @f
2647
        cmp     byte [ebx+42], 0
2648
        jnz     @f
2649
        mov     esi, aUp+aUp.size-1
2650
        mov     cl, aUp.size
2651
@@:
2652
        sub     [esp], ecx
2653
@@:
2654
        lodsb
2655
        stosw
2656
        loop    @b
2657
        pop     ecx
2658
        jmp     .size_done
2659
.size_file:
2660
        mov     edx, [ebx+36]
2661
        test    edx, edx
2662
        jz      .size_less_4g
2663
        cmp     edx, 10*256
2664
        jae     .size_tera
2665
; в гигабайтах
2666
        mov     al, 'G'
283 diamond 2667
        shl     edx, 2
180 heavyiron 2668
        jmp     .size_letter
2669
.size_tera:
2670
; в терабайтах
2671
        shr     edx, 8
2672
        mov     al, 'T'
2673
        jmp     .size_letter
2674
.size_less_4g:
2675
        mov     edx, [ebx+32]
2676
        cmp     edx, 10*(1 shl 20)
2677
        jae     .size_mega
2678
        cmp     edx, 1 shl 20
2679
        jb      .size_num
2680
        shr     edx, 10
2681
        mov     al, 'K'
2682
        jmp     .size_letter
2683
.size_mega:
2684
        mov     al, 'M'
2685
        shr     edx, 20
2686
.size_letter:
2687
        stosw
2688
        dec     ecx
2689
        mov     al, ' '
2690
        stosw
2691
        dec     ecx
2692
.size_num:
2693
        xchg    eax, edx
2694
        xor     edx, edx
2695
        div     [_10d]
2696
        xchg    eax, edx
2697
        add     al, '0'
2698
        mov     ah, [panel_normal_color]
2699
        stosw
2700
        dec     ecx
2701
        test    edx, edx
2702
        jnz     .size_num
2703
.size_done:
2704
        cld
2705
; Имя
2706
        sub     edi, ecx
2707
        sub     edi, ecx
2708
        lea     esi, [ebx+40]
2709
@@:
2710
        lodsb
2711
        test    al, al
2712
        jnz     @b
2713
        sub     esi, ebx
2714
        sub     esi, 41
2715
        mov     ah, [panel_normal_color]
2716
        cmp     esi, ecx
2717
        lea     edx, [ebx+40]
2718
        jbe     @f
2719
        mov     al, '{'
2720
        mov     [edi-2], ax
2721
        add     edx, esi
2722
        sub     edx, ecx
2723
@@:
2724
        mov     esi, edx
2725
@@:
2726
        lodsb
2727
        test    al, al
2728
        jz      @f
2729
        stosw
2730
        loop    @b
2731
@@:
2732
        mov     al, ' '
2733
        rep     stosw
2734
.skip_curinfo:
2735
        call    draw_image
2736
        ret
2737
 
2738
draw_column:
2739
        mov     eax, [column_left]
2740
        mov     edx, [column_top]
2741
        call    get_console_ptr
2742
; заголовок столбца
2743
        push    edi
2744
        mov     ah, [column_header_color]
2745
        mov     al, ' '
2746
        mov     ecx, [column_width]
2747
if lang eq ru
2748
        sub     ecx, 3
2749
else
2750
        sub     ecx, 4
2751
end if
2752
        shr     ecx, 1
2753
        rep     stosw
2754
if lang eq ru
2755
        mov     al, 'И'
2756
        stosw
2757
        mov     al, 'м'
2758
        stosw
2759
        mov     al, 'я'
2760
        stosw
2761
else
2762
        mov     al, 'N'
2763
        stosw
2764
        mov     al, 'a'
2765
        stosw
2766
        mov     al, 'm'
2767
        stosw
2768
        mov     al, 'e'
2769
        stosw
2770
end if
2771
        mov     al, ' '
2772
        mov     ecx, [column_width]
2773
if lang eq ru
2774
        sub     ecx, 2
2775
else
2776
        sub     ecx, 3
2777
end if
2778
        shr     ecx, 1
2779
        rep     stosw
2780
        pop     edi
2781
        add     edi, [cur_width]
2782
        add     edi, [cur_width]
2783
; файлы
2784
        mov     edx, [ebp + panel1_numfiles - panel1_data]
2785
        mov     ecx, [column_height]
2786
        dec     ecx
2787
.l:
2788
        cmp     [column_index], edx
2789
        jae     .ret
2790
        push    ecx
2791
        mov     esi, [column_index]
2792
        mov     ecx, [ebp + panel1_files - panel1_data]
2793
        mov     esi, [ecx+esi*4]
321 diamond 2794
        add     esi, 40
283 diamond 2795
        mov     ah, [esi - 40 + 5]
180 heavyiron 2796
        cmp     ebp, [active_panel]
2797
        jnz     @f
2798
        mov     ecx, [column_index]
2799
        cmp     ecx, [ebp + panel1_index - panel1_data]
2800
        jnz     @f
283 diamond 2801
        mov     ah, [esi - 40 + 6]
180 heavyiron 2802
@@:
2803
        mov     ecx, [column_width]
2804
        push    edi
2805
@@:
2806
        lodsb
2807
        test    al, al
2808
        jz      @f
2809
        stosw
2810
        loop    @b
2811
        cmp     byte [esi], 0
2812
        jz      @f
2813
        mov     byte [edi], '}'
2814
@@:
2815
        mov     al, ' '
2816
        rep     stosw
2817
        pop     edi
2818
        add     edi, [cur_width]
2819
        add     edi, [cur_width]
2820
        inc     [column_index]
2821
        pop     ecx
2822
        dec     ecx
2823
        jnz     .l
2824
.ret:
2825
        cmp     ebp, panel1_data
2826
        jnz     .ret2
2827
; Число экранов
2828
        mov     eax, [num_screens]
2829
        dec     eax
2830
        jz      .ret2
2831
        push    eax
2832
        xor     eax, eax
2833
        xor     edx, edx
2834
        call    get_console_ptr
2835
        mov     ah, [panel_nscreens_color]
2836
        mov     al, '['
2837
        stosw
2838
        pop     eax
2839
        push    -'0'
2840
@@:
2841
        xor     edx, edx
2842
        div     [_10d]
2843
        push    edx
2844
        test    eax, eax
2845
        jnz     @b
2846
@@:
2847
        pop     eax
2848
        add     eax, '0'
2849
        jz      @f
2850
        mov     ah, [panel_nscreens_color]
2851
        stosw
2852
        jmp     @b
2853
@@:
2854
        mov     al, ']'
2855
        mov     ah, [panel_nscreens_color]
2856
        stosw
2857
.ret2:
2858
        ret
2859
 
2860
;insert_last_dot:
2861
;        push    eax esi
2862
;        mov     ah, 0
2863
;.loop:
2864
;        lodsb
2865
;        test    al, al
2866
;        jz      .done
2867
;        cmp     al, '.'
2868
;        jnz     .loop
2869
;        mov     ah, 1
2870
;        jmp     .loop
2871
;.done:
2872
;        test    ah, ah
2873
;        jnz     @f
2874
;        mov     byte [esi-1], '.'
2875
;        mov     byte [esi], 0
2876
;@@:
2877
;        pop     esi eax
2878
;        ret
2879
 
2880
;delete_last_dot:
2881
;        push    esi
2882
;@@:
2883
;        cmp     byte [esi], 0
2884
;        jz      @f
2885
;        inc     esi
2886
;        jmp     @b
2887
;@@:
2888
;        cmp     byte [esi-1], '.'
2889
;        jnz     @f
2890
;        mov     byte [esi-1], 0
2891
;@@:     pop     esi
2892
;        ret
2893
 
2894
read_folder:
2895
        mov     eax, [ebp + panel1_nfa - panel1_data]
2896
        mov     [dirinfo.size], eax
2897
        shl     eax, 2
2898
        add     eax, [ebp + panel1_files - panel1_data]
2899
        mov     [dirinfo.dirdata], eax
2900
        lea     eax, [ebp + panel1_dir - panel1_data]
2901
        mov     [dirinfo.name], eax
314 diamond 2902
.retry:
180 heavyiron 2903
        push    70
2904
        pop     eax
2905
        mov     ebx, dirinfo
2906
        int     40h
2907
        test    eax, eax
2908
        jz      .ok
2909
        cmp     eax, 6
2910
        jz      .ok
314 diamond 2911
; Failed to read folder, notify user
2912
        cmp     [bSilentFolderMode], 0
2913
        jnz     .dont_notify
2914
        push    aContinue
2915
        push    aRetry
2916
        mov     edx, esp
2917
        call    get_error_msg
2918
        push    [dirinfo.name]
2919
        push    aCannotReadFolder
2920
        push    eax
2921
        mov     eax, esp
2922
        push    edx
2923
        push    2
2924
        push    eax
2925
        push    3
2926
        push    -1
2927
        push    -1
2928
        push    aError
2929
        call    SayErr
2930
        add     esp, 5*4
2931
        test    eax, eax
2932
        jz      .retry
2933
.dont_notify:
2934
        mov     esi, prev_dir
2935
        cmp     byte [esi], 0
2936
        jz      @f
2937
        lea     edi, [ebp + panel1_dir - panel1_data]
2938
        mov     ecx, 1024/4
2939
        rep     movsd
2940
        mov     byte [prev_dir], 0
2941
        ret
2942
@@:
2943
        mov     [bSilentFolderMode], 1  ; enter silent mode
2944
        mov     esi, [dirinfo.name]
2945
        xor     edx, edx
2946
.up1:
2947
        lodsb
2948
        test    al, al
2949
        jz      .up1done
2950
        cmp     al, '/'
2951
        jnz     .up1
2952
        inc     edx
2953
        lea     edi, [esi-1]
2954
        jmp     .up1
2955
.up1done:
2956
        cmp     edx, 2
2957
        jbe     .noup
2958
        stosb
2959
        jmp     read_folder
2960
.noup:
2961
        mov     esi, [dirinfo.name]
2962
        mov     edi, esi
2963
        lodsd
2964
        or      eax, 0x00202000
2965
        cmp     eax, '/rd/'
2966
        jnz     @f
2967
        lodsw
2968
        cmp     ax, '1'
2969
        jz      .nosetrd
2970
@@:
2971
        mov     eax, '/rd/'
2972
        stosd
2973
        mov     ax, '1'
2974
        stosw
2975
        jmp     read_folder
2976
.nosetrd:
2977
; Даже рамдиск не прочитался. Значит, не судьба...
2978
        and     dword [ebp + panel1_numfiles - panel1_data], 0
180 heavyiron 2979
        and     dword [ebp + panel1_index - panel1_data], 0
2980
        and     dword [ebp + panel1_start - panel1_data], 0
314 diamond 2981
        mov     [bSilentFolderMode], 0  ; leave silent mode
180 heavyiron 2982
        ret
2983
.ok:
2984
        mov     eax, [dirinfo.dirdata]
2985
        cmp     [eax+8], ebx
2986
        jz      .readdone
2987
        push    eax
2988
        mov     eax, [ebp + panel1_files - panel1_data]
2989
        call    mf_free
2990
        pop     eax
2991
        mov     eax, [eax+8]
2992
        add     eax, 0xF
2993
        and     eax, not 0xF
2994
        push    eax
2995
        imul    eax, 4+304
2996
        add     eax, 32
314 diamond 2997
        call    xmalloc
180 heavyiron 2998
        test    eax, eax
2999
        jnz     .succ1
3000
        pop     eax
3001
        jmp     .readdone
3002
.succ1:
3003
        mov     [ebp + panel1_files - panel1_data], eax
3004
        pop     [ebp + panel1_nfa - panel1_data]
321 diamond 3005
        mov     [prev_dir], 0
180 heavyiron 3006
        jmp     read_folder
3007
.readdone:
3008
        and     [ebp + panel1_start - panel1_data], 0
3009
        and     [ebp + panel1_index - panel1_data], 0
3010
        and     [ebp + panel1_start - panel1_data], 0
3011
        mov     edi, [ebp + panel1_files - panel1_data]
3012
        mov     eax, [ebp + panel1_nfa - panel1_data]
321 diamond 3013
        lea     eax, [edi + eax*4 + 32]
3014
        mov     ecx, [eax-32+4]
283 diamond 3015
        test    ecx, ecx
3016
        jz      .loopdone
321 diamond 3017
        xor     edx, edx
180 heavyiron 3018
; Игнорируем специальные входы, соответствующие папке '.' и метке тома
3019
.ptrinit:
321 diamond 3020
        cmp     word [eax+40], '.'
180 heavyiron 3021
        jz      .loopcont
321 diamond 3022
        test    byte [eax], 8
180 heavyiron 3023
        jnz     .loopcont
321 diamond 3024
        test    edx, edx
3025
        jnz     .nodotdot
3026
        cmp     word [eax+40], '..'
3027
        jnz     .nodotdot
3028
        cmp     byte [eax+42], 0
3029
        jnz     .nodotdot
3030
        mov     edx, eax
3031
        push    edi
3032
@@:
3033
        cmp     edi, [ebp + panel1_files - panel1_data]
3034
        jbe     @f
3035
        push    dword [edi-4]
3036
        pop     dword [edi]
3037
        sub     edi, 4
3038
        jmp     @b
3039
@@:
180 heavyiron 3040
        stosd
321 diamond 3041
        pop     edi
3042
        scasd
3043
        jmp     .dotdot
3044
.nodotdot:
3045
        stosd
3046
.dotdot:
283 diamond 3047
; подсветка
3048
;        call    insert_last_dot
3049
        pushad
321 diamond 3050
        mov     ebp, eax
283 diamond 3051
        lea     esi, [ebp+40]
3052
        mov     edi, lower_file_name
3053
        mov     edx, edi
3054
@@:
3055
        lodsb
3056
        call    tolower
3057
        stosb
3058
        test    al, al
3059
        jnz     @b
3060
        mov     esi, edx
3061
        lea     edx, [edi-1]
3062
        xor     ecx, ecx
3063
.highlight_test_loop:
3064
        mov     ebx, [highlight_groups+ecx*4]
3065
        mov     al, [ebx + highlight.IncludeAttributes]
3066
        mov     ah, [ebp]
3067
        and     ah, al
3068
        cmp     ah, al
3069
        jnz     .highlight_test_failed
3070
        lea     edi, [ebx + highlight.Mask]
3071
        call    match_mask_rev_lowercase
3072
        jc      .highlight_test_failed
3073
        mov     ah, [ebx + highlight.NormalColor]
3074
        test    ah, ah
3075
        jnz     @f
3076
        mov     ah, [panel_normal_color]
3077
@@:
3078
        mov     [ebp+5], ah
3079
        mov     ah, [ebx + highlight.CursorColor]
3080
        test    ah, ah
3081
        jnz     @f
3082
        mov     ah, [panel_cursor_color]
3083
@@:
3084
        mov     [ebp+6], ah
3085
        jmp     .doname
3086
.highlight_test_failed:
3087
        inc     ecx
3088
        cmp     ecx, [highlight_num_groups]
3089
        jb      .highlight_test_loop
3090
.nohighlight:
3091
        mov     ah, [panel_normal_color]
3092
        mov     [ebp+5], ah
3093
        mov     ah, [panel_cursor_color]
3094
        mov     [ebp+6], ah
3095
.doname:
3096
;        call    delete_last_dot
3097
        popad
180 heavyiron 3098
.loopcont:
3099
        add     eax, 304
283 diamond 3100
        dec     ecx
3101
        jnz     .ptrinit
180 heavyiron 3102
.loopdone:
3103
        sub     edi, [ebp + panel1_files - panel1_data]
3104
        shr     edi, 2
3105
        mov     [ebp + panel1_numfiles - panel1_data], edi
3106
.done:
3107
; Сортировка
3108
sort_files:
3109
        movzx   eax, [ebp + panel1_sortmode - panel1_data]
3110
        mov     ebx, [compare_fns + eax*4]
3111
        mov     edx, [ebp + panel1_files - panel1_data]
3112
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
321 diamond 3113
        jecxz   .skip
3114
        mov     eax, [edx]
3115
        cmp     word [eax], '..'
3116
        jnz     .nodotdot
3117
        cmp     byte [eax+2], 0
3118
        jnz     .nodotdot
3119
        dec     ecx
3120
        add     edx, 4
3121
.nodotdot:
180 heavyiron 3122
        call    sort
321 diamond 3123
.skip:
314 diamond 3124
        mov     [bSilentFolderMode], 0  ; leave silent mode
180 heavyiron 3125
        ret
3126
 
3127
compare_name:
3128
        test    byte [esi], 10h
3129
        jnz     .1dir
3130
        test    byte [edi], 10h
3131
        jnz     .greater
3132
.eq1:
3133
        add     esi, 40
3134
        add     edi, 40
3135
        jmp     strcmpi
3136
.greater:
3137
        test    esi, esi
3138
        ret
3139
.1dir:
3140
        test    byte [edi], 10h
3141
        jnz     .eq1
3142
.less:
3143
        xor     edi, edi
3144
        stc
3145
        ret
3146
 
3147
compare_name_rev:
3148
        test    byte [esi], 10h
3149
        jnz     .1dir
3150
        test    byte [edi], 10h
3151
        jnz     .greater
3152
.eq1:
3153
        add     esi, 40
3154
        add     edi, 40
3155
        xchg    esi, edi
3156
        jmp     strcmpi
3157
.greater:
3158
        test    esi, esi
3159
        ret
3160
.1dir:
3161
        test    byte [edi], 10h
3162
        jnz     .eq1
3163
.less:
3164
        xor     edi, edi
3165
        stc
3166
        ret
3167
 
3168
strcmpi:
3169
        push    eax
3170
@@:
3171
        lodsb
3172
        call    match_symbol
3173
        jnz     .ret
3174
        inc     edi
3175
        test    al, al
3176
        jnz     @b
3177
.ret:
3178
        pop     eax
3179
        ret
3180
 
3181
compare_ext:
3182
        test    byte [esi], 10h
3183
        jnz     .1dir
3184
        test    byte [edi], 10h
3185
        jnz     .greater
3186
.eq1:
3187
        add     esi, 40
3188
        add     edi, 40
3189
        push    esi edi
3190
        call    seek_ext
3191
        xchg    esi, edi
3192
        call    seek_ext
3193
        xchg    esi, edi
3194
        call    strcmpi
3195
        jnz     .ret
3196
        pop     edi esi
3197
        jmp     strcmpi
3198
.ret:
3199
        pop     edi esi
3200
        ret
3201
.greater:
3202
        test    esi, esi
3203
        ret
3204
.1dir:
3205
        test    byte [edi], 10h
3206
        jnz     .eq1
3207
.less:
3208
        xor     edi, edi
3209
        stc
3210
        ret
3211
 
3212
compare_ext_rev:
3213
        test    byte [esi], 10h
3214
        jnz     .1dir
3215
        test    byte [edi], 10h
3216
        jnz     .greater
3217
.eq1:
3218
        add     esi, 40
3219
        add     edi, 40
3220
        push    esi edi
3221
        call    seek_ext
3222
        xchg    esi, edi
3223
        call    seek_ext
3224
        call    strcmpi
3225
        jnz     .ret
3226
        pop     edi esi
3227
        xchg    esi, edi
3228
        jmp     strcmpi
3229
.ret:
3230
        pop     edi esi
3231
        ret
3232
.greater:
3233
        test    esi, esi
3234
        ret
3235
.1dir:
3236
        test    byte [edi], 10h
3237
        jnz     .eq1
3238
.less:
3239
        xor     edi, edi
3240
        stc
3241
        ret
3242
 
3243
seek_ext:
3244
        push    eax
3245
        xor     eax, eax
3246
.l:
3247
        inc     esi
3248
        cmp     byte [esi-1], '.'
3249
        jnz     @f
3250
        mov     eax, esi
3251
@@:
3252
        cmp     byte [esi-1], 0
3253
        jnz     .l
3254
        test    eax, eax
3255
        jnz     @f
3256
        lea     eax, [esi-1]
3257
@@:
3258
        mov     esi, eax
3259
        pop     eax
3260
        ret
3261
 
3262
compare_modified:
3263
        test    byte [esi], 10h
3264
        jnz     .1dir
3265
        test    byte [edi], 10h
3266
        jnz     .greater
3267
.eq1:
3268
        push    edi
3269
        mov     edi, [edi+28]
3270
        cmp     edi, [esi+28]
3271
        pop     edi
3272
        jnz     @f
3273
        push    edi
3274
        mov     edi, [edi+24]
3275
        cmp     edi, [esi+24]
3276
        pop     edi
3277
        jnz     @f
3278
        add     esi, 40
3279
        add     edi, 40
3280
        jmp     strcmpi
3281
@@:
3282
        ret
3283
.greater:
3284
        test    esi, esi
3285
        ret
3286
.1dir:
3287
        test    byte [edi], 10h
3288
        jnz     .eq1
3289
.less:
3290
        xor     edi, edi
3291
        stc
3292
        ret
3293
 
3294
compare_modified_rev:
3295
        test    byte [esi], 10h
3296
        jnz     .1dir
3297
        test    byte [edi], 10h
3298
        jnz     .greater
3299
.eq1:
3300
        push    esi
3301
        mov     esi, [esi+28]
3302
        cmp     esi, [edi+28]
3303
        pop     esi
3304
        jnz     @f
3305
        push    esi
3306
        mov     esi, [esi+24]
3307
        cmp     esi, [edi+24]
3308
        pop     esi
3309
        jnz     @f
3310
        add     esi, 40
3311
        add     edi, 40
3312
        xchg    esi, edi
3313
        jmp     strcmpi
3314
@@:
3315
        ret
3316
.greater:
3317
        test    esi, esi
3318
        ret
3319
.1dir:
3320
        test    byte [edi], 10h
3321
        jnz     .eq1
3322
.less:
3323
        xor     edi, edi
3324
        stc
3325
        ret
3326
 
3327
compare_size:
3328
        test    byte [esi], 10h
3329
        jnz     .1dir
3330
        test    byte [edi], 10h
3331
        jnz     .greater
3332
.eq1:
3333
        push    edi
3334
        mov     edi, [edi+36]
3335
        cmp     edi, [esi+36]
3336
        pop     edi
3337
        jnz     @f
3338
        push    edi
3339
        mov     edi, [edi+32]
3340
        cmp     edi, [esi+32]
3341
        pop     edi
3342
        jnz     @f
3343
        add     esi, 40
3344
        add     edi, 40
3345
        jmp     strcmpi
3346
@@:
3347
        ret
3348
.greater:
3349
        test    esi, esi
3350
        ret
3351
.1dir:
3352
        test    byte [edi], 10h
3353
        jnz     .eq1
3354
.less:
3355
        xor     edi, edi
3356
        stc
3357
        ret
3358
 
3359
compare_size_rev:
3360
        test    byte [esi], 10h
3361
        jnz     .1dir
3362
        test    byte [edi], 10h
3363
        jnz     .greater
3364
.eq1:
3365
        push    esi
3366
        mov     esi, [esi+36]
3367
        cmp     esi, [edi+36]
3368
        pop     esi
3369
        jnz     @f
3370
        push    esi
3371
        mov     esi, [esi+32]
3372
        cmp     esi, [edi+32]
3373
        pop     esi
3374
        jnz     @f
3375
        add     esi, 40
3376
        add     edi, 40
3377
        xchg    esi, edi
3378
        jmp     strcmpi
3379
@@:
3380
        ret
3381
.greater:
3382
        test    esi, esi
3383
        ret
3384
.1dir:
3385
        test    byte [edi], 10h
3386
        jnz     .eq1
3387
.less:
3388
        xor     edi, edi
3389
        stc
3390
        ret
3391
 
3392
compare_unordered:
3393
        cmp     esi, edi
3394
        ret
3395
compare_unordered_rev:
3396
        cmp     edi, esi
3397
        ret
3398
 
3399
compare_created:
3400
        test    byte [esi], 10h
3401
        jnz     .1dir
3402
        test    byte [edi], 10h
3403
        jnz     .greater
3404
.eq1:
3405
        push    edi
3406
        mov     edi, [edi+12]
3407
        cmp     edi, [esi+12]
3408
        pop     edi
3409
        jnz     @f
3410
        push    edi
3411
        mov     edi, [edi+8]
3412
        cmp     edi, [esi+8]
3413
        pop     edi
3414
        jnz     @f
3415
        add     esi, 40
3416
        add     edi, 40
3417
        jmp     strcmpi
3418
@@:
3419
        ret
3420
.greater:
3421
        test    esi, esi
3422
        ret
3423
.1dir:
3424
        test    byte [edi], 10h
3425
        jnz     .eq1
3426
.less:
3427
        xor     edi, edi
3428
        stc
3429
        ret
3430
 
3431
compare_created_rev:
3432
        test    byte [esi], 10h
3433
        jnz     .1dir
3434
        test    byte [edi], 10h
3435
        jnz     .greater
3436
.eq1:
3437
        push    esi
3438
        mov     esi, [esi+12]
3439
        cmp     esi, [edi+12]
3440
        pop     esi
3441
        jnz     @f
3442
        push    esi
3443
        mov     esi, [esi+8]
3444
        cmp     esi, [edi+8]
3445
        pop     esi
3446
        jnz     @f
3447
        add     esi, 40
3448
        add     edi, 40
3449
        xchg    esi, edi
3450
        jmp     strcmpi
3451
@@:
3452
        ret
3453
.greater:
3454
        test    esi, esi
3455
        ret
3456
.1dir:
3457
        test    byte [edi], 10h
3458
        jnz     .eq1
3459
.less:
3460
        xor     edi, edi
3461
        stc
3462
        ret
3463
 
3464
compare_accessed:
3465
        test    byte [esi], 10h
3466
        jnz     .1dir
3467
        test    byte [edi], 10h
3468
        jnz     .greater
3469
.eq1:
3470
        push    edi
3471
        mov     edi, [edi+20]
3472
        cmp     edi, [esi+20]
3473
        pop     edi
3474
        jnz     @f
3475
        push    edi
3476
        mov     edi, [edi+16]
3477
        cmp     edi, [esi+16]
3478
        pop     edi
3479
        jnz     @f
3480
        add     esi, 40
3481
        add     edi, 40
3482
        jmp     strcmpi
3483
@@:
3484
        ret
3485
.greater:
3486
        test    esi, esi
3487
        ret
3488
.1dir:
3489
        test    byte [edi], 10h
3490
        jnz     .eq1
3491
.less:
3492
        xor     edi, edi
3493
        stc
3494
        ret
3495
 
3496
compare_accessed_rev:
3497
        test    byte [esi], 10h
3498
        jnz     .1dir
3499
        test    byte [edi], 10h
3500
        jnz     .greater
3501
.eq1:
3502
        push    esi
3503
        mov     esi, [esi+20]
3504
        cmp     esi, [edi+20]
3505
        pop     esi
3506
        jnz     @f
3507
        push    esi
3508
        mov     esi, [esi+16]
3509
        cmp     esi, [edi+16]
3510
        pop     esi
3511
        jnz     @f
3512
        add     esi, 40
3513
        add     edi, 40
3514
        xchg    esi, edi
3515
        jmp     strcmpi
3516
@@:
3517
        ret
3518
.greater:
3519
        test    esi, esi
3520
        ret
3521
.1dir:
3522
        test    byte [edi], 10h
3523
        jnz     .eq1
3524
.less:
3525
        xor     edi, edi
3526
        stc
3527
        ret
3528
 
283 diamond 3529
if 0
180 heavyiron 3530
match_mask:
3531
; in: esi->name, edi->mask
3532
; out: CF clear <=> match
3533
        pusha
3534
        xchg    esi, edi
3535
.main_cycle:
3536
        push    esi
3537
@@:
3538
        lodsb
3539
        test    al, al
3540
        jz      @f
3541
        cmp     al, ','
3542
        jz      @f
3543
        cmp     al, '|'
3544
        jnz     @b
3545
@@:
3546
        mov     [esi-1], byte 0
3547
        xchg    esi, [esp]
3548
        call    match_single_mask
3549
        pop     esi
3550
        mov     [esi-1], al
3551
        jnc     .found
3552
        cmp     al, ','
3553
        jz      .main_cycle
3554
.done_fail:
3555
        stc
3556
        popa
3557
        ret
3558
.found:
3559
        test    al, al
3560
        jz      .done_succ
3561
        cmp     al, '|'
3562
        jz      .test_exclude
3563
        lodsb
3564
        jmp     .found
3565
.done_succ:
3566
        clc
3567
        popa
3568
        ret
3569
.test_exclude:
3570
        push    esi
3571
@@:
3572
        lodsb
3573
        test    al, al
3574
        jz      @f
3575
        cmp     al, ','
3576
        jnz     @b
3577
@@:
3578
        mov     byte [esi-1], 0
3579
        xchg    esi, [esp]
3580
        call    match_single_mask
3581
        pop     esi
3582
        mov     [esi-1], al
3583
        jnc     .done_fail
3584
        test    al, al
3585
        jz      .done_succ
3586
        jmp     .test_exclude
3587
 
3588
match_single_mask:
3589
; in: esi->mask, edi->name
3590
; out: CF clear <=> match
3591
        pusha
3592
.mask_symbol:
3593
        lodsb
3594
        test    al, al
3595
        jz      .mask_done
3596
        cmp     al, '*'
3597
        jz      .asterisk
3598
        cmp     al, '?'
3599
        jz      .quest
3600
        cmp     al, '['
3601
        jz      .list
3602
        call    match_symbol
3603
        jnz     .done_fail
3604
        inc     edi
3605
        jmp     .mask_symbol
3606
.done_fail:
3607
        stc
3608
        popa
3609
        ret
3610
.mask_done:
3611
        scasb
3612
        jnz     .done_fail
3613
.done_succ:
3614
        clc
3615
        popa
3616
        ret
3617
.quest:
3618
        mov     al, 0
3619
        scasb
3620
        jz      .done_fail
3621
        jmp     .mask_symbol
3622
.list:
3623
        lodsb
3624
        cmp     al, ']'
3625
        jz      .done_fail
3626
        cmp     byte [esi+1], '-'
3627
        jz      .range
3628
        call    match_symbol
3629
        jnz     .list
3630
.listok:
3631
        inc     edi
3632
@@:
3633
        lodsb
3634
        cmp     al, ']'
3635
        jnz     @b
3636
        jmp     .mask_symbol
3637
.range:
3638
        call    match_symbol
3639
        ja      @f
3640
        mov     al, [esi+2]
3641
        call    match_symbol
3642
        jae     .listok
3643
@@:
3644
        inc     esi
3645
        jmp     .list
3646
.asterisk:
283 diamond 3647
        cmp     byte [esi], 0
3648
        jz      .done_succ
3649
        cmp     byte [esi], '?'
3650
        jnz     @f
3651
        mov     al, 0
3652
        scasb
3653
        jz      .done_fail
3654
        inc     esi
3655
        jmp     .asterisk
3656
@@:
3657
        cmp     byte [esi], '['
3658
        jz      .asterisk_common
3659
; the mask is ...*...
3660
.asterisk_normal:
3661
        mov     al, [esi]
3662
@@:
3663
        cmp     byte [edi], 0
3664
        jz      .done_fail
3665
        call    match_symbol
3666
        jz      @f
3667
        inc     edi
3668
        jmp     @b
3669
@@:
3670
        inc     edi
3671
        inc     esi
3672
        call    match_single_mask
3673
        jnc     .done_succ
3674
        dec     esi
3675
        jmp     .asterisk_normal
3676
.asterisk_common:
180 heavyiron 3677
        push    edi
3678
@@:
3679
        call    match_single_mask
3680
        jnc     @f
3681
        mov     al, 0
3682
        scasb
3683
        jnz     @b
3684
        pop     edi
3685
        jmp     .done_fail
3686
@@:
3687
        pop     edi
3688
        jmp     .done_succ
3689
 
283 diamond 3690
match_mask_rev:
3691
; in: esi->name, edx->end of name, edi->mask
3692
; out: CF clear <=> match
3693
        pusha
3694
        xchg    esi, edx
3695
        xchg    esi, edi
3696
.main_cycle:
3697
        mov     ecx, esi
3698
@@:
3699
        lodsb
3700
        test    al, al
3701
        jz      @f
3702
        cmp     al, ','
3703
        jz      @f
3704
        cmp     al, '|'
3705
        jnz     @b
3706
@@:
3707
        dec     esi
3708
        mov     [esi], byte 0
3709
        call    match_single_mask_rev2
3710
        mov     [esi], al
3711
        inc     esi
3712
        jnc     .found
3713
        cmp     al, ','
3714
        jz      .main_cycle
3715
.done_fail:
3716
        stc
3717
        popa
3718
        ret
3719
.found:
3720
        test    al, al
3721
        jz      .done_succ
3722
        cmp     al, '|'
3723
        jz      .test_exclude
3724
        lodsb
3725
        jmp     .found
3726
.done_succ:
3727
        clc
3728
        popa
3729
        ret
3730
.test_exclude:
3731
        mov     ecx, esi
3732
@@:
3733
        lodsb
3734
        test    al, al
3735
        jz      @f
3736
        cmp     al, ','
3737
        jnz     @b
3738
@@:
3739
        dec     esi
3740
        mov     byte [esi], 0
3741
        call    match_single_mask_rev2
3742
        mov     [esi], al
3743
        inc     esi
3744
        jnc     .done_fail
3745
        test    al, al
3746
        jz      .done_succ
3747
        jmp     .test_exclude
3748
 
3749
match_single_mask_rev2:
3750
        pusha
3751
        jmp     match_single_mask_rev.mask_symbol
3752
match_single_mask_rev:
3753
; in: esi->mask, edi->end of name, edx->start of name
3754
; out: CF clear <=> match
3755
        pusha
3756
        mov     ecx, esi
3757
@@:
3758
        lodsb
3759
        test    al, al
3760
        jnz     @b
3761
        dec     esi
3762
; esi->end of mask, ecx->start of mask
3763
.mask_symbol:
3764
        dec     esi
3765
        cmp     esi, ecx
3766
        jb      .mask_done
3767
        mov     al, [esi]
3768
        cmp     al, '*'
3769
        jz      .asterisk
3770
        cmp     al, '?'
3771
        jz      .quest
3772
        cmp     al, ']'
3773
        jz      .list
3774
        dec     edi
3775
        cmp     edi, edx
3776
        jb      .done_fail
3777
        call    match_symbol
3778
        jz      .mask_symbol
3779
.done_fail:
3780
        stc
3781
        popa
3782
        ret
3783
.mask_done:
3784
        cmp     edi, edx
3785
        jnz     .done_fail
3786
.done_succ:
3787
        clc
3788
        popa
3789
        ret
3790
.quest:
3791
        dec     edi
3792
        cmp     edi, edx
3793
        jb      .done_fail
3794
        jmp     .mask_symbol
3795
.list:
3796
        dec     edi
3797
        cmp     edi, edx
3798
        jb      .done_fail
3799
.list_check:
3800
        dec     esi
3801
        cmp     esi, ecx
3802
        jbe     .done_fail
3803
        mov     al, [esi]
3804
        cmp     al, '['
3805
        jz      .done_fail
3806
        cmp     byte [esi-1], '-'
3807
        jz      .range
3808
        call    match_symbol
3809
        jnz     .list_check
3810
.listok:
3811
@@:
3812
        dec     esi
3813
        cmp     esi, ecx
3814
        jb      .done_fail
3815
        cmp     byte [esi], '['
3816
        jnz     @b
3817
        jmp     .mask_symbol
3818
.range:
3819
        call    match_symbol
3820
        jb      @f
3821
        mov     al, [esi-2]
3822
        call    match_symbol
3823
        jbe     .listok
3824
@@:
3825
        dec     esi
3826
        dec     esi
3827
        jmp     .list_check
3828
.asterisk:
3829
        cmp     esi, ecx
3830
        jz      .done_succ
3831
        cmp     byte [esi-1], '?'
3832
        jnz     @f
3833
        cmp     edi, edx
3834
        jz      .done_fail
3835
        dec     esi
3836
        jmp     .asterisk
3837
@@:
3838
        cmp     byte [esi-1], ']'
3839
        jz      .asterisk_common
3840
; the mask is ...*...
3841
.asterisk_normal:
3842
        mov     al, [esi-1]
3843
@@:
3844
        cmp     edi, edx
3845
        jz      .done_fail
3846
        call    match_symbol
3847
        jz      @f
3848
        dec     edi
3849
        jmp     @b
3850
@@:
3851
        dec     edi
3852
        dec     esi
3853
        call    match_single_mask_rev2
3854
        jnc     .done_succ
3855
        inc     esi
3856
        jmp     .asterisk_normal
3857
.asterisk_common:
3858
        push    edi
3859
@@:
3860
        call    match_single_mask_rev2
3861
        jnc     @f
3862
        dec     edi
3863
        cmp     edi, edx
3864
        jae     @b
3865
        pop     edi
3866
        jmp     .done_fail
3867
@@:
3868
        pop     edi
3869
        jmp     .done_succ
3870
end if
3871
 
180 heavyiron 3872
tolower:
3873
        cmp     al, 'A'
3874
        jb      @f
3875
        cmp     al, 'Z'
3876
        ja      @f
3877
        add     al, ' '
3878
@@:     ret
3879
 
3880
match_symbol:
3881
; in: al,[edi]=symbols
3882
; out: flags as 'cmp al,[edi]'
3883
        push    eax
3884
        call    tolower
3885
        mov     ah, [edi]
3886
        xchg    al, ah
3887
        call    tolower
3888
        cmp     ah, al
3889
        pop     eax
3890
        ret
3891
 
283 diamond 3892
match_mask_rev_lowercase:
3893
; in: esi->name, edx->end of name, edi->mask
3894
; out: CF clear <=> match
3895
        pusha
3896
        xchg    esi, edx
3897
        xchg    esi, edi
3898
.main_cycle:
3899
        mov     ecx, esi
3900
@@:
3901
        lodsb
3902
        test    al, al
3903
        jz      @f
3904
        cmp     al, ','
3905
        jz      @f
3906
        cmp     al, '|'
3907
        jnz     @b
3908
@@:
3909
        dec     esi
3910
        mov     [esi], byte 0
3911
        call    match_single_mask_rev_lowercase
3912
        mov     [esi], al
3913
        inc     esi
3914
        jnc     .found
3915
        cmp     al, ','
3916
        jz      .main_cycle
3917
.done_fail:
3918
        stc
3919
        popa
3920
        ret
3921
.found:
3922
        test    al, al
3923
        jz      .done_succ
3924
        cmp     al, '|'
3925
        jz      .test_exclude
3926
        lodsb
3927
        jmp     .found
3928
.done_succ:
3929
        clc
3930
        popa
3931
        ret
3932
.test_exclude:
3933
        mov     ecx, esi
3934
@@:
3935
        lodsb
3936
        test    al, al
3937
        jz      @f
3938
        cmp     al, ','
3939
        jnz     @b
3940
@@:
3941
        dec     esi
3942
        mov     byte [esi], 0
3943
        call    match_single_mask_rev_lowercase
3944
        mov     [esi], al
3945
        inc     esi
3946
        jnc     .done_fail
3947
        test    al, al
3948
        jz      .done_succ
3949
        jmp     .test_exclude
180 heavyiron 3950
 
283 diamond 3951
match_single_mask_rev_lowercase:
3952
; in: esi->end of mask, ecx->start of mask, edi->end of name, edx->start of name
3953
; out: CF clear <=> match
3954
        push    esi edi eax
3955
.mask_symbol:
3956
        dec     esi
3957
        cmp     esi, ecx
3958
        jb      .mask_done
3959
        mov     al, [esi]
3960
        cmp     al, '*'
3961
        jz      .asterisk
3962
        cmp     al, '?'
3963
        jz      .quest
3964
        cmp     al, ']'
3965
        jz      .list
3966
        dec     edi
3967
        cmp     edi, edx
3968
        jb      .done_fail
3969
        cmp     al, [edi]
3970
        jz      .mask_symbol
3971
.done_fail:
3972
        stc
3973
        pop     eax edi esi
3974
        ret
3975
.mask_done:
3976
        cmp     edi, edx
3977
        jnz     .done_fail
3978
.done_succ:
3979
        clc
3980
        pop     eax edi esi
3981
        ret
3982
.quest:
3983
        dec     edi
3984
        cmp     edi, edx
3985
        jb      .done_fail
3986
        jmp     .mask_symbol
3987
.list:
3988
        dec     edi
3989
        cmp     edi, edx
3990
        jb      .done_fail
3991
.list_check:
3992
        dec     esi
3993
        cmp     esi, ecx
3994
        jbe     .done_fail
3995
        mov     al, [esi]
3996
        cmp     al, '['
3997
        jz      .done_fail
3998
        cmp     byte [esi-1], '-'
3999
        jz      .range
4000
        cmp     al, [edi]
4001
        jnz     .list_check
4002
.listok:
4003
@@:
4004
        dec     esi
4005
        cmp     esi, ecx
4006
        jb      .done_fail
4007
        cmp     byte [esi], '['
4008
        jnz     @b
4009
        jmp     .mask_symbol
4010
.range:
4011
        cmp     al, [edi]
4012
        jb      @f
4013
        mov     al, [esi-2]
4014
        cmp     al, [edi]
4015
        jbe     .listok
4016
@@:
4017
        dec     esi
4018
        dec     esi
4019
        jmp     .list_check
4020
.asterisk:
4021
        cmp     esi, ecx
4022
        jz      .done_succ
4023
        cmp     byte [esi-1], '?'
4024
        jnz     @f
4025
        cmp     edi, edx
4026
        jz      .done_fail
4027
        dec     esi
4028
        jmp     .asterisk
4029
@@:
4030
        cmp     byte [esi-1], ']'
4031
        jz      .asterisk_common
4032
; the mask is ...*...
4033
.asterisk_normal:
4034
        mov     al, [esi-1]
4035
@@:
4036
        cmp     edi, edx
4037
        jz      .done_fail
4038
        cmp     al, [edi]
4039
        jz      @f
4040
        dec     edi
4041
        jmp     @b
4042
@@:
4043
        dec     edi
4044
        dec     esi
4045
        call    match_single_mask_rev_lowercase
4046
        jnc     .done_succ
4047
        inc     esi
4048
        jmp     .asterisk_normal
4049
.asterisk_common:
4050
        push    edi
4051
@@:
4052
        call    match_single_mask_rev_lowercase
4053
        jnc     @f
4054
        dec     edi
4055
        cmp     edi, edx
4056
        jae     @b
4057
        pop     edi
4058
        jmp     .done_fail
4059
@@:
4060
        pop     edi
4061
        jmp     .done_succ
180 heavyiron 4062
 
283 diamond 4063
find_extension:
4064
        lea     esi, [ecx+40]
4065
        push    esi
4066
@@:
4067
        lodsb
4068
        test    al, al
4069
        jnz     @b
4070
@@:
4071
        dec     esi
4072
        cmp     byte [esi], '.'
4073
        jz      .found_ext
4074
        cmp     esi, [esp]
4075
        ja      @b
4076
; empty extension
4077
        pop     esi
4078
        stc
4079
        ret
4080
.found_ext:
4081
        inc     esi
4082
        mov     edi, associations
4083
@@:
4084
        push    esi edi
4085
        mov     edi, [edi]
4086
        call    strcmpi
4087
        pop     edi esi
4088
        jz      @f
4089
        add     edi, 12
4090
        cmp     edi, associations_end
4091
        jb      @b
4092
; unknown extension
4093
        inc     edi
4094
@@:
4095
        pop     esi
4096
        ret
4097
 
321 diamond 4098
header  db      'Kolibri Far 0.21',0
283 diamond 4099
 
180 heavyiron 4100
nomem_draw      db      'No memory for redraw.',0
4101
.size = $ - nomem_draw
4102
 
4103
def_left_dir    db      '/rd/1',0
4104
def_right_dir   db      '/hd0/1',0
4105
 
314 diamond 4106
bSilentFolderMode db    1
4107
 
180 heavyiron 4108
if lang eq ru
4109
aFolder         db      'Папка'
4110
.size = $-aFolder
4111
aUp             db      'Вверх'
4112
.size = $-aUp
4113
aDrive          db      'Диск',0
4114
aScreens        db      'Экраны',0
4115
else
4116
aFolder         db      'Folder'
4117
.size = $-aFolder
4118
aUp             db      'Up'
4119
.size = $-aUp
4120
aDrive          db      'Drive',0
4121
aScreens        db      'Screens',0
4122
end if
4123
 
4124
_10d dd 10
4125
_100d dd 100
4126
_10 db 10
4127
_100 db 100
4128
 
4129
fpu_cw  dw      000011100111111b
4130
 
4131
keybar_panels:
4132
if lang eq ru
4133
; без клавиш-модификаторов
4134
        db      'Помощь'
4135
        db      'ПользМ'
4136
        db      'Просм '
4137
        db      'Редакт'
4138
        db      'Копир '
4139
        db      'Перен '
4140
        db      'Папка '
4141
        db      'Удален'
4142
        db      'КонфМн'
4143
        db      'Выход '
4144
        db      'Модули'
4145
        db      'Экраны'
4146
; Shift
4147
        db      'Добавл'
4148
        db      'Распак'
4149
        db      'АрхКом'
4150
        db      'Редак.'
4151
        db      'Копир '
4152
        db      'Переим'
4153
        db      '      '
4154
        db      'Удален'
4155
        db      'Сохран'
4156
        db      'Послдн'
4157
        db      'Группы'
4158
        db      'Выбран'
4159
; Ctrl
4160
        db      'Левая '
4161
        db      'Правая'
4162
        db      'Имя   '
4163
        db      'Расшир'
4164
        db      'Модиф '
4165
        db      'Размер'
4166
        db      'Несорт'
4167
        db      'Создан'
4168
        db      'Доступ'
4169
        db      'Описан'
4170
        db      'Владел'
4171
        db      'Сорт  '
4172
; Ctrl+Shift
4173
        db      '      '
4174
        db      '      '
4175
        db      'Просм '
4176
        db      'Редакт'
4177
        db      '      '
4178
        db      '      '
4179
        db      '      '
4180
        db      '      '
4181
        db      '      '
4182
        db      '      '
4183
        db      '      '
4184
        db      '      '
4185
; Alt
4186
        db      'Левая '
4187
        db      'Правая'
4188
        db      'Смотр.'
4189
        db      'Редак.'
4190
        db      'Печать'
4191
        db      'Связь '
4192
        db      'Искать'
4193
        db      'Истор '
4194
        db      'Видео '
4195
        db      'Дерево'
4196
        db      'ИстПр '
4197
        db      'ИстПап'
4198
; Alt+Shift
4199
        db      '      '
4200
        db      '      '
4201
        db      '      '
4202
        db      '      '
4203
        db      '      '
4204
        db      '      '
4205
        db      '      '
4206
        db      '      '
4207
        db      'КонфПл'
4208
        db      '      '
4209
        db      '      '
4210
        db      '      '
4211
; Alt+Ctrl
4212
times 12 db     '      '
4213
; Alt+Ctrl+Shift
4214
times 12 db     '      '
4215
else
4216
; No modificators
4217
        db      'Help  '
4218
        db      'UserMn'
4219
        db      'View  '
4220
        db      'Edit  '
4221
        db      'Copy  '
4222
        db      'RenMov'
4223
        db      'MkFold'
4224
        db      'Delete'
4225
        db      'ConfMn'
4226
        db      'Quit  '
4227
        db      'Plugin'
4228
        db      'Screen'
4229
; Shift
4230
        db      'Add   '
4231
        db      'Extrct'
4232
        db      'ArcCmd'
4233
        db      'Edit..'
4234
        db      'Copy  '
4235
        db      'Rename'
4236
        db      '      '
4237
        db      'Delete'
4238
        db      'Save  '
4239
        db      'Last  '
4240
        db      'Group '
4241
        db      'SelUp '
4242
; Ctrl
4243
        db      'Left  '
4244
        db      'Right '
4245
        db      'Name  '
4246
        db      'Extens'
4247
        db      'Modifn'
4248
        db      'Size  '
4249
        db      'Unsort'
4250
        db      'Creatn'
4251
        db      'Access'
4252
        db      'Descr '
4253
        db      'Owner '
4254
        db      'Sort  '
4255
; Ctrl+Shift
4256
        db      '      '
4257
        db      '      '
4258
        db      'View  '
4259
        db      'Edit  '
4260
        db      '      '
4261
        db      '      '
4262
        db      '      '
4263
        db      '      '
4264
        db      '      '
4265
        db      '      '
4266
        db      '      '
4267
        db      '      '
4268
; Alt
4269
        db      'Left  '
4270
        db      'Right '
4271
        db      'View..'
4272
        db      'Edit..'
4273
        db      'Print '
4274
        db      'MkLink'
4275
        db      'Find  '
4276
        db      'Histry'
4277
        db      'Video '
4278
        db      'Tree  '
4279
        db      'ViewHs'
4280
        db      'FoldHs'
4281
; Alt+Shift
4282
        db      '      '
4283
        db      '      '
4284
        db      '      '
4285
        db      '      '
4286
        db      '      '
4287
        db      '      '
4288
        db      '      '
4289
        db      '      '
4290
        db      'ConfPl'
4291
        db      '      '
4292
        db      '      '
4293
        db      '      '
4294
; Alt+Ctrl
4295
times 12 db     '      '
4296
; Alt+Ctrl+Shift
4297
times 12 db     '      '
4298
end if
4299
 
4300
keybar_viewer:
4301
if lang eq ru
4302
; без клавиш-модификаторов
4303
        db      'Помощь'
4304
        db      'Развер'
4305
        db      'Выход '
4306
        db      'Код   '
4307
        db      '      '
4308
        db      'Редакт'
4309
        db      'Поиск '
4310
keybar_cp:
4311
        db      'cp1251'
4312
        db      '      '
4313
        db      'Выход '
4314
        db      'Модули'
4315
        db      'Экраны'
4316
; Shift
4317
        db      '      '
4318
        db      'Слова '
4319
        db      '      '
4320
        db      '      '
4321
        db      '      '
4322
        db      '      '
4323
        db      'Дальше'
4324
        db      'Таблиц'
4325
        db      '      '
4326
        db      '      '
4327
        db      '      '
4328
        db      '      '
4329
; Ctrl
4330
        db      '      '
4331
        db      '      '
4332
        db      '      '
4333
        db      '      '
4334
        db      '      '
4335
        db      '      '
4336
        db      '      '
4337
        db      '      '
4338
        db      '      '
4339
        db      'Позиц '
4340
        db      '      '
4341
        db      '      '
4342
; Ctrl+Shift
4343
        db      '      '
4344
        db      '      '
4345
        db      '      '
4346
        db      '      '
4347
        db      '      '
4348
        db      '      '
4349
        db      '      '
4350
        db      '      '
4351
        db      '      '
4352
        db      '      '
4353
        db      '      '
4354
        db      '      '
4355
; Alt
4356
        db      '      '
4357
        db      '      '
4358
        db      '      '
4359
        db      '      '
4360
        db      'Печать'
4361
        db      '      '
4362
        db      'Назад '
4363
        db      'Перейт'
4364
        db      'Видео '
4365
        db      '      '
4366
        db      'ИстПр '
4367
        db      '      '
4368
; Alt+Shift
4369
        db      '      '
4370
        db      '      '
4371
        db      '      '
4372
        db      '      '
4373
        db      '      '
4374
        db      '      '
4375
        db      '      '
4376
        db      '      '
4377
        db      'Конфиг'
4378
        db      '      '
4379
        db      '      '
4380
        db      '      '
4381
; Alt+Ctrl
4382
times 12 db     '      '
4383
; Alt+Ctrl+Shift
4384
times 12 db     '      '
4385
else
4386
; No modificators
4387
        db      'Help  '
4388
        db      'Unwrap'
4389
        db      'Quit  '
4390
        db      'Hex   '
4391
        db      '      '
4392
        db      'Edit  '
4393
        db      'Search'
4394
keybar_cp:
4395
        db      'cp1251'
4396
        db      '      '
4397
        db      'Quit  '
4398
        db      'Plugin'
4399
        db      'Screen'
4400
; Shift
4401
        db      '      '
4402
        db      'WWrap '
4403
        db      '      '
4404
        db      '      '
4405
        db      '      '
4406
        db      '      '
4407
        db      'Next  '
4408
        db      'Table '
4409
        db      '      '
4410
        db      '      '
4411
        db      '      '
4412
        db      '      '
4413
; Ctrl
4414
        db      '      '
4415
        db      '      '
4416
        db      '      '
4417
        db      '      '
4418
        db      '      '
4419
        db      '      '
4420
        db      '      '
4421
        db      '      '
4422
        db      '      '
4423
        db      'GoFile'
4424
        db      '      '
4425
        db      '      '
4426
; Ctrl+Shift
4427
        db      '      '
4428
        db      '      '
4429
        db      '      '
4430
        db      '      '
4431
        db      '      '
4432
        db      '      '
4433
        db      '      '
4434
        db      '      '
4435
        db      '      '
4436
        db      '      '
4437
        db      '      '
4438
        db      '      '
4439
; Alt
4440
        db      '      '
4441
        db      '      '
4442
        db      '      '
4443
        db      '      '
4444
        db      'Print '
4445
        db      '      '
4446
        db      'Prev  '
4447
        db      'Goto  '
4448
        db      'Video '
4449
        db      '      '
4450
        db      'ViewHs'
4451
        db      '      '
4452
; Alt+Shift
4453
        db      '      '
4454
        db      '      '
4455
        db      '      '
4456
        db      '      '
4457
        db      '      '
4458
        db      '      '
4459
        db      '      '
4460
        db      '      '
4461
        db      'Config'
4462
        db      '      '
4463
        db      '      '
4464
        db      '      '
4465
; Alt+Ctrl
4466
times 12 db     '      '
4467
; Alt+Ctrl+Shift
4468
times 12 db     '      '
4469
end if
4470
 
4471
        align   4
4472
cur_width       dd      80
4473
cur_height      dd      25
283 diamond 4474
saved_width     dd      -1
4475
saved_height    dd      -1
314 diamond 4476
fill_width      dd      0
4477
fill_height     dd      0
180 heavyiron 4478
max_width = 256
4479
max_height = 256
283 diamond 4480
console_data_ptr dd     0
180 heavyiron 4481
 
283 diamond 4482
cursor_x        dd      -1
4483
cursor_y        dd      -1
4484
old_cursor_x    dd      -1
4485
old_cursor_y    dd      -1
4486
 
180 heavyiron 4487
active_panel    dd      panel1_data
4488
 
4489
console_colors  dd      0x000000, 0x000080, 0x008000, 0x008080
4490
                dd      0x800000, 0x800080, 0x808000, 0xC0C0C0
4491
                dd      0x808080, 0x0000FF, 0x00FF00, 0x00FFFF
4492
                dd      0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
4493
 
4494
compare_fns     dd      compare_name
4495
                dd      compare_name_rev
4496
                dd      compare_ext
4497
                dd      compare_ext_rev
4498
                dd      compare_modified
4499
                dd      compare_modified_rev
4500
                dd      compare_size
4501
                dd      compare_size_rev
4502
                dd      compare_unordered
4503
                dd      compare_unordered_rev
4504
                dd      compare_created
4505
                dd      compare_created_rev
4506
                dd      compare_accessed
4507
                dd      compare_accessed_rev
4508
 
4509
ctrlkey_tests   dd      ctrlkey_test0
4510
                dd      ctrlkey_test1
4511
                dd      ctrlkey_test2
4512
                dd      ctrlkey_test3
4513
                dd      ctrlkey_test4
4514
ctrlkey_tests_num = 5
4515
 
4516
virtual at 0
4517
screen_vtable:
4518
        .OnRedraw       dd      ?
4519
        .OnKey          dd      ?
4520
        .keybar         dd      ?
4521
        .getname        dd      ?
4522
end virtual
4523
 
4524
panels_vtable:
4525
        dd      panels_OnRedraw
4526
        dd      panels_OnKey
4527
        dd      keybar_panels
4528
        dd      panels_getname
4529
 
4530
viewer_vtable:
4531
        dd      viewer_OnRedraw
4532
        dd      viewer_OnKey
4533
        dd      keybar_viewer
4534
        dd      viewer_getname
4535
 
314 diamond 4536
; additions to this table require changes in tools.inc::get_error_msg
4537
errors1:
4538
        dd      error0msg
4539
        dd      error1msg
4540
        dd      error2msg
4541
        dd      error3msg
4542
        dd      error4msg
4543
        dd      error5msg
4544
        dd      error6msg
4545
        dd      error7msg
4546
        dd      error8msg
4547
        dd      error9msg
4548
        dd      error10msg
4549
        dd      error11msg
4550
errors2:
4551
        dd      error30msg
4552
        dd      error31msg
4553
        dd      error32msg
4554
 
180 heavyiron 4555
encodings:
4556
.cp866 = 0
4557
.cp1251 = 1
4558
 
4559
.names:
4560
        db      'cp866   '
4561
        db      'cp1251  '
4562
 
4563
.tables:
4564
; cp866 - trivial map
4565
        times 128 db %+127
4566
; cp1251
4567
        db      0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8,0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F
4568
        db      0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D,0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F
4569
        db      0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15,0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4
4570
        db      0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA,0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5
4571
        times 0x30 db %-1+0x80
4572
        times 0x10 db %-1+0xE0
4573
 
4574
active_screen   dd      0
4575
tabsize         dd      8
4576
 
4577
ascii2scan:
4578
        times 32 db 0
4579
        db      0x39,0x02,0x03,0x04,0x05,0x06,0x08,0x28,0x0A,0x0B,0x09,0x0D,0x33,0x0C,0x34,0x35
4580
        db      0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x27,0x27,0x33,0x0D,0x34,0x35
4581
        db      0x03,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
4582
        db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x07,0x0C
4583
        db      0x29,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
4584
        db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x29,0x00
4585
        db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
4586
        db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
4587
        db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
4588
        times 48 db 0
4589
        db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
4590
        db      0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
4591
 
4592
; Клавишные сочетания
4593
; db scancode, reserved
4594
; dw ctrlstate
4595
; dd handler
4596
; ctrlstate: младшие 4 бита - для Shift, следующие - для Ctrl, следующие - для Alt
4597
; 0 = ни одна клавиша не нажата
4598
; 1 = ровно одна нажата
4599
; 2 = обе нажаты
4600
; 3 = левая нажата, правая нет
4601
; 4 = правая нажата, левая нет
4602
panels_ctrlkeys:
4603
        dw      0x48, 0
4604
        dd      panels_OnKey.up
4605
        dw      0x50, 0
4606
        dd      panels_OnKey.down
4607
        dw      0x4B, 0
4608
        dd      panels_OnKey.left
4609
        dw      0x4D, 0
4610
        dd      panels_OnKey.right
4611
        dw      0xF, 0
4612
        dd      panels_OnKey.tab
4613
        dw      0x47, 0
4614
        dd      panels_OnKey.home
4615
        dw      0x4F, 0
4616
        dd      panels_OnKey.end
4617
        dw      0x1C, 0
4618
        dd      panels_OnKey.enter
4619
        dw      0x3D, 0
4620
        dd      panels_OnKey.f3
283 diamond 4621
        dw      0x3F, 0
4622
        dd      panels_OnKey.f5
4623
        dw      0x3F, 1
4624
        dd      panels_OnKey.shift_f5
321 diamond 4625
        dw      0x41, 0
4626
        dd      panels_OnKey.f7
180 heavyiron 4627
        dw      0x42, 0
4628
        dd      panels_OnKey.f8
283 diamond 4629
        dw      0x43, 0x100
4630
        dd      alt_f9
180 heavyiron 4631
        dw      0x44, 0
4632
        dd      exit
283 diamond 4633
        dw      0x5D, 0
4634
        dd      panels_OnKey.menu
180 heavyiron 4635
repeat 9-3+1
4636
        dw      0x3D+%-1, 0x10
4637
        dd      panels_OnKey.ctrl_f39
4638
end repeat
4639
        dw      0x3B, 0x100
4640
        dd      panels_OnKey.alt_f12
4641
        dw      0x3C, 0x100
4642
        dd      panels_OnKey.alt_f12
4643
        dw      0x58, 0
4644
        dd      F12
4645
        dw      0x13, 0x10
4646
        dd      panels_OnKey.ctrl_r
4647
        db      0
4648
 
4649
viewer_ctrlkeys:
4650
        dw      1, 0
4651
        dd      viewer_OnKey.exit
4652
        dw      0x51, 0
4653
        dd      viewer_OnKey.pgdn
4654
        dw      0x49, 0
4655
        dd      viewer_OnKey.pgup
4656
        dw      0x50, 0
4657
        dd      viewer_OnKey.down
4658
        dw      0x48, 0
4659
        dd      viewer_OnKey.up
4660
        dw      0x4B, 0
4661
        dd      viewer_OnKey.left
4662
        dw      0x4B, 0x10
4663
        dd      viewer_OnKey.ctrl_left
4664
        dw      0x4B, 0x11
4665
        dd      viewer_OnKey.ctrl_shift_left
4666
        dw      0x4C, 0
4667
        dd      viewer_OnKey.exit
4668
        dw      0x4D, 0
4669
        dd      viewer_OnKey.right
4670
        dw      0x4D, 0x10
4671
        dd      viewer_OnKey.ctrl_right
4672
        dw      0x4D, 0x11
4673
        dd      viewer_OnKey.ctrl_shift_right
4674
        dw      0x3C, 0
4675
        dd      viewer_OnKey.f2
4676
        dw      0x3D, 0
4677
        dd      viewer_OnKey.exit
4678
        dw      0x3E, 0
4679
        dd      viewer_OnKey.f4
4680
        dw      0x42, 0
4681
        dd      viewer_OnKey.f8
4682
        dw      0x44, 0
4683
        dd      viewer_OnKey.exit
4684
        dw      0x47, 0
4685
        dd      viewer_OnKey.home
4686
        dw      0x4F, 0
4687
        dd      viewer_OnKey.end
4688
        dw      0x58, 0
4689
        dd      F12
283 diamond 4690
        dw      0x43, 0x100
4691
        dd      alt_f9
180 heavyiron 4692
        db      0
4693
 
4694
dirinfo:
4695
                dd      1
4696
.first          dd      0
4697
                dd      0
4698
.size           dd      300
4699
.dirdata        dd      0
4700
                db      0
4701
.name           dd      0
4702
 
4703
readinfo:
4704
                dd      0
4705
.first          dq      0
4706
.size           dd      0
4707
.data           dd      0
4708
                db      0
4709
.name           dd      0
4710
 
283 diamond 4711
writeinfo:
4712
.code           dd      2
4713
.first          dq      0
4714
.size           dd      0
4715
.data           dd      0
4716
                db      0
4717
.name           dd      0
4718
 
180 heavyiron 4719
attrinfo:
4720
                dd      5
4721
                dd      0
4722
                dd      0
4723
                dd      0
4724
                dd      .attr
4725
                db      0
4726
.name           dd      0
4727
 
4728
delinfo:
4729
                dd      8
4730
                dd      0
4731
                dd      0
4732
                dd      0
4733
                dd      0
4734
                db      0
4735
                dd      execdata
4736
 
321 diamond 4737
mkdirinfo:
4738
                dd      9
4739
                dd      0
4740
                dd      0
4741
                dd      0
4742
                dd      0
4743
                db      0
4744
                dd      CopyDestEditBuf+12
4745
 
180 heavyiron 4746
if lang eq ru
4747
compare_names   db      'иИрРмМаАнНсСдД'
4748
else
4749
compare_names   db      'nNxXmMsSuUcCaA'
4750
end if
4751
 
183 diamond 4752
; Здесь начинаются конфигурационные данные - в текущей реализации они зашиты в бинарник
4753
 
180 heavyiron 4754
; Панель
4755
panel_normal_color      db      1Bh
4756
panel_border_color      db      1Bh
4757
panel_cursor_color      db      30h
4758
panel_header_color      db      1Bh
4759
panel_active_header_color db    30h
4760
column_header_color     db      1Eh
4761
panel_nscreens_color    db      0Bh
183 diamond 4762
; Диалоги
314 diamond 4763
dialog_colors:
183 diamond 4764
dialog_main_color       db      70h
4765
dialog_border_color     db      70h
4766
dialog_header_color     db      70h
314 diamond 4767
dialog_edit_color       db      30h
4768
dialog_unmodified_edit_color db 38h
183 diamond 4769
dialog_normal_btn_color db      70h
4770
dialog_selected_btn_color db    30h
314 diamond 4771
; Предупреждения и ошибки
4772
warning_colors:
4773
; !!! должны быть те же поля и в том же порядке, что и для обычных диалогов !!!
4774
warning_main_color      db      4Fh
4775
warning_border_color    db      4Fh
4776
warning_header_color    db      4Fh
4777
warning_edit_color      db      30h
4778
warning_unmodified_edit_color db 38h
4779
warning_normal_btn_color db     4Fh
4780
warning_selected_btn_color db   70h
180 heavyiron 4781
; Меню
4782
menu_normal_color       db      3Fh
4783
menu_selected_color     db      0Fh
4784
menu_highlight_color    db      3Eh
4785
menu_selected_highlight_color db 0Eh
4786
menu_border_color       db      3Fh
4787
menu_header_color       db      3Fh
4788
menu_scrollbar_color    db      3Fh
4789
; Линейка клавиш
4790
keybar_number_color     db      7
4791
keybar_name_color       db      30h
4792
keybar_bgr_color        db      7
4793
; Командная строка
4794
cmdbar_normal_color     db      7
4795
cmdbar_prefix_color     db      7
4796
; Просмотрщик
4797
view_normal_color       db      1Bh
4798
view_status_color       db      30h
4799
view_arrows_color       db      1Eh
4800
 
4801
; Подсветка файлов
4802
highlight_num_groups    dd      10
4803
highlight_groups        dd      highlight_group0
4804
                dd      highlight_group1
4805
                dd      highlight_group2
4806
                dd      highlight_group3
4807
                dd      highlight_group4
4808
                dd      highlight_group5
4809
                dd      highlight_group6
4810
                dd      highlight_group7
4811
                dd      highlight_group8
4812
                dd      highlight_group9
4813
 
4814
; Формат описания группы подсветки:
4815
virtual at 0
4816
highlight:
4817
        .NormalColor            db ?
4818
        .CursorColor            db ?
4819
        .IncludeAttributes      db ?
4820
        .Mask:                  ; ASCIIZ-string
4821
end virtual
4822
 
283 diamond 4823
; all highlight masks must be in lowercase!
180 heavyiron 4824
highlight_group0:
4825
        db      13h
4826
        db      38h
4827
        db      2
4828
        db      '*',0
4829
highlight_group1:
4830
        db      13h
4831
        db      38h
4832
        db      4
4833
        db      '*',0
4834
highlight_group2:
4835
        db      1Fh
4836
        db      3Fh
4837
        db      10h
4838
        db      '*|..',0
4839
highlight_group3:
4840
        db      0
4841
        db      0
4842
        db      10h
4843
        db      '..',0
4844
highlight_group4:
4845
        db      1Ah
4846
        db      3Ah
4847
        db      0
4848
        db      '*.exe,*.com,*.bat,*.cmd',0
4849
highlight_group5:
4850
        db      1Ah
4851
        db      3Ah
4852
        db      0
4853
        db      '*|*.*',0
4854
highlight_group6:
4855
        db      1Dh
4856
        db      3Dh
4857
        db      0
4858
        db      '*.rar,*.zip,*.[zj],*.[bg7]z,*.[bg]zip,*.tar,*.t[ag]z,*.ar[cj],*.r[0-9][0-9],'
4859
        db      '*.a[0-9][0-9],*.bz2,*.cab,*.msi,*.jar,*.lha,*.lzh,*.ha,*.ac[bei],*.pa[ck],'
4860
        db      '*.rk,*.cpio,*.rpm,*.zoo,*.hqx,*.sit,*.ice,*.uc2,*.ain,*.imp,*.777,*.ufa,*.boa,'
4861
        db      '*.bs[2a],*.sea,*.hpk,*.ddi,*.x2,*.rkv,*.[lw]sz,*.h[ay]p,*.lim,*.sqz,*.chz',0
4862
highlight_group7:
4863
        db      16h
4864
        db      36h
4865
        db      0
4866
        db      '*.bak,*.tmp',0
4867
highlight_group8:
4868
        db      17h
4869
        db      37h
4870
        db      0
4871
        db      '*.asm,*.inc',0
4872
highlight_group9:
4873
        db      1Fh
4874
        db      3Fh
4875
        db      10h
4876
        db      '*',0
4877
 
4878
associations:
283 diamond 4879
        dd      aAsm, tinypad, AsmMenu
4880
        dd      aInc, tinypad, 0
4881
        dd      aTxt, tinypad, 0
4882
        dd      aJpg, jpegview, 0
4883
        dd      aJpeg, jpegview, 0
4884
        dd      aGif, gifview, GifMenu
4885
        dd      aWav, ac97, 0
4886
        dd      aMp3, ac97, 0
4887
        dd      aMid, midamp, 0
4888
        dd      aBmp, mv, BmpMenu
4889
        dd      aPng, archer, 0
4890
        dd      aRtf, rtfread, 0
4891
        dd      a3ds, view3ds, 0
4892
        dd      aLif, life2, 0
180 heavyiron 4893
associations_end:
4894
 
4895
aAsm db 'asm',0
4896
aInc db 'inc',0
4897
aTxt db 'txt',0
4898
tinypad db '/rd/1/TinyPad',0
4899
 
4900
aJpg db 'jpg',0
4901
aJpeg db 'jpeg',0
4902
jpegview db '/rd/1/JpegView',0
4903
 
4904
aGif db 'gif',0
4905
gifview db '/rd/1/GIFVIEW',0
4906
 
4907
aWav db 'wav',0
4908
aMp3 db 'mp3',0
205 heavyiron 4909
ac97 db '/rd/1/AC97SND',0
180 heavyiron 4910
 
4911
aMid db 'mid',0
4912
midamp db '/rd/1/MIDAMP',0
4913
 
4914
aBmp db 'bmp',0
4915
mv db '/rd/1/MV',0
4916
 
4917
aPng db 'png',0
4918
archer db '/rd/1/@rcher',0
4919
 
4920
aRtf db 'rtf',0
4921
rtfread db '/rd/1/RtfRead',0
4922
 
205 heavyiron 4923
a3ds db '3ds',0
4924
view3ds db '/rd/1/3d/view3ds',0
4925
 
4926
aLif db 'lif',0
4927
life2 db '/rd/1/demos/life2',0
4928
 
283 diamond 4929
AsmMenu:
4930
        dd      aEdit, tinypad
4931
        dd      aCompile, fasm
4932
        dd      0
4933
BmpMenu:
4934
        dd      aView, mv
4935
        dd      aEdit, animage
4936
        dd      0
4937
GifMenu:
4938
        dd      aView, gifview
4939
        dd      aEdit, animage
4940
        dd      0
4941
 
4942
if lang eq en
4943
aView   db      '&View',0
4944
aCompile db     '&Compile',0
4945
aEdit   db      '&Edit',0
4946
else
4947
aView   db      '&Просмотр',0
4948
aCompile db     '&Компилировать',0
4949
aEdit   db      '&Редактор',0
4950
end if
4951
 
4952
fasm    db      '/rd/1/develop/fasm',0
4953
animage db      '/rd/1/animage',0
4954
 
183 diamond 4955
bConfirmDelete  db      1
321 diamond 4956
bConfirmDeleteIncomplete db 0
183 diamond 4957
 
4958
; Здесь заканчиваются конфигурационные данные
4959
 
4960
bWasE0          db      0
4961
ctrlstate       db      0
4962
 
4963
align   4
314 diamond 4964
; Сообщение о обломе при выделении памяти
4965
nomem_dlgdata:
4966
        dd      2
4967
        dd      -1
4968
        dd      -1
4969
        dd      12
4970
        dd      2
4971
        dd      1
4972
        dd      1
4973
        dd      aError
4974
        rb      4
4975
        dd      0
4976
        dd      0
4977
        dd      2
4978
; строка "No memory"
4979
        dd      1
4980
        dd      1,0,10,0
4981
        dd      aNoMemory
4982
        dd      1
4983
; кнопка "Ok"
4984
        dd      2
4985
        dd      4,1,7,1
4986
        dd      aOk
4987
        dd      0xD
4988
 
183 diamond 4989
f8_confirm_dlgdata:
314 diamond 4990
        dd      1
183 diamond 4991
.x      dd      -1
4992
.y      dd      -1
4993
.width  dd      ?
4994
.height dd      3
4995
        dd      4
4996
        dd      2
4997
        dd      aDeleteCaption
4998
.main_color db ?
4999
.border_color db ?
5000
.header_color db ?
5001
        db      0
5002
        dd      0
5003
        dd      0
5004
        dd      4
5005
; строка "Вы хотите удалить ..."
5006
        dd      1
5007
        dd      1,0
5008
.width2 dd      ?
5009
        dd      0
5010
        dd      aConfirmDeleteTextBuf
5011
        dd      1
5012
; строка с именем файла/папки
5013
        dd      1
5014
        dd      1,1
5015
.width3 dd      ?
5016
        dd      1
5017
.name   dd      ?
5018
        dd      1
5019
; кнопка "удалить"
5020
.del_btn:
5021
        dd      2
5022
.del_x1 dd      ?
5023
        dd      2
5024
.del_x2 dd      ?
5025
        dd      2
5026
        dd      aDelete
321 diamond 5027
.flags1 dd      0xC
183 diamond 5028
; кнопка "отменить"
5029
        dd      2
5030
.cnl_x1 dd      ?
5031
        dd      2
5032
.cnl_x2 dd      ?
5033
        dd      2
5034
        dd      aCancel
321 diamond 5035
.flags2 dd      8
183 diamond 5036
 
283 diamond 5037
; диалог копирования
5038
copy_dlgdata:
314 diamond 5039
        dd      1
283 diamond 5040
.x      dd      -1
5041
.y      dd      -1
5042
.width  dd      ?
5043
.height dd      4
5044
        dd      4
5045
        dd      2
5046
        dd      aCopyCaption
5047
.main_color db ?
5048
.border_color db ?
5049
.header_color db ?
5050
        db      0
5051
        dd      0
5052
        dd      0
5053
        dd      4
5054
; строка 'Копировать "%s" в:'
5055
        dd      1
5056
        dd      1,0
5057
.width2 dd      ?
5058
        dd      0
5059
        dd      CopySourceTextBuf
5060
        dd      0
5061
; поле редактирования с именем файла/папки назначения
5062
        dd      3
5063
        dd      1,1
5064
.width3 dd      ?
5065
        dd      1
5066
        dd      CopyDestEditBuf
5067
.flags0 dd      0
5068
; кнопка "копировать"
5069
.copy_btn:
5070
        dd      2
5071
.copy_x1 dd     ?
5072
        dd      3
5073
.copy_x2 dd     ?
5074
        dd      3
5075
        dd      aCopy
5076
.flags1 dd      18h
5077
; кнопка "отменить"
5078
        dd      2
5079
.cnl_x1 dd      ?
5080
        dd      3
5081
.cnl_x2 dd      ?
5082
        dd      3
5083
        dd      aCancelB
5084
.flags2 dd      8
5085
 
321 diamond 5086
mkdir_dlgdata:
5087
        dd      1
5088
        dd      -1, -1
5089
.width  dd      ?
5090
.height dd      4
5091
        dd      4, 2
5092
        dd      aMkDirCaption
5093
        dd      ?
5094
        dd      0
5095
        dd      0
5096
        dd      4
5097
; Строка "Создать папку"
5098
        dd      1
5099
        dd      1,0,aMkDirLen,0
5100
        dd      aMkDir
5101
        dd      0
5102
; поле редактирования с именем создаваемой папки
5103
        dd      3
5104
        dd      1,1
5105
.width2 dd      ?
5106
        dd      1
5107
        dd      CopyDestEditBuf
5108
.flags0 dd      0xC
5109
; кнопка "Продолжить"
5110
.cont_btn:
5111
        dd      2
5112
.cont_x1 dd     ?
5113
        dd      3
5114
.cont_x2 dd     ?
5115
        dd      3
5116
        dd      a_Continue
5117
.flags1 dd      18h
5118
; кнопка "отменить"
5119
        dd      2
5120
.cnl_x1 dd      ?
5121
        dd      3
5122
.cnl_x2 dd      ?
5123
        dd      3
5124
        dd      aCancelB
5125
.flags2 dd      8
283 diamond 5126
 
321 diamond 5127
RetryOrCancelBtn:
5128
        dd      aRetry
5129
        dd      a_Cancel
5130
DeleteOrKeepBtn:
5131
        dd      a_Delete
5132
        dd      aKeep
5133
RetryOrIgnoreBtn:
5134
        dd      aRetry
5135
        dd      aIgnore
5136
 
183 diamond 5137
if lang eq ru
5138
aDeleteCaption          db      'Удаление',0
5139
aConfirmDeleteText      db      'Вы хотите удалить ',0
5140
aDeleteFolder           db      'папку',0
5141
aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
5142
aDeleteFile             db      'файл',0
5143
aDelete                 db      ' Удалить ',0
5144
aDeleteLength = $ - aDelete - 1
5145
aCancel                 db      ' Отменить ',0
5146
aCancelLength = $ - aCancel - 1
283 diamond 5147
aCancelB                db      '[ Отменить ]',0
5148
aCancelBLength = $ - aCancelB - 1
5149
aCopyCaption            db      'Копирование',0
5150
aCopy                   db      '[ Копировать ]',0
5151
aCopyLength = $ - aCopy - 1
321 diamond 5152
a_Continue              db      '[ Продолжить ]',0
5153
a_ContinueLength = $ - a_Continue - 1
283 diamond 5154
aCopy1                  db      'Копировать "',0
5155
aCopy2                  db      '" в:',0
314 diamond 5156
aError                  db      'Ошибка',0
5157
aContinue               db      'Продолжить',0
5158
aRetry                  db      'Повторить',0
321 diamond 5159
a_Cancel                db      'Отменить',0
5160
a_Delete                db      'Удалить',0
314 diamond 5161
error0msg               db      'Странно... Нет ошибки',0
5162
error1msg               db      'Странно... Не определена база и/или раздел жёсткого диска',0
5163
error2msg               db      'Функция не поддерживается для данной файловой системы',0
5164
error3msg               db      'Неизвестная файловая система',0
5165
error4msg               db      'Странно... Ошибка 4',0
5166
error5msg               db      'Файл не найден',0
5167
error6msg               db      'Файл закончился',0
5168
error7msg               db      'Странно... Указатель вне памяти приложения',0
5169
error8msg               db      'Диск заполнен',0
5170
error9msg               db      'Файловая структура разрушена',0
5171
error10msg              db      'Доступ запрещён',0
5172
error11msg              db      'Ошибка устройства',0
5173
error30msg              db      'Недостаточно памяти',0
5174
error31msg              db      'Файл не является исполняемым',0
5175
error32msg              db      'Слишком много процессов',0
5176
aUnknownError           db      'Неизвестный код ошибки: ',0
5177
aCannotReadFolder       db      'Не могу прочитать папку',0
321 diamond 5178
aRunError               db      'Ошибка при запуске программы:',0
5179
aFileNameTooBig         db      'Полное имя файла слишком длинное',0
5180
aFolderNameTooBig       db      'Полное имя папки слишком длинное',0
5181
aCmdLineTooBig          db      'Командная строка превышает границу OS в 256 символов',0
5182
aCannotCopyToSelf       db      'Файл не может быть скопирован в самого себя',0
5183
aCannotReadFile         db      'Не могу прочитать файл',0
5184
aIncompleteFile         db      'Был получен неполный файл. Удалить его?',0
5185
aKeep                   db      'Оставить',0
5186
aCannotWriteFile        db      'Не могу записать в файл',0
5187
aCannotDeleteFile       db      'Не могу удалить файл',0
5188
aCannotDeleteFolder     db      'Не могу удалить папку',0
5189
aIgnore                 db      'Игнорировать',0
5190
aMkDirCaption           db      'Создание папки',0
5191
aMkDir                  db      'Создать папку',0
5192
aMkDirLen = $ - aMkDir - 1
5193
aCannotMakeFolder       db      'Не могу создать папку',0
183 diamond 5194
else
5195
aDeleteCaption          db      'Delete',0
5196
aConfirmDeleteText      db      'Do you wish to delete ',0
5197
aDeleteFolder           db      'the folder',0
5198
aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
5199
aDeleteFile             db      'the file',0
5200
aDelete                 db      ' Delete ',0
5201
aDeleteLength = $ - aDelete - 1
5202
aCancel                 db      ' Cancel ',0
5203
aCancelLength = $ - aCancel - 1
283 diamond 5204
aCancelB                db      '[ Cancel ]',0
5205
aCancelBLength = $ - aCancelB - 1
5206
aCopyCaption            db      'Copy',0
5207
aCopy                   db      '[ Copy ]',0
5208
aCopyLength = $ - aCopy - 1
321 diamond 5209
a_Continue              db      '[ Continue ]',0
5210
a_ContinueLength = $ - a_Continue - 1
283 diamond 5211
aCopy1                  db      'Copy "',0
5212
aCopy2                  db      '" to:',0
314 diamond 5213
aError                  db      'Error',0
5214
aContinue               db      'Continue',0
5215
aRetry                  db      'Retry',0
321 diamond 5216
a_Cancel                db      'Cancel',0
5217
a_Delete                db      'Delete',0
314 diamond 5218
error0msg               db      'Strange... No error',0
5219
error1msg               db      'Strange... Hard disk base and/or partition not defined',0
5220
error2msg               db      'The file system does not support this function',0
5221
error3msg               db      'Unknown file system',0
5222
error4msg               db      'Strange... Error 4',0
5223
error5msg               db      'File not found',0
5224
error6msg               db      'End of file',0
5225
error7msg               db      'Strange... Pointer lies outside of application memory',0
5226
error8msg               db      'Disk is full',0
5227
error9msg               db      'File structure is destroyed',0
5228
error10msg              db      'Access denied',0
5229
error11msg              db      'Device error',0
5230
error30msg              db      'Not enough memory',0
5231
error31msg              db      'File is not executable',0
5232
error32msg              db      'Too many processes',0
5233
aUnknownError           db      'Unknown error code: ',0
5234
aCannotReadFolder       db      'Cannot read folder',0
321 diamond 5235
aRunError               db      'Cannot execute program:',0
5236
aFileNameTooBig         db      'Full file name is too long',0
5237
aFolderNameTooBig       db      'Full folder name is too long',0
5238
aCmdLineTooBig          db      'Command line is too long (OS limit is 256 symbols)',0
5239
aCannotCopyToSelf       db      'File cannot be copied onto itself',0
5240
aCannotReadFile         db      'Cannot read file',0
5241
aIncompleteFile         db      'Incomplete file was retrieved. Delete it?',0
5242
aKeep                   db      'Keep',0
5243
aCannotWriteFile        db      'Cannot write file',0
5244
aCannotDeleteFile       db      'Cannot delete file',0
5245
aCannotDeleteFolder     db      'Cannot delete folder',0
5246
aIgnore                 db      'Ignore',0
5247
aMkDirCaption           db      'Make folder',0
5248
aMkDir                  db      'Create the folder',0
5249
aMkDirLen = $ - aMkDir - 1
5250
aCannotMakeFolder       db      'Cannot create folder',0
183 diamond 5251
end if
314 diamond 5252
aOk                     db      'OK',0
5253
aNoMemory               db      'No memory!',0
183 diamond 5254
 
180 heavyiron 5255
execinfo:
5256
        dd      7
5257
        dd      0
5258
execparams dd   0
5259
        dd      0
5260
        dd      0
5261
        db      0
5262
execptr dd      ?
5263
 
5264
IncludeIGlobals
5265
 
5266
i_end:
5267
 
5268
IncludeUGlobals
5269
 
5270
execdata rb     1024
321 diamond 5271
execdataend:
180 heavyiron 5272
        align   4
5273
attrinfo.attr   rb      40
5274
 
5275
panel1_data:
5276
panel1_left     dd      ?
5277
panel1_top      dd      ?
5278
panel1_width    dd      ?
5279
panel1_height   dd      ?
5280
panel1_index    dd      ?
5281
panel1_start    dd      ?
5282
panel1_colsz    dd      ?
5283
panel1_colst    dd      ?
5284
panel1_sortmode db      ?
5285
                rb      3
5286
panel1_nfa      dd      ?
5287
panel1_numfiles dd      ?
5288
panel1_files    dd      ?
5289
panel1_dir      rb      1024
5290
 
5291
panel2_data:
5292
panel2_left     dd      ?
5293
panel2_top      dd      ?
5294
panel2_width    dd      ?
5295
panel2_height   dd      ?
5296
panel2_index    dd      ?
5297
panel2_start    dd      ?
5298
panel2_colsz    dd      ?
5299
panel2_colst    dd      ?
5300
panel2_sortmode db      ?
5301
                rb      3
5302
panel2_nfa      dd      ?
5303
panel2_numfiles dd      ?
5304
panel2_files    dd      ?
5305
panel2_dir      rb      1024
5306
 
283 diamond 5307
;console_data    rb      max_width*max_height*2
180 heavyiron 5308
 
314 diamond 5309
nomem_dlgsavearea       rb      (12+4)*(3+3)*2
5310
 
180 heavyiron 5311
cur_header      rb      max_width
5312
tmp             dd      ?
5313
 
5314
skinh           dd      ?
5315
std_colors      rd      10
5316
 
283 diamond 5317
min_y           dd      ?
5318
max_y           dd      ?
5319
min_x           dd      ?
5320
max_x           dd      ?
5321
used_width      dd      ?
5322
used_height     dd      ?
5323
 
314 diamond 5324
wnd_width       dd      ?
5325
wnd_height      dd      ?
5326
 
180 heavyiron 5327
column_left     dd      ?
5328
column_top      dd      ?
5329
column_width    dd      ?
5330
column_height   dd      ?
5331
column_index    dd      ?
5332
 
5333
scrpos          dq      ?
5334
viewer_right_side dq    ?
5335
 
5336
saved_file_name:
5337
procinfo        rb      1024
283 diamond 5338
lower_file_name = procinfo + 512
180 heavyiron 5339
 
314 diamond 5340
error_msg       rb      128
5341
 
5342
prev_dir        rb      1024
5343
 
180 heavyiron 5344
driveinfo       rb      32+304
5345
tmpname         rb      32
5346
 
5347
screens         dd      ?
5348
num_screens     dd      ?
5349
active_screen_vtable dd ?
5350
active_screen_data dd   ?
5351
 
183 diamond 5352
aConfirmDeleteTextBuf   rb      aConfirmDeleteTextMax + 1
283 diamond 5353
CopySourceTextBuf       rb      512
5354
CopyDestEditBuf         rb      12+512+1
321 diamond 5355
.length = $ - CopyDestEditBuf - 13
183 diamond 5356
 
283 diamond 5357
align 4
5358
layout          rb      128
5359
 
5360
copy_buffer_size = 32768
5361
copy_buffer     rb      copy_buffer_size
5362
 
180 heavyiron 5363
; stack
183 diamond 5364
        align   4
180 heavyiron 5365
        rb      512
5366
stacktop:
5367
 
5368
mem: