125 lines
3.1 KiB
C++
Executable File
125 lines
3.1 KiB
C++
Executable File
//
|
|
// 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 );
|
|
}
|