134 while (
Info->StatInfoListNext !=
NULL)
138 Info->StatInfoListNext = StatInfo;
201 static char FileBuffer[1024];
202 char LastChar =
'\0';
210 if(*Current ==
'\n' && LastChar ==
'\r')
231 StatInfo->
EmptyLines += ((LastChar !=
'\0') && (LineLen == 0));
239 DWORD TotalFileCount;
240 DWORD TotalLineCount;
242 DWORD TotalEmptyLines;
252 TotalLineCount +=
Info->LineCount;
253 TotalEmptyLines +=
Info->EmptyLines;
256 TotalAvgLF = (TotalFileCount ? TotalLineCount / TotalFileCount : 0);
262 if (
Info->FileCount != 0)
264 AvgLF = (
Info->FileCount ?
Info->LineCount /
Info->FileCount : 0);
272 _tprintf (
_T(
"File extension%c : %s\n"), ((
Info->nExtensions > 1) ?
_T(
's') :
_T(
' ')),
Info->ExpandedExtName);
278 _tprintf (
_T(
"Proportion of lines : %.2f %%\n"), (
float)(TotalLineCount ? (((
float)
Info->LineCount * 100) / (
float)TotalLineCount) : 0));
279 _tprintf (
_T(
"Average no. lines/file : %lu\n"), AvgLF);
283 _tprintf (
_T(
"Total number of files : %lu\n"), TotalFileCount);
284 _tprintf (
_T(
"Total number of lines : %lu\n"), TotalLineCount);
286 _tprintf (
_T(
"Total number of empty lines : %lu\n"), TotalEmptyLines);
287 _tprintf (
_T(
"Average no. lines/file : %lu\n"), TotalAvgLF);
350 }
while(*
Ext !=
_T(
'\0'));
417 _tprintf (
_T(
"Failed to process directories.\n"));
450 _tprintf (
_T(
"ReactOS Project Statistics\n"));
451 _tprintf (
_T(
"==========================\n\n"));
455 _tprintf(
_T(
"Usage: stats [-e] [-s] directory\n"));
456 _tprintf(
_T(
" -e: don't count empty lines\n"));
457 _tprintf(
_T(
" -s: be silent, don't print directories while processing\n"));
VOID Execute(LPTSTR Path)
int _tcscmp(const _TCHAR *s1, const _TCHAR *s2)
struct _FILE_INFO * StatInfoListNext
struct _FILE_INFO FILE_INFO
PEXTENSION_INFO ExtInfoList
#define INVALID_HANDLE_VALUE
PEXTENSION_INFO AddExtension(LPTSTR ExtName, LPTSTR Description)
_TCHAR * _tcscpy(_TCHAR *to, const _TCHAR *from)
static const WCHAR Description[]
PFILE_INFO AddFile(LPTSTR FileName, PEXTENSION_INFO ExtInfo)
_Must_inspect_result_ _In_ WDFCHILDLIST _In_ PWDF_CHILD_LIST_ITERATOR _Out_ WDFDEVICE _Inout_opt_ PWDF_CHILD_RETRIEVE_INFO Info
BOOL LoadFile(LPTSTR FileName)
struct _EXTENSION_INFO * Next
size_t __cdecl _tcslen(const _TCHAR *str)
BOOL ProcessDirectories(LPTSTR Path)
#define FILE_ATTRIBUTE_DIRECTORY
_In_ PWDFDEVICE_INIT _In_ PWDF_REMOVE_LOCK_OPTIONS Options
struct _FILE_INFO * PFILE_INFO
PVOID WINAPI HeapAlloc(HANDLE, DWORD, SIZE_T)
BOOL ProcessFiles(LPTSTR Path)
HRESULT Next([in] ULONG celt, [out, size_is(celt), length_is(*pceltFetched)] STATPROPSETSTG *rgelt, [out] ULONG *pceltFetched)
DWORD WINAPI GetFileSize(HANDLE hFile, LPDWORD lpFileSizeHigh)
static struct proto Ext[]
struct _EXTENSION_INFO EXTENSION_INFO
#define FILE_ATTRIBUTE_NORMAL
#define memcpy(s1, s2, n)
_Must_inspect_result_ _Out_ PLARGE_INTEGER FileSize
VOID CleanupAfterFile(VOID)
VOID PrintStatistics(VOID)
TCHAR ExpandedExtName[128]
BOOLEAN IsOptionSet(TCHAR *Option)
PRTL_UNICODE_STRING_BUFFER Path
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
IN OUT PVCB OUT PDIRENT OUT PBCB IN BOOLEAN CreateFile
#define ReadFile(a, b, c, d, e)
struct _EXTENSION_INFO * PEXTENSION_INFO
VOID ReadLines(PFILE_INFO StatInfo)
_TCHAR * _tcscat(_TCHAR *s, const _TCHAR *append)
struct _FILE_INFO * StatInfoList
GLboolean GLboolean GLboolean GLboolean a
#define HeapFree(x, y, z)
int _tmain(int argc, _TCHAR *argv[])
BOOL WINAPI FindClose(HANDLE hFindFile)