8ca43880c9
Tested stdio functions so far. git-svn-id: http://picoc.googlecode.com/svn/trunk@422 21eae674-98b7-11dd-bd71-f92a316d2d60
64 lines
2.3 KiB
C
64 lines
2.3 KiB
C
/* stdio.h library */
|
|
#include "picoc.h"
|
|
|
|
#ifndef NO_HASH_INCLUDE
|
|
|
|
static int EOFValue = EOF;
|
|
|
|
void StdioFopen(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
|
|
{
|
|
ReturnValue->Val->NativePointer = fopen(Param[0]->Val->NativePointer, Param[1]->Val->NativePointer);
|
|
}
|
|
|
|
void StdioFclose(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
|
|
{
|
|
ReturnValue->Val->Integer = fclose(Param[0]->Val->NativePointer);
|
|
}
|
|
|
|
void StdioFread(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
|
|
{
|
|
ReturnValue->Val->Integer = fread(Param[0]->Val->NativePointer, Param[1]->Val->Integer, Param[2]->Val->Integer, Param[3]->Val->NativePointer);
|
|
}
|
|
|
|
void StdioFwrite(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
|
|
{
|
|
ReturnValue->Val->Integer = fwrite(Param[0]->Val->NativePointer, Param[1]->Val->Integer, Param[2]->Val->Integer, Param[3]->Val->NativePointer);
|
|
}
|
|
|
|
void StdioFgetc(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
|
|
{
|
|
ReturnValue->Val->Integer = fgetc(Param[0]->Val->NativePointer);
|
|
}
|
|
|
|
void StdioFgets(struct ParseState *Parser, struct Value *ReturnValue, struct Value **Param, int NumArgs)
|
|
{
|
|
ReturnValue->Val->NativePointer = fgets(Param[0]->Val->NativePointer, Param[1]->Val->Integer, Param[2]->Val->NativePointer);
|
|
}
|
|
|
|
const char StdioDefs[] = "\
|
|
typedef struct FILEStruct FILE; \
|
|
";
|
|
|
|
struct LibraryFunction StdioFunctions[] =
|
|
{
|
|
{ StdioFopen, "FILE *fopen(char *, char *);" },
|
|
{ StdioFclose, "int fclose(FILE *);" },
|
|
{ StdioFread, "int fread(void *, int, int, FILE *);" },
|
|
{ StdioFwrite, "int fwrite(void *, int, int, FILE *);" },
|
|
{ StdioFgetc, "int fgetc(FILE *);" },
|
|
{ StdioFgetc, "int getc(FILE *);" },
|
|
{ StdioFgets, "char *fgets(char *, int, FILE *);" },
|
|
{ NULL, NULL }
|
|
};
|
|
|
|
void StdioSetupFunc(void)
|
|
{
|
|
/* make a "struct FILEStruct" which is the same size as a native FILE structure */
|
|
TypeCreateOpaqueStruct(NULL, TableStrRegister("FILEStruct"), sizeof(FILE));
|
|
|
|
/* define EOF equal to the system EOF */
|
|
VariableDefinePlatformVar(NULL, "EOF", &IntType, (union AnyValue *)&EOFValue, FALSE);
|
|
}
|
|
|
|
#endif /* NO_HASH_INCLUDE */
|