Subversion Repositories Kolibri OS

Compare Revisions

Ignore whitespace Rev 992 → Rev 993

/programs/fs/sysxtree/trunk/sysxtree.asm
45,7 → 45,7
; dd 0,0
 
;******************************************************************************
include '..\..\..\macros.inc'
include 'macros.inc'
include 'ascl.inc'
include 'ascgl.inc'
 
72,29 → 72,29
je no_hdpartition_on_hd3
mov [hdimg4], aHD3
no_hdpartition_on_hd3:
test byte [edx+1], 80h
jz @f
mov [hdimg1], aCD0
mov [hdimg1+4], 'CD-R'
mov [hdimg1+8], 'OM '
test byte [edx+1], 80h
jz @f
mov [hdimg1], aCD0
mov [hdimg1+4], 'CD-R'
mov [hdimg1+8], 'OM '
@@:
test byte [edx+1], 20h
jz @f
mov [hdimg2], aCD1
mov [hdimg2+4], 'CD-R'
mov [hdimg2+8], 'OM '
test byte [edx+1], 20h
jz @f
mov [hdimg2], aCD1
mov [hdimg2+4], 'CD-R'
mov [hdimg2+8], 'OM '
@@:
test byte [edx+1], 8
jz @f
mov [hdimg3], aCD2
mov [hdimg3+4], 'CD-R'
mov [hdimg3+8], 'OM '
test byte [edx+1], 8
jz @f
mov [hdimg3], aCD2
mov [hdimg3+4], 'CD-R'
mov [hdimg3+8], 'OM '
@@:
test byte [edx+1], 2
jz @f
mov [hdimg4], aCD3
mov [hdimg4+4], 'CD-R'
mov [hdimg4+8], 'OM '
test byte [edx+1], 2
jz @f
mov [hdimg4], aCD3
mov [hdimg4+4], 'CD-R'
mov [hdimg4+8], 'OM '
@@:
 
mov eax,40
223,8 → 223,8
mov eax,37
mov ebx,1
mcall
movzx ebx, ax ; y
shr eax, 16 ; x
movzx ebx, ax ; y
shr eax, 16 ; x
mov ebp,eax
sub ebp,[listx] ;[procinfo.box.width]
sub ebp,[listxsize]
232,43 → 232,43
cmp ebp,dword [scrollsize] ;8
jae menu_test ; still
 
lea ebp, [ebx-scrollbutsize]
sub ebp, [listy] ; up scroll
jl menu_test
mov ecx, [listysize]
sub ecx, 2*scrollbutsize
mov eax, [scroll_height]
cmp ebp, ecx
jge menu_test
sub ecx, eax
shr eax, 1
sub ebp, eax
jge @f
xor ebp, ebp
lea ebp, [ebx-scrollbutsize]
sub ebp, [listy] ; up scroll
jl menu_test
mov ecx, [listysize]
sub ecx, 2*scrollbutsize
mov eax, [scroll_height]
cmp ebp, ecx
jge menu_test
sub ecx, eax
shr eax, 1
sub ebp, eax
jge @f
xor ebp, ebp
@@:
cmp ebp, ecx
jl @f
mov ebp, ecx
cmp ebp, ecx
jl @f
mov ebp, ecx
@@:
xor edx, edx
mov eax, [listysize]
sub eax, 2
mov ebx, 10
div ebx
mov ebx, eax
cmp ebx, [listsize]
jae notusescrl
mov eax, [listsize]
sub eax, ebx
mul ebp
div ecx
cmp eax, [filecursor]
jz still
mov [filecursor], eax
jmp usescrl
xor edx, edx
mov eax, [listysize]
sub eax, 2
mov ebx, 10
div ebx
mov ebx, eax
cmp ebx, [listsize]
jae notusescrl
mov eax, [listsize]
sub eax, ebx
mul ebp
div ecx
cmp eax, [filecursor]
jz still
mov [filecursor], eax
jmp usescrl
notusescrl:
cmp [filecursor], 0
jz still
cmp [filecursor], 0
jz still
mov [filecursor],0 ;ebp
usescrl:
 
313,7 → 313,7
jmp down
no_pgdown:
cmp ah,key_Enter
je kfad
je kfad
cmp ah,key_Bspace
je back
cmp ah,key_F2
340,8 → 340,8
no_con_ent:
cmp ah,key_Left
jne no_con_left
cmp [cursor], 0
jz still
cmp [cursor], 0
jz still
dec [cursor]
mov [flick],2
jmp anti_flick ;red
348,9 → 348,9
no_con_left:
cmp ah,key_Right
jne no_con_right
mov eax, [cursor]
cmp byte [path+eax], 0
jz still
mov eax, [cursor]
cmp byte [path+eax], 0
jz still
inc [cursor]
mov [flick],2
jmp anti_flick ;red
358,9 → 358,9
cmp ah,key_Bspace
jne no_con_bspace
 
mov ebp, [cursor]
test ebp, ebp
jz still
mov ebp, [cursor]
test ebp, ebp
jz still
lobsp:
mov bl,byte [path+ebp]
mov byte [path+ebp-1],bl
374,11 → 374,11
 
