/*++

Copyright (c) 1990-2000 Microsoft Corporation

Module Name:

    convert.hxx

Abstract:

    This module contains the declaration of the CONVERT class, which
    implements the File System Conversion Utility.

Author:

    Ramon Juan San Andres (ramonsa) 27-Sep-1991

Revision History:


--*/


#if !defined( _CONVERT_ )

#define _CONVERT_

#include "program.hxx"
#include "autoentr.hxx"
#include "autoreg.hxx"
#if defined(FE_SB) && defined(_X86_)
#include "drive.hxx" // for DP_DRIVE class
#endif

//
//  Convert exit codes
//
#define     EXIT_SUCCESS        0   //  Volume Converted
#define     EXIT_SCHEDULED      1   //  Conversion scheduled for next reboot
#define     EXIT_NOCANDO        2   //  Specified conversion not available
#define     EXIT_UNKNOWN        3   //  Unknown file system
#define     EXIT_ERROR          4   //  Conversion error
#define     EXIT_NOFREESPACE    5   //  Insufficient free space for conversion

DECLARE_CLASS( STREAM_MESSAGE );
DECLARE_CLASS( WSTRING  );
DECLARE_CLASS( CONVERT );


class CONVERT : public PROGRAM {

    public:

        DECLARE_CONSTRUCTOR( CONVERT );

        NONVIRTUAL
        VOID
        Construct (
            );

        NONVIRTUAL
        ~CONVERT (
            );

        NONVIRTUAL
        BOOLEAN
        Initialize (
            OUT PINT    ExitCode
            );

        NONVIRTUAL
        INT
        Convert (
            );

#if defined(FE_SB) && defined(_X86_)
        // NEC98 '95.6.23
        // We need to use ChangeBPB1 and ChangeBPB2
        // We use these function when logicalsectorsize != phisicalsectorsize
        BOOLEAN
        ChangeBPB1(
            IN  PCWSTRING       NtDrive
            );

        BOOLEAN
        ChangeBPB2(
            );
#endif

    private:

        NONVIRTUAL
        VOID
        Destroy (
            );

        NONVIRTUAL
        BOOLEAN
        RemoveScheduledAutoConv(
            );

        NONVIRTUAL
        PPATH
        FindSystemFile(
            IN      PWSTR       FileName
            );

        NONVIRTUAL
        BOOLEAN
        ParseArguments(
            OUT     PINT        ExitCode
            );

        NONVIRTUAL
        BOOLEAN
        ParseCommandLine (
            IN      PCWSTRING   CommandLine,
            IN      BOOLEAN     Interactive
            );


        NONVIRTUAL
        BOOLEAN
        Schedule (
            );


        NONVIRTUAL
        BOOLEAN
        ScheduleAutoConv(
            );

        DSTRING     _DisplayDrive;      //  Display name of the given drive
        DSTRING     _DosDrive;          //  Dos guid name or drive letter of the volume to convert
        DSTRING     _GuidDrive;         //  Dos guid name of the volume to convert
        PATH        _FullPath;          //  Mount point or drive letter of the volume to convert
        DSTRING     _NtDrive;           //  NT drive name of volume to convert
        DSTRING     _FsName;            //  Name of target file system
        DSTRING     _CvtZoneFileName;   //  Convert Zone File Name
        BOOLEAN     _Verbose;           //  Verbose flag
        BOOLEAN     _NoSecurity;        //  NoSecurity flag
        BOOLEAN     _NoChkdsk;          //  NoChkdsk flag
        BOOLEAN     _ForceDismount;     //  Force Dismount flag
        BOOLEAN     _Help;              //  Help flag
        BOOLEAN     _Restart;           //  Restart flag
#ifdef DBLSPACE_ENABLED
        BOOLEAN     _Uncompress;        //  Set if we're converting a cvf
        DSTRING     _CvfName;           //  If uncompress, the name of the cvf
        BOOLEAN     _Compress;          //  Compress resulting filesystem
        UCHAR       _SequenceNumber     // sequence number of CVF to uncompress

#endif // DBLSPACE_ENABLED

#if defined(FE_SB) && defined(_X86_)
        // NEC98 '95.6.23
        // It use ChangeBPB1 and ChangeBPB2.
        USHORT                  _BytePerSec;
        UCHAR                   _SecPerClus;
        USHORT                  _Reserved;
        USHORT                  _SectorNum;
        USHORT                  _SecPerFat;
        ULONG                   _LargeSector;
#endif

        PPATH       _Autochk;   //  Path to Autochk
        PPATH       _Autoconv;  //  Path to Autoconv
};


#endif  // _CONVERT_