/*
 * SPINNER.H
 *
 *  Header file for ArchiveLib 1.0
 *
 *  Copyright (c) 1994 Greenleaf Software, Inc.
 *  All Rights Reserved
 *
 * DESCRIPTION
 *
 *  This header file contains the class definition for the ALMonitor
 *  derived object ALSpinner.
 * 
 * CLASS DEFINITIONS:
 *
 *  ALSpinner
 *
 * REVISION HISTORY
 *
 *  May 26, 1994  1.0A  : First release
 *
 */

#ifndef _SPINNER_H
#define _SPINNER_H

#include "arclib.h"

#if defined( __cplusplus )

/*
 * class ALSpinner : public ALMonitor 
 *
 * DESCRIPTION
 *
 *  ALSpinner is a very simple monitor class, and is only useful under
 *  DOS, not Windows.  All ALSpinner does is spin a little propellor
 *  around while the file is being processed.  This lets you know
 *  that something is happening in an otherwise boring process.
 *
 * DATA MEMBERS
 *
 *  miSpinIndex     : A Static variable that keeps track of which
 *                    position the propellor should be in.  The
 *                    propellor travels through one of four different
 *                    positions.
 *
 *  mrStream        : A reference to the stream that the propellor is
 *                    going to be written on.
 *
 * MEMBER FUNCTIONS
 *
 *  ALSpinner()         : The one and only constructor.
 *  ~ALSpinner()        : The virtual destructor.
 *  Progress()          : The routine that gets called to make the
 *                        propellor twitch.
 *  ArchiveOperation()  : The routine that gets called when archiving
 *                        starts, stops, etc.
 *
 * REVISION HISTORY
 *
 *  May 26, 1994  1.0A  : First release
 *
 */

class AL_CLASS_TYPE ALSpinner : public ALMonitor {
/*
 *  Constructors, destructors, and friend classes
 */
    public :
        AL_PROTO ALSpinner( ALMonitorType monitor_type,
                            ostream& stream = cout );
        virtual AL_PROTO ~ALSpinner();
/*
 *  The copy constructor and assignment operator do not exist.
 */
    protected :
        ALSpinner( const ALSpinner& );
        ALSpinner& operator=( const ALSpinner& );
/*
 *  Member functions
 */
    protected :
        virtual void AL_PROTO Progress( long mlObjectSoFar, ALStorage& object );
        virtual void AL_PROTO ArchiveOperation( ALArchiveOperation operation,
                                                ALArchiveBase *archive,
                                                ALEntry *job );
/*
 * Data Members
 */
    protected :
        static int miSpinIndex;
        ostream& mrStream;
    public :
        AL_CLASS_TAG( _ALSpinnerTag );
};

#endif /* #if defined( __cplusplus ) */

#endif /* #ifdef SPINNER_H           */