EQEmulator Forums

EQEmulator Forums (https://www.eqemulator.org/forums/index.php)
-   Archive::Development (https://www.eqemulator.org/forums/forumdisplay.php?f=621)
-   -   Comment Snarfer in Parser.cpp (https://www.eqemulator.org/forums/showthread.php?t=7662)

krich 06-03-2003 06:10 AM

Comment Snarfer in Parser.cpp
 
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:

Code:

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:

Code:

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:

Code:

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:

Code:

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


All times are GMT -4. The time now is 05:19 PM.

Powered by vBulletin®, Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.