Mercurial > hg > toybox
annotate toys/pending/watch.c @ 1349:bf2e5591bdf0 draft
Cleanup strings.
author | Rob Landley <rob@landley.net> |
---|---|
date | Wed, 11 Jun 2014 08:02:55 -0500 |
parents | 0ecfaa7022e8 |
children |
rev | line source |
---|---|
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
1 /* watch.c - Execute a program periodically |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
2 * |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
3 * Copyright 2013 Sandeep Sharma <sandeep.jack2756@gmail.com> |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
4 * Copyright 2013 Kyungwan Han <asura321@gmail.com> |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
5 * |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
6 USE_WATCH(NEWTOY(watch, "^<1n#<0=2te", TOYFLAG_USR|TOYFLAG_BIN)) |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
7 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
8 config WATCH |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
9 bool "watch" |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
10 default n |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
11 help |
1265
0ecfaa7022e8
usage: is lower case (the help generator looks for that, might as well be consistent).
Rob Landley <rob@landley.net>
parents:
1183
diff
changeset
|
12 usage: watch [-n SEC] [-t] PROG ARGS |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
13 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
14 Run PROG periodically |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
15 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
16 -n Loop period in seconds (default 2) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
17 -t Don't print header |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
18 -e Freeze updates on command error, and exit after enter. |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
19 */ |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
20 #define FOR_watch |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
21 #include "toys.h" |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
22 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
23 GLOBALS( |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
24 int interval; |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
25 ) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
26 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
27 void watch_main(void) |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
28 { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
29 int i = 0, hlen; |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
30 time_t t; |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
31 unsigned width = 80, len = sizeof("Www Mmm dd hh:mm:ss yyyy") - 1 ; |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
32 char *header, *cmd = *toys.optargs; |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
33 int retval; |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
34 |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
35 while(toys.optargs[++i]) |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
36 { |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
37 char * oldcmd = cmd; |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1096
diff
changeset
|
38 cmd = xmprintf("%s %s", oldcmd, toys.optargs[i]); |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
39 if (CFG_TOYBOX_FREE) free(oldcmd); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
40 } |
1183
0752b2d58909
Rename xmsprintf() to just xmprintf().
Rob Landley <rob@landley.net>
parents:
1096
diff
changeset
|
41 header = xmprintf("Every %us: %s", TT.interval, cmd); |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
42 hlen = strlen(header); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
43 |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
44 while(1) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
45 xprintf("\033[H\033[J"); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
46 if(!(toys.optflags & FLAG_t)) { |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
47 terminal_size(&width, NULL); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
48 if (!width) width = 80; //on serial it may return 0. |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
49 time(&t); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
50 if (width > (hlen + len)) xprintf("%s", header); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
51 if(width >= len) |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
52 xprintf("%*s\n",width + ((width > (hlen + len))?-hlen:0) + 1, ctime(&t)); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
53 else |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
54 xprintf("\n\n"); |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
55 } |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
56 fflush(NULL); //making sure the screen is clear |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
57 retval = system(cmd); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
58 if ((toys.optflags & FLAG_e) && retval){ |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
59 xprintf("command exit with non-zero status, press enter to exit\n"); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
60 getchar(); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
61 break; |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
62 } |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
63 sleep(TT.interval); |
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
64 } |
1096
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
65 |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
66 if (CFG_TOYBOX_FREE){ |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
67 free(header); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
68 if (cmd != *toys.optargs) free(cmd); |
580a0300b68f
watch: Add support for -e option, remove memory leak and deal with not-wide terminals
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
1020
diff
changeset
|
69 } |
1020
fe7725c1819a
Add watch and ps, sent by Ashwini Sharma.
Rob Landley <rob@landley.net>
parents:
diff
changeset
|
70 } |