mov ecx,[cursor]
mov ebp,1022
cmp byte [path+ebp], 0
jnz still
cmp byte [path+ebp], 0
jnz still
losx:
cmp ebp, ecx
jbe @f
cmp ebp, ecx
jbe @f
mov bl,byte [path+ebp]
mov byte [path+ebp+1],bl
dec ebp
443,7 → 443,7
lea ebp,[convinfo+eax]
mov esi,[ebp]
cmp esi,-1
jz still
jz still
 
mov edi,paramtest ;clear param string
mov ecx,1024/4
450,37 → 450,37
xor eax,eax
rep stosd
 
mov edi, path
mov ecx, 1024
repnz scasb
dec edi
cmp [ebp+15], dword 'FOL '
jnz openf
mov edi, path
mov ecx, 1024
repnz scasb
dec edi
cmp [ebp+15], dword 'FOL '
jnz openf
; open directory - append its name to path
cmp ecx, 2
jb still
push edi
mov al, '/'
stosb
dec ecx
cmp ecx, 2
jb still
push edi
mov al, '/'
stosb
dec ecx
@@:
lodsb
stosb
test al, al
jz @f
dec ecx
jnz @b
lodsb
stosb
test al, al
jz @f
dec ecx
jnz @b
; name is too long - do not do anything
pop edi
xor eax, eax
mov ecx, path+1024
sub ecx, edi
rep stosb
jmp still
pop edi
xor eax, eax
mov ecx, path+1024
sub ecx, edi
rep stosb
jmp still
@@:
sub edi, path+1
mov [cursor], edi
pop edi
sub edi, path+1
mov [cursor], edi
pop edi
; name appended, now read new directory
mov [filecursor],0
 
495,15 → 495,15
jne still
; always force open file - this is better
; because there exists files without extension and folders with extension
jmp openf
jmp openf
; mov ecx,100
;savetestloop:
; cmp [path+ecx],byte 0
; je next_byte
; je next_byte
; cmp [path+ecx],byte 32
; je next_byte
; je next_byte
; cmp [path+ecx],byte '.'
; je openf ;it's file
; je openf ;it's file
;; cmp [path+ecx],byte '/'
;; je no_save ;it's dir
;next_byte:
514,29 → 514,29
;Open/Run file
 
openf:
push esi edi
mov esi, path
mov edi, paramtest
mov ecx, 1024/4
rep movsd
pop edi esi
add edi, paramtest-path
push esi edi
mov esi, path
mov edi, paramtest
mov ecx, 1024/4
rep movsd
pop edi esi
add edi, paramtest-path
 
cmp dword [focus],0 ;if prompt line with focus no add file name from frame
jne file_set
 
cmp edi, paramtest+1022
jae still
mov al, '/'
stosb
cmp edi, paramtest+1022
jae still
mov al, '/'
stosb
@@:
lodsb
stosb
test al, al
jz file_set
cmp edi, paramtest+1024
jb @b
jmp still
lodsb
stosb
test al, al
jz file_set
cmp edi, paramtest+1024
jb @b
jmp still
 
file_set:
 
573,86 → 573,97
; je edit
 
; find extension
mov eax, paramtest+1023
mov eax, paramtest+1023
@@:
dec eax
cmp byte [eax+1], 0
jz @b
dec eax
cmp byte [eax+1], 0
jz @b
@@:
cmp byte [eax], '/'
jz .noext
cmp byte [eax], '.'
jz .ext
dec eax
cmp eax, paramtest
jae @b
cmp byte [eax], '/'
jz .noext
cmp byte [eax], '.'
jz .ext
dec eax
cmp eax, paramtest
jae @b
.noext:
; file has no extension
; xor ebx, ebx
jmp execute
jmp execute
.ext:
inc eax
inc eax
; eax points to extension
cmp byte [eax], 0
jz .noext
mov ecx, dword [eax]
and ecx, not 0x20202020
mov ebx, jpgview
cmp ecx, 'JPG'
jz run
cmp ecx, 'JPEG' ; note that it will select also *.JPEG*
jz run
mov ebx, gifview
cmp ecx, 'GIF'
jz run
mov ebx, ac97
cmp ecx, 'WAV'
jz run
cmp ecx, 'MP3'
jz run
mov ebx, midamp
cmp ecx, 'MID'
jz run
mov ebx, bmpview
cmp ecx, 'BMP'
jz run
cmp byte [eax], 0
jz .noext
mov ecx, dword [eax]
and ecx, not 0x20202020
mov ebx, jpgview
cmp ecx, 'JPG'
jz run
cmp ecx, 'JPEG' ; note that it will select also *.JPEG*
jz run
mov ebx, bmpview
cmp ecx, 'GIF'
jz run
mov ebx, ac97
cmp ecx, 'WAV'
jz run
cmp ecx, 'MP3'
jz run
cmp ecx, 'XM'
jz run
mov ebx, midamp
cmp ecx, 'MID'
jz run
mov ebx, htmlv
cmp ecx, 'HTM'
jz run
mov ebx, bmpview
cmp ecx, 'BMP'
jz run
; //// Willow
mov ebx, pngview
cmp ecx, 'PNG'
jz run
mov ebx, pngview
cmp ecx, 'PNG'
jz run
; //// Willow
mov ebx, rtfread
cmp ecx, 'RTF'
jz run
mov ebx, editor
cmp ecx, 'ASM'
jz run
cmp ecx, 'TXT'
jz run
cmp ecx, 'INC'
jz run
mov ebx, life2
cmp ecx, 'LIF'
jz run
mov ebx, view3ds
cmp ecx, '3DS' and not 0x20202020
jz run
jmp still
mov ebx, rtfread
cmp ecx, 'RTF'
jz run
mov ebx, editor
cmp ecx, 'ASM'
jz run
cmp ecx, 'TXT'
jz run
cmp ecx, 'INC'
jz run
cmp ecx, 'INI'
jz run
cmp ecx, 'LOG'
jz run
cmp ecx, 'CONF'
jz run
mov ebx, life2
cmp ecx, 'LIF'
jz run
mov ebx, view3ds
cmp ecx, '3DS' and not 0x20202020
jz run
jmp still
 
