|
|
1.1 ! root 1: #include "idfilt.h" ! 2: ! 3: #define RESOLUTION 720.0 ! 4: ! 5: float xscale, yscale; ! 6: ! 7: void idjusttext (str) ! 8: char *str; ! 9: { ! 10: if ( ! 11: strncmp (str, ".IE", 3) && ! 12: strncmp (str, "...knot", 7) && ! 13: strncmp (str, "...endspline", 12) && ! 14: strncmp (str, "...left", 7) && ! 15: strncmp (str, "...center", 9) && ! 16: strncmp (str, "...right", 8) ! 17: ) ! 18: fputs (str, stdout); ! 19: } ! 20: ! 21: void idstart () ! 22: { ! 23: } ! 24: ! 25: void idendbound () ! 26: { ! 27: if (boundset) ! 28: return; ! 29: idminx (-6.0); ! 30: idmaxy (6.0); ! 31: idmaxx (6.0); ! 32: idminy (-6.0); ! 33: if (!banzai && maxx - minx < 0.2) { ! 34: maxx += 1; ! 35: minx -= 1; ! 36: } ! 37: if (!banzai && maxy - miny < 0.2) { ! 38: maxy += 1; ! 39: miny -= 1; ! 40: } ! 41: xscale = width*RESOLUTION/(maxx - minx); ! 42: yscale = - xscale; ! 43: minx -= 0.5*(colwid - width)*RESOLUTION/xscale; ! 44: maxx += 0.5*(colwid - width)*RESOLUTION/xscale; ! 45: boundset = TRUE; ! 46: printf (".ne %4.2fi\n", yscale*(miny - maxy)/RESOLUTION); ! 47: } ! 48: ! 49: void idline (x1, y1, x2, y2) ! 50: float x1; ! 51: float y1; ! 52: float x2; ! 53: float y2; ! 54: { ! 55: long int X1, Y1, X2, Y2; ! 56: boolean shortvert, shorthoriz, nonrectilinear; ! 57: X1 = round(xscale*x1); ! 58: Y1 = round(yscale*y1); ! 59: X2 = round(xscale*x2); ! 60: Y2 = round(yscale*y2); ! 61: shortvert = X1 == X2 && abs(Y1-Y2) < RESOLUTION/2; ! 62: shorthoriz = Y1 == Y2 && abs(X1-X2) < RESOLUTION/2; ! 63: nonrectilinear = X1 != X2 && Y1 != Y2; ! 64: if (wantquality || shortvert || shorthoriz || nonrectilinear) ! 65: printf ("\\h'%du'\\v'%du'\\D'l %du %du'\\h'%du'\\v'%du'\n.sp -1\n", ! 66: round(xscale*(x1-minx)), ! 67: round(yscale*(y1-maxy)), ! 68: round(xscale*(x2-x1)), ! 69: round(yscale*(y2-y1)), ! 70: round(-xscale*(x2-minx)), ! 71: round(-yscale*(y2-maxy)) ! 72: ); ! 73: else { ! 74: if (Y1 == Y2) ! 75: printf ("\\h'%du'\\v'%du'\\l'%du'\\h'%du'\\v'%du'\n.sp -1\n", ! 76: round(xscale*(x1-minx)), ! 77: round(yscale*(y1-maxy)), ! 78: round(xscale*(x2-x1)), ! 79: round(-xscale*(x2-minx)), ! 80: round(-yscale*(y2-maxy)) ! 81: ); ! 82: if (X1 == X2) ! 83: printf ("\\h'%du'\\v'%du'\\L'%du'\\h'%du'\\v'%du'\n.sp -1\n", ! 84: round(xscale*(x1-minx)), ! 85: round(yscale*(y1-maxy)), ! 86: round(yscale*(y2-y1)), ! 87: round(-xscale*(x2-minx)), ! 88: round(-yscale*(y2-maxy)) ! 89: ); ! 90: } ! 91: } ! 92: ! 93: void idcircle (x0, y0, r) ! 94: float x0; ! 95: float y0; ! 96: float r; ! 97: { ! 98: printf ("\\h'%du'\\v'%du'\\D'c %du'\\h'%du'\\v'%du'\n.sp -1\n", ! 99: round(xscale*(x0-r-minx)), ! 100: round(yscale*(y0-maxy)), ! 101: round(2*xscale*r), ! 102: round(-xscale*(x0+r-minx)), ! 103: round(-yscale*(y0-maxy)) ! 104: ); ! 105: } ! 106: ! 107: void idarc (x0, y0, x1, y1, x2, y2, t1, t2, r) ! 108: float x0; ! 109: float y0; ! 110: float x1; ! 111: float y1; ! 112: float x2; ! 113: float y2; ! 114: float t1; ! 115: float t2; ! 116: float r; ! 117: { ! 118: if (xscale*r > 30000.0) ! 119: idline (x1, y1, x2, y2); ! 120: else { ! 121: printf ("\\h'%du'\\v'%du'\\D'a %du %du %du %du'\\h'%du'\\v'%du'\n.sp -1\n", ! 122: round(xscale*(x1-minx)), ! 123: round(yscale*(y1-maxy)), ! 124: round(xscale*(x0-x1)), ! 125: round(yscale*(y0-y1)), ! 126: round(xscale*(x2-x0)), ! 127: round(yscale*(y2-y0)), ! 128: round(-xscale*(x2-minx)), ! 129: round(-yscale*(y2-maxy)) ! 130: ); ! 131: } ! 132: } ! 133: ! 134: void idleft (x, y, str) ! 135: float x; ! 136: float y; ! 137: char *str; ! 138: { ! 139: str == ++str; ! 140: printf ("\\h'%du'\\v'%du'%s\\h'-\\w\\(ts%s\\(tsu'\n.sp -1\n", ! 141: round(xscale*(x-minx)), ! 142: round(yscale*(y-maxy)), ! 143: str, ! 144: str ! 145: ); ! 146: } ! 147: ! 148: void idcenter (x, y, str) ! 149: float x; ! 150: float y; ! 151: char *str; ! 152: { ! 153: str = ++str; ! 154: printf ("\\h'%du'\\v'%du'\\h'-\\w\\(ts%s\\(tsu/2u'%s\\h'-\\w\\(ts%s\\(tsu/2u'\n.sp -1\n", ! 155: round(xscale*(x-minx)), ! 156: round(yscale*(y-maxy)), ! 157: str, ! 158: str, ! 159: str ! 160: ); ! 161: } ! 162: ! 163: void idright (x, y, str) ! 164: float x; ! 165: float y; ! 166: char *str; ! 167: { ! 168: str = ++str; ! 169: printf ("\\h'%du'\\v'%du'\\h'-\\w\\(ts%s\\(tsu'%s\\h'-\\w\\(ts%s\\(tsu'\n.sp -1\n", ! 170: round(xscale*(x-minx)), ! 171: round(yscale*(y-maxy)), ! 172: str, ! 173: str, ! 174: str ! 175: ); ! 176: } ! 177: ! 178: void idendE () ! 179: { ! 180: if (boundset) ! 181: printf (".sp %du\n.sp 1\n.sp 1\n", ! 182: round(yscale*(miny-maxy)) ! 183: ); ! 184: printf (".IE\n"); ! 185: } ! 186: ! 187: void idendF () ! 188: { ! 189: } ! 190: ! 191: float osplx, osply; ! 192: ! 193: void idspline (sx, sy) ! 194: float sx, sy; ! 195: { ! 196: osplx = sx; ! 197: osply = sy; ! 198: printf ("\\h'%du'\\v'%du'\\D'~", ! 199: round(xscale*(osplx-minx)), ! 200: round(yscale*(osply-maxy)) ! 201: ); ! 202: } ! 203: ! 204: void idknot (sx, sy) ! 205: float sx, sy; ! 206: { ! 207: printf (" %du %du", ! 208: round(xscale*(sx-osplx)), ! 209: round(yscale*(sy-osply)) ! 210: ); ! 211: osplx = sx; ! 212: osply = sy; ! 213: } ! 214: ! 215: void idendspline () ! 216: { ! 217: printf ("'\\h'%du'\\v'%du'\n.sp -1\n", ! 218: round(xscale*(minx-osplx)), ! 219: round(yscale*(maxy-osply)) ! 220: ); ! 221: } ! 222: ! 223: void idnoerase () ! 224: { ! 225: } ! 226: ! 227: ! 228: void idyeserase () ! 229: { ! 230: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.