Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 487 → Rev 488

/kernel/trunk/fs/fs_lfn.inc
6,6 → 6,9
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
image_of_eax EQU esp+44 ;36
image_of_ebx EQU esp+32 ;24
 
; System function 70 - files with long names (LFN)
; diamond, 2006
 
79,6 → 82,12
dd 0
endg
 
end_of_file_system_lfn:
pop edx
stdcall kernel_free, edx
ret
 
 
file_system_lfn:
; in: eax->fileinfo block
; operation codes:
93,6 → 102,53
; 8 : delete file
; 9 : create directory
 
; çàìåíà àäðåñà âîçâðàòà
push eax
stdcall kernel_alloc, 200
mov edx,eax
pop eax
push edx
push end_of_file_system_lfn
mov ebx,edx
mov ecx, [eax]
mov [ebx],ecx
 
add ebx,4
mov ecx, [eax+4]
mov [ebx],ecx
 
add ebx,4
mov ecx, [eax+8]
mov [ebx],ecx
 
add ebx,4
mov ecx, [eax+12]
mov [ebx],ecx
 
add ebx,4
mov ecx, [eax+16]
mov [ebx],ecx
 
add ebx,4
push edx ; !!!!!!!!!!!!!!!!!!!
; eax - yíà÷àëî ñòàðîãî ïàêåòà
; edx - íà÷àëî íîâîãî ïàêåòà
; ebx - êóäà ëîæèòü ñòðîêó
add eax,20
mov cl, [eax]
test cl,cl
jnz @f
mov eax,[eax+1]
@@:
stdcall full_file_name,eax,ebx
pop eax
 
 
; add eax, std_application_base_address
; parse file name
xchg ebx, eax
115,13 → 171,13
; add ebx, new_app_base
.l1:
call fs_execute ; ebp, ebx, edx
mov [esp+36], eax
mov [image_of_eax], eax
ret
@@:
cmp al, '/'
jz @f
.notfound:
mov dword [esp+36], 5 ; file not found
mov dword [image_of_eax], 5 ; file not found
ret
@@:
cmp byte [esi], 0
223,8 → 279,8
js @f
mov al, ERROR_END_OF_FILE
@@:
mov [esp+36], eax
mov [esp+24], ebx
mov [image_of_eax], eax
mov [image_of_ebx], ebx
ret
; directory /
.rootdir:
231,7 → 287,7
cmp dword [ebx], 1 ; read folder?
jz .readroot
.access_denied:
mov dword [esp+36], 10 ; access denied
mov dword [image_of_eax], 10 ; access denied
ret
 
.readroot:
299,8 → 355,8
js @f
mov al, ERROR_END_OF_FILE
@@:
mov [esp+36], eax
mov [esp+24], ebx
mov [image_of_eax], eax
mov [image_of_ebx], ebx
ret
 
.found1:
338,7 → 394,7
; in: ecx = partition number
; esi -> relative (for device) name
; ebx -> fileinfo
; out: [esp+36]=image of eax, [esp+24]=image of ebx
; out: [image_of_eax]=image of eax, [image_of_ebx]=image of ebx
 
fs_OnRamdisk:
cmp ecx, 1
351,11 → 407,11
; add edx, std_application_base_address
add ebx, 4
call dword [fs_RamdiskServices + eax*4]
mov [esp+36], eax
mov [esp+24], ebx
mov [image_of_eax], eax
mov [image_of_ebx], ebx
ret
.not_impl:
mov dword [esp+36], 2 ; not implemented
mov dword [image_of_eax], 2 ; not implemented
ret
 
fs_NotImplemented:
389,8 → 445,8
add ebx, 4
call dword [fs_FloppyServices + eax*4]
and [flp_status], 0
mov [esp+36], eax
mov [esp+24], ebx
mov [image_of_eax], eax
mov [image_of_ebx], ebx
ret
 
fs_FloppyServices:
440,7 → 496,7
.nf:
call free_hd_channel
and [hd1_status], 0
mov dword [esp+36], 5 ; not found
mov dword [image_of_eax], 5 ; not found
ret
@@:
mov [fat32part], ecx
457,13 → 513,13
call dword [fs_HdServices + eax*4]
call free_hd_channel
and [hd1_status], 0
mov [esp+36], eax
mov [esp+24], ebx
mov [image_of_eax], eax
mov [image_of_ebx], ebx
ret
.not_impl:
call free_hd_channel
and [hd1_status], 0
mov dword [esp+36], 2 ; not implemented
mov dword [image_of_eax], 2 ; not implemented
ret
 
