george@rebel.UUCP (George M. Sipe) (10/28/88)
Posting-number: Volume 5, Issue 5 Submitted-by: "George M. Sipe" <george@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@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@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@ttidca.tti.com) added the -h option. + + Anton Chernoff (abc@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@ttidca.tti.com) added the -h option. + + Anton Chernoff (abc@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@ttidca.tti.com) added the -h option. + .PP + Anton Chernoff (abc@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