v05i005: (official) update #1 to vis

George M. Sipe george at rebel.UUCP
Fri Oct 28 12:21:55 AEST 1988


Posting-number: Volume 5, Issue 5
Submitted-by: "George M. Sipe" <george at rebel.UUCP>
Archive-name: vis.Patch1

This update adds two useful new features to vis, the program recently
posted which makes any command "screen oriented":

	1.  Steve Alter (alter at ttidca.tti.com) added the capability
	    to fully suppress the status line via a new -h option.
	    This permits the full screen to be used to display the
	    output of the command.

	2.  Anton Chernoff (abc at lpi.uucp) added the capability to
	    highlight characters changed since the last pass by the
	    use of standout mode, specified with a new -s option.

George M. Sipe,		Phone: (404) 662-1533
Tolerant Systems, 6961 Peachtree Industrial, Norcross, GA  30071
UUCP: ...!{decvax,hplabs,linus,rutgers,seismo}!gatech!rebel!george


#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	README.diff
#	vis.c.diff
#	vis.man.diff
# This archive created: Sun Oct 23 16:08:40 1988
export PATH; PATH=/bin:/usr/bin:$PATH
if test -f 'README.diff'
then
	echo shar: "will not over-write existing file 'README.diff'"
else
cat << \X > 'README.diff'
*** README_orig	Sun Oct 23 15:10:24 1988
--- README	Sun Oct 23 15:48:18 1988
***************
*** 45,47
  	George M.  Sipe (rebel!george) to the point where Dan
  	would no longer recoginze it.  No copyright notices
  	were embodied in the original net distribution.

--- 45,51 -----
  	George M.  Sipe (rebel!george) to the point where Dan
  	would no longer recoginze it.  No copyright notices
  	were embodied in the original net distribution.
+ 
+ 	Steve Alter (alter at ttidca.tti.com) added the -h option.
+ 
+ 	Anton Chernoff (abc at lpi.uucp) added the -s option.
X
fi
if test -f 'vis.c.diff'
then
	echo shar: "will not over-write existing file 'vis.c.diff'"
else
cat << \X > 'vis.c.diff'
*** vis.c_orig	Sun Oct 23 15:10:30 1988
--- vis.c	Sun Oct 23 15:47:01 1988
***************
*** 27,32
  	Sipe (rebel!george) to the point where Dan would no longer
  	recoginze it.  No copyright notices were embodied in the
  	original net distribution.
  */
  
  #include <stdio.h>

--- 27,36 -----
  	Sipe (rebel!george) to the point where Dan would no longer
  	recoginze it.  No copyright notices were embodied in the
  	original net distribution.
+ 
+ 	Steve Alter (alter at ttidca.tti.com) added the -h option.
+ 
+ 	Anton Chernoff (abc at lpi.uucp) added the -s option.
  */
  
  #include <stdio.h>
***************
*** 120,125
  	int sw;
  	int badsw = 0;
  	int baseline = BASELINE;
  	long nextcycle;
  	long curtime;
  	long delta;

--- 124,134 -----
  	int sw;
  	int badsw = 0;
  	int baseline = BASELINE;
+ 	int doheader = 1;
+ 	int flagchanges = 0;
+ 	int flagch = 0;
+ 	int y, x;
+ 	int somode;
  	long nextcycle;
  	long curtime;
  	long delta;
***************
*** 134,140
  	(void) signal(SIGINT, terminate);	/* exit when requested */
  	(void) signal(SIGPIPE, SIG_IGN);	/* when output > screen size */
  
