|
|
1.1 root 1: # include <stdio.h>
2: # include <ingres.h>
3: # include <aux.h>
4: # include <access.h>
5: # include <symbol.h>
6: # include <sccs.h>
7:
8: SCCSID(@(#)printup.c 8.3 2/8/85)
9:
10: /*
11: ** PRINTUP -- print tuple
12: **
13: ** Parameters:
14: ** d -- a descriptor describing the tuple.
15: ** tuple -- the tuple to print.
16: **
17: ** Returns:
18: ** ??
19: **
20: ** Side Effects:
21: ** None.
22: */
23:
24: # define PAGELGTH 56
25:
26: int Printlgth;
27: extern struct out_arg Out_arg;
28: int Hdr = 0;
29: HDRINFO *Fieldwidth, *Hdrptr;
30:
31: printup(d, tuple)
32: DESC *d;
33: char *tuple;
34: {
35: register char *ftype, *flen;
36: register short *foff;
37: static double dbl;
38: auto long lng;
39: int i, type;
40: extern HDRINFO *Hdrptr;
41: extern HDRINFO *Fieldwidth;
42:
43: ftype = &d->relfrmt[1];
44: flen = &d->relfrml[1];
45: foff = &d->reloff[1];
46: i = d->reldum.relatts;
47:
48: /* If relation is S_BINARY then print char fields escaped */
49: if (d->reldum.relstat & S_BINARY)
50: {
51: while (i--)
52: printatt((type = *ftype++) == CHAR ? BINARY : type, *flen++, &tuple[*foff++]);
53: }
54: else
55: {
56: while (i--)
57: {
58: switch ( *ftype )
59: {
60: case FLOAT:
61: bmove(&tuple[*foff++],&dbl,*flen);
62: printatt(*ftype++, *flen++, (ANYTYPE *)&dbl);
63: break;
64:
65: case CHAR:
66: printatt(*ftype++, *flen++, (ANYTYPE *)&tuple[*foff++]);
67: break;
68:
69: case INT:
70: if ( *flen != 4 )
71: printatt(*ftype++, *flen++, (ANYTYPE *)&tuple[*foff++]);
72: else
73: {
74: bmove(&tuple[*foff++],&lng,4);
75: printatt(*ftype++, *flen++, (ANYTYPE *)&lng);
76: }
77: break;
78: }
79: }
80: }
81: printeol();
82: }
83:
84: printatt(type, length, value)
85: char type;
86: register int length;
87: register ANYTYPE *value;
88: {
89: char buf[MAXFIELD];
90: ANYTYPE valbuf;
91: double dbl;
92: float flt;
93: extern char *iocv();
94: extern char *locv();
95: extern HDRINFO *Hdrptr;
96: extern HDRINFO *Fieldwidth;
97: extern int Hdr;
98: register char *p;
99:
100: putc(Out_arg.coldelim, stdout);
101: switch (type)
102: {
103: case INT:
104: switch (length)
105: {
106: case 1:
107: printfatt(Out_arg.i1width, iocv(value->i1type));
108: break;
109:
110: case 2:
111: printfatt(Out_arg.i2width, iocv(value->i2type));
112: break;
113:
114: case 4:
115: printfatt(Out_arg.i4width, locv(value->i4type));
116: break;
117:
118: default:
119: syserr("printatt: i%d", length);
120: }
121: return (0);
122:
123: case FLOAT:
124: switch (length)
125: {
126: case 4:
127: ftoa(value->f4type, buf, Out_arg.f4width, Out_arg.f4prec, Out_arg.f4style);
128: printfatt(Out_arg.f4width, buf);
129: break;
130:
131: case 8:
132: dbl = value->f8type;
133:
134: ftoa(dbl, (char *)buf, (int)Out_arg.f8width,(int) Out_arg.f8prec, (char)Out_arg.f8style);
135: printfatt(Out_arg.f8width, buf);
136: break;
137:
138: default:
139: syserr("printatt: f%d", length);
140: }
141: return (0);
142:
143: case CHAR:
144: length &= I1MASK;
145: if (Hdr)
146: {
147: if (length > Fieldwidth->len)
148: length = Fieldwidth->len;
149: }
150: fwrite(value, 1, length, stdout);
151: if (Hdr)
152: {
153: if ((length = Fieldwidth->len - length) > 0)
154: while (length--)
155: putc(' ', stdout);
156: if ((length = Out_arg.c0width - Fieldwidth->len) > 0)
157: while (length--)
158: putc(' ', stdout);
159: Fieldwidth = Fieldwidth->next;
160: if (Fieldwidth == NULL)
161: Fieldwidth = Hdrptr;
162: }
163: else
164: {
165: if ((length = Out_arg.c0width - length) > 0)
166: while (length--)
167: putc(' ', stdout);
168: }
169: return (0);
170:
171: case BINARY:
172: length &= I1MASK;
173: p = (char *) value;
174: while (length--)
175: xputchar(*p++);
176: return (0);
177:
178: default:
179: syserr("printatt type %d", type);
180: }
181: }
182: /*
183: ** FORMATTED ATTRIBUTE PRINT
184: **
185: ** Attribute 'value' is printed. It is type 'type' and has a
186: ** field width of 'width'.
187: */
188:
189: printfatt(width, value)
190: int width;
191: char *value;
192: {
193: register char *p;
194: register int w;
195: register int v;
196:
197: w = width;
198: p = value;
199: v = length(p);
200:
201: if (v > w)
202: {
203: /* field overflow */
204: while (w--)
205: putc('*', stdout);
206: return;
207: }
208:
209: /* output the field */
210: for (w -= v; w > 0; w--)
211: putc(' ', stdout);
212: fwrite(p, 1, v, stdout);
213: }
214:
215:
216: printeol()
217: {
218: putc(Out_arg.coldelim, stdout);
219: putc('\n', stdout);
220: }
221:
222: printeh()
223: {
224: register int i;
225:
226: putc(Out_arg.coldelim, stdout);
227: for (i = 1; i < Printlgth; i++)
228: putc('-', stdout);
229: printeol();
230: }
231:
232: printhdr(type, length, value)
233: char type;
234: register int length;
235: register char *value;
236: {
237: register int i;
238: char c;
239:
240: switch (type)
241: {
242: case INT:
243: switch (length)
244: {
245: case 1:
246: length = Out_arg.i1width;
247: break;
248:
249: case 2:
250: length = Out_arg.i2width;
251: break;
252:
253: case 4:
254: length = Out_arg.i4width;
255: break;
256:
257: default:
258: syserr("printhdr: i%d", length);
259: }
260: break;
261:
262: case FLOAT:
263: switch (length)
264: {
265: case 4:
266: length = Out_arg.f4width;
267: break;
268:
269: case 8:
270: length = Out_arg.f8width;
271: break;
272:
273: default:
274: syserr("printhdr: f%d", length);
275: }
276: break;
277:
278: case CHAR:
279: length &= I1MASK;
280: if (length < Out_arg.c0width)
281: length = Out_arg.c0width;
282: break;
283:
284: default:
285: syserr("printhdr: type 0%o", type);
286: }
287:
288: putc(Out_arg.coldelim, stdout);
289: for (i = 0; i < length && i < MAXNAME; i++)
290: if (c = *value++)
291: putc(c, stdout);
292: else
293: break;
294:
295: for ( ; i < length; i++)
296: putc(' ', stdout);
297:
298: Printlgth += length + 1;
299: }
300:
301: beginhdr()
302: {
303: Printlgth = 0;
304: putchar('\n');
305: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.