forked from KolibriOS/kolibrios
16091ddd9e
@panel: to match K0581 distro: SYSMETER -> GMON @numcalc: moved to the appropriate place in repository HeEd: added english variant NetSendC, NetSendS: added english variant + optimization pic4: changes in set background + optimization tetris, @rcher, board, sysxtree, vrr: new versions from K0581 distro bgitest: fixed small error + ability to set language via lang.inc c4: small correction in label height to match K0581 distro git-svn-id: svn://kolibrios.org@131 a494cfbc-eb01-0410-851d-a64ba20cac60
2886 lines
53 KiB
NASM
2886 lines
53 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
|
|
;600000 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'
|
|
|
|
gif_hash_offset = gif_hash
|
|
|
|
START: ; start of execution
|
|
; //// Willow
|
|
; mov eax,58
|
|
; mov ebx,MRUfile
|
|
; int 0x40
|
|
; //// Willow
|
|
mcall 18,11,1,table_area
|
|
mov edi,hdimg+62*2
|
|
cmp [table_area+2],byte 0
|
|
je no_hdpartition_on_hd0
|
|
mov esi,hdimg1
|
|
mov ecx,62
|
|
rep movsb
|
|
no_hdpartition_on_hd0:
|
|
cmp [table_area+3],byte 0
|
|
je no_hdpartition_on_hd1
|
|
mov esi,hdimg2
|
|
mov ecx,62
|
|
rep movsb
|
|
no_hdpartition_on_hd1:
|
|
cmp [table_area+4],byte 0
|
|
je no_hdpartition_on_hd2
|
|
mov esi,hdimg3
|
|
mov ecx,62
|
|
rep movsb
|
|
no_hdpartition_on_hd2:
|
|
cmp [table_area+5],byte 0
|
|
je no_hdpartition_on_hd3
|
|
mov esi,hdimg4
|
|
mov ecx,62
|
|
rep movsb
|
|
no_hdpartition_on_hd3:
|
|
|
|
mov eax,40
|
|
mov ebx,0100111b
|
|
int 0x40
|
|
|
|
cmp byte [param_area],0 ;test parameters line
|
|
jne no_brow ;it's dialog
|
|
mov [browser],dword 1 ;it's browser
|
|
no_brow:
|
|
|
|
cmp [browser],dword 1
|
|
je no_dlg
|
|
|
|
mov al,byte [param_area+5]
|
|
mov [dlg_type],al
|
|
|
|
mov eax,9
|
|
mov ebx,procinfo
|
|
mov ecx,-1
|
|
int 0x40
|
|
|
|
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
|
|
int 0x40
|
|
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,9
|
|
loogetimg:
|
|
call getimgproc
|
|
add edx,9*12*3+8
|
|
add eax,12
|
|
dec ebp
|
|
jnz loogetimg
|
|
jmp endgip
|
|
|
|
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 ecx,esi ;xs
|
|
mov ebx,edi ;ys
|
|
|
|
mov ebp,esi
|
|
|
|
pop edi
|
|
lea esi,[eax+8+edi]
|
|
|
|
pop edi
|
|
add edi,8
|
|
|
|
cld
|
|
cyc:
|
|
movsw
|
|
movsb
|
|
dec ecx
|
|
jne cyc
|
|
add esi,edx
|
|
mov ecx,ebp ;xs
|
|
sub esi,ecx
|
|
sub esi,ecx
|
|
sub esi,ecx
|
|
dec ebx
|
|
jne cyc
|
|
|
|
popad
|
|
ret
|
|
|
|
endgip:
|
|
|
|
call read_directory
|
|
; call convertation
|
|
red:
|
|
call draw_window ; at first, draw the window
|
|
|
|
still:
|
|
mov eax,9
|
|
mov ebx,procinfo
|
|
mov ecx,-1
|
|
int 0x40
|
|
|
|
wtevent red,key,button
|
|
|
|
scrolltest:
|
|
mov eax,37
|
|
mov ebx,2
|
|
int 0x40
|
|
cmp eax,1
|
|
jne still
|
|
|
|
scrl:
|
|
mov eax,37
|
|
mov ebx,1
|
|
int 0x40
|
|
mov ebx,eax
|
|
shr eax,16 ;x
|
|
and ebx,0xffff ;y
|
|
|
|
mov ebp,eax
|
|
sub ebp,[listx] ;[procinfo.x_size]
|
|
sub ebp,[listxsize]
|
|
add ebp,[scrollsize]
|
|
cmp ebp,dword [scrollsize] ;8
|
|
ja menu_test ; still
|
|
|
|
mov ebp,ebx
|
|
sub ebp,[listy] ;76 ;up scroll
|
|
sub ebp,[scrollbutsize]
|
|
cmp ebp,0
|
|
jl menu_test
|
|
mov [mousey],ebp
|
|
|
|
push eax ebx edx
|
|
mov edx,0
|
|
mov eax,[listysize]
|
|
sub eax,2
|
|
mov ebx,dword 10
|
|
div ebx
|
|
|
|
mov [filelistsize],eax
|
|
mov ebx,eax
|
|
cmp ebx,[listsize] ;filelistsize in ebx
|
|
ja notusescrl
|
|
|
|
mov edx,0
|
|
mov eax,[listysize]
|
|
sub eax,[scrollbutsize]
|
|
sub eax,[scrollbutsize]
|
|
|
|
shl eax,16+6
|
|
div dword [listsize]
|
|
mul ebx
|
|
shr eax,16+6
|
|
|
|
mov ebp,eax ; in ebp ysize of scroll
|
|
|
|
mov edx,0
|
|
mov eax,[listsize]
|
|
|
|
mov ebx,[listysize]
|
|
sub ebx,[scrollbutsize]
|
|
sub ebx,[scrollbutsize]
|
|
shl eax,16
|
|
div ebx ;dword [listsize]
|
|
mul [mousey]
|
|
shr eax,16
|
|
|
|
mov ebx,[listsize]
|
|
sub ebx,[filelistsize]
|
|
cmp eax,ebx
|
|
jnae no_cor
|
|
mov eax,[listsize] ;correction for full dirs (1000 files)
|
|
sub eax,[filelistsize]
|
|
no_cor:
|
|
mov [filecursor],eax
|
|
|
|
jmp usescrl
|
|
notusescrl:
|
|
mov [filecursor],0 ;ebp
|
|
usescrl:
|
|
|
|
pop edx ebx eax
|
|
|
|
mov esi,[listy];[procinfo.y_size]
|
|
add esi,[listysize]
|
|
sub esi,[scrollbutsize]
|
|
|
|
cmp ebx,esi
|
|
jna oks ;menu_test ;still
|
|
|
|
sub esi,ebp
|
|
inc esi ;correction
|
|
cmp ebx,esi
|
|
ja menu_test ;still
|
|
oks:
|
|
|
|
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
|
|
int 0x40
|
|
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
|
|
jne no_k_ent
|
|
jmp kfad
|
|
no_k_ent:
|
|
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
|
|
dec [cursor]
|
|
mov [flick],2
|
|
jmp anti_flick ;red
|
|
no_con_left:
|
|
cmp ah,key_Right
|
|
jne no_con_right
|
|
inc [cursor]
|
|
mov [flick],2
|
|
jmp anti_flick ;red
|
|
no_con_right:
|
|
cmp ah,key_Bspace
|
|
jne no_con_bspace
|
|
|
|
mov ecx,[cursor]
|
|
cmp ecx,0
|
|
je still
|
|
dec ecx
|
|
mov ebp,[cursor]
|
|
lobsp:
|
|
mov bl,byte [path+ebp]
|
|
mov byte [path+ebp-1],bl
|
|
inc ebp
|
|
cmp ebp,100
|
|
jne lobsp
|
|
dec [cursor]
|
|
mov [flick],2
|
|
jmp anti_flick ;red
|
|
no_con_bspace:
|
|
|
|
mov ecx,[cursor]
|
|
dec ecx
|
|
mov ebp,100 ;[cursor]
|
|
losx:
|
|
mov bl,byte [path+ebp]
|
|
mov byte [path+ebp+1],bl
|
|
dec ebp
|
|
cmp ebp,ecx ;100
|
|
jne losx
|
|
|
|
mov ebp, [cursor]
|
|
cmp ebp,100
|
|
ja still
|
|
|
|
mov byte [path+ebp],ah
|
|
inc dword [cursor]
|
|
|
|
mov [flick],2
|
|
jmp anti_flick
|
|
|
|
|
|
;----------------------------
|
|
;Test on mouse button
|
|
;-----------------------------
|
|
|
|
button: ; button
|
|
mov eax,17
|
|
int 0x40
|
|
|
|
cmp ah,2 ;Edit prompt line?
|
|
je edit_prompt
|
|
|
|
cmp ah,4
|
|
jne no_filelist
|
|
|
|
mousetest:
|
|
mov eax,37
|
|
mov ebx,1
|
|
int 0x40
|
|
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,62
|
|
mul ebx
|
|
mov ebp,eax
|
|
|
|
mov edi,paramtest ;clear param string
|
|
mov ecx,256
|
|
mov al,0
|
|
rep stosb
|
|
|
|
|
|
mov esi,0
|
|
lll2:
|
|
mov al,byte [path+esi]
|
|
cmp al,byte 0 ;' '; '/'
|
|
je fis2
|
|
cmp al,byte ' '; '/'
|
|
je fis2
|
|
inc esi
|
|
cmp esi,100
|
|
jna lll2
|
|
jmp fis2
|
|
|
|
fis2:
|
|
mov edi,ebp
|
|
cmp [convinfo+edi+26],dword 'FOL '
|
|
jne openf
|
|
mov [path+esi],byte '/'
|
|
inc esi
|
|
mov ebp,8
|
|
|
|
los: ;directory extension bug fix
|
|
mov al,[convinfo+edi]
|
|
cmp al,' '
|
|
jz skip_name_space
|
|
mov [path+esi],al
|
|
inc esi
|
|
skip_name_space:
|
|
inc edi
|
|
dec ebp
|
|
jnz los
|
|
|
|
cmp byte [convinfo+edi],'.'
|
|
jnz dir_name_end
|
|
cmp byte [convinfo+edi+1],' '
|
|
jz dir_name_end
|
|
mov ebp,4
|
|
dir_ext_char:
|
|
mov al,[convinfo+edi]
|
|
cmp al,' '
|
|
jz dir_name_end
|
|
mov [path+esi],al
|
|
inc esi
|
|
inc edi
|
|
dec ebp
|
|
jnz dir_ext_char
|
|
dir_name_end:
|
|
mov [filecursor],0
|
|
|
|
;los:
|
|
; mov al,[convinfo+edi]
|
|
; mov [path+esi],al
|
|
; inc esi
|
|
; inc edi
|
|
; dec ebp
|
|
; jnz los
|
|
; mov [filecursor],0
|
|
; cmp byte [dlg_type],'S'
|
|
; je savetest
|
|
;no_save:
|
|
|
|
call read_directory
|
|
;; call convertation
|
|
call draw_window
|
|
; jmp still
|
|
|
|
;Savetest
|
|
savetest:
|
|
cmp byte [dlg_type],'S'
|
|
je savetest_yes
|
|
jmp still
|
|
savetest_yes:
|
|
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:
|
|
mov ecx,100
|
|
lopt:
|
|
mov al,[path+ecx]
|
|
mov [paramtest+ecx],al
|
|
dec ecx
|
|
jns lopt
|
|
|
|
; mov ebp,100
|
|
;loow:
|
|
; cmp [paramtest+ebp],byte '.'
|
|
; je file_set
|
|
; dec ebp
|
|
; jnz loow ;is file set not file add
|
|
|
|
cmp dword [focus],0 ;if prompt line with focus no add file name from frame
|
|
jne file_set
|
|
|
|
mov [paramtest+esi],byte '/'
|
|
inc esi
|
|
mov ebp,8+4
|
|
mov edx,edi
|
|
losf:
|
|
mov al,[convinfo+edi]
|
|
mov [paramtest+esi],al
|
|
inc esi
|
|
inc edi
|
|
dec ebp
|
|
jnz losf
|
|
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,100
|
|
int 0x40
|
|
|
|
jmp exit
|
|
|
|
is_brow:
|
|
|
|
; cmp [convinfo+edi+26],dword 'Fvol'
|
|
; je edit
|
|
|
|
mov eax,dword [convinfo+edx+8]
|
|
cmp eax,'. '
|
|
jne noexecute
|
|
mov ebx,0
|
|
jmp execute
|
|
noexecute:
|
|
|
|
cmp eax,'.JPG'
|
|
jne nojv
|
|
jpg_jpe:
|
|
mov ebx,jpgview
|
|
jmp run
|
|
nojv:
|
|
cmp eax,'.JPE'
|
|
je jpg_jpe
|
|
cmp eax,'.GIF'
|
|
jne nojv1
|
|
mov ebx,gifview
|
|
jmp run
|
|
nojv1:
|
|
cmp eax,'.WAV'
|
|
jne nojv12
|
|
mov ebx,ac97wav
|
|
jmp run
|
|
nojv12:
|
|
cmp eax,'.MID'
|
|
jne nojv13
|
|
mov ebx,midamp
|
|
jmp run
|
|
nojv13:
|
|
cmp eax,'.BMP'
|
|
jne nobv
|
|
mov ebx,bmpview
|
|
jmp run
|
|
nobv:
|
|
; //// Willow
|
|
cmp eax,'.PNG'
|
|
jne nopngv
|
|
mov ebx,pngview
|
|
jmp run
|
|
nopngv:
|
|
; //// Willow
|
|
cmp eax,'.RTF'
|
|
jne nortf
|
|
mov ebx,rtfread
|
|
jmp run
|
|
nortf:
|
|
cmp eax,'.ASM'
|
|
je edit
|
|
cmp eax,'.TXT'
|
|
je edit
|
|
cmp eax,'.INC'
|
|
je edit
|
|
jmp still
|
|
edit:
|
|
mov ebx,editor
|
|
jmp run
|
|
|
|
execute:
|
|
mov ecx,0 ;200
|
|
loexe:
|
|
mov al,[paramtest+ecx]
|
|
; cmp al,0
|
|
; je setzr
|
|
; cmp al,' '
|
|
; je setzr
|
|
; je badl
|
|
cmp al,'.'
|
|
je setzr
|
|
; je badl
|
|
; jmp okl
|
|
;badl:
|
|
; mov al,0
|
|
okl:
|
|
mov [open_path+ecx],al
|
|
inc ecx
|
|
cmp ecx,200
|
|
jnae loexe
|
|
|
|
setzr:
|
|
; add ecx,3
|
|
; mov al,0
|
|
mov [open_path+ecx],byte 0 ;al
|
|
|
|
mov eax,58
|
|
mov ebx,fileinfo_start
|
|
int 0x40
|
|
|
|
jmp still
|
|
|
|
run:
|
|
mov ecx,paramtest
|
|
mov eax,19
|
|
int 0x40
|
|
jmp still
|
|
|
|
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 esi,0
|
|
xlll2:
|
|
mov al,byte [path+esi]
|
|
cmp al,byte '/'
|
|
jne xfis2
|
|
inc esi
|
|
cmp esi,12*20
|
|
jnae xlll2
|
|
jmp still
|
|
xfis2:
|
|
mov al,byte [path+esi]
|
|
cmp al,byte ' '
|
|
je xaa2
|
|
inc esi
|
|
cmp esi,12*20
|
|
jnae xfis2
|
|
jmp still
|
|
xaa2:
|
|
mov eax,[filecursor]
|
|
mov ebx,62
|
|
mul ebx
|
|
mov edi,eax
|
|
cmp [convinfo+edi+26],dword 'FOL '
|
|
je still
|
|
mov ecx,12*20
|
|
xlopt:
|
|
mov al,[path+ecx]
|
|
mov [paramtest+ecx],al
|
|
dec ecx
|
|
jns xlopt
|
|
mov [paramtest+esi],byte '/'
|
|
inc esi
|
|
mov ebp,8+4
|
|
mov edx,edi
|
|
xlosf:
|
|
mov al,[convinfo+edi]
|
|
mov [paramtest+esi],al
|
|
inc esi
|
|
inc edi
|
|
dec ebp
|
|
jnz xlosf
|
|
mov [paramtest+esi],byte 0
|
|
mov ebx,editor
|
|
mov ecx,paramtest
|
|
mov eax,19
|
|
int 0x40
|
|
jmp red ;still
|
|
|
|
no_textopen:
|
|
|
|
cmp ah,11
|
|
jne no_view
|
|
viewset:
|
|
; not dword [delflag]
|
|
inc dword [viewmode]
|
|
cmp dword [viewmode],8
|
|
jnae not_cm
|
|
mov [viewmode],0
|
|
not_cm:
|
|
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 esi,12*20
|
|
lll:
|
|
mov al,byte [path+esi]
|
|
cmp al,byte ' '
|
|
jne findsl
|
|
dec esi
|
|
jnz lll
|
|
jmp still
|
|
findsl:
|
|
dec esi
|
|
fis:
|
|
mov al,byte [path+esi]
|
|
cmp al,byte '/'
|
|
je aa
|
|
mov [path+esi],byte 0 ;' '
|
|
dec esi
|
|
jnz fis
|
|
aa:
|
|
mov [path+esi],byte 0 ;' '
|
|
|
|
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 ebx,param_area ;clipfilp
|
|
mov eax,32
|
|
int 0x40
|
|
mov esi,0
|
|
wlll2:
|
|
mov al,byte [path+esi]
|
|
cmp al,byte '/'
|
|
jne wfis2
|
|
inc esi
|
|
cmp esi,12*20
|
|
jnae wlll2
|
|
jmp still
|
|
wfis2:
|
|
mov al,byte [path+esi]
|
|
cmp al,byte ' '
|
|
je waa2
|
|
inc esi
|
|
cmp esi,12*20
|
|
jnae wfis2
|
|
jmp still
|
|
waa2:
|
|
mov eax,[filecursor]
|
|
mov ebx,62
|
|
mul ebx
|
|
mov edi,eax
|
|
cmp [convinfo+edi+26],dword 'FOL '
|
|
je still
|
|
mov ecx,12*20
|
|
wlopt:
|
|
mov al,[path+ecx]
|
|
mov [paramtest+ecx],al
|
|
dec ecx
|
|
jns wlopt
|
|
mov [paramtest+esi],byte '/'
|
|
inc esi
|
|
mov ebp,8+4
|
|
mov edx,edi
|
|
wlosf:
|
|
mov al,[convinfo+edi]
|
|
mov [paramtest+esi],al
|
|
inc esi
|
|
inc edi
|
|
dec ebp
|
|
jnz wlosf
|
|
mov [paramtest+esi],byte 0
|
|
mov ebx,param_area ;clipfile
|
|
mov ecx,paramtest
|
|
mov edx,100
|
|
mov esi,0
|
|
mov eax,33
|
|
int 0x40
|
|
jmp still
|
|
no_copyclip:
|
|
|
|
cmp ah,16
|
|
jne no_clippaste
|
|
paste_from_clip:
|
|
mov ebx,param_area ;clipfile
|
|
mov ecx,0
|
|
mov edx,-1
|
|
mov esi,sourcepath
|
|
mov eax,6
|
|
int 0x40
|
|
|
|
mov ecx,99
|
|
cdestp:
|
|
mov al,[path+ecx]
|
|
mov [destpath+ecx],al
|
|
dec ecx
|
|
jns cdestp
|
|
|
|
mov esi,0
|
|
zlll2:
|
|
mov al,byte [destpath+esi]
|
|
cmp al,byte '/'
|
|
jne zfis2
|
|
inc esi
|
|
cmp esi,100
|
|
jnae zlll2
|
|
jmp still
|
|
zfis2:
|
|
mov al,byte [destpath+esi]
|
|
cmp al,byte ' '
|
|
je zaa2
|
|
inc esi
|
|
cmp esi,100
|
|
jnae zfis2
|
|
jmp still
|
|
zaa2:
|
|
mov byte [destpath+esi],'/'
|
|
inc esi
|
|
|
|
mov edi,0
|
|
qlll2:
|
|
mov al,byte [sourcepath+edi]
|
|
cmp al,byte '.'
|
|
je qfis2
|
|
inc edi
|
|
cmp edi,100
|
|
jnae qlll2
|
|
jmp still
|
|
qfis2:
|
|
sub edi,8 ;.-8=start of file name
|
|
|
|
mov ecx,11 ;11 sybols
|
|
cfname:
|
|
mov al,[sourcepath+edi]
|
|
cmp al,byte ' '
|
|
je dar
|
|
mov [destpath+esi],al
|
|
inc esi
|
|
dar:
|
|
inc edi
|
|
dec ecx
|
|
jns cfname
|
|
|
|
; mov [destpath+esi],byte 0
|
|
|
|
mov ecx,199
|
|
cdestjp:
|
|
mov al,[sourcepath+ecx]
|
|
cmp al,byte 0
|
|
jne nor
|
|
mov al,byte 32
|
|
nor:
|
|
mov [sourcepath+ecx],al
|
|
dec ecx
|
|
jns cdestjp
|
|
|
|
cmp [browser],dword 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,sourcepath ; pointer to text beginning
|
|
mov esi,100 ;12*20 ; text length
|
|
int 0x40
|
|
mov ebx,250*65536+67 ; [x start] *65536 + [y start]
|
|
mov ecx,0x00000000 ;[sc.grab_text] ; color of text RRGGBB
|
|
mov edx,destpath ; pointer to text beginning
|
|
mov esi,100 ;12*20 ; text length
|
|
int 0x40
|
|
no_outpath:
|
|
|
|
mov ebx,copyrfile
|
|
mov ecx,sourcepath
|
|
mov eax,19
|
|
int 0x40
|
|
delay 50 ;wait recoed file
|
|
jmp update ;still
|
|
no_clippaste:
|
|
|
|
cmp ah,19 ;Delete from floppy
|
|
delete_file:
|
|
jne no_delt
|
|
cmp dword [path],'/RD/'
|
|
jne no_delt
|
|
cmp byte [path+4],'1'
|
|
jne no_delt
|
|
|
|
mov eax,[filecursor]
|
|
mov ebx,62
|
|
mul ebx
|
|
mov edi,eax
|
|
add edi,convinfo
|
|
mov ebp,edi
|
|
mov eax,dword [edi]
|
|
mov dword [paramtest],eax
|
|
mov eax,dword [edi+4]
|
|
mov dword [paramtest+4],eax
|
|
mov eax,dword [edi+4+4+1]
|
|
mov dword [paramtest+4+4],eax
|
|
|
|
mov ebx,paramtest
|
|
mov eax,32
|
|
int 0x40
|
|
jmp update
|
|
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 show del
|
|
jne no_sn
|
|
; mov dword [viewmode],0
|
|
and dword [viewmode],100b
|
|
jmp update
|
|
no_sn:
|
|
|
|
cmp ah,41 ;Sort by extension show del
|
|
jne no_se
|
|
and dword [viewmode],1101b
|
|
or dword [viewmode],0001b
|
|
jmp update
|
|
no_se:
|
|
|
|
cmp ah,42 ;Sort by size show del
|
|
jne no_ss
|
|
and dword [viewmode],1110b
|
|
or dword [viewmode],0010b
|
|
jmp update
|
|
no_ss:
|
|
|
|
cmp ah,43 ;Sort by date show del
|
|
jne no_sd
|
|
or dword [viewmode],0011b
|
|
jmp update
|
|
no_sd:
|
|
|
|
cmp ah,44 ;Show del files
|
|
jne no_ds
|
|
or dword [viewmode],0100b
|
|
jmp update
|
|
no_ds:
|
|
|
|
cmp ah,45 ;Fade del files
|
|
jne no_df
|
|
and dword [viewmode],11111011b
|
|
jmp update
|
|
no_df:
|
|
|
|
;HELP MENU
|
|
cmp ah,50 ;Help?
|
|
je help_scr
|
|
|
|
cmp ah,51 ;Info?
|
|
je info_scr
|
|
|
|
cmp ah,83
|
|
ja no_hd_part
|
|
cmp ah,80
|
|
jb no_hd_part
|
|
mov ecx,0
|
|
sub ah,80
|
|
inc ah
|
|
mov cl,ah
|
|
mov eax,21
|
|
mov ebx,8 ;7
|
|
int 0x40
|
|
|
|
no_hd_part:
|
|
|
|
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]
|
|
; int 0x40
|
|
; //// Willow
|
|
mov eax,-1
|
|
int 0x40
|
|
|
|
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],dword 1 ;it's browser?
|
|
jne dialogscr
|
|
|
|
mov eax,[procinfo.y_size]
|
|
sub eax,90
|
|
drawfbox 40,76,300,eax,0x00000000
|
|
mov eax,[procinfo.y_size]
|
|
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.y_size]
|
|
sub eax,84
|
|
drawfbox 16,54,270,eax,0x00000000
|
|
mov eax,[procinfo.y_size]
|
|
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:
|
|
int 0x40
|
|
add ebx,11
|
|
add edx,40
|
|
dec edi
|
|
jnz helploo
|
|
|
|
setimg 48,84,logoinfimg
|
|
|
|
jmp still
|
|
|
|
;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 81 Ver '
|
|
db ' '
|
|
db ' Create by Pavlushin Evgeni '
|
|
db ' with ASCL libary special for Menuet OS '
|
|
db ' www.deck4.narod.ru waptap@mail.ru '
|
|
|
|
|
|
; *********************************************
|
|
; ******* WINDOW DEFINITIONS AND DRAW ********
|
|
; ******** FILE BROWSER / DIALOG *********
|
|
|
|
;draw_browser_window:
|
|
|
|
draw_window:
|
|
|
|
; mov eax,9
|
|
; mov ebx,procinfo
|
|
; mov ecx,-1
|
|
; int 0x40
|
|
; mov eax,[procinfo.x_size]
|
|
; cmp eax,66
|
|
; jg temp12345
|
|
; ret
|
|
; temp12345:
|
|
mov eax,48
|
|
mov ebx,3
|
|
mov ecx,sc
|
|
mov edx,sizeof.system_colors
|
|
int 0x40
|
|
|
|
mov eax,[sc.work_button]
|
|
mov [b_color],eax
|
|
|
|
mov eax,12 ; function 12:tell os about windowdraw
|
|
mov ebx,1 ; 1, start of draw
|
|
int 0x40
|
|
|
|
;Window
|
|
|
|
xor eax,eax ; function 0 : define and draw window
|
|
|
|
cmp [browser],dword 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,0x03ffffff;000000
|
|
int 0x40
|
|
|
|
;Get proc info
|
|
mov eax,9
|
|
mov ebx,procinfo
|
|
mov ecx,-1
|
|
int 0x40
|
|
|
|
mov eax,[procinfo.x_size]
|
|
cmp eax,66
|
|
jg temp12345
|
|
ret
|
|
temp12345:
|
|
|
|
cmp [browser],dword 1 ;it's browser
|
|
jne nob9
|
|
mov [listx],120
|
|
mov eax,[procinfo.x_size]
|
|
sub eax,[listx]
|
|
sub eax,7
|
|
mov [listxsize],eax
|
|
mov [listy],73
|
|
mov eax,[procinfo.y_size]
|
|
sub eax,[listy]
|
|
sub eax,7
|
|
mov [listysize],eax
|
|
jmp isb9
|
|
nob9:
|
|
mov [listx],10
|
|
mov eax,[procinfo.x_size]
|
|
sub eax,[listx]
|
|
sub eax,7
|
|
mov [listxsize],eax
|
|
mov [listy],54
|
|
mov eax,[procinfo.y_size]
|
|
sub eax,[listy]
|
|
sub eax,34
|
|
mov [listysize],eax
|
|
isb9:
|
|
|
|
|
|
;Draw only browser components
|
|
cmp [browser],dword 1 ;it's browser
|
|
jne nob2
|
|
|
|
mov eax,[sc.grab_text] ; color of text RRGGBB
|
|
or eax,0x10000000
|
|
glabel 8,8,'SYSTEM X-TREE FILE BROWSER',eax
|
|
|
|
;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
|
|
int 0x40
|
|
dec edi
|
|
nexthbut:
|
|
add ebx,(6*8)*65536
|
|
inc edx
|
|
int 0x40
|
|
dec edi
|
|
jnz nexthbut
|
|
|
|
;DRAW PARTITION BUTTONS
|
|
mov eax,8
|
|
mov ebx,340*65536+5 ;start pos x
|
|
mov ecx,24*65536+8 ;start pos y
|
|
mov edx,80;+1000000000000000000000000000000b ;spoke butt
|
|
mov edi,4 ;draw 13 button's
|
|
mov esi,0x00339933
|
|
int 0x40
|
|
dec edi
|
|
nextpbut:
|
|
add ebx,6*65536
|
|
inc edx
|
|
int 0x40
|
|
dec edi
|
|
jnz nextpbut
|
|
|
|
;DRAW PARTITON TEXT
|
|
glabel 341,25,'1234',cl_White;Black
|
|
|
|
;File STRING
|
|
glabel 8,25,' FILE VIEW INFO ', ;cl_White ;Black
|
|
|
|
;BlackLine
|
|
mov eax,[procinfo.x_size]
|
|
sub eax,10
|
|
drawfbox 5,35, eax, 1, cl_Black
|
|
|
|
;BlackLine2
|
|
mov eax,[procinfo.x_size]
|
|
sub eax,10
|
|
drawfbox 5,68, eax, 1, cl_Black
|
|
|
|
;BlackLine2 vertical
|
|
; mov eax,[procinfo.y_size]
|
|
; 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 MENUETOS',
|
|
|
|
add ebx,9*65536+20
|
|
glabel ,,'welcome to',cl_Green
|
|
add ebx,-15*65536+10
|
|
glabel ,,'www.menuetos.org',cl_Green
|
|
|
|
; glabel ,,'Create by',cl_Green
|
|
; add ebx,10
|
|
; glabel ,,' Pavlushin',
|
|
; add ebx,10
|
|
; glabel ,,' Evgeni',
|
|
|
|
|
|
;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,6 ;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],dword 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
|
|
int 0x40
|
|
dec edi
|
|
nextbut:
|
|
add ebx,(16+6)*65536
|
|
inc edx
|
|
int 0x40
|
|
dec edi
|
|
jnz nextbut
|
|
|
|
|
|
cmp [browser],dword 1 ;it's browser
|
|
jne nob4
|
|
;But img browser
|
|
setimg 10,37,butimg
|
|
;left logo
|
|
add eax,[procinfo.x_size]
|
|
sub eax,80
|
|
mov [temp],eax
|
|
setimg [temp],37,logoimg
|
|
jmp isb4
|
|
nob4:
|
|
;But img dialog
|
|
setimg 16,29,butimg
|
|
isb4:
|
|
|
|
cmp [browser],dword 1 ;it's browser
|
|
jne nob5
|
|
|
|
mov [urlx],48
|
|
mov [urly],55
|
|
mov eax,[procinfo.x_size]
|
|
sub eax,48+10
|
|
mov [urlxsize],eax
|
|
mov [urlysize],12
|
|
|
|
glabel 20,57,"URL:",cl_Black
|
|
|
|
;Out view mode info
|
|
mov eax,[viewmode]
|
|
mov ebx,16
|
|
mul ebx
|
|
mov edx,eax
|
|
mov eax,4
|
|
mov ebx,180*65536+25
|
|
mov ecx,cl_Black
|
|
add edx,modetext
|
|
mov esi,16
|
|
int 0x40
|
|
|
|
;List size
|
|
outcount [listsize],294,25,cl_Black,4*65536
|
|
jmp isb5
|
|
|
|
head_dlg: db 'OPEN FILE'
|
|
db 'SAVE FILE'
|
|
but_dlg: db 'OPEN'
|
|
db 'SAVE'
|
|
|
|
nob5:
|
|
|
|
mov [urlx],10
|
|
mov eax,[procinfo.y_size]
|
|
sub eax,24
|
|
mov [urly],eax
|
|
mov eax,[procinfo.x_size]
|
|
sub eax,80
|
|
mov [urlxsize],eax
|
|
mov [urlysize],12
|
|
|
|
cmp byte [dlg_type],'O' ;if byte O - is Open dialog
|
|
jne no_openh
|
|
mov edx,head_dlg ;draw in head OPEN FILE
|
|
jmp out_laby
|
|
no_openh:
|
|
cmp byte [dlg_type],'S' ;if byte S - is Save dialog
|
|
jne no_saveh
|
|
mov edx,head_dlg+9 ;draw in head SAVE FILE
|
|
out_laby:
|
|
mov ebx,8*65536+8
|
|
mov ecx,[sc.grab_text] ; color of text RRGGBB
|
|
or ecx,0x10000000
|
|
mov esi,9
|
|
mov eax,4
|
|
int 0x40
|
|
no_saveh:
|
|
|
|
|
|
;Draw OPEN\SAVE button
|
|
mov ebx,0*65536+50
|
|
mov ecx,0*65536+12
|
|
mov eax,[procinfo.x_size]
|
|
sub eax,63
|
|
shl eax,16
|
|
add ebx,eax
|
|
mov eax,[procinfo.y_size]
|
|
sub eax,25
|
|
shl eax,16
|
|
add ecx,eax
|
|
mov eax,8
|
|
mov edx,5 ;button ID
|
|
mov esi,0x006699aa ;gradient!!!
|
|
int 0x40
|
|
|
|
; label OPEN or SAVE
|
|
mov ebx,[procinfo.x_size]
|
|
sub ebx,48
|
|
mov eax,[procinfo.y_size]
|
|
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
|
|
int 0x40
|
|
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!!!
|
|
int 0x40
|
|
|
|
;Draw URL String
|
|
mov eax,13
|
|
mov edx,cl_Black
|
|
int 0x40
|
|
add ebx,1*65536-2+1
|
|
add ecx,1*65536-2+1
|
|
mov edx,cl_White
|
|
int 0x40
|
|
|
|
;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
|
|
int 0x40
|
|
|
|
; 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
|
|
int 0x40
|
|
|
|
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]
|
|
sub ecx,[scrollbutsize]
|
|
mov edx,[scrollcolor] ;0x00006600
|
|
int 0x40
|
|
|
|
;Draw Scroll Box
|
|
mov edx,0
|
|
mov eax,[listysize]
|
|
sub eax,2
|
|
mov ebx,dword 10
|
|
div ebx
|
|
|
|
mov edx,0
|
|
mov ebx,eax
|
|
cmp ebx,[listsize] ;filelistsize in ebx
|
|
ja notusescroll
|
|
;usescroll
|
|
mov eax,[listysize]
|
|
sub eax,[scrollbutsize]
|
|
sub eax,[scrollbutsize]
|
|
shl eax,16
|
|
div dword [listsize]
|
|
mul ebx
|
|
shr eax,16
|
|
mov esi,[mousey]
|
|
shl esi,16
|
|
add esi,eax
|
|
|
|
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,esi
|
|
mov edx,[scrollboxcol]
|
|
int 0x40
|
|
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+1000000000000000000000000000000b ;spoke butt
|
|
int 0x40
|
|
|
|
add ebx,15
|
|
mov eax,13
|
|
mov edx,[listcolor] ;ffffff
|
|
int 0x40
|
|
|
|
;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]
|
|
dec ecx ;correction
|
|
mov eax,8
|
|
mov edx,6+1000000000000000000000000000000b ;spoke butt
|
|
int 0x40
|
|
|
|
inc ecx
|
|
mov eax,13
|
|
mov edx,[scrollbutcol] ;ffffff
|
|
int 0x40
|
|
|
|
; 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
|
|
int 0x40
|
|
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
|
|
int 0x40
|
|
|
|
inc ecx
|
|
mov eax,13
|
|
mov edx,[scrollbutcol] ;ffffff
|
|
int 0x40
|
|
|
|
; 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
|
|
int 0x40
|
|
popad
|
|
|
|
|
|
; Draw text in file list
|
|
|
|
mov eax,[listxsize]
|
|
sub eax,40*6 ;leight of string
|
|
shr eax,1
|
|
add eax,[listx]
|
|
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,62
|
|
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:
|
|
mov ecx,0x00888888 ;for another file's color white
|
|
cmp [edx+26],dword 'FOL ' ;folder yellow
|
|
jne nb
|
|
mov ecx,0x00006666
|
|
jmp cset1
|
|
nb:
|
|
mov eax,[edx+8]
|
|
;Color set
|
|
cmp eax,dword '.TXT' ;text's blue
|
|
je itx
|
|
cmp eax,dword '.INC'
|
|
je itx
|
|
cmp eax,dword '.ASM'
|
|
je itx
|
|
cmp eax,dword '.RTF'
|
|
je itx
|
|
jmp nt
|
|
itx:
|
|
mov ecx,0x00446666
|
|
jmp cset
|
|
nt:
|
|
cmp eax,dword '.BMP' ;picture's pure
|
|
je ipic
|
|
cmp eax,dword '.JPG'
|
|
je ipic
|
|
cmp eax,dword '.JPE'
|
|
je ipic
|
|
cmp eax,dword '.GIF'
|
|
je ipic
|
|
; //// Willow
|
|
cmp eax,dword '.PNG'
|
|
je ipic
|
|
; //// Willow
|
|
cmp eax,dword '.WAV'
|
|
je ipic
|
|
cmp eax,dword '.MID'
|
|
je ipic
|
|
jmp np
|
|
ipic:
|
|
mov ecx,0x00226688
|
|
jmp cset
|
|
np:
|
|
cmp eax,dword '. ' ;execute's green
|
|
jne nexec
|
|
mov ecx,0x00008866
|
|
jmp cset
|
|
nexec:
|
|
cset:
|
|
|
|
cset1:
|
|
mov esi,40 ;symbols out 62 ;32
|
|
mov eax,4
|
|
pushad
|
|
int 0x40
|
|
; popad
|
|
|
|
; pushad
|
|
cmp [edx+26],dword 'Fvol' ;volume label
|
|
jne no_volico
|
|
push hdico+8
|
|
jmp out_ico
|
|
no_volico:
|
|
cmp [edx+26],dword 'FOL '
|
|
jne no_folico
|
|
cmp [edx+9],dword 'HARD'
|
|
jne no_hdico
|
|
push hdico+8
|
|
jmp out_ico
|
|
no_hdico:
|
|
cmp [edx+9],dword 'RAMD'
|
|
jne no_rdico
|
|
push rdico+8
|
|
jmp out_ico
|
|
no_rdico:
|
|
cmp [edx+9],dword 'FLOP'
|
|
jne no_fdico
|
|
push rdico+8
|
|
jmp out_ico
|
|
no_fdico:
|
|
push folico+8
|
|
jmp out_ico
|
|
no_folico:
|
|
cmp [edx+8],dword '.BMP'
|
|
je is_imgico
|
|
cmp [edx+8],dword '.JPG'
|
|
je is_imgico
|
|
cmp [edx+8],dword '.JPE'
|
|
je is_imgico
|
|
cmp [edx+8],dword '.GIF'
|
|
je is_imgico
|
|
; //// Willow
|
|
cmp [edx+8],dword '.PNG'
|
|
je is_imgico
|
|
; //// Willow
|
|
cmp [edx+8],dword '.WAV'
|
|
je is_imgico
|
|
cmp [edx+8],dword '.MID'
|
|
je is_imgico
|
|
jmp no_imgico
|
|
is_imgico:
|
|
push imgico+8
|
|
jmp out_ico
|
|
no_imgico:
|
|
cmp [edx+8],dword '.ASM'
|
|
je is_asmincico
|
|
cmp [edx+8],dword '.INC'
|
|
je is_asmincico
|
|
jmp no_asmincico
|
|
is_asmincico:
|
|
push asmincico+8
|
|
jmp out_ico
|
|
no_asmincico:
|
|
cmp [edx+8],dword '.RTF'
|
|
je @f
|
|
cmp [edx+8],dword '.TXT'
|
|
jne no_txtico
|
|
@@:
|
|
push txtico+8
|
|
jmp out_ico
|
|
no_txtico:
|
|
cmp [edx+8],dword '. '
|
|
jne no_execico
|
|
push execico+8
|
|
jmp out_ico
|
|
no_execico:
|
|
cmp [edx+26],dword 'DAT '
|
|
jne no_datico
|
|
push datico+8
|
|
jmp out_ico
|
|
no_datico:
|
|
cmp [edx+26],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
|
|
int 0x40
|
|
no_out_ico:
|
|
popad
|
|
|
|
|
|
add ebx,10
|
|
noout:
|
|
add edx,62
|
|
|
|
dec [filelistsize]
|
|
cmp [filelistsize],dword 0
|
|
je extloo
|
|
|
|
dec ebp
|
|
jnz loo
|
|
dext:
|
|
mov [downstop],1
|
|
|
|
extloo:
|
|
|
|
cmp [browser],dword 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
|
|
jmp no_drawhftext
|
|
|
|
file_text_label:
|
|
db ' Open '
|
|
db ' Copy '
|
|
db ' Paste '
|
|
db ' Delete '
|
|
db ' Tinypad '
|
|
db ' Edit '
|
|
db ' '
|
|
db ' Exit '
|
|
|
|
no_drawhftext:
|
|
|
|
;Draw text for head->view buttons
|
|
cmp [drawhv],1
|
|
jne no_drawhvtext
|
|
drawfbox (8+6*8),35,(6*12)+1,(11*6),0x00000000
|
|
drawfbox (9+6*8),36,(6*12)-1,(11*6)-2,0x00ffffff
|
|
|
|
mov edi,6 ;4
|
|
mov ebx,(9+6*8)*65536+37
|
|
mov ecx,cl_Black
|
|
mov edx,view_text_label
|
|
call drawmenu
|
|
jmp no_drawhvtext
|
|
|
|
view_text_label:
|
|
db ' Name sort '
|
|
db ' Ext. sort '
|
|
db ' Size sort '
|
|
db ' Date sort '
|
|
db ' Show DEL '
|
|
db ' Fade DEL '
|
|
|
|
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
|
|
jmp no_drawhitext
|
|
|
|
info_text_label:
|
|
db ' Help '
|
|
db ' About '
|
|
|
|
no_drawhitext:
|
|
|
|
nob8:
|
|
cmp [flick],1
|
|
jne no_flick
|
|
mov [flick],0
|
|
jmp still
|
|
no_flick:
|
|
|
|
mov eax,12 ; function 12:tell os about windowdraw
|
|
mov ebx,2 ; 2, end of draw
|
|
int 0x40
|
|
|
|
ret
|
|
|
|
;FILE LIST PARAMETRS
|
|
|
|
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 dd 9
|
|
usescroll dd 1
|
|
|
|
;URL LINE PARAMETRS
|
|
|
|
urlx dd 10
|
|
urly dd 20
|
|
urlxsize dd 350
|
|
urlysize dd 12
|
|
|
|
|
|
drawmenu:
|
|
mov eax,4
|
|
mov esi,12
|
|
menuloo:
|
|
int 0x40
|
|
add ebx,11
|
|
add edx,12
|
|
dec edi
|
|
jnz menuloo
|
|
ret
|
|
|
|
menubutton:
|
|
mov eax,8
|
|
nextmenubut:
|
|
int 0x40
|
|
add ecx,11*65536
|
|
inc edx
|
|
dec edi
|
|
jnz nextmenubut
|
|
ret
|
|
|
|
;*****************************
|
|
; READ FILE STRUCTURE PROC
|
|
;*****************************
|
|
|
|
read_directory:
|
|
|
|
; STEP 0 SEt TYPE OF SORT
|
|
|
|
mov eax,[viewmode]
|
|
;with no show del files
|
|
and eax,0FFFFFFFBh
|
|
cmp eax,0
|
|
jnz no_sort_by_name
|
|
mov [start],0
|
|
mov [x0],12
|
|
mov [x1],99
|
|
mov [x2],99
|
|
mov [x3],99
|
|
jmp sortset
|
|
|
|
no_sort_by_name:
|
|
dec eax
|
|
jnz no_sort_by_ext
|
|
mov [start],9
|
|
mov [x0],9
|
|
mov [x1],99
|
|
mov [x2],99
|
|
mov [x3],12
|
|
jmp sortset
|
|
|
|
no_sort_by_ext:
|
|
dec eax
|
|
jnz no_sort_by_size
|
|
mov [start],30
|
|
mov [x0],12
|
|
mov [x1],99
|
|
mov [x2],99
|
|
mov [x3],38
|
|
jmp sortset
|
|
|
|
no_sort_by_size:
|
|
dec eax
|
|
mov [start],21
|
|
mov [x0],12
|
|
mov [x1],17
|
|
mov [x2],20
|
|
mov [x3],26
|
|
jmp sortset ;sort by date
|
|
|
|
;SORT VARILE
|
|
start dd 0
|
|
x0 dd 0
|
|
x1 dd 0
|
|
x2 dd 0
|
|
x3 dd 0
|
|
|
|
sortset:
|
|
|
|
;STEP 1 CLEAR CONVINFO
|
|
mov edi,convinfo
|
|
mov al,255
|
|
mov ecx,4096*62 ;512
|
|
cld
|
|
rep stosb
|
|
|
|
;STEP 2 TEST ON HD OR PARTITION
|
|
cmp [path],byte '/'
|
|
je nstep
|
|
mov ecx,61+62*5
|
|
loxhd:
|
|
mov al,[hdimg+ecx]
|
|
mov [convinfo+ecx],al
|
|
dec ecx
|
|
jns loxhd
|
|
mov [listsize],0
|
|
ret
|
|
nstep:
|
|
cmp [path+3],byte '/'
|
|
je nstep2
|
|
cmp [path+4],byte '/'
|
|
je nstep2
|
|
cmp [path+1],word 'RD'
|
|
jne nostep_RD
|
|
mov ecx,61
|
|
jmp loxpt
|
|
nostep_RD:
|
|
cmp [path+1],word 'FD'
|
|
jne nostep_FD
|
|
mov ecx,61+62
|
|
jmp loxpt
|
|
nostep_FD:
|
|
cmp [path+1],dword 'HD0'
|
|
jne nostep_HD0
|
|
mov cl,[table_area+2]
|
|
movzx ecx,cl
|
|
imul ecx,62
|
|
dec ecx
|
|
jmp loxpt
|
|
nostep_HD0:
|
|
cmp [path+1],dword 'HD1'
|
|
jne nostep_HD1
|
|
mov cl,[table_area+3]
|
|
movzx ecx,cl
|
|
imul ecx,62
|
|
dec ecx
|
|
jmp loxpt
|
|
nostep_HD1:
|
|
cmp [path+1],dword 'HD2'
|
|
jne nostep_HD2
|
|
mov cl,[table_area+4]
|
|
movzx ecx,cl
|
|
imul ecx,62
|
|
dec ecx
|
|
jmp loxpt
|
|
nostep_HD2:
|
|
cmp [path+1],dword 'HD3'
|
|
jne nostep_HD3
|
|
mov cl,[table_area+5]
|
|
movzx ecx,cl
|
|
imul ecx,62
|
|
dec ecx
|
|
jmp loxpt
|
|
nostep_HD3:
|
|
|
|
mov ecx,61+62 ;+496
|
|
|
|
loxpt:
|
|
mov al,[ptimg+ecx]
|
|
mov [convinfo+ecx],al
|
|
dec ecx
|
|
jns loxpt
|
|
mov [listsize],0
|
|
ret
|
|
nstep2:
|
|
|
|
;STEP 3 CLEAR OUTINFO
|
|
mov edi,outinfo ;0x14000 ;0x20000
|
|
xor eax,eax
|
|
mov ecx,4096*32 ;512
|
|
cld
|
|
rep stosb
|
|
|
|
;STEP 4 READ DATA FROM HD
|
|
mov dword [farea],outinfo
|
|
mov dword [readblock],0
|
|
|
|
loorhd:
|
|
mov eax,[readblock]
|
|
mov [fileinfoblock+4],eax
|
|
mov eax,58
|
|
mov ebx,fileinfoblock
|
|
int 0x40
|
|
cmp eax,0
|
|
jne hd_err
|
|
add dword [farea],512
|
|
inc dword [readblock]
|
|
cmp dword [readblock],4096/16
|
|
jna loorhd
|
|
|
|
hd_err:
|
|
mov ebx,dword [readblock]
|
|
shl ebx,4
|
|
mov dword [blocksread],ebx ; for quick resorting
|
|
|
|
cmp eax,5
|
|
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,'Unknow file system',cl_Red+font_Big
|
|
jmp end_of_dir
|
|
no_unk_fs:
|
|
|
|
end_of_dir:
|
|
mov [dirlen],ebx
|
|
|
|
; command succesful
|
|
|
|
mov esi,outinfo ;data_area+1024
|
|
; mov edi,fileinfo+11
|
|
mov edx,0 ;4096 ;16
|
|
|
|
newlineb:
|
|
|
|
mov edi,fileinfo+11
|
|
|
|
pushad ; clear
|
|
mov al,32
|
|
mov ecx,58
|
|
sub edi,11
|
|
cld
|
|
rep stosb
|
|
popad
|
|
|
|
mov cl,[esi] ; end of entries ?
|
|
cmp cl,6
|
|
jnz noib0
|
|
|
|
mov [edi+26],dword 'EOE '
|
|
add esi,32
|
|
; add edi,62
|
|
jmp inf
|
|
|
|
noib0:
|
|
|
|
mov cl,[esi+0]
|
|
cmp cl,0xe5
|
|
je yesdelfil
|
|
|
|
mov cl,[esi+11] ; long fat32 name ?
|
|
cmp cl,0xf
|
|
jnz noib1
|
|
|
|
mov [edi+26],dword 'F32 '
|
|
add esi,32
|
|
; add edi,62
|
|
jmp inf
|
|
|
|
noib1:
|
|
|
|
mov eax,'DAT ' ; data or .. ?
|
|
|
|
mov cl,[esi+0] ; deleted file
|
|
cmp cl,0xe5
|
|
je yesdelfil
|
|
cmp cl,0x0
|
|
je yesdelfil
|
|
jmp nodelfil
|
|
yesdelfil:
|
|
mov eax,'DEL '
|
|
jmp ffile
|
|
|
|
nodelfil:
|
|
|
|
mov cl,[esi+11] ; folder
|
|
and cl,0x10
|
|
jz ffile
|
|
mov eax,'FOL '
|
|
mov [edi+26],eax
|
|
jmp nosize
|
|
ffile:
|
|
|
|
; Asko patch for v79
|
|
mov cl,[esi+11] ; fold
|
|
and cl,0xf
|
|
cmp cl,0xf ; skip long filename
|
|
jz novol
|
|
test cl,0x8 ; is it fold label?
|
|
jz novol ; no
|
|
mov eax,'Fvol'
|
|
mov [edi+26],eax
|
|
jmp nosize
|
|
novol:
|
|
|
|
mov [edi+26],eax
|
|
|
|
pusha ; size
|
|
mov eax,[esi+28]
|
|
mov esi,edi
|
|
add esi,37
|
|
mov ebx,10
|
|
mov ecx,8
|
|
newnum:
|
|
xor edx,edx
|
|
div ebx
|
|
add dl,48
|
|
mov [esi],dl
|
|
test eax,eax
|
|
jz zernum
|
|
dec esi
|
|
loop newnum
|
|
zernum:
|
|
popa
|
|
nosize:
|
|
|
|
pusha ; date
|
|
mov [edi+17],dword '. .'
|
|
|
|
movzx eax,word [esi+24]
|
|
shr eax,9 ; year
|
|
add eax,1980
|
|
mov ecx,4
|
|
newdel1:
|
|
dec ecx
|
|
xor edx,edx
|
|
mov ebx,10
|
|
div ebx
|
|
add edx,48
|
|
mov [edi+ecx+21],dl
|
|
test ecx,ecx
|
|
jnz newdel1
|
|
|
|
movzx eax,word [esi+24]
|
|
shr eax,5 ; month
|
|
and eax,0x0f
|
|
mov ecx,2
|
|
newdel2:
|
|
dec ecx
|
|
xor edx,edx
|
|
mov ebx,10
|
|
div ebx
|
|
add edx,48
|
|
mov [edi+ecx+18],dl
|
|
test ecx,ecx
|
|
jnz newdel2
|
|
|
|
movzx eax,word [esi+24]
|
|
and eax,0x1f ; day
|
|
mov ecx,2
|
|
newdel3:
|
|
dec ecx
|
|
xor edx,edx
|
|
mov ebx,10
|
|
div ebx
|
|
add edx,48
|
|
mov [edi+ecx+15],dl
|
|
test ecx,ecx
|
|
jnz newdel3
|
|
|
|
popa
|
|
|
|
|
|
pusha ; number
|
|
mov eax,edx
|
|
sub eax,4096
|
|
neg eax
|
|
|
|
xor edx,edx
|
|
mov ebx,10
|
|
div ebx
|
|
add dl,48
|
|
mov [edi+43],dl ;0001
|
|
xor edx,edx
|
|
div ebx
|
|
add dl,48
|
|
mov [edi+42],dl ;0010
|
|
xor edx,edx
|
|
div ebx
|
|
add al,48
|
|
add dl,48
|
|
mov [edi+41],dl ;0100
|
|
mov [edi+40],byte 0 ;1000
|
|
popa
|
|
|
|
mov ecx,8 ; first 8
|
|
cld
|
|
rep movsb
|
|
mov [edi],byte '.'
|
|
inc edi
|
|
mov ecx,3 ; last 3
|
|
cld
|
|
rep movsb
|
|
|
|
add esi,(32-11)
|
|
; add edi,(60-12+2)
|
|
|
|
inf:
|
|
|
|
pushad
|
|
|
|
;STEP 5 Test on WRITE OR NOTWRITE
|
|
mov edx,fileinfo+11
|
|
looo:
|
|
|
|
; Delete del, eoe, f32 and another head-names
|
|
cmp [viewmode],3 ;0-3 no outdel
|
|
ja del_out
|
|
cmp [edx+26],dword 'DEL '
|
|
je nextfl
|
|
del_out:
|
|
cmp [edx+26],dword 'DEL '
|
|
jne no_del
|
|
cmp [edx],dword 0 ;431 ;435 ;484 +10% speed
|
|
je nextfl
|
|
no_del:
|
|
cmp [edx+26],dword 'EOE '
|
|
je nextfl
|
|
cmp [edx+26],dword 'F32 ' ;F32 not useles
|
|
je nextfl
|
|
cmp [edx],dword '. '
|
|
je nextfl
|
|
cmp [edx],dword '.. '
|
|
je nextfl
|
|
cmp [edx],dword 'FIRS'
|
|
je nextfl
|
|
|
|
; ---------_______-------_______ --------_________-----------
|
|
; SORT by name and del deletet files or f32 headers from list
|
|
; _________-------_______ --------_______---------___________
|
|
|
|
; STEP 6 UNIVERSAL SORT ALGORYTHM
|
|
|
|
xxx:
|
|
mov esi,0 ;[tekfilename] ;0
|
|
mov ebx,[start] ; 0
|
|
|
|
; At first Fold after Dat and Del
|
|
|
|
ftestname:
|
|
cmp byte [fileinfo+11+26],'F'
|
|
je F
|
|
cmp byte [fileinfo+11+26],'D'
|
|
je D
|
|
jmp add_element
|
|
D: cmp byte [convinfo+esi+26],'D'
|
|
je add_element
|
|
cmp byte [convinfo+esi+26],'F'
|
|
je skipfile
|
|
jmp add_element
|
|
F: cmp byte [convinfo+esi+26],'D'
|
|
je writenow
|
|
; cmp byte [convinfo+esi+26],'F'
|
|
; je add_element
|
|
; jmp add_element
|
|
|
|
add_element:
|
|
mov al,[fileinfo+ebx+11]
|
|
cmp al,[convinfo+esi+ebx]
|
|
je equal
|
|
jb writenow
|
|
skipfile:
|
|
add esi,62
|
|
mov ebx,[start] ;0
|
|
jmp ftestname
|
|
|
|
equal:
|
|
inc ebx
|
|
cmp ebx,[x0]
|
|
je writefile
|
|
cmp ebx,[x1]
|
|
je x1p
|
|
cmp ebx,[x2]
|
|
je x2p
|
|
cmp ebx,[x3]
|
|
jae x3p
|
|
jmp add_element
|
|
|
|
x1p:
|
|
mov ebx,18
|
|
jmp add_element
|
|
x2p:
|
|
mov ebx,15
|
|
jmp add_element
|
|
x3p:
|
|
mov ebx,0
|
|
jmp add_element
|
|
|
|
writenow:
|
|
mov ecx,4096*62
|
|
sub ecx,esi
|
|
ldloop:
|
|
mov al,[convinfo+ecx+esi]
|
|
mov [convinfo+ecx+esi+62],al
|
|
dec ecx
|
|
jns ldloop
|
|
|
|
|
|
writefile:
|
|
mov ecx,61
|
|
wfloop:
|
|
mov al,[fileinfo+ecx+11]
|
|
mov [convinfo+ecx+esi],al
|
|
dec ecx
|
|
jns wfloop
|
|
|
|
nextfile:
|
|
|
|
nextfl:
|
|
; popad
|
|
; pushad
|
|
mov eax,edx
|
|
shl eax,26
|
|
cmp eax,0
|
|
jne no_outcnt
|
|
push edx
|
|
drawfbox 294,25,(4*6),10,cl_White
|
|
pop ebp
|
|
outcount ebp,294,25,cl_Black,4*65536
|
|
no_outcnt:
|
|
popad
|
|
|
|
inc edx
|
|
cmp edx,4096
|
|
jnae newlineb
|
|
|
|
|
|
;STEP 8 GET SIZE OF RESORTING LIST
|
|
mov ecx,0
|
|
mov edi,0
|
|
mov eax,[blocksread]
|
|
mov ebx,62
|
|
mul ebx
|
|
mov edx,eax
|
|
loogs:
|
|
mov eax,dword [convinfo+edi+26]
|
|
cmp eax,dword 0xffffffff
|
|
je endgs
|
|
add edi,62
|
|
inc ecx
|
|
cmp edi,edx ;4096*62
|
|
jnae loogs
|
|
endgs:
|
|
mov [listsize],ecx
|
|
ret
|
|
|
|
;******************************************************************************
|
|
|
|
; 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?
|
|
browser dd 0 ;0-dialog, 1-browser
|
|
cursor dd 0 ;cursor in prompt line
|
|
focus dd 0 ;prompt edit or window?
|
|
viewmode dd 0 ;folder sort & not del
|
|
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
|
|
|
|
hdimg1 db 'HD0 HARDDISK FOL '
|
|
hdimg2 db 'HD1 HARDDISK FOL '
|
|
hdimg3 db 'HD2 HARDDISK FOL '
|
|
hdimg4 db 'HD3 HARDDISK FOL '
|
|
|
|
;01234567890123456789012345678901234567890123456789012345678912
|
|
hdimg db 'RD RAMDISK FOL '
|
|
db 'FD FLOPPYDISK FOL '
|
|
db ' '
|
|
db ' '
|
|
db ' '
|
|
db ' '
|
|
|
|
ptimg db '1 FIRST PARTITION FOL '
|
|
db '2 SECOND PARTITION FOL '
|
|
db '3 NEXT PARTITION FOL '
|
|
db '4 NEXT PARTITION FOL '
|
|
db '5 NEXT PARTITION FOL '
|
|
db '6 NEXT PARTITION FOL '
|
|
db '7 NEXT PARTITION FOL '
|
|
db '8 NEXT PARTITION FOL '
|
|
db '9 NEXT PARTITION FOL '
|
|
db '10 NEXT PARTITION FOL '
|
|
db '11 NEXT PARTITION FOL '
|
|
db '12 NEXT PARTITION FOL '
|
|
db '13 NEXT PARTITION FOL '
|
|
db '14 NEXT PARTITION FOL '
|
|
db '15 NEXT PARTITION FOL '
|
|
db '16 NEXT PARTITION FOL '
|
|
db '17 NEXT PARTITION FOL '
|
|
db '18 NEXT PARTITION FOL '
|
|
db '19 NEXT PARTITION FOL '
|
|
db '20 NEXT 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 'TINYPAD '
|
|
bmpview db 'MV '
|
|
jpgview db 'JPEGVIEW '
|
|
gifview db 'GIFVIEW '
|
|
ac97wav db 'AC97WAV '
|
|
copyrfile db 'COPYR '
|
|
rtfread db 'RTFREAD '
|
|
; //// Willow
|
|
pngview db '@RCHER '
|
|
; //// Willow
|
|
midamp db 'MIDAMP '
|
|
|
|
fileinfo_start:
|
|
dd 16
|
|
dd 0
|
|
dd 0 ;tempzone+1000;
|
|
dd 0
|
|
dd tempzone ;0x10000
|
|
open_path:
|
|
times 256 db 0 ;run app path
|
|
|
|
fileinfoblock:
|
|
dd 0x0 ; read
|
|
dd 0x0 ; first block
|
|
dd 0x1 ; number of blocks to read
|
|
farea:
|
|
dd outinfo ; ret offset
|
|
dd tempzone ; work size of sytemram
|
|
path:
|
|
times 256 db 0 ;path
|
|
|
|
table_area:
|
|
rb 10
|
|
|
|
;rb 256
|
|
but_file:
|
|
file 'systr12.GIF'
|
|
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
|
|
|
|
tempimg: ;reserve ram for images
|
|
rb 400*100*3+8 ;for picture
|
|
rb 8000
|
|
|
|
gif_hash:
|
|
rd 4096
|
|
tempzone: ;temp zone for 58 function
|
|
rb 4000
|
|
|
|
sourcepath rb 100
|
|
destpath rb 100
|
|
|
|
MYPID:
|
|
rd 8
|
|
|
|
I_END:
|
|
|
|
param_area:
|
|
rb 256
|
|
paramtest:
|
|
rb 256
|
|
filedir:
|
|
rb 256
|
|
|
|
procinfo process_information
|
|
sc system_colors
|
|
|
|
fileinfo:
|
|
rb 200 ;4096*62+1024
|
|
|
|
outinfo:
|
|
rb 4096*34+1024
|
|
|
|
convinfo:
|
|
rb 4096*62+1024
|
|
|
|
RAM_END:
|