! 	while ((sw = getopt (argc, argv, "d:f")) != EOF)
  		switch (sw) {
  			case 'f':
  				force = !force;

--- 143,149 -----
  	(void) signal(SIGINT, terminate);	/* exit when requested */
  	(void) signal(SIGPIPE, SIG_IGN);	/* when output > screen size */
  
! 	while ((sw = getopt (argc, argv, "d:fhs")) != EOF)
  		switch (sw) {
  			case 'd':
  				wait_delay = atoi(optarg);
***************
*** 136,144
  
  	while ((sw = getopt (argc, argv, "d:f")) != EOF)
  		switch (sw) {
- 			case 'f':
- 				force = !force;
- 				break;
  			case 'd':
  				wait_delay = atoi(optarg);
  				if (wait_delay < 1) wait_delay = 1;

--- 145,150 -----
  
  	while ((sw = getopt (argc, argv, "d:fhs")) != EOF)
  		switch (sw) {
  			case 'd':
  				wait_delay = atoi(optarg);
  				if (wait_delay < 1) wait_delay = 1;
***************
*** 143,148
  				wait_delay = atoi(optarg);
  				if (wait_delay < 1) wait_delay = 1;
  				break;
  			case '?':
  			default:
  				badsw = 1;

--- 149,164 -----
  				wait_delay = atoi(optarg);
  				if (wait_delay < 1) wait_delay = 1;
  				break;
+ 			case 'f':
+ 				force = !force;
+ 				break;
+ 			case 'h':
+ 				doheader = 0;
+ 				baseline = 0;
+ 				break;
+ 			case 's':
+ 				flagchanges = !flagchanges;
+ 				break;
  			case '?':
  			default:
  				badsw = 1;
***************
*** 152,158
  	argc -= optind;
  	if (badsw || argc < 1) {
  		(void) fprintf(stderr,
! 			"Usage: %s [-d delay] [-f] command [args]\n", cmd);
  		exit (-1);
  	}
  	initscr();

--- 168,175 -----
  	argc -= optind;
  	if (badsw || argc < 1) {
  		(void) fprintf(stderr,
! 			"Usage: %s [-d delay] [-f] [-h] [-s] command [args]\n",
! 			cmd);
  		exit (-1);
  	}
  	initscr();
***************
*** 163,176
  		shcmd[2] = cmd;
  		shcmd[3] = (char *) 0;
  	}
! 	if (wait_delay != DELAY) {
! 		if (strlen(cmd) > COLS-39)
! 			(void) sprintf(cmd, "%.*s...", COLS-42, cmd);
! 		mvprintw(0, max((COLS-11)/2, strlen(cmd)+15), "Delay:  %d",
! 			wait_delay);
! 	} else if (strlen(cmd) > COLS-21)
! 		(void) sprintf(cmd, "%.*s...", COLS-24, cmd);
! 	mvprintw(0, 0, "Command:  %s", cmd);
  	noecho();			/* don't let typing ruin our painting */
  	nextcycle = time(0) + wait_delay;
  	while (1) {

--- 180,195 -----
  		shcmd[2] = cmd;
  		shcmd[3] = (char *) 0;
  	}
! 	if (doheader) {
! 		if (wait_delay != DELAY) {
! 			if (strlen(cmd) > COLS-39)
! 				(void) sprintf(cmd, "%.*s...", COLS-42, cmd);
! 			mvprintw(0, max((COLS-11)/2, strlen(cmd)+15),
! 				"Delay:  %d", wait_delay);
! 		} else if (strlen(cmd) > COLS-21)
! 			(void) sprintf(cmd, "%.*s...", COLS-24, cmd);
! 		mvprintw(0, 0, "Command:  %s", cmd);
! 	}
  	noecho();			/* don't let typing ruin our painting */
  	nextcycle = time(0) + wait_delay;
  	while (1) {
***************
*** 174,180
  	noecho();			/* don't let typing ruin our painting */
  	nextcycle = time(0) + wait_delay;
  	while (1) {
! 		mvprintw(0, COLS - 10, "Exec:  %d", ++iteration);
  		if (iteration == 1) refresh();
  		(void) pipe(fildes);
  		/* fork and exec redirecting stdout thru pipe to curses */

--- 193,200 -----
  	noecho();			/* don't let typing ruin our painting */
  	nextcycle = time(0) + wait_delay;
  	while (1) {
! 		if (doheader)
! 			mvprintw(0, COLS - 10, "Exec:  %d", ++iteration);
  		if (iteration == 1) refresh();
  		(void) pipe(fildes);
  		/* fork and exec redirecting stdout thru pipe to curses */
***************
*** 191,196
  		if (!(fp = fdopen(pinput, "r"))) terminate(-3);
  		(void) close(poutput);
  		curline = baseline;
  		move(curline, 0);
  		/* read the command's output */
  		while ((c = getc(fp)) != EOF && !ferror(fp) && curline < LINES)

--- 211,217 -----
  		if (!(fp = fdopen(pinput, "r"))) terminate(-3);
  		(void) close(poutput);
  		curline = baseline;
+ 		somode = 0;
  		move(curline, 0);
  		getyx(stdscr, y, x);
  		/* read the command's output */
***************
*** 192,197
  		(void) close(poutput);
  		curline = baseline;
  		move(curline, 0);
  		/* read the command's output */
  		while ((c = getc(fp)) != EOF && !ferror(fp) && curline < LINES)
  				if (c == '\n') {

--- 213,219 -----
  		curline = baseline;
  		somode = 0;
  		move(curline, 0);
+ 		getyx(stdscr, y, x);
  		/* read the command's output */
  		while ((c = getc(fp)) != EOF && !ferror(fp) && curline < LINES)
  		{
***************
*** 194,204
  		move(curline, 0);
  		/* read the command's output */
  		while ((c = getc(fp)) != EOF && !ferror(fp) && curline < LINES)
! 				if (c == '\n') {
! 					clrtoeol();
! 					move(++curline, 0);
! 				}
! 				else addch(c);
  		if (ferror(fp)) terminate(-4);
  		if (baseline > 1 && curline == LINES && c != EOF)
  			--baseline;

--- 216,250 -----
  		getyx(stdscr, y, x);
  		/* read the command's output */
  		while ((c = getc(fp)) != EOF && !ferror(fp) && curline < LINES)
! 		{
! 
! 			if (c == '\n') {
! 				if (x < COLS-1) clrtoeol();
! 				move(++curline, 0);
! 				getyx(stdscr, y, x);
! 			}
! 			else {
! 				if (x >= COLS-1)
! 					continue;
! 				getyx(stdscr, y, x);
! 				if (flagch)
! 					if ((c & 0177) == (inch() & 0177)) {
! 						if (somode) {
! 							standend();
! 							somode = 0;
! 						}
! 					}
! 					else {
! 						if (!somode) {
! 							standout();
! 							somode = 1;
! 						}
! 					}
! 				addch(c);
! 			}
! 		}
! 		if (somode) standend();
! 		flagch = flagchanges;
  		if (ferror(fp)) terminate(-4);
  		if (baseline > 1 && curline == LINES && c != EOF)
  			--baseline;
***************
*** 210,216
  		(void) wait(&status);	/* wait for child to terminate */
  		/* if child didn't terminate properly, w_status will != 0 */
  		if (status.w_status) {
! 			mvprintw(0, COLS - 12, "!");
  			if (!force) terminate(status.w_status);
  		}
  		curtime = time(0);

--- 256,263 -----
  		(void) wait(&status);	/* wait for child to terminate */
  		/* if child didn't terminate properly, w_status will != 0 */
  		if (status.w_status) {
! 			if (doheader)
! 				mvprintw(0, COLS - 12, "!");
  			if (!force) terminate(status.w_status);
  		}
  		curtime = time(0);
X
fi
if test -f 'vis.man.diff'
then
	echo shar: "will not over-write existing file 'vis.man.diff'"
else
cat << \X > 'vis.man.diff'
*** vis.man_orig	Sun Oct 23 15:10:27 1988
--- vis.man	Sun Oct 23 15:47:13 1988
***************
*** 1,4
! .TH VIS l "21 July 1988"
  .SH NAME
  vis \- repeatedly run command, refreshing screen
  .SH SYNTAX

--- 1,4 -----
! .TH VIS l "24 October 1988"
  .SH NAME
  vis \- repeatedly run command, refreshing screen
  .SH SYNTAX
***************
*** 2,8
  .SH NAME
  vis \- repeatedly run command, refreshing screen
  .SH SYNTAX
! .B vis "[-d delay] [-f] command [args]"
  .SH DESCRIPTION
  .I Vis
  repeatedly executes a specified

--- 2,8 -----
  .SH NAME
  vis \- repeatedly run command, refreshing screen
  .SH SYNTAX
! .B vis "[-d delay] [-f] [-h] [-s] command [args]"
  .SH DESCRIPTION
  .I Vis
  repeatedly executes a specified
***************
*** 67,72
  status line by a ``!'' flag whenever a non-zero status has been returned
  by
  .B command .
  .SH EXAMPLES
  vis ps
  .IP "" 5

--- 67,85 -----
  status line by a ``!'' flag whenever a non-zero status has been returned
  by
  .B command .
+ .TP
+ .B -h
+ causes the entire status line and the following blank line to be
+ suppressed, which leaves the full screen available for the output of
+ .B command .
+ .TP
+ .B -s
+ causes
+ .I vis
+ to use standout mode for any bytes that have changed between the
+ previous execution of
+ .B command
+ and the current one.
  .SH EXAMPLES
  vis ps
  .IP "" 5
***************
*** 77,82
  .IP "" 5
  Display the system users and disk usage statistics every 60 seconds.
  Separate the two with a blank line.
  .SH "SEE ALSO"
  User Commands (1):  sh, csh
  .SH DIAGNOSTICS

--- 90,100 -----
  .IP "" 5
  Display the system users and disk usage statistics every 60 seconds.
  Separate the two with a blank line.
+ .PP
+ vis -s ls -l
+ .IP "" 5
+ Continually display a long directory listing, highlighting via standout
+ mode the parts that change each time.
  .SH "SEE ALSO"
  User Commands (1):  sh, csh
  .SH DIAGNOSTICS
***************
*** 94,96
  It has been substantially enhanced and generalized by George M. Sipe
  (currently - 7/88, at rebel!george) to the point where Dan would no
  longer recognize it.

--- 112,118 -----
  It has been substantially enhanced and generalized by George M. Sipe
  (currently - 7/88, at rebel!george) to the point where Dan would no
  longer recognize it.
+ .PP
+ Steve Alter (alter at ttidca.tti.com) added the -h option.
+ .PP
+ Anton Chernoff (abc at lpi.uucp) added the -s option.
X
fi
exit 0
#	End of shell archive

-- 
George M. Sipe,		Phone: (404) 662-1533
Tolerant Systems, 6961 Peachtree Industrial, Norcross, GA  30071
UUCP: ...!{decvax,hplabs,linus,rutgers,seismo}!gatech!rebel!george



More information about the Comp.sources.misc mailing list