|
|
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:objcopy.c 1.0 */
9: #include "picasso.h"
10: #include "y.tab.h"
11:
12: obj *copyone (p, delx, dely)
13: obj *p;
14: double delx, dely;
15: {
16: obj *q, *r;
17: unsigned n;
18:
19: if (p->o_type > TEXT)
20: return p;
21: n = sizeof(obj) + sizeof(YYSTYPE) * (p->o_size - 1);
22: if ((q = (obj *)malloc(n)) == NULL) {
23: yyerror("out of space in object copy");
24: exit(1);
25: }
26: memcpy (q, p, n);
27: q->o_next = objtail;
28: q->o_prev = objtail->o_prev;
29: q->o_prev->o_next = objtail->o_prev = q;
30: q->o_nt1 = ntext; /* copy all the text strings */
31: q->o_nt2 = copytext(p->o_nt1, p->o_nt2);
32: translate(q, delx, dely);
33:
34: if (q->o_type == BLOCK) { /* copy objects through BLOCKEND */
35:
36: for (r = p->o_next; r != p->o_val[N_VAL].o; r = r->o_next)
37: copyone(r, 0.0, 0.0)->o_parent = q;
38:
39: q->o_val[N_VAL].o = r = makenode (BLOCKEND, 0, p->o_layer);
40: r->o_parent = q;
41: }
42: return q;
43: }
44:
45: obj *copypos (p, q)
46: obj *p, *q;
47: {
48: obj *r;
49: float bnd[4];
50: double ox,oy;
51:
52: ox = Xformx(p, 1, p->o_x, p->o_y);
53: oy = Xformy(p, 0, p->o_x, p->o_y);
54: r = copyone(p, q->o_x - ox, q->o_y - oy);
55: get_bounds(r, bnd, 1);
56: track_bounds(bnd[0],bnd[1],bnd[2],bnd[3]);
57: }
58:
59: obj *copyobj (p, xx, yy)
60: obj *p;
61: char *xx, *yy;
62: {
63: obj *q;
64: struct symtab *x, *y;
65: int i;
66: float cbox[4], obox[4];
67: double x0, y0, x1, y1;
68:
69: if ((x = lookup(xx)) == NULL || (y = lookup(yy)) == NULL) {
70: yyerror("no position defined by (%s,%s)", xx, yy);
71: return (p);
72: }
73: else {
74: x0 = Xformx(p, 1, p->o_x, p->o_y);
75: y0 = Xformy(p, 0, p->o_x, p->o_y);
76: cbox[0] = cbox[1] = cbox[2] = cbox[3] = 0;
77: first_xy (x, y, &x1, &y1);
78: do {
79: q = copyone (p, x1-x0, y1-y0);
80: extreme (x1-x0, y1-y0, cbox);
81: } while (next_xy (x, y, &x1, &y1));
82: get_bounds (p, obox, 1);
83: for (i = 0; i < 4; ++i)
84: cbox[i] += obox[i];
85: track_bounds(cbox[0],cbox[1],cbox[2],cbox[3]);
86: return q; /* i.e., last copy */
87: }
88: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.