Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 331 → Rev 332

/programs/develop/fasm/trunk/fasm.asm
41,6 → 41,10
center fix true
 
START: ; Start of execution
mov edi, fileinfos
mov ecx, (fileinfos_end-fileinfos)/4
or eax, -1
rep stosd
 
cmp [params],0
jz red
545,4 → 549,7
start_time dd ?
 
sc system_colors
max_handles = 8
fileinfos rb (4+20+MAX_PATH)*max_handles
fileinfos_end:
pinfo process_information
/programs/develop/fasm/trunk/system.inc
87,9 → 87,34
; stc
ret
 
alloc_handle:
call make_fullpaths
mov ebx, fileinfos+4
@@:
cmp dword [ebx], -1
jz .found
add ebx, 4+20+MAX_PATH
cmp ebx, fileinfos_end
jb @b
stc
ret
.found:
and dword [ebx+4], 0
and dword [ebx+8], 0
push esi edi ecx
mov esi, fullpath_open
lea edi, [ebx+20]
mov ecx, MAX_PATH
rep movsb
pop ecx edi esi
ret ; CF=0
 
create:
call make_fullpaths
call alloc_handle
jc .ret
and dword [ebx-4], 0
mov dword [ebx], 2
.ret:
ret
 
 
112,27 → 137,24
; stc
; ret
 
call make_fullpaths
 
xor eax, eax
mov [fileio.cmd], 5
mov [fileio.offset], eax
mov [fileio.offset+4], eax
mov [fileio.count], eax
mov [fileio.buff], fileinfo
mov byte [fileio.buff+4], al
mov [fileio.name], fullpath_open
 
call alloc_handle
jc .ret
mov dword [ebx], 5
and dword [ebx+12], 0
mov dword [ebx+16], fileinfo
mov eax, 70
mov ebx, fileio
push ebx
int 0x40
pop ebx
test eax, eax
jnz .fail
mov ebx, [fileinfo.size]
mov [filesize],ebx
clc
mov eax, [fileinfo.size]
mov [ebx-4], eax
and dword [ebx], 0
.ret:
ret
.fail:
or dword [ebx], -1 ; close handle
stc
ret
 
146,18 → 168,26
; popa
;; ret
 
xor eax, eax
mov [fileio.cmd], eax
mov [fileio.offset], eax
mov [fileio.offset+4], eax
mov [fileio.count], ecx
mov [fileio.buff], edx
mov byte [fileio.buff+4], al
mov [fileio.name], fullpath_open
mov [ebx+12], ecx
mov [ebx+16], edx
push ebx
mov eax, 70
mov ebx, fileio
int 0x40
xchg eax, [esp]
add [eax+4], ebx
adc [eax+8], dword 0
mov ebx, eax
pop eax
test eax, eax
jz .ok
cmp eax, 6
jz .ok
stc
.ok:
ret
 
close:
or dword [ebx], -1
ret
 
 
175,24 → 205,20
; popa
; ret
 
xor eax, eax
mov [fileio.cmd], 2
mov [fileio.offset], eax
mov [fileio.offset+4], eax
mov [fileio.count], ecx
mov [fileio.buff], edx
mov byte [fileio.buff+4], al
mov [fileio.name], fullpath_write
mov [ebx+12], ecx
mov [ebx+16], edx
push ebx
mov eax, 70
mov ebx, fileio
int 0x40
test eax, eax
jnz .fail
clc
xchg eax, [esp]
add [eax+4], ebx
adc [eax+8], dword 0
mov ebx, eax
pop eax
mov byte [ebx], 3
cmp eax, 1
cmc
ret
.fail:
stc
ret
 
make_fullpaths:
pusha
278,16 → 304,15
lseek:
cmp al,0
jnz @f
mov [filepos],0
@@: cmp al,1
jnz @f
and dword [ebx+4], 0
and dword [ebx+8], 0
@@: cmp al,2
jnz @f
mov eax,[filesize]
mov [filepos],eax
@@: mov eax,[filepos]
add eax,edx
mov [filepos],eax
mov eax, [ebx-4]
mov [ebx+4], eax
and dword [ebx+8], 0
@@: add dword [ebx+4], edx
adc dword [ebx+8], 0
ret
 
display_character:
509,8 → 534,6
jmp exit_program
 
align 4
fileio FILEIO
align 4
fileinfo FILEINFO
 
character db ?,0