| summaryrefslogtreecommitdiff | 
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-12-31 15:51:05 +0100 | 
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-12-31 15:51:05 +0100 | 
| commit | 63016ce5c71019de315434de3e91adbf535d4986 (patch) | |
| tree | b2368aecbbc790a600f7dfebfaabc8c28fa806b0 /src/config | |
| parent | b9952b4938da95de07bff748cfd6d2c7e8471796 (diff) | |
Still working on it...
Diffstat (limited to 'src/config')
| -rw-r--r-- | src/config/config_file.c | 149 | ||||
| -rw-r--r-- | src/config/parameters/parameters.c (renamed from src/config/parameters.c) | 208 | ||||
| -rw-r--r-- | src/config/parameters/parameters_accessors.c | 60 | 
3 files changed, 217 insertions, 200 deletions
| diff --git a/src/config/config_file.c b/src/config/config_file.c index ad060a5..2e5ef0c 100644 --- a/src/config/config_file.c +++ b/src/config/config_file.c @@ -1,3 +1,4 @@ +/**** POSIX *******************************************************************/  #include <errno.h>  #include <string.h>  #include <stdio.h> @@ -6,38 +7,27 @@  #include <sys/time.h> -#include "error.h" -#include "pervasive.h" -#include "axis.h" -#include "config.h" +/**** RELABSD *****************************************************************/ +#include <relabsd/debug.h> + +#include <relabsd/config/config_file.h>  #ifndef RELABSD_OPTION_MAX_SIZE     #define RELABSD_OPTION_MAX_SIZE 64  #endif -/* - * "errno is never set to zero by any system call or library function." - * This file makes use of this, by setting it to zero and checking if - * it was modified after calling an function (I'm guessing this is common - * practice, but I think it's worth explaining). - * Following the principle of least astonishment, if a function sets errno to - * zero, it will not return before setting it back either to its previous - * value or to a arbitrary nonzero value. - */ +/******************************************************************************/ +/**** LOCAL FUNCTIONS *********************************************************/ +/******************************************************************************/  /*   * Returns -1 on (fatal) error,   *          0 on EOF,   *          1 on newline.   */ -static int reach_next_line_or_eof (FILE * const f) +static int reach_next_line_or_eof (FILE f [const restrict static 1])  { -   int prev_errno;     char c; -   prev_errno = errno; - -   errno = 0; -     c = (char) getc(f);     while ((c != '\n') && c != EOF) @@ -45,21 +35,22 @@ static int reach_next_line_or_eof (FILE * const f)        c = (char) getc(f);     } -   if (errno != 0) +   if (ferror(f))     { -      RELABSD_FATAL +      /* +       * The 'ferror' function's manual specifically states that it does not +       * sets errno. There is no mention of errno in the 'getc' function's +       * either, so I am assuming that errno cannot be used to indicate the +       * error. +       */ +      RELABSD_S_FATAL        ( -         "[CONFIG] Error while attempting to reach EOF or next line: %s.", -         strerror(errno) +         "[CONFIG] Error while attempting to reach EOF or next line: %s."        ); -      errno = prev_errno; -        return -1;     } -   errno = prev_errno; -     if (c == EOF)     {        return 0; @@ -643,6 +634,7 @@ static int parse_options     return 0;  } +  int relabsd_config_parse  (     struct relabsd_config * const conf, @@ -681,106 +673,6 @@ int relabsd_config_parse     return 0;  } -static int direct_filter -( -   struct relabsd_config_axis * const axis, -   int * const value -) -{ -   if (abs(*value - axis->previous_value) <= axis->fuzz) -   { -      if (axis->option[RELABSD_REAL_FUZZ_OPTION]) -      { -         axis->previous_value = *value; -      } - -      return -1; -   } - -   if (*value < axis->min) -   { -      *value = axis->min; -   } -   else if (*value > axis->max) -   { -      *value = axis->max; -   } -   else if (abs(*value) <= axis->flat) -   { -      *value = 0; -   } - -   if (*value == axis->previous_value) -   { -      return -1; -   } - -   axis->previous_value = *value; - -   return 1; -} - -static int rel_to_abs_filter -( -   struct relabsd_config_axis * const axis, -   int * const value -) -{ -   long int guard; - -   guard = (((long int) axis->previous_value) + ((long int) *value)); - -   if (guard < ((long int) INT_MIN)) -   { -      guard = ((long int) INT_MIN); -   } -   else if (guard > ((long int) INT_MAX)) -   { -      guard = ((long int) INT_MAX); -   } - -   *value = (int) guard; - -   if (axis->option[RELABSD_FRAMED_OPTION]) -   { -      if (*value < axis->min) -      { -         *value = axis->min; -      } -      else if (*value > axis->max) -      { -         *value = axis->max; -      } - -      if (*value == axis->previous_value) -      { -         return 0; -      } - -      axis->previous_value = *value; - -      return 1; -   } -   else -   { -      if (*value == axis->previous_value) -      { -         return 0; -      } - -      axis->previous_value = *value; - -      if ((*value < axis->min) || (*value > axis->max)) -      { -         return 0; -      } -      else -      { -         return 1; -      } -   } -} -  int relabsd_config_filter  (     struct relabsd_config * const conf, @@ -805,6 +697,9 @@ int relabsd_config_filter     }  } +/******************************************************************************/ +/**** EXPORTED FUNCTIONS ******************************************************/ +/******************************************************************************/  void relabsd_config_get_absinfo  (     const struct relabsd_config * const conf, diff --git a/src/config/parameters.c b/src/config/parameters/parameters.c index 5e79fa2..c8db4fa 100644 --- a/src/config/parameters.c +++ b/src/config/parameters/parameters.c @@ -14,50 +14,6 @@  /******************************************************************************/  /**** LOCAL FUNCTIONS *********************************************************/  /******************************************************************************/ -static void print_usage (const char exec [const restrict static 1]) -{ -   printf -   ( -      "USAGE: %s <MODE> [<OPTION>+]\n\n" - -      "<MODE>:\n" -      "\t[-? | --compatible] <physical_device_file>:\n" -         "\t\tDevice compatibility test.\n\n" - -      "\t[-c | --client] <server_file>:\n" -         "\t\tSends the commands to a given server instance.\n\n" - -      "\t[-s | --server] <server_file> <physical_device_file>:\n" -         "\t\tCreates a named server instance.\n\n" - -      "\t[-1 | --self] <physical_device_file>:\n" -         "\t\tCreates a unnamed server instance.\n\n" - -      "<OPTION>:\n" -      "\t[-d | --daemon]:\n" -         "\t\tRuns server instance in the background.\n\n" - -      "\t[-n | --name] <relabsd_device_name>:\n" -         "\t\tNames the virtual device.\n\n" - -      "\t[-t | --timeout] <timeout_in_ms>:\n" -         "\t\tSets a zeroing timeout (0 to disable).\n\n" - -      "\t[-a | --axis] <name> <min> <max> <fuzz> <flat> <resolution> " -         "<options>:\n" -         "\t\t(Re)defines an axis.\n\n" - -      "\t[-m | --mod-axis] <name> <min> <max> <fuzz> <flat> <resolution> " -         "<signed_options>:\n" -         "\t\tModifies an axis (use + and - signs for the options).\n\n" - -      "\t[-f | --config] <config_file>" -         "<options>:\n" -         "\t\t(Re)defines an axis.\n", -      exec -   ); -} -  static int parse_axis  (     const int argc, @@ -135,14 +91,14 @@ int relabsd_parameters_parse_execution_mode  (     const int argc,     const char * argv [const restrict static argc], -   struct relabsd_parameters params [const restrict static 1] +   struct relabsd_parameters parameters [const restrict static 1]  )  {     RELABSD_S_DEBUG(RELABSD_DEBUG_PROGRAM_FLOW, "Parsing exec mode...");     if (argc < 3)     { -      print_usage(argv[0]); +      relabsd_parameters_print_usage(argv[0]);        return -1;     } @@ -153,9 +109,9 @@ int relabsd_parameters_parse_execution_mode        || RELABSD_STRING_EQUALS("--compatibility", argv[1])     )     { -      params->mode = RELABSD_PARAMETERS_COMPATIBILITY_TEST_MODE; -      params->physical_device_name = argv[2]; -      params->read_argc = 2; +      parameters->mode = RELABSD_PARAMETERS_COMPATIBILITY_TEST_MODE; +      parameters->physical_device_name = argv[2]; +      parameters->read_argc = 2;     }     else if     ( @@ -163,10 +119,10 @@ int relabsd_parameters_parse_execution_mode        || RELABSD_STRING_EQUALS("--client", argv[1])     )     { -      params->mode = RELABSD_PARAMETERS_CLIENT_MODE; -      params->communication_node_name = argv[2]; -      params->physical_device_name = (char *) NULL; -      params->read_argc = 2; +      parameters->mode = RELABSD_PARAMETERS_CLIENT_MODE; +      parameters->communication_node_name = argv[2]; +      parameters->physical_device_name = (const char *) NULL; +      parameters->read_argc = 2;     }     else if     ( @@ -174,10 +130,10 @@ int relabsd_parameters_parse_execution_mode        || RELABSD_STRING_EQUALS("--server", argv[1])     )     { -      params->mode = RELABSD_PARAMETERS_SERVER_MODE; -      params->communication_node_name = argv[2]; -      params->physical_device_name = argv[3]; -      params->read_argc = 3; +      parameters->mode = RELABSD_PARAMETERS_SERVER_MODE; +      parameters->communication_node_name = argv[2]; +      parameters->physical_device_name = argv[3]; +      parameters->read_argc = 3;     }     else if     ( @@ -185,14 +141,14 @@ int relabsd_parameters_parse_execution_mode        || RELABSD_STRING_EQUALS("--self", argv[1])     )     { -      params->mode = RELABSD_PARAMETERS_SERVER_MODE; -      params->communication_node_name = (char *) NULL; -      params->physical_device_name = argv[2]; -      params->read_argc = 2; +      parameters->mode = RELABSD_PARAMETERS_SERVER_MODE; +      parameters->communication_node_name = (char *) NULL; +      parameters->physical_device_name = argv[2]; +      parameters->read_argc = 2;     }     else     { -      print_usage(argv[0]); +      relabsd_parameters_print_usage(argv[0]);        return -1;     } @@ -205,15 +161,15 @@ int relabsd_parameters_parse_execution_mode  int relabsd_parameters_parse_options  (     const int argc, -   const char * argv [const restrict static argc], -   struct relabsd_parameters params [const restrict static 1] +   const char * const argv [const restrict static argc], +   struct relabsd_parameters parameters [const restrict static 1]  )  {     int i;     RELABSD_S_DEBUG(RELABSD_DEBUG_PROGRAM_FLOW, "Parsing options..."); -   set_default_options(params); +   relabsd_parameters_initialize_options(parameters);     /*      * i = (params->read_argc + 1) because reading 2 params is actually reaching @@ -252,7 +208,7 @@ int relabsd_parameters_parse_options           }           ++i; -         params->name = argv[i]; +         params->device_name = argv[i];        }        else if        ( @@ -263,7 +219,7 @@ int relabsd_parameters_parse_options           if (argc == i)           {              RELABSD_FATAL("Missing value for \"%s\" <OPTION>.", argv[i]); -            print_usage(argv[0]); +            relabsd_parameters_print_usage(argv[0]);              return -1;           } @@ -284,7 +240,7 @@ int relabsd_parameters_parse_options                 INT_MAX              ); -            print_usage(argv[0]); +            relabsd_parameters_print_usage(argv[0]);              return -1;           } @@ -298,7 +254,7 @@ int relabsd_parameters_parse_options           if (argc == i)           {              RELABSD_FATAL("Missing values for \"%s\" <OPTION>.", argv[i]); -            print_usage(argv[0]); +            relabsd_parameters_print_usage(argv[0]);              return -1;           } @@ -307,7 +263,7 @@ int relabsd_parameters_parse_options           if (parse_axis((argc - i), (argv + i), params->axes) < 0)           { -            print_usage(argv[0]); +            relabsd_parameters_print_usage(argv[0]);              return -1;           } @@ -321,18 +277,18 @@ int relabsd_parameters_parse_options           if (argc == i)           {              RELABSD_FATAL("Missing value for \"%s\" <OPTION>.", argv[i]); -            print_usage(argv[0]); +            relabsd_parameters_print_usage(argv[0]);              return -1;           }           ++i; -         params->config_file = argv[i]; +         params->configuration_file = argv[i];        }        else        {           RELABSD_FATAL("Unknown <OPTION> \"%s\".", argv[i]); -         print_usage(argv[0]); +         relabsd_parameters_print_usage(argv[0]);           return -1;        } @@ -342,3 +298,109 @@ int relabsd_parameters_parse_options     return 0;  } + +int relabsd_parameters_argument_count_for +( +   const char option [const restrict static 1], +   int result [const restrict static 1] +) +{ +   if +   ( +      RELABSD_STRING_EQUALS("-n", option) +      || RELABSD_STRING_EQUALS("--name", option) +   ) +   { +      *result = 0; +   } +   else if +   ( +      RELABSD_STRING_EQUALS("-n", option) +      || RELABSD_STRING_EQUALS("--name", option) +   ) +   { +      *result = 1; +   } +   else if +   ( +      RELABSD_STRING_EQUALS("-t", option) +      || RELABSD_STRING_EQUALS("--timeout", option) +   ) +   { +      *result = 1; +   } +   else if +   ( +      RELABSD_STRING_EQUALS("-a", option) +      || RELABSD_STRING_EQUALS("--axis", option) +   ) +   { +      *result = 7; +   } +   else if +   ( +      RELABSD_STRING_EQUALS("-m", option) +      || RELABSD_STRING_EQUALS("--mod-axis", option) +   ) +   { +      *result = 7; +   } +   else if +   ( +      RELABSD_STRING_EQUALS("-f", option) +      || RELABSD_STRING_EQUALS("--config", option) +   ) +   { +      *result = 1; +   } +   else +   { +      return -1; +   } + +   return 0; +} + +void relabsd_parameters_print_usage (const char exec [const restrict static 1]) +{ +   printf +   ( +      "USAGE: %s <MODE> [<OPTION>+]\n\n" + +      "<MODE>:\n" +      "\t[-? | --compatible] <physical_device_file>:\n" +         "\t\tDevice compatibility test.\n\n" + +      "\t[-c | --client] <server_file>:\n" +         "\t\tSends the commands to a given server instance.\n\n" + +      "\t[-s | --server] <server_file> <physical_device_file>:\n" +         "\t\tCreates a named server instance.\n\n" + +      "\t[-1 | --self] <physical_device_file>:\n" +         "\t\tCreates a unnamed server instance.\n\n" + +      "<OPTION>:\n" +      "\t[-d | --daemon]:\n" +         "\t\tRuns server instance in the background.\n\n" + +      "\t[-n | --name] <relabsd_device_name>:\n" +         "\t\tNames the virtual device.\n\n" + +      "\t[-t | --timeout] <timeout_in_ms>:\n" +         "\t\tSets a zeroing timeout (0 to disable).\n\n" + +      "\t[-a | --axis] <name> <min> <max> <fuzz> <flat> <resolution> " +         "<options>:\n" +         "\t\t(Re)defines an axis.\n\n" + +      "\t[-m | --mod-axis] <name> <min> <max> <fuzz> <flat> <resolution> " +         "<signed_options>:\n" +         "\t\tModifies an axis (use + and - signs for the options).\n\n" + +      "\t[-f | --config] <config_file>" +         "<options>:\n" +         "\t\t(Re)defines an axis.\n", +      exec +   ); +} diff --git a/src/config/parameters/parameters_accessors.c b/src/config/parameters/parameters_accessors.c new file mode 100644 index 0000000..e53cfe0 --- /dev/null +++ b/src/config/parameters/parameters_accessors.c @@ -0,0 +1,60 @@ +#include <relabsd/config/parameters.h> + +/******************************************************************************/ +/**** LOCAL FUNCTIONS *********************************************************/ +/******************************************************************************/ + +/******************************************************************************/ +/**** EXPORTED FUNCTIONS ******************************************************/ +/******************************************************************************/ +void relabsd_parameters_initialize_options +( +   const struct relabsd_parameters parameters [const restrict static 1] +) +{ +   parameters->run_as_daemon = 0; +   parameters->communication_node_name = (const char *) NULL; +   parameters->device_name = (const char *) NULL; +   parameters->physical_device_file_name = (const char *) NULL; +   parameters->configuration_file = (const char *) NULL; +} + +int relabsd_parameters_get_run_as_daemon +( +   const struct relabsd_parameters parameters [const restrict static 1] +) +{ +   return parameters->run_as_daemon; +} + +const char * relabsd_parameters_get_communication_node_name +( +   const struct relabsd_parameters parameters [const restrict static 1] +) +{ +   return parameters->communication_node_name; +} + +const char * relabsd_parameters_get_device_name +( +   const struct relabsd_parameters parameters [const restrict static 1] +) +{ +   return parameters->device_name; +} + +const char * relabsd_parameters_get_physical_device_file_name +( +   const struct relabsd_parameters parameters [const restrict static 1] +) +{ +   return parameters->physical_device_file_name; +} + +enum relabsd_parameters_run_mode relabsd_parameters_get_execution_mode +( +   const struct relabsd_parameters parameters [const restrict static 1] +) +{ +   return parameters->mode; +} | 


