home *** CD-ROM | disk | FTP | other *** search
- #ifndef __RWERR_H__
- #define __RWERR_H__
- pragma push_align_members(64);
-
- /*
- * Error definitions
- *
- * $Header: E:/vcs/rw/rwerr.h_v 1.5 18 Feb 1992 09:54:38 KEFFER $
- *
- ****************************************************************************
- *
- * Rogue Wave
- * P.O. Box 2328
- * Corvallis, OR 97339
- * Voice: (503) 754-3010 FAX: (503) 757-6650
- *
- * Copyright (C) 1989, 1990, 1991. This software is subject to copyright
- * protection under the laws of the United States and other countries.
- *
- ***************************************************************************
- *
- * This error facility has been designed to work in a generic environment, hence it
- * can't take advantage of all those wonderful Tools.h++ classes to make
- * life simpler.
- *
- * $Log: E:/vcs/rw/rwerr.h_v $
- *
- * Rev 1.5 18 Feb 1992 09:54:38 KEFFER
- *
- * Rev 1.4 12 Nov 1991 13:15:30 keffer
- * Now guaranteed that a package will be inserted into the error handler
- * before an error of that type can occur.
- *
- * Rev 1.3 17 Oct 1991 09:13:02 keffer
- * Changed include path to <rw/xxx.h>
- *
- * Rev 1.1 24 Jul 1991 13:06:48 keffer
- * Added pvcs keywords
- *
- */
-
- #include "rw/defs.h"
- #include <stdarg.h>
-
- /*
- * This struct contains all the information about an error.
- * Currently, it consists of a default disposition, and a message.
- */
- struct RWErrType {
- RWSeverity defaultDispose; // Default error disposition
- const char* errmsg; // The associated error message.
- };
-
- /*
- * All of the error messages associated with a package are managed by an
- * instance of RWPackage.
- */
- struct RWPackage {
- int packNo; // Package number
- const RWErrType* errs; // The vector of errors for this package
- unsigned nerrs; // Number of errors
- RWPackage* next; // Points to next package
- public:
- const RWErrType* getError(RWErrNo) const;
- int packageID() const {return packNo;}
- };
-
- /*
- * The error manager manages all packages. It maintains a linked
- * list of RWPackage instances. Note that everything is declared static:
- * there is only one global error manager.
- */
- class RWExport RWErrManager {
- static RWPackage* packageList; // Head of the list
- public:
- // Add a new package:
- static void insert(RWPackage*);
- static RWPackage* remove(int packageNumber);
- // Get a error struct for a given error number:
- static const RWErrType* getErr(RWErrNo);
- };
-
- /*
- * An instance of class RWErrObject is used to raise an error/exception.
- */
- class RWExport RWErrObject {
- public:
- RWErrObject(RWErrNo n, RWSeverity sever = RWDEFAULT, ClassID cl = __GLOBAL);
- RWErrNo number() const {return errorNumber;}
- RWSeverity severity() const {return sev;}
- ClassID classID() const {return theClass;}
- private:
- RWErrNo errorNumber;
- RWSeverity sev;
- ClassID theClass;
- };
-
- /*
- * typedef for an error handler:
- */
- typedef void (far *RWErrHandler)(RWErrObject, va_list);
-
- /*
- * Set a new error handler.
- */
- RWErrHandler rwexport setRWErrHandler(RWErrHandler routine);
-
- pragma pop_align_members();
- #endif /* __RWERR_H__ */
-