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