kolibrios-fun/programs/fs/mfar/trunk/mfar.asm
Ivan Baravy 2c778124e3 Remove some duplicates: proc32.inc, macros.inc, struct.inc, etc.
git-svn-id: svn://kolibrios.org@7134 a494cfbc-eb01-0410-851d-a64ba20cac60
2017-12-20 00:51:00 +00:00

1182 lines
30 KiB
NASM

; MENUET FAR [MFAR] PRE-ALPHA-8.1
; 2003-2004 (C) Mike Semenyako aka mike.dld
; Compile with FASM for Menuet
use32
org 0
db 'MENUET01' ; 8 byte id
dd $01 ; header version
dd START ; start of code
dd I_END ; size of image
dd MEM_USED ; memory for app
dd $007FF0 ; esp
dd $00,$00 ; I_Param , I_Icon
;
; START:SIZE
;
; +00000000:00007FF0 - image
; +00007FF0:00007FF0 - stack
; +00008000:00000300 - path strings buffer
; +00008300:0003FD00 - files data
; +00048000:00000300 - temporary file read area
; +00048300:00004000 - memory for OS (read/write buffer)
; +0004C300:FFFB3CFF - dinamically allocated for copy, view, edit etc.
;
include 'lang.inc'
include 'macros.inc'
include 'menuet.inc'
include 'mfar.inc'
START:
mcall MF_RDREADFILE,fcfile,0,-1,fc ; read user colors
mov esi,p_rd ; left panel = RD
mov edi,f_path0
mov ecx,p_rd.size
rep movsb
mov esi,p_hd ; right panel = HD
mov edi,f_path1
mov ecx,p_hd.size
rep movsb
redraw_all:
call draw_window_full
jmp still
redraw_files:
call draw_files
still:
mcall MF_WAITEVWTO,100 ; waiting 1 sec
jmpe al,,\
EV_REDRAW,redraw_all,\
EV_KEY,key,\
EV_BUTTON,button
; after every 1 second [when no other events occur] updating files info
; eg. requesting ACTIVE panel files data and drawing it
;; timed redraw {
mov dl,[active_panel]
cmp dl,0
jne ._00
push [d_ltsz]
jmp @f
._00:
push [d_rtsz]
@@:
call get_files_data
pop eax
cmp dl,0
jne ._01
cmp eax,[d_ltsz]
jmp @f
._01:
cmp eax,[d_rtsz]
@@:
je still ; nothing happened, waiting again
mov al,dl
jmp redraw_files
;; }
; key pressed event
key:
mcall MF_GETKEY ; get key-code
movzx ecx,[active_panel]
jmpe ah,k_directional,\
VK_RETURN,k_return,\ ; execute something
VK_TAB,k_tab,\ ; change active panel
VK_F5,k_f5,\ ; copy
VK_F10,mfar_exit,\ ; terminate
VK_CTRLF3,k_ctrl_f3,\ ; sort by name
VK_CTRLF4,k_ctrl_f4 ; sort by extension
;------------------------------------------------------------------------------
k_return:
call execute_current_file
jmp still
;------------------------------------------------------------------------------
k_tab:
mov edi,[fc.background]
call draw_sel ; hide current file selection
xor [active_panel],1 ; changing active panel
call draw_path ; drawing path of new panel
mov dl,[active_panel]
call get_files_data ; requesting panel files info
mov edi,sel_color
call draw_sel ; show current file
mov al,[active_panel]
call draw_file_info ; and its info (size,date)
jmp still
;------------------------------------------------------------------------------
k_f5:
call copy_file
jc still
jmp redraw_all
;------------------------------------------------------------------------------
k_ctrl_f3:
jecxz ._00
cmp [r_sort],0
je still
mov [r_sort],0
jmp @f
._00:
cmp [l_sort],0
je still
mov [l_sort],0
@@:
mov al,cl
call mfar_sort
jmp redraw_files
;------------------------------------------------------------------------------
k_ctrl_f4:
jecxz ._00
cmp [r_sort],1
je still
mov [r_sort],1
jmp @f
._00:
cmp [l_sort],1
je still
mov [l_sort],1
@@:
mov al,al
call mfar_sort
jmp redraw_files
;------------------------------------------------------------------------------
k_directional:
cmp ah,VK_LEFT ; non-directional keys ?
jb still ; ignore them
cmp ah,VK_END
ja still
jecxz ._00
mov edx,[d_rpos]
mov ebx,[d_rtop]
mov esi,[d_rcnt]
jmp @f
._00:
mov edx,[d_lpos]
mov ebx,[d_ltop]
mov esi,[d_lcnt]
@@:
xor ebp,ebp ; redraw whole panel [0-no, 1-yes]
;------------------------------------------------------------------------------
jmpe ah,show_cur,\
VK_LEFT,k_left,\
VK_DOWN,k_down,\
VK_UP,k_up,\
VK_RIGHT,k_right,\
VK_HOME,k_home,\
VK_END,k_end
k_left:
cmp edx,0
je still
sub edx,FPC
jge @f
xor edx,edx
@@:
mov eax,edx
sub eax,ebx
jge show_cur
inc ebp
sub ebx,FPC
jge show_cur
xor ebx,ebx
jmp show_cur
;------------------------------------------------------------------------------
k_down:
lea eax,[esi-1]
cmp edx,eax
je still
inc edx
mov eax,edx
sub eax,ebx
cmp eax,FPC*3-1
jle show_cur
inc ebp
inc ebx
jmp show_cur
;------------------------------------------------------------------------------
k_up:
cmp edx,0
je still
dec edx
mov eax,ebx
cmp edx,eax
jge show_cur
inc ebp
dec ebx
jmp show_cur
;------------------------------------------------------------------------------
k_right:
lea eax,[esi-1]
cmp edx,eax
je still
add edx,FPC
cmp edx,eax
jle @f
mov edx,eax
@@:
mov eax,edx
sub eax,ebx
cmp eax,FPC*3-1
jle show_cur
inc ebp
add ebx,FPC
jmp show_cur
;------------------------------------------------------------------------------
k_home:
cmp edx,0
je still
inc ebp
xor edx,edx
xor ebx,ebx
jmp show_cur
;------------------------------------------------------------------------------
k_end:
lea eax,[esi-1]
cmp edx,eax
je still
mov edx,eax
mov edi,eax
sub edi,ebx
cmp edi,FPC*3-1
jle show_cur
inc ebp
sub eax,FPC*3-1
mov ebx,eax
;------------------------------------------------------------------------------
show_cur:
mov edi,[fc.background]
call draw_sel
jecxz ._00
mov [d_rpos],edx
mov [d_rtop],ebx
jmp @f
._00:
mov [d_lpos],edx
mov [d_ltop],ebx
@@:
cmp ebp,0
mov al,cl
jne redraw_files
mov edi,[fc.selection]
call draw_sel
call draw_file_info
jmp still
button:
mcall MF_GETPRSDBTNID
cmp ah,1
jne noclose
mfar_exit:
mcall MF_RDDELFILE,fcfile ; delete existing mfar.dat
mcall MF_RDWRITEFILE,fcfile,fc,12*4,0 ; create new mfar.dat
mcall MF_TERMINATE ; close program
noclose:
jmp still
;------------------------------------------------------------------------------
;///// DRAW WINDOW ////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
__func draw_window
mcall MF_WINPROPS,WP_GETSYSCLRS,sc,sizeof.system_colors
mcall MF_WNDDRAW,WD_BEGINDRAW
mov edx,[fc.background]
or edx,WS_SKINNED
mcall2 MF_DEFWINDOW,90,oX+tW*80+4,45,oY+tH*25+4
mcall1 MF_DRAWTEXT,8,8,[sc.grab_text],caption,caption.size
mmov esi,oX+2,oX+tW*39+2
mmov edi,oY+3,oY+tH*22+3
mov edx,[fc.default]
call draw_frame
mmov esi,oX+tW*40+2,oX+tW*79+2
call draw_frame
mcall2 MF_DRAWLINE,oX+tW*13+2,oX+tW*13+2,oY+tH,oY+tH*20+3
madd ebx,tW*13,tW*13
mcall
mcall2 ,oX+3,oX+tW*39+1,oY+tH*20+3,oY+tH*20+3
mcall2 ,oX+tW*53+2,oX+tW*53+2,oY+tH,oY+tH*20+3
madd ebx,tW*13,tW*13
mcall
mcall2 ,oX+tW*40+3,oX+tW*79+1,oY+tH*20+3,oY+tH*20+3
mcall1 MF_DRAWTEXT,oX+tW*5,oY+tH,$00ffff00,lname,lname.size
mcall1 ,oX+tW*18,oY+tH
mcall1 ,oX+tW*31,oY+tH
mcall1 ,oX+tW*45,oY+tH
mcall1 ,oX+tW*58,oY+tH
mcall1 ,oX+tW*71,oY+tH
movzx edi,[l_sort]
lea edx,[edi+sort_kind]
mcall1 ,oX+tW,oY+tH,$00ffff00,,1
movzx edi,[r_sort]
lea edx,[edi+sort_kind]
mcall1 ,oX+tW*41,oY+tH
call draw_path
call draw_bottom_keys
mcall MF_WNDDRAW,WD_ENDDRAW
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
__func draw_window_full
call draw_window
mov edx,1
call get_files_data
mov al,1
call draw_files
mov edx,0
call get_files_data
mov al,0
call draw_files
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
align 4
len dd ?
__func get_normal_path
pusha
mov ecx,5
rep movsb
dec esi
dec edi
mov ecx,5
push eax
@@:
dec dword[esp]
jz @f
lodsb
cmp al,0
je @b
cmp al,' '
je @b
stosb
inc ecx
jmp @b
@@:
pop eax
mov byte[edi],'>'
mov [len],ecx
popa
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
; EAX = length needed
; ECX = current length
; EDI = path string
__func get_path_ellipses
cmp ecx,eax
jbe @f
pushad
lea esi,[edi+ecx+3+6] ; ... + /??/?/
sub esi,eax
add ecx,edi
sub ecx,esi
mov dword[edi+6],'... '
add edi,9
cld
rep movsb
mov [len],eax
popad
@@:
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
__func draw_path
pushad
cmp [active_panel],0
jne ._00
mov esi,f_path0
mov eax,[f_plen0]
jmp @f
._00:
mov esi,f_path1
mov eax,[f_plen1]
@@:
mov edi,f_pathn
call get_normal_path
mov eax,39
mov ecx,[len]
mov edi,f_pathn
call get_path_ellipses
mcall2 MF_FILLRECT,oX-1,tW*80+1,oY+tH*23-1,tH,[fc.pathbg]
mcall1 MF_DRAWTEXT,oX,oY+tH*23,[fc.path],f_pathn,[len]
popad
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
; AL = panel
__func draw_files
push eax
mmov ecx,oY+tH*2-1,tH*FPC
mov edx,[fc.background]
cmp al,0
mov eax,MF_FILLRECT
jne ._00
mcall1 ,oX+tW-2,tW*12+3
mcall1 ,oX+tW*14-2,tW*12+3
mcall1 ,oX+tW*27-2,tW*12+3
mmov ebx,oX+tW,oY+tH*2
mov edx,[d_ltop]
shl edx,4
add edx,lstart
mov edi,[d_lcnt]
mov esi,edi
sub edi,[d_ltop]
jmp @f
._00:
mcall1 ,oX+tW*41-2,tW*12+3
mcall1 ,oX+tW*54-2,tW*12+3
mcall1 ,oX+tW*67-2,tW*12+3
mmov ebx,oX+tW*41,oY+tH*2
mov edx,[d_rtop]
shl edx,4
add edx,rstart
mov edi,[d_rcnt]
mov esi,edi
sub edi,[d_rtop]
@@:
cmp esi,0
je .exit_nok ; no files
mov ecx,3
.next_col:
push ecx
mov ecx,FPC
.next_row:
dec edi
jge @f
pop eax
jmp .exit_ok
@@:
push ecx
call get_file_color
mov esi,edx
call get_file_name
push edx
mcall 4,,,f_name,12 ; draw file name
pop edx ecx
add ebx,tH
add edx,16
dec ecx
jnz .next_row
pop ecx
dec ecx
jz .exit_ok
madd ebx,tW*13,0
mov bx,oY+tH*2
jmp .next_col
.exit_ok:
mov edi,sel_color
call draw_sel
.exit_nok:
pop eax
call draw_file_info
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
__func draw_bottom_keys
pushad
mcall2 MF_FILLRECT,oX-1,tW*80+1,oY+tH*24-1,tH+1,[fc.pathbg]
dec ecx
mcall1 ,oX+tW-1,tW*6+1,,[fc.keysbg]
mov esi,7
@@:
madd ebx,tW*8,0
mcall
dec esi
jge @b
mcall1 ,oX+tW*73-1,tW*7+1
mcall MF_DRAWNUMBER,$00010100,1,oX*65536+(oY+tH*24),[fc.path]
sub edx,$00010000
@@:
inc cl
madd edx,tW*8,0
mcall
cmp cl,10
jb @b
mcall1 MF_DRAWTEXT,oX+tW,oY+tH*24,[fc.keys],btmkeys,btmkeys.size
popad
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
; ESI = X1*65536+X2
; EDI = Y1*65536+Y2
; EDX = color
__func draw_frame
mov ecx,edi
mov ebx,edi
shr ebx,16
mov cx,bx
mcall MF_DRAWLINE,esi
mov ecx,edi
shl ecx,16
mov cx,di
mcall
mov ebx,esi
mov ecx,esi
shr ecx,16
mov bx,cx
mcall ,,edi
mov ebx,esi
shl ebx,16
mov bx,si
mcall
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
; EDX = pointer to file data
__func get_file_color
push esi
mov cl,[edx+11]
test cl,(FA_HIDDEN or FA_SYSTEM)
jz @f
mov ecx,[fc.system]
jmp .exit
@@:
test cl,FA_FOLDER
jz @f
mov ecx,[fc.folder]
jmp .exit
@@:
mov ecx,[edx+7]
and ecx,$ffffff00
or ecx,$00000020
mov esi,ext0-4
@@:
lodsd
or eax,eax
jz @f
cmp ecx,eax
jne @b
mov ecx,[fc.executable]
jmp .exit
@@:
lodsd
or eax,eax
jz @f
cmp ecx,eax
jne @b
mov ecx,[fc.bitmap]
jmp .exit
@@:
lodsd
or eax,eax
je @f
cmp ecx,eax
jne @b
mov ecx,[fc.source]
jmp .exit
@@:
mov ecx,[fc.default]
.exit:
pop esi
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
; EDI = color
__func draw_sel
pushad
cmp [active_panel],0
jne ._00
mov eax,[d_lpos]
sub eax,[d_ltop]
mov esi,[d_lcnt]
jmp @f
._00:
mov eax,[d_rpos]
sub eax,[d_rtop]
mov esi,[d_rcnt]
@@:
cmp esi,0
je .exit
mov cl,FPC
div cl
mov bp,ax
and eax,$000000FF
mov cl,tW*13
mul cl
add ax,oX+tW-2
push eax
shl eax,16
mov ax,tW*12+3
mov ebx,eax
mov ax,bp
shr eax,8
and eax,$000000FF
mov cl,tH
mul cl
add ax,oY+tH*2-1
push eax
shl eax,16
mov ax,tH
mov ecx,eax
mov edx,edi
cmp [active_panel],0
je @f
madd ebx,(40*6),0
@@:
mcall MF_FILLRECT
pop eax
movzx ebx,ax
inc bx
pop eax
add ax,2
shl eax,16
or ebx,eax
cmp [active_panel],0
jne ._01
mov edx,[d_lpos]
shl edx,4
add edx,lstart
jmp @f
._01:
mov edx,[d_rpos]
shl edx,4
add edx,rstart
@@:
mov esi,edx
call get_file_name
call get_file_color
cmp ecx,edi
jne @f
xor ecx,ecx
@@:
cmp [active_panel],0
je @f
madd ebx,tW*40,0
@@:
mcall MF_DRAWTEXT,,,f_name,12
.exit:
popad
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
; AL = panel
__func draw_file_info
push eax
mmov ecx,oY+tH*21,tH
mov edx,[fc.background]
cmp al,0
mov eax,MF_FILLRECT
jne ._00
mcall1 ,oX+tW,tW*38+1
mov esi,[d_lpos]
shl esi,4
add esi,lstart
mov edi,[d_lcnt]
jmp @f
._00:
mcall1 ,oX+tW*41,tW*38+1
mov esi,[d_rpos]
shl esi,4
add esi,rstart
mov edi,[d_rcnt]
@@:
cmp edi,0
jne @f
pop eax
ret
@@:
call get_file_info
mov dword[file_info+17],' '
mov word[file_info+15],' '
test byte[esi+11],FA_FOLDER
jz @f
mov dword[file_info+21],' DIR'
jmp .no_size
@@:
mov dword[file_info+21],' '
mov eax,[f_size]
mov esi,file_info+24
mov ebx,10
mov ecx,ebx
@@:
xor edx,edx
div ebx
add dl,'0'
mov [esi],dl
or eax,eax
jz .no_size
dec esi
loop @b
.no_size:
pop eax
mmov edx,oX+tW*35,oY+tH*21
mmov ebx,oX+tW,oY+tH*21
cmp al,0
je @f
madd edx,tW*40,0
madd ebx,tW*40,0
@@:
push edx
mcall MF_DRAWTEXT,,[fc.default],file_info,34
pop edx
mov esi,ecx
mov cx,[f_year]
mcall MF_DRAWNUMBER,$00040000
sub edx,$00240000 ; 6*6 = $24
movzx ecx,[f_day]
mcall ,$00020000
add edx,$00120000
mov cl,[f_mnth]
mcall
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
__func get_file_name
pushad
mov eax,[esi+0]
mov [f_name+0],eax
mov eax,[esi+4]
mov [f_name+4],eax
mov eax,[esi+8]
shl eax,8
and eax,$FFFFFF00
or al,$00000020
mov [f_name+8],eax
popad
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
; ESI = pointer to file data
__func get_file_info
pushad
mov eax,[esi+12]
mov dword[f_info],FS_READ
mov [f_info+4],eax
mov dword[f_info+12],read_area
mcall MF_FSACCESS,f_info
cmp eax,ERR_SUCCESS
je @f
cmp eax,ERR_FS_LAST
ja @f
popad
stc
ret
@@:
mov eax,read_area
mov ecx,16
.next_file:
mov edx,[esi+0]
cmp [eax+0],edx
jne @f
mov edx,[esi+4]
cmp [eax+4],edx
jne @f
mov edx,[esi+8]
cmp [eax+8],edx
jne @f
mov esi,eax
jmp .found
@@:
add eax,32
loop .next_file
.found:
push esi
mov eax,' '
mov ecx,3
mov edi,file_info
rep stosd
mov edi,file_info
mov ecx,2
rep movsd
mov edi,file_info
@@:
cmp byte[edi],' '
jbe @f
inc edi
jmp @b
@@:
mov eax,[esi]
shl eax,8
mov al,'.'
cmp eax,'. '
je @f
mov [edi],eax
@@:
pop esi
mov eax,[esi+28]
mov [f_size],eax
mov eax,[esi+24]
mov [f_day],al
and [f_day],00011111b
shr eax,5
mov [f_mnth],al
and [f_mnth],00001111b
shr eax,4
mov [f_year],ax
and [f_year],01111111b
add [f_year],1980
popad
clc
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
; DL = panel
__func get_files_data
pushad
mov [d_tcnt],0
mov [d_ttsz],0
cmp dl,0
jne ._00
mov esi,f_path0
mov ecx,[f_plen0]
jmp @f
._00:
mov esi,f_path1
mov ecx,[f_plen1]
@@:
push edi
mov edi,f_info.path
mov byte[edi+ecx],0
rep movsb
pop edi
cmp dl,0
jne ._01
mov edi,lstart
jmp @f
._01:
mov edi,rstart
@@:
push edx
xor ebp,ebp
mov dword[f_info],FS_READ ; read
mov dword[f_info+8],1 ; 1 block
mov dword[f_info+12],read_area ; to read_area
.next_block:
mov dword[f_info+4],ebp ; starting from block #ebp
mcall MF_FSACCESS,f_info
cmp eax,ERR_SUCCESS
je @f
cmp eax,ERR_FS_LAST
ja @f
jmp .exit
@@:
mov esi,read_area
mov ecx,16
.next_file:
cmp word[esi],0 ; end of entries
je .exit
cmp word[esi],'. ' ; self-pointer
je .skip
test byte[esi+11],FA_LABEL ; disk label
jnz .skip
cmp byte[esi+11],$0F ; fat32
je .skip
cmp byte[esi],$E5 ; erased
je .skip
mov eax,[esi+28] ; add file size
add [d_ttsz],eax ; to folder size
push ecx
mov ecx,3
rep movsd ; copy name, attriputes
mov [edi],ebp ; and block number
add edi,4
add esi,20
inc [d_tcnt] ; increase folder files counter
; cmp [d_tcnt],max_cnt
; je .exit
pop ecx
jmp @f
.skip:
add esi,32
@@:
loop .next_file
cmp [d_tcnt],max_cnt
je .exit
inc ebp
jmp .next_block
.exit:
pop edx
push [d_ttsz]
mov eax,[d_tcnt]
cmp dl,0
jne ._02
mov [d_lcnt],eax
pop [d_ltsz]
jmp @f
._02:
mov [d_rcnt],eax
pop [d_rtsz]
@@:
popad
mov al,dl
call mfar_sort
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
__func execute_current_file
pushad
cmp [active_panel],0
jne ._00
mov esi,[d_lpos]
shl esi,4
add esi,lstart
mov edi,f_path0
mov ecx,f_plen0
jmp @f
._00:
mov esi,[d_rpos]
shl esi,4
add esi,rstart
mov edi,f_path1
mov ecx,f_plen1
@@:
call get_file_info
test byte[esi+11],FA_FOLDER
jz .file
cmp word[esi],'..'
jne .enter_dir
add edi,[ecx]
dec edi
@@:
dec [f_plen1]
cmp byte[edi],'/'
je @f
dec edi
jmp @b
@@:
mov dword[edi],0
jmp @f
.enter_dir:
add edi,[ecx]
push ecx edi
mov byte[edi],'/'
inc edi
mov esi,file_info
mov ecx,3
cld
rep movsd
mov dword[edi],0
pop esi ecx
sub edi,esi
add dword[ecx],edi
mov [d_rpos],0
mov [d_rtop],0
@@:
mov dl,[active_panel]
call get_files_data
call draw_path
mov al,dl
call draw_files
jmp .exit
.file:
mov eax,[esi+8]
shl eax,8
and eax,$FFFFFF00
or eax,$00000020
cmp eax,' '
jne .exit
mov esi,edi
mov eax,[ecx]
mov edi,f_pathn
call get_normal_path
mov esi,f_pathn
mov ecx,[len]
dec ecx
mov edi,f_info.path
rep movsb
mov byte[edi],'/'
inc edi
mov esi,file_info
@@:
movsb
cmp byte[esi],0
je @f
cmp byte[esi],' '
jne @b
@@:
mov byte[edi],0
mov dword[f_info],FS_EXECUTE
mov dword[f_info+12],0
mcall MF_FSACCESS,f_info
.exit:
popad
ret
endf
;------------------------------------------------------------------------------
;//////////////////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
__func delete_current_file
pushad
popad
ret
endf
;------------------------------------------------------------------------------
;///// INCLUDES ///////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
include 'mf-copy.inc'
include 'mf-sort.inc'
;------------------------------------------------------------------------------
;///// DATA ///////////////////////////////////////////////////////////////////
;------------------------------------------------------------------------------
align 4
f_size dd ?
f_day db ?
f_mnth db ?
f_year dw ?
d_lpos dd 0
d_ltop dd 0
d_lcnt dd 0
d_ltsz dd 0
d_rpos dd 0
d_rtop dd 0
d_rcnt dd 0
d_rtsz dd 0
d_tpos dd ?
d_ttop dd ?
d_tcnt dd ?
d_ttsz dd ?
f_info:
dd 0
dd 0
dd ?
dd read_area
dd MEM_FOR_OS
.path:
rb 200
f_plen0 dd 5
f_plen1 dd 5
sz caption,'MFAR : PRE-ALPHA-8.1'
sz fcfile,'MFAR DAT'
sz p_hd,'/HD/1',0
sz p_rd,'/RD/1',0
ext0:
db ' EXE COM BAT CMD'
dd 0
ext1:
db ' BMP GIF JPG PNG WMF'
dd 0
ext2:
db ' ASM INC'
dd 0
;----- LANGUAGE-SPECIFIC STRINGS -----
include 'mf-lang.inc'
;-------------------------------------
f_name: rb 12
file_info: db ' . .'
active_panel db 0
;---------------------------------
sel_color = $00008080
FPC = 18
MEM_FOR_OS = $48300
MEM_USED = $4C300
read_area = $48000
fdata_size = $40000-$300
max_cnt = fdata_size/32
lstart = $8000+$300
rstart = lstart+max_cnt*16
f_path0 = $8000
f_path1 = $8000+$100
f_pathn = $8000+$200
align 4
sc system_colors
fc mfar_colors
I_END:
; 16 bytes per entry:
; -> 8 bytes - name
; -> 3 bytes - extension
; -> 1 byte - attributes
; -> 4 bytes - block number