290 lines
4.1 KiB
C++
290 lines
4.1 KiB
C++
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1990 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
Replace
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module contains the definition for the REPLACE class, which
|
|||
|
implements the DOS5-compatible Replace utility.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Ramon Juan San Andres (ramonsa) 01-May-1990
|
|||
|
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
|
|||
|
#if !defined( _REPLACE_ )
|
|||
|
|
|||
|
#define _REPLACE_
|
|||
|
|
|||
|
|
|||
|
#include "object.hxx"
|
|||
|
#include "keyboard.hxx"
|
|||
|
#include "program.hxx"
|
|||
|
|
|||
|
//
|
|||
|
// Exit codes
|
|||
|
//
|
|||
|
#define EXIT_NORMAL 0
|
|||
|
#define EXIT_FILE_NOT_FOUND 2
|
|||
|
#define EXIT_PATH_NOT_FOUND 3
|
|||
|
#define EXIT_ACCESS_DENIED 5
|
|||
|
#define EXIT_NO_MEMORY 8
|
|||
|
#define EXIT_COMMAND_LINE_ERROR 11
|
|||
|
#define EXIT_INVALID_DRIVE 15
|
|||
|
|
|||
|
|
|||
|
//
|
|||
|
// Forward references
|
|||
|
//
|
|||
|
DECLARE_CLASS( ARRAY );
|
|||
|
DECLARE_CLASS( FSN_DIRECTORY );
|
|||
|
DECLARE_CLASS( FSNODE );
|
|||
|
DECLARE_CLASS( KEYBOARD );
|
|||
|
DECLARE_CLSSS( PATH );
|
|||
|
DECLARE_CLASS( WSTRING );
|
|||
|
|
|||
|
DECLARE_CLASS( REPLACE );
|
|||
|
|
|||
|
class REPLACE : public PROGRAM {
|
|||
|
|
|||
|
public:
|
|||
|
|
|||
|
DECLARE_CONSTRUCTOR( REPLACE );
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
~REPLACE (
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
Initialize (
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
DoReplace (
|
|||
|
);
|
|||
|
|
|||
|
|
|||
|
|
|||
|
private:
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
AbortIfCtrlC(
|
|||
|
VOID
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
AddFiles (
|
|||
|
IN OUT PFSN_DIRECTORY DestinationDirectory
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
CheckArgumentConsistency (
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
CopyTheFile (
|
|||
|
IN PCPATH SrcPath,
|
|||
|
IN PCPATH DstPath
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
CtrlCHandler (
|
|||
|
IN ULONG CtrlType
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
DeallocateThings (
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
DisplayMessageAndExit (
|
|||
|
IN MSGID MsgId,
|
|||
|
IN PCWSTRING String,
|
|||
|
IN ULONG ExitCode
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
ExitWithError(
|
|||
|
IN DWORD ErrorCode
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
GetArgumentsCmd(
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
GetDirectoryAndPattern(
|
|||
|
IN PPATH Path,
|
|||
|
OUT PFSN_DIRECTORY *Directory,
|
|||
|
OUT PWSTRING *Pattern
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
GetDirectory(
|
|||
|
IN PCPATH Path,
|
|||
|
OUT PFSN_DIRECTORY *Directory
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
PARRAY
|
|||
|
GetFileArray(
|
|||
|
IN PFSN_DIRECTORY Directory,
|
|||
|
IN PWSTRING Pattern
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
InitializeThings (
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
ParseArguments(
|
|||
|
IN PWSTRING CmdLine,
|
|||
|
OUT PARRAY ArgArray
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
Prompt (
|
|||
|
IN MSGID MessageId,
|
|||
|
IN PCPATH Path
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
PWSTRING
|
|||
|
QueryMessageString (
|
|||
|
IN MSGID MsgId
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
BOOLEAN
|
|||
|
ReplaceFiles (
|
|||
|
IN OUT PFSN_DIRECTORY DestinationDirectory
|
|||
|
);
|
|||
|
|
|||
|
STATIC
|
|||
|
BOOLEAN
|
|||
|
Replacer (
|
|||
|
IN PVOID This,
|
|||
|
IN OUT PFSNODE DirectoryNode,
|
|||
|
IN PPATH DummyPath
|
|||
|
);
|
|||
|
|
|||
|
NONVIRTUAL
|
|||
|
VOID
|
|||
|
SetArguments(
|
|||
|
);
|
|||
|
//
|
|||
|
// Command-line things
|
|||
|
//
|
|||
|
PPATH _SourcePath;
|
|||
|
PPATH _DestinationPath;
|
|||
|
BOOLEAN _AddSwitch;
|
|||
|
BOOLEAN _PromptSwitch;
|
|||
|
BOOLEAN _ReadOnlySwitch;
|
|||
|
BOOLEAN _SubdirSwitch;
|
|||
|
BOOLEAN _CompareTimeSwitch;
|
|||
|
BOOLEAN _WaitSwitch;
|
|||
|
|
|||
|
//
|
|||
|
// Counter of Added/Replaced files
|
|||
|
//
|
|||
|
ULONG _FilesAdded;
|
|||
|
ULONG _FilesReplaced;
|
|||
|
|
|||
|
//
|
|||
|
// Source directory and corresponding filename pattern
|
|||
|
//
|
|||
|
PFSN_DIRECTORY _SourceDirectory;
|
|||
|
PWSTRING _Pattern;
|
|||
|
|
|||
|
//
|
|||
|
// Array of files in source directory
|
|||
|
//
|
|||
|
PARRAY _FilesInSrc;
|
|||
|
|
|||
|
//
|
|||
|
// Buffers to hold strings in PSTR form
|
|||
|
//
|
|||
|
LPWSTR _PathString1;
|
|||
|
ULONG _PathString1Size;
|
|||
|
LPWSTR _PathString2;
|
|||
|
ULONG _PathString2Size;
|
|||
|
|
|||
|
//
|
|||
|
// The keyboard
|
|||
|
//
|
|||
|
PKEYBOARD _Keyboard;
|
|||
|
|
|||
|
DSTRING _AddPattern;
|
|||
|
DSTRING _PromptPattern;
|
|||
|
DSTRING _ReadOnlyPattern;
|
|||
|
DSTRING _SubdirPattern;
|
|||
|
DSTRING _CompareTimePattern;
|
|||
|
DSTRING _WaitPattern;
|
|||
|
DSTRING _HelpPattern;
|
|||
|
|
|||
|
DSTRING _Switches;
|
|||
|
DSTRING _MultipleSwitch;
|
|||
|
|
|||
|
|
|||
|
};
|
|||
|
|
|||
|
INLINE
|
|||
|
VOID
|
|||
|
REPLACE::AbortIfCtrlC (
|
|||
|
VOID
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
Aborts the program if Ctrl-C was hit.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
Notes:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
if ( _Keyboard->GotABreak() ) {
|
|||
|
exit( EXIT_PATH_NOT_FOUND );
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
#endif // _REPLACE_
|