Subversion Repositories Kolibri OS

Rev

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