Subversion Repositories Kolibri OS

Rev

Rev 4933 | Rev 8960 | 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
474 diamond 8
        dd      0, app_path
180 heavyiron 9
 
1122 diamond 10
version equ '0.65'
11
version_dword equ 0*10000h + 65
589 diamond 12
 
814 diamond 13
min_width = 54
14
max_width = 255
15
min_height = 8
16
max_height = 255
17
 
8932 IgorA 18
include '../../../KOSfuncs.inc'
180 heavyiron 19
include 'lang.inc'
20
include 'font.inc'
21
include 'sort.inc'
22
include 'kglobals.inc'
23
include 'dialogs.inc'
997 diamond 24
include 'search.inc'
180 heavyiron 25
include 'viewer.inc'
814 diamond 26
include 'editor.inc'
314 diamond 27
include 'tools.inc'
474 diamond 28
include 'filetool.inc'
180 heavyiron 29
 
814 diamond 30
cursor_normal_size = (font_height*15+50)/100
31
cursor_big_size = font_height
32
 
180 heavyiron 33
start:
8932 IgorA 34
        mov     eax,SF_SET_EVENTS_MASK
35
		mov     ebx,(11b shl 30) or 100111b
36
		int     0x40
37
		mov     edi, identical_table
997 diamond 38
        mov     ecx, 0x100
474 diamond 39
        xor     eax, eax
40
@@:
41
        stosb
42
        inc     eax
43
        loop    @b
997 diamond 44
        mov     cl, 'A'
45
@@:
46
        stosb
47
        inc     eax
48
        loop    @b
474 diamond 49
        add     al, 0x20
50
        mov     cl, 'Z'-'A'+1
51
@@:
52
        stosb
53
        inc     eax
54
        loop    @b
55
        sub     al, 0x20
56
        mov     cl, 'А'-'Z'-1
57
@@:
58
        stosb
59
        inc     eax
60
        loop    @b
61
        add     al, 0x20
62
        mov     cl, 'Р'-'А'
63
@@:
64
        stosb
65
        inc     eax
66
        loop    @b
67
        add     al, 0x30
68
        mov     cl, 'Я'-'Р'+1
69
@@:
70
        stosb
71
        inc     eax
72
        loop    @b
73
        sub     al, 0x50
74
        mov     cl, 256-'Я'-1
75
@@:
76
        stosb
77
        inc     eax
78
        loop    @b
79
        mov     byte [edi-256+'Ё'], 'ё'
997 diamond 80
        mov     cl, 'A'
81
        inc     eax
82
        rep     stosb
83
        mov     cl, 'Z'-'A'+1
84
        dec     eax
85
        rep     stosb
86
        mov     cl, 'a'-'Z'-1
87
        inc     eax
88
        rep     stosb
89
        mov     byte [edi-'a'+'_'], 0
90
        mov     cl, 'z'-'a'+1
91
        dec     eax
92
        rep     stosb
93
        mov     cl, 'А'-'z'-1
94
        inc     eax
95
        rep     stosb
96
        mov     cl, 'п'-'А'+1
97
        dec     eax
98
        rep     stosb
99
        mov     cl, 'р'-'п'-1
100
        inc     eax
101
        rep     stosb
102
        mov     cl, 'ё'-'р'+1
103
        dec     eax
104
        rep     stosb
105
        mov     cl, 256-'ё'-1
106
        inc     eax
107
        rep     stosb
108
        mov     edi, SearchStringEditBuf
109
        mov     eax, SearchStringEditBuf.length
110
        stosd
111
        xor     eax, eax
112
        stosd
113
        stosd
114
        stosb
8932 IgorA 115
        push    SF_SYS_MISC
474 diamond 116
        pop     eax
8932 IgorA 117
        push    SSF_HEAP_INIT
474 diamond 118
        pop     ebx
517 diamond 119
        int     0x40
283 diamond 120
        call    init_console
180 heavyiron 121
        call    draw_window
8932 IgorA 122
        push    SF_KEYBOARD
180 heavyiron 123
        pop     eax
8932 IgorA 124
        push    SSF_SET_INPUT_MODE
180 heavyiron 125
        pop     ebx
126
        mov     ecx, ebx
517 diamond 127
        int     40h     ; set keyboard mode to scancodes
283 diamond 128
        mov     eax, 200
180 heavyiron 129
        mov     [panel1_nfa], eax
130
        mov     [panel2_nfa], eax
474 diamond 131
        mov     ecx, 200*4 + 32 + 200*304
132
        call    pgalloc
283 diamond 133
        mov     [panel1_files], eax
474 diamond 134
        call    pgalloc
283 diamond 135
        mov     [panel2_files], eax
136
        test    eax, eax
137
        jz      exit
814 diamond 138
        xor     eax, eax
139
        cmp     [panel1_files], eax
283 diamond 140
        jz      exit
589 diamond 141
        mov     [panel1_hPlugin], eax
142
        mov     [panel1_parents], eax
143
        mov     [panel1_parents_sz], eax
144
        mov     [panel1_parents_alloc], eax
145
        mov     [panel2_hPlugin], eax
146
        mov     [panel2_parents], eax
147
        mov     [panel2_parents_sz], eax
148
        mov     [panel2_parents_alloc], eax
149
        mov     [panel1_sortmode], al   ; sort by name
150
        mov     [panel2_sortmode], al
151
        mov     al, 2                   ; "средний" формат
474 diamond 152
        mov     [panel1_colmode], eax
153
        mov     [panel2_colmode], eax
180 heavyiron 154
        mov     [num_screens], 1
474 diamond 155
        mov     ecx, 0x1000
156
        call    pgalloc
180 heavyiron 157
        mov     [screens], eax
314 diamond 158
        test    eax, eax
159
        jz      exit
180 heavyiron 160
        mov     ecx, panels_vtable
161
        mov     [eax], ecx
162
        mov     [active_screen_vtable], ecx
997 diamond 163
        mov     [active_screen_keybar], keybar_panels
474 diamond 164
; load libini.obj and kfar.ini
165
        mov     eax, libini_name
166
        mov     esi, ini_import
1102 diamond 167
        push    8
168
        pop     ebp     ; we use version 8 of libini
474 diamond 169
        call    load_dll_and_import
170
        test    eax, eax
171
        jnz     .noini
172
        mov     edi, app_path
173
        or      ecx, -1
174
        repnz   scasb
175
        mov     dword [edi-1], '.ini'
176
        mov     byte [edi+3], 0
177
        push    1
178
        push    dword aConfirmDelete
179
        push    dword aConfirmations
180
        push    dword app_path
181
        call    [ini.get_int]
182
        mov     [bConfirmDelete], al
183
        push    0
184
        push    dword aConfirmDeleteIncomplete
185
        push    dword aConfirmations
186
        push    dword app_path
187
        call    [ini.get_int]
188
        mov     [bConfirmDeleteIncomplete], al
589 diamond 189
        push    2
190
        push    aLeftViewMode
191
        push    aPanels
192
        push    app_path
193
        call    [ini.get_int]
194
        cmp     eax, 1
195
        jb      @f
196
        cmp     eax, 4
197
        ja      @f
198
        mov     [panel1_colmode], eax
199
@@:
200
        push    2
201
        push    aRightViewMode
202
        push    aPanels
203
        push    app_path
204
        call    [ini.get_int]
205
        cmp     eax, 1
206
        jb      @f
207
        cmp     eax, 4
208
        ja      @f
209
        mov     [panel2_colmode], eax
210
@@:
1045 diamond 211
        push    0
212
        push    aLeftSortMode
213
        push    aPanels
214
        push    app_path
215
        call    [ini.get_int]
216
        cmp     eax, 14
217
        jae     @f
218
        mov     [panel1_sortmode], al
219
@@:
220
        push    0
221
        push    aRightSortMode
222
        push    aPanels
223
        push    app_path
224
        call    [ini.get_int]
225
        cmp     eax, 14
226
        jae     @f
227
        mov     [panel2_sortmode], al
228
@@:
814 diamond 229
        push    nullstr
230
        push    512
231
        push    saved_file_name
232
        push    aEolStyle
233
        push    aEditor
234
        push    app_path
235
        call    [ini.get_str]
236
        mov     cl, edit.eol_dos
237
        mov     al, [saved_file_name]
238
        or      al, 20h
239
        cmp     al, 'd'
240
        jz      @f
241
        mov     cl, edit.eol_mac
242
        cmp     al, 'm'
243
        jz      @f
244
        mov     cl, edit.eol_unix
245
@@:
246
        mov     [EditEOLStyle], cl
474 diamond 247
        mov     ecx, 0x1000
248
        call    xpgalloc
249
        test    eax, eax
250
        jz      .skip_assoc
517 diamond 251
        mov     [associations], eax
252
        push    enum_associations_callback
253
        push    aAssociations
254
        push    app_path
255
        call    [ini.enum_keys]
256
.skip_assoc:
474 diamond 257
        xor     ebp, ebp
258
        xor     esi, esi
522 diamond 259
.shortcut_loop:
474 diamond 260
        mov     edi, saved_file_name
261
        push    dword nullstr
262
        push    512
263
        push    edi
264
        push    dword aShortcut
265
        push    dword aFolderShortcuts
266
        push    dword app_path
267
        call    [ini.get_str]
268
        cmp     byte [edi], 0
269
        jz      .shortcut_cont
270
        or      ecx, -1
271
        xor     eax, eax
272
        repnz   scasb
273
        not     ecx
274
        cmp     ecx, 2
275
        jz      @f
276
        cmp     byte [edi-2], '/'
277
        jnz     @f
278
        mov     byte [edi-2], 0
279
        dec     ecx
280
@@:
281
        mov     al, [aShortcut.d]
282
        push    esi
283
        inc     esi
284
        mov     [FolderShortcuts+(eax-'0')*4], esi
285
        lea     esi, [esi+ecx-1]
286
        push    esi
287
        and     esi, 0xFFF
288
        cmp     esi, ecx
289
        pop     esi
290
        ja      .norealloc
291
        mov     edx, ebp
292
        mov     ecx, esi
293
        call    xpgrealloc
294
        test    eax, eax
295
        jnz     @f
522 diamond 296
        pop     esi
474 diamond 297
        mov     edi, FolderShortcuts
298
        mov     ecx, 10
299
        rep     stosd
300
        jmp     .skip_shortcuts
301
@@:
302
        mov     ebp, eax
303
.norealloc:
304
        pop     edi
305
        add     edi, ebp
306
        mov     ecx, saved_file_name
307
@@:
308
        mov     al, [ecx]
309
        inc     ecx
310
        stosb
311
        test    al, al
312
        jnz     @b
313
.shortcut_cont:
314
        inc     [aShortcut.d]
315
        cmp     [aShortcut.d], '9'
522 diamond 316
        jbe     .shortcut_loop
474 diamond 317
        mov     esi, FolderShortcuts
318
        mov     ecx, 10
319
        dec     ebp
320
.l3:
321
        lodsd
322
        test    eax, eax
323
        jz      @f
324
        add     [esi-4], ebp
325
@@:
326
        loop    .l3
327
.skip_shortcuts:
589 diamond 328
; load plugins
329
        push    enum_plugins_callback
330
        push    aPlugins
331
        push    app_path
332
        call    [ini.enum_keys]
814 diamond 333
; calculate info for editor
334
        xor     ebx, ebx
335
        mov     ecx, [num_plugins]
336
        mov     esi, [plugins]
337
@@:
338
        dec     ecx
339
        js      @f
340
        mov     [esi+PluginInfo.EditInfoOffs], ebx
341
        add     ebx, [esi+PluginInfo.EditInfoSize]
342
        jnc     @f
343
        sbb     ebx, ebx
344
@@:
345
; поскольку размер блока в редакторе ограничен, то и размер памяти, резервируемой для плагинов, ограничен
346
; 512 - грубая верхняя оценка, гарантирующая работу редактора, реально плагины должны требовать меньше
347
        cmp     ebx, 512
348
        jb      @f
349
        or      ebx, -1
350
        mov     [EditPlugInfo], ebx     ; disable plugins for editor
351
        push    ContinueBtn
352
        push    1
353
        push    EditConfigErr_ptr
354
        push    2
355
        call    SayErr
356
@@:
357
        add     ebx, 3
358
        and     ebx, not 3
359
        mov     [EditPlugInfo], ebx
474 diamond 360
.noini:
997 diamond 361
        mov     eax, [EditPlugInfo]
362
        add     eax, editor_line.plugdata
363
        imul    eax, max_height
364
        add     eax, editor_data.basesize + 0xFFF
365
        shr     eax, 12
366
        mov     [EditDataSize], eax
474 diamond 367
        mov     esi, def_left_dir
368
        mov     edi, panel1_dir
369
@@:
370
        lodsb
371
        stosb
372
        test    al, al
373
        jnz     @b
374
        mov     esi, def_right_dir
375
        mov     edi, panel2_dir
376
@@:
377
        lodsb
378
        stosb
379
        test    al, al
380
        jnz     @b
180 heavyiron 381
        call    draw_keybar
382
        call    draw_cmdbar
314 diamond 383
        mov     [prev_dir], 0
180 heavyiron 384
        mov     ebp, panel1_data
474 diamond 385
        call    calc_colwidths
180 heavyiron 386
        call    read_folder
387
        call    draw_panel
314 diamond 388
        mov     [bSilentFolderMode], 1
180 heavyiron 389
        mov     ebp, panel2_data
474 diamond 390
        call    calc_colwidths
180 heavyiron 391
        call    read_folder
392
        call    draw_panel
393
event:
997 diamond 394
        call    get_event
180 heavyiron 395
        dec     eax
396
        jz      redraw
397
        dec     eax
398
        jz      key
8932 IgorA 399
        sub     eax,4
400
        jz      mouse
180 heavyiron 401
; button - we have only one button, close
402
exit:
589 diamond 403
; close all screens
404
@@:
405
        mov     ecx, [num_screens]
406
        mov     eax, [screens]
407
        mov     ebp, [eax+ecx*8-4]
408
        mov     eax, [eax+ecx*8-8]
409
        push    ebp
410
        call    [eax+screen_vtable.OnExit]
411
        pop     ecx
412
        call    pgfree
413
        dec     [num_screens]
414
        jnz     @b
415
; unload all plugins
416
        mov     ecx, [num_plugins]
417
        imul    esi, ecx, PluginInfo.size
418
        add     esi, [plugins]
419
.unload:
420
        dec     ecx
421
        js      .unload_done
422
        sub     esi, PluginInfo.size
423
        push    ecx esi
424
        call    [esi+PluginInfo.unload]
425
        pop     esi ecx
426
        jmp     .unload
427
.unload_done:
428
        cmp     [ini.set_int], aIniSetInt
429
        jz      .nosave
430
        push    [panel1_colmode]
431
        push    aLeftViewMode
432
        push    aPanels
433
        push    app_path
434
        call    [ini.set_int]
435
        push    [panel2_colmode]
436
        push    aRightViewMode
437
        push    aPanels
438
        push    app_path
439
        call    [ini.set_int]
1045 diamond 440
        movzx   eax, [panel1_sortmode]
441
        push    eax
442
        push    aLeftSortMode
443
        push    aPanels
444
        push    app_path
445
        call    [ini.set_int]
446
        movzx   eax, [panel2_sortmode]
447
        push    eax
448
        push    aRightSortMode
449
        push    aPanels
450
        push    app_path
451
        call    [ini.set_int]
589 diamond 452
.nosave:
453
if CHECK_FOR_LEAKS
454
        mov     ecx, [panel1_files]
455
        call    pgfree
456
        mov     ecx, [panel2_files]
457
        call    pgfree
458
        mov     ecx, [screens]
459
        call    pgfree
460
        mov     ecx, [associations]
461
        call    pgfree
462
        mov     ecx, [console_data_ptr]
463
        call    pgfree
464
        mov     ecx, [MemForImage]
465
        call    pgfree
466
        mov     esi, FolderShortcuts
467
        push    10
468
        pop     ecx
469
@@:
470
        lodsd
471
        test    eax, eax
472
        jnz     @f
473
        loop    @b
474
        jmp     .nofreefs
475
@@:
476
        mov     ecx, eax
477
        call    pgfree
478
        mov     ecx, [plugins]
479
        call    pgfree
480
        mov     ecx, [panel1_parents]
481
        call    pgfree
482
        mov     ecx, [panel2_parents]
483
        call    pgfree
484
.nofreefs:
485
        mov     eax, [numallocatedregions]
486
        test    eax, eax
487
        jz      @f
488
        mov     edi, allocatedregions
489
        int3
490
        jmp     $
491
@@:
492
end if
180 heavyiron 493
        or      eax, -1
517 diamond 494
        int     40h
997 diamond 495
 
496
get_event:
497
        push    ebx
498
        mov     ebx, [idle_interval]
499
        cmp     ebx, -1
500
        jz      .infinite
8932 IgorA 501
        push    SF_WAIT_EVENT_TIMEOUT
997 diamond 502
        pop     eax
503
        int     40h
504
        pop     ebx
505
        test    eax, eax
506
        jnz     .ret
507
        mov     ebp, [active_screen_data]
508
        mov     eax, [active_screen_vtable]
509
        mov     eax, [eax+screen_vtable.OnIdle]
510
        test    eax, eax
511
        jz      get_event
512
        call    eax
513
        jmp     get_event
514
.infinite:
515
        pop     ebx
8932 IgorA 516
        push    SF_WAIT_EVENT
997 diamond 517
        pop     eax
518
        int     40h
519
.ret:
520
        ret
521
 
180 heavyiron 522
redraw:
283 diamond 523
; query kbd state from OS
8932 IgorA 524
        mov     al, SF_KEYBOARD
525
        push    SSF_GET_CONTROL_KEYS
283 diamond 526
        pop     ebx
517 diamond 527
        int     0x40
283 diamond 528
        and     eax, 0x3F
529
        cmp     al, [ctrlstate]
530
        mov     [ctrlstate], al
531
        jz      @f
532
        call    draw_keybar
533
@@:
8932 IgorA 534
        mov     al, SF_THREAD_INFO
180 heavyiron 535
        mov     ebx, procinfo
536
        or      ecx, -1
517 diamond 537
        int     40h
180 heavyiron 538
; test if rolled up
539
; height of rolled up window is [skinh]+3
540
        mov     eax, [ebx+46]
541
        sub     eax, [skinh]
542
        cmp     eax, 5
543
        ja      @f
8932 IgorA 544
        mov     al, SF_REDRAW
545
        push    SSF_BEGIN_DRAW
180 heavyiron 546
        pop     ebx
517 diamond 547
        int     0x40
180 heavyiron 548
        xor     eax, eax
549
; ebx, ecx, edi are ignored by function 0 after first redraw
314 diamond 550
        mov     edx, 0x53000000
517 diamond 551
        int     0x40
8932 IgorA 552
        mov     al, SF_REDRAW
180 heavyiron 553
        inc     ebx
517 diamond 554
        int     0x40
180 heavyiron 555
        jmp     event
556
@@:
557
        xor     ecx, ecx
558
        mov     eax, [ebx+42]
314 diamond 559
        mov     [wnd_width], eax
283 diamond 560
        sub     eax, 5*2-1
180 heavyiron 561
        jae     @f
562
        xor     eax, eax
563
@@:
564
        cdq
565
        mov     esi, font_width
566
        div     esi
814 diamond 567
        cmp     eax, min_width
180 heavyiron 568
        jae     @f
814 diamond 569
        mov     al, min_width
180 heavyiron 570
        mov     ch, 1
571
@@:
814 diamond 572
        cmp     eax, max_width
180 heavyiron 573
        jbe     @f
814 diamond 574
        mov     eax, max_width
180 heavyiron 575
        mov     ch, 1
576
@@:
577
        cmp     eax, [cur_width]
578
        mov     [cur_width], eax
579
        setnz   cl
580
        or      cl, ch
581
        test    edx, edx
314 diamond 582
        mov     [fill_width], edx
180 heavyiron 583
        setnz   ch
584
        mov     eax, [ebx+46]
314 diamond 585
        mov     [wnd_height], eax
180 heavyiron 586
        sub     eax, [skinh]
283 diamond 587
        sub     eax, 5-1
180 heavyiron 588
        jns     @f
589
        xor     eax, eax
590
@@:
591
        cdq
592
        mov     esi, font_height
593
        div     esi
814 diamond 594
        cmp     eax, min_height
180 heavyiron 595
        jae     @f
814 diamond 596
        mov     al, min_height
180 heavyiron 597
        mov     cl, 1
598
@@:
814 diamond 599
        cmp     eax, max_height
180 heavyiron 600
        jbe     @f
814 diamond 601
        mov     eax, max_height
180 heavyiron 602
        mov     cl, 1
603
@@:
314 diamond 604
        mov     [fill_height], edx
180 heavyiron 605
        cmp     eax, [cur_height]
606
        mov     [cur_height], eax
283 diamond 607
        jnz     .resize
608
        test    cl, cl
609
        jnz     .resize
610
        test    edx, edx
611
        setnz   cl
180 heavyiron 612
        or      cl, ch
613
        jz      @f
283 diamond 614
        test    byte [ebx+70], 1
615
        jnz     @f
616
.resize:
8932 IgorA 617
        push    SF_CHANGE_WINDOW
180 heavyiron 618
        pop     eax
619
        or      ebx, -1
620
        or      ecx, -1
621
        mov     edx, [cur_width]
622
        imul    edx, font_width
283 diamond 623
        add     edx, 5*2-1
180 heavyiron 624
        mov     esi, [cur_height]
625
        imul    esi, font_height
626
        add     esi, [skinh]
283 diamond 627
        add     esi, 5-1
517 diamond 628
        int     40h
283 diamond 629
.resize_draw:
474 diamond 630
        mov     ecx, [MemForImage]
631
        call    pgfree
632
        and     [MemForImage], 0
283 diamond 633
        call    init_console
634
;        call    draw_window
180 heavyiron 635
        call    draw_keybar
636
        mov     ebp, [active_screen_data]
637
        mov     eax, [active_screen_vtable]
814 diamond 638
        mov     [cursor_size], cursor_normal_size
180 heavyiron 639
        call    dword [eax+screen_vtable.OnRedraw]
640
        jmp     event
641
@@:
642
        call    draw_window
643
        jmp     event
283 diamond 644
alt_f9:
645
        cmp     [saved_width], -1
646
        jz      @f
647
        mov     eax, [saved_width]
648
        mov     [cur_width], eax
649
        or      [saved_width], -1
650
        mov     eax, [saved_height]
651
        mov     [cur_height], eax
652
        or      [saved_height], -1
653
        jmp     redraw.resize
654
@@:
8932 IgorA 655
        push    SF_STYLE_SETTINGS
283 diamond 656
        pop     eax
8932 IgorA 657
        push    SSF_GET_SCREEN_AREA
283 diamond 658
        pop     ebx
517 diamond 659
        int     0x40
283 diamond 660
        push    eax
661
        sub     eax, [esp+2]
662
        inc     eax
663
        movzx   eax, ax
664
        sub     eax, 10
665
        xor     edx, edx
666
        mov     ecx, font_width
667
        div     ecx
668
        xchg    [cur_width], eax
669
        mov     [saved_width], eax
670
        mov     eax, ebx
671
        shr     ebx, 16
672
        sub     eax, ebx
673
        sub     eax, 5-1
674
        sub     eax, [skinh]
675
        xor     edx, edx
676
        mov     ecx, font_height
677
        div     ecx
678
        xchg    [cur_height], eax
679
        mov     [saved_height], eax
680
        mov     ecx, ebx
681
        pop     ebx
682
        shr     ebx, 16
683
        mov     edx, [cur_width]
684
        imul    edx, font_width
685
        add     edx, 5*2-1
686
        mov     esi, [cur_height]
687
        imul    esi, font_height
688
        add     esi, [skinh]
689
        add     esi, 4
8932 IgorA 690
        push    SF_CHANGE_WINDOW
283 diamond 691
        pop     eax
517 diamond 692
        int     0x40
283 diamond 693
        jmp     redraw.resize_draw
180 heavyiron 694
key:
8932 IgorA 695
        mov     al, SF_GET_KEY
517 diamond 696
        int     40h
180 heavyiron 697
        test    al, al
698
        jnz     event
699
        xchg    al, ah
700
        cmp     al, 0xE0
701
        jnz     @f
702
        mov     [bWasE0], 1
703
        jmp     event
704
@@:
705
        xchg    ah, [bWasE0]
706
        mov     ebp, [active_screen_data]
707
        mov     edx, [active_screen_vtable]
708
        cmp     al, 0x1D
709
        jz      .ctrl_down
710
        cmp     al, 0x9D
711
        jz      .ctrl_up
712
        cmp     al, 0x2A
713
        jz      .lshift_down
714
        cmp     al, 0xAA
715
        jz      .lshift_up
716
        cmp     al, 0x36
717
        jz      .rshift_down
718
        cmp     al, 0xB6
719
        jz      .rshift_up
720
        cmp     al, 0x38
721
        jz      .alt_down
722
        cmp     al, 0xB8
723
        jz      .alt_up
724
        call    [edx+screen_vtable.OnKey]
725
        jmp     event
726
.ctrl_down:
727
        test    ah, ah
728
        jnz     .rctrl_down
729
        or      [ctrlstate], 4
730
        jmp     .keybar
731
.rctrl_down:
732
        or      [ctrlstate], 8
733
        jmp     .keybar
734
.ctrl_up:
735
        test    ah, ah
736
        jnz     .rctrl_up
737
        and     [ctrlstate], not 4
738
        jmp     .keybar
739
.rctrl_up:
740
        and     [ctrlstate], not 8
741
.keybar:
742
        call    draw_keybar
743
        call    draw_image
744
@@:     jmp     event
745
.lshift_down:
746
; ignore E0 2A sequence
747
; e.g. arrow keys with NumLock on generate sequence E0 2A E0 xx / E0 xx+80 E0 AA
748
; where xx is scancode, so we can safely ignore E0 2A
749
        test    ah, ah
750
        jnz     @b
751
        or      [ctrlstate], 1
752
        jmp     .keybar
753
.lshift_up:
754
; ignore E0 AA sequence
755
        test    ah, ah
756
        jnz     @b
757
        and     [ctrlstate], not 1
758
        jmp     .keybar
759
.rshift_down:
760
        or      [ctrlstate], 2
761
        jmp     .keybar
762
.rshift_up:
763
        and     [ctrlstate], not 2
764
        jmp     .keybar
765
.alt_down:
766
        test    ah, ah
767
        jnz     .ralt_down
768
        or      [ctrlstate], 0x10
769
        jmp     .keybar
770
.ralt_down:
771
        or      [ctrlstate], 0x20
772
        jmp     .keybar
773
.alt_up:
774
        test    ah, ah
775
        jnz     .ralt_up
776
        and     [ctrlstate], not 0x10
777
        jmp     .keybar
778
.ralt_up:
779
        and     [ctrlstate], not 0x20
780
        jmp     .keybar
781
 
8932 IgorA 782
align 16
783
mouse:
784
        mov     eax,SF_MOUSE_GET
785
        mov     ebx,SSF_BUTTON_EXT
786
        int     0x40
787
        bt      eax,8
788
        jnc     event
789
 
790
        mov     eax,SF_MOUSE_GET
791
        mov     ebx,SSF_WINDOW_POSITION
792
        int     0x40
793
		cmp     ax, word[skinh]
794
		jl      event
795
		shr     eax,16
796
        mov     ebx, [cur_width]
797
        imul    ebx, font_width/2
798
		add     ebx, 5 ;window border
799
		cmp     eax,ebx
800
		jg      @f
801
		cmp     [active_panel], panel1_data
802
		je      event
803
		jmp     .tab
804
@@:
805
		cmp     [active_panel], panel2_data
806
		je      event
807
.tab:
808
        xor     [active_panel], panel1_data xor panel2_data
809
        call    draw_cmdbar
810
        mov     ebp, [active_panel]
811
        xor     ebp, panel1_data xor panel2_data
812
        call    draw_panel
813
        mov     ebp, [active_panel]
814
        call    draw_panel
815
        jmp     event
816
 
817
align 16
180 heavyiron 818
process_ctrl_keys:
819
        cmp     byte [esi], 0
820
        jz      .done
821
        push    ecx
822
        cmp     al, [esi]
823
        jz      .check
824
.cont:
825
        pop     ecx
826
        add     esi, 8
827
        jmp     process_ctrl_keys
828
.done:
829
        stc
830
        ret
831
.check:
832
        mov     cl, 0
833
        call    .check_ctrlkey
834
        jc      .cont
835
        mov     cl, 2
836
        call    .check_ctrlkey
837
        jc      .cont
838
        mov     cl, 4
839
        call    .check_ctrlkey
840
        jc      .cont
841
        pop     ecx
842
        call    dword [esi+4]
843
        clc
844
        ret
845
.check_ctrlkey:
846
        push    eax edx
847
        movzx   edx, [ctrlstate]
848
        shr     edx, cl
849
        add     cl, cl
850
        movzx   eax, word [esi+2]
851
        shr     eax, cl
852
        and     eax, 15
853
        cmp     al, ctrlkey_tests_num
854
        jae     .fail
855
        xchg    eax, edx
856
        and     al, 3
857
        call    [ctrlkey_tests + edx*4]
858
        cmp     al, 1
859
        pop     edx eax
860
        ret
861
.fail:
862
        stc
863
        pop     edx eax
864
        ret
865
 
866
ctrlkey_test0:
867
        test    al, al
868
        setz    al
869
        ret
870
ctrlkey_test1:
871
        test    al, al
872
        setnp   al
873
        ret
874
ctrlkey_test2:
875
        cmp     al, 3
876
        setz    al
877
        ret
878
ctrlkey_test3:
879
        cmp     al, 1
880
        setz    al
881
        ret
882
ctrlkey_test4:
883
        cmp     al, 2
884
        setz    al
885
        ret
886
 
517 diamond 887
enum_associations_callback:
1000 diamond 888
; LongBool __stdcall callback(f_name,sec_name,key_name,key_value);
889
; [esp+4] = f_name, [esp+8] = sec_name, [esp+12] = key_name, [esp+16] = key_value
517 diamond 890
        mov     esi, [esp+12]
891
        mov     edi, esi
892
@@:
893
        lodsb
894
        test    al, al
895
        jnz     @b
896
        sub     esi, edi        ; esi = size of key name
1000 diamond 897
        mov     eax, [esp+16]
517 diamond 898
@@:
899
        inc     esi
900
        inc     eax
901
        cmp     byte [eax-1], 0
902
        jnz     @b
903
; esi = total size of entry
904
        push    esi
905
        add     esi, [associations_size]
906
        mov     ecx, [associations_allocated]
907
@@:
908
        cmp     esi, ecx
909
        jbe     @f
910
        add     ecx, ecx
911
        jmp     @b
912
@@:
913
        pop     esi
914
        cmp     [associations_allocated], ecx
915
        jz      @f
916
        mov     [associations_allocated], ecx
917
        mov     edx, [associations]
918
        call    xpgrealloc
919
        mov     [associations], eax
920
        test    eax, eax
921
        jz      .err
922
@@:
923
        mov     eax, esi
924
        mov     esi, edi
925
        mov     edi, [associations]
926
        add     edi, [associations_size]
927
        dec     edi
928
        add     [associations_size], eax
929
@@:
930
        lodsb
931
        stosb
932
        test    al, al
933
        jnz     @b
1000 diamond 934
        mov     esi, [esp+16]
517 diamond 935
@@:
936
        lodsb
937
        stosb
938
        test    al, al
939
        jnz     @b
940
.ret:
941
        mov     al, 1
1000 diamond 942
        ret     16
517 diamond 943
.err:
944
        mov     ecx, edx
945
        call    pgfree
946
        xor     eax, eax
1000 diamond 947
        ret     16
517 diamond 948
 
589 diamond 949
enum_plugins_callback:
1000 diamond 950
; LongBool __stdcall callback(f_name,sec_name,key_name,key_value);
951
; [esp+4] = f_name, [esp+8] = sec_name, [esp+12] = key_name, [esp+16] = key_value
952
        mov     esi, [esp+16]
589 diamond 953
        cmp     byte [esi], '/'
954
        jz      .absolute
955
; convert path to absolute
956
        mov     edi, execdata
957
@@:
1000 diamond 958
        cmp     edi, execdata+1024
959
        jae     .overflow
589 diamond 960
        lodsb
961
        stosb
962
        test    al, al
963
        jnz     @b
1000 diamond 964
        mov     edi, saved_file_name
965
        mov     [esp+16], edi
589 diamond 966
        mov     esi, app_path
967
        push    esi
968
        xor     ecx, ecx
969
@@:
970
        lodsb
971
        test    al, al
972
        jz      @f
973
        cmp     al, '/'
974
        jnz     @b
975
        mov     ecx, esi
976
        jmp     @b
977
@@:
978
        pop     esi
979
        sub     ecx, esi
1000 diamond 980
        push    edi
981
        add     edi, ecx
982
        cmp     edi, saved_file_name+1024
983
        pop     edi
984
        ja      .overflow
589 diamond 985
        rep     movsb
986
        mov     esi, execdata
987
.z:
988
        cmp     word [esi], '.'
989
        jz      .ret
990
        cmp     word [esi], './'
991
        jnz     @f
992
        add     esi, 2
993
        jmp     .z
994
@@:
995
        cmp     word [esi], '..'
996
        jnz     .c
997
        cmp     byte [esi+2], 0
998
        jz      .ret
999
        cmp     byte [esi+2], '/'
1000
        jnz     .c
1001
        add     esi, 3
1002
@@:
1003
        dec     edi
1004
        cmp     edi, saved_file_name
1005
        jbe     .ret
1006
        cmp     byte [edi-1], '/'
1007
        jnz     @b
1008
        jmp     .z
1009
.c:
1000 diamond 1010
        cmp     edi, saved_file_name+1024
1011
        jae     .overflow
589 diamond 1012
        lodsb
1013
        stosb
1014
        test    al, al
1000 diamond 1015
        jnz     .c
1016
        jmp     .absolute
1017
.overflow:
589 diamond 1018
        mov     esi, execdata
1000 diamond 1019
        mov     byte [esi+1023], 0
589 diamond 1020
        call    load_dll_and_import.big
1021
.ret:
1022
        mov     al, 1
1046 diamond 1023
        ret     16
589 diamond 1024
.absolute:
1025
; allocate space for plugin info
1026
        mov     eax, [num_plugins]
1027
        inc     eax
1028
        mov     [num_plugins], eax
1029
        imul    ecx, eax, PluginInfo.size
1030
        cmp     ecx, [alloc_plugins]
1031
        jbe     .norealloc
1032
        mov     edx, [plugins]
1033
        call    xpgrealloc
1034
        test    eax, eax
1035
        jnz     @f
1036
.dec_ret:
1037
        dec     [num_plugins]
1038
        jmp     .ret
1039
@@:
1040
        mov     [plugins], eax
1041
        lea     eax, [ecx+0xFFF]
1042
        and     eax, not 0xFFF
1043
        mov     [alloc_plugins], eax
1044
.norealloc:
1045
        mov     esi, [plugins]
1046
        lea     esi, [esi+ecx-PluginInfo.size]
1047
; load plugin DLL
1048
        or      ebp, -1
1000 diamond 1049
        mov     eax, [esp+16]
589 diamond 1050
        call    load_dll_and_import.do
1051
        test    eax, eax
1052
        jnz     .dec_ret
1053
; find exported functions
1054
        mov     eax, aVersion
1055
        call    load_dll_and_import.find_exported_function
1056
        jnc     @f
1057
        xor     eax, eax
1058
@@:
814 diamond 1059
MIN_INTERFACE_VER = 3
1060
MAX_INTERFACE_VER = 3
589 diamond 1061
        cmp     eax, MIN_INTERFACE_VER
631 diamond 1062
        jb      @f
589 diamond 1063
        cmp     eax, MAX_INTERFACE_VER
631 diamond 1064
        jbe     .version_ok
1065
@@:
589 diamond 1066
        push    aIncompatibleVersion
1067
.cantload:
1000 diamond 1068
        push    dword [esp+4+16]
589 diamond 1069
        push    aCannotLoadPlugin
1070
        mov     eax, esp
1071
        push    ContinueBtn
1072
        push    1
1073
        push    eax
1074
        push    3
1075
        call    SayErr
1076
        add     esp, 12
1077
        jmp     .dec_ret
631 diamond 1078
.version_ok:
589 diamond 1079
        mov     edi, esi
1080
        mov     esi, plugin_exported
1081
.import:
1082
        lodsd
1083
        test    eax, eax
1084
        jz      .import_done
1085
        call    load_dll_and_import.find_exported_function
1086
        jnc     @f
1087
        mov     eax, [esi-4+plugin_exported_default-plugin_exported]
1088
@@:
1089
        stosd
1090
        jmp     .import
1091
.import_done:
1092
; initialize plugin
1093
        mov     eax, aPluginLoad
1094
        call    load_dll_and_import.find_exported_function
1095
        jc      .ok
1096
        push    kfar_info
1097
        call    eax
1098
        cmp     eax, 1
1099
        jb      .ok
1100
        ja      .dec_ret
1101
        push    aInitFailed
1102
        jmp     .cantload
1103
.ok:
1104
        mov     al, 1
1000 diamond 1105
        ret     16
589 diamond 1106
 
1107
plugin_unload_default:
1108
        ret
1109
 
1110
OpenFilePlugin_default:
631 diamond 1111
        xor     eax, eax
1112
        ret     28
589 diamond 1113
GetFiles_default:
1114
        xor     eax, eax
1115
        ret     20
1116
 
1117
ClosePlugin_default:
1118
        ret     4
1119
 
1120
GetOpenPluginInfo_default:
1121
        ret     8
1122
 
1123
SetFolder_default:
1124
open_default:
1125
        xor     eax, eax
1126
        ret     12
1127
 
180 heavyiron 1128
new_screen:
474 diamond 1129
; in: ecx=sizeof(screen data), edx->vtable
1130
; out: ebp=pointer or NULL, eax!=0 if successful
1131
; destroys ebx,ecx
1132
        call    xpgalloc
180 heavyiron 1133
        test    eax, eax
1134
        jnz     @f
1135
        ret
1136
@@:
1137
        mov     ebp, eax
1138
        mov     eax, [screens]
474 diamond 1139
        mov     ecx, [num_screens]
1140
        inc     ecx
1141
        shl     ecx, 3
1142
        test    ecx, 0xFFF
1143
        jnz     .norealloc
1144
        push    edx
1145
        mov     edx, eax
1146
        call    xpgrealloc
1147
        pop     edx
180 heavyiron 1148
        test    eax, eax
1149
        jnz     @f
474 diamond 1150
        mov     ecx, ebp
1151
        call    pgfree
180 heavyiron 1152
        xor     eax, eax
1153
        ret
1154
@@:
1155
        mov     [screens], eax
474 diamond 1156
.norealloc:
180 heavyiron 1157
        inc     [num_screens]
474 diamond 1158
        mov     [eax+ecx-8], edx
1159
        mov     [eax+ecx-4], ebp
180 heavyiron 1160
        mov     eax, [num_screens]
1161
        dec     eax
1162
        mov     [active_screen], eax
1163
        mov     [active_screen_vtable], edx
1164
        mov     [active_screen_data], ebp
997 diamond 1165
        or      [idle_interval], -1
