FreeCalypso > hg > freecalypso-sw
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(); + } +}