;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; ; ; 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: