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