view rvinterf/asyncshell/help.c @ 867:dfd98dd46068
ringtools: fc-pwt-comp utility written
author |
Mychaela Falconia <falcon@freecalypso.org> |
date |
Mon, 28 Mar 2022 05:45:31 +0000 (2022-03-28) |
parents |
27d7d7e2d9bd |
children |
|
line source
/*
* 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[] = "/opt/freecalypso/helpfiles/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();
}
}