aboutsummaryrefslogtreecommitdiffstats
path: root/libparc/parc/algol/parc_Execution.c
diff options
context:
space:
mode:
Diffstat (limited to 'libparc/parc/algol/parc_Execution.c')
-rw-r--r--libparc/parc/algol/parc_Execution.c97
1 files changed, 97 insertions, 0 deletions
diff --git a/libparc/parc/algol/parc_Execution.c b/libparc/parc/algol/parc_Execution.c
new file mode 100644
index 00000000..8b31dcdb
--- /dev/null
+++ b/libparc/parc/algol/parc_Execution.c
@@ -0,0 +1,97 @@
+//
+// parc_Status.c
+// Libparc
+//
+//
+//
+#include <config.h>
+#include <stdio.h>
+
+#include "parc_Execution.h"
+
+/*
+ * A PARCExecution value is a unique thing which can have a string assigned to it.
+ *
+ * I want the function to be:
+ *
+ * A thing that returns an Execution
+ *
+ * Execution function() { }
+ *
+ * A thing that an Execution value can be
+ *
+ * Execution value = function;
+ */
+
+struct PARCExecution {
+ struct PARCExecution (*type)(char *format, ...);
+ char *message;
+};
+
+PARCExecution *PARCExecution_OK = &(PARCExecution) {
+ .message = "OK"
+};
+
+PARCExecution *PARCExecution_Timeout = &(PARCExecution) {
+ .message = "Timeout"
+};
+
+PARCExecution *PARCExecution_Interrupted = &(PARCExecution) {
+ .message = "Interrupted"
+};
+
+PARCExecution *PARCExecution_IOError = &(PARCExecution) {
+ .message = "I/O Error"
+};
+
+PARCExecution *
+parcExecution_OK(const char *format, ...)
+{
+ return PARCExecution_OK;
+}
+
+PARCExecution *
+parcExecution_Interrupted(const char *format, ...)
+{
+ return PARCExecution_Interrupted;
+}
+
+PARCExecution *
+parcExecution_IOError(const char *format, ...)
+{
+ return PARCExecution_IOError;
+}
+
+bool
+parcExecution_Is(const PARCExecution *exec, const PARCExecution *other)
+{
+ return (exec == other);
+}
+
+char *
+parcExecution_GetMessage(const PARCExecution *exec)
+{
+ return exec->message;
+}
+
+PARCExecution *
+bar()
+{
+ return PARCExecution_OK;
+}
+
+PARCExecution *
+baz()
+{
+ return parcExecution_OK("Nothing to say");
+}
+
+void
+foo()
+{
+ PARCExecution *x = bar();
+ PARCExecution *y = baz();
+
+ printf("%s\n", parcExecution_GetMessage(x));
+ printf("%s\n", parcExecution_GetMessage(y));
+}