forked from KolibriOS/kolibrios
-added long file names support
-small bug fix git-svn-id: svn://kolibrios.org@244 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
b22c241723
commit
6ec45316ae
@ -3,7 +3,7 @@
|
|||||||
int fclose(FILE* file)
|
int fclose(FILE* file)
|
||||||
{
|
{
|
||||||
int res;
|
int res;
|
||||||
res=_msys_write_file(file->filename,file->filesize,file->buffer);
|
res=_msys_write_file(file->filename, 0, file->filesize, file->buffer);
|
||||||
free(file->buffer);
|
free(file->buffer);
|
||||||
free(file);
|
free(file);
|
||||||
return res;
|
return res;
|
||||||
|
@ -3,5 +3,5 @@ int fflush(FILE* file)
|
|||||||
{
|
{
|
||||||
if ((file->mode & 3)==FILE_OPEN_READ)
|
if ((file->mode & 3)==FILE_OPEN_READ)
|
||||||
return 0;
|
return 0;
|
||||||
return _msys_file_write(file->filename,file->filesize,file->buffer) ? EOF : 0;
|
return _msys_file_write(file->filename, 0, file->filesize, file->buffer) ? EOF : 0;
|
||||||
}
|
}
|
@ -40,7 +40,7 @@ FILE* fopen(const char* filename, const char *mode)
|
|||||||
res->filename=0;
|
res->filename=0;
|
||||||
res->mode=imode;
|
res->mode=imode;
|
||||||
//check if file exists
|
//check if file exists
|
||||||
res=_msys_read_file(filename,0,0,0,&res->filesize);
|
res=_msys_read_file(filename, 0, 0, 0, &res->filesize);
|
||||||
if (res==5)
|
if (res==5)
|
||||||
{
|
{
|
||||||
if ((imode & 3) == FILE_OPEN_READ)
|
if ((imode & 3) == FILE_OPEN_READ)
|
||||||
@ -48,7 +48,7 @@ FILE* fopen(const char* filename, const char *mode)
|
|||||||
free(res);
|
free(res);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
res=_msys_write_file(filename,0,0);
|
res=_msys_create_file(filename);
|
||||||
if (res!=0)
|
if (res!=0)
|
||||||
{
|
{
|
||||||
free(res);
|
free(res);
|
||||||
|
@ -17,7 +17,8 @@ extern void stdcall _msys_draw_window(int xcoord,int ycoord, int xsize,
|
|||||||
int captioncolor,int windowtype,int bordercolor);
|
int captioncolor,int windowtype,int bordercolor);
|
||||||
extern int stdcall _msys_read_file(char* filename,int fileoffset,int size,void* data,
|
extern int stdcall _msys_read_file(char* filename,int fileoffset,int size,void* data,
|
||||||
int* filesize);
|
int* filesize);
|
||||||
extern int stdcall _msys_write_file(char* filename,int size,void* data);
|
extern int stdcall _msys_write_file(char* filename,int fileoffset, int size, void* data);
|
||||||
|
extern int stdcall _msys_create_file(char* filename);
|
||||||
extern void stdcall _msys_run_program(char* filename,char* parameters);
|
extern void stdcall _msys_run_program(char* filename,char* parameters);
|
||||||
extern void stdcall _msys_debug_out(int c);
|
extern void stdcall _msys_debug_out(int c);
|
||||||
extern void debug_out_str(char* str);
|
extern void debug_out_str(char* str);
|
||||||
|
@ -1,156 +0,0 @@
|
|||||||
format ELF
|
|
||||||
section '.text' executable
|
|
||||||
|
|
||||||
public _msys_draw_window
|
|
||||||
_msys_draw_window:
|
|
||||||
;arg1 - xcoord
|
|
||||||
;arg2 - ycoord
|
|
||||||
;arg3 - xsize
|
|
||||||
;arg4 - ysize
|
|
||||||
;arg5 - workcolor
|
|
||||||
;arg6 - type
|
|
||||||
;arg7 - captioncolor
|
|
||||||
;arg8 - windowtype
|
|
||||||
;arg9 - bordercolor
|
|
||||||
push ebp
|
|
||||||
mov ebp,esp
|
|
||||||
push ebx esi edi
|
|
||||||
mov ebx,[ebp+8]
|
|
||||||
shl ebx,16
|
|
||||||
mov bx,[ebp+16]
|
|
||||||
mov ecx,[ebp+12]
|
|
||||||
shl ecx,16
|
|
||||||
mov cx,[ebp+20]
|
|
||||||
mov edx,[ebp+28]
|
|
||||||
shl edx,24
|
|
||||||
add edx,[ebp+24]
|
|
||||||
mov esi,[ebp+36]
|
|
||||||
shl esi,24
|
|
||||||
add esi,[ebp+32]
|
|
||||||
mov edi,[ebp+40]
|
|
||||||
xor eax,eax
|
|
||||||
int 0x40
|
|
||||||
pop edi esi ebx
|
|
||||||
pop ebp
|
|
||||||
ret
|
|
||||||
|
|
||||||
public _msys_read_file
|
|
||||||
_msys_read_file:
|
|
||||||
;arg1 - file name
|
|
||||||
;arg2 - file offset
|
|
||||||
;arg3 - size to read
|
|
||||||
;arg4 - data
|
|
||||||
;arg5 - temp buffer
|
|
||||||
;arg6 - 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.offset],eax
|
|
||||||
mov eax,[ebp+20]
|
|
||||||
mov [file_struct.offset],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+28]
|
|
||||||
test ecx,ecx
|
|
||||||
jz .no_file_size
|
|
||||||
mov [ecx],ebx
|
|
||||||
.no_file_size:
|
|
||||||
pop ebx
|
|
||||||
pop ebp
|
|
||||||
ret
|
|
||||||
|
|
||||||
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 _msys_write_file
|
|
||||||
_msys_write_file:
|
|
||||||
;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
|
|
||||||
|
|
||||||
public _msys_run_program
|
|
||||||
_msys_run_program:
|
|
||||||
;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
|
|
||||||
|
|
||||||
public _msys_debug_out
|
|
||||||
_msys_debug_out:
|
|
||||||
;arg1 - char to out
|
|
||||||
push ebx
|
|
||||||
mov ecx,[esp+8]
|
|
||||||
mov ebx,1
|
|
||||||
mov eax,63
|
|
||||||
int 0x40
|
|
||||||
pop ebx
|
|
||||||
ret
|
|
||||||
section '.data' writeable
|
|
||||||
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
|
|
||||||
|
|
@ -1,108 +0,0 @@
|
|||||||
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
|
|
||||||
|
|
||||||
|
|
@ -1,5 +1,5 @@
|
|||||||
#include "ctype.h"
|
#include "ctype.h"
|
||||||
char __is[128] = {
|
int __is[128] = {
|
||||||
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
|
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
|
||||||
0x004, 0x104, 0x104, 0x104, 0x104, 0x104, 0x004, 0x004,
|
0x004, 0x104, 0x104, 0x104, 0x104, 0x104, 0x004, 0x004,
|
||||||
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
|
0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004, 0x004,
|
||||||
|
Loading…
Reference in New Issue
Block a user