execute:
mov ebx, fileinfo_start
and dword [ebx+8], 0 ; no parameters
mov dword [ebx+21], paramtest ; program name
mov ebx, fileinfo_start
and dword [ebx+8], 0 ; no parameters
mov dword [ebx+21], paramtest ; program name
.do:
mov eax, 70
mcall
jmp still
mov eax, 70
mcall
jmp still
 
run:
mov [fileinfo_name], ebx ; program name
mov ebx, fileinfo_start
mov dword [ebx+8], paramtest ; parameters
jmp execute.do
mov [fileinfo_name], ebx ; program name
mov ebx, fileinfo_start
mov dword [ebx+8], paramtest ; parameters
jmp execute.do
 
no_filelist:
 
683,37 → 694,37
cmp ah,9
jne no_textopen
textopen:
mov eax, 27
mul [filecursor]
cmp dword [eax+convinfo+15], 'FOL '
jz still
push eax
mov esi, path
mov edi, paramtest
mov eax, 27
mul [filecursor]
cmp dword [eax+convinfo+15], 'FOL '
jz still
push eax
mov esi, path
mov edi, paramtest
@@:
lodsb
test al, al
jz @f
stosb
jmp @b
lodsb
test al, al
jz @f
stosb
jmp @b
@@:
mov al, '/'
stosb
pop eax
mov esi, [eax+convinfo]
cmp esi, -1
jz still
mov al, '/'
stosb
pop eax
mov esi, [eax+convinfo]
cmp esi, -1
jz still
@@:
lodsb
stosb
test al, al
jz @f
cmp edi, paramtest+1024
jb @b
jmp still
lodsb
stosb
test al, al
jz @f
cmp edi, paramtest+1024
jb @b
jmp still
@@:
mov ebx, editor
jmp run
mov ebx, editor
jmp run
 
no_textopen:
 
720,10 → 731,10
cmp ah,11
jne no_view
viewset:
inc [viewmode]
cmp [viewmode], 4
jb @f
mov [viewmode], 0
inc [viewmode]
cmp [viewmode], 4
jb @f
mov [viewmode], 0
@@:
call read_directory
; call convertation
735,21 → 746,21
cmp ah,12 ;move back
jne no_back
back:
mov edi, path+1024
mov ecx, edi
mov edi, path+1024
mov ecx, edi
@@:
dec edi
cmp byte [edi], '/'
jz @f
cmp edi, path
ja @b
jmp still
dec edi
cmp byte [edi], '/'
jz @f
cmp edi, path
ja @b
jmp still
@@:
sub ecx, edi
lea eax, [edi-path]
mov [cursor], eax
xor eax, eax
rep stosb
sub ecx, edi
lea eax, [edi-path]
mov [cursor], eax
xor eax, eax
rep stosb
mov [filecursor],0
call read_directory
; call convertation
782,98 → 793,98
cmp ah,15
jne no_copyclip ;copy to clipboard
copy_to_clip:
mov eax, 27
mul [filecursor]
cmp dword [convinfo+eax+15], 'FOL '
jz still
push eax
mov esi, path
mov edi, paramtest
mov eax, 27
mul [filecursor]
cmp dword [convinfo+eax+15], 'FOL '
jz still
push eax
mov esi, path
mov edi, paramtest
@@:
lodsb
test al, al
jz @f
stosb
jmp @b
lodsb
test al, al
jz @f
stosb
jmp @b
@@:
pop eax
mov esi, [convinfo+eax]
cmp esi, -1
jz still
mov al, '/'
stosb
pop eax
mov esi, [convinfo+eax]
cmp esi, -1
jz still
mov al, '/'
stosb
@@:
lodsb
stosb
test al, al
jz @f
cmp edi, paramtest+1024
jb @b
jmp still
lodsb
stosb
test al, al
jz @f
cmp edi, paramtest+1024
jb @b
jmp still
@@:
sub edi, paramtest+1
mov ebx, clipfile_info
mov byte [ebx], 2
mov [ebx+12], edi
mov eax, 70
mcall
jmp still
sub edi, paramtest+1
mov ebx, clipfile_info
mov byte [ebx], 2
mov [ebx+12], edi
mov eax, 70
mcall
jmp still
no_copyclip:
 
