159 lines
5.2 KiB
C++
Executable File
159 lines
5.2 KiB
C++
Executable File
/*
|
|
* STATUS.H
|
|
*
|
|
* Header file for ArchiveLib 1.0
|
|
*
|
|
* Copyright (c) 1994 Greenleaf Software, Inc.
|
|
* All Rights Reserved
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* This header file contains the class declaration for ALStatus.
|
|
* This is a utility class that is used as a data member in many
|
|
* different types of objects. It holds the current error status
|
|
* of an object.
|
|
*
|
|
* CLASS DEFINITIONS:
|
|
*
|
|
* ALStatus
|
|
*
|
|
* MACROS
|
|
*
|
|
* ostream& operator << ( ostream& stream, const ALStatus &status )
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
*/
|
|
|
|
#ifndef _STATUS_H
|
|
#define _STATUS_H
|
|
|
|
#if defined( __cplusplus )
|
|
|
|
/*
|
|
* class ALStatus
|
|
*
|
|
* DESCRIPTION
|
|
*
|
|
* ALStatus is a utility class that is used as a data member of several
|
|
* other classes. It provides an integer member that keeps track
|
|
* of the current status of the object, with AL_SUCCESS meaning
|
|
* everything is okay, and a code < 0 meaning the object has
|
|
* experienced an error.
|
|
*
|
|
* The object also contains a character pointer to a detailed error
|
|
* message. Usually when an error occurs in ArchiveLib, the
|
|
* routine that detects the error generates a detailed message that
|
|
* can be stored to provide additional information.
|
|
*
|
|
* Error states in ArchiveLib are "sticky". Once an object is flagged
|
|
* as being in error, it will stay that way until the programmer
|
|
* resets it, which means it will fail most ordinary operations.
|
|
* When you want to clear the error statue of an object, call
|
|
* SetError() with AL_SUCCESS as the error code.
|
|
*
|
|
* DATA MEMBERS
|
|
*
|
|
* miStatus : The current status of the object, with AL_SUCCESS
|
|
* being a good value. You can get at this easily
|
|
* by casting ALStatus to type int.
|
|
*
|
|
* miStatusDetailLength : This member keeps track of the length of the
|
|
* status detail. The status detail buffer
|
|
* is dynamically allocated when it is needed.
|
|
* Keeping this member is really kind of dumb, I
|
|
* need to just allocate as much space as necessary
|
|
* when the error detail is created. Look for this
|
|
* data member to go away in an upcoming release.
|
|
*
|
|
* mszStatusDetail : The detailed error message. It will be set to
|
|
* 0 until a message is generated, when it
|
|
* is dynamically allocated. Cleaned up if necessary
|
|
* in the destructor.
|
|
|
|
*
|
|
* MEMBER FUNCTIONS
|
|
*
|
|
* ALStatus() : The default and only constructor.
|
|
* ~ALStatus() : The destructor, has to clean up detail string.
|
|
* operator new() : Memory allocation operator, allocates space
|
|
* for the class object when the library is in
|
|
* the DLL.
|
|
* SetError() : Sets the error code to a value, and writes
|
|
* new data into the detail string.
|
|
* GetStatusCode() : Returns the current integer status code,
|
|
* just like operator int().
|
|
* GetStatusString() : Returns the short string translation.
|
|
* GetStatusDetail() : Returns the detailed status message, created
|
|
* at the point the error took place.
|
|
* operator int() : The casting operator, used all over ArchiveLib
|
|
* when testing a status for a value < AL_SUCCESS.
|
|
* operator=() : Assignment operator, easy here.
|
|
*
|
|
* REVISION HISTORY
|
|
*
|
|
* May 26, 1994 1.0A : First release
|
|
*
|
|
*/
|
|
|
|
|
|
class AL_CLASS_TYPE ALStatus {
|
|
/*
|
|
* Constructors, destructors, assignment operators, and declarations
|
|
*/
|
|
public :
|
|
AL_PROTO ALStatus();
|
|
AL_PROTO ~ALStatus();
|
|
#if defined( AL_USING_DLL ) || defined( AL_BUILDING_DLL )
|
|
void AL_DLL_FAR * AL_PROTO operator new( size_t size );
|
|
#endif
|
|
/*
|
|
* I don't want to allow the copy constructor, although I probably could
|
|
* support it without too much trouble.
|
|
*/
|
|
protected :
|
|
AL_PROTO ALStatus( ALStatus AL_DLL_FAR & );
|
|
/*
|
|
* Member functions
|
|
*/
|
|
public :
|
|
int AL_PROTO SetError( int error, const char AL_DLL_FAR *fmt, ... );
|
|
AL_PROTO GetStatusCode(){ return miStatus; }
|
|
const char AL_DLL_FAR * AL_PROTO GetStatusString();
|
|
const char AL_DLL_FAR * AL_PROTO GetStatusDetail() const;
|
|
AL_PROTO operator int(){ return miStatus; }
|
|
ALStatus AL_DLL_FAR & AL_PROTO operator = ( ALStatus AL_DLL_FAR & );
|
|
/*
|
|
* Data members
|
|
*/
|
|
protected :
|
|
int miStatus;
|
|
const int miStatusDetailLength;
|
|
char AL_DLL_FAR *mszStatusDetail;
|
|
|
|
};
|
|
|
|
inline ostream& operator << ( ostream& stream, const ALStatus AL_DLL_FAR &status )
|
|
{
|
|
#if defined( AL_USING_DLL ) && !defined( AL_LARGE_MODEL ) && !defined( AL_FLAT_MODEL )
|
|
const char _far *p = status.GetStatusDetail();
|
|
char *near_string = new char[ _fstrlen( p ) + 1 ];
|
|
if ( near_string ) {
|
|
_fstrcpy( near_string, p );
|
|
stream << near_string;
|
|
delete near_string;
|
|
} else
|
|
stream << "Memory allocation failure!";
|
|
return stream;
|
|
#else
|
|
return stream << status.GetStatusDetail();
|
|
#endif
|
|
}
|
|
|
|
#endif /* #if defined( __cplusplus ) */
|
|
|
|
#endif /* #ifdef _STATUS_H */
|
|
|