campo-sirio/al/examples/ex13con.cpp
alex 714dd74636 Archive Library versione 2.00
git-svn-id: svn://10.65.10.50/trunk@5350 c028cbd2-c16b-5b4b-a496-9718f37d4682
1997-10-09 16:09:54 +00:00

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;
}