1166
        mov     edx, [edx+screen_vtable.keybar]
1167
        test    edx, edx
1168
        jz      @f
1169
        mov     [active_screen_keybar], edx
1170
@@:
180 heavyiron 1171
        jmp     draw_keybar
1172
 
1173
next_screen:
1174
        mov     eax, [active_screen]
1175
        inc     eax
1176
        cmp     eax, [num_screens]
1177
        jnz     @f
1178
        xor     eax, eax
1179
@@:     mov     [active_screen], eax
1180
        jmp     change_screen
1181
 
1182
delete_active_screen:
1183
        mov     edi, [screens]
1184
        mov     eax, [active_screen]
1185
        shl     eax, 3
1186
        add     edi, eax
1187
        push    dword [edi+4]
1188
        lea     esi, [edi+8]
1189
        mov     ecx, [num_screens]
1190
        sub     ecx, [active_screen]
1191
        dec     ecx
1192
        add     ecx, ecx
1193
        rep     movsd
1194
        dec     [num_screens]
474 diamond 1195
        mov     ecx, [num_screens]
1196
        shl     ecx, 3
1197
        test    ecx, 0xFFF
1198
        jnz     .norealloc
1199
        mov     edx, [screens]
1200
        call    pgrealloc               ; must succeed, because we decrease size
1201
        mov     [screens], eax
1202
.norealloc:
1203
        pop     ecx
1204
        call    pgfree
997 diamond 1205
        dec     [active_screen]
180 heavyiron 1206
 
1207
change_screen:
1208
        pusha
997 diamond 1209
        or      [idle_interval], -1
180 heavyiron 1210
        mov     eax, [active_screen]
1211
        mov     esi, [screens]
1212
        mov     ebp, [esi+eax*8+4]
1213
        mov     eax, [esi+eax*8]
997 diamond 1214
        push    eax ebp
1215
        mov     eax, [eax+screen_vtable.OnActivate]
1216
        test    eax, eax
1217
        jz      @f
1218
        call    eax
1219
@@:
1220
        pop     ebp eax
180 heavyiron 1221
        mov     [active_screen_vtable], eax
1222
        mov     [active_screen_data], ebp
997 diamond 1223
        mov     edx, [eax+screen_vtable.keybar]
1224
        test    edx, edx
1225
        jz      @f
1226
        mov     [active_screen_keybar], edx
1227
@@:
180 heavyiron 1228
        call    draw_keybar
814 diamond 1229
        mov     [cursor_size], cursor_normal_size
180 heavyiron 1230
        call    [eax+screen_vtable.OnRedraw]
1231
        popa
1232
        ret
1233
 
1234
F12:
1235
        mov     eax, [cur_width]
1236
        add     eax, 8
1237
        mov     esi, eax
1238
        mul     [num_screens]
474 diamond 1239
        mov     ecx, eax
1240
        call    xpgalloc
180 heavyiron 1241
        test    eax, eax
1242
        jnz     @f
1243
        ret
1244
@@:
1245
        mov     ebx, eax
1246
        mov     edi, eax
1247
        xor     ecx, ecx
1248
.next:
1249
        xor     eax, eax
1250
        stosd
1251
        inc     ecx
1252
        cmp     ecx, [num_screens]
1253
        jz      @f
1254
        lea     eax, [edi+esi-4]
1255
        mov     dword [edi-4], eax
1256
@@:
1257
        xor     eax, eax
1258
        stosd
1259
        dec     ecx
1260
        jz      @f
1261
        lea     eax, [edi-8]
1262
        sub     eax, esi
1263
        mov     dword [edi-4], eax
1264
@@:
1265
        mov     al, '&'
1266
        stosb
1267
        cmp     ecx, 36
1268
        jae     .noletter
1269
        lea     eax, [ecx+'0']
1270
        cmp     al, '9'
1271
        jbe     @f
1272
        add     al, 7
1273
@@:
1274
        stosb
1275
        mov     al, '.'
1276
        stosb
1277
        jmp     .letter_done
1278
.noletter:
1279
        mov     al, ' '
1280
        stosb
1281
        stosb
1282
.letter_done:
1283
        mov     al, ' '
1284
        stosb
1285
        pushad
1286
        mov     eax, [screens]
1287
        mov     ebp, [eax+ecx*8+4]
1288
        mov     eax, [eax+ecx*8]
1289
        mov     ecx, [cur_width]
1290
        sub     ecx, 12
1291
        call    [eax + screen_vtable.getname]
1292
        popad
1293
        sub     edi, 4
1294
        add     edi, [cur_width]
1295
        inc     ecx
1296
        cmp     ecx, [num_screens]
1297
        jb      .next
1298
        mov     eax, [active_screen]
1299
        mul     esi
1300
        add     eax, ebx
1301
        push    1
474 diamond 1302
        push    dword aScreens
180 heavyiron 1303
        push    eax
1304
        call    menu
1305
        cmp     eax, -1
1306
        jz      @f
1307
        sub     eax, ebx
1308
        div     esi
1309
        mov     [active_screen], eax
1310
@@:
474 diamond 1311
        mov     ecx, ebx
1312
        call    pgfree
180 heavyiron 1313
        jmp     change_screen
1314
 
1315
panels_OnKey:
814 diamond 1316
; restore screen hidden by quick search box
1317
        cmp     [bDisplayQuickSearch], 0
1318
        jz      @f
1319
        mov     [bDisplayQuickSearch], 0
1320
        push    0
1321
        push    QuickSearchDlg
1322
        call    HideDialogBox
1323
@@:
180 heavyiron 1324
        mov     ebp, [active_panel]
1325
        mov     ecx, [ebp + panel1_index - panel1_data]
1326
        mov     edx, [ebp + panel1_start - panel1_data]
1327
        mov     ebx, [ebp + panel1_colst - panel1_data]
1328
        add     ebx, edx
1329
        mov     esi, panels_ctrlkeys
814 diamond 1330
        call    process_ctrl_keys
1331
        jc      .nostdkey
1332
        mov     [bQuickSearchMode], 0
1333
        ret
1334
.leaveqsmode:
1335
        mov     [bQuickSearchMode], 0
1336
        call    draw_image
1337
        ret
1338
.keepqsmode:
1339
        push    QuickSearchDlg
1340
        call    ShowDialogBox
1341
        mov     [bDisplayQuickSearch], 1
1342
        ret
1343
.nostdkey:
1344
        cmp     [bQuickSearchMode], 0
1345
        jz      .noqsmode
1346
        test    al, al
1347
        js      .keepqsmode
1348
        cmp     al, 40h
1349
        jae     .leaveqsmode
1350
        cmp     al, 0Eh
1351
        jz      .qsbackspace
1352
        cmp     al, 1Ch
1353
        jz      .test_enter
1354
        movzx   eax, al
1355
        cmp     byte [scan2ascii+eax], 0
1356
        jz      .leaveqsmode
1357
        call    get_ascii_char
1358
        mov     ecx, dword [quick_search_buf + 4]
1359
        cmp     ecx, quicksearch_maxlen
1360
        jae     .keepqsmode
1361
        mov     byte [quick_search_buf + 12 + ecx], al
1362
        mov     byte [quick_search_buf + 12 + ecx + 1], 0
1363
        push    ecx
1364
        call    quick_find
1365
        pop     ecx
1366
        jnc     @f
1367
        mov     byte [quick_search_buf + 12 + ecx], 0
1368
        jmp     .keepqsmode
1369
@@:
1370
        inc     dword [quick_search_buf + 4]
1371
        sub     ecx, 16
1372
        jae     @f
1373
        xor     ecx, ecx
1374
@@:
1375
        mov     dword [quick_search_buf + 8], ecx
1376
        jmp     .keepqsmode
1377
.qsbackspace:
1378
        mov     ecx, dword [quick_search_buf + 4]
1379
        jecxz   .keepqsmode2
1380
        dec     ecx
1381
        mov     byte [quick_search_buf + 12 + ecx], 0
1382
        dec     dword [quick_search_buf + 4]
1383
.keepqsmode2:
1384
        jmp     .keepqsmode
1385
.test_enter:
1386
        test    [ctrlstate], 0Ch        ; LCtrl or RCtrl pressed?
1387
        jz      .keepqsmode2
1388
        test    [ctrlstate], 3          ; Shift pressed?
1389
        jnz     @f
1390
        call    quick_find_next
1391
        jmp     .keepqsmode2
1392
@@:
1393
        call    quick_find_prev
1394
        jmp     .keepqsmode2
1395
.noqsmode:
1396
; handle Alt+ combinations for quick search
1397
        test    [ctrlstate], 30h        ; LAlt or RAlt pressed?
1398
        jz      .noalt                  ; no => skip
1399
        test    [ctrlstate], 0Ch        ; LCtrl or RCtrl pressed?
1400
        jnz     .noalt                  ; yes => skip
1401
        cmp     al, 40h
1402
        jae     .noalt
1403
        movzx   eax, al
1404
        cmp     byte [scan2ascii+eax], 0
1405
        jz      .noalt
1406
        call    get_ascii_char
1407
        mov     edi, quick_search_buf + 12
1408
        mov     dword [edi-12], quicksearch_maxlen-1
1409
        mov     dword [edi-8], 1
1410
        and     dword [edi-4], 0
1411
        stosb
1412
        mov     byte [edi], 0
1413
        call    quick_find
1414
        jnc     @f
1415
        mov     byte [quick_search_buf + 12], 0
1416
        and     dword [quick_search_buf + 4], 0
1417
@@:
1418
        mov     ebx, QuickSearchDlg
1419
        mov     eax, [ebp + panel1_left - panel1_data]
1420
        add     eax, 10
1421
        mov     edx, [cur_width]
1422
        sub     edx, 21
1423
        cmp     eax, edx
1424
        jb      @f
1425
        mov     eax, edx
1426
@@:
1427
        mov     [ebx + dlgtemplate.x], eax
1428
        mov     eax, [ebp + panel1_top - panel1_data]
1429
        add     eax, [ebp + panel1_height - panel1_data]
1430
        mov     edx, [cur_height]
1431
        sub     edx, 2
1432
        cmp     eax, edx
1433
        jb      @f
1434
        mov     eax, edx
1435
@@:
1436
        mov     [ebx + dlgtemplate.y], eax
1437
        push    ebx
1438
        call    ShowDialogBox
1439
        mov     [bQuickSearchMode], 1
1440
        mov     [bDisplayQuickSearch], 1
1441
.find_letter_done:
1442
.noalt:
180 heavyiron 1443
.ret:
1444
        ret
1445
.up:
1446
        jecxz   .ret
1447
        dec     ecx
1448
        mov     [ebp + panel1_index - panel1_data], ecx
1449
        cmp     ecx, edx
1450
        jae     .done_redraw
1451
        mov     [ebp + panel1_start - panel1_data], ecx
1452
.done_redraw:
1453
;        call    draw_panel
1454
;        ret
1455
        jmp     draw_panel
474 diamond 1456
.insert:
1457
        lea     eax, [ecx*4]
1458
        add     eax, [ebp + panel1_files - panel1_data]
1459
        mov     eax, [eax]
1460
        cmp     word [eax+40], '..'
1461
        jnz     @f
1462
        cmp     byte [eax+42], 0
1463
        jz      .insert.down
1464
@@:
1465
        xor     byte [eax+303], 1
1466
        mov     edx, [eax+32]
1467
        test    byte [eax+303], 1
1468
        mov     eax, [eax+36]
1469
        jnz     .insert.increase
1470
        sub     dword [ebp + panel1_selected_size - panel1_data], edx
1471
        sbb     dword [ebp + panel1_selected_size+4 - panel1_data], eax
1472
        dec     [ebp + panel1_selected_num - panel1_data]
1473
        jmp     .insert.down
1474
.insert.increase:
1475
        add     dword [ebp + panel1_selected_size - panel1_data], edx
1476
        adc     dword [ebp + panel1_selected_size+4 - panel1_data], eax
1477
        inc     [ebp + panel1_selected_num - panel1_data]
1478
.insert.down:
1479
        inc     ecx
1480
        cmp     ecx, [ebp + panel1_numfiles - panel1_data]
1481
        jae     .done_redraw
1482
        jmp     @f
180 heavyiron 1483
.down:
1484
        inc     ecx
1485
        cmp     ecx, [ebp + panel1_numfiles - panel1_data]
1486
        jae     .ret
474 diamond 1487
@@:
180 heavyiron 1488
        mov     [ebp + panel1_index - panel1_data], ecx
1489
        cmp     ecx, ebx
1490
        jb      .done_redraw
1491
        sub     ecx, [ebp + panel1_colst - panel1_data]
1492
        inc     ecx
1493
        mov     [ebp + panel1_start - panel1_data], ecx
1494
        jmp     .done_redraw
1495
.left:
474 diamond 1496
        test    ecx, ecx
1497
        jnz     @f
1498
        ret
1499
@@:
1500
        mov     eax, [ebp + panel1_colsz - panel1_data]
1501
        sub     ecx, eax
180 heavyiron 1502
        jae     @f
1503
        xor     ecx, ecx
1504
@@:
1505
        mov     [ebp + panel1_index - panel1_data], ecx
474 diamond 1506
.finalize_left:
180 heavyiron 1507
        cmp     ecx, edx
1508
        jae     .done_redraw
474 diamond 1509
        sub     edx, eax
180 heavyiron 1510
        jae     @f
1511
        xor     edx, edx
1512
@@:
1513
        mov     [ebp + panel1_start - panel1_data], edx
1514
        jmp     .done_redraw
474 diamond 1515
.pgup:
1516
        mov     eax, [ebp + panel1_colst - panel1_data]
1517
        dec     eax
1518
        jnz     @f
1519
        inc     eax
1520
@@:
1521
        test    ecx, ecx
1522
        jnz     @f
1523
        ret
1524
@@:
1525
        sub     ecx, eax
1526
        jae     @f
1527
        xor     ecx, ecx
1528
@@:
1529
        mov     [ebp + panel1_index - panel1_data], ecx
1530
        dec     ecx
1531
        jmp     .finalize_left
180 heavyiron 1532
.right:
474 diamond 1533
        mov     eax, [ebp + panel1_colsz - panel1_data]
1534
        add     ecx, eax
180 heavyiron 1535
        cmp     ecx, [ebp + panel1_numfiles - panel1_data]
1536
        jb      @f
1537
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
1538
        dec     ecx
1539
@@:
1540
        mov     [ebp + panel1_index - panel1_data], ecx
474 diamond 1541
.finalize_right:
180 heavyiron 1542
        cmp     ecx, ebx
1543
        jb      .done_redraw
474 diamond 1544
        add     ebx, eax
180 heavyiron 1545
        cmp     ebx, [ebp + panel1_numfiles - panel1_data]
1546
        jbe     @f
1547
        mov     ebx, [ebp + panel1_numfiles - panel1_data]
1548
@@:
1549
        sub     ebx, [ebp + panel1_colst - panel1_data]
1550
        jae     @f
1551
        xor     ebx, ebx
1552
@@:
1553
        mov     [ebp + panel1_start - panel1_data], ebx
1554
        jmp     .done_redraw
474 diamond 1555
.pgdn:
1556
        mov     eax, [ebp + panel1_colst - panel1_data]
1557
        dec     eax
1558
        jnz     @f
1559
        inc     eax
1560
@@:
1561
        add     ecx, eax
1562
        cmp     ecx, [ebp + panel1_numfiles - panel1_data]
1563
        jb      @f
1564
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
1565
        dec     ecx
1566
@@:
1567
        mov     [ebp + panel1_index - panel1_data], ecx
1568
        inc     ecx
1569
        jmp     .finalize_right
180 heavyiron 1570
.tab:
1571
        xor     [active_panel], panel1_data xor panel2_data
1572
        call    draw_cmdbar
1573
        call    draw_panel
1574
        mov     ebp, [active_panel]
1575
        jmp     .done_redraw
1576
.home:
1577
        and     [ebp + panel1_start - panel1_data], 0
1578
        and     [ebp + panel1_index - panel1_data], 0
1579
        jmp     .done_redraw
1580
.end:
1581
        mov     eax, [ebp + panel1_numfiles - panel1_data]
1582
        dec     eax
1583
        mov     [ebp + panel1_index - panel1_data], eax
1584
        inc     eax
1585
        sub     eax, [ebp + panel1_colst - panel1_data]
1586
        jae     @f
1587
        xor     eax, eax
1588
@@:
1589
        mov     [ebp + panel1_start - panel1_data], eax
1590
        jmp     .done_redraw
1591
.enter:
814 diamond 1592
        cmp     [bQuickSearchMode], 0
1593
        jz      @f
1594
        call    draw_image
1595
@@:
183 diamond 1596
        call    get_curfile_folder_entry
180 heavyiron 1597
        test    byte [ecx], 10h
1598
        jnz     .enter_folder
589 diamond 1599
; todo: add  handling on plugin panel
1600
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
1601
        jnz     .ret
1602
; generate full file name
1603
        lea     esi, [ebp + panel1_dir - panel1_data]
1604
        mov     edi, execdata
1605
@@:
1606
        lodsb
1607
        test    al, al
1608
        jz      @f
1609
        stosb
1610
        cmp     edi, execdataend-1
1611
        jae     .bigfilename
1612
        jmp     @b
1613
@@:
1614
        lea     esi, [ecx+40]
1615
        mov     al, '/'
1616
        stosb
1617
@@:
1618
        lodsb
1619
        stosb
1620
        cmp     edi, execdataend
1621
        ja      .bigfilename
1622
        test    al, al
1623
        jnz     @b
1624
; try to open file and look for all plugins
1625
        push    O_READ
1626
        push    execdata
1627
        call    open
1628
        test    eax, eax
1629
        jz      .noplugins      ; if can't open, just try to execute
1630
        mov     esi, eax        ; save handle
1631
        push    filedata_buffer_size
1632
        push    filedata_buffer
1633
        push    esi
1634
        call    read
1635
        mov     edi, eax        ; save size of read data
1636
; test for Kolibri executable
1637
        cmp     eax, 24h
1638
        jb      .enter.noexec
1639
        cmp     dword [filedata_buffer], 'MENU'
1640
        jnz     @f
1641
        cmp     word [filedata_buffer+4], 'ET'
1642
        jnz     @f
1643
.close_run:
1644
        push    esi
1645
        call    close
1646
        jmp     .run_app
1647
@@:
1648
        cmp     dword [filedata_buffer], 'KPCK'
1649
        jnz     @f
1650
        cmp     dword [filedata_buffer+12], 0x26914601
1651
        jz      .close_run
1652
@@:
1653
.enter.noexec:
1654
        mov     ecx, [num_plugins]
1655
        mov     edx, [plugins]
1656
        sub     edx, PluginInfo.size
1657
.plugloop:
1658
        add     edx, PluginInfo.size
1659
        dec     ecx
1660
        js      .plugdone
1661
        pushad
631 diamond 1662
        push    execdata
1663
        push    [ebp+panel1_hFile-panel1_data]
1664
        push    [ebp+panel1_hPlugin-panel1_data]
589 diamond 1665
        push    edi
1666
        push    filedata_buffer
1667
        call    get_curfile_folder_entry
1668
        push    ecx
1669
        push    esi
1670
        call    [edx+PluginInfo.OpenFilePlugin]
1671
        mov     [esp+28], eax
1672
        popad
1673
        test    eax, eax
1674
        jz      .plugloop
1675
        cmp     eax, -1
1676
        jnz     .pluginok
1677
        push    esi
1678
        call    close
1679
        ret
1680
.pluginok:
1681
; save current directory and set root directory of hPlugin
1682
        mov     edi, eax        ; save handle
1683
        mov     esi, execdata
1684
@@:
1685
        lodsb
1686
        test    al, al
1687
        jnz     @b
1688
        sub     esi, execdata-9
1689
; allocate esi bytes in buffer 'parents'
1690
        mov     ecx, [ebp + panel1_parents_sz - panel1_data]
1691
        add     ecx, esi
1692
        cmp     ecx, [ebp + panel1_parents_alloc - panel1_data]
1693
        jbe     .enter.norealloc
1694
        push    edx
1695
        mov     edx, [ebp + panel1_parents - panel1_data]
1696
        call    xpgrealloc
1697
        pop     edx
1698
        test    eax, eax
1699
        jnz     @f
1700
        push    edi
1701
        call    [edx+PluginInfo.ClosePlugin]
1702
        ret
1703
@@:
1704
        mov     [ebp + panel1_parents - panel1_data], eax
1705
.enter.norealloc:
1706
        mov     [ebp + panel1_parents_sz - panel1_data], ecx
1707
; save current state to the end of buffer
1708
        sub     ecx, esi
1709
        add     ecx, [ebp + panel1_parents - panel1_data]
1710
        xchg    edx, [ebp + panel1_hPlugin - panel1_data]
1711
        mov     [ecx], edx
1712
        xchg    edi, [ebp + panel1_hFile - panel1_data]
1713
        mov     [ecx+4], edi
1714
        mov     byte [ecx+8], 0
1715
        lea     edi, [ecx+9]
1716
        lea     ecx, [esi-9]
1717
        mov     esi, execdata
1718
        rep     movsb
1719
        mov     word [ebp + panel1_dir - panel1_data], '/'
1720
        mov     eax, [ebp + panel1_hPlugin - panel1_data]
1721
        lea     ebx, [ebp + panel1_plugin_info - panel1_data]
1722
        and     dword [ebx], 0
1723
        push    ebp
1724
        push    ebx
1725
        push    [ebp + panel1_hFile - panel1_data]
1726
        call    [eax+PluginInfo.GetOpenPluginInfo]
1727
        pop     ebp
1728
        call    get_curfile_folder_entry
1729
        mov     esi, ecx
1730
        mov     edi, left_dotdot_entry
1731
        cmp     ebp, panel1_data
1732
        jz      @f
1733
        add     edi, right_dotdot_entry-left_dotdot_entry
1734
@@:
1735
        mov     ecx, 10
1736
        rep     movsd
1737
        mov     byte [edi-40], 10h      ; attributes: folder
1738
        mov     eax, '..'
1739
        stosd
1740
        jmp     .reread
1741
.plugdone:
1742
        push    esi
1743
        call    close
1744
.noplugins:
1745
; run program or association
1746
        call    get_curfile_folder_entry
283 diamond 1747
        call    find_extension
1748
        jc      .run_app
180 heavyiron 1749
.run_association:
474 diamond 1750
        cmp     byte [edi], 0
1751
        jz      .l1
1752
        cmp     byte [edi], ';'
1753
        jnz     @f
1754
.l1:
1755
        ret
1756
@@:
1757
        mov     esi, edi
1758
@@:
1759
        lodsb
1760
        test    al, al
1761
        jz      @f
1762
        cmp     al, ';'
1763
        jnz     @b
1764
        dec     esi
1765
        mov     byte [esi], 0
1766
        mov     [restore_semicolon], esi
1767
@@:
283 diamond 1768
.run_association2:
180 heavyiron 1769
        mov     [execparams], execdata
474 diamond 1770
        mov     [execptr], edi
180 heavyiron 1771
        jmp     .dorun
1772
.run_app:
1773
        mov     [execptr], execdata
1774
        and     [execparams], 0
1775
.dorun:
814 diamond 1776
        lea     esi, [ebp + panel1_dir - panel1_data]
1777
        mov     edi, execdata
1778
@@:
1779
        lodsb
1780
        test    al, al
1781
        jz      @f
1782
        stosb
1783
        cmp     edi, execdataend-1
1784
        jae     .bigfilename
1785
        jmp     @b
1786
@@:
1787
        lea     esi, [ecx+40]
1788
        mov     al, '/'
1789
        stosb
1790
@@:
1791
        lodsb
1792
        stosb
1793
        cmp     edi, execdataend
1794
        ja      .bigfilename
1795
        test    al, al
1796
        jnz     @b
283 diamond 1797
; for fasm call - special handling, because
1798
; 1) fasm command line convention is different : fasm infile,outfile[,path] rather than tinypad infile
1799
; 2) fasm will probably create new file in directory, so we want to reload panel data
1800
        xor     edx, edx
1801
        cmp     [execparams], edx
1802
        jz      .nofasm
474 diamond 1803
        mov     esi, [execptr]
1804
@@:
1805
        lodsb
1806
        test    al, al
1807
        jnz     @b
1808
        mov     eax, [esi-5]
1809
        or      eax, 0x20202020
1810
        cmp     eax, 'fasm'
283 diamond 1811
        jnz     .nofasm
321 diamond 1812
        cmp     edi, execdata+(execdataend-execdata)/2
1813
        ja      .bigfilename
283 diamond 1814
        mov     esi, execdata
1815
@@:
1816
        lodsb
1817
        stosb
1818
        test    al, al
1819
        jnz     @b
1820
        mov     byte [esi-1], ','
1821
        inc     edx
1822
; output file: no extension if input file has extension, '.bin' otherwise
1823
        push    edi
1824
@@:
1825
        dec     edi
1826
        cmp     byte [edi], '.'
1827
        jz      .ptfound
1828
        cmp     byte [edi], '/'
1829
        jnz     @b
1830
        pop     edi
321 diamond 1831
        cmp     edi, execdataend-4
1832
        ja      .bigfilename
283 diamond 1833
        mov     dword [edi-1], '.bin'
1834
        mov     byte [edi+3], 0
1835
        jmp     .nofasm
1836
.ptfound:
1837
        mov     byte [edi], 0
1838
        pop     edi
1839
.nofasm:
321 diamond 1840
        mov     ebx, execinfo
1841
; if command line is more than 256 symbols, the kernel will truncate it
517 diamond 1842
; we do not want this!
321 diamond 1843
; N.B. We know that command line is either NULL or execdata, which is always ASCIIZ string,
1844
;      but can be up to 1023 symbols
1845
        mov     esi, [ebx+8]
1846
        test    esi, esi
1847
        jz      .cmdlinelenok
1848
@@:
1849
        lodsb
1850
        test    al, al
1851
        jnz     @b
1852
        sub     esi, [ebx+8]
1853
        dec     esi
1854
        cmp     esi, 256
1855
        ja      .bigcmdline
1856
.cmdlinelenok:
8932 IgorA 1857
        push    SF_FILE
180 heavyiron 1858
        pop     eax
517 diamond 1859
        int     40h
474 diamond 1860
        xor     esi, esi
1861
        xchg    esi, [restore_semicolon]
1862
        test    esi, esi
1863
        jz      @f
1864
        mov     byte [esi], ';'
1865
@@:
321 diamond 1866
        neg     eax
1867
        js      @f
1868
        call    get_error_msg
1869
        push    eax
474 diamond 1870
        push    dword aRunError
321 diamond 1871
        mov     eax, esp
517 diamond 1872
        push    ContinueBtn
321 diamond 1873
        push    1
1874
        push    eax
1875
        push    2
1876
        call    SayErr
517 diamond 1877
        pop     eax
1878
        pop     eax
321 diamond 1879
        ret
1880
@@:
283 diamond 1881
        test    edx, edx
1882
        jz      @f
8932 IgorA 1883
        push    SF_SLEEP
283 diamond 1884
        pop     eax
1885
        push    20
1886
        pop     ebx
517 diamond 1887
        int     0x40
283 diamond 1888
        jmp     .ctrl_r
1889
@@:
180 heavyiron 1890
        ret
321 diamond 1891
.bigfilename3:
1892
        pop     esi
1893
.bigfilename2:
1894
        pop     esi
1895
.bigfilename:
1896
        mov     eax, aFileNameTooBig
474 diamond 1897
.l2:
1898
        xor     esi, esi
1899
        xchg    esi, [restore_semicolon]
1900
        test    esi, esi
1901
        jz      @f
1902
        mov     byte [esi], ';'
321 diamond 1903
@@:
1904
        push    eax
1905
        mov     eax, esp
517 diamond 1906
        push    ContinueBtn
321 diamond 1907
        push    1
1908
        push    eax
1909
        push    1
1910
        call    SayErr
517 diamond 1911
        pop     eax
321 diamond 1912
        ret
1913
.bigcmdline:
1914
        mov     eax, aCmdLineTooBig
474 diamond 1915
        jmp     .l2
321 diamond 1916
.bigfoldername2:
589 diamond 1917
        mov     esi, prev_dir
1918
        lea     edi, [ebp + panel1_dir - panel1_data]
1919
@@:
1920
        lodsb
1921
        stosb
1922
        test    al, al
1923
        jnz     @b
321 diamond 1924
.bigfoldername:
1925
        mov     eax, aFolderNameTooBig
474 diamond 1926
        jmp     .l2
180 heavyiron 1927
.enter_folder:
1928
        lea     esi, [ecx+40]
1929
        cmp     word [esi], '..'
1930
        jnz     @f
1931
        cmp     byte [esi+2], 0
1932
        jz      .dotdot
1933
@@:
314 diamond 1934
        push    esi
1935
        lea     esi, [ebp + panel1_dir - panel1_data]
1936
        mov     edi, prev_dir
1937
@@:
1938
        lodsb
1939
        stosb
1940
        test    al, al
1941
        jnz     @b
1942
        lea     edi, [esi-1]
321 diamond 1943
        lea     edx, [ebp + panel1_dir - panel1_data + 1024]
1944
        cmp     esi, edx
314 diamond 1945
        pop     esi
321 diamond 1946
        jae     .bigfoldername
180 heavyiron 1947
        mov     al, '/'
1948
        cmp     [edi-1], al
1949
        jz      @f
1950
        stosb
1951
@@:
1952
        lodsb
321 diamond 1953
        cmp     edi, edx
1954
        jae     .bigfoldername2
180 heavyiron 1955
        stosb
1956
        test    al, al
1957
        jnz     @b
589 diamond 1958
        mov     eax, [ebp + panel1_hPlugin - panel1_data]
1959
        test    eax, eax
1960
        jz      .reread
1961
        push    ebp
1962
        lea     esi, [ebp + panel1_dir - panel1_data]
1963
        push    esi
1964
        add     ecx, 40
1965
        push    ecx
1966
        push    [ebp + panel1_hFile - panel1_data]
1967
        call    [eax+PluginInfo.SetFolder]
1968
        pop     ebp
1969
        test    al, al
1970
        jnz     .reread
1971
        mov     esi, prev_dir
1972
        lea     edi, [ebp + panel1_dir - panel1_data]
1973
@@:
1974
        lodsb
1975
        stosb
1976
        test    al, al
1977
        jnz     @b
1978
.retd:
1979
        ret
180 heavyiron 1980
.reread:
1981
        call    read_folder
1982
.done_cmdbar:
1983
        call    draw_cmdbar
1984
        jmp     .done_redraw
1985
.dotdot:
1986
        lea     edi, [ebp + panel1_dir - panel1_data]
589 diamond 1987
        cmp     word [edi], '/'
1988
        jnz     .dotdot_noroot
1989
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
1990
        jz      .retd
1991
        call    close_plugin_panel
1992
        jmp     .dotdot
1993
.dotdot_noroot:
1994
        mov     edx, edi
180 heavyiron 1995
        mov     al, 0
1996
        or      ecx, -1
1997
        repnz   scasb
1998
        dec     edi
1999
        mov     al, '/'
2000
        std
2001
        repnz   scasb
2002
        cld
2003
        inc     edi
589 diamond 2004
        cmp     edi, edx
2005
        jnz     @f
2006
        inc     edi
2007
@@:
2008
        push    dword [edi]
180 heavyiron 2009
        mov     byte [edi], 0
2010
        push    edi
589 diamond 2011
        mov     eax, [ebp + panel1_hPlugin - panel1_data]
2012
        test    eax, eax
2013
        jz      .dotdot_native
2014
        push    ebp
2015
        lea     esi, [ebp + panel1_dir - panel1_data]
2016
        push    esi
2017
        push    aDotDot
2018
        push    [ebp + panel1_hFile - panel1_data]
2019
        call    [eax+PluginInfo.SetFolder]
2020
        pop     ebp
2021
        test    al, al
2022
        jnz     .dotdot_native
2023
        pop     edi
2024
        pop     dword [edi]
2025
        ret
2026
.dotdot_native:
180 heavyiron 2027
        call    read_folder
2028
        pop     edi
589 diamond 2029
        pop     dword [edi]
2030
        push    edi
2031
        cmp     byte [edi], '/'
2032
        jnz     @f
2033
        inc     edi
2034
@@:
180 heavyiron 2035
        mov     edx, [ebp + panel1_files - panel1_data]
2036
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
2037
.scanloop:
2038
        mov     esi, [edx]
321 diamond 2039
        add     esi, 40
180 heavyiron 2040
        push    esi edi
2041
@@:
2042
        lodsb
2043
        call    match_symbol
2044
        jnz     @f
2045
        inc     edi
2046
        test    al, al
2047
        jnz     @b
2048
@@:
2049
        pop     edi esi
2050
        jz      .scanfound
2051
        add     edx, 4
2052
        loop    .scanloop
2053
        jmp     .scandone
2054
.scanfound:
2055
        sub     edx, [ebp + panel1_files - panel1_data]
2056
        shr     edx, 2
2057
        mov     [ebp + panel1_index - panel1_data], edx
2058
        sub     edx, [ebp + panel1_colst - panel1_data]
2059
        jb      .scandone
2060
        inc     edx
2061
        mov     [ebp + panel1_start - panel1_data], edx
2062
.scandone:
589 diamond 2063
        pop     edi
2064
        mov     byte [edi], 0
180 heavyiron 2065
        jmp     .done_cmdbar
2066
.ctrl_f39:
2067
        sub     al, 0x3D
2068
        add     al, al
2069
        mov     ah, [ebp + panel1_sortmode - panel1_data]
2070
        and     ah, 0xFE
2071
        cmp     al, ah
2072
        jnz     @f
2073
        and     [ebp + panel1_sortmode - panel1_data], 1
2074
        or      al, [ebp + panel1_sortmode - panel1_data]
2075
        xor     al, 1
2076
@@:
2077
        mov     [ebp + panel1_sortmode - panel1_data], al
2078
        mov     eax, [ebp + panel1_index - panel1_data]
2079
        mov     ecx, [ebp + panel1_files - panel1_data]
2080
        push    dword [ecx+eax*4]
2081
        push    ecx
2082
        call    sort_files
2083
        pop     edi
2084
        pop     eax
2085
        or      ecx, -1
2086
        repnz   scasd
2087
        not     ecx
2088
        dec     ecx
2089
        mov     [ebp + panel1_index - panel1_data], ecx
2090
        sub     ecx, [ebp + panel1_start - panel1_data]
2091
        jb      .less_start
2092
        sub     ecx, [ebp + panel1_colst - panel1_data]
2093
        jae     .gr_end
2094
@@:     jmp     .done_redraw
2095
.less_start:
2096
        add     [ebp + panel1_start - panel1_data], ecx
2097
        jmp     @b
2098
.gr_end:
2099
        inc     ecx
2100
        add     [ebp + panel1_start - panel1_data], ecx
2101
        jmp     @b
2102
.alt_f12:
2103
        mov     ebp, panel1_data
2104
        cmp     al, 0x3B
2105
        jz      @f
2106
        mov     ebp, panel2_data
2107
@@:
2108
; get drives list
2109
        mov     ebx, dirinfo
2110
        mov     [ebx+dirinfo.size-dirinfo], 1
2111
        mov     [ebx+dirinfo.dirdata-dirinfo], driveinfo
2112
        mov     [ebx+dirinfo.name-dirinfo], tmpname
2113
        mov     byte [tmpname], '/'
474 diamond 2114
        xor     edx, edx
180 heavyiron 2115
        xor     ecx, ecx
2116
.drive_loop_e:
2117
        mov     byte [tmpname+1], 0
8932 IgorA 2118
        push    SF_FILE
180 heavyiron 2119
        pop     eax
517 diamond 2120
        int     40h
180 heavyiron 2121
        mov     ebx, dirinfo
2122
        test    eax, eax
2123
        jnz     .drive_loop_e_done
2124
        mov     esi, driveinfo+32+40
2125
        mov     edi, tmpname+1
2126
@@:
2127
        lodsb
2128
        stosb
2129
        test    al, al
2130
        jnz     @b
2131
        push    [ebx+dirinfo.first-dirinfo]
2132
        and     [ebx+dirinfo.first-dirinfo], 0
2133
.drive_loop_i:
8932 IgorA 2134
        push    SF_FILE
180 heavyiron 2135
        pop     eax
517 diamond 2136
        int     40h
180 heavyiron 2137
        mov     ebx, dirinfo
2138
        test    eax, eax
2139
        jnz     .drive_loop_i_done
474 diamond 2140
        add     ecx, 32+8
2141
        push    ecx
2142
        and     ecx, 0xFFF
2143
        cmp     ecx, 32+8
2144
        pop     ecx
2145
        ja      @f
2146
        call    xpgrealloc
2147
        mov     edx, eax
180 heavyiron 2148
        test    eax, eax
474 diamond 2149
        jnz     @f
2150
        pop     eax
2151
        ret
180 heavyiron 2152
@@:
474 diamond 2153
        lea     edi, [edx+ecx-32]
180 heavyiron 2154
        mov     esi, tmpname
2155
@@:
2156
        lodsb
2157
        test    al, al
2158
        jz      @f
2159
        stosb
2160
        jmp     @b
2161
@@:
2162
        mov     esi, driveinfo+32+40
2163
        mov     al, '/'
2164
        stosb
2165
@@:
2166
        lodsb
2167
        stosb
2168
        test    al, al
2169
        jnz     @b
2170
        inc     [ebx+dirinfo.first-dirinfo]
2171
        jmp     .drive_loop_i
2172
.drive_loop_i_done:
2173
        pop     [ebx+dirinfo.first-dirinfo]
2174
        inc     [ebx+dirinfo.first-dirinfo]
2175
        jmp     .drive_loop_e
2176
.drive_loop_e_done:
2177
        and     [ebx+dirinfo.first-dirinfo], 0
474 diamond 2178
        mov     edi, edx
2179
        xor     esi, esi
2180
        add     ecx, edx
2181
@@:
2182
        and     dword [edi], 0
2183
        mov     dword [edi+4], esi
2184
        mov     esi, edi
2185
        add     edi, 32+8
2186
        cmp     edi, ecx
2187
        jae     @f
2188
        mov     [esi], edi
2189
        jmp     @b
2190
@@:
2191
        mov     ecx, edx
180 heavyiron 2192
        lea     edi, [ebp + panel1_dir - panel1_data]
589 diamond 2193
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
2194
        jz      .find_cur_drive_loop
2195
        mov     edi, [ebp + panel1_parents - panel1_data]
2196
        add     edi, 8
180 heavyiron 2197
.find_cur_drive_loop:
2198
        push    edi
2199
        lea     esi, [ecx+8]
2200
@@:
2201
        lodsb
2202
        test    al, al
2203
        jz      .cur_drive_found
2204
        call    match_symbol
2205
        jnz     @f
2206
        inc     edi
2207
        jmp     @b
2208
@@:
474 diamond 2209
        cmp     dword [ecx], 0
180 heavyiron 2210
        jz      @f
2211
        pop     edi
474 diamond 2212
        mov     ecx, [ecx]
180 heavyiron 2213
        jmp     .find_cur_drive_loop
2214
@@:
474 diamond 2215
        mov     ecx, edx
180 heavyiron 2216
.cur_drive_found:
2217
        pop     edi
2218
        push    1
2219
        push    aDrive
