|
|
researchv10 Norman
/* Copyright (c) 1988 AT&T */
/* All Rights Reserved */
/* THIS IS UNPUBLISHED PROPRIETARY SOURCE CODE OF AT&T */
/* The copyright notice above does not evidence any */
/* actual or intended publication of such source code. */
/* @(#)picasso:objcopy.c 1.0 */
#include "picasso.h"
#include "y.tab.h"
obj *copyone (p, delx, dely)
obj *p;
double delx, dely;
{
obj *q, *r;
unsigned n;
if (p->o_type > TEXT)
return p;
n = sizeof(obj) + sizeof(YYSTYPE) * (p->o_size - 1);
if ((q = (obj *)malloc(n)) == NULL) {
yyerror("out of space in object copy");
exit(1);
}
memcpy (q, p, n);
q->o_next = objtail;
q->o_prev = objtail->o_prev;
q->o_prev->o_next = objtail->o_prev = q;
q->o_nt1 = ntext; /* copy all the text strings */
q->o_nt2 = copytext(p->o_nt1, p->o_nt2);
translate(q, delx, dely);
if (q->o_type == BLOCK) { /* copy objects through BLOCKEND */
for (r = p->o_next; r != p->o_val[N_VAL].o; r = r->o_next)
copyone(r, 0.0, 0.0)->o_parent = q;
q->o_val[N_VAL].o = r = makenode (BLOCKEND, 0, p->o_layer);
r->o_parent = q;
}
return q;
}
obj *copypos (p, q)
obj *p, *q;
{
obj *r;
float bnd[4];
double ox,oy;
ox = Xformx(p, 1, p->o_x, p->o_y);
oy = Xformy(p, 0, p->o_x, p->o_y);
r = copyone(p, q->o_x - ox, q->o_y - oy);
get_bounds(r, bnd, 1);
track_bounds(bnd[0],bnd[1],bnd[2],bnd[3]);
}
obj *copyobj (p, xx, yy)
obj *p;
char *xx, *yy;
{
obj *q;
struct symtab *x, *y;
int i;
float cbox[4], obox[4];
double x0, y0, x1, y1;
if ((x = lookup(xx)) == NULL || (y = lookup(yy)) == NULL) {
yyerror("no position defined by (%s,%s)", xx, yy);
return (p);
}
else {
x0 = Xformx(p, 1, p->o_x, p->o_y);
y0 = Xformy(p, 0, p->o_x, p->o_y);
cbox[0] = cbox[1] = cbox[2] = cbox[3] = 0;
first_xy (x, y, &x1, &y1);
do {
q = copyone (p, x1-x0, y1-y0);
extreme (x1-x0, y1-y0, cbox);
} while (next_xy (x, y, &x1, &y1));
get_bounds (p, obox, 1);
for (i = 0; i < 4; ++i)
cbox[i] += obox[i];
track_bounds(cbox[0],cbox[1],cbox[2],cbox[3]);
return q; /* i.e., last copy */
}
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.