-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:
victor 2006-12-24 00:14:30 +00:00
parent b22c241723
commit 6ec45316ae
7 changed files with 7 additions and 270 deletions

View File

@ -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;

View File

@ -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;
} }

View File

@ -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);

View File

@ -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);

View File

@ -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

View File

@ -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

View File

@ -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,