2220
        push    ecx
2221
        mov     eax, [ebp + panel1_height - panel1_data]
2222
        sub     eax, 2
2223
        jae     @f
2224
        add     eax, 2
2225
@@:
2226
        push    eax
2227
        push    [ebp + panel1_width - panel1_data]
2228
        push    [ebp + panel1_top - panel1_data]
2229
        push    [ebp + panel1_left - panel1_data]
2230
        call    menu_centered_in
2231
        cmp     eax, -1
589 diamond 2232
        jnz     @f
2233
        mov     ecx, edx
2234
        call    pgfree
2235
        ret
2236
@@:
2237
        push    eax
644 diamond 2238
        push    edx
589 diamond 2239
        call    close_plugin_panels
644 diamond 2240
        pop     edx
180 heavyiron 2241
        lea     edi, [ebp + panel1_dir - panel1_data]
589 diamond 2242
        push    edi
314 diamond 2243
        mov     esi, edi
2244
        mov     edi, prev_dir
2245
        mov     ecx, 1024/4
2246
        rep     movsd
589 diamond 2247
        pop     edi
2248
        pop     esi
2249
        add     esi, 8
180 heavyiron 2250
@@:
2251
        lodsb
2252
        stosb
2253
        test    al, al
2254
        jnz     @b
474 diamond 2255
        mov     ecx, edx
2256
        call    pgfree
180 heavyiron 2257
        call    read_folder
2258
        jmp     .done_redraw
283 diamond 2259
.shift_f5:
589 diamond 2260
; todo: copy to plugin panel
2261
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
2262
        jz      @f
2263
        ret
2264
@@:
517 diamond 2265
        mov     esi, ebp
2266
        cmp     [ebp + panel1_selected_num - panel1_data], 0
2267
        jnz     .f5_2
283 diamond 2268
        call    get_curfile_folder_entry
2269
        lea     esi, [ecx+40]
2270
        mov     edi, CopyDestEditBuf
2271
        mov     eax, CopyDestEditBuf.length
2272
        stosd
2273
        scasd
2274
        xor     eax, eax
2275
        stosd
2276
        mov     edx, edi
2277
@@:
2278
        lodsb
2279
        test    al, al
2280
        jz      .f5_common
2281
        stosb
2282
        jmp     @b
2283
.f5:
589 diamond 2284
; todo: copy to plugin panel
517 diamond 2285
        mov     esi, ebp
2286
        xor     esi, panel1_data xor panel2_data
589 diamond 2287
        cmp     [esi + panel1_hPlugin - panel1_data], 0
2288
        jz      .f5_2
2289
        ret
517 diamond 2290
.f5_2:
2291
        add     esi, panel1_dir - panel1_data
283 diamond 2292
        mov     edi, CopyDestEditBuf
2293
        mov     eax, CopyDestEditBuf.length
2294
        stosd
2295
        scasd
2296
        xor     eax, eax
2297
        stosd
2298
        mov     edx, edi
2299
@@:
2300
        lodsb
2301
        test    al, al
2302
        jz      @f
321 diamond 2303
        cmp     edi, CopyDestEditBuf+12+511
2304
        jae     .bigfoldername
283 diamond 2305
        stosb
2306
        jmp     @b
2307
@@:
2308
        mov     al, '/'
2309
        stosb
2310
.f5_common:
814 diamond 2311
        mov     eax, [ebp + panel1_hPlugin - panel1_data]
2312
        mov     [source_hModule], eax
2313
        mov     eax, [ebp + panel1_hFile - panel1_data]
2314
        mov     [source_hPlugin], eax
2315
        mov     eax, left_dotdot_entry
2316
        cmp     ebp, panel1_data
2317
        jz      @f
2318
        add     eax, right_dotdot_entry-left_dotdot_entry
2319
@@:
2320
        mov     [default_attr], eax
283 diamond 2321
        mov     byte [edi], 0
2322
        sub     edi, edx
2323
        mov     [edx-8], edi
2324
        mov     edi, CopySourceTextBuf
2325
        mov     esi, aCopy1
2326
@@:
2327
        lodsb
2328
        test    al, al
2329
        jz      @f
2330
        stosb
2331
        jmp     @b
2332
@@:
517 diamond 2333
        mov     eax, [ebp + panel1_selected_num - panel1_data]
2334
        test    eax, eax
2335
        jz      .f5_noselected1
2336
        mov     ebx, eax
2337
        push    10
2338
        pop     ecx
2339
        push    -'0'
2340
@@:
2341
        xor     edx, edx
2342
        div     ecx
2343
        push    edx
2344
        test    eax, eax
2345
        jnz     @b
2346
@@:
2347
        pop     eax
2348
        add     al, '0'
2349
        jz      @f
2350
        stosb
2351
        jmp     @b
2352
@@:
2353
if lang eq ru
2354
        mov     dword [edi], ' эле'
2355
        mov     dword [edi+4], 'мент'
2356
        add     edi, 8
2357
        cmp     ebx, 1
2358
        jz      @f
2359
        mov     al, 'а'
2360
        stosb
2361
        cmp     ebx, 4
2362
        jbe     @f
2363
        mov     word [edi-1], 'ов'
2364
        inc     edi
2365
@@:
2366
else
2367
        mov     dword [edi], ' ite'
2368
        mov     byte [edi+4], 'm'
2369
        add     edi, 5
2370
        cmp     ebx, 1
2371
        jz      @f
2372
        mov     al, 's'
2373
        stosb
2374
@@:
2375
end if
2376
        jmp     .f5_selected1
2377
.f5_noselected1:
2378
        mov     al, '"'
2379
        stosb
283 diamond 2380
        call    get_curfile_folder_entry
2381
        lea     esi, [ecx+40]
2382
        lea     eax, [esi+1]
2383
@@:
2384
        inc     esi
2385
        cmp     byte [esi-1], 0
2386
        jnz     @b
2387
        sub     esi, eax
2388
        xchg    eax, esi
2389
        dec     esi
2390
        mov     edx, [cur_width]
2391
        sub     edx, 50
2392
        sub     eax, edx
2393
        jbe     @f
2394
        add     esi, eax
2395
        mov     al, '.'
2396
        stosb
2397
        stosb
2398
        stosb
2399
@@:
2400
        lodsb
2401
        test    al, al
2402
        jz      @f
2403
        stosb
2404
        jmp     @b
2405
@@:
517 diamond 2406
        mov     al, '"'
2407
        stosb
2408
.f5_selected1:
283 diamond 2409
        mov     esi, aCopy2
2410
@@:
2411
        lodsb
2412
        stosb
2413
        test    al, al
2414
        jnz     @b
2415
        mov     ebx, copy_dlgdata
2416
        mov     eax, [cur_width]
2417
        sub     eax, 12
2418
        mov     [ebx + dlgtemplate.width], eax
2419
        dec     eax
2420
        dec     eax
2421
        mov     [ebx - copy_dlgdata + copy_dlgdata.width2], eax
2422
        mov     [ebx - copy_dlgdata + copy_dlgdata.width3], eax
2423
        shr     eax, 1
2424
        dec     eax
2425
        dec     eax
2426
        mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x2], eax
2427
        sub     eax, aCopyLength-1
2428
        mov     [ebx - copy_dlgdata + copy_dlgdata.copy_x1], eax
2429
        add     eax, aCopyLength+3
2430
        mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x1], eax
2431
        add     eax, aCancelBLength - 1
2432
        mov     [ebx - copy_dlgdata + copy_dlgdata.cnl_x2], eax
2433
        mov     byte [ebx - copy_dlgdata + copy_dlgdata.flags0], 0xC
2434
        and     byte [ebx - copy_dlgdata + copy_dlgdata.flags1], not 4
2435
        and     byte [ebx - copy_dlgdata + copy_dlgdata.flags2], not 4
2436
        push    ebx
2437
        call    DialogBox
2438
        cmp     eax, copy_dlgdata.copy_btn
2439
        jnz     .ret2
2440
; Копируем
2441
        mov     esi, CopyDestEditBuf+12
2442
        mov     edi, esi
2443
        xor     eax, eax
2444
        or      ecx, -1
2445
        repnz   scasb
2446
        dec     edi
2447
        dec     edi
2448
        cmp     edi, esi
2449
        jb      .ret2
517 diamond 2450
        mov     [bEndSlash], 0
283 diamond 2451
        cmp     byte [edi], '/'
2452
        jnz     @f
2453
        cmp     edi, esi
2454
        jz      @f
2455
        mov     byte [edi], 0
2456
        dec     edi
517 diamond 2457
        mov     [bEndSlash], 1
283 diamond 2458
@@:
2459
; Если путь не начинается со слэша, считаем его относительно текущей папки
2460
        cmp     byte [esi], '/'
2461
        jz      .copy_absolute_path
2462
        push    esi
2463
        push    edi
2464
        lea     edi, [ebp + panel1_dir - panel1_data]
2465
        or      ecx, -1
2466
        xor     eax, eax
2467
        repnz   scasb
2468
        not     ecx
2469
        pop     edi
321 diamond 2470
        push    edi
2471
        add     edi, ecx
2472
        cmp     edi, CopyDestEditBuf+12+513
2473
        pop     edi
2474
        jb      @f
2475
        pop     esi
2476
        jmp     .bigfilename
2477
@@:
283 diamond 2478
        lea     edx, [edi+2]
2479
        sub     edx, esi
2480
        lea     edi, [edi+ecx+1]
2481
        xchg    ecx, edx
2482
        std
2483
        lea     esi, [esi+ecx-1]
2484
        rep     movsb
2485
        cld
2486
        pop     edi
2487
        lea     esi, [ebp + panel1_dir - panel1_data]
2488
        push    edi
2489
        mov     ecx, edx
2490
        rep     movsb
2491
        mov     byte [edi-1], '/'
2492
        pop     esi
2493
.copy_absolute_path:
517 diamond 2494
; Сначала создаём все вышележащие папки, которые ещё не существуют
2495
; Последний из элементов может быть как файлом, так и папкой;
2496
; форсируем папку в случае, если хотя бы один из источников является папкой
2497
        xor     edx, edx
2498
        cmp     [ebp + panel1_selected_num - panel1_data], 0
2499
        jz      .f5_noselected2
2500
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
2501
        mov     edi, [ebp + panel1_files - panel1_data]
2502
.scanselected2:
2503
        mov     eax, [edi]
2504
        add     edi, 4
2505
        test    byte [eax+303], 1
2506
        jz      @f
2507
        test    byte [eax], 10h
2508
        jz      @f
2509
        inc     edx
2510
@@:
2511
        loop    .scanselected2
2512
        jmp     .f5_selected2
2513
.f5_noselected2:
2514
        call    get_curfile_folder_entry
2515
        test    byte [ecx], 10h
2516
        setnz   dl
2517
.f5_selected2:
283 diamond 2518
        xor     eax, eax
2519
        mov     edi, esi
2520
.countslashloop:
2521
        cmp     byte [edi], '/'
2522
        jnz     @f
2523
        inc     eax
517 diamond 2524
        mov     ecx, edi
283 diamond 2525
@@:
2526
        inc     edi
2527
        cmp     byte [edi], 0
2528
        jnz     .countslashloop
517 diamond 2529
        mov     [bNeedRestoreName], 0
2530
; "/file-system/partition" folders already exist, so we don't need to create them
283 diamond 2531
        cmp     eax, 2
517 diamond 2532
        jbe     .createupdone
2533
; we interpret destination as folder if edx!=0 or bEndSlash!=0
2534
        test    edx, edx
2535
        jnz     @f
2536
        cmp     [bEndSlash], 0
2537
        jnz     @f
2538
        mov     edi, ecx
2539
        dec     eax
283 diamond 2540
@@:
517 diamond 2541
        mov     [attrinfo.name], esi
2542
        mov     ecx, eax
2543
; ищем последнюю папку, которая ещё существует
2544
.createuploop1:
2545
        cmp     eax, 2
2546
        jbe     .createupdone1
2547
        mov     dl, [edi]
2548
        mov     byte [edi], 0
2549
        push    eax
8932 IgorA 2550
        push    SF_FILE
283 diamond 2551
        pop     eax
517 diamond 2552
        mov     ebx, attrinfo
2553
        int     0x40
321 diamond 2554
        test    eax, eax
517 diamond 2555
        pop     eax
522 diamond 2556
        mov     byte [edi], dl
517 diamond 2557
        jnz     .createupcont1
2558
        test    byte [attrinfo.attr], 10h
2559
        jnz     .createupdone1
2560
; the item required to be a folder, but is file
2561
        push    aNotFolder
321 diamond 2562
        push    esi
517 diamond 2563
        mov     eax, esp
2564
        push    ContinueBtn
2565
        push    1
321 diamond 2566
        push    eax
2567
        push    2
2568
        call    SayErr
283 diamond 2569
        pop     eax
517 diamond 2570
        pop     eax
2571
.ret3:
2572
        ret
2573
.createupcont1:
2574
        dec     eax
2575
@@:
2576
        dec     edi
2577
        cmp     byte [edi], '/'
2578
        jnz     @b
2579
        jmp     .createuploop1
2580
.createupdone1:
2581
; создаём все папки, которые нам нужны
2582
        cmp     eax, ecx
2583
        jae     .createupdone
2584
@@:
2585
        inc     edi
2586
        cmp     byte [edi], 0
2587
        jz      @f
2588
        cmp     byte [edi], '/'
2589
        jnz     @b
2590
@@:
2591
        mov     dl, byte [edi]
2592
        mov     byte [edi], 0
321 diamond 2593
        push    eax
517 diamond 2594
        push    RetryOrCancelBtn
321 diamond 2595
        push    2
517 diamond 2596
        call    makedir
522 diamond 2597
        mov     byte [edi], dl
517 diamond 2598
        mov     [bNeedRestoreName], 1
2599
        pop     eax
2600
        jnz     .ret3
2601
        inc     eax
2602
        jmp     .createupdone1
2603
.createupdone:
2604
        mov     dl, 1
2605
        cmp     byte [edi], 1
2606
        sbb     eax, -1
2607
        cmp     eax, 2
2608
        jbe     .docopy
2609
        mov     [attrinfo.attr], 0      ; assume zero attributes if error
8932 IgorA 2610
        push    SF_FILE
517 diamond 2611
        pop     eax
2612
        mov     ebx, attrinfo
2613
        int     0x40
2614
        test    [attrinfo.attr], 10h
2615
        setnz   dl
2616
.docopy:
2617
        call    get_curfile_folder_entry
2618
        mov     eax, ecx
2619
        cmp     [bNeedRestoreName], 0
2620
        jz      @f
2621
        cmp     [bEndSlash], 0
2622
        jnz     @f
2623
        cmp     [ebp + panel1_selected_num - panel1_data], 0
2624
        jnz     @f
2625
        test    byte [eax], 10h
2626
        jz      @f
2627
        mov     dl, 0
2628
@@:
2629
; начинаем собственно копирование
2630
        mov     [bDestIsFolder], dl
2631
        mov     [copy_bSkipAll], 0
2632
        mov     [copy_bSkipAll2], 0
589 diamond 2633
        mov     [copy_bSkipAll3], 0
2634
        test    [ebp + panel1_plugin_flags - panel1_data], 2
2635
        jnz     .copy_GetFiles
517 diamond 2636
        cmp     [ebp + panel1_selected_num - panel1_data], 0
2637
        jnz     .f5_selected3
2638
        call    copy_file
283 diamond 2639
.copydone:
2640
        push    ebp
2641
        call    .ctrl_r
2642
        pop     ebp
2643
        xor     ebp, panel1_data xor panel2_data
2644
        jmp     .ctrl_r
517 diamond 2645
.f5_selected3:
2646
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
2647
        mov     esi, [ebp + panel1_files - panel1_data]
2648
.f5_selected_copyloop:
2649
        lodsd
2650
        test    byte [eax+303], 1
2651
        jz      .f5_selected_copycont
2652
        mov     [bDestIsFolder], dl
2653
        call    copy_file
2654
        ja      .f5_multiple_cancel
2655
        and     byte [eax+303], not 1
2656
        pushad
2657
        call    draw_panel
2658
        cmp     [bNeedRestoreName], 0
321 diamond 2659
        jz      @f
517 diamond 2660
        mov     esi, CopyDestEditBuf+12
2661
        call    delete_last_name_from_end
321 diamond 2662
@@:
517 diamond 2663
        popad
2664
.f5_selected_copycont:
2665
        loop    .f5_selected_copyloop
2666
.f5_multiple_cancel:
321 diamond 2667
        jmp     .copydone
589 diamond 2668
.copy_GetFiles:
2669
        mov     ecx, [ebp + panel1_selected_num - panel1_data]
2670
        cmp     ecx, 1
2671
        adc     ecx, 0
2672
        shl     ecx, 2
2673
        call    xpgalloc
2674
        test    eax, eax
2675
        jnz     @f
2676
        ret
2677
@@:
2678
        push    ebp eax ; save
2679
        push    copy_AddDir     ; adddir
2680
        push    copy_AddFile    ; addfile
2681
        push    eax             ; items
2682
        shr     ecx, 2
2683
        push    ecx             ; NumItems
2684
        push    [ebp + panel1_hFile - panel1_data]
2685
        mov     edi, eax
2686
        call    get_curfile_folder_entry
2687
        mov     [edi], ecx
2688
        cmp     [ebp + panel1_selected_num - panel1_data], 0
2689
        jz      .cgf1
2690
        mov     esi, [ebp + panel1_files - panel1_data]
2691
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
2692
.cgf0:
2693
        lodsd
2694
        test    byte [eax+303], 1
2695
        jz      @f
2696
        stosd
2697
@@:
2698
        loop    .cgf0
2699
.cgf1:
2700
        mov     eax, [ebp + panel1_hPlugin - panel1_data]
2701
        call    [eax+PluginInfo.GetFiles]
2702
        pop     ecx ebp
2703
        call    pgfree
2704
        jmp     .copydone
283 diamond 2705
 
180 heavyiron 2706
.f3:
997 diamond 2707
        mov     eax, [ebp + panel1_files - panel1_data]
2708
        mov     ecx, [eax+ecx*4]
2709
        test    byte [ecx], 10h
2710
        jnz     .ret2
2711
        lea     esi, [ebp + panel1_dir - panel1_data]
2712
        xor     eax, eax
180 heavyiron 2713
        call    view_file
2714
.ret2:
2715
        ret
814 diamond 2716
.f4:
2717
        call    edit_file
2718
        ret
474 diamond 2719
.f8_has_selected:
2720
        mov     edi, saved_file_name+511
2721
        mov     byte [edi], 0
2722
        mov     eax, [ebp + panel1_selected_num - panel1_data]
2723
if lang eq ru
2724
        cmp     eax, 1
2725
        jz      @f
2726
        dec     edi
2727
        mov     byte [edi], 'а'
2728
        cmp     eax, 4
2729
        jbe     @f
2730
        dec     edi
2731
        mov     word [edi], 'ов'
2732
@@:
2733
        mov     dword [edi-4], 'мент'
2734
        mov     dword [edi-8], ' эле'
2735
        sub     edi, 8
2736
else
2737
        cmp     eax, 1
2738
        jz      @f
2739
        dec     edi
2740
        mov     byte [edi], 's'
2741
@@:
2742
        mov     dword [edi-4], 'item'
2743
        mov     byte [edi-5], ' '
2744
        sub     edi, 5
2745
end if
2746
        xor     edx, edx
2747
        push    10
2748
        pop     ecx
2749
@@:
2750
        div     ecx
2751
        add     dl, '0'
2752
        dec     edi
2753
        mov     [edi], dl
2754
        xor     edx, edx
2755
        test    eax, eax
2756
        jnz     @b
2757
        push    edi
2758
        push    aConfirmDeleteText
2759
        mov     eax, esp
2760
        push    DeleteOrCancelBtn
2761
        push    2
2762
        push    eax
2763
        push    2
2764
        push    aDeleteCaption
2765
        call    Message
2766
        add     esp, 8
2767
        test    eax, eax
2768
        jnz     .ret2
2769
        mov     [del_bSkipAll], 0
2770
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
2771
        jecxz   .ret2
2772
        mov     esi, [ebp + panel1_files - panel1_data]
2773
.f8_loop:
2774
        lodsd
2775
        test    byte [eax+303], 1
2776
        jz      @f
2777
        call    delete_file
2778
        ja      .f8_multiple_cancel
2779
@@:
2780
        loop    .f8_loop
2781
.f8_multiple_cancel:
522 diamond 2782
        jmp     .copydone
180 heavyiron 2783
.f8:
589 diamond 2784
; todo: delete files from plugin panel
2785
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
2786
        jz      @f
2787
        ret
2788
@@:
474 diamond 2789
        cmp     [ebp + panel1_selected_num - panel1_data], 0
2790
        jnz     .f8_has_selected
183 diamond 2791
        call    get_curfile_folder_entry
814 diamond 2792
        cmp     word [ecx+40], '..'
2793
        jnz     @f
2794
        cmp     byte [ecx+42], 0
2795
        jz      .f8_not_allowed
2796
@@:
183 diamond 2797
        cmp     [bConfirmDelete], 0
2798
        jz      .f8_allowed
474 diamond 2799
        lea     eax, [ecx+40]
2800
        push    eax
183 diamond 2801
        mov     esi, aConfirmDeleteText
2802
        mov     edi, aConfirmDeleteTextBuf
474 diamond 2803
        push    edi
183 diamond 2804
@@:
2805
        lodsb
2806
        stosb
2807
        test    al, al
2808
        jnz     @b
2809
        dec     edi
2810
        mov     esi, aDeleteFolder
2811
        test    byte [ecx], 10h
2812
        jnz     @f
2813
        mov     esi, aDeleteFile
2814
@@:
2815
        lodsb
2816
        stosb
2817
        test    al, al
2818
        jnz     @b
321 diamond 2819
        mov     eax, esp
474 diamond 2820
        push    DeleteOrCancelBtn
321 diamond 2821
        push    2
2822
        push    eax
474 diamond 2823
        push    2
2824
        push    aDeleteCaption
2825
        call    Message
2826
        add     esp, 8
321 diamond 2827
        test    eax, eax
474 diamond 2828
        jz      .f8_allowed
814 diamond 2829
.f8_not_allowed:
474 diamond 2830
        ret
2831
.f8_allowed:
2832
        mov     [del_bSkipAll], 0
2833
        mov     eax, ecx
2834
        call    delete_file
522 diamond 2835
        jmp     .copydone
180 heavyiron 2836
.ctrl_r:
2837
; Rescan panel
2838
;       call    read_folder
2839
;       jmp     .done_redraw
2840
        mov     eax, [ebp + panel1_index - panel1_data]
2841
        push    eax
183 diamond 2842
        call    get_curfile_name
283 diamond 2843
        mov     esi, ecx
180 heavyiron 2844
        mov     edi, saved_file_name
2845
@@:
2846
        lodsb
2847
        stosb
2848
        test    al, al
2849
        jnz     @b
997 diamond 2850
.ctrl_r.doread:
180 heavyiron 2851
        push    [ebp + panel1_start - panel1_data]
2852
        call    read_folder
2853
        pop     [ebp + panel1_start - panel1_data]
2854
        pop     [ebp + panel1_index - panel1_data]
2855
        or      eax, -1
2856
@@:
2857
        inc     eax
2858
        cmp     eax, [ebp + panel1_numfiles - panel1_data]
2859
        jae     .ctrl_r.notfound
2860
        mov     ecx, [ebp + panel1_files - panel1_data]
321 diamond 2861
        mov     esi, [ecx+eax*4]
2862
        add     esi, 40
180 heavyiron 2863
        mov     edi, saved_file_name
2864
        call    strcmpi
2865
        jnz     @b
2866
.ctrl_r.found:
2867
        mov     [ebp + panel1_index - panel1_data], eax
2868
.ctrl_r.notfound:
2869
        mov     eax, [ebp + panel1_numfiles - panel1_data]
2870
        dec     eax
2871
        cmp     [ebp + panel1_index - panel1_data], eax
2872
        jbe     @f
2873
        mov     [ebp + panel1_index - panel1_data], eax
2874
@@:
2875
        mov     eax, [ebp + panel1_index - panel1_data]
2876
        cmp     [ebp + panel1_start - panel1_data], eax
2877
        jbe     @f
2878
        mov     [ebp + panel1_start - panel1_data], eax
2879
@@:
2880
        inc     eax
2881
        sub     eax, [ebp + panel1_colst - panel1_data]
2882
        jae     @f
2883
        xor     eax, eax
2884
@@:
2885
        cmp     [ebp + panel1_start - panel1_data], eax
2886
        jae     @f
2887
        mov     [ebp + panel1_start - panel1_data], eax
2888
@@:
2889
        mov     eax, [ebp + panel1_numfiles - panel1_data]
2890
        sub     eax, [ebp + panel1_colst - panel1_data]
2891
        jbe     @f
2892
        cmp     [ebp + panel1_start - panel1_data], eax
2893
        jbe     @f
2894
        mov     [ebp + panel1_start - panel1_data], eax
2895
@@:
2896
        jmp     .done_redraw
283 diamond 2897
.menu:
589 diamond 2898
; todo: context menu for plugin panel
2899
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
2900
        jz      @f
2901
        ret
2902
@@:
283 diamond 2903
; display context menu
2904
; ignore folders
2905
        call    get_curfile_folder_entry
2906
        test    byte [ecx], 10h
2907
        jz      @f
2908
.menuret:
2909
        ret
2910
@@:
2911
        call    find_extension
2912
        jc      .menuret
2913
; known extension
474 diamond 2914
@@:
2915
        cmp     byte [edi], 0
283 diamond 2916
        jz      .menuret
474 diamond 2917
        cmp     byte [edi], ';'
2918
        jz      @f
2919
        inc     edi
2920
        jmp     @b
2921
@@:
2922
        inc     edi
2923
@@:
2924
        inc     edi
2925
        cmp     byte [edi-1], ' '
2926
        jz      @b
2927
        cmp     byte [edi-1], 9
2928
        jz      @b
2929
        dec     edi
2930
        cmp     byte [edi], 0
2931
        jz      .menuret
283 diamond 2932
        mov     ecx, esi
2933
@@:
2934
        inc     ecx
2935
        cmp     byte [ecx-1], 0
2936
        jnz     @b
2937
        sub     ecx, esi        ; ecx = длина имени файла+1 = длина заголовка+1
2938
        cmp     ecx, 15
2939
        jb      @f
2940
        mov     cl, 15
2941
@@:
2942
        xor     edx, edx
474 diamond 2943
        xor     ebp, ebp
2944
        push    edx
283 diamond 2945
.menucreateloop:
474 diamond 2946
        mov     eax, edi
2947
        xor     ebx, ebx
283 diamond 2948
@@:
474 diamond 2949
        cmp     byte [edi], ','
2950
        jz      @f
2951
        cmp     byte [edi], bl
2952
        jz      @f
2953
        inc     edi
2954
        jmp     @b
2955
@@:
2956
        xchg    bl, [edi]
2957
        pushad
2958
        push    nullstr
2959
        push    1024
2960
        push    saved_file_name
2961
        push    eax
2962
        push    aMenu
2963
        push    app_path
2964
        call    [ini.get_str]
2965
        popad
2966
        mov     [edi], bl
2967
        mov     eax, saved_file_name
2968
@@:
2969
        cmp     byte [eax], 0
2970
        jz      .menucreatecont
2971
        cmp     byte [eax], ','
2972
        jz      @f
283 diamond 2973
        inc     eax
474 diamond 2974
        jmp     @b
2975
@@:
2976
        mov     byte [eax], 0
2977
        push    eax
2978
        sub     eax, saved_file_name-1
283 diamond 2979
        cmp     eax, ecx
2980
        ja      @f
2981
        mov     eax, ecx
2982
@@:
474 diamond 2983
        xchg    eax, [esp]
2984
        inc     eax
2985
        push    eax
2986
@@:
2987
        inc     eax
2988
        cmp     byte [eax-1], 0
2989
        jnz     @b
2990
        sub     eax, [esp]
2991
        add     [esp+4], eax
2992
        pop     eax eax
2993
        add     eax, 8
2994
        add     ebp, eax
2995
        push    ebp
2996
        and     ebp, 0xFFF
2997
        cmp     ebp, eax
2998
        pop     ebp
2999
        ja      @f
3000
        push    eax
3001
        xchg    edx, [esp+4]
3002
        push    ecx
3003
        mov     ecx, ebp
3004
        call    xpgrealloc
3005
        pop     ecx
3006
        pop     edx
3007
        xchg    edx, [esp]
283 diamond 3008
        test    eax, eax
474 diamond 3009
        xchg    eax, [esp]
283 diamond 3010
        jz      .menucreated
474 diamond 3011
@@:
3012
        neg     eax
3013
        add     eax, ebp
3014
        add     eax, [esp]
3015
        and     dword [eax], 0
3016
        and     dword [eax+4], 0
283 diamond 3017
        test    edx, edx
3018
        jz      @f
474 diamond 3019
        sub     eax, [esp]
283 diamond 3020
        mov     [edx], eax
474 diamond 3021
        add     eax, [esp]
3022
        sub     edx, [esp]
3023
        mov     [eax+4], edx
283 diamond 3024
@@:
3025
        mov     edx, eax
474 diamond 3026
        push    esi edi
3027
        mov     esi, saved_file_name
283 diamond 3028
        lea     edi, [eax+8]
3029
@@:
3030
        lodsb
3031
        stosb
3032
        test    al, al
3033
        jnz     @b
474 diamond 3034
        push    esi
3035
        sub     esi, saved_file_name
283 diamond 3036
        sub     esi, ecx
3037
        jae     .menunoadd
3038
        neg     esi
3039
@@:
3040
        mov     byte [edi-1], ' '
3041
        stosb
3042
        dec     esi
3043
        jnz     @b
3044
.menunoadd:
3045
        pop     esi
474 diamond 3046
@@:
3047
        lodsb
3048
        stosb
3049
        test    al, al
3050
        jnz     @b
3051
        pop     edi esi
3052
.menucreatecont:
3053
        inc     edi
3054
        cmp     byte [edi-1], ','
3055
        jz      .menucreateloop
283 diamond 3056
.menucreated:
3057
        test    edx, edx
474 diamond 3058
        jz      .menuret_free
283 diamond 3059
        and     dword [edx], 0
474 diamond 3060
        pop     edx
3061
        mov     ecx, edx
3062
        add     [ecx], edx
283 diamond 3063
@@:
474 diamond 3064
        mov     ecx, [ecx]
3065
        cmp     dword [ecx], 0
283 diamond 3066
        jz      @f
474 diamond 3067
        add     [ecx], edx
3068
        add     [ecx+4], edx
283 diamond 3069
        jmp     @b
3070
@@:
474 diamond 3071
        add     [ecx+4], edx
3072
        push    edx
283 diamond 3073
        push    1
3074
        push    esi
3075
        push    edx
3076
        call    menu
3077
        cmp     eax, -1
474 diamond 3078
        jz      .menuret_free
3079
        lea     edi, [eax+8]
283 diamond 3080
@@:
474 diamond 3081
        inc     edi
3082
        cmp     byte [edi-1], 0
3083
        jnz     @b
3084
        mov     ebp, [active_panel]
283 diamond 3085
        call    get_curfile_folder_entry
474 diamond 3086
        call    .run_association2
3087
.menuret_free:
3088
        pop     ecx
3089
        jmp     pgfree
321 diamond 3090
.f7:
3091
        mov     dword [CopyDestEditBuf], CopyDestEditBuf.length
3092
        and     dword [CopyDestEditBuf+4], 0
3093
        and     dword [CopyDestEditBuf+8], 0
3094
        mov     byte [CopyDestEditBuf+12], 0
3095
        mov     ebx, mkdir_dlgdata
3096
        mov     eax, [cur_width]
3097
        sub     eax, 12
3098
        mov     [ebx + dlgtemplate.width], eax
3099
        dec     eax
3100
        dec     eax
3101
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.width2], eax
3102
        shr     eax, 1
3103
        dec     eax
3104
        dec     eax
3105
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x2], eax
3106
        sub     eax, a_ContinueLength-1
3107
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cont_x1], eax
3108
        add     eax, a_ContinueLength+3
3109
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x1], eax
3110
        add     eax, aCancelBLength - 1
3111
        mov     [ebx - mkdir_dlgdata + mkdir_dlgdata.cnl_x2], eax
3112
        mov     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags0], 0xC
3113
        and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags1], not 4
3114
        and     byte [ebx - mkdir_dlgdata + mkdir_dlgdata.flags2], not 4
3115
        push    ebx
3116
        call    DialogBox
3117
        cmp     eax, mkdir_dlgdata.cont_btn
3118
        jnz     .ret2
3119
        mov     esi, CopyDestEditBuf+12
3120
        cmp     byte [esi], 0
3121
        jz      .ret2
3122
        cmp     byte [esi], '/'
3123
        jz      .mkdir_absolute_path
3124
        push    esi
3125
        lea     edi, [ebp + panel1_dir - panel1_data]
3126
        or      ecx, -1
3127
        xor     eax, eax
3128
        repnz   scasb
3129
        not     ecx
3130
        mov     edi, esi
3131
@@:
3132
        cmp     byte [edi+1], 0
3133
        jz      @f
3134
        inc     edi
3135
        jmp     @b
3136
@@:
3137
        push    edi
3138
        add     edi, ecx
3139
        cmp     edi, CopyDestEditBuf+12+513
3140
        pop     edi
3141
        jb      @f
3142
        pop     esi
3143
        jmp     .bigfilename
3144
@@:
3145
        lea     edx, [edi+2]
3146
        sub     edx, esi
3147
        lea     edi, [edi+ecx+1]
3148
        xchg    ecx, edx
3149
        std
3150
        lea     esi, [esi+ecx-1]
3151
        rep     movsb
3152
        cld
3153
        pop     edi
3154
        lea     esi, [ebp + panel1_dir - panel1_data]
3155
        push    edi
3156
        mov     ecx, edx
3157
        rep     movsb
3158
        mov     byte [edi-1], '/'
3159
        pop     esi
3160
.mkdir_absolute_path:
517 diamond 3161
        push    RetryOrCancelBtn
321 diamond 3162
        push    2
517 diamond 3163
        call    makedir
321 diamond 3164
        jmp     .copydone
474 diamond 3165
.change_mode:
3166
        dec     eax
3167
        mov     [ebp + panel1_colmode - panel1_data], eax
3168
        call    calc_colwidths
3169
        jmp     draw_panel
3170
.quick_jump:
3171
        dec     eax
3172
        cmp     al, 10
3173
        jnz     @f
3174
        xor     eax, eax
3175
@@:
3176
        mov     eax, [FolderShortcuts+eax*4]
3177
        test    eax, eax
3178
        jnz     @f
3179
        ret
3180
@@:
589 diamond 3181
        push    eax
3182
        call    close_plugin_panels
474 diamond 3183
        lea     esi, [ebp + panel1_dir - panel1_data]
589 diamond 3184
        push    esi
474 diamond 3185
        mov     edi, prev_dir
3186
@@:
3187
        lodsb
3188
        stosb
3189
        test    al, al
3190
        jnz     @b
3191
        pop     edi esi
3192
@@:
3193
        lodsb
3194
        stosb
3195
        test    al, al
3196
        jnz     @b
3197
        jmp     .reread
3198
.greyplus:
3199
        push    0
3200
        mov     ecx, aSelect
3201
        jmp     @f
3202
.greyminus:
3203
        push    1
3204
        mov     ecx, aDeselect
3205
@@:
3206
        mov     eax, mark_dlgdata
3207
        mov     [eax+mark_dlgdata.title-mark_dlgdata], ecx
3208
        mov     [eax+mark_dlgdata.flags-mark_dlgdata], 0xC
3209
        mov     edi, enter_string_buf+12
3210
        mov     dword [edi-12], 512
3211
        mov     dword [edi-8], 1
3212
        and     dword [edi-4], 0
3213
        mov     word [edi], '*'
3214
        push    eax
3215
        call    DialogBox
3216
        inc     eax
3217
        jnz     @f
3218
.noselect:
3219
        pop     eax
3220
        ret
3221
@@:
3222
        xor     eax, eax
3223
        mov     esi, edi
3224
@@:
3225
        lodsb
3226
        mov     al, [tolower_table+eax]
3227
        mov     [esi-1], al
3228
        test    al, al
3229
        jnz     @b
3230
@@:
3231
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
3232
        mov     ebx, [ebp + panel1_files - panel1_data]
3233
        jecxz   .noselect
3234
        mov     eax, [ebx]
3235
        cmp     word [eax+40], '..'
3236
        jnz     .selectloop
3237
        cmp     byte [eax+42], 0
3238
        jnz     .selectloop
3239
        dec     ecx
3240
        jz      .noselect
3241
        add     ebx, 4
3242
.selectloop:
3243
        xor     eax, eax
3244
        mov     esi, [ebx]
3245
        add     esi, 40
3246
        mov     edx, lower_file_name-1
3247
@@:
3248
        lodsb
3249
        inc     edx
3250
        mov     al, [tolower_table+eax]
3251
        mov     [edx], al
3252
        test    al, al
3253
        jnz     @b
3254
        mov     esi, lower_file_name
3255
        call    match_mask_rev_lowercase
3256
        jc      @f
3257
        mov     esi, [ebx]
3258
        mov     eax, [esi+32]
3259
        cmp     byte [esp], 0
3260
        jz      .doselect
3261
        test    byte [esi+303], 1
3262
        jz      @f
3263
        and     byte [esi+303], not 1
3264
        sub     dword [ebp + panel1_selected_size - panel1_data], eax
3265
        mov     eax, [esi+36]
3266
        sbb     dword [ebp + panel1_selected_size+4 - panel1_data], eax
3267
        dec     dword [ebp + panel1_selected_num - panel1_data]
3268
        jmp     @f
3269
.doselect:
3270
        test    byte [esi+303], 1
3271
        jnz     @f
3272
        or      byte [esi+303], 1
3273
        add     dword [ebp + panel1_selected_size - panel1_data], eax
3274
        mov     eax, [esi+36]
3275
        adc     dword [ebp + panel1_selected_size+4 - panel1_data], eax
3276
        inc     dword [ebp + panel1_selected_num - panel1_data]
3277
@@:
3278
        add     ebx, 4
3279
        dec     ecx
3280
        jnz     .selectloop
3281
        pop     eax
3282
        jmp     .done_redraw
517 diamond 3283
.greyasterisk:
3284
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
3285
        mov     esi, [ebp + panel1_files - panel1_data]
3286
        jecxz   .galoopdone
3287
.galoop:
3288
        lodsd
3289
        cmp     word [eax+40], '..'
3290
        jnz     @f
3291
        cmp     byte [eax+42], 0
3292
        jz      .gacont
3293
@@:
3294
        xor     byte [eax+303], 1
3295
        mov     edx, [eax+32]
3296
        test    byte [eax+303], 1
3297
        jz      .gadel
3298
        add     dword [ebp + panel1_selected_size - panel1_data], edx
3299
        mov     edx, [eax+36]
3300
        adc     dword [ebp + panel1_selected_size+4 - panel1_data], edx
3301
        inc     dword [ebp + panel1_selected_num - panel1_data]
3302
        jmp     .gacont
3303
.gadel:
3304
        sub     dword [ebp + panel1_selected_size - panel1_data], edx
