| 194 |
|
{ |
| 195 |
|
char buf[MAXSTR]; |
| 196 |
|
int i, n; |
| 197 |
+ |
register int c; |
| 198 |
|
/* get file name */ |
| 199 |
|
if (fgets(buf, MAXSTR, fp) == NULL) |
| 200 |
|
goto readerr; |
| 201 |
< |
if ((n = strlen(buf)) < 1) |
| 201 |
< |
goto readerr; |
| 202 |
< |
buf[n-1] = '\0'; |
| 201 |
> |
buf[strlen(buf)-1] = '\0'; |
| 202 |
|
fhead.filename = savestr(buf); |
| 203 |
|
/* get layers */ |
| 204 |
|
fhead.layer[0] = "Worksheet"; |
| 205 |
|
for (i = 1; i <= 8; i++) { |
| 206 |
< |
if (fscanf(fp, "Layer No.%d", &n) != 1 || n != i) |
| 206 |
> |
if (fscanf(fp, "L%*[^0-8]%d", &n) != 1 || n != i) |
| 207 |
|
goto readerr; |
| 208 |
< |
while ((n = getc(fp)) != EOF && (n == ' ' || n == '\t')) |
| 208 |
> |
while ((c = getc(fp)) != EOF && (c == ' ' || c == '\t')) |
| 209 |
|
; |
| 210 |
< |
if (n == EOF) |
| 210 |
> |
if (c == EOF) |
| 211 |
|
goto readerr; |
| 212 |
< |
ungetc(n, fp); |
| 212 |
> |
ungetc(c, fp); |
| 213 |
|
if (fgets(buf, MAXSTR, fp) == NULL) |
| 214 |
|
goto readerr; |
| 215 |
|
buf[strlen(buf)-1] = '\0'; |
| 426 |
|
/* check for repeats */ |
| 427 |
|
rept = 0; nrepts = 0; |
| 428 |
|
for (i = 0; i < nm; i++) { |
| 429 |
< |
if (ml[i] == sm) { |
| 429 |
> |
if (ml[i] == sm || !strcmp(ml[i], VOIDID)) { |
| 430 |
|
rept |= 1<<i; |
| 431 |
|
nrepts++; |
| 432 |
+ |
continue; |
| 433 |
|
} |
| 434 |
|
for (j = 0; j < i; j++) |
| 435 |
< |
if (ml[j] == ml[i]) { |
| 435 |
> |
if (!(rept & 1<<j) && ml[j] == ml[i]) { |
| 436 |
|
rept |= 1<<j; |
| 437 |
|
nrepts++; |
| 438 |
|
} |
| 439 |
|
} |
| 440 |
|
/* print antimatter and modlist */ |
| 441 |
< |
fprintf(fp, "\nvoid antimatter %s\n", openmod); |
| 441 |
> |
fprintf(fp, "\n%s antimatter %s\n", VOIDID, openmod); |
| 442 |
|
fprintf(fp, "%d %s", 1+nm-nrepts, sm); |
| 443 |
|
for (i = 0; i < nm; i++) |
| 444 |
|
if (!(rept & 1<<i)) |
| 464 |
|
newp.h[i] = p->h[i]; |
| 465 |
|
} |
| 466 |
|
/* spread reference and opposite */ |
| 467 |
< |
if (p->x[1] > p->x[0]) { |
| 467 |
> |
if (p->x[2] > p->x[0]) { |
| 468 |
|
newp.x[0] -= 2; |
| 469 |
< |
newp.x[1] += 2; |
| 469 |
> |
newp.x[1] -= 2; |
| 470 |
|
newp.x[2] += 2; |
| 471 |
< |
newp.x[3] -= 2; |
| 472 |
< |
} else if (p->x[0] > p->x[1]) { |
| 471 |
> |
newp.x[3] += 2; |
| 472 |
> |
} else if (p->x[0] > p->x[2]) { |
| 473 |
|
newp.x[0] += 2; |
| 474 |
< |
newp.x[1] -= 2; |
| 474 |
> |
newp.x[1] += 2; |
| 475 |
|
newp.x[2] -= 2; |
| 476 |
< |
newp.x[3] += 2; |
| 476 |
> |
newp.x[3] -= 2; |
| 477 |
|
} |
| 478 |
< |
if (p->y[1] > p->y[0]) { |
| 478 |
> |
if (p->y[2] > p->y[0]) { |
| 479 |
|
newp.y[0] -= 2; |
| 480 |
< |
newp.y[1] += 2; |
| 480 |
> |
newp.y[1] -= 2; |
| 481 |
|
newp.y[2] += 2; |
| 482 |
< |
newp.y[3] -= 2; |
| 483 |
< |
} else if (p->y[0] > p->y[1]) { |
| 482 |
> |
newp.y[3] += 2; |
| 483 |
> |
} else if (p->y[0] > p->y[2]) { |
| 484 |
|
newp.y[0] += 2; |
| 485 |
< |
newp.y[1] -= 2; |
| 485 |
> |
newp.y[1] += 2; |
| 486 |
|
newp.y[2] -= 2; |
| 487 |
< |
newp.y[3] += 2; |
| 487 |
> |
newp.y[3] -= 2; |
| 488 |
|
} |
| 489 |
|
/* put out faces */ |
| 490 |
|
sprintf(buf, "op%d", ++nopens); |
| 491 |
< |
putface(openmod, buf, "ref", &newp, 3, 7, 4, 0, fp); |
| 492 |
< |
putface(openmod, buf, "opp", &newp, 5, 6, 2, 1, fp); |
| 493 |
< |
putface(openmod, buf, "end1", &newp, 2, 6, 7, 3, fp); |
| 494 |
< |
putface(openmod, buf, "end2", &newp, 4, 5, 1, 0, fp); |
| 491 |
> |
putface(openmod, buf, "ref", &newp, 4, 5, 1, 0, fp); |
| 492 |
> |
putface(openmod, buf, "opp", &newp, 2, 6, 7, 3, fp); |
| 493 |
> |
putface(openmod, buf, "end1", &newp, 5, 6, 2, 1, fp); |
| 494 |
> |
putface(openmod, buf, "end2", &newp, 3, 7, 4, 0, fp); |
| 495 |
|
putface(openmod, buf, "bot", &newp, 1, 2, 3, 0, fp); |
| 496 |
|
putface(openmod, buf, "top", &newp, 7, 6, 5, 4, fp); |
| 497 |
|
} |
| 506 |
|
ID tmpid; |
| 507 |
|
|
| 508 |
|
if (rp->qflg & FL(Q_LAY)) { /* check layer */ |
| 509 |
< |
tmpid.name = NULL; |
| 509 |
> |
tmpid.name = fhead.layer[bp->layer]; |
| 510 |
|
tmpid.number = bp->layer; |
| 511 |
|
if (!matchid(&tmpid, &idm(rp)[Q_LAY])) |
| 512 |
|
return(0); |
| 543 |
|
return; |
| 544 |
|
bn = blkname(bp); |
| 545 |
|
if (ff & 1<<F_REF) |
| 546 |
< |
putface(m, bn, "ref", &bp->p, 3, 7, 4, 0, fp); |
| 546 |
> |
putface(m, bn, "ref", &bp->p, 4, 5, 1, 0, fp); |
| 547 |
|
if (ff & 1<<F_OPP) |
| 548 |
< |
putface(m, bn, "opp", &bp->p, 5, 6, 2, 1, fp); |
| 548 |
> |
putface(m, bn, "opp", &bp->p, 2, 6, 7, 3, fp); |
| 549 |
|
if (ff & 1<<F_END) { |
| 550 |
< |
putface(m, bn, "end1", &bp->p, 2, 6, 7, 3, fp); |
| 551 |
< |
putface(m, bn, "end2", &bp->p, 4, 5, 1, 0, fp); |
| 550 |
> |
putface(m, bn, "end1", &bp->p, 5, 6, 2, 1, fp); |
| 551 |
> |
putface(m, bn, "end2", &bp->p, 3, 7, 4, 0, fp); |
| 552 |
|
} |
| 553 |
|
if (ff & 1<<F_BOT) |
| 554 |
|
putface(m, bn, "bot", &bp->p, 1, 2, 3, 0, fp); |
| 564 |
|
static char nambuf[32]; |
| 565 |
|
static int blkcnt = 0; |
| 566 |
|
register char *nam; |
| 567 |
< |
register int i; |
| 567 |
> |
register int i, j; |
| 568 |
|
|
| 569 |
+ |
sprintf(nambuf, "l%d.", bp->layer); |
| 570 |
+ |
i = strlen(nambuf); |
| 571 |
|
nam = bp->refid.name; |
| 570 |
– |
if (nam == NULL) |
| 571 |
– |
nam = fhead.layer[bp->layer]; |
| 572 |
|
if (nam == NULL) { |
| 573 |
< |
sprintf(nambuf, "l%d.", bp->layer); |
| 574 |
< |
i = strlen(nambuf); |
| 575 |
< |
} else { |
| 576 |
< |
for (i = 0; i < 12 && nam[i]; i++) { |
| 577 |
< |
if (nam[i] == ' ' || nam[i] == '\t') |
| 578 |
< |
nambuf[i] = '_'; |
| 573 |
> |
nam = fhead.layer[bp->layer]; |
| 574 |
> |
if (nam != NULL) |
| 575 |
> |
i = 0; |
| 576 |
> |
} |
| 577 |
> |
if (nam != NULL) { |
| 578 |
> |
for (j = 0; j < 12 && nam[j]; j++) { |
| 579 |
> |
if (nam[j] == ' ' || nam[j] == '\t') |
| 580 |
> |
nambuf[i++] = '_'; |
| 581 |
|
else |
| 582 |
< |
nambuf[i] = nam[i]; |
| 582 |
> |
nambuf[i++] = nam[j]; |
| 583 |
|
} |
| 584 |
|
nambuf[i++] = '.'; |
| 585 |
|
} |