#ifndef  STDIO_STORMAMIGA_H
#define  STDIO_STORMAMIGA_H

/*
**     $VER: stdio_stormamiga.h 1.2 (18.09.98)
**             Includes Release 45.00
**
**     Copyright © 1996/99 by CyberdyneSystems
**
**            written by Matthias Henze
**               All Rights Reserved
*/

#ifndef  STORMAMIGA_H
  #include <stormamiga.h>
#endif
#ifndef _INCLUDE_STDIO_H
  #include <stdio.h>
#endif
#ifndef _INCLUDE_ERRNO_H
  #include <errno.h>
#endif
#ifndef _INCLUDE_FILEDEFS_H
  #include <filedefs.h>
#endif
#ifndef _INCLUDE_PRAGMA_DOS_LIB_H
  #include <pragma/dos_lib.h>
#endif

#ifdef __cplusplus
  extern "C" {
#endif

/*----- UNIX-functions -----*/

int   getw        (FILE *);
int   putw        (int, FILE *);
void  setbuffer   (FILE *, char *, int);
int   setlinebuf  (FILE *);
int   snprintf    (char *, size_t, cchar *, ...);
int   vsnprintf   (char *, size_t, cchar *, va_list);
int   vscanf      (cchar *, va_list);
int   vfscanf     (FILE *, cchar *, va_list);
int   vsscanf     (cchar *, cchar *, va_list);

/*----- stormamiga-AmigaDOS-functions -----*/

int   SPRINTF         (char *, cchar *, ...);
int   VSPRINTF        (char *, cchar *, va_list);

/*----- stormamiga-functions -----*/

#ifdef STORMAMIGA_64BIT
  #define printf      printf64
  #define printf_     printf64_
  #define fprintf     fprintf64
  #define fprintf_    fprintf64_
  #define sprintf     sprintf64
  #define sprintf_    sprintf64_
  #define snprintf    snprintf64
  #define snprintf_   snprintf64_
  #define vprintf     vprintf64
  #define vprintf_    vprintf64_
  #define vfprintf    vfprintf64
  #define vfprintf_   vfprintf64_
  #define vsprintf    vsprintf64
  #define vsprintf_   vsprintf64_
  #define vsnprintf   vsnprintf64
  #define vsnprintf_  vsnprintf64_
  #define scanf       scanf64
  #define scanf_      scanf64_
  #define fscanf      fscanf64
  #define fscanf_     fscanf64_
  #define sscanf      sscanf64
  #define sscanf_     sscanf64_
  #define vscanf      vscanf64
  #define vscanf_     vscanf64_
  #define vfscanf     vfscanf64
  #define vfscanf_    vfscanf64_
  #define vsscanf     vsscanf64
  #define vsscanf_    vsscanf64_
#endif

int   printf64        (cchar *, ...);
int   printf_         (cchar *, ...);
int   printf64_       (cchar *, ...);
int   fprintf64       (FILE *, cchar *, ...);
int   fprintf_        (FILE *, cchar *, ...);
int   fprintf64_      (FILE *, cchar *, ...);
int   sprintf64       (char *, cchar *, ...);
int   sprintf_        (char *, cchar *, ...);
int   sprintf64_      (char *, cchar *, ...);
int   snprintf64      (char *, size_t, cchar *, ...);
int   snprintf_       (char *, size_t, cchar *, ...);
int   snprintf64_     (char *, size_t, cchar *, ...);
int   vprintf64       (cchar *, va_list);
int   vprintf_        (cchar *, va_list);
int   vprintf64_      (cchar *, va_list);
int   vfprintf64      (FILE *, cchar *, va_list);
int   vfprintf_       (FILE *, cchar *, va_list);
int   vfprintf64_     (FILE *, cchar *, va_list);
int   vsprintf64      (char *, cchar *, va_list);
int   vsprintf_       (char *, cchar *, va_list);
int   vsprintf64_     (char *, cchar *, va_list);
int   vsnprintf64     (char *, size_t, cchar *, va_list);
int   vsnprintf_      (char *, size_t, cchar *, va_list);
int   vsnprintf64_    (char *, size_t, cchar *, va_list);
int   scanf64         (cchar *, ...);
int   scanf_          (cchar *, ...);
int   scanf64_        (cchar *, ...);
int   fscanf64        (FILE *, cchar *, ...);
int   fscanf_         (FILE *, cchar *, ...);
int   fscanf64_       (FILE *, cchar *, ...);
int   sscanf64        (cchar *, cchar *, ...);
int   sscanf_         (cchar *, cchar *, ...);
int   sscanf64_       (cchar *, cchar *, ...);
int   vscanf64        (cchar *, va_list);
int   vscanf_         (cchar *, va_list);
int   vscanf64_       (cchar *, va_list);
int   vfscanf64       (FILE *, cchar *, va_list);
int   vfscanf_        (FILE *, cchar *, va_list);
int   vfscanf64_      (FILE *, cchar *, va_list);
int   vsscanf64       (cchar *, cchar *, va_list);
int   vsscanf_        (cchar *, cchar *, va_list);
int   vsscanf64_      (cchar *, cchar *, va_list);

#ifdef __cplusplus
  }
#endif

#ifdef STORMAMIGA_INLINE

/*----- ANSI C-functions -----*/

#define getc             fgetc
#define putc             fputc

__inline int fgetc       (FILE *f)
{ return (*f -> getch)   (f); }

__inline int ungetc      (int ch, FILE *f)
{ return (*f -> ungetch) (f, ch); }

__inline int fputc       (int ch, FILE *f)
{ return (*f->putch)     (f, ch); }

__inline int putchar     (int ch)
{ return fputc           (ch, stdout); }

__inline int feof        (FILE *f)
{ return (*f -> eof)     (f); }

__inline int ferror      (FILE *f)
{ return f -> error; }

__inline void clearerr   (FILE *f)
{ f -> error = 0; }

__inline void perror     (cchar *s)
{ PrintFault             (errno, (STRPTR) s); }

__inline int remove      (cchar *s)
{ return DeleteFile      ((STRPTR) s) == 0; }

__inline int rename      (cchar *s, cchar *ns)
{ return Rename          ((STRPTR) s,(STRPTR) ns) == 0; }

__inline void setbuf     (FILE *f, char *buffer)
{ setvbuf                (f, buffer, _IOFBF, BUFSIZ); }

/*----- UNIX-functions -----*/

__inline void setbuffer  (FILE *f, char *buffer, int size)
{ setvbuf                (f, buffer, _IOFBF, size); }

__inline int setlinebuf  (FILE *f)
{
  (void) setvbuf         (f, (char *) NULL, _IOLBF, (size_t) 0);
  return NULL;
}
#endif  /* STORMAMIGA_INLINE */

#ifdef STORMAMIGA_UNIXPATH
  __inline int remove_u (cchar *path)
  { return remove       (path); }

  #define remove(path)  remove_u(UnixToAmigaPath(path))
#endif  /* STORMAMIGA_UNIXPATH */

#endif  /* STDIO_STORMAMIGA_H */
