/*   atkcfg.h,  /appletalk/ins,  Garth Conboy,  09/26/88  */
/*   Copyright (c) 1988 by Pacer Software Inc., La Jolla, CA  */

/*   GC - Initial coding.
     GC - (03/16/89): We now allow OS2 and DOS as target environments.

     *** Make the PVCS source control system happy:
     $Header$
     $Log$
     ***

     Host specific configuration information.

*/

#ifndef ConfigurationIncluded

/* Does this release include Arap? */

#define ArapIncluded 0

/* Enable/disable Verbose log messages. */

#define Verbose 0       /* 0 is quiet ... */

/* The following innocuous little #define is important to the performance
   of the router.  If all transmits will complete synchronously (all data
   are actually transmitted [or copied to controller resident storage] by
   the time the transmit call (in "depend.c") returns) we can avoid an
   buffer copy when forwardng incoming packets.  In this case we will build
   a buffer descriptor that points to the actual incoming data and turn
   around an do the transmit.  If transmits complete asynchronously, we must
   make a copy, because the user data may be freed or no longer ours by
   the time the transmit completes. */

/* Actual defintion at the end of this file.

   #define TransmitsCompleteSynchronously
*/

/* One more important define (only if the router is enabled).  The following
   #define controls the setting of the magic "prependInPlace" bit by the
   router [see comments in "buffdecs.h" for information on this bit].  Anyhow,
   if the following #define is set to "1", the assumption is made by the router
   that all incoming packets that are passed to the router (from DdpPacketIn)
   have sufficient space allocated preceeding the Ddp datagram for the longest
   link, 802.2 and Ddp headers to be prepend IN PLACE.  This avoids an outgoing
   buffer copy.

   This define is only useful if TransmitsCompleteSynchronously is True. */

/* Actual defintion at the end of this file.

   #define RouterPrependHeadersInPlace
*/

/* Define ONE of the following ("target environment type"): */

#define GenericUnixBox       0
#define BerkeleyUnixBox      0
#define MS_OS2               0
#define PrimePrimos          0
#define RouterBox            0
#define StackBox             0
#define StackAndRouterBox    0
#define Windows_NT           1

/* Allow ONE of the following sets to be defined: */

#if defined(StackOnly)
  #define BuildStackOnly       1
  #define BuildRouterOnly      0
  #define BuildStackAndRouter  0
#elif defined(RouterOnly)
  #define BuildRouterOnly      1
  #define BuildStackOnly       0
  #define BuildStackAndRouter  0
#elif defined(StackAndRouter)
  #define BuildStackAndRouter  1
  #define BuildStackOnly       0
  #define BuildRouterOnly      0
#else
  #if (StackAndRouterBox || PrimePrimos || Windows_NT)
     #define BuildStackOnly       0       /* Default, defaults */
     #define BuildRouterOnly      0
     #define BuildStackAndRouter  1
  #elif RouterBox
     #define BuildStackOnly       0
     #define BuildRouterOnly      1
     #define BuildStackAndRouter  0
  #elif StackBox
     #define BuildStackOnly       1
     #define BuildRouterOnly      0
     #define BuildStackAndRouter  0
  #else
     #define BuildStackOnly       1
     #define BuildRouterOnly      0
     #define BuildStackAndRouter  0
  #endif
#endif

/* Environment (Iam) definition bits: */

#define Primos          0x01
#define UnixSysV        0x02
#define BerkeleyUnix    0x04
#define OS2             0x08
#define WindowsNT       0x10
#define DOS             0x20
#define PlaceHolder     0x40

#define Prime50Series        0x0080
#define UnixBox              0x0100
#define ByteSwappedUnixBox   0x0200     /* Intel ordering (little endian) */
#define Intel80x86           0x0400

#define AppleTalkStack  0x0800
#define AppleTalkRouter 0x1000

#define OutboardErrorTextFile 0x2000

#define AlignedAddressing 0x4000        /* Must shorts/longs be aligned on
                                           short/long boundries in memory?
                                           True for Motorola and most RISC,
                                           False for Intel and VAX. */

/* Define values for what to build... */

#if BuildStackAndRouter
  #define WhatAmI (AppleTalkStack | AppleTalkRouter)
#elif BuildRouterOnly
  #define WhatAmI AppleTalkRouter
#elif BuildStackOnly
  #define WhatAmI AppleTalkStack
#else
  Help me... Oh my, what am I?
#endif

/* Select environment: */

#if GenericUnixBox
  #define Iam (WhatAmI | UnixBox | UnixSysV | AlignedAddressing)
#endif

#if BerkeleyUnixBox
  #define Iam (WhatAmI | UnixBox | BerkeleyUnix | AlignedAddressing)
#endif

#if MS_OS2
  #define Iam (WhatAmI | Intel80x86 | OS2 | OutboardErrorTextFile)
#endif

#if Windows_NT
  #if i386
    #define Iam (WhatAmI | Intel80x86 | WindowsNT | OutboardErrorTextFile | \
                 AlignedAddressing)
  #elif MIPS
    #define Iam (WhatAmI | ByteSwappedUnixBox | WindowsNT | \
                 OutboardErrorTextFile | AlignedAddressing)
  #elif ALPHA
    #define Iam (WhatAmI | UnixBox | WindowsNT | \
                 OutboardErrorTextFile | AlignedAddressing)
  #else
    #error "I need a #define for Iam"
  #endif
#endif

#if PrimePrimos
  #define Iam (WhatAmI | Prime50Series | Primos | AlignedAddressing)
#endif

#if RouterBox
  #define Iam (WhatAmI | UnixBox | UnixSysV | AlignedAddressing)
#endif

#if StackBox
  #define Iam (WhatAmI | UnixBox | UnixSysV | AlignedAddressing)
#endif

#if StackAndRouterBox
  #define Iam (WhatAmI | UnixBox | UnixSysV | AlignedAddressing)
#endif

#define LittleEndian (Iam a (Intel80x86 | ByteSwappedUnixBox))

#define a     &
#define an    &
#define Ihave Iam

#define IamNot    (~ Iam)
#define IdontHave IamNot

#define ConfigurationIncluded 1

/* See comment at the top of this file for information about these two
   #defines. */

#if IamNot a WindowsNT
  #define TransmitsCompleteSynchronously 1
#else
  #define TransmitsCompleteSynchronously 0
#endif
#define RouterPrependHeadersInPlace 1

#endif
