145 #ifdef INCLUDE_CMD_DIR 242 return ( pszPath[0] ==
_T(
'.') &&
244 (pszPath[1] ==
_T(
'.') && (pszPath[2] == 0 ))
254 return ((
Length == 1 && pPath[0] ==
_T(
'.')) ||
255 (
Length == 2 && pPath[0] ==
_T(
'.') && pPath[1] ==
_T(
'.')));
285 cCurSwitch =
_T(
' ');
292 bOrderByNoPar =
FALSE;
304 if (cCurSwitch ==
_T(
'/'))
309 bNegative = (*
Line ==
_T(
'-'));
315 if ((cCurUChar ==
_T(
'A')) ||(cCurUChar ==
_T(
'T')) || (cCurUChar ==
_T(
'O')))
331 bOrderByNoPar = !bNegative;
339 cCurSwitch = cCurUChar;
347 else if (cCurUChar ==
_T(
'L'))
349 else if (cCurUChar ==
_T(
'B'))
351 else if (cCurUChar ==
_T(
'C'))
353 else if (cCurUChar ==
_T(
'W'))
355 else if (cCurUChar ==
_T(
'D'))
357 else if (cCurUChar ==
_T(
'N'))
359 else if (cCurUChar ==
_T(
'P'))
360 lpFlags->
bPause = ! bNegative;
361 else if (cCurUChar ==
_T(
'Q'))
362 lpFlags->
bUser = ! bNegative;
363 else if (cCurUChar ==
_T(
'S'))
365 else if (cCurUChar ==
_T(
'X'))
367 else if (cCurUChar ==
_T(
'R'))
369 else if (cCurChar ==
_T(
'4'))
370 lpFlags->
b4Digit = ! bNegative;
371 else if (cCurChar ==
_T(
'?'))
389 cCurSwitch =
_T(
' ');
391 else if (cCurSwitch ==
_T(
' '))
396 if (cCurChar ==
_T(
'/'))
397 cCurSwitch =
_T(
'/');
409 bIntoQuotes ^= (*
Line ==
_T(
'"'));
419 temp[ptrEnd - ptrStart] =
_T(
'\0');
441 cCurSwitch =
_T(
' ');
448 if (cCurChar ==
_T(
'-'))
450 else if (cCurUChar ==
_T(
'D'))
458 else if (cCurUChar ==
_T(
'R'))
466 else if (cCurUChar ==
_T(
'H'))
474 else if (cCurUChar ==
_T(
'A'))
482 else if (cCurUChar ==
_T(
'S'))
497 if (cCurUChar ==
_T(
'C'))
499 else if (cCurUChar ==
_T(
'A'))
501 else if (cCurUChar ==
_T(
'W'))
511 bOrderByNoPar =
FALSE;
513 if (cCurChar ==
_T(
'-'))
515 else if (cCurUChar ==
_T(
'N'))
521 else if (cCurUChar ==
_T(
'S'))
527 else if (cCurUChar ==
_T(
'G'))
533 else if (cCurUChar ==
_T(
'E'))
539 else if (cCurUChar ==
_T(
'D'))
555 if ((cCurChar !=
_T(
'-')) && bPNegative)
619 if (szVolName[0] !=
_T(
'\0'))
743 "GetDiskFreeSpaceExW");
745 "GetDiskFreeSpaceExA");
747 if (pGetFreeDiskSpaceEx !=
NULL)
749 if (pGetFreeDiskSpaceEx(lpRoot, lpFreeSpace, &TotalNumberOfBytes, &TotalNumberOfFreeBytes) !=
FALSE)
760 lpFreeSpace->
QuadPart = dwSecPerCl * dwBytPerSec * dwFreeCl;
782 if (!(ulFiles + ulDirs))
800 DirPrintf(lpFlags, szMsg, ulFiles, szBuffer);
809 DirPrintf(lpFlags, szMsg, ulFiles, szBuffer);
818 DirPrintf(lpFlags, szMsg, ulDirs, szBuffer);
833 return (lastdot !=
NULL ? lastdot + 1 : NoExt);
861 *(
dest + iLen) =
_T(
'\0');
880 TCHAR szShortName[15];
912 szShortName[0] =
_T(
'\0');
914 _stprintf(szShortName,
_T(
" %-12s"), ptrFiles[
i]->stFindInfo.cAlternateFileName);
926 ptrFiles[
i]->stFindInfo.cFileName);
929 ptrCurStream = ptrFiles[
i]->
ptrHead;
941 ptrFiles[
i]->stFindInfo.cFileName,
943 ptrCurStream = ptrCurStream->
ptrNext;
971 for (
i = 0;
i < dwCount;
i++)
976 if ((
_tcslen(ptrFiles[
i]->stFindInfo.cFileName) + 2) > iLongestName)
977 iLongestName =
_tcslen(ptrFiles[
i]->stFindInfo.cFileName) + 2;
981 if (
_tcslen(ptrFiles[
i]->stFindInfo.cFileName) > iLongestName)
982 iLongestName =
_tcslen(ptrFiles[
i]->stFindInfo.cFileName);
988 iColumns = (
USHORT)(iScreenWidth / iLongestName);
991 if (((iLongestName * iColumns) + iColumns) >= (
UINT)iScreenWidth)
995 if (!iColumns) iColumns = 1;
998 iLines = (
USHORT)((dwCount + iColumns - 1) / iColumns);
1002 for (
j = 0;
j < iColumns;
j++)
1012 temp = (
i * iColumns) +
j;
1015 if (
temp >= dwCount)
break;
1018 _stprintf(szTempFname,
_T(
"[%s]"), ptrFiles[
temp]->stFindInfo.cFileName);
1020 _stprintf(szTempFname,
_T(
"%s"), ptrFiles[
temp]->stFindInfo.cFileName);
1022 DirPrintf(lpFlags,
_T(
"%-*s"), iLongestName + 1, szTempFname);
1053 if (*ptrFiles[
i]->stFindInfo.cAlternateFileName )
1057 _tcscpy(szExt,
getExt( ptrFiles[
i]->stFindInfo.cAlternateFileName));
1119 DirPrintf(lpFlags,
_T(
"%s\\%s\n"), szCurPath, ptrFiles[
i]->stFindInfo.cFileName);
1124 DirPrintf(lpFlags,
_T(
"%s\n"), ptrFiles[
i]->stFindInfo.cFileName);
1146 if (
_tcslen(szTemp) == 2 && szTemp[1] ==
_T(
':'))
1202 for (
i = 0;
i < lpFlags->
stOrderBy.sCriteriaCount;
i++)
1280 if (iComp != 0)
break;
1303 int First =
i, Last =
j, Temp;
1310 lpTemp = ptrArray[
i];
1311 ptrArray[
i]= ptrArray[
j];
1312 ptrArray[
j] = lpTemp;
1336 while (ptrStartNode)
1338 ptrNextNode = ptrStartNode->
ptrNext;
1346 ptrStartNode = ptrNextNode;
1376 WIN32_FIND_STREAM_DATA wfsdStreamInfo;
1382 ptrStartNode =
NULL;
1391 if (ptrStartNode ==
NULL)
1393 WARN(
"Cannot allocate memory for ptrStartNode!\n");
1397 ptrNextNode = ptrStartNode;
1405 if ((wfdFileInfo.dwFileAttributes & lpFlags->
stAttribs.dwAttribMask) ==
1411 WARN(
"Cannot allocate memory for ptrNextNode->ptrNext!\n");
1425 _tcslwr(ptrNextNode->
ptrNext->stInfo.stFindInfo.cAlternateFileName);
1435 if (!pFindFirstStreamW)
1442 if (pFindFirstStreamW && pFindNextStreamW)
1444 hStreams = pFindFirstStreamW(wfdFileInfo.cFileName, FindStreamInfoStandard, &wfsdStreamInfo, 0);
1449 ERR(
"FindFirstStreamW not supported!\n");
1455 ptrCurNode = &ptrNextNode->
ptrNext->stInfo.ptrHead;
1456 while (pFindNextStreamW(hStreams, &wfsdStreamInfo))
1459 if (*ptrCurNode ==
NULL)
1461 WARN(
"Cannot allocate memory for *ptrCurNode!\n");
1468 memcpy(&(*ptrCurNode)->stStreamInfo, &wfsdStreamInfo,
1469 sizeof(WIN32_FIND_STREAM_DATA));
1474 _tcslwr((*ptrCurNode)->stStreamInfo.cStreamName);
1477 ptrCurNode = &(*ptrCurNode)->
ptrNext;
1486 ptrNextNode = ptrNextNode->
ptrNext;
1499 u64Temp.
HighPart = wfdFileInfo.nFileSizeHigh;
1500 u64Temp.
LowPart = wfdFileInfo.nFileSizeLow;
1513 if (ptrFileArray ==
NULL)
1515 WARN(
"Cannot allocate memory for ptrFileArray!\n");
1524 ptrNextNode = ptrStartNode;
1528 ptrFileArray[dwCount] = &ptrNextNode->
ptrNext->stInfo;
1529 ptrNextNode = ptrNextNode->
ptrNext;
1534 if (lpFlags->
stOrderBy.sCriteriaCount > 0)
1535 QsortFiles(ptrFileArray, 0, dwCount-1, lpFlags);
1538 cPathSep = pszFilePart[-1];
1539 pszFilePart[-1] =
_T(
'\0');
1551 pszFilePart[-1] = cPathSep;
1575 memcpy(szSubPath, szFullPath, (pszFilePart - szFullPath) *
sizeof(
TCHAR));
1576 _tcscpy(&szSubPath[pszFilePart - szFullPath],
_T(
"*.*"));
1588 memcpy(szSubPath, szFullPath, (pszFilePart - szFullPath) *
sizeof(
TCHAR));
1589 _tcscpy(&szSubPath[pszFilePart - szFullPath], wfdFileInfo.cFileName);
1591 pszSubFilePart = &szSubPath[
_tcslen(szSubPath)];
1592 _tcscat(pszSubFilePart, pszFilePart);
1595 if (
DirList(szSubPath, pszSubFilePart, lpFlags) != 0)
1651 _tcscpy(szNewPattern, pszPattern);
1652 pszPattern = szNewPattern;
1654 TRACE(
"Original pszPattern: %S\n", pszPattern);
1657 pNextDir = pszPattern;
1658 while ((pNextDir =
_tcschr(pNextDir,
_T(
'/'))))
1659 *pNextDir++ =
_T(
'\\');
1671 pNextDir = pszPattern;
1682 if ((pNextDir - pCurDir == 0) ||
IsDotDirectoryN(pCurDir, pNextDir - pCurDir))
1690 for (
ptr = pCurDir;
ptr < pNextDir; ++
ptr)
1692 if (*
ptr !=
_T(
'.'))
1708 if (
ptr[0] ==
_T(
'.') && (
ptr[1] ==
_T(
'\\') ||
ptr[1] == 0))
1713 else if (
ptr[0] ==
_T(
'.') &&
ptr[1] ==
_T(
'.') && (
ptr[2] ==
_T(
'\\') ||
ptr[2] == 0))
1735 TRACE(
"New pszPattern: %S\n", pszPattern);
1740 _tcscpy(pszFullPath, pszPattern);
1741 pszPatternPart =
NULL;
1744 TRACE(
"pszFullPath (1): %S\n", pszFullPath);
1745 TRACE(
"pszPatternPart (1): %S\n", pszPatternPart);
1762 pNextDir = pszPattern;
1773 if (
_istalpha(pNextDir[0]) && pNextDir[1] ==
_T(
':') && pNextDir[2] !=
_T(
'\\'))
1780 else if (pszPatternPart ==
NULL)
1787 pszPatternPart = &pszFullPath[
_tcslen(pszFullPath)];
1788 _tcscpy(pszPatternPart, pNextDir);
1789 pszPatternPart =
NULL;
1792 else if (
_tcscmp(pNextDir, pszPatternPart) != 0)
1799 TRACE(
"pszPatternPart: %S is DIFFERENT from file criterion: %S\n", pszPatternPart, pNextDir);
1805 _tcscpy(pszPatternPart, pNextDir);
1809 TRACE(
"pszFullPath (2): %S\n", pszFullPath);
1817 pszPatternPart = &pszFullPath[
_tcslen(pszFullPath)];
1818 if (pszPatternPart[-1] !=
_T(
'\\'))
1819 *pszPatternPart++ =
_T(
'\\');
1823 TRACE(
"pszPatternPart (2): %S\n", pszPatternPart);
1825 if (ppszPatternPart)
1826 *ppszPatternPart = pszPatternPart;
1896 prev_volume[0] =
_T(
'\0');
1902 for (loop = 0; loop < (
UINT)entries; loop++)
1938 ChangedVolume =
TRUE;
1943 if (!
_tcscmp(szFullPath, prev_volume))
1944 ChangedVolume =
FALSE;
1946 _tcscpy(prev_volume, szFullPath);
1953 cPathSep = pszFilePart[-1];
1954 pszFilePart[-1] =
_T(
'\0');
1961 pszFilePart[-1] = cPathSep;
1964 if (
DirList(szFullPath, pszFilePart, &stFlags) != 0)
1971 pszFilePart[-1] =
_T(
'\0');
FORCEINLINE BOOL IsDotDirectory(IN LPCTSTR pszPath)
static VOID DirNodeCleanup(PDIRFINDLISTNODE ptrStartNode, PDWORD pdwCount)
static const WCHAR szName[]
#define memmove(s1, s2, n)
_In_ ULONG _In_ ULONG _In_ ULONG Length
struct _DirSwitchesFlags::@62 stOrderBy
INT CommandDir(LPTSTR rest)
static ULONGLONG recurse_bytes
INT FormatDate(TCHAR *lpDate, LPSYSTEMTIME dt, BOOL b4Digit)
enum ETimeField eTimeField
struct _DirSwitchesFlags DIRSWITCHFLAGS
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
#define FILE_ATTRIBUTE_SYSTEM
_TCHAR * _tcsncpy(_TCHAR *dst, const _TCHAR *src, size_t n)
static BOOL CompareFiles(PDIRFINDINFO lpFile1, PDIRFINDINFO lpFile2, LPDIRSWITCHFLAGS lpFlags)
struct _DirSwitchesFlags::@63 stTimeField
static LPTSTR getName(const TCHAR *file, TCHAR *dest)
struct _DIRFINDINFO * PDIRFINDINFO
#define INVALID_HANDLE_VALUE
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
VOID ConOutResPaging(BOOL StartPaging, UINT resID)
BOOL WINAPI FileTimeToLocalFileTime(IN CONST FILETIME *lpFileTime, OUT LPFILETIME lpLocalFileTime)
static VOID StripQuotes(LPSTR in)
struct _DIRFINDLISTNODE DIRFINDLISTNODE
GLenum const GLfloat * params
TCHAR * getExt(const TCHAR *file)
static INT DirList(IN OUT LPTSTR szFullPath, IN LPTSTR pszFilePart, LPDIRSWITCHFLAGS lpFlags)
struct _DirSwitchesFlags::@61 stAttribs
FORCEINLINE BOOL IsDotDirectoryN(IN const TCHAR *pPath, IN SIZE_T Length)
size_t __cdecl _tcslen(const _TCHAR *str)
static VOID freep(LPSTR *p)
static VOID DirPrintNewList(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
static BOOL PrintDirectoryHeader(LPCTSTR szPath, LPDIRSWITCHFLAGS lpFlags)
INT FormatTime(TCHAR *lpTime, LPSYSTEMTIME dt)
struct _ULARGE_INTEGER * PULARGE_INTEGER
_TCHAR * _tcschr(const _TCHAR *s, _XINT c)
#define FILE_ATTRIBUTE_REPARSE_POINT
_In_ LPCSTR _In_opt_ LPCSTR _In_ DWORD nBufferLength
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
#define FILE_ATTRIBUTE_DIRECTORY
VOID error_invalid_switch(TCHAR ch)
BOOL WINAPI FileTimeToSystemTime(IN CONST FILETIME *lpFileTime, OUT LPSYSTEMTIME lpSystemTime)
INT ConvertULargeInteger(ULONGLONG num, LPTSTR des, UINT len, BOOL bPutSeparator)
struct _DIRFINDINFO DIRFINDINFO
static ULONG recurse_dir_cnt
static VOID ResolvePattern(IN LPTSTR pszPattern, IN DWORD nBufferLength, OUT LPTSTR pszFullPath, OUT LPTSTR *ppszPatternPart OPTIONAL)
static VOID DirPrintBareList(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
INT ConPrintfV(IN PCON_STREAM Stream, IN PCWSTR szStr, IN va_list args)
WIN32_FIND_DATA stFindInfo
#define FILE_ATTRIBUTE_READONLY
unsigned __int3264 UINT_PTR
VOID error_file_not_found(VOID)
static VOID DirPrintOldList(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
#define FILE_ATTRIBUTE_ARCHIVE
VOID error_parameter_format(TCHAR ch)
static ULONG recurse_file_cnt
VOID GetScreenSize(PSHORT maxx, PSHORT maxy)
#define memcpy(s1, s2, n)
static VOID DirHelp(VOID)
BOOL __cdecl ConOutPrintfPaging(BOOL StartPaging, LPTSTR szFormat,...)
enum EOrderBy eCriteria[3]
static BOOL DirPrintf(LPDIRSWITCHFLAGS lpFlags, LPTSTR szFormat,...)
BOOL(WINAPI * PGETFREEDISKSPACEEX)(LPCTSTR, PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER)
#define GetVolumeInformation
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
static VOID DirPrintFiles(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
PDIRFINDSTREAMNODE ptrHead
struct _DIRFINDSTREAMNODE DIRFINDSTREAMNODE
static VOID DirPrintWideList(PDIRFINDINFO ptrFiles[], DWORD dwCount, LPCTSTR szCurPath, LPDIRSWITCHFLAGS lpFlags)
struct _DIRFINDLISTNODE * ptrNext
struct _DIRFINDSTREAMNODE * ptrNext
#define GetVolumePathName
#define FILE_ATTRIBUTE_HIDDEN
struct _DirSwitchesFlags * LPDIRSWITCHFLAGS
WIN32_FIND_STREAM_DATA stStreamInfo
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
_TCHAR * _tcsrchr(const _TCHAR *s, _XINT c)
static VOID DirPrintFileDateTime(TCHAR *lpDate, TCHAR *lpTime, LPWIN32_FIND_DATA lpFile, LPDIRSWITCHFLAGS lpFlags)
#define GetEnvironmentVariable
static INT PrintSummary(LPCTSTR szPath, ULONG ulFiles, ULONG ulDirs, ULONGLONG u64Bytes, LPDIRSWITCHFLAGS lpFlags, BOOL TotalSummary)
char * cleanup(char *str)
static BOOL DirReadParam(LPTSTR Line, LPTSTR **params, LPINT entries, LPDIRSWITCHFLAGS lpFlags)
#define GetProcAddress(x, y)
struct _DIRFINDLISTNODE * PDIRFINDLISTNODE
static VOID QsortFiles(PDIRFINDINFO ptrArray[], int i, int j, LPDIRSWITCHFLAGS lpFlags)
BOOL ConPrintfVPaging(PCON_PAGER Pager, BOOL StartPaging, LPTSTR szFormat, va_list arg_ptr)
static VOID GetUserDiskFreeSpace(LPCTSTR lpRoot, PULARGE_INTEGER lpFreeSpace)
BOOL IsExistingDirectory(IN LPCTSTR pszPath)
BOOL add_entry(LPINT ac, LPSTR **arg, LPCSTR entry)
struct _DIRFINDSTREAMNODE * PDIRFINDSTREAMNODE
#define RC_STRING_MAX_SIZE
BOOL WINAPI FindClose(HANDLE hFindFile)
PULONG MinorVersion OPTIONAL