//---------------------------------------------------------------------------

#ifndef ZipOpH
#define ZipOpH
/*
  Copyright (c) 1990-2007 Info-ZIP.  All rights reserved.

  See the accompanying file LICENSE, version 2007-Mar-4 or later
  (the contents of which are also included in zip.h) for terms of use.
  If, for some reason, all these files are missing, the Info-ZIP license
  also may be found at:  ftp://ftp.info-zip.org/pub/infozip/license.html

  parts Copyright (C) 1997 Mike White, Eric W. Engler
************************************************************************
 Copyright (C) 2009, 2010  by Russell J. Peters, Roger Aelbrecht

   This file is part of TZipMaster Version 1.9.

    TZipMaster is free software: you can redistribute it and/or modify
    it under the terms of the GNU Lesser General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    TZipMaster is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU Lesser General Public License for more details.

    You should have received a copy of the GNU Lesser General Public License
    along with TZipMaster.  If not, see <http://www.gnu.org/licenses/>.

    contact: problems@delphizip.org (include ZipMaster in the subject).
    updates: http://www.delphizip.org
    DelphiZip maillist subscribe at http://www.freelists.org/list/delphizip 
************************************************************************
*/

#include "common.h"
#include "dzoper.h"
#include "DZRaw.h"
#include "ZipDflt.h"
#include "ZipFnc.h"

#define A_RONLY   0x01
#define A_HIDDEN  0x02
#define A_SYSTEM  0x04
#define A_LABEL   0x08
#define A_DIR     0x10
#define A_ARCHIVE 0x20

/* Forget FILENAME_MAX (incorrectly = 14 on some System V) */
//#define FNMAX 256

/* Lengths of headers after signatures in bytes */
//#define LOCHEAD 26
//#define CENHEAD 42
//#define ENDHEAD 18

#include "Crypt.h"

#define ADD           1

class ZipOp : public ZipFunc
{

    private:
        ZipOp(const ZipOp&);
        ZipOp& operator=(const ZipOp&);

    protected:
        long fOCDlength;
        int fOldFAT;   // **
        TCHAR fDrv[2];  // **
        int fnoisy;
        int fvolume_label;
        int ffix;

    public:
        int fhidden_files;
        ZipOp(const DllCommands *C);
        ~ZipOp(void);
        long Exec(const DllCommands *C);
        int     readzipfile(void);

    protected:
        int ZipSelect(const DllCommands *C);
        DZStrW ziptyp(const DZStrW &name);
        int GetFileMode(const DZStrW &name);

        int   IsFileSystemOldFAT(const DZStrW &dir);

        DZStrW getVolumeLabel(const DZStrW &drv, ulg *vtime, ulg *vmode, time_t *vutim);
//        DZStrW ex2IntForm(const DZStrW &xname, bool ignore); // convert external to internal form
        int ZipStreamStream(void);

    private:
		int ZipSetParam(const DllCommands *C);
		void GiveGlobals(void);
		int GetUserPW(void);               // ZipSel
		int MakeSpecials(void); //ZipSel
//        DZStrW MakeExclFilters(void);
//		DZStrW ConvExclFilters(const DZStrW & filters);
		int Wild(const DZStrW &spec);
        int procname(const DZStrW &fname, bool);
        int newname(const DZStrW &n, ZInt64 nSize);
        int readzipfile1(HANDLE hInz);
};
         
int ZEN_Rank(int err);

//ZGlobals; /* end of struct ZGlobals */
int             issymlnk(ulg a);

#endif





