Brief documentation for NTYPES.H v1.08

   NTYPES.H is broken up into five sections.  The first defines automatic
   compiler/platform settings.  The second section defines items according 
   to the platform.  The third section defines non-platform specific defines. 
   The fourth section defines new types. The fifth section defines macros.

   This file is guaranteed NOT to include any other files.  It should be
   placed before any Novell include files, but after any standard C or
   platform specific files, such as "windows.h".

   Certain sections may be excluded by defining N_INC_NO... macros.  These
   are currently defined as:

      N_INC_NO_AUTO           Don't automatically define platforms defines.
      N_INC_NO_OLD_CONSTANTS  Don't define historical constants.
      N_INC_NO_OLD_MACROS     Don't define historical macros.

   Section 4c is has been removed from v1.06 of NTYPES.H

      N_INC_NO_GUI            Is no longer checked
      N_INC_GUI               Is no longer checked

   For compatibility purposes a platform may be defined in multiple ways.
   Some of these methods are defacto standards for their appropriate
   platforms.  Note that AppWare considers the N_PLAT_xxxx method to be the
   default. 

   (Some of the following are trademarks of their respective companies)

      Microsoft Windows Family   - N_PLAT_MSW
      **************************
         If N_PLAT_MSW is defined, at least one of the below should be defined;
         if none is defined, N_PLAT_MSW3 will be forced on.
         If any of the following are defined, N_PLAT_MSW will be forced on.
         If N_PLAT_WNT? is defined, N_PLAT_WNT will be forced on.
      Microsoft Windows 3.x      - N_PLAT_MSW3
      Microsoft Windows 4.x      - N_PLAT_MSW4
      Microsoft Windows NT 3.x   - N_PLAT_WNT3
      Microsoft Windows NT 4.x   - N_PLAT_WNT4
      **************************
      IBM OS/2                   - N_PLAT_OS2
      DOS                        - N_PLAT_DOS, NWDOS
      Novell NetWare NLM         - N_PLAT_NLM
      Macintosh                  - N_PLAT_MAC
      Unix                       - N_PLAT_UNIX
   
   One of the following architectures will always be defined:

      N_ARCH_16                  - 16 bit word size
      N_ARCH_32                  - 32 bit word size
      N_ARCH_64                  - 64 bit word size

   If there is a need to force the natural integer to a specific size
   use one of the following definitions (like for thunk layers).

      N_FORCE_INT_16             - Force nint and nuint to be 16 bit word size
      N_FORCE_INT_32             - Force nint and nuint to be 32 bit word size 
   
   Typical combinations are as follows.  The preferred defines are the first
   one in each of the following lines:

      Microsoft Windows (16 bit) - N_PLAT_MSW and N_ARCH_16, NWWIN
      Microsoft Windows (32 bit) - N_PLAT_MSW and N_ARCH_32, WIN32
      Microsoft Windows 3.x      - N_PLAT_MSW3
      Microsoft Windows 4.x      - N_PLAT_MSW4
      Microsoft Windows NT       - N_PLAT_WNT
      Microsoft Windows NT 3.x   - N_PLAT_WNT3
      Microsoft Windows NT 4.x   - N_PLAT_WNT4
      IBM OS/2 (16 bit)          - N_PLAT_OS2 and N_ARCH_16, NWOS2
      IBM OS/2 (32 bit)          - N_PLAT_OS2 and N_ARCH_32
      DOS                        - N_PLAT_DOS, NWDOS
      Novell NetWare NLM         - N_PLAT_NETWARE and N_PLAT_NETWARE
      Novell NISO NLM            - N_PLAT_NIOS and N_PLAT_NIOS
      Macintosh                  - N_PLAT_MAC
      Unix                       - N_PLAT_UNIX and N_ARCH_32 or N_ARCH_64

   Implied definitions (ntypes.h will create the implied definitions if no 
   additional defines are provided).  Variances (ex: N_PLAT_WNT && N_ARCH_16)
   must be defined explicity:

        Defined                 Implied

        NWDOS                   N_PLAT_DOS,                     N_ARCH_16
        N_PLAT_DOS              NWDOS,                          N_ARCH_16
        NWOS2                   N_PLAT_OS2,                     N_ARCH_16
        N_PLAT_OS2                                              N_ARCH_32
        N_PLAT_OS2, N_ARCH_16   NWOS2
        NWWIN                   N_PLAT_MSW,                     N_ARCH_16
        N_PLAT_MSW              N_PLAT_MSW3,                    N_ARCH_16
        N_PLAT_MSW, N_ARCH_16   NWWIN, N_PLAT_MSW3
        N_PLAT_MSW3             N_PLAT_MSW,                     N_ARCH_16
        N_PLAT_MSW4             N_PLAT_MSW,                     N_ARCH_32
        N_PLAT_WNT              N_PLAT_MSW, N_PLAT_WNT3,        N_ARCH_32
        N_PLAT_WNT, N_ARCH_16   NWWIN, N_PLAT_MSW, N_PLAT_WNT3
        N_PLAT_WNT3             N_PLAT_MSW, N_PLAT_WNT,         N_ARCH_32
        N_PLAT_WNT4             N_PLAT_MSW, N_PLAT_WNT,         N_ARCH_32
        N_PLAT_NLM              N_PLAT_NETWARE, N_IAPX386       N_ARCH_32
        N_PLAT_NETWARE          N_PLAT_NLM, N_IAPX386           N_ARCH_32
        N_PLAT_NIOS             N_PLAT_NLM, N_IAPX386           N_ARCH_32
        N_PLAT_MAC                                              N_ARCH_32
        N_PLAT_UNIX                                             N_ARCH_32

   Note that the following constants are assumed to be defined for the
   given circumstances:

      _INC_WINDOWS        - Microsoft's WINDOWS.H file has been included.
      RC_INVOKED          - Microsoft's RC resource compiler is currently
                            processing the file.


