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

Defined functions

IIn_ret defined in line 7; never used
Last modified: 1986-04-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1014
Valid CSS Valid XHTML 1.0 Strict