Log in

View Full Version : Comment Snarfer in Parser.cpp


krich
06-03-2003, 06:10 AM
I am a old, rusty coder, but was able to code in a quick fix to the "Comment at the beginning of the .qst file makes quests not work" bug. It's based off version 1.1.1.2 of parser.cpp

Would this be something worth posting? I didn't see any mention of it being fixed already. :lol:

Regards,

Krich

Trumpcard
06-03-2003, 06:31 AM
Feel free to post it. If it's not in yet, I'll throw it in..

krich
06-03-2003, 06:54 AM
I've hacked my CVS parser.cpp (among others) to work with 0.4.3, so a diff would cause confusion. The code is exceedingly simple, so I'll just do it the old fashioned way.

In void Parser::LoadScript(int npcid, const char *zone) add the variable comment in variable declarations in beginning of subroutine around line 980 or so:

int quote = 0;
int comment = 0; //ADD THIS LINE
//int ignore = 0;
int line_num = 0;


Then add/modify the following lines around line 1075 or so:

if (buffer[i] == '\n') line_num++;
if (buffer[i] == '/' && buffer[i+1] == '*') { comment = 1; } //ADD THIS LINE
if ((strrchr(charIn,buffer[i]) || quote) && !comment) { //MODIFY THIS LINE
temp[p] = buffer[i];
p++;
}
if (buffer[i] == '/' && buffer[i-1] == '*') { comment = 0; } //ADD THIS LINE
if (buffer[i] == '\"') {


That should do it. Essentially it prevents any comment from being populated into temp, which is where the commands are being assembled one character at a time.

Regards,

Krich

krich
06-11-2003, 11:10 AM
Confirmed it's been merged and looks good.

Regards,

krich

krich
06-17-2003, 09:25 AM
Trump,

I just realized that if I increment/decrement the variable comment, I can support nested comments, so change the following lines from:

if (buffer[i] == '\n') line_num++;
if (buffer[i] == '/' && buffer[i+1] == '*') { comment = 1; }
if ((strrchr(charIn,buffer[i]) || quote) && !comment) {
temp[p] = buffer[i];
p++;
}
if (buffer[i] == '/' && buffer[i-1] == '*') { comment = 0; }
if (buffer[i] == '\"') {

to:

if (buffer[i] == '\n') line_num++;
if (buffer[i] == '/' && buffer[i+1] == '*') { comment++; } //MODIFY THIS LINE
if ((strrchr(charIn,buffer[i]) || quote) && !comment) {
temp[p] = buffer[i];
p++;
}
if (buffer[i] == '/' && buffer[i-1] == '*') { comment--; } //MODIFY THIS LINE
if (buffer[i] == '\"') {

Again, its in void Parser::LoadScript(int npcid, const char *zone) around line 990 or so.

Regards,

krich

Trumpcard
06-17-2003, 10:25 AM
Good change, catching it in cvs. Verify it in there tomorrow...

krich
06-20-2003, 07:07 PM
It's in, looks good, and works!

Thanks Trumpcard.

Regards,

krich