forked from KolibriOS/kolibrios
* efficient handling of file names substitution
* current directory support; new sysfunction 30 * fixed bug in load_file with files of size divisible by page size git-svn-id: svn://kolibrios.org@521 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
23bdfe5dc4
commit
4f326f77c6
@ -995,7 +995,7 @@ ramdisk_notroot_extend_dir:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
rd_find_lfn:
|
rd_find_lfn:
|
||||||
; in: esi->name
|
; in: esi+ebp -> name
|
||||||
; out: CF=1 - file not found
|
; out: CF=1 - file not found
|
||||||
; else CF=0 and edi->direntry
|
; else CF=0 and edi->direntry
|
||||||
push esi edi
|
push esi edi
|
||||||
@ -1007,6 +1007,7 @@ rd_find_lfn:
|
|||||||
jc .notfound
|
jc .notfound
|
||||||
cmp byte [esi], 0
|
cmp byte [esi], 0
|
||||||
jz .found
|
jz .found
|
||||||
|
.continue:
|
||||||
test byte [edi+11], 10h
|
test byte [edi+11], 10h
|
||||||
jz .notfound
|
jz .notfound
|
||||||
movzx eax, word [edi+26]
|
movzx eax, word [edi+26]
|
||||||
@ -1020,6 +1021,12 @@ rd_find_lfn:
|
|||||||
stc
|
stc
|
||||||
ret
|
ret
|
||||||
.found:
|
.found:
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
jmp .continue
|
||||||
|
@@:
|
||||||
mov eax, [esp+8]
|
mov eax, [esp+8]
|
||||||
add esp, 16 ; CF=0
|
add esp, 16 ; CF=0
|
||||||
pop esi
|
pop esi
|
||||||
@ -1501,36 +1508,53 @@ fs_RamdiskRewrite:
|
|||||||
cmp byte [esi], 0
|
cmp byte [esi], 0
|
||||||
jz @b
|
jz @b
|
||||||
pushad
|
pushad
|
||||||
xor ebp, ebp
|
xor edi, edi
|
||||||
push esi
|
push esi
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
@@:
|
@@:
|
||||||
lodsb
|
lodsb
|
||||||
test al, al
|
test al, al
|
||||||
jz @f
|
jz @f
|
||||||
cmp al, '/'
|
cmp al, '/'
|
||||||
jnz @b
|
jnz @b
|
||||||
lea ebp, [esi-1]
|
lea edi, [esi-1]
|
||||||
jmp @b
|
jmp @b
|
||||||
@@:
|
@@:
|
||||||
pop esi
|
pop esi
|
||||||
test ebp, ebp
|
test edi, edi
|
||||||
jnz .noroot
|
jnz .noroot
|
||||||
|
test ebp, ebp
|
||||||
|
jnz .hasebp
|
||||||
push ramdisk_root_extend_dir
|
push ramdisk_root_extend_dir
|
||||||
push ramdisk_root_next_write
|
push ramdisk_root_next_write
|
||||||
push ebp
|
push edi
|
||||||
push ramdisk_root_first
|
push ramdisk_root_first
|
||||||
push ramdisk_root_next
|
push ramdisk_root_next
|
||||||
jmp .common1
|
jmp .common1
|
||||||
|
.hasebp:
|
||||||
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
|
cmp byte [ebp], 0
|
||||||
|
jz .ret1
|
||||||
|
push ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
call rd_find_lfn
|
||||||
|
pop esi
|
||||||
|
jc .notfound0
|
||||||
|
jmp .common0
|
||||||
.noroot:
|
.noroot:
|
||||||
mov eax, ERROR_ACCESS_DENIED
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
cmp byte [ebp+1], 0
|
cmp byte [edi+1], 0
|
||||||
jz .ret1
|
jz .ret1
|
||||||
; check existence
|
; check existence
|
||||||
mov byte [ebp], 0
|
mov byte [edi], 0
|
||||||
|
push edi
|
||||||
call rd_find_lfn
|
call rd_find_lfn
|
||||||
mov byte [ebp], '/'
|
pop esi
|
||||||
lea esi, [ebp+1]
|
mov byte [esi], '/'
|
||||||
jnc @f
|
jnc @f
|
||||||
|
.notfound0:
|
||||||
mov eax, ERROR_FILE_NOT_FOUND
|
mov eax, ERROR_FILE_NOT_FOUND
|
||||||
.ret1:
|
.ret1:
|
||||||
mov [esp+28], eax
|
mov [esp+28], eax
|
||||||
@ -1538,6 +1562,8 @@ fs_RamdiskRewrite:
|
|||||||
xor ebx, ebx
|
xor ebx, ebx
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
|
inc esi
|
||||||
|
.common0:
|
||||||
test byte [edi+11], 0x10 ; must be directory
|
test byte [edi+11], 0x10 ; must be directory
|
||||||
mov eax, ERROR_ACCESS_DENIED
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
jz .ret1
|
jz .ret1
|
||||||
@ -2283,97 +2309,6 @@ fs_RamdiskSetFileInfo:
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; fs_RamdiskExecute - LFN variant for executing on sys floppy
|
|
||||||
;
|
|
||||||
; esi points to ramdisk filename (e.g. 'launcher')
|
|
||||||
; ebp points to full filename (e.g. '/rd/1/launcher')
|
|
||||||
; dword [ebx] = flags
|
|
||||||
; dword [ebx+4] = cmdline
|
|
||||||
;
|
|
||||||
; ret ebx,edx destroyed
|
|
||||||
; eax > 0 - PID, < 0 - error
|
|
||||||
;
|
|
||||||
;--------------------------------------------------------------
|
|
||||||
fs_RamdiskExecute:
|
|
||||||
mov edx, [ebx]
|
|
||||||
mov ebx, [ebx+4]
|
|
||||||
test ebx, ebx
|
|
||||||
jz @f
|
|
||||||
; add ebx, std_application_base_address
|
|
||||||
@@:
|
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; fs_RamdiskExecute.flags - second entry
|
|
||||||
;
|
|
||||||
; esi points to ramdisk filename (kernel address)
|
|
||||||
; ebp points to full filename
|
|
||||||
; edx flags
|
|
||||||
; ebx cmdline (kernel address)
|
|
||||||
;
|
|
||||||
; ret eax > 0 - PID, < 0 - error
|
|
||||||
;
|
|
||||||
;--------------------------------------------------------------
|
|
||||||
|
|
||||||
.flags:
|
|
||||||
cmp byte [esi], 0
|
|
||||||
jnz @f
|
|
||||||
; cannot execute root!
|
|
||||||
mov eax, -ERROR_ACCESS_DENIED
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
push edi
|
|
||||||
call rd_find_lfn
|
|
||||||
jnc .found
|
|
||||||
pop edi
|
|
||||||
mov eax, -ERROR_FILE_NOT_FOUND
|
|
||||||
ret
|
|
||||||
.found:
|
|
||||||
movzx eax, word [edi+26] ; cluster
|
|
||||||
push eax
|
|
||||||
push dword [edi+28] ; size
|
|
||||||
push .DoRead
|
|
||||||
call fs_execute
|
|
||||||
add esp, 12
|
|
||||||
pop edi
|
|
||||||
ret
|
|
||||||
|
|
||||||
.DoRead:
|
|
||||||
; read next block
|
|
||||||
; in: eax->parameters, edi->buffer
|
|
||||||
; out: eax = error code
|
|
||||||
pushad
|
|
||||||
cmp dword [eax], 0 ; file size
|
|
||||||
jz .eof
|
|
||||||
mov edx, [eax+4] ; cluster
|
|
||||||
lea esi, [edx+31]
|
|
||||||
shl esi, 9
|
|
||||||
add esi, RAMDISK
|
|
||||||
mov ecx, 512/4
|
|
||||||
rep movsd
|
|
||||||
mov ecx, [eax]
|
|
||||||
sub ecx, 512
|
|
||||||
jae @f
|
|
||||||
add edi, ecx
|
|
||||||
neg ecx
|
|
||||||
push eax
|
|
||||||
xor eax, eax
|
|
||||||
rep stosb
|
|
||||||
pop eax
|
|
||||||
@@:
|
|
||||||
mov [eax], ecx
|
|
||||||
mov dx, [edx*2+RAMDISK_FAT]
|
|
||||||
mov [eax+4], dx ; high word is already zero
|
|
||||||
popad
|
|
||||||
xor eax, eax
|
|
||||||
ret
|
|
||||||
.eof:
|
|
||||||
popad
|
|
||||||
mov eax, 6
|
|
||||||
ret
|
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
;----------------------------------------------------------------
|
||||||
;
|
;
|
||||||
; fs_RamdiskDelete - delete file or empty folder from ramdisk
|
; fs_RamdiskDelete - delete file or empty folder from ramdisk
|
||||||
|
@ -10,7 +10,7 @@
|
|||||||
conf_file_loaded: db 0 ; ä« £ § £à㧪¨ ª®ä¨£
|
conf_file_loaded: db 0 ; ä« £ § £à㧪¨ ª®ä¨£
|
||||||
conf_path_sect: db 'path',0
|
conf_path_sect: db 'path',0
|
||||||
|
|
||||||
conf_fname db '%sys%/sys.conf',0
|
conf_fname db '/%sys%/sys.conf',0
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -526,10 +526,12 @@ proc load_file stdcall, file_name:dword
|
|||||||
lea edi, [eax+ebx] ;cleanup remain space
|
lea edi, [eax+ebx] ;cleanup remain space
|
||||||
mov ecx, 4096 ;from file end
|
mov ecx, 4096 ;from file end
|
||||||
and ebx, 4095
|
and ebx, 4095
|
||||||
|
jz @f
|
||||||
sub ecx, ebx
|
sub ecx, ebx
|
||||||
xor eax, eax
|
xor eax, eax
|
||||||
cld
|
cld
|
||||||
rep stosb
|
rep stosb
|
||||||
|
@@:
|
||||||
mov ebx, [file_size]
|
mov ebx, [file_size]
|
||||||
pop eax
|
pop eax
|
||||||
ret
|
ret
|
||||||
@ -696,16 +698,16 @@ proc load_driver stdcall, driver_name:dword
|
|||||||
|
|
||||||
exports dd ? ;fake exports table
|
exports dd ? ;fake exports table
|
||||||
dd ?
|
dd ?
|
||||||
file_name rb 14+16+4+1 ; '/rd/1/drivers/<up-to-16-chars>.obj'
|
file_name rb 15+16+4+1 ; '/%sys%/drivers/<up-to-16-chars>.obj'
|
||||||
endl
|
endl
|
||||||
|
|
||||||
lea edx, [file_name]
|
lea edx, [file_name]
|
||||||
mov dword [edx], '%sys'
|
mov dword [edx], '/%sy'
|
||||||
mov dword [edx+4], '%/dr'
|
mov dword [edx+4], 's%/d'
|
||||||
mov dword [edx+8], 'iver'
|
mov dword [edx+8], 'rive'
|
||||||
mov word [edx+12], 's/'
|
mov dword [edx+12], 'rs/'
|
||||||
mov esi, [driver_name]
|
mov esi, [driver_name]
|
||||||
lea edi, [edx+14]
|
lea edi, [edx+15]
|
||||||
mov ecx, 16
|
mov ecx, 16
|
||||||
@@:
|
@@:
|
||||||
lodsb
|
lodsb
|
||||||
|
@ -15,7 +15,6 @@ macro library [name,fname]
|
|||||||
common
|
common
|
||||||
dd 0
|
dd 0
|
||||||
forward
|
forward
|
||||||
align 4
|
|
||||||
__#name#_library_name__ db fname,0
|
__#name#_library_name__ db fname,0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,18 +28,17 @@ macro import lname,[name,sname]
|
|||||||
common
|
common
|
||||||
dd 0
|
dd 0
|
||||||
forward
|
forward
|
||||||
align 4
|
|
||||||
__#name#_import_name__ db sname,0
|
__#name#_import_name__ db sname,0
|
||||||
}
|
}
|
||||||
|
|
||||||
macro export [name,sname]
|
macro export [name,sname]
|
||||||
{
|
{
|
||||||
|
align 4
|
||||||
forward
|
forward
|
||||||
dd __#name#_export_name__,name
|
dd __#name#_export_name__,name
|
||||||
common
|
common
|
||||||
dd 0
|
dd 0
|
||||||
forward
|
forward
|
||||||
align 4
|
|
||||||
__#name#_export_name__ db sname,0
|
__#name#_export_name__ db sname,0
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -159,7 +157,9 @@ proc dll.Load, import_table:dword
|
|||||||
|
|
||||||
mov edi,s_libname
|
mov edi,s_libname
|
||||||
|
|
||||||
mov esi,sys_path
|
mov al, '/'
|
||||||
|
stosb
|
||||||
|
mov esi,sysdir_path
|
||||||
@@: lodsb
|
@@: lodsb
|
||||||
stosb
|
stosb
|
||||||
or al,al
|
or al,al
|
||||||
@ -306,4 +306,6 @@ proc mem.Free mptr ;//////////////////////////////////////////////////////////
|
|||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
uglobal
|
||||||
s_libname db 64 dup (0)
|
s_libname db 64 dup (0)
|
||||||
|
endg
|
||||||
|
@ -646,10 +646,15 @@ term9:
|
|||||||
|
|
||||||
mov ebx, [.slot]
|
mov ebx, [.slot]
|
||||||
shl ebx, 8
|
shl ebx, 8
|
||||||
|
push ebx
|
||||||
mov ebx,[SLOT_BASE+ebx+APPDATA.pl0_stack]
|
mov ebx,[SLOT_BASE+ebx+APPDATA.pl0_stack]
|
||||||
|
|
||||||
stdcall kernel_free, ebx
|
stdcall kernel_free, ebx
|
||||||
|
|
||||||
|
pop ebx
|
||||||
|
mov ebx,[SLOT_BASE+ebx+APPDATA.cur_dir]
|
||||||
|
stdcall kernel_free, ebx
|
||||||
|
|
||||||
mov edi, [.slot]
|
mov edi, [.slot]
|
||||||
shl edi,8
|
shl edi,8
|
||||||
add edi,SLOT_BASE
|
add edi,SLOT_BASE
|
||||||
|
@ -169,7 +169,7 @@ iglobal
|
|||||||
dd undefined_syscall ; 27-reserved
|
dd undefined_syscall ; 27-reserved
|
||||||
dd sys_sb16II ; 28-SetSb16
|
dd sys_sb16II ; 28-SetSb16
|
||||||
dd sys_date ; 29-GetDate
|
dd sys_date ; 29-GetDate
|
||||||
dd undefined_syscall ; 30-reserved
|
dd sys_current_directory ; 30-Get/SetCurrentDirectory
|
||||||
dd undefined_syscall ; 31-reserved
|
dd undefined_syscall ; 31-reserved
|
||||||
dd syscall_delramdiskfile ; 32-DelRamdiskFile
|
dd syscall_delramdiskfile ; 32-DelRamdiskFile
|
||||||
dd syscall_writeramdiskfile; 33-WriteRamdiskFile
|
dd syscall_writeramdiskfile; 33-WriteRamdiskFile
|
||||||
|
@ -44,6 +44,10 @@ macro _clear_ op
|
|||||||
rep stosd
|
rep stosd
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fs_execute_from_sysdir:
|
||||||
|
xor ebx, ebx
|
||||||
|
xor edx, edx
|
||||||
|
mov esi, sysdir_path
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
proc fs_execute
|
proc fs_execute
|
||||||
@ -80,10 +84,34 @@ proc fs_execute
|
|||||||
|
|
||||||
; [ebp] pointer to filename
|
; [ebp] pointer to filename
|
||||||
|
|
||||||
lea eax, [filename]
|
lea edi, [filename]
|
||||||
mov dword [eax+1020],0 ;force terminate
|
lea ecx, [edi+1024]
|
||||||
;string
|
mov al, '/'
|
||||||
stdcall strncpy, eax, [ebp], 1023
|
stosb
|
||||||
|
@@:
|
||||||
|
cmp edi, ecx
|
||||||
|
jae .bigfilename
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
mov esi, [ebp]
|
||||||
|
test esi, esi
|
||||||
|
jz .namecopied
|
||||||
|
mov byte [edi-1], '/'
|
||||||
|
@@:
|
||||||
|
cmp edi, ecx
|
||||||
|
jae .bigfilename
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
jmp .namecopied
|
||||||
|
.bigfilename:
|
||||||
|
popad
|
||||||
|
mov eax, -ERROR_FILE_NOT_FOUND
|
||||||
|
ret
|
||||||
|
.namecopied:
|
||||||
|
|
||||||
mov [cmdline], ebx
|
mov [cmdline], ebx
|
||||||
test ebx, ebx
|
test ebx, ebx
|
||||||
@ -688,7 +716,7 @@ proc read_process_memory
|
|||||||
|
|
||||||
mov [slot], eax
|
mov [slot], eax
|
||||||
mov [buff], ebx
|
mov [buff], ebx
|
||||||
mov [r_count], ecx
|
and [r_count], 0
|
||||||
mov [tmp_r_cnt], ecx
|
mov [tmp_r_cnt], ecx
|
||||||
mov [offset], edx
|
mov [offset], edx
|
||||||
|
|
||||||
@ -724,6 +752,7 @@ proc read_process_memory
|
|||||||
mov edi, [buff]
|
mov edi, [buff]
|
||||||
mov edx, ecx
|
mov edx, ecx
|
||||||
rep movsb
|
rep movsb
|
||||||
|
add [r_count], edx
|
||||||
|
|
||||||
add [offset], edx
|
add [offset], edx
|
||||||
sub [tmp_r_cnt], edx
|
sub [tmp_r_cnt], edx
|
||||||
@ -754,7 +783,7 @@ proc write_process_memory
|
|||||||
|
|
||||||
mov [slot], eax
|
mov [slot], eax
|
||||||
mov [buff], ebx
|
mov [buff], ebx
|
||||||
mov [w_count], ecx
|
and [w_count], 0
|
||||||
mov [tmp_w_cnt], ecx
|
mov [tmp_w_cnt], ecx
|
||||||
mov [offset], edx
|
mov [offset], edx
|
||||||
|
|
||||||
@ -791,6 +820,7 @@ proc write_process_memory
|
|||||||
mov edx, ecx
|
mov edx, ecx
|
||||||
rep movsb
|
rep movsb
|
||||||
|
|
||||||
|
add [w_count], edx
|
||||||
add [offset], edx
|
add [offset], edx
|
||||||
sub [tmp_w_cnt], edx
|
sub [tmp_w_cnt], edx
|
||||||
jnz .read_mem
|
jnz .read_mem
|
||||||
@ -964,6 +994,16 @@ proc set_app_params stdcall,slot:dword, params:dword,\
|
|||||||
mov eax, [pl0_stack]
|
mov eax, [pl0_stack]
|
||||||
mov [SLOT_BASE+APPDATA.pl0_stack+ebx],eax
|
mov [SLOT_BASE+APPDATA.pl0_stack+ebx],eax
|
||||||
|
|
||||||
|
push ebx
|
||||||
|
stdcall kernel_alloc, 0x1000
|
||||||
|
pop ebx
|
||||||
|
mov esi,[current_slot]
|
||||||
|
mov esi,[esi+APPDATA.cur_dir]
|
||||||
|
mov ecx,0x1000/4
|
||||||
|
mov edi,eax
|
||||||
|
mov [ebx+SLOT_BASE+APPDATA.cur_dir],eax
|
||||||
|
rep movsd
|
||||||
|
|
||||||
shr ebx,3
|
shr ebx,3
|
||||||
mov eax, new_app_base
|
mov eax, new_app_base
|
||||||
mov dword [CURRENT_TASK+ebx+0x10],eax
|
mov dword [CURRENT_TASK+ebx+0x10],eax
|
||||||
|
@ -82,30 +82,15 @@ szSTART db 'START',0
|
|||||||
szEXPORTS db 'EXPORTS',0
|
szEXPORTS db 'EXPORTS',0
|
||||||
szIMPORTS db 'IMPORTS',0
|
szIMPORTS db 'IMPORTS',0
|
||||||
|
|
||||||
firstapp db '%sys%/LAUNCHER',0
|
firstapp db 'LAUNCHER',0
|
||||||
|
|
||||||
if 0
|
|
||||||
char dd 0,0,0
|
|
||||||
dd 2560
|
|
||||||
dd FONT_I
|
|
||||||
db '%sys%/FONTS/CHAR.MT',0
|
|
||||||
|
|
||||||
char2 dd 0,0,0
|
|
||||||
dd 2560
|
|
||||||
dd FONT_II
|
|
||||||
db '%sys%/FONTS/CHAR2.MT',0
|
|
||||||
else
|
|
||||||
|
|
||||||
char db '%sys%/FONTS/CHAR.MT',0
|
|
||||||
char2 db '%sys%/FONTS/CHAR2.MT',0
|
|
||||||
|
|
||||||
end if
|
|
||||||
|
|
||||||
|
char db '/%sys%/FONTS/CHAR.MT',0
|
||||||
|
char2 db '/%sys%/FONTS/CHAR2.MT',0
|
||||||
|
|
||||||
bootpath db '/KOLIBRI '
|
bootpath db '/KOLIBRI '
|
||||||
bootpath2 db 0
|
bootpath2 db 0
|
||||||
vmode db 'drivers/VMODE.MDR',0
|
vmode db 'drivers/VMODE.MDR',0
|
||||||
vrr_m db '%sys%/VRR_M',0
|
vrr_m db 'VRR_M',0
|
||||||
kernel_file db 'KERNEL MNT'
|
kernel_file db 'KERNEL MNT'
|
||||||
|
|
||||||
|
|
||||||
|
@ -1666,6 +1666,31 @@ db 'Kolibri',0
|
|||||||
‡ ¬¥ח ¨ן:
|
‡ ¬¥ח ¨ן:
|
||||||
* ‘¨בג¥¬דמ ₪ גד ¬®¦® דבג ®¢¨גל הד×ז¨¥© 22.
|
* ‘¨בג¥¬דמ ₪ גד ¬®¦® דבג ®¢¨גל הד×ז¨¥© 22.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
================ ”γ<CEB3>ζ¨ο 30 - ΰ ΅®β α β¥<CEB2>γ饩 ― ―<C2A0>®©. ===============
|
||||||
|
======================================================================
|
||||||
|
|
||||||
|
-------- <20>®¤δγ<CEB3>ζ¨ο 1 - γαβ ®Ά¨βμ β¥<CEB2>γιγξ ― ―<C2A0>γ ¤«ο ―®β®<CEB2> . ---------
|
||||||
|
<EFBFBD> ΰ ¬¥βΰλ:
|
||||||
|
* eax = 30 - ®¬¥ΰ δγ<CEB3>樨
|
||||||
|
* ebx = 1 - ®¬¥ΰ ―®¤δγ<CEB3>樨
|
||||||
|
* ecx = γ<> § ⥫μ ASCIIZ-αβΰ®<CEB0>γ α ―γβρ¬ <20> ®Ά®© β¥<CEB2>γ饩 ― ―<C2A0>¥
|
||||||
|
‚®§Άΰ ι ¥¬®¥ § 票¥:
|
||||||
|
* δγ<CEB3>ζ¨ο ¥ Ά®§Άΰ ι ¥β § 票ο
|
||||||
|
|
||||||
|
--------- <20>®¤δγ<CEB3>ζ¨ο 2 - ―®«γη¨βμ β¥<CEB2>γιγξ ― ―<C2A0>γ ¤«ο ―®β®<CEB2> . ----------
|
||||||
|
<EFBFBD> ΰ ¬¥βΰλ:
|
||||||
|
* eax = 30 - ®¬¥ΰ δγ<CEB3>樨
|
||||||
|
* ebx = 2 - ®¬¥ΰ ―®¤δγ<CEB3>樨
|
||||||
|
* ecx = γ<> § β¥«μ ΅γδ¥ΰ
|
||||||
|
* edx = ΰ §¬¥ΰ ΅γδ¥ΰ
|
||||||
|
‚®§Άΰ ι ¥¬®¥ § 票¥:
|
||||||
|
* eax = ¤«¨ ¨¬¥¨ β¥<CEB2>γ饩 ― ―<C2A0>¨ (Ά<>«ξη ο § Ά¥ΰθ ξ騩 0)
|
||||||
|
‡ ¬¥η ¨ο:
|
||||||
|
* …᫨ ΰ §¬¥ΰ ΅γδ¥ΰ ¥¤®αβ β®η® ¤«ο <20>®―¨ΰ®Ά ¨ο Άα¥£® ¨¬¥¨,
|
||||||
|
<20>®―¨ΰγξβαο β®«μ<C2AB>® ―¥ΰΆλ¥ (edx-1) ΅ ©β
|
||||||
|
¨ Ά <20>®ζ¥ αβ Ά¨βαο § Ά¥ΰθ ξ騩 0.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
================ ”ד×ז¨ן 32 - ד₪ «¨גל ה ©« ב א ¬₪¨ב× . ===============
|
================ ”ד×ז¨ן 32 - ד₪ «¨גל ה ©« ב א ¬₪¨ב× . ===============
|
||||||
======================================================================
|
======================================================================
|
||||||
|
@ -1641,6 +1641,30 @@ Returned value:
|
|||||||
Remarks:
|
Remarks:
|
||||||
* To set system date use function 22.
|
* To set system date use function 22.
|
||||||
|
|
||||||
|
======================================================================
|
||||||
|
============= Function 30 - work with the current folder. ============
|
||||||
|
======================================================================
|
||||||
|
|
||||||
|
--------- Subfunction 1 - set current folder for the thread. ---------
|
||||||
|
Parameters:
|
||||||
|
* eax = 30 - function number
|
||||||
|
* ebx = 1 - subfunction number
|
||||||
|
* ecx = pointer to ASCIIZ-string with the path to new current folder
|
||||||
|
Returned value:
|
||||||
|
* function does not return value
|
||||||
|
|
||||||
|
--------- Subfunction 2 - get current folder for the thread. ---------
|
||||||
|
Parameters:
|
||||||
|
* eax = 30 - function number
|
||||||
|
* ebx = 2 - subfunction number
|
||||||
|
* ecx = pointer to buffer
|
||||||
|
* edx = size of buffer
|
||||||
|
Returned value:
|
||||||
|
* eax = size of the current folder's name (including terminating 0)
|
||||||
|
Remarks:
|
||||||
|
* If the buffer is too small to hold all data, only first (edx-1)
|
||||||
|
bytes are copied and than terminating 0 is inserted.
|
||||||
|
|
||||||
======================================================================
|
======================================================================
|
||||||
=============== Function 32 - delete file from ramdisk. ==============
|
=============== Function 32 - delete file from ramdisk. ==============
|
||||||
======================================================================
|
======================================================================
|
||||||
|
@ -809,7 +809,7 @@ flp_notroot_extend_dir:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
fd_find_lfn:
|
fd_find_lfn:
|
||||||
; in: esi->name
|
; in: esi+ebp -> name
|
||||||
; out: CF=1 - file not found
|
; out: CF=1 - file not found
|
||||||
; else CF=0 and edi->direntry, eax=directory cluster (0 for root)
|
; else CF=0 and edi->direntry, eax=directory cluster (0 for root)
|
||||||
push esi edi
|
push esi edi
|
||||||
@ -821,6 +821,7 @@ fd_find_lfn:
|
|||||||
jc .notfound
|
jc .notfound
|
||||||
cmp byte [esi], 0
|
cmp byte [esi], 0
|
||||||
jz .found
|
jz .found
|
||||||
|
.continue:
|
||||||
test byte [edi+11], 10h
|
test byte [edi+11], 10h
|
||||||
jz .notfound
|
jz .notfound
|
||||||
movzx eax, word [edi+26] ; cluster
|
movzx eax, word [edi+26] ; cluster
|
||||||
@ -834,6 +835,12 @@ fd_find_lfn:
|
|||||||
stc
|
stc
|
||||||
ret
|
ret
|
||||||
.found:
|
.found:
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
jmp .continue
|
||||||
|
@@:
|
||||||
mov eax, [esp+8]
|
mov eax, [esp+8]
|
||||||
add eax, 31
|
add eax, 31
|
||||||
cmp dword [esp], flp_root_next
|
cmp dword [esp], flp_root_next
|
||||||
@ -1116,20 +1123,25 @@ fs_FloppyRewrite:
|
|||||||
cmp [FDC_Status], 0
|
cmp [FDC_Status], 0
|
||||||
jnz fsfrfe
|
jnz fsfrfe
|
||||||
pushad
|
pushad
|
||||||
xor ebp, ebp
|
xor edi, edi
|
||||||
push esi
|
push esi
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
@@:
|
@@:
|
||||||
lodsb
|
lodsb
|
||||||
test al, al
|
test al, al
|
||||||
jz @f
|
jz @f
|
||||||
cmp al, '/'
|
cmp al, '/'
|
||||||
jnz @b
|
jnz @b
|
||||||
lea ebp, [esi-1]
|
lea edi, [esi-1]
|
||||||
jmp @b
|
jmp @b
|
||||||
@@:
|
@@:
|
||||||
pop esi
|
pop esi
|
||||||
test ebp, ebp
|
test edi, edi
|
||||||
jnz .noroot
|
jnz .noroot
|
||||||
|
test ebp, ebp
|
||||||
|
jnz .hasebp
|
||||||
call read_flp_root
|
call read_flp_root
|
||||||
cmp [FDC_Status], 0
|
cmp [FDC_Status], 0
|
||||||
jnz fsfrfe2
|
jnz fsfrfe2
|
||||||
@ -1142,16 +1154,28 @@ fs_FloppyRewrite:
|
|||||||
push flp_rootmem_first
|
push flp_rootmem_first
|
||||||
push flp_rootmem_next
|
push flp_rootmem_next
|
||||||
jmp .common1
|
jmp .common1
|
||||||
|
.hasebp:
|
||||||
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
|
cmp byte [ebp], 0
|
||||||
|
jz .ret1
|
||||||
|
push ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
call fd_find_lfn
|
||||||
|
pop esi
|
||||||
|
jc .notfound0
|
||||||
|
jmp .common0
|
||||||
.noroot:
|
.noroot:
|
||||||
mov eax, ERROR_ACCESS_DENIED
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
cmp byte [ebp+1], 0
|
cmp byte [edi+1], 0
|
||||||
jz .ret1
|
jz .ret1
|
||||||
; check existence
|
; check existence
|
||||||
mov byte [ebp], 0
|
mov byte [edi], 0
|
||||||
|
push edi
|
||||||
call fd_find_lfn
|
call fd_find_lfn
|
||||||
mov byte [ebp], '/'
|
pop esi
|
||||||
lea esi, [ebp+1]
|
mov byte [esi], '/'
|
||||||
jnc @f
|
jnc @f
|
||||||
|
.notfound0:
|
||||||
mov eax, ERROR_FILE_NOT_FOUND
|
mov eax, ERROR_FILE_NOT_FOUND
|
||||||
.ret1:
|
.ret1:
|
||||||
mov [esp+28], eax
|
mov [esp+28], eax
|
||||||
@ -1159,6 +1183,8 @@ fs_FloppyRewrite:
|
|||||||
xor ebx, ebx
|
xor ebx, ebx
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
|
inc esi
|
||||||
|
.common0:
|
||||||
test byte [edi+11], 0x10 ; must be directory
|
test byte [edi+11], 0x10 ; must be directory
|
||||||
mov eax, ERROR_ACCESS_DENIED
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
jz .ret1
|
jz .ret1
|
||||||
@ -2109,110 +2135,6 @@ fs_FloppySetFileInfo:
|
|||||||
@@:
|
@@:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
if 0
|
|
||||||
;----------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; fs_FloppyExecute - LFN variant for executing from floppy
|
|
||||||
;
|
|
||||||
; esi points to floppy filename (e.g. 'dir1/name')
|
|
||||||
; ebp points to full filename (e.g. '/fd/1/dir1/name')
|
|
||||||
; dword [ebx] = flags
|
|
||||||
; dword [ebx+4] = cmdline
|
|
||||||
;
|
|
||||||
; ret ebx,edx destroyed
|
|
||||||
; eax > 0 - PID, < 0 - error
|
|
||||||
;
|
|
||||||
;--------------------------------------------------------------
|
|
||||||
fs_FloppyExecute:
|
|
||||||
mov edx, [ebx]
|
|
||||||
mov ebx, [ebx+4]
|
|
||||||
test ebx, ebx
|
|
||||||
jz @f
|
|
||||||
; add ebx, std_application_base_address
|
|
||||||
@@:
|
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; fs_FloppyExecute.flags - second entry
|
|
||||||
;
|
|
||||||
; esi points to floppy filename (kernel address)
|
|
||||||
; ebp points to full filename
|
|
||||||
; edx flags
|
|
||||||
; ebx cmdline (kernel address)
|
|
||||||
;
|
|
||||||
; ret eax > 0 - PID, < 0 - error
|
|
||||||
;
|
|
||||||
;--------------------------------------------------------------
|
|
||||||
|
|
||||||
.flags:
|
|
||||||
call read_flp_fat
|
|
||||||
cmp byte [esi], 0
|
|
||||||
jnz @f
|
|
||||||
; cannot execute root!
|
|
||||||
mov eax, -ERROR_ACCESS_DENIED
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
push edi
|
|
||||||
call fd_find_lfn
|
|
||||||
jnc .found
|
|
||||||
pop edi
|
|
||||||
mov eax, -ERROR_FILE_NOT_FOUND
|
|
||||||
ret
|
|
||||||
.found:
|
|
||||||
movzx eax, word [edi+26] ; cluster
|
|
||||||
push eax
|
|
||||||
push dword [edi+28] ; size
|
|
||||||
push .DoRead
|
|
||||||
call fs_execute
|
|
||||||
add esp, 12
|
|
||||||
pop edi
|
|
||||||
ret
|
|
||||||
|
|
||||||
.DoRead:
|
|
||||||
; read next block
|
|
||||||
; in: eax->parameters, edi->buffer
|
|
||||||
; out: eax = error code
|
|
||||||
pushad
|
|
||||||
cmp dword [eax], 0 ; file size
|
|
||||||
jz .eof
|
|
||||||
mov eax, [eax+4] ; cluster
|
|
||||||
add eax, 31
|
|
||||||
call read_chs_sector
|
|
||||||
cmp [FDC_Status], 0
|
|
||||||
jnz .err
|
|
||||||
pop edi
|
|
||||||
mov esi, FDD_BUFF
|
|
||||||
push edi
|
|
||||||
mov ecx, 512/4
|
|
||||||
rep movsd
|
|
||||||
mov eax, [esp+28]
|
|
||||||
mov ecx, [eax]
|
|
||||||
sub ecx, 512
|
|
||||||
jae @f
|
|
||||||
add edi, ecx
|
|
||||||
neg ecx
|
|
||||||
push eax
|
|
||||||
xor eax, eax
|
|
||||||
rep stosb
|
|
||||||
pop eax
|
|
||||||
@@:
|
|
||||||
mov [eax], ecx
|
|
||||||
mov edx, [eax+4]
|
|
||||||
mov dx, [edx*2+FLOPPY_FAT]
|
|
||||||
mov [eax+4], dx ; high word is already zero
|
|
||||||
popad
|
|
||||||
xor eax, eax
|
|
||||||
ret
|
|
||||||
.eof:
|
|
||||||
popad
|
|
||||||
mov eax, 6
|
|
||||||
ret
|
|
||||||
.err:
|
|
||||||
popad
|
|
||||||
mov eax, 11
|
|
||||||
ret
|
|
||||||
end if
|
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
;----------------------------------------------------------------
|
||||||
;
|
;
|
||||||
; fs_FloppyDelete - delete file or empty folder from floppy
|
; fs_FloppyDelete - delete file or empty folder from floppy
|
||||||
|
@ -956,7 +956,7 @@ update_disk:
|
|||||||
|
|
||||||
; \begin{diamond}
|
; \begin{diamond}
|
||||||
hd_find_lfn:
|
hd_find_lfn:
|
||||||
; in: esi->name
|
; in: esi+ebp -> name
|
||||||
; out: CF=1 - file not found
|
; out: CF=1 - file not found
|
||||||
; else CF=0 and edi->direntry, eax=sector
|
; else CF=0 and edi->direntry, eax=sector
|
||||||
; destroys eax
|
; destroys eax
|
||||||
@ -973,6 +973,7 @@ hd_find_lfn:
|
|||||||
jc .notfound
|
jc .notfound
|
||||||
cmp byte [esi], 0
|
cmp byte [esi], 0
|
||||||
jz .found
|
jz .found
|
||||||
|
.continue:
|
||||||
test byte [edi+11], 10h
|
test byte [edi+11], 10h
|
||||||
jz .notfound
|
jz .notfound
|
||||||
and dword [esp+12], 0
|
and dword [esp+12], 0
|
||||||
@ -989,6 +990,12 @@ hd_find_lfn:
|
|||||||
stc
|
stc
|
||||||
ret
|
ret
|
||||||
.found:
|
.found:
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
jmp .continue
|
||||||
|
@@:
|
||||||
lea eax, [esp+8]
|
lea eax, [esp+8]
|
||||||
cmp dword [eax], 0
|
cmp dword [eax], 0
|
||||||
jz .root
|
jz .root
|
||||||
@ -1573,20 +1580,25 @@ fs_HdRewrite:
|
|||||||
cmp byte [esi], 0
|
cmp byte [esi], 0
|
||||||
jz fshrad
|
jz fshrad
|
||||||
pushad
|
pushad
|
||||||
xor ebp, ebp
|
xor edi, edi
|
||||||
push esi
|
push esi
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
@@:
|
@@:
|
||||||
lodsb
|
lodsb
|
||||||
test al, al
|
test al, al
|
||||||
jz @f
|
jz @f
|
||||||
cmp al, '/'
|
cmp al, '/'
|
||||||
jnz @b
|
jnz @b
|
||||||
lea ebp, [esi-1]
|
lea edi, [esi-1]
|
||||||
jmp @b
|
jmp @b
|
||||||
@@:
|
@@:
|
||||||
pop esi
|
pop esi
|
||||||
test ebp, ebp
|
test edi, edi
|
||||||
jnz .noroot
|
jnz .noroot
|
||||||
|
test ebp, ebp
|
||||||
|
jnz .hasebp
|
||||||
mov ebp, [ROOT_CLUSTER]
|
mov ebp, [ROOT_CLUSTER]
|
||||||
cmp [fs_type], 32
|
cmp [fs_type], 32
|
||||||
jz .pushnotroot
|
jz .pushnotroot
|
||||||
@ -1600,16 +1612,28 @@ fs_HdRewrite:
|
|||||||
push fat16_root_first
|
push fat16_root_first
|
||||||
push fat16_root_next
|
push fat16_root_next
|
||||||
jmp .common1
|
jmp .common1
|
||||||
|
.hasebp:
|
||||||
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
|
cmp byte [ebp], 0
|
||||||
|
jz .ret1
|
||||||
|
push ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
call hd_find_lfn
|
||||||
|
pop esi
|
||||||
|
jc .notfound0
|
||||||
|
jmp .common0
|
||||||
.noroot:
|
.noroot:
|
||||||
mov eax, ERROR_ACCESS_DENIED
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
cmp byte [ebp+1], 0
|
cmp byte [edi+1], 0
|
||||||
jz .ret1
|
jz .ret1
|
||||||
; check existence
|
; check existence
|
||||||
mov byte [ebp], 0
|
mov byte [edi], 0
|
||||||
|
push edi
|
||||||
call hd_find_lfn
|
call hd_find_lfn
|
||||||
mov byte [ebp], '/'
|
pop esi
|
||||||
lea esi, [ebp+1]
|
mov byte [esi], '/'
|
||||||
jnc @f
|
jnc @f
|
||||||
|
.notfound0:
|
||||||
mov eax, ERROR_FILE_NOT_FOUND
|
mov eax, ERROR_FILE_NOT_FOUND
|
||||||
.ret1:
|
.ret1:
|
||||||
mov [esp+28], eax
|
mov [esp+28], eax
|
||||||
@ -1617,6 +1641,8 @@ fs_HdRewrite:
|
|||||||
xor ebx, ebx
|
xor ebx, ebx
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
|
inc esi
|
||||||
|
.common0:
|
||||||
test byte [edi+11], 0x10 ; must be directory
|
test byte [edi+11], 0x10 ; must be directory
|
||||||
mov eax, ERROR_ACCESS_DENIED
|
mov eax, ERROR_ACCESS_DENIED
|
||||||
jz .ret1
|
jz .ret1
|
||||||
@ -2723,129 +2749,6 @@ fs_HdSetFileInfo:
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
if 0 ; starting from revision 237 execute is implemented in taskman.inc
|
|
||||||
; through fs_XxxGetFileInfo and fs_XxxRead
|
|
||||||
;----------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; fs_HdExecute - LFN variant for executing from harddisk
|
|
||||||
;
|
|
||||||
; esi points to hd filename (e.g. 'dir1/name')
|
|
||||||
; ebp points to full filename (e.g. '/hd0/1/dir1/name')
|
|
||||||
; dword [ebx] = flags
|
|
||||||
; dword [ebx+4] = cmdline
|
|
||||||
;
|
|
||||||
; ret ebx,edx destroyed
|
|
||||||
; eax > 0 - PID, < 0 - error
|
|
||||||
;
|
|
||||||
;--------------------------------------------------------------
|
|
||||||
fs_HdExecute:
|
|
||||||
mov edx, [ebx]
|
|
||||||
mov ebx, [ebx+4]
|
|
||||||
test ebx, ebx
|
|
||||||
jz @f
|
|
||||||
; add ebx, std_application_base_address
|
|
||||||
@@:
|
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; fs_HdExecute.flags - second entry
|
|
||||||
;
|
|
||||||
; esi points to floppy filename (kernel address)
|
|
||||||
; ebp points to full filename
|
|
||||||
; edx flags
|
|
||||||
; ebx cmdline (kernel address)
|
|
||||||
;
|
|
||||||
; ret eax > 0 - PID, < 0 - error
|
|
||||||
;
|
|
||||||
;--------------------------------------------------------------
|
|
||||||
|
|
||||||
.flags:
|
|
||||||
cmp [fat_type], 0
|
|
||||||
jnz @f
|
|
||||||
mov eax, -ERROR_UNKNOWN_FS
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
cmp byte [esi], 0
|
|
||||||
jnz @f
|
|
||||||
; cannot execute root!
|
|
||||||
mov eax, -ERROR_ACCESS_DENIED
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
push edi
|
|
||||||
call hd_find_lfn
|
|
||||||
jnc .found
|
|
||||||
pop edi
|
|
||||||
mov eax, -ERROR_FILE_NOT_FOUND
|
|
||||||
cmp [hd_error], 0
|
|
||||||
jz @f
|
|
||||||
mov al, -11
|
|
||||||
@@:
|
|
||||||
ret
|
|
||||||
.found:
|
|
||||||
mov eax, [edi+20-2]
|
|
||||||
mov ax, [edi+26]
|
|
||||||
push 0
|
|
||||||
push eax
|
|
||||||
push dword [edi+28] ; size
|
|
||||||
push .DoRead
|
|
||||||
call fs_execute
|
|
||||||
add esp, 16
|
|
||||||
pop edi
|
|
||||||
ret
|
|
||||||
|
|
||||||
.DoRead:
|
|
||||||
; read next block
|
|
||||||
; in: eax->parameters, edi->buffer
|
|
||||||
; out: eax = error code
|
|
||||||
pushad
|
|
||||||
cmp dword [eax], 0 ; file size
|
|
||||||
jz .eof
|
|
||||||
add eax, 4
|
|
||||||
call fat_get_sector
|
|
||||||
mov ebx, edi
|
|
||||||
call hd_read
|
|
||||||
cmp [hd_error], 0
|
|
||||||
jnz .err
|
|
||||||
mov eax, [esp+28]
|
|
||||||
mov ecx, [eax]
|
|
||||||
sub ecx, 512
|
|
||||||
jae @f
|
|
||||||
lea edi, [edi+ecx+512]
|
|
||||||
neg ecx
|
|
||||||
push eax
|
|
||||||
xor eax, eax
|
|
||||||
rep stosb
|
|
||||||
pop eax
|
|
||||||
@@:
|
|
||||||
mov [eax], ecx
|
|
||||||
mov edx, [eax+8]
|
|
||||||
inc edx
|
|
||||||
cmp edx, [SECTORS_PER_CLUSTER]
|
|
||||||
jb @f
|
|
||||||
push eax
|
|
||||||
mov eax, [eax+4]
|
|
||||||
call get_FAT
|
|
||||||
cmp [hd_error], 0
|
|
||||||
jnz .err
|
|
||||||
mov ecx, eax
|
|
||||||
pop eax
|
|
||||||
mov [eax+4], ecx
|
|
||||||
xor edx, edx
|
|
||||||
@@:
|
|
||||||
mov [eax+8], edx
|
|
||||||
popad
|
|
||||||
xor eax, eax
|
|
||||||
ret
|
|
||||||
.eof:
|
|
||||||
popad
|
|
||||||
mov eax, 6
|
|
||||||
ret
|
|
||||||
.err:
|
|
||||||
popad
|
|
||||||
mov eax, 11
|
|
||||||
ret
|
|
||||||
end if
|
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
;----------------------------------------------------------------
|
||||||
;
|
;
|
||||||
; fs_HdDelete - delete file or empty folder from hard disk
|
; fs_HdDelete - delete file or empty folder from hard disk
|
||||||
|
@ -6,8 +6,8 @@ $Revision$
|
|||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
|
|
||||||
image_of_eax EQU esp+44 ;36
|
image_of_eax EQU esp+36
|
||||||
image_of_ebx EQU esp+32 ;24
|
image_of_ebx EQU esp+24
|
||||||
|
|
||||||
; System function 70 - files with long names (LFN)
|
; System function 70 - files with long names (LFN)
|
||||||
; diamond, 2006
|
; diamond, 2006
|
||||||
@ -82,12 +82,6 @@ virtual_root_query:
|
|||||||
dd 0
|
dd 0
|
||||||
endg
|
endg
|
||||||
|
|
||||||
end_of_file_system_lfn:
|
|
||||||
pop edx
|
|
||||||
stdcall kernel_free, edx
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
file_system_lfn:
|
file_system_lfn:
|
||||||
; in: eax->fileinfo block
|
; in: eax->fileinfo block
|
||||||
; operation codes:
|
; operation codes:
|
||||||
@ -102,84 +96,39 @@ file_system_lfn:
|
|||||||
; 8 : delete file
|
; 8 : delete file
|
||||||
; 9 : create directory
|
; 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
|
; parse file name
|
||||||
xchg ebx, eax
|
xchg ebx, eax
|
||||||
lea esi, [ebx+20]
|
lea esi, [ebx+20]
|
||||||
mov ebp, esi ; for 'start app' function full path must be known
|
|
||||||
lodsb
|
lodsb
|
||||||
test al, al
|
test al, al
|
||||||
jnz @f
|
jnz @f
|
||||||
mov esi, [esi]
|
mov esi, [esi]
|
||||||
; add esi, std_application_base_address
|
|
||||||
mov ebp, esi
|
|
||||||
lodsb
|
lodsb
|
||||||
@@:
|
@@:
|
||||||
|
cmp al, '/'
|
||||||
|
jz .notcurdir
|
||||||
|
dec esi
|
||||||
|
mov ebp, esi
|
||||||
|
test al, al
|
||||||
|
jnz @f
|
||||||
|
xor ebp, ebp
|
||||||
|
@@:
|
||||||
|
mov esi, [current_slot]
|
||||||
|
mov esi, [esi+APPDATA.cur_dir]
|
||||||
|
jmp .parse_normal
|
||||||
|
.notcurdir:
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jz .rootdir
|
||||||
|
call process_replace_file_name
|
||||||
|
.parse_normal:
|
||||||
cmp dword [ebx], 7
|
cmp dword [ebx], 7
|
||||||
jne @F
|
jne @F
|
||||||
mov edx, [ebx+4]
|
mov edx, [ebx+4]
|
||||||
mov ebx, [ebx+8]
|
mov ebx, [ebx+8]
|
||||||
test ebx, ebx
|
call fs_execute ; esi+ebp, ebx, edx
|
||||||
jz .l1
|
|
||||||
; add ebx, new_app_base
|
|
||||||
.l1:
|
|
||||||
call fs_execute ; ebp, ebx, edx
|
|
||||||
mov [image_of_eax], eax
|
mov [image_of_eax], eax
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
cmp al, '/'
|
|
||||||
jz @f
|
|
||||||
.notfound:
|
|
||||||
mov dword [image_of_eax], 5 ; file not found
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
cmp byte [esi], 0
|
|
||||||
jz .rootdir
|
|
||||||
mov edi, rootdirs-8
|
mov edi, rootdirs-8
|
||||||
xor ecx, ecx
|
xor ecx, ecx
|
||||||
push esi
|
push esi
|
||||||
@ -189,7 +138,8 @@ file_system_lfn:
|
|||||||
scasd
|
scasd
|
||||||
scasd
|
scasd
|
||||||
mov cl, byte [edi]
|
mov cl, byte [edi]
|
||||||
jecxz .notfound
|
test cl, cl
|
||||||
|
jz .notfound
|
||||||
inc edi
|
inc edi
|
||||||
push esi
|
push esi
|
||||||
@@:
|
@@:
|
||||||
@ -356,6 +306,10 @@ file_system_lfn:
|
|||||||
mov [image_of_eax], eax
|
mov [image_of_eax], eax
|
||||||
mov [image_of_ebx], ebx
|
mov [image_of_ebx], ebx
|
||||||
ret
|
ret
|
||||||
|
.notfound:
|
||||||
|
mov dword [image_of_eax], ERROR_FILE_NOT_FOUND
|
||||||
|
and dword [image_of_ebx], 0
|
||||||
|
ret
|
||||||
|
|
||||||
.found1:
|
.found1:
|
||||||
pop eax
|
pop eax
|
||||||
@ -373,15 +327,21 @@ file_system_lfn:
|
|||||||
sub al, '0'
|
sub al, '0'
|
||||||
cmp al, 9
|
cmp al, 9
|
||||||
ja .notfound
|
ja .notfound
|
||||||
imul ecx, 10
|
lea ecx, [ecx*5]
|
||||||
add ecx, eax
|
lea ecx, [ecx*2+eax]
|
||||||
jmp @b
|
jmp @b
|
||||||
.done1:
|
.done1:
|
||||||
test ecx, ecx
|
jecxz .notfound
|
||||||
jz .notfound
|
|
||||||
test al, al
|
test al, al
|
||||||
jnz @f
|
jnz @f
|
||||||
dec esi
|
dec esi
|
||||||
|
@@:
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jnz @f
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
|
xor ebp, ebp
|
||||||
@@:
|
@@:
|
||||||
; now [edi] contains handler address, ecx - partition number,
|
; now [edi] contains handler address, ecx - partition number,
|
||||||
; esi points to ASCIIZ string - rest of name
|
; esi points to ASCIIZ string - rest of name
|
||||||
@ -392,6 +352,7 @@ file_system_lfn:
|
|||||||
; in: ecx = partition number
|
; in: ecx = partition number
|
||||||
; esi -> relative (for device) name
|
; esi -> relative (for device) name
|
||||||
; ebx -> fileinfo
|
; ebx -> fileinfo
|
||||||
|
; ebp = 0 or pointer to rest of name from folder addressed by esi
|
||||||
; out: [image_of_eax]=image of eax, [image_of_ebx]=image of ebx
|
; out: [image_of_eax]=image of eax, [image_of_ebx]=image of ebx
|
||||||
|
|
||||||
fs_OnRamdisk:
|
fs_OnRamdisk:
|
||||||
@ -424,7 +385,7 @@ fs_RamdiskServices:
|
|||||||
dd fs_RamdiskSetFileEnd
|
dd fs_RamdiskSetFileEnd
|
||||||
dd fs_RamdiskGetFileInfo
|
dd fs_RamdiskGetFileInfo
|
||||||
dd fs_RamdiskSetFileInfo
|
dd fs_RamdiskSetFileInfo
|
||||||
dd 0 ;fs_RamdiskExecute
|
dd 0
|
||||||
dd fs_RamdiskDelete
|
dd fs_RamdiskDelete
|
||||||
dd fs_RamdiskCreateFolder
|
dd fs_RamdiskCreateFolder
|
||||||
fs_NumRamdiskServices = ($ - fs_RamdiskServices)/4
|
fs_NumRamdiskServices = ($ - fs_RamdiskServices)/4
|
||||||
@ -455,7 +416,7 @@ fs_FloppyServices:
|
|||||||
dd fs_FloppySetFileEnd
|
dd fs_FloppySetFileEnd
|
||||||
dd fs_FloppyGetFileInfo
|
dd fs_FloppyGetFileInfo
|
||||||
dd fs_FloppySetFileInfo
|
dd fs_FloppySetFileInfo
|
||||||
dd 0 ;fs_FloppyExecute
|
dd 0
|
||||||
dd fs_FloppyDelete
|
dd fs_FloppyDelete
|
||||||
dd fs_FloppyCreateFolder
|
dd fs_FloppyCreateFolder
|
||||||
fs_NumFloppyServices = ($ - fs_FloppyServices)/4
|
fs_NumFloppyServices = ($ - fs_FloppyServices)/4
|
||||||
@ -528,7 +489,7 @@ fs_HdServices:
|
|||||||
dd fs_HdSetFileEnd
|
dd fs_HdSetFileEnd
|
||||||
dd fs_HdGetFileInfo
|
dd fs_HdGetFileInfo
|
||||||
dd fs_HdSetFileInfo
|
dd fs_HdSetFileInfo
|
||||||
dd 0 ;fs_HdExecute
|
dd 0
|
||||||
dd fs_HdDelete
|
dd fs_HdDelete
|
||||||
dd fs_HdCreateFolder
|
dd fs_HdCreateFolder
|
||||||
fs_NumHdServices = ($ - fs_HdServices)/4
|
fs_NumHdServices = ($ - fs_HdServices)/4
|
||||||
@ -604,7 +565,7 @@ fs_CdServices:
|
|||||||
dd fs_NotImplemented
|
dd fs_NotImplemented
|
||||||
dd fs_CdGetFileInfo
|
dd fs_CdGetFileInfo
|
||||||
dd fs_NotImplemented
|
dd fs_NotImplemented
|
||||||
dd fs_CdExecute
|
dd 0
|
||||||
fs_NumCdServices = ($ - fs_CdServices)/4
|
fs_NumCdServices = ($ - fs_CdServices)/4
|
||||||
|
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
@ -738,3 +699,156 @@ fs_NextCd:
|
|||||||
ret
|
ret
|
||||||
;*******************************************************
|
;*******************************************************
|
||||||
|
|
||||||
|
process_replace_file_name:
|
||||||
|
mov ebp, [full_file_name_table]
|
||||||
|
mov edi, [full_file_name_table.size]
|
||||||
|
dec edi
|
||||||
|
shl edi, 7
|
||||||
|
add edi, ebp
|
||||||
|
.loop:
|
||||||
|
cmp edi, ebp
|
||||||
|
jb .notfound
|
||||||
|
push esi edi
|
||||||
|
@@:
|
||||||
|
cmp byte [edi], 0
|
||||||
|
jz .dest_done
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jz .cont
|
||||||
|
or al, 20h
|
||||||
|
scasb
|
||||||
|
jz @b
|
||||||
|
jmp .cont
|
||||||
|
.dest_done:
|
||||||
|
cmp byte [esi], 0
|
||||||
|
jz .found
|
||||||
|
cmp byte [esi], '/'
|
||||||
|
jnz .cont
|
||||||
|
inc esi
|
||||||
|
jmp .found
|
||||||
|
.cont:
|
||||||
|
pop edi esi
|
||||||
|
sub edi, 128
|
||||||
|
jmp .loop
|
||||||
|
.found:
|
||||||
|
pop edi eax
|
||||||
|
mov ebp, esi
|
||||||
|
cmp byte [esi], 0
|
||||||
|
lea esi, [edi+64]
|
||||||
|
jnz .ret
|
||||||
|
.notfound:
|
||||||
|
xor ebp, ebp
|
||||||
|
.ret:
|
||||||
|
ret
|
||||||
|
|
||||||
|
sys_current_directory:
|
||||||
|
mov esi, [current_slot]
|
||||||
|
mov esi, [esi+APPDATA.cur_dir]
|
||||||
|
mov edx, esi
|
||||||
|
dec eax
|
||||||
|
jz .set
|
||||||
|
dec eax
|
||||||
|
jz .get
|
||||||
|
ret
|
||||||
|
.get:
|
||||||
|
; sysfunction 30.2: [for app] eax=30,ebx=2,ecx->buffer,edx=len
|
||||||
|
; for our code: ebx->buffer,ecx=len
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
sub esi, edx
|
||||||
|
inc esi
|
||||||
|
mov [esp+36], esi
|
||||||
|
cmp ecx, esi
|
||||||
|
jbe @f
|
||||||
|
mov ecx, esi
|
||||||
|
@@:
|
||||||
|
cmp ecx, 1
|
||||||
|
jbe .ret
|
||||||
|
mov esi, edx
|
||||||
|
mov edi, ebx
|
||||||
|
mov al, '/'
|
||||||
|
stosb
|
||||||
|
dec ecx
|
||||||
|
dec ecx
|
||||||
|
rep movsb
|
||||||
|
mov byte [edi], 0
|
||||||
|
.ret:
|
||||||
|
ret
|
||||||
|
.set:
|
||||||
|
; sysfunction 30.1: [for app] eax=30,ebx=1,ecx->string
|
||||||
|
; for our code: ebx->string to set
|
||||||
|
@@:
|
||||||
|
inc esi
|
||||||
|
cmp byte [esi-1], 0
|
||||||
|
jnz @b
|
||||||
|
dec esi
|
||||||
|
cmp byte [ebx], '/'
|
||||||
|
jz .set_absolute
|
||||||
|
; string gives relative path
|
||||||
|
.relative:
|
||||||
|
cmp byte [ebx], 0
|
||||||
|
jz .set_ok
|
||||||
|
cmp word [ebx], '.'
|
||||||
|
jz .set_ok
|
||||||
|
cmp word [ebx], './'
|
||||||
|
jnz @f
|
||||||
|
add ebx, 2
|
||||||
|
jmp .relative
|
||||||
|
@@:
|
||||||
|
cmp word [ebx], '..'
|
||||||
|
jnz .doset_relative
|
||||||
|
cmp byte [ebx+2], 0
|
||||||
|
jz @f
|
||||||
|
cmp byte [ebx+2], '/'
|
||||||
|
jnz .doset_relative
|
||||||
|
@@:
|
||||||
|
dec esi
|
||||||
|
cmp byte [esi], '/'
|
||||||
|
jnz @b
|
||||||
|
mov byte [esi], 0
|
||||||
|
add ebx, 3
|
||||||
|
jmp .relative
|
||||||
|
.doset_relative:
|
||||||
|
add edx, 0x1000
|
||||||
|
mov byte [esi], '/'
|
||||||
|
inc esi
|
||||||
|
cmp esi, edx
|
||||||
|
jae .overflow_esi
|
||||||
|
@@:
|
||||||
|
mov al, [ebx]
|
||||||
|
inc ebx
|
||||||
|
mov [esi], al
|
||||||
|
inc esi
|
||||||
|
test al, al
|
||||||
|
jz .set_ok
|
||||||
|
cmp esi, edx
|
||||||
|
jb @b
|
||||||
|
.overflow_esi:
|
||||||
|
mov byte [esi-1], 0 ; force null-terminated string
|
||||||
|
.set_ok:
|
||||||
|
ret
|
||||||
|
.set_absolute:
|
||||||
|
lea esi, [ebx+1]
|
||||||
|
call process_replace_file_name
|
||||||
|
mov edi, edx
|
||||||
|
add edx, 0x1000
|
||||||
|
.set_copy:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test al, al
|
||||||
|
jz .set_part2
|
||||||
|
.set_copy_cont:
|
||||||
|
cmp edi, edx
|
||||||
|
jb .set_copy
|
||||||
|
.overflow_edi:
|
||||||
|
mov byte [edi-1], 0
|
||||||
|
ret
|
||||||
|
.set_part2:
|
||||||
|
mov esi, ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
test esi, esi
|
||||||
|
jz .set_ok
|
||||||
|
mov byte [edi-1], '/'
|
||||||
|
jmp .set_copy_cont
|
||||||
|
@ -488,128 +488,8 @@ fs_CdGetFileInfo:
|
|||||||
xor eax, eax
|
xor eax, eax
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; fs_CdExecute - LFN variant for executing from CD
|
|
||||||
;
|
|
||||||
; esi points to hd filename (e.g. 'dir1/name')
|
|
||||||
; ebp points to full filename (e.g. '/hd0/1/dir1/name')
|
|
||||||
; dword [ebx] = flags
|
|
||||||
; dword [ebx+4] = cmdline
|
|
||||||
;
|
|
||||||
; ret ebx,edx destroyed
|
|
||||||
; eax > 0 - PID, < 0 - error
|
|
||||||
;
|
|
||||||
;--------------------------------------------------------------
|
|
||||||
fs_CdExecute:
|
|
||||||
mov edx, [ebx]
|
|
||||||
mov ebx, [ebx+4]
|
|
||||||
test ebx, ebx
|
|
||||||
jz @f
|
|
||||||
; add ebx, std_application_base_address
|
|
||||||
@@:
|
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
|
||||||
;
|
|
||||||
; fs_CdExecute.flags - second entry
|
|
||||||
;
|
|
||||||
; esi points to floppy filename (kernel address)
|
|
||||||
; ebp points to full filename
|
|
||||||
; edx flags
|
|
||||||
; ebx cmdline (kernel address)
|
|
||||||
;
|
|
||||||
; ret eax > 0 - PID, < 0 - error
|
|
||||||
;
|
|
||||||
;--------------------------------------------------------------
|
|
||||||
|
|
||||||
.flags:
|
|
||||||
cmp byte [esi], 0
|
|
||||||
jnz @f
|
|
||||||
; cannot execute root!
|
|
||||||
mov eax, -ERROR_ACCESS_DENIED
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
push edi
|
|
||||||
call cd_find_lfn
|
|
||||||
jnc .found
|
|
||||||
pop edi
|
|
||||||
mov eax, -ERROR_FILE_NOT_FOUND
|
|
||||||
cmp [DevErrorCode], 0
|
|
||||||
jz @f
|
|
||||||
mov al, -11
|
|
||||||
@@:
|
|
||||||
ret
|
|
||||||
.found:
|
|
||||||
mov edi,[cd_current_pointer_of_input]
|
|
||||||
mov eax,[edi+2]
|
|
||||||
push 0
|
|
||||||
push eax
|
|
||||||
push dword [edi+10] ; size
|
|
||||||
push .DoRead
|
|
||||||
call fs_execute
|
|
||||||
add esp, 16
|
|
||||||
pop edi
|
|
||||||
ret
|
|
||||||
|
|
||||||
.DoRead:
|
|
||||||
; read next block
|
|
||||||
; in: eax->parameters, edi->buffer
|
|
||||||
; out: eax = error code
|
|
||||||
pushad
|
|
||||||
cmp dword [eax], 0 ; file size
|
|
||||||
jz .eof
|
|
||||||
cmp [eax+8],dword 0
|
|
||||||
jne @f
|
|
||||||
mov ecx,[eax+4]
|
|
||||||
inc dword [eax+4]
|
|
||||||
mov [CDSectorAddress],ecx
|
|
||||||
mov [CDDataBuf_pointer],CDDataBuf ;edi
|
|
||||||
call ReadCDWRetr
|
|
||||||
cmp [DevErrorCode], 0
|
|
||||||
jnz .err
|
|
||||||
@@:
|
|
||||||
push esi edi ecx
|
|
||||||
mov esi,512
|
|
||||||
imul esi,[eax+8]
|
|
||||||
add esi,CDDataBuf
|
|
||||||
mov ecx,512/4
|
|
||||||
cld
|
|
||||||
rep movsd
|
|
||||||
pop ecx edi esi
|
|
||||||
|
|
||||||
mov eax, [esp+28]
|
|
||||||
mov ecx, [eax]
|
|
||||||
sub ecx, 512
|
|
||||||
jae @f
|
|
||||||
lea edi, [edi+ecx+512]
|
|
||||||
neg ecx
|
|
||||||
push eax
|
|
||||||
xor eax, eax
|
|
||||||
rep stosb
|
|
||||||
pop eax
|
|
||||||
@@:
|
|
||||||
mov [eax], ecx
|
|
||||||
mov edx, [eax+8]
|
|
||||||
inc edx
|
|
||||||
cmp edx, 4 ; 2048/512=4
|
|
||||||
jb @f
|
|
||||||
xor edx, edx
|
|
||||||
@@:
|
|
||||||
mov [eax+8], edx
|
|
||||||
popad
|
|
||||||
xor eax, eax
|
|
||||||
ret
|
|
||||||
.eof:
|
|
||||||
popad
|
|
||||||
mov eax, 6
|
|
||||||
ret
|
|
||||||
.err:
|
|
||||||
popad
|
|
||||||
mov eax, 11
|
|
||||||
ret
|
|
||||||
|
|
||||||
cd_find_lfn:
|
cd_find_lfn:
|
||||||
; in: esi->name
|
; in: esi+ebp -> name
|
||||||
; out: CF=1 - file not found
|
; out: CF=1 - file not found
|
||||||
; else CF=0 and [cd_current_pointer_of_input] direntry
|
; else CF=0 and [cd_current_pointer_of_input] direntry
|
||||||
push eax esi
|
push eax esi
|
||||||
@ -669,6 +549,7 @@ cd_find_lfn:
|
|||||||
; êîíåö ïóòè ôàéëà
|
; êîíåö ïóòè ôàéëà
|
||||||
cmp byte [esi-1], 0
|
cmp byte [esi-1], 0
|
||||||
jz .done
|
jz .done
|
||||||
|
.nested:
|
||||||
mov eax,[cd_current_pointer_of_input]
|
mov eax,[cd_current_pointer_of_input]
|
||||||
push dword [eax+2]
|
push dword [eax+2]
|
||||||
pop dword [CDSectorAddress] ; íà÷àëî äèðåêòîðèè
|
pop dword [CDSectorAddress] ; íà÷àëî äèðåêòîðèè
|
||||||
@ -676,6 +557,12 @@ cd_find_lfn:
|
|||||||
jmp .mainloop
|
jmp .mainloop
|
||||||
; óêàçàòåëü ôàéëà íàéäåí
|
; óêàçàòåëü ôàéëà íàéäåí
|
||||||
.done:
|
.done:
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
jmp .nested
|
||||||
|
@@:
|
||||||
pop esi eax
|
pop esi eax
|
||||||
clc
|
clc
|
||||||
ret
|
ret
|
||||||
|
@ -938,7 +938,7 @@ ntfs_decode_mcb_entry:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
ntfs_find_lfn:
|
ntfs_find_lfn:
|
||||||
; in: esi->name
|
; in: esi+ebp -> name
|
||||||
; out: CF=1 - file not found
|
; out: CF=1 - file not found
|
||||||
; else CF=0, [ntfs_cur_iRecord] valid, eax->record in parent directory
|
; else CF=0, [ntfs_cur_iRecord] valid, eax->record in parent directory
|
||||||
mov [ntfs_cur_iRecord], 5 ; start parse from root cluster
|
mov [ntfs_cur_iRecord], 5 ; start parse from root cluster
|
||||||
@ -1090,6 +1090,12 @@ ntfs_find_lfn:
|
|||||||
inc esi
|
inc esi
|
||||||
cmp byte [esi-1], 0
|
cmp byte [esi-1], 0
|
||||||
jnz .doit2
|
jnz .doit2
|
||||||
|
test ebp, ebp
|
||||||
|
jz @f
|
||||||
|
mov esi, ebp
|
||||||
|
xor ebp, ebp
|
||||||
|
jmp .doit2
|
||||||
|
@@:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;----------------------------------------------------------------
|
;----------------------------------------------------------------
|
||||||
|
@ -7,210 +7,194 @@
|
|||||||
;
|
;
|
||||||
;-------------------------------------------------------------------------
|
;-------------------------------------------------------------------------
|
||||||
|
|
||||||
full_file_name_table dd 0 ; 㪠§ â¥«ì ¯ ¬ïâì ¤«ï â ¡«¨æë ¯ã⥩ 4Š § ¯¨áì 64 (32 - áâப è ¡«® ¤«ï ¯®¨áª , 32 - áâப è ¡«® ¤«ï § ¬¥ë)
|
iglobal
|
||||||
|
; pointer to memory for path replace table,
|
||||||
|
; size of one record is 128 bytes: 64 bytes for search pattern + 64 bytes for replace string
|
||||||
|
|
||||||
; ¯¥à¥¡¨à ¥â ¯® ä ©«ã ¢ ਠâë § ¬¥
|
; start with one entry: %sys% -> <sysdir>
|
||||||
proc full_file_name stdcall,sourc,dest
|
full_file_name_table dd sysdir_name
|
||||||
locals
|
.size dd 1
|
||||||
tmpsrc rb 260 ; ¢à¥¬¥®¥ åà ¥¨¥ ¯à¥®¡à §®¢ ¨ï
|
|
||||||
endl
|
|
||||||
pushad
|
|
||||||
mov esi,[sourc]
|
|
||||||
lea edi, [tmpsrc]
|
|
||||||
|
|
||||||
@@:
|
tmp_file_name_size dd 1
|
||||||
lodsb
|
endg
|
||||||
stosb
|
|
||||||
or al,al
|
|
||||||
jnz @b
|
|
||||||
|
|
||||||
mov al,[conf_file_loaded] ; âॡã¥âáï ¯à¨ ®¡à 饨¨ ª ¯¥à¢®¬ã ä ©«ã (ª®ä¨£ã)
|
uglobal
|
||||||
or al,al
|
; Parser_params will initialize: sysdir_name = "%sys%", sysdir_path = <sysdir>
|
||||||
jnz @use_replace
|
sysdir_name rb 64
|
||||||
|
sysdir_path rb 64
|
||||||
|
tmp_file_name_table dd ?
|
||||||
|
endg
|
||||||
|
|
||||||
jmp full_file_name_exit
|
; ¡¥à¥â ¯ à ¬¥âàë bx_from_load ¨ ¨¨æ¨ «¨§¨àã¥â § ¬¥ã ¤«ï %sys%
|
||||||
|
|
||||||
|
|
||||||
;--------------------------------
|
|
||||||
@use_replace:
|
|
||||||
|
|
||||||
xor eax,eax
|
|
||||||
.loop:
|
|
||||||
push eax
|
|
||||||
|
|
||||||
imul eax,eax,64
|
|
||||||
add eax,[full_file_name_table]
|
|
||||||
mov ebx,eax
|
|
||||||
add eax,32
|
|
||||||
|
|
||||||
mov cl,[ebx]
|
|
||||||
or cl,cl
|
|
||||||
jz .done
|
|
||||||
|
|
||||||
lea ecx, [tmpsrc]
|
|
||||||
mov edx,[dest]
|
|
||||||
|
|
||||||
stdcall full_file_name_parse, ecx,edx,ebx,eax
|
|
||||||
|
|
||||||
mov esi,[dest]
|
|
||||||
lea edi, [tmpsrc]
|
|
||||||
@@:
|
|
||||||
lodsb
|
|
||||||
stosb
|
|
||||||
or al,al
|
|
||||||
jnz @b
|
|
||||||
|
|
||||||
pop eax
|
|
||||||
inc eax
|
|
||||||
jmp .loop
|
|
||||||
|
|
||||||
.done:
|
|
||||||
pop eax
|
|
||||||
full_file_name_exit:
|
|
||||||
|
|
||||||
lea eax, [tmpsrc]
|
|
||||||
stdcall full_file_name_parse , eax , [dest], sysdir_ , sys_path
|
|
||||||
popad
|
|
||||||
ret
|
|
||||||
endp
|
|
||||||
|
|
||||||
;
|
|
||||||
; <EFBFBD>८¡à §®¢ âì ¨¬ï ¢ ¯®«®¥. …᫨ ¢ ç «¥ á⮨â
|
|
||||||
; 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:
|
Parser_params:
|
||||||
pushad
|
mov eax,[OS_BASE+0x10000+bx_from_load]
|
||||||
mov ax,[OS_BASE+0x10000+bx_from_load]
|
mov ecx,sysdir_path
|
||||||
|
mov [ecx-64],dword '%sys'
|
||||||
|
mov [ecx-64+4],word '%'
|
||||||
cmp al,'r' ; à ¬ ¤¨áª
|
cmp al,'r' ; à ¬ ¤¨áª
|
||||||
jnz @f
|
jnz @f
|
||||||
mov [sys_path],dword '/RD/'
|
mov [ecx],dword 'RD/?'
|
||||||
mov [sys_path+4],byte ah
|
mov [ecx+3],byte ah
|
||||||
mov [sys_path+5],word 0 ;0x002F
|
mov [ecx+4],byte 0
|
||||||
jmp .done
|
ret
|
||||||
@@:
|
@@:
|
||||||
sub al,49
|
sub al,49
|
||||||
mov [sys_path],dword '/HDa'
|
mov [ecx],dword 'HD?/'
|
||||||
mov [sys_path+3],byte al
|
mov [ecx+2],byte al
|
||||||
mov [sys_path+4],byte '/'
|
mov [ecx+4],byte ah
|
||||||
mov [sys_path+5],byte ah
|
mov [ecx+5],dword '/KOL'
|
||||||
mov [sys_path+6],dword '/KOL'
|
mov [ecx+9],dword 'IBRI'
|
||||||
mov [sys_path+10],dword 'IBRI'
|
mov [ecx+13],byte 0
|
||||||
mov [sys_path+14],word 0 ;0x002F
|
|
||||||
|
|
||||||
.done:
|
|
||||||
popad
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
proc load_file_parse_table
|
proc load_file_parse_table
|
||||||
pushad
|
|
||||||
stdcall kernel_alloc,0x1000
|
stdcall kernel_alloc,0x1000
|
||||||
mov [full_file_name_table],eax
|
mov [tmp_file_name_table],eax
|
||||||
|
mov edi,eax
|
||||||
|
mov esi,sysdir_name
|
||||||
|
mov ecx,128/4
|
||||||
|
rep movsd
|
||||||
|
|
||||||
invoke ini.enum_keys,conf_fname,conf_path_sect,get_every_key
|
invoke ini.enum_keys,conf_fname,conf_path_sect,get_every_key
|
||||||
|
|
||||||
mov eax,[loading_counter]
|
mov eax,[tmp_file_name_table]
|
||||||
imul eax,eax,64
|
mov [full_file_name_table],eax
|
||||||
add eax,[full_file_name_table]
|
mov eax,[tmp_file_name_size]
|
||||||
mov [eax],byte 0
|
mov [full_file_name_table.size],eax
|
||||||
popad
|
|
||||||
ret
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
loading_counter dd 0
|
uglobal
|
||||||
def_val_1 db 0
|
def_val_1 db 0
|
||||||
|
endg
|
||||||
|
|
||||||
proc get_every_key stdcall,f_name, sec_name, key_name
|
proc get_every_key stdcall, f_name, sec_name, key_name
|
||||||
pushad
|
mov esi, [key_name]
|
||||||
mov esi,[key_name]
|
mov ecx, esi
|
||||||
mov edi,[loading_counter]
|
cmp byte [esi], '/'
|
||||||
imul edi,edi,64
|
jnz @f
|
||||||
add edi,[full_file_name_table]
|
inc esi
|
||||||
@@:
|
@@:
|
||||||
lodsb
|
mov edi, [tmp_file_name_size]
|
||||||
stosb
|
shl edi, 7
|
||||||
or al,al
|
cmp edi, 0x1000
|
||||||
jnz @b
|
jae .stop_parse
|
||||||
|
add edi, [tmp_file_name_table]
|
||||||
|
lea ebx, [edi+64]
|
||||||
|
@@:
|
||||||
|
cmp edi, ebx
|
||||||
|
jae .skip_this_key
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jz @f
|
||||||
|
or al, 20h
|
||||||
|
stosb
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
stosb
|
||||||
|
|
||||||
mov eax,[loading_counter]
|
invoke ini.get_str, [f_name],[sec_name],ecx,ebx,64,def_val_1
|
||||||
imul eax,eax,64
|
|
||||||
add eax,[full_file_name_table]
|
|
||||||
add eax,32
|
|
||||||
mov ebx,[key_name]
|
|
||||||
invoke ini.get_str,conf_fname,conf_path_sect,ebx,eax,32,def_val_1
|
|
||||||
|
|
||||||
inc dword [loading_counter]
|
cmp byte [ebx], '/'
|
||||||
|
jnz @f
|
||||||
popad
|
lea esi, [ebx+1]
|
||||||
mov eax,1
|
mov edi, ebx
|
||||||
ret
|
mov ecx, 63
|
||||||
|
rep movsb
|
||||||
|
@@:
|
||||||
|
push ebp
|
||||||
|
mov ebp, [tmp_file_name_table]
|
||||||
|
mov ecx, [tmp_file_name_size]
|
||||||
|
jecxz .noreplace
|
||||||
|
mov eax, ecx
|
||||||
|
dec eax
|
||||||
|
shl eax, 7
|
||||||
|
add ebp, eax
|
||||||
|
.replace_loop:
|
||||||
|
mov edi, ebx
|
||||||
|
mov esi, ebp
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jz .doreplace
|
||||||
|
mov dl, [edi]
|
||||||
|
inc edi
|
||||||
|
test dl, dl
|
||||||
|
jz .replace_loop_cont
|
||||||
|
or dl, 20h
|
||||||
|
cmp al, dl
|
||||||
|
jz @b
|
||||||
|
jmp .replace_loop_cont
|
||||||
|
.doreplace:
|
||||||
|
cmp byte [edi], 0
|
||||||
|
jz @f
|
||||||
|
cmp byte [edi], '/'
|
||||||
|
jnz .replace_loop_cont
|
||||||
|
@@:
|
||||||
|
lea esi, [ebp+64]
|
||||||
|
call .replace
|
||||||
|
jc .skip_this_key2
|
||||||
|
.replace_loop_cont:
|
||||||
|
sub ebp, 128
|
||||||
|
loop .replace_loop
|
||||||
|
.noreplace:
|
||||||
|
pop ebp
|
||||||
|
|
||||||
|
inc [tmp_file_name_size]
|
||||||
|
.skip_this_key:
|
||||||
|
xor eax, eax
|
||||||
|
inc eax
|
||||||
|
ret
|
||||||
|
.skip_this_key2:
|
||||||
|
pop ebp
|
||||||
|
jmp .skip_this_key
|
||||||
|
.stop_parse:
|
||||||
|
xor eax, eax
|
||||||
|
ret
|
||||||
endp
|
endp
|
||||||
|
|
||||||
|
proc get_every_key.replace
|
||||||
|
; in: ebx->destination, esi->first part of name, edi->second part of name
|
||||||
|
; maximum length is 64 bytes
|
||||||
|
; out: CF=1 <=> overflow
|
||||||
|
; 1) allocate temporary buffer in stack
|
||||||
|
sub esp, 64
|
||||||
|
; 2) save second part of name to temporary buffer
|
||||||
|
push esi
|
||||||
|
lea esi, [esp+4] ; esi->tmp buffer
|
||||||
|
xchg esi, edi ; edi->tmp buffer, esi->source
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
; 3) copy first part of name to destination
|
||||||
|
pop esi
|
||||||
|
mov edi, ebx
|
||||||
|
@@:
|
||||||
|
lodsb
|
||||||
|
test al, al
|
||||||
|
jz @f
|
||||||
|
stosb
|
||||||
|
jmp @b
|
||||||
|
@@:
|
||||||
|
; 4) restore second part of name from temporary buffer to destination
|
||||||
|
; (may cause overflow)
|
||||||
|
lea edx, [ebx+64] ; limit of destination
|
||||||
|
mov esi, esp
|
||||||
|
@@:
|
||||||
|
cmp edi, edx
|
||||||
|
jae .overflow
|
||||||
|
lodsb
|
||||||
|
stosb
|
||||||
|
test al, al
|
||||||
|
jnz @b
|
||||||
|
; all is OK
|
||||||
|
add esp, 64 ; CF is cleared
|
||||||
|
ret
|
||||||
|
.overflow:
|
||||||
|
; name is too long
|
||||||
|
add esp, 64
|
||||||
|
stc
|
||||||
|
ret
|
||||||
|
endp
|
||||||
|
@ -11,7 +11,7 @@ $Revision$
|
|||||||
;
|
;
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
_skin_file_default db '%sys%/DEFAULT.SKN',0
|
_skin_file_default db '/%sys%/DEFAULT.SKN',0
|
||||||
endg
|
endg
|
||||||
|
|
||||||
struct SKIN_DATA
|
struct SKIN_DATA
|
||||||
|
@ -533,6 +533,8 @@ high_code:
|
|||||||
include 'detect/disks.inc'
|
include 'detect/disks.inc'
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
|
call Parser_params
|
||||||
|
|
||||||
; READ RAMDISK IMAGE FROM HD
|
; READ RAMDISK IMAGE FROM HD
|
||||||
|
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
@ -549,8 +551,6 @@ include 'boot/rdload.inc'
|
|||||||
include 'vmodeld.inc'
|
include 'vmodeld.inc'
|
||||||
;!!!!!!!!!!!!!!!!!!!!!!!
|
;!!!!!!!!!!!!!!!!!!!!!!!
|
||||||
|
|
||||||
call Parser_params
|
|
||||||
|
|
||||||
mov ax,[OS_BASE+0x10000+bx_from_load]
|
mov ax,[OS_BASE+0x10000+bx_from_load]
|
||||||
cmp ax,'r1' ; åñëè ñðàì äèñê - òî íå ãðóçèòü áèáëèîòåêè
|
cmp ax,'r1' ; åñëè ñðàì äèñê - òî íå ãðóçèòü áèáëèîòåêè
|
||||||
je no_lib_load
|
je no_lib_load
|
||||||
@ -689,6 +689,8 @@ no_lib_load:
|
|||||||
mov dword [SLOT_BASE+256+APPDATA.fd_obj], ebx
|
mov dword [SLOT_BASE+256+APPDATA.fd_obj], ebx
|
||||||
mov dword [SLOT_BASE+256+APPDATA.bk_obj], ebx
|
mov dword [SLOT_BASE+256+APPDATA.bk_obj], ebx
|
||||||
|
|
||||||
|
mov dword [SLOT_BASE+256+APPDATA.cur_dir], sysdir_path
|
||||||
|
|
||||||
; task list
|
; task list
|
||||||
mov [CURRENT_TASK],dword 1
|
mov [CURRENT_TASK],dword 1
|
||||||
mov [TASK_COUNT],dword 1
|
mov [TASK_COUNT],dword 1
|
||||||
@ -774,72 +776,19 @@ no_lib_load:
|
|||||||
; LOAD FIRST APPLICATION
|
; LOAD FIRST APPLICATION
|
||||||
cli
|
cli
|
||||||
|
|
||||||
if 0
|
|
||||||
cmp byte [BOOT_VAR+0x9030],1
|
cmp byte [BOOT_VAR+0x9030],1
|
||||||
jne no_load_vrr_m
|
jne no_load_vrr_m
|
||||||
|
|
||||||
stdcall kernel_alloc, 0x100
|
mov ebp, vrr_m
|
||||||
push eax
|
call fs_execute_from_sysdir
|
||||||
mov ebx,eax
|
|
||||||
stdcall full_file_name,vrr_m,eax
|
|
||||||
mov ebp, eax
|
|
||||||
|
|
||||||
xor ebx, ebx
|
|
||||||
xor edx, edx
|
|
||||||
call fs_execute
|
|
||||||
pop ebx
|
|
||||||
push eax
|
|
||||||
stdcall kernel_free, ebx
|
|
||||||
pop eax
|
|
||||||
|
|
||||||
cmp eax,2 ; if vrr_m app found (PID=2)
|
cmp eax,2 ; if vrr_m app found (PID=2)
|
||||||
je first_app_found
|
je first_app_found
|
||||||
|
|
||||||
no_load_vrr_m:
|
no_load_vrr_m:
|
||||||
|
|
||||||
stdcall kernel_alloc, 0x100
|
mov ebp, firstapp
|
||||||
push eax
|
call fs_execute_from_sysdir
|
||||||
mov ebx,eax
|
|
||||||
stdcall full_file_name,firstapp,eax
|
|
||||||
mov ebp, eax
|
|
||||||
xor ebx, ebx
|
|
||||||
xor edx, edx
|
|
||||||
call fs_execute
|
|
||||||
pop ebx
|
|
||||||
push eax
|
|
||||||
stdcall kernel_free, ebx
|
|
||||||
pop eax
|
|
||||||
cmp eax,2 ; continue if a process has been loaded
|
|
||||||
je first_app_found
|
|
||||||
mov eax, 0xDEADBEEF ; otherwise halt
|
|
||||||
hlt
|
|
||||||
|
|
||||||
first_app_found:
|
|
||||||
|
|
||||||
else
|
|
||||||
sub esp, 0x100
|
|
||||||
|
|
||||||
cmp byte [BOOT_VAR+0x9030],1
|
|
||||||
jne no_load_vrr_m
|
|
||||||
|
|
||||||
mov ebp, esp
|
|
||||||
stdcall full_file_name,vrr_m,ebp
|
|
||||||
|
|
||||||
xor ebx, ebx
|
|
||||||
xor edx, edx
|
|
||||||
call fs_execute
|
|
||||||
|
|
||||||
cmp eax,2 ; if vrr_m app found (PID=2)
|
|
||||||
je first_app_found
|
|
||||||
|
|
||||||
no_load_vrr_m:
|
|
||||||
|
|
||||||
mov ebp, esp
|
|
||||||
stdcall full_file_name,firstapp,ebp
|
|
||||||
|
|
||||||
xor ebx, ebx
|
|
||||||
xor edx, edx
|
|
||||||
call fs_execute
|
|
||||||
|
|
||||||
cmp eax,2 ; continue if a process has been loaded
|
cmp eax,2 ; continue if a process has been loaded
|
||||||
je first_app_found
|
je first_app_found
|
||||||
@ -849,9 +798,6 @@ no_load_vrr_m:
|
|||||||
|
|
||||||
first_app_found:
|
first_app_found:
|
||||||
|
|
||||||
add esp, 0x100
|
|
||||||
|
|
||||||
end if
|
|
||||||
cli
|
cli
|
||||||
|
|
||||||
;mov [TASK_COUNT],dword 2
|
;mov [TASK_COUNT],dword 2
|
||||||
@ -3462,7 +3408,7 @@ checkpixel:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
cpustring db '%sys%/CPU',0
|
cpustring db 'CPU',0
|
||||||
endg
|
endg
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
@ -3477,21 +3423,8 @@ checkmisc:
|
|||||||
cmp [ctrl_alt_del], 1
|
cmp [ctrl_alt_del], 1
|
||||||
jne nocpustart
|
jne nocpustart
|
||||||
|
|
||||||
|
mov ebp, cpustring
|
||||||
stdcall kernel_alloc, 0x100
|
call fs_execute_from_sysdir
|
||||||
push eax
|
|
||||||
mov ebx,eax
|
|
||||||
stdcall full_file_name,cpustring,eax
|
|
||||||
mov ebp, eax
|
|
||||||
|
|
||||||
xor ebx, ebx
|
|
||||||
xor edx, edx
|
|
||||||
call fs_execute
|
|
||||||
|
|
||||||
pop ebx
|
|
||||||
push eax
|
|
||||||
stdcall kernel_free, ebx
|
|
||||||
pop eax
|
|
||||||
|
|
||||||
mov [ctrl_alt_del], 0
|
mov [ctrl_alt_del], 0
|
||||||
|
|
||||||
|
@ -126,8 +126,9 @@ struc APPDATA
|
|||||||
.saved_esp dd ? ;+64
|
.saved_esp dd ? ;+64
|
||||||
.io_map rd 2 ;+68
|
.io_map rd 2 ;+68
|
||||||
.dbg_state dd ? ;+76
|
.dbg_state dd ? ;+76
|
||||||
|
.cur_dir dd ? ;+80
|
||||||
|
|
||||||
db 48 dup(?) ;+80
|
db 44 dup(?) ;+84
|
||||||
|
|
||||||
.wnd_shape dd ? ;+128
|
.wnd_shape dd ? ;+128
|
||||||
.wnd_shape_scale dd ? ;+132
|
.wnd_shape_scale dd ? ;+132
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
;
|
;
|
||||||
;============================================================================
|
;============================================================================
|
||||||
|
|
||||||
|
align 4
|
||||||
@IMPORT:
|
@IMPORT:
|
||||||
|
|
||||||
library \
|
library \
|
||||||
|
@ -71,6 +71,8 @@ macro diff10 title,l1,l2
|
|||||||
display 13,10
|
display 13,10
|
||||||
}
|
}
|
||||||
|
|
||||||
|
include 'kglobals.inc'
|
||||||
|
|
||||||
; \begin{diamond}[29.09.2006]
|
; \begin{diamond}[29.09.2006]
|
||||||
; may be useful for kernel debugging
|
; may be useful for kernel debugging
|
||||||
; example 1:
|
; example 1:
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
[path]
|
[path]
|
||||||
/rd/1=%sys%
|
/rd/1=/%sys%
|
||||||
%sys%/dll=%sys%/lib
|
/rd/1/dll=/%sys%/lib
|
||||||
|
|
||||||
[net]
|
[net]
|
||||||
active=1
|
active=1
|
||||||
|
@ -28,4 +28,5 @@ $Revision$
|
|||||||
xor ebx, ebx
|
xor ebx, ebx
|
||||||
mov ecx, 0x8000 ; size of memory area for driver
|
mov ecx, 0x8000 ; size of memory area for driver
|
||||||
mov edx, VMODE_BASE ; Memory position of driver
|
mov edx, VMODE_BASE ; Memory position of driver
|
||||||
|
xor ebp, ebp
|
||||||
call fs_RamdiskRead
|
call fs_RamdiskRead
|
||||||
|
Loading…
Reference in New Issue
Block a user