diff toys/pending/watch.c @ 1020:fe7725c1819a

Add watch and ps, sent by Ashwini Sharma.
author Rob Landley <rob@landley.net>
date Tue, 20 Aug 2013 15:37:42 -0500
parents
children 580a0300b68f
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/toys/pending/watch.c	Tue Aug 20 15:37:42 2013 -0500
@@ -0,0 +1,55 @@
+/* watch.c - Execute a program periodically
+ *
+ * Copyright 2013 Sandeep Sharma <sandeep.jack2756@gmail.com>
+ * Copyright 2013 Kyungwan Han <asura321@gmail.com>
+ *
+USE_WATCH(NEWTOY(watch, "^<1n#<0=2t", TOYFLAG_USR|TOYFLAG_BIN))
+
+config WATCH
+  bool "watch"
+  default n
+  help
+    Usage: watch [-n SEC] [-t] PROG ARGS
+
+    Run PROG periodically
+
+    -n  Loop period in seconds (default 2)
+    -t  Don't print header
+*/
+#define FOR_watch
+#include "toys.h"
+
+GLOBALS(
+  int interval; 
+)
+
+void watch_main(void)
+{
+  int i = 0, hlen;
+  time_t t;
+  unsigned width = 80, len = sizeof("1234-67-90 23:56:89");//time format
+  char *header, *cmd = *toys.optargs;
+
+  while(toys.optargs[++i]) cmd = xmsprintf("%s %s", cmd, toys.optargs[i]);
+  header = xmsprintf("Every %us: %s", TT.interval, cmd);
+
+  while(1) {
+    xprintf("\033[H\033[J");
+    if(!(toys.optflags & FLAG_t)) {
+      xprintf("%s", header);
+      hlen = strlen(header);
+      terminal_size(&width, NULL);
+      if (!width) width = 80; //on serial it may return 0.
+      if (width > (hlen + len)) {                         
+        time(&t);                                         
+        strftime(toybuf, len, "%Y-%m-%d %H:%M:%S", localtime(&t));
+        xprintf("%*s", width - hlen, toybuf);             
+      }
+      xprintf("\n\n"); // 1'\n' for space between header and result
+    }
+    fflush(NULL); //making sure the screen is clear
+    system(cmd);
+    sleep(TT.interval);
+  }
+  if (CFG_TOYBOX_FREE) free(header);
+}