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.
128 lines
2.4 KiB
128 lines
2.4 KiB
#include"linecount.h"
|
|
#ifdef _WIN32
|
|
#include<tchar.h>
|
|
#else
|
|
#define _tprintf printf
|
|
#define _ftprintf fprintf
|
|
#define _tcscmp strcmp
|
|
#define _ttoi atoi
|
|
#define _tcstoui64 strtoull
|
|
#define _T(x) x
|
|
#endif
|
|
|
|
using namespace LineCount;
|
|
|
|
#if defined(WIN32) && defined(_UNICODE)
|
|
int wmain(int argc, TCHAR **argv)
|
|
#else
|
|
int main(int argc, char **argv)
|
|
#endif
|
|
{
|
|
// Parse parameters
|
|
int arg = 1;
|
|
int posparam = 0;
|
|
|
|
CLineCount::PARAMETERS params;
|
|
params.windowsize = -1;
|
|
params.workercount = -1;
|
|
|
|
TCHAR *filename = NULL;
|
|
|
|
while (arg < argc)
|
|
{
|
|
if (_tcscmp(argv[arg], _T("--windowsize")) == 0)
|
|
{
|
|
arg++;
|
|
if (arg == argc)
|
|
{
|
|
_ftprintf(stderr, _T("missing argument to --windowsize"));
|
|
return 1;
|
|
}
|
|
|
|
_TCHAR *wsstr = argv[arg];
|
|
|
|
// Check for size multipliers
|
|
size_t multiplier = 1;
|
|
_TCHAR *lastchar = wsstr + (_tcslen(wsstr) - 1);
|
|
if (*lastchar == _T('k') || *lastchar == _T('K'))
|
|
{
|
|
multiplier = 1024;
|
|
lastchar = 0;
|
|
}
|
|
else if (*lastchar == _T('m') || *lastchar == _T('M'))
|
|
{
|
|
multiplier = 1024 * 1024;
|
|
lastchar = 0;
|
|
}
|
|
else if (*lastchar == _T('g') || *lastchar == _T('G'))
|
|
{
|
|
multiplier = 1024 * 1024 * 1024;
|
|
lastchar = 0;
|
|
}
|
|
|
|
_TCHAR *endptr;
|
|
params.windowsize = ((size_t)_tcstoui64(argv[arg], &endptr, 10)) * multiplier;
|
|
|
|
}
|
|
else if (_tcscmp(argv[arg], _T("--workercount")) == 0)
|
|
{
|
|
arg++;
|
|
if (arg == argc)
|
|
{
|
|
_ftprintf(stderr, _T("missing argument to --workercount"));
|
|
return 1;
|
|
}
|
|
|
|
params.workercount = _ttoi(argv[arg]);
|
|
}
|
|
else
|
|
{
|
|
if (posparam == 0)
|
|
{
|
|
filename = argv[arg];
|
|
}
|
|
else
|
|
{
|
|
_ftprintf(stderr, _T("too many arguments"));
|
|
return 1;
|
|
}
|
|
posparam++;
|
|
}
|
|
|
|
arg++;
|
|
}
|
|
|
|
if (posparam != 1)
|
|
{
|
|
_ftprintf(stderr, _T("missing required argument"));
|
|
return 1;
|
|
}
|
|
|
|
// Create line count class
|
|
CLineCount lc(¶ms);
|
|
|
|
if (!lc.open(filename))
|
|
{
|
|
LCERROR err = lc.lastError();
|
|
LCSTRING errstr = lc.lastErrorString();
|
|
|
|
_ftprintf(stderr, _T("error (%d): %s\n"), err, errstr.c_str());
|
|
return err;
|
|
}
|
|
|
|
// Count lines
|
|
LCLINECOUNT count;
|
|
if (!lc.countLines(count))
|
|
{
|
|
LCERROR err = lc.lastError();
|
|
LCSTRING errstr = lc.lastErrorString();
|
|
|
|
_ftprintf(stderr, _T("error (%d): %s\n"), err, errstr.c_str());
|
|
return err;
|
|
}
|
|
|
|
// Display output
|
|
_tprintf(_T(LCLINECOUNTFMT _T("\n")), count);
|
|
|
|
return 0;
|
|
} |