122 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			122 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
//
 | 
						|
// EX13CON.CPP
 | 
						|
//
 | 
						|
//  C++/DOS Example program for ArchiveLib 2.0
 | 
						|
//
 | 
						|
//  Copyright (c) Greenleaf Software, Inc. 1994 - 1996
 | 
						|
//  All Rights Reserved
 | 
						|
//
 | 
						|
// MEMBERS/FUNCTIONS DEMONSTRATED
 | 
						|
//
 | 
						|
//  ALMemory::ALMemory()
 | 
						|
//
 | 
						|
// DESCRIPTION
 | 
						|
//
 | 
						|
//  This example program shows how you can create a derived class and
 | 
						|
//  use ALStorage::YieldTime() to monitor for abort conditions.  In
 | 
						|
//  this case all it takes is a new class with two functions:  a ctor
 | 
						|
//  and a new version of YieldTime().  You can't do this without
 | 
						|
//  writing C++ code, sorry VB and C programmers.  But the C++ is
 | 
						|
//  pretty easy, it wouldn't be hard to drop a module like this into
 | 
						|
//  your C program.
 | 
						|
//
 | 
						|
// REVISION HISTORY
 | 
						|
//
 | 
						|
//  February 1, 1996  2.0A  : Second release
 | 
						|
//
 | 
						|
 | 
						|
#include <iostream.h>
 | 
						|
#include <iomanip.h>
 | 
						|
#include <conio.h>
 | 
						|
 | 
						|
#include "arclib.h"
 | 
						|
#include "pkarc.h"
 | 
						|
#include "glarc.h"
 | 
						|
#include "bargraph.h"
 | 
						|
#include "memstore.h"
 | 
						|
 | 
						|
//
 | 
						|
// This derived class has to have a constructor, but it gets the base
 | 
						|
// class ctor to do all the work for.  The YieldTime() function is
 | 
						|
// where the real work takes place.  Everything else is done by
 | 
						|
// ALMemory, so we get off light here.
 | 
						|
//
 | 
						|
 | 
						|
#if defined( HUGE )
 | 
						|
class AL_CLASS_TYPE MyFile : public ALHugeMemory {
 | 
						|
    public :
 | 
						|
        AL_PROTO MyFile( const char *name ) : ALHugeMemory( name ){;}
 | 
						|
#else
 | 
						|
class AL_CLASS_TYPE MyFile : public ALMemory {
 | 
						|
    public :
 | 
						|
        AL_INLINE_PROTO MyFile( const char *name ) : ALMemory( name ){;}
 | 
						|
#endif
 | 
						|
        virtual void AL_PROTO YieldTime();
 | 
						|
        virtual AL_INLINE_PROTO ~MyFile(){;}
 | 
						|
//
 | 
						|
// Normally you wouldn't care about defining these, but I had some
 | 
						|
// troubles with gcc when I didn't.
 | 
						|
//
 | 
						|
    protected :
 | 
						|
        AL_PROTO MyFile( const MyFile AL_DLL_FAR & );
 | 
						|
        MyFile AL_DLL_FAR & AL_PROTO operator=( const MyFile AL_DLL_FAR & );
 | 
						|
 | 
						|
};
 | 
						|
 | 
						|
//
 | 
						|
// ALStorage::YieldTime() actually does some worthwhile work, so we
 | 
						|
// have to be sure to call it.  All we do here in addition to that is
 | 
						|
// check for a keyboard hit.  If we see one, we set the error status on
 | 
						|
// this so that the archiving function will abort.
 | 
						|
//
 | 
						|
void AL_PROTO MyFile::YieldTime()
 | 
						|
{
 | 
						|
  if ( kbhit() ) {
 | 
						|
      getch();
 | 
						|
      mStatus.SetError( AL_USER_ABORT, "User hit abort key..." );
 | 
						|
  }
 | 
						|
#if defined( HUGE )
 | 
						|
    ALHugeMemory::YieldTime();
 | 
						|
#else
 | 
						|
    ALMemory::YieldTime();
 | 
						|
#endif
 | 
						|
}
 | 
						|
 | 
						|
//
 | 
						|
// The main() function here is a lot like EX00CON.CPP.  The main difference
 | 
						|
// is that we are archiving to a memory object instead of a disk object.
 | 
						|
// The only reason for that is so we make less clutter.
 | 
						|
//
 | 
						|
 | 
						|
main( int, char *[] )
 | 
						|
{
 | 
						|
    cout << "Archive Library 2.0\nEX13CON.CPP\n\n";
 | 
						|
    cout << "This example program shows how you can create a derived class and\n";
 | 
						|
    cout << "use ALStorage::YieldTime() to monitor for abort conditions.  In\n";
 | 
						|
    cout << "this case all it takes is a new class with two functions:  a ctor\n";
 | 
						|
    cout << "and a new version of YieldTime().  You can't do this without\n";
 | 
						|
    cout << "writing C++ code, sorry VB and C programmers.  But the C++ is\n";
 | 
						|
    cout << "pretty easy, it wouldn't be hard to drop a module like this into\n";
 | 
						|
    cout << "your C program.\n\n";
 | 
						|
    getch();
 | 
						|
 | 
						|
    cout << "\nAdding input*.dat and *.bak to a MyFile object"
 | 
						|
         << " using an ALBarGraph\n"
 | 
						|
         << "Hit any key to abort...\n\n";
 | 
						|
 | 
						|
    MyFile archive_file( "Memory based archive" );
 | 
						|
#if defined( ZIP )
 | 
						|
    ALPkArchive archive( archive_file );
 | 
						|
#else
 | 
						|
    ALGlArchive archive( archive_file );
 | 
						|
#endif
 | 
						|
    ALBarGraph monitor( AL_MONITOR_OBJECTS, cout );
 | 
						|
 | 
						|
    ALEntryList list( &monitor );
 | 
						|
 | 
						|
    list.AddWildCardFiles( "input*.dat, *.bak" );
 | 
						|
    archive.Create( list );
 | 
						|
    cout << "\n" << archive.mStatus << "\n";
 | 
						|
    return archive.mStatus;
 | 
						|
}
 |