forked from KolibriOS/kolibrios
loading libs for kernel
loading from HD inifiles.asm (not completed, using with kernel to load sys.conf) parse file names %sys% may be system directory for programs (70 function) git-svn-id: svn://kolibrios.org@488 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
981a4ac300
commit
e1f463adf0
@ -116,6 +116,16 @@ start_of_code:
|
||||
@@:
|
||||
; \end{diamond}[02.12.2005]
|
||||
|
||||
cmp cx,'HA' ; ïî ðåãèñòðàì îïðåäåëÿåòñÿ çàãðóçêà ñ âèíòà
|
||||
jnz no_hd_load
|
||||
cmp dx,'RD'
|
||||
jnz no_hd_load
|
||||
mov word [bx_from_load], bx ; {SPraid}[13.03.2007]
|
||||
jmp load_next
|
||||
no_hd_load:
|
||||
mov word [bx_from_load], 'r1' ; if work with floppy
|
||||
load_next:
|
||||
|
||||
; set up stack
|
||||
mov ax, 3000h
|
||||
mov ss, ax
|
||||
|
@ -2,7 +2,7 @@
|
||||
|
||||
set languages=en ru ge et
|
||||
set drivers=sound sis infinity ati2d vmode ps2mouse
|
||||
set targets=all kernel drivers skins clean
|
||||
set targets=all kernel drivers skins lib clean
|
||||
|
||||
call :Check_Target %1
|
||||
for %%a in (all kernel) do if %%a==%target% call :Check_Lang %2
|
||||
@ -60,6 +60,7 @@ goto :eof
|
||||
call :Target_kernel
|
||||
call :Target_drivers
|
||||
call :Target_skins
|
||||
call :Target_lib
|
||||
goto :eof
|
||||
|
||||
|
||||
@ -87,6 +88,15 @@ goto :eof
|
||||
cd ..
|
||||
goto :eof
|
||||
|
||||
:Target_lib
|
||||
echo *** building libs ...
|
||||
|
||||
if not exist bin\lib mkdir bin\lib
|
||||
cd lib
|
||||
fasm -m 65536 inifiles.asm ..\bin\lib\inifiles.obj
|
||||
if not %errorlevel%==0 goto :Error_FasmFailed
|
||||
cd ..
|
||||
goto :eof
|
||||
|
||||
:Target_clean
|
||||
echo *** cleaning ...
|
||||
|
20
kernel/trunk/core/conf_lib.inc
Normal file
20
kernel/trunk/core/conf_lib.inc
Normal file
@ -0,0 +1,20 @@
|
||||
;-------------------------------------------------------------------------
|
||||
;
|
||||
; ” ©« ª®ä¨£ãà 樨
|
||||
;
|
||||
;
|
||||
; SPraid
|
||||
;
|
||||
;-------------------------------------------------------------------------
|
||||
|
||||
conf_file_loaded: db 0 ; ä« £ § £à㧪¨ ª®ä¨£
|
||||
|
||||
; § £à㧪 ¨¨ ä ©« ¢ ¡¨¡«¨®â¥ªã
|
||||
proc load_conf_file
|
||||
pushad
|
||||
invoke ini.load,.fname
|
||||
mov [conf_file_loaded],byte 1
|
||||
popad
|
||||
ret
|
||||
.fname db '%sys%/sys.conf',0
|
||||
endp
|
@ -700,8 +700,8 @@ proc load_driver stdcall, driver_name:dword
|
||||
endl
|
||||
|
||||
lea edx, [file_name]
|
||||
mov dword [edx], '/rd/'
|
||||
mov dword [edx+4], '1/dr'
|
||||
mov dword [edx], '%sys'
|
||||
mov dword [edx+4], '%/dr'
|
||||
mov dword [edx+8], 'iver'
|
||||
mov word [edx+12], 's/'
|
||||
mov esi, [driver_name]
|
||||
|
326
kernel/trunk/core/ext_lib.inc
Normal file
326
kernel/trunk/core/ext_lib.inc
Normal file
@ -0,0 +1,326 @@
|
||||
;============================================================================
|
||||
;
|
||||
; Çàãðóçêà âíåøíèõ ôóíêöèé ÿäðà
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;============================================================================
|
||||
macro library [name,fname]
|
||||
{
|
||||
forward
|
||||
dd __#name#_library_table__,__#name#_library_name__
|
||||
common
|
||||
dd 0
|
||||
forward
|
||||
align 4
|
||||
__#name#_library_name__ db fname,0
|
||||
}
|
||||
|
||||
macro import lname,[name,sname]
|
||||
{
|
||||
common
|
||||
align 4
|
||||
__#lname#_library_table__:
|
||||
forward
|
||||
name dd __#name#_import_name__
|
||||
common
|
||||
dd 0
|
||||
forward
|
||||
align 4
|
||||
__#name#_import_name__ db sname,0
|
||||
}
|
||||
|
||||
macro export [name,sname]
|
||||
{
|
||||
forward
|
||||
dd __#name#_export_name__,name
|
||||
common
|
||||
dd 0
|
||||
forward
|
||||
align 4
|
||||
__#name#_export_name__ db sname,0
|
||||
}
|
||||
|
||||
|
||||
|
||||
align 4 ; çàãðóçêà áèáëèîòåêè ñ óñëîâèåì, ÷òî áóäèò èñïîëüçûâàòüñÿ èç ÿäðà
|
||||
proc load_k_library stdcall, file_name:dword
|
||||
locals
|
||||
coff dd ?
|
||||
sym dd ?
|
||||
strings dd ?
|
||||
img_size dd ?
|
||||
img_base dd ?
|
||||
exports dd ?
|
||||
endl
|
||||
|
||||
cli
|
||||
|
||||
stdcall load_file, [file_name]
|
||||
test eax, eax
|
||||
jz .fail
|
||||
|
||||
mov [coff], eax
|
||||
movzx ecx, [eax+CFH.nSections]
|
||||
xor ebx, ebx
|
||||
|
||||
lea edx, [eax+20]
|
||||
@@:
|
||||
add ebx, [edx+CFS.SizeOfRawData]
|
||||
add ebx, 15
|
||||
and ebx, not 15
|
||||
add edx, COFF_SECTION_SIZE
|
||||
dec ecx
|
||||
jnz @B
|
||||
mov [img_size], ebx
|
||||
|
||||
stdcall kernel_alloc, [img_size]
|
||||
|
||||
test eax, eax
|
||||
jz .fail
|
||||
mov [img_base], eax
|
||||
|
||||
mov edx, [coff]
|
||||
movzx ebx, [edx+CFH.nSections]
|
||||
mov edi, [img_base]
|
||||
lea eax, [edx+20]
|
||||
@@:
|
||||
mov [eax+CFS.VirtualAddress], edi
|
||||
mov esi, [eax+CFS.PtrRawData]
|
||||
test esi, esi
|
||||
jnz .copy
|
||||
add edi, [eax+CFS.SizeOfRawData]
|
||||
jmp .next
|
||||
.copy:
|
||||
add esi, edx
|
||||
mov ecx, [eax+CFS.SizeOfRawData]
|
||||
cld
|
||||
rep movsb
|
||||
.next:
|
||||
add edi, 15
|
||||
and edi, not 15
|
||||
add eax, COFF_SECTION_SIZE
|
||||
dec ebx
|
||||
jnz @B
|
||||
|
||||
mov ebx, [edx+CFH.pSymTable]
|
||||
add ebx, edx
|
||||
mov [sym], ebx
|
||||
mov ecx, [edx+CFH.nSymbols]
|
||||
add ecx,ecx
|
||||
lea ecx,[ecx+ecx*8] ;ecx*=18 = nSymbols*CSYM_SIZE
|
||||
add ecx, [sym]
|
||||
mov [strings], ecx
|
||||
|
||||
lea eax, [edx+20]
|
||||
|
||||
stdcall fix_coff_symbols, eax, [sym], [edx+CFH.nSymbols],\
|
||||
[strings], dword 0
|
||||
test eax, eax
|
||||
jnz @F
|
||||
|
||||
@@:
|
||||
mov edx, [coff]
|
||||
movzx ebx, [edx+CFH.nSections]
|
||||
mov edi, 0
|
||||
lea eax, [edx+20]
|
||||
@@:
|
||||
add [eax+CFS.VirtualAddress], edi ;patch user space offset
|
||||
add eax, COFF_SECTION_SIZE
|
||||
dec ebx
|
||||
jnz @B
|
||||
|
||||
add edx, 20
|
||||
stdcall fix_coff_relocs, [coff], edx, [sym]
|
||||
|
||||
mov ebx, [coff]
|
||||
stdcall get_coff_sym,[sym],[ebx+CFH.nSymbols],szEXPORTS
|
||||
mov [exports], eax
|
||||
|
||||
stdcall kernel_free, [coff]
|
||||
|
||||
mov eax, [exports]
|
||||
ret
|
||||
.fail:
|
||||
xor eax, eax
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
proc dll.Load, import_table:dword
|
||||
mov esi,[import_table]
|
||||
.next_lib: mov edx,[esi]
|
||||
or edx,edx
|
||||
jz .exit
|
||||
push esi
|
||||
|
||||
mov edi,s_libname
|
||||
|
||||
mov esi,sys_path
|
||||
@@: lodsb
|
||||
stosb
|
||||
or al,al
|
||||
jnz @b
|
||||
dec edi
|
||||
mov [edi], dword '/lib'
|
||||
mov [edi+4],byte '/'
|
||||
add edi,5
|
||||
pop esi
|
||||
push esi
|
||||
mov esi,[esi+4]
|
||||
@@: lodsb
|
||||
stosb
|
||||
or al,al
|
||||
jnz @b
|
||||
|
||||
pushad
|
||||
stdcall load_k_library,s_libname
|
||||
mov [esp+28],eax
|
||||
popad
|
||||
or eax,eax
|
||||
jz .fail
|
||||
stdcall dll.Link,eax,edx
|
||||
stdcall dll.Init,[eax+4]
|
||||
pop esi
|
||||
add esi,8
|
||||
jmp .next_lib
|
||||
.exit: xor eax,eax
|
||||
ret
|
||||
.fail: add esp,4
|
||||
xor eax,eax
|
||||
inc eax
|
||||
ret
|
||||
endp
|
||||
|
||||
proc dll.Link, exp:dword,imp:dword
|
||||
push eax
|
||||
mov esi,[imp]
|
||||
test esi,esi
|
||||
jz .done
|
||||
.next: lodsd
|
||||
test eax,eax
|
||||
jz .done
|
||||
stdcall dll.GetProcAddress,[exp],eax
|
||||
or eax,eax
|
||||
jz @f
|
||||
mov [esi-4],eax
|
||||
jmp .next
|
||||
@@: mov dword[esp],0
|
||||
.done: pop eax
|
||||
ret
|
||||
endp
|
||||
|
||||
proc dll.Init, dllentry:dword
|
||||
pushad
|
||||
mov eax,mem.Alloc
|
||||
mov ebx,mem.Free
|
||||
mov ecx,mem.ReAlloc
|
||||
mov edx,dll.Load
|
||||
stdcall [dllentry]
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
|
||||
proc dll.GetProcAddress, exp:dword,sz_name:dword
|
||||
mov edx,[exp]
|
||||
.next: test edx,edx
|
||||
jz .end
|
||||
stdcall strcmp,[edx],[sz_name]
|
||||
test eax,eax
|
||||
jz .ok
|
||||
add edx,8
|
||||
jmp .next
|
||||
.ok: mov eax,[edx+4]
|
||||
.end: ret
|
||||
endp
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
proc mem.Alloc size ;/////////////////////////////////////////////////////////
|
||||
;-----------------------------------------------------------------------------
|
||||
push ebx ecx
|
||||
; mov eax,[size]
|
||||
; lea ecx,[eax+4+4095]
|
||||
; and ecx,not 4095
|
||||
; stdcall kernel_alloc, ecx
|
||||
; add ecx,-4
|
||||
; mov [eax],ecx
|
||||
; add eax,4
|
||||
|
||||
stdcall kernel_alloc, [size]
|
||||
|
||||
pop ecx ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
proc mem.ReAlloc mptr,size;///////////////////////////////////////////////////
|
||||
;-----------------------------------------------------------------------------
|
||||
push ebx ecx esi edi eax
|
||||
mov eax,[mptr]
|
||||
mov ebx,[size]
|
||||
or eax,eax
|
||||
jz @f
|
||||
lea ecx,[ebx+4+4095]
|
||||
and ecx,not 4095
|
||||
add ecx,-4
|
||||
cmp ecx,[eax-4]
|
||||
je .exit
|
||||
@@: mov eax,ebx
|
||||
call mem.Alloc
|
||||
xchg eax,[esp]
|
||||
or eax,eax
|
||||
jz .exit
|
||||
mov esi,eax
|
||||
xchg eax,[esp]
|
||||
mov edi,eax
|
||||
mov ecx,[esi-4]
|
||||
cmp ecx,[edi-4]
|
||||
jbe @f
|
||||
mov ecx,[edi-4]
|
||||
@@: add ecx,3
|
||||
shr ecx,2
|
||||
cld
|
||||
rep movsd
|
||||
xchg eax,[esp]
|
||||
call mem.Free
|
||||
.exit:
|
||||
pop eax edi esi ecx ebx
|
||||
ret
|
||||
endp
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
proc mem.Free mptr ;//////////////////////////////////////////////////////////
|
||||
;-----------------------------------------------------------------------------
|
||||
; mov eax,[mptr]
|
||||
; or eax,eax
|
||||
; jz @f
|
||||
; push ebx ecx
|
||||
; lea ecx,[eax-4]
|
||||
; stdcall kernel_free, ecx
|
||||
; pop ecx ebx
|
||||
; @@: ret
|
||||
stdcall kernel_free, [mptr]
|
||||
ret
|
||||
endp
|
||||
|
||||
proc strcmp, str1:dword,str2:dword
|
||||
push esi edi
|
||||
mov esi,[str1]
|
||||
mov edi,[str2]
|
||||
xor eax,eax
|
||||
@@: lodsb
|
||||
scasb
|
||||
jne .fail
|
||||
or al,al
|
||||
jnz @b
|
||||
jmp .ok
|
||||
.fail: or eax,-1
|
||||
.ok: pop edi esi
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
s_libname db 64 dup (0)
|
@ -5,6 +5,10 @@ flm db 0
|
||||
preboot_lfb db 0
|
||||
preboot_bootlog db 0
|
||||
|
||||
bx_from_load: dw 0 ; структура для хранения параметров- откуда гашрузились, берется ниже из bx ; {SPraid}[13.03.2007]
|
||||
; a,b,c,d - винчестеры, r - рам диск
|
||||
; # диска... символ, а не байт. '1', а не 1
|
||||
|
||||
align 4
|
||||
old_ints_h:
|
||||
dw 0x400
|
||||
|
@ -82,13 +82,21 @@ szSTART db 'START',0
|
||||
szEXPORTS db 'EXPORTS',0
|
||||
szIMPORTS db 'IMPORTS',0
|
||||
|
||||
firstapp db '/rd/1/LAUNCHER',0
|
||||
char db 'FONTS/CHAR.MT',0
|
||||
char2 db 'FONTS/CHAR2.MT',0
|
||||
firstapp db '%sys%/LAUNCHER',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
|
||||
|
||||
|
||||
bootpath db '/KOLIBRI '
|
||||
bootpath2 db 0
|
||||
vmode db 'drivers/VMODE.MDR',0
|
||||
vrr_m db '/rd/1/VRR_M',0
|
||||
vrr_m db '%sys%/VRR_M',0
|
||||
kernel_file db 'KERNEL MNT'
|
||||
|
||||
|
||||
@ -105,6 +113,16 @@ drawbar dd __sys_drawbar.forced
|
||||
putpixel dd __sys_putpixel
|
||||
; } mike.dld
|
||||
|
||||
; SPraid.simba { 6.05.2007
|
||||
; êîíñòàíòû äëÿ îáðàùåíèÿ ê èíè ôàéëó äëÿ îïðåäåëåíèÿ óñòðîéñòâ
|
||||
;
|
||||
|
||||
ini_dev_sect: db 'dev',0 ; ñåêöèÿ îá óñòðîéñòâàõ
|
||||
ini_com1_mouse_detect: db 'com1_mouse',0
|
||||
ini_com2_mouse_detect: db 'com2_mouse',0
|
||||
|
||||
dev_dev_val: db '2',0 ; äàëåå åñëè 2 - òî äåòåêòèðîâàòü
|
||||
; } SPraid.simba
|
||||
|
||||
align 4
|
||||
keyboard dd 1
|
||||
|
@ -6,6 +6,9 @@ $Revision$
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
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 @@ virtual_root_query:
|
||||
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 @@ file_system_lfn:
|
||||
; 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 @@ file_system_lfn:
|
||||
; 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,15 +279,15 @@ file_system_lfn:
|
||||
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:
|
||||
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 @@ file_system_lfn:
|
||||
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 @@ file_system_lfn:
|
||||
; 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 @@ fs_OnRamdisk:
|
||||
; 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 @@ fs_OnFloppy:
|
||||
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 @@ fs_OnHd:
|
||||
.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 @@ fs_OnHd:
|
||||
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 @@ fs_OnCd:
|
||||
.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 @@ fs_OnCd:
|
||||
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:
|
||||
|
183
kernel/trunk/fs/parse_fn.inc
Normal file
183
kernel/trunk/fs/parse_fn.inc
Normal file
@ -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
|
||||
|
||||
;
|
||||
; <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:
|
||||
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
|
||||
|
@ -16,9 +16,25 @@ load_skin_file:
|
||||
mov ebx,1
|
||||
or ecx,-1
|
||||
mov esi,12
|
||||
call fileread
|
||||
pushad
|
||||
push eax
|
||||
mov [skin_to_load.adr],edx
|
||||
|
||||
mov [skin_to_load.stradr],_skin_file_default
|
||||
mov eax,skin_to_load
|
||||
call file_system_lfn
|
||||
pop eax
|
||||
popad
|
||||
ret
|
||||
|
||||
skin_to_load:
|
||||
dd 0,0,0
|
||||
dd 64*1024
|
||||
.adr dd 0
|
||||
db 0
|
||||
.stradr dd 0
|
||||
|
||||
|
||||
struct SKIN_HEADER
|
||||
.ident dd ?
|
||||
.version dd ?
|
||||
|
@ -11,7 +11,7 @@ $Revision$
|
||||
;
|
||||
|
||||
iglobal
|
||||
_skin_file_default db 'DEFAULT SKN',0
|
||||
_skin_file_default db '%sys%/DEFAULT.SKN',0
|
||||
endg
|
||||
|
||||
struct SKIN_DATA
|
||||
|
@ -536,20 +536,40 @@ include 'boot/rdload.inc'
|
||||
include 'vmodeld.inc'
|
||||
;!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
call Parser_params
|
||||
|
||||
mov ax,[BOOT_VAR+bx_from_load]
|
||||
cmp ax,'r1' ; åñëè ñðàì äèñê - òî íå ãðóçèòü áèáëèîòåêè
|
||||
je no_lib_load
|
||||
; LOADING LIBRARES
|
||||
stdcall dll.Load,@IMPORT ; SPraid - çàãðóçêà ôóíêöèîíàëà (ïîêà ÷òî èíè ôàéë)
|
||||
call load_conf_file ; prepare configuration file
|
||||
no_lib_load:
|
||||
|
||||
; LOAD FONTS I and II
|
||||
|
||||
mov esi,char
|
||||
xor ebx,ebx
|
||||
mov ecx,2560
|
||||
mov edx,FONT_I
|
||||
call fs_RamdiskRead
|
||||
; mov esi,char
|
||||
; xor ebx,ebx
|
||||
; mov ecx,2560
|
||||
; mov edx,FONT_I
|
||||
; call fs_RamdiskRead
|
||||
|
||||
mov esi,char2
|
||||
xor ebx,ebx
|
||||
mov ecx,2560;26000
|
||||
mov edx,FONT_II
|
||||
call fs_RamdiskRead
|
||||
; mov esi,char2
|
||||
; xor ebx,ebx
|
||||
; mov ecx,2560;26000
|
||||
; mov edx,FONT_II
|
||||
; call fs_RamdiskRead
|
||||
|
||||
pushad
|
||||
push eax
|
||||
mov eax,char
|
||||
call file_system_lfn
|
||||
mov eax,char2
|
||||
call file_system_lfn
|
||||
pop eax
|
||||
popad
|
||||
|
||||
|
||||
mov esi,boot_fonts
|
||||
call boot_log
|
||||
|
||||
@ -745,22 +765,58 @@ include 'vmodeld.inc'
|
||||
cmp byte [BOOT_VAR+0x9030],1
|
||||
jne no_load_vrr_m
|
||||
|
||||
mov ebp, vrr_m
|
||||
; mov ebp, vrr_m
|
||||
; xor ebx, ebx
|
||||
; xor edx, edx
|
||||
; call fs_execute
|
||||
; cmp eax,2 ; if vrr_m app found (PID=2)
|
||||
; je first_app_found
|
||||
|
||||
|
||||
stdcall kernel_alloc, 0x100
|
||||
push eax
|
||||
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)
|
||||
je first_app_found
|
||||
|
||||
no_load_vrr_m:
|
||||
mov ebp, firstapp
|
||||
; mov ebp, firstapp
|
||||
; xor ebx, ebx
|
||||
; xor edx, edx
|
||||
; call fs_execute
|
||||
; cmp eax,2 ; continue if a process has been loaded
|
||||
; je first_app_found
|
||||
; mov eax, 0xDEADBEEF ; otherwise halt
|
||||
; hlt
|
||||
|
||||
stdcall kernel_alloc, 0x100
|
||||
push eax
|
||||
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:
|
||||
cli
|
||||
|
||||
@ -3372,7 +3428,7 @@ checkpixel:
|
||||
ret
|
||||
|
||||
iglobal
|
||||
cpustring db '/RD/1/CPU',0
|
||||
cpustring db '%sys%/CPU',0
|
||||
endg
|
||||
|
||||
uglobal
|
||||
|
@ -244,3 +244,15 @@ include "hid/mousedrv.inc"
|
||||
include "hid/set_dtc.inc"
|
||||
|
||||
;% -include
|
||||
|
||||
;parser file names
|
||||
include "fs/parse_fn.inc"
|
||||
|
||||
; work with conf lib
|
||||
include "core/conf_lib.inc"
|
||||
|
||||
; load external lib
|
||||
include "core/ext_lib.inc"
|
||||
|
||||
; list of external functions
|
||||
include "lib_func.inc"
|
372
kernel/trunk/lib/inifiles.asm
Normal file
372
kernel/trunk/lib/inifiles.asm
Normal file
@ -0,0 +1,372 @@
|
||||
;-----------------------------------------------------------------------------
|
||||
; Copyright (c) 2007, SPraid
|
||||
;-----------------------------------------------------------------------------
|
||||
format MS COFF
|
||||
|
||||
public EXPORTS
|
||||
|
||||
include '../proc32.inc'
|
||||
include 'proc.inc'
|
||||
|
||||
purge section
|
||||
section '.flat' code readable align 16
|
||||
|
||||
mem.alloc dd ?
|
||||
mem.free dd ?
|
||||
mem.realloc dd ?
|
||||
dll.load dd ?
|
||||
|
||||
block_count: dd 0
|
||||
sect_num: dd 0
|
||||
data_adr: dd 0
|
||||
data_adr_last dd 0
|
||||
|
||||
filei_len EQU 0x4000
|
||||
filei dd ?;0x4000 ; áá뫪¨ ¤ ë¥ - ⨯ â ¬ åà ¨âìáï ¡ã¤¨â... ¢ ç «¥ â ¬ - ᪮ª ¤ ¢ë¤¥«¨âì
|
||||
sec_i_len EQU 0x4000
|
||||
sec_i dd ?;0x4000
|
||||
dat_i_len EQU 0x4000
|
||||
dat_i dd ?;0x4000
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
proc lib_init ;////////// ˆæ¨«¨§ æ¨ï ¡¨¡«¨®â¥ª¨ ( ¢â®¬ â¨ç¥áª¨© ¢ë§®¢)///////
|
||||
;-----------------------------------------------------------------------------
|
||||
mov [mem.alloc],eax
|
||||
mov [mem.free],ebx
|
||||
mov [mem.realloc],ecx
|
||||
mov [dll.load],edx
|
||||
xor eax,eax
|
||||
inc eax
|
||||
ret
|
||||
endp
|
||||
|
||||
|
||||
; áâàãªâãà ¡«®ª
|
||||
block_adr EQU 0
|
||||
block_name EQU block_adr + 4
|
||||
block_i_count EQU block_name + 30
|
||||
block_len EQU block_i_count + 4
|
||||
; áâàãªâãà ¤ ëå
|
||||
data_name EQU 0
|
||||
data_prev EQU data_name+200
|
||||
data_next EQU data_prev+4
|
||||
data_len EQU data_next+4
|
||||
|
||||
|
||||
|
||||
|
||||
; ¢§ïâì á«¥¤ã騩 ¯ àã § ç¥¨ï ª«îç
|
||||
proc ini.get_par stdcall, sect:dword, param:dword, val:dword, num:dword
|
||||
|
||||
pushad
|
||||
mov edx,[block_count]
|
||||
mov edi,[sect]
|
||||
mov esi,[sec_i]
|
||||
add esi,block_name
|
||||
@@: call strcmp
|
||||
cmp eax,-1
|
||||
jne .sec_found
|
||||
dec edx
|
||||
or edx,edx
|
||||
jz .sec_not_found
|
||||
add esi,block_len
|
||||
jmp @b
|
||||
.sec_found:
|
||||
|
||||
mov eax,esi
|
||||
sub eax,block_name
|
||||
add eax, block_i_count
|
||||
mov eax,[eax]
|
||||
; eax - count
|
||||
mov ebx,[num] ; test max count
|
||||
; ebx - num
|
||||
cmp eax,ebx
|
||||
jle .param_not_found
|
||||
|
||||
sub esi,4
|
||||
mov esi,[esi]
|
||||
; esi - first adr
|
||||
mov eax,ebx ; eax - num
|
||||
@@:
|
||||
or eax,eax
|
||||
je .param_found
|
||||
dec eax
|
||||
add esi,data_next
|
||||
mov esi,[esi]
|
||||
jmp @b
|
||||
|
||||
.param_found:
|
||||
mov ebx,esi
|
||||
mov eax,[param]
|
||||
mov cl,'='
|
||||
call copy_s
|
||||
add ebx,eax
|
||||
add ebx,1
|
||||
mov eax,[val]
|
||||
mov cl,0
|
||||
call copy_s
|
||||
jmp .ok
|
||||
|
||||
.param_not_found:
|
||||
.sec_not_found:
|
||||
; set_default_.... 0
|
||||
mov eax,[param]
|
||||
mov [eax],byte 0
|
||||
mov eax,[val]
|
||||
mov [eax],byte 0
|
||||
.ok:
|
||||
popad
|
||||
ret
|
||||
|
||||
|
||||
endp
|
||||
;------------------------------------------------------
|
||||
proc ini.get_str stdcall, sect:dword, param:dword, buff:dword, default:dword
|
||||
; sect - ᥪæ¨ï
|
||||
; param - ¯ à ¬¥âà
|
||||
; buff - ¡ãä¥à
|
||||
; default - ¥á«¨ ®âáãâáâ¢ã¥â
|
||||
pushad
|
||||
mov edx,[block_count]
|
||||
mov edi,[sect]
|
||||
mov esi,[sec_i]
|
||||
add esi,block_name
|
||||
@@: call strcmp
|
||||
cmp eax,-1
|
||||
jne .sec_found
|
||||
dec edx
|
||||
or edx,edx
|
||||
jz .sec_not_found
|
||||
add esi,block_len
|
||||
jmp @b
|
||||
.sec_found:
|
||||
|
||||
mov eax,esi
|
||||
sub eax,block_name
|
||||
add eax, block_i_count
|
||||
mov eax,[eax]
|
||||
; eax - count
|
||||
sub esi,4
|
||||
mov esi,[esi]
|
||||
; esi - first adr
|
||||
mov edi,[param]
|
||||
push eax
|
||||
|
||||
@@:
|
||||
mov cl,'='
|
||||
mov eax,text
|
||||
mov ebx,esi
|
||||
call copy_s
|
||||
mov edx,eax
|
||||
push esi
|
||||
mov esi,text
|
||||
call strcmp
|
||||
pop esi
|
||||
cmp eax,-1
|
||||
jne .param_found
|
||||
pop eax
|
||||
dec eax
|
||||
or eax,eax
|
||||
jz .sec_not_found
|
||||
push eax
|
||||
add esi,data_next
|
||||
mov esi,[esi]
|
||||
jmp @b
|
||||
.param_found:
|
||||
mov ebx,esi
|
||||
add ebx,edx
|
||||
add ebx,1
|
||||
pop eax
|
||||
mov eax,[buff]
|
||||
mov cl,0
|
||||
call copy_s
|
||||
jmp .ok
|
||||
.param_not_found:
|
||||
.sec_not_found:
|
||||
; set_default_text
|
||||
mov eax,[buff]
|
||||
mov ebx,[default]
|
||||
mov cl,0
|
||||
call copy_s
|
||||
.ok:
|
||||
popad
|
||||
ret
|
||||
endp
|
||||
;--------------------------------------------------------------------------------
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;-----------------------------------------------------------------------------
|
||||
proc ini.load stdcall filename ;/(§ £à㧪 ¨¨ ä ©« )/////////////////////////
|
||||
locals
|
||||
reads: dd 0,0,0
|
||||
fsize dd 0
|
||||
addr dd filei
|
||||
nulls db 0
|
||||
fname dd 0
|
||||
endl
|
||||
mov [reads],dword 0
|
||||
mov [reads+4],dword 0
|
||||
mov [reads+8],dword 0
|
||||
mov [nulls],byte 0
|
||||
|
||||
stdcall get_filesize, [filename]
|
||||
mov [fsize],eax
|
||||
|
||||
inc eax
|
||||
|
||||
mov ebx,eax
|
||||
|
||||
invoke mem.alloc,eax
|
||||
mov [filei],eax
|
||||
|
||||
mov [addr],eax
|
||||
|
||||
add eax,ebx
|
||||
mov [eax], byte 0 ;null string
|
||||
|
||||
invoke mem.alloc,sec_i_len
|
||||
mov [sec_i],eax
|
||||
|
||||
invoke mem.alloc,dat_i_len
|
||||
mov [dat_i],eax
|
||||
mov [data_adr],eax
|
||||
|
||||
mov eax,[filename]
|
||||
mov [fname],eax
|
||||
|
||||
mov eax,70
|
||||
mov ebx , reads-ebp
|
||||
add ebx,ebp
|
||||
int 0x40
|
||||
|
||||
stdcall readlnf
|
||||
|
||||
xor eax,eax
|
||||
ret
|
||||
|
||||
|
||||
endp
|
||||
|
||||
|
||||
proc readlnf
|
||||
pushad
|
||||
mov [.pos],dword 0
|
||||
.char:
|
||||
mov eax,[.pos]
|
||||
inc eax
|
||||
mov [.pos],eax
|
||||
|
||||
sub eax,1
|
||||
add eax,[filei]
|
||||
mov al,[eax] ; ᨬ¢®« ®â ¯®§¨æ¨¨
|
||||
; ⨯ ¯® ¯¥à¢®¬ã ᨬ¢®«ã
|
||||
cmp al,' '
|
||||
je .char
|
||||
cmp al,9
|
||||
je .char
|
||||
cmp al,13
|
||||
je .char
|
||||
cmp al,10
|
||||
je .char
|
||||
cmp al,'['
|
||||
je .sect
|
||||
cmp al,0
|
||||
je .exit
|
||||
;------------------------------------------------------------------------------------------
|
||||
; ç⥨¥ ¯ à ¬¥â஢
|
||||
mov eax,[data_adr]
|
||||
mov ebx,[.pos]
|
||||
add ebx,[filei]
|
||||
dec ebx
|
||||
mov cl,0xD
|
||||
call copy_s
|
||||
xchg ebx,eax
|
||||
mov eax,[.pos]
|
||||
add eax,ebx
|
||||
mov [.pos],eax
|
||||
|
||||
|
||||
mov ebx,[data_adr]
|
||||
mov ecx,[data_adr_last]
|
||||
mov [ebx+data_prev],ecx
|
||||
;add ebx,data_next
|
||||
mov [ecx],ebx
|
||||
add ebx,data_next
|
||||
mov [data_adr_last],ebx
|
||||
|
||||
add ebx,data_len-data_next
|
||||
mov [data_adr],ebx
|
||||
mov eax,[sect_num]
|
||||
imul eax,eax,block_len
|
||||
add eax,[sec_i]
|
||||
add eax, block_i_count
|
||||
mov ebx,[eax]
|
||||
inc ebx
|
||||
mov [eax],ebx
|
||||
jmp .test_next
|
||||
;-----------------------------------------------------------------------------------------------------------------
|
||||
.sect: ; ç⥨¥ ᥪ樨
|
||||
mov eax,[block_count]
|
||||
imul eax,eax,block_len
|
||||
; ª®¯¨à㥬 ¨¬ï (¤® ])
|
||||
add eax,[sec_i]
|
||||
add eax,block_name ; ªã¦ «®¦¨âì ¨¬ï
|
||||
mov ebx,[.pos]
|
||||
add ebx,[filei] ; ®âªã¤
|
||||
mov cl,']'
|
||||
call copy_s ; «®¦¨¬
|
||||
|
||||
|
||||
mov ebx,[.pos]
|
||||
add ebx,eax
|
||||
;sub ebx,filei
|
||||
add ebx,1
|
||||
mov [.pos],ebx
|
||||
|
||||
mov eax,[block_count] ; ¯à¨¡ ¢¨âì ª®«¨ç¥á⢮ ¡«®ª®¢
|
||||
mov [sect_num],eax
|
||||
mov ebx,eax
|
||||
imul eax,eax,block_len ; íâ® ¡ã¤¨â ¤à¥á ¯¥à¤ë¤ã饣® ¤«ï ¯¥à¢®£® í«¥¬¥â
|
||||
add eax,[sec_i]
|
||||
mov [data_adr_last],eax
|
||||
inc ebx
|
||||
mov [block_count],ebx
|
||||
|
||||
|
||||
.test_next:
|
||||
cmp [.pos] ,dword 97
|
||||
jb .char
|
||||
|
||||
.exit:
|
||||
|
||||
popad
|
||||
ret
|
||||
|
||||
.pos dd 0
|
||||
|
||||
endp
|
||||
|
||||
|
||||
text db 255 dup(?)
|
||||
|
||||
align 16
|
||||
EXPORTS:
|
||||
|
||||
export \
|
||||
lib_init ,'lib_init',\
|
||||
ini.load ,'ini.load',\
|
||||
ini.get_str,'ini.get_str',\
|
||||
ini.get_par,'ini.get_par'
|
100
kernel/trunk/lib/proc.inc
Normal file
100
kernel/trunk/lib/proc.inc
Normal file
@ -0,0 +1,100 @@
|
||||
macro export [name,sname]
|
||||
{
|
||||
forward
|
||||
dd __#name#_export_name__,name
|
||||
common
|
||||
dd 0
|
||||
forward
|
||||
align 4
|
||||
__#name#_export_name__ db sname,0
|
||||
}
|
||||
|
||||
copy_s:
|
||||
; eax - ªã¤
|
||||
; ebx - ®âªã¤
|
||||
; cl - ¤® 祣®
|
||||
; ¢ë室 - eax - ᪮«ìª® ᪮¯¨à®¢ ®
|
||||
pushad
|
||||
push eax
|
||||
@@:
|
||||
mov ch,[ebx]
|
||||
cmp ch,cl
|
||||
je @f
|
||||
mov [eax],ch
|
||||
inc ebx
|
||||
inc eax
|
||||
jmp @b
|
||||
@@:
|
||||
mov [eax], byte 0
|
||||
pop ebx
|
||||
sub eax,ebx
|
||||
mov [esp+0x1c],eax
|
||||
popad
|
||||
ret
|
||||
|
||||
strcmp:
|
||||
; esi - áâப 1
|
||||
; edi - áâப 2
|
||||
; ¢ë室 - eax=-1 - ¥à ¢®
|
||||
xor eax,eax
|
||||
pushad
|
||||
@@: lodsb
|
||||
scasb
|
||||
jne .fail
|
||||
or al,al
|
||||
jnz @b
|
||||
jmp .ok
|
||||
.fail: or eax,-1
|
||||
mov [esp+0x1c],eax
|
||||
.ok: popad
|
||||
ret
|
||||
|
||||
|
||||
|
||||
proc get_filesize stdcall, file_name:dword
|
||||
locals
|
||||
cmd dd ?
|
||||
offset dd ?
|
||||
dd ?
|
||||
count dd ?
|
||||
buff dd ?
|
||||
db ?
|
||||
name dd ?
|
||||
|
||||
info dd ?
|
||||
flags dd ?
|
||||
cr_time dd ?
|
||||
cr_date dd ?
|
||||
acc_time dd ?
|
||||
acc_date dd ?
|
||||
mod_time dd ?
|
||||
mod_date dd ?
|
||||
file_size dd ?
|
||||
|
||||
file dd ?
|
||||
file2 dd ?
|
||||
|
||||
|
||||
endl
|
||||
|
||||
xor eax, eax
|
||||
mov ebx, [file_name]
|
||||
mov ecx,info-ebp
|
||||
add ecx,ebp
|
||||
|
||||
mov [cmd], 5
|
||||
mov [offset], eax
|
||||
mov [offset+4], eax
|
||||
mov [count], eax
|
||||
mov [buff], ecx
|
||||
mov byte [buff+4], al
|
||||
mov [name], ebx
|
||||
|
||||
mov eax, 70
|
||||
lea ebx, [cmd]
|
||||
int 0x40
|
||||
|
||||
mov eax,[file_size]
|
||||
|
||||
ret
|
||||
endp
|
21
kernel/trunk/lib_func.inc
Normal file
21
kernel/trunk/lib_func.inc
Normal file
@ -0,0 +1,21 @@
|
||||
;============================================================================
|
||||
;
|
||||
; Çàãğóçêà ññûëêè íà âíåøíèå ôóíêöèè
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;
|
||||
;============================================================================
|
||||
|
||||
|
||||
@IMPORT:
|
||||
|
||||
library \
|
||||
libini,'inifiles.obj'
|
||||
|
||||
import libini, \
|
||||
ini.load,'ini.load',\
|
||||
ini.get_str,'ini.get_str',\
|
||||
ini.get_par,'ini.get_par'
|
2
kernel/trunk/sys.conf
Normal file
2
kernel/trunk/sys.conf
Normal file
@ -0,0 +1,2 @@
|
||||
[path]
|
||||
/rd/1=%sys%
|
Loading…
Reference in New Issue
Block a user