// // SIMPDEL.CPP // // Source file for ArchiveLib 2.0 // // Copyright (c) Greenleaf Software, Inc. 1994-1996 // All Rights Reserved // // CONTENTS // // ALDelete() // // REVISION HISTORY // // February 14, 1996 2.0A : New Release // #include "arclib.h" #if !defined( AL_IBM ) #pragma hdrstop #endif #include "alsimple.h" #include "pkarc.h" #include "copyengn.h" #include "pkengn.h" #include "filestor.h" // // NAME // // ALDelete() // // PLATFORMS/ENVIRONMENTS // // Console Windows PM // C++ C VB Delphi // // SHORT DESCRIPTION // // The simplified interface function to delete files from a ZIP file. // // C/C++ SYNOPSIS // // #include "alsimple.h" // // int ALDelete( ALZipDir *z, // CALLBACK_FN callback ) // // VB SYNOPSIS // // See arclib.bas for VB function. // // DELPHI SYNOPSIS // // See arclib.pas for Delphi function. // // ARGUMENTS // // z : The ALZipDir array. This is the array you will have // have read in using ALReadDir(). Every entry in the // array that has a mark set will be deleted. // // callback : C and C++ use a callback function for monitoring. // This function gets called periodically with // file names and progress ratios. Note that the // file names passed from ALDelete are the files that // are being *preserved*, not the ones that are being // deleted. // // DESCRIPTION // // The simplified ALDelete function deletes the files you specified // in the ALZipDir array. To do this, the function has to recover // the ALArchive pointer that is stashed in the last element of the // array. Then, it builds an ALEntryList that is used to call // ALArchive::Delete(). // // RETURNS // // AL_SUCCESS if things went well, o/w an ArchiveLib error code. // // EXAMPLE // // SEE ALSO // // REVISION HISTORY // // February 14, 1996 2.0A : New Release // AL_LINKAGE int AL_FUNCTION ALDelete( ALZipDir AL_DLL_FAR *z, CALLBACK_FN callback ) { int i; for ( i = 0 ; z[ i ].size != -1L ; i++ ) ; #if defined( AL_LARGE_DATA ) ALPkArchive *arc = (ALPkArchive *) z[ i ].compressed_size; #else ALPkArchive *arc = (ALPkArchive *) (int) z[ i ].compressed_size; #endif ALSimpleMonitor monitor( callback ); ALEntryList list( &monitor ); while ( z->name ) { ALCompressor *c; if ( z->level == 0 ) c = new ALCopyCompressor; else { ALPkCompressor * p = new ALPkCompressor; p->option = (ALPkCompressor::_option) (z->level - 1); c = p; } ALEntry *entry; entry = new ALEntry( list, new ALFile( z->name ), c, 0 ); _UpdateEntry( entry, z ); z++; } ALPkArchive output( "" ); return arc->Delete( list, output ); }