#ifndef __STD_EXCEPTION
//
//
//  Copyright Digital Equipment Corporation 1998. All rights reserved.
//
//  Restricted Rights: Use, duplication, or disclosure by the U.S.
//  Government is subject to restrictions as set forth in subparagraph
//  (c) (1) (ii) of DFARS 252.227-7013, or in FAR 52.227-19, or in FAR
//  52.227-14 Alt. III, as applicable.
//
//  This software is proprietary to and embodies the confidential
//  technology of Digital Equipment Corporation. Possession, use, or
//  copying of this software and media is authorized only pursuant to a
//  valid written license from Digital or an authorized sublicensor.
//

/***************************************************************************
 *
 * exception - declarations for the Standard Library exception class
 *
 * $Id: exception,v 1.23 1996/08/28 01:28:39 smithey Exp $
 *
 ***************************************************************************
 *
 * (c) Copyright 1994-1996 Rogue Wave Software, Inc.
 * ALL RIGHTS RESERVED
 *
 * The software and information contained herein are proprietary to, and
 * comprise valuable trade secrets of, Rogue Wave Software, Inc., which
 * intends to preserve as trade secrets such software and information.
 * This software is furnished pursuant to a written license agreement and
 * may be used, copied, transmitted, and stored only in accordance with
 * the terms of such license and with the inclusion of the above copyright
 * notice.  This software and information or any other copies thereof may
 * not be provided or otherwise made available to any other person.
 *
 * Notwithstanding any other lease or license that may pertain to, or
 * accompany the delivery of, this computer software and information, the
 * rights of the Government regarding its use, reproduction and disclosure
 * are as set forth in Section 52.227-19 of the FARS Computer
 * Software-Restricted Rights clause.
 * 
 * Use, duplication, or disclosure by the Government is subject to
 * restrictions as set forth in subparagraph (c)(1)(ii) of the Rights in
 * Technical Data and Computer Software clause at DFARS 252.227-7013.
 * Contractor/Manufacturer is Rogue Wave Software, Inc.,
 * P.O. Box 2328, Corvallis, Oregon 97339.
 *
 * This computer software and information is distributed with "restricted
 * rights."  Use, duplication or disclosure is subject to restrictions as
 * set forth in NASA FAR SUP 18-52.227-79 (April 1985) "Commercial
 * Computer Software-Restricted Rights (April 1985)."  If the Clause at
 * 18-52.227-74 "Rights in Data General" is specified in the contract,
 * then the "Alternate III" clause applies.
 *
 **************************************************************************/

#include <stdcomp>
#include <stddefs>

#if defined(__DECCXX)
#   ifdef __PRAGMA_ENVIRONMENT
#      pragma __environment __save
#      pragma __environment __header_defaults
#   endif
#endif

#if defined(__DECCXX) && !defined(__DECFIXCXXL556) 
#ifndef _RWSTD_NO_NAMESPACE 
namespace std {
#endif
#endif

#ifndef __RWSTD_EXCEPTION_SEEN

#ifndef _RWSTD_EXCEPTION_HANDLER_IN_STD

typedef void (*terminate_handler) ();
extern terminate_handler set_terminate(terminate_handler f) _RWSTD_THROW_SPEC_NULL;
extern void terminate( );

typedef void (*unexpected_handler) ();
extern unexpected_handler set_unexpected( unexpected_handler f)  _RWSTD_THROW_SPEC_NULL;
extern void unexpected();

#if defined(__DECCXX) && !defined(__DECFIXCXXL689) 
extern bool uncaught_exception();
#endif


#endif /* _RWSTD_EXCEPTION_HANDLER_IN_STD */

#if defined(__DECCXX) && !defined(__DECFIXCXXL556) 
#else
#ifndef _RWSTD_NO_NAMESPACE 
namespace std {
#endif
#endif

extern const char _RWSTDExportFunc(*) __rw_stdexcept_NoNamedException;
extern const char _RWSTDExportFunc(*) __rw_stdexcept_BadException;

//
// Temporarily turn off the warnings under the Borland compiler that
// say 'Functions containing ... cannot be inlined'
//
#if defined(__BORLANDC__)
#pragma warn -inl
#endif

#ifdef _RWSTD_EXCEPTION_DEFINED
// MSVC < 4.2  has its own (non-standard) exception class.  We need to use it
// in order to allow the use of MSVC typeinfo exception classes 
// derived from it.
#if defined(_MSC_VER) 
#if _MSC_VER < 1011
#ifndef _RWSTD_NO_NAMESPACE 
}
#endif
#include <stdexcpt.h>
#ifndef _RWSTD_NO_NAMESPACE 
namespace std {
#endif
#else
// MSVC 4.2
// Here we use our exception, but modifed to support Microsoft's
// subclasses

#ifndef _RWSTD_NO_NEW_HEADER
#include <string.h>
#else
#include <cstring>
#endif

typedef const char* __exString;

class _RWSTDExport exception     
{ 
#if defined(__DECCXX) && !defined(__DECFIXCXXL486) // pointless friend decl
#else
  friend class exception; 
#endif

