|
|
1.1 ! root 1: # include <ingres.h> ! 2: # include <symbol.h> ! 3: # include "IIglobals.h" ! 4: # include <sccs.h> ! 5: ! 6: SCCSID(@(#)IIn_ret.c 7.2 10/27/81) ! 7: ! 8: ! 9: ! 10: /* ! 11: ** IIn_ret -- get next domain in a retrieve ! 12: ** ! 13: ** Gets the next domain in a retrieve from the data ! 14: ** pipe. If an error occurred previously in the tuple, ! 15: ** will not load the c-var with the value of the domain. ! 16: ** Performs the conversion from the gotten type to ! 17: ** the expected type. ! 18: ** ! 19: ** Signals any errors and calls IIerror() accordingly. ! 20: ** ! 21: ** Expects the type and length of the next data item in ! 22: ** IIr_sym. ! 23: ** ! 24: */ ! 25: ! 26: ! 27: ! 28: ! 29: IIn_ret(addr, type) ! 30: char *addr; ! 31: int type; ! 32: { ! 33: char temp[256], *IIitos(); ! 34: char *s; ! 35: register struct retsym *ret; ! 36: register length; ! 37: ! 38: ! 39: ! 40: if (IIerrflag && IIerrflag != 1001) ! 41: return; /* error, no data will be coming, or ! 42: * the rest of the query should be ! 43: * skipped ! 44: */ ! 45: ! 46: ret = &IIr_sym; ! 47: ! 48: if (ret->len &= 0377) ! 49: if (IIpb_get(&IIpb, temp, ret->len & 0377) != ret->len & 0377) ! 50: IIsyserr("IIn_ret: bad pb_get-1 %d", ret->len & 0377); ! 51: ! 52: ! 53: # ifdef xETR1 ! 54: if (IIdebug) ! 55: { ! 56: printf("%s ent ", IIproc_name ? IIproc_name: ""); ! 57: printf("IIn_ret : addr 0%o type %d length %d type %d IIerrflag %d\n", ! 58: addr, type, ret->len & 0377, ret->type, IIerrflag); ! 59: } ! 60: # endif ! 61: ! 62: ! 63: IIdomains++; ! 64: switch (type) ! 65: { ! 66: ! 67: case opSHORT: ! 68: type = INT; ! 69: length = 2; ! 70: break; ! 71: ! 72: case opLONG: ! 73: type = INT; ! 74: length = 4; ! 75: break; ! 76: ! 77: case opFLOAT: ! 78: type = FLOAT; ! 79: length = 4; ! 80: break; ! 81: ! 82: case opDOUBLE: ! 83: type = FLOAT; ! 84: length = 8; ! 85: break; ! 86: ! 87: case opSTRING: ! 88: type = CHAR; ! 89: length = 255; /* with the current implementation the length is not known */ ! 90: break; ! 91: ! 92: default: ! 93: IIsyserr("IIn_ret:bad type %d", type); ! 94: } ! 95: ! 96: switch (ret->type) ! 97: { ! 98: ! 99: case INT: ! 100: case FLOAT: ! 101: if (type == CHAR) ! 102: { ! 103: s = IIitos(IIdomains); ! 104: IIerrflag = 1000; ! 105: IIerror(1000, 1, &s); ! 106: return (0); ! 107: } ! 108: if (IIconvert(temp, IIerrflag ? temp : addr, ! 109: ret->type, ret->len & 0377, type, length) < 0) ! 110: { ! 111: s = IIitos(IIdomains); ! 112: IIerrflag = 1001; ! 113: IIerror(1001, 1, &s); ! 114: } ! 115: break; ! 116: ! 117: case CHAR: ! 118: if (type != CHAR) ! 119: { ! 120: s = IIitos(IIdomains); ! 121: IIerrflag = 1002; ! 122: IIerror(1002, 1, &s); ! 123: return (0); ! 124: } ! 125: if (!IIerrflag) ! 126: { ! 127: IIbmove(temp, addr, ret->len & 0377); ! 128: ! 129: /* null terminate string */ ! 130: addr [ret->len & 0377] = '\0'; ! 131: } ! 132: break; ! 133: ! 134: default : ! 135: IIsyserr("IIn_ret bad gotten type %d", ! 136: ret->type); ! 137: } ! 138: ! 139: if (IIpb_get(&IIpb, ret, 2) != 2) ! 140: IIsyserr("IIn_ret : bad pb_get - 2"); ! 141: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.