campo-sirio/arch/alstream.h

194 lines
5.2 KiB
C
Raw Normal View History

/*
* ALSTREAM.H
*
* Header file for ArchiveLib 1.0
*
* Copyright (c) 1994 Greenleaf Software, Inc.
* All Rights Reserved
*
* DESCRIPTION
*
* These macros and types are all used in the debug versions of the
* ArchiveLib.
* This is a utility class that is used in some of the demos.
* It is a simple implementation of a C++ iostream that writes
* to a multiline edit control. The constructor wants a window
* handle and a control ID. In the implementations in the demos,
* the window handle is that of the dialog box, and the control
* ID is that of the multiline edit control. This class
* works pretty well, but it is by no means bulletproof. For one
* thing, it won't work from inside a DLL, because of far/near
* problems. So if you link to the DLL, you are still going to
* have to link to the static library to get this class. That
* is why the class isn't defined with the usual AL_CLASS_TYPE
* and AL_PROTO macros.
*
* Note that _ALControlStream is used internally as a helper.
* ALEditControlStream is what the programmer uses, but when
* creating an ALEditControlStream, we have to create an
* _ALControlStream object to do some of the work.
*
* CLASS DEFINITIONS:
*
* _ALControlStream : The streambuf used by ALEditControlStream
*
* ALEditControlStream : The ostream that writes to multiline edit
* controls.
* PROTOTYPES:
*
* ostream& gfendl( ostream &s ) : Used to generate a newline and
* a flush for ALEditControlStream.
*
* REVISION HISTORY
*
* May 26, 1994 1.0A : First release
*
*/
#ifndef _ALSTREAM_H
#define _ALSTREAM_H
#define STRICT
#include <windows.h>
#include "arclib.h"
#if defined( __cplusplus )
/* Won't work in a DLL! */
#if !defined( AL_BUILDING_DLL )
#include <iostream.h>
/*
* class _ALControlStream
*
* DESCRIPTION
*
* This is a class derived from streambuf. We attach this to an
* ALEditControlStream, and it will write to the edit control
* specified in the constructor.
*
* DATA MEMBERS
*
* hWindow : The handle of the edit control.
*
* MEMBER FUNCTIONS
*
* _ALControlStream() : The constructor, called by the ALEditControlStream
* constructor.
*
* ~_ALControlStream() : The virtual destructor.
*
* overflow() : Called by the base class when the buffer is about
* to overflow. This is our cue to send bytes out
* to the edit control.
*
* underflow() : Called by the base class when the more data is
* needed by the buffer for reading. We don't
* supply any data, this is a stub.
*
* sync() : Base class calls this when it feels like flushing
* the buffers.
*
* REVISION HISTORY
*
* May 26, 1994 1.0A : First release
*
*/
class _ALControlStream : public streambuf {
/*
* Constructors, destructors, friend declarations
*/
friend class ALEditControlStream;
public :
_ALControlStream( HWND hwnd, int control );
virtual ~_ALControlStream();
/*
* The copy constructor and assignment operator are not supported. I
* declare them here because I don't want the compiler to generate
* default versions for me.
*/
protected :
operator=( _ALControlStream& );
_ALControlStream( _ALControlStream& );
/*
* Member functions and overloaded operators
*/
protected :
virtual int overflow( int );
virtual int underflow();
virtual int sync();
/*
* Data members
*/
protected :
HWND hWindow;
};
/*
* class ALEditControlStream
*
* DESCRIPTION
*
* This is the demo class that actually performs output to the
* edit control. It doesn't really have to do anything other than
* create itself and then create the streambuf derivative, because
* the streambuf does al the work.
*
* DATA MEMBERS
*
* mpControlStream : A pointer to the streambuf object we create,
* because without him I am nothing.
*
* MEMBER FUNCTIONS
*
* ALEditControlStream() : The constructor.
* ~ALEditControlStream() : The destructor.
*
*
* REVISION HISTORY
*
* May 26, 1994 1.0A : First release
*
*/
class ALEditControlStream : public ostream
{
/*
* Constructors, destructors, and friends
*/
public :
ALEditControlStream( HWND handle, int control_id = -1 );
~ALEditControlStream();
/*
* The copy constructor and assignment operator are not supported. I
* declare them here because I don't want the compiler to generate
* default versions for me.
*/
protected :
operator=( ALEditControlStream& );
ALEditControlStream( ALEditControlStream& );
/*
* Data members
*/
_ALControlStream mpControlStream;
};
/*
* The gfendl manipulator is used to send an eol and flush the buffer
* when writing to an ALEditControlStream. It serves the same purpose
* as an endl written to a normal stream. The difference is that an
* eol on a regular stream has a "/n/r" pair, and this guy doesn't.
*/
ostream& gfendl( ostream &s );
#endif /* #if !defined( AL_BUILDING_DLL ) */
#endif /* #if defined( __cplusplus ) */
#endif /* #ifdef _ALSTREAM_H */