picoc/cstdlib/string.c
zik.saleeba 7a8014ee42 Added an initial version of stdlib.c
git-svn-id: http://picoc.googlecode.com/svn/trunk@434 21eae674-98b7-11dd-bd71-f92a316d2d60
2010-06-13 12:29:45 +00:00

89 lines
3.5 KiB
C

/* string.h library for large systems - small embedded systems use clibrary.c instead */
#include "../picoc.h"
#ifndef BUILTIN_MINI_STDLIB
static int ZeroValue = 0;
void StringStrcpy(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->NativePointer = strcpy(Param[0]->Val->NativePointer, Param[1]->Val->NativePointer);
}
void StringStrncpy(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->NativePointer = strncpy(Param[0]->Val->NativePointer, Param[1]->Val->NativePointer, Param[2]->Val->Integer);
}
void StringStrcmp(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->Integer = strcmp(Param[0]->Val->NativePointer, Param[1]->Val->NativePointer);
}
void StringStrncmp(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->Integer = strncmp(Param[0]->Val->NativePointer, Param[1]->Val->NativePointer, Param[2]->Val->Integer);
}
void StringStrcat(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->NativePointer = strcat(Param[0]->Val->NativePointer, Param[1]->Val->NativePointer);
}
void StringIndex(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->NativePointer = index(Param[0]->Val->NativePointer, Param[1]->Val->Integer);
}
void StringRindex(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->NativePointer = rindex(Param[0]->Val->NativePointer, Param[1]->Val->Integer);
}
void StringStrlen(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->Integer = strlen(Param[0]->Val->NativePointer);
}
void StringMemset(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
memset(Param[0]->Val->NativePointer, Param[1]->Val->Integer, Param[2]->Val->Integer);
}
void StringMemcpy(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
memcpy(Param[0]->Val->NativePointer, Param[1]->Val->NativePointer, Param[2]->Val->Integer);
}
void StringMemcmp(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
{
ReturnValue->Val->Integer = memcmp(Param[0]->Val->NativePointer, Param[1]->Val->NativePointer, Param[2]->Val->Integer);
}
/* all string.h functions */
struct LibraryFunction StringFunctions[] =
{
{ StringStrcpy, "char *strcpy(char *,char *);" },
{ StringStrncpy, "char *strncpy(char *,char *,int);" },
{ StringStrcmp, "int strcmp(char *,char *);" },
{ StringStrncmp, "int strncmp(char *,char *,int);" },
{ StringStrcat, "char *strcat(char *,char *);" },
{ StringIndex, "char *index(char *,int);" },
{ StringRindex, "char *rindex(char *,int);" },
{ StringStrlen, "int strlen(char *);" },
{ StringMemset, "void *memset(void *,int,int);" },
{ StringMemcpy, "void *memcpy(void *,void *,int);" },
{ StringMemcmp, "int memcmp(void *,void *,int);" },
{ NULL, NULL }
};
/* creates various system-dependent definitions */
void StringSetupFunc(void)
{
/* define NULL */
if (!VariableDefined(TableStrRegister("NULL")))
VariableDefinePlatformVar(NULL, "NULL", &IntType, (union AnyValue *)&ZeroValue, FALSE);
}
#endif /* !BUILTIN_MINI_STDLIB */