kyle@xanth.UUCP (08/14/87)
Here's a very simple pager that should work under any UN*X/C implementation. I wrote this for a friend who must use a horrible implementation of SysV. Hope this helps someone out there. kyle jones <kyle@odu.edu> old dominion university, norfolk, va --------------------------------------------------------------------------- /* * p - a simple pager * * p [files] no files means to use stdin * * Copyright (C) 1987 Kyle E. Jones * * This software may be redistributed provided this notice appears on all * copies and that the further free redistribution of this software is not * restricted in any way. * * This software is distributed 'as is', without warranties of any kind. */ #include <stdio.h> #define LINES 24 int Errors; FILE *tty; void showline(), showfile(); main(argc, argv) int argc; char **argv; { char msgbuf[256]; int multiple = 0; if (argc == 1) showfile((char *)0); else { if (argc > 2) multiple = 1; for (argc--,argv++; argc > 0; argc--, argv++) { if (multiple) { sprintf(msgbuf, "=== %s ===============\n", *argv); showline(msgbuf); } showfile(*argv); } } exit(Errors); } void showfile(file) char *file; { FILE *f; char line[1024]; char *more, *fgets(); if (tty == 0) { tty = fopen("/dev/tty", "r"); if (tty == 0 && file == 0) { fprintf(stderr, "Warning: no access to /dev/tty so I can't page stdin.\n"); return; } else tty == stdin; } if (file == 0) f = stdin; else { f = fopen(file, "r"); if (f == 0) { fprintf(stderr, "%s: cannot open\n", file); Errors++; return; } } more = line; while (more) { line[0] = '\0'; more = fgets(line, 1024, f); showline(line); } if (f != stdin) fclose(f); } void showline(line) char *line; { static linecount; if (linecount == LINES - 2) { int length = strlen(line); if (line[length-1] == '\n') line[length-1] = '\0'; } fputs(line, stdout); if (++linecount == LINES - 1) { getc(tty); linecount = 0; } }