FreeCalypso > hg > freecalypso-tools
changeset 31:5b4e345095c4
fc-shell help command implemented
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Sun, 23 Oct 2016 18:38:07 +0000 |
parents | 43e4c95d148a |
children | ea061975c883 |
files | rvinterf/asyncshell/Makefile rvinterf/asyncshell/help.c rvinterf/asyncshell/usercmd.c |
diffstat | 3 files changed, 90 insertions(+), 2 deletions(-) [+] |
line wrap: on
line diff
--- a/rvinterf/asyncshell/Makefile Sun Oct 23 17:26:48 2016 +0000 +++ b/rvinterf/asyncshell/Makefile Sun Oct 23 18:38:07 2016 +0000 @@ -1,8 +1,8 @@ CC= gcc CFLAGS= -O2 -I../include PROG= fc-shell -OBJS= at.o init.o main.o oneshot.o parse.o pktsort.o poweroff.o rxctl.o \ - sendarb.o sendsp.o tchcmd.o tchplay.o tchrec.o usercmd.o +OBJS= at.o help.o init.o main.o oneshot.o parse.o pktsort.o poweroff.o \ + rxctl.o sendarb.o sendsp.o tchcmd.o tchplay.o tchrec.o usercmd.o LIBS= ../libasync/libasync.a ../libg23/libg23.a INSTBIN=/usr/local/bin INSTHELP=/usr/local/share/freecalypso
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/rvinterf/asyncshell/help.c Sun Oct 23 18:38:07 2016 +0000 @@ -0,0 +1,86 @@ +/* + * This module implements the fc-shell help facility. + */ + +#include <stdio.h> +#include <ctype.h> +#include <string.h> +#include <strings.h> +#include <stdlib.h> + +char help_file_pathname[] = "/usr/local/share/freecalypso/fc-shell.help"; + +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(-1); + } + for (;;) { + if (!fgets(linebuf, sizeof linebuf, f)) { + printf("error: 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); +} + +void +cmd_help(argstr) + char *argstr; +{ + char *argv[3], dbltopic[34]; + int argc, rc; + + rc = parse_interactive_command_into_argv(argstr, argv, 0, 2, &argc); + if (rc < 0) + return; + switch (argc) { + case 0: + show_help_topic("main"); + break; + case 1: + show_help_topic(argv[0]); + break; + case 2: + if (strlen(argv[0]) <= 16 && strlen(argv[1]) <= 16) { + sprintf(dbltopic, "%s:%s", argv[0], argv[1]); + show_help_topic(dbltopic); + } else + printf("error: no such help topic\n"); + break; + default: + fprintf(stderr, "internal error in cmd_help(): bad argc\n"); + abort(); + } +}
--- a/rvinterf/asyncshell/usercmd.c Sun Oct 23 17:26:48 2016 +0000 +++ b/rvinterf/asyncshell/usercmd.c Sun Oct 23 18:38:07 2016 +0000 @@ -13,6 +13,7 @@ extern void cmd_disable(); extern void cmd_enable(); +extern void cmd_help(); extern void cmd_poweroff(); extern void cmd_sendat(); extern void cmd_send_interactive(); @@ -35,6 +36,7 @@ {"disable", cmd_disable}, {"enable", cmd_enable}, {"exit", cmd_exit}, + {"help", cmd_help}, {"poweroff", cmd_poweroff}, {"quit", cmd_exit}, {"send", cmd_send_interactive},