]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/config.cpp
Made it so missing directives are found on a config file load.
[irc/gameservirc.git] / gameserv / config.cpp
index 4481832e3b33bd510cf7906fcd6e7d525a83813b..21088cdc6f9b959d4165268b71f152c7becc2148 100644 (file)
@@ -71,10 +71,39 @@ void unload_config_file()
 int load_config_file(char *config)
 {
     char *buf, *directive, *value;
-    buf = new char[1024];
+    #define numdirectives 15
 
     unload_config_file();
 
+    struct DIRECTIVE {
+       bool done;
+       char *desc;
+    };
+
+    DIRECTIVE directives[numdirectives];
+
+     directives[0].desc = "s_GameServ - GameServ Nickname";
+     directives[1].desc = "GSHOST - GameServ Hostname";
+     directives[2].desc = "GSIDENT - GameServ Ident";
+     directives[3].desc = "SERVERNAME - Pseudo Server's Name";
+     directives[4].desc = "C_FOREST - Forest Channel";
+     directives[5].desc = "C_FORESTTOPIC - Topic for the Forest Channel";
+     directives[6].desc = "REMOTESERVER - Server for gameserv to connect to (ip or hostname)";
+     directives[7].desc = "REMOTEPORT - Port on the remote server to connect to";
+     directives[8].desc = "REMOTEPASS - Password on the remote server";
+     directives[9].desc = "PLAYERDATA - File to store the player saves in";
+    directives[10].desc = "MONSTERDATA - File to load the monsters from";
+    directives[11].desc = "ADMINPASS - Password to identify as an admin with";
+    directives[12].desc = "WELCOMEDELAY - Delay (in seconds) to wait before welcoming new users to the network";
+    directives[13].desc = "FORESTFIGHTS - Number of forest fights players get every day";
+    directives[14].desc = "UPDATEPERIOD - Number of seconds between every player data save";
+    directives[15].desc = "WELCOMEMSG - Message to send to new users on the network";
+
+    for (int count = 0; count < numdirectives; count++)
+    {
+       directives[count].done = false;
+    }
+
     ifstream infile;
     infile.open(config);
     if (infile.fail())
@@ -84,6 +113,8 @@ int load_config_file(char *config)
        return 0;
     }
 
+    buf = new char[1024];
+
     while (infile.getline(buf, 1024, '\n'))
     {
        #ifdef DEBUGMODE
@@ -101,6 +132,7 @@ int load_config_file(char *config)
            log("You should read the entire %s file!", config);
            cerr << "You should read the entire " << config << " file!" 
                 << endl;
+           delete []buf;
            exit(0);
        }
        if (stricmp(directive, "S_GAMESERV") == 0)
@@ -108,93 +140,109 @@ int load_config_file(char *config)
            value = strtok(NULL, " ");
            s_GameServ = new char[strlen(value) + 1];
            strcpy(s_GameServ, value);
+           directives[0].done = true;
        }
        else if (stricmp(directive, "GSHOST") == 0)
        {
            value = strtok(NULL, " ");
            gshost = new char[strlen(value) + 1];
            strcpy(gshost, value);
+           directives[1].done = true;
        }
        else if (stricmp(directive, "GSIDENT") == 0)
        {
            value = strtok(NULL, " ");
            gsident = new char[strlen(value) + 1];
            strcpy(gsident, value);
+           directives[2].done = true;
        }
        else if (stricmp(directive, "SERVERNAME") == 0)
        {
            value = strtok(NULL, " ");
            servername = new char[strlen(value) + 1];
            strcpy(servername, value);
+           directives[3].done = true;
        }
        else if (stricmp(directive, "C_FOREST") == 0)
        {
            value = strtok(NULL, " ");
            c_Forest = new char[strlen(value) + 1];
            strcpy(c_Forest, value);
+           directives[4].done = true;
        }
        else if (stricmp(directive, "C_FORESTTOPIC") == 0)
        {
            value = strtok(NULL, "");
            c_ForestTopic = new char[strlen(value) + 1];
            strcpy(c_ForestTopic, value);
+           directives[5].done = true;
        }
        else if (stricmp(directive, "REMOTESERVER") == 0)
        {
            value = strtok(NULL, " ");
            remoteserver = new char[strlen(value) + 1];
            strcpy(remoteserver, value);
+           directives[6].done = true;
        }
        else if (stricmp(directive, "REMOTEPORT") == 0)
        {
            value = strtok(NULL, " ");
            remoteport = new char[strlen(value) + 1];
            strcpy(remoteport, value);
+           directives[7].done = true;
        }
        else if (stricmp(directive, "REMOTEPASS") == 0)
        {
            value = strtok(NULL, "");
            remotepass = new char[strlen(value) + 1];
            strcpy(remotepass, value);
+           directives[8].done = true;
        }
        else if (stricmp(directive, "PLAYERDATA") == 0)
        {
            value = strtok(NULL, "");
            playerdata = new char[strlen(value) + 1];
            strcpy(playerdata, value);
+           directives[9].done = true;
        }
        else if (stricmp(directive, "MONSTERDATA") == 0)
        {
            value = strtok(NULL, "");
            monsterdata = new char[strlen(value) + 1];
            strcpy(monsterdata, value);
+           directives[10].done = true;
        }
        else if (stricmp(directive, "ADMINPASS") == 0)
        {
            value = strtok(NULL, "");
            adminpass = new char[strlen(value) + 1];
            strcpy(adminpass, value);
+           directives[11].done = true;
        }
        else if (stricmp(directive, "WELCOMEDELAY") == 0)
        {
            value = strtok(NULL, " ");
            welcomedelay = stringtoint(value);
+           directives[12].done = true;
        }
        else if (stricmp(directive, "FORESTFIGHTS") == 0)
        {
            value = strtok(NULL, " ");
            forestfights = stringtoint(value);
+           directives[13].done = true;
        }
        else if (stricmp(directive, "UPDATEPERIOD") == 0)
        {
            value = strtok(NULL, " ");
            updateperiod = stringtoint(value);
+           directives[14].done = true;
        }
        else if (stricmp(directive, "WELCOMEMSG") == 0)
        {
            value = strtok(NULL, "");
            welcomemsg = new char[strlen(value) + 1];
            strcpy(welcomemsg, value);
+           directives[15].done = true;
        }
        else
        {
@@ -208,5 +256,16 @@ int load_config_file(char *config)
     }
 delete [] buf;
 infile.close();
-return 1;
+
+    int nonemissing = 1;
+    for (int count2 = 0; count2 < numdirectives; count2++)
+    {
+       if (!directives[count2].done)
+       {
+           cerr << "Missing config directive: " << directives[count2].desc << endl;
+           nonemissing = 0;
+       }
+    }
+
+    return nonemissing;
 }