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 - metrics - download
Index: T t

⟦3781ac6ae⟧ TextFile

    Length: 2313 (0x909)
    Types: TextFile
    Names: »ttychk.c«

Derivation

└─⟦db229ac7e⟧ Bits:30007240 EUUGD20: SSBA 1.2 / AFW Benchmarks
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21E/musbus/ttychk.c« 
    └─⟦this⟧ »EUUGD20/AFUU-ssba1.21/ssba1.21F/musbus/ttychk.c« 

TextFile

/*
 *
 * Checks for tty accessability and bandwidth saturation.
 *
 * $Header: ttychk.c,v 5.2 87/12/09 16:57:02 kenj Exp $
 */

#include <stdio.h>
#include "../install/signal.h"
#ifdef TERMIO
#include <termio.h>
#define sgttyb	termio
#define TIOCGETP TCGETA
#define sg_ospeed c_cflag
#else
#include <sgtty.h>
#endif
#ifndef CBAUD
#define CBAUD	0017	/* masque speed */
#endif

struct {
	int	baud;	/* baud rate */
	int	symb;	/* symbolic constant for baud rate */
} bmap[] = {
	{  300,  B300 },
	{ 1200, B1200 },
	{ 2400, B2400 },
	{ 4800, B4800 },
	{ 9600, B9600 },
	{    0,     0 }
};
int		status = 0;	/* exit() status */

main(argc, argv)
int	argc;
char	*argv[];
{
	struct sgttyb	ttyb;
	int		nusers;		/* number of simulated users */
	int		need;		/* max ttys that could be used */
	int		baud = 0;	/* aggregate baud rate across
					   active ttys */
	int		br;
	int		nttys = 0;	/* number of required ttys */
	int		i;
	int		fd;
	int		l;
	float		orate;		/* estimated output rate per user */
        int		onalarm();

	if (argc < 4) {
		fprintf(stderr, "Usage: ttychk nusers orate ttydev ... \n");
		exit(1);
	}
	nusers = atoi(argv[1]);
	if (nusers < 1) {
		fprintf(stderr, "ttychk: nusers must be > 0\n");
		status |= 1;
	}
	sscanf(argv[2], "%f", &orate);

	need = nusers;

	signal(SIGALRM, onalarm);
	for (i = 3; i < argc && need; i++, nttys++, need--) {
		alarm(3);
		if ((fd = open(argv[i], 1)) < 0) {
			fprintf(stderr, "ttychk: cannot open %s for writing\n",
				argv[i]);
			perror("");
			status |= 1;
			continue;
		}
		alarm(0);
		if (ioctl(fd, TIOCGETP, &ttyb) < 0) {
			fprintf(stderr, "ttychk: cannot stat %s\n",
				argv[i]);
			perror("");
			status |= 1;
			close(fd);
			continue;
		}
		close(fd);
		br = 0;
		for (l = 0; bmap[l].baud; l++) {
			if (bmap[l].symb == (ttyb.sg_ospeed & CBAUD)) {
				br = bmap[l].baud;
				break;
			}
		}
		if (br != 9600)
			fprintf(stderr, "ttychk: Warning - baud rate at %d for %s\n",
				br, argv[i]);
		baud += br;
	}

	/* assume 10 bits per character, and the 80% figure is arbitrary! */
	if (nusers*orate > 0.8*(baud/10)) {
		fprintf(stderr, "ttychk panic: Total tty output rate (%d chars/sec) exceeds 80%% of\n              total tty bandwidth (%d chars/sec)\n",
			(int)(nusers*orate), baud/10);
		status |= 1;
	}

	exit(status);
}

onalarm()
{
	status |= 1;
}