mirror of
https://github.com/microsoft/Microsoft-3D-Movie-Maker.git
synced 2024-11-25 19:52:43 +01:00
206 lines
4.1 KiB
C++
206 lines
4.1 KiB
C++
/* Copyright (c) Microsoft Corporation.
|
|
Licensed under the MIT License. */
|
|
|
|
/* Copyright (c) Microsoft Corporation.
|
|
Licensed under the MIT License. */
|
|
|
|
/***************************************************************************
|
|
Author: ShonK
|
|
Project: Kauai
|
|
Reviewed:
|
|
Copyright (c) Microsoft Corporation
|
|
|
|
File name handling.
|
|
|
|
***************************************************************************/
|
|
#ifndef FNI_H
|
|
#define FNI_H
|
|
|
|
#ifdef MAC
|
|
typedef FSSpec FSS;
|
|
#endif //MAC
|
|
|
|
|
|
enum
|
|
{
|
|
ffniNil = 0x0000,
|
|
ffniCreateDir = 0x0001,
|
|
ffniMoveToDir = 0x0002,
|
|
|
|
// for FNI::AssertValid
|
|
#ifdef DEBUG
|
|
ffniFile = 0x10000,
|
|
ffniDir = 0x20000,
|
|
ffniEmpty = 0x40000,
|
|
#endif
|
|
};
|
|
|
|
// Volume kinds:
|
|
enum
|
|
{
|
|
fvkNil = 0x0000,
|
|
fvkFloppy = 0x0001,
|
|
fvkNetwork = 0x0002,
|
|
fvkCD = 0x0004,
|
|
fvkRemovable = 0x0008,
|
|
};
|
|
|
|
|
|
typedef long FTG; // file type
|
|
|
|
const FTG ftgNil = '...,';
|
|
const FTG kftgDir = '....';
|
|
const FTG kftgTemp = MacWin('temp', 'TMP'); // the standard temp file ftg
|
|
const FTG kftgText = MacWin('TEXT', 'TXT');
|
|
|
|
extern FTG vftgTemp; // the ftg to use for temp files
|
|
|
|
|
|
/****************************************
|
|
File name class
|
|
****************************************/
|
|
typedef class FNI *PFNI;
|
|
#define FNI_PAR BASE
|
|
#define kclsFNI 'FNI'
|
|
class FNI : public FNI_PAR
|
|
{
|
|
RTCLASS_DEC
|
|
ASSERT
|
|
|
|
friend class FIL;
|
|
friend class FNE;
|
|
|
|
private:
|
|
FTG _ftg;
|
|
#ifdef MAC
|
|
long _lwDir; //the directory id
|
|
FSS _fss;
|
|
#elif defined(WIN)
|
|
STN _stnFile;
|
|
#endif //WIN
|
|
|
|
#ifdef WIN
|
|
void _SetFtgFromName(void);
|
|
long _CchExt(void);
|
|
bool _FChangeLeaf(PSTN pstn);
|
|
#endif //WIN
|
|
|
|
public:
|
|
FNI(void);
|
|
|
|
// building FNIs
|
|
#ifdef MAC
|
|
bool FGetOpen(FTG *prgftg, short cftg);
|
|
bool FGetSave(FTG ftg, PST pstPrompt, PST pstDefault);
|
|
bool FBuild(long lwVol, long lwDir, PSTN pstn, FTG ftg);
|
|
#elif defined(WIN)
|
|
bool FGetOpen(achar *prgchFilter, HWND hwndOwner);
|
|
bool FGetSave(achar *prgchFilter, HWND hwndOwner);
|
|
bool FSearchInPath(PSTN pstn, PSTN pstnEnv = pvNil);
|
|
#endif //WIN
|
|
bool FBuildFromPath(PSTN pstn, FTG ftgDef = ftgNil); //REVIEW shonk: Mac: implement
|
|
bool FGetUnique(FTG ftg);
|
|
bool FGetTemp(void);
|
|
void SetNil(void);
|
|
|
|
FTG Ftg(void);
|
|
ulong Grfvk(void); // volume kind (floppy/net/CD/etc)
|
|
bool FChangeFtg(FTG ftg);
|
|
|
|
bool FSetLeaf(PSTN pstn, FTG ftg = ftgNil);
|
|
void GetLeaf(PSTN pstn);
|
|
void GetStnPath(PSTN pstn);
|
|
|
|
bool TExists(void);
|
|
bool FDelete(void);
|
|
bool FRename(PFNI pfniNew);
|
|
bool FEqual(PFNI pfni);
|
|
|
|
bool FDir(void);
|
|
bool FSameDir(PFNI pfni);
|
|
bool FDownDir(PSTN pstn, ulong grffni);
|
|
bool FUpDir(PSTN pstn, ulong grffni);
|
|
};
|
|
|
|
#ifdef MAC
|
|
#define FGetFniOpenMacro(pfni, prgftg, cftg, prgchFilter, hwndOwner) \
|
|
(pfni)->FGetOpen(prgftg, cftg)
|
|
#define FGetFniSaveMacro(pfni, ftg, pstPrompt, pstDef, prgchFilter, hwndOwner) \
|
|
(pfni)->FGetSave(ftg, pstPrompt, pstDef)
|
|
#endif //MAC
|
|
#ifdef WIN
|
|
#define FGetFniOpenMacro(pfni, prgftg, cftg, prgchFilter, hwndOwner) \
|
|
(pfni)->FGetOpen(prgchFilter, hwndOwner)
|
|
#define FGetFniSaveMacro(pfni, ftg, pstPrompt, pstDef, prgchFilter, hwndOwner) \
|
|
(pfni)->FGetSave(prgchFilter, hwndOwner)
|
|
#endif //WIN
|
|
|
|
|
|
/****************************************
|
|
File name enumerator.
|
|
****************************************/
|
|
const long kcftgFneBase = 20;
|
|
|
|
enum
|
|
{
|
|
ffneNil = 0,
|
|
ffneRecurse = 1,
|
|
|
|
//for FNextFni
|
|
ffnePre = 0x10,
|
|
ffnePost = 0x20,
|
|
ffneSkipDir = 0x80,
|
|
};
|
|
|
|
#define FNE_PAR BASE
|
|
#define kclsFNE 'FNE'
|
|
class FNE : public FNE_PAR
|
|
{
|
|
RTCLASS_DEC
|
|
ASSERT
|
|
MARKMEM
|
|
NOCOPY(FNE)
|
|
|
|
private:
|
|
//file enumeration state
|
|
struct FES
|
|
{
|
|
#ifdef MAC
|
|
long lwVol;
|
|
long lwDir;
|
|
long iv;
|
|
#endif //MAC
|
|
#ifdef WIN
|
|
FNI fni; //directory fni
|
|
HN hn; //for enumerating files/directories
|
|
WIN32_FIND_DATA wfd;
|
|
ulong grfvol; //which volumes are available (for enumerating volumes)
|
|
long chVol; //which volume we're on (for enumerating volumes)
|
|
#endif //WIN
|
|
};
|
|
|
|
FTG _rgftg[kcftgFneBase];
|
|
FTG *_prgftg;
|
|
long _cftg;
|
|
bool _fRecurse: 1;
|
|
bool _fInited: 1;
|
|
PGL _pglfes;
|
|
FES _fesCur;
|
|
|
|
void _Free(void);
|
|
#ifdef WIN
|
|
bool _FPop(void);
|
|
#endif //WIN
|
|
|
|
public:
|
|
FNE(void);
|
|
~FNE(void);
|
|
|
|
bool FInit(FNI *pfniDir, FTG *prgftg, long cftg, ulong grffne = ffneNil);
|
|
bool FNextFni(FNI *pfni, ulong *pgrffneOut = pvNil, ulong grffneIn = ffneNil);
|
|
};
|
|
|
|
|
|
#endif //!FNI_H
|
|
|