X-Git-Url: https://plomlompom.com/repos/foo.html?a=blobdiff_plain;f=src%2Fclient%2Fcommand_db.c;h=7d35582dda258abb9472dcee87ce8bd7655d7e8d;hb=0b7798939c0193fd794985b503737e40d8602313;hp=4835392318ae2e161b54344fdaa6a32ecd64cb00;hpb=dd9d65ee727ac7e95801da0f8b5bae7009811802;p=plomrogue
diff --git a/src/client/command_db.c b/src/client/command_db.c
index 4835392..7d35582 100644
--- a/src/client/command_db.c
+++ b/src/client/command_db.c
@@ -1,6 +1,7 @@
/* src/client/command_db.c */
#include "command_db.h"
+#include /* NULL */
#include /* uint8_t, uint32_t */
#include /* FILE */
#include /* free() */
@@ -8,72 +9,46 @@
#include "../common/readwrite.h" /* try_fopen(), try_fclose(), try_fgets()
* textfile_sizes()
*/
+#include "../common/rexit.h" /* for exit_err() */
#include "../common/try_malloc.h" /* try_malloc() */
#include "cleanup.h" /* set_cleanup_flag() */
#include "world.h" /* global world */
-/* Build string pointed to by "ch_ptr" from next token delimited by "delim". */
-static void copy_tokenized_string(char ** ch_ptr, char * delim);
+/* Point "ch_ptr" to next strtok() string in "line" delimited by "delim".*/
+static void copy_tokenized_string(char * line, char ** ch_ptr, char * delim);
-static void copy_tokenized_string(char ** ch_ptr, char * delim)
+static void copy_tokenized_string(char * line, char ** ch_ptr, char * delim)
{
char * f_name = "copy_tokenized_string()";
- char * dsc_ptr = strtok(NULL, delim);
+ char * dsc_ptr = strtok(line, delim);
* 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(uint8_t id, char * shortdsc)
+extern struct Command * get_command(char * dsc_short)
{
struct Command * cmd_ptr = world.cmd_db.cmds;
- while (1)
- {
- if (id == cmd_ptr->id)
- {
- if (strcmp(shortdsc, cmd_ptr->dsc_short))
- {
- return 0;
- }
- return 1;
- }
- cmd_ptr = &cmd_ptr[1];
- }
-}
-
-
-
-extern uint8_t get_command_id(char * dsc_short)
-{
- struct Command * cmd_ptr = world.cmd_db.cmds;
- while (1)
- {
- if (0 == strcmp(dsc_short, cmd_ptr->dsc_short))
- {
- return cmd_ptr->id;
- }
- cmd_ptr = &cmd_ptr[1];
- }
-}
-
-
-
-extern char * get_command_longdsc(char * dsc_short)
-{
- struct Command * cmd_ptr = world.cmd_db.cmds;
- while (1)
+ uint8_t i = 0;
+ while (i < world.cmd_db.n)
{
if (0 == strcmp(dsc_short, cmd_ptr->dsc_short))
{
- return cmd_ptr->dsc_long;
+ break;
}
cmd_ptr = &cmd_ptr[1];
+ i++;
}
+ char * err_start = "get_command_data() failed on request for: ";
+ char err[strlen(err_start) + strlen(dsc_short) + 1];
+ sprintf(err, "%s%s", err_start, dsc_short);
+ exit_err(i == world.cmd_db.n, err);
+ return cmd_ptr;
}
@@ -88,15 +63,23 @@ extern void init_command_db()
char line[linemax + 1];
world.cmd_db.cmds = try_malloc(lines * sizeof(struct Command), f_name);
uint8_t i = 0;
+ char * delim = " ";
while (try_fgets(line, linemax + 1, file, f_name))
{
if ('\n' == line[0] || 0 == line[0])
{
break;
}
- world.cmd_db.cmds[i].id = atoi(strtok(line, " "));
- copy_tokenized_string(&world.cmd_db.cmds[i].dsc_short, " ");
- copy_tokenized_string(&world.cmd_db.cmds[i].dsc_long, "\n");
+ copy_tokenized_string(line, &world.cmd_db.cmds[i].dsc_short, delim);
+ copy_tokenized_string(NULL, &world.cmd_db.cmds[i].server_msg, delim);
+ if (!strcmp("0", world.cmd_db.cmds[i].server_msg))
+ {
+ free(world.cmd_db.cmds[i].server_msg);
+ world.cmd_db.cmds[i].server_msg = NULL;
+ }
+ char * arg_string = strtok(NULL, delim);
+ world.cmd_db.cmds[i].arg = arg_string[0];
+ copy_tokenized_string(NULL, &world.cmd_db.cmds[i].dsc_long, "\n");
i++;
}
try_fclose(file, f_name);
@@ -113,6 +96,7 @@ extern void free_command_db()
{
free(world.cmd_db.cmds[i].dsc_short);
free(world.cmd_db.cmds[i].dsc_long);
+ free(world.cmd_db.cmds[i].server_msg);
i++;
}
free(world.cmd_db.cmds);