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