102 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			102 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| //
 | |
| // 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;
 | |
| }
 |