  public:
    exception () _RWSTD_THROW_SPEC_NULL
    : e_str_(0)  
    { ; }
    exception (const __exString& s) _RWSTD_THROW_SPEC_NULL 
    : e_str_(0)
    { 
      if (s)
      {
        e_str_ = new char[strlen(s) + 1];
        strcpy(e_str_,s);
      }
    }
    exception (const exception& e) _RWSTD_THROW_SPEC_NULL 
    : e_str_(0)
    { 
      if (e.what())
      {
        e_str_ = new char[strlen(e.what()) + 1];
        strcpy(e_str_,e.what());
      }        
    }
    exception& operator= (const exception& e)  _RWSTD_THROW_SPEC_NULL
    { 
      if (e_str_)
        delete[] e_str_;
      if (e.what())
      {
        e_str_ = new char[strlen(e.what()) + 1];
        strcpy(e_str_,e.what());
      } 
      else
        e_str_ = 0;

      return *this; 
    }
    virtual ~exception ()  _RWSTD_THROW_SPEC_NULL 
    { 
      if (e_str_)
        delete[] e_str_; 
    }
    virtual const char * what () const  _RWSTD_THROW_SPEC_NULL
    {
      if (e_str_)
        return e_str_;
      else
        return  __rw_stdexcept_NoNamedException;
    }
  private:
    char * e_str_;
};
#endif
#else
#ifndef _RWSTD_NO_NAMESPACE 
}
#endif
#include <exception.h>
#ifndef _RWSTD_NO_NAMESPACE 
namespace std {
#endif
#endif /* _MSC_VER */

#else
class _RWSTDExport exception     
{ 
  public:
    exception () _RWSTD_THROW_SPEC_NULL
    { ; }
    exception (const exception&) _RWSTD_THROW_SPEC_NULL 
    { ; }
    exception& operator= (const exception&)  _RWSTD_THROW_SPEC_NULL
    { return *this; }
    virtual ~exception ()  _RWSTD_THROW_SPEC_NULL
#ifndef HPPA_WA
    { ; }  
#else
    ;
#endif
    virtual const char * what () const  _RWSTD_THROW_SPEC_NULL
    {
        return  __rw_stdexcept_NoNamedException;
    }
};

#endif /* _RWSTD_EXCEPTION_DEFINED */

#if !defined(_RWSTD_BAD_EXCEPTION_DEFINED)
// && !defined(_RWSTD_BAD_EXCEPTION_DEFINED)
//#define _RWSTD_BAD_EXCEPTION_DEFINED 1
class _RWSTDExport bad_exception : public exception     
{ 
  public:
    bad_exception () _RWSTD_THROW_SPEC_NULL : exception( )
    { ; }

    virtual ~bad_exception ()  _RWSTD_THROW_SPEC_NULL
#ifndef HPPA_WA
    { ; }  
#else
    ;
#endif
 
    virtual const char * what () const  _RWSTD_THROW_SPEC_NULL
    {
        return __rw_stdexcept_BadException;
    }
};
#endif  /* _RWSTD_BAD_EXCEPTION_DEFINED */

#define __RWSTD_EXCEPTION_SEEN
//
//
//  Copyright Digital Equipment Corporation 1996. All rights reserved.
//
//  Restricted Rights: Use, duplication, or disclosure by the U.S.
//  Government is subject to restrictions as set forth in subparagraph
//  (c) (1) (ii) of DFARS 252.227-7013, or in FAR 52.227-19, or in FAR
//  52.227-14 Alt. III, as applicable.
//
//  This software is proprietary to and embodies the confidential
//  technology of Digital Equipment Corporation. Possession, use, or
//  copying of this software and media is authorized only pursuant to a
//  valid written license from Digital or an authorized sublicensor.
//
//

#ifndef _RWSTD_NO_NAMESPACE 
} 
#endif

//
// Yes, the exception hierarchy has been seen!
//
#endif /*__RWSTD_EXCEPTION_SEEN*/

//
// Yes, the complete file has been processed!
//
#define __STD_EXCEPTION

#if defined(__DECCXX)
#   ifdef __PRAGMA_ENVIRONMENT
#      pragma __environment __restore
#   endif
#endif

#endif /*__STD_EXCEPTION */
