mirror of
https://github.com/NishiOwO/VZEditor.git
synced 2025-04-21 16:44:40 +00:00
3967 lines
56 KiB
NASM
3967 lines
56 KiB
NASM
;****************************
|
|
; 'filer.asm'
|
|
;****************************
|
|
|
|
include vz.inc
|
|
|
|
IFNDEF NOFILER
|
|
|
|
;--- Equations ---
|
|
|
|
PX_TTL equ 1
|
|
PX_FILES equ 36
|
|
PX_FREE equ 24
|
|
KEY_SHIFT equ 00000001b ; ##156.101
|
|
|
|
DCMP_EXIST equ 00001b
|
|
DCMP_NEW equ 00010b
|
|
DCMP_OLD equ 00100b
|
|
DCMP_LARGE equ 01000b
|
|
DCMP_SMALL equ 10000b
|
|
|
|
SORT_NAME equ 00000001b
|
|
SORT_EXT equ 00000010b
|
|
SORT_NEW equ 00000100b
|
|
SORT_OLD equ 00001000b
|
|
SORT_LARGE equ 00010000b
|
|
SORT_SMALL equ 00100000b
|
|
SORT_DIR equ 01000000b
|
|
|
|
FM_SPACE equ 00000001b
|
|
FM_EXEC equ 00000010b
|
|
FM_DOSBOX equ 00000100b
|
|
FM_ROTATE equ 00001000b
|
|
FM_FDCSR equ 00010000b
|
|
FM_SPCEXT equ 00100000b
|
|
|
|
FB_MENU equ 0001b
|
|
FB_TBOX equ 0010b
|
|
FB_EXIST equ 0100b
|
|
|
|
FT_ALL equ 0
|
|
FT_BIN equ -1
|
|
FT_TEXT equ 1
|
|
|
|
SPE_SRCDIR equ 0001b
|
|
SPE_DSTDIR equ 0010b
|
|
SPE_DSTFILE equ 0100b
|
|
SPE_CANCEL equ 80h
|
|
|
|
FLATRCNT equ 6
|
|
FMCMDCNT equ 4
|
|
FATTRCNT equ 4
|
|
NAMEWSIZE equ -13
|
|
|
|
fcmd macro cmdnum,label
|
|
db cmdnum
|
|
dw cgroup:label
|
|
endm
|
|
|
|
fmnu macro label,mode
|
|
dw cgroup:label
|
|
db mode
|
|
endm
|
|
|
|
;--- External symbols ---
|
|
|
|
wseg
|
|
extrn dcmpopt :byte
|
|
extrn dirchr :byte
|
|
extrn hardware :byte
|
|
extrn nm_path :byte
|
|
extrn parsef :byte
|
|
extrn sortopt :byte
|
|
extrn tchdir :byte
|
|
extrn flmode :byte
|
|
extrn doslen :byte
|
|
extrn dossw :byte
|
|
extrn flret :byte
|
|
|
|
extrn sysmode :word
|
|
extrn basemode :word
|
|
extrn silent :word
|
|
extrn curdir :word
|
|
extrn dspsw :word
|
|
extrn edtsw :word
|
|
extrn execcmd :word
|
|
extrn extlist :word
|
|
extrn farseg :word
|
|
extrn fbuf :word
|
|
extrn filermnu :word
|
|
extrn flcmdp :word
|
|
extrn flwork :word
|
|
extrn flwork2 :word
|
|
extrn getextp :word
|
|
extrn getnamp :word
|
|
extrn hfiles :word
|
|
extrn menubit :word
|
|
extrn pathbuf :word
|
|
extrn pathbuf2 :word
|
|
extrn pathp :word
|
|
extrn pool :word
|
|
extrn poolend :word
|
|
extrn refloc :word
|
|
extrn tmpbuf :word
|
|
extrn tmpbuf2 :word
|
|
extrn tmpbuf3 :word
|
|
; extrn wbuf :word
|
|
extrn nbuf :word
|
|
extrn menumsgp :word
|
|
extrn actwkp :word
|
|
extrn retval :word
|
|
extrn xbuf :word
|
|
extrn dosloc :word
|
|
extrn lbuf :word
|
|
extrn hidden :word
|
|
endws
|
|
|
|
extrn addsep :near
|
|
; extrn chkline :near
|
|
extrn csroff :near
|
|
extrn dispframe :near
|
|
extrn dosheight :near
|
|
extrn doswindow :near
|
|
extrn do_mbar :near
|
|
extrn drawmbar :near
|
|
extrn ems_map :near
|
|
extrn fillatr :near
|
|
extrn fillc :near
|
|
extrn fillset :near
|
|
extrn fillspc :near
|
|
extrn finddir :near
|
|
extrn getatr1 :near
|
|
extrn getcurdir :near
|
|
extrn getcurdir1 :near
|
|
extrn getcurscrn :near
|
|
extrn getkey :near
|
|
extrn getloc :near
|
|
extrn getwindow :near
|
|
extrn iskanji :near
|
|
extrn isslash :near
|
|
extrn loadwloc :near
|
|
extrn locate :near
|
|
extrn memmove :near
|
|
extrn parsepath1 :near
|
|
extrn popupmenu :near
|
|
extrn printf :near
|
|
extrn putc :near
|
|
extrn putcw :near
|
|
extrn putcurscrn :near
|
|
extrn putcurwind :near
|
|
extrn puts :near
|
|
extrn putmg :near
|
|
extrn putspc :near
|
|
extrn puts_s :near
|
|
extrn repputc :near
|
|
extrn revatr :near
|
|
extrn rollwind :near
|
|
extrn savewloc :near
|
|
extrn schsysmenu :near
|
|
extrn setatr :near
|
|
extrn setatr1 :near
|
|
extrn setatr2 :near
|
|
extrn setdoswindow :near
|
|
extrn setenvvar :near
|
|
extrn setfnckey :near
|
|
extrn setmsgp :near
|
|
extrn setwindow :near
|
|
extrn shift_key :near
|
|
extrn skipchar :near
|
|
extrn skipspc :near
|
|
extrn skipstr :near
|
|
extrn strcmp :near
|
|
extrn strcpy :near
|
|
extrn strlen :near
|
|
extrn strlwr :near
|
|
extrn strncpy :near
|
|
extrn strskip :near
|
|
extrn sysmenu :near
|
|
extrn undatr :near
|
|
extrn windgets :near
|
|
extrn windgetsc :near
|
|
extrn windgets1 :near
|
|
extrn wrdcpy :near
|
|
extrn wrdicmp :near
|
|
extrn stricmp :near
|
|
extrn set_attr :near
|
|
extrn isbinary :near
|
|
extrn toupper :near
|
|
extrn dispask :near
|
|
extrn scantbl :near
|
|
extrn do_evmac :near
|
|
extrn run_evmac :near
|
|
extrn histcpy :near
|
|
extrn open_file :near
|
|
extrn get_refpath :near
|
|
extrn isdigit :near
|
|
extrn dispmsg :near
|
|
extrn off_silent :near
|
|
extrn islower :near
|
|
extrn isupper :near
|
|
extrn cmdmenu :near
|
|
extrn get_mbar :near
|
|
extrn sel_number :near
|
|
extrn setvzkey :near
|
|
extrn strchr :near
|
|
extrn maptexts :near
|
|
|
|
dseg ; bseg
|
|
|
|
;--- Local work ---
|
|
|
|
GDATA flparm, label, byte
|
|
fldual db 0 ; 0=single, 1=dual
|
|
retdir db 0
|
|
fllastcmd dw 0
|
|
|
|
GDATA flatrtbl, db, <FLATRCNT+1 dup (0)>
|
|
|
|
mb_filer db 1,0,WD,-1
|
|
dw 0
|
|
|
|
mn_drive db 7
|
|
drive_c db 0,0,0
|
|
dw offset cgroup:draw_drive
|
|
|
|
mn_vzpath db 32
|
|
db 0,0,0
|
|
dw 0
|
|
|
|
mask_all db "*.*",0
|
|
path_root db "\",0
|
|
path_parent db "..",0
|
|
|
|
maskbit dw 0
|
|
archive dw 0
|
|
attrbit db 0
|
|
flbinary db 0
|
|
vzpathp dd 0
|
|
speflag db 0
|
|
rotate db 0
|
|
lastpos db 0
|
|
walkmnu dw 0
|
|
|
|
endds
|
|
|
|
cseg
|
|
assume ds:cgroup
|
|
|
|
;--- Constants ---
|
|
|
|
pf_size db "%7lu",0 ; ##156.119
|
|
IFDEF US
|
|
pf_time db "%2d-%02d-%02d %2d:%02d%c",0 ; ##156.92
|
|
ELSE
|
|
pf_time db "%02d-%02d-%02d %2d:%02d",0
|
|
ENDIF
|
|
pf_files db " %d ",0
|
|
pf_free db " %,lu ",0 ; ##156.103
|
|
|
|
mg_dir db " <DIR>",0 ; ##156.119
|
|
mg_files db "files ",0
|
|
mg_free db "bytes free ",0
|
|
mg_total db "bytes total ",0
|
|
mg_eod db " <End of Dir> ",0
|
|
mg_ovf db " (Out of Buf) ",0
|
|
|
|
;--- Filer main ---
|
|
;<-- CY :escape
|
|
; NC,AL(flret)
|
|
; 0=Open file
|
|
; 1=exec command
|
|
; -1=sHell
|
|
|
|
public filer
|
|
filer proc
|
|
pushm <bp,ds>
|
|
movseg ds,ss
|
|
movseg es,ss
|
|
push basemode
|
|
; push silent
|
|
; test silent,4
|
|
;_ifn z
|
|
; call off_silent
|
|
;_endif
|
|
call setfnckey
|
|
clr ax
|
|
mov execcmd,ax
|
|
mov fllastcmd,ax
|
|
mov doslen,al
|
|
mov dossw,al
|
|
call savewloc
|
|
call getcurdir
|
|
jmpl c,filer_x ; ##100.13
|
|
call getcurscrn
|
|
; call chkline
|
|
call initfiler
|
|
mov bx,offset cgroup:mb_filer
|
|
call drawmbar
|
|
mov si,filermnu
|
|
mov bp,actwkp
|
|
call setaccdir
|
|
jc filer5
|
|
call setmask
|
|
call setcurpath
|
|
call newpath
|
|
tstb fldual
|
|
_ifn z
|
|
push bp
|
|
mov bp,[bp].fl_back
|
|
call setcurpath
|
|
_if c ; ##151.12
|
|
call resetaccdir
|
|
_endif
|
|
call newpath
|
|
pop bp
|
|
call setcurpath
|
|
_endif
|
|
mov tchdir,FALSE
|
|
call setflwind
|
|
mov ax,SYS_FILER
|
|
mov sysmode,ax
|
|
mov basemode,ax
|
|
mov retval,0
|
|
mov al,EV_FILER
|
|
call do_evmac
|
|
filer1:
|
|
call bcsron
|
|
clr ax
|
|
mov refloc,ax
|
|
mov dossw,al
|
|
mov dl,SYS_FILER
|
|
mov al,CSR_OFF
|
|
call getkey
|
|
mov fllastcmd,ax
|
|
call do_filer
|
|
tstw execcmd
|
|
jz filer1
|
|
filer5: pushf
|
|
mov si,curdir
|
|
call chpath
|
|
; call chkline
|
|
tstw flcmdp
|
|
_ifn z
|
|
mov ax,xbuf
|
|
call spreadexec
|
|
jc gdos_c
|
|
mov execcmd,ax
|
|
jmps filer7
|
|
_endif
|
|
mov ax,execcmd
|
|
tst ax
|
|
jz filer8
|
|
cmp ax,-1
|
|
jne filer6
|
|
mov execcmd,0
|
|
jmps filer8
|
|
filer6:
|
|
call spreadexec
|
|
jc gdos_c
|
|
mov execcmd,ax
|
|
mov si,xbuf
|
|
call dos_go
|
|
_if c
|
|
mov doslen,cl
|
|
_else
|
|
test flmode,FM_DOSBOX
|
|
_ifn z
|
|
mov refloc,0
|
|
mov cx,VZ_DOSLEN-2
|
|
mov dl,W_DOSBOX
|
|
test dossw,VZ_DOS_BOXTTL
|
|
_ifn z
|
|
mov dl,W_CMDBOX
|
|
_endif
|
|
mov al,GETS_DOSBOX
|
|
call windgets1
|
|
jcxz gdos_c
|
|
_if c
|
|
gdos_c: popf
|
|
mov execcmd,0
|
|
call setcurpath
|
|
jmp filer1
|
|
_endif
|
|
or dossw,VZ_DOS_TBOX
|
|
mov doslen,cl
|
|
_endif
|
|
_endif
|
|
filer7:
|
|
mov al,1
|
|
filer8:
|
|
mov flret,al
|
|
push ax
|
|
mov basemode,SYS_SEDIT
|
|
call nextpool
|
|
call putcurscrn
|
|
pop ax
|
|
popf
|
|
filer_x:
|
|
call loadwloc
|
|
; pop silent
|
|
; pushf
|
|
; and silent,not 4
|
|
; popf
|
|
pop basemode
|
|
popm <ds,bp>
|
|
VZ_RET
|
|
filer endp
|
|
|
|
;--- Init filer ---
|
|
|
|
initfiler proc
|
|
mov bp,flwork
|
|
tstw pathp
|
|
_ifn z
|
|
mov fldual,0
|
|
clr ax
|
|
mov actwkp,ax
|
|
mov [bp].fl_which,al
|
|
mov [bp].fl_mask,al
|
|
tstb retdir
|
|
_if z
|
|
lea si,[bp].fl_path
|
|
lea di,[bp].fl_lastpath
|
|
call strcpy
|
|
_endif
|
|
_else
|
|
tstb retdir
|
|
_ifn z
|
|
lea si,[bp].fl_lastpath
|
|
lea di,[bp].fl_path
|
|
call strcpy
|
|
tstb [bp].fl_path
|
|
_if z
|
|
mov [bp].fl_curf,FALSE
|
|
_endif
|
|
mov [bp].fl_mask,0
|
|
mov tchdir,TRUE
|
|
mov retdir,0
|
|
_endif
|
|
_endif
|
|
mov bx,flwork2
|
|
tstw actwkp
|
|
_if z
|
|
mov actwkp,bp
|
|
_endif
|
|
call initfl1
|
|
xchg bx,bp
|
|
call initfl1
|
|
mov bx,offset cgroup:mb_filer
|
|
mov ax,filermnu
|
|
mov [bx].mb_ttl,ax
|
|
VZ_RET
|
|
initfl1:
|
|
mov ax,farseg
|
|
call ems_map
|
|
mov [bp].fl_seg,ax
|
|
mov [bp].fl_back,bx
|
|
; mov [bp].fl_pooltop,0
|
|
mov ax,[bp].fl_pooltop
|
|
mov [bp].fl_poolp,ax
|
|
tstb [bp].fl_mask
|
|
_if z
|
|
call selwild
|
|
_endif
|
|
tstb [bp].fl_curf
|
|
_if z
|
|
mov si,curdir
|
|
lea di,[bp].fl_path
|
|
call strcpy
|
|
_endif
|
|
VZ_RET
|
|
initfiler endp
|
|
|
|
;--- To new path ---
|
|
|
|
newpath proc
|
|
call clrpath
|
|
tstw pathp
|
|
jnz newpath1
|
|
tstb tchdir
|
|
jnz newpath1
|
|
tstw [bp].fl_files
|
|
jz newpath1
|
|
mov bl,[bp].fl_path
|
|
and bl,1Fh
|
|
msdos F_IOCTRL,08h
|
|
jc npath1
|
|
tst ax
|
|
jnz npath1
|
|
jmps newpath1
|
|
newpath0:
|
|
mov [bp].fl_bcsr,0
|
|
newpath1:
|
|
call csroff
|
|
call initpoolp
|
|
call readdir
|
|
jmps npath1
|
|
redump:
|
|
mov [bp].fl_home,0
|
|
npath1: call initflwind
|
|
call drawflframe
|
|
call drawouter
|
|
call dumpfile
|
|
clc
|
|
VZ_RET
|
|
clrpath:
|
|
mov si,pathbuf
|
|
mov byte ptr [si],0
|
|
VZ_RET
|
|
newpath endp
|
|
|
|
;--- Filer command table ---
|
|
|
|
tb_flcmdsym db "LMPSVW+><OEF!H-*/QADRKNU"
|
|
|
|
tb_flcmd: fcmd 03,do_esc
|
|
fcmd 04,do_cr
|
|
fcmd 05,csr_u
|
|
fcmd 06,csr_d
|
|
fcmd 07,csr_l
|
|
fcmd 08,csr_r
|
|
fcmd 13,do_all ; ##16
|
|
fcmd 15,do_cancel ;
|
|
fcmd 31,csr_rolup
|
|
fcmd 32,csr_roldown
|
|
fcmd 33,csr_rolup2
|
|
fcmd 34,csr_roldown2
|
|
fcmd 35,csr_pageup
|
|
fcmd 36,csr_pagedown
|
|
fcmd 37,csr_pageup
|
|
fcmd 38,csr_pagedown
|
|
fcmd 41,csr_top
|
|
fcmd 42,csr_end
|
|
fcmd 53,do_cr ; ##16
|
|
fcmd 88,csr_ls
|
|
fcmd 89,csr_rs
|
|
fcmd 90,csr_us
|
|
fcmd 91,csr_ds
|
|
fcmd 92,csr_home
|
|
fcmd 93,do_window
|
|
fcmd 94,do_parent
|
|
db 0
|
|
|
|
tb_menucmd:
|
|
fmnu do_drive ,FB_MENU
|
|
fmnu do_mask ,FB_MENU
|
|
fmnu do_path ,FB_TBOX
|
|
fmnu do_sort ,FB_MENU
|
|
fmnu do_view ,0
|
|
fmnu do_dual ,0
|
|
fmnu do_all ,0
|
|
fmnu do_tocd ,0
|
|
fmnu do_retcd ,0
|
|
fmnu do_compare ,FB_MENU
|
|
fmnu do_execmnu ,FB_MENU
|
|
fmnu do_filemnu ,FB_MENU
|
|
fmnu do_exec1 ,FB_EXIST
|
|
fmnu do_shell ,0
|
|
fmnu do_cancel ,0
|
|
fmnu do_wild ,0
|
|
fmnu do_root ,0
|
|
fmnu do_vzpath ,FB_MENU
|
|
fmnu do_attr ,FB_MENU+FB_EXIST
|
|
fmnu do_delete ,FB_EXIST
|
|
fmnu do_rename ,FB_TBOX+FB_EXIST
|
|
fmnu do_makedir ,FB_TBOX
|
|
fmnu do_newfile ,FB_TBOX
|
|
fmnu newpath1 ,0
|
|
; #123
|
|
|
|
;----- Scan filer command -----
|
|
|
|
public scan_flcmd
|
|
scan_flcmd proc
|
|
pushm <cx,di>
|
|
mov di,offset cgroup:tb_flcmdsym
|
|
mov cx,offset tb_flcmd - offset tb_flcmdsym
|
|
call scantbl
|
|
clc
|
|
_if e
|
|
sub cl,offset tb_flcmd - offset tb_flcmdsym - 1
|
|
neg cl
|
|
mov al,cl
|
|
add al,CM_FILER3
|
|
stc
|
|
_endif
|
|
popm <di,cx>
|
|
VZ_RET
|
|
scan_flcmd endp
|
|
|
|
;----- &Fl(path) -----
|
|
|
|
public fx_filer
|
|
fx_filer proc
|
|
push sysmode
|
|
mov cx,si
|
|
call parsepath1
|
|
call filer
|
|
_if c
|
|
mov ax,-1
|
|
_endif
|
|
mov retval,ax
|
|
clr ax
|
|
mov execcmd,ax
|
|
pop ax
|
|
mov sysmode,ax
|
|
cmp al,SYS_SEDIT
|
|
_if e
|
|
call setvzkey
|
|
_if c
|
|
call maptexts
|
|
_endif
|
|
_endif
|
|
VZ_RET
|
|
fx_filer endp
|
|
|
|
;----- &Fm(c) -----
|
|
|
|
public fx_mbar
|
|
fx_mbar proc
|
|
mov dx,ax
|
|
pushm <bx,si>
|
|
mov bx,offset cgroup:mb_filer
|
|
call do_mbar
|
|
popm <si,bx>
|
|
_ifn c
|
|
mov lastpos,al
|
|
mov refloc,dx
|
|
_else
|
|
mov al,INVALID
|
|
_endif
|
|
cbw
|
|
mov retval,ax
|
|
VZ_RET
|
|
fx_mbar endp
|
|
|
|
;----- &Fg(di[,al]) -----
|
|
|
|
public fx_getpool
|
|
fx_getpool proc
|
|
mov di,si
|
|
mov al,dl
|
|
call getpool
|
|
clr al
|
|
xchg al,ah
|
|
mov retval,ax
|
|
VZ_RET
|
|
fx_getpool endp
|
|
|
|
;----- &Fi -----
|
|
|
|
public fx_initpool
|
|
fx_initpool proc
|
|
pushm <bx,si,bp,ds>
|
|
mov bp,actwkp
|
|
tst bp
|
|
_ifn z
|
|
mov ax,farseg
|
|
call ems_map
|
|
call scan_1st
|
|
mov [bp].fl_poolp,bx
|
|
mov ax,[bp].fl_selcnt
|
|
mov ss:retval,ax
|
|
_endif
|
|
popm <ds,bp,si,bx>
|
|
VZ_RET
|
|
fx_initpool endp
|
|
|
|
;----- &Fn -----
|
|
|
|
public fx_nextpool
|
|
fx_nextpool proc
|
|
pushm <si,bx>
|
|
call nextpool
|
|
mov ax,1
|
|
_if c
|
|
dec ax
|
|
_endif
|
|
mov retval,ax
|
|
popm <bx,si>
|
|
VZ_RET
|
|
fx_nextpool endp
|
|
|
|
;----- Walk on menu bar -----
|
|
|
|
walk_mbar proc
|
|
mov bx,offset cgroup:mb_filer
|
|
mov cl,lastpos
|
|
clr ch
|
|
tst cl
|
|
_ifn s
|
|
cmp al,CM_R
|
|
je walk_right
|
|
cmp al,CM_L
|
|
je walk_left
|
|
_endif
|
|
clc
|
|
VZ_RET
|
|
walk_right:
|
|
inc cx
|
|
cmp cl,[bx].mb_c
|
|
_if ae
|
|
clr cx
|
|
_endif
|
|
jmps walk1
|
|
walk_left:
|
|
tst cx
|
|
_if z
|
|
mov cl,[bx].mb_c
|
|
_endif
|
|
dec cx
|
|
walk1:
|
|
mov walkmnu,ax
|
|
mov lastpos,cl
|
|
call get_mbar
|
|
stc
|
|
VZ_RET
|
|
walk_mbar endp
|
|
|
|
;----- Is bottom of dir? -----
|
|
|
|
isbottom proc
|
|
tstw [bp].fl_selcnt
|
|
_if z
|
|
mov ax,[bp].fl_bcsr
|
|
inc ax
|
|
cmp ax,[bp].fl_files
|
|
_if ae
|
|
inc sp
|
|
inc sp
|
|
_endif
|
|
_endif
|
|
VZ_RET
|
|
isbottom endp
|
|
|
|
;--- Do filer ---
|
|
|
|
do_filer proc
|
|
mov walkmnu,FALSE
|
|
mov cx,[bp].fl_bcsr
|
|
mov bx,hfiles
|
|
tst al
|
|
jz do_flkey
|
|
mov lastpos,INVALID
|
|
do_flcmd:
|
|
cmp al,CM_FILER3
|
|
jb doflcmd1
|
|
sub al,CM_FILER3
|
|
clr dx
|
|
doflmenu1:
|
|
cbw
|
|
mov di,ax
|
|
shl ax,1
|
|
add ax,di
|
|
mov di,offset cgroup:tb_menucmd
|
|
add di,ax
|
|
mov cl,cs:[di+2]
|
|
doflmenu2:
|
|
mov ax,walkmnu
|
|
tst ax
|
|
_ifn z
|
|
test cl,FB_MENU
|
|
jz doflwalk
|
|
_endif
|
|
mov bx,menumsgp
|
|
test cl,FB_EXIST
|
|
_ifn z
|
|
call isbottom
|
|
_endif
|
|
test cl,FB_TBOX
|
|
_ifn z
|
|
mov refloc,0
|
|
_endif
|
|
push cx
|
|
call cs:[di]
|
|
pop dx
|
|
_ifn c
|
|
clr ax
|
|
_endif
|
|
test dl,FB_MENU
|
|
_ifn z
|
|
doflwalk:
|
|
call walk_mbar
|
|
jc doflkey1
|
|
_endif
|
|
call setflwind
|
|
VZ_RET
|
|
|
|
doflcmd1:
|
|
mov ah,FALSE
|
|
test flmode,FM_ROTATE
|
|
_ifn z
|
|
mov ah,TRUE
|
|
_endif
|
|
mov rotate,ah
|
|
mov si,offset cgroup:tb_flcmd
|
|
_repeat
|
|
cmp al,cs:[si]
|
|
jmpl e,cs:[si+1]
|
|
add si,3
|
|
tstb cs:[si]
|
|
_until z
|
|
VZ_RET
|
|
|
|
do_flkey:
|
|
; cmp dl,':' ; [:] ##152.25
|
|
;_if e
|
|
; mov dx,word ptr [bx].mb_px
|
|
; jmp do_drive
|
|
;_endif
|
|
cmp dl,SPC
|
|
_if e
|
|
test flmode,FM_SPACE
|
|
jmpl z,do_spc
|
|
jmp csr_next
|
|
_endif
|
|
cmp dl,'*' ; [*]
|
|
je do_wild
|
|
cmp dl,'\' ; [\]
|
|
je do_root
|
|
cmp dl,'/' ; [/]
|
|
je do_root
|
|
call shift_key ; ##156.101
|
|
test ah,KEY_SHIFT
|
|
jmpln z,do_search
|
|
cmp dl,'0' ; ##156.102
|
|
_if ae
|
|
cmp dl,'9'
|
|
_if be
|
|
sub dl,'0'+1
|
|
_if s
|
|
push si
|
|
mov si,curdir
|
|
lodsb
|
|
pop si
|
|
call toupper
|
|
sub al,'A'
|
|
mov dl,al
|
|
_endif
|
|
mov al,dl
|
|
jmp do_drive1
|
|
_endif
|
|
_endif
|
|
doflkey1:
|
|
mov al,dl
|
|
cbw
|
|
call toupper
|
|
push retval
|
|
mov retval,ax
|
|
mov al,EV_FILER
|
|
call do_evmac
|
|
_if c
|
|
call run_evmac
|
|
pop retval
|
|
jmp do_flcmd
|
|
_endif
|
|
pop retval
|
|
mov bx,offset cgroup:mb_filer
|
|
call do_mbar
|
|
_ifn c
|
|
mov lastpos,al
|
|
mov refloc,dx
|
|
jmp doflmenu1
|
|
_endif
|
|
VZ_RET
|
|
|
|
do_filer endp
|
|
|
|
do_wild proc
|
|
call selwild
|
|
call newpath0
|
|
VZ_RET
|
|
do_wild endp
|
|
|
|
do_root proc
|
|
mov si,offset cgroup:path_root
|
|
mov cx,1
|
|
jmp dopath1
|
|
do_root endp
|
|
|
|
do_parent proc
|
|
mov dx,offset cgroup:path_parent
|
|
push ds
|
|
jmps chgdir1
|
|
do_parent endp
|
|
|
|
;--- Do select command ---
|
|
|
|
do_spc:
|
|
pushm <bx,cx>
|
|
call getpoolp
|
|
jae dospc9
|
|
push ds
|
|
mov ds,dx
|
|
mov al,[bx].dr_attr
|
|
; test al,FA_DIREC ; ##156.100
|
|
; jnz dospcx
|
|
xor al,FA_SEL
|
|
mov [bx].dr_attr,al
|
|
pop ds
|
|
test al,FA_SEL
|
|
_ifn z
|
|
inc [bp].fl_selcnt
|
|
_else
|
|
dec [bp].fl_selcnt
|
|
_endif
|
|
call drawdiskinfo
|
|
jmps dospc9
|
|
dospcx: pop ds
|
|
dospc9: popm <cx,bx>
|
|
VZ_RET
|
|
do_cr:
|
|
call isbottom ;;
|
|
call set_poolp ;;
|
|
tstw flcmdp
|
|
_if z
|
|
call check_dir
|
|
jc docr9
|
|
_endif
|
|
push ds
|
|
call scan_1st
|
|
tstw [bp].fl_selcnt
|
|
_if z
|
|
test [bx].dr_attr,FA_DIREC
|
|
jnz chgdir
|
|
_else
|
|
test ss:flmode,FM_SPCEXT
|
|
jz docr1
|
|
_endif
|
|
tstw ss:flcmdp
|
|
_if z
|
|
call isspecext
|
|
_endif
|
|
docr1: pop ds
|
|
clc
|
|
jmps esc8
|
|
;docr8:
|
|
; tst ax
|
|
; jz do_esc
|
|
; jmps esc8
|
|
|
|
chgdir:
|
|
mov dx,bx
|
|
add dx,dr_pack
|
|
chgdir1:
|
|
msdos F_CHDIR
|
|
pop ds
|
|
jc docr9
|
|
mov [bp].fl_home,0
|
|
lea si,[bp].fl_path
|
|
push si
|
|
mov di,pathbuf
|
|
call strcpy
|
|
pop di
|
|
call getaccdir
|
|
call newpath1
|
|
call clrpath
|
|
docr9: VZ_RET
|
|
|
|
do_esc:
|
|
mov ax,[bp].fl_poolend
|
|
mov [bp].fl_poolp,ax
|
|
stc
|
|
esc8: inc sp
|
|
inc sp
|
|
jmp filer5
|
|
|
|
;--- Move block cursor ---
|
|
|
|
csr_next:
|
|
cmp hfiles,5
|
|
jne csr_ds
|
|
csr_rs:
|
|
mov rotate,FALSE
|
|
call do_spc
|
|
csr_r: call chkdual
|
|
inc cx
|
|
cmp cx,[bp].fl_files
|
|
jb fscrl1
|
|
tstb rotate
|
|
jnz csr_top
|
|
VZ_RET
|
|
|
|
csr_ls:
|
|
mov rotate,FALSE
|
|
call csr_l
|
|
jmp do_spc
|
|
csr_l:
|
|
call chkdual
|
|
dec cx
|
|
jns fscroll
|
|
tstb rotate
|
|
jnz csr_end
|
|
csr9: VZ_RET
|
|
|
|
csr_ds:
|
|
mov rotate,FALSE
|
|
call do_spc
|
|
csr_d:
|
|
add cx,bx
|
|
cmp cx,[bp].fl_files
|
|
jb fscroll
|
|
tstb rotate
|
|
jz csr9
|
|
cmp bl,5
|
|
jne csr_top
|
|
sub cx,bx
|
|
mov ax,cx
|
|
cwd
|
|
div bx
|
|
mov cx,dx
|
|
cmp cx,[bp].fl_files
|
|
jae csr_top
|
|
fscrl1: jmps fscroll
|
|
|
|
csr_us:
|
|
mov rotate,FALSE
|
|
call csr_u
|
|
jmp do_spc
|
|
|
|
csr_u:
|
|
sub cx,bx
|
|
jnb fscroll
|
|
tstb rotate
|
|
jz csr9
|
|
cmp bl,5
|
|
jne csr_end
|
|
csru1:
|
|
add cx,bx
|
|
cmp cx,[bp].fl_files
|
|
jb csru1
|
|
sub cx,bx
|
|
jmps fscroll
|
|
|
|
;--- Move cursor to home/bottom ---
|
|
|
|
csr_home:
|
|
tstw [bp].fl_bcsr
|
|
_ifn z
|
|
; call bcsroff
|
|
csr_top:
|
|
clr cx
|
|
_else
|
|
csr_end:
|
|
mov cx,[bp].fl_files
|
|
dec cx
|
|
_endif
|
|
; jmps fscroll
|
|
|
|
;--- Scroll up/down window ---
|
|
;--> CX :new position
|
|
|
|
fscroll proc
|
|
tstw [bp].fl_files
|
|
jz frol9
|
|
call bcsroff
|
|
call fsetcsr
|
|
fscroll1:
|
|
tst al
|
|
jz frol9
|
|
cmp al,1
|
|
je frolup
|
|
cmp al,-1
|
|
je froldn
|
|
jmp dumpfile
|
|
frolup:
|
|
mov ah,[bp].fl_wsy
|
|
dec ah
|
|
push ax
|
|
push dx
|
|
call getwindow
|
|
movhl ax,ATR_WTXT,1
|
|
call rollwind
|
|
jmps frol1
|
|
froldn:
|
|
clr ah
|
|
push ax
|
|
push dx
|
|
call getwindow
|
|
movhl ax,ATR_WTXT,-1
|
|
call rollwind
|
|
frol1:
|
|
pop bx
|
|
call getpoolp1
|
|
pop dx
|
|
call dumpline
|
|
frol9: VZ_RET
|
|
fscroll endp
|
|
|
|
;--- Roll window ---
|
|
|
|
csr_rolup:
|
|
mov al,-1
|
|
jmps viewroll
|
|
csr_roldown:
|
|
mov al,1
|
|
jmps viewroll
|
|
csr_rolup2:
|
|
mov al,-2
|
|
jmps viewroll
|
|
csr_roldown2:
|
|
mov al,2
|
|
jmps viewroll
|
|
csr_pageup:
|
|
call flpageln
|
|
neg al
|
|
jmps viewroll
|
|
csr_pagedown:
|
|
call flpageln
|
|
; jmps viewroll
|
|
|
|
viewroll proc
|
|
tstw [bp].fl_files
|
|
jz frol9
|
|
cbw
|
|
push ax
|
|
call bcsroff
|
|
pop ax
|
|
imul bx
|
|
mov dx,[bp].fl_home
|
|
tst ax
|
|
_if s
|
|
add cx,ax
|
|
_ifn c
|
|
push ax
|
|
sub cx,ax
|
|
mov ax,cx
|
|
div bl
|
|
mov cl,ah
|
|
clr ch
|
|
pop ax
|
|
_endif
|
|
add dx,ax
|
|
_ifn c
|
|
cmp al,-1
|
|
_if e
|
|
clr ax
|
|
_endif
|
|
clr dx
|
|
_endif
|
|
_else
|
|
add cx,ax
|
|
_repeat
|
|
cmp cx,[bp].fl_files
|
|
_break b
|
|
sub cx,bx
|
|
_until
|
|
pushm <ax,dx>
|
|
mov ax,[bp].fl_tsy
|
|
sub al,[bp].fl_wsy
|
|
sbb ah,0
|
|
mul bx
|
|
mov bx,ax
|
|
popm <dx,ax>
|
|
add dx,ax
|
|
cmp dx,bx
|
|
_if a
|
|
cmp al,1
|
|
_if e
|
|
clr ax
|
|
_endif
|
|
mov dx,bx
|
|
_endif
|
|
_endif
|
|
mov [bp].fl_bcsr,cx
|
|
mov [bp].fl_home,dx
|
|
cmp al,1
|
|
_if e
|
|
mov al,[bp].fl_wsy
|
|
dec al
|
|
mul byte ptr hfiles
|
|
add dx,ax
|
|
_endif
|
|
jmp fscroll1
|
|
viewroll endp
|
|
|
|
flpageln proc
|
|
mov al,[bp].fl_wsy
|
|
test edtsw,EDT_PGHALF
|
|
_ifn z
|
|
shr al,1
|
|
_if z
|
|
inc ax
|
|
_endif
|
|
VZ_RET
|
|
_endif
|
|
dec ax
|
|
VZ_RET
|
|
flpageln endp
|
|
|
|
;--- Set cursor position ---
|
|
;--> CX :new position
|
|
;<--
|
|
; AL :0=hold, 1=rollup, -1=rolldown, else dump
|
|
; DX :display ptr
|
|
|
|
fsetcsr proc
|
|
mov [bp].fl_bcsr,cx
|
|
push bx
|
|
mov bx,hfiles
|
|
mov ax,cx
|
|
cwd
|
|
div bx
|
|
mov dx,[bp].fl_home
|
|
cmp cx,dx
|
|
_if b
|
|
push dx
|
|
mul bx
|
|
mov dx,ax
|
|
pop ax
|
|
sub ax,cx
|
|
cmp ax,bx
|
|
mov al,-1
|
|
jbe fset8
|
|
jmps fset2
|
|
_else
|
|
push ax
|
|
mov ax,dx
|
|
cwd
|
|
div bx
|
|
pop dx
|
|
mov cx,dx
|
|
sub dx,ax
|
|
mov al,[bp].fl_wsy
|
|
cbw
|
|
cmp dx,ax
|
|
mov dx,ax
|
|
mov al,0
|
|
jb fset9
|
|
_if e
|
|
mov ax,cx
|
|
mul bx
|
|
mov dx,ax
|
|
add [bp].fl_home,bx
|
|
mov al,1
|
|
jmps fset9
|
|
_endif
|
|
mov ax,cx
|
|
inc ax
|
|
sub ax,dx
|
|
mul bx
|
|
mov dx,ax
|
|
_endif
|
|
fset2: mov al,2
|
|
fset8: mov [bp].fl_home,dx
|
|
fset9: pop bx
|
|
VZ_RET
|
|
fsetcsr endp
|
|
|
|
|
|
;----- Set home position -----
|
|
;--> CX :files
|
|
|
|
fsethome proc
|
|
mov ax,cx
|
|
cwd
|
|
div bx
|
|
push ax
|
|
mov bx,hfiles
|
|
mov ax,[bp].fl_home
|
|
cwd
|
|
div bx
|
|
pop dx
|
|
sub dx,ax
|
|
mov al,[bp].fl_wsy
|
|
cbw
|
|
cmp dx,ax
|
|
_if l
|
|
mov [bp].fl_home,0
|
|
_endif
|
|
VZ_RET
|
|
fsethome endp
|
|
|
|
;--- Get pool pointer ---
|
|
;<--
|
|
; DX:BX :pool ptr
|
|
|
|
getpoolp proc
|
|
mov bx,[bp].fl_bcsr
|
|
getpoolp1:
|
|
mov ax,type _dir
|
|
mul bx
|
|
add ax,[bp].fl_pooltop
|
|
mov bx,ax
|
|
mov dx,[bp].fl_seg
|
|
cmp bx,[bp].fl_poolend
|
|
VZ_RET
|
|
getpoolp endp
|
|
|
|
;--- Change drive ---
|
|
|
|
do_drive proc
|
|
msdos F_CURDRV
|
|
mov bx,offset cgroup:mn_drive
|
|
mov [bx].mn_sel,al
|
|
clr si
|
|
clr dx
|
|
call popupmenu
|
|
do_drive1:
|
|
_ifn c
|
|
mov dl,VZ_PRS_DRV
|
|
call setdrive
|
|
_ifn c
|
|
call newpath0
|
|
_endif
|
|
clc
|
|
_endif
|
|
VZ_RET
|
|
do_drive endp
|
|
|
|
draw_drive proc
|
|
tst ah
|
|
jnz sel_drive
|
|
push ax
|
|
msdos F_VERSION
|
|
cmp al,3
|
|
pop ax
|
|
_if b
|
|
add al,'A'
|
|
call putc
|
|
mov al,':'
|
|
_else
|
|
pushm <bx,dx>
|
|
mov bl,al
|
|
inc bl
|
|
msdos F_IOCTRL,8
|
|
mov dx,'()'
|
|
_ifn c
|
|
tst ax
|
|
mov dx,'=='
|
|
_ifn z
|
|
mov dx,'[]'
|
|
_endif
|
|
_endif
|
|
mov al,dh
|
|
call putc
|
|
call putspc
|
|
mov al,bl
|
|
add al,'A'-1
|
|
call putc
|
|
call putspc
|
|
mov al,dl
|
|
popm <dx,bx>
|
|
_endif
|
|
call putc
|
|
call putspc
|
|
VZ_RET
|
|
sel_drive:
|
|
sub al,'A'
|
|
VZ_RET
|
|
draw_drive endp
|
|
|
|
;--- Change mask ---
|
|
|
|
do_mask proc
|
|
mov ax,maskbit
|
|
or ax,hidden
|
|
or ax,archive
|
|
mov menubit,ax
|
|
mov cl,MNU_FMASK
|
|
call sysmenu
|
|
_ifn c
|
|
mov dl,al
|
|
call selmask
|
|
call newpath0
|
|
clc
|
|
_endif
|
|
VZ_RET
|
|
do_mask endp
|
|
|
|
selmask proc
|
|
push dx
|
|
mov dl,MNU_FMASK
|
|
call schsysmenu
|
|
pop dx
|
|
_if c
|
|
selwild:
|
|
mov maskbit,0
|
|
mov si,offset cgroup:mask_all
|
|
jmp setmask1
|
|
_endif
|
|
mov di,si
|
|
add di,type _menu
|
|
push ax
|
|
call setmsgp
|
|
pop ax
|
|
mov cl,dl
|
|
mov dx,1
|
|
shl dx,cl
|
|
lodsb
|
|
push ax
|
|
call skipspc
|
|
mov cl,al
|
|
pop ax
|
|
cmp cl,'.'
|
|
je selmsk1
|
|
cmp cl,'*'
|
|
_if e
|
|
selmsk1:
|
|
mov maskbit,dx
|
|
jmp setmask1
|
|
_endif
|
|
cmp cl,'<'
|
|
_if e
|
|
cmp al,'T'
|
|
je mask_text
|
|
cmp al,'B'
|
|
je mask_bin
|
|
cmp al,'A'
|
|
je mask_archive
|
|
cmp al,'H'
|
|
je mask_hidden
|
|
VZ_RET
|
|
_endif
|
|
mov cx,1
|
|
jmps dopath1
|
|
|
|
mask_bin:
|
|
mov al,FT_BIN
|
|
skip2
|
|
mask_text:
|
|
mov al,FT_TEXT
|
|
test maskbit,dx
|
|
_ifn z
|
|
mov al,FT_ALL
|
|
clr dx
|
|
_endif
|
|
mov flbinary,al
|
|
mov maskbit,dx
|
|
mov si,offset cgroup:mask_all
|
|
jmp setmask2
|
|
mask_hidden:
|
|
xor hidden,dx
|
|
VZ_RET
|
|
mask_archive:
|
|
xor archive,dx
|
|
VZ_RET
|
|
selmask endp
|
|
|
|
;--- Input new path ---
|
|
|
|
do_path proc
|
|
; mov refloc,0
|
|
; mov dx,word ptr [bp].fl_wpx
|
|
; add dx,0001h
|
|
; mov refloc,dx
|
|
mov si,fbuf
|
|
mov cx,PATHSZ
|
|
mov dl,W_PATH
|
|
call windgets
|
|
jc dopath9
|
|
jcxz do_vzpath
|
|
dopath1:
|
|
call parsepath1
|
|
call setaccdir
|
|
jc dopath9
|
|
call setmask
|
|
call newpath0
|
|
dopath9:VZ_RET
|
|
do_path endp
|
|
|
|
do_vzpath proc
|
|
mov dl,MNU_VZPATH
|
|
call schsysmenu
|
|
mov ax,0
|
|
mov bx,offset cgroup:mn_vzpath
|
|
_ifn c
|
|
mov bx,si
|
|
mov ax,si
|
|
add ax,type _menu
|
|
_endif
|
|
push ax
|
|
mov di,pathbuf
|
|
mov si,offset cgroup:nm_path
|
|
call setenvvar
|
|
pop di
|
|
jnc dopath9
|
|
push di
|
|
mov word ptr vzpathp.@off,si
|
|
mov word ptr vzpathp.@seg,ax
|
|
mov al,-1
|
|
call scanvzpath
|
|
movseg ds,ss
|
|
mov [bx].mn_c,cl
|
|
cmp cl,[bx].mn_sel
|
|
_if be
|
|
dec cl
|
|
mov [bx].mn_sel,cl
|
|
_endif
|
|
mov [bx].mn_ext,offset cgroup:draw_vzpath
|
|
clr dx
|
|
pop si
|
|
call popupmenu
|
|
_ifn c
|
|
call scanvzpath
|
|
mov di,ss:pathbuf
|
|
push di
|
|
call wrdcpy
|
|
pop si
|
|
movseg ds,ss
|
|
inc cx
|
|
call dopath1
|
|
clc
|
|
_endif
|
|
VZ_RET
|
|
|
|
draw_vzpath:
|
|
tst ah
|
|
_if z
|
|
push ax
|
|
add al,'1'
|
|
cmp al,'9'
|
|
_if a
|
|
sub al,'A'-'1'-9
|
|
_endif
|
|
call putc
|
|
call putspc
|
|
pop ax
|
|
call scanvzpath
|
|
call puts_s
|
|
_else
|
|
call sel_number
|
|
_endif
|
|
VZ_RET
|
|
|
|
scanvzpath:
|
|
lds si,vzpathp
|
|
cbw
|
|
mov cx,ax
|
|
jcxz setvp9
|
|
_repeat
|
|
call skipchar
|
|
jc setvp1
|
|
_loop
|
|
setvp9: VZ_RET
|
|
setvp1: not cx
|
|
inc cx
|
|
VZ_RET
|
|
do_vzpath endp
|
|
|
|
;--- Sort option ---
|
|
|
|
do_sort proc
|
|
mov ax,word ptr sortopt
|
|
mov menubit,ax
|
|
mov cl,MNU_FSORT
|
|
call sysmenu
|
|
_ifn c
|
|
mov cl,al
|
|
mov al,1
|
|
shl al,cl
|
|
cmp al,sortopt
|
|
_if e
|
|
clr al
|
|
_endif
|
|
mov sortopt,al
|
|
call newpath0
|
|
clc
|
|
_endif
|
|
VZ_RET
|
|
do_sort endp
|
|
|
|
;--- Change view mode ---
|
|
|
|
do_view proc
|
|
xor hfiles,4
|
|
call redump
|
|
tstb fldual
|
|
_ifn z
|
|
push bp
|
|
mov bp,[bp].fl_back
|
|
call redump
|
|
pop bp
|
|
_endif
|
|
VZ_RET
|
|
do_view endp
|
|
|
|
;--- Single/dual window ---
|
|
|
|
do_dual proc
|
|
xor fldual,1
|
|
_ifn z
|
|
mov bx,[bp].fl_back
|
|
mov [bx].fl_which,TRUE
|
|
push bp
|
|
mov bp,bx
|
|
call setcurpath
|
|
call clrpath
|
|
call newpath1
|
|
pop bp
|
|
call redump ; ##153.36
|
|
call setcurpath
|
|
jmps dowind1
|
|
_endif
|
|
tstb [bp].fl_which
|
|
_ifn z
|
|
call dowind1
|
|
mov [bp].fl_which,FALSE
|
|
_endif
|
|
call redump
|
|
VZ_RET
|
|
do_dual endp
|
|
|
|
;--- Change window ---
|
|
|
|
do_window proc
|
|
tstb fldual
|
|
jz dowind9
|
|
dowind1:
|
|
call setflwind
|
|
call bcsroff
|
|
mov bx,[bp].fl_back
|
|
xchg bx,bp
|
|
mov actwkp,bp
|
|
call setflwind
|
|
call setcurpath
|
|
call bcsron
|
|
dowind9:VZ_RET
|
|
do_window endp
|
|
|
|
chkdual proc
|
|
tstb fldual
|
|
jz chkdu9
|
|
cmp hfiles,5
|
|
je chkdu9
|
|
pop ax
|
|
jmp dowind1
|
|
chkdu9: VZ_RET
|
|
chkdual endp
|
|
|
|
;--- To current dir ---
|
|
|
|
do_tocd proc
|
|
tstb [bp].fl_curf
|
|
_ifn z
|
|
; mov [bp].fl_curf,FALSE
|
|
mov si,curdir
|
|
lea di,[bp].fl_lastpath
|
|
call strcpy
|
|
lea si,[bp].fl_path
|
|
mov di,curdir
|
|
push si
|
|
call strcpy
|
|
pop si
|
|
tstb fldual
|
|
_ifn z
|
|
push bp
|
|
mov bp,[bp].fl_back
|
|
; mov al,TRUE ; ##151.13
|
|
; xchg [bp].fl_curf,al
|
|
; tst al
|
|
; _ifn z
|
|
; lea di,[bp].fl_path
|
|
; call iscurdir
|
|
; _endif
|
|
call setflwind
|
|
call drawpath
|
|
pop bp
|
|
_endif
|
|
call setflwind
|
|
call drawpath
|
|
_endif
|
|
VZ_RET
|
|
do_tocd endp
|
|
|
|
iscurdir proc ; ##151.13
|
|
mov si,curdir
|
|
lea di,[bp].fl_path
|
|
call strcmp
|
|
mov al,TRUE
|
|
_if e
|
|
mov al,FALSE
|
|
_endif
|
|
mov [bp].fl_curf,al
|
|
VZ_RET
|
|
iscurdir endp
|
|
|
|
;--- Return to current dir ---
|
|
|
|
do_retcd proc
|
|
tstb [bp].fl_curf
|
|
_if z
|
|
lea si,[bp].fl_lastpath
|
|
tstb [si]
|
|
_ifn z
|
|
lea di,[bp].fl_path
|
|
call strcpy
|
|
jmps retcd1
|
|
_endif
|
|
_else
|
|
; mov [bp].fl_curf,FALSE
|
|
lea si,[bp].fl_path
|
|
lea di,[bp].fl_lastpath
|
|
call strcpy
|
|
mov si,curdir
|
|
lea di,[bp].fl_path
|
|
call strcpy
|
|
retcd1: call setcurpath
|
|
call newpath0
|
|
_endif
|
|
VZ_RET
|
|
do_retcd endp
|
|
|
|
;--- Select all ---
|
|
|
|
do_all proc
|
|
push ds
|
|
lds bx,dword ptr [bp].fl_pooltop
|
|
clr cx
|
|
doall1: cmp bx,[bp].fl_poolend
|
|
jae doall4
|
|
mov al,[bx].dr_attr
|
|
test al,FA_DIREC
|
|
_if z
|
|
xor al,FA_SEL
|
|
mov [bx].dr_attr,al ; ##157.xx
|
|
_endif
|
|
test al,FA_SEL
|
|
_ifn z
|
|
inc cx
|
|
_endif
|
|
add bx,type _dir
|
|
jmp doall1
|
|
doall4:
|
|
pop ds
|
|
mov [bp].fl_selcnt,cx
|
|
call setflwind
|
|
call dumpfile
|
|
call drawdiskinfo
|
|
VZ_RET
|
|
do_all endp
|
|
|
|
;----- Cancel all -----
|
|
|
|
do_cancel proc
|
|
push ds
|
|
lds bx,dword ptr [bp].fl_pooltop
|
|
_repeat
|
|
cmp bx,[bp].fl_poolend
|
|
_break ae
|
|
and [bx].dr_attr,not byte ptr FA_SEL
|
|
add bx,type _dir
|
|
_until
|
|
clr cx
|
|
jmp doall4
|
|
do_cancel endp
|
|
|
|
;--- Compare directory ---
|
|
|
|
do_compare proc
|
|
_repeat
|
|
mov ax,word ptr dcmpopt
|
|
shl ax,1
|
|
mov menubit,ax
|
|
mov cl,MNU_FCOMP
|
|
push dx
|
|
call sysmenu
|
|
pop dx
|
|
jc docmp9
|
|
tst al
|
|
jz docmp2
|
|
mov cl,al
|
|
mov al,80h
|
|
rol al,cl
|
|
xor dcmpopt,al
|
|
_until
|
|
docmp8:
|
|
popm <es,ds>
|
|
call setflwind
|
|
call dumpfile
|
|
call drawdiskinfo
|
|
clc
|
|
docmp9: VZ_RET
|
|
docmp2:
|
|
tstb fldual
|
|
jz docmp9
|
|
mov [bp].fl_selcnt,0
|
|
mov cl,dcmpopt
|
|
pushm <ds,es>
|
|
lds bx,dword ptr [bp].fl_pooltop
|
|
movseg es,ds
|
|
docmp3:
|
|
cmp bx,[bp].fl_poolend
|
|
jae docmp8
|
|
test [bx].dr_attr,FA_DIREC
|
|
jmpln z,docmp7
|
|
lea si,[bx].dr_pack
|
|
pushm <bx,bp>
|
|
mov bp,[bp].fl_back
|
|
mov bx,[bp].fl_pooltop
|
|
_repeat
|
|
cmp bx,[bp].fl_poolend
|
|
_break ae
|
|
lea di,[bx].dr_pack
|
|
pushm <cx,si>
|
|
mov cx,PACKSZ
|
|
repe cmpsb
|
|
popm <si,cx>
|
|
je docmp6
|
|
add bx,type _dir
|
|
_until
|
|
popm <bp,bx>
|
|
test cl,DCMP_EXIST
|
|
jnz docmp_sel
|
|
jmps docmp_x
|
|
docmp6:
|
|
mov di,bx
|
|
popm <bp,bx>
|
|
test cl,DCMP_NEW+DCMP_OLD+DCMP_LARGE+DCMP_SMALL
|
|
jz docmp_x
|
|
test cl,DCMP_NEW+DCMP_OLD
|
|
jz docmp_l
|
|
ldl [bx].dr_time
|
|
cmpl [di].dr_time
|
|
je docmp_x
|
|
jb docmp_o
|
|
test cl,DCMP_NEW
|
|
jz docmp_x
|
|
jmps docmp_l
|
|
docmp_o:test cl,DCMP_OLD
|
|
jz docmp_x
|
|
docmp_l:
|
|
test cl,DCMP_LARGE+DCMP_SMALL
|
|
jz docmp_sel
|
|
ldl [bx].dr_size
|
|
cmpl [di].dr_size
|
|
je docmp_x
|
|
jb docmp_s
|
|
test cl,DCMP_LARGE
|
|
jz docmp_x
|
|
jmps docmp_sel
|
|
docmp_s:test cl,DCMP_SMALL
|
|
jz docmp_x
|
|
docmp_sel:
|
|
or [bx].dr_attr,FA_SEL
|
|
inc [bp].fl_selcnt
|
|
docmp7: add bx,type _dir
|
|
jmp docmp3
|
|
docmp_x:
|
|
and [bx].dr_attr,not byte ptr FA_SEL
|
|
jmps docmp7
|
|
|
|
do_compare endp
|
|
|
|
;--- Execute DOS command ---
|
|
|
|
do_execmnu proc
|
|
mov dl,MNU_FEXEC
|
|
; call isbottom
|
|
test flmode,FM_EXEC
|
|
_if z
|
|
tstw walkmnu
|
|
_if z
|
|
tstw [bp].fl_selcnt
|
|
_if z
|
|
do_shell:
|
|
dec execcmd
|
|
VZ_RET
|
|
_endif
|
|
_endif
|
|
_endif
|
|
skip2
|
|
do_filemnu:
|
|
mov dl,MNU_FFILE
|
|
call schsysmenu
|
|
jc doexec_x
|
|
mov bx,si
|
|
clr si
|
|
clr ax
|
|
call cmdmenu
|
|
jc doexec_x
|
|
cmp ah,MCHR_CMD
|
|
_if e
|
|
add sp,4
|
|
mov refloc,0
|
|
jmp do_filer
|
|
_endif
|
|
cbw
|
|
doexec2:
|
|
mov di,si
|
|
call strlen
|
|
mov cx,ax
|
|
mov al,TAB
|
|
repne scasb
|
|
_if e
|
|
or dossw,VZ_DOS_BOXTTL
|
|
mov menumsgp,si
|
|
mov si,di
|
|
call skipspc
|
|
_endif
|
|
mov execcmd,si
|
|
set_poolp:
|
|
mov ax,[bp].fl_pooltop
|
|
tstw [bp].fl_selcnt
|
|
_if z
|
|
clr ax
|
|
_endif
|
|
mov [bp].fl_poolp,ax
|
|
VZ_RET
|
|
doexec_x:
|
|
stc
|
|
VZ_RET
|
|
do_execmnu endp
|
|
|
|
do_exec1 proc
|
|
; call isbottom
|
|
mov si,bx ; bx=pm
|
|
jmp doexec2
|
|
do_exec1 endp
|
|
|
|
;----- File Attribute -----
|
|
|
|
do_attr proc
|
|
; call isbottom
|
|
; mov refloc,0
|
|
push ds
|
|
call getpoolp
|
|
mov ds,dx
|
|
mov al,[bx].dr_attr
|
|
pop ds
|
|
test al,FA_ARCH
|
|
_ifn z
|
|
or al,1000b
|
|
_endif
|
|
and al,1111b
|
|
_repeat
|
|
mov attrbit,al
|
|
cbw
|
|
mov menubit,ax
|
|
mov cl,MNU_FATTR
|
|
clr dx
|
|
call sysmenu
|
|
jc doattr9
|
|
cmp al,FATTRCNT
|
|
_break e
|
|
mov cl,al
|
|
mov al,1
|
|
shl al,cl
|
|
xor al,attrbit
|
|
_until
|
|
mov di,offset cgroup:do_attr1
|
|
call do_selfiles
|
|
jc doattr9
|
|
call newpath1
|
|
clc
|
|
doattr9: VZ_RET
|
|
do_attr endp
|
|
|
|
do_attr1 proc
|
|
push ds
|
|
call copy_pack1
|
|
movseg ds,ss
|
|
mov cl,attrbit
|
|
test cl,1000b
|
|
_ifn z
|
|
and cl,0111b
|
|
or cl,FA_ARCH
|
|
_endif
|
|
clr ch
|
|
msdos F_ATTR,1
|
|
pop ds
|
|
VZ_RET
|
|
do_attr1 endp
|
|
|
|
;----- Delete -----
|
|
|
|
do_delete proc
|
|
; call isbottom
|
|
mov dl,M_DELETE
|
|
mov ax,[bp].fl_selcnt
|
|
tst ax
|
|
_if z
|
|
inc ax
|
|
_endif
|
|
push ax
|
|
mov bx,sp
|
|
call dispask
|
|
pop ax
|
|
_if a
|
|
mov di,offset cgroup:do_delete1
|
|
call do_selfiles
|
|
_ifn c
|
|
call newpath1
|
|
_endif
|
|
_endif
|
|
VZ_RET
|
|
do_delete endp
|
|
|
|
do_delete1 proc
|
|
push ds
|
|
call copy_pack1
|
|
test [bx].dr_attr,FA_DIREC
|
|
movseg ds,ss
|
|
mov ah,F_DELETE
|
|
_ifn z
|
|
mov ah,F_RMDIR
|
|
_endif
|
|
int 21h
|
|
pop ds
|
|
VZ_RET
|
|
do_delete1 endp
|
|
|
|
;----- Rename -----
|
|
|
|
do_rename proc
|
|
; call isbottom
|
|
; mov refloc,0
|
|
push bx
|
|
call getpoolp
|
|
pop si
|
|
jae doren9
|
|
xchg si,bx
|
|
mov di,nbuf
|
|
mov ds,dx
|
|
push di
|
|
movseg es,ss
|
|
call copyafile
|
|
pop si
|
|
movseg ds,ss
|
|
mov cx,32
|
|
mov dl,W_RENFILE
|
|
call windgetsc
|
|
jc doren9
|
|
jcxz doren9
|
|
mov di,si
|
|
call strskip
|
|
tstb [si]
|
|
jz doren9
|
|
mov dx,si
|
|
msdos F_RENAME
|
|
jc doren9
|
|
call newpath1
|
|
doren9: VZ_RET
|
|
do_rename endp
|
|
|
|
copy_pack1 proc
|
|
mov si,bx
|
|
mov di,ss:tmpbuf
|
|
push di
|
|
movseg es,ss
|
|
call copyafile
|
|
pop dx
|
|
VZ_RET
|
|
copy_pack1 endp
|
|
|
|
;----- Make Dir -----
|
|
|
|
do_makedir proc
|
|
; mov refloc,0
|
|
mov si,nbuf
|
|
mov cx,32
|
|
mov dl,W_MKDIR
|
|
call windgets
|
|
mov ah,F_MKDIR
|
|
jmps makepath
|
|
do_makedir endp
|
|
|
|
;----- Make New file -----
|
|
|
|
do_newfile proc
|
|
; mov refloc,0
|
|
lea ax,[bp].fl_path
|
|
push curdir
|
|
mov curdir,ax
|
|
mov si,fbuf
|
|
mov cx,PATHSZ
|
|
mov dl,W_NEW
|
|
call windgets
|
|
pop curdir
|
|
movhl ax,F_ATTR,0
|
|
makepath:
|
|
jc donew9
|
|
jcxz donew9
|
|
makepath1:
|
|
push ax
|
|
mov di,pathbuf
|
|
push di
|
|
push si
|
|
lea si,[bp].fl_path
|
|
call strcpy
|
|
call addsep
|
|
pop si
|
|
call wrdcpy
|
|
pop dx
|
|
pop ax
|
|
push ax
|
|
cmp ah,F_MKDIR
|
|
_if e
|
|
int 21h
|
|
_else
|
|
int 21h
|
|
jnc new_x
|
|
clr cx
|
|
msdos F_CREATE
|
|
_ifn c
|
|
mov bx,ax
|
|
msdos F_CLOSE
|
|
_endif
|
|
_endif
|
|
jc new_x
|
|
call skipspc
|
|
pop ax
|
|
jnc makepath1
|
|
donew8: call newpath1
|
|
donew9: VZ_RET
|
|
new_x: pop ax
|
|
jmp donew8
|
|
do_newfile endp
|
|
|
|
;----- Do select files -----
|
|
;--> DI :calling proc.
|
|
;<-- CY :nop
|
|
|
|
do_selfiles proc
|
|
push ds
|
|
tstw [bp].fl_selcnt
|
|
_if z
|
|
push dx
|
|
push ax
|
|
call getpoolp
|
|
pop ax
|
|
jae doself_x
|
|
mov ds,dx
|
|
pop dx
|
|
push di
|
|
call di
|
|
pop di
|
|
_else
|
|
lds bx,dword ptr [bp].fl_pooltop
|
|
_repeat
|
|
cmp bx,[bp].fl_poolend
|
|
_break ae
|
|
test [bx].dr_attr,FA_SEL
|
|
_ifn z
|
|
push di
|
|
call di
|
|
pop di
|
|
_endif
|
|
add bx,type _dir
|
|
_until
|
|
_endif
|
|
pop ds
|
|
clc
|
|
VZ_RET
|
|
doself_x: pop dx
|
|
pop ds
|
|
stc
|
|
VZ_RET
|
|
do_selfiles endp
|
|
|
|
;--- Quick exec for special EXT ---
|
|
|
|
isspecext proc
|
|
push es
|
|
lea si,[bx].dr_pack
|
|
call skip_ext
|
|
jz noext
|
|
movseg es,ds
|
|
movseg ds,ss
|
|
mov di,si
|
|
mov dl,MNU_FQUICK
|
|
call schsysmenu
|
|
jc noext
|
|
mov cl,[si].mn_c
|
|
clr ch
|
|
inc cx
|
|
add si,type _menu
|
|
_repeat
|
|
mov al,[si]
|
|
pushm <ax,di>
|
|
call wrdicmp
|
|
popm <di,ax>
|
|
_if c
|
|
cmp fllastcmd,CM_CR
|
|
_if e
|
|
call islower
|
|
jc specext
|
|
_else
|
|
call isupper
|
|
jc specext
|
|
_endif
|
|
_endif
|
|
call strskip
|
|
_loop
|
|
noext: pop es
|
|
VZ_RET
|
|
specext:
|
|
call skipchar
|
|
mov execcmd,si
|
|
pop es
|
|
pop ax
|
|
pop ax
|
|
VZ_RET
|
|
isspecext endp
|
|
|
|
;--- Init dump window ---
|
|
|
|
initflwind proc
|
|
call dosheight
|
|
sub ch,4
|
|
movhl dx,2,1
|
|
mov ax,[bp].fl_files
|
|
cmp hfiles,5
|
|
_if e
|
|
tstb fldual
|
|
_ifn z
|
|
shr ch,1
|
|
dec ch
|
|
tstb [bp].fl_which
|
|
_ifn z
|
|
add dh,ch
|
|
add dh,2
|
|
_endif
|
|
_endif
|
|
mov cl,5
|
|
div cl
|
|
mov cl,WD-2
|
|
tst ah
|
|
_ifn z
|
|
inc al
|
|
clr ah
|
|
_endif
|
|
_else
|
|
mov cl,WD/2-2
|
|
tstb [bp].fl_which
|
|
_ifn z
|
|
mov dl,WD/2+1
|
|
_endif
|
|
_endif
|
|
mov [bp].fl_tsy,ax
|
|
tst ah
|
|
jnz iwind3
|
|
cmp al,ch
|
|
ja iwind3
|
|
mov ch,al
|
|
iwind3: mov word ptr [bp].fl_wpx,dx
|
|
mov word ptr [bp].fl_wsx,cx
|
|
call setwindow
|
|
call initcsrpos
|
|
VZ_RET
|
|
initflwind endp
|
|
|
|
setflwind proc
|
|
mov dx,word ptr [bp].fl_wpx
|
|
mov cx,word ptr [bp].fl_wsx
|
|
call setwindow
|
|
VZ_RET
|
|
setflwind endp
|
|
|
|
;--- Init cursor position ---
|
|
|
|
initcsrpos proc
|
|
push es
|
|
push ds
|
|
mov si,pathbuf
|
|
tstb [si]
|
|
jz ibcsr2
|
|
call strlen
|
|
pushm <ax,si>
|
|
lea si,[bp].fl_path
|
|
call strlen
|
|
popm <si,cx>
|
|
cmp ax,cx
|
|
ja ibcsr3
|
|
add si,ax
|
|
cmp byte ptr [si],'\'
|
|
_if e
|
|
inc si
|
|
_endif
|
|
cmp byte ptr [si],'/'
|
|
_if e
|
|
inc si
|
|
_endif
|
|
clr cx
|
|
les di,dword ptr [bp].fl_pooltop
|
|
add di,dr_pack
|
|
_repeat
|
|
cmp di,[bp].fl_poolend
|
|
jae ibcsr3
|
|
call stricmp
|
|
je ibcsr8
|
|
inc cx
|
|
add di,type _dir
|
|
_until
|
|
|
|
ibcsr2:
|
|
mov cx,[bp].fl_bcsr
|
|
_ifn cxz
|
|
cmp cx,[bp].fl_files
|
|
jb ibcsr8
|
|
_endif
|
|
mov [bp].fl_home,0
|
|
lds bx,dword ptr [bp].fl_pooltop
|
|
clr cx
|
|
_repeat
|
|
cmp bx,[bp].fl_poolend
|
|
_break ae
|
|
test [bx].dr_attr,FA_DIREC
|
|
jz ibcsr8
|
|
add bx,type _dir
|
|
inc cx
|
|
_until
|
|
ibcsr3: clr cx
|
|
ibcsr8: pop ds
|
|
call fsetcsr
|
|
pop es
|
|
VZ_RET
|
|
initcsrpos endp
|
|
|
|
;--- Draw window frame ---
|
|
|
|
drawflframe proc
|
|
mov al,ATR_WFRM
|
|
call dispframe
|
|
call drawpath
|
|
call drawdiskinfo
|
|
VZ_RET
|
|
drawflframe endp
|
|
|
|
;--- Draw disk info. ---
|
|
|
|
drawdiskinfo proc
|
|
mov dx,word ptr [bp].fl_wsx
|
|
sub dl,PX_FILES
|
|
call locate
|
|
call fillset
|
|
mov dx,[bp].fl_selcnt
|
|
mov cx,dx
|
|
tst cx
|
|
jnz drfile1
|
|
mov dx,[bp].fl_files
|
|
dec dx
|
|
mov al,ATR_W1ST ; ##153.47
|
|
tstb [bp].fl_overflow
|
|
jnz drfile2
|
|
drfile1:mov al,ATR_WTXT
|
|
drfile2:push dx
|
|
call setatr
|
|
mov bx,sp
|
|
mov si,offset cgroup:pf_files
|
|
call printf
|
|
inc sp
|
|
inc sp
|
|
mov al,ATR_WFRM
|
|
_ifn cxz
|
|
mov al,ATR_W1ST
|
|
_endif
|
|
mov si,offset cgroup:mg_files
|
|
mov dl,PX_FILES-PX_FREE
|
|
call drfile3
|
|
mov al,ATR_WTXT
|
|
call setatr
|
|
ldl [bp].fl_free
|
|
_ifn cxz
|
|
call sumselsize
|
|
_endif
|
|
push dx
|
|
push ax
|
|
mov bx,sp
|
|
mov si,offset cgroup:pf_free
|
|
call printf
|
|
add sp,4
|
|
tst cx
|
|
_if z
|
|
mov al,ATR_WFRM
|
|
mov si,offset cgroup:mg_free
|
|
_else
|
|
mov al,ATR_W1ST
|
|
mov si,offset cgroup:mg_total
|
|
_endif
|
|
mov dl,PX_FILES
|
|
drfile3:
|
|
call setatr
|
|
call putmg
|
|
mov al,ATR_WFRM
|
|
call setatr2
|
|
mov al,GRC_H
|
|
call fillc
|
|
VZ_RET
|
|
drawdiskinfo endp
|
|
|
|
;--- Sum select files size ---
|
|
;<-- DX:AX size
|
|
|
|
sumselsize proc
|
|
clr ax
|
|
clr dx
|
|
mov bx,bp
|
|
tstb fldual
|
|
_ifn z
|
|
mov bx,[bp].fl_back
|
|
_endif
|
|
mov cx,[bx].fl_clust
|
|
dec cx
|
|
mov di,offset cgroup:sumselsize1
|
|
call do_selfiles
|
|
VZ_RET
|
|
sumselsize endp
|
|
|
|
sumselsize1 proc
|
|
mov di,word ptr [bx].dr_size
|
|
add di,cx
|
|
_ifn c ; ##100.22
|
|
not cx
|
|
and di,cx
|
|
not cx
|
|
add ax,di
|
|
_endif
|
|
adc dx,word ptr [bx].dr_size+2
|
|
VZ_RET
|
|
sumselsize1 endp
|
|
|
|
;--- Draw path name ---
|
|
|
|
drawpath proc
|
|
call iscurdir ; ##151.13
|
|
movhl dx,-1,PX_TTL
|
|
call locate
|
|
mov al,ATR_WTXT
|
|
call setatr
|
|
tstb [bp].fl_curf
|
|
_if z
|
|
call revatr
|
|
_endif
|
|
call putspc
|
|
lea si,[bp].fl_path
|
|
call puts
|
|
mov al,dirchr
|
|
cmp byte ptr [si-2],al
|
|
_ifn e
|
|
call putc
|
|
_endif
|
|
lea si,[bp].fl_mask
|
|
call puts
|
|
call putspc
|
|
call getloc
|
|
mov [bp].fl_ttlsx,dl
|
|
mov al,ATR_WTXT
|
|
call setatr
|
|
VZ_RET
|
|
drawpath endp
|
|
|
|
;--- Draw outer region ---
|
|
|
|
drawouter proc
|
|
call doswindow
|
|
mov cl,WD ; ##156.123
|
|
mov al,fldual
|
|
mov ah,[bp].fl_which
|
|
cmp hfiles,5
|
|
_if e
|
|
tst al
|
|
_ifn z
|
|
tst ah
|
|
_if z
|
|
shr ch,1
|
|
_endif
|
|
_endif
|
|
clr dl
|
|
_else
|
|
tst al
|
|
_if z
|
|
inc dh
|
|
dec ch
|
|
mov dl,WD/2
|
|
mov cl,WD/2
|
|
call putcurwind
|
|
call dosheight
|
|
_endif
|
|
mov dl,[bp].fl_wpx
|
|
dec dl
|
|
mov cl,WD/2
|
|
_endif
|
|
mov dh,[bp].fl_wpy
|
|
add dh,[bp].fl_wsy
|
|
inc dh
|
|
sub ch,dh
|
|
_if g
|
|
call putcurwind
|
|
_endif
|
|
VZ_RET
|
|
drawouter endp
|
|
|
|
;--- Dump files ---
|
|
|
|
dumpfile proc
|
|
tstb [bp].fl_wsy
|
|
_ifn z
|
|
mov ax,type _dir
|
|
mul [bp].fl_home
|
|
mov bx,[bp].fl_pooltop
|
|
add bx,ax
|
|
clr dh
|
|
_repeat
|
|
call dumpline
|
|
inc dh
|
|
cmp dh,[bp].fl_wsy
|
|
_while b
|
|
_endif
|
|
VZ_RET
|
|
dumpfile endp
|
|
|
|
dumpline proc
|
|
clr dl
|
|
call locate
|
|
dumpl1:
|
|
push ds
|
|
mov ds,[bp].fl_seg
|
|
call set_flatr
|
|
call fillset
|
|
cmp bx,[bp].fl_poolend
|
|
_if e
|
|
pop ds
|
|
mov si,offset cgroup:mg_eod
|
|
mov al,'-'
|
|
tstb [bp].fl_overflow
|
|
_ifn z
|
|
mov si,offset cgroup:mg_ovf
|
|
mov al,'*'
|
|
_endif
|
|
cmp ss:hfiles,5
|
|
_if e
|
|
call putmg
|
|
jmps dumpl5
|
|
_endif
|
|
push ax
|
|
call putspc
|
|
pop ax
|
|
push ax
|
|
mov cl,11
|
|
call repputc
|
|
call putmg
|
|
pop ax
|
|
call repputc
|
|
jmps dumpl6
|
|
_endif
|
|
; cmp bx,[bp].fl_poolend ; ##156.127
|
|
_if b
|
|
test ss:flmode,FM_FDCSR
|
|
_if z
|
|
test [bx].dr_attr,FA_SEL
|
|
_ifn z
|
|
call revatr
|
|
_endif
|
|
call putspc
|
|
_else
|
|
clr ah
|
|
call put_marker
|
|
_endif
|
|
call dumpname
|
|
_endif
|
|
pop ds
|
|
mov dl,14 ; ##156.119
|
|
call fillspc
|
|
cmp ss:hfiles,5
|
|
_if e
|
|
dumpl5: mov al,ATR_WTXT
|
|
call setatr
|
|
add bx,type _dir
|
|
call getloc
|
|
cmp dl,77
|
|
jae dumpl9
|
|
mov dl,16
|
|
call fillspc
|
|
jmp dumpl1
|
|
_endif
|
|
; mov dl,14
|
|
; call fillspc
|
|
call dumpinfo
|
|
dumpl6: call putspc
|
|
add bx,type _dir
|
|
dumpl9: VZ_RET
|
|
dumpline endp
|
|
|
|
dumpname proc
|
|
lea si,[bx].dr_pack
|
|
test [bx].dr_attr,FA_DIREC
|
|
_ifn z
|
|
call puts
|
|
mov al,ss:dirchr
|
|
call putc
|
|
_else
|
|
_repeat
|
|
lodsb
|
|
tst al
|
|
_break z
|
|
cmp al,'.'
|
|
_break z
|
|
call iskanji
|
|
_if c
|
|
push dx
|
|
mov dh,al
|
|
lodsb
|
|
mov dl,al
|
|
call putcw
|
|
pop dx
|
|
_else
|
|
call putc
|
|
_endif
|
|
_until
|
|
push ax
|
|
mov dl,9
|
|
call fillspc
|
|
pop ax
|
|
tst al
|
|
_ifn z
|
|
call putc
|
|
call puts
|
|
_endif
|
|
_endif
|
|
VZ_RET
|
|
dumpname endp
|
|
|
|
dumpinfo proc
|
|
pushm <dx,es>
|
|
mov es,[bp].fl_seg
|
|
test es:[bx].dr_attr,FA_DIREC
|
|
_ifn z
|
|
mov si,offset cgroup:mg_dir
|
|
call putmg
|
|
_else
|
|
push bx
|
|
ldl es:[bx].dr_size
|
|
pushm <dx,ax>
|
|
mov bx,sp
|
|
mov si,offset cgroup:pf_size
|
|
call printf
|
|
add sp,4
|
|
pop bx
|
|
_endif
|
|
IFDEF US
|
|
mov dl,22 ; ##156.119
|
|
ELSE
|
|
mov dl,23
|
|
ENDIF
|
|
call fillspc
|
|
push bx
|
|
IFDEF US ; ##156.92
|
|
mov si,bx
|
|
; mov ch,byte ptr syssw+1
|
|
; and ch,SW_US / 256
|
|
;_if z
|
|
; call putspc
|
|
;_endif
|
|
mov ax,es:[si].dr_time
|
|
mov dx,ax
|
|
mov cl,5
|
|
shr dx,cl
|
|
and dx,111111b
|
|
rol ax,cl
|
|
and ax,11111b
|
|
clr bx
|
|
; tst ch
|
|
;_ifn z
|
|
mov bl,'a'
|
|
cmp al,12
|
|
_if ae
|
|
mov bl,'p'
|
|
_endif
|
|
tst al
|
|
_if z
|
|
add al,12
|
|
_endif
|
|
cmp al,12
|
|
_if a
|
|
sub al,12
|
|
_endif
|
|
;_endif
|
|
pushm <bx,dx,ax>
|
|
mov ax,es:[si].dr_date
|
|
mov bx,ax
|
|
and bx,11111b
|
|
mov dx,ax
|
|
shr dx,cl
|
|
and dx,1111b
|
|
mov cl,9
|
|
shr ax,cl
|
|
add al,80
|
|
cmp al,100
|
|
_if ae
|
|
sub al,100
|
|
_endif
|
|
; tst ch
|
|
;_ifn z
|
|
xchg ax,dx
|
|
xchg bx,dx
|
|
;_endif
|
|
pushm <bx,dx,ax>
|
|
mov bx,sp
|
|
mov si,offset cgroup:pf_time
|
|
call printf
|
|
add sp,12
|
|
ELSE
|
|
mov ax,es:[bx].dr_time
|
|
mov dx,ax
|
|
mov cl,5
|
|
shr ax,cl
|
|
and ax,111111b
|
|
push ax
|
|
rol dx,cl
|
|
and dx,11111b
|
|
push dx
|
|
mov ax,es:[bx].dr_date
|
|
mov dx,ax
|
|
and ax,11111b
|
|
push ax
|
|
mov ax,dx
|
|
shr ax,cl
|
|
and ax,1111b
|
|
push ax
|
|
mov cl,9
|
|
shr dx,cl
|
|
add dx,80
|
|
cmp dx,100
|
|
_if ae
|
|
sub dx,100
|
|
_endif
|
|
push dx
|
|
mov bx,sp
|
|
mov si,offset cgroup:pf_time
|
|
call printf
|
|
add sp,10
|
|
ENDIF
|
|
pop bx
|
|
popm <es,dx>
|
|
VZ_RET
|
|
dumpinfo endp
|
|
|
|
;----- Set filer attribute ------
|
|
|
|
set_flatr proc
|
|
push bp
|
|
clr al
|
|
cmp bx,[bp].fl_poolend
|
|
_if b
|
|
mov al,[bx].dr_attr
|
|
_endif
|
|
mov ah,al
|
|
and ah,FA_DIREC+FA_BINARY
|
|
mov cl,5
|
|
shl al,cl
|
|
or al,ah
|
|
mov bp,offset cgroup:flatrtbl
|
|
mov cx,FLATRCNT-1
|
|
_repeat
|
|
shl al,1
|
|
_break c
|
|
inc bp
|
|
_loop
|
|
mov al,[bp]
|
|
tst al
|
|
_if z
|
|
mov al,ATR_WTXT
|
|
call setatr
|
|
_else
|
|
call set_attr
|
|
_endif
|
|
pop bp
|
|
VZ_RET
|
|
set_flatr endp
|
|
|
|
;----- Put select marker -----
|
|
;--> AH :cursor mode
|
|
|
|
put_marker proc
|
|
call getatr1
|
|
push ax
|
|
test [bx].dr_attr,FA_SEL
|
|
_if z
|
|
mov al,SPC
|
|
_else
|
|
tst ah
|
|
_if z
|
|
mov al,ATR_WTXT
|
|
call setatr
|
|
_endif
|
|
mov al,'*'
|
|
_endif
|
|
call putc
|
|
pop ax
|
|
call setatr1
|
|
VZ_RET
|
|
put_marker endp
|
|
|
|
;--- Block cursor on/off ---
|
|
|
|
bcsron proc
|
|
mov ah,TRUE
|
|
skip2
|
|
bcsroff:
|
|
mov ah,FALSE
|
|
pushm <bx,cx,ds>
|
|
push ax
|
|
call getpoolp
|
|
mov ds,dx
|
|
call set_flatr
|
|
mov dl,al
|
|
pop ax
|
|
push ax
|
|
tst ah
|
|
_ifn z
|
|
test ss:flmode,FM_FDCSR
|
|
_if z
|
|
mov al,ATR_BCSR
|
|
call setatr
|
|
test [bx].dr_attr,FA_SEL
|
|
_ifn z
|
|
cmp al,dl
|
|
_if e
|
|
mov al,ATR_WTXT
|
|
call setatr
|
|
_endif
|
|
_endif
|
|
call undatr
|
|
_else
|
|
call revatr
|
|
_endif
|
|
_endif
|
|
call bcsrloc
|
|
mov cl,14
|
|
cmp ss:hfiles,5
|
|
_ifn e
|
|
mov cl,38
|
|
_endif
|
|
test ss:flmode,FM_FDCSR
|
|
_if z
|
|
cmp bx,[bp].fl_poolend ; ##156.127
|
|
_if b
|
|
test [bx].dr_attr,FA_SEL
|
|
_ifn z
|
|
call revatr
|
|
_endif
|
|
_endif
|
|
test ss:hardware,IDN_PC98
|
|
_if z
|
|
dec cx
|
|
call fillatr
|
|
pop ax
|
|
push ax
|
|
tst ah
|
|
_ifn z
|
|
call undatr
|
|
_endif
|
|
mov cl,1
|
|
_endif
|
|
call fillatr
|
|
_else
|
|
call locate
|
|
pop ax
|
|
push ax
|
|
call put_marker
|
|
inc dl
|
|
dec cx
|
|
call fillatr
|
|
_endif
|
|
pop ax
|
|
popm <ds,cx,bx>
|
|
VZ_RET
|
|
bcsron endp
|
|
|
|
bcsrloc proc
|
|
mov ax,[bp].fl_bcsr
|
|
bcsrloc1:
|
|
sub ax,[bp].fl_home
|
|
cwd
|
|
div ss:hfiles
|
|
shlm dx,4
|
|
mov dh,al
|
|
VZ_RET
|
|
bcsrloc endp
|
|
|
|
;--- Init pool ptr ---
|
|
;<-- BX :pool ptr
|
|
|
|
initpoolp proc
|
|
mov di,pool
|
|
tstb fldual
|
|
_ifn z
|
|
mov bx,[bp].fl_back
|
|
mov si,[bx].fl_pooltop
|
|
tst si
|
|
_ifn z
|
|
mov cx,[bx].fl_poolend
|
|
sub cx,si
|
|
pushm <ds,es>
|
|
mov ds,[bp].fl_seg
|
|
movseg es,ds
|
|
call memmove
|
|
popm <es,ds>
|
|
mov ax,si
|
|
sub ax,di
|
|
sub [bx].fl_pooltop,ax
|
|
sub [bx].fl_poolend,ax
|
|
sub [bx].fl_poolp,ax
|
|
add di,cx
|
|
_endif
|
|
_endif
|
|
mov bx,di
|
|
mov [bp].fl_pooltop,bx
|
|
mov [bp].fl_poolp,bx
|
|
VZ_RET
|
|
initpoolp endp
|
|
|
|
;--- Read directory ---
|
|
;--> BX :pool ptr
|
|
|
|
readdir proc
|
|
mov [bp].fl_overflow,FALSE
|
|
mov dx,tmpbuf3
|
|
msdos F_SETDTA
|
|
clr cx ; CX :file counter
|
|
lea si,[bp].fl_mask
|
|
mov di,offset cgroup:mask_all
|
|
mov dl,FA_DIREC
|
|
cmp word ptr [si],'*'
|
|
_ifn e
|
|
push di
|
|
call strcmp
|
|
pop di
|
|
_ifn e
|
|
mov dl,FA_DIREC+FA_SEL
|
|
_endif
|
|
_endif
|
|
mov ah,F_FINDDIR
|
|
mov si,bx
|
|
_repeat
|
|
call getdir
|
|
_until c
|
|
test dl,FA_SEL
|
|
jz readdir8
|
|
|
|
lea si,[bp].fl_mask
|
|
cmp word ptr [si],'.'
|
|
_if e
|
|
mov si,extlist
|
|
_endif
|
|
|
|
_repeat
|
|
call skipspc
|
|
_break c
|
|
mov di,pathbuf2
|
|
push di
|
|
cmp byte ptr [si],'.'
|
|
_if e
|
|
mov al,'*'
|
|
stosb
|
|
_endif
|
|
clr ah
|
|
_repeat
|
|
lodsb
|
|
stosb
|
|
cmp al,'.'
|
|
_if e
|
|
mov ah,TRUE
|
|
_endif
|
|
cmp al,SPC
|
|
_while a
|
|
dec si
|
|
dec di
|
|
tst ah
|
|
_if z
|
|
mov ax,'*.'
|
|
stosw
|
|
_endif
|
|
clr al
|
|
stosb
|
|
pop di
|
|
mov ah,F_FINDDIR
|
|
push si
|
|
mov si,bx
|
|
_repeat
|
|
mov dl,FA_SEL
|
|
call getdir
|
|
_until c
|
|
pop si
|
|
tst si
|
|
_until z
|
|
|
|
readdir8:
|
|
inc cx ; End of dir
|
|
mov [bp].fl_poolend,bx
|
|
tstw [bp].fl_files ; ##16
|
|
_if z
|
|
mov [bp].fl_bcsr,0
|
|
_endif
|
|
cmp cx,[bp].fl_bcsr
|
|
_if b
|
|
mov ax,cx
|
|
dec ax
|
|
mov [bp].fl_bcsr,ax
|
|
_endif
|
|
mov [bp].fl_files,cx
|
|
mov [bp].fl_selcnt,0
|
|
call fsethome
|
|
mov dl,0
|
|
msdos F_GETDRV
|
|
cmp ax,-1
|
|
_ifn e ; ##100.13
|
|
mul cx
|
|
mov [bp].fl_clust,ax
|
|
mul bx
|
|
stl [bp].fl_free
|
|
_endif
|
|
VZ_RET
|
|
readdir endp
|
|
|
|
;--- Get one dir ---
|
|
;-->
|
|
; AH :funcion No.
|
|
; BX :pool ptr (update)
|
|
; CX :file count (update)
|
|
; DL :file attr
|
|
; SI :sort start ptr
|
|
; DI :mask string
|
|
;<--
|
|
; CY :no more files
|
|
|
|
getdir proc
|
|
cmp bx,poolend
|
|
_if ae
|
|
mov [bp].fl_overflow,TRUE
|
|
stc
|
|
getd9: VZ_RET
|
|
_endif
|
|
tstw hidden
|
|
_ifn z
|
|
or dl,FA_SYSTEM+FA_HIDDEN
|
|
_endif
|
|
call finddir
|
|
jc getd9
|
|
pushm <di,ds,es>
|
|
push si
|
|
mov si,tmpbuf3
|
|
add si,dta_attr
|
|
mov es,[bp].fl_seg
|
|
push cx
|
|
mov di,bx
|
|
and byte ptr [si],not byte ptr FA_SEL ; ##156.104
|
|
mov cx,dta_pack-dta_attr
|
|
rep movsb
|
|
mov cx,PACKSZ
|
|
push di
|
|
clr al
|
|
rep stosb
|
|
pop di
|
|
push di
|
|
call strcpy
|
|
pop si
|
|
movseg ds,es
|
|
test ss:dspsw,DSP_PATHCASE
|
|
_ifn z
|
|
call strlwr
|
|
_endif
|
|
pop cx
|
|
test dl,FA_SEL
|
|
_ifn z
|
|
mov al,[bx].dr_attr
|
|
xor al,dl
|
|
test al,FA_DIREC
|
|
jnz getd4
|
|
_endif
|
|
mov si,bx
|
|
add si,dr_pack
|
|
cmp word ptr [si],'.'
|
|
je getd4
|
|
test [bx].dr_attr,FA_DIREC
|
|
jnz getd3
|
|
tstw ss:archive
|
|
_ifn z
|
|
test [bx].dr_attr,FA_ARCH
|
|
jz getd4
|
|
_endif
|
|
call skip_ext
|
|
jz chktype
|
|
push cx
|
|
call isbinary
|
|
mov al,FT_ALL
|
|
tst ch
|
|
_ifn z
|
|
or [bx].dr_attr,FA_BINARY
|
|
mov al,FT_BIN
|
|
_endif
|
|
pop cx
|
|
chktype:
|
|
mov dh,ss:flbinary
|
|
tst dh
|
|
_ifn z
|
|
_if g ; FT_TEXT
|
|
mov dh,FT_ALL
|
|
_endif
|
|
cmp al,dh
|
|
jne getd4
|
|
_endif
|
|
getd3:
|
|
pop si
|
|
push si
|
|
tstb ss:sortopt
|
|
_ifn z
|
|
call sortdir
|
|
_endif
|
|
inc cx
|
|
add bx,type _dir
|
|
mov [bx].dr_attr,0
|
|
getd4: pop si
|
|
popm <es,ds,di>
|
|
cmp ah,F_FINDDIR
|
|
jne getd8
|
|
inc ah
|
|
getd8: clc
|
|
VZ_RET
|
|
getdir endp
|
|
|
|
skip_ext proc
|
|
_repeat
|
|
lodsb
|
|
tst al
|
|
_break z
|
|
cmp al,'.'
|
|
_until e
|
|
tst al
|
|
VZ_RET
|
|
skip_ext endp
|
|
|
|
;--- Sort directory ---
|
|
;-->
|
|
; SI :sort start ptr
|
|
; BX :current ptr
|
|
|
|
sortdir proc
|
|
pushm <ax,cx,dx,si,di>
|
|
sort1: cmp si,bx
|
|
je sort9
|
|
cmp word ptr [si].dr_pack,'..'
|
|
je sort2
|
|
mov di,bx
|
|
mov al,[si].dr_attr
|
|
mov ah,al
|
|
xor ah,[di].dr_attr
|
|
test ah,FA_DIREC
|
|
jnz sort3
|
|
mov cl,ss:sortopt
|
|
test cl,not SORT_DIR
|
|
_ifn z
|
|
pushm <si,di>
|
|
test cl,SORT_NAME+SORT_EXT
|
|
_ifn z
|
|
call byname
|
|
_else
|
|
test cl,SORT_NEW+SORT_OLD
|
|
_ifn z
|
|
call bytime
|
|
_else
|
|
call bysize
|
|
_endif
|
|
_endif
|
|
popm <di,si>
|
|
ja sort4
|
|
_endif
|
|
sort2: add si,type _dir
|
|
jmp sort1
|
|
sort3:
|
|
mov dx,type _dir
|
|
test al,FA_DIREC
|
|
jnz sort2
|
|
sort4:
|
|
mov dx,type _dir
|
|
push di
|
|
mov cx,di
|
|
add cx,dx
|
|
sub cx,si
|
|
mov di,si
|
|
add di,dx
|
|
call memmove
|
|
mov di,si
|
|
pop si
|
|
add si,dx
|
|
mov cx,dx
|
|
call memmove
|
|
sort9: popm <di,si,dx,cx,ax>
|
|
VZ_RET
|
|
sortdir endp
|
|
|
|
;--- Compare by name ---
|
|
;-->
|
|
; SI-DI :dir ptr
|
|
; DL :sort option
|
|
|
|
byname proc
|
|
add si,dr_pack
|
|
add di,dr_pack
|
|
test cl,SORT_EXT
|
|
_if z
|
|
mov cx,12
|
|
_else
|
|
pushm <si,di>
|
|
call skip_ext
|
|
dec si
|
|
mov al,'.'
|
|
_repeat
|
|
scasb
|
|
_break e
|
|
tstb es:[di-1]
|
|
_until z
|
|
dec di
|
|
mov cx,4
|
|
repz cmpsb
|
|
popm <di,si>
|
|
jne bynam9
|
|
mov cx,8
|
|
_endif
|
|
repz cmpsb
|
|
bynam9: VZ_RET
|
|
byname endp
|
|
|
|
;--- Compare by time/size ---
|
|
;-->
|
|
; SI-DI :dir ptr
|
|
; DL :sort option
|
|
|
|
bysize proc
|
|
add si,dr_size-dr_time
|
|
add di,dr_size-dr_time
|
|
mov ch,SORT_LARGE
|
|
jmps bytime1
|
|
bytime proc
|
|
mov ch,SORT_NEW
|
|
bytime1:ldl [si].dr_time
|
|
cmpl [di].dr_time
|
|
lahf
|
|
test cl,ch
|
|
_ifn z
|
|
xor ah,1
|
|
_endif
|
|
sahf
|
|
VZ_RET
|
|
bytime endp
|
|
bysize endp
|
|
|
|
;----- Speed Seach ----- ; ##156.101
|
|
;--> DL :key
|
|
|
|
do_search proc
|
|
push ds
|
|
and dl,not 20h ; to upper
|
|
push dx
|
|
call getpoolp
|
|
mov ds,dx
|
|
pop dx
|
|
mov cx,bx
|
|
_repeat
|
|
dosrch1:
|
|
add bx,type _dir
|
|
cmp bx,[bp].fl_poolend
|
|
_if a
|
|
mov bx,[bp].fl_pooltop
|
|
_endif
|
|
cmp bx,cx
|
|
je sch_ng
|
|
cmp bx,[bp].fl_poolend
|
|
je dosrch1
|
|
mov al,[bx].dr_pack
|
|
and al,not 20h
|
|
cmp al,dl
|
|
_until e
|
|
sub bx,[bp].fl_pooltop
|
|
mov ax,bx
|
|
cwd
|
|
mov cx,type _dir
|
|
div cx
|
|
mov cx,ax
|
|
pop ds
|
|
jmp fscroll
|
|
sch_ng: pop ds
|
|
VZ_RET
|
|
do_search endp
|
|
|
|
;--- Check DIR in pool --- ; ##156.100
|
|
;<-- CY :exist
|
|
|
|
check_dir proc
|
|
push ds
|
|
lds bx,dword ptr [bp].fl_pooltop
|
|
_repeat
|
|
mov al,[bx].dr_attr
|
|
and al,FA_SEL+FA_DIREC
|
|
cmp al,FA_SEL+FA_DIREC
|
|
je exist_dir
|
|
add bx,type _dir
|
|
cmp bx,[bp].fl_poolend
|
|
_while b
|
|
pop ds
|
|
clc
|
|
VZ_RET
|
|
exist_dir:
|
|
pop ds
|
|
stc
|
|
VZ_RET
|
|
check_dir endp
|
|
|
|
endcs
|
|
|
|
eseg
|
|
|
|
;--- Get path from pool ---
|
|
;-->
|
|
; AL :full path
|
|
; ES:DI :result path ptr
|
|
;<--
|
|
; BX :name ptr
|
|
|
|
public getpool
|
|
getpool proc
|
|
pushm <bp,ds>
|
|
movseg ds,ss
|
|
mov bp,actwkp
|
|
call cpyaccdir
|
|
call mappoolseg
|
|
call copyafile
|
|
popm <ds,bp>
|
|
VZ_RET
|
|
getpool endp
|
|
|
|
copyafile proc
|
|
mov ah,[si] ; ##156.100
|
|
add si,dr_pack
|
|
; call strcpy
|
|
; test ah,FA_DIREC
|
|
;_if z
|
|
; tstb [si]
|
|
; _ifn z
|
|
; mov al,'.'
|
|
; stosb
|
|
call strcpy
|
|
; _endif
|
|
;_endif
|
|
VZ_RET
|
|
copyafile endp
|
|
|
|
assume ds:nothing
|
|
|
|
;--- Search next file in pool ---
|
|
;--> CY :no more files
|
|
|
|
public nextpool
|
|
nextpool proc
|
|
pushm <bp,ds>
|
|
mov bp,actwkp
|
|
mov ds,[bp].fl_seg ; SS != CS
|
|
call nextpool1
|
|
mov [bp].fl_poolp,si
|
|
popm <ds,bp>
|
|
VZ_RET
|
|
|
|
nextpool1:
|
|
call mappoolseg
|
|
_ifn c
|
|
mov al,byte ptr ss:basemode
|
|
cmp al,SYS_FILER
|
|
je npool2
|
|
_repeat
|
|
cmp si,[bp].fl_poolend
|
|
jae npool3
|
|
test [si].dr_attr,FA_SEL
|
|
_break nz
|
|
npool2:
|
|
add si,type _dir
|
|
_until
|
|
cmp al,SYS_FILER
|
|
_ifn e
|
|
and [si].dr_attr,not byte ptr FA_SEL
|
|
dec [bp].fl_selcnt
|
|
_endif
|
|
_endif
|
|
clc
|
|
VZ_RET
|
|
npool3: clr si
|
|
stc
|
|
VZ_RET
|
|
nextpool endp
|
|
|
|
mappoolseg proc
|
|
mov ax,farseg
|
|
call ems_map
|
|
mov ds,ax
|
|
mov si,[bp].fl_poolp
|
|
tst si
|
|
_if z
|
|
pushm <ax,bx>
|
|
call getpoolp
|
|
mov si,bx
|
|
popm <bx,ax>
|
|
mov [bp].fl_poolp,si
|
|
stc
|
|
_endif
|
|
VZ_RET
|
|
mappoolseg endp
|
|
|
|
;----- Scan first file -----
|
|
|
|
scan_1st proc
|
|
call getpoolp
|
|
mov ds,dx
|
|
tstw [bp].fl_selcnt
|
|
jz sc1st9
|
|
mov bx,[bp].fl_pooltop
|
|
_repeat
|
|
cmp bx,[bp].fl_poolend
|
|
_break ae
|
|
test [bx].dr_attr,FA_SEL
|
|
_break nz
|
|
add bx,type _dir
|
|
_until
|
|
sc1st9: VZ_RET
|
|
scan_1st endp
|
|
|
|
;----- Open from 2nd window -----
|
|
|
|
public chk_fldual
|
|
chk_fldual proc
|
|
push bp
|
|
tstb fldual
|
|
_ifn z
|
|
mov bp,actwkp
|
|
mov bp,[bp].fl_back
|
|
tstw [bp].fl_selcnt
|
|
_ifn z
|
|
mov actwkp,bp
|
|
_endif
|
|
_endif
|
|
pop bp
|
|
VZ_RET
|
|
chk_fldual endp
|
|
|
|
assume ds:cgroup
|
|
|
|
;--- Get pooled file name ---
|
|
;--> DS:SI :file name
|
|
|
|
public poolnamep
|
|
poolnamep proc
|
|
push bp
|
|
mov bp,actwkp
|
|
mov ds,[bp].fl_seg
|
|
mov si,[bp].fl_poolp
|
|
tst si
|
|
_ifn z
|
|
add si,dr_pack
|
|
_endif
|
|
pop bp
|
|
VZ_RET
|
|
poolnamep endp
|
|
|
|
;--- Copy access directory ---
|
|
|
|
cpyaccdir proc
|
|
mov bx,di
|
|
lea si,[bp].fl_path
|
|
tstb [bp].fl_curf
|
|
_if z
|
|
tst al
|
|
jz cpyac9
|
|
call strcpy
|
|
call addsep
|
|
mov bx,di
|
|
VZ_RET
|
|
_endif
|
|
call strcpy
|
|
call addsep
|
|
cpyac9: VZ_RET
|
|
cpyaccdir endp
|
|
|
|
;--- Select drive ---
|
|
;--> AL :drive No. (A=0)
|
|
;<-- CY :error (AL :drive count)
|
|
|
|
seldrv proc
|
|
mov dl,al
|
|
msdos F_SELDRV
|
|
cmp al,26 ; ##156.120
|
|
_if a
|
|
mov al,26
|
|
_endif
|
|
mov drive_c,al
|
|
cmp dl,al
|
|
_if b
|
|
clc
|
|
VZ_RET
|
|
_endif
|
|
stc
|
|
VZ_RET
|
|
seldrv endp
|
|
|
|
;--- Change path ---
|
|
;--> SI :dir name ptr
|
|
|
|
public chgpath,chpath
|
|
chgpath:
|
|
test dl,VZ_PRS_DRV
|
|
jnz chpath
|
|
jmps chpath1
|
|
|
|
setcurpath proc
|
|
lea si,[bp].fl_path
|
|
chpath:
|
|
lodsb
|
|
inc si
|
|
and al,1Fh ; ##100.01
|
|
dec al
|
|
call seldrv
|
|
chpath1:mov dx,si
|
|
msdos F_CHDIR
|
|
VZ_RET
|
|
setcurpath endp
|
|
|
|
;--- Set access dir ---
|
|
;<-- CY :path not found
|
|
|
|
setaccdir proc
|
|
mov si,pathp
|
|
lea di,[bp].fl_path
|
|
mov dl,parsef
|
|
tst si
|
|
jz setac1
|
|
test dl,VZ_PRS_DRV+VZ_PRS_DIR
|
|
jnz setac2
|
|
setac1: mov si,di
|
|
call chpath
|
|
jnc setac9
|
|
resetaccdir:
|
|
lea di,[bp].fl_path ; ##156.??
|
|
cmp ax,-1 ; ##152.15
|
|
jne getaccdir
|
|
mov si,curdir ; ##151.12
|
|
call chpath
|
|
mov [bp].fl_files,0
|
|
jmps getaccdir
|
|
setac2:
|
|
test dl,VZ_PRS_DRV
|
|
_if z
|
|
xchg si,di
|
|
_endif
|
|
lodsb
|
|
inc si
|
|
and al,1Fh ; ##100.01
|
|
dec al
|
|
test dl,VZ_PRS_DRV
|
|
jnz setdrive
|
|
xchg si,di
|
|
setdrive:
|
|
push dx
|
|
call seldrv
|
|
pop dx
|
|
jc setac_x
|
|
mov di,pathbuf2
|
|
test dl,VZ_PRS_DIR
|
|
jz getaccdir
|
|
mov dx,di
|
|
mov bx,getnamp
|
|
mov al,[bx-1]
|
|
call isslash
|
|
_if e
|
|
dec bx
|
|
_endif
|
|
setac4: movsb
|
|
cmp si,bx
|
|
jb setac4
|
|
clr al
|
|
stosb
|
|
msdos F_CHDIR
|
|
jc setac_x1
|
|
mov di,dx
|
|
getaccdir:
|
|
push di
|
|
call getcurdir1
|
|
pop si
|
|
jc setac_x1
|
|
lea di,[bp].fl_path
|
|
mov [bp].fl_files,0 ;; ##16
|
|
call strcpy
|
|
setac9: clc
|
|
VZ_RET
|
|
setac_x1:
|
|
call setcurpath
|
|
setac_x:stc
|
|
VZ_RET
|
|
setaccdir endp
|
|
|
|
;--- Set mask ---
|
|
|
|
public setmask
|
|
setmask proc
|
|
mov si,getnamp
|
|
tst si
|
|
jz stmsk9
|
|
call skipspc ; ##156.94
|
|
tstb [si]
|
|
jz stmsk9
|
|
setmask1:
|
|
mov flbinary,FT_ALL
|
|
setmask2:
|
|
lea di,[bp].fl_mask
|
|
mov cx,MASKSZ-1
|
|
call strncpy
|
|
stmsk9: VZ_RET
|
|
setmask endp
|
|
|
|
;--- Spread execute command ---
|
|
;--> AX :exec command ptr
|
|
;<-- AX :multi file mode
|
|
|
|
tb_spesym db "12*?!^:@\[FG"
|
|
|
|
tb_spejmp: ofs spexe_s
|
|
ofs spexe_d
|
|
ofs spexe_a
|
|
ofs spexesfile
|
|
ofs spexe_go
|
|
ofs spexe_ret
|
|
ofs spexe_sd
|
|
ofs spexe_ref1
|
|
ofs spexe_bslash
|
|
ofs spexe_opt
|
|
ofs spexe_getsf
|
|
ofs spexe_gets
|
|
|
|
public spreadexec
|
|
spreadexec proc
|
|
mov speflag,0
|
|
push bp
|
|
mov bp,actwkp
|
|
mov si,ax
|
|
mov di,tmpbuf
|
|
mov ax,farseg
|
|
call ems_map
|
|
clr dx
|
|
_repeat
|
|
cmp si,flcmdp
|
|
_break e
|
|
lodsb
|
|
tst al
|
|
_break z
|
|
call spread1
|
|
_until
|
|
tst dx
|
|
_if z
|
|
cmp di,tmpbuf
|
|
je spexe8
|
|
cmp byte ptr es:[di-1],SPC
|
|
_if be
|
|
spexe8:
|
|
call spexesdir
|
|
call spexesfile
|
|
_endif
|
|
_endif
|
|
mov al,LF
|
|
stosb
|
|
mov al,dl
|
|
cbw ;;
|
|
pop bp
|
|
test speflag,SPE_CANCEL
|
|
_ifn z
|
|
stc
|
|
_endif
|
|
VZ_RET
|
|
|
|
spread1:
|
|
cmp al,'%'
|
|
_ifn e
|
|
stosb
|
|
VZ_RET
|
|
_endif
|
|
mov ah,al
|
|
lodsb
|
|
push di
|
|
mov di,offset cgroup:tb_spesym
|
|
mov cx,offset tb_spejmp - offset tb_spesym
|
|
push cx
|
|
call scantbl
|
|
pop bx
|
|
pop di
|
|
_ifn e
|
|
mov al,ah
|
|
stosb
|
|
dec si
|
|
VZ_RET
|
|
_endif
|
|
dec bx
|
|
sub bx,cx
|
|
shl bx,1
|
|
add bx,offset cgroup:tb_spejmp
|
|
jmp cs:[bx]
|
|
|
|
spexe_s:
|
|
call spexesdir
|
|
jmps spexesfile
|
|
spexe_sd:
|
|
push si
|
|
; mov bp,actwkp
|
|
mov al,TRUE
|
|
call cpyaccdir
|
|
pop si
|
|
or speflag,SPE_SRCDIR
|
|
spexe91:VZ_RET
|
|
spexe_d:
|
|
tstb fldual
|
|
jz spexe91
|
|
pushm <si,bp>
|
|
; mov bp,actwkp
|
|
mov bp,[bp].fl_back
|
|
lea si,[bp].fl_path
|
|
tstb [si]
|
|
_ifn z
|
|
call strcpy
|
|
_endif
|
|
tstw [bp].fl_selcnt
|
|
_ifn z
|
|
call addsep
|
|
push ds
|
|
call spe_copyfile
|
|
pop ds
|
|
or speflag,SPE_DSTFILE
|
|
_endif
|
|
or speflag,SPE_DSTDIR
|
|
popm <bp,si>
|
|
VZ_RET
|
|
spexe_bslash:
|
|
cmp byte ptr es:[di-1],SPC
|
|
_if a
|
|
call addsep
|
|
_endif
|
|
VZ_RET
|
|
spexe_ref1:
|
|
mov al,[si]
|
|
call isdigit
|
|
jnc spexe_ref
|
|
inc si
|
|
sub al,'0'
|
|
clr ah
|
|
cmp ax,[bp].fl_selcnt
|
|
jb spexe_ref
|
|
spexe_a:
|
|
push si
|
|
mov al,FALSE
|
|
mov dx,di
|
|
mov di,offset cgroup:echo_all
|
|
call do_selfiles
|
|
mov di,dx
|
|
pop si
|
|
movhl dx,TRUE,0
|
|
VZ_RET
|
|
spexesdir:
|
|
push si
|
|
; mov bp,actwkp
|
|
mov al,FALSE
|
|
call cpyaccdir
|
|
pop si
|
|
VZ_RET
|
|
spexesfile:
|
|
; mov bp,actwkp
|
|
cmp [bp].fl_selcnt,1
|
|
_if a
|
|
mov ax,'?%'
|
|
stosw
|
|
mov dl,-1
|
|
_else
|
|
call spe_copyfile
|
|
mov dh,TRUE
|
|
_endif
|
|
VZ_RET
|
|
spexe_go:
|
|
or dossw,VZ_DOS_GO
|
|
VZ_RET
|
|
spexe_ret:
|
|
or dossw,VZ_DOS_RETURN
|
|
VZ_RET
|
|
spe_copyfile:
|
|
pushm <si,ds>
|
|
call scan_1st
|
|
mov si,bx
|
|
call copyafile
|
|
popm <ds,si>
|
|
VZ_RET
|
|
spreadexec endp
|
|
|
|
;----- Write @filelist -----
|
|
|
|
spexe_ref proc
|
|
mov al,'@'
|
|
stosb
|
|
push di
|
|
cmp byte ptr [si],SPC
|
|
_if be
|
|
push si
|
|
call get_refpath
|
|
pop si
|
|
_else
|
|
call wrdcpy
|
|
_endif
|
|
pop dx
|
|
pushm <si,di>
|
|
call open_file
|
|
jc spref9
|
|
mov di,lbuf
|
|
push dx
|
|
pushm <bx,di>
|
|
mov al,FALSE
|
|
test speflag,SPE_SRCDIR
|
|
_ifn z
|
|
mov al,INVALID
|
|
_endif
|
|
mov dx,di
|
|
mov di,offset cgroup:echo_ref
|
|
call do_selfiles
|
|
mov di,dx
|
|
popm <dx,bx>
|
|
mov cx,di
|
|
sub cx,dx
|
|
msdos F_WRITE
|
|
clr cx
|
|
msdos F_WRITE
|
|
msdos F_CLOSE
|
|
pop dx
|
|
mov cx,FA_HIDDEN
|
|
msdos F_ATTR,1
|
|
spref9: popm <di,si>
|
|
movhl dx,TRUE,0
|
|
VZ_RET
|
|
spexe_ref endp
|
|
|
|
echo_all proc
|
|
push ax
|
|
mov di,dx
|
|
cmp di,ss:tmpbuf+2
|
|
jae echoall9
|
|
call echo_pool
|
|
mov al,SPC
|
|
stosb
|
|
mov dx,di
|
|
echoall9: pop ax
|
|
VZ_RET
|
|
echo_all endp
|
|
|
|
echo_ref proc
|
|
push ax
|
|
mov di,dx
|
|
cmp di,ss:lbuf+2
|
|
jae echoref9
|
|
call echo_pool
|
|
mov ax,CRLF
|
|
stosw
|
|
mov dx,di
|
|
echoref9: pop ax
|
|
VZ_RET
|
|
echo_ref endp
|
|
|
|
echo_pool proc
|
|
push bx
|
|
tst al
|
|
_ifn s
|
|
push ds
|
|
movseg ds,ss
|
|
call cpyaccdir
|
|
pop ds
|
|
_endif
|
|
pop bx
|
|
mov si,bx
|
|
call copyafile
|
|
VZ_RET
|
|
echo_pool endp
|
|
|
|
;----- Get string -----
|
|
|
|
spexe_gets proc
|
|
test speflag,SPE_DSTDIR
|
|
jnz egets9
|
|
spexe_getsf: test speflag,SPE_DSTFILE
|
|
jnz egets9
|
|
mov refloc,0
|
|
pushm <dx,si>
|
|
mov si,nbuf
|
|
mov cx,PATHSZ
|
|
mov dl,W_DSTBOX
|
|
push tmpbuf
|
|
mov ax,tmpbuf2
|
|
mov tmpbuf,ax
|
|
push di
|
|
call windgets
|
|
pop di
|
|
pop tmpbuf
|
|
jc egets_c
|
|
_ifn cxz
|
|
call strcpy
|
|
_endif
|
|
jmps egets8
|
|
egets_c: or speflag,SPE_CANCEL
|
|
egets8: popm <si,dx>
|
|
egets9: VZ_RET
|
|
spexe_gets endp
|
|
|
|
;----- if include directory -----
|
|
|
|
spexe_opt proc
|
|
tstw [bp].fl_selcnt
|
|
_if z
|
|
push ds
|
|
call getpoolp
|
|
mov ds,dx
|
|
test [bx].dr_attr,FA_DIREC
|
|
pop ds
|
|
_ifn z
|
|
stc
|
|
_endif
|
|
_else
|
|
call check_dir
|
|
_endif
|
|
mov ah,FALSE
|
|
_if c
|
|
mov ah,TRUE
|
|
_endif
|
|
_repeat
|
|
lodsb
|
|
cmp al,SPC
|
|
_break be
|
|
cmp al,']'
|
|
_break e
|
|
tst ah
|
|
_ifn z
|
|
stosb
|
|
_endif
|
|
_until
|
|
VZ_RET
|
|
spexe_opt endp
|
|
|
|
;----- Check DOS_GO flag -----
|
|
;--> SI:xbuf
|
|
;<-- CY: DOS_GO on (SI:buffer)
|
|
|
|
public dos_go
|
|
dos_go proc
|
|
test dossw,VZ_DOS_GO
|
|
jz dosgo9
|
|
push si
|
|
mov di,tmpbuf
|
|
push di
|
|
mov al,LF
|
|
mov cx,TMPSZ
|
|
repne scasb
|
|
dec di
|
|
pop si
|
|
pop bx
|
|
clr cx
|
|
push bx
|
|
call histcpy
|
|
pop si
|
|
stc
|
|
dosgo9: VZ_RET
|
|
dos_go endp
|
|
|
|
endes
|
|
ENDIF
|
|
end
|
|
|
|
;****************************
|
|
; End of 'filer.asm'
|
|
; Copyright (C) 1989 by c.mos
|
|
;****************************
|