cmp ah,16
jne no_clippaste
paste_from_clip:
mov ebx, clipfile_info
mov byte [ebx], 0
mov dword [ebx+12], 1023
mov eax, 70
mcall
cmp ebx, 0
jle still
mov byte [paramtest+ebx], 0
mov ebx, clipfile_info
mov byte [ebx], 0
mov dword [ebx+12], 1023
mov eax, 70
mcall
cmp ebx, 0
jle still
mov byte [paramtest+ebx], 0
; OS allows only 256 symbols in command line
cmp ebx, 250
jae still
cmp ebx, 250
jae still
; we use Pascal-style strings for /RD/1/COPYR
; source file
mov edi, copyr_param
mov al, bl
stosb
mov ecx, ebx
mov esi, paramtest
rep movsb
mov edi, copyr_param
mov al, bl
stosb
mov ecx, ebx
mov esi, paramtest
rep movsb
; destination path
inc edi
mov ebp, edi
mov esi, path
inc edi
mov ebp, edi
mov esi, path
@@:
cmp edi, copyr_param+255
jae still
lodsb
test al, al
jz @f
stosb
jmp @b
cmp edi, copyr_param+255
jae still
lodsb
test al, al
jz @f
stosb
jmp @b
; destination file name
@@:
dec ebx
jz still
cmp byte [paramtest+ebx], '/'
jnz @b
lea esi, [paramtest+ebx]
dec ebx
jz still
cmp byte [paramtest+ebx], '/'
jnz @b
lea esi, [paramtest+ebx]
@@:
lodsb
test al, al
jz @f
stosb
cmp edi, copyr_param+255
jae still
jmp @b
lodsb
test al, al
jz @f
stosb
cmp edi, copyr_param+255
jae still
jmp @b
@@:
mov byte [edi], 0
sub edi, ebp
mov eax, edi
mov [ebp-1], al
mov byte [edi], 0
sub edi, ebp
mov eax, edi
mov [ebp-1], al
; display
cmp [browser], 1
jne no_outpath
880,20 → 891,20
mov eax,4 ; function 4 : write text to window
mov ebx,10*65536+67 ; [x start] *65536 + [y start]
mov ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
mov edx, copyr_param+1
movzx esi, byte [edx-1]
mov edx, copyr_param+1
movzx esi, byte [edx-1]
mcall
mov ebx,250*65536+67 ; [x start] *65536 + [y start]
mov ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
mov edx, ebp
mov esi, edi
mov edx, ebp
mov esi, edi
mcall
no_outpath:
 
; run COPYR
mov eax, 70
mov ebx, copyr_run
mcall
mov eax, 70
mov ebx, copyr_run
mcall
delay 50 ;wait recoed file
jmp update ;still
no_clippaste:
902,7 → 913,7
jne no_delt
delete_file:
; OS now do not support file delete
jmp still
jmp still
no_delt:
 
cmp ah,20 ;I - Help
957,25 → 968,25
;VIEW MENU
cmp ah,40 ;Sort by name
jne no_sn
mov [viewmode], 0
mov [viewmode], 0
jmp update
no_sn:
 
cmp ah,41 ;Sort by extension
jne no_se
mov [viewmode], 1
mov [viewmode], 1
jmp update
no_se:
 
cmp ah,42 ;Sort by size
jne no_ss
mov [viewmode], 2
mov [viewmode], 2
jmp update
no_ss:
 
cmp ah,43 ;Sort by date
jne no_sd
mov [viewmode], 3
mov [viewmode], 3
jmp update
no_sd:
 
1091,10 → 1102,10
 
cld
cyc:
push esi
lea ecx, [ebp+ebp*2]
rep movsb
pop esi
push esi
lea ecx, [ebp+ebp*2]
rep movsb
pop esi
add esi,edx
dec ebx
jne cyc
1192,7 → 1203,7
ret
@@:
cmp [procinfo.box.height], 0x70
jl .ret
jl .ret
 
cmp [browser], 1 ;it's browser
jne nob9
1200,7 → 1211,7
; mov eax,[procinfo.box.width]
sub eax,127;[listx]+7
cmp eax,10
jl .ret
jl .ret
mov [listxsize],eax
mov [listy],73
mov eax,[procinfo.box.height]
1366,8 → 1377,8
glabel 20,57,"URL:",cl_Black
 
;Out view mode info
movzx edx, [viewmode]
shl edx, 4
movzx edx, [viewmode]
shl edx, 4
mov eax,4
mov ebx,180*65536+25
mov ecx,cl_Black
1561,42 → 1572,42
jae notusescroll
;usescroll
; calculate scroll size
mov eax, [listysize]
sub eax, 2*scrollbutsize
push eax
mul ebx
div [listsize]
cmp eax, 5
jae @f
mov al, 5
mov eax, [listysize]
sub eax, 2*scrollbutsize
push eax
mul ebx
div [listsize]
cmp eax, 5
jae @f
mov al, 5
@@:
mov [scroll_height], eax
mov [scroll_height], eax
; calculate scroll pos
sub [esp], eax
mov eax, [listsize]
sub eax, ebx
mov ecx, eax
cmp eax, [filecursor]
jb @f
mov eax, [filecursor]
sub [esp], eax
mov eax, [listsize]
sub eax, ebx
mov ecx, eax
cmp eax, [filecursor]
jb @f
mov eax, [filecursor]
@@:
mul dword [esp]
div ecx
mov [scroll_pos], eax
pop ecx
mul dword [esp]
div ecx
mov [scroll_pos], eax
pop ecx
; draw
lea ecx, [eax+scrollbutsize]
add ecx, [listy]
shl ecx, 16
mov cx, word [scroll_height]
mov eax, 13
mov ebx, [listx]
add ebx, [listxsize]
sub ebx, [scrollsize]
shl ebx, 16
mov bx, word [scrollsize]
mov edx, [scrollboxcol]
mcall
lea ecx, [eax+scrollbutsize]
add ecx, [listy]
shl ecx, 16
mov cx, word [scroll_height]
mov eax, 13
mov ebx, [listx]
add ebx, [listxsize]
sub ebx, [scrollsize]
shl ebx, 16
mov bx, word [scrollsize]
mov edx, [scrollboxcol]
mcall
notusescroll:
 
 
1686,8 → 1697,8
; sub eax,40*6 ;leight of string
; shr eax,1
; add eax,[listx]
mov eax, [listx]
add eax, 12+4 ; for icons
mov eax, [listx]
add eax, 12+4 ; for icons
shl eax,16
add eax,[listy]
add eax,2
1713,8 → 1724,8
add edx,eax
mov ebx,dword [filelistxy]
loo:
cmp dword [edx], -1
jz noout
cmp dword [edx], -1
jz noout
mov ecx,0x00888888 ;for another file's color white
cmp [edx+15],dword 'FOL ' ;folder yellow
jne nb
1721,100 → 1732,100
mov ecx,0x00006666
jmp cset1
nb:
mov eax, [edx]
xor edi, edi
mov eax, [edx]
xor edi, edi
; find extension and set color
@@:
inc eax
cmp byte [eax-1], 0
jz @f
cmp byte [eax-1], '.'
jnz @b
mov edi, eax
jmp @b
inc eax
cmp byte [eax-1], 0
jz @f
cmp byte [eax-1], '.'
jnz @b
mov edi, eax
jmp @b
@@:
test edi, edi
jz @f
mov edi, [edi]
and edi, not 0x20202020 ; toupper
test edi, edi
jz @f
mov edi, [edi]
and edi, not 0x20202020 ; toupper
@@:
;Color set
; text's blue
mov ecx, 0x00446666
cmp edi, 'TXT'
jz cset
cmp edi, 'INC'
jz cset
cmp edi, 'ASM'
jz cset
cmp edi, 'RTF'
jz cset
mov ecx, 0x00446666
cmp edi, 'TXT'
jz cset
cmp edi, 'INC'
jz cset
cmp edi, 'ASM'
jz cset
cmp edi, 'RTF'
jz cset
; picture's pure
mov ecx, 0x00226688
cmp edi, 'BMP'
jz cset
cmp edi, 'JPG'
jz cset
cmp edi, 'JPEG'
jz cset
cmp edi, 'GIF'
jz cset
cmp edi, 'PNG'
jz cset
cmp edi, 'WAV'
jz cset
cmp edi, 'MID'
jz cset
mov ecx, 0x00226688
cmp edi, 'BMP'
jz cset
cmp edi, 'JPG'
jz cset
cmp edi, 'JPEG'
jz cset
cmp edi, 'GIF'
jz cset
cmp edi, 'PNG'
jz cset
cmp edi, 'WAV'
jz cset
cmp edi, 'MID'
jz cset
; execute's green
mov ecx, 0x00008866
test edi, edi
jz cset
mov ecx, 0x00008866
test edi, edi
jz cset
; for another file's color white
mov ecx, 0x00888888
mov ecx, 0x00888888
cset:
 
cset1:
push edx
mov edx,[edx]
push ebx edx
mov eax, [listxsize]
sub eax, [scrollsize]
sub eax, 12+4
xor edx, edx
mov ebx, 6
div ebx
pop edx ebx
sub eax, 25
xor esi, esi
push ebx edx
mov eax, [listxsize]
sub eax, [scrollsize]
sub eax, 12+4
xor edx, edx
mov ebx, 6
div ebx
pop edx ebx
sub eax, 25
xor esi, esi
@@:
cmp byte [edx+esi], 0
jz @f
inc esi
cmp esi, eax
jbe @b
dec esi
cmp byte [edx+esi], 0
jz @f
inc esi
cmp esi, eax
jbe @b
dec esi
@@:
push eax
push eax
mov eax,4
mcall
cmp byte [edx+esi], 0
jz @f
pushad
mov edx, more_char
mov eax, esi
imul eax, 6*65536
add ebx, eax
mov esi, 1
mov eax, 4
mcall
popad
cmp byte [edx+esi], 0
jz @f
pushad
mov edx, more_char
mov eax, esi
imul eax, 6*65536
add ebx, eax
mov esi, 1
mov eax, 4
mcall
popad
@@:
pop eax
pop eax
pop edx
push ebx edx
inc eax
imul eax, 6*65536
add ebx, eax
inc eax
imul eax, 6*65536
add ebx, eax
add edx,4
mov esi,23
mov eax,4
1868,6 → 1879,10
je is_imgico
cmp edi,dword 'MID'
je is_imgico
cmp edi,dword 'MP3'
je is_imgico
cmp edi,dword 'XM'
je is_imgico
jmp no_imgico
is_imgico:
push imgico+8
1877,6 → 1892,10
je is_asmincico
cmp edi,dword 'INC'
je is_asmincico
cmp edi,dword 'INI'
je is_asmincico
cmp edi,dword 'CONF'
je is_asmincico
jmp no_asmincico
is_asmincico:
push asmincico+8
1886,6 → 1905,8
je @f
cmp edi,dword 'TXT'
jne no_txtico
cmp edi,dword 'LOG'
jne no_txtico
@@:
push txtico+8
jmp out_ico
2081,24 → 2102,24
cmp [path],byte '/'
je nstep
; copy info on RD and FD
mov esi, hdimg
mov ecx, 2*27
rep movsb
mov esi, hdimg
mov ecx, 2*27
rep movsb
; hard disks
mov eax, 4
mov eax, 4
.1:
mov ecx, 27
cmp dword [esi], 0
jz .2
rep movsb
jmp .3
mov ecx, 27
cmp dword [esi], 0
jz .2
rep movsb
jmp .3
.2:
add esi, ecx
add esi, ecx
.3:
dec eax
jnz .1
mov [listsize], 0
ret
dec eax
jnz .1
mov [listsize], 0
ret
nstep:
cmp [path+3],byte '/'
je nstep2
2106,12 → 2127,12
je nstep2
mov ecx,1
cmp [path+1],word 'RD'
jz loxpt
jz loxpt
cmp [path+1],word 'CD'
jz loxpt
jz loxpt
mov ecx,2
cmp [path+1],word 'FD'
jz loxpt
jz loxpt
cmp [path+1],dword 'HD0'
jne nostep_HD0
movzx ecx,byte [table_area+2]
2136,20 → 2157,20
mov ecx,2
 
loxpt:
cmp ecx, 20
jbe @f
mov ecx, 20
cmp ecx, 20
jbe @f
mov ecx, 20
@@:
mov eax, a1
mov esi, ptimg
mov eax, a1
mov esi, ptimg
@@:
stosd
add eax, 3
push ecx esi
mov ecx, 23
rep movsb
pop esi ecx
loop @b
stosd
add eax, 3
push ecx esi
mov ecx, 23
rep movsb
pop esi ecx
loop @b
mov [listsize],0
ret
nstep2:
2181,114 → 2202,114
 
end_of_dir:
; -1 -> 0
cmp ebx, -1
sbb ebx, -1
cmp ebx, -1
sbb ebx, -1
mov [dirlen],ebx
 
; command successful
 
mov esi, outinfo+32
and [listsize], 0
test ebx, ebx
jz nofiles
mov esi, outinfo+32
and [listsize], 0
test ebx, ebx
jz nofiles
 
newlineb:
push ebx
push ebx
 
mov edi, fileinfo
push edi
mov al, ' '
mov ecx, 27
rep stosb
pop edi
push esi
add esi, 40
mov [edi], esi
pop esi
mov edi, fileinfo
push edi
mov al, ' '
mov ecx, 27
rep stosb
pop edi
push esi
add esi, 40
mov [edi], esi
pop esi
 
mov eax, 'DAT ' ; data or ... ?
mov cl, [esi]
test cl, 0x10
jz @f
mov eax, 'FOL '
mov [edi+15], eax
jmp nosize
mov eax, 'DAT ' ; data or ... ?
mov cl, [esi]
test cl, 0x10
jz @f
mov eax, 'FOL '
mov [edi+15], eax
jmp nosize
@@:
test cl, 8
jz novol
mov eax, 'Fvol'
mov [edi+15], eax
jmp nosize
test cl, 8
jz novol
mov eax, 'Fvol'
mov [edi+15], eax
jmp nosize
novol:
mov [edi+15], eax
mov [edi+15], eax
 
; size
mov eax, [esi+32]
push esi
lea esi, [edi+26]
mov ebx, 10
mov ecx, 8
mov eax, [esi+32]
push esi
lea esi, [edi+26]
mov ebx, 10
mov ecx, 8
newnum:
xor edx, edx
div ebx
add dl, '0'
mov [esi], dl
test eax, eax
jz zernum
dec esi
loop newnum
xor edx, edx
div ebx
add dl, '0'
mov [esi], dl
test eax, eax
jz zernum
dec esi
loop newnum
zernum:
pop esi
pop esi
nosize:
 
; date
mov dword [edi+6], '. .'
mov dword [edi+6], '. .'
; year
movzx eax, word [esi+28+2]
mov ecx, 4
movzx eax, word [esi+28+2]
mov ecx, 4
newdel1:
xor edx, edx
mov ebx, 10
div ebx
add edx, '0'
mov [edi+ecx+9], dl
loop newdel1
xor edx, edx
mov ebx, 10
div ebx
add edx, '0'
mov [edi+ecx+9], dl
loop newdel1
; month
movzx eax, byte [esi+28+1]
xor edx, edx
div ebx
add al, '0'
add dl, '0'
mov [edi+7], al
mov [edi+8], dl
movzx eax, byte [esi+28+1]
xor edx, edx
div ebx
add al, '0'
add dl, '0'
mov [edi+7], al
mov [edi+8], dl
; day
movzx eax, byte [esi+28]
xor edx, edx
div ebx
add al, '0'
add dl, '0'
mov [edi+4], al
mov [edi+5], dl
movzx eax, byte [esi+28]
xor edx, edx
div ebx
add al, '0'
add dl, '0'
mov [edi+4], al
mov [edi+5], dl
 
;STEP 5 Test on WRITE OR NOTWRITE
cmp word [esi+40], '.'
jz nextfl
cmp word [esi+40], '..'
jnz @f
cmp byte [esi+42], 0
jz nextfl
cmp word [esi+40], '.'
jz nextfl
cmp word [esi+40], '..'
jnz @f
cmp byte [esi+42], 0
jz nextfl
@@:
 
; STEP 6 SORT ALGORYTHM
 
push esi
xor esi, esi
push esi
xor esi, esi
 
; At first Fold after Dat
 
ftestname:
cmp dword [convinfo+esi], -1
jz writefile
cmp dword [convinfo+esi], -1
jz writefile
cmp byte [fileinfo+15],'F'
je F
cmp byte [fileinfo+15],'D'
2306,9 → 2327,9
 
add_element:
; compare items
movzx eax, [viewmode]
call [compare+eax*4]
jb writenow
movzx eax, [viewmode]
call [compare+eax*4]
jb writenow
skipfile:
add esi,27
jmp ftestname
2329,127 → 2350,127
mov [convinfo+ecx+esi],al
dec ecx
jns wfloop
inc [listsize]
pop esi
inc [listsize]
pop esi
 
nextfl:
add esi, 304
pop ebx
dec ebx
jnz newlineb
add esi, 304
pop ebx
dec ebx
jnz newlineb
 
nofiles:
ret
ret
 
toupper:
cmp al, 'a'
jb .ret
cmp al, 'z'
ja @f
cmp al, 'a'
jb .ret
cmp al, 'z'
ja @f
.sub20:
sub al, 0x20
sub al, 0x20
.ret:
ret
ret
@@:
cmp al, 0xA0
jb .ret
cmp al, 0xB0
jb .sub20
cmp al, 0xE0
jb .ret
cmp al, 0xF0
jae @f
sub al, 0xE0-0x90
ret
cmp al, 0xA0
jb .ret
cmp al, 0xB0
jb .sub20
cmp al, 0xE0
jb .ret
cmp al, 0xF0
jae @f
sub al, 0xE0-0x90
ret
@@:
cmp al, 0xF1
jnz .ret
dec eax
ret
cmp al, 0xF1
jnz .ret
dec eax
ret
 
compare_date:
pushad
mov al, [fileinfo+10]
cmp al, [convinfo+esi+10]
jnz .ret
mov al, [fileinfo+11]
cmp al, [convinfo+esi+11]
jnz .ret
mov al, [fileinfo+12]
cmp al, [convinfo+esi+12]
jnz .ret
mov al, [fileinfo+13]
cmp al, [convinfo+esi+13]
jnz .ret
mov al, [fileinfo+7]
cmp al, [convinfo+esi+7]
jnz .ret
mov al, [fileinfo+8]
cmp al, [convinfo+esi+8]
jnz .ret
mov al, [fileinfo+4]
cmp al, [convinfo+esi+4]
jnz .ret
mov al, [fileinfo+5]
cmp al, [convinfo+esi+5]
jz compare_name.1
pushad
mov al, [fileinfo+10]
cmp al, [convinfo+esi+10]
jnz .ret
mov al, [fileinfo+11]
cmp al, [convinfo+esi+11]
jnz .ret
mov al, [fileinfo+12]
cmp al, [convinfo+esi+12]
jnz .ret
mov al, [fileinfo+13]
cmp al, [convinfo+esi+13]
jnz .ret
mov al, [fileinfo+7]
cmp al, [convinfo+esi+7]
jnz .ret
mov al, [fileinfo+8]
cmp al, [convinfo+esi+8]
jnz .ret
mov al, [fileinfo+4]
cmp al, [convinfo+esi+4]
jnz .ret
mov al, [fileinfo+5]
cmp al, [convinfo+esi+5]
jz compare_name.1
.ret:
popad
ret
popad
ret
compare_name:
pushad
pushad
.1:
mov edi, dword [convinfo+esi]
mov esi, dword [fileinfo]
call strcmpi
popad
ret
mov edi, dword [convinfo+esi]
mov esi, dword [fileinfo]
call strcmpi
popad
ret
compare_ext:
pushad
mov esi, dword [convinfo+esi]
mov edi, dword [fileinfo]
call find_ext
xchg esi, edi
call find_ext
call strcmpi
popad
jz compare_name
ret
pushad
mov esi, dword [convinfo+esi]
mov edi, dword [fileinfo]
call find_ext
xchg esi, edi
call find_ext
call strcmpi
popad
jz compare_name
ret
compare_size:
pushad
lea edi, [convinfo+esi+19]
lea esi, [fileinfo+19]
mov ecx, 8
repz cmpsb
popad
jz compare_name
ret
pushad
lea edi, [convinfo+esi+19]
lea esi, [fileinfo+19]
mov ecx, 8
repz cmpsb
popad
jz compare_name
ret
 
strcmpi:
lodsb
call toupper
push eax
mov al, [edi]
inc edi
call toupper
cmp [esp], al
pop eax
jnz @f
test al, al
jnz strcmpi
lodsb
call toupper
push eax
mov al, [edi]
inc edi
call toupper
cmp [esp], al
pop eax
jnz @f
test al, al
jnz strcmpi
@@:
ret
ret
 
find_ext:
lodsb
test al, al
jz .noext
cmp al, '.'
jnz find_ext
ret
lodsb
test al, al
jz .noext
cmp al, '.'
jnz find_ext
ret
.noext:
dec esi
ret
dec esi
ret
 
;******************************************************************************
 
2473,56 → 2494,56
browser db 0 ;0-dialog, 1-browser
viewmode db 0 ;folder sort
 
compare dd compare_name
dd compare_ext
dd compare_size
dd compare_date
compare dd compare_name
dd compare_ext
dd compare_size
dd compare_date
 
aRD db 'RD',0
aFD db 'FD',0
aHD0 db 'HD0',0
aHD1 db 'HD1',0
aHD2 db 'HD2',0
aHD3 db 'HD3',0
aCD0 db 'CD0',0
aCD1 db 'CD1',0
aCD2 db 'CD2',0
aCD3 db 'CD3',0
a1 db '1',0,0
a2 db '2',0,0
a3 db '3',0,0
a4 db '4',0,0
a5 db '5',0,0
a6 db '6',0,0
a7 db '7',0,0
a8 db '8',0,0
a9 db '9',0,0
a10 db '10',0
a11 db '11',0
a12 db '12',0
a13 db '13',0
a14 db '14',0
a15 db '15',0
a16 db '16',0
a17 db '17',0
a18 db '18',0
a19 db '19',0
a20 db '20',0
aRD db 'RD',0
aFD db 'FD',0
aHD0 db 'HD0',0
aHD1 db 'HD1',0
aHD2 db 'HD2',0
aHD3 db 'HD3',0
aCD0 db 'CD0',0
aCD1 db 'CD1',0
aCD2 db 'CD2',0
aCD3 db 'CD3',0
a1 db '1',0,0
a2 db '2',0,0
a3 db '3',0,0
a4 db '4',0,0
a5 db '5',0,0
a6 db '6',0,0
a7 db '7',0,0
a8 db '8',0,0
a9 db '9',0,0
a10 db '10',0
a11 db '11',0
a12 db '12',0
a13 db '13',0
a14 db '14',0
a15 db '15',0
a16 db '16',0
a17 db '17',0
a18 db '18',0
a19 db '19',0
a20 db '20',0
 
hdimg:
dd aRD
db 'RAMDISK FOL '
dd aFD
db 'FLOPPYDISK FOL '
hdimg1 dd 0
db 'HARDDISK FOL '
hdimg2 dd 0
db 'HARDDISK FOL '
hdimg3 dd 0
db 'HARDDISK FOL '
hdimg4 dd 0
db 'HARDDISK FOL '
ptimg db 'PARTITION FOL '
dd aRD
db 'RAMDISK FOL '
dd aFD
db 'FLOPPYDISK FOL '
hdimg1 dd 0
db 'HARDDISK FOL '
hdimg2 dd 0
db 'HARDDISK FOL '
hdimg3 dd 0
db 'HARDDISK FOL '
hdimg4 dd 0
db 'HARDDISK FOL '
ptimg db 'PARTITION FOL '
 
modetext:
;0123456789012345
2553,7 → 2574,8
bmpview db '/sys/MV',0
jpgview db '/sys/JPEGVIEW',0
gifview db '/sys/GIFVIEW',0
ac97 db '/sys/AC97SND',0
ac97 db '/sys/AC97SND',0
htmlv db '/sys/NETWORK/HTMLV',0
rtfread db '/sys/RTFREAD',0
; //// Willow
pngview db '/sys/@RCHER',0
2560,7 → 2582,7
; //// Willow
midamp db '/sys/MIDAMP',0
view3ds db '/sys/3D/VIEW3DS',0
life2 db '/sys/DEMOS/LIFE2',0
life2 db '/sys/DEMOS/LIFE2',0
 
more_char db 10h
 
2567,30 → 2589,30
IncludeIGlobals
 
fileinfo_start:
dd 7
dd 0
dd 7
dd 0
fileinfo_params:
dd 0
dd 0
dd 0
db 0
dd 0
dd 0
dd 0
db 0
fileinfo_name:
dd 0
dd 0
 
clipfile_info:
dd ?
dd 0
dd 0
dd ?
dd paramtest
db '/SYS/CLIPFILE.TXT',0
dd ?
dd 0
dd 0
dd ?
dd paramtest
db '/SYS/CLIPFILE.TXT',0
copyr_run:
dd 7
dd 0
dd copyr_param
dd 0
dd 0
db '/SYS/COPYR',0
dd 7
dd 0
dd copyr_param
dd 0
dd 0
db '/SYS/COPYR',0
 
fileinfoblock:
dd 0x1 ; read folder
2599,7 → 2621,7
dd 4095 ; number of blocks to read
dd outinfo ; ret offset
path:
times 1024 db 0 ;path
times 1024 db 0 ;path
 
table_area:
rb 10
2668,7 → 2690,7
fileinfo:
rb 200 ;4096*62+1024
 
copyr_param rb 256
copyr_param rb 256
 
outinfo:
rb 32+4096*304
2676,6 → 2698,6
convinfo:
rb 4096*27
; stack
align 4
rb 1024
align 4
rb 1024
RAM_END: