rep - repeatedly execute a command
Bruce Karsh
karsh at geowhiz.UUCP
Mon Mar 25 21:17:06 AEST 1985
Last November, Ray Lubinsky put a program on the net called rep. It
repetitively displayed a command on the crt, using termcap so that only
the characters which changed between repetitions were updated on the screen.
I have fixed some minor problems with this program and have added
a man page.
# This is a shell archive. Remove anything before this line, then
# unpack it by saving it in a file and typing "sh file". (Files
# unpacked will be owned by you and have default permissions.)
#
# This archive contains:
# Makefile rep.1 rep.c
echo x - Makefile
cat > "Makefile" << '//E*O*F Makefile//'
rep: rep.c
cc -O rep.c -lcurses -ltermlib -o rep
//E*O*F Makefile//
echo x - rep.1
cat > "rep.1" << '//E*O*F rep.1//'
.TH REP 1 local
.SH NAME
rep - repeatedly execute a command
.SH SYNOPSIS
rep [-n] command
.SH DESCRIPTION
.I Rep
repeatedly executes a command and prints out the
output in the same place each time. (It uses
cursor optimization routines to only update chars
that have changed.)
.PP
The -n option specifies the number of seconds between
repetitions.
.SH EXAMPLES
.B rep ps -ef
.PP
prints out a display of system activity.
.PP
.B rep -1 date
.PP
puts a digital clock on the screen.
.SH "SEE ALSO"
.SH BUGS
//E*O*F rep.1//
echo x - rep.c
cat > "rep.c" << '//E*O*F rep.c//'
/******************************************************************************
* *
* rep -- run a program repeatedly using 'curses'. *
* *
* Usage: rep [-n] command *
* *
* Permits the user to watch a program like 'w' or 'finger' change with *
* time. Given an argument '-x' will cause a repetion every x seconds. *
* *
* ORIGINAL *
* Ray Lubinsky University of Virginia, Dept. of Computer Science *
* uucp: decvax!mcnc!ncsu!uvacs!rwl *
* MODIFIED 3/85 *
* Bruce Karsh, Univ. Wisconsin, Madison. Dept. of Geophysics. *
* uucp: uwvax\!geowhiz\!karsh *
******************************************************************************/
#include <curses.h>
#include <signal.h>
#define NextLine fgets(buf,sizeof buf,input)
FILE *input; /* Pipe from 'source' */
char source[512]; /* Source program to run repeatedly */
char *progname; /* Name of this program (for errors) */
int interval = 1; /* Seconds between repitions */
int deathflag = 0; /* Set by interupt trap routine */
main(argc,argv)
int argc;
char **argv;
{
int endrep(); /* Mop up routine on break */
FILE *popen();
char buf[BUFSIZ]; /* Buffer holds a line from 'source' */
int i;
progname = *argv;
source[0]=0;
if (argc == 1)
badargs();
if (**(argv+1) == '-') /* User specified interval */
if ((--argc == 1) || ((interval = atoi(*(++argv)+1)) == 0))
badargs();
while (--argc > 0) { /* Argument becomes source program */
strcat(source,*++argv);
strcat(source," ");
}
signal(SIGINT,endrep);
if(deathflag == 1)goto die;
initscr();
if(deathflag == 1)goto die;
crmode();
if(deathflag == 1)goto die;
nonl();
if(deathflag == 1)goto die;
clear();
if(deathflag == 1)goto die;
for (;;) {
if(deathflag == 1)goto die;
if ((input = popen(source,"r")) == NULL) {
fprintf(stderr,"%s: can't run %s\n",progname,source);
goto die;
}
for (i = 0; (i < LINES) && (NextLine != NULL); i++) {
mvaddstr(i,0,buf);
clrtoeol();
if(deathflag == 1)goto die;
}
if(deathflag == 1)goto die;
pclose(input);
if(deathflag == 1)goto die;
clrtobot();
if(deathflag == 1)goto die;
refresh();
if(deathflag == 1)goto die;
sleep(interval);
if(deathflag == 1)goto die;
}
die:
signal(SIGINT,SIG_IGN);
if (input != NULL)
pclose(input);
clear();
refresh();
endwin();
exit(0);
}
endrep()
{
deathflag=1;
}
badargs()
{
fprintf(stderr,"Usage: %s [-n] command\n",progname);
exit(1);
}
//E*O*F rep.c//
echo Possible errors detected by \'wc\' [hopefully none]:
temp=/tmp/shar$$
trap "rm -f $temp; exit" 0 1 2 3 15
cat > $temp <<\!!!
2 9 50 Makefile
24 91 505 rep.1
101 333 2603 rep.c
127 433 3158 total
!!!
wc Makefile rep.1 rep.c | sed 's=[^ ]*/==' | diff -b $temp -
exit 0
--
Bruce Karsh |
U. Wisc. Dept. Geology and Geophysics |
1215 W Dayton, Madison, WI 53706 | This space for rent.
(608) 262-1697 |
{ihnp4,seismo}!uwvax!geowhiz!karsh |
More information about the Comp.sources.unix
mailing list