Annotation of researchv10dc/cmd/picasso/boxgen.c, revision 1.1

1.1     ! root        1: /*     Copyright (c) 1988 AT&T */
        !             2: /*       All Rights Reserved   */
        !             3: 
        !             4: /*     THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T     */
        !             5: /*     The copyright notice above does not evidence any        */
        !             6: /*     actual or intended publication of such source code.     */
        !             7: 
        !             8: /*     @(#)picasso:boxgen.c    1.0     */
        !             9: #include       "picasso.h"
        !            10: #include       "y.tab.h"
        !            11: 
        !            12: /*     BOX parameters are a radius (default 0) for rounding corners    */
        !            13: /*     and the NW corner of the box -- so that the box can be rebuilt  */
        !            14: /*     (under transformation, the bounding box by itself may not be    */
        !            15: /*     sufficient, though it contains 4 of the 8 coordinate values.)   */
        !            16: 
        !            17: obj *boxgen()
        !            18: {
        !            19:        static  double  prevht  = HT;
        !            20:        static  double  prevwid = WID;  /* golden mean, sort of */
        !            21:        static  double  prevrad = 0;
        !            22: 
        !            23: struct objattr obat;
        !            24:        double  x0, y0, x1, y1, xwith, ywith;
        !            25:        int     i, at, with;
        !            26:        obj     *p, *ppos;
        !            27:        Attr    *ap;
        !            28: 
        !            29:        obat.a_ht  = getfval("boxht");
        !            30:        obat.a_wid = getfval("boxwid");
        !            31:        obat.a_rad = getfval("boxrad");
        !            32:        obat.a_layer = (int)getfval("curlayer");
        !            33:        obat.a_flags = EDGED;
        !            34:        obat.a_weight = obat.a_lcolor = obat.a_pcolor = obat.a_tcolor = -1;
        !            35:        obat.a_dashpat.a = (float *)0;
        !            36:        set_text();
        !            37:        at = with = xwith = ywith = 0;
        !            38:        for (i = 0; i < nattr; i++) {
        !            39:                ap = &attr[i];
        !            40:                switch (ap->a_type) {
        !            41:                default:
        !            42:                        miscattrs(ap, &obat);
        !            43:                        break;
        !            44:                case SAME:
        !            45:                        obat.a_ht  = prevht;
        !            46:                        obat.a_wid = prevwid;
        !            47:                        obat.a_rad = prevrad;
        !            48:                        break;
        !            49:                case WITH:
        !            50:                        with = ap->a_val.i;     /* corner */
        !            51:                        break;
        !            52:                case AT:
        !            53:                        ppos = ap->a_val.o;
        !            54:                        curx = Xformx(ppos, 1, ppos->o_x, ppos->o_y);
        !            55:                        cury = Xformy(ppos, 0, ppos->o_x, ppos->o_y);
        !            56:                        at++;
        !            57:                        break;
        !            58:                }
        !            59:        }
        !            60:        if (with) {
        !            61:                switch (with) {
        !            62:                case NORTH:     ywith = -obat.a_ht/2;                   break;
        !            63:                case SOUTH:     ywith =  obat.a_ht/2;                   break;
        !            64:                case EAST:      xwith = -obat.a_wid/2;                  break;
        !            65:                case WEST:      xwith =  obat.a_wid/2;                  break;
        !            66:                case NE:        xwith = -obat.a_wid/2;
        !            67:                                ywith = -obat.a_ht/2;                   break;
        !            68:                case SE:        xwith = -obat.a_wid/2;
        !            69:                                ywith =  obat.a_ht/2;                   break;
        !            70:                case NW:        xwith =  obat.a_wid/2;
        !            71:                                ywith = -obat.a_ht/2;                   break;
        !            72:                case SW:        xwith =  obat.a_wid/2;
        !            73:                                ywith =  obat.a_ht/2;                   break;
        !            74:                case CENTER:
        !            75:                case START:
        !            76:                case END:                                               break;
        !            77:                default:        xwith =  -obat.a_wid/2 * xdelta[with%8];
        !            78:                                ywith =  -obat.a_ht/2  * ydelta[with%8];         break;
        !            79:                }
        !            80:                curx += xwith;
        !            81:                cury += ywith;
        !            82:        }
        !            83:        if (!at) {
        !            84:                if (isright(hvmode))
        !            85:                        curx += obat.a_wid/2;
        !            86:                else if (isleft(hvmode))
        !            87:                        curx -= obat.a_wid/2;
        !            88:                else if (isup(hvmode))
        !            89:                        cury += obat.a_ht/2;
        !            90:                else
        !            91:                        cury -= obat.a_ht/2;
        !            92:        }
        !            93:        p = makenode(BOX, N_VAL+1, obat.a_layer);
        !            94:        p->o_val[N_VAL].f = obat.a_rad;
        !            95:        p->o_wid = obat.a_wid;
        !            96:        p->o_ht  = obat.a_ht;
        !            97:        x0 = curx - obat.a_wid/2;
        !            98:        y0 = cury - obat.a_ht/2;
        !            99:        x1 = curx + obat.a_wid/2;
        !           100:        y1 = cury + obat.a_ht/2;
        !           101:        primattrs(p,&obat);
        !           102:        text_bounds(p);
        !           103:        track_bounds(x0-p->o_weight/2, y0-p->o_weight/2,
        !           104:                     x1+p->o_weight/2, y1+p->o_weight/2);
        !           105:        if (isright(hvmode))
        !           106:                curx = x1;
        !           107:        else if (isleft(hvmode))
        !           108:                curx = x0;
        !           109:        else if (isup(hvmode))
        !           110:                cury = y1;
        !           111:        else
        !           112:                cury = y0;
        !           113:        prevht  = obat.a_ht;
        !           114:        prevwid = obat.a_wid;
        !           115:        prevrad = obat.a_rad;
        !           116:        return(p);
        !           117: }

unix.superglobalmegacorp.com

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