/programs/develop/metcc/trunk/libc/string/_mesys.asm |
---|
0,0 → 1,156 |
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 |
/programs/develop/metcc/trunk/libc/string/memchr.c |
---|
0,0 → 1,10 |
void* memchr(const void* buf,int c,int count) |
{ |
int i; |
for (i=0;i<count;i++) |
if (*(char*)buf==c) |
return (void*)buf; |
else |
buf++; |
return (void*)0; |
} |
/programs/develop/metcc/trunk/libc/string/memcmp.c |
---|
0,0 → 1,13 |
typedef unsigned char uc; |
int memcmp(const void* buf1,const void* buf2,int count) |
{ |
int i; |
for (i=0;i<count;i++) |
{ |
if (*(uc*)buf1<*(uc*)buf2) |
return -1; |
if (*(uc*)buf1>*(uc*)buf2) |
return 1; |
} |
return 0; |
} |
/programs/develop/metcc/trunk/libc/string/memmove.asm |
---|
0,0 → 1,16 |
format ELF |
section '.text' executable |
public memcpy |
public memmove |
memcpy: |
memmove: |
push esi edi |
mov edi,[esp+12] |
mov esi,[esp+16] |
mov ecx,[esp+20] |
jecxz .no_copy |
cld |
rep movsb |
.no_copy: |
pop edi esi |
ret |
/programs/develop/metcc/trunk/libc/string/memset.asm |
---|
0,0 → 1,15 |
format ELF |
section '.text' executable |
public memset |
memset: |
push edi |
mov edi,[esp+8] |
mov eax,[esp+12] |
mov ecx,[esp+16] |
jecxz .no_set |
cld |
rep stosb |
.no_set: |
pop edi |
ret |
/programs/develop/metcc/trunk/libc/string/strcat.c |
---|
0,0 → 1,13 |
char* strcat(char* strDest, const char* strSource) |
{ |
char* res; |
res=strDest; |
while (*strDest!='\0') strDest++; |
while (*strSource!='\0') |
{ |
*strDest=*strSource; |
strDest++; |
strSource++; |
} |
return res; |
} |
/programs/develop/metcc/trunk/libc/string/strchr.c |
---|
0,0 → 1,10 |
char* strchr(const char* string, int c) |
{ |
while (*string!='\0') |
{ |
if (*string==c) |
return (char*)string; |
string++; |
} |
return (char*)0; |
} |
/programs/develop/metcc/trunk/libc/string/strcmp.c |
---|
0,0 → 1,14 |
int strcmp(const char* string1, const char* string2) |
{ |
while (1) |
{ |
if (*string1<*string2) |
return -1; |
if (*string1>*string2) |
return 1; |
if (*string1=='\0') |
return 0; |
string1++; |
string2++; |
} |
} |
/programs/develop/metcc/trunk/libc/string/strcoll.c |
---|
0,0 → 1,4 |
int strcoll(const char* string1,const char* string2) |
{ |
return strcmp(string1,string2); |
} |
/programs/develop/metcc/trunk/libc/string/strcpy.c |
---|
0,0 → 1,14 |
char* strcpy(char* strDest,char* strSource) |
{ |
char* res; |
res=strDest; |
while(1) |
{ |
*strDest=*strSource; |
if (*strSource=='\0') |
break; |
strDest++; |
strSource++; |
} |
return res; |
} |
/programs/develop/metcc/trunk/libc/string/strcspn.c |
---|
0,0 → 1,17 |
int strcspn(const char* string, const char* strCharSet) |
{ |
const char* temp; |
int i; |
i=0; |
while(1) |
{ |
temp=strCharSet; |
while (*temp!='\0') |
{ |
if (*string==*temp) |
return i; |
temp++; |
} |
i++;string++; |
} |
} |
/programs/develop/metcc/trunk/libc/string/strdup.c |
---|
0,0 → 1,9 |
char* strdup(char* str) |
{ |
char* res; |
int len; |
len=strlen(str)+1; |
res=malloc(len); |
memcpy(res,str,len); |
return res; |
} |
/programs/develop/metcc/trunk/libc/string/strerror.c |
---|
0,0 → 1,4 |
char* strerror(int err) |
{ |
return (char*)0; |
} |
/programs/develop/metcc/trunk/libc/string/strlen.c |
---|
0,0 → 1,11 |
int strlen(const char* string) |
{ |
int i; |
i=0; |
while (*string!='\0') |
{ |
i++; |
string++; |
} |
return i; |
} |
/programs/develop/metcc/trunk/libc/string/strnbrk.c |
---|
0,0 → 1,16 |
char* strpbrk(const char* string, const char* strCharSet) |
{ |
char* temp; |
while (*string!='\0') |
{ |
temp=strCharSet; |
while (*temp!='\0') |
{ |
if (*string==*temp) |
return string; |
temp++; |
} |
string++; |
} |
return (char*)0; |
} |
/programs/develop/metcc/trunk/libc/string/strncat.c |
---|
0,0 → 1,14 |
char* strncat(char* strDest,const char* strSource,int count) |
{ |
char* res; |
res=strDest; |
while (*strDest!='\0') strDest++; |
while (count>0 && *strSource!='\0') |
{ |
*strDest=*strSource; |
count--; |
strDest++; |
strSource++; |
} |
return res; |
} |
/programs/develop/metcc/trunk/libc/string/strncmp.c |
---|
0,0 → 1,14 |
int strncmp(const char* string1, const char* string2, int count) |
{ |
while(count>0) |
{ |
if (*string1<*string2) |
return -1; |
if (*string1>*string2) |
return 1; |
if (*string1=='\0') |
return 0; |
count--; |
} |
return 0; |
} |
/programs/develop/metcc/trunk/libc/string/strncpy.c |
---|
0,0 → 1,14 |
char* strncpy(char* strDest,const char* strSource,int count) |
{ |
char* res; |
res=strDest; |
while (count>0) |
{ |
*strDest=*strSource; |
if (*strSource!='\0') |
strSource++; |
strDest++; |
count--; |
} |
return res; |
} |
/programs/develop/metcc/trunk/libc/string/strrchr.c |
---|
0,0 → 1,14 |
char* strrchr(const char* s,int c) |
{ |
char* res; |
res=(char*)0; |
while (1) |
{ |
if (*s==(char)c) |
res=(char*)s; |
if (*s=='\0') |
break; |
s++; |
} |
return res; |
} |
/programs/develop/metcc/trunk/libc/string/strspn.c |
---|
0,0 → 1,20 |
int strspn(const char* string,const char* strCharSet) |
{ |
int i; |
const char* temp; |
i=0; |
while (*string!='\0') |
{ |
temp=strCharSet; |
while (temp!='\0') |
{ |
if (*temp==*string) |
break; |
} |
if (temp=='\0') |
break; |
*string++; |
i++; |
} |
return i; |
} |
/programs/develop/metcc/trunk/libc/string/strstr.c |
---|
0,0 → 1,13 |
extern int strncmp(char* s1,char* s2,int len); |
char* strstr(const char* s, const char* find) |
{ |
int len; |
len=strlen(find); |
while (1) |
{ |
if (strncmp(s,find,len)==0) return s; |
if (*s=='\0') |
return (char*) 0; |
s++; |
} |
} |
/programs/develop/metcc/trunk/libc/string/strtok.c |
---|
0,0 → 1,14 |
#include "string.h" |
char* strtok(char* s,const char* delim) |
{ |
char* res; |
if (*s=='\0') |
return (char*)0; |
s+=strspn(s,delim); |
if (*s=='\0') |
return (char*)0; |
res=s; |
s+=strcspn(s,delim); |
*s=='\0'; |
return res; |
} |
/programs/develop/metcc/trunk/libc/string/strxfrm.c |
---|
0,0 → 1,4 |
int strxfrm(char* strDest, const char* strSource, int count) |
{ |
return 0; |
} |
/programs/develop/metcc/trunk/libc/string/. |
---|
Property changes: |
Added: svn:ignore |
+*.o |
+*.s |