diff loadtools/lthelp.c @ 105:02cb0206aa47

fc-loadtool help implemented
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Tue, 03 Sep 2013 07:31:26 +0000
parents
children
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/loadtools/lthelp.c	Tue Sep 03 07:31:26 2013 +0000
@@ -0,0 +1,80 @@
+/*
+ * This module implements the loadtool help facility.
+ */
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+#include <strings.h>
+#include <stdlib.h>
+
+extern char loadtool_help_file[];
+
+loadtool_help(topic)
+	char *topic;
+{
+	FILE *f;
+	char linebuf[256];
+	char *cp, *np;
+	int flag;
+
+	f = fopen(loadtool_help_file, "r");
+	if (!f) {
+		perror(loadtool_help_file);
+		return(-1);
+	}
+	for (;;) {
+		if (!fgets(linebuf, sizeof linebuf, f)) {
+			fprintf(stderr, "Help topic \"%s\" not found\n", topic);
+			fclose(f);
+			return(-1);
+		}
+		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;
+{
+	char flashtopic[32];
+
+	switch (argc) {
+	case 1:
+		return loadtool_help("main");
+	case 2:
+		return loadtool_help(argv[1]);
+	case 3:
+		if ((!strcmp(argv[1], "flash") || !strcmp(argv[1], "flash2"))
+		    && strlen(argv[2]) <= 20) {
+			sprintf(flashtopic, "flash:%s", argv[2]);
+			return loadtool_help(flashtopic);
+		}
+		fprintf(stderr, "No such help topic\n");
+		return(-1);
+	default:
+		fprintf(stderr, "internal error in cmd_help(): bad argc\n");
+		abort();
+	}
+}