|
|
1.1 root 1: /*******************************************************************
2: * *
3: * File: CIFPLOT/main.c *
4: * Written by Dan Fitzpatrick *
5: * copyright 1980 -- Regents of the University of California *
6: * *
7: ********************************************************************/
8:
9: #include <stdio.h>
10: #include "defs.h"
11: #include "globals.h"
12: #include "structs.h"
13: #include "scanner.h"
14: #include "alloc.h"
15:
16: IMPORT InitInput();
17: IMPORT InitError();
18: IMPORT InitInter();
19: IMPORT InitText();
20: IMPORT yyparser();
21: IMPORT string Concat();
22: IMPORT ErrorSummary();
23: IMPORT AllocSummary();
24: IMPORT InterSummary();
25: IMPORT float PlotSize();
26: IMPORT float PlotScale();
27: IMPORT transform *MakeTransform();
28: IMPORT transform *Rotate();
29: IMPORT point *MakePoint();
30:
31: extern int FatalError;
32:
33: main(n,v)
34: int n;
35: char **v;
36: {
37: int b;
38: char ch;
39: InitGet();
40: InitError();
41: InitInter();
42: b = options(1,n,v);
43: if(extractor) InitExtractor();
44: InitInput(b,n,v);
45: InitText();
46: if(parser())
47: Error("Unrecoverable Syntax Error-Quit\n",FATAL);
48: Summary();
49: if(FatalError) exit(1);
50: if(output == NOPLOT) Intermediate();
51: InitFill();
52: FixScale();
53: AdjustWindow();
54: InitPlotter();
55: Grid();
56: fprintf(stderr,"Window %d %d %d %d\n",(int) GWindow.xmin,(int) GWindow.xmax,
57: (int) GWindow.ymin,(int) GWindow.ymax);
58: fprintf(stderr,"Scale: 1 micron is %f inches\n",scale);
59: if(MoreToPlot == 0)
60: fprintf(stderr,"The plot will be %4.2f feet\n",PlotSize());
61: else
62: fprintf(stderr,"The plot will be %d pages, %4.2f feet each\n",
63: MoreToPlot+1,PlotSize());
64: if(ask) {
65: fprintf(stderr,"Do you want a plot? ");
66: ch = getchar();
67: if(!(ch == 'y' || ch == 'Y' || ch == EOF)) exit(0);
68: if(ch == EOF) {
69: fprintf(stderr,"\n");
70: }
71: }
72: if(extractor) OpenExtractor();
73: Plot();
74: while(MoreToPlot) {
75: AdjustWindow();
76: ReStartPlotter();
77: Grid();
78: Plot();
79: }
80: if(debug) {
81: AllocSummary();
82: SortSummary();
83: CheckUnAct();
84: }
85: if(extractor) Extract();
86: }
87:
88: options(b,n,v)
89: int b,n;
90: char **v;
91: {
92: programName = "cifplot*";
93: debug = 0;
94: depth = 0;
95: list = 0;
96: standard = 0;
97: banner = "";
98: outline = 1;
99: SetScale = 0;
100: plot = 1;
101: extractor = 0;
102: baseName = "";
103: symbox = 1;
104: circle = 8;
105: RetCmt = 1;
106: text = 1;
107: printSymbolName = 1;
108: grid = 0;
109: ask = 1;
110: output = VARIAN;
111: NoPixcels = 2000;
112: GlobalTransform = MakeTransform();
113: while (v[b][0] == '-') {
114: switch(v[b][1]) {
115: case 'a':
116: if('0' <= v[b][2] && v[b][2] <= '9') {
117: sscanf(&v[b][2],"%d",&circle);
118: if(circle < 4) circle = 8;
119: }
120: else {
121: sscanf(v[++b],"%d",&circle);
122: if(circle < 4) circle = 8;
123: }
124: break;
125: case 'B':
126: symbox = 0;
127: break;
128: case 'b':
129: banner = v[++b];
130: if(b >= n) {
131: fprintf(stderr,"Banner must appear after the -b option\n");
132: abort();
133: }
134: break;
135: case 'C':
136: RetCmt = 0;
137: break;
138: case 'd':
139: if(v[b][2] != '\0') depth = atoi(&v[b][2]);
140: else depth = atoi(v[++b]);
141: break;
142: case 'D':
143: debug = 1;
144: if(v[b][2] != '\0') debug += v[b][2] - '0';
145: break;
146: case 'f':
147: outline = 0;
148: break;
149: case 'F':
150: if(v[b][2] != '\0')
151: fontfile = &(v[b][2]);
152: else
153: fontfile = v[++b];
154: break;
155: case 'g':
156: if(v[b][2] != '\0')
157: grid = atoi(&(v[b][2]));
158: else
159: grid = atoi(v[++b]);
160: break;
161: case 'H':
162: output = HP2648A;
163: break;
164: case 'i':
165: circle = 0;
166: break;
167: case 'I':
168: ask = 0;
169: break;
170: case 'l':
171: if(v[b][2] != '\0') Invisible(&v[b][2]);
172: else Invisible(v[++b]);
173: break;
174: case 'L':
175: list = 1;
176: break;
177: case 'r':
178: { transform *temp;
179: point pt;
180: pt.x = 0; pt.y = -1;
181: temp = Rotate(&pt,GlobalTransform);
182: FreeTransform(GlobalTransform);
183: GlobalTransform = temp;
184: }
185: break;
186: case 's':
187: SetScale = 1;
188: if(v[b][2] != '\0') {
189: if(EOF == sscanf(&(v[b][2]),"%f",&scale)) {
190: fprintf(stderr,"bad format on -s option\n");
191: abort();
192: }
193: }
194: else if(EOF == sscanf(v[++b],"%f",&scale)) {
195: fprintf(stderr,"bad format on -s option\n");
196: abort();
197: }
198: break;
199: case 't':
200: text = 0;
201: break;
202: case 'e':
203: standard = 1;
204: break;
205: case 'O':
206: output = NOPLOT;
207: if(v[b][2] != '\0') outfile = &(v[b][2]);
208: else outfile = v[++b];
209: if(b >= n) {
210: fprintf(stderr,"file name must appear after -O option\n");
211: abort();
212: }
213: break;
214: case 'p':
215: if(v[b][2] != '\0') {
216: readpat(&(v[b][2]));
217: break;
218: }
219: if(b+2 >= n) {
220: fprintf(stderr,"usage: %s -p file.stipple file.cif\n",v[0]);
221: abort();
222: }
223: readpat(v[++b]);
224: break;
225: case 'P':
226: output = LINEPRINTER;
227: break;
228: case 'S':
229: output = VSPOOL;
230: break;
231: case 'V':
232: output = VARIAN;
233: break;
234: case 'w':
235: if(b+5 >= n) {
236: fprintf(stderr,"usage: %s -w xmin xmax ymin ymax file.cif\n",v[0]);
237: abort();
238: }
239: GWindow.xmin = atoi(v[++b]);
240: GWindow.xmax = atoi(v[++b]);
241: GWindow.ymin = atoi(v[++b]);
242: GWindow.ymax = atoi(v[++b]);
243: if(GWindow.xmin > GWindow.xmax) {
244: fprintf(stderr,"error: xmin must be less than xmax\n");
245: abort();
246: }
247: if(GWindow.ymin > GWindow.ymax) {
248: fprintf(stderr,"error: ymin must be less than ymax\n");
249: abort();
250: }
251: break;
252: case 'W':
253: output = VERSATEC;
254: break;
255: case 'n':
256: plot = 0;
257: break;
258: case 'X':
259: plot = 0;
260: extractor = 1;
261: SetScale = 1;
262: scale = 0.02;
263: baseName = v[++b];
264: break;
265: default:
266: fprintf(stderr,"%s: Unknown option-Ignored\n",v[b]);
267: break;
268: }
269: b++;
270: }
271: file1 = Concat(v[b],0);
272: return(b);
273: }
274:
275: Summary()
276: {
277: ErrorSummary();
278: if(debug) AllocSummary();
279: InterSummary();
280: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.