Revision history:
v1.08
- Removed inadvertent define of N_EXPORTS for N_PLAT_MSW/N_ARCH_32

v1.07
- Added auto defines for N_PLAT_NLM:
   N_PLAT_NLM machine defaults to N_IAPX386 (vs N_PPC).
   N_PLAT_NLM OS defaults to N_PLAT_NETWARE (vs N_PLAT_NIOS).
   N_PLAT_NETWARE causes N_PLAT_NLM to be defined.
   N_PLAT_NIOS causes N_PLAT_NLM to be defined.

v1.06
- Removed GUI defines.
- Fixed bug in NGet16/32 and NRead16/32 macros that caused them to swap on
  N_INT_ENDIAN_HI_LO machines.
- Cleaned up/reduced macros that were effectively just duplicates of other
macros with the only difference being how parameters were passed.
- Cleaned up alignment of macro defines to make them easier to read.
- Added HiLo/LoHi Get, Set, Read, and Write macros

v1.05
- Added special pascal type for OS2 under Borland compile.
- Added Enhanced "endianness" checks for N_PLAT_NLM
- Changed N_API et.al. under N_PLAT_NLM to use compiler "default" and changed
N_PASCAL and N_CDECL to be properly defined.  This allows forced function
types when needed.
- Changed TRUE/FALSE in section 5 to be defined directly, not in terms of
N_TRUE and N_FALSE.
- Changed default to NOT include GUI defines.  N_INC_GUI must be defined to
include these now.  This section will be removed in v1.06 of NTYPES.H.
- Broke off large comment at beginning of file into NTYPES.TXT.
- Added pointers to pointers typedefs.
- Added sized boolean types.
Changes to NPACKON.H:
- Added support for Windows 95 platform

v1.04
-Added N_..._CALLBACK and N_TYPEDEFs for N_PLAT_NLM
-Corrected bug in NCopyFrom... macros (they were reversed in functionality)
-Added support for reading from or writing to unaligned values (NRead... and
NWrite...)
-Changed:
   #if !defined(N_ARCH_64) && \
       !defined(N_ARCH_32) && \
       !defined(N_ARCH_16)
to:
   #if !defined(N_ARCH_64) && !defined(N_ARCH_32) && !defined(N_ARCH_16)
to work around a bug in MPW's CFront preprocessor.
-Changed METROWERKS_C define check to check for __MWERKS__ instead. 
METROWERKS_C is obsolete.
-Changed N_GLOBAL_LIBRARY and N_EXTERN_LIBRARY to use N_PASCAL instead of
pascal (which is the purpose of N_PASCAL anyway).
-Changed platform specific typedefs to use N_HUGE...will probably consolidate
into platform independent types later.
-Changed to standardized copyright (smaller)
-Cosmetic (typo) changes made to introductory comments
-Changed function definition macros and function pointer type definition
macros to correctly match document and use the N_CALLBACK, N_CDECL, and
N_PASCAL defines.  
Changes to NPACKON.H:
-Added pragma to shut up Visual C compilers so they don't complain about
changing the alignment.

v1.03
-Reformat (one time hit, won't happen again); includes removal of embedded
tabs and consistent indenting to 4,7 "tabbing", consistent use of #if's. 
Various authors have modified this file using different tab stop
interpretations (some at 4 spaces per tab, some at 3, and some at 8). 
Reading the code was subject to misinterpretations because of differences in
indentation.  Embedded tabs will now be kept out of ntypes.
-"Fixed" missing section markers and corrected commented documentation on
sections.
-Clarified and corrected commented documentation.
-Added support for N_INC_NO_GUI (don't include GUI structures) so that
non-interface apps don't need to fill up compiler symbol space.
-Added automatic defininitions for N_ARCH... and N_PLAT... macros when they
can be deduced from a single definition. For example, if N_PLAT_DOS is
defined, N_ARCH_16 is automatically defined if no N_ARCH... macro has yet
been set.
-Removed automatic inclusion of Types.h for Mac platform (as stated at the
beginning of ntypes:
        "This file is guarenteed NOT to include any other files.  It should be
        placed before any NetWare include files, but after any standard C or
        platform specific files, such as "windows.h"."
Types.h should be included before ntypes for Mac code.
-Added NSwapTo... and NSwapFrom... macros to clarify usage.
-Renamed NMake32() and NMake16() macro parameters for clarity.
-Changed use of PASCAL to N_PASCAL as per spec in function macros.


v1.02
- Added support for NLMs
- Eliminated nbool16 and nbool32 in all Platforms.
- Fixed bugs in Macintosh PowerPC
- Added support for OSF on Alpha

v1.01
- Macintosh compile problems, want to use C calling conventions, not pascal
(at least for now)
- Changes in OS/2 Section only to support 32 bit IBM C++ compiler
- Added support for non-MPW compilers

v1.00
- Initial release