3305
        mov     edx, [eax+36]
3306
        sbb     dword [ebp + panel1_selected_size+4 - panel1_data], edx
3307
        dec     dword [ebp + panel1_selected_num - panel1_data]
3308
.gacont:
3309
        loop    .galoop
3310
.galoopdone:
3311
        jmp     .done_redraw
180 heavyiron 3312
 
589 diamond 3313
@@:
3314
        call    close_plugin_panel
3315
close_plugin_panels:
3316
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
3317
        jnz     @b
3318
        ret
3319
 
3320
close_plugin_panel:
3321
; close plugin and restore old directory
3322
        mov     esi, [ebp + panel1_parents - panel1_data]
3323
        add     esi, [ebp + panel1_parents_sz - panel1_data]
3324
@@:
3325
        dec     esi
3326
        cmp     byte [esi-1], 0
3327
        jnz     @b
3328
        push    esi
3329
        lea     edi, [ebp + panel1_dir - panel1_data]
3330
@@:
3331
        lodsb
3332
        stosb
3333
        test    al, al
3334
        jnz     @b
3335
        pop     esi
3336
        sub     esi, 9
3337
        mov     edx, [esi]      ; hPlugin
3338
        mov     ebx, [esi+4]    ; hFile
3339
        sub     esi, [ebp + panel1_parents - panel1_data]
3340
        mov     [ebp + panel1_parents_sz - panel1_data], esi
3341
        xchg    edx, [ebp + panel1_hPlugin - panel1_data]
3342
        xchg    ebx, [ebp + panel1_hFile - panel1_data]
3343
        push    edx ebx
3344
        lea     ebx, [ebp + panel1_plugin_info - panel1_data]
3345
        and     dword [ebx], 0
3346
        mov     eax, [ebp + panel1_hPlugin - panel1_data]
3347
        test    eax, eax
3348
        jz      @f
3349
        push    ebp
3350
        push    ebx
3351
        push    [ebp + panel1_hFile - panel1_data]
3352
        call    [eax+PluginInfo.GetOpenPluginInfo]
3353
        pop     ebp
3354
@@:
3355
        pop     ebx edx
3356
 
3357
close_handle_if_unused:
3358
; edx=hPlugin, ebx=hFile
3359
        push    ebp
3360
        xor     ecx, ecx
3361
@@:
3362
        mov     eax, [screens]
3363
        mov     ebp, [eax+ecx*8+4]
3364
        mov     eax, [eax+ecx*8]
3365
        call    [eax+screen_vtable.IsHandleUsed]
3366
        jz      .used
3367
        inc     ecx
3368
        cmp     ecx, [num_screens]
3369
        jb      @b
3370
        push    ebx
3371
        call    [edx+PluginInfo.ClosePlugin]
3372
.used:
3373
        pop     ebp
3374
        ret
3375
 
3376
panels_IsHandleUsed:
3377
; edx=hPlugin, ebx=hFile
3378
        mov     ebp, panel1_data
3379
        call    .1
3380
        jz      .ret
3381
        mov     ebp, panel2_data
3382
 
3383
.1:
3384
        cmp     edx, [ebp+panel1_hPlugin-panel1_data]
3385
        jnz     @f
3386
        cmp     ebx, [ebp+panel1_hFile-panel1_data]
3387
        jz      .ret
3388
@@:
3389
        mov     esi, [ebp + panel1_parents_sz - panel1_data]
3390
        test    esi, esi
3391
        jnz     @f
3392
        inc     esi
3393
.ret:
3394
        ret
3395
@@:
3396
        add     esi, [ebp + panel1_parents - panel1_data]
3397
@@:
3398
        dec     esi
3399
        cmp     byte [esi-1], 0
3400
        jnz     @b
3401
        sub     esi, 9
3402
        cmp     edx, [esi]      ; hPlugin
3403
        jnz     .no
3404
        mov     ebx, [esi+4]    ; hFile
3405
        jz      .ret
3406
.no:
3407
        cmp     esi, [ebp + panel1_parents - panel1_data]
3408
        jnz     @b
3409
        inc     esi
3410
        ret
3411
 
3412
panels_OnExit:
3413
; close plugin panels
3414
        mov     ebp, panel1_data
3415
        call    close_plugin_panels
3416
        mov     ebp, panel2_data
3417
        call    close_plugin_panels
3418
        ret
3419
 
180 heavyiron 3420
panels_OnRedraw:
814 diamond 3421
        or      [cursor_x], -1
3422
        or      [cursor_y], -1
180 heavyiron 3423
        call    draw_cmdbar
3424
        mov     ebp, panel1_data
474 diamond 3425
        call    calc_colwidths
180 heavyiron 3426
        call    draw_panel
3427
        mov     ebp, panel2_data
474 diamond 3428
        call    calc_colwidths
180 heavyiron 3429
        call    draw_panel
3430
        ret
3431
 
3432
init_console:
474 diamond 3433
        mov     ecx, [console_data_ptr]
3434
        call    pgfree
283 diamond 3435
        mov     eax, [cur_width]
3436
        mul     [cur_height]
3437
        mov     ecx, eax
474 diamond 3438
        push    ecx
3439
        shl     ecx, 2
3440
        call    pgalloc
3441
        pop     ecx
283 diamond 3442
        test    eax, eax
3443
        jz      exit
3444
        mov     [console_data_ptr], eax
3445
        mov     edi, eax
180 heavyiron 3446
        mov     ax, 0720h
3447
        rep     stosw
283 diamond 3448
        mov     [panel1_left], ecx
3449
        mov     [panel1_top], ecx
3450
        mov     [panel2_top], ecx
180 heavyiron 3451
        mov     eax, [cur_width]
3452
        inc     eax
3453
        shr     eax, 1
3454
        mov     [panel1_width], eax
3455
        mov     [panel2_left], eax
3456
        sub     eax, [cur_width]
3457
        neg     eax
3458
        mov     [panel2_width], eax
3459
        mov     eax, [cur_height]
3460
        dec     eax
3461
        dec     eax
3462
        mov     [panel1_height], eax
3463
        mov     [panel2_height], eax
3464
        ret
3465
 
183 diamond 3466
get_curfile_folder_entry:
3467
        mov     ecx, [ebp + panel1_index - panel1_data]
321 diamond 3468
        shl     ecx, 2
183 diamond 3469
        add     ecx, [ebp + panel1_files - panel1_data]
321 diamond 3470
        mov     ecx, [ecx]
183 diamond 3471
        ret
3472
get_curfile_name:
3473
        call    get_curfile_folder_entry
3474
        add     ecx, 40
3475
        ret
3476
 
814 diamond 3477
quick_find:
3478
        cmp     [ebp + panel1_numfiles - panel1_data], 0
3479
        jz      .nof
3480
        mov     ecx, [ebp + panel1_index - panel1_data]
3481
.scanloop:
3482
        mov     edi, ecx
3483
        shl     edi, 2
3484
        add     edi, [ebp + panel1_files - panel1_data]
3485
        mov     edi, [edi]
3486
        add     edi, 40
3487
        mov     esi, quick_search_buf + 12
3488
@@:
3489
        lodsb
3490
        test    al, al
3491
        jz      .ok
3492
        call    match_symbol
3493
        jnz     .no
3494
        inc     edi
3495
        jmp     @b
3496
.no:
3497
        inc     ecx
3498
        cmp     ecx, [ebp + panel1_numfiles - panel1_data]
3499
        jb      @f
3500
        xor     ecx, ecx
3501
@@:
3502
        cmp     ecx, [ebp + panel1_index - panel1_data]
3503
        jnz     .scanloop
3504
.nof:
3505
        stc
3506
        ret
3507
.ok:
3508
        cmp     ecx, [ebp + panel1_index - panel1_data]
3509
        jz      .ret
3510
        mov     [ebp + panel1_index - panel1_data], ecx
3511
        mov     eax, [ebp + panel1_height - panel1_data]
3512
        shr     eax, 1
3513
        sub     ecx, eax
3514
        jae     @f
3515
        xor     ecx, ecx
3516
@@:
3517
        mov     eax, [ebp + panel1_numfiles - panel1_data]
3518
        sub     eax, [ebp + panel1_colst - panel1_data]
3519
        jnc     @f
3520
        xor     eax, eax
3521
        xor     ecx, ecx
3522
@@:
3523
        cmp     ecx, eax
3524
        jb      @f
3525
        mov     ecx, eax
3526
@@:
3527
        mov     [ebp + panel1_start - panel1_data], ecx
3528
        call    draw_panel
3529
.ret:
3530
        clc
3531
        ret
3532
 
3533
quick_find_next:
3534
        cmp     [ebp + panel1_numfiles - panel1_data], 0
3535
        jz      quick_find.nof
3536
        mov     ecx, [ebp + panel1_index - panel1_data]
3537
        jmp     quick_find.no
3538
 
3539
quick_find_prev:
3540
        cmp     [ebp + panel1_numfiles - panel1_data], 0
3541
        jz      quick_find.nof
3542
        mov     ecx, [ebp + panel1_index - panel1_data]
3543
.scanloop:
3544
        dec     ecx
3545
        jns     @f
3546
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
3547
        dec     ecx
3548
@@:
3549
        cmp     ecx, [ebp + panel1_index - panel1_data]
3550
        jz      quick_find.nof
3551
        mov     edi, ecx
3552
        shl     edi, 2
3553
        add     edi, [ebp + panel1_files - panel1_data]
3554
        mov     edi, [edi]
3555
        add     edi, 40
3556
        mov     esi, quick_search_buf + 12
3557
@@:
3558
        lodsb
3559
        test    al, al
3560
        jz      quick_find.ok
3561
        call    match_symbol
3562
        jnz     .scanloop
3563
        inc     edi
3564
        jmp     @b
3565
 
180 heavyiron 3566
panels_getname:
3567
if lang eq ru
3568
        mov     eax, 'Пане'
3569
        stosd
3570
        mov     eax, 'ли  '
3571
        stosd
3572
        mov     eax, '    '
3573
        stosd
3574
        stosb
3575
else
3576
        mov     eax, 'Pane'
3577
        stosd
3578
        mov     eax, 'ls  '
3579
        stosd
3580
        mov     eax, '    '
3581
        stosd
3582
        stosb
3583
end if
3584
        sub     ecx, 13
3585
        mov     ebp, [active_panel]
3586
        push    3
3587
        pop     edx
589 diamond 3588
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
3589
        jz      .native
3590
        mov     esi, [ebp + panel1_parents - panel1_data]
3591
        add     esi, [ebp + panel1_parents_sz - panel1_data]
180 heavyiron 3592
@@:
589 diamond 3593
        dec     esi
3594
        cmp     byte [esi-1], 0
3595
        jz      @f
3596
        cmp     byte [esi-1], '/'
3597
        jnz     @b
3598
@@:
3599
        push    ecx edi
3600
        shr     ecx, 1
3601
@@:
180 heavyiron 3602
        lodsb
589 diamond 3603
        test    al, al
3604
        jz      @f
180 heavyiron 3605
        stosb
589 diamond 3606
        loop    @b
3607
@@:
3608
        sub     edi, [esp]
3609
        sub     [esp+4], edi
3610
        add     [esp], edi
3611
        pop     edi ecx
3612
        lea     esi, [ebp + panel1_dir - panel1_data]
3613
        cmp     byte [esi+1], 0
3614
        jnz     @f
3615
        inc     esi
3616
@@:
3617
        jmp     .main
3618
.native:
3619
        lea     esi, [ebp + panel1_dir - panel1_data]
3620
@@:
3621
        lodsb
3622
        stosb
180 heavyiron 3623
        dec     ecx
3624
        test    al, al
3625
        jz      @f
3626
        cmp     al, '/'
3627
        jnz     @b
3628
        dec     edx
3629
        jnz     @b
3630
@@:
3631
        test    al, al
3632
        jnz     @f
3633
        dec     esi
3634
        dec     edi
3635
@@:
589 diamond 3636
.main:
180 heavyiron 3637
        push    esi
3638
@@:
3639
        lodsb
3640
        test    al, al
3641
        jnz     @b
3642
        dec     esi
3643
        mov     ebx, esi
3644
        sub     ebx, [esp]
3645
        dec     esi
3646
        push    esi
3647
        mov     esi, [ebp + panel1_index - panel1_data]
321 diamond 3648
        shl     esi, 2
3649
        add     esi, [ebp + panel1_files - panel1_data]
3650
        mov     esi, [esi]
3651
        add     esi, 40
180 heavyiron 3652
        push    esi
3653
@@:
3654
        lodsb
3655
        test    al, al
3656
        jnz     @b
3657
        add     ebx, esi
3658
        sub     ebx, [esp]
3659
        dec     esi
3660
        cmp     ebx, ecx
3661
        jbe     @f
3662
        mov     al, '.'
3663
        stosb
3664
        stosb
3665
        stosb
3666
        sub     ecx, 3
3667
        mov     ebx, ecx
3668
@@:
3669
        add     edi, ebx
3670
        inc     ecx
3671
        std
3672
@@:
3673
        movsb
3674
        dec     ecx
3675
        jz      .nodir
3676
        cmp     esi, [esp]
3677
        jae     @b
589 diamond 3678
        mov     esi, [esp+4]
180 heavyiron 3679
        mov     al, '/'
3680
        stosb
3681
        dec     ecx
3682
        jz      .nodir
3683
@@:
3684
        cmp     esi, [esp+8]
3685
        jb      .nodir
3686
        movsb
3687
        loop    @b
3688
.nodir:
3689
        cld
3690
        pop     eax
3691
        pop     eax
3692
        pop     eax
3693
        ret
3694
 
3695
draw_window:
8932 IgorA 3696
        push    SF_REDRAW
180 heavyiron 3697
        pop     eax
8932 IgorA 3698
        push    SSF_BEGIN_DRAW
180 heavyiron 3699
        pop     ebx
517 diamond 3700
        int     40h
8932 IgorA 3701
        mov     al, SF_STYLE_SETTINGS
3702
        mov     bl, SSF_GET_SKIN_HEIGHT
517 diamond 3703
        int     40h
180 heavyiron 3704
        mov     [skinh], eax
3705
        mov     ebx, [cur_width]
3706
        imul    ebx, font_width
283 diamond 3707
        add     ebx, 100*65536 + 5*2-1
180 heavyiron 3708
        mov     ecx, [cur_height]
3709
        imul    ecx, font_height
283 diamond 3710
        lea     ecx, [eax+ecx+5-1+100*65536]
180 heavyiron 3711
        xor     eax, eax
314 diamond 3712
        mov     edx, 0x53000000
517 diamond 3713
        mov     edi, header
3714
        int     40h
8932 IgorA 3715
        mov     al, SF_DRAW_RECT
314 diamond 3716
        xor     edx, edx
3717
        cmp     [fill_width], 0
3718
        jz      @f
3719
        mov     ebx, [wnd_width]
3720
        sub     ebx, [fill_width]
3721
        sub     ebx, 5-1
3722
        shl     ebx, 16
3723
        mov     bx, word [fill_width]
3724
        mov     ecx, [skinh-2]
3725
        mov     cx, word [wnd_height]
3726
        sub     cx, word [skinh]
3727
        sub     cx, 5-1
517 diamond 3728
        int     0x40
314 diamond 3729
@@:
3730
        cmp     [fill_height], 0
3731
        jz      @f
3732
        xor     edx, edx
3733
        mov     ebx, 50000h
3734
        mov     bx, word [wnd_width]
3735
        sub     ebx, 9
3736
        mov     ecx, [wnd_height]
3737
        sub     ecx, [fill_height]
3738
        sub     ecx, 5-1
3739
        shl     ecx, 16
3740
        mov     cx, word [fill_height]
517 diamond 3741
        int     0x40
314 diamond 3742
@@:
283 diamond 3743
;        xor     ecx, ecx
3744
;        call    draw_image
8932 IgorA 3745
        mov     al, SF_PUT_IMAGE_EXT
474 diamond 3746
        mov     ebx, [MemForImage]
3747
        test    ebx, ebx
3748
        jz      @f
3749
        mov     ecx, [cur_width]
3750
        imul    ecx, font_width*10000h
3751
        mov     cx, word [cur_height]
3752
        imul    cx, font_height
3753
        mov     edx, [skinh]
3754
        add     edx, 5*10000h
3755
        mov     esi, 8
3756
        mov     edi, console_colors
3757
        xor     ebp, ebp
517 diamond 3758
        int     0x40
474 diamond 3759
@@:
8932 IgorA 3760
        mov     al, SF_REDRAW
3761
        push    SSF_END_DRAW
180 heavyiron 3762
        pop     ebx
517 diamond 3763
        int     40h
180 heavyiron 3764
        ret
3765
 
3766
draw_image.nomem:
8932 IgorA 3767
        mov     al, SF_DRAW_RECT
180 heavyiron 3768
        xor     edx, edx
3769
        mov     ebx, [cur_width]
3770
        imul    ebx, font_width
3771
        add     ebx, 5*65536
3772
        mov     ecx, [skinh-2]
3773
        mov     cx, word [cur_height]
3774
        imul    cx, font_height
517 diamond 3775
        int     40h
8932 IgorA 3776
        mov     al, SF_DRAW_TEXT
180 heavyiron 3777
        mov     ebx, 32*65536+32
3778
        mov     ecx, 0xFFFFFF
3779
        mov     edx, nomem_draw
3780
        push    nomem_draw.size
3781
        pop     esi
517 diamond 3782
        int     40h
180 heavyiron 3783
        ret
3784
 
3785
draw_image:
474 diamond 3786
        mov     [bMemForImageValidData], byte 1
3787
        cmp     [MemForImage], 0
3788
        jnz     .allocated
3789
; allocate memory for image
3790
        mov     ecx, [cur_width]
3791
        imul    ecx, [cur_height]
3792
        imul    ecx, font_width*font_height
3793
        call    pgalloc
3794
        test    eax, eax
3795
        jz      draw_image.nomem
3796
        mov     [MemForImage], eax
3797
        mov     [bMemForImageValidData], byte 0
3798
.allocated:
814 diamond 3799
        push    ebp
283 diamond 3800
        and     [max_x], 0
3801
        or      [min_x], -1
474 diamond 3802
        and     [max_y], 0
283 diamond 3803
        or      [min_y], -1
474 diamond 3804
        mov     eax, [cursor_y]
3805
        mul     [cur_width]
3806
        add     eax, [cursor_x]
3807
        add     eax, eax
3808
        add     eax, [console_data_ptr]
3809
        xchg    [cur_cursor_pos], eax
3810
        mov     [old_cursor_pos], eax
3811
        mov     edi, [MemForImage]
283 diamond 3812
        mov     esi, [console_data_ptr]
474 diamond 3813
        mov     ecx, [cur_height]
3814
.lh:
3815
        push    ecx
283 diamond 3816
        mov     ecx, [cur_width]
474 diamond 3817
.lw:
3818
        push    ecx
3819
        mov     eax, [cur_width]
3820
        imul    eax, [cur_height]
3821
        mov     ebx, [esi]
3822
        cmp     [bMemForImageValidData], 0
3823
        jz      @f
3824
        cmp     esi, [cur_cursor_pos]
3825
        jz      @f
3826
        cmp     esi, [old_cursor_pos]
3827
        jz      @f
3828
        cmp     bx, [eax*2+esi]
3829
        jnz     @f
3830
        inc     esi
3831
        inc     esi
3832
        jmp     .skip_symbol
283 diamond 3833
@@:
474 diamond 3834
        mov     [eax*2+esi], bx
3835
        cmp     ecx, [min_x]
283 diamond 3836
        ja      @f
474 diamond 3837
        mov     [min_x], ecx
283 diamond 3838
@@:
474 diamond 3839
        cmp     ecx, [max_x]
283 diamond 3840
        jb      @f
474 diamond 3841
        mov     [max_x], ecx
283 diamond 3842
@@:
474 diamond 3843
        mov     eax, [esp+4]
3844
        mov     [min_y], eax
3845
        cmp     eax, [max_y]
283 diamond 3846
        jb      @f
474 diamond 3847
        mov     [max_y], eax
283 diamond 3848
@@:
3849
        push    edi
474 diamond 3850
        xor     eax, eax
3851
        mov     al, [esi+1]
3852
        and     al, 0xF
3853
        mov     ebx, eax
3854
        mov     al, [esi+1]
3855
        shr     al, 4
3856
        mov     ebp, eax
283 diamond 3857
        sub     ebx, ebp
474 diamond 3858
        lodsb
3859
        inc     esi
180 heavyiron 3860
if font_width > 8
3861
        lea     edx, [eax+eax+font]
3862
else
3863
        lea     edx, [eax+font]
3864
end if
3865
.sh:
474 diamond 3866
        mov     ecx, [edx]
3867
repeat font_width
3868
        shr     ecx, 1
283 diamond 3869
        sbb     eax, eax
3870
        and     eax, ebx
3871
        add     eax, ebp
474 diamond 3872
        mov     [edi+%-1], al
3873
end repeat
3874
        mov     eax, [cur_width]
3875
;        imul    eax, font_width
3876
;        add     edi, eax
3877
if font_width = 6
3878
        lea     eax, [eax*2+eax]
3879
        lea     edi, [edi+eax*2]
3880
else if font_width = 7
3881
        lea     edi, [edi+eax*8]
3882
        sub     edi, eax
3883
else if font_width = 8
3884
        lea     edi, [edi+eax*8]
3885
else if font_width = 9
3886
        lea     edi, [edi+eax*8]
180 heavyiron 3887
        add     edi, eax
474 diamond 3888
else if font_width = 10
3889
        lea     eax, [eax*4+eax]
3890
        lea     edi, [edi+eax*2]
3891
else
3892
Unknown font_width value!
3893
end if
180 heavyiron 3894
if font_width > 8
3895
        add     edx, 256*2
474 diamond 3896
        cmp     edx, font+256*2*font_height
180 heavyiron 3897
else
3898
        add     edx, 256
474 diamond 3899
        cmp     edx, font+256*font_height
180 heavyiron 3900
end if
474 diamond 3901
        jb      .sh
283 diamond 3902
        pop     edi
3903
.skip_symbol:
3904
        pop     ecx
3905
        add     edi, font_width
3906
        dec     ecx
3907
        jnz     .lw
474 diamond 3908
        mov     eax, [cur_width]
283 diamond 3909
        imul    eax, (font_height-1)*font_width
180 heavyiron 3910
        add     edi, eax
474 diamond 3911
        pop     ecx
283 diamond 3912
        dec     ecx
3913
        jnz     .lh
3914
; cursor
3915
        mov     eax, [cursor_y]
3916
        inc     eax
3917
        jz      .nocursor
474 diamond 3918
        mul     [cur_width]
283 diamond 3919
        imul    eax, font_height*font_width
3920
        mov     edx, [cursor_x]
3921
        inc     edx
3922
        imul    edx, font_width
3923
        add     eax, edx
474 diamond 3924
        add     eax, [MemForImage]
3925
        mov     edx, [cur_width]
283 diamond 3926
        imul    edx, font_width
3927
        neg     edx
814 diamond 3928
        mov     ecx, [cursor_size]
283 diamond 3929
.cursor_loop:
3930
        push    ecx
3931
        mov     ecx, font_width
3932
        add     eax, edx
3933
        push    eax
3934
@@:
814 diamond 3935
;;        add     byte [eax-1], 0x10
283 diamond 3936
        xor     byte [eax-1], 7
3937
        sub     eax, 1
3938
        loop    @b
3939
        pop     eax
180 heavyiron 3940
        pop     ecx
283 diamond 3941
        loop    .cursor_loop
3942
.nocursor:
474 diamond 3943
        cmp     [min_y], -1
3944
        jz      .nodraw
3945
        mov     ecx, [cur_width]
3946
        mov     ebx, [cur_height]
3947
        mov     eax, ebx
3948
        sub     ebx, [max_y]
3949
        sub     eax, [min_y]
3950
        sub     eax, ebx
3951
        inc     eax
3952
        imul    ebp, eax, font_height
3953
        mov     edx, ecx
3954
        sub     edx, [max_x]
283 diamond 3955
        imul    edx, font_width
474 diamond 3956
        mov     eax, edx
283 diamond 3957
        shl     edx, 16
474 diamond 3958
        imul    dx, bx, font_height
3959
        imul    ebx, [cur_width]
3960
        mov     ecx, [max_x]
3961
        sub     ecx, [min_x]
3962
        inc     ecx
3963
        imul    ecx, font_width*10000h
3964
        add     ecx, ebp
3965
        imul    ebx, font_width*font_height
3966
        add     ebx, [MemForImage]
3967
        add     ebx, eax
283 diamond 3968
        add     edx, [skinh]
474 diamond 3969
        add     edx, 5*10000h
3970
        imul    esi, [cur_width], font_width
3971
        mov     ebp, ecx
3972
        shr     ebp, 16
3973
        sub     esi, ebp
3974
        mov     ebp, esi
8932 IgorA 3975
        push    SF_PUT_IMAGE_EXT
180 heavyiron 3976
        pop     eax
474 diamond 3977
        mov     edi, console_colors
283 diamond 3978
        push    8
3979
        pop     esi
517 diamond 3980
        int     40h
283 diamond 3981
.nodraw:
814 diamond 3982
        pop     ebp
180 heavyiron 3983
        ret
3984
 
3985
get_console_ptr:
3986
; in: eax=x, edx=y
3987
; out: edi->console data
3988
        push    edx
3989
        imul    edx, [cur_width]
3990
        add     edx, eax
283 diamond 3991
        mov     edi, [console_data_ptr]
3992
        lea     edi, [edi + edx*2]
180 heavyiron 3993
        pop     edx
3994
        ret
3995
 
3996
draw_keybar:
3997
        pushad
3998
        xor     eax, eax
3999
        test    [ctrlstate], 3
4000
        jz      @f
4001
        inc     eax
4002
@@:
4003
        test    [ctrlstate], 0xC
4004
        jz      @f
4005
        or      al, 2
4006
@@:
4007
        test    [ctrlstate], 0x30
4008
        jz      @f
4009
        or      al, 4
4010
@@:
4011
        imul    eax, 6*12
997 diamond 4012
        mov     esi, [active_screen_keybar]
180 heavyiron 4013
        add     esi, eax
4014
        xor     ecx, ecx
4015
        inc     ecx
4016
        xor     eax, eax
4017
        mov     edx, [cur_height]
4018
        dec     edx
4019
        call    get_console_ptr
4020
        push    6
4021
        pop     ebx
4022
        mov     eax, [cur_width]
4023
        sub     eax, 11+9+3*2+6
4024
        cmp     eax, 7*11
4025
        jl      @f
4026
        cdq
4027
        mov     bl, 11
4028
        div     ebx
4029
        mov     ebx, eax
4030
@@:
4031
        xor     edx, edx
4032
.l:
4033
        add     edx, 7
4034
        cmp     cl, 10
4035
        jb      @f
4036
        inc     edx
4037
@@:
4038
        cmp     edx, [cur_width]
4039
        ja      .ret
4040
        cmp     cl, 10
4041
        jae     .twodig
4042
        lea     eax, [ecx+'0']
4043
        stosb
4044
        mov     al, [keybar_number_color]
4045
        stosb
4046
        jmp     .cmn
4047
.twodig:
4048
        mov     al, cl
4049
        cbw
4050
        div     [_10]
4051
        add     al, '0'
4052
        stosb
4053
        mov     al, [keybar_number_color]
4054
        stosb
4055
        xchg    al, ah
4056
        add     al, '0'
4057
        stosw
4058
.cmn:
4059
        mov     ah, [keybar_name_color]
4060
        push    ecx
4061
        mov     cl, 6
4062
@@:
4063
        lodsb
4064
        stosw
4065
        loop    @b
4066
        mov     al, ' '
4067
        lea     ecx, [ebx-6]
4068
        cmp     byte [esp], 12
4069
        jz      .ret_pop
4070
        add     edx, ecx
4071
        rep     stosw
4072
        pop     ecx
4073
        inc     edx
4074
        cmp     edx, [cur_width]
4075
        ja      .ret
4076
        mov     ah, [keybar_bgr_color]
4077
        stosw
4078
        inc     ecx
4079
        jmp     .l
4080
.ret_pop:
4081
        pop     ecx
4082
.ret:
4083
        cmp     byte [edi-2], ' '
4084
        jnz     @f
4085
        dec     edi
4086
        dec     edi
4087
@@:
4088
        push    edi
283 diamond 4089
        xor     eax, eax
180 heavyiron 4090
        mov     edx, [cur_height]
4091
        call    get_console_ptr
4092
        mov     ecx, edi
4093
        pop     edi
4094
        sub     ecx, edi
4095
        shr     ecx, 1
4096
        mov     al, ' '
4097
        mov     ah, [keybar_name_color]
4098
        rep     stosw
4099
.done:
814 diamond 4100
        cmp     [bDisplayQuickSearch], 0
4101
        jz      @f
4102
        push    QuickSearchDlg
4103
        call    DrawDialogBox
4104
@@:
180 heavyiron 4105
        popad
4106
        ret
4107
 
4108
draw_cmdbar:
4109
        mov     esi, [active_panel]
4110
        add     esi, panel1_dir - panel1_data
4111
        xor     eax, eax
4112
        mov     edx, [cur_height]
4113
        dec     edx
4114
        dec     edx
4115
        call    get_console_ptr
4116
        mov     ah, [cmdbar_prefix_color]
4117
        mov     ecx, [cur_width]
4118
        dec     ecx
4119
@@:
4120
        lodsb
4121
        test    al, al
4122
        jz      @f
4123
        stosw
4124
        loop    @b
4125
@@:
4126
        mov     al, '>'
4127
        stosw
4128
        mov     al, ' '
4129
        mov     ah, [cmdbar_normal_color]
4130
        rep     stosw
4131
        ret
4132
 
8932 IgorA 4133
align 16
180 heavyiron 4134
draw_border:
4135
        push    edi
4136
        mov     al, 0xC9
4137
        stosw
4138
        mov     al, 0xCD
4139
        lea     ecx, [ebx-2]
4140
        rep     stosw
4141
        mov     al, 0xBB
4142
        stosw
4143
        pop     edi
4144
        add     edi, [cur_width]
4145
        add     edi, [cur_width]
4146
        lea     ecx, [edx-2]
4147
.l:
4148
        push    edi
4149
        mov     al, 0xBA
4150
        stosw
4151
        mov     al, 0x20
4152
        push    ecx
4153
        lea     ecx, [ebx-2]
4154
        rep     stosw
4155
        pop     ecx
4156
        mov     al, 0xBA
4157
        stosw
4158
        pop     edi
4159
        add     edi, [cur_width]
4160
        add     edi, [cur_width]
4161
        loop    .l
4162
        mov     al, 0xC8
4163
        stosw
4164
        mov     al, 0xCD
4165
        lea     ecx, [ebx-2]
4166
        rep     stosw
4167
        mov     al, 0xBC
4168
        stosw
4169
        ret
4170
 
474 diamond 4171
calc_colwidths:
4172
; in: ebp->panel data
4173
        imul    esi, [ebp + panel1_colmode - panel1_data], PanelMode.size
4174
        add     esi, colmodes
4175
        lodsd
4176
        mov     ecx, eax
4177
        lea     edx, [ecx-1]
4178
        xor     ebx, ebx
4179
        add     esi, PanelMode.ColumnWidths-4
4180
        push    ecx esi
4181
        xor     eax, eax
4182
.loop:
4183
        lodsb
4184
        add     edx, eax
4185
        cmp     al, 1
4186
        adc     ebx, 0
4187
        loop    .loop
4188
        pop     esi ecx
4189
        lea     edi, [ebp + panel1_colwidths - panel1_data]
4190
        test    ebx, ebx
4191
        jz      .loop2
4192
        mov     eax, [ebp + panel1_width - panel1_data]
4193
        dec     eax
4194
        dec     eax
4195
        sub     eax, edx
4196
        jae     @f
4197
        xor     eax, eax
4198
@@:
4199
        xor     edx, edx
4200
        div     ebx
4201
        test    eax, eax
4202
        jnz     @f
4203
        xor     edx, edx
4204
        inc     eax
4205
@@:
4206
        push    eax
4207
.loop2:
4208
        movzx   eax, byte [esi]
4209
        inc     esi
4210
        test    eax, eax
4211
        jnz     @f
4212
        pop     eax
4213
        push    eax
4214
        dec     ebx
4215
        cmp     ebx, edx
4216
        jae     @f
4217
        inc     eax
4218
@@:
4219
        stosd
4220
        loop    .loop2
4221
        pop     eax
4222
        and     dword [edi], 0
4223
        ret
4224
 
589 diamond 4225
GetPanelTitle_default:
4226
        mov     edi, [esp+8]
4227
        mov     ecx, 1024
4228
        mov     esi, [esp+12]
4229
        test    esi, esi
4230
        jz      .nohost
4231
        mov     edx, esi
4232
@@:
4233
        lodsb
4234
        test    al, al
4235
        jz      @f
4236
        cmp     al, '/'
4237
        jnz     @b
4238
        mov     edx, esi
4239
        jmp     @b
4240
@@:
4241
        mov     esi, edx
4242
@@:
4243
        lodsb
4244
        stosb
4245
        test    al, al
4246
        loopnz  @b
4247
        dec     edi
4248
        inc     ecx
4249
.nohost:
4250
        mov     esi, [esp+16]
4251
        cmp     word [esi], '/'
4252
        jz      .nodir
4253
@@:
4254
        lodsb
4255
        stosb
4256
        test    al, al
4257
        loopnz  @b
4258
        dec     edi
4259
.nodir:
4260
        mov     byte [edi], 0
4261
        ret     10h
4262
 
8932 IgorA 4263
;input:
4264
; ebp - pointer to panel1 or panel2
4265
align 16
180 heavyiron 4266
draw_panel:
4267
        mov     eax, [ebp + panel1_left - panel1_data]
4268
        mov     edx, [ebp + panel1_top - panel1_data]
4269
        call    get_console_ptr
4270
; draw border
4271
        mov     ah, [panel_border_color]
4272
        mov     ebx, [ebp + panel1_width - panel1_data]
4273
        mov     edx, [ebp + panel1_height - panel1_data]
4274
        call    draw_border
4275
        push    eax
4276
        mov     eax, [ebp + panel1_left - panel1_data]
4277
        mov     edx, [ebp + panel1_top - panel1_data]
4278
        add     edx, [ebp + panel1_height - panel1_data]
4279
        sub     edx, 3
4280
        call    get_console_ptr
4281
        pop     eax
4282
        mov     al, 0xC7
4283
        stosw
4284
        mov     al, 0xC4
4285
        lea     ecx, [ebx-2]
4286
        rep     stosw
4287
        mov     al, 0xB6
4288
        stosw
474 diamond 4289
 
4290
        imul    esi, [ebp + panel1_colmode - panel1_data], PanelMode.size
4291
        add     esi, colmodes
4292
        lodsd
4293
        mov     ecx, eax        ; number of columns
4294
        lea     ebx, [ebp + panel1_colwidths - panel1_data]
180 heavyiron 4295
        mov     eax, [ebp + panel1_left - panel1_data]
4296
        inc     eax
4297
        mov     [column_left], eax
474 diamond 4298
        mov     eax, [ebp + panel1_top - panel1_data]
4299
        inc     eax
4300
        mov     [column_top], eax
4301
        mov     eax, [ebp + panel1_height - panel1_data]
4302
        sub     eax, 4
4303
        mov     [column_height], eax
4304
        dec     eax
4305
        mov     [ebp + panel1_colsz - panel1_data], eax
4306
        and     [ebp + panel1_colst - panel1_data], 0
4307
        mov     eax, [ebp + panel1_start - panel1_data]
4308
        mov     [column_index], eax
4309
        mov     [last_column_index], eax
4310
.columns_loop:
4311
        push    ecx
4312
        mov     eax, [ebx]
4313
        add     ebx, 4
4314
        mov     [column_width], eax
4315
        cmp     ecx, 1
4316
        jz      .skip_right_border
4317
        add     eax, [column_left]
180 heavyiron 4318
        mov     edx, [ebp + panel1_top - panel1_data]
4319
        call    get_console_ptr
474 diamond 4320
        mov     ah, [panel_header_color]
180 heavyiron 4321
        mov     al, 0xD1
4322
        mov     [edi], ax
4323
        add     edi, [cur_width]
4324
        add     edi, [cur_width]
474 diamond 4325
        mov     ecx, [column_height]
180 heavyiron 4326
        mov     al, 0xB3
4327
@@:
4328
        mov     [edi], ax
4329
        add     edi, [cur_width]
4330
        add     edi, [cur_width]
4331
        loop    @b
4332
        mov     al, 0xC1
4333
        stosw
474 diamond 4334
.skip_right_border:
4335
        mov     eax, [column_left]
4336
        mov     edx, [column_top]
4337
        call    get_console_ptr
4338
; заголовок столбца
4339
        push    edi
4340
        mov     edx, [esi]
4341
        and     edx, 0xF
4342
        mov     edx, [column_headers+edx*4]
4343
        movzx   ecx, byte [edx]
4344
        inc     edx
4345
        cmp     ecx, [column_width]
4346
        jb      @f
180 heavyiron 4347
        mov     ecx, [column_width]
474 diamond 4348
@@:
4349
        push    ecx
4350
        sub     ecx, [column_width]
4351
        neg     ecx
4352
        shr     ecx, 1
4353
        mov     al, ' '
4354
        mov     ah, [column_header_color]
4355
        rep     stosw
4356
        pop     ecx
4357
        jecxz   .skipcopyhdr
4358
        push    ecx
4359
@@:
4360
        mov     al, [edx]
4361
        inc     edx
4362
        stosw
4363
        loop    @b
4364
        pop     ecx
4365
.skipcopyhdr:
4366
        sub     ecx, [column_width]
4367
        neg     ecx
180 heavyiron 4368
        inc     ecx
474 diamond 4369
        shr     ecx, 1
4370
        mov     al, ' '
4371
        rep     stosw
4372
        pop     edi
4373
        add     edi, [cur_width]
4374
        add     edi, [cur_width]
4375
; сам столбец
4376
        mov     eax, [esi]
4377
        and     eax, 0xF
4378
        push    ebx esi
4379
        call    dword [draw_column_proc+eax*4]
4380
        pop     esi ebx
4381
        inc     esi
4382
        mov     eax, [column_width]
4383
        inc     eax
4384
        add     [column_left], eax
4385
        pop     ecx
4386
        dec     ecx
4387
        jnz     .columns_loop
180 heavyiron 4388
; Заголовок панели (текущая папка)
4389
        lea     esi, [ebp + panel1_dir - panel1_data]
589 diamond 4390
        mov     eax, [ebp + panel1_hPlugin - panel1_data]
4391
        test    eax, eax
4392
        jz      .native
4393
        push    ebp
4394
        push    esi
4395
        mov     esi, [ebp + panel1_parents - panel1_data]
4396
        add     esi, [ebp + panel1_parents_sz - panel1_data]
4397
@@:
4398
        dec     esi
4399
        cmp     byte [esi-1], 0
4400
        jnz     @b
4401
        push    esi
4402
        push    execdata
4403
        push    [ebp + panel1_hFile - panel1_data]
4404
        call    [eax+PluginInfo.GetPanelTitle]
4405
        pop     ebp
4406
        mov     esi, execdata
