A quick note:
It might be assumed
...that the vector() function is not roughly equivalent to the str_create function
...and that the vector() function might return a VECTOR from a shared internal pool,
...and that such memory probably should not be directly freed by the user.
VECTORs and ANGLEs might be declared in structs as such:
typdef struct t{
ANGLE a1;
VECTOR v1;
} t;
Of course that might be "ill-advised".