You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
219 lines
5.8 KiB
219 lines
5.8 KiB
/*==LICENSE==* |
|
|
|
CyanWorlds.com Engine - MMOG client, server and tools |
|
Copyright (C) 2011 Cyan Worlds, Inc. |
|
|
|
This program is free software: you can redistribute it and/or modify |
|
it under the terms of the GNU General Public License as published by |
|
the Free Software Foundation, either version 3 of the License, or |
|
(at your option) any later version. |
|
|
|
This program 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 General Public License for more details. |
|
|
|
You should have received a copy of the GNU General Public License |
|
along with this program. If not, see <http://www.gnu.org/licenses/>. |
|
|
|
Additional permissions under GNU GPL version 3 section 7 |
|
|
|
If you modify this Program, or any covered work, by linking or |
|
combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, |
|
NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent |
|
JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK |
|
(or a modified version of those libraries), |
|
containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, |
|
PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG |
|
JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the |
|
licensors of this Program grant you additional |
|
permission to convey the resulting work. Corresponding Source for a |
|
non-source form of such a combination shall include the source code for |
|
the parts of OpenSSL and IJG JPEG Library used as well as that of the covered |
|
work. |
|
|
|
You can contact Cyan Worlds, Inc. by email legal@cyan.com |
|
or by snail mail at: |
|
Cyan Worlds, Inc. |
|
14617 N Newport Hwy |
|
Mead, WA 99021 |
|
|
|
*==LICENSE==*/ |
|
/***************************************************************************** |
|
* |
|
* $/Plasma20/Sources/Plasma/NucleusLib/pnUtils/Private/pnUtPath.h |
|
* |
|
***/ |
|
|
|
#ifndef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTPATH_H |
|
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNUTILS_PRIVATE_PNUTPATH_H |
|
|
|
#include "Pch.h" |
|
#include "pnUtArray.h" |
|
|
|
/***************************************************************************** |
|
* |
|
* Path definitions |
|
* |
|
***/ |
|
|
|
#ifndef MAX_PATH |
|
#define MAX_PATH 260 |
|
#endif |
|
|
|
#define MAX_DRIVE 256 |
|
#define MAX_DIR 256 |
|
#define MAX_FNAME 256 |
|
#define MAX_EXT 256 |
|
|
|
|
|
|
|
const unsigned kPathFlagFile = 1<<0; |
|
const unsigned kPathFlagDirectory = 1<<1; |
|
const unsigned kPathFlagHidden = 1<<2; |
|
const unsigned kPathFlagSystem = 1<<3; |
|
const unsigned kPathFlagRecurse = 1<<4; // also set if "**" used in filespec |
|
|
|
struct PathFind { |
|
unsigned flags; |
|
uint64_t fileLength; |
|
uint64_t lastWriteTime; |
|
wchar_t name[MAX_PATH]; |
|
}; |
|
|
|
|
|
/***************************************************************************** |
|
* |
|
* Path "get" functions |
|
* |
|
***/ |
|
|
|
void PathFindFiles ( |
|
ARRAY(PathFind) * paths, |
|
const wchar_t fileSpec[], |
|
unsigned pathFlags |
|
); |
|
void PathGetProgramName ( |
|
wchar_t * dst, |
|
unsigned dstChars |
|
); |
|
|
|
bool PathDoesFileExist ( |
|
const wchar_t fileName[] |
|
); |
|
|
|
|
|
/***************************************************************************** |
|
* |
|
* Path building functions |
|
* |
|
***/ |
|
|
|
void PathSplitPath ( |
|
const wchar_t path[], |
|
wchar_t * drive, |
|
wchar_t * dir, |
|
wchar_t * fname, |
|
wchar_t * ext |
|
); |
|
|
|
void PathMakePath ( |
|
wchar_t * path, |
|
unsigned chars, |
|
const wchar_t drive[], |
|
const wchar_t dir[], |
|
const wchar_t fname[], |
|
const wchar_t ext[] |
|
); |
|
|
|
// c:\dir1 + dir2\file.txt => c:\dir1\dir2\file.txt |
|
void PathAddFilename ( |
|
wchar_t * dst, |
|
const wchar_t src[], |
|
const wchar_t fname[], |
|
unsigned dstChars |
|
); |
|
|
|
// c:\dir1\dir2\file.txt => c:\dir1\dir2\ * note trailing backslash |
|
void PathRemoveFilename ( |
|
wchar_t * dst, |
|
const wchar_t src[], |
|
unsigned dstChars |
|
); |
|
|
|
|
|
/***************************************************************************** |
|
* |
|
* Directory functions |
|
* |
|
***/ |
|
|
|
// Create directory |
|
enum EPathCreateDirError { |
|
kPathCreateDirSuccess, |
|
kPathCreateDirErrInvalidPath, |
|
kPathCreateDirErrAccessDenied, |
|
kPathCreateDirErrFileWithSameName, |
|
kPathCreateDirErrDirExists, // Directory exists and kPathCreateDirFlagCreateNew was specified |
|
}; |
|
|
|
// Setting this flag causes the function to create the entire directory |
|
// tree from top to bottom. Clearing this flag causes the function to |
|
// create only the last entry in the path. |
|
const unsigned kPathCreateDirFlagEntireTree = 1<<0; |
|
|
|
// Setting this flag causes the function to create the last entry in the path |
|
// ONLY if it doesn't already exist. If it does exist the function will return |
|
// kPathCreateDirErrDirExistes. |
|
const unsigned kPathCreateDirFlagCreateNew = 1<<1; |
|
|
|
|
|
EPathCreateDirError PathCreateDirectory ( |
|
const wchar_t path[], |
|
unsigned flags |
|
); |
|
|
|
|
|
|
|
// Get directory |
|
void PathGetProgramDirectory ( |
|
wchar_t * dst, |
|
unsigned dstChars |
|
); |
|
|
|
|
|
// Product and user-specific common directory locations |
|
void PathGetUserDirectory ( |
|
wchar_t * dst, |
|
unsigned dstChars |
|
); |
|
void PathGetLogDirectory ( |
|
wchar_t * dst, |
|
unsigned dstChars |
|
); |
|
void PathGetInitDirectory ( |
|
wchar_t * dst, |
|
unsigned dstChars |
|
); |
|
|
|
|
|
/***************************************************************************** |
|
* |
|
* Email formatting functions |
|
* |
|
***/ |
|
|
|
// you may send nil for any fields you don't care about |
|
void PathSplitEmail ( |
|
const wchar_t emailAddr[], |
|
wchar_t * user, |
|
unsigned userChars, |
|
wchar_t * domain, |
|
unsigned domainChars, |
|
wchar_t * tld, |
|
unsigned tldChars, |
|
wchar_t * subDomains, // (wchar_t *)&subs --> wchar_t subs[16][256]; |
|
unsigned subDomainChars, // arrsize(subs[0]) --> 256 |
|
unsigned subDomainCount // arrsize(subs) --> 16 |
|
); |
|
#endif
|
|
|