142 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			4.2 KiB
		
	
	
	
		
			C++
		
	
	
		
			Executable File
		
	
	
	
	
| //
 | |
| // EX09CON.CPP
 | |
| //
 | |
| //  C++/DOS Example program for ArchiveLib 2.0
 | |
| //
 | |
| //  Copyright (c) Greenleaf Software, Inc. 1994 - 1996
 | |
| //  All Rights Reserved
 | |
| //
 | |
| // MEMBERS/FUNCTIONS DEMONSTRATED
 | |
| //
 | |
| //  ALStorage::Close()
 | |
| //  ALStorage::Open()
 | |
| //  ALStorage::ReadChar()
 | |
| //  ALArchive::ALArchive()
 | |
| //  ALEntry::ALEntry()
 | |
| //  ALEntryList::DeleteUnmarked()
 | |
| //  ALEntryList::SetMarks()
 | |
| //  ALEntryList::ToggleMarks()
 | |
| //
 | |
| // DESCRIPTION
 | |
| //
 | |
| //  This is a somewhat contrived example program that demonstrates
 | |
| //  a bunch of miscellaneous things.  It creates an in-memory archive,
 | |
| //  adds a bunch of source code to the archive, then adds a memory
 | |
| //  buffer.  It then extracts EX09CON.CPP to an in-memory object, and
 | |
| //  finally dumps it on the screen for you to see.
 | |
| //
 | |
| // REVISION HISTORY
 | |
| //
 | |
| //  February 1, 1996  2.0A  : Second release
 | |
| //
 | |
| //
 | |
| #include <stdlib.h>
 | |
| #include <string.h>
 | |
| #include <conio.h>
 | |
| 
 | |
| #include "arclib.h"
 | |
| #include "memstore.h"
 | |
| #include "glarc.h"
 | |
| #include "glengn.h"
 | |
| #include "pkarc.h"
 | |
| #include "pkengn.h"
 | |
| 
 | |
| void create_archive( ALArchive &archive, ALEntryList &list );
 | |
| void create_output_list( ALArchive &archive, ALEntryList &list );
 | |
| 
 | |
| int main( void )
 | |
| {
 | |
|  cout << "Archive Library 2.0\nEX09CON.CPP\n\n";
 | |
|  cout << "This is a somewhat contrived example program that demonstrates\n";
 | |
|  cout << "a bunch of miscellaneous things.  It creates an in-memory archive,\n";
 | |
|  cout << "adds a bunch of source code to the archive, then adds a memory\n";
 | |
|  cout << "buffer.  It then extracts EX09CON.CPP to an in-memory object, and\n";
 | |
|  cout << "finally dumps it on the screen for you to see.\n\n";
 | |
|  getch();
 | |
| 
 | |
|  ALMemory archive_file( "Try using a name like this for a disk file!" );
 | |
| #if defined( ZIP )
 | |
|  ALPkArchive archive( archive_file );
 | |
| #else
 | |
|  ALGlArchive archive( archive_file );
 | |
| #endif
 | |
| 
 | |
|  ALEntryList *input_list = new ALEntryList( 0, PkTools( 6, 13, 6 ) );
 | |
| 
 | |
|  AL_ASSERT( input_list != 0, "ALEntryList constructor didn't work!" );
 | |
| //
 | |
| // This routine is called to
 | |
|  create_archive( archive, *input_list );  //Create the memory archive
 | |
|  delete input_list;
 | |
| 
 | |
|  ALEntryList output_list;
 | |
| //
 | |
| // Next we work on the output list in order to figure out which files
 | |
| // to extract.  I then perform the extraction and print the results.
 | |
| //
 | |
|  create_output_list( archive, output_list );
 | |
| 
 | |
|  archive.Extract( output_list );
 | |
|  ALEntry *job = output_list.GetFirstEntry();
 | |
|  if ( !job ) {
 | |
|      cout << "Empty archive!\n";
 | |
|      return 1;
 | |
|  }
 | |
|  job->mpStorageObject->Open();
 | |
|  int c;
 | |
|  while ( ( c = job->mpStorageObject->ReadChar() ) >= 0 )
 | |
|      cout << (char) c;
 | |
|  job->mpStorageObject->Close();
 | |
|  cout << "Done\n";
 | |
|  return 0;
 | |
| }
 | |
| 
 | |
| //
 | |
| // This function is called to create the in-memory archive.  It
 | |
| // adds a bunch of example programs to the list, then a single
 | |
| // memory object.  After creating the archive with these
 | |
| // objects, it prints out some status stuff and returns.
 | |
| //
 | |
| void create_archive( ALArchive &archive, ALEntryList &list )
 | |
| {
 | |
|  char *buffer = "Adding this buffer to the archive!";
 | |
| 
 | |
|  list.AddWildCardFiles( "EX0?CON.CPP" );
 | |
|  new ALEntry( list,
 | |
|               new ALMemory( "buffer", buffer, strlen( buffer ) ),
 | |
| #if defined( ZIP )
 | |
|               new ALPkCompressor( 6, 13, 6),
 | |
|               new ALPkDecompressor );
 | |
| #else
 | |
|               new ALGlCompressor,
 | |
|               new ALGlDecompressor );
 | |
| #endif
 | |
|  archive.Create( list );
 | |
|  cout << "Returned status integer = "
 | |
|       << (int) archive.mStatus << "\n";
 | |
|  cout << "Returned status string = "
 | |
|       << archive.mStatus.GetStatusString() << "\n";
 | |
|  cout << "Returned status detail = "
 | |
|       << archive.mStatus << "\n";
 | |
| }
 | |
| 
 | |
| //
 | |
| // This function is called just before extracting the list from
 | |
| // the archive.  Essentially all it does is insure that the only
 | |
| // object to be extracted from the archive will be EX09CON.CPP, and
 | |
| // it will be extracted to a memory object instead of a file.
 | |
| //
 | |
| void create_output_list( ALArchive &archive, ALEntryList &list )
 | |
| {
 | |
|  archive.ReadDirectory( list );
 | |
|  list.ToggleMarks();  //Turns off all marks
 | |
|  if ( list.SetMarks( "ex09con.cpp" ) < 0 )
 | |
|      exit( 1 );
 | |
|  list.DeleteUnmarked();
 | |
|  ALEntry *job = list.GetFirstEntry();
 | |
|  if ( job ) {
 | |
|      delete job->mpStorageObject;
 | |
|      job->mpStorageObject = new ALMemory;
 | |
|  }
 | |
| }
 |