// // 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 #include #include #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; } }