fs_HdServices:
520,7 → 576,7
.nf:
call free_cd_channel
and [cd_status], 0
mov dword [esp+36], 5 ; not found
mov dword [image_of_eax], 5 ; not found
ret
@@:
mov ecx, [ebx+12]
533,13 → 589,13
call dword [fs_CdServices + eax*4]
call free_cd_channel
and [cd_status], 0
mov [esp+36], eax
mov [esp+24], ebx
mov [image_of_eax], eax
mov [image_of_ebx], ebx
ret
.not_impl:
call free_cd_channel
and [cd_status], 0
mov dword [esp+36], 2 ; not implemented
mov dword [image_of_eax], 2 ; not implemented
ret
 
fs_CdServices:
/kernel/trunk/fs/parse_fn.inc
0,0 → 1,183
;-------------------------------------------------------------------------
;
; ‡ ¬¥­  ¨¬¥­ ä ©«®¢
;
;
; SPraid
;
;-------------------------------------------------------------------------
 
; ¯¥à¥¡¨à ¥â ¯® ä ©«ã ¢ à¨ ­âë § ¬¥­
proc full_file_name stdcall,sourc,dest
locals
param rb 60
val rb 60
tmpsrc rb 60 ; ¢à¥¬¥­­®¥ åà ­¥­¨¥ ¯à¥®¡à §®¢ ­¨ï
endl
pushad
 
mov esi,[sourc]
mov edi,ebp
add edi,tmpsrc-ebp
@@:
lodsb
stosb
or al,al
jnz @b
 
mov al,[conf_file_loaded] ; âॡã¥âáï ¯à¨ ®¡à é¥­¨¨ ª ¯¥à¢®¬ã ä ©«ã (ª®­ä¨£ã)
or al,al
jnz @use_replace
jmp full_file_name_exit
 
;--------------------------------
@use_replace:
xor eax,eax
.loop:
push eax
mov ebx,ebp
add ebx,param-ebp
mov ecx,ebp
add ecx,val-ebp
invoke ini.get_par,sect, ebx, ecx, eax
 
mov bl,[param]
or bl,bl
jz .done
 
mov eax,ebp
add eax,tmpsrc-ebp
mov ebx,ebp
add ebx,param-ebp
mov ecx,ebp
add ecx,val-ebp
mov edx,[dest]
 
stdcall full_file_name_parse, eax,edx,ebx,ecx
mov esi,[dest]
mov edi,ebp
add edi,tmpsrc-ebp
@@:
lodsb
stosb
or al,al
jnz @b
pop eax
inc eax
jmp .loop
.done:
pop eax
full_file_name_exit:
 
mov eax,ebp
add eax,tmpsrc-ebp
stdcall full_file_name_parse , eax , [dest], sysdir_ , sys_path
popad
ret
endp
 
sect: db 'path',0
 
;
; à¥®¡à §®¢ âì ¨¬ï ¢ ¯®«­®¥. …᫨ ¢ ­ ç «¥ á⮨â
; sourc - áá뫪  ­  áâபã...
; dest - áá뫪  ­  ¡ãä¥à ªã¤  १ã«ìâ â «®¦¨âì
; def - áâப  è ¡«®­ ¤«ï ¯®¨áª 
; dval - ª 祬㠯à¨à ¢­¨¢ âì è ¡«®­
proc full_file_name_parse stdcall,sourc,dest,def,dval
; ¤«ï ®¤­®£®
pushad
 
mov eax,[sourc]
mov ebx,[def]
@@:
mov dl,[ebx]
mov cl,[eax]
cmp cl,0
je @@bad_s
cmp dl,0
je @@good
or cl,0x20
or dl,0x20
cmp cl,dl
jne @@bad
 
inc eax
inc ebx
jmp @b
 
@@bad_s:
cmp dl,0
je @@good
@@bad:
mov edi,[dest]
mov esi,[sourc]
@@:
lodsb
stosb
or al,al
jnz @b
jmp @@ret_ok
 
@@good:
push eax
mov edi,[dest]
mov esi,[dval]
@@:
lodsb
stosb
or al,al
jnz @b
 
@@goodl:
pop esi
dec edi
@@:
lodsb
stosb
or al,al
jnz @b
 
@@ret_ok:
popad
ret
 
endp
sys_dir_mess: db 'System dir is '
sys_path: db '/HD0/1/KOLIBRI',0,0
sysdir_ db '%sys%',0
 
; ¡¥à¥â ¯ à ¬¥âàë bx_from_load ¨ ¨áç¨â ä ©« ª®­ä¨£ãà æ¨¨
Parser_params:
pushad
mov ax,[BOOT_VAR+bx_from_load]
cmp al,'r' ; à ¬ ¤¨áª
jnz @f
mov [sys_path],dword '/RD/'
mov [sys_path+4],byte ah
mov [sys_path+5],word 0 ;0x002F
jmp .done
@@:
sub al,49
mov [sys_path],dword '/HDa'
mov [sys_path+3],byte al
mov [sys_path+4],byte '/'
mov [sys_path+5],byte ah
mov [sys_path+6],dword '/KOL'
mov [sys_path+10],dword 'IBRI'
mov [sys_path+14],word 0 ;0x002F
.done:
popad
ret