changeset 27:24cb10d508d7

fc-fsio help command implemented
author Mychaela Falconia <falcon@freecalypso.org>
date Sun, 23 Oct 2016 01:33:21 +0000
parents b301b75de0e0
children 380d2e1f4eb7
files rvinterf/etmsync/Makefile rvinterf/etmsync/fscmdtab.c rvinterf/etmsync/fsiomain.c rvinterf/etmsync/help.c
diffstat 4 files changed, 77 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/rvinterf/etmsync/Makefile	Sun Oct 23 01:20:55 2016 +0000
+++ b/rvinterf/etmsync/Makefile	Sun Oct 23 01:33:21 2016 +0000
@@ -9,8 +9,8 @@
 
 FSIO_OBJS=	cl_des.o connect.o dispatch.o fdcmd.o fileio.o fsbasics.o \
 		fscmdtab.o fserr.o fsiomain.o fsmisc.o fspath.o fsread.o \
-		fsupload.o fswrite.o interf.o launchrvif.o memcmd.o memops.o \
-		pirimei.o pirmagnetite.o rfcap.o stddirs.o symlink.o
+		fsupload.o fswrite.o help.o interf.o launchrvif.o memcmd.o \
+		memops.o pirimei.o pirmagnetite.o rfcap.o stddirs.o symlink.o
 
 OLDDUMP_OBJS=	connect.o interf.o launchrvif.o memops.o olddump.o simplemain.o
 
--- a/rvinterf/etmsync/fscmdtab.c	Sun Oct 23 01:20:55 2016 +0000
+++ b/rvinterf/etmsync/fscmdtab.c	Sun Oct 23 01:33:21 2016 +0000
@@ -15,6 +15,7 @@
 extern int cmd_format();
 extern int cmd_fwrite();
 extern int cmd_hd();
+extern int cmd_help();
 extern int cmd_ll();
 extern int cmd_ls();
 extern int cmd_memdump();
@@ -48,6 +49,7 @@
 	{"format", 1, 1, cmd_format},
 	{"fwrite", 3, 3, cmd_fwrite},
 	{"hd", 1, 1, cmd_hd},
+	{"help", 0, 1, cmd_help},
 	{"ll", 1, 1, cmd_ll},
 	{"ls", 1, 2, cmd_ls},
 	{"memdump", 2, 2, cmd_memdump},
--- a/rvinterf/etmsync/fsiomain.c	Sun Oct 23 01:20:55 2016 +0000
+++ b/rvinterf/etmsync/fsiomain.c	Sun Oct 23 01:33:21 2016 +0000
@@ -7,6 +7,8 @@
 #include <unistd.h>
 #include "exitcodes.h"
 
+char help_file_pathname[] = "/usr/local/share/freecalypso/fsio.help";
+
 extern char *socket_pathname;
 extern char *rvinterf_ttyport, *rvinterf_Bopt, *rvinterf_lopt, *rvinterf_wopt;
 
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/rvinterf/etmsync/help.c	Sun Oct 23 01:33:21 2016 +0000
@@ -0,0 +1,71 @@
+/*
+ * This module implements the fc-fsio help facility.
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+#include "exitcodes.h"
+
+extern char help_file_pathname[];
+
+show_help_topic(topic)
+	char *topic;
+{
+	FILE *f;
+	char linebuf[256];
+	char *cp, *np;
+	int flag;
+
+	f = fopen(help_file_pathname, "r");
+	if (!f) {
+		perror(help_file_pathname);
+		return(ERROR_UNIX);
+	}
+	for (;;) {
+		if (!fgets(linebuf, sizeof linebuf, f)) {
+			fprintf(stderr, "Help topic \"%s\" not found\n", topic);
+			fclose(f);
+			return(ERROR_USAGE);
+		}
+		if (linebuf[0] != '=' || linebuf[1] != '=' || linebuf[2] != '=')
+			continue;
+		for (cp = linebuf + 3; isspace(*cp); cp++)
+			;
+		for (np = cp; *cp && !isspace(*cp); cp++)
+			;
+		if (*cp)
+			*cp++ = '\0';
+		if (!strcmp(np, topic))
+			break;
+	}
+	for (flag = 0; fgets(linebuf, sizeof linebuf, f); ) {
+		if (linebuf[0] == '=' && linebuf[1] == '=' &&
+		    linebuf[2] == '=') {
+			if (flag)
+				break;
+			else
+				continue;
+		}
+		fputs(linebuf, stdout);
+		flag = 1;
+	}
+	fclose(f);
+	return(0);
+}
+
+cmd_help(argc, argv)
+	char **argv;
+{
+	switch (argc) {
+	case 1:
+		return show_help_topic("main");
+	case 2:
+		return show_help_topic(argv[1]);
+	default:
+		fprintf(stderr, "internal error in cmd_help(): bad argc\n");
+		abort();
+	}
+}