Annotation of 43BSD/ingres/source/libq/IIn_ret.c, revision 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.