X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;ds=sidebyside;f=src%2Fcommand_db.c;h=fd7f4dc7a2f78ae431ebd0bf37ee52bfda574da1;hb=76bcc7383e9b111e02e83c2d822633cf1be88aab;hp=0d4cb944d56cc94cba117ae6d06a1965525d6429;hpb=b97faa0009abc699ab7bff7bcc3221b8b3104e12;p=plomrogue
diff --git a/src/command_db.c b/src/command_db.c
index 0d4cb94..fd7f4dc 100644
--- a/src/command_db.c
+++ b/src/command_db.c
@@ -1,34 +1,35 @@
/* command.c */
#include "command_db.h"
-#include /* for malloc() */
-#include /* for FILE typedef, fopen(), fclose(), fgets() */
+#include /* for free() */
+#include /* for FILE typedef, fgets() */
#include /* for uint8_t */
#include /* for strlen(), strtok() */
-#include "main.h" /* for World struct */
-#include "rexit.h" /* for exit_err() */
-#include "misc.h" /* for textfile_sizes() */
+#include "main.h" /* for world global */
+#include "readwrite.h" /* for textfile_sizes(), try_fopen(), try_fclose() */
+#include "misc.h" /* for try_malloc() */
+#include "rexit.h" /* exit_trouble() */
-/* Build string pointed to by "ch_ptr" from next token delimited by "delim",
- * exit_err() with "err" as error message on malloc() failure.
- */
-static void copy_tokenized_string(struct World * world,
- char ** ch_ptr, char * delim, char * err)
+/* Build string pointed to by "ch_ptr" from next token delimited by "delim". */
+static void copy_tokenized_string(char ** ch_ptr, char * delim);
+
+
+
+static void copy_tokenized_string(char ** ch_ptr, char * delim)
{
+ char * f_name = "copy_tokenized_string()";
char * dsc_ptr = strtok(NULL, delim);
- * ch_ptr = malloc(strlen(dsc_ptr) + 1);
- exit_err(NULL == * ch_ptr, world, err);
+ * ch_ptr = try_malloc(strlen(dsc_ptr) + 1, f_name);
memcpy(* ch_ptr, dsc_ptr, strlen(dsc_ptr) + 1);
}
-extern uint8_t is_command_id_shortdsc(struct World * world,
- uint8_t id, char * shortdsc)
+extern uint8_t is_command_id_shortdsc(uint8_t id, char * shortdsc)
{
- struct Command * cmd_ptr = world->cmd_db->cmds;
+ struct Command * cmd_ptr = world.cmd_db->cmds;
while (1)
{
if (id == cmd_ptr->id)
@@ -45,9 +46,9 @@ extern uint8_t is_command_id_shortdsc(struct World * world,
-extern uint8_t get_command_id(struct World * world, char * dsc_short)
+extern uint8_t get_command_id(char * dsc_short)
{
- struct Command * cmd_ptr = world->cmd_db->cmds;
+ struct Command * cmd_ptr = world.cmd_db->cmds;
while (1)
{
if (0 == strcmp(dsc_short, cmd_ptr->dsc_short))
@@ -60,9 +61,9 @@ extern uint8_t get_command_id(struct World * world, char * dsc_short)
-extern char * get_command_longdsc(struct World * world, char * dsc_short)
+extern char * get_command_longdsc(char * dsc_short)
{
- struct Command * cmd_ptr = world->cmd_db->cmds;
+ struct Command * cmd_ptr = world.cmd_db->cmds;
while (1)
{
if (0 == strcmp(dsc_short, cmd_ptr->dsc_short))
@@ -75,50 +76,48 @@ extern char * get_command_longdsc(struct World * world, char * dsc_short)
-extern void init_command_db(struct World * world)
+extern void init_command_db()
{
- char * err_o = "Trouble in init_cmds() with fopen() on file 'commands'.";
- char * err_s = "Trouble in init_cmds() with textfile_sizes().";
- char * err_m = "Trouble in init_cmds() with malloc().";
- char * err_c = "Trouble in init_cmds() with fclose() on file 'commands'.";
+ char * f_name = "init_command_db()";
char * path = "config/commands";
- FILE * file = fopen(path, "r");
- exit_err(NULL == file, world, err_o);
+ FILE * file = try_fopen(path, "r", f_name);
uint16_t lines, linemax;
- exit_err(textfile_sizes(file, &linemax, &lines), world, err_s);
+ uint8_t test = textfile_sizes(file, &linemax, &lines);
+ exit_trouble(test, f_name, "textfile_sizes()");
+ char line[linemax + 1];
- char * line = malloc(linemax);
- exit_err(NULL == line, world, err_m);
- struct Command * cmds = malloc(lines * sizeof(struct Command));
- exit_err(NULL == line, world, err_m);
+ struct Command * cmds = try_malloc(lines * sizeof(struct Command), f_name);
uint8_t i = 0;
- while (fgets(line, linemax, file))
+ while (fgets(line, linemax + 1, file))
{
+ if ('\n' == line[0] || 0 == line[0])
+ {
+ break;
+ }
cmds[i].id = atoi(strtok(line, " "));
- copy_tokenized_string(world, &cmds[i].dsc_short, " ", err_m);
- copy_tokenized_string(world, &cmds[i].dsc_long, "\n", err_m);
+ copy_tokenized_string(&cmds[i].dsc_short, " ");
+ copy_tokenized_string(&cmds[i].dsc_long, "\n");
i++;
}
- free(line);
- exit_err(fclose(file), world, err_c);
+ try_fclose(file, f_name);
- world->cmd_db = malloc(sizeof(struct CommandDB));
- world->cmd_db->cmds = cmds;
- world->cmd_db->n = lines;
+ world.cmd_db = try_malloc(sizeof(struct CommandDB), f_name);
+ world.cmd_db->cmds = cmds;
+ world.cmd_db->n = lines;
}
-extern void free_command_db(struct World * world)
+extern void free_command_db()
{
uint8_t i = 0;
- while (i < world->cmd_db->n)
+ while (i < world.cmd_db->n)
{
- free(world->cmd_db->cmds[i].dsc_short);
- free(world->cmd_db->cmds[i].dsc_long);
+ free(world.cmd_db->cmds[i].dsc_short);
+ free(world.cmd_db->cmds[i].dsc_long);
i++;
}
- free(world->cmd_db->cmds);
- free(world->cmd_db);
+ free(world.cmd_db->cmds);
+ free(world.cmd_db);
}