### 4.3 Embedding example ¶

Suppose you want to write a function which returns `sqrt(r^2-x^2)`, with some of the nice features of the `abs` function, to be called `rtleg` for “right triangle leg”. Your first option is to simply write an interpreted function:

    func rtleg(r,x,..)
    {
      rr = 1./r;
      x *= rr;  /* prevent overflow for very large or small r */
      y = 1. - x*x;
      while (!is_void((x=next_arg()))) { x *= rr; y -= x*x; }
      return r*sqrt(y);
    }

This interpreted function is likely the best solution, because the required function is simple and vectorizes naturally. For the sake of argument, however, suppose that you wanted to create a compiled version of `rtleg` instead. Now you need not only interpreted code, in a file `rtleg.i`, but also compiled code in a file `rtleg.c`. Let’s consider two cases: First, let’s use the `PROTOTYPE` comment and let codger generate the required wrapper code. Second, let’s write the wrapper code using `yapi.h` directly.