#ifndef _NSRLIB_ //-*-c++-*-
#define _NSRLIB_

//----------------------------------------------------------------------
//  nsrLib.h
//   Killer include file for all the nsr library.
//
//      Unpublished Confidential Information of Hewlett-Packard
//      Company. Do not disclose.  Copyright (c) Hewlett-Packard
//      Company 1995. All rights reserved
// 
// The contents of this software are proprietary and confidential to
// the Hewlett- Packard Company, and are limited in distribution to
// those with a direct need to know.  Individuals having access to
// this software are responsible for maintaining the confidentiality
// of the content and for keeping the software secure when not in use.
// Transfer to any party is strictly forbidden other than as expressly
// permitted in writing by Hewlett-Packard Company.  Unauthorized
// transfer to or possession by any unauthorized party may be a
// criminal offense.
//
//                  RESTRICTED RIGHTS LEGEND
//
//      Use,  duplication,  or disclosure by the U. S. Government is
//      subject to restrictions as set forth in subparagraph (c) (1)
//      (ii) in the Rights in Technical Data and Computer Software
//      clause in DFARS 252.227-7013 or any other successor clause.
//
//                      HEWLETT-PACKARD COMPANY
//                      3000 Hanover St.
//                      Palo Alto, CA  94304 U.S.A.
//
//      Rights for non-DOD U.S. Government Departments and Agencies
//      are as set forth in FAR 52.227-19 (c) (1,2) or any other
//      successor clause.
//
//  NOTES:
//  This file should NOT be edited. All configurations go into the
//  nsrCfg.h file, which is included by this file.
//
//----------------------------------------------------------------------
// $Source: /projects/HMS/nsr/udfCore/nsrLib.h,v $
// $Revision: 1.58 $    $Author: hmgr $
// $State: Exp $        $Locker:  $
// $Date: 96/05/16 10:53:15 $

//----------------------------------------------------------------------
//
// Configurable flags:
//
// These should be set in the nsrCfg.h file, which is included here.
//
// NSR_COMPARE     - Supports != operators on all descriptors.
// NSR_VERIFY      - all toISO() methods perform loopback and comparison.
// _INCL_TRUSTEES_ - Trustee stuff for Netware
// _INCL_DESCRS_   - NSR Descriptors. Required by MSOBJS and SSOBJS.
// _INCL_SSDEV_    - Single-surface Device.
// _INCL_SSOBJS_   - Single-surface Objects. (Online objects)
// _INCL_MSDEV_    - Multi-surface Device.
// _INCL_MSOBJS_   - Multi-surface Objects. (Archive & peripheral objects)
//
//----------------------------------------------------------------------

//----------------------------------------------------------------------
//
// Supplying Device objects:
//
// The interfaces to the two device types have been virtualized, and
// are found in the following two files:
//
//        devs/nsrASSdv.h
//        devs/nsrAMSdv.h
//
// You MUST have in your include path a directory holding the
// following files:
//
// Single Surface Library (Online Objects):
//        RealSSdv.h    - all stuff needed OUTSIDE of NSR scope.
//        nsrRealSSdv.h - Declaration of an SSDevice.
//
// Multi Surface Library (Archive Object):
//        RealMSdv.h    - all stuff needed OUTSIDE of NSR scope.
//        nsrRealMSdv.h - Declaration of an MSDevice.
//
// HP has supplied code for the device objects in the "devs"
// directory:
//
//        devs/RealSSdv.h
//        devs/RealMSdv.h
//        devs/nsrRealSSdv.h
//        devs/nsrRealMSdv.h
//
//        devs/nsrRSSdv.cpp
//        devs/nsrRMSdv.cpp
//
// If you want to use them, simply place that directory in your
// include path.
//
// NOTE that the HP-supplied nsrMSDev implementation requires an
// SSDev.
//----------------------------------------------------------------------

#include <config/nsrCfg.h>

#include <memory.h>
#include <stdio.h>
#include <errno.h>
#include <time.h>
#include <assert.h>
#include <stdlib.h>

// Because String (declared in nsrAux.h) is derived from RWCString, and
// nsrAux.h is ALWAYS included in the NSR object, we must also always
// include <rw/cstring.h>  --JKH

#include <rw/cstring.h>

#ifdef _INCL_DESCRS_
    #include <rw/ctoken.h>
#endif //_INCL_DESCRS_

#ifdef _INCL_SSOBJS_
    #include <rw/gslist.h>
    #include <rw/collect.h>
    #include <rw/ordcltn.h>
    #include <stdlib.h>
#endif // _INCL_SSOBJS_

#ifdef _INCL_MSOBJS_
    #include <rw/gslist.h>
#endif // _INCL_MSOBJS_

#ifdef _INCL_TRUSTEES_
    #include <sys/Trust.h>
#endif // _INCL_TRUSTEES_

#define MAX_UINT32 0xffffffffL
#define MAX_UINT64 MAX_UINT32

class NSR {

public:

    #include <config/nsrTypdf.h>
    #include <config/nsrMem.h>
    #include <sys/nsrError.h>
    #include <sys/nsrAux.h>
    #include <sys/nsrTrace.h>

#ifdef _INCL_TRUSTEES_
    #include <sys/nsrTrust.h>
#endif // _INCL_TRUSTEES_

#ifdef _INCL_SSOBJS_
    #include <ss/nsrExt.h>
#endif // _INCL_SSOBJS_

#ifdef _INCL_DESCRS_
    #include <descr/nsrTypes.h>
    #include <descr/nsrRecog.h>
    #include <descr/nsrVol.h>
    #include <descr/nsrFile.h>
    #include <descr/nsrEA.h>
    #include <descr/nsrAttr.h>
    #include <sys/nsrDebug.h>
#endif // _INCL_DESCRS_

#ifdef _INCL_SSDEV_
    #include <devs/nsrASSdv.h>
#endif //_INCL_SSDEV_

#ifdef _INCL_MSDEV_
    #include <devs/nsrASSdv.h>
    #include <devs/nsrAMSdv.h>
#endif // _INCL_MSDEV_

#ifdef _INCL_SSOBJS_
    #include <ss/nsrDir.h>
    #include <ss/nsrSpace.h>
    #include <ss/nsrEAttr.h>
    #include <ss/nsrAEDWt.h>
    #include <ss/nsrSSVol.h>
    #include <ss/nsrNode.h>
#endif // _INCL_SSOBJS_

#ifdef _INCL_MSOBJS_
    #include <ms/nsrInt.h>
    #include <ms/nsrImp.h>
    #include <ms/nsrArc.h>
#endif // _INCL_MSOBJS_

    void noop() {}              // A do-nothing public method to
                                // prevent warnings.
#ifdef _INCL_SSOBJS_
    #include <sys/nsrTools.h>   // public static method space()
#endif // _INCL_SSOBJS_

private:

    NSR() {}    // cannot instantiate an NSR object

};

#ifdef _COMPILER_BUG_TAGGED_DESCRIPTOR_SCOPING_
typedef NSR::TaggedDescriptor TaggedDescriptor;
#endif // _COMPILER_BUG_TAGGED_DESCRIPTOR_SCOPING_

// Now, include ALIASES to remove the necessity of using NSR:: every
// time they want to access our objects. 

#include <config/nsrAlias.h>

#endif //not _NSRLIB_
