From 5ba841dffa1f6cda712ebcff27c55c9d0a672c67 Mon Sep 17 00:00:00 2001 From: rsc Date: Tue, 4 Jan 2005 21:21:32 +0000 Subject: more include files. --- include/9pclient.h | 42 ++++++++++++++++++++++ include/geometry.h | 100 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 142 insertions(+) create mode 100644 include/9pclient.h create mode 100644 include/geometry.h (limited to 'include') diff --git a/include/9pclient.h b/include/9pclient.h new file mode 100644 index 00000000..8a0d342f --- /dev/null +++ b/include/9pclient.h @@ -0,0 +1,42 @@ +#ifndef _9PCLIENT_H_ +#define _9PCLIENT_H_ 1 +#ifdef __cplusplus +extern "C" { +#endif + +AUTOLIB(9pclient) +/* + * Simple user-level 9P client. + */ + +typedef struct CFsys CFsys; +typedef struct CFid CFid; + +CFsys *fsinit(int); +CFsys *fsmount(int, char*); + +int fsversion(CFsys*, int, char*, int); +CFid *fsauth(CFsys*, char*); +CFid *fsattach(CFsys*, CFid*, char*, char*); +CFid *fsopen(CFsys*, char*, int); +int fsopenfd(CFsys*, char*, int); +long fsread(CFid*, void*, long); +long fsreadn(CFid*, void*, long); +long fswrite(CFid*, void*, long); +void fsclose(CFid*); +void fsunmount(CFsys*); +struct Dir; /* in case there's no lib9.h */ +long fsdirread(CFid*, struct Dir**); +long fsdirreadall(CFid*, struct Dir**); +struct Dir *fsdirstat(CFsys*, char*); +struct Dir *fsdirfstat(CFid*); +int fsdirwstat(CFsys*, char*, struct Dir*); +int fsdirfwstat(CFid*, struct Dir*); +CFid *fsroot(CFsys*); +void fssetroot(CFsys*, CFid*); +CFsys *nsmount(char*, char*); + +#ifdef __cplusplus +} +#endif +#endif diff --git a/include/geometry.h b/include/geometry.h new file mode 100644 index 00000000..274d5b03 --- /dev/null +++ b/include/geometry.h @@ -0,0 +1,100 @@ +#ifndef _GEOMETRY_H_ +#define _GEOMETRY_H_ 1 +#if defined(__cplusplus) +extern "C" { +#endif + + +AUTOLIB(geometry) + +typedef double Matrix[4][4]; +typedef struct Point3 Point3; +typedef struct Quaternion Quaternion; +typedef struct Space Space; +struct Point3{ + double x, y, z, w; +}; +struct Quaternion{ + double r, i, j, k; +}; +struct Space{ + Matrix t; + Matrix tinv; + Space *next; +}; +/* + * 3-d point arithmetic + */ +Point3 add3(Point3 a, Point3 b); +Point3 sub3(Point3 a, Point3 b); +Point3 neg3(Point3 a); +Point3 div3(Point3 a, double b); +Point3 mul3(Point3 a, double b); +int eqpt3(Point3 p, Point3 q); +int closept3(Point3 p, Point3 q, double eps); +double dot3(Point3 p, Point3 q); +Point3 cross3(Point3 p, Point3 q); +double len3(Point3 p); +double dist3(Point3 p, Point3 q); +Point3 unit3(Point3 p); +Point3 midpt3(Point3 p, Point3 q); +Point3 lerp3(Point3 p, Point3 q, double alpha); +Point3 reflect3(Point3 p, Point3 p0, Point3 p1); +Point3 nearseg3(Point3 p0, Point3 p1, Point3 testp); +double pldist3(Point3 p, Point3 p0, Point3 p1); +double vdiv3(Point3 a, Point3 b); +Point3 vrem3(Point3 a, Point3 b); +Point3 pn2f3(Point3 p, Point3 n); +Point3 ppp2f3(Point3 p0, Point3 p1, Point3 p2); +Point3 fff2p3(Point3 f0, Point3 f1, Point3 f2); +Point3 pdiv4(Point3 a); +Point3 add4(Point3 a, Point3 b); +Point3 sub4(Point3 a, Point3 b); +/* + * Quaternion arithmetic + */ +void qtom(Matrix, Quaternion); +Quaternion mtoq(Matrix); +Quaternion qadd(Quaternion, Quaternion); +Quaternion qsub(Quaternion, Quaternion); +Quaternion qneg(Quaternion); +Quaternion qmul(Quaternion, Quaternion); +Quaternion qdiv(Quaternion, Quaternion); +Quaternion qunit(Quaternion); +Quaternion qinv(Quaternion); +double qlen(Quaternion); +Quaternion slerp(Quaternion, Quaternion, double); +Quaternion qmid(Quaternion, Quaternion); +Quaternion qsqrt(Quaternion); +void qball(Rectangle, Mouse *, Quaternion *, void (*)(void), Quaternion *); +/* + * Matrix arithmetic + */ +void ident(Matrix); +void matmul(Matrix, Matrix); +void matmulr(Matrix, Matrix); +double determinant(Matrix); +void adjoint(Matrix, Matrix); +double invertmat(Matrix, Matrix); +/* + * Space stack routines + */ +Space *pushmat(Space *); +Space *popmat(Space *); +void rot(Space *, double, int); +void qrot(Space *, Quaternion); +void scale(Space *, double, double, double); +void move(Space *, double, double, double); +void xform(Space *, Matrix); +void ixform(Space *, Matrix, Matrix); +void look(Space *, Point3, Point3, Point3); +int persp(Space *, double, double, double); +void viewport(Space *, Rectangle, double); +Point3 xformpoint(Point3, Space *, Space *); +Point3 xformpointd(Point3, Space *, Space *); +Point3 xformplane(Point3, Space *, Space *); +#define radians(d) ((d)*.01745329251994329572) +#if defined(__cplusplus) +} +#endif +#endif -- cgit v1.2.3