|
|
1.1 root 1: # include <stdio.h>
2: # include <ingres.h>
3: # include <aux.h>
4: # include <access.h>
5: # include <lock.h>
6: # include <pv.h>
7: # include <sccs.h>
8:
9: SCCSID(@(#)printr.c 7.2 5/31/83)
10:
11:
12: extern int Status;
13: short tTdbu[100];
14:
15: main(argc, argv)
16: int argc;
17: char *argv[];
18: {
19: extern struct out_arg Out_arg;
20: register char **av;
21: register char *q;
22: register char *p;
23: int i;
24: int badf;
25: char style;
26: char *user_ovrd;
27: int mode;
28: int nc;
29: PARM pv[PV_MAXPC];
30: PARM *pp;
31: extern char *Parmvect[];
32: extern char *Flagvect[];
33: extern char *Dbpath;
34:
35: argv[argc] = NULL;
36:
37: # ifdef xSTR1
38: tTrace(argv, 'T', tTdbu, 100);
39: # endif
40:
41: mode = -1;
42: badf = 0;
43:
44: /*
45: ** Scan the argument vector and otherwise initialize.
46: */
47:
48: i = initucode(argc, argv, TRUE, NULL, M_SHARE);
49: switch (i)
50: {
51: case 0:
52: case 5:
53: break;
54:
55: case 1:
56: case 6:
57: printf("Database %s does not exist\n", Parmvect[0]);
58: exit(-1);
59:
60: case 2:
61: printf("You are not authorized to access this database\n");
62: exit(-1);
63:
64: case 3:
65: printf("You are not a valid INGRES user\n");
66: exit(-1);
67:
68: case 4:
69: printf("No database name specified\n");
70: badf++;
71: break;
72:
73: default:
74: syserr("main: initucode %d", i);
75: }
76:
77: for (av = Flagvect; (p = *av) != NULL; av++)
78: {
79: if (p[0] != '-')
80: goto badflag;
81: switch (p[1])
82: {
83: case 'h': /* do headers on each page */
84: mode = 0;
85: if (p[2] == 0)
86: break;
87: Out_arg.linesperpage = atoi(&p[2]);
88: break;
89:
90: case 's': /* supress headers and footers */
91: mode = 1;
92: if (p[2] != 0)
93: goto badflag;
94: break;
95:
96: case 'c': /* set cNwidth */
97: Out_arg.c0width = atoi(&p[2]);
98: break;
99: {
100: badflag:
101: printf("bad flag %s\n", p);
102: badf++;
103: continue;
104: }
105: break;
106:
107: case 'i': /* set iNwidth */
108: switch (p[2])
109: {
110:
111: case '1':
112: Out_arg.i1width = atoi(&p[3]);
113: break;
114:
115: case '2':
116: Out_arg.i2width = atoi(&p[3]);
117: break;
118:
119: case '4':
120: Out_arg.i4width = atoi(&p[3]);
121: break;
122:
123: default:
124: goto badflag;
125:
126: }
127: break;
128:
129: case 'f': /* set fNwidth */
130: style = p[3];
131: switch (style)
132: {
133:
134: case 'e':
135: case 'E':
136: case 'f':
137: case 'F':
138: case 'g':
139: case 'G':
140: case 'n':
141: case 'N':
142: break;
143:
144: default:
145: goto badflag;
146:
147: }
148: for (q = &p[4]; *q != '.'; q++)
149: if (*q == 0)
150: goto badflag;
151: *q++ = 0;
152: switch (p[2])
153: {
154:
155: case '4':
156: Out_arg.f4width = atoi(&p[4]);
157: Out_arg.f4prec = atoi(q);
158: Out_arg.f4style = style;
159: break;
160:
161: case '8':
162: Out_arg.f8width = atoi(&p[4]);
163: Out_arg.f8prec = atoi(q);
164: Out_arg.f8style = style;
165: break;
166:
167: default:
168: goto badflag;
169:
170: }
171: break;
172:
173: case 'v':
174: if (p[2] == 0 || p[3] != 0)
175: goto badflag;
176: Out_arg.coldelim = p[2];
177: break;
178:
179: default:
180: goto badflag;
181: }
182: }
183:
184: /*
185: ** Build parameter vector for print call
186: */
187:
188: for (nc = 1, pp = pv; Parmvect[nc] != NULL; nc++)
189: ((pp++)->pv_val).pv_str = Parmvect[nc];
190: if (mode != -1)
191: ((pp++)->pv_val).pv_int = mode;
192: pp->pv_type = PV_EOF;
193:
194: /*
195: ** Check for usage errors.
196: */
197:
198: if (nc < 2)
199: {
200: badf++;
201: printf("usage: printr [flags] database relation ...\n");
202: }
203: if (badf)
204: {
205: fflush(stdout);
206: exit(-1);
207: }
208:
209: p = Parmvect[0]; /* data base is first parameter */
210: if (chdir(Dbpath) < 0)
211: syserr("cannot access data base %s", p);
212: # ifdef xTTR2
213: if (tTf(1, 0))
214: printf("entered database %s\n", Dbpath);
215: # endif
216:
217: /* initialize access methods (and Admin struct) for user_ovrd test */
218: acc_init();
219:
220: set_so_buf();
221: # ifdef xTTR1
222: if (tTf(1, 1))
223: printf("printing %s\n", p);
224: # endif
225:
226: print(nc - 1, pv);
227: fflush(stdout);
228: exit(0);
229: }
230:
231:
232:
233: rubproc()
234: {
235: fflush(stdout);
236: exit(0);
237: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.