--- ray/src/cv/arch2rad.c 1990/12/11 08:45:46 1.1 +++ ray/src/cv/arch2rad.c 2003/11/15 17:54:06 2.3 @@ -1,17 +1,17 @@ -/* Copyright (c) 1990 Regents of the University of California */ - #ifndef lint -static char SCCSid[] = "$SunId$ LBL"; +static const char RCSid[] = "$Id: arch2rad.c,v 2.3 2003/11/15 17:54:06 schorsch Exp $"; #endif - /* * Convert Architrion file to Radiance * * Greg Ward */ +#include #include +#include +#include "rtio.h" #include "trans.h" #define DEFMAPFILE "/usr/local/lib/ray/lib/arch.map" @@ -94,10 +94,39 @@ char openmod[] = "opening"; char *progname; /* argv[0] */ +void arch2rad(FILE *inp, FILE *out); +void arch2names(FILE *inp); -main(argc, argv) /* translate Architrion file */ -int argc; -char *argv[]; +int hasmatch(BLOCK *bp, RULEHD *mp); + +void getfhead(FILE *fp); +void puthead(FILE *fp); + +int getblock(BLOCK *bp, FILE *fp); +void putblock(BLOCK *bp, FILE *fp); +void doneblock(BLOCK *bp); + +int getopening(OPNG *op, FILE *fp); +void add2quals(BLOCK *bp); +int matchrule(BLOCK *bp, RULEHD *rp); + +void putopenmod(char *sm, char *ml[], int nm, FILE *fp); +void putface(char *m, char *bn, char *fn, PRISM *p, + int a, int b, int c, int d, FILE *fp); +void putfaces(char *m, BLOCK *bp, int ff, FILE *fp); +void putpoint(PRISM *p, int n, FILE *fp); +void putopening(OPNG *op, FILE *fp); + +int checkface(PRISM *p, int a, int b, int c, int d); + +void lcross(long vr[3], long v1[3], long v2[3]); + + +int +main( /* translate Architrion file */ + int argc, + char *argv[] +) { int donames = 0; /* -n flag, produce namelist */ int i; @@ -139,8 +168,11 @@ userr: } -arch2rad(inp, out) /* translate Architrion file to Radiance */ -FILE *inp, *out; +void +arch2rad( /* translate Architrion file to Radiance */ + FILE *inp, + FILE *out +) { int nbs, nos; BLOCK blk; @@ -164,8 +196,10 @@ FILE *inp, *out; } -arch2names(inp) /* get name list from an Architrion file */ -FILE *inp; +void +arch2names( /* get name list from an Architrion file */ + FILE *inp +) { BLOCK blk; @@ -177,9 +211,11 @@ FILE *inp; } -hasmatch(bp, mp) /* check for any match in rule list */ -BLOCK *bp; -RULEHD *mp; +int +hasmatch( /* check for any match in rule list */ + BLOCK *bp, + RULEHD *mp +) { if (mp == NULL) return(0); @@ -189,28 +225,29 @@ RULEHD *mp; } -getfhead(fp) /* get file header */ -FILE *fp; +void +getfhead( /* get file header */ + FILE *fp +) { char buf[MAXSTR]; int i, n; + register int c; /* get file name */ if (fgets(buf, MAXSTR, fp) == NULL) goto readerr; - if ((n = strlen(buf)) < 1) - goto readerr; - buf[n-1] = '\0'; + buf[strlen(buf)-1] = '\0'; fhead.filename = savestr(buf); /* get layers */ fhead.layer[0] = "Worksheet"; for (i = 1; i <= 8; i++) { - if (fscanf(fp, "Layer No.%d", &n) != 1 || n != i) + if (fscanf(fp, "L%*[^0-8]%d", &n) != 1 || n != i) goto readerr; - while ((n = getc(fp)) != EOF && (n == ' ' || n == '\t')) + while ((c = getc(fp)) != EOF && (c == ' ' || c == '\t')) ; - if (n == EOF) + if (c == EOF) goto readerr; - ungetc(n, fp); + ungetc(c, fp); if (fgets(buf, MAXSTR, fp) == NULL) goto readerr; buf[strlen(buf)-1] = '\0'; @@ -245,8 +282,10 @@ readerr: } -puthead(fp) /* put out header information */ -FILE *fp; +void +puthead( /* put out header information */ + FILE *fp +) { register int i; @@ -261,9 +300,11 @@ FILE *fp; } -getblock(bp, fp) /* get an Architrion block */ -register BLOCK *bp; -FILE *fp; +int +getblock( /* get an Architrion block */ + register BLOCK *bp, + FILE *fp +) { char word[32]; int i; @@ -302,9 +343,11 @@ memerr: } -getopening(op, fp) /* read in opening from fp */ -register OPNG *op; -FILE *fp; +int +getopening( /* read in opening from fp */ + register OPNG *op, + FILE *fp +) { register int c; char word[32]; @@ -341,22 +384,26 @@ FILE *fp; } -doneblock(bp) /* free data associated with bp */ -register BLOCK *bp; +void +doneblock( /* free data associated with bp */ + register BLOCK *bp +) { register int i; if (bp->nopenings > 0) { for (i = 0; i < bp->nopenings; i++) doneid(&bp->opening[i].frame); - free((char *)bp->opening); + free((void *)bp->opening); } doneid(&bp->refid); } -add2quals(bp) /* add to qualifier lists */ -register BLOCK *bp; +void +add2quals( /* add to qualifier lists */ + register BLOCK *bp +) { ID tmpid; @@ -375,9 +422,11 @@ register BLOCK *bp; } -putblock(bp, fp) /* put out a block */ -BLOCK *bp; -FILE *fp; +void +putblock( /* put out a block */ + BLOCK *bp, + FILE *fp +) { RULEHD *rp; char *mod[NFACES], *sillmod; @@ -412,10 +461,13 @@ FILE *fp; } -putopenmod(sm, ml, nm, fp) /* put out opening modifier */ -char *sm, *ml[]; -int nm; -FILE *fp; +void +putopenmod( /* put out opening modifier */ + char *sm, + char *ml[], + int nm, + FILE *fp +) { int rept, nrepts; register int i, j; @@ -427,18 +479,19 @@ FILE *fp; /* check for repeats */ rept = 0; nrepts = 0; for (i = 0; i < nm; i++) { - if (ml[i] == sm) { + if (ml[i] == sm || !strcmp(ml[i], VOIDID)) { rept |= 1<h[i]; } /* spread reference and opposite */ - if (p->x[1] > p->x[0]) { + if (p->x[2] > p->x[0]) { newp.x[0] -= 2; - newp.x[1] += 2; + newp.x[1] -= 2; newp.x[2] += 2; - newp.x[3] -= 2; - } else if (p->x[0] > p->x[1]) { + newp.x[3] += 2; + } else if (p->x[0] > p->x[2]) { newp.x[0] += 2; - newp.x[1] -= 2; + newp.x[1] += 2; newp.x[2] -= 2; - newp.x[3] += 2; + newp.x[3] -= 2; } - if (p->y[1] > p->y[0]) { + if (p->y[2] > p->y[0]) { newp.y[0] -= 2; - newp.y[1] += 2; + newp.y[1] -= 2; newp.y[2] += 2; - newp.y[3] -= 2; - } else if (p->y[0] > p->y[1]) { + newp.y[3] += 2; + } else if (p->y[0] > p->y[2]) { newp.y[0] += 2; - newp.y[1] -= 2; + newp.y[1] += 2; newp.y[2] -= 2; - newp.y[3] += 2; + newp.y[3] -= 2; } /* put out faces */ sprintf(buf, "op%d", ++nopens); - putface(openmod, buf, "ref", &newp, 0, 4, 7, 3, fp); - putface(openmod, buf, "opp", &newp, 1, 2, 6, 5, fp); - putface(openmod, buf, "end1", &newp, 3, 7, 6, 2, fp); - putface(openmod, buf, "end2", &newp, 0, 1, 5, 4, fp); - putface(openmod, buf, "bot", &newp, 0, 3, 2, 1, fp); - putface(openmod, buf, "top", &newp, 4, 5, 6, 7, fp); + putface(openmod, buf, "ref", &newp, 4, 5, 1, 0, fp); + putface(openmod, buf, "opp", &newp, 2, 6, 7, 3, fp); + putface(openmod, buf, "end1", &newp, 5, 6, 2, 1, fp); + putface(openmod, buf, "end2", &newp, 3, 7, 4, 0, fp); + putface(openmod, buf, "bot", &newp, 1, 2, 3, 0, fp); + putface(openmod, buf, "top", &newp, 7, 6, 5, 4, fp); } int -matchrule(bp, rp) /* see if block matches this rule */ -register BLOCK *bp; -register RULEHD *rp; +matchrule( /* see if block matches this rule */ + register BLOCK *bp, + register RULEHD *rp +) { register int i; ID tmpid; if (rp->qflg & FL(Q_LAY)) { /* check layer */ - tmpid.name = NULL; + tmpid.name = fhead.layer[bp->layer]; tmpid.number = bp->layer; if (!matchid(&tmpid, &idm(rp)[Q_LAY])) return(0); @@ -531,11 +587,13 @@ register RULEHD *rp; } -putfaces(m, bp, ff, fp) /* put out faces */ -char *m; -BLOCK *bp; -register int ff; -FILE *fp; +void +putfaces( /* put out faces */ + char *m, + BLOCK *bp, + register int ff, + FILE *fp +) { char *blkname(), *bn; @@ -543,12 +601,12 @@ FILE *fp; return; bn = blkname(bp); if (ff & 1<p, 3, 7, 4, 0, fp); + putface(m, bn, "ref", &bp->p, 4, 5, 1, 0, fp); if (ff & 1<p, 5, 6, 2, 1, fp); + putface(m, bn, "opp", &bp->p, 2, 6, 7, 3, fp); if (ff & 1<p, 2, 6, 7, 3, fp); - putface(m, bn, "end2", &bp->p, 4, 5, 1, 0, fp); + putface(m, bn, "end1", &bp->p, 5, 6, 2, 1, fp); + putface(m, bn, "end2", &bp->p, 3, 7, 4, 0, fp); } if (ff & 1<p, 1, 2, 3, 0, fp); @@ -558,26 +616,29 @@ FILE *fp; char * -blkname(bp) /* think up a good name for this block */ -register BLOCK *bp; +blkname( /* think up a good name for this block */ + register BLOCK *bp +) { static char nambuf[32]; static int blkcnt = 0; register char *nam; - register int i; + register int i, j; + sprintf(nambuf, "l%d.", bp->layer); + i = strlen(nambuf); nam = bp->refid.name; - if (nam == NULL) - nam = fhead.layer[bp->layer]; if (nam == NULL) { - sprintf(nambuf, "l%d.", bp->layer); - i = strlen(nambuf); - } else { - for (i = 0; i < 12 && nam[i]; i++) { - if (nam[i] == ' ' || nam[i] == '\t') - nambuf[i] = '_'; + nam = fhead.layer[bp->layer]; + if (nam != NULL) + i = 0; + } + if (nam != NULL) { + for (j = 0; j < 12 && nam[j]; j++) { + if (nam[j] == ' ' || nam[j] == '\t') + nambuf[i++] = '_'; else - nambuf[i] = nam[i]; + nambuf[i++] = nam[j]; } nambuf[i++] = '.'; } @@ -590,12 +651,18 @@ register BLOCK *bp; } -putface(m, bn, fn, p, a, b, c, d, fp) /* put out a face */ -char *m; -char *bn, *fn; -PRISM *p; -int a, b, c, d; -FILE *fp; +void +putface( /* put out a face */ + char *m, + char *bn, + char *fn, + PRISM *p, + int a, + int b, + int c, + int d, + FILE *fp +) { int cf; @@ -629,9 +696,12 @@ FILE *fp; #define ldot(v1,v2) (v1[0]*v2[0]+v1[1]*v2[1]+v1[2]*v2[2]) -long -lcross(vr, v1, v2) /* compute cross product */ -register long vr[3], v1[3], v2[3]; +void +lcross( /* compute cross product */ + register long vr[3], + register long v1[3], + register long v2[3] +) { vr[0] = v1[1]*v2[2] - v1[2]*v2[1]; vr[1] = v1[2]*v2[0] - v1[0]*v2[2]; @@ -642,9 +712,14 @@ register long vr[3], v1[3], v2[3]; #define labs(a) ((a)>0 ? (a) : -(a)) -checkface(p, a, b, c, d) /* check a face for validity */ -register PRISM *p; -int a, b, c, d; +int +checkface( /* check a face for validity */ + register PRISM *p, + int a, + int b, + int c, + int d +) { int rval = 0; long lt; @@ -692,10 +767,12 @@ int a, b, c, d; } -putpoint(p, n, fp) /* put out a point */ -register PRISM *p; -int n; -FILE *fp; +void +putpoint( /* put out a point */ + register PRISM *p, + int n, + FILE *fp +) { register int i = n&3; @@ -704,15 +781,20 @@ FILE *fp; } -eputs(s) -char *s; +void +eputs( + char *s +) { fputs(s, stderr); } -quit(code) -int code; +void +quit( + int code +) { exit(code); } +