view loadtools/lthelp.c @ 635:658a83ff7221

gsm-fw/sysglue/flashboot.S: buglet in the previous change
author Michael Spacefalcon <msokolov@ivan.Harhan.ORG>
date Mon, 01 Sep 2014 18:45:37 +0000
parents 02cb0206aa47
children
line wrap: on
line source

/*
 * 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();
	}
}