Initall commit
This commit is contained in:
107
fasmw172/TOOLS/LIBC/SYSTEM.INC
Normal file
107
fasmw172/TOOLS/LIBC/SYSTEM.INC
Normal file
@@ -0,0 +1,107 @@
|
||||
|
||||
extrn malloc
|
||||
extrn getenv
|
||||
extrn fopen
|
||||
extrn fclose
|
||||
extrn fread
|
||||
extrn fwrite
|
||||
extrn fseek
|
||||
extrn ftell
|
||||
extrn time
|
||||
extrn exit
|
||||
extrn 'free' as libc_free
|
||||
extrn 'write' as libc_write
|
||||
|
||||
alloc:
|
||||
ccall malloc,eax
|
||||
test eax,eax
|
||||
jz allocation_failed
|
||||
clc
|
||||
ret
|
||||
allocation_failed:
|
||||
stc
|
||||
ret
|
||||
free:
|
||||
ccall libc_free,eax
|
||||
ret
|
||||
display_string:
|
||||
lodsb
|
||||
or al,al
|
||||
jz string_displayed
|
||||
mov dl,al
|
||||
call display_character
|
||||
jmp display_string
|
||||
string_displayed:
|
||||
ret
|
||||
display_character:
|
||||
mov [character],dl
|
||||
ccall libc_write,[display_handle],character,1
|
||||
ret
|
||||
open:
|
||||
push esi edi ebp
|
||||
call adapt_path
|
||||
ccall fopen,buffer,open_mode
|
||||
pop ebp edi esi
|
||||
or eax,eax
|
||||
jz file_error
|
||||
mov ebx,eax
|
||||
clc
|
||||
ret
|
||||
adapt_path:
|
||||
mov esi,edx
|
||||
mov edi,buffer
|
||||
copy_path:
|
||||
lods byte [esi]
|
||||
cmp al,'\'
|
||||
jne path_char_ok
|
||||
mov al,'/'
|
||||
path_char_ok:
|
||||
stos byte [edi]
|
||||
or al,al
|
||||
jnz copy_path
|
||||
cmp edi,buffer+1000h
|
||||
ja not_enough_memory
|
||||
ret
|
||||
create:
|
||||
push esi edi ebp
|
||||
call adapt_path
|
||||
ccall fopen,buffer,create_mode
|
||||
pop ebp edi esi
|
||||
or eax,eax
|
||||
jz file_error
|
||||
mov ebx,eax
|
||||
clc
|
||||
ret
|
||||
close:
|
||||
ccall fclose,ebx
|
||||
ret
|
||||
read:
|
||||
push ebx ecx edx esi edi
|
||||
ccall fread,edx,1,ecx,ebx
|
||||
pop edi esi edx ecx ebx
|
||||
cmp eax,ecx
|
||||
jne file_error
|
||||
clc
|
||||
ret
|
||||
file_error:
|
||||
stc
|
||||
ret
|
||||
write:
|
||||
push ebx ecx edx esi edi
|
||||
ccall fwrite,edx,1,ecx,ebx
|
||||
pop edi esi edx ecx ebx
|
||||
cmp eax,ecx
|
||||
jne file_error
|
||||
clc
|
||||
ret
|
||||
lseek:
|
||||
push ebx
|
||||
movzx eax,al
|
||||
ccall fseek,ebx,edx,eax
|
||||
mov ebx,[esp]
|
||||
ccall ftell,ebx
|
||||
pop ebx
|
||||
ret
|
||||
|
||||
open_mode db 'r',0
|
||||
create_mode db 'w',0
|
||||
Reference in New Issue
Block a user