#ifndef SDI_DEFINES_H
#define SDI_DEFINES_H

/* Includeheader

	Name:		SDI_defines
	Versionstring:	$VER: SDI_defines.h 1.24 (17.03.97)
	Author:		SDI
	Distribution:	PD
	Description:	standard defines and macros and version string

 1.0	: created with help of ...SDI.h files
 1.1	: SDI_ERROR added
 1.2	: made INFO's better
 1.3	: removed SDI_ERROR
 1.4	: INFO_ERR corrected
 1.5	: when DATE not defined, then DATE == __DATE2__ (Maxon C++)
 1.6	: introduced DEBUG parts
 1.7	: changed DEBUG's a bit
 1.8	: OS_VERSION and TEST_OS added
 1.9   10.08.95 : made OS_VERSION shorter
 1.10  18.08.95 : DEBUG_BREAKS added
 1.11  23.09.95 : NOVERSION added
 1.12  15.10.95 : now STRPTR version
 1.13  05.02.96 : isprintSDI, isHEXNum removed
 1.14  13.04.96 : version string moved into header
 1.15  28.05.96 : added ENDCODE
 1.16  05.06.96 : Protos for End and extern definition for version also
 	without defines, except with NOCODE define, TEST_OS, OS_VERSION
 	removed
 1.17  12.06.96 : RETURN_WARN instead of RETURN_ERROR in ENDCODE
 1.18  06.07.96 : ENDCODE: PrintFault behind end --> allows selecting output
 1.19  21.08.96 : added __SASC __AMIGADATE__ support
 1.20  24.08.96 : better SAS-C support
 1.21  04.09.96 : changed error with SAS date having the brackets already
 1.22  18.11.96 : converted to english, C++ comments to C ones
 1.23  02.01.97 : corrected some stuff
 1.24  17.03.97 : removed GetChar and other obsolete defines
*/

#include <exec/types.h>

/* ======================= no need for <stdlib.h> ======================= */

extern void exit(int);

/* ============================ other macros ============================ */

/* <pragma/exec_lib.h>, <dos/dos.h> */

#define CTRL_C		(SetSignal(0L,0L) & SIGBREAKF_CTRL_C)

/* ======================= character definitions ======================== */

#define BS	 8
#define ESC	27

/* ================================= SAS C ============================== */

#ifdef __SASC
  extern struct ExecBase	*SysBase;
  extern struct DosLibrary	*DOSBase;
  #include <dos/dosextens.h>

  #define TestOS if(DOSBase->dl_lib.lib_Version < DosVersion)	\
  		   exit(RETURN_FAIL)
#endif

/* A word about variable DosVersion: In my startup code for MaxonC++ I
include use OpenLibrary("dos.library", DosVersion) instead of standard
OpenLibrary("dos.library",0) call. If no DosVersion is given, this
variable defaults to 33, else you can give the value by creating a global
variable ULONG DosVersion = 37;. The program does not start, when the
required dos is not available. (Better then others, which crash) */

/* ===================== version string and EndCode ===================== */

#ifndef NOCODE
  extern STRPTR version;		/* Proto for Version */
  extern void End(UBYTE);		/* Proto for End */

  #if !defined(NOVERSION) && defined(NAME)
    #ifndef AUTHOR
      #define AUTHOR "by SDI"
    #endif
    #ifndef VERSION
      #define VERSION "1"
    #endif
    #ifndef REVISION
      #define REVISION "0"
    #endif
    #ifndef DATE
      #ifdef __MAXON__
        #define DATE __DATE2__
      #elif defined(__SASC)
        #define DATE __AMIGADATE__
      #endif
    #endif
    #ifdef __MAXON__
      #define SDI_DATE "(" DATE ")"
    #elif defined(__SASC)
      #define SDI_DATE DATE
    #endif

    #ifndef DISTRIBUTION
      #define DISTRIBUTION "(PD) "
    #endif
    STRPTR version = (STRPTR) "$VER: " NAME " " VERSION "." REVISION " "
    SDI_DATE " " DISTRIBUTION AUTHOR;

  #endif /* !NOVERSION && NAME */

  #if defined(ENDCODE) || defined(ENDCODE_NOCTRLC)
    #ifdef __MAXON__
      #define __inline
      inline
    #endif
      void __inline end(void);
    void End(UBYTE err)
    {
      #ifndef ENDCODE_NOCTRLC
      if(CTRL_C)
      {
        err = RETURN_WARN;
        SetIoErr(ERROR_BREAK);
      }
      #endif

      end();

      if(err)		PrintFault(IoErr(), 0);
      exit(err);
    }
  #endif /* ENDCODE && ENDCODE_NOCTRLC */
#endif /* NOCODE */

#endif /* SDI_DEFINES_H */

