view rvinterf/etmsync/help.c @ 620:dd162a4cb9fa

CHANGES: objective performance comparison instead of blind patch
author Mychaela Falconia <falcon@freecalypso.org>
date Thu, 27 Feb 2020 01:21:58 +0000
parents 24cb10d508d7
children
line wrap: on
line source

/*
 * This module implements the fc-fsio help facility.
 */

#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <strings.h>
#include <stdlib.h>
#include "exitcodes.h"

extern char help_file_pathname[];

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(ERROR_UNIX);
	}
	for (;;) {
		if (!fgets(linebuf, sizeof linebuf, f)) {
			fprintf(stderr, "Help topic \"%s\" not found\n", topic);
			fclose(f);
			return(ERROR_USAGE);
		}
		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;
{
	switch (argc) {
	case 1:
		return show_help_topic("main");
	case 2:
		return show_help_topic(argv[1]);
	default:
		fprintf(stderr, "internal error in cmd_help(): bad argc\n");
		abort();
	}
}