4407
.native:
180 heavyiron 4408
        mov     edi, cur_header
4409
        mov     ecx, [ebp + panel1_width - panel1_data]
631 diamond 4410
        sub     ecx, 6
4411
        cmp     byte [esi], '/'
4412
        jnz     .copy_rest
4413
        dec     ecx
180 heavyiron 4414
        movsb
4415
@@:
4416
        lodsb
4417
        stosb
4418
        dec     ecx
4419
        test    al, al
4420
        jz      .header_created
4421
        cmp     al, '/'
4422
        jnz     @b
631 diamond 4423
.copy_rest:
180 heavyiron 4424
        mov     edx, esi
4425
@@:
4426
        lodsb
4427
        test    al, al
4428
        jnz     @b
4429
        sub     esi, edx
4430
        dec     esi
4431
        cmp     esi, ecx
4432
        jbe     @f
4433
        mov     word [edi], '..'
4434
        mov     byte [edi+2], '.'
4435
        add     edi, 3
4436
        sub     ecx, 3
4437
        add     edx, esi
4438
        sub     edx, ecx
4439
@@:
4440
        mov     esi, edx
4441
@@:
4442
        lodsb
4443
        stosb
4444
        dec     ecx
4445
        test    al, al
4446
        jnz     @b
4447
.header_created:
4448
        mov     edx, [ebp + panel1_top - panel1_data]
4449
        mov     eax, [ebp + panel1_left - panel1_data]
4450
        shr     ecx, 1
4451
        lea     eax, [eax+ecx+3]
4452
        call    get_console_ptr
4453
        mov     ah, [panel_active_header_color]
4454
        cmp     ebp, [active_panel]
4455
        jz      @f
4456
        mov     ah, [panel_header_color]
4457
@@:
4458
        mov     al, ' '
4459
        stosw
4460
        mov     esi, cur_header
4461
@@:
4462
        lodsb
4463
        test    al, al
4464
        jz      @f
4465
        stosw
4466
        jmp     @b
4467
@@:
4468
        mov     al, ' '
4469
        stosw
4470
        mov     edx, [ebp + panel1_top - panel1_data]
4471
        inc     edx
4472
        mov     eax, [ebp + panel1_left - panel1_data]
4473
        inc     eax
4474
        call    get_console_ptr
4475
        movzx   eax, [ebp + panel1_sortmode - panel1_data]
4476
        mov     al, [compare_names+eax]
4477
        stosb
474 diamond 4478
        mov     eax, [ebp + panel1_selected_num - panel1_data]
4479
        test    eax, eax
4480
        jz      .skip_selected_info
4481
; Информация о выделенных файлах
4482
        push    dword [ebp + panel1_selected_size+4 - panel1_data]
4483
        push    dword [ebp + panel1_selected_size - panel1_data]
4484
        call    fill_total_info
4485
        mov     eax, [ebp + panel1_width - panel1_data]
4486
        sub     eax, 2
4487
        cmp     ecx, eax
4488
        jbe     @f
4489
        mov     ecx, eax
4490
        mov     edi, saved_file_name+512
4491
        sub     edi, eax
4492
        mov     byte [edi], '.'
4493
        mov     word [edi+1], '..'
4494
@@:
4495
        mov     esi, edi
4496
        sub     eax, ecx
4497
        shr     eax, 1
4498
        inc     eax
4499
        add     eax, [ebp + panel1_left - panel1_data]
4500
        mov     edx, [ebp + panel1_top - panel1_data]
4501
        add     edx, [ebp + panel1_height - panel1_data]
4502
        sub     edx, 3
4503
        call    get_console_ptr
4504
        mov     ah, [panel_numselected_color]
4505
@@:
4506
        lodsb
4507
        stosw
4508
        loop    @b
4509
.skip_selected_info:
4510
; Информация об общем числе и размере файлов панели
4511
        mov     eax, [ebp + panel1_total_num - panel1_data]
4512
        push    dword [ebp + panel1_total_size+4 - panel1_data]
4513
        push    dword [ebp + panel1_total_size - panel1_data]
4514
        call    fill_total_info
4515
        mov     eax, [ebp + panel1_width - panel1_data]
4516
        sub     eax, 2
4517
        cmp     ecx, eax
4518
        jbe     @f
4519
        mov     ecx, eax
4520
        mov     byte [edi+ecx-3], '.'
4521
        mov     word [edi+ecx-2], '..'
4522
@@:
4523
        sub     eax, ecx
4524
        shr     eax, 1
4525
        inc     eax
4526
        add     eax, [ebp + panel1_left - panel1_data]
4527
        add     edx, [ebp + panel1_top - panel1_data]
4528
        add     edx, [ebp + panel1_height - panel1_data]
4529
        dec     edx
4530
        mov     esi, edi
4531
        call    get_console_ptr
4532
        mov     ah, [panel_number_color]
4533
@@:
4534
        lodsb
4535
        stosw
4536
        loop    @b
180 heavyiron 4537
        cmp     [ebp + panel1_numfiles - panel1_data], 0
4538
        jz      .skip_curinfo
474 diamond 4539
; Информация о текущем файле
180 heavyiron 4540
        mov     ebx, [ebp + panel1_index - panel1_data]
4541
        mov     eax, [ebp + panel1_files - panel1_data]
4542
        mov     ebx, [eax+ebx*4]
4543
        mov     eax, [ebp + panel1_left - panel1_data]
4544
        add     eax, [ebp + panel1_width - panel1_data]
4545
        dec     eax
4546
        mov     edx, [ebp + panel1_top - panel1_data]
4547
        add     edx, [ebp + panel1_height - panel1_data]
4548
        dec     edx
4549
        dec     edx
4550
        call    get_console_ptr
4551
        mov     ecx, [ebp + panel1_width - panel1_data]
4552
        dec     ecx
4553
        dec     ecx
474 diamond 4554
        cmp     [ebp + panel1_colmode - panel1_data], 3
4555
        jz      .show_curname
180 heavyiron 4556
; Время модификации
4557
        sub     edi, 5*2
4558
        sub     ecx, 6
4559
        mov     al, [ebx+24+2]
4560
        aam
4561
        or      ax, 0x3030
4562
        mov     [edi], ah
4563
        mov     [edi+2], al
4564
        mov     [edi+4], byte ':'
4565
        mov     al, [ebx+24+1]
4566
        aam
4567
        or      ax, 0x3030
4568
        mov     [edi+6], ah
4569
        mov     [edi+8], al
4570
        mov     al, [panel_normal_color]
4571
        mov     [edi+1], al
4572
        mov     [edi+3], al
4573
        mov     [edi+5], al
4574
        mov     [edi+7], al
4575
        mov     [edi+9], al
4576
        dec     edi
4577
        mov     [edi], al
4578
        dec     edi
4579
        mov     byte [edi], ' '
4580
; Дата модификации
4581
        sub     edi, 8*2
4582
        sub     ecx, 9
4583
        mov     al, [ebx+28+0]
4584
        aam
4585
        or      ax, 0x3030
4586
        mov     [edi], ah
4587
        mov     [edi+2], al
4588
        mov     [edi+4], byte '.'
4589
        mov     al, [ebx+28+1]
4590
        aam
4591
        or      ax, 0x3030
4592
        mov     [edi+6], ah
4593
        mov     [edi+8], al
4594
        mov     [edi+10], byte '.'
4595
        mov     ax, [ebx+28+2]
4596
        div     [_100]
4597
        mov     al, ah
4598
        aam
4599
        or      ax, 0x3030
4600
        mov     [edi+12], ah
4601
        mov     [edi+14], al
4602
        mov     al, [panel_normal_color]
4603
        mov     [edi+1], al
4604
        mov     [edi+3], al
4605
        mov     [edi+5], al
4606
        mov     [edi+7], al
4607
        mov     [edi+9], al
4608
        mov     [edi+11], al
4609
        mov     [edi+13], al
4610
        mov     [edi+15], al
4611
        dec     edi
4612
        mov     [edi], al
4613
        dec     edi
4614
        mov     [edi], byte ' '
4615
; Размер
4616
        std
4617
        mov     ah, [panel_normal_color]
4618
        dec     edi
4619
        dec     edi
4620
        dec     ecx
4621
        test    byte [ebx], 0x10
4622
        jz      .size_file
4623
        push    ecx
4624
        mov     esi, aFolder+aFolder.size-1
4625
        mov     ecx, aFolder.size
4626
        cmp     word [ebx+40], '..'
4627
        jnz     @f
4628
        cmp     byte [ebx+42], 0
4629
        jnz     @f
4630
        mov     esi, aUp+aUp.size-1
4631
        mov     cl, aUp.size
4632
@@:
4633
        sub     [esp], ecx
4634
@@:
4635
        lodsb
4636
        stosw
4637
        loop    @b
4638
        pop     ecx
4639
        jmp     .size_done
4640
.size_file:
4641
        mov     edx, [ebx+36]
4642
        test    edx, edx
4643
        jz      .size_less_4g
4644
        cmp     edx, 10*256
4645
        jae     .size_tera
4646
; в гигабайтах
4647
        mov     al, 'G'
283 diamond 4648
        shl     edx, 2
180 heavyiron 4649
        jmp     .size_letter
4650
.size_tera:
4651
; в терабайтах
4652
        shr     edx, 8
4653
        mov     al, 'T'
4654
        jmp     .size_letter
4655
.size_less_4g:
4656
        mov     edx, [ebx+32]
4657
        cmp     edx, 10*(1 shl 20)
4658
        jae     .size_mega
4659
        cmp     edx, 1 shl 20
4660
        jb      .size_num
4661
        shr     edx, 10
4662
        mov     al, 'K'
4663
        jmp     .size_letter
4664
.size_mega:
4665
        mov     al, 'M'
4666
        shr     edx, 20
4667
.size_letter:
4668
        stosw
4669
        dec     ecx
4670
        mov     al, ' '
4671
        stosw
4672
        dec     ecx
4673
.size_num:
4674
        xchg    eax, edx
4675
        xor     edx, edx
4676
        div     [_10d]
4677
        xchg    eax, edx
4678
        add     al, '0'
4679
        mov     ah, [panel_normal_color]
4680
        stosw
4681
        dec     ecx
4682
        test    edx, edx
4683
        jnz     .size_num
4684
.size_done:
4685
        cld
474 diamond 4686
.show_curname:
180 heavyiron 4687
; Имя
4688
        sub     edi, ecx
4689
        sub     edi, ecx
4690
        lea     esi, [ebx+40]
4691
@@:
4692
        lodsb
4693
        test    al, al
4694
        jnz     @b
4695
        sub     esi, ebx
4696
        sub     esi, 41
4697
        mov     ah, [panel_normal_color]
4698
        cmp     esi, ecx
4699
        lea     edx, [ebx+40]
4700
        jbe     @f
4701
        mov     al, '{'
4702
        mov     [edi-2], ax
4703
        add     edx, esi
4704
        sub     edx, ecx
4705
@@:
4706
        mov     esi, edx
4707
@@:
4708
        lodsb
4709
        test    al, al
4710
        jz      @f
4711
        stosw
4712
        loop    @b
4713
@@:
4714
        mov     al, ' '
4715
        rep     stosw
4716
.skip_curinfo:
4717
        call    draw_image
4718
        ret
4719
 
474 diamond 4720
fill_total_info:
4721
        mov     edi, saved_file_name+511
4722
        mov     byte [edi], ' '
180 heavyiron 4723
if lang eq ru
474 diamond 4724
        mov     byte [edi-1], 'е'
4725
        dec     edi
4726
        cmp     eax, 1
4727
        jz      @f
4728
        mov     word [edi-1], 'ах'
4729
        dec     edi
4730
@@:
4731
        mov     dword [edi-4], 'файл'
4732
        mov     byte [edi-5], ' '
4733
        sub     edi, 5
180 heavyiron 4734
else
474 diamond 4735
        cmp     eax, 1
4736
        jz      @f
4737
        dec     edi
4738
        mov     byte [edi], 's'
4739
@@:
4740
        mov     dword [edi-4], 'file'
4741
        mov     byte [edi-5], ' '
4742
        sub     edi, 5
180 heavyiron 4743
end if
474 diamond 4744
        xor     edx, edx
4745
        push    10
4746
        pop     ecx
4747
@@:
4748
        div     ecx
4749
        dec     edi
4750
        add     dl, '0'
4751
        mov     [edi], dl
4752
        xor     edx, edx
4753
        test    eax, eax
4754
        jnz     @b
180 heavyiron 4755
if lang eq ru
474 diamond 4756
        mov     dword [edi-4], 'т в '
4757
        mov     dword [edi-8], ' бай'
4758
        sub     edi, 8
180 heavyiron 4759
else
474 diamond 4760
        mov     dword [edi-4], ' in '
4761
        mov     dword [edi-8], 'ytes'
4762
        mov     word [edi-10], ' b'
4763
        sub     edi, 10
180 heavyiron 4764
end if
474 diamond 4765
        lea     esi, [edi-3]
4766
        mov     edx, [esp+8]
4767
        mov     eax, [esp+4]
4768
.selsizel:
4769
        push    edx
4770
        mov     ebx, edx
4771
        xor     edx, edx
4772
        add     ebx, ebx
4773
        adc     edx, edx
4774
        push    ebx
4775
        push    edx
4776
        add     ebx, ebx
4777
        adc     edx, edx
4778
        add     ebx, [esp+4]
4779
        adc     edx, [esp]
4780
        add     esp, 8
4781
        add     eax, ebx
4782
        adc     edx, 0
4783
        div     ecx
4784
        dec     edi
4785
        cmp     edi, esi
4786
        jae     @f
4787
        mov     byte [edi], ','
4788
        dec     edi
4789
        sub     esi, 4
4790
@@:
4791
        pop     ebx
4792
        add     dl, '0'
4793
        mov     byte [edi], dl
4794
        xchg    eax, ebx
4795
        mul     [muldiv10]
4796
        add     eax, ebx
4797
        adc     edx, 0
4798
        mov     ebx, eax
4799
        or      ebx, edx
4800
        jnz     .selsizel
4801
        dec     edi
4802
        mov     byte [edi], ' '
4803
        mov     ecx, saved_file_name+512
4804
        sub     ecx, edi
4805
        ret     8
4806
 
4807
get_file_color:
4808
        mov     ah, [esi + 6]
4809
        cmp     ebp, [active_panel]
4810
        jnz     @f
4811
        cmp     ecx, [ebp + panel1_index - panel1_data]
4812
        jnz     @f
4813
        mov     ah, [esi + 7]
4814
@@:
4815
        test    byte [esi + 303], 1
4816
        jnz     @f
4817
        mov     ah, [esi + 4]
4818
        cmp     ebp, [active_panel]
4819
        jnz     @f
4820
        cmp     ecx, [ebp + panel1_index - panel1_data]
4821
        jnz     @f
4822
        mov     ah, [esi + 5]
4823
@@:
4824
        ret
4825
 
4826
draw_name_column:
4827
        mov     eax, [column_index]
4828
        mov     [last_column_index], eax
180 heavyiron 4829
        mov     edx, [ebp + panel1_numfiles - panel1_data]
4830
        mov     ecx, [column_height]
4831
        dec     ecx
4832
.l:
4833
        cmp     [column_index], edx
4834
        jae     .ret
4835
        push    ecx
474 diamond 4836
        mov     ecx, [column_index]
4837
        mov     esi, [ebp + panel1_files - panel1_data]
4838
        mov     esi, [esi+ecx*4]
4839
        mov     ebx, [esi]
4840
        call    get_file_color
321 diamond 4841
        add     esi, 40
180 heavyiron 4842
        mov     ecx, [column_width]
4843
        push    edi
4844
@@:
4845
        lodsb
4846
        test    al, al
4847
        jz      @f
4848
        stosw
4849
        loop    @b
474 diamond 4850
        lodsb
4851
        test    al, al
180 heavyiron 4852
        jz      @f
4853
        mov     byte [edi], '}'
474 diamond 4854
        jmp     .continue
180 heavyiron 4855
@@:
474 diamond 4856
        test    bl, 10h
4857
        jnz     .noalignext
4858
        mov     ebx, [ebp + panel1_colmode - panel1_data]
4859
; sizeof(PanelMode) = 40
4860
        lea     ebx, [ebx+ebx*4]
4861
        cmp     [colmodes+ebx*8+PanelMode.bAlignExtensions], 0
4862
        jz      .noalignext
4863
        push    ecx
4864
        sub     ecx, [column_width]
4865
        neg     ecx
4866
        jz      .noalignext2
4867
        dec     esi
4868
@@:
4869
        dec     esi
4870
        cmp     byte [esi], '.'
4871
        loopnz  @b
4872
        jnz     .noalignext2
4873
        inc     esi
4874
        sub     ecx, [column_width]
4875
        neg     ecx
4876
        sub     ecx, [esp]
4877
        sub     edi, ecx
4878
        sub     edi, ecx
4879
        dec     ecx
4880
        mov     ebx, [esp+4]
4881
        cmp     ecx, 3
4882
        ja      @f
4883
        mov     cl, 3
4884
@@:
4885
        sub     ecx, [column_width]
4886
        sub     ebx, edi
4887
        sar     ebx, 1
4888
        sub     ebx, ecx
4889
        pop     ecx
4890
        inc     ecx
4891
        push    0
4892
        cmp     ecx, ebx
4893
        jbe     @f
4894
        sub     ecx, ebx
4895
        mov     [esp], ecx
4896
        mov     ecx, ebx
4897
@@:
180 heavyiron 4898
        mov     al, ' '
4899
        rep     stosw
474 diamond 4900
@@:
4901
        lodsb
4902
        test    al, al
4903
        jz      .noalignext2
4904
        stosw
4905
        jmp     @b
4906
.noalignext2:
4907
        pop     ecx
4908
.noalignext:
4909
        mov     al, ' '
4910
        rep     stosw
4911
.continue:
180 heavyiron 4912
        pop     edi
4913
        add     edi, [cur_width]
4914
        add     edi, [cur_width]
4915
        inc     [column_index]
4916
        pop     ecx
4917
        dec     ecx
4918
        jnz     .l
4919
.ret:
474 diamond 4920
        mov     eax, [ebp + panel1_colsz - panel1_data]
4921
        add     [ebp + panel1_colst - panel1_data], eax
180 heavyiron 4922
        cmp     ebp, panel1_data
4923
        jnz     .ret2
4924
; Число экранов
814 diamond 4925
; calculate number of viewer and editor screens
4926
        xor     ebx, ebx
4927
        xor     edx, edx
4928
        mov     ecx, [num_screens]
4929
        mov     esi, [screens]
4930
.3:
4931
        lodsd
4932
        cmp     eax, viewer_vtable
4933
        jnz     @f
4934
        inc     ebx
4935
@@:
4936
        cmp     eax, editor_vtable
4937
        jnz     @f
4938
        inc     edx
4939
@@:
4940
        lodsd
4941
        loop    .3
4942
        mov     eax, ebx
4943
        mov     esi, edx
4944
        or      eax, edx
180 heavyiron 4945
        jz      .ret2
4946
        xor     eax, eax
4947
        xor     edx, edx
4948
        call    get_console_ptr
4949
        mov     al, '['
814 diamond 4950
        stosb
4951
        mov     al, [panel_nscreens_color]
4952
        stosb
4953
        xchg    eax, ebx
4954
.5:
180 heavyiron 4955
        push    -'0'
4956
@@:
4957
        xor     edx, edx
4958
        div     [_10d]
4959
        push    edx
4960
        test    eax, eax
4961
        jnz     @b
4962
@@:
4963
        pop     eax
4964
        add     eax, '0'
4965
        jz      @f
814 diamond 4966
        stosb
4967
        mov     al, bl
4968
        stosb
180 heavyiron 4969
        jmp     @b
4970
@@:
814 diamond 4971
        test    esi, esi
4972
        jz      .4
4973
        mov     al, '+'
4974
        stosb
4975
        mov     al, bl
4976
        stosb
4977
        xor     eax, eax
4978
        xchg    eax, esi
4979
        jmp     .5
4980
.4:
180 heavyiron 4981
        mov     al, ']'
4982
        mov     ah, [panel_nscreens_color]
4983
        stosw
4984
.ret2:
474 diamond 4985
draw_empty_column:
180 heavyiron 4986
        ret
4987
 
474 diamond 4988
draw_size_column:
4989
        add     edi, [column_width]
4990
        add     edi, [column_width]
4991
        dec     edi
4992
        dec     edi
4993
        std
4994
        mov     ecx, [column_height]
4995
        dec     ecx
4996
        push    [last_column_index]
4997
.l:
4998
        mov     edx, [ebp + panel1_numfiles - panel1_data]
4999
        cmp     [last_column_index], edx
5000
        jae     .ret
5001
        push    ecx
5002
        push    edi
5003
        mov     ecx, [last_column_index]
5004
        mov     esi, [ebp + panel1_files - panel1_data]
5005
        mov     esi, [esi+ecx*4]
5006
        call    get_file_color
5007
        mov     ecx, [column_width]
5008
@@:
5009
        mov     ebx, eax
5010
        cmp     word [esi+40], '..'
5011
        jnz     .nodotdot
5012
        cmp     byte [esi+42], 0
5013
        jnz     .nodotdot
5014
if lang eq ru
5015
        mov     al, 'х'
5016
        stosw
5017
        mov     al, 'р'
5018
        stosw
5019
        mov     al, 'е'
5020
        stosw
5021
        mov     al, 'в'
5022
        stosw
5023
        mov     al, 'В'
5024
        stosw
5025
        sub     ecx, 5
5026
else
5027
        mov     al, ' '
5028
        stosw
5029
        stosw
5030
        mov     al, 'p'
5031
        stosw
5032
        mov     al, 'U'
5033
        stosw
5034
        sub     ecx, 4
5035
end if
5036
        jmp     .size_written
5037
.nodotdot:
5038
        test    byte [esi], 10h
5039
        jz      .nofolder
5040
if lang eq ru
5041
        mov     al, 'а'
5042
        stosw
5043
        mov     al, 'к'
5044
        stosw
5045
        mov     al, 'п'
5046
        stosw
5047
        mov     al, 'а'
5048
        stosw
5049
        mov     al, 'П'
5050
        stosw
5051
        sub     ecx, 5
5052
else
5053
        mov     al, 'r'
5054
        stosw
5055
        mov     al, 'e'
5056
        stosw
5057
        mov     al, 'd'
5058
        stosw
5059
        mov     al, 'l'
5060
        stosw
5061
        mov     al, 'o'
5062
        stosw
5063
        mov     al, 'F'
5064
        stosw
5065
        sub     ecx, 6
5066
end if
5067
        jmp     .size_written
5068
.nofolder:
5069
        mov     eax, [esi+32]
5070
        mov     edx, [esi+36]
5071
        test    edx, edx
5072
        jz      .less_4G
5073
        cmp     edx, 10000/4*1024
5074
        jb      .giga
5075
        mov     al, 'T'
5076
        shr     edx, 10
5077
        jmp     .write_letter
5078
.giga:
5079
        mov     al, 'G'
5080
        shl     edx, 2
5081
        jmp     .write_letter
5082
.less_4G:
5083
        mov     edx, eax
5084
        cmp     eax, 1000000
5085
        jb      .byte
5086
        cmp     eax, 10000*1024
5087
        jb      .kilo
5088
        mov     al, 'M'
5089
        shr     edx, 20
5090
        jmp     .write_letter
5091
.kilo:
5092
        mov     al, 'K'
5093
        shr     edx, 10
5094
.write_letter:
5095
        mov     ah, bh
5096
        stosw
5097
        mov     al, ' '
5098
        stosw
5099
        dec     ecx
5100
        dec     ecx
5101
.byte:
5102
        xchg    eax, edx
5103
        xor     edx, edx
5104
        div     [_10d]
5105
        xchg    eax, edx
5106
        add     al, '0'
5107
        mov     ah, bh
5108
        stosw
5109
        dec     ecx
5110
        test    edx, edx
5111
        jnz     .byte
5112
.size_written:
5113
        mov     eax, ebx
5114
        test    ecx, ecx
5115
        jle     @f
5116
        mov     al, ' '
5117
        rep     stosw
5118
@@:
5119
        mov     byte [edi+1], ah
5120
        pop     edi
5121
        add     edi, [cur_width]
5122
        add     edi, [cur_width]
5123
        inc     [last_column_index]
5124
        pop     ecx
5125
        dec     ecx
5126
        jnz     .l
5127
.ret:
5128
        pop     [last_column_index]
5129
        cld
5130
        ret
5131
 
5132
draw_date_column:
5133
        mov     ecx, [column_height]
5134
        dec     ecx
5135
        push    [last_column_index]
5136
.l:
5137
        mov     edx, [ebp + panel1_numfiles - panel1_data]
5138
        cmp     [last_column_index], edx
5139
        jae     .ret
5140
        push    ecx
5141
        push    edi
5142
        mov     ecx, [last_column_index]
5143
        mov     esi, [ebp + panel1_files - panel1_data]
5144
        mov     esi, [esi+ecx*4]
5145
        call    get_file_color
5146
        mov     bh, ah
5147
        mov     byte [edi-1], bh
5148
        mov     al, [esi+28]
5149
        aam
5150
        add     eax, '00'
5151
        push    eax
5152
        mov     al, ah
5153
        mov     ah, bh
5154
        stosw
5155
        pop     eax
5156
        mov     ah, bh
5157
        stosw
5158
        mov     al, '.'
5159
        stosw
5160
        mov     al, [esi+29]
5161
        aam
5162
        add     eax, '00'
5163
        push    eax
5164
        mov     al, ah
5165
        mov     ah, bh
5166
        stosw
5167
        pop     eax
5168
        mov     ah, bh
5169
        stosw
5170
        mov     al, '.'
5171
        stosw
5172
        movzx   eax, word [esi+30]
5173
        xor     edx, edx
5174
        div     [_10d]
5175
        xchg    eax, edx
5176
        add     al, '0'
5177
        mov     ah, bh
5178
        mov     [edi+2], ax
5179
        xchg    eax, edx
5180
        xor     edx, edx
5181
        div     [_10d]
5182
        xchg    eax, edx
5183
        add     al, '0'
5184
        mov     ah, bh
5185
        stosw
5186
        pop     edi
5187
        add     edi, [cur_width]
5188
        add     edi, [cur_width]
5189
        inc     [last_column_index]
5190
        pop     ecx
5191
        dec     ecx
5192
        jnz     .l
5193
.ret:
5194
        pop     [last_column_index]
5195
        cld
5196
        ret
5197
 
5198
draw_time_column:
5199
        mov     ecx, [column_height]
5200
        dec     ecx
5201
        push    [last_column_index]
5202
.l:
5203
        mov     edx, [ebp + panel1_numfiles - panel1_data]
5204
        cmp     [last_column_index], edx
5205
        jae     .ret
5206
        push    ecx
5207
        push    edi
5208
        mov     ecx, [last_column_index]
5209
        mov     esi, [ebp + panel1_files - panel1_data]
5210
        mov     esi, [esi+ecx*4]
5211
        call    get_file_color
5212
        mov     bh, ah
5213
        mov     byte [edi-1], bh
5214
        mov     al, [esi+26]
5215
        aam
5216
        add     eax, '00'
5217
        push    eax
5218
        mov     al, ah
5219
        mov     ah, bh
5220
        stosw
5221
        pop     eax
5222
        mov     ah, bh
5223
        stosw
5224
        mov     al, ':'
5225
        stosw
5226
        mov     al, [esi+25]
5227
        aam
5228
        add     eax, '00'
5229
        push    eax
5230
        mov     al, ah
5231
        mov     ah, bh
5232
        stosw
5233
        pop     eax
5234
        mov     ah, bh
5235
        stosw
5236
        pop     edi
5237
        add     edi, [cur_width]
5238
        add     edi, [cur_width]
5239
        inc     [last_column_index]
5240
        pop     ecx
5241
        dec     ecx
5242
        jnz     .l
5243
.ret:
5244
        pop     [last_column_index]
5245
        cld
5246
        ret
5247
 
180 heavyiron 5248
;insert_last_dot:
5249
;        push    eax esi
5250
;        mov     ah, 0
5251
;.loop:
5252
;        lodsb
5253
;        test    al, al
5254
;        jz      .done
5255
;        cmp     al, '.'
5256
;        jnz     .loop
5257
;        mov     ah, 1
5258
;        jmp     .loop
5259
;.done:
5260
;        test    ah, ah
5261
;        jnz     @f
5262
;        mov     byte [esi-1], '.'
5263
;        mov     byte [esi], 0
5264
;@@:
5265
;        pop     esi eax
5266
;        ret
5267
 
5268
;delete_last_dot:
5269
;        push    esi
5270
;@@:
5271
;        cmp     byte [esi], 0
5272
;        jz      @f
5273
;        inc     esi
5274
;        jmp     @b
5275
;@@:
5276
;        cmp     byte [esi-1], '.'
5277
;        jnz     @f
5278
;        mov     byte [esi-1], 0
5279
;@@:     pop     esi
5280
;        ret
5281
 
5282
read_folder:
5283
        mov     eax, [ebp + panel1_nfa - panel1_data]
5284
        mov     [dirinfo.size], eax
5285
        shl     eax, 2
5286
        add     eax, [ebp + panel1_files - panel1_data]
5287
        mov     [dirinfo.dirdata], eax
5288
        lea     eax, [ebp + panel1_dir - panel1_data]
5289
        mov     [dirinfo.name], eax
474 diamond 5290
        xor     eax, eax
5291
        mov     [ebp + panel1_total_num - panel1_data], eax
5292
        mov     dword [ebp + panel1_total_size - panel1_data], eax
5293
        mov     dword [ebp + panel1_total_size+4 - panel1_data], eax
5294
        mov     [ebp + panel1_selected_num - panel1_data], eax
5295
        mov     dword [ebp + panel1_selected_size - panel1_data], eax
5296
        mov     dword [ebp + panel1_selected_size+4 - panel1_data], eax
314 diamond 5297
.retry:
589 diamond 5298
        mov     eax, [ebp + panel1_hPlugin - panel1_data]
5299
        test    eax, eax
5300
        jz      .native
5301
        mov     ecx, [dirinfo.size]
5302
        test    [ebp + panel1_plugin_flags - panel1_data], 1
5303
        jz      @f
5304
        dec     ecx     ; reserve one entry for '..'
5305
@@:
5306
        push    ebp
5307
        push    [dirinfo.dirdata]
5308
        push    ecx
5309
        push    0
5310
        push    [ebp + panel1_hFile - panel1_data]
5311
        call    [eax + PluginInfo.ReadFolder]
5312
        pop     ebp
5313
        mov     ebx, [dirinfo.dirdata]
5314
        mov     ebx, [ebx+4]
5315
        jmp     .read
5316
.native:
8932 IgorA 5317
        push    SF_FILE
180 heavyiron 5318
        pop     eax
5319
        mov     ebx, dirinfo
517 diamond 5320
        int     40h
589 diamond 5321
.read:
180 heavyiron 5322
        test    eax, eax
5323
        jz      .ok
5324
        cmp     eax, 6
5325
        jz      .ok
314 diamond 5326
; Failed to read folder, notify user
5327
        cmp     [bSilentFolderMode], 0
5328
        jnz     .dont_notify
474 diamond 5329
        push    dword aContinue
5330
        push    dword aRetry
314 diamond 5331
        mov     edx, esp
5332
        call    get_error_msg
5333
        push    [dirinfo.name]
474 diamond 5334
        push    dword aCannotReadFolder
314 diamond 5335
        push    eax
5336
        mov     eax, esp
5337
        push    edx
5338
        push    2
5339
        push    eax
5340
        push    3
5341
        call    SayErr
5342
        add     esp, 5*4
5343
        test    eax, eax
5344
        jz      .retry
5345
.dont_notify:
589 diamond 5346
; If not on plugin panel, try to return to previous directory
5347
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
5348
        jnz     @f
314 diamond 5349
        mov     esi, prev_dir
5350
        cmp     byte [esi], 0
5351
        jz      @f
5352
        lea     edi, [ebp + panel1_dir - panel1_data]
5353
        mov     ecx, 1024/4
5354
        rep     movsd
5355
        mov     byte [prev_dir], 0
5356
        ret
5357
@@:
5358
        mov     [bSilentFolderMode], 1  ; enter silent mode
589 diamond 5359
; Try to read parent folder
314 diamond 5360
        mov     esi, [dirinfo.name]
5361
        xor     edx, edx
5362
.up1:
5363
        lodsb
5364
        test    al, al
5365
        jz      .up1done
5366
        cmp     al, '/'
5367
        jnz     .up1
5368
        inc     edx
5369
        lea     edi, [esi-1]
5370
        jmp     .up1
5371
.up1done:
589 diamond 5372
        cmp     [ebp + panel1_hPlugin - panel1_data], 0
5373
        jz      .4
5374
        cmp     edx, 1
5375
        ja      .up
5376
; чтение с панели плагина обломалось по полной
5377
; при этом мы уже в корне
5378
; делаем вид, что функция чтения вернула 0 элементов
5379
; (если нужен вход "..", он будет добавлен автоматически)
5380
        xor     ebx, ebx        ; 0 items read
5381
        mov     eax, [dirinfo.dirdata]
5382
        mov     [eax+8], ebx    ; 0 items total
5383
        jmp     .ok
5384
.4:
314 diamond 5385
        cmp     edx, 2
5386
        jbe     .noup
589 diamond 5387
.up:
314 diamond 5388
        stosb
5389
        jmp     read_folder
5390
.noup:
589 diamond 5391
; There is no parent folder, and we are not on plugin panel
5392
; Try to read ramdisk
314 diamond 5393
        mov     esi, [dirinfo.name]
5394
        mov     edi, esi
5395
        lodsd
5396
        or      eax, 0x00202000
5397
        cmp     eax, '/rd/'
5398
        jnz     @f
5399
        lodsw
5400
        cmp     ax, '1'
5401
        jz      .nosetrd
5402
@@:
5403
        mov     eax, '/rd/'
5404
        stosd
5405
        mov     ax, '1'
5406
        stosw
5407
        jmp     read_folder
5408
.nosetrd:
5409
; Даже рамдиск не прочитался. Значит, не судьба...
5410
        and     dword [ebp + panel1_numfiles - panel1_data], 0
180 heavyiron 5411
        and     dword [ebp + panel1_index - panel1_data], 0
5412
        and     dword [ebp + panel1_start - panel1_data], 0
314 diamond 5413
        mov     [bSilentFolderMode], 0  ; leave silent mode
180 heavyiron 5414
        ret
5415
.ok:
5416
        mov     eax, [dirinfo.dirdata]
5417
        cmp     [eax+8], ebx
5418
        jz      .readdone
474 diamond 5419
        push    dword [eax+8]
5420
        mov     ecx, [ebp + panel1_files - panel1_data]
5421
        call    pgfree
5422
        pop     ecx
5423
        add     ecx, 0xF
5424
        and     ecx, not 0xF
5425
        push    ecx
5426
        imul    ecx, 4+304
5427
        add     ecx, 32
5428
        call    xpgalloc
180 heavyiron 5429
        test    eax, eax
5430
        jnz     .succ1
5431
        pop     eax
5432
        jmp     .readdone
5433
.succ1:
5434
        mov     [ebp + panel1_files - panel1_data], eax
5435
        pop     [ebp + panel1_nfa - panel1_data]
321 diamond 5436
        mov     [prev_dir], 0
180 heavyiron 5437
        jmp     read_folder
5438
.readdone:
589 diamond 5439
        xor     edx, edx
5440
        mov     [ebp + panel1_start - panel1_data], edx
5441
        mov     [ebp + panel1_index - panel1_data], edx
5442
        mov     [ebp + panel1_start - panel1_data], edx
180 heavyiron 5443
        mov     edi, [ebp + panel1_files - panel1_data]
5444
        mov     eax, [ebp + panel1_nfa - panel1_data]
321 diamond 5445
        lea     eax, [edi + eax*4 + 32]
5446
        mov     ecx, [eax-32+4]
283 diamond 5447
        test    ecx, ecx
5448
        jz      .loopdone
180 heavyiron 5449
; Игнорируем специальные входы, соответствующие папке '.' и метке тома
5450
.ptrinit:
321 diamond 5451
        cmp     word [eax+40], '.'
180 heavyiron 5452
        jz      .loopcont
321 diamond 5453
        test    byte [eax], 8
180 heavyiron 5454
        jnz     .loopcont
474 diamond 5455
        mov     byte [eax+303], 0
321 diamond 5456
        test    edx, edx
5457
        jnz     .nodotdot
5458
        cmp     word [eax+40], '..'
5459
        jnz     .nodotdot
5460
        cmp     byte [eax+42], 0
5461
        jnz     .nodotdot
5462
        mov     edx, eax
5463
        push    edi
5464
@@:
5465
        cmp     edi, [ebp + panel1_files - panel1_data]
5466
        jbe     @f
5467
        push    dword [edi-4]
5468
        pop     dword [edi]
5469
        sub     edi, 4
5470
        jmp     @b
5471
@@:
180 heavyiron 5472
        stosd
321 diamond 5473
        pop     edi
5474
        scasd
5475
        jmp     .dotdot
5476
.nodotdot:
5477
        stosd
474 diamond 5478
        xor     ebx, ebx
5479
        test    byte [eax], 10h
5480
        setz    bl
5481
        add     [ebp + panel1_total_num - panel1_data], ebx
5482
        mov     ebx, dword [eax+32]
5483
        add     dword [ebp + panel1_total_size - panel1_data], ebx
5484
        mov     ebx, dword [eax+36]
5485
        adc     dword [ebp + panel1_total_size+4 - panel1_data], ebx
321 diamond 5486
.dotdot:
283 diamond 5487
; подсветка
5488
;        call    insert_last_dot
589 diamond 5489
        call    highlight_init
5490
;        call    delete_last_dot
5491
.loopcont:
5492
        add     eax, 304
5493
        dec     ecx
5494
        jnz     .ptrinit
5495
.loopdone:
5496
        push    edi
5497
        sub     edi, [ebp + panel1_files - panel1_data]
5498
        shr     edi, 2
5499
        mov     [ebp + panel1_numfiles - panel1_data], edi
5500
        pop     edi
5501
        test    edx, edx
5502
        jnz     @f
5503
        test    [ebp + panel1_plugin_flags - panel1_data], 1
5504
        jz      @f
5505
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
5506
        inc     [ebp + panel1_numfiles - panel1_data]
5507
        lea     esi, [edi-4]
5508
        std
5509
        rep     movsd
5510
        cld
5511
        mov     eax, left_dotdot_entry
5512
        cmp     ebp, panel1_data
5513
        jz      .zq
5514
        add     eax, right_dotdot_entry-left_dotdot_entry
5515
.zq:
5516
        stosd
5517
        call    highlight_init
5518
@@:
5519
; Сортировка
5520
sort_files:
5521
        movzx   eax, [ebp + panel1_sortmode - panel1_data]
5522
        mov     ebx, [compare_fns + eax*4]
5523
.mode:
5524
        mov     edx, [ebp + panel1_files - panel1_data]
5525
        mov     ecx, [ebp + panel1_numfiles - panel1_data]
5526
        jecxz   .skip
5527
        mov     eax, [edx]
5528
        cmp     word [eax+40], '..'
5529
        jnz     .nodotdot
5530
        cmp     byte [eax+42], 0
