#ifndef  STORMAMIGA_H
#define  STORMAMIGA_H

/*
**       $VER: stormamiga.h 43.22 (22.06.98)
**              Includes Release 44.00
**               AmigaOS/68K Version
**
**     Copyright © 1996/98 by CyberdyneSystems
**
**            written by Matthias Henze
**               All Rights Reserved
*/

typedef const void              cvoid;
typedef const char              cchar;
typedef const signed char       cschar;
typedef const unsigned char     cuchar;
typedef signed char             schar;
typedef unsigned char           uchar;
typedef unsigned short          ushort;
typedef long int                lint;
typedef long long int           llint;
typedef unsigned int            uint;
typedef unsigned long int       ulint;
typedef unsigned long long int  ullint;
typedef long long               llong;
typedef unsigned long           ulong;
typedef unsigned long long      ullong;

#ifdef STORMAMIGA_PPC
  #include <PPC_stormamiga.h>
#else /* PPC */

#ifdef STORMAMIGA_pOS
  #include <pOS_stormamiga.h>
#else /* p.OS */

#ifndef _INCLUDE_STDIO_H
  #include <stdio.h>
#endif
#ifndef _INCLUDE_TIME_H
  #include <time.h>
#endif
#ifndef INTUITION_INTUITION_H
  #include <intuition/intuition.h>
#endif

#ifdef STORMAMIGA_NOWB
  void wbmain_(void) {};
#endif

#ifdef STORMAMIGA_OS3
  #ifdef __cplusplus
    extern "C" {
    void *malloc_3(size_t);
    void free_3(void *); }
    void *operator new(size_t bytes)
    { return malloc_3(bytes); }

    void operator delete(void *mem, size_t)
    { free_3(mem); }
  #endif
#endif

#ifdef STORMAMIGA_STACK
  long stack = STORMAMIGA_STACK;
  extern "C" {void INIT_9_Stack(void);}
  static void _initstack(void)
  { INIT_9_Stack(); }
#endif

#ifdef __cplusplus
  extern "C" {
#endif

#ifdef STORMAMIGA_NO_IO_WB
  void ioinit_(void) {};
#endif

#ifdef STORMAMIGA_OS3
  void *malloc_3(size_t);
  void free_3(void *);
  void _malloc_3(void);
  void _free_3(void);

  void _free(void)
  { _free_3(); }

  void _malloc(void)
  { _malloc_3(); }

  #define malloc         malloc_3
  #define free           free_3

  #ifndef  CLIB_ALIB_PROTOS_H
    #include <clib/alib_protos.h>
  #endif
  #ifndef _INCLUDE_PRAGMA_EXEC_LIB_H
    #include <pragma/exec_lib.h>
  #endif
  #define LibCreatePool  CreatePool
  #define LibDeletePool  DeletePool
  #define LibAllocPooled AllocPooled
  #define LibFreePooled  FreePooled
#endif


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

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


/*----- stormamiga-stdio-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);

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

#ifdef STORMAMIGA_DEUTSCH
  #define stricmp     stricmp_d
  #define strnicmp    strnicmp_d
  #define strcasecmp  strcasecmp_d
  #define strncasecmp strncasecmp_d
  #define strlwr      strlwr_d
  #define strupr      strupr_d
  #define strlower    strlower_d
  #define strupper    strupper_d
#endif

int   stricmp_d       (cchar *, cchar *);
int   strnicmp_d      (cchar *, cchar *, size_t);
int   strcasecmp_d    (cchar *, cchar *);
int   strncasecmp_d   (cchar *, cchar *, size_t);
char  *strlwr_d       (char *);
char  *strlower_d     (char *);
char  *strupr_d       (char *);
char  *strupper_d     (char *);
char  *strncpyn       (char *, cchar *, size_t);

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

#ifdef  NDEBUG
  #define assert_(C)
#else
  void    do_assert_  (char *, char *, char *, uint);
  #define assert_(C)  { if(!(C)) do_assert_(#C, __FILE__, __FUNC__, __LINE__); }
#endif


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

#ifdef STORMAMIGA_DEUTSCH
  #define isalnum     isalnum_d
  #define isalpha     isalpha_d
  #define islower     islower_d
  #define isupper     isupper_d
  #define isprint     isprint_d
  #define ispunct     ispunct_d
  #define tolower     tolower_d
  #define toupper     toupper_d
#endif

int   isalnum_d       (int);
int   isalpha_d       (int);
int   islower_d       (int);
int   isprint_d       (int);
int   ispunct_d       (int);
int   isupper_d       (int);
int   tolower_d       (int);
int   toupper_d       (int);


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

#ifdef STORMAMIGA_DEUTSCH
  #define strftime    strftime_d
  #define asctime     asctime_d
  #define ctime       ctime_d
#endif

int   strftime_d      (char *, uint, cchar *, const struct tm *);
char  *asctime_d      (const struct tm *);
char  *ctime_d        (const time_t *);


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

long  muls            (long, long);
ulong mulu            (ulong, ulong);
long  divsl           (long, long);
ulong divul           (ulong, ulong);
long  muls64          (long, long);
ulong mulu64          (ulong, ulong);
long  divs64          (long, long);
ulong divu64          (ulong, ulong);
int   button          (int, int);
int   button_al       ();
int   button_ar       ();
int   button_bl       ();
int   button_br       ();
void  waitbutton      (int, int);
void  waitbutton_al   ();
void  waitbutton_ar   ();
void  waitbutton_bl   ();
void  waitbutton_br   ();
int   max_Width       (struct Window *);
int   max_Height      (struct Window *);

#ifdef __cplusplus
  }
#endif

/*----- Inline-functions -----*/

#ifdef STORMAMIGA_INLINE
  #ifndef  STORMAMIGAINLINE_H
    #include <stormamigainline.h>
  #endif
#endif

#endif  /* p.OS */
#endif  /* PPC */
#endif  /* STORMAMIGA_H */
