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:", &param);  
> > 
> >>         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

Reply via email to