5531
        jnz     .nodotdot
5532
        dec     ecx
5533
        add     edx, 4
5534
.nodotdot:
5535
        call    sort
5536
.skip:
5537
        mov     [bSilentFolderMode], 0  ; leave silent mode
5538
        ret
5539
 
5540
highlight_init:
283 diamond 5541
        pushad
321 diamond 5542
        mov     ebp, eax
283 diamond 5543
        lea     esi, [ebp+40]
5544
        mov     edi, lower_file_name
5545
        mov     edx, edi
474 diamond 5546
        xor     eax, eax
283 diamond 5547
@@:
5548
        lodsb
474 diamond 5549
        mov     al, [tolower_table+eax]
283 diamond 5550
        stosb
5551
        test    al, al
5552
        jnz     @b
5553
        mov     esi, edx
5554
        lea     edx, [edi-1]
5555
        xor     ecx, ecx
5556
.highlight_test_loop:
5557
        mov     ebx, [highlight_groups+ecx*4]
5558
        mov     al, [ebx + highlight.IncludeAttributes]
5559
        mov     ah, [ebp]
5560
        and     ah, al
5561
        cmp     ah, al
5562
        jnz     .highlight_test_failed
5563
        lea     edi, [ebx + highlight.Mask]
5564
        call    match_mask_rev_lowercase
5565
        jc      .highlight_test_failed
5566
        mov     ah, [ebx + highlight.NormalColor]
5567
        test    ah, ah
5568
        jnz     @f
5569
        mov     ah, [panel_normal_color]
5570
@@:
474 diamond 5571
        mov     [ebp+4], ah
283 diamond 5572
        mov     ah, [ebx + highlight.CursorColor]
5573
        test    ah, ah
5574
        jnz     @f
5575
        mov     ah, [panel_cursor_color]
5576
@@:
474 diamond 5577
        mov     [ebp+5], ah
5578
        mov     ah, [ebx + highlight.SelectedColor]
5579
        test    ah, ah
5580
        jnz     @f
5581
        mov     ah, [panel_selected_color]
5582
@@:
283 diamond 5583
        mov     [ebp+6], ah
474 diamond 5584
        mov     ah, [ebx + highlight.SelectedCursorColor]
5585
        test    ah, ah
5586
        jnz     @f
5587
        mov     ah, [panel_selected_cursor_color]
5588
@@:
5589
        mov     [ebp+7], ah
283 diamond 5590
        jmp     .doname
5591
.highlight_test_failed:
5592
        inc     ecx
5593
        cmp     ecx, [highlight_num_groups]
5594
        jb      .highlight_test_loop
5595
.nohighlight:
5596
        mov     ah, [panel_normal_color]
474 diamond 5597
        mov     [ebp+4], ah
5598
        mov     ah, [panel_cursor_color]
283 diamond 5599
        mov     [ebp+5], ah
474 diamond 5600
        mov     ah, [panel_selected_color]
283 diamond 5601
        mov     [ebp+6], ah
474 diamond 5602
        mov     ah, [panel_selected_cursor_color]
5603
        mov     [ebp+7], ah
283 diamond 5604
.doname:
5605
        popad
180 heavyiron 5606
        ret
5607
 
5608
compare_name:
5609
        test    byte [esi], 10h
5610
        jnz     .1dir
5611
        test    byte [edi], 10h
5612
        jnz     .greater
5613
.eq1:
5614
        add     esi, 40
5615
        add     edi, 40
5616
        jmp     strcmpi
5617
.greater:
5618
        test    esi, esi
5619
        ret
5620
.1dir:
5621
        test    byte [edi], 10h
5622
        jnz     .eq1
5623
.less:
5624
        xor     edi, edi
5625
        stc
5626
        ret
5627
 
5628
compare_name_rev:
5629
        test    byte [esi], 10h
5630
        jnz     .1dir
5631
        test    byte [edi], 10h
5632
        jnz     .greater
5633
.eq1:
5634
        add     esi, 40
5635
        add     edi, 40
5636
        xchg    esi, edi
5637
        jmp     strcmpi
5638
.greater:
5639
        test    esi, esi
5640
        ret
5641
.1dir:
5642
        test    byte [edi], 10h
5643
        jnz     .eq1
5644
.less:
5645
        xor     edi, edi
5646
        stc
5647
        ret
5648
 
5649
strcmpi:
5650
        push    eax
5651
@@:
5652
        lodsb
5653
        call    match_symbol
5654
        jnz     .ret
5655
        inc     edi
5656
        test    al, al
5657
        jnz     @b
5658
.ret:
5659
        pop     eax
5660
        ret
5661
 
5662
compare_ext:
5663
        test    byte [esi], 10h
5664
        jnz     .1dir
5665
        test    byte [edi], 10h
5666
        jnz     .greater
5667
.eq1:
5668
        add     esi, 40
5669
        add     edi, 40
5670
        push    esi edi
5671
        call    seek_ext
5672
        xchg    esi, edi
5673
        call    seek_ext
5674
        xchg    esi, edi
5675
        call    strcmpi
5676
        jnz     .ret
5677
        pop     edi esi
5678
        jmp     strcmpi
5679
.ret:
5680
        pop     edi esi
5681
        ret
5682
.greater:
5683
        test    esi, esi
5684
        ret
5685
.1dir:
5686
        test    byte [edi], 10h
5687
        jnz     .eq1
5688
.less:
5689
        xor     edi, edi
5690
        stc
5691
        ret
5692
 
5693
compare_ext_rev:
5694
        test    byte [esi], 10h
5695
        jnz     .1dir
5696
        test    byte [edi], 10h
5697
        jnz     .greater
5698
.eq1:
5699
        add     esi, 40
5700
        add     edi, 40
5701
        push    esi edi
5702
        call    seek_ext
5703
        xchg    esi, edi
5704
        call    seek_ext
5705
        call    strcmpi
5706
        jnz     .ret
5707
        pop     edi esi
5708
        xchg    esi, edi
5709
        jmp     strcmpi
5710
.ret:
5711
        pop     edi esi
5712
        ret
5713
.greater:
5714
        test    esi, esi
5715
        ret
5716
.1dir:
5717
        test    byte [edi], 10h
5718
        jnz     .eq1
5719
.less:
5720
        xor     edi, edi
5721
        stc
5722
        ret
5723
 
5724
seek_ext:
5725
        push    eax
5726
        xor     eax, eax
5727
.l:
5728
        inc     esi
5729
        cmp     byte [esi-1], '.'
5730
        jnz     @f
5731
        mov     eax, esi
5732
@@:
5733
        cmp     byte [esi-1], 0
5734
        jnz     .l
5735
        test    eax, eax
5736
        jnz     @f
5737
        lea     eax, [esi-1]
5738
@@:
5739
        mov     esi, eax
5740
        pop     eax
5741
        ret
5742
 
5743
compare_modified:
5744
        test    byte [esi], 10h
5745
        jnz     .1dir
5746
        test    byte [edi], 10h
5747
        jnz     .greater
5748
.eq1:
5749
        push    edi
5750
        mov     edi, [edi+28]
5751
        cmp     edi, [esi+28]
5752
        pop     edi
5753
        jnz     @f
5754
        push    edi
5755
        mov     edi, [edi+24]
5756
        cmp     edi, [esi+24]
5757
        pop     edi
5758
        jnz     @f
5759
        add     esi, 40
5760
        add     edi, 40
5761
        jmp     strcmpi
5762
@@:
5763
        ret
5764
.greater:
5765
        test    esi, esi
5766
        ret
5767
.1dir:
5768
        test    byte [edi], 10h
5769
        jnz     .eq1
5770
.less:
5771
        xor     edi, edi
5772
        stc
5773
        ret
5774
 
5775
compare_modified_rev:
5776
        test    byte [esi], 10h
5777
        jnz     .1dir
5778
        test    byte [edi], 10h
5779
        jnz     .greater
5780
.eq1:
5781
        push    esi
5782
        mov     esi, [esi+28]
5783
        cmp     esi, [edi+28]
5784
        pop     esi
5785
        jnz     @f
5786
        push    esi
5787
        mov     esi, [esi+24]
5788
        cmp     esi, [edi+24]
5789
        pop     esi
5790
        jnz     @f
5791
        add     esi, 40
5792
        add     edi, 40
5793
        xchg    esi, edi
5794
        jmp     strcmpi
5795
@@:
5796
        ret
5797
.greater:
5798
        test    esi, esi
5799
        ret
5800
.1dir:
5801
        test    byte [edi], 10h
5802
        jnz     .eq1
5803
.less:
5804
        xor     edi, edi
5805
        stc
5806
        ret
5807
 
5808
compare_size:
5809
        test    byte [esi], 10h
5810
        jnz     .1dir
5811
        test    byte [edi], 10h
5812
        jnz     .greater
5813
.eq1:
5814
        push    edi
5815
        mov     edi, [edi+36]
5816
        cmp     edi, [esi+36]
5817
        pop     edi
5818
        jnz     @f
5819
        push    edi
5820
        mov     edi, [edi+32]
5821
        cmp     edi, [esi+32]
5822
        pop     edi
5823
        jnz     @f
5824
        add     esi, 40
5825
        add     edi, 40
5826
        jmp     strcmpi
5827
@@:
5828
        ret
5829
.greater:
5830
        test    esi, esi
5831
        ret
5832
.1dir:
5833
        test    byte [edi], 10h
5834
        jnz     .eq1
5835
.less:
5836
        xor     edi, edi
5837
        stc
5838
        ret
5839
 
5840
compare_size_rev:
5841
        test    byte [esi], 10h
5842
        jnz     .1dir
5843
        test    byte [edi], 10h
5844
        jnz     .greater
5845
.eq1:
5846
        push    esi
5847
        mov     esi, [esi+36]
5848
        cmp     esi, [edi+36]
5849
        pop     esi
5850
        jnz     @f
5851
        push    esi
5852
        mov     esi, [esi+32]
5853
        cmp     esi, [edi+32]
5854
        pop     esi
5855
        jnz     @f
5856
        add     esi, 40
5857
        add     edi, 40
5858
        xchg    esi, edi
5859
        jmp     strcmpi
5860
@@:
5861
        ret
5862
.greater:
5863
        test    esi, esi
5864
        ret
5865
.1dir:
5866
        test    byte [edi], 10h
5867
        jnz     .eq1
5868
.less:
5869
        xor     edi, edi
5870
        stc
5871
        ret
5872
 
5873
compare_unordered:
5874
        cmp     esi, edi
5875
        ret
5876
compare_unordered_rev:
5877
        cmp     edi, esi
5878
        ret
5879
 
5880
compare_created:
5881
        test    byte [esi], 10h
5882
        jnz     .1dir
5883
        test    byte [edi], 10h
5884
        jnz     .greater
5885
.eq1:
5886
        push    edi
5887
        mov     edi, [edi+12]
5888
        cmp     edi, [esi+12]
5889
        pop     edi
5890
        jnz     @f
5891
        push    edi
5892
        mov     edi, [edi+8]
5893
        cmp     edi, [esi+8]
5894
        pop     edi
5895
        jnz     @f
5896
        add     esi, 40
5897
        add     edi, 40
5898
        jmp     strcmpi
5899
@@:
5900
        ret
5901
.greater:
5902
        test    esi, esi
5903
        ret
5904
.1dir:
5905
        test    byte [edi], 10h
5906
        jnz     .eq1
5907
.less:
5908
        xor     edi, edi
5909
        stc
5910
        ret
5911
 
5912
compare_created_rev:
5913
        test    byte [esi], 10h
5914
        jnz     .1dir
5915
        test    byte [edi], 10h
5916
        jnz     .greater
5917
.eq1:
5918
        push    esi
5919
        mov     esi, [esi+12]
5920
        cmp     esi, [edi+12]
5921
        pop     esi
5922
        jnz     @f
5923
        push    esi
5924
        mov     esi, [esi+8]
5925
        cmp     esi, [edi+8]
5926
        pop     esi
5927
        jnz     @f
5928
        add     esi, 40
5929
        add     edi, 40
5930
        xchg    esi, edi
5931
        jmp     strcmpi
5932
@@:
5933
        ret
5934
.greater:
5935
        test    esi, esi
5936
        ret
5937
.1dir:
5938
        test    byte [edi], 10h
5939
        jnz     .eq1
5940
.less:
5941
        xor     edi, edi
5942
        stc
5943
        ret
5944
 
5945
compare_accessed:
5946
        test    byte [esi], 10h
5947
        jnz     .1dir
5948
        test    byte [edi], 10h
5949
        jnz     .greater
5950
.eq1:
5951
        push    edi
5952
        mov     edi, [edi+20]
5953
        cmp     edi, [esi+20]
5954
        pop     edi
5955
        jnz     @f
5956
        push    edi
5957
        mov     edi, [edi+16]
5958
        cmp     edi, [esi+16]
5959
        pop     edi
5960
        jnz     @f
5961
        add     esi, 40
5962
        add     edi, 40
5963
        jmp     strcmpi
5964
@@:
5965
        ret
5966
.greater:
5967
        test    esi, esi
5968
        ret
5969
.1dir:
5970
        test    byte [edi], 10h
5971
        jnz     .eq1
5972
.less:
5973
        xor     edi, edi
5974
        stc
5975
        ret
5976
 
5977
compare_accessed_rev:
5978
        test    byte [esi], 10h
5979
        jnz     .1dir
5980
        test    byte [edi], 10h
5981
        jnz     .greater
5982
.eq1:
5983
        push    esi
5984
        mov     esi, [esi+20]
5985
        cmp     esi, [edi+20]
5986
        pop     esi
5987
        jnz     @f
5988
        push    esi
5989
        mov     esi, [esi+16]
5990
        cmp     esi, [edi+16]
5991
        pop     esi
5992
        jnz     @f
5993
        add     esi, 40
5994
        add     edi, 40
5995
        xchg    esi, edi
5996
        jmp     strcmpi
5997
@@:
5998
        ret
5999
.greater:
6000
        test    esi, esi
6001
        ret
6002
.1dir:
6003
        test    byte [edi], 10h
6004
        jnz     .eq1
6005
.less:
6006
        xor     edi, edi
6007
        stc
6008
        ret
6009
 
589 diamond 6010
ReadFolder_default:
6011
        mov     eax, 2
6012
        ret     10h
6013
 
283 diamond 6014
if 0
589 diamond 6015
; Following subroutines work, but are slow
180 heavyiron 6016
match_mask:
6017
; in: esi->name, edi->mask
6018
; out: CF clear <=> match
6019
        pusha
6020
        xchg    esi, edi
6021
.main_cycle:
6022
        push    esi
6023
@@:
6024
        lodsb
6025
        test    al, al
6026
        jz      @f
6027
        cmp     al, ','
6028
        jz      @f
6029
        cmp     al, '|'
6030
        jnz     @b
6031
@@:
6032
        mov     [esi-1], byte 0
6033
        xchg    esi, [esp]
6034
        call    match_single_mask
6035
        pop     esi
6036
        mov     [esi-1], al
6037
        jnc     .found
6038
        cmp     al, ','
6039
        jz      .main_cycle
6040
.done_fail:
6041
        stc
6042
        popa
6043
        ret
6044
.found:
6045
        test    al, al
6046
        jz      .done_succ
6047
        cmp     al, '|'
6048
        jz      .test_exclude
6049
        lodsb
6050
        jmp     .found
6051
.done_succ:
6052
        clc
6053
        popa
6054
        ret
6055
.test_exclude:
6056
        push    esi
6057
@@:
6058
        lodsb
6059
        test    al, al
6060
        jz      @f
6061
        cmp     al, ','
6062
        jnz     @b
6063
@@:
6064
        mov     byte [esi-1], 0
6065
        xchg    esi, [esp]
6066
        call    match_single_mask
6067
        pop     esi
6068
        mov     [esi-1], al
6069
        jnc     .done_fail
6070
        test    al, al
6071
        jz      .done_succ
6072
        jmp     .test_exclude
6073
 
6074
match_single_mask:
6075
; in: esi->mask, edi->name
6076
; out: CF clear <=> match
6077
        pusha
6078
.mask_symbol:
6079
        lodsb
6080
        test    al, al
6081
        jz      .mask_done
6082
        cmp     al, '*'
6083
        jz      .asterisk
6084
        cmp     al, '?'
6085
        jz      .quest
6086
        cmp     al, '['
6087
        jz      .list
6088
        call    match_symbol
6089
        jnz     .done_fail
6090
        inc     edi
6091
        jmp     .mask_symbol
6092
.done_fail:
6093
        stc
6094
        popa
6095
        ret
6096
.mask_done:
6097
        scasb
6098
        jnz     .done_fail
6099
.done_succ:
6100
        clc
6101
        popa
6102
        ret
6103
.quest:
6104
        mov     al, 0
6105
        scasb
6106
        jz      .done_fail
6107
        jmp     .mask_symbol
6108
.list:
6109
        lodsb
6110
        cmp     al, ']'
6111
        jz      .done_fail
6112
        cmp     byte [esi+1], '-'
6113
        jz      .range
6114
        call    match_symbol
6115
        jnz     .list
6116
.listok:
6117
        inc     edi
6118
@@:
6119
        lodsb
6120
        cmp     al, ']'
6121
        jnz     @b
6122
        jmp     .mask_symbol
6123
.range:
6124
        call    match_symbol
6125
        ja      @f
6126
        mov     al, [esi+2]
6127
        call    match_symbol
6128
        jae     .listok
6129
@@:
6130
        inc     esi
6131
        jmp     .list
6132
.asterisk:
283 diamond 6133
        cmp     byte [esi], 0
6134
        jz      .done_succ
6135
        cmp     byte [esi], '?'
6136
        jnz     @f
6137
        mov     al, 0
6138
        scasb
6139
        jz      .done_fail
6140
        inc     esi
6141
        jmp     .asterisk
6142
@@:
6143
        cmp     byte [esi], '['
6144
        jz      .asterisk_common
6145
; the mask is ...*...
6146
.asterisk_normal:
6147
        mov     al, [esi]
6148
@@:
6149
        cmp     byte [edi], 0
6150
        jz      .done_fail
6151
        call    match_symbol
6152
        jz      @f
6153
        inc     edi
6154
        jmp     @b
6155
@@:
6156
        inc     edi
6157
        inc     esi
6158
        call    match_single_mask
6159
        jnc     .done_succ
6160
        dec     esi
6161
        jmp     .asterisk_normal
6162
.asterisk_common:
180 heavyiron 6163
        push    edi
6164
@@:
6165
        call    match_single_mask
6166
        jnc     @f
6167
        mov     al, 0
6168
        scasb
6169
        jnz     @b
6170
        pop     edi
6171
        jmp     .done_fail
6172
@@:
6173
        pop     edi
6174
        jmp     .done_succ
6175
 
283 diamond 6176
match_mask_rev:
6177
; in: esi->name, edx->end of name, edi->mask
6178
; out: CF clear <=> match
6179
        pusha
6180
        xchg    esi, edx
6181
        xchg    esi, edi
6182
.main_cycle:
6183
        mov     ecx, esi
6184
@@:
6185
        lodsb
6186
        test    al, al
6187
        jz      @f
6188
        cmp     al, ','
6189
        jz      @f
6190
        cmp     al, '|'
6191
        jnz     @b
6192
@@:
6193
        dec     esi
6194
        mov     [esi], byte 0
6195
        call    match_single_mask_rev2
6196
        mov     [esi], al
6197
        inc     esi
6198
        jnc     .found
6199
        cmp     al, ','
6200
        jz      .main_cycle
6201
.done_fail:
6202
        stc
6203
        popa
6204
        ret
6205
.found:
6206
        test    al, al
6207
        jz      .done_succ
6208
        cmp     al, '|'
6209
        jz      .test_exclude
6210
        lodsb
6211
        jmp     .found
6212
.done_succ:
6213
        clc
6214
        popa
6215
        ret
6216
.test_exclude:
6217
        mov     ecx, esi
6218
@@:
6219
        lodsb
6220
        test    al, al
6221
        jz      @f
6222
        cmp     al, ','
6223
        jnz     @b
6224
@@:
6225
        dec     esi
6226
        mov     byte [esi], 0
6227
        call    match_single_mask_rev2
6228
        mov     [esi], al
6229
        inc     esi
6230
        jnc     .done_fail
6231
        test    al, al
6232
        jz      .done_succ
6233
        jmp     .test_exclude
6234
 
6235
match_single_mask_rev2:
6236
        pusha
6237
        jmp     match_single_mask_rev.mask_symbol
6238
match_single_mask_rev:
6239
; in: esi->mask, edi->end of name, edx->start of name
6240
; out: CF clear <=> match
6241
        pusha
6242
        mov     ecx, esi
6243
@@:
6244
        lodsb
6245
        test    al, al
6246
        jnz     @b
6247
        dec     esi
6248
; esi->end of mask, ecx->start of mask
6249
.mask_symbol:
6250
        dec     esi
6251
        cmp     esi, ecx
6252
        jb      .mask_done
6253
        mov     al, [esi]
6254
        cmp     al, '*'
6255
        jz      .asterisk
6256
        cmp     al, '?'
6257
        jz      .quest
6258
        cmp     al, ']'
6259
        jz      .list
6260
        dec     edi
6261
        cmp     edi, edx
6262
        jb      .done_fail
6263
        call    match_symbol
6264
        jz      .mask_symbol
6265
.done_fail:
6266
        stc
6267
        popa
6268
        ret
6269
.mask_done:
6270
        cmp     edi, edx
6271
        jnz     .done_fail
6272
.done_succ:
6273
        clc
6274
        popa
6275
        ret
6276
.quest:
6277
        dec     edi
6278
        cmp     edi, edx
6279
        jb      .done_fail
6280
        jmp     .mask_symbol
6281
.list:
6282
        dec     edi
6283
        cmp     edi, edx
6284
        jb      .done_fail
6285
.list_check:
6286
        dec     esi
6287
        cmp     esi, ecx
6288
        jbe     .done_fail
6289
        mov     al, [esi]
6290
        cmp     al, '['
6291
        jz      .done_fail
6292
        cmp     byte [esi-1], '-'
6293
        jz      .range
6294
        call    match_symbol
6295
        jnz     .list_check
6296
.listok:
6297
@@:
6298
        dec     esi
6299
        cmp     esi, ecx
6300
        jb      .done_fail
6301
        cmp     byte [esi], '['
6302
        jnz     @b
6303
        jmp     .mask_symbol
6304
.range:
6305
        call    match_symbol
6306
        jb      @f
6307
        mov     al, [esi-2]
6308
        call    match_symbol
6309
        jbe     .listok
6310
@@:
6311
        dec     esi
6312
        dec     esi
6313
        jmp     .list_check
6314
.asterisk:
6315
        cmp     esi, ecx
6316
        jz      .done_succ
6317
        cmp     byte [esi-1], '?'
6318
        jnz     @f
6319
        cmp     edi, edx
6320
        jz      .done_fail
6321
        dec     esi
6322
        jmp     .asterisk
6323
@@:
6324
        cmp     byte [esi-1], ']'
6325
        jz      .asterisk_common
6326
; the mask is ...*...
6327
.asterisk_normal:
6328
        mov     al, [esi-1]
6329
@@:
6330
        cmp     edi, edx
6331
        jz      .done_fail
6332
        call    match_symbol
6333
        jz      @f
6334
        dec     edi
6335
        jmp     @b
6336
@@:
6337
        dec     edi
6338
        dec     esi
6339
        call    match_single_mask_rev2
6340
        jnc     .done_succ
6341
        inc     esi
6342
        jmp     .asterisk_normal
6343
.asterisk_common:
6344
        push    edi
6345
@@:
6346
        call    match_single_mask_rev2
6347
        jnc     @f
6348
        dec     edi
6349
        cmp     edi, edx
6350
        jae     @b
6351
        pop     edi
6352
        jmp     .done_fail
6353
@@:
6354
        pop     edi
6355
        jmp     .done_succ
6356
end if
6357
 
474 diamond 6358
;tolower:
6359
;        push    ecx
6360
;        movzx   ecx, al
6361
;        mov     al, [tolower_table+ecx]
6362
;        pop     ecx
6363
;        ret
180 heavyiron 6364
 
6365
match_symbol:
6366
; in: al,[edi]=symbols
6367
; out: flags as 'cmp al,[edi]'
474 diamond 6368
        push    eax ecx
6369
        movzx   ecx, al
6370
        mov     al, [tolower_table+ecx]
6371
        movzx   ecx, byte [edi]
6372
        cmp     al, [tolower_table+ecx]
6373
        pop     ecx eax
180 heavyiron 6374
        ret
6375
 
283 diamond 6376
match_mask_rev_lowercase:
6377
; in: esi->name, edx->end of name, edi->mask
6378
; out: CF clear <=> match
6379
        pusha
6380
        xchg    esi, edx
6381
        xchg    esi, edi
6382
.main_cycle:
6383
        mov     ecx, esi
6384
@@:
6385
        lodsb
6386
        test    al, al
6387
        jz      @f
6388
        cmp     al, ','
6389
        jz      @f
474 diamond 6390
        cmp     al, ';'
6391
        jz      @f
283 diamond 6392
        cmp     al, '|'
6393
        jnz     @b
6394
@@:
6395
        dec     esi
6396
        mov     [esi], byte 0
6397
        call    match_single_mask_rev_lowercase
6398
        mov     [esi], al
6399
        inc     esi
6400
        jnc     .found
6401
        cmp     al, ','
6402
        jz      .main_cycle
474 diamond 6403
        cmp     al, ';'
6404
        jz      .main_cycle
283 diamond 6405
.done_fail:
6406
        stc
6407
        popa
6408
        ret
6409
.found:
6410
        test    al, al
6411
        jz      .done_succ
6412
        cmp     al, '|'
6413
        jz      .test_exclude
6414
        lodsb
6415
        jmp     .found
6416
.done_succ:
6417
        clc
6418
        popa
6419
        ret
6420
.test_exclude:
6421
        mov     ecx, esi
6422
@@:
6423
        lodsb
6424
        test    al, al
6425
        jz      @f
6426
        cmp     al, ','
474 diamond 6427
        jz      @f
6428
        cmp     al, ';'
283 diamond 6429
        jnz     @b
6430
@@:
6431
        dec     esi
6432
        mov     byte [esi], 0
6433
        call    match_single_mask_rev_lowercase
6434
        mov     [esi], al
6435
        inc     esi
6436
        jnc     .done_fail
6437
        test    al, al
6438
        jz      .done_succ
6439
        jmp     .test_exclude
180 heavyiron 6440
 
283 diamond 6441
match_single_mask_rev_lowercase:
6442
; in: esi->end of mask, ecx->start of mask, edi->end of name, edx->start of name
6443
; out: CF clear <=> match
6444
        push    esi edi eax
6445
.mask_symbol:
6446
        dec     esi
6447
        cmp     esi, ecx
6448
        jb      .mask_done
6449
        mov     al, [esi]
6450
        cmp     al, '*'
6451
        jz      .asterisk
6452
        dec     edi
6453
        cmp     edi, edx
6454
        jb      .done_fail
1000 diamond 6455
        cmp     al, '?'
6456
        jz      .mask_symbol
6457
        cmp     al, ']'
6458
        jz      .list_check
283 diamond 6459
        cmp     al, [edi]
6460
        jz      .mask_symbol
6461
.done_fail:
6462
        stc
6463
        pop     eax edi esi
6464
        ret
6465
.mask_done:
6466
        cmp     edi, edx
6467
        jnz     .done_fail
6468
.done_succ:
6469
        clc
6470
        pop     eax edi esi
6471
        ret
6472
.list_check:
6473
        dec     esi
6474
        cmp     esi, ecx
6475
        jbe     .done_fail
6476
        mov     al, [esi]
6477
        cmp     al, '['
6478
        jz      .done_fail
6479
        cmp     byte [esi-1], '-'
6480
        jz      .range
6481
        cmp     al, [edi]
6482
        jnz     .list_check
6483
.listok:
6484
@@:
6485
        dec     esi
6486
        cmp     esi, ecx
6487
        jb      .done_fail
6488
        cmp     byte [esi], '['
6489
        jnz     @b
6490
        jmp     .mask_symbol
6491
.range:
6492
        cmp     al, [edi]
6493
        jb      @f
6494
        mov     al, [esi-2]
6495
        cmp     al, [edi]
6496
        jbe     .listok
6497
@@:
6498
        dec     esi
6499
        dec     esi
6500
        jmp     .list_check
6501
.asterisk:
6502
        cmp     esi, ecx
6503
        jz      .done_succ
6504
        cmp     byte [esi-1], '?'
6505
        jnz     @f
6506
        cmp     edi, edx
6507
        jz      .done_fail
6508
        dec     esi
1000 diamond 6509
        dec     edi
283 diamond 6510
        jmp     .asterisk
6511
@@:
6512
        cmp     byte [esi-1], ']'
6513
        jz      .asterisk_common
6514
; the mask is ...*...
6515
.asterisk_normal:
6516
        mov     al, [esi-1]
6517
@@:
1000 diamond 6518
        dec     edi
283 diamond 6519
        cmp     edi, edx
1000 diamond 6520
        jb      .done_fail
283 diamond 6521
        cmp     al, [edi]
1000 diamond 6522
        jnz     @b
283 diamond 6523
@@:
6524
        dec     esi
6525
        call    match_single_mask_rev_lowercase
6526
        jnc     .done_succ
6527
        inc     esi
6528
        jmp     .asterisk_normal
6529
.asterisk_common:
6530
        push    edi
6531
@@:
6532
        call    match_single_mask_rev_lowercase
6533
        jnc     @f
6534
        dec     edi
6535
        cmp     edi, edx
6536
        jae     @b
6537
        pop     edi
6538
        jmp     .done_fail
6539
@@:
6540
        pop     edi
6541
        jmp     .done_succ
180 heavyiron 6542
 
283 diamond 6543
find_extension:
6544
        lea     esi, [ecx+40]
6545
        push    esi
6546
@@:
6547
        lodsb
6548
        test    al, al
6549
        jnz     @b
6550
@@:
6551
        dec     esi
6552
        cmp     byte [esi], '.'
6553
        jz      .found_ext
6554
        cmp     esi, [esp]
6555
        ja      @b
6556
; empty extension
6557
        pop     esi
6558
        stc
6559
        ret
6560
.found_ext:
6561
        inc     esi
474 diamond 6562
        mov     edi, [associations]
517 diamond 6563
        test    edi, edi
6564
        jz      .notfound
474 diamond 6565
.find_loop:
283 diamond 6566
        push    esi edi
6567
        call    strcmpi
6568
        pop     edi esi
474 diamond 6569
        pushf
6570
@@:
283 diamond 6571
        inc     edi
474 diamond 6572
        cmp     byte [edi-1], 0
6573
        jnz     @b
6574
        popf
6575
        jz      .found
283 diamond 6576
@@:
474 diamond 6577
        inc     edi
6578
        cmp     byte [edi-1], 0
6579
        jnz     @b
6580
        cmp     byte [edi], 0
6581
        jnz     .find_loop
517 diamond 6582
.notfound:
474 diamond 6583
; unknown extension
6584
        stc
6585
.found:
283 diamond 6586
        pop     esi
6587
        ret
6588
 
589 diamond 6589
header  db      'Kolibri Far ',version,0
283 diamond 6590
 
180 heavyiron 6591
nomem_draw      db      'No memory for redraw.',0
6592
.size = $ - nomem_draw
6593
 
6594
def_left_dir    db      '/rd/1',0
6595
def_right_dir   db      '/hd0/1',0
6596
 
314 diamond 6597
bSilentFolderMode db    1
6598
 
814 diamond 6599
bQuickSearchMode db     0
6600
bDisplayQuickSearch db  0
6601
 
180 heavyiron 6602
if lang eq ru
6603
aFolder         db      'Папка'
6604
.size = $-aFolder
6605
aUp             db      'Вверх'
6606
.size = $-aUp
6607
aDrive          db      'Диск',0
6608
aScreens        db      'Экраны',0
6609
else
6610
aFolder         db      'Folder'
6611
.size = $-aFolder
6612
aUp             db      'Up'
6613
.size = $-aUp
6614
aDrive          db      'Drive',0
6615
aScreens        db      'Screens',0
6616
end if
6617
 
474 diamond 6618
align 4
180 heavyiron 6619
_10d dd 10
6620
_100d dd 100
474 diamond 6621
muldiv10 dd 429496729
180 heavyiron 6622
_10 db 10
6623
_100 db 100
6624
 
6625
fpu_cw  dw      000011100111111b
6626
 
6627
keybar_panels:
6628
if lang eq ru
6629
; без клавиш-модификаторов
6630
        db      'Помощь'
6631
        db      'ПользМ'
6632
        db      'Просм '
6633
        db      'Редакт'
6634
        db      'Копир '
6635
        db      'Перен '
6636
        db      'Папка '
6637
        db      'Удален'
6638
        db      'КонфМн'
6639
        db      'Выход '
6640
        db      'Модули'
6641
        db      'Экраны'
6642
; Shift
6643
        db      'Добавл'
6644
        db      'Распак'
6645
        db      'АрхКом'
6646
        db      'Редак.'
6647
        db      'Копир '
6648
        db      'Переим'
6649
        db      '      '
6650
        db      'Удален'
6651
        db      'Сохран'
6652
        db      'Послдн'
6653
        db      'Группы'
6654
        db      'Выбран'
6655
; Ctrl
6656
        db      'Левая '
6657
        db      'Правая'
6658
        db      'Имя   '
6659
        db      'Расшир'
6660
        db      'Модиф '
6661
        db      'Размер'
6662
        db      'Несорт'
6663
        db      'Создан'
6664
        db      'Доступ'
6665
        db      'Описан'
6666
        db      'Владел'
6667
        db      'Сорт  '
6668
; Ctrl+Shift
6669
        db      '      '
6670
        db      '      '
6671
        db      'Просм '
6672
        db      'Редакт'
6673
        db      '      '
6674
        db      '      '
6675
        db      '      '
6676
        db      '      '
6677
        db      '      '
6678
        db      '      '
6679
        db      '      '
6680
        db      '      '
6681
; Alt
6682
        db      'Левая '
6683
        db      'Правая'
6684
        db      'Смотр.'
4933 hidnplayr 6685
        db      '      '
180 heavyiron 6686
        db      'Печать'
6687
        db      'Связь '
6688
        db      'Искать'
6689
        db      'Истор '
6690
        db      'Видео '
6691
        db      'Дерево'
6692
        db      'ИстПр '
6693
        db      'ИстПап'
6694
; Alt+Shift
6695
        db      '      '
6696
        db      '      '
6697
        db      '      '
6698
        db      '      '
6699
        db      '      '
6700
        db      '      '
6701
        db      '      '
6702
        db      '      '
6703
        db      'КонфПл'
6704
        db      '      '
6705
        db      '      '
6706
        db      '      '
6707
; Alt+Ctrl
6708
times 12 db     '      '
6709
; Alt+Ctrl+Shift
6710
times 12 db     '      '
6711
else
6712
; No modificators
6713
        db      'Help  '
6714
        db      'UserMn'
6715
        db      'View  '
6716
        db      'Edit  '
6717
        db      'Copy  '
6718
        db      'RenMov'
6719
        db      'MkFold'
6720
        db      'Delete'
6721
        db      'ConfMn'
6722
        db      'Quit  '
6723
        db      'Plugin'
6724
        db      'Screen'
6725
; Shift
6726
        db      'Add   '
6727
        db      'Extrct'
6728
        db      'ArcCmd'
6729
        db      'Edit..'
6730
        db      'Copy  '
6731
        db      'Rename'
6732
        db      '      '
6733
        db      'Delete'
6734
        db      'Save  '
6735
        db      'Last  '
6736
        db      'Group '
6737
        db      'SelUp '
6738
; Ctrl
6739
        db      'Left  '
6740
        db      'Right '
6741
        db      'Name  '
6742
        db      'Extens'
6743
        db      'Modifn'
6744
        db      'Size  '
6745
        db      'Unsort'
6746
        db      'Creatn'
6747
        db      'Access'
6748
        db      'Descr '
6749
        db      'Owner '
6750
        db      'Sort  '
6751
; Ctrl+Shift
6752
        db      '      '
6753
        db      '      '
6754
        db      'View  '
6755
        db      'Edit  '
6756
        db      '      '
6757
        db      '      '
6758
        db      '      '
6759
        db      '      '
6760
        db      '      '
6761
        db      '      '
6762
        db      '      '
6763
        db      '      '
6764
; Alt
6765
        db      'Left  '
6766
        db      'Right '
6767
        db      'View..'
4933 hidnplayr 6768
        db      '      '
180 heavyiron 6769
        db      'Print '
6770
        db      'MkLink'
6771
        db      'Find  '
6772
        db      'Histry'
6773
        db      'Video '
6774
        db      'Tree  '
6775
        db      'ViewHs'
6776
        db      'FoldHs'
6777
; Alt+Shift
6778
        db      '      '
6779
        db      '      '
6780
        db      '      '
6781
        db      '      '
6782
        db      '      '
6783
        db      '      '
6784
        db      '      '
6785
        db      '      '
6786
        db      'ConfPl'
6787
        db      '      '
6788
        db      '      '
6789
        db      '      '
6790
; Alt+Ctrl
6791
times 12 db     '      '
6792
; Alt+Ctrl+Shift
6793
times 12 db     '      '
6794
end if
6795
 
6796
keybar_viewer:
6797
if lang eq ru
6798
; без клавиш-модификаторов
6799
        db      'Помощь'
6800
        db      'Развер'
6801
        db      'Выход '
6802
        db      'Код   '
6803
        db      '      '
6804
        db      'Редакт'
6805
        db      'Поиск '
6806
keybar_cp:
6807
        db      'cp1251'
6808
        db      '      '
6809
        db      'Выход '
6810
        db      'Модули'
6811
        db      'Экраны'
6812
; Shift
6813
        db      '      '
6814
        db      'Слова '
6815
        db      '      '
6816
        db      '      '
6817
        db      '      '
6818
        db      '      '
6819
        db      'Дальше'
6820
        db      'Таблиц'
6821
        db      '      '
6822
        db      '      '
6823
        db      '      '
6824
        db      '      '
6825
; Ctrl
6826
        db      '      '
6827
        db      '      '
6828
        db      '      '
6829
        db      '      '
6830
        db      '      '
6831
        db      '      '
6832
        db      '      '
6833
        db      '      '
6834
        db      '      '
6835
        db      'Позиц '
6836
        db      '      '
6837
        db      '      '
6838
; Ctrl+Shift
6839
        db      '      '
6840
        db      '      '
6841
        db      '      '
6842
        db      '      '
6843
        db      '      '
6844
        db      '      '
6845
        db      '      '
6846
        db      '      '
6847
        db      '      '
6848
        db      '      '
6849
        db      '      '
6850
        db      '      '
6851
; Alt
6852
        db      '      '
6853
        db      '      '
6854
        db      '      '
6855
        db      '      '
6856
        db      'Печать'
6857
        db      '      '
6858
        db      'Назад '
6859
        db      'Перейт'
6860
        db      'Видео '
6861
        db      '      '
6862
        db      'ИстПр '
6863
        db      '      '
6864
; Alt+Shift
6865
        db      '      '
6866
        db      '      '
6867
        db      '      '
6868
        db      '      '
6869
        db      '      '
