On Thu May 13 03:51:56 EDT 2010, santu...@gmail.com wrote:
> Yes, I'm agree, but with one exception - awk(1) separates a data from a
> code, hoc(1) doesn't do it. So hoc(1) can be used for plain calculation
> tasks, not for  processing input files with a data.

both awk and hoc accept standard input

        echo 1 + 2 | hoc        # (sic, see below)
        echo 1 2 | hoc -e '{while(read(x) != 0)y += x' ^ $nl ^ ' print y, 
"\n"}' -
        echo 1 2 | awk '{for(i = 1; i <= NF; i++) x+= $i}END{print x}' 

or execute directly from the command line

        hoc -e '1 + 2'
        awk 'BEGIN{print 1 + 2; exit}'

note that the wierd extra {} are required for hoc.  hoc read
requests are satisfied from the same file descriptor as the data.
so the input needs to be exhausted before read runs.

also, the trailing newline on the input is required, since Bgetd()
won't accept '1<EOF>'.  this seems like a bug induced by the
fact that charstod has one argument too few.  if it also returned
the number of characters consumed, Bgetd could read

int
Bgetd(Biobufhdr *bp, double *dp)
{
        double d;
        struct bgetd b;

        b.b = bp;
        b.eof = 0;
>       b.nchr = 0;
>       d = charstod(Bgetdf, &b, &n);
>       if(b.eof || b.nchr != n)
                return -1;
        Bungetc(bp);
        *dp = d;
        return 1;
}

- erik

Reply via email to