DataMuseum.dk

Presents historical artifacts from the history of:

DKUUG/EUUG Conference tapes

This is an automatic "excavation" of a thematic subset of
artifacts from Datamuseum.dk's BitArchive.

See our Wiki for more about DKUUG/EUUG Conference tapes

Excavated with: AutoArchaeologist - Free & Open Source Software.


top - download
Index: ┃ T m

⟦b53048c97⟧ TextFile

    Length: 2403 (0x963)
    Types: TextFile
    Names: »manstat.c«

Derivation

└─⟦87ddcff64⟧ Bits:30001253 CPHDIST85 Tape, 1985 Autumn Conference Copenhagen
    └─ ⟦this⟧ »cph85dist/stat/src/manstat.c« 

TextFile

#include "unixstat.h"
PGM(manstat,Manual for Statistical Programs,5.0,3/3/85)
/* Copyright (c) 1982 Gary Perlman (see Copyright file) */

#include <sys/types.h>
#include <sys/stat.h>

main (argc, argv) char **argv;
	{
	int 	optind;
	ARGV0;
	optind = initial (argc, argv);
	if (optind == argc) /* no opreands */
		{
		process ("unixstat");
		process ("manstat");
		}
	else while (optind < argc)
		process (argv[optind++]);
	exit (0);
	}

/* OPTIONS */

#ifndef DOCDIR
#define DOCDIR "/usr/local/doc"
#endif
char	*Docdir = DOCDIR;   /* manual entries in this directory */
char	*Macros = "an";     /* use -man macros by default */
int 	Update = 0;         /* only update catman entries */

#define	OPTSTRING "um:d:"
initial (argc, argv) char **argv;
	{
	extern	char	*optarg;
	extern	int 	optind;
	int 	errflg = 0;
	int 	C;
	while ((C = getopt (argc, argv, OPTSTRING)) != EOF)
		switch (C)
			{
			case 'd': Docdir = optarg; break;
			case 'm': Macros = optarg; break;
			case 'u': Update = 1; break;
			default: errflg++; break;
			}
	if (errflg)
		USAGE ([-u] [-m macros] [-d docdir] names)
	return (optind);
	}

process (file)
char	*file;
	{
	struct	stat	man, cat;
	char	manfile[BUFSIZ];
	char	catfile[BUFSIZ];
	int 	noman;    /* no manual entry on-line */
	int 	nocat;    /* no pre-formatted version */
	sprintf (manfile, "%s/man/%s.1", Docdir, file);
	sprintf (catfile, "%s/cat/%s", Docdir, file);
	noman = stat (manfile, &man);
	nocat = stat (catfile, &cat);
	if (cat.st_size == 0) nocat = 1;
	if (noman & nocat)
		sysman (file);
	else
		{
		if (nocat || man.st_mtime > cat.st_mtime)
			newman (manfile, catfile);
		if (!Update) catman (catfile);
		}
	}

newman (manfile, catfile) /* format a new manual entry */
char	*manfile;    /* where the manual entry is kept */
char	*catfile;    /* where the formatted version is put */
	{
	char	command[BUFSIZ];
	if (!Update) WARNING (Reformatting manual entry.  Please wait...)
	VOID sprintf (command, "nroff -m%s %s | uniq > %s",
		Macros, manfile, catfile);
	VOID system (command);
	}

sysman (name) /* use the system manual program here */
char	*name;
	{
	char	command[BUFSIZ];
	VOID sprintf (command, "man %s", name);
	VOID system (command);
	}

catman (file)
char	*file;
	{
	register	FILE	*ioptr;
	register	int 	C;
	if (ioptr = fopen (file, "r"))
		{
		while ((C = getc (ioptr)) != EOF)
			putc (C, stdout);
		fclose (ioptr);
		}
	else ERROPEN (file)
	}