6870
        db      '      '
6871
        db      '      '
6872
        db      '      '
6873
        db      'Конфиг'
6874
        db      '      '
6875
        db      '      '
6876
        db      '      '
6877
; Alt+Ctrl
6878
times 12 db     '      '
6879
; Alt+Ctrl+Shift
6880
times 12 db     '      '
6881
else
6882
; No modificators
6883
        db      'Help  '
6884
        db      'Unwrap'
6885
        db      'Quit  '
6886
        db      'Hex   '
6887
        db      '      '
6888
        db      'Edit  '
6889
        db      'Search'
6890
keybar_cp:
6891
        db      'cp1251'
6892
        db      '      '
6893
        db      'Quit  '
6894
        db      'Plugin'
6895
        db      'Screen'
6896
; Shift
6897
        db      '      '
6898
        db      'WWrap '
6899
        db      '      '
6900
        db      '      '
6901
        db      '      '
6902
        db      '      '
6903
        db      'Next  '
6904
        db      'Table '
6905
        db      '      '
6906
        db      '      '
6907
        db      '      '
6908
        db      '      '
6909
; Ctrl
6910
        db      '      '
6911
        db      '      '
6912
        db      '      '
6913
        db      '      '
6914
        db      '      '
6915
        db      '      '
6916
        db      '      '
6917
        db      '      '
6918
        db      '      '
6919
        db      'GoFile'
6920
        db      '      '
6921
        db      '      '
6922
; Ctrl+Shift
6923
        db      '      '
6924
        db      '      '
6925
        db      '      '
6926
        db      '      '
6927
        db      '      '
6928
        db      '      '
6929
        db      '      '
6930
        db      '      '
6931
        db      '      '
6932
        db      '      '
6933
        db      '      '
6934
        db      '      '
6935
; Alt
6936
        db      '      '
6937
        db      '      '
6938
        db      '      '
6939
        db      '      '
6940
        db      'Print '
6941
        db      '      '
6942
        db      'Prev  '
6943
        db      'Goto  '
6944
        db      'Video '
6945
        db      '      '
6946
        db      'ViewHs'
6947
        db      '      '
6948
; Alt+Shift
6949
        db      '      '
6950
        db      '      '
6951
        db      '      '
6952
        db      '      '
6953
        db      '      '
6954
        db      '      '
6955
        db      '      '
6956
        db      '      '
6957
        db      'Config'
6958
        db      '      '
6959
        db      '      '
6960
        db      '      '
6961
; Alt+Ctrl
6962
times 12 db     '      '
6963
; Alt+Ctrl+Shift
6964
times 12 db     '      '
6965
end if
6966
 
814 diamond 6967
keybar_editor:
6968
if lang eq ru
6969
; без клавиш-модификаторов
6970
        db      'Помощь'
6971
        db      'Сохран'
6972
        db      '      '
6973
        db      '      '
6974
        db      '      '
6975
        db      'Просм '
6976
        db      'Поиск '
6977
keybar_cp2:
6978
        db      'cp1251'
6979
        db      '      '
6980
        db      'Выход '
6981
        db      'Модули'
6982
        db      'Экраны'
6983
; Shift
6984
        db      '      '
6985
        db      'Сохр.в'
6986
        db      '      '
6987
        db      'Редак.'
6988
        db      '      '
6989
        db      '      '
6990
        db      'Дальше'
6991
        db      'Таблиц'
6992
        db      '      '
6993
        db      'СхрВых'
6994
        db      '      '
6995
        db      '      '
6996
; Ctrl
6997
        db      '      '
6998
        db      '      '
6999
        db      '      '
7000
        db      '      '
7001
        db      '      '
7002
        db      '      '
7003
        db      'Замена'
7004
        db      '      '
7005
        db      '      '
7006
        db      'Позиц '
7007
        db      '      '
7008
        db      '      '
7009
; Ctrl+Shift
7010
        db      '      '
7011
        db      '      '
7012
        db      '      '
7013
        db      '      '
7014
        db      '      '
7015
        db      '      '
7016
        db      '      '
7017
        db      '      '
7018
        db      '      '
7019
        db      '      '
7020
        db      '      '
7021
        db      '      '
7022
; Alt
7023
        db      '      '
7024
        db      '      '
7025
        db      '      '
7026
        db      '      '
7027
        db      'Печать'
7028
        db      '      '
7029
        db      '      '
7030
        db      'Строка'
7031
        db      'Видео '
7032
        db      '      '
7033
        db      'ИстПр '
7034
        db      '      '
7035
; Alt+Shift
7036
        db      '      '
7037
        db      '      '
7038
        db      '      '
7039
        db      '      '
7040
        db      '      '
7041
        db      '      '
7042
        db      '      '
7043
        db      '      '
7044
        db      'Конфиг'
7045
        db      '      '
7046
        db      '      '
7047
        db      '      '
7048
; Alt+Ctrl
7049
times 12 db     '      '
7050
; Alt+Ctrl+Shift
7051
times 12 db     '      '
7052
else
7053
; No modificators
7054
        db      'Help  '
7055
        db      'Save  '
7056
        db      '      '
7057
        db      '      '
7058
        db      '      '
7059
        db      'View  '
7060
        db      'Search'
7061
keybar_cp2:
7062
        db      'cp1251'
7063
        db      '      '
7064
        db      'Quit  '
7065
        db      'Plugin'
7066
        db      'Screen'
7067
; Shift
7068
        db      '      '
7069
        db      'SaveAs'
7070
        db      '      '
7071
        db      'Edit..'
7072
        db      '      '
7073
        db      '      '
7074
        db      'Next  '
7075
        db      'Table '
7076
        db      '      '
7077
        db      'SaveQ '
7078
        db      '      '
7079
        db      '      '
7080
; Ctrl
7081
        db      '      '
7082
        db      '      '
7083
        db      '      '
7084
        db      '      '
7085
        db      '      '
7086
        db      '      '
7087
        db      'Replac'
7088
        db      '      '
7089
        db      '      '
7090
        db      'GoFile'
7091
        db      '      '
7092
        db      '      '
7093
; Ctrl+Shift
7094
        db      '      '
7095
        db      '      '
7096
        db      '      '
7097
        db      '      '
7098
        db      '      '
7099
        db      '      '
7100
        db      '      '
7101
        db      '      '
7102
        db      '      '
7103
        db      '      '
7104
        db      '      '
7105
        db      '      '
7106
; Alt
7107
        db      '      '
7108
        db      '      '
7109
        db      '      '
7110
        db      '      '
7111
        db      'Print '
7112
        db      '      '
7113
        db      '      '
7114
        db      'Goto  '
7115
        db      'Video '
7116
        db      '      '
7117
        db      'ViewHs'
7118
        db      '      '
7119
; Alt+Shift
7120
        db      '      '
7121
        db      '      '
7122
        db      '      '
7123
        db      '      '
7124
        db      '      '
7125
        db      '      '
7126
        db      '      '
7127
        db      '      '
7128
        db      'Config'
7129
        db      '      '
7130
        db      '      '
7131
        db      '      '
7132
; Alt+Ctrl
7133
times 12 db     '      '
7134
; Alt+Ctrl+Shift
7135
times 12 db     '      '
7136
end if
7137
 
180 heavyiron 7138
        align   4
7139
cur_width       dd      80
7140
cur_height      dd      25
283 diamond 7141
saved_width     dd      -1
7142
saved_height    dd      -1
314 diamond 7143
fill_width      dd      0
7144
fill_height     dd      0
180 heavyiron 7145
max_width = 256
7146
max_height = 256
283 diamond 7147
console_data_ptr dd     0
180 heavyiron 7148
 
283 diamond 7149
cursor_x        dd      -1
7150
cursor_y        dd      -1
814 diamond 7151
cursor_size     dd      cursor_normal_size
474 diamond 7152
cur_cursor_pos  dd      -1
7153
old_cursor_pos  dd      -1
283 diamond 7154
 
997 diamond 7155
idle_interval   dd      -1
7156
 
180 heavyiron 7157
active_panel    dd      panel1_data
7158
 
474 diamond 7159
associations    dd      0
517 diamond 7160
associations_size dd    1               ; terminating zero
7161
associations_allocated dd 0x1000        ; start with one page
474 diamond 7162
 
180 heavyiron 7163
console_colors  dd      0x000000, 0x000080, 0x008000, 0x008080
7164
                dd      0x800000, 0x800080, 0x808000, 0xC0C0C0
7165
                dd      0x808080, 0x0000FF, 0x00FF00, 0x00FFFF
7166
                dd      0xFF0000, 0xFF00FF, 0xFFFF00, 0xFFFFFF
7167
 
7168
compare_fns     dd      compare_name
7169
                dd      compare_name_rev
7170
                dd      compare_ext
7171
                dd      compare_ext_rev
7172
                dd      compare_modified
7173
                dd      compare_modified_rev
7174
                dd      compare_size
7175
                dd      compare_size_rev
7176
                dd      compare_unordered
7177
                dd      compare_unordered_rev
7178
                dd      compare_created
7179
                dd      compare_created_rev
7180
                dd      compare_accessed
7181
                dd      compare_accessed_rev
7182
 
7183
ctrlkey_tests   dd      ctrlkey_test0
7184
                dd      ctrlkey_test1
7185
                dd      ctrlkey_test2
7186
                dd      ctrlkey_test3
7187
                dd      ctrlkey_test4
7188
ctrlkey_tests_num = 5
7189
 
7190
virtual at 0
7191
screen_vtable:
7192
        .OnRedraw       dd      ?
997 diamond 7193
        .OnActivate     dd      ?
7194
        .OnIdle         dd      ?
180 heavyiron 7195
        .OnKey          dd      ?
7196
        .keybar         dd      ?
7197
        .getname        dd      ?
589 diamond 7198
        .OnExit         dd      ?
7199
        .IsHandleUsed   dd      ?
180 heavyiron 7200
end virtual
7201
 
7202
panels_vtable:
7203
        dd      panels_OnRedraw
997 diamond 7204
        dd      0
7205
        dd      0
180 heavyiron 7206
        dd      panels_OnKey
7207
        dd      keybar_panels
7208
        dd      panels_getname
589 diamond 7209
        dd      panels_OnExit
7210
        dd      panels_IsHandleUsed
180 heavyiron 7211
 
7212
viewer_vtable:
7213
        dd      viewer_OnRedraw
997 diamond 7214
        dd      0
7215
        dd      0
180 heavyiron 7216
        dd      viewer_OnKey
7217
        dd      keybar_viewer
7218
        dd      viewer_getname
589 diamond 7219
        dd      viewer_OnExit
7220
        dd      viewer_IsHandleUsed
180 heavyiron 7221
 
814 diamond 7222
editor_vtable:
7223
        dd      editor_OnRedraw
997 diamond 7224
        dd      0
7225
        dd      0
814 diamond 7226
        dd      editor_OnKey
7227
        dd      keybar_editor
7228
        dd      editor_getname
7229
        dd      editor_OnExit
7230
        dd      editor_IsHandleUsed
7231
 
997 diamond 7232
filesearch_vtable:
7233
        dd      filesearch_OnRedraw
7234
        dd      filesearch_OnActivate
7235
        dd      filesearch_OnIdle
7236
        dd      filesearch_OnKey
7237
        dd      0
7238
        dd      filesearch_getname
7239
        dd      filesearch_OnExit
7240
        dd      filesearch_IsHandleUsed
7241
 
314 diamond 7242
; additions to this table require changes in tools.inc::get_error_msg
7243
errors1:
7244
        dd      error0msg
7245
        dd      error1msg
7246
        dd      error2msg
7247
        dd      error3msg
7248
        dd      error4msg
7249
        dd      error5msg
7250
        dd      error6msg
7251
        dd      error7msg
7252
        dd      error8msg
7253
        dd      error9msg
7254
        dd      error10msg
7255
        dd      error11msg
7256
errors2:
7257
        dd      error30msg
7258
        dd      error31msg
7259
        dd      error32msg
7260
 
180 heavyiron 7261
encodings:
7262
.cp866 = 0
7263
.cp1251 = 1
474 diamond 7264
.koi8r = 2
7265
.unicode = 3
180 heavyiron 7266
 
7267
.names:
7268
        db      'cp866   '
7269
        db      'cp1251  '
474 diamond 7270
        db      'koi8-r  '
7271
        db      'Unicode '
180 heavyiron 7272
 
7273
.tables:
7274
; cp866 - trivial map
7275
        times 128 db %+127
7276
; cp1251
7277
        db      0x3F,0x3F,0x27,0x3F,0x22,0x3A,0xC5,0xD8,0x3F,0x25,0x3F,0x3C,0x3F,0x3F,0x3F,0x3F
7278
        db      0x3F,0x27,0x27,0x22,0x22,0x07,0x2D,0x2D,0x3F,0x54,0x3F,0x3E,0x3F,0x3F,0x3F,0x3F
7279
        db      0xFF,0xF6,0xF7,0x3F,0xFD,0x3F,0xB3,0x15,0xF0,0x63,0xF2,0x3C,0xBF,0x2D,0x52,0xF4
7280
        db      0xF8,0x2B,0x49,0x69,0x3F,0xE7,0x14,0xFA,0xF1,0xFC,0xF3,0x3E,0x3F,0x3F,0x3F,0xF5
7281
        times 0x30 db %-1+0x80
7282
        times 0x10 db %-1+0xE0
474 diamond 7283
; koi8-r
7284
        db      0xC4,0xB3,0xDA,0xBF,0xC0,0xD9,0xC3,0xB4,0xC2,0xC1,0xC5,0xDF,0xDC,0xDB,0xDD,0xDE
7285
        db      0xB0,0xB1,0xB2,0xF4,0xFE,0xF9,0xFB,0xF7,0xF3,0xF2,0xFF,0xF5,0xF8,0xFD,0xFA,0xF6
7286
        db      0xCD,0xBA,0xD5,0xF1,0xD6,0xC9,0xB8,0xB7,0xBB,0xD4,0xD3,0xC8,0xBE,0xBD,0xBC,0xC6
7287
        db      0xC7,0xCC,0xB5,0xF0,0xB6,0xB9,0xD1,0xD2,0xCB,0xCF,0xD0,0xCA,0xD8,0xD7,0xCE,0xFC
7288
        db      0xEE,0xA0,0xA1,0xE6,0xA4,0xA5,0xE4,0xA3,0xE5,0xA8,0xA9,0xAA,0xAB,0xAC,0xAD,0xAE
7289
        db      0xAF,0xEF,0xE0,0xE1,0xE2,0xE3,0xA6,0xA2,0xEC,0xEB,0xA7,0xE8,0xED,0xE9,0xE7,0xEA
7290
        db      0x9E,0x80,0x81,0x96,0x84,0x85,0x94,0x83,0x95,0x88,0x89,0x8A,0x8B,0x8C,0x8D,0x8E
7291
        db      0x8F,0x9F,0x90,0x91,0x92,0x93,0x86,0x82,0x9C,0x9B,0x87,0x98,0x9D,0x99,0x97,0x9A
180 heavyiron 7292
 
474 diamond 7293
.menu:
7294
        db      .cp866
7295
.menu.1:
7296
        dd      .menu.2
7297
        dd      0
7298
if lang eq ru
7299
        db      '&DOS текст (cp866)',0
7300
else
7301
        db      '&DOS text (cp866)',0
7302
end if
7303
        db      .cp1251
7304
.menu.2:
7305
        dd      .menu.3
7306
        dd      .menu.1
7307
if lang eq ru
7308
        db      '&Windows текст (cp1251)',0
7309
else
7310
        db      '&Windows text (cp1251)',0
7311
end if
7312
        db      .koi8r
7313
.menu.3:
7314
        dd      .menu.4
7315
        dd      .menu.2
7316
if lang eq ru
7317
        db      '&Linux текст (koi8-r)',0
7318
else
7319
        db      '&Linux text (koi8-r)',0
7320
end if
7321
        db      .unicode
7322
.menu.4:
7323
        dd      0
7324
        dd      .menu.3
7325
        db      '&Unicode',0
7326
 
180 heavyiron 7327
active_screen   dd      0
814 diamond 7328
viewer_tabsize  dd      8
7329
editor_tabsize  dd      8
180 heavyiron 7330
 
7331
ascii2scan:
7332
        times 32 db 0
7333
        db      0x39,0x02,0x03,0x04,0x05,0x06,0x08,0x28,0x0A,0x0B,0x09,0x0D,0x33,0x0C,0x34,0x35
7334
        db      0x0B,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x27,0x27,0x33,0x0D,0x34,0x35
7335
        db      0x03,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
7336
        db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x07,0x0C
7337
        db      0x29,0x1E,0x30,0x2E,0x20,0x12,0x21,0x22,0x23,0x17,0x24,0x25,0x26,0x32,0x31,0x18
7338
        db      0x19,0x10,0x13,0x1F,0x14,0x16,0x2F,0x11,0x2D,0x15,0x2C,0x1A,0x2B,0x1B,0x29,0x00
7339
        db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
7340
        db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
7341
        db      0x21,0x33,0x20,0x16,0x26,0x14,0x27,0x19,0x30,0x10,0x13,0x25,0x2F,0x15,0x24,0x22
7342
        times 48 db 0
7343
        db      0x23,0x2E,0x31,0x12,0x1E,0x1A,0x11,0x2D,0x17,0x18,0x1B,0x1F,0x32,0x28,0x34,0x2C
7344
        db      0x29,0x29,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
814 diamond 7345
scan2ascii:
7346
        db      0,0,'1234567890-=',0,0
7347
        db      'qwertyuiop[]',0,0,'as'
7348
        db      'dfghjkl;',27h,'`',0,'\zxcv'
7349
        db      'bnm,./',0,0,0,' ',0,0,0,0,0,0
180 heavyiron 7350
 
7351
; Клавишные сочетания
7352
; db scancode, reserved
7353
; dw ctrlstate
7354
; dd handler
7355
; ctrlstate: младшие 4 бита - для Shift, следующие - для Ctrl, следующие - для Alt
7356
; 0 = ни одна клавиша не нажата
7357
; 1 = ровно одна нажата
7358
; 2 = обе нажаты
7359
; 3 = левая нажата, правая нет
7360
; 4 = правая нажата, левая нет
7361
panels_ctrlkeys:
7362
        dw      0x48, 0
7363
        dd      panels_OnKey.up
7364
        dw      0x50, 0
7365
        dd      panels_OnKey.down
7366
        dw      0x4B, 0
7367
        dd      panels_OnKey.left
7368
        dw      0x4D, 0
7369
        dd      panels_OnKey.right
474 diamond 7370
        dw      0x51, 0
7371
        dd      panels_OnKey.pgdn
7372
        dw      0x49, 0
7373
        dd      panels_OnKey.pgup
180 heavyiron 7374
        dw      0xF, 0
7375
        dd      panels_OnKey.tab
7376
        dw      0x47, 0
7377
        dd      panels_OnKey.home
7378
        dw      0x4F, 0
7379
        dd      panels_OnKey.end
7380
        dw      0x1C, 0
7381
        dd      panels_OnKey.enter
7382
        dw      0x3D, 0
7383
        dd      panels_OnKey.f3
814 diamond 7384
        dw      0x3E, 0
7385
        dd      panels_OnKey.f4
283 diamond 7386
        dw      0x3F, 0
7387
        dd      panels_OnKey.f5
7388
        dw      0x3F, 1
7389
        dd      panels_OnKey.shift_f5
321 diamond 7390
        dw      0x41, 0
7391
        dd      panels_OnKey.f7
997 diamond 7392
        dw      0x41, 0x100
7393
        dd      panels_OnKey.alt_f7
180 heavyiron 7394
        dw      0x42, 0
7395
        dd      panels_OnKey.f8
283 diamond 7396
        dw      0x43, 0x100
7397
        dd      alt_f9
180 heavyiron 7398
        dw      0x44, 0
7399
        dd      exit
283 diamond 7400
        dw      0x5D, 0
7401
        dd      panels_OnKey.menu
180 heavyiron 7402
repeat 9-3+1
7403
        dw      0x3D+%-1, 0x10
7404
        dd      panels_OnKey.ctrl_f39
7405
end repeat
7406
        dw      0x3B, 0x100
7407
        dd      panels_OnKey.alt_f12
7408
        dw      0x3C, 0x100
7409
        dd      panels_OnKey.alt_f12
7410
        dw      0x58, 0
7411
        dd      F12
7412
        dw      0x13, 0x10
7413
        dd      panels_OnKey.ctrl_r
474 diamond 7414
        dw      2, 0x30
7415
        dd      panels_OnKey.change_mode
7416
        dw      3, 0x30
7417
        dd      panels_OnKey.change_mode
7418
        dw      4, 0x30
7419
        dd      panels_OnKey.change_mode
7420
        dw      5, 0x30
7421
        dd      panels_OnKey.change_mode
7422
repeat 10
7423
        dw      %+1, 0x40
7424
        dd      panels_OnKey.quick_jump
7425
end repeat
7426
        dw      0x52, 0
7427
        dd      panels_OnKey.insert
7428
        dw      0x4E, 0
7429
        dd      panels_OnKey.greyplus
7430
        dw      0x4A, 0
7431
        dd      panels_OnKey.greyminus
517 diamond 7432
        dw      0x37, 0
7433
        dd      panels_OnKey.greyasterisk
180 heavyiron 7434
        db      0
7435
 
7436
viewer_ctrlkeys:
7437
        dw      1, 0
7438
        dd      viewer_OnKey.exit
7439
        dw      0x51, 0
7440
        dd      viewer_OnKey.pgdn
7441
        dw      0x49, 0
7442
        dd      viewer_OnKey.pgup
7443
        dw      0x50, 0
7444
        dd      viewer_OnKey.down
7445
        dw      0x48, 0
7446
        dd      viewer_OnKey.up
7447
        dw      0x4B, 0
7448
        dd      viewer_OnKey.left
7449
        dw      0x4B, 0x10
7450
        dd      viewer_OnKey.ctrl_left
7451
        dw      0x4B, 0x11
7452
        dd      viewer_OnKey.ctrl_shift_left
7453
        dw      0x4C, 0
7454
        dd      viewer_OnKey.exit
7455
        dw      0x4D, 0
7456
        dd      viewer_OnKey.right
7457
        dw      0x4D, 0x10
7458
        dd      viewer_OnKey.ctrl_right
7459
        dw      0x4D, 0x11
7460
        dd      viewer_OnKey.ctrl_shift_right
7461
        dw      0x3C, 0
7462
        dd      viewer_OnKey.f2
7463
        dw      0x3D, 0
7464
        dd      viewer_OnKey.exit
7465
        dw      0x3E, 0
7466
        dd      viewer_OnKey.f4
997 diamond 7467
        dw      0x41, 0
7468
        dd      viewer_OnKey.f7
7469
        dw      0x41, 1
7470
        dd      viewer_OnKey.shift_f7
180 heavyiron 7471
        dw      0x42, 0
7472
        dd      viewer_OnKey.f8
474 diamond 7473
        dw      0x42, 1
7474
        dd      viewer_OnKey.shift_f8
180 heavyiron 7475
        dw      0x44, 0
7476
        dd      viewer_OnKey.exit
7477
        dw      0x47, 0
7478
        dd      viewer_OnKey.home
7479
        dw      0x4F, 0
7480
        dd      viewer_OnKey.end
7481
        dw      0x58, 0
7482
        dd      F12
283 diamond 7483
        dw      0x43, 0x100
7484
        dd      alt_f9
180 heavyiron 7485
        db      0
7486
 
814 diamond 7487
editor_ctrlkeys:
7488
        dw      1, 0
7489
        dd      editor_OnKey.exit_confirm
7490
        dw      0x0E, 0
7491
        dd      editor_OnKey.backspace
7492
        dw      0x3C, 0
7493
        dd      editor_OnKey.f2
997 diamond 7494
        dw      0x41, 0
7495
        dd      editor_OnKey.f7
7496
        dw      0x41, 1
7497
        dd      editor_OnKey.shift_f7
814 diamond 7498
        dw      0x43, 0x100
7499
        dd      alt_f9
7500
        dw      0x44, 0
7501
        dd      editor_OnKey.exit_confirm
7502
        dw      0x44, 1
7503
        dd      editor_OnKey.exit_save
7504
        dw      0x47, 0
7505
        dd      editor_OnKey.home
7506
        dw      0x48, 0
7507
        dd      editor_OnKey.up
7508
        dw      0x49, 0
7509
        dd      editor_OnKey.pgup
7510
        dw      0x4B, 0
7511
        dd      editor_OnKey.left
7512
        dw      0x4D, 0
7513
        dd      editor_OnKey.right
7514
        dw      0x4F, 0
7515
        dd      editor_OnKey.end
7516
        dw      0x50, 0
7517
        dd      editor_OnKey.down
7518
        dw      0x51, 0
7519
        dd      editor_OnKey.pgdn
7520
        dw      0x52, 0
7521
        dd      editor_OnKey.ins
7522
        dw      0x53, 0
7523
        dd      editor_OnKey.del
7524
        dw      0x58, 0
7525
        dd      F12
4933 hidnplayr 7526
        dw      0xF, 0x100      ; Alt+Tab
2633 mario79 7527
        dd      dummy_key
4933 hidnplayr 7528
        dw      0xF, 0x101      ; Shift+Alt+Tab
2633 mario79 7529
        dd      dummy_key
814 diamond 7530
        db      0
7531
 
2633 mario79 7532
dummy_key:
4933 hidnplayr 7533
        ret
2633 mario79 7534
 
180 heavyiron 7535
dirinfo:
7536
                dd      1
7537
.first          dd      0
7538
                dd      0
7539
.size           dd      300
7540
.dirdata        dd      0
7541
                db      0
7542
.name           dd      0
7543
 
7544
readinfo:
7545
                dd      0
7546
.first          dq      0
7547
.size           dd      0
7548
.data           dd      0
7549
                db      0
7550
.name           dd      0
7551
 
283 diamond 7552
writeinfo:
7553
.code           dd      2
7554
.first          dq      0
7555
.size           dd      0
7556
.data           dd      0
7557
                db      0
7558
.name           dd      0
7559
 
180 heavyiron 7560
attrinfo:
7561
                dd      5
7562
                dd      0
7563
                dd      0
7564
                dd      0
7565
                dd      .attr
7566
                db      0
7567
.name           dd      0
7568
 
7569
delinfo:
7570
                dd      8
7571
                dd      0
7572
                dd      0
7573
                dd      0
7574
                dd      0
7575
                db      0
7576
                dd      execdata
7577
 
321 diamond 7578
mkdirinfo:
7579
                dd      9
7580
                dd      0
7581
                dd      0
7582
                dd      0
7583
                dd      0
7584
                db      0
7585
                dd      CopyDestEditBuf+12
7586
 
180 heavyiron 7587
if lang eq ru
7588
compare_names   db      'иИрРмМаАнНсСдД'
7589
else
7590
compare_names   db      'nNxXmMsSuUcCaA'
7591
end if
7592
 
183 diamond 7593
; Здесь начинаются конфигурационные данные - в текущей реализации они зашиты в бинарник
7594
 
180 heavyiron 7595
; Панель
7596
panel_normal_color      db      1Bh
474 diamond 7597
panel_selected_color    db      1Eh
180 heavyiron 7598
panel_border_color      db      1Bh
7599
panel_cursor_color      db      30h
474 diamond 7600
panel_selected_cursor_color db  3Eh
180 heavyiron 7601
panel_header_color      db      1Bh
7602
panel_active_header_color db    30h
7603
column_header_color     db      1Eh
474 diamond 7604
panel_number_color      db      1Bh
7605
panel_numselected_color db      3Eh
180 heavyiron 7606
panel_nscreens_color    db      0Bh
183 diamond 7607
; Диалоги
314 diamond 7608
dialog_colors:
183 diamond 7609
dialog_main_color       db      70h
7610
dialog_border_color     db      70h
7611
dialog_header_color     db      70h
314 diamond 7612
dialog_edit_color       db      30h
7613
dialog_unmodified_edit_color db 38h
183 diamond 7614
dialog_normal_btn_color db      70h
7615
dialog_selected_btn_color db    30h
997 diamond 7616
dialog_list_color       db      70h
7617
dialog_selected_list_color db   0Fh
7618
dialog_scroll_list_color db     70h
314 diamond 7619
; Предупреждения и ошибки
7620
warning_colors:
7621
; !!! должны быть те же поля и в том же порядке, что и для обычных диалогов !!!
7622
warning_main_color      db      4Fh
7623
warning_border_color    db      4Fh
7624
warning_header_color    db      4Fh
7625
warning_edit_color      db      30h
7626
warning_unmodified_edit_color db 38h
7627
warning_normal_btn_color db     4Fh
7628
warning_selected_btn_color db   70h
997 diamond 7629
warning_list_color      db      3Fh
7630
warning_selected_list_color db  70h
7631
warning_scroll_list_color db    3Fh
180 heavyiron 7632
; Меню
7633
menu_normal_color       db      3Fh
7634
menu_selected_color     db      0Fh
7635
menu_highlight_color    db      3Eh
7636
menu_selected_highlight_color db 0Eh
7637
menu_border_color       db      3Fh
7638
menu_header_color       db      3Fh
7639
menu_scrollbar_color    db      3Fh
7640
; Линейка клавиш
7641
keybar_number_color     db      7
7642
keybar_name_color       db      30h
7643
keybar_bgr_color        db      7
7644
; Командная строка
7645
cmdbar_normal_color     db      7
7646
cmdbar_prefix_color     db      7
7647
; Просмотрщик
7648
view_normal_color       db      1Bh
997 diamond 7649
view_selected_color     db      30h
180 heavyiron 7650
view_status_color       db      30h
7651
view_arrows_color       db      1Eh
814 diamond 7652
; Редактор
7653
edit_normal_color       db      1Bh
7654
edit_status_color       db      30h
180 heavyiron 7655
 
7656
; Подсветка файлов
7657
highlight_num_groups    dd      10
7658
highlight_groups        dd      highlight_group0
7659
                dd      highlight_group1
7660
                dd      highlight_group2
7661
                dd      highlight_group3
7662
                dd      highlight_group4
7663
                dd      highlight_group5
7664
                dd      highlight_group6
7665
                dd      highlight_group7
7666
                dd      highlight_group8
7667
                dd      highlight_group9
7668
 
7669
; Формат описания группы подсветки:
7670
virtual at 0
7671
highlight:
474 diamond 7672
        .IncludeAttributes      db ?
180 heavyiron 7673
        .NormalColor            db ?
7674
        .CursorColor            db ?
474 diamond 7675
        .SelectedColor          db ?
7676
        .SelectedCursorColor    db ?
180 heavyiron 7677
        .Mask:                  ; ASCIIZ-string
7678
end virtual
7679
 
283 diamond 7680
; all highlight masks must be in lowercase!
180 heavyiron 7681
highlight_group0:
7682
        db      2
474 diamond 7683
        db      13h, 38h, 0, 0
180 heavyiron 7684
        db      '*',0
7685
highlight_group1:
7686
        db      4
474 diamond 7687
        db      13h, 38h, 0, 0
180 heavyiron 7688
        db      '*',0
7689
highlight_group2:
7690
        db      10h
474 diamond 7691
        db      1Fh, 3Fh, 0, 0
180 heavyiron 7692
        db      '*|..',0
7693
highlight_group3:
7694
        db      10h
474 diamond 7695
        db      0, 0, 0, 0
180 heavyiron 7696
        db      '..',0
7697
highlight_group4:
7698
        db      0
474 diamond 7699
        db      1Ah, 3Ah, 0, 0
814 diamond 7700
        db      '*.exe,*.com,*.bat,*.cmd,*.kex',0
180 heavyiron 7701
highlight_group5:
7702
        db      0
474 diamond 7703
        db      1Ah, 3Ah, 0, 0
814 diamond 7704
        db      '*|*.*,readme,makefile',0
180 heavyiron 7705
highlight_group6:
7706
        db      0
474 diamond 7707
        db      1Dh, 3Dh, 0, 0
180 heavyiron 7708
        db      '*.rar,*.zip,*.[zj],*.[bg7]z,*.[bg]zip,*.tar,*.t[ag]z,*.ar[cj],*.r[0-9][0-9],'
7709
        db      '*.a[0-9][0-9],*.bz2,*.cab,*.msi,*.jar,*.lha,*.lzh,*.ha,*.ac[bei],*.pa[ck],'
7710
        db      '*.rk,*.cpio,*.rpm,*.zoo,*.hqx,*.sit,*.ice,*.uc2,*.ain,*.imp,*.777,*.ufa,*.boa,'
7711
        db      '*.bs[2a],*.sea,*.hpk,*.ddi,*.x2,*.rkv,*.[lw]sz,*.h[ay]p,*.lim,*.sqz,*.chz',0
7712
highlight_group7:
7713
        db      0
474 diamond 7714
        db      16h, 36h, 0, 0
180 heavyiron 7715
        db      '*.bak,*.tmp',0
7716
highlight_group8:
7717
        db      0
474 diamond 7718
        db      17h, 37h, 0, 0
180 heavyiron 7719
        db      '*.asm,*.inc',0
7720
highlight_group9:
7721
        db      10h
474 diamond 7722
        db      1Fh, 3Fh, 0, 0
180 heavyiron 7723
        db      '*',0
7724
 
183 diamond 7725
bConfirmDelete  db      1
321 diamond 7726
bConfirmDeleteIncomplete db 0
183 diamond 7727
 
474 diamond 7728
FolderShortcuts dd      0,0,0,0,0,0,0,0,0,0
7729
 
183 diamond 7730
; Здесь заканчиваются конфигурационные данные
7731
 
7732
bWasE0          db      0
7733
ctrlstate       db      0
474 diamond 7734
MemForImage     dd      0
7735
restore_semicolon dd    0
7736
bForHex         db      0
183 diamond 7737
 
7738
align   4
314 diamond 7739
; Сообщение о обломе при выделении памяти
7740
nomem_dlgdata:
7741
        dd      2
7742
        dd      -1
7743
        dd      -1
7744
        dd      12
7745
        dd      2
7746
        dd      1
7747
        dd      1
7748
        dd      aError
814 diamond 7749
        rb      8
314 diamond 7750
        dd      0
7751
        dd      0
7752
        dd      2
7753
; строка "No memory"
7754
        dd      1
7755
        dd      1,0,10,0
7756
        dd      aNoMemory
7757
        dd      1
7758
; кнопка "Ok"
7759
        dd      2
7760
        dd      4,1,7,1
7761
        dd      aOk
7762
        dd      0xD
7763
 
283 diamond 7764
; диалог копирования
7765
copy_dlgdata:
314 diamond 7766
        dd      1
283 diamond 7767
.x      dd      -1
7768
.y      dd      -1
7769
.width  dd      ?
7770
.height dd      4
7771
        dd      4
7772
        dd      2
7773
        dd      aCopyCaption
7774
.main_color db ?
7775
.border_color db ?
7776
.header_color db ?
7777
        db      0
814 diamond 7778
        dd      ?
283 diamond 7779
        dd      0
7780
        dd      0
7781
        dd      4
7782
; строка 'Копировать "%s" в:'
7783
        dd      1
7784
        dd      1,0
7785
.width2 dd      ?
7786
        dd      0
7787
        dd      CopySourceTextBuf
7788
        dd      0
7789
; поле редактирования с именем файла/папки назначения
7790
        dd      3
7791
        dd      1,1
7792
.width3 dd      ?
7793
        dd      1
7794
        dd      CopyDestEditBuf
7795
.flags0 dd      0
7796
; кнопка "копировать"
7797
.copy_btn:
7798
        dd      2
7799
.copy_x1 dd     ?
7800
        dd      3
7801
.copy_x2 dd     ?
7802
        dd      3
7803
        dd      aCopy
7804
.flags1 dd      18h
7805
; кнопка "отменить"
7806
        dd      2
7807
.cnl_x1 dd      ?
7808
        dd      3
7809
.cnl_x2 dd      ?
7810
        dd      3
7811
        dd      aCancelB
7812
.flags2 dd      8
7813
 
321 diamond 7814
mkdir_dlgdata:
7815
        dd      1
7816
        dd      -1, -1
7817
.width  dd      ?
7818
.height dd      4
7819
        dd      4, 2
7820
        dd      aMkDirCaption
814 diamond 7821
        dd      ?, ?
321 diamond 7822
        dd      0
7823
        dd      0
7824
        dd      4
7825
; Строка "Создать папку"
7826
        dd      1
7827
        dd      1,0,aMkDirLen,0
7828
        dd      aMkDir
7829
        dd      0
7830
; поле редактирования с именем создаваемой папки
7831
        dd      3
7832
        dd      1,1
7833
.width2 dd      ?
7834
        dd      1
7835
        dd      CopyDestEditBuf
7836
.flags0 dd      0xC
7837
; кнопка "Продолжить"
7838
.cont_btn:
7839
        dd      2
7840
.cont_x1 dd     ?
7841
        dd      3
7842
.cont_x2 dd     ?
7843
        dd      3
7844
        dd      a_Continue
7845
.flags1 dd      18h
7846
; кнопка "отменить"
7847
        dd      2
7848
.cnl_x1 dd      ?
7849
        dd      3
7850
.cnl_x2 dd      ?
7851
        dd      3
7852
        dd      aCancelB
7853
.flags2 dd      8
283 diamond 7854
 
474 diamond 7855
; диалог выделения/снятия
7856
mark_dlgdata:
7857
        dd      1
7858
        dd      -1, -1
7859
        dd      37, 1
7860
        dd      4, 2
7861
.title  dd      ?
814 diamond 7862
        dd      ?, ?
474 diamond 7863
        dd      0, 0
7864
        dd      1
7865
; поле редактирования
7866
        dd      3
7867
        dd      1, 0, 35, 0
7868
        dd      enter_string_buf
7869
.flags  dd      ?
7870
 
814 diamond 7871
; диалог быстрого поиска в панели (Alt+буквы)
7872
QuickSearchDlg:
7873
        dd      5
7874
.x      dd      ?
7875
.y      dd      ?
7876
        dd      20, 1
7877
        dd      1, 1
7878
        dd      aSearch
7879
        dd      ?, ?
7880
        dd      0, 0
7881
        dd      1
7882
; поле редактирования
7883
        dd      3
7884
        dd      1, 0, 18, 0
7885
        dd      quick_search_buf
7886
        dd      1Ch
7887
 
997 diamond 7888
; диалог поиска в файле для просмотрщика и редактора
7889
find_in_file_dlgdata:
7890
        dd      1
7891
.x      dd      -1
7892
.y      dd      -1
7893
.width  dd      ?
7894
.height dd      7
7895
        dd      4, 2
7896
        dd      aSearch
7897
        dd      ?, ?
7898
        dd      0, 0
7899
        dd      8
7900
; Строка "Искать"
7901
        dd      1
7902
        dd      1,0,aSearchForLen,0
7903
        dd      aSearchFor
7904
        dd      0
7905
; поле редактирования с текстом для поиска
7906
        dd      3
7907
        dd      1,1
7908
.width2 dd      ?
7909
        dd      1
7910
        dd      SearchStringEditBuf
7911
.flags0 dd      0xC
7912
; горизонтальный разделитель
7913
        dd      4
7914
        dd      -1,2
7915
        dd      -1,2
7916
        dd      0
7917
        dd      0
7918
; флажок "Учитывать регистр"
7919
        dd      5
