On Saturday 23 February 2008 13:33:44 walter harms wrote:
>
> Tito wrote:
> > On Friday 22 February 2008 19:13:51 walter harms wrote:
> >> hi list,
> >> this simplifies the coding of the watch utility.
> >> I does not save much bytes but it thing it is easier to read
> >> now. I have changed the date time display as the old one eat
> >> to much space.
> >>
> >> Note:
> >> perhaps it even make sense to make the time display dynamic
> >> if someone is bored ,,,
> >>
> >>
> >> re,
> >> wh
> >>
> >>
> >>
> >
> > Hi,
> >
> >> int watch_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
> >> int watch_main(int argc, char **argv)
> >> {
> >> unsigned opt;
> >> unsigned period = 2;
> >> char *header = NULL;
> >> char *cmd;
> >>
> >> opt_complementary = "-1"; // at least one param please
> >> opt = getopt32(argv, "+dtn:", &cmd);
> >>
> >> if (opt & 0x4) period = xatou(cmd);
> >
> > getopt32 can do this for us:
> > "a+:" A plus after a char in opt_complementary means that the parameter
> > for this option is a nonnegative integer. It will be processed
> > with xatoi_u() - allowed range is 0..INT_MAX.
> >
>
> i tried and failed:
> opt_complementary = "-1:n+";
> opt = getopt32(argv, "+dtn:", &period);
>
> the '+' option is not mentioned in the libbb/getopt32.c of 1.9.1
> did i miss something ?
It is in svn now....but OTOH maybe it is better to use a different solution
for period checking min and max values as procps 3.2.7
/* maximum as in procps 3.2.7 */
period = xatou_range(str, 1, 999999999);
argv += optind;
>
> > int param; // "unsigned param;" will also work
> > opt_complementary = "p+";
> > getopt32(argv, "p:", ¶m);
> >
> >> argv += optind;
> >> cmd=NULL;
> >
> > Maybe char *xasprintf(const char *format, ...) because it checks
> > for malloc errors and is portable on systems that don't have asprintf...
> >
Also one more optimization:
cmd = *argv++;
while (*argv)
str = xasprintf("%s %s", cmd, *argv++);
> >> asprintf(&cmd,"%s",*argv );
> >> while (*++argv)
> >> asprintf(&cmd,"%s %s",cmd,*argv );
> >
> >> while (1) {
> >
>
> done, actualy this was already an older version of my watch.c seems i mixed
> something up :)
>
One more optimization could be to move
get_terminal_width_height(STDIN_FILENO, &width, 0);
header=xasprintf("Every %ds: %-*s", period, width, cmd);
out of the loop as they need to be executed only once.
Ciao,
Tito
> re,
> wh
>
>
_______________________________________________
busybox mailing list
[email protected]
http://busybox.net/cgi-bin/mailman/listinfo/busybox