diff libcommon/be_init.c @ 9:c9ef9e91dd8e

new libcommon, initial version
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 14 Mar 2021 06:55:38 +0000
parents
children e2ef4b8e4136
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/libcommon/be_init.c	Sun Mar 14 06:55:38 2021 +0000
@@ -0,0 +1,59 @@
+/*
+ * This module is responsible for collecting the initial info
+ * strings emitted by the back end.
+ */
+
+#include <ctype.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <strings.h>
+
+extern FILE *rpipeF;
+
+#define	MAX_INIT_STRING	254
+
+char be_reader_name[MAX_INIT_STRING+1];
+char be_atr_string[MAX_INIT_STRING+1];
+
+static void
+copy_without_leading_space(input_str, dest)
+	char *input_str, *dest;
+{
+	char *cp;
+
+	for (cp = input_str; isspace(*cp); cp++)
+		;
+	strcpy(dest, cp);
+}
+
+collect_backend_init_strings()
+{
+	char inbuf[MAX_INIT_STRING+2], *cp;
+
+	for (;;) {
+		if (!fgets(inbuf, sizeof inbuf, rpipeF)) {
+			fprintf(stderr,
+		"start-up error: EOF reading init strings from back end\n");
+			exit(1);
+		}
+		cp = index(inbuf, '\n');
+		if (!cp) {
+			fprintf(stderr,
+		"start-up error: init string from back end has no newline\n");
+			exit(1);
+		}
+		*cp = '\0';
+		if (!inbuf[0])
+			break;
+		switch (inbuf[0]) {
+		case 'A':
+			copy_without_leading_space(inbuf + 1, be_atr_string);
+			break;
+		case 'R':
+			copy_without_leading_space(inbuf + 1, be_reader_name);
+			break;
+		}
+	}
+	return(0);
+}