7920
        dd      1,3
7921
        dd      -1,3
7922
        dd      aCaseSensitive
7923
.flags_case dd  18h     ; default: search is case sensitive
7924
; флажок "Только целые слова"
7925
        dd      5
7926
        dd      1,4
7927
        dd      -1,4
7928
        dd      aWholeWords
7929
.flags_whole dd 8       ; default: do NOT search whole words only
7930
; горизонтальный разделитель
7931
        dd      4
7932
        dd      -1,5
7933
        dd      -1,5
7934
        dd      0
7935
        dd      0
7936
; кнопка "Искать"
7937
.search_btn:
7938
        dd      2
7939
.search_x1 dd   ?
7940
        dd      6
7941
.search_x2 dd   ?
7942
        dd      6
7943
        dd      aSearchB
7944
.flags1 dd      18h
7945
; кнопка "отменить"
7946
        dd      2
7947
.cnl_x1 dd      ?
7948
        dd      6
7949
.cnl_x2 dd      ?
7950
        dd      6
7951
        dd      aCancelB
7952
.flags2 dd      8
7953
 
7954
; первый диалог поиска в файлах (запрос)
7955
filesearch_query_template:
7956
        dd      1
7957
.x      dd      ?
7958
.y      dd      ?
7959
.width  dd      ?
7960
.height dd      9
7961
        dd      4, 2
7962
        dd      aFileSearch
7963
        dd      ?
7964
        dd      0
7965
        dd      0, 0
7966
        dd      10
7967
; строка-приглашение для ввода маски
7968
        dd      1
7969
        dd      1,0,aFileMasksLen,0
7970
        dd      aFileMasks
7971
        dd      0
7972
; поле ввода для маски
7973
        dd      3
7974
        dd      1, 1
7975
.width2 dd      ?
7976
        dd      1
7977
.editptr1 dd    ?
7978
        dd      0xC
7979
; строка-приглашение для текста поиска
7980
        dd      1
7981
        dd      1,2,aContainingTextLen,2
7982
        dd      aContainingText
7983
        dd      0
7984
; поле ввода для текста поиска
7985
        dd      3
7986
        dd      1, 3
7987
.width3 dd      ?
7988
        dd      3
7989
.editptr2 dd    ?
7990
        dd      8
7991
; горизонтальный разделитель
7992
        dd      4
7993
        dd      -1,4
7994
        dd      -1,4
7995
        dd      0
7996
        dd      0
7997
; флажок "Учитывать регистр"
7998
        dd      5
7999
        dd      1,5
8000
        dd      -1,5
8001
        dd      aCaseSensitive
8002
.flags_case dd  ?       ; will be initialized from find_in_file_dlgdata
8003
; флажок "Только целые слова"
8004
        dd      5
8005
        dd      1,6
8006
        dd      -1,6
8007
        dd      aWholeWords
8008
.flags_whole dd ?       ; will be initialized from find_in_file_dlgdata
8009
; горизонтальный разделитель
8010
        dd      4
8011
        dd      -1,7
8012
        dd      -1,7
8013
        dd      0
8014
        dd      0
8015
; кнопка "Искать"
8016
.search_btn:
8017
        dd      2
8018
.search_x1 dd   ?
8019
        dd      8
8020
.search_x2 dd   ?
8021
        dd      8
8022
        dd      aSearchB
8023
        dd      18h
8024
; кнопка "отменить"
8025
        dd      2
8026
.cnl_x1 dd      ?
8027
        dd      8
8028
.cnl_x2 dd      ?
8029
        dd      8
8030
        dd      aCancelB
8031
        dd      8
8032
.size = $ - filesearch_query_template
8033
 
8034
; второй диалог поиска в файлах (сканирование)
8035
filesearch_search_template:
8036
        dd      1
8037
.x      dd      ?
8038
.y      dd      ?
8039
.width  dd      ?
8040
.height dd      ?
8041
        dd      4, 2
8042
.caption dd     ?
8043
        dd      ?
8044
        dd      0
8045
        dd      0, 0
8046
        dd      9
8047
; список найденных файлов
8048
        dd      6
8049
        dd      0, 0
8050
.width1 dd      ?
8051
.height1 dd     ?
8052
.data1  dd      ?
8053
        dd      0
8054
; горизонтальный разделитель
8055
        dd      4
8056
        dd      -1
8057
.y2     dd      ?
8058
        dd      -1
8059
        dd      ?
8060
        dd      0, 0
8061
; строка "Поиск  в:" либо "Поиск закончен..."
8062
        dd      1
8063
        dd      1
8064
.y3     dd      ?
8065
.width3 dd      ?
8066
        dd      ?
8067
.data3  dd      ?
8068
        dd      0
8069
; строка с текущей папкой
8070
        dd      1
8071
.x4     dd      ?
8072
.y4     dd      ?
8073
.width4 dd      ?
8074
        dd      ?
8075
.data4  dd      ?
8076
        dd      0
8077
; горизонтальный разделитель
8078
        dd      4
8079
        dd      -1
8080
.y5     dd      ?
8081
        dd      -1
8082
        dd      ?
8083
        dd      0, 0
8084
; кнопки
8085
.btn1:
8086
        dd      2
8087
.btn1x1 dd      ?
8088
.btn1y  dd      ?
8089
.btn1x2 dd      ?
8090
        dd      ?
8091
        dd      aNewSearch
8092
        dd      8
8093
.btn2:
8094
        dd      2
8095
.btn2x1 dd      ?
8096
.btn2y  dd      ?
8097
.btn2x2 dd      ?
8098
        dd      ?
8099
        dd      aGoto
8100
        dd      1Ch
8101
.btn3:
8102
        dd      2
8103
.btn3x1 dd      ?
8104
.btn3y  dd      ?
8105
.btn3x2 dd      ?
8106
        dd      ?
8107
        dd      aView
8108
        dd      8
8109
.btn4:
8110
        dd      2
8111
.btn4x1 dd      ?
8112
.btn4y  dd      ?
8113
.btn4x2 dd      ?
8114
        dd      ?
8115
        dd      aCancelB2
8116
        dd      8
8117
.size = $ - filesearch_search_template
8118
 
321 diamond 8119
RetryOrCancelBtn:
8120
        dd      aRetry
8121
        dd      a_Cancel
8122
DeleteOrKeepBtn:
8123
        dd      a_Delete
8124
        dd      aKeep
8125
RetryOrIgnoreBtn:
8126
        dd      aRetry
8127
        dd      aIgnore
474 diamond 8128
DeleteOrCancelBtn:
8129
        dd      a_Delete
8130
        dd      a_Cancel
8131
DeleteErrorBtn:
8132
        dd      aRetry
997 diamond 8133
SkipOrCancelBtn:
474 diamond 8134
        dd      aSkip
8135
        dd      aSkipAll
8136
        dd      a_Cancel
517 diamond 8137
ContinueBtn:
8138
        dd      aContinue
814 diamond 8139
EditorExitBtn:
8140
        dd      aSave
8141
        dd      aDontSave
8142
        dd      aContinueEdit
997 diamond 8143
YesOrNoBtn:
8144
        dd      aYes
8145
        dd      aNo
814 diamond 8146
 
589 diamond 8147
aCannotOpenFile_ptr     dd      aCannotOpenFile
997 diamond 8148
aCannotCreateThread_ptr dd      aCannotCreateThread
8149
ConfirmCancelMsg        dd      aConfirmCancel
814 diamond 8150
EditConfigErr_ptr:
8151
        dd      aEditConfigErr1
8152
        dd      aEditConfigErr2
183 diamond 8153
if lang eq ru
8154
aDeleteCaption          db      'Удаление',0
474 diamond 8155
aConfirmDeleteText      db      'Вы хотите удалить',0
8156
aDeleteFolder           db      ' папку',0
183 diamond 8157
aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
474 diamond 8158
aDeleteFile             db      ' файл',0
283 diamond 8159
aCancelB                db      '[ Отменить ]',0
8160
aCancelBLength = $ - aCancelB - 1
997 diamond 8161
aCancelB2               db      '[ Отмена ]',0
8162
aCancelB2Length = $ - aCancelB2 - 1
283 diamond 8163
aCopyCaption            db      'Копирование',0
8164
aCopy                   db      '[ Копировать ]',0
8165
aCopyLength = $ - aCopy - 1
321 diamond 8166
a_Continue              db      '[ Продолжить ]',0
8167
a_ContinueLength = $ - a_Continue - 1
517 diamond 8168
aCopy1                  db      'Копировать ',0
8169
aCopy2                  db      ' в:',0
314 diamond 8170
aError                  db      'Ошибка',0
8171
aContinue               db      'Продолжить',0
8172
aRetry                  db      'Повторить',0
321 diamond 8173
a_Cancel                db      'Отменить',0
8174
a_Delete                db      'Удалить',0
474 diamond 8175
aSkip                   db      'Пропустить',0
8176
aSkipAll                db      'Пропустить все',0
997 diamond 8177
aYes                    db      'Да',0
8178
aNo                     db      'Нет',0
314 diamond 8179
error0msg               db      'Странно... Нет ошибки',0
8180
error1msg               db      'Странно... Не определена база и/или раздел жёсткого диска',0
8181
error2msg               db      'Функция не поддерживается для данной файловой системы',0
8182
error3msg               db      'Неизвестная файловая система',0
8183
error4msg               db      'Странно... Ошибка 4',0
8184
error5msg               db      'Файл не найден',0
8185
error6msg               db      'Файл закончился',0
8186
error7msg               db      'Странно... Указатель вне памяти приложения',0
8187
error8msg               db      'Диск заполнен',0
8188
error9msg               db      'Файловая структура разрушена',0
8189
error10msg              db      'Доступ запрещён',0
8190
error11msg              db      'Ошибка устройства',0
8191
error30msg              db      'Недостаточно памяти',0
8192
error31msg              db      'Файл не является исполняемым',0
8193
error32msg              db      'Слишком много процессов',0
8194
aUnknownError           db      'Неизвестный код ошибки: ',0
8195
aCannotReadFolder       db      'Не могу прочитать папку',0
321 diamond 8196
aRunError               db      'Ошибка при запуске программы:',0
8197
aFileNameTooBig         db      'Полное имя файла слишком длинное',0
8198
aFolderNameTooBig       db      'Полное имя папки слишком длинное',0
8199
aCmdLineTooBig          db      'Командная строка превышает границу OS в 256 символов',0
8200
aCannotCopyToSelf       db      'Файл не может быть скопирован в самого себя',0
8201
aCannotReadFile         db      'Не могу прочитать файл',0
8202
aIncompleteFile         db      'Был получен неполный файл. Удалить его?',0
8203
aKeep                   db      'Оставить',0
8204
aCannotWriteFile        db      'Не могу записать в файл',0
8205
aCannotDeleteFile       db      'Не могу удалить файл',0
8206
aCannotDeleteFolder     db      'Не могу удалить папку',0
517 diamond 8207
aNotFolder              db      'не является папкой',0
321 diamond 8208
aIgnore                 db      'Игнорировать',0
8209
aMkDirCaption           db      'Создание папки',0
8210
aMkDir                  db      'Создать папку',0
8211
aMkDirLen = $ - aMkDir - 1
8212
aCannotMakeFolder       db      'Не могу создать папку',0
474 diamond 8213
aName                   db      3,'Имя'
8214
aSize                   db      6,'Размер'
8215
aDate                   db      4,'Дата'
8216
aTime                   db      5,'Время'
8217
aCannotLoadDLL          db      'Не могу загрузить DLL',0
589 diamond 8218
aCannotLoadPlugin       db      'Не могу загрузить плагин',0
474 diamond 8219
aInvalidDLL             db      'Файл не найден или имеет неверный формат',0
8220
aMissingExport          db      'Необходимая функция не найдена',0
8221
aInitFailed             db      'Ошибка при инициализации',0
8222
aIncompatibleVersion    db      'Несовместимая версия',0
8223
aTables                 db      'Таблицы',0
8224
aSelect                 db      'Пометить',0
8225
aDeselect               db      'Снять',0
589 diamond 8226
aCannotOpenFile         db      'Ошибка при открытии файла',0
997 diamond 8227
aCannotCreateThread     db      'Ошибка при создании потока',0
589 diamond 8228
aCannotSetFolder        db      'Не могу зайти в папку',0
814 diamond 8229
aSearch                 db      'Поиск',0
997 diamond 8230
aSearchB                db      '[ Искать ]',0
8231
aSearchBLength = $ - aSearchB - 1
8232
aSearchFor              db      'Искать',0
8233
aSearchForLen = $ - aSearchFor - 1
8234
aCaseSensitive          db      'Учитывать регистр',0
8235
aWholeWords             db      'Только целые слова',0
8236
aReverseSearch          db      'Обратный поиск',0
8237
aStringNotFound         db      'Строка не найдена',0
8238
aFileSearch             db      'Поиск файла',0
8239
aFileMasks              db      'Одна или несколько масок файлов:',0
8240
aFileMasksLen = $ - aFileMasks - 1
8241
aContainingText         db      'Содержащих текст:',0
8242
aContainingTextLen = $ - aContainingText - 1
8243
aSearchingIn            db      'Поиск "" в:',0
8244
aSearchingInLen = $ - aSearchingIn - 1
8245
aSearchDone             db      'Поиск закончен. Найдено ? файл(ов)',0
8246
aSearchDoneLen = $ - aSearchDone - 1
8247
aNewSearch              db      '[ Новый поиск ]',0
8248
aNewSearchLen = $ - aNewSearch - 1
8249
aGoto                   db      '[ Перейти ]',0
8250
aGotoLen = $ - aGoto - 1
8251
aView                   db      '[ Смотреть ]',0
8252
aViewLen = $ - aView - 1
814 diamond 8253
aEditConfigErr1         db      'Ошибка в конфигурации плагинов для редактора.',0
8254
aEditConfigErr2         db      'Попробуйте убрать лишние плагины.',0
8255
aEditNoMemory           db      'Файл слишком велик для загрузки в редактор.',0
8256
aLine                   db      '  Строка'
8257
aCol                    db      '   Кол '
8258
aEditorTitle            db      'Редактор',0
8259
aFileModified           db      'Файл был изменён',0
8260
aSave                   db      'Сохранить',0
8261
aDontSave               db      'Не сохранять',0
8262
aContinueEdit           db      'Продолжить редактирование',0
8263
aCannotSaveToPlugin     db      'Сохранение файлов на панелях плагинов не поддерживается',0
997 diamond 8264
aCannotSearchOnPlugin   db      'Поиск на панелях плагинов не поддерживается',0
8265
aCancelled              db      'Действие было прервано',0
8266
aConfirmCancel          db      'Вы действительно хотите отменить действие?',0
183 diamond 8267
else
8268
aDeleteCaption          db      'Delete',0
474 diamond 8269
aConfirmDeleteText      db      'Do you wish to delete',0
8270
aDeleteFolder           db      ' the folder',0
183 diamond 8271
aConfirmDeleteTextMax = $ - aConfirmDeleteText - 2
474 diamond 8272
aDeleteFile             db      ' the file',0
183 diamond 8273
aDelete                 db      ' Delete ',0
8274
aDeleteLength = $ - aDelete - 1
8275
aCancel                 db      ' Cancel ',0
8276
aCancelLength = $ - aCancel - 1
283 diamond 8277
aCancelB                db      '[ Cancel ]',0
8278
aCancelBLength = $ - aCancelB - 1
1035 diamond 8279
aCancelB2 = aCancelB
8280
aCancelB2Length = $ - aCancelB2 - 1
283 diamond 8281
aCopyCaption            db      'Copy',0
8282
aCopy                   db      '[ Copy ]',0
8283
aCopyLength = $ - aCopy - 1
321 diamond 8284
a_Continue              db      '[ Continue ]',0
8285
a_ContinueLength = $ - a_Continue - 1
283 diamond 8286
aCopy1                  db      'Copy "',0
8287
aCopy2                  db      '" to:',0
314 diamond 8288
aError                  db      'Error',0
8289
aContinue               db      'Continue',0
8290
aRetry                  db      'Retry',0
321 diamond 8291
a_Cancel                db      'Cancel',0
8292
a_Delete                db      'Delete',0
474 diamond 8293
aSkip                   db      'Skip',0
8294
aSkipAll                db      'Skip all',0
997 diamond 8295
aYes                    db      'Yes',0
8296
aNo                     db      'No',0
314 diamond 8297
error0msg               db      'Strange... No error',0
8298
error1msg               db      'Strange... Hard disk base and/or partition not defined',0
8299
error2msg               db      'The file system does not support this function',0
8300
error3msg               db      'Unknown file system',0
8301
error4msg               db      'Strange... Error 4',0
8302
error5msg               db      'File not found',0
8303
error6msg               db      'End of file',0
8304
error7msg               db      'Strange... Pointer lies outside of application memory',0
8305
error8msg               db      'Disk is full',0
8306
error9msg               db      'File structure is destroyed',0
8307
error10msg              db      'Access denied',0
8308
error11msg              db      'Device error',0
8309
error30msg              db      'Not enough memory',0
8310
error31msg              db      'File is not executable',0
8311
error32msg              db      'Too many processes',0
8312
aUnknownError           db      'Unknown error code: ',0
8313
aCannotReadFolder       db      'Cannot read folder',0
321 diamond 8314
aRunError               db      'Cannot execute program:',0
8315
aFileNameTooBig         db      'Full file name is too long',0
8316
aFolderNameTooBig       db      'Full folder name is too long',0
8317
aCmdLineTooBig          db      'Command line is too long (OS limit is 256 symbols)',0
8318
aCannotCopyToSelf       db      'File cannot be copied onto itself',0
8319
aCannotReadFile         db      'Cannot read file',0
8320
aIncompleteFile         db      'Incomplete file was retrieved. Delete it?',0
8321
aKeep                   db      'Keep',0
474 diamond 8322
aCannotWriteFile        db      'Cannot write to the file',0
8323
aCannotDeleteFile       db      'Cannot delete the file',0
8324
aCannotDeleteFolder     db      'Cannot delete the folder',0
517 diamond 8325
aNotFolder              db      'is not a folder',0
321 diamond 8326
aIgnore                 db      'Ignore',0
8327
aMkDirCaption           db      'Make folder',0
8328
aMkDir                  db      'Create the folder',0
8329
aMkDirLen = $ - aMkDir - 1
8330
aCannotMakeFolder       db      'Cannot create folder',0
474 diamond 8331
aName                   db      4,'Name'
8332
aSize                   db      4,'Size'
8333
aDate                   db      4,'Date'
8334
aTime                   db      4,'Time'
8335
aCannotLoadDLL          db      'Cannot load DLL',0
589 diamond 8336
aCannotLoadPlugin       db      'Cannot load plugin',0
474 diamond 8337
aInvalidDLL             db      'File is not found or invalid',0
8338
aMissingExport          db      'Required function is not present',0
8339
aInitFailed             db      'Initialization failed',0
8340
aIncompatibleVersion    db      'Incompatible version',0
8341
aTables                 db      'Tables',0
8342
aSelect                 db      'Select',0
8343
aDeselect               db      'Deselect',0
589 diamond 8344
aCannotOpenFile         db      'Cannot open the file',0
997 diamond 8345
aCannotCreateThread     db      'Cannot create a thread',0
8346
aCannotSetFolder        db      'Cannot enter to the folder',0
814 diamond 8347
aSearch                 db      'Search',0
997 diamond 8348
aSearchB                db      '[ Search ]',0
8349
aSearchBLength = $ - aSearchB - 1
8350
aSearchFor              db      'Search for',0
8351
aSearchForLen = $ - aSearch - 1
8352
aCaseSensitive          db      'Case sensitive',0
8353
aWholeWords             db      'Whole words',0
8354
aReverseSearch          db      'Reverse search',0
8355
aStringNotFound         db      'Could not find the string',0
8356
aFileSearch             db      'Find file',0
8357
aFileMasks              db      'A file mask or several file masks:',0
1035 diamond 8358
aFileMasksLen = $ - aFileMasks - 1
997 diamond 8359
aContainingText         db      'Containing text:',0
1035 diamond 8360
aContainingTextLen = $ - aContainingText - 1
997 diamond 8361
aSearchingIn            db      'Searching "" in:',0
8362
aSearchingInLen = $ - aSearchingIn - 1
8363
aSearchDone             db      'Search done. Found ? file(s)',0
8364
aSearchDoneLen = $ - aSearchDone - 1
8365
aNewSearch              db      '[ New search ]',0
8366
aNewSearchLen = $ - aNewSearch - 1
8367
aGoto                   db      '[ Go to ]',0
8368
aGotoLen = $ - aGoto - 1
8369
aView                   db      '[ View ]',0
8370
aViewLen = $ - aView - 1
814 diamond 8371
aEditConfigErr1         db      'Error in configuration of plugins for the editor.',0
8372
aEditConfigErr2         db      'Try to remove unnecessary plugins.',0
1035 diamond 8373
aEditNoMemory           db      'The file is too big for the editor.',0
814 diamond 8374
aLine                   db      '    Line'
8375
aCol                    db      '   Col '
8376
aEditorTitle            db      'Editor',0
8377
aFileModified           db      'File has been modified',0
8378
aSave                   db      'Save',0
8379
aDontSave               db      'Do not save',0
8380
aContinueEdit           db      'Continue editing',0
8381
aCannotSaveToPlugin     db      'Saving is not supported for plugin panels',0
1035 diamond 8382
aCannotSearchOnPlugin   db      'The search on plugin panels is not supported yet',0
997 diamond 8383
aCancelled              db      'Operation has been interrupted',0
8384
aConfirmCancel          db      'Do you really want to cancel it?',0
183 diamond 8385
end if
474 diamond 8386
 
314 diamond 8387
aOk                     db      'OK',0
474 diamond 8388
aNoMemory               db      'No memory!'
8389
nullstr                 db      0
589 diamond 8390
aUntitled               db      'untitled',0
8391
aDotDot                 db      '..',0,0
474 diamond 8392
standard_dll_path:
631 diamond 8393
libini_name             db      '/sys/lib/'
474 diamond 8394
standard_dll_path_size = $ - standard_dll_path
8395
                        db      'libini.obj',0
8396
aStart                  db      'START',0
8397
aLibInit                db      'lib_init',0
8398
aVersion                db      'version',0
1102 diamond 8399
aIniGetInt              db      'ini_get_int',0
8400
aIniGetStr              db      'ini_get_str',0
8401
aIniSetInt              db      'ini_set_int',0
8402
aIniEnumKeys            db      'ini_enum_keys',0
589 diamond 8403
aPluginLoad             db      'plugin_load',0
8404
aPluginUnload           db      'plugin_unload',0
8405
aGetattr                db      'getattr',0
8406
aOpen                   db      'open',0
8407
aRead                   db      'read',0
8408
aSetpos                 db      'setpos',0
8409
aClose                  db      'close',0
8410
aOpenFilePlugin         db      'OpenFilePlugin',0
8411
aClosePlugin            db      'ClosePlugin',0
8412
aReadFolder             db      'ReadFolder',0
8413
aSetFolder              db      'SetFolder',0
8414
aGetOpenPluginInfo      db      'GetOpenPluginInfo',0
8415
aGetPanelTitle          db      'GetPanelTitle',0
8416
aGetFiles               db      'GetFiles',0
814 diamond 8417
aEditInfoSize           db      'EditInfoSize',0
183 diamond 8418
 
474 diamond 8419
aConfirmations          db      'Confirmations',0
8420
aConfirmDelete          db      'Delete',0
8421
aConfirmDeleteIncomplete db     'DeleteIncomplete',0
8422
 
589 diamond 8423
aPanels                 db      'Panels',0
8424
aLeftViewMode           db      'LeftViewMode',0
8425
aRightViewMode          db      'RightViewMode',0
1045 diamond 8426
aLeftSortMode           db      'LeftSortMode',0
8427
aRightSortMode          db      'RightSortMode',0
589 diamond 8428
 
814 diamond 8429
aEditor                 db      'Editor',0
8430
aEolStyle               db      'EOLStyle',0
8431
 
474 diamond 8432
aAssociations           db      'Associations',0
589 diamond 8433
aPlugins                db      'Plugins',0
474 diamond 8434
aMenu                   db      'Menu',0
8435
aFolderShortcuts        db      'FolderShortcuts',0
8436
aShortcut               db      'Shortcut'
8437
.d                      db      '0',0
8438
 
8439
align 4
8440
ini_import:
8441
ini.get_int     dd      aIniGetInt
8442
ini.get_str     dd      aIniGetStr
517 diamond 8443
ini.enum_keys   dd      aIniEnumKeys
589 diamond 8444
ini.set_int     dd      aIniSetInt
474 diamond 8445
                dd      0
8446
 
589 diamond 8447
plugin_exported:
8448
        dd      aPluginUnload
8449
        dd      aGetattr
8450
        dd      aOpen
8451
        dd      aRead
8452
        dd      aSetpos
8453
        dd      aClose
8454
        dd      aOpenFilePlugin
8455
        dd      aClosePlugin
8456
        dd      aReadFolder
8457
        dd      aSetFolder
8458
        dd      aGetOpenPluginInfo
8459
        dd      aGetPanelTitle
8460
        dd      aGetFiles
814 diamond 8461
        dd      aEditInfoSize
589 diamond 8462
        dd      0
8463
plugin_exported_default:
8464
        dd      plugin_unload_default
8465
        dd      getattr_default
8466
        dd      open_default
8467
        dd      read
8468
        dd      setpos_default
8469
        dd      close
8470
        dd      OpenFilePlugin_default
8471
        dd      ClosePlugin_default
8472
        dd      ReadFolder_default
8473
        dd      SetFolder_default
8474
        dd      GetOpenPluginInfo_default
8475
        dd      GetPanelTitle_default
8476
        dd      GetFiles_default
814 diamond 8477
        dd      0       ; default value for EditInfoSize
589 diamond 8478
 
8479
kfar_info:
8480
        dd      .size
8481
        dd      version_dword
8482
        dd      open
631 diamond 8483
        dd      open2
589 diamond 8484
        dd      read
8485
        dd      -1      ; write: to be implemented
8486
        dd      seek
631 diamond 8487
        dd      tell
589 diamond 8488
        dd      -1      ; flush: to be implemented
8489
        dd      filesize
8490
        dd      close
8491
        dd      xpgalloc
8492
        dd      xpgrealloc
8493
        dd      pgfree
8494
        dd      getfreemem
8495
        dd      libini_alloc
8496
        dd      libini_realloc
8497
        dd      libini_free
8498
        dd      menu
8499
        dd      menu_centered_in
8500
        dd      DialogBox
8501
        dd      SayErr
8502
        dd      Message
8503
        dd      cur_width
8504
.size = $ - kfar_info
8505
 
8506
plugins         dd      0
8507
num_plugins     dd      0
8508
alloc_plugins   dd      0
8509
 
814 diamond 8510
EditPlugInfo    dd      0
8511
EditEOLStyle    db      edit.eol_unix
8512
 
474 diamond 8513
virtual at 0
589 diamond 8514
PluginInfo:
8515
.unload         dd      ?
8516
.getattr        dd      ?
8517
.open           dd      ?
8518
.read           dd      ?
8519
.setpos         dd      ?
8520
.close          dd      ?
8521
.OpenFilePlugin dd      ?
8522
.ClosePlugin    dd      ?
8523
.ReadFolder     dd      ?
8524
.SetFolder      dd      ?
8525
.GetOpenPluginInfo dd   ?
8526
.GetPanelTitle  dd      ?
8527
.GetFiles       dd      ?
814 diamond 8528
.EditInfoSize   dd      ?
8529
.EditInfoOffs   dd      ?
589 diamond 8530
.size = $
8531
end virtual
8532
 
8533
virtual at 0
474 diamond 8534
PanelMode:
8535
; up to 16 columns on one panel
8536
.NumColumns     dd      ?
8537
; available column types:
8538
COLUMN_TYPE_NONE = 0
8539
COLUMN_TYPE_NAME = 1
8540
        COLUMN_NAME_MARK = 10h          ; (reserved)
8541
        COLUMN_NAME_NOPATH = 20h        ; (reserved)
8542
        COLUMN_NAME_RIGHTALIGN = 40h    ; (reserved)
8543
COLUMN_TYPE_SIZE = 2
8544
        COLUMN_SIZE_COMMA = 10h         ; (reserved)
8545
COLUMN_TYPE_PACKED_SIZE = 3             ; (reserved)
8546
COLUMN_TYPE_DATE = 4
8547
COLUMN_TYPE_TIME = 5
8548
COLUMN_TYPE_DATETIME = 6                ; (reserved)
8549
COLUMN_TYPE_DATETIME_CREATION = 7       ; (reserved)
8550
COLUMN_TYPE_DATETIME_ACCESS = 8         ; (reserved)
8551
COLUMN_TYPE_ATTRIBUTES = 9              ; (reserved)
8552
COLUMN_TYPE_DESCRIPTION = 10            ; (reserved)
8553
COLUMN_TYPE_OWNER = 11                  ; (reserved)
8554
COLUMN_TYPE_NUMLINKS = 12               ; (reserved)
8555
COLUMN_TYPE_CUSTOM = 13                 ; (reserved)
8556
.ColumnTypes    rb      16
8557
 
8558
.ColumnWidths   rb      16
8559
.bFullScreen    db      ?               ; (reserved)
8560
.bAlignExtensions db    ?
8561
                rb      2
8562
.size = $
8563
end virtual
8564
 
8565
align 4
8566
column_headers:
8567
        dd      nullstr
8568
        dd      aName
8569
        dd      aSize
8570
        dd      nullstr
8571
        dd      aDate
8572
        dd      aTime
8573
draw_column_proc:
8574
        dd      draw_empty_column
8575
        dd      draw_name_column
8576
        dd      draw_size_column
8577
        dd      -1
8578
        dd      draw_date_column
8579
        dd      draw_time_column
8580
colmodes:
8581
; режим 0 : NM,SC,D
8582
        dd      3
8583
        db      COLUMN_TYPE_NAME+COLUMN_NAME_MARK, COLUMN_TYPE_SIZE+COLUMN_SIZE_COMMA
8584
                db      COLUMN_TYPE_DATE, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
8585
        db      0, 10, 8
8586
                times 13 db 0
8587
        db      0, 1
8588
                times 2 db 0
8589
; режим 1 : N,N,N
8590
        dd      3
8591
        db      COLUMN_TYPE_NAME, COLUMN_TYPE_NAME, COLUMN_TYPE_NAME
8592
                times 13 db 0
8593
        times 16 db 0
8594
        db      0, 1
8595
                times 2 db 0
8596
; режим 2 : N,N
8597
        dd      2
8598
        db      COLUMN_TYPE_NAME, COLUMN_TYPE_NAME
8599
                times 14 db 0
8600
        times 16 db 0
8601
        db      0, 0
8602
                times 2 db 0
8603
; режим 3 : N,S,D,T
8604
        dd      4
8605
        db      COLUMN_TYPE_NAME, COLUMN_TYPE_SIZE, COLUMN_TYPE_DATE, COLUMN_TYPE_TIME
8606
                times 12 db 0
8607
        db      0, 6, 8, 5
8608
                times 12 db 0
8609
        db      0, 1
8610
                times 2 db 0
8611
; режим 4 : N,S
8612
        dd      2
8613
        db      COLUMN_TYPE_NAME, COLUMN_TYPE_SIZE
8614
                times 14 db 0
8615
        db      0, 6
8616
                times 14 db 0
8617
        db      0, 0
8618
                times 2 db 0
8619
; режим 5 : N,S,P,DM,DC,DA,A
8620
; режим 6 : N,Z
8621
; режим 7 : N,S,Z
8622
; режим 8 : N,S,O
8623
; режим 9 : N,S,LN
8624
 
180 heavyiron 8625
execinfo:
8626
        dd      7
8627
        dd      0
8628
execparams dd   0
8629
        dd      0
8630
        dd      0
8631
        db      0
8632
execptr dd      ?
8633
 
8634
IncludeIGlobals
8635
 
8636
i_end:
8637
 
8638
IncludeUGlobals
8639
 
8640
execdata rb     1024
321 diamond 8641
execdataend:
180 heavyiron 8642
        align   4
8643
attrinfo.attr   rb      40
8644
 
8645
panel1_data:
8646
panel1_left     dd      ?
8647
panel1_top      dd      ?
8648
panel1_width    dd      ?
8649
panel1_height   dd      ?
8650
panel1_index    dd      ?
8651
panel1_start    dd      ?
8652
panel1_colsz    dd      ?
8653
panel1_colst    dd      ?
8654
panel1_sortmode db      ?
8655
                rb      3
8656
panel1_nfa      dd      ?
8657
panel1_numfiles dd      ?
8658
panel1_files    dd      ?
589 diamond 8659
panel1_hPlugin  dd      ?
8660
panel1_hFile    dd      ?
8661
panel1_parents          dd      ?
8662
panel1_parents_sz       dd      ?
8663
panel1_parents_alloc    dd      ?
8664
panel1_colmode          dd      ?
8665
panel1_colwidths        rd      16+1
8666
panel1_total_num        dd      ?
8667
panel1_total_size       dq      ?
8668
panel1_selected_num     dd      ?
8669
panel1_selected_size    dq      ?
8670
panel1_plugin_info:
8671
panel1_plugin_flags     dd      ?
180 heavyiron 8672
panel1_dir      rb      1024
8673
 
8674
panel2_data:
8675
panel2_left     dd      ?
8676
panel2_top      dd      ?
8677
panel2_width    dd      ?
8678
panel2_height   dd      ?
8679
panel2_index    dd      ?
8680
panel2_start    dd      ?
8681
panel2_colsz    dd      ?
8682
panel2_colst    dd      ?
8683
panel2_sortmode db      ?
8684
                rb      3
8685
panel2_nfa      dd      ?
8686
panel2_numfiles dd      ?
8687
panel2_files    dd      ?
589 diamond 8688
panel2_hPlugin  dd      ?
8689
panel2_hFile    dd      ?
8690
panel2_parents          dd      ?
8691
panel2_parents_sz       dd      ?
8692
panel2_parents_alloc    dd      ?
8693
panel2_colmode          dd      ?
8694
panel2_colwidths        rd      16+1
8695
panel2_total_num        dd      ?
8696
panel2_total_size       dq      ?
8697
panel2_selected_num     dd      ?
8698
panel2_selected_size    dq      ?
8699
panel2_plugin_info:
8700
panel2_plugin_flags     dd      ?
180 heavyiron 8701
panel2_dir      rb      1024
8702
 
283 diamond 8703
;console_data    rb      max_width*max_height*2
180 heavyiron 8704
 
814 diamond 8705
nomem_dlgsavearea       rb      8 + (12+4)*(3+3)*2
314 diamond 8706
 
814 diamond 8707
quicksearch_savearea    rb      22*3*2
8708
quicksearch_maxlen = 64
8709
quick_search_buf        rb      12 + quicksearch_maxlen
8710
 
180 heavyiron 8711
cur_header      rb      max_width
8712
tmp             dd      ?
8713
 
8714
skinh           dd      ?
8715
std_colors      rd      10
8716
 
283 diamond 8717
min_y           dd      ?
8718
max_y           dd      ?
8719
min_x           dd      ?
8720
max_x           dd      ?
8721
used_width      dd      ?
8722
used_height     dd      ?
8723
 
314 diamond 8724
wnd_width       dd      ?
8725
wnd_height      dd      ?
8726
 
180 heavyiron 8727
column_left     dd      ?
8728
column_top      dd      ?
8729
column_width    dd      ?
8730
column_height   dd      ?
8731
column_index    dd      ?
474 diamond 8732
last_column_index dd    ?
180 heavyiron 8733
 
8734
scrpos          dq      ?
8735
viewer_right_side dq    ?
8736
 
814 diamond 8737
EditDataSize    dd      ?
8738
EditBlockStart  dd      ?
8739
EditBlockSize   dd      ?
8740
 
180 heavyiron 8741
saved_file_name:
8742
procinfo        rb      1024
283 diamond 8743
lower_file_name = procinfo + 512
180 heavyiron 8744
 
474 diamond 8745
app_path        rb      1100
8746
 
314 diamond 8747
error_msg       rb      128
8748
 
8749
prev_dir        rb      1024
8750
 
180 heavyiron 8751
driveinfo       rb      32+304
8752
tmpname         rb      32
8753
 
8754
screens         dd      ?
8755
num_screens     dd      ?
8756
active_screen_vtable dd ?
8757
active_screen_data dd   ?
997 diamond 8758
active_screen_keybar dd ?
180 heavyiron 8759
 
589 diamond 8760
default_attr    dd      ?
631 diamond 8761
left_dotdot_entry       rb      40+4    ; 40 bytes for attributes + '..'
8762
right_dotdot_entry      rb      40+4
589 diamond 8763
 
183 diamond 8764
aConfirmDeleteTextBuf   rb      aConfirmDeleteTextMax + 1
283 diamond 8765
CopySourceTextBuf       rb      512
8766
CopyDestEditBuf         rb      12+512+1
321 diamond 8767
.length = $ - CopyDestEditBuf - 13
183 diamond 8768
 
997 diamond 8769
SearchStringEditBuf     rb      12
8770
SearchString            rb      253+1
8771
SearchStringEditBuf.length = $ - SearchString - 1
8772
                        db      ?       ; used for output (string -> "string")
8773
 
474 diamond 8774
enter_string_buf        rb      12+512+1
8775
 
8776
bMemForImageValidData   db      ?
8777
 
283 diamond 8778
align 4
997 diamond 8779
identical_table rb      256
474 diamond 8780
tolower_table   rb      256
997 diamond 8781
isspace_table   rb      256
8782
composite_table rb      256
283 diamond 8783
layout          rb      128
8784
 
517 diamond 8785
copy_buffer_size = 65536
283 diamond 8786
copy_buffer     rb      copy_buffer_size
8787
 
589 diamond 8788
filedata_buffer_size = 1024
8789
filedata_buffer rb      filedata_buffer_size
8790
 
8791
source_hModule  dd      ?
8792
source_hPlugin  dd      ?
8793
source_hFile    dd      ?
474 diamond 8794
; data for directory delete
8795
; If directory nested level is >1024, then its full name is too big,
8796
; so we see the overflow when creating full name (we check for this!)
8797
del_dir_stack   rd      1024
8798
del_dir_stack_ptr dd    ?
8799
del_dir_query_size = 32
8800
del_dir_query_area rb   32+304*del_dir_query_size
8801
 
517 diamond 8802
label copy_dir_stack dword at del_dir_stack
8803
label copy_dir_stack_ptr dword at del_dir_stack_ptr
8804
copy_dir_query_size = del_dir_query_size
8805
copy_dir_query_area = del_dir_query_area
8806
del_bSkipAll    db      ?       ; for directory errors
8807
label copy_bSkipAll byte at del_bSkipAll
8808
copy_bSkipAll2  db      ?       ; for file read/write errors
589 diamond 8809
copy_bSkipAll3  db      ?       ; for SetFolder errors
517 diamond 8810
 
8811
bEndSlash       db      ?
8812
bDestIsFolder   db      ?
8813
bNeedRestoreName db     ?
8814
 
180 heavyiron 8815
; stack
183 diamond 8816
        align   4
589 diamond 8817
        rb      32768
180 heavyiron 8818
stacktop:
8819
 
8820
mem: