kolibrios/programs/fs/sysxtree/trunk/sysxtree.asm
Kirill Lipatov (Leency) e75134c724 sysxtree: path fixes, header fixes, scroll less redraw, code update
git-svn-id: svn://kolibrios.org@2706 a494cfbc-eb01-0410-851d-a64ba20cac60
2012-05-30 22:35:39 +00:00

2689 lines
45 KiB
NASM

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ;
; SYSTEM X-TREE BROWSER ;
; ;
; Author: Pavlushin Evgeni waptap@mail.ru ;
; site: www.deck4.narod.ru ;
; ;
; Compile with FASM for MenuetOS ;
; ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;Bug report +bug deleted -bug not deleted
;show/fade del notwork+
;64Ver Run file from HD bug deleted.
;65Ver The bad scroll realization
;66Ver The good scroll realization, url line anti-flick
;67Ver Url line monolith procedure
;68Ver Mini icon on left of file name
;69Ver Getimg proc size minus 900 bytes
;70Ver Del data area ramsize minus 140000 bytes
;72Ver Quick sort, ramsize minus 200000 bytes
;73Ver Url flick and out bugs delete
;74Ver scroll bug deleted
;75Ver hd partition fast change button. Add bmp,txt,exec,asm and inc icons.
; sort type in headmenu bug del
;78Ver directory extension bug fix by Asko Vuori
;79Ver Asko Vuori volume label add and "put in command line" bug fix
;80Ver prompt edit fatal bug deleted, antiflick when move list up/down
;81Ver Save Dialog bug deleted
;82Ver Rewritten to function 70. Corrected work with scrollbar.
;83Ver CD-ROM support
;84Ver URL line editor corrected
;1560000 bytes memory!
;******************************************************************************
use32
org 0x0
db 'MENUET01' ; 8 byte id
dd 0x01 ; header version
dd START ; program start
dd I_END ; program image size
dd RAM_END ; memory
dd RAM_END ; stack
dd param_area ,0x0 ; param,icon
; dd 0,0
;******************************************************************************
include '../../../macros.inc' ;
include 'ascl.inc'
include 'ascgl.inc'
START: ; start of execution
; //// Willow
; mov eax,58
; mov ebx,MRUfile
; mcall
; //// Willow
mcall 18,11,1,table_area
cmp [edx+2],byte 0
je no_hdpartition_on_hd0
mov [hdimg1], aHD0
no_hdpartition_on_hd0:
cmp [edx+3],byte 0
je no_hdpartition_on_hd1
mov [hdimg2], aHD1
no_hdpartition_on_hd1:
cmp [edx+4],byte 0
je no_hdpartition_on_hd2
mov [hdimg3], aHD2
no_hdpartition_on_hd2:
cmp [edx+5],byte 0
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], 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], 2
jz @f
mov [hdimg4], aCD3
mov [hdimg4+4], 'CD-R'
mov [hdimg4+8], 'OM '
@@:
mov eax,40
mov ebx,0100111b
mcall
cmp byte [param_area],0 ;test parameters line
jne no_brow ;it's dialog
mov [browser], 1 ;it's browser
jmp no_dlg
no_brow:
mov al,byte [param_area+5]
mov [dlg_type],al
mov eax,9
mov ebx,procinfo
mov ecx,-1
mcall
mov eax,dword [procinfo+30]
mov edi,MYPID+4-1
mov ecx,4
mov ebx,10
cld
new_d:
xor edx,edx
div ebx
add dl,'0'
mov [edi],dl
dec edi
loop new_d
movzx eax,byte [param_area]
sub eax,48
imul eax,10
movzx ebx,byte [param_area+1]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [param_area+2]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [param_area+3]
add eax,ebx
sub eax,48
mov ecx,eax ;pid to ecx
mov eax,60
mov ebx,2
mov edx,MYPID
mov esi,4
mcall
no_dlg:
giftoimg but_file,tempimg
;************************
; Get images
;************************
mov eax,0 ;x
mov ebx,0 ;y
mov esi,286 ;xs
mov edi,16 ;ys
mov ecx,tempimg ;src
mov edx,butimg ;dest
call getimgproc
mov eax,288
mov esi,60
mov edx,logoimg ;dest
call getimgproc
mov eax,0 ;x
mov ebx,16 ;y
mov esi,51 ;xs
mov edi,esi ;ys
mov edx,logoinfimg ;dest
call getimgproc
mov eax,51 ;x
mov esi,8 ;xs
mov edi,9 ;ys
mov edx,upsb ;dest
call getimgproc
mov eax,51+8 ;x
mov edx,dnsb ;dest
call getimgproc
mov eax,51+16 ;x
mov ebx,16 ;y
mov esi,12 ;xs
mov edi,9 ;ys
mov ecx,tempimg ;src
mov edx,hdico ;dest
mov ebp,10
loogetimg:
call getimgproc
add edx,9*12*3+8
add eax,12
dec ebp
jnz loogetimg
call read_directory
; call convertation
red:
call draw_window ; at first, draw the window
still:
mov eax,9
mov ebx,procinfo
mov ecx,-1
mcall
wtevent red,key,button
scrolltest:
mov eax,37
mov ebx,2
mcall
dec eax
jne still
scrl:
mov eax,37
mov ebx,1
mcall
movzx ebx, ax ; y
shr eax, 16 ; x
mov ebp,eax
sub ebp,[listx] ;[procinfo.box.width]
sub ebp,[listxsize]
add ebp,[scrollsize]
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
@@:
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
notusescrl:
cmp [filecursor], 0
jz still
mov [filecursor],0 ;ebp
usescrl:
mov [flick],1
jmp anti_flick ;red
menu_test:
cmp [pmenu_draw],1 ;if menu is show, update all
jne still
mov [pmenu_draw],0
jmp red ;update all window
;this function not use in dialog when poup menu's is not used
;in dialog's
;===================
; Test keyboard
;===================
key: ; key
mov eax,2
mcall
cmp dword [focus],0
jne con_edit
cmp ah,key_Up
jne no_upk
mov ebx,1
jmp up
no_upk:
cmp ah,key_Down
jne no_downk
mov ebx,1
jmp down
no_downk:
cmp ah,key_PgUp
jne no_pgup
mov ebx,10
jmp up
no_pgup:
cmp ah,key_PgDown
jne no_pgdown
mov ebx,10
jmp down
no_pgdown:
cmp ah,key_Enter
je kfad
cmp ah,key_Bspace
je back
cmp ah,key_F2
je viewset
cmp ah,key_F3
je textopen
cmp ah,key_F5
je copy_to_clip
cmp ah,key_F6
je paste_from_clip
cmp ah,key_F11
je edit_prompt
cmp ah,key_F12
je update
jmp still
; test input string
con_edit:
cmp ah,key_Enter
jne no_con_ent
not [focus]
jmp savetest
; jmp update
no_con_ent:
cmp ah,key_Left
jne no_con_left
cmp [cursor], 0
jz still
dec [cursor]
mov [flick],2
jmp anti_flick ;red
no_con_left:
cmp ah,key_Right
jne no_con_right
mov eax, [cursor]
cmp byte [path+eax], 0
jz still
inc [cursor]
mov [flick],2
jmp anti_flick ;red
no_con_right:
cmp ah,key_Bspace
jne no_con_bspace
mov ebp, [cursor]
test ebp, ebp
jz still
lobsp:
mov bl,byte [path+ebp]
mov byte [path+ebp-1],bl
inc ebp
cmp ebp,1024
jne lobsp
dec [cursor]
mov [flick],2
jmp anti_flick ;red
no_con_bspace:
mov ecx,[cursor]
mov ebp,1022
cmp byte [path+ebp], 0
jnz still
losx:
cmp ebp, ecx
jbe @f
mov bl,byte [path+ebp]
mov byte [path+ebp+1],bl
dec ebp
jmp losx
@@:
mov byte [path+ebp],ah
inc dword [cursor]
mov [flick],2
jmp anti_flick
;----------------------------
;Test on mouse button
;-----------------------------
button: ; button
mov eax,17
mcall
cmp ah,2 ;Edit prompt line?
je edit_prompt
cmp ah,4
jne no_filelist
mousetest:
mov eax,37
mov ebx,1
mcall
mov ebx,eax
shr eax,16 ;x
and ebx,0xffff ;y
sub ebx,[listy] ;80
mov [mousey],ebx
mov ecx,[listx]
cmp eax,ecx
jl still
add ecx,[listxsize]
cmp eax,ecx
jg still
filexadd:
; Enter in directory
file_add:
mov edx,0 ;for div correct work div
mov eax,dword [mousey]
mov ebx,10
div ebx
add eax,[filecursor]
jmp no_kfad
kfad:
mov eax,[filecursor]
no_kfad:
mov ebx,27
mul ebx
lea ebp,[convinfo+eax]
mov esi,[ebp]
cmp esi,-1
jz still
mov edi,paramtest ;clear param string
mov ecx,1024/4
xor eax,eax
rep stosd
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
@@:
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
@@:
sub edi, path+1
mov [cursor], edi
pop edi
; name appended, now read new directory
mov [filecursor],0
call read_directory
;; call convertation
call draw_window
jmp still
;Savetest
savetest:
cmp byte [dlg_type],'S'
jne still
; always force open file - this is better
; because there exists files without extension and folders with extension
jmp openf
; mov ecx,100
;savetestloop:
; cmp [path+ecx],byte 0
; je next_byte
; cmp [path+ecx],byte 32
; je next_byte
; cmp [path+ecx],byte '.'
; je openf ;it's file
;; cmp [path+ecx],byte '/'
;; je no_save ;it's dir
;next_byte:
; dec ecx
; jnz savetestloop
; jmp still
;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
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
@@:
lodsb
stosb
test al, al
jz file_set
cmp edi, paramtest+1024
jb @b
jmp still
file_set:
cmp [browser],0
jne is_brow
movzx eax,byte [param_area]
sub eax,48
imul eax,10
movzx ebx,byte [param_area+1]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [param_area+2]
add eax,ebx
sub eax,48
imul eax,10
movzx ebx,byte [param_area+3]
add eax,ebx
sub eax,48
mov ecx,eax ;pid to ecx
mov eax,60
mov ebx,2
mov edx,paramtest
mov esi,1024
mcall
jmp exit
is_brow:
; cmp [convinfo+edi+26],dword 'Fvol'
; je edit
; find extension
mov eax, paramtest+1023
@@:
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
.noext:
; file has no extension
; xor ebx, ebx
jmp execute
.ext:
inc eax
; eax points to extension
cmp byte [eax], 0
jz .noext
mov ecx, dword [eax]
and ecx, not 0x20202020
mov ebx, kiv
cmp ecx, 'JPG'
jz run
cmp ecx, 'JPEG' ; note that it will select also *.JPEG*
jz run
cmp ecx, 'GIF'
jz run
cmp ecx, 'BMP'
jz run
cmp ecx, 'PNG'
jz run
cmp ecx, 'ICO'
jz run
cmp ecx, 'CUR'
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
cmp ecx, 'HTML'
jz run
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
.do:
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
no_filelist:
cmp ah,5 ;OPEN/SAVE button
je kfad
cmp ah,6 ;Scroll up
jne no_scrlup
mov ebx,1
jmp up
no_scrlup:
cmp ah,7 ;Scroll down
jne no_scrldown
mov ebx,1
jmp down
no_scrldown:
cmp ah,8
jne no_update
update:
call read_directory
; call convertation
; mov [filecursor],0
call draw_window
no_update:
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
@@:
lodsb
test al, al
jz @f
stosb
jmp @b
@@:
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
@@:
mov ebx, editor
jmp run
no_textopen:
cmp ah,11
jne no_view
viewset:
inc [viewmode]
cmp [viewmode], 4
jb @f
mov [viewmode], 0
@@:
call read_directory
; call convertation
mov [filecursor],0
call draw_window
jmp still
no_view:
cmp ah,12 ;move back
jne no_back
back:
mov edi, path+1024
mov ecx, edi
@@:
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
mov [filecursor],0
call read_directory
; call convertation
call draw_window
jmp still
no_back:
cmp ah,13 ;string up?
jne no_up
mov ebx,1 ;step
up:
mov [downstop],0
sub [filecursor],ebx
cmp [filecursor],0
jnl cr_ok
mov [filecursor],0
cr_ok:
jmp draw_wd
no_up:
cmp ah,14 ;string down?
jne no_dn
mov ebx,1 ;step
down:
cmp [downstop],1
je no_dn
add [filecursor],ebx
jmp draw_wd
no_dn:
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
@@:
lodsb
test al, al
jz @f
stosb
jmp @b
@@:
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
@@:
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
; OS allows only 256 symbols in command line
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
; destination 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
; destination file name
@@:
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
@@:
mov byte [edi], 0
sub edi, ebp
mov eax, edi
mov [ebp-1], al
; display
cmp [browser], 1
jne no_outpath
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]
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
mcall
no_outpath:
; run COPYR
mov eax, 70
mov ebx, copyr_run
mcall
delay 50 ;wait recoed file
jmp update ;still
no_clippaste:
cmp ah,19 ;Delete from floppy
jne no_delt
delete_file:
; OS now do not support file delete
jmp still
no_delt:
cmp ah,20 ;I - Help
je help_scr
cmp ah,22
jne no_headfile
mov [drawhf],1
call draw_window
mov [drawhf],0
mov [pmenu_draw],1
jmp still
no_headfile:
cmp ah,23
jne no_headview
mov [drawhv],1
call draw_window
mov [drawhv],0
mov [pmenu_draw],1
jmp still
no_headview:
cmp ah,24
jne no_headinfo
mov [drawhi],1
call draw_window
mov [drawhi],0
mov [pmenu_draw],1
jmp still
no_headinfo:
;FILE MENU
cmp ah,30
je kfad
cmp ah,31
je copy_to_clip ;Copy
cmp ah,32
je paste_from_clip ;Paste
cmp ah,33
je delete_file ;Delte
cmp ah,34
je textopen ;Edit in Tinypad
cmp ah,37
je exit
;VIEW MENU
cmp ah,40 ;Sort by name
jne no_sn
mov [viewmode], 0
jmp update
no_sn:
cmp ah,41 ;Sort by extension
jne no_se
mov [viewmode], 1
jmp update
no_se:
cmp ah,42 ;Sort by size
jne no_ss
mov [viewmode], 2
jmp update
no_ss:
cmp ah,43 ;Sort by date
jne no_sd
mov [viewmode], 3
jmp update
no_sd:
;HELP MENU
cmp ah,50 ;Help?
je help_scr
cmp ah,51 ;Info?
je info_scr
cmp ah,1 ; test on exit button
je exit
jmp still
exit:
; //// Willow
; mov eax,58
; mov ebx,MRUfile
; mov dword[ebx+8],255
; inc dword[ebx]
; mcall
; //// Willow
mov eax,-1
mcall
draw_wd:
; call draw_window
; jmp still
mov [flick],1
jmp anti_flick
edit_prompt:
not [focus]
jmp red
help_scr:
mov esi,14
mov ebp,help_text
jmp screen
info_scr:
mov esi,6
mov ebp,info_text
jmp screen
screen:
cmp [browser], 1 ;it's browser?
jne dialogscr
mov eax,[procinfo.box.height]
sub eax,90
drawfbox 40,76,300,eax,0x00000000
mov eax,[procinfo.box.height]
sub eax,92
drawfbox 41,77,298,eax,0x00ffffff
mov edi,esi ;14
mov ebx,(41+26)*65536+(77+20)
mov ecx,cl_Black
mov edx,ebp ;help_text
jmp outlab
dialogscr:
mov eax,[procinfo.box.height]
sub eax,84
drawfbox 16,54,270,eax,0x00000000
mov eax,[procinfo.box.height]
sub eax,86
drawfbox 17,55,268,eax,0x00ffffff
mov edi,esi ;14
mov ebx,(17+10)*65536+(55+1)
mov ecx,cl_Black
mov edx,ebp ;help_text
outlab: ;out labels
mov eax,4
mov esi,40
helploo:
mcall
add ebx,11
add edx,40
dec edi
jnz helploo
setimg 48,84,logoinfimg
jmp still
getimgproc:
pushad
mov dword [edx],esi ;xs
mov dword [edx+4],edi ;ys
mov ebp,eax
mov eax,dword [ecx] ;getx size
push edx
push ecx
lea ecx,[eax+2*eax]
mul ebx
add eax,ebp ;x
mov edx,ecx
lea eax,[eax+2*eax] ;eax=offset on imsrc
mov ebp,esi ;xs
mov ebx,edi ;ys
pop edi
lea esi,[eax+8+edi]
pop edi
add edi,8
cld
cyc:
push esi
lea ecx, [ebp+ebp*2]
rep movsb
pop esi
add esi,edx
dec ebx
jne cyc
popad
ret
iglobal
;HELP TEXT
help_text:
;0123456789012345678901234567890123456789
db ' ~~~~~ SYSTEM X-TREE ~~~~~ '
db ' HELP '
db ' '
db ' '
db 'F2 - CHANGE SORTMODE (name,ext,size,dat)'
db 'F3 - VIEW file in tinypad '
db 'F5 - COPY FILE to clipboard '
db 'F6 - PASTE FILE from clipboard '
db 'F11- EDIT PROMPT string '
db 'F12- UPDATE directory sources '
db ' '
db 'Enter - input to directory '
db 'Backspace - back to previos directory '
db 'PageDn/PageUp, Up/Down - move cursor '
info_text:
db ' ~~~~~ SYSTEM X-TREE ~~~~~ '
db ' INFO 84 Ver '
db ' '
db ' Create by Pavlushin Evgeni '
db 'with ASCL library special for Kolibri OS'
db ' www.deck4.narod.ru waptap@mail.ru '
endg
; *********************************************
; ******* WINDOW DEFINITIONS AND DRAW ********
; ******** FILE BROWSER / DIALOG *********
;draw_browser_window:
draw_window:
; mov eax,9
; mov ebx,procinfo
; mov ecx,-1
; mcall
; mov eax,[procinfo.box.width]
; cmp eax,66
; jg temp12345
; ret
; temp12345:
mcall 48, 3, sc, sizeof.system_colors
mov eax,[sc.work_button]
mov [b_color],eax
mcall 12, 1
;Window
xor eax,eax ; function 0 : define and draw window
cmp [browser], 1 ;it's browser
jne nob1
mov ebx,140*65536+400 ; [x start] *65536 + [x size]
mov ecx,160*65536+280 ; [y start] *65536 + [y size]
jmp isb1
nob1:
mov ebx,140*65536+320 ; [x start] *65536 + [x size]
mov ecx,260*65536+240 ; [y start] *65536 + [y size]
isb1:
; mov edx,[sc.work] ; color of work area RRGGBB
or edx,0x13ffffff
mcall
mcall 12, 2 ; end of window redraw
;Get proc info
mov eax,9
mov ebx,procinfo
mov ecx,-1
mcall
mov eax,[procinfo.box.width]
cmp eax,66
jg @f
.ret:
ret
@@:
cmp [procinfo.box.height], 0x70
jl .ret
cmp [browser], 1 ;it's browser
jne nob9
mov [listx],120
; mov eax,[procinfo.box.width]
sub eax,127;[listx]+7
cmp eax,10
jl .ret
mov [listxsize],eax
mov [listy],73
mov eax,[procinfo.box.height]
sub eax,73+7;[listy]+7
mov [listysize],eax
jmp isb9
nob9:
mov [listx],10
; mov eax,[procinfo.box.width]
sub eax,17 ;[listx]+7
mov [listxsize],eax
mov [listy],54
mov eax,[procinfo.box.height]
sub eax,54+34;[listy]+34
mov [listysize],eax
isb9:
;Draw only browser components
cmp [browser], 1 ;it's browser
jne nob2
mov eax,[sc.grab_text] ; color of text RRGGBB
or eax,0x10000000
mcall 71,1,title_browser
;Draw buttons headers
mov eax,8
mov ebx,8*65536+(6*8-1) ;start pos x
mov ecx,23*65536+10 ;start pos y
mov edx,22;+1000000000000000000000000000000b ;spoke butt
mov edi,3 ;draw 13 button's
mov esi,0x00339933
mcall
dec edi
nexthbut:
add ebx,(6*8)*65536
inc edx
mcall
dec edi
jnz nexthbut
;File STRING
glabel 8,25,' FILE VIEW INFO ', cl_White ;Black
;BlackLine
mov eax,[procinfo.box.width]
sub eax,10
drawfbox 5,35, eax, 1, cl_Black
;BlackLine2
mov eax,[procinfo.box.width]
sub eax,10
drawfbox 5,68, eax, 1, cl_Black
;BlackLine2 vertical
; mov eax,[procinfo.box.height]
; sub eax,69+4
; drawfbox 115, 69, 1, eax, cl_Black
;Set logo img
setimg 34,88,logoinfimg
glabel 20,165,'SYSTEM X-TREE',cl_Black
add ebx,10
glabel ,,'FOR KolibriOS',
add ebx,9*65536+20
glabel ,,'welcome to',cl_Green
add ebx,-15*65536+10
glabel ,,'www.kolibrios.org',cl_Green
;Draw head->file buttons
cmp [drawhf],1
jne no_drawhf
mov ebx,8*65536+6*12 ;start pos x
mov ecx,35*65536+10 ;start pos y
mov edx,30 ;spoke butt
mov edi,8 ;draw 4 button's
mov esi,cl_Grey
call menubutton
no_drawhf:
;Draw head->view buttons
cmp [drawhv],1
jne no_drawhv
mov ebx,(8+6*8)*65536+6*12 ;start pos x
mov ecx,35*65536+10 ;start pos y
mov edx,40 ;spoke butt
mov edi,4 ;draw 4 button's
mov esi,cl_Grey
call menubutton
no_drawhv:
;Draw head->info buttons
cmp [drawhi],1
jne no_drawhi
mov ebx,(8+12*8)*65536+6*12 ;start pos x
mov ecx,35*65536+10 ;start pos y
mov edx,50 ;spoke butt
mov edi,2 ;draw 2 button's
mov esi,cl_Grey
call menubutton
no_drawhi:
nob2:
;Draw buttons instruments
mov eax,8
cmp [browser], 1 ;it's browser
jne nob3
mov ebx,10*65536+16+5 ;start pos x
mov ecx,37*65536+15 ;start pos y
jmp isb3
nob3:
mov ebx,16*65536+16+5 ;start pos x
mov ecx,29*65536+15 ;start pos y
isb3:
mov edx,8;+1000000000000000000000000000000b ;spoke butt
mov edi,13 ;draw 13 button's
mov esi,cl_Grey
mcall
dec edi
nextbut:
add ebx,(16+6)*65536
inc edx
mcall
dec edi
jnz nextbut
cmp [browser], 1 ;it's browser
jne nob4
;But img browser
setimg 10,37,butimg
;left logo
add eax,[procinfo.box.width]
sub eax,80
mov [temp],eax
setimg [temp],37,logoimg
jmp isb4
nob4:
;But img dialog
setimg 16,29,butimg
isb4:
cmp [browser], 1 ;it's browser
jne nob5
mov [urlx],48
mov [urly],55
mov eax,[procinfo.box.width]
sub eax,48+10
mov [urlxsize],eax
mov [urlysize],12
glabel 20,57,"URL:",cl_Black
;Out view mode info
movzx edx, [viewmode]
shl edx, 4
mov eax,4
mov ebx,180*65536+25
mov ecx,cl_Black
add edx,modetext
mov esi,16
mcall
;List size
outcount [listsize],294,25,cl_Black,4*65536
jmp isb5
iglobal
but_dlg: db 'OPEN'
db 'SAVE'
endg
nob5:
mov [urlx],10
mov eax,[procinfo.box.height]
sub eax,24
mov [urly],eax
mov eax,[procinfo.box.width]
sub eax,80
mov [urlxsize],eax
mov [urlysize],12
cmp byte [dlg_type],'O' ;if byte O - is Open dialog
jne no_openh
mcall 71,1,open_dlg ;draw in head OPEN FILE
jmp no_saveh
no_openh:
cmp byte [dlg_type],'S' ;if byte S - is Save dialog
jne no_saveh
mcall 71,1,save_dlg ;draw in head SAVE FILE
no_saveh:
;Draw OPEN\SAVE button
mov ebx,0*65536+50
mov ecx,0*65536+12
mov eax,[procinfo.box.width]
sub eax,63
shl eax,16
add ebx,eax
mov eax,[procinfo.box.height]
sub eax,25
shl eax,16
add ecx,eax
mov eax,8
mov edx,5 ;button ID
mov esi,0x006699aa ;gradient!!!
mcall
; label OPEN or SAVE
mov ebx,[procinfo.box.width]
sub ebx,48
mov eax,[procinfo.box.height]
sub eax,22
shl ebx,16
add ebx,eax
cmp byte [dlg_type],'O' ;if byte O - is Open dialog
jne no_openb
mov edx,but_dlg ;draw in head OPEN FILE
jmp out_labx
no_openb:
cmp byte [dlg_type],'S' ;if byte S - is Save dialog
jne no_saveb
mov edx,but_dlg+4 ;draw in head SAVE FILE
out_labx:
mov ecx,cl_White
mov esi,4
mov eax,4
mcall
no_saveb:
isb5:
anti_flick:
cmp [flick],2
je draw_url
cmp [flick],0
jne no_flick_url
;***************************
; DRAW URL LINE
;***************************
draw_url:
;Draw URL focus button
mov ebx,[urlx]
shl ebx,16
add ebx,[urlxsize]
mov ecx,[urly]
shl ecx,16
add ecx,[urlysize]
dec ebx
dec ecx
mov eax,8
mov edx,2 ;button ID
mov esi,0x00aaaaaa ;gradient!!!
mcall
;Draw URL String
mov eax,13
mov edx,cl_Black
mcall
add ebx,1*65536-2+1
add ecx,1*65536-2+1
mov edx,cl_White
mcall
;Draw URL Cursor
mov eax,6
mul [cursor]
mov ebx,[urlx]
add ebx,eax
shl ebx,16
add ebx,2*65536+1
mov ecx,[urly]
shl ecx,16
add ecx,[urlysize]
add ecx,2*65536-4
mov eax,13
mov edx,cl_Black
mcall
; OUT TEXT
mov eax,[urlxsize] ;calculating text leight
sub eax,8
mov ebx,6
div ebx
mov esi,eax
mov ebx,[urlx]
shl ebx,16
add ebx,[urly]
add ebx,3*65536+2
mov eax,4 ; function 4 : write text to window
mov ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
mov edx,path ; pointer to text beginning
mcall
cmp [flick],2
jne no_flick_url
mov [flick],0
jmp still
no_flick_url:
;***************************
; DRAW FILE LIST
;***************************
;Draw Scroll Line
mov eax,13
mov ebx,[listx]
add ebx,[listxsize]
sub ebx,[scrollsize]
shl ebx,16
add ebx,dword [scrollsize]
mov ecx,[listy]
add ecx,scrollbutsize
shl ecx,16
add ecx,[listysize]
sub ecx,scrollbutsize*2
mov edx,[scrollcolor] ;0x00006600
mcall
;Draw Scroll Box
mov edx,0
mov eax,[listysize]
sub eax,2
mov ebx,dword 10
div ebx
mov ebx,eax
cmp ebx,[listsize] ;filelistsize in ebx
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 [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]
@@:
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
notusescroll:
;Draw list button for get file name
mov ebx,[listx]
shl ebx,16
add ebx,[listxsize]
sub ebx,15 ;right free zone
sub ebx,[scrollsize]
mov ecx,[listy]
shl ecx,16
add ecx,[listysize]
mov eax,8
mov edx,4+0x60000000
mcall
add ebx,15
mov eax,13
sub ebx,[scrollsize] ;leency
mov edx,[listcolor] ;ffffff
mcall
;Draw up/down buttons
mov ebx,[listx]
add ebx,[listxsize]
sub ebx,[scrollsize]
shl ebx,16
add ebx,[scrollsize]
mov ecx,[listy]
shl ecx,16
add ecx,scrollbutsize-1
mov eax,8
mov edx,6+1000000000000000000000000000000b ;spoke butt
mcall
inc ecx
mov eax,13
mov edx,[scrollbutcol]
mcall
; Draw image on up button
pushad
shr ebx,16
mov edx,ebx
shl edx,16
shr ecx,16
add edx,ecx
mov ecx,8*65536+9
mov ebx,upsb+8
mov eax,7
mcall
popad
dec ecx ;correction
mov edx,7+1000000000000000000000000000000b ;spoke butt
mov eax,[listysize]
sub eax,scrollbutsize
shl eax,16
add ecx,eax
mov eax,8
mcall
inc ecx
mov eax,13
mov edx,[scrollbutcol] ;ffffff
mcall
; Draw image on down button
pushad
shr ebx,16
mov edx,ebx
shl edx,16
shr ecx,16
add edx,ecx
mov ecx,8*65536+9
mov ebx,dnsb+8
mov eax,7
mcall
popad
; Draw text in file list
; mov eax,[listxsize]
; sub eax,40*6 ;leight of string
; shr eax,1
; add eax,[listx]
mov eax, [listx]
add eax, 12+4 ; for icons
shl eax,16
add eax,[listy]
add eax,2
mov [filelistxy],eax ;dword 19*65536+58
mov edx,0
mov eax,[listysize]
sub eax,2
mov ebx,dword 10
div ebx
mov [filelistsize],eax ;dword 40
; OUT FILE DATA
mov eax,[filecursor] ;calc cursor position
mov ebx,27
mul ebx
;OUT TEXT
mov ebp,4096 ; 16 ;out strings process
sub ebp,[filecursor]
mov edx,convinfo ;fileinfo+11
add edx,eax
mov ebx,dword [filelistxy]
loo:
cmp dword [edx], -1
jz noout
mov ecx,0x00888888 ;for another file's color white
cmp [edx+15],dword 'FOL ' ;folder yellow
jne nb
mov ecx,0x00006666
jmp cset1
nb:
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
@@:
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
; 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
; execute's green
mov ecx, 0x00008866
test edi, edi
jz cset
; for another file's color white
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
@@:
cmp byte [edx+esi], 0
jz @f
inc esi
cmp esi, eax
jbe @b
dec esi
@@:
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
@@:
pop eax
pop edx
push ebx edx
inc eax
imul eax, 6*65536
add ebx, eax
add edx,4
mov esi,23
mov eax,4
mcall
pop edx ebx
pushad
cmp [edx+15],dword 'Fvol' ;volume label
jne no_volico
push hdico+8
jmp out_ico
no_volico:
cmp [edx+15],dword 'FOL '
jne no_folico
cmp [edx+4],dword 'HARD'
jne no_hdico
push hdico+8
jmp out_ico
no_hdico:
cmp [edx+4],dword 'RAMD'
jne no_rdico
push rdico+8
jmp out_ico
no_rdico:
cmp [edx+4],dword 'FLOP'
jne no_fdico
push rdico+8
jmp out_ico
no_fdico:
cmp [edx+4],dword 'CD-R'
jne no_cdico
push cdico+8
jmp out_ico
no_cdico:
push folico+8
jmp out_ico
no_folico:
cmp edi,dword 'BMP'
je is_imgico
cmp edi,dword 'JPG'
je is_imgico
cmp edi,dword 'JPEG'
je is_imgico
cmp edi,dword 'GIF'
je is_imgico
cmp edi,dword 'PNG'
je is_imgico
cmp edi,dword 'ICO'
je is_imgico
cmp edi,dword 'WAV'
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
jmp out_ico
no_imgico:
cmp edi,dword 'ASM'
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
jmp out_ico
no_asmincico:
cmp edi,dword 'RTF'
je @f
cmp edi,dword 'TXT'
jne no_txtico
cmp edi,dword 'LOG'
jne no_txtico
@@:
push txtico+8
jmp out_ico
no_txtico:
test edi,edi
jne no_execico
push execico+8
jmp out_ico
no_execico:
cmp [edx+15],dword 'DAT '
jne no_datico
push datico+8
jmp out_ico
no_datico:
cmp [edx+15],dword 'DEL '
jne no_out_ico
push delico+8
jmp out_ico
out_ico:
mov edx,ebx
sub edx,14*65536+1
mov ecx,12*65536+9
; mov ebx,upsb+8
pop ebx
mov eax,7
mcall
no_out_ico:
popad
add ebx,10
noout:
add edx,27
dec [filelistsize]
jz extloo
dec ebp
jnz loo
dext:
mov [downstop],1
extloo:
cmp [browser], 1 ;it's browser
jne nob8
;Draw text for head->file buttons
cmp [drawhf],1
jne no_drawhftext
drawfbox 8,35,(6*12)+1,11*8,0x00000000
drawfbox 9,36,(6*12)-1,(11*8)-2,0x00ffffff
mov edi,8
mov ebx,9*65536+37
mov ecx,cl_Black
mov edx,file_text_label
call drawmenu
iglobal
file_text_label:
db ' Open '
db ' Copy '
db ' Paste '
db ' Delete '
db ' Tinypad '
db ' Edit '
db ' '
db ' Exit '
endg
no_drawhftext:
;Draw text for head->view buttons
cmp [drawhv],1
jne no_drawhvtext
drawfbox (8+6*8),35,(6*12)+1,(11*4),0x00000000
drawfbox (9+6*8),36,(6*12)-1,(11*4)-2,0x00ffffff
mov edi,4
mov ebx,(9+6*8)*65536+37
mov ecx,cl_Black
mov edx,view_text_label
call drawmenu
iglobal
view_text_label:
db ' Name sort '
db ' Ext. sort '
db ' Size sort '
db ' Date sort '
endg
no_drawhvtext:
;Draw text for head->info buttons
cmp [drawhi],1
jne no_drawhitext
drawfbox (8+12*8),35,(6*12)+1,(11*2),0x00000000
drawfbox (9+12*8),36,(6*12)-1,(11*2)-2,0x00ffffff
mov edi,2
mov eax,4
mov ebx,(9+12*8)*65536+37
mov ecx,cl_Black
mov edx,info_text_label
call drawmenu
iglobal
info_text_label:
db ' Help '
db ' About '
endg
no_drawhitext:
nob8:
cmp [flick],1
jne no_flick
mov [flick],0
jmp still
no_flick:
ret
;FILE LIST PARAMETRS
iglobal
listx dd 15
listy dd 72
listxsize dd 350
listysize dd 41
filelistxy dd 0
filelistsize dd 0
scrollsize dd 8
listcolor dd 0xffffff ;0xeeeeee
scrollcolor dd 0x778877
scrollboxcol dd 0x335533
scrollbutcol dd 0x224422
scrollbutsize = 9
;URL LINE PARAMETRS
urlx dd 10
urly dd 20
urlxsize dd 350
urlysize dd 12
endg
drawmenu:
mov eax,4
mov esi,12
menuloo:
mcall
add ebx,11
add edx,12
dec edi
jnz menuloo
ret
menubutton:
mov eax,8
nextmenubut:
mcall
add ecx,11*65536
inc edx
dec edi
jnz nextmenubut
ret
;*****************************
; READ FILE STRUCTURE PROC
;*****************************
read_directory:
;STEP 1 CLEAR CONVINFO
mov edi,convinfo
mov al,255
mov ecx,4096*27
cld
push edi
rep stosb
pop edi
;STEP 2 TEST ON HD OR PARTITION
cmp [path],byte '/'
je nstep
; copy info on RD and FD
mov esi, hdimg
mov ecx, 2*27
rep movsb
; hard disks
mov eax, 4
.1:
mov ecx, 27
cmp dword [esi], 0
jz .2
rep movsb
jmp .3
.2:
add esi, ecx
.3:
dec eax
jnz .1
mov [listsize], 0
ret
nstep:
cmp [path+3],byte '/'
je nstep2
cmp [path+4],byte '/'
je nstep2
mov ecx,1
cmp [path+1],word 'RD'
jz loxpt
cmp [path+1],word 'CD'
jz loxpt
mov ecx,2
cmp [path+1],word 'FD'
jz loxpt
cmp [path+1],dword 'HD0'
jne nostep_HD0
movzx ecx,byte [table_area+2]
jmp loxpt
nostep_HD0:
cmp [path+1],dword 'HD1'
jne nostep_HD1
movzx ecx,byte [table_area+3]
jmp loxpt
nostep_HD1:
cmp [path+1],dword 'HD2'
jne nostep_HD2
movzx ecx,byte [table_area+4]
jmp loxpt
nostep_HD2:
cmp [path+1],dword 'HD3'
jne nostep_HD3
movzx ecx,byte [table_area+5]
jmp loxpt
nostep_HD3:
mov ecx,2
loxpt:
cmp ecx, 20
jbe @f
mov ecx, 20
@@:
mov eax, a1
mov esi, ptimg
@@:
stosd
add eax, 3
push ecx esi
mov ecx, 23
rep movsb
pop esi ecx
loop @b
mov [listsize],0
ret
nstep2:
;STEP 3 was deleted
;STEP 4 READ DATA FROM HD
loorhd:
mov eax,70
mov ebx,fileinfoblock
mcall
cmp eax,6
je end_of_dir
; It's erorr's test is poor code
cmp eax,1
jne no_inv_part
glabel 10,10,'Invalid partition or hd base',cl_Red+font_Big
jmp end_of_dir
no_inv_part:
cmp eax,3
jne no_unk_fs
glabel 10,10,'Unknown file system',cl_Red+font_Big
jmp end_of_dir
no_unk_fs:
end_of_dir:
; -1 -> 0
cmp ebx, -1
sbb ebx, -1
mov [dirlen],ebx
; command successful
mov esi, outinfo+32
and [listsize], 0
test ebx, ebx
jz nofiles
newlineb:
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 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
novol:
mov [edi+15], eax
; size
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
zernum:
pop esi
nosize:
; date
mov dword [edi+6], '. .'
; year
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
; 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
; 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
;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
@@:
; STEP 6 SORT ALGORYTHM
push esi
xor esi, esi
; At first Fold after Dat
ftestname:
cmp dword [convinfo+esi], -1
jz writefile
cmp byte [fileinfo+15],'F'
je F
cmp byte [fileinfo+15],'D'
jne add_element
D: cmp byte [convinfo+esi+15],'D'
je add_element
cmp byte [convinfo+esi+15],'F'
je skipfile
jmp add_element
F: cmp byte [convinfo+esi+15],'D'
je writenow
; cmp byte [convinfo+esi+15],'F'
; je add_element
; jmp add_element
add_element:
; compare items
movzx eax, [viewmode]
call [compare+eax*4]
jb writenow
skipfile:
add esi,27
jmp ftestname
writenow:
mov ecx,4096*27-1
sub ecx,esi
ldloop:
mov al,[convinfo+ecx+esi]
mov [convinfo+ecx+esi+27],al
dec ecx
jns ldloop
writefile:
mov ecx,26
wfloop:
mov al,[fileinfo+ecx]
mov [convinfo+ecx+esi],al
dec ecx
jns wfloop
inc [listsize]
pop esi
nextfl:
add esi, 304
pop ebx
dec ebx
jnz newlineb
nofiles:
ret
toupper:
cmp al, 'a'
jb .ret
cmp al, 'z'
ja @f
.sub20:
sub al, 0x20
.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, 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
.ret:
popad
ret
compare_name:
pushad
.1:
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
compare_size:
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
@@:
ret
find_ext:
lodsb
test al, al
jz .noext
cmp al, '.'
jnz find_ext
ret
.noext:
dec esi
ret
;******************************************************************************
title_browser db 'SYSTEM X-TREE FILE BROWSER',0
open_dlg db 'OPEN FILE',0
save_dlg db 'SAVE FILE',0
; DATA AREA
pmenu_draw dd 0 ;if poup menu is draw,update all window
flick dd 0 ;anti flick on ?
drawhf dd 0 ;draw file menu?
drawhv dd 0 ;draw view menu?
drawhi dd 0 ;draw info menu?
cursor dd 0 ;cursor in prompt line
focus dd 0 ;prompt edit or window?
downstop dd 0
filecursor dd 0
mousex dd 0
mousey dd 0
blocksread dd 0
listsize dd 0 ;num of files in directory
temp dd 0
readblock dd 1
dlg_type db 0 ;S-save O-open
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
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 '
modetext:
;0123456789012345
db 'SORT BY NAME 0'
db 'SORT BY EXT. 1'
db 'SORT BY SIZE 2' ;type sort
db 'SORT BY DATE 3'
db 'DEL SORT NAME 4'
db 'DEL SORT EXT. 5'
db 'DEL SORT SIZE 6' ;type sort
db 'DEL SORT DATE 7'
dirlen dd 0x1
b_color dd 0x6677cc
; //// Willow
;MRUfile:
; dd 0x0
; dd 0x0
; dd 0x1
; dd path
; dd tempzone
; db '/RD/1/MRU.LST',0
; //// Willow
;Name of programs
editor db '/sys/tinypad',0
kiv db '/sys/media/kiv',0
ac97 db '/sys/media/ac97snd',0
midamp db '/sys/media/midamp',0
htmlv db '/sys/network/htmlv',0
rtfread db '/sys/rtfread',0
view3ds db '/sys/3d/view3ds',0
life2 db '/sys/demos/life2',0
more_char db 10h
IncludeIGlobals
fileinfo_start:
dd 7
dd 0
fileinfo_params:
dd 0
dd 0
dd 0
db 0
fileinfo_name:
dd 0
clipfile_info:
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
fileinfoblock:
dd 0x1 ; read folder
dd 0x0 ; first block
dd 0x0 ; flags (ANSI names)
dd 4095 ; number of blocks to read
dd outinfo ; ret offset
path:
times 1024 db 0 ;path
table_area:
rb 10
;rb 256
but_file:
file 'systr12.GIF'
I_END:
scroll_height dd ?
scroll_pos dd ?
butimg:
rb 400*16*3+8 ;buttons (left pice of picture)
logoimg:
rb 70*16*3+8 ;logo (right pice of picture)
logoinfimg:
rb 60*60*3+8 ;logoinfo (right pice of picture)
upsb:
rb 8*9*3+8 ;up scroll button
dnsb:
rb 8*9*3+8 ;down scroll button
;ICONS RESERVE AREA
hdico:
rb 12*9*3+8
rdico:
rb 12*9*3+8
folico:
rb 12*9*3+8
datico:
rb 12*9*3+8
delico:
rb 12*9*3+8
imgico:
rb 12*9*3+8
txtico:
rb 12*9*3+8
asmincico:
rb 12*9*3+8
execico:
rb 12*9*3+8
cdico:
rb 12*9*3+8
tempimg: ;reserve ram for images
rb 400*100*3+8 ;for picture
rb 8000
MYPID:
rd 8
param_area:
rb 256
paramtest:
rb 1024
filedir:
rb 1024
IncludeUGlobals
procinfo process_information
sc system_colors
fileinfo:
rb 200 ;4096*62+1024
copyr_param rb 256
outinfo:
rb 32+4096*304
convinfo:
rb 4096*27
; stack
align 4
rb 1024
RAM_END: