|
|
1.1 root 1: # include <ingres.h>
2: # include <symbol.h>
3: # include "IIglobals.h"
4: # include <sccs.h>
5:
6: SCCSID(@(#)IIgettup.c 7.1 2/5/81)
7:
8:
9: /*
10: ** IIgettup is called to retrieve one instance
11: ** of the target list into the c-variables.
12: **
13: ** Integers and Floating point numbers can be converted
14: ** to other numbers.
15: **
16: ** Characters fields must match other character fields.
17: */
18:
19: IIgettup(file_name, line_no)
20: char *file_name;
21: int line_no;
22: {
23: register int length, domain;
24: register struct retsym *ret;
25: struct retsym sym;
26: char temp[256], *IIitos(), *s;
27:
28:
29:
30: if (IIproc_name = file_name)
31: IIline_no = line_no;
32:
33: if (IIerrflag)
34: return (0); /* error. no data will be coming */
35:
36: ret = IIretsym;
37: domain = 0;
38:
39: for (;;)
40: {
41: if (IIpb_get(&IIpb, &sym, 2) != 2)
42: IIsyserr("IIgettup bad rdpipe 1");
43: if (length = sym.len & 0377)
44: if (IIpb_get(&IIpb, temp, length) != length)
45: IIsyserr("IIgettup bad rdpipe-2 %d", length);
46: # ifdef xETR1
47: if (IIdebug)
48: {
49: printf("%s ent ", IIproc_name ? IIproc_name : "");
50: printf("gettup type %d len %d\n", sym.type, length);
51: }
52: # endif
53: domain++;
54: switch (sym.type)
55: {
56:
57: case INT:
58: case FLOAT:
59: if (ret->type == CHAR)
60: {
61: s = IIitos(domain);
62: IIerror(1000, 1, &s);
63: return (0);
64: }
65: if (IIconvert(temp, ret->addr, sym.type, length, ret->type, ret->len & 0377) < 0)
66: {
67: s = IIitos(domain);
68: IIerror(1001, 1, &s);
69: }
70: break;
71:
72: case CHAR:
73: if (ret->type != CHAR)
74: {
75: s = IIitos(domain);
76: IIerror(1002, 1, &s);
77: return (0);
78: }
79: IIbmove(temp, ret->addr, length);
80: ret->addr[length] = '\0'; /* null terminate string */
81: break;
82:
83: case EOTUP:
84: return (1);
85:
86: case EXIT:
87: return (0);
88: }
89: ret++;
90: }
91: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.