149 lines
4.7 KiB
C++
149 lines
4.7 KiB
C++
// ***** BEGIN LICENSE BLOCK *****
|
|
// * Version: MPL 1.1
|
|
// *
|
|
// * The contents of this file are subject to the Mozilla Public License Version
|
|
// * 1.1 (the "License"); you may not use this file except in compliance with
|
|
// * the License. You may obtain a copy of the License at
|
|
// * http://www.mozilla.org/MPL/
|
|
// *
|
|
// * Software distributed under the License is distributed on an "AS IS" basis,
|
|
// * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
// * for the specific language governing rights and limitations under the
|
|
// * License.
|
|
// *
|
|
// * The Original Code is TurboPower Abbrevia
|
|
// *
|
|
// * The Initial Developer of the Original Code is
|
|
// * TurboPower Software
|
|
// *
|
|
// * Portions created by the Initial Developer are Copyright (C) 1997-2002
|
|
// * the Initial Developer. All Rights Reserved.
|
|
// *
|
|
// * Contributor(s):
|
|
// *
|
|
// * ***** END LICENSE BLOCK *****
|
|
/*********************************************************/
|
|
/* UsingAPI.cpp */
|
|
/*********************************************************/
|
|
//---------------------------------------------------------------------------
|
|
|
|
#include <condefs.h>
|
|
#include <iostream.h>
|
|
|
|
#include <AbArcTyp.hpp>
|
|
#include <AbZipTyp.hpp>
|
|
#include <AbZipPrc.hpp>
|
|
#include <AbUnzPrc.hpp>
|
|
|
|
#pragma hdrstop
|
|
//---------------------------------------------------------------------------
|
|
|
|
USERES("UsingAPI.res");
|
|
//---------------------------------------------------------------------------
|
|
#pragma link "abarctyp"
|
|
#pragma link "abziptyp"
|
|
#pragma link "abzipprc"
|
|
#pragma link "abunzprc"
|
|
//---------------------------------------------------------------------------
|
|
|
|
class THelper : public TObject {
|
|
public:
|
|
virtual __fastcall THelper() {};
|
|
void __fastcall UnzipProc(
|
|
TObject* Sender, TAbArchiveItem* Item, String NewName);
|
|
void __fastcall ZipProc(
|
|
TObject* Sender, TAbArchiveItem* Item, TStream* OutStream);
|
|
void __fastcall ArchiveItemProgress(TObject* Sender, TAbArchiveItem* Item,
|
|
Byte Progress, bool& Abort);
|
|
};
|
|
|
|
void __fastcall THelper::ZipProc(
|
|
TObject* Sender, TAbArchiveItem* Item, TStream* OutStream)
|
|
{
|
|
AbZip((TAbZipArchive*)Sender, (TAbZipItem*)Item, OutStream);
|
|
}
|
|
|
|
void __fastcall THelper::UnzipProc(
|
|
TObject* Sender, TAbArchiveItem* Item, String NewName)
|
|
{
|
|
AbUnzip(Sender, (TAbZipItem*)Item, NewName);
|
|
}
|
|
|
|
void __fastcall THelper::ArchiveItemProgress(
|
|
TObject* Sender, TAbArchiveItem* Item, Byte Progress, bool& Abort)
|
|
{
|
|
String MethodStrings[] = { "UnStoring", "UnShrinking",
|
|
"UnReducing", "UnReducing",
|
|
"UnReducing", "UnReducing",
|
|
"Exploding", "DeTokenizing",
|
|
"Inflating", "Enhanced Inflating",
|
|
"DCL Exploding", "Extracting" };
|
|
String ActionString;
|
|
|
|
switch (Item->Action) {
|
|
case aaAdd : ActionString = "Adding "; break;
|
|
case aaFreshen : ActionString = "Freshening "; break;
|
|
default :
|
|
ActionString = MethodStrings[((TAbZipItem*)Item)->CompressionMethod] +
|
|
" ";
|
|
}
|
|
cout << String(ActionString + Item->FileName).c_str() << endl;
|
|
}
|
|
|
|
|
|
//---------------------------------------------------------------------------
|
|
#pragma argsused
|
|
int main(int argc, char **argv)
|
|
{
|
|
String ZipFileName;
|
|
String OutDirectory;
|
|
String InDirectory;
|
|
String Mask;
|
|
TAbZipArchive* Archive;
|
|
THelper* Helper = new THelper;
|
|
|
|
// usage: UsingAPI ZipFileName InDirectory Mask OutDirectory
|
|
if (ParamCount() < 4 || (ParamCount() > 0 && ParamStr(1).Pos('?'))) {
|
|
cout << endl << " Syntax: UsingAPI ZipFileName "
|
|
"InDirectory Mask OutDirectory" << endl;
|
|
return 0;
|
|
}
|
|
ZipFileName = ParamStr(1);
|
|
InDirectory = ParamStr(2);
|
|
Mask = ParamStr(3);
|
|
OutDirectory = ParamStr(4);
|
|
// open the file
|
|
if (FileExists( ZipFileName )) {
|
|
Archive = new TAbZipArchive(
|
|
ZipFileName, fmOpenReadWrite | fmShareDenyWrite );
|
|
Archive->Load();
|
|
}
|
|
else
|
|
Archive = new TAbZipArchive(
|
|
ZipFileName, fmCreate | fmShareDenyNone );
|
|
try {
|
|
Helper = new THelper;
|
|
// set the event handlers
|
|
Archive->InsertHelper = Helper->ZipProc;
|
|
Archive->ExtractHelper = Helper->UnzipProc;
|
|
Archive->OnArchiveItemProgress = Helper->ArchiveItemProgress;
|
|
// set the BaseDirectory for input files
|
|
Archive->BaseDirectory = InDirectory;
|
|
// add all the files in the BaseDirectory to the archive
|
|
Archive->AddFiles( Mask, 0 );
|
|
// save the files to the zipfile
|
|
Archive->Save();
|
|
// now, change the base directory to the output
|
|
Archive->BaseDirectory = OutDirectory;
|
|
Archive->ExtractFiles( Mask );
|
|
}
|
|
catch (...) {
|
|
delete Helper;
|
|
delete Archive;
|
|
return 0;
|
|
}
|
|
delete Helper;
|
|
delete Archive;
|
|
return 0;
|
|
}
|