forked from KolibriOS/kolibrios
4d719e6bc5
because of stdcall convention. * Some fixes in calculating relocations procedure. git-svn-id: svn://kolibrios.org@159 a494cfbc-eb01-0410-851d-a64ba20cac60
109 lines
2.0 KiB
NASM
109 lines
2.0 KiB
NASM
format ELF
|
|
include "public_stdcall.inc"
|
|
section '.text' executable
|
|
public_stdcall _msys_read_file,20
|
|
;arg1 - file name
|
|
;arg2 - file offset
|
|
;arg3 - size to read
|
|
;arg4 - data
|
|
;arg5 - file size
|
|
push ebp
|
|
mov ebp,esp
|
|
xor eax,eax
|
|
mov [file_struct.operation],eax
|
|
mov eax,[ebp+12]
|
|
mov [file_struct.offset],eax
|
|
mov eax,[ebp+16]
|
|
mov [file_struct.size],eax
|
|
mov eax,[ebp+20]
|
|
mov [file_struct.data],eax
|
|
mov [file_struct.temp_buffer],temp_buffer
|
|
mov edx,[ebp+8]
|
|
call copy_file_name
|
|
push ebx
|
|
mov ebx,file_struct
|
|
mov eax,58
|
|
int 0x40
|
|
mov ecx,[ebp+24]
|
|
test ecx,ecx
|
|
jz .no_file_size
|
|
mov [ecx],ebx
|
|
.no_file_size:
|
|
pop ebx
|
|
pop ebp
|
|
ret 20
|
|
|
|
copy_file_name:
|
|
push esi edi
|
|
cld
|
|
mov edi,edx
|
|
xor eax,eax
|
|
xor ecx,ecx
|
|
dec ecx
|
|
repnz scasb
|
|
not ecx
|
|
mov edi,file_struct.path
|
|
mov esi,edx
|
|
rep movsb
|
|
pop edi esi
|
|
ret
|
|
|
|
public_stdcall _msys_write_file,12
|
|
;arg1 - file name
|
|
;arg2 - size
|
|
;arg3 - data
|
|
push ebp
|
|
mov ebp,esp
|
|
xor eax,eax
|
|
mov [file_struct.offset],eax
|
|
inc eax
|
|
mov [file_struct.operation],eax
|
|
mov eax,[ebp+12]
|
|
mov [file_struct.size],eax
|
|
mov eax,[ebp+16]
|
|
mov [file_struct.data],eax
|
|
mov [file_struct.temp_buffer],temp_buffer
|
|
mov edx,[ebp+8]
|
|
call copy_file_name
|
|
push ebx
|
|
mov eax,58
|
|
mov ebx,file_struct
|
|
int 0x40
|
|
pop ebx
|
|
pop ebp
|
|
ret 12
|
|
|
|
public_stdcall _msys_run_program,8
|
|
;arg1 - program name
|
|
;arg2 - parameters
|
|
push ebp
|
|
mov ebp,esp
|
|
mov [file_struct.operation],16
|
|
xor eax,eax
|
|
mov [file_struct.offset],eax
|
|
mov [file_struct.data],eax
|
|
mov eax,[ebp+12]
|
|
mov [file_struct.param],eax
|
|
mov [file_struct.temp_buffer],temp_buffer;
|
|
mov edx,[ebp+8]
|
|
call copy_file_name
|
|
push ebx
|
|
mov eax,58
|
|
mov ebx,file_struct
|
|
int 0x40
|
|
pop ebx
|
|
pop ebp
|
|
ret 8
|
|
section '.bss' writeable
|
|
file_struct:
|
|
.operation rd 1
|
|
.offset rd 1
|
|
.param:
|
|
.size rd 1
|
|
.data rd 1
|
|
.temp_buffer rd 1
|
|
.path rb 1024
|
|
temp_buffer rb 4096
|
|
|
|
|