home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C++ Games Programming
/
CPPGAMES.ISO
/
thx
/
source
/
utils
/
cmdline.cpp
next >
Wrap
C/C++ Source or Header
|
1995-03-24
|
2KB
|
89 lines
// ------------ cmdline.cpp
// Parse command lines for file names (no wildcards allowed
// in order to preserve file sequence control)
// Recognize a response file by @filename
// Call a callback function for each name parsed
#include <iostream.h>
#include <fstream.h>
#include <stdlib.h>
#include <dir.h>
#include <io.h>
#include <string.h>
int checkfile(char *fname)
{
if (access(fname, 0) != 0) {
cerr << "\nNo such file as " << fname;
return 0;
}
return 1;
}
int process_responsefile(char *rfname, void (*func)(char*))
{
if (!checkfile(rfname))
return 0;
ifstream list(rfname);
char fname[MAXPATH];
while (!list.eof()) {
list.getline(fname,MAXPATH);
if (*fname) {
if (!checkfile(fname))
return 0;
(*func)(fname);
}
}
return 1;
}
int parse_cmdline(int argc, char *argv[], void (*func)(char*))
{
int n = 0;
while (argc--) {
if (*argv[n] == '@') {
if (!process_responsefile(argv[n]+1, func))
return 0;
}
else {
char path[MAXPATH];
char drive[MAXDRIVE];
char dir[MAXDIR];
_splitpath(argv[n], drive, dir, 0, 0);
_makepath(path, drive, dir, 0, 0);
char *cp = path+strlen(path);
ffblk ff;
int ax = findfirst(argv[n], &ff, 0);
if (ax == -1)
return 0;
do {
strcpy(cp, ff.ff_name);
(*func)(path);
ax = findnext(&ff);
} while (ax != -1);
}
n++;
}
return 1;
}
#ifdef TESTING
// ----------- stub
void callback(char *fname)
{
cout << "Processing " << fname << endl;
}
int main(int argc, char *argv[])
{
if (argc > 1) {
cout << "1st parameter = " << argv[1] << endl;
parse_cmdline(argc-2, argv+2, callback);
}
return 0;
}
#endif