PATH.H
//******************************************************************************************* 
// 
// Filename : Path.h 
// 
//Path APIs 
// 
// Copyright 1994 - 1998 Microsoft Corporation. All rights reserved 
// 
//******************************************************************************************* 
 
 
#ifndef _PATH_H_ 
#define _PATH_H_ 
 
#ifdef __cplusplus 
extern "C" { 
#endif 
 
 
 
extern const TCHAR c_szStarDotStar[]; 
extern const TCHAR c_szStar[]; 
extern const TCHAR c_szSlash[]; 
extern const TCHAR c_szNULL[]; 
 
#define DRIVEID(path)   ((path[0] - 'A') & 31) 
#define ARRAYSIZE(a)    (sizeof(a)/sizeof(a[0])) 
#define SIZEOF(v)       sizeof(v) 
 
 
BOOL   PathIsDotOrDotDot(LPTSTR pszDir); 
BOOL   PathStripToRoot(LPTSTR pszRoot); 
LPTSTR PathAddBackslash(LPTSTR lpszPath); 
LPTSTR PathRemoveBackslash(LPTSTR lpszPath); 
void   PathRemoveBlanks(LPTSTR lpszString); 
BOOL   PathRemoveFileSpec(LPTSTR lpszPath); 
LPTSTR PathFindFileName(LPCTSTR pPath); 
BOOL   PathIsRoot(LPCTSTR lpszPath); 
BOOL   PathIsRelative(LPCTSTR lpszPath); 
BOOL   PathIsUNC(LPCTSTR lpsz); 
BOOL   PathIsDirectory(LPCTSTR lpszPath); 
BOOL   PathIsExe(LPCTSTR lpszPath); 
int    PathGetDriveNumber(LPCTSTR lpszPath); 
LPTSTR PathCombine(LPTSTR szDest, LPCTSTR lpszDir, LPCTSTR lpszFile); 
BOOL   PathAppend(LPTSTR pPath, LPCTSTR pMore); 
LPTSTR PathBuildRoot(LPTSTR szRoot, int iDrive); 
int    PathCommonPrefix(LPCTSTR pszFile1, LPCTSTR pszFile2, LPTSTR achPath); 
LPTSTR PathFindExtension(LPCTSTR pszPath); 
BOOL   PathFileExists(LPCTSTR lpszPath); 
BOOL   PathMatchSpec(LPCTSTR pszFile, LPCTSTR pszSpec); 
BOOL   PathMakeUniqueName(LPTSTR pszUniqueName, UINT cchMax, LPCTSTR pszTemplate, LPCTSTR pszLongPlate, LPCTSTR pszDir); 
LPTSTR PathGetArgs(LPCTSTR pszPath); 
BOOL   PathGetShortName(LPCTSTR lpszLongName, LPTSTR lpszShortName, UINT cbShortName); 
void   PathQuoteSpaces(LPTSTR lpsz); 
void   PathUnquoteSpaces(LPTSTR lpsz); 
BOOL   PathDirectoryExists(LPCTSTR lpszDir); 
 
#define PQD_NOSTRIPDOTS 0x00000001 
void   PathQualifyDef(LPTSTR psz, LPCTSTR szDefDir, DWORD dwFlags); 
void   PathQualify(LPTSTR lpsz); 
 
 
#define PRF_VERIFYEXISTS            0x0001 
#define PRF_TRYPROGRAMEXTENSIONS    (0x0002 | PRF_VERIFYEXISTS) 
#define PRF_FIRSTDIRDEF             0x0004 
#define PRF_DONTFINDLNK             0x0008      // if PRF_TRYPROGRAMEXTENSIONS is specified 
 
int    PathResolve(LPTSTR lpszPath, LPCTSTR FAR dirs[], UINT fFlags); 
 
 
LPTSTR PathGetNextComponent(LPCTSTR lpszPath, LPTSTR lpszComponent); 
LPTSTR PathFindNextComponent(LPCTSTR lpszPath); 
BOOL   PathIsSameRoot(LPCTSTR pszPath1, LPCTSTR pszPath2); 
 
// 
//  Return codes from PathCleanupSpec.  Negative return values are 
//  unrecoverable errors 
// 
#define PCS_FATAL           0x80000000 
#define PCS_REPLACEDCHAR    0x00000001 
#define PCS_REMOVEDCHAR     0x00000002 
#define PCS_TRUNCATED       0x00000004 
#define PCS_PATHTOOLONG     0x00000008  // Always combined with FATAL 
 
int    PathCleanupSpec(LPCTSTR pszDir, LPTSTR pszSpec); 
 
BOOL   PathCompactPath(HDC hDC, LPTSTR lpszPath, UINT dx); 
void   PathSetDlgItemPath(HWND hDlg, int id, LPCTSTR pszPath); 
 
#define GCT_INVALID             0x0000 
#define GCT_LFNCHAR             0x0001 
#define GCT_SHORTCHAR           0x0002 
#define GCT_WILD                0x0004 
#define GCT_SEPERATOR           0x0008 
UINT PathGetCharType(TCHAR ch); 
 
void PathRemoveArgs(LPTSTR pszPath); 
BOOL PathMakePretty(LPTSTR lpPath); 
 
BOOL PathIsFileSpec(LPCTSTR lpszPath); 
BOOL PathIsLink(LPCTSTR szFile); 
 
BOOL PathRenameExtension(LPTSTR pszPath, LPCTSTR pszExt); 
 
int DriveType(int iDrive); 
 
//-------- drive type identification -------------- 
// iDrive      drive index (0=A, 1=B, ...) 
// 
#define DRIVE_CDROM     5           // extended DriveType() types 
#define DRIVE_RAMDRIVE  6 
 
#define DRIVE_TYPE      0x000F      // type masek 
#define DRIVE_SLOW      0x0010      // drive is on a slow link 
#define DRIVE_LFN       0x0020      // drive supports LFNs 
#define DRIVE_AUTORUN   0x0040      // drive has AutoRun.inf in root. 
#define DRIVE_AUDIOCD   0x0080      // drive is a AudioCD 
#define DRIVE_AUTOOPEN  0x0100      // should *always* auto open on insert 
#define DRIVE_NETUNAVAIL 0x0200     // Network drive that is not available 
#define DRIVE_SHELLOPEN  0x0400     // should auto open on insert, if shell has focus 
 
#define DriveTypeFlags(iDrive)      DriveType('A' + (iDrive)) 
#define DriveIsSlow(iDrive)         (DriveTypeFlags(iDrive) & DRIVE_SLOW) 
#define DriveIsLFN(iDrive)          (DriveTypeFlags(iDrive) & DRIVE_LFN) 
#define DriveIsAutoRun(iDrive)      (DriveTypeFlags(iDrive) & DRIVE_AUTORUN) 
#define DriveIsAutoOpen(iDrive)     (DriveTypeFlags(iDrive) & DRIVE_AUTOOPEN) 
#define DriveIsShellOpen(iDrive)    (DriveTypeFlags(iDrive) & DRIVE_SHELLOPEN) 
#define DriveIsAudioCD(iDrive)      (DriveTypeFlags(iDrive) & DRIVE_AUDIOCD) 
#define DriveIsNetUnAvail(iDrive)   (DriveTypeFlags(iDrive) & DRIVE_NETUNAVAIL) 
 
#define IsCDRomDrive(iDrive)        (DriveType(iDrive) == DRIVE_CDROM) 
#define IsRamDrive(iDrive)          (DriveType(iDrive) == DRIVE_RAMDRIVE) 
#define IsRemovableDrive(iDrive)    (DriveType(iDrive) == DRIVE_REMOVABLE) 
#define IsRemoteDrive(iDrive)       (DriveType(iDrive) == DRIVE_REMOTE) 
 
 
#ifdef __cplusplus 
} 
#endif 
 
#endif // _PATH_H_