Syncronized with GoldED functionality, explicit namespace used

This commit is contained in:
Alexander S. Aganichev 2001-08-31 05:23:00 +00:00
parent 714aa4ce98
commit 71774615c3

View File

@ -23,7 +23,7 @@
// GoldNODE - A nodelist compiler for GoldED. // GoldNODE - A nodelist compiler for GoldED.
// ------------------------------------------------------------------ // ------------------------------------------------------------------
using namespace std; // using namespace std;
#include <gdbgerr.h> #include <gdbgerr.h>
#include <list> #include <list>
@ -81,24 +81,25 @@ const size_t maxnodes = 262000;
// ------------------------------------------------------------------ // ------------------------------------------------------------------
typedef vector<Addr>::iterator addr_iter; typedef std::vector<Addr>::iterator addr_iter;
typedef vector<Stamp>::iterator stamp_iter; typedef std::vector<Stamp>::iterator stamp_iter;
typedef list<_GEIdx> geidxlist; typedef std::list<_GEIdx> geidxlist;
// Nodelists // Nodelists
vector<Stamp> nodelist; // nodelist files,stamps,update marker std::vector<Stamp> nodelist; // nodelist files,stamps,update marker
vector<Addr> nodezone; // nodelist zones std::vector<Addr> nodezone; // nodelist zones
vector<Stamp> userlist; // Userlist files,stamps,update marker std::vector<Stamp> userlist; // Userlist files,stamps,update marker
vector<Addr> userzone; // Userlist zones std::vector<Addr> userzone; // Userlist zones
std::vector< std::pair<std::string, std::string> > mappath;
// Exclude/Include nodes // Exclude/Include nodes
vector<Addr> excludenode; std::vector<Addr> excludenode;
vector<Addr> includenode; std::vector<Addr> includenode;
// Index files // Index files
string addrindex; std::string addrindex;
string nodeindex; std::string nodeindex;
string listindex; std::string listindex;
// ------------------------------------------------------------------ // ------------------------------------------------------------------
@ -143,10 +144,10 @@ static void twirly() {
n = (++n)%4; n = (++n)%4;
switch(n) { switch(n) {
case 0: cout << "|\b" << flush; break; case 0: std::cout << "|\b" << std::flush; break;
case 1: cout << "/\b" << flush; break; case 1: std::cout << "/\b" << std::flush; break;
case 2: cout << "-\b" << flush; break; case 2: std::cout << "-\b" << std::flush; break;
case 3: cout << "\\\b" << flush; break; case 3: std::cout << "\\\b" << std::flush; break;
} }
} }
@ -462,7 +463,7 @@ static char* CvtName(char* inp) {
// ------------------------------------------------------------------ // ------------------------------------------------------------------
#ifdef GOLDNODE_STATS #ifdef GOLDNODE_STATS
void calc_statistic(ofstream &ofp, int* observation, float N) { void calc_statistic(std::ofstream &ofp, int* observation, float N) {
int i; int i;
float mean = 0.0; float mean = 0.0;
@ -470,9 +471,9 @@ void calc_statistic(ofstream &ofp, int* observation, float N) {
float varians = 0.0; float varians = 0.0;
// 12 12345 12345 123456 123456789012 // 12 12345 12345 123456 123456789012
ofp << ".---------------------------------------------." << endl ofp << ".---------------------------------------------." << std::endl
<< "| x | h(x) | f(x) | x*f(x) | (x-m)^2*f(x) |" << endl << "| x | h(x) | f(x) | x*f(x) | (x-m)^2*f(x) |" << std::endl
<< "|-----+-------+-------+--------+--------------|" << endl; << "|-----+-------+-------+--------+--------------|" << std::endl;
for(i=0; i<100; i++) { for(i=0; i<100; i++) {
float x = i; float x = i;
@ -491,18 +492,18 @@ void calc_statistic(ofstream &ofp, int* observation, float N) {
float frekvens = hyppighed / N; float frekvens = hyppighed / N;
float vartmp = (x-mean)*(x-mean)*frekvens; float vartmp = (x-mean)*(x-mean)*frekvens;
varians += vartmp; varians += vartmp;
ofp << "| " << setw(3) << i << " | " << setw(5) << observation[i] << " | " << setprecision(3) << setw(5) << frekvens << " | " << setw(6) << x*frekvens << " | " << setw(12) << vartmp << " | " << endl; ofp << "| " << std::setw(3) << i << " | " << std::setw(5) << observation[i] << " | " << std::setprecision(3) << std::setw(5) << frekvens << " | " << std::setw(6) << x*frekvens << " | " << std::setw(12) << vartmp << " | " << std::endl;
} }
} }
ofp << "|-----+-------+-------+--------+--------------|" << endl ofp << "|-----+-------+-------+--------+--------------|" << std::endl
<< "| sum | " << setprecision(0) << setw(5) << N << " | " << setprecision(3) << setw(5) << sumfrekvens << " | " << setw(5) << mean << " | " << setw(12) << varians << " |" << endl << "| sum | " << std::setprecision(0) << std::setw(5) << N << " | " << std::setprecision(3) << std::setw(5) << sumfrekvens << " | " << std::setw(5) << mean << " | " << std::setw(12) << varians << " |" << std::endl
<< "`---------------------------------------------'" << endl << "`---------------------------------------------'" << std::endl
<< endl << std::endl
<< "Mean: " << setprecision(1) << mean << endl << "Mean: " << std::setprecision(1) << mean << std::endl
<< "Variance = " << varians << endl << "Variance = " << varians << std::endl
<< "Standard deviation = " << sqrt(varians) << endl << "Standard deviation = " << sqrt(varians) << std::endl
<< endl; << std::endl;
} }
#endif #endif
@ -550,7 +551,7 @@ static void read_nodelists() {
nodes = 0; nodes = 0;
if(not quiet) cout << endl << "* Compiling nodelists:" << endl; if(not quiet) std::cout << std::endl << "* Compiling nodelists:" << std::endl;
// Delete the current indexfiles so they don't take up space // Delete the current indexfiles so they don't take up space
remove(addrindex.c_str()); remove(addrindex.c_str());
@ -594,7 +595,7 @@ static void read_nodelists() {
buf[llen] = ' '; buf[llen] = ' ';
if(not quiet) { if(not quiet) {
int len = 16-strlen(name); int len = 16-strlen(name);
cout << "\r* |--" << name << setw((len > 0) ? len : 1) << " " << "Warning line " << line << " - Invalid NUL char encountered." << endl; std::cout << "\r* |--" << name << std::setw((len > 0) ? len : 1) << " " << "Warning line " << line << " - Invalid NUL char encountered." << std::endl;
} }
llen = strlen(buf); llen = strlen(buf);
ptr = buf+llen-1; ptr = buf+llen-1;
@ -687,7 +688,7 @@ static void read_nodelists() {
if(ISTWIRLY(no)) { if(ISTWIRLY(no)) {
int len = 16-strlen(name); int len = 16-strlen(name);
cout << "\r* \\--" << name << setw((len > 0) ? len : 1) << " " << "Zone " << nlst.addr.zone << "\tNet " << nlst.addr.net << "\tNodes " << (ulong)no << flush; std::cout << "\r* \\--" << name << std::setw((len > 0) ? len : 1) << " " << "Zone " << nlst.addr.zone << "\tNet " << nlst.addr.net << "\tNodes " << (ulong)no << std::flush;
} }
bool include = true; bool include = true;
@ -734,14 +735,14 @@ static void read_nodelists() {
if(not quiet) { if(not quiet) {
int len = 16-strlen(name); int len = 16-strlen(name);
cout << "\r* " << ((fno == nodelist.end()-1) ? '\\' : '|') << "--" << name << setw((len > 0) ? len : 1) << " " << "Nodes read: " << (ulong)no << "\tTotal read: " << (ulong)nodes << ((nodes >= maxnodes) ? " (Limit reached)" : " ") << endl; std::cout << "\r* " << ((fno == nodelist.end()-1) ? '\\' : '|') << "--" << name << std::setw((len > 0) ? len : 1) << " " << "Nodes read: " << (ulong)no << "\tTotal read: " << (ulong)nodes << ((nodes >= maxnodes) ? " (Limit reached)" : " ") << std::endl;
} }
fclose(lfp); fclose(lfp);
++realfno; ++realfno;
} }
else { else {
if(not quiet) cout << "Error opening nodelist " << fno->fn << '!' << endl; if(not quiet) std::cout << "Error opening nodelist " << fno->fn << '!' << std::endl;
*(fno->fn) = NUL; *(fno->fn) = NUL;
} }
} }
@ -749,7 +750,7 @@ static void read_nodelists() {
// Compile userlists // Compile userlists
if(userlist.size()) { if(userlist.size()) {
if(not quiet) cout << endl << "* Compiling userlists:" << endl; if(not quiet) std::cout << std::endl << "* Compiling userlists:" << std::endl;
} }
for(fno=userlist.begin(), zno=userzone.begin(); fno != userlist.end() and nodes < maxnodes; fno++, zno++) { for(fno=userlist.begin(), zno=userzone.begin(); fno != userlist.end() and nodes < maxnodes; fno++, zno++) {
@ -816,7 +817,7 @@ static void read_nodelists() {
if(ISTWIRLY(nodes)) { if(ISTWIRLY(nodes)) {
int len = 16-strlen(name); int len = 16-strlen(name);
cout << "\r* \\--" << name << setw((len > 0) ? len : 1) << " " << "Nodes: " << (ulong)nodes << flush; std::cout << "\r* \\--" << name << std::setw((len > 0) ? len : 1) << " " << "Nodes: " << (ulong)nodes << std::flush;
} }
// Indicate userlist // Indicate userlist
@ -838,33 +839,33 @@ static void read_nodelists() {
if(not quiet) { if(not quiet) {
int len = 16-strlen(name); int len = 16-strlen(name);
cout << "\r* " << ((fno == userlist.end()-1) ? '\\' : '|') << "--" << name << setw((len > 0) ? len : 1) << " " << "Nodes read: " << (ulong)no << "\tTotal read: " << (ulong)nodes << ((nodes >= maxnodes) ? " (Limit reached)" : " ") << endl; std::cout << "\r* " << ((fno == userlist.end()-1) ? '\\' : '|') << "--" << name << std::setw((len > 0) ? len : 1) << " " << "Nodes read: " << (ulong)no << "\tTotal read: " << (ulong)nodes << ((nodes >= maxnodes) ? " (Limit reached)" : " ") << std::endl;
} }
fclose(lfp); fclose(lfp);
} }
else { else {
if(not quiet) cout << "Error opening userlist " << fno->fn << '!' << endl; if(not quiet) std::cout << "Error opening userlist " << fno->fn << '!' << std::endl;
} }
} }
#ifdef GOLDNODE_STATS #ifdef GOLDNODE_STATS
if(make_stats) { if(make_stats) {
if(not quiet) cout << "* Writing statistics to " << statfilename << endl; if(not quiet) std::cout << "* Writing statistics to " << statfilename << std::endl;
ofstream ofp(statfilename); ofstream ofp(statfilename);
if(not ofp) { if(not ofp) {
if(not quiet) cout << "Error opening statfile " << statfilename << '!' << endl; if(not quiet) std::cout << "Error opening statfile " << statfilename << '!' << std::endl;
} }
else else
ofp << "Nodename size statistics:" << endl; ofp << "Nodename size statistics:" << std::endl;
calc_statistic(ofp, statistic.nodename, nodes); calc_statistic(ofp, statistic.nodename, nodes);
ofp << endl << "Location size statistics:" << endl; ofp << std::endl << "Location size statistics:" << std::endl;
calc_statistic(ofp, statistic.location, nodes); calc_statistic(ofp, statistic.location, nodes);
ofp << endl << "Sysopname size statistics:" << endl; ofp << std::endl << "Sysopname size statistics:" << std::endl;
calc_statistic(ofp, statistic.sysopname, nodes); calc_statistic(ofp, statistic.sysopname, nodes);
} }
} }
@ -876,7 +877,7 @@ static void read_nodelists() {
map<long, dword> namepos; map<long, dword> namepos;
// Sort by name // Sort by name
if(not quiet) cout << endl << "* Sorting by name " << flush; if(not quiet) std::cout << std::endl << "* Sorting by name " << std::flush;
nodeidx.sort(cmp_nnlsts); nodeidx.sort(cmp_nnlsts);
// Write the name-sorted .GXN // Write the name-sorted .GXN
@ -887,11 +888,11 @@ static void read_nodelists() {
if(fidouser) if(fidouser)
fido = fsopen(fidouserlst, "wt", sh_mod); fido = fsopen(fidouserlst, "wt", sh_mod);
if(fido == NULL) { if(fido == NULL) {
if(not quiet) cout << "\b, writing " << name << ' ' << flush; if(not quiet) std::cout << "\b, writing " << name << ' ' << std::flush;
fidouser = false; fidouser = false;
} }
else { else {
if(not quiet) cout << "\b, writing " << name << " and " << fidouserlst << ' ' << flush; if(not quiet) std::cout << "\b, writing " << name << " and " << fidouserlst << ' ' << std::flush;
} }
int nn = 0; int nn = 0;
@ -905,7 +906,7 @@ static void read_nodelists() {
if(prev != nodeidx.end() && match_addr_mask(&curr->addr, &prev->addr)) { if(prev != nodeidx.end() && match_addr_mask(&curr->addr, &prev->addr)) {
if(strieql(curr->name, prev->name)) { if(strieql(curr->name, prev->name)) {
#ifdef DEBUG #ifdef DEBUG
if(not quiet) cout << "* Dupe: " << curr->addr.zone << ':' << curr->addr.net << '/' << curr->addr.node << '.' << curr->addr.point << ' ' << curr->name << endl; if(not quiet) std::cout << "* Dupe: " << curr->addr.zone << ':' << curr->addr.net << '/' << curr->addr.node << '.' << curr->addr.point << ' ' << curr->name << std::endl;
#endif #endif
nodeidx.erase(curr); nodeidx.erase(curr);
curr = prev; curr = prev;
@ -929,14 +930,14 @@ static void read_nodelists() {
} }
// Sort by address // Sort by address
if(not quiet) cout << ' ' << endl << "* Sorting by node " << flush; if(not quiet) std::cout << ' ' << std::endl << "* Sorting by node " << std::flush;
nodeidx.sort(cmp_anlsts); nodeidx.sort(cmp_anlsts);
// Write the address-sorted .GXA // Write the address-sorted .GXA
fp = fsopen(addrindex.c_str(), "wb", sh_mod); fp = fsopen(addrindex.c_str(), "wb", sh_mod);
if(fp) { if(fp) {
name = CleanFilename(addrindex.c_str()); name = CleanFilename(addrindex.c_str());
if(not quiet) cout << "\b, writing " << name << ' ' << flush; if(not quiet) std::cout << "\b, writing " << name << ' ' << std::flush;
int nn = 0; int nn = 0;
for(curr = nodeidx.begin(); curr != nodeidx.end(); curr++) { for(curr = nodeidx.begin(); curr != nodeidx.end(); curr++) {
if(ISTWIRLY(nn++)) if(ISTWIRLY(nn++))
@ -950,7 +951,7 @@ static void read_nodelists() {
fp = fsopen(listindex.c_str(), "wt", sh_mod); fp = fsopen(listindex.c_str(), "wt", sh_mod);
if(fp) { if(fp) {
name = CleanFilename(listindex.c_str()); name = CleanFilename(listindex.c_str());
if(not quiet) cout << ' ' << endl << "* Writing " << name << endl; if(not quiet) std::cout << ' ' << std::endl << "* Writing " << name << std::endl;
for(fno=nodelist.begin(); fno != nodelist.end(); fno++) { for(fno=nodelist.begin(); fno != nodelist.end(); fno++) {
if(*(fno->fn)) if(*(fno->fn))
fprintf(fp, "%s %lu\n", fno->fn, fno->ft); fprintf(fp, "%s %lu\n", fno->fn, fno->ft);
@ -963,9 +964,9 @@ static void read_nodelists() {
if(not quiet) { if(not quiet) {
if(dups) { if(dups) {
cout << endl << "* Total duplicate nodes: " << (ulong)dups << '.' << endl; std::cout << std::endl << "* Total duplicate nodes: " << (ulong)dups << '.' << std::endl;
} }
cout << endl << "* Nodelist compile completed. Compile time: " << (ulong)(runtime/60) << " min, " << (ulong)(runtime%60) << " sec." << endl; std::cout << std::endl << "* Nodelist compile completed. Compile time: " << (ulong)(runtime/60) << " min, " << (ulong)(runtime%60) << " sec." << std::endl;
} }
#ifdef GOLDNODE_STATS #ifdef GOLDNODE_STATS
} }
@ -1000,9 +1001,10 @@ static void check_nodelists(bool force) {
if(not listdefined or (de->stat_info.st_mtime-listtime > 0)) { if(not listdefined or (de->stat_info.st_mtime-listtime > 0)) {
listtime = de->stat_info.st_mtime; listtime = de->stat_info.st_mtime;
listdefined = true; listdefined = true;
strxmerge(nodelist[n].fn, sizeof(Path), f.fullpath(), "/", de->name.c_str(), NULL); strxmerge(nodelist[n].fn, sizeof(Path), f.fullpath(), GOLD_SLASH_STR, de->name.c_str(), NULL);
} }
} }
strchg(nodelist[n].fn, GOLD_WRONG_SLASH_CHR, GOLD_SLASH_CHR);
} }
} }
@ -1014,6 +1016,8 @@ static void check_nodelists(bool force) {
char* val=buf; char* val=buf;
getkeyval(&key, &val); getkeyval(&key, &val);
key = strxcpy(newpath, strbtrim(key), sizeof(Path)); key = strxcpy(newpath, strbtrim(key), sizeof(Path));
MapPath(key);
strchg(key, GOLD_WRONG_SLASH_CHR, GOLD_SLASH_CHR);
for(n=0; n<nodelist.size(); n++) { for(n=0; n<nodelist.size(); n++) {
if(strieql(nodelist[n].fn, key)) { if(strieql(nodelist[n].fn, key)) {
nodelist[n].ft = atol(val); nodelist[n].ft = atol(val);
@ -1041,16 +1045,16 @@ static void check_nodelists(bool force) {
if(not quiet) { if(not quiet) {
if(compilen) { if(compilen) {
cout << "* " << compilen << " new nodelist file" << ((compilen == 1) ? "" : "s") << " found." << endl; std::cout << "* " << compilen << " new nodelist file" << ((compilen == 1) ? "" : "s") << " found." << std::endl;
} }
else if(nodelist.size()) { else if(nodelist.size()) {
cout << "* The nodelist file" << ((nodelist.size() == 1) ? " is" : "s are") << " up-to-date." << endl; std::cout << "* The nodelist file" << ((nodelist.size() == 1) ? " is" : "s are") << " up-to-date." << std::endl;
} }
} }
// Check userlists // Check userlists
for(n=0,compileu=0; n<userlist.size(); n++) { for(n=0,compileu=0; n<userlist.size(); n++) {
if(abs(long(GetFiletime(userlist[n].fn) - userlist[n].ft)) > 1) { if(abs(long(GetFiletime(newpath) - userlist[n].ft)) > 1) {
userlist[n].fc = YES; userlist[n].fc = YES;
compileu++; compileu++;
} }
@ -1058,10 +1062,10 @@ static void check_nodelists(bool force) {
if(not quiet) { if(not quiet) {
if(compileu) { if(compileu) {
cout << "* " << compileu << " new userlist file" << ((compileu == 1) ? "" : "s") << " found." << endl; std::cout << "* " << compileu << " new userlist file" << ((compileu == 1) ? "" : "s") << " found." << std::endl;
} }
else if(userlist.size()) { else if(userlist.size()) {
cout << "* The userlist file" << ((userlist.size() == 1) ? " is" : "s are") << " up-to-date." << endl; std::cout << "* The userlist file" << ((userlist.size() == 1) ? " is" : "s are") << " up-to-date." << std::endl;
} }
} }
@ -1074,7 +1078,7 @@ static void check_nodelists(bool force) {
static void fatal_error(const char* what) { static void fatal_error(const char* what) {
if(not quiet) cout << what << endl; if(not quiet) std::cout << what << std::endl;
exit(5); exit(5);
} }
@ -1097,14 +1101,7 @@ static int do_if(char* val) {
return false; return false;
#endif #endif
} }
else if(strieql(val, "386")) { else if(strieql(val, "386") or strieql(val, "DOS") or strieql(val, "DPMI32")) {
#if defined(__MSDOS__)
return true;
#else
return false;
#endif
}
else if(strieql(val, "DOS")) {
#ifdef __MSDOS__ #ifdef __MSDOS__
return true; return true;
#else #else
@ -1118,21 +1115,48 @@ static int do_if(char* val) {
return false; return false;
#endif #endif
} }
else if(strieql(val, "INOS2")) { else if(strieql(val, "FIREBIRD"))
#if defined(__OS2__)
return true; return true;
#elif defined(__GNUC__) else if(strieql(val, "ASA") or strieql(val, "PLUS"))
return false;
#else
return _osmajor >= 10;
#endif
}
else if(strieql(val, "FIREBIRD")) {
return true; return true;
}
else if(strieql(val, "YES") or strieql(val, "TRUE") or strieql(val, "ON")) else if(strieql(val, "YES") or strieql(val, "TRUE") or strieql(val, "ON"))
return true; return true;
return atoi(val) != 0; return !!atoi(val);
}
// ------------------------------------------------------------------
char* MapPath(char* map, bool reverse) {
Path buf, cmap;
strxcpy(cmap, map, sizeof(Path));
if(reverse)
strchg(cmap, GOLD_WRONG_SLASH_CHR, GOLD_SLASH_CHR);
std::vector< std::pair<std::string, std::string> >::iterator i;
for(i = mappath.begin(); i != mappath.end(); i++) {
const char* p = reverse ? i->second.c_str() : i->first.c_str();
const char* q = reverse ? i->first.c_str() : i->second.c_str();
if(strnieql(cmap, p, strlen(p))) {
strxcpy(buf, map, sizeof(Path));
strxmerge(map, sizeof(Path), q, buf+strlen(p), NULL);
char sl1, sl2;
char* ptr;
ptr = strpbrk(p, "/\\");
sl1 = ptr ? *ptr : NUL;
ptr = strpbrk(q, "/\\");
sl2 = ptr ? *ptr : NUL;
if(sl1 and sl2 and (sl1 != sl2))
strchg(map, sl1, sl2);
break;
}
}
return map;
} }
@ -1167,7 +1191,7 @@ static int parse_config(const char *__configfile, Addr& zoneaddr) {
switch(crc) { switch(crc) {
case CRC_IF: case CRC_IF:
if(in_if) { if(in_if) {
if(not quiet) cout << "* " << __configfile << ": Misplaced IF at line " << line << ". IF's cannot be nested." << endl; if(not quiet) std::cout << "* " << __configfile << ": Misplaced IF at line " << line << ". IF's cannot be nested." << std::endl;
} }
in_if = YES; in_if = YES;
cond_status = do_if(value); cond_status = do_if(value);
@ -1175,20 +1199,20 @@ static int parse_config(const char *__configfile, Addr& zoneaddr) {
case CRC_ELIF: case CRC_ELIF:
case CRC_ELSEIF: case CRC_ELSEIF:
if((not in_if) or in_else) { if((not in_if) or in_else) {
if(not quiet) cout << "* " << __configfile << ": Misplaced ELIF/ELSEIF at line " << line << '.' << endl; if(not quiet) std::cout << "* " << __configfile << ": Misplaced ELIF/ELSEIF at line " << line << '.' << std::endl;
} }
cond_status = do_if(value); cond_status = do_if(value);
break; break;
case CRC_ELSE: case CRC_ELSE:
if((not in_if) or in_else) { if((not in_if) or in_else) {
if(not quiet) cout << "* " << __configfile << "Misplaced ELSE at line " << line << '.' << endl; if(not quiet) std::cout << "* " << __configfile << "Misplaced ELSE at line " << line << '.' << std::endl;
} }
in_else = YES; in_else = YES;
cond_status ^= YES; cond_status ^= YES;
break; break;
case CRC_ENDIF: case CRC_ENDIF:
if(not in_if) { if(not in_if) {
if(not quiet) cout << "* " << __configfile << ": Misplaced ENDIF at line " << line << '.' << endl; if(not quiet) std::cout << "* " << __configfile << ": Misplaced ENDIF at line " << line << '.' << std::endl;
} }
in_if = in_else = NO; in_if = in_else = NO;
cond_status = YES; cond_status = YES;
@ -1201,6 +1225,7 @@ static int parse_config(const char *__configfile, Addr& zoneaddr) {
if((not _gotcond) and cond_status) { if((not _gotcond) and cond_status) {
switch(crc) { switch(crc) {
case CRC_NODEPATH: case CRC_NODEPATH:
MapPath(value);
PathCopy(nodepath, value); PathCopy(nodepath, value);
break; break;
case CRC_ADDRESS: case CRC_ADDRESS:
@ -1229,6 +1254,7 @@ static int parse_config(const char *__configfile, Addr& zoneaddr) {
ndl.ft = (dword)-1; ndl.ft = (dword)-1;
ndl.fc = NO; ndl.fc = NO;
strschg_environ(value); strschg_environ(value);
MapPath(value);
strcpy(ndl.fn, value); strcpy(ndl.fn, value);
nodelist.push_back(ndl); nodelist.push_back(ndl);
nodezone.push_back(ndz); nodezone.push_back(ndz);
@ -1253,6 +1279,7 @@ static int parse_config(const char *__configfile, Addr& zoneaddr) {
ndl.ft = (dword)-1; ndl.ft = (dword)-1;
ndl.fc = NO; ndl.fc = NO;
strschg_environ(value); strschg_environ(value);
MapPath(value);
strcpy(ndl.fn, value); strcpy(ndl.fn, value);
userlist.push_back(ndl); userlist.push_back(ndl);
userzone.push_back(ndz); userzone.push_back(ndz);
@ -1275,15 +1302,25 @@ static int parse_config(const char *__configfile, Addr& zoneaddr) {
case CRC_SHAREMODE: case CRC_SHAREMODE:
if(atoi(value)) if(atoi(value))
sh_mod = atoi(value); sh_mod = atoi(value);
else if(striinc("NO", value)) else
sh_mod = 0; sh_mod = GetYesno(value) ? SH_DENYNO : SH_COMPAT;
break; break;
case CRC_INCLUDE: case CRC_INCLUDE:
strschg_environ(value); strschg_environ(value);
MapPath(value);
if(not parse_config(value,zoneaddr)) // NOTE! This is a recursive call! if(not parse_config(value,zoneaddr)) // NOTE! This is a recursive call!
if(not quiet) cout << "* Could not read configuration file " << value << '!' << endl; if(not quiet) std::cout << "* Could not read configuration file " << value << '!' << std::endl;
break; break;
default: case CRC_MAPPATH:
{
std::pair<std::string, std::string> mapentry;
mapentry.first = value;
mapentry.second = value2;
mappath.push_back(mapentry);
}
break;
default:
break; break;
} }
} }
@ -1384,6 +1421,7 @@ static bool read_config(const char *cfg, const char *argv_0) {
nodezone.clear(); nodezone.clear();
userlist.clear(); userlist.clear();
userzone.clear(); userzone.clear();
mappath.clear();
if(not parse_config(buf, zoneaddr)) { if(not parse_config(buf, zoneaddr)) {
errorlevel = 1; errorlevel = 1;
return false; return false;
@ -1466,43 +1504,43 @@ static void run_gn(int argc, char* argv[]) {
} }
if(not quiet) { if(not quiet) {
cout << __GPID__ " " __GVER__ " Nodelist Compiler." << endl std::cout << __GPID__ " " __GVER__ " Nodelist Compiler." << std::endl
<< "Copyright (C) 1990-1999 Odinn Sorensen" << endl << "Copyright (C) 1990-1999 Odinn Sorensen" << std::endl
<< "Copyright (C) 1999-2001 Alexander S. Aganichev" << endl << "Copyright (C) 1999-2001 Alexander S. Aganichev" << std::endl
<< "-------------------------------------------------------------------------------" << endl << "-------------------------------------------------------------------------------" << std::endl
<< endl; << std::endl;
} }
if(not(force or conditional)) { if(not(force or conditional)) {
if(not quiet) { if(not quiet) {
cout << "Commandline syntax: " << CleanFilename(argv[0]) << " [-options] [configfile]" << endl std::cout << "Commandline syntax: " << CleanFilename(argv[0]) << " [-options] [configfile]" << std::endl
<< endl << std::endl
<< "[-options] =\t-C\t Conditional compile." << endl << "[-options] =\t-C\t Conditional compile." << std::endl
<< "\t\t-F\t Forced compile." << endl << "\t\t-F\t Forced compile." << std::endl
<< "\t\t-D\t Remove duplicate nodes from index while compiling." << endl << "\t\t-D\t Remove duplicate nodes from index while compiling." << std::endl
<< "\t\t-Q\t Quiet compile. No screen output improves speed." << endl << "\t\t-Q\t Quiet compile. No screen output improves speed." << std::endl
<< "\t\t-S<size> Set max size of a name in the index." << endl << "\t\t-S<size> Set max size of a name in the index." << std::endl
<< "\t\t-U<file> Create sorted FIDOUSER.LST userlist file." << endl << "\t\t-U<file> Create sorted FIDOUSER.LST userlist file." << std::endl
#ifdef GOLDNODE_STATS #ifdef GOLDNODE_STATS
<< "\t\t-T\t Make statistics." << endl << "\t\t-T\t Make statistics." << std::endl
#endif #endif
<< endl << std::endl
<< "[configfile] =\t\t The path AND filename of GOLDED.CFG" << endl << "[configfile] =\t\t The path AND filename of GOLDED.CFG" << std::endl
<< "\t\t\t configuration file to read." << endl << "\t\t\t configuration file to read." << std::endl
<< endl; << std::endl;
} }
} }
else { else {
if(force) if(force)
if(not quiet) cout << "* Forced compile." << endl; if(not quiet) std::cout << "* Forced compile." << std::endl;
if(read_config(cfg, argv[0])) { if(read_config(cfg, argv[0])) {
if(force or conditional) if(force or conditional)
check_nodelists(force); check_nodelists(force);
} }
else { else {
if(not quiet) cout << endl << "Could not find the configuration file!" << endl; if(not quiet) std::cout << std::endl << "Could not find the configuration file!" << std::endl;
} }
} }
} }