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]
|
; \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
|
; set up stack
|
||||||
mov ax, 3000h
|
mov ax, 3000h
|
||||||
mov ss, ax
|
mov ss, ax
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
set languages=en ru ge et
|
set languages=en ru ge et
|
||||||
set drivers=sound sis infinity ati2d vmode ps2mouse
|
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
|
call :Check_Target %1
|
||||||
for %%a in (all kernel) do if %%a==%target% call :Check_Lang %2
|
for %%a in (all kernel) do if %%a==%target% call :Check_Lang %2
|
||||||
@ -60,6 +60,7 @@ goto :eof
|
|||||||
call :Target_kernel
|
call :Target_kernel
|
||||||
call :Target_drivers
|
call :Target_drivers
|
||||||
call :Target_skins
|
call :Target_skins
|
||||||
|
call :Target_lib
|
||||||
goto :eof
|
goto :eof
|
||||||
|
|
||||||
|
|
||||||
@ -87,6 +88,15 @@ goto :eof
|
|||||||
cd ..
|
cd ..
|
||||||
goto :eof
|
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
|
:Target_clean
|
||||||
echo *** cleaning ...
|
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
|
endl
|
||||||
|
|
||||||
lea edx, [file_name]
|
lea edx, [file_name]
|
||||||
mov dword [edx], '/rd/'
|
mov dword [edx], '%sys'
|
||||||
mov dword [edx+4], '1/dr'
|
mov dword [edx+4], '%/dr'
|
||||||
mov dword [edx+8], 'iver'
|
mov dword [edx+8], 'iver'
|
||||||
mov word [edx+12], 's/'
|
mov word [edx+12], 's/'
|
||||||
mov esi, [driver_name]
|
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_lfb db 0
|
||||||
preboot_bootlog 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
|
align 4
|
||||||
old_ints_h:
|
old_ints_h:
|
||||||
dw 0x400
|
dw 0x400
|
||||||
|
@ -82,13 +82,21 @@ szSTART db 'START',0
|
|||||||
szEXPORTS db 'EXPORTS',0
|
szEXPORTS db 'EXPORTS',0
|
||||||
szIMPORTS db 'IMPORTS',0
|
szIMPORTS db 'IMPORTS',0
|
||||||
|
|
||||||
firstapp db '/rd/1/LAUNCHER',0
|
firstapp db '%sys%/LAUNCHER',0
|
||||||
char db 'FONTS/CHAR.MT',0
|
char dd 0,0,0
|
||||||
char2 db 'FONTS/CHAR2.MT',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 '
|
bootpath db '/KOLIBRI '
|
||||||
bootpath2 db 0
|
bootpath2 db 0
|
||||||
vmode db 'drivers/VMODE.MDR',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'
|
kernel_file db 'KERNEL MNT'
|
||||||
|
|
||||||
|
|
||||||
@ -105,6 +113,16 @@ drawbar dd __sys_drawbar.forced
|
|||||||
putpixel dd __sys_putpixel
|
putpixel dd __sys_putpixel
|
||||||
; } mike.dld
|
; } 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
|
align 4
|
||||||
keyboard dd 1
|
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)
|
; System function 70 - files with long names (LFN)
|
||||||
; diamond, 2006
|
; diamond, 2006
|
||||||
|
|
||||||
@ -79,6 +82,12 @@ 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:
|
||||||
@ -93,6 +102,53 @@ 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
|
; add eax, std_application_base_address
|
||||||
; parse file name
|
; parse file name
|
||||||
xchg ebx, eax
|
xchg ebx, eax
|
||||||
@ -115,13 +171,13 @@ file_system_lfn:
|
|||||||
; add ebx, new_app_base
|
; add ebx, new_app_base
|
||||||
.l1:
|
.l1:
|
||||||
call fs_execute ; ebp, ebx, edx
|
call fs_execute ; ebp, ebx, edx
|
||||||
mov [esp+36], eax
|
mov [image_of_eax], eax
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
cmp al, '/'
|
cmp al, '/'
|
||||||
jz @f
|
jz @f
|
||||||
.notfound:
|
.notfound:
|
||||||
mov dword [esp+36], 5 ; file not found
|
mov dword [image_of_eax], 5 ; file not found
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
cmp byte [esi], 0
|
cmp byte [esi], 0
|
||||||
@ -223,15 +279,15 @@ file_system_lfn:
|
|||||||
js @f
|
js @f
|
||||||
mov al, ERROR_END_OF_FILE
|
mov al, ERROR_END_OF_FILE
|
||||||
@@:
|
@@:
|
||||||
mov [esp+36], eax
|
mov [image_of_eax], eax
|
||||||
mov [esp+24], ebx
|
mov [image_of_ebx], ebx
|
||||||
ret
|
ret
|
||||||
; directory /
|
; directory /
|
||||||
.rootdir:
|
.rootdir:
|
||||||
cmp dword [ebx], 1 ; read folder?
|
cmp dword [ebx], 1 ; read folder?
|
||||||
jz .readroot
|
jz .readroot
|
||||||
.access_denied:
|
.access_denied:
|
||||||
mov dword [esp+36], 10 ; access denied
|
mov dword [image_of_eax], 10 ; access denied
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.readroot:
|
.readroot:
|
||||||
@ -299,8 +355,8 @@ file_system_lfn:
|
|||||||
js @f
|
js @f
|
||||||
mov al, ERROR_END_OF_FILE
|
mov al, ERROR_END_OF_FILE
|
||||||
@@:
|
@@:
|
||||||
mov [esp+36], eax
|
mov [image_of_eax], eax
|
||||||
mov [esp+24], ebx
|
mov [image_of_ebx], ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
.found1:
|
.found1:
|
||||||
@ -338,7 +394,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
|
||||||
; 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:
|
fs_OnRamdisk:
|
||||||
cmp ecx, 1
|
cmp ecx, 1
|
||||||
@ -351,11 +407,11 @@ fs_OnRamdisk:
|
|||||||
; add edx, std_application_base_address
|
; add edx, std_application_base_address
|
||||||
add ebx, 4
|
add ebx, 4
|
||||||
call dword [fs_RamdiskServices + eax*4]
|
call dword [fs_RamdiskServices + eax*4]
|
||||||
mov [esp+36], eax
|
mov [image_of_eax], eax
|
||||||
mov [esp+24], ebx
|
mov [image_of_ebx], ebx
|
||||||
ret
|
ret
|
||||||
.not_impl:
|
.not_impl:
|
||||||
mov dword [esp+36], 2 ; not implemented
|
mov dword [image_of_eax], 2 ; not implemented
|
||||||
ret
|
ret
|
||||||
|
|
||||||
fs_NotImplemented:
|
fs_NotImplemented:
|
||||||
@ -389,8 +445,8 @@ fs_OnFloppy:
|
|||||||
add ebx, 4
|
add ebx, 4
|
||||||
call dword [fs_FloppyServices + eax*4]
|
call dword [fs_FloppyServices + eax*4]
|
||||||
and [flp_status], 0
|
and [flp_status], 0
|
||||||
mov [esp+36], eax
|
mov [image_of_eax], eax
|
||||||
mov [esp+24], ebx
|
mov [image_of_ebx], ebx
|
||||||
ret
|
ret
|
||||||
|
|
||||||
fs_FloppyServices:
|
fs_FloppyServices:
|
||||||
@ -440,7 +496,7 @@ fs_OnHd:
|
|||||||
.nf:
|
.nf:
|
||||||
call free_hd_channel
|
call free_hd_channel
|
||||||
and [hd1_status], 0
|
and [hd1_status], 0
|
||||||
mov dword [esp+36], 5 ; not found
|
mov dword [image_of_eax], 5 ; not found
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
mov [fat32part], ecx
|
mov [fat32part], ecx
|
||||||
@ -457,13 +513,13 @@ fs_OnHd:
|
|||||||
call dword [fs_HdServices + eax*4]
|
call dword [fs_HdServices + eax*4]
|
||||||
call free_hd_channel
|
call free_hd_channel
|
||||||
and [hd1_status], 0
|
and [hd1_status], 0
|
||||||
mov [esp+36], eax
|
mov [image_of_eax], eax
|
||||||
mov [esp+24], ebx
|
mov [image_of_ebx], ebx
|
||||||
ret
|
ret
|
||||||
.not_impl:
|
.not_impl:
|
||||||
call free_hd_channel
|
call free_hd_channel
|
||||||
and [hd1_status], 0
|
and [hd1_status], 0
|
||||||
mov dword [esp+36], 2 ; not implemented
|
mov dword [image_of_eax], 2 ; not implemented
|
||||||
ret
|
ret
|
||||||
|
|
||||||
fs_HdServices:
|
fs_HdServices:
|
||||||
@ -520,7 +576,7 @@ fs_OnCd:
|
|||||||
.nf:
|
.nf:
|
||||||
call free_cd_channel
|
call free_cd_channel
|
||||||
and [cd_status], 0
|
and [cd_status], 0
|
||||||
mov dword [esp+36], 5 ; not found
|
mov dword [image_of_eax], 5 ; not found
|
||||||
ret
|
ret
|
||||||
@@:
|
@@:
|
||||||
mov ecx, [ebx+12]
|
mov ecx, [ebx+12]
|
||||||
@ -533,13 +589,13 @@ fs_OnCd:
|
|||||||
call dword [fs_CdServices + eax*4]
|
call dword [fs_CdServices + eax*4]
|
||||||
call free_cd_channel
|
call free_cd_channel
|
||||||
and [cd_status], 0
|
and [cd_status], 0
|
||||||
mov [esp+36], eax
|
mov [image_of_eax], eax
|
||||||
mov [esp+24], ebx
|
mov [image_of_ebx], ebx
|
||||||
ret
|
ret
|
||||||
.not_impl:
|
.not_impl:
|
||||||
call free_cd_channel
|
call free_cd_channel
|
||||||
and [cd_status], 0
|
and [cd_status], 0
|
||||||
mov dword [esp+36], 2 ; not implemented
|
mov dword [image_of_eax], 2 ; not implemented
|
||||||
ret
|
ret
|
||||||
|
|
||||||
fs_CdServices:
|
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
|
mov ebx,1
|
||||||
or ecx,-1
|
or ecx,-1
|
||||||
mov esi,12
|
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
|
ret
|
||||||
|
|
||||||
|
skin_to_load:
|
||||||
|
dd 0,0,0
|
||||||
|
dd 64*1024
|
||||||
|
.adr dd 0
|
||||||
|
db 0
|
||||||
|
.stradr dd 0
|
||||||
|
|
||||||
|
|
||||||
struct SKIN_HEADER
|
struct SKIN_HEADER
|
||||||
.ident dd ?
|
.ident dd ?
|
||||||
.version dd ?
|
.version dd ?
|
||||||
|
@ -11,7 +11,7 @@ $Revision$
|
|||||||
;
|
;
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
_skin_file_default db 'DEFAULT SKN',0
|
_skin_file_default db '%sys%/DEFAULT.SKN',0
|
||||||
endg
|
endg
|
||||||
|
|
||||||
struct SKIN_DATA
|
struct SKIN_DATA
|
||||||
|
@ -536,19 +536,39 @@ include 'boot/rdload.inc'
|
|||||||
include 'vmodeld.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
|
; LOAD FONTS I and II
|
||||||
|
|
||||||
mov esi,char
|
; mov esi,char
|
||||||
xor ebx,ebx
|
; xor ebx,ebx
|
||||||
mov ecx,2560
|
; mov ecx,2560
|
||||||
mov edx,FONT_I
|
; mov edx,FONT_I
|
||||||
call fs_RamdiskRead
|
; 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,char2
|
|
||||||
xor ebx,ebx
|
|
||||||
mov ecx,2560;26000
|
|
||||||
mov edx,FONT_II
|
|
||||||
call fs_RamdiskRead
|
|
||||||
|
|
||||||
mov esi,boot_fonts
|
mov esi,boot_fonts
|
||||||
call boot_log
|
call boot_log
|
||||||
@ -745,22 +765,58 @@ include 'vmodeld.inc'
|
|||||||
cmp byte [BOOT_VAR+0x9030],1
|
cmp byte [BOOT_VAR+0x9030],1
|
||||||
jne no_load_vrr_m
|
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 ebx, ebx
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
call fs_execute
|
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:
|
||||||
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 ebx, ebx
|
||||||
xor edx, edx
|
xor edx, edx
|
||||||
call fs_execute
|
call fs_execute
|
||||||
|
pop ebx
|
||||||
|
push eax
|
||||||
|
stdcall kernel_free, ebx
|
||||||
|
pop eax
|
||||||
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
|
||||||
mov eax, 0xDEADBEEF ; otherwise halt
|
mov eax, 0xDEADBEEF ; otherwise halt
|
||||||
hlt
|
hlt
|
||||||
|
|
||||||
|
|
||||||
first_app_found:
|
first_app_found:
|
||||||
cli
|
cli
|
||||||
|
|
||||||
@ -3372,7 +3428,7 @@ checkpixel:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
iglobal
|
iglobal
|
||||||
cpustring db '/RD/1/CPU',0
|
cpustring db '%sys%/CPU',0
|
||||||
endg
|
endg
|
||||||
|
|
||||||
uglobal
|
uglobal
|
||||||
|
@ -244,3 +244,15 @@ include "hid/mousedrv.inc"
|
|||||||
include "hid/set_dtc.inc"
|
include "hid/set_dtc.inc"
|
||||||
|
|
||||||
;% -include
|
;% -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