; /** execute p:/pOS/pLib/StdIO.c
cc:c/storm/StormC_1_1_5 -o ram:StdIO1.o -d _M1_ -c p:pLib/StdIO.c -g20 -O9 -pc -i cc:include -i ci: -wEPRTcV -d NOMYDEBUG=1 -L

quit
; **/

#ifndef __INC_POS_PLIB_STDIO_C
#define __INC_POS_PLIB_STDIO_C
/*******************************************************************
 $CRT 16 Mar 1996 : hb

 $AUT Holger Burkarth
 $DAT >>StdIO.c<<   24 Sep 1996    09:01:56 - (C) ProDAD
*******************************************************************/

// mcpp:cppc -c p:pLib/StdIO.c


#include <p:pDOS/Files.h>
#include <p:pProto/pDOS2.h>

#ifdef __cplusplus
extern "C" {
#endif

#include <stdio.h>
#include <string.h>

#ifdef __cplusplus
}
#endif





/*----------------------------------
-----------------------------------*/
int fgetc(FILE* file) {return(pOS_FileGetC(file));}
int getc(FILE* file)  {return(pOS_FileGetC(file));}
int getchar(void)     {return(pOS_FileGetC(stdin));}
int ungetc(int ch,FILE* file) {return(pOS_FileUnGetC(file,ch));}

char *fgets(char* buf,int size, FILE* file)
  {return((char*)pOS_FileGets(file,(UBYTE*)buf,size));}

static UBYTE getsBuffer[STREAM_MAXSTRING];
char *gets(char* buf)
  {return((char*)pOS_FileGets(stdin,(UBYTE*)getsBuffer,STREAM_MAXSTRING-1));}

int fputc(int Char, FILE* file) {return(pOS_FilePutC(file,Char));}
int putc(int Char, FILE* file)  {return(pOS_FilePutC(file,Char));}
int putchar(int Char)           {return(pOS_FilePutC(stdout,Char));}
int fputs(const char* buf, FILE* file) {return(pOS_FilePuts(file,(UBYTE*)buf));}
int puts(const char* buf)              {return(pOS_FilePuts(stdout,(UBYTE*)buf));}
void perror(const char* str)  {pOS_FilePuts(stderr,(UBYTE*)str);}

FILE *fopen(const char* name, const char* mode)
{
  FILE* File=NULL;
  if(strchr(mode,'w'))
       File=pOS_OpenFile(NULL,name,FILEHDMOD_Write);
  else if(strchr(mode,'a'))
       File=pOS_OpenFile(NULL,name,FILEHDMOD_Append);
  else File=pOS_OpenFile(NULL,name,FILEHDMOD_Read);
  return(File);
}


FILE *freopen(const char* name, const char* mode, FILE* file)
{
  if(file) fclose(file);
  return(fopen(name,mode));
}

int fclose(FILE* file) {pOS_CloseFile(file); return(0);}
int feof(FILE* file)   {return(pOS_FileEOF(file)); }

int ferror(FILE* file) {return(0);}
void clearerr(FILE* file) {}

int setvbuf(FILE* file, char* buf, int mode, unsigned size) {return(0);}
void setbuf(FILE* file, char* buf) {}
int fflush(FILE* file) {return(0);}

int printf(const char* fmt, ...)
            {return(pOS_VFWritef(stdout,fmt,(ULONG*)(&fmt)+1));}
int fprintf(FILE* file, const char* fmt, ...)
            {return(pOS_VFWritef(file,fmt,(ULONG*)(&fmt)+1));}
//int sprintf(char*, const char*, ...);
int vprintf(const char* fmt, va_list lst)
            {return(pOS_VFWritef(stdout,fmt,(ULONG*)lst));}
int vfprintf(FILE* file, const char* fmt, va_list lst)
            {return(pOS_VFWritef(file,fmt,(ULONG*)lst));}
//int vsprintf(char*, const char*, va_list);

//int scanf(const char*, ...);
//int fscanf(FILE*, const char*, ...);
//int sscanf(char*, const char*, ...);

int remove(const char* name) {return(pOS_DeleteObjectName(NULL,name));}
//int rename(const char*, const char*);

//char *tmpnam (char s[L_tmpnam]);
//FILE *tmpfile (void);

unsigned fread(void* buf, unsigned size, unsigned count, FILE* file)
{ return(pOS_FileFRead(file,buf,size,count)); }

unsigned fwrite(const void* buf, unsigned size, unsigned count, FILE* file)
{ return(pOS_FileFWrite(file,(APTR)buf,size,count)); }

int fseek(FILE* file, long offset, int mode)
{
  if     (mode==SEEK_SET) mode=FILEHDSEK_Begin;
  else if(mode==SEEK_CUR) mode=FILEHDSEK_Current;
  else if(mode==SEEK_END) mode=FILEHDSEK_End;
  return(pOS_SeekFile(file,offset,mode));
}

long ftell(FILE* file) {return(pOS_SeekFile(file,0,FILEHDSEK_Current));}

void rewind(FILE* file) {pOS_SeekFile(file,0,FILEHDSEK_Begin);}

int fgetpos(FILE* file, int* pos)
{
  int Pos=pOS_SeekFile(file,0,FILEHDSEK_Current);
  if(pos) *pos=Pos;
  return(0);
}

int fsetpos(FILE* file,const int* pos)
{
  int Pos=pOS_SeekFile(file,*pos,FILEHDSEK_Begin);
  return(0);
}

//void exit(int);


#endif