|
|
1.1 ! root 1: /* Map-plotting functions for PostScript */ ! 2: #include "plot.h" ! 3: ! 4: static double _a,_b,_c,_d, _ox, _oy; ! 5: static int anystroke = 0; ! 6: static char *fontname = "/Times-Roman"; ! 7: static int fontsize = 10; ! 8: ! 9: #define xs(_x) (_ox = _a*(_x)+_b) ! 10: #define ys(_y) (_oy = _c*(_y)+_d) ! 11: ! 12: void ! 13: space(int xmin, int ymin, int xmax, int ymax) ! 14: { ! 15: _a = 6.5*72/(xmax-xmin); ! 16: _b = -_a*xmin + 1.0*72; ! 17: _c = 6.5*72/(ymax-ymin); ! 18: _d = -_c*ymin + 3.5*72; ! 19: } ! 20: ! 21: ! 22: /* open the plotting output */ ! 23: void ! 24: erase(void) ! 25: { ! 26: printf("%%!PS\n" ! 27: "%%Creator: map\n" ! 28: "%%BoundingBox: 72 252 540 720\n" ! 29: "%%EndComments\n" ! 30: "/m /moveto load def\n" ! 31: "/s /stroke load def\n" ! 32: "/t {moveto show} bind def\n" ! 33: "/v /lineto load def\n" ! 34: "%%EndProlog\n" ! 35: "gsave\n" ! 36: "/Helvetica findfont 10 scalefont setfont\n" ! 37: "1 setlinecap\n" ! 38: "1 setlinejoin\n" ! 39: ".5 setlinewidth\n"); ! 40: printf("%s findfont\n" ! 41: "/scale %d def\n" ! 42: "scale scalefont\n" ! 43: "setfont\n", fontname, fontsize); ! 44: printf("newpath\n" ! 45: "72 72 m\n"); ! 46: anystroke = 1; ! 47: } ! 48: ! 49: /* close the plotting output */ ! 50: void ! 51: closepl(void) ! 52: { ! 53: printf("showpage\ngrestore\n"); ! 54: } ! 55: ! 56: /* make sure the page or screen is clear */ ! 57: void ! 58: openpl(void) ! 59: { ! 60: anystroke = 0; ! 61: } ! 62: ! 63: /* plot a point at _x,_y, which becomes current */ ! 64: void ! 65: point(int _x, int _y) ! 66: { ! 67: move(_x, _y); ! 68: cont(_x, _y); ! 69: } ! 70: ! 71: /* place text, first letter at current point, which does not change */ ! 72: void ! 73: label(char *_s) ! 74: { ! 75: if(anystroke) ! 76: printf("s\n"); ! 77: printf("(%s) %.1f %.1f scale .3 mul sub t\n",_s,_ox,_oy); ! 78: anystroke = 0; ! 79: } ! 80: ! 81: /* draw line from current point to _x,_y, which becomes current */ ! 82: void ! 83: cont(int _x, int _y) ! 84: { ! 85: printf("%.1f %.1f v\n", xs(_x),ys(_y)); ! 86: anystroke = 1; ! 87: } ! 88: ! 89: /* _x,_y becomes current point */ ! 90: void ! 91: move(int _x, int _y) ! 92: { ! 93: if(anystroke) ! 94: printf("s\n"); ! 95: printf("%.1f %.1f m\n", xs(_x), ys(_y)); ! 96: anystroke = 1; ! 97: } ! 98: ! 99: struct dashpat { ! 100: char *name; ! 101: char *pat; ! 102: double width; ! 103: } pattern[] = { ! 104: "solid", "[] 0", 0.5, ! 105: "dotted", "[3 6] 0", 0, ! 106: "dotdash", "[18 6 3 6] 0", .5, ! 107: }; ! 108: ! 109: /* specify style for drawing lines: "dotted", "solid", "dotdash" */ ! 110: void ! 111: linemod(char *s) ! 112: { ! 113: int i; ! 114: for(i=0; i<sizeof(pattern)/sizeof(*pattern); i++) ! 115: if(strcmp(s,pattern[i].name) == 0) ! 116: break; ! 117: if(i >= sizeof(pattern)/sizeof(*pattern)) ! 118: i = 0; ! 119: if(anystroke) ! 120: printf("s\n"); ! 121: printf("%f setlinewidth\n%s setdash\n", ! 122: pattern[i].width, pattern[i].pat); ! 123: anystroke = 0; ! 124: } ! 125:
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.