summaryrefslogtreecommitdiff
path: root/src/sf.skel
diff options
context:
space:
mode:
Diffstat (limited to 'src/sf.skel')
-rw-r--r--src/sf.skel/main.c116
-rw-r--r--src/sf.skel/state.c49
-rw-r--r--src/sf.skel/state.h19
3 files changed, 184 insertions, 0 deletions
diff --git a/src/sf.skel/main.c b/src/sf.skel/main.c
new file mode 100644
index 0000000..5460454
--- /dev/null
+++ b/src/sf.skel/main.c
@@ -0,0 +1,116 @@
+#include "../module/module.h"
+#include "state.h"
+
+char const *Usage = "usage: %1$s start [name] [configuration]\n"
+ " %1$s stop [name] [configuration] [data]\n"
+ " %1$s get-endpoint [name] [configuration] [data] [interface]\n"
+ "unsupported commands: cmd mod\n";
+
+static configuration Configuration;
+static data Data;
+static bool ConfigurationLoaded;
+static bool DataLoaded;
+
+// HELPERS
+
+static void
+Free_all(void)
+{
+ if(ConfigurationLoaded == true) Free_configuration(&Configuration);
+ if(DataLoaded == true) Free_data(&Data);
+}
+
+static void
+Load_configuration(ucl_object_t *root)
+{
+ char *Error = Parse_configuration(&Configuration, root, "");
+ if(Error != NULL)
+ {
+ fprintf(stderr, "%s: configuration error: %s\n", Arg0, Error);
+ free(Error);
+ Free_all();
+ exit(-1);
+ }
+ ConfigurationLoaded = true;
+}
+
+static void
+Load_data(ucl_object_t *root)
+{
+ char *Error = Parse_data(&Data, root, "");
+ if(Error != NULL)
+ {
+ fprintf(stderr, "%s: data error: %s\n", Arg0, Error);
+ free(Error);
+ Free_all();
+ exit(-1);
+ }
+ DataLoaded = true;
+ // TODO: check that data matches configuration
+}
+
+// COMMANDS
+
+int
+start(char const *Name, ucl_object_t *configuration)
+{
+ UNUSED(Name);
+ Load_configuration(configuration);
+ // Implement
+ if((true)) goto error;
+ jprint_state S;
+ bzero(&S, sizeof(S));
+ S.F = stdout;
+ Save_data(&S, &Data);
+ Free_all();
+ return 0;
+error:
+ Free_all();
+ return -1;
+}
+
+int
+stop(char const *Name, ucl_object_t *configuration, ucl_object_t *data)
+{
+ UNUSED(Name);
+ Load_configuration(configuration);
+ Load_data(data);
+ // Implement
+ if((true)) goto error;
+ Free_all();
+ return 0;
+error:
+ Free_all();
+ return -1;
+}
+
+int
+get_endpoint(char const *Name, ucl_object_t *configuration, ucl_object_t *data, char const *Interface)
+{
+ UNUSED(Name, Interface);
+ Load_configuration(configuration);
+ Load_data(data);
+ // Implement
+ Free_all();
+ return -1;
+}
+
+int
+cmd(char const *Name, ucl_object_t *configuration, ucl_object_t *data, size_t ArgCount, char **Arg)
+{
+ UNUSED(Name, ArgCount, Arg);
+ Load_configuration(configuration);
+ Load_data(data);
+ // Implement
+ usage();
+}
+
+int
+mod(char const *Name, ucl_object_t *configuration, ucl_object_t *data, size_t ArgCount, char **Arg)
+{
+ UNUSED(Name, ArgCount, Arg);
+ Load_configuration(configuration);
+ Load_data(data);
+ // Implement
+ usage();
+}
diff --git a/src/sf.skel/state.c b/src/sf.skel/state.c
new file mode 100644
index 0000000..3a1d297
--- /dev/null
+++ b/src/sf.skel/state.c
@@ -0,0 +1,49 @@
+#include "state.h"
+
+// FREE
+
+void
+Free_configuration(configuration *E)
+{
+ UNUSED(E);
+}
+
+void
+Free_data(data *E)
+{
+ UNUSED(E);
+}
+
+// PARSE
+
+char *
+Parse_configuration(configuration *E, ucl_object_t const *root, char const *Position)
+{
+ char *Error;
+ UCL_CHECK_ROOT(OBJECT);
+ UNUSED(E);
+ return NULL;
+error:
+ return Error;
+}
+
+char *
+Parse_data(data *E, ucl_object_t const *root, char const *Position)
+{
+ char *Error;
+ UCL_CHECK_ROOT(OBJECT);
+ UNUSED(E);
+ return NULL;
+error:
+ return Error;
+}
+
+// SAVE
+
+void
+Save_data(jprint_state *S, data const *E)
+{
+ JPrintObjectBegin(S);
+ UNUSED(E);
+ JPrintObjectEnd(S);
+}
diff --git a/src/sf.skel/state.h b/src/sf.skel/state.h
new file mode 100644
index 0000000..9f52a2b
--- /dev/null
+++ b/src/sf.skel/state.h
@@ -0,0 +1,19 @@
+#pragma once
+
+#include "../jprint.h"
+
+struct
+{
+} typedef configuration;
+
+struct
+{
+} typedef data;
+
+void Free_configuration(configuration *);
+void Free_data(data *);
+
+char *Parse_configuration(configuration *, ucl_object_t const *, char const *Position);
+char *Parse_data(data *, ucl_object_t const *, char const *Position);
+
+void Save_data(jprint_state *, data const *);