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
vBulletin® v3.8.11, Copyright ©2000-2025, vBulletin Solutions Inc.