diff options
author | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-10-04 15:18:22 +0000 |
---|---|---|
committer | tma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea> | 2005-10-04 15:18:22 +0000 |
commit | 1c7864f6d4380797b07c7149111066b61f69f689 (patch) | |
tree | 59057c26f97fdf846b0193e852eeea7e707a9e20 /code/tools/lcc/tst/struct.c | |
parent | 91db83f0cc7c564ff6c853eeb4e790732dae81cd (diff) | |
download | ioquake3-aero-1c7864f6d4380797b07c7149111066b61f69f689.tar.gz ioquake3-aero-1c7864f6d4380797b07c7149111066b61f69f689.zip |
* Moved lcc and q3asm into code/tools
git-svn-id: svn://svn.icculus.org/quake3/trunk@134 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code/tools/lcc/tst/struct.c')
-rw-r--r-- | code/tools/lcc/tst/struct.c | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/code/tools/lcc/tst/struct.c b/code/tools/lcc/tst/struct.c new file mode 100644 index 0000000..fe81681 --- /dev/null +++ b/code/tools/lcc/tst/struct.c @@ -0,0 +1,69 @@ +typedef struct point { int x,y; } point; +typedef struct rect { point pt1, pt2; } rect; + +point addpoint(point p1, point p2) { /* add two points */ + p1.x += p2.x; + p1.y += p2.y; + return p1; +} + +#define min(a, b) ((a) < (b) ? (a) : (b)) +#define max(a, b) ((a) > (b) ? (a) : (b)) + +rect canonrect(rect r) { /* canonicalize rectangle coordinates */ + rect temp; + + temp.pt1.x = min(r.pt1.x, r.pt2.x); + temp.pt1.y = min(r.pt1.y, r.pt2.y); + temp.pt2.x = max(r.pt1.x, r.pt2.x); + temp.pt2.y = max(r.pt1.y, r.pt2.y); + return temp; +} + +point makepoint(int x, int y) { /* make a point from x and y components */ + point p; + + p.x = x; + p.y = y; + return p; +} + +rect makerect(point p1, point p2) { /* make a rectangle from two points */ + rect r; + + r.pt1 = p1; + r.pt2 = p2; + return canonrect(r); +} + +int ptinrect(point p, rect r) { /* is p in r? */ + return p.x >= r.pt1.x && p.x < r.pt2.x + && p.y >= r.pt1.y && p.y < r.pt2.y; +} + +struct odd {char a[3]; } y = {'a', 'b', 0}; + +odd(struct odd y) { + struct odd x = y; + printf("%s\n", x.a); +} + +main() { + int i; + point x, origin = { 0, 0 }, maxpt = { 320, 320 }; + point pts[] = { -1, -1, 1, 1, 20, 300, 500, 400 }; + rect screen = makerect(addpoint(maxpt, makepoint(-10, -10)), + addpoint(origin, makepoint(10, 10))); + + for (i = 0; i < sizeof pts/sizeof pts[0]; i++) { + printf("(%d,%d) is ", pts[i].x, + (x = makepoint(pts[i].x, pts[i].y)).y); + if (ptinrect(x, screen) == 0) + printf("not "); + printf("within [%d,%d; %d,%d]\n", screen.pt1.x, screen.pt1.y, + screen.pt2.x, screen.pt2.y); + } + odd(y); + exit(0); +} + |