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

⟦65257e7dd⟧ TextFile

    Length: 1140 (0x474)
    Types: TextFile
    Names: »more.c«

Derivation

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

TextFile

#include "unixstat.h"
PGM(more,Paginate Output,5.0,1984)

#define	LINES 24    /* how many lines on the screen */

#include <sgtty.h>
static	struct	sgttyb Normtty, Rawtty;

init ()
	{
	gtty (2, &Normtty);
	gtty (2, &Rawtty);
	Rawtty.sg_flags &= ~ECHO;
	Rawtty.sg_flags |= RAW;
	}

rawgetc ()
	{
	char	C;
	putc (7, stderr);
	fflush (stderr);
	stty (2, &Rawtty);
	read (2, &C, 1);
	stty (2, &Normtty);
	return (C);
	}

main (argc, argv) char **argv;
	{
	init ();
	if (argc == 1)
		more ("-");
	else while (--argc)
		more (*++argv);
	exit (0);
	}

more (file)
char	*file;
	{
	char	line[BUFSIZ];
	FILE	*ioptr;
	int 	window = LINES-1;
	int 	linecount = 0;
	int 	C;
	if (!strcmp (file, "-"))
		{
		ioptr = stdin;
		file = "Standard Input";
		}
	else ioptr = fopen (file, "r");
	if (ioptr)
		{
		fprintf (stderr, "more: file=%s\n", file);
		while (fgets (line, BUFSIZ, ioptr))
			{
			if (++linecount == window)
				{
				linecount = 0;
				C = rawgetc ();
				if (C == 'q') exit (0);
				if (C == 'n') break;
				}
			fputs (line, stdout);
			}
		if (ioptr != stdin) fclose (ioptr);
		}
	else fprintf (stderr, "more: can't open '%s'\n", file);
	}