From 07424fed977394abefdc0f0c5420aa8c75d55d4d Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 8 Dec 2003 02:43:59 +0000 Subject: ver 0.3 alpha (malloc) --- watch.1 | 4 ++-- watch.c | 84 +++++++++++++++++++++++++++++++++-------------------------------- 2 files changed, 45 insertions(+), 43 deletions(-) diff --git a/watch.1 b/watch.1 index 15bfc29..944df1f 100644 --- a/watch.1 +++ b/watch.1 @@ -1,5 +1,5 @@ .\" $Id$ -.Dd Juni 05, 2003 +.Dd December 07, 2003 .Dt WATCH 1 .Os .Sh NAME @@ -7,7 +7,7 @@ .Nd execute program periodically, showing output fullscreen .Sh SYNOPSIS .Nm watch -.Op Fl vns Ar +.Op Fl v | Fl ns Ar .Op Ar command .Sh DESCRIPTION .Nm diff --git a/watch.c b/watch.c index 9ea413c..b893c6b 100644 --- a/watch.c +++ b/watch.c @@ -27,30 +27,29 @@ #include #include #include -#define MAXBUF 255 +#define DEBUG 1 static char *copyright = "(c) 2003 demon "; -static char *version = "0.2"; +static char *version = "0.3 alpha"; extern char *__progname; -time_t tval; -int die_flag; +short die_flag; +short n_flag=0; int period=2; -void title(); +void loop(char *); +void title(char *); void usage(); void die(); int main (int argc, char **argv) { - int n_flag=0; char ch; - char cmd[MAXBUF]; - char buf[MAXBUF]; - FILE *pipe; - + char *cmd; + signal(SIGINT, die); signal(SIGTERM, die); signal(SIGHUP, die); + while ((ch = getopt(argc, argv, "s:vn")) != -1) switch (ch) { @@ -74,50 +73,53 @@ int main (int argc, char **argv) { argv += optind; if(*argv) { - strncpy(cmd, *argv, sizeof(cmd)-1); + cmd = (char *)malloc(strlen(*argv) + 1); + memcpy(cmd, *argv, strlen(*argv)); while(*++argv) { - strncat(cmd, " ", sizeof(cmd)-1); - strncat(cmd, *argv, sizeof(cmd)-1); - } - } else { - if(isatty(fileno(stdin))) - fprintf(stderr, "Command: "); - (void)fgets(cmd, sizeof(cmd), stdin); - cmd[strlen(cmd) - 1] = '\0'; - } - - if(strlen(cmd)) { - initscr(); - while(!die_flag) { - move(0,0); - if(!n_flag) - title(cmd); - pipe = popen(cmd, "r"); - while(fgets(buf, sizeof(buf), pipe)) - printw("%s",buf); - refresh(); - pclose(pipe); - sleep(period); - } - endwin(); - } else { + cmd = (char *)realloc(cmd, strlen(cmd) + strlen(*argv) + 2); + cmd[strlen(cmd)]= ' '; + memcpy(cmd + strlen(cmd), *argv, strlen(*argv)); + } + loop(cmd); + free(cmd); + } else usage(); - } exit(0); } -void title(char **cmd) { - char curtime[30]; +void loop(char *cmd) { + char buf; + FILE *pipe; + + initscr(); + while(!die_flag) { + move(0,0); + if(!n_flag) + title(cmd); + pipe = popen(cmd, "r"); + while((buf = fgetc(pipe)) != EOF) + printw("%c",buf); + refresh(); + pclose(pipe); + sleep(period); + } + endwin(); +} + +void title(char *cmd) { + char *curtime; + time_t tval; + time(&tval); - strncpy(curtime, ctime(&tval), sizeof(curtime)-1); + curtime = strdup(ctime(&tval)); curtime[strlen(curtime) - 6] = '\0'; printw("%s\tEvery %ds: %s", curtime, period, cmd); move(2,0); } void usage() { - (void)fprintf(stderr, "Usage: %s [-s ] [ -vn ] [command]\n", __progname); + (void)fprintf(stderr, "Usage: %s [-vns ] [command]\n", __progname); exit (1); } -- cgit v1.2.3