summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'src/parameters')
-rw-r--r--src/parameters/CMakeLists.txt6
-rw-r--r--src/parameters/parameters.c100
-rw-r--r--src/parameters/parameters.h23
-rw-r--r--src/parameters/parameters_types.h19
4 files changed, 148 insertions, 0 deletions
diff --git a/src/parameters/CMakeLists.txt b/src/parameters/CMakeLists.txt
new file mode 100644
index 0000000..94e6337
--- /dev/null
+++ b/src/parameters/CMakeLists.txt
@@ -0,0 +1,6 @@
+set(
+ SRC_FILES ${SRC_FILES}
+ ${CMAKE_CURRENT_SOURCE_DIR}/parameters.c
+)
+set(SRC_FILES ${SRC_FILES} PARENT_SCOPE)
+
diff --git a/src/parameters/parameters.c b/src/parameters/parameters.c
new file mode 100644
index 0000000..24cbd68
--- /dev/null
+++ b/src/parameters/parameters.c
@@ -0,0 +1,100 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+
+#include "../core/index.h"
+
+#include "../error/error.h"
+
+#include "parameters.h"
+
+static int parse_markov_order
+(
+ struct JH_parameters param [const restrict static 1],
+ const char argv [const restrict]
+)
+{
+ long long int input;
+ const int old_errno = errno;
+
+ errno = 0;
+
+ input = strtoll(argv, (char **) NULL, 10);
+
+ if
+ (
+ (errno != 0)
+ || (input > (long long int) JH_INDEX_MAX)
+ || (input < 1)
+ )
+ {
+ JH_FATAL
+ (
+ stderr,
+ "Invalid or value for parameter 'MARKOV_ORDER', accepted "
+ "range is "
+ "[2, %lli] (integer).",
+ (long long int) JH_INDEX_MAX
+ );
+
+ errno = old_errno;
+
+ return -1;
+ }
+
+ param->markov_order = (JH_index) input;
+
+ errno = old_errno;
+
+ return 0;
+}
+
+enum JH_invocation_objective JH_parameters_initialize
+(
+ struct JH_parameters param [const restrict static 1],
+ int const argc,
+ const char * argv [const static argc]
+)
+{
+ param->session = (const char *) NULL;
+ param->markov_order = 2;
+
+ switch (argc)
+ {
+ case 3:
+ param->session = argv[1];
+
+ if (parse_markov_order(param, argv[2]) < 0)
+ {
+ return JH_PRINTS_HELP;
+ }
+ else
+ {
+ return JH_RUNS;
+ }
+
+ case 2:
+ param->session = argv[1];
+
+ return JH_CLEANS_UP;
+
+ default:
+ return JH_PRINTS_HELP;
+ }
+}
+
+const char * JH_parameters_get_session_name
+(
+ const struct JH_parameters param [const restrict static 1]
+)
+{
+ return param->session;
+}
+
+JH_index JH_parameters_get_markov_order
+(
+ const struct JH_parameters param [const restrict static 1]
+)
+{
+ return param->markov_order;
+}
diff --git a/src/parameters/parameters.h b/src/parameters/parameters.h
new file mode 100644
index 0000000..1cb9fd8
--- /dev/null
+++ b/src/parameters/parameters.h
@@ -0,0 +1,23 @@
+#ifndef _JH_CLI_PARAMETERS_H_
+#define _JH_CLI_PARAMETERS_H_
+
+#include "parameters_types.h"
+
+const char * JH_parameters_get_session_name
+(
+ const struct JH_parameters param [const restrict static 1]
+);
+
+JH_index JH_parameters_get_markov_order
+(
+ const struct JH_parameters param [const restrict static 1]
+);
+
+enum JH_invocation_objective JH_parameters_initialize
+(
+ struct JH_parameters param [const restrict static 1],
+ int const argc,
+ const char * argv [const static argc]
+);
+
+#endif
diff --git a/src/parameters/parameters_types.h b/src/parameters/parameters_types.h
new file mode 100644
index 0000000..7b2059b
--- /dev/null
+++ b/src/parameters/parameters_types.h
@@ -0,0 +1,19 @@
+#ifndef _JH_CLI_PARAMETERS_TYPES_H_
+#define _JH_CLI_PARAMETERS_TYPES_H_
+
+#include "../core/index_types.h"
+
+enum JH_invocation_objective
+{
+ JH_PRINTS_HELP,
+ JH_CLEANS_UP,
+ JH_RUNS
+};
+
+struct JH_parameters
+{
+ const char * restrict session;
+ JH_index markov_order;
+};
+
+#endif