|
|
1.1 ! root 1: #include <stdio.h> ! 2: #include "grap.h" ! 3: #include "y.tab.h" ! 4: ! 5: int pointsize = 10; /* assumed pointsize to start */ ! 6: int ps_set = 0; /* someone has set pointsize explicitly */ ! 7: ! 8: double textht = 1.0/6.0; /* 6 lines/inch */ ! 9: double textwid = 1; /* width of text box for vertical */ ! 10: ! 11: double lab_up = 0.0; /* extra motion for label */ ! 12: double lab_rt = 0.0; /* extra motion for label */ ! 13: ! 14: labelmove(dir, amt) /* record direction & motion of position corr */ ! 15: int dir; ! 16: double amt; ! 17: { ! 18: switch (dir) { ! 19: case UP: lab_up += amt; break; ! 20: case DOWN: lab_up -= amt; break; ! 21: case LEFT: lab_rt -= amt; break; ! 22: case RIGHT: lab_rt += amt; break; ! 23: } ! 24: } ! 25: ! 26: label(label_side, stringlist) /* stick label on label_side */ ! 27: int label_side; ! 28: Attr *stringlist; ! 29: { ! 30: int i, m; ! 31: Attr *ap, *nap; ! 32: ! 33: fprintf(tfd, "\ttextht = %g\n", textht); ! 34: if (label_side == LEFT || label_side == RIGHT) { ! 35: textwid = 0; ! 36: for (ap = stringlist; ap != NULL; ap = ap->next) ! 37: if ((m = strlen(ap->sval)) > textwid) ! 38: textwid = m; ! 39: textwid /= 15; /* estimate width at 15 chars/inch */ ! 40: fprintf(tfd, "\ttextwid = %g\n", textwid); ! 41: } ! 42: fprintf(tfd, "Label:\t%s", slprint(stringlist)); ! 43: freeattr(stringlist); ! 44: switch (label_side) { ! 45: case BOT: ! 46: case 0: ! 47: fprintf(tfd, " with .n at Frame.s - (0,2 * textht)"); ! 48: break; ! 49: case LEFT: ! 50: fprintf(tfd, " wid textwid with .e at Frame.w - (0.2,0)"); ! 51: break; ! 52: case RIGHT: ! 53: fprintf(tfd, " wid textwid with .w at Frame.e + (0.2,0)"); ! 54: break; ! 55: case TOP: ! 56: fprintf(tfd, " with .s at Frame.n + (0,2 * textht)"); ! 57: break; ! 58: } ! 59: lab_adjust(); ! 60: fprintf(tfd, "\n"); ! 61: label_side = BOT; ! 62: } ! 63: ! 64: lab_adjust() /* add a string to adjust labels, ticks, etc. */ ! 65: { ! 66: if (lab_up != 0.0 || lab_rt != 0.0) ! 67: fprintf(tfd, " + (%g,%g)", lab_rt, lab_up); ! 68: } ! 69: ! 70: char *sizeit(ap) /* add \s..\s to ap->sval */ ! 71: Attr *ap; ! 72: { ! 73: int n; ! 74: static char buf[1000]; ! 75: ! 76: if (!ap->op) { /* no explicit size command */ ! 77: if (ps_set) { ! 78: sprintf(buf, "\\s%d%s\\s0", pointsize, ap->sval); ! 79: return buf; ! 80: } else ! 81: return ap->sval; ! 82: } else if (!ps_set) { /* explicit size but no global size */ ! 83: n = (int) ap->fval; ! 84: switch (ap->op) { ! 85: case ' ': /* absolute size */ ! 86: sprintf(buf, "\\s%d%s\\s0", n, ap->sval); ! 87: break; ! 88: case '+': /* better be only one digit! */ ! 89: sprintf(buf, "\\s+%d%s\\s-%d", n, ap->sval, n); ! 90: break; ! 91: case '-': ! 92: sprintf(buf, "\\s-%d%s\\s+%d", n, ap->sval, n); ! 93: break; ! 94: case '*': ! 95: case '/': ! 96: return ap->sval; /* ignore for now */ ! 97: } ! 98: return buf; ! 99: } else { ! 100: /* explicit size and a global background size */ ! 101: n = (int) ap->fval; ! 102: switch (ap->op) { ! 103: case ' ': /* absolute size */ ! 104: sprintf(buf, "\\s%d%s\\s0", n, ap->sval); ! 105: break; ! 106: case '+': ! 107: sprintf(buf, "\\s%d%s\\s0", pointsize+n, ap->sval); ! 108: break; ! 109: case '-': ! 110: sprintf(buf, "\\s%d%s\\s0", pointsize-n, ap->sval); ! 111: break; ! 112: case '*': ! 113: case '/': ! 114: return ap->sval; /* ignore for now */ ! 115: } ! 116: return buf; ! 117: } ! 118: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.