This commit is contained in:
Alexander S. Aganichev
2001-04-08 08:02:01 +00:00
parent b3cf864163
commit 54e47b7b0a
6 changed files with 128 additions and 69 deletions

View File

@@ -35,7 +35,7 @@
// ------------------------------------------------------------------
static bool lame = false;
static bool comment_char = '#';
// ------------------------------------------------------------------
@@ -64,59 +64,70 @@ bool gareafile::ReadHPTLine(FILE* f, string* s, bool add, int state) {
// 2: end
// 3: whitespace
while((ptr != str.end()) and (state != 2)) {
switch(*ptr) {
case '\\':
if(lame)
break;
if(ptr == str.end()-1) {
str.erase(ptr);
const char *p = strskip_wht(str.c_str());
if(add)
*s += p;
else
*s = p;
ReadHPTLine(f, s, true, state);
return true;
} else
switch(ptr[1]) {
case ' ':
case '\t':
{
string::iterator i = ptr;
while((i != str.end()) and isspace(*i))
++i;
if(*i != '#')
break;
}
case '#':
case NUL:
case '\n':
if(*ptr == comment_char) {
if(state != 1) {
str.erase(ptr, str.end());
state = 2;
}
}
else {
switch(*ptr) {
case '\\':
if(lame)
break;
if(ptr == str.end()-1) {
str.erase(ptr);
const char *p = strskip_wht(str.c_str());
if(add)
*s += p;
else
*s = p;
ReadHPTLine(f, s, true, state);
return true;
} else
if(ptr[1] == comment_char) {
str.erase(ptr, str.end());
{
const char *p = strskip_wht(str.c_str());
if(add)
*s += p;
else
*s = p;
}
const char *p = strskip_wht(str.c_str());
if(add)
*s += p;
else
*s = p;
ReadHPTLine(f, s, true, state);
return true;
default:
break;
}
++ptr;
break;
case '\"':
state = 1;
break;
case '#':
if(state != 1) {
str.erase(ptr, str.end());
state = 2;
}
break;
default:
break;
}
switch(ptr[1]) {
case ' ':
case '\t':
{
string::iterator i = ptr;
while((i != str.end()) and isspace(*i))
++i;
if(*i != '#')
break;
}
case NUL:
case '\n':
str.erase(ptr, str.end());
{
const char *p = strskip_wht(str.c_str());
if(add)
*s += p;
else
*s = p;
}
ReadHPTLine(f, s, true, state);
return true;
default:
break;
}
++ptr;
break;
case '\"':
state = 1;
break;
default:
break;
}
}
++ptr;
}
@@ -241,6 +252,7 @@ void gareafile::ReadHPTFile(char* path, char* file, char* options, char* origin,
const word CRC_BADAREA = 0x8DA5;
const word CRC_SYSOP = 0x967F;
const word CRC_VERSION = 0xF78F;
const word CRC_COMMENTCHAR = 0xE2CC;
AreaCfg aa;
Path buf2;
@@ -294,6 +306,13 @@ void gareafile::ReadHPTFile(char* path, char* file, char* options, char* origin,
MakePathname(buf2, path, buf2);
ReadHPTFile(path, buf2, options, origin, group);
break;
case CRC_COMMENTCHAR:
replace_slashes(&val);
if((strlen(val) == 3) and (val[0] == val[2]) and strpbrk(val, "\'\""))
comment_char = val[1];
else if(*val)
comment_char = val[0];
break;
case CRC_NETAREA:
aa.type = GMB_NET;
break;