Annotation of 43BSD/ingres/source/libq/IIn_ret.c, revision 1.1.1.1

1.1       root        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: }

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.