campo-sirio/al/examples/ex22con.cpp

102 lines
3.1 KiB
C++
Raw Normal View History

//
// EX22CON.CPP
//
// C++/DOS Example program for ArchiveLib 2.0
//
// Copyright (c) Greenleaf Software, Inc. 1994 - 1996
// All Rights Reserved
//
// MEMBERS/FUNCTIONS DEMONSTRATED
//
//
// DESCRIPTION
//
// This example program shows how you can set up a monitor and use
// it to allow for an abort path during archiving. We derive a new
// monitor class from ALBargraph. We are going to use ALBargraph's
// existing functions, and just add a keyboard check. So to the end
// user it will look exactly like the existing bargraph.
//
// REVISION HISTORY
//
// February 1, 1996 2.0A : Second release
//
#include <iostream.h>
#include "arclib.h"
#include "bargraph.h"
#include "pkarc.h"
#include "glarc.h"
#include <conio.h>
//
// Our new class has to have a ctor, plus we add a Progress() function.
// The Progress() function gets called a lot, so that is where we get
// to check the keyboard for a keypress.
//
class MyMonitor : public ALBarGraph {
public :
MyMonitor() : ALBarGraph( AL_MONITOR_OBJECTS ){ ; }
void AL_PROTO Progress( long object_so_far,
ALStorage AL_DLL_FAR &object );
virtual AL_INLINE_PROTO ~MyMonitor(){;}
//
// I don't really need these functions, but if I don't declare them here,
// gcc goes looking for them, even though it doesn't need them.
//
protected :
AL_PROTO MyMonitor( MyMonitor AL_DLL_FAR & );
MyMonitor AL_DLL_FAR & AL_PROTO operator=( const MyMonitor AL_DLL_FAR & );
};
//
// The Progress() function is clearly pretty lazy. The first thing
// it does is call ALBarGraph::Progress(), so we don't have to do any
// U/I stuff. All we do then is check to see if the user hit a keystroke.
// If the did, we set the error flag on the object, which should lead
// to an abort of the archiving function.
//
void MyMonitor::Progress( long object_tell,
ALStorage& object )
{
ALBarGraph::Progress( object_tell, object );
if ( kbhit() ) {
getch();
object.mStatus.SetError( AL_USER_ABORT, "User hit abort key..." );
}
}
//
// This should look just like EX00CON.CPP. It is nearly identical, with
// the only important difference being the fact that it creates monitor
// from my derived class.
//
int main()
{
MyMonitor monitor;
cout << "Archive Library 2.0\nEX22CON.CPP\n\n";
cout << "Our new class has to have a ctor, plus we add a Progress() function.\n";
cout << "The Progress() function gets called a lot, so that is where we get\n";
cout << "to check the keyboard for a keypress.\n\n";
getch();
#if defined( ZIP )
ALPkArchive archive( "dos00.zip" );
ALEntryList list( &monitor, PkCompressTools() );
#else
ALGlArchive archive( "dos00.gal" );
ALEntryList list( &monitor, GlCompressTools() );
#endif
cout << "\nAdding input*.dat and *.bak to "
<< archive.GetStorageObject()->mName
<< " using an ALBarGraph\n\n";
list.AddWildCardFiles( "input*.dat, *.bak" );
archive.Create( list );
cout << "\n" << archive.mStatus << "\n";
return archive.mStatus;
}