Annotation of researchv10no/cmd/lcc/tst/struct.c, revision 1.1.1.1

1.1       root        1: typedef struct point { int x,y; } point;
                      2: typedef struct rect { point pt1, pt2; } rect;
                      3: 
                      4: point addpoint(point p1, point p2) {   /* add two points */
                      5:        p1.x += p2.x;
                      6:        p1.y += p2.y;
                      7:        return p1;
                      8: }
                      9: 
                     10: #define min(a, b) ((a) < (b) ? (a) : (b))
                     11: #define max(a, b) ((a) > (b) ? (a) : (b))
                     12: 
                     13: rect canonrect(rect r) {               /* canonicalize rectangle coordinates */
                     14:        rect temp;
                     15: 
                     16:        temp.pt1.x = min(r.pt1.x, r.pt2.x);
                     17:        temp.pt1.y = min(r.pt1.y, r.pt2.y);
                     18:        temp.pt2.x = max(r.pt1.x, r.pt2.x);
                     19:        temp.pt2.y = max(r.pt1.y, r.pt2.y);
                     20:        return temp;
                     21: }
                     22: 
                     23: point makepoint(int x, int y) {                /* make a point from x and y components */
                     24:        point p;
                     25: 
                     26:        p.x = x;
                     27:        p.y = y;
                     28:        return p;
                     29: }
                     30: 
                     31: rect makerect(point p1, point p2) {    /* make a rectangle from two points */
                     32:        rect r;
                     33: 
                     34:        r.pt1 = p1;
                     35:        r.pt2 = p2;
                     36:        return canonrect(r);
                     37: }
                     38: 
                     39: int ptinrect(point p, rect r) {                /* is p in r? */
                     40:        return p.x >= r.pt1.x && p.x < r.pt2.x
                     41:                && p.y >= r.pt1.y && p.y < r.pt2.y;
                     42: }
                     43: 
                     44: main() {
                     45:        int i;
                     46:        point x, origin = { 0, 0 }, maxpt = { 320, 320 };
                     47:        point pts[] = { -1, -1, 1, 1, 20, 300, 500, 400 };
                     48:        rect screen = makerect(addpoint(maxpt, makepoint(-10, -10)),
                     49:                addpoint(origin, makepoint(10, 10)));
                     50: 
                     51:        for (i = 0; i < sizeof pts/sizeof pts[0]; i++) {
                     52:                printf("(%d,%d) is ", pts[i].x,
                     53:                        (x = makepoint(pts[i].x, pts[i].y)).y);
                     54:                if (ptinrect(x, screen) == 0)
                     55:                        printf("not ");
                     56:                printf("within [%d,%d; %d,%d]\n", screen.pt1.x, screen.pt1.y,
                     57:                        screen.pt2.x, screen.pt2.y);
                     58:        }
                     59:        exit(0);
                     60: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.