Annotation of 42BSD/ingres/source/libq/IIreadinp.c, revision 1.1

1.1     ! root        1: # include      <useful.h>
        !             2: # include      <ingres.h>
        !             3: # include      <aux.h>
        !             4: # include      "IIglobals.h"
        !             5: # include      <sccs.h>
        !             6: 
        !             7: SCCSID(@(#)IIreadinp.c 7.3     4/26/81)
        !             8: 
        !             9: 
        !            10: static char    IInbuf[70];
        !            11: static char    *IInb_free;
        !            12: 
        !            13: char   *
        !            14: IIneed(i)
        !            15: register       i;
        !            16: {
        !            17:        register char   *p;
        !            18: 
        !            19:        p = IInb_free;
        !            20:        if (IInb_free + i - IInbuf >= sizeof IInbuf)
        !            21:                IIsyserr("Error param overflow");
        !            22:        IInb_free += i;
        !            23:        return (p);
        !            24: }
        !            25: 
        !            26: IInd_init()
        !            27: {
        !            28:        IInb_free = IInbuf;
        !            29: }
        !            30: 
        !            31: /*
        !            32: **  IIREADINPUT -- read the input pipe 
        !            33: **
        !            34: **     The input pipe is read (using pb_get).  Parameters are
        !            35: **     collected and set up in the global IIerr_pv.  
        !            36: **
        !            37: **     If an error block is read, the error routine processing
        !            38: **     is invoked.
        !            39: **
        !            40: **     Parameters:
        !            41: **             ppb -- a pointer to the pipe block to read into;
        !            42: **                     also becomes part of the return value.
        !            43: **
        !            44: **     Returns:
        !            45: **
        !            46: **     Requires:
        !            47: **             pb_prime, pb_get -- to read from the pipe.
        !            48: **             IIneed -- to get space to store things
        !            49: **                     from the pipe.
        !            50: **
        !            51: **     History:
        !            52: **             8/21/79 (eric) -- written.
        !            53: */
        !            54: 
        !            55: IIreadinput(ppb)
        !            56: register pb_t  *ppb;
        !            57: {
        !            58:        register int    i;
        !            59:        int             pc;
        !            60:        char            *pv[20];
        !            61:        auto int        eno;
        !            62: 
        !            63:        /* if this is a response block, return immediately */
        !            64:        if (ppb->pb_type == PB_RESP)
        !            65:        {
        !            66:                i = IIpb_get(ppb, &IIresp, sizeof IIresp);
        !            67:                if (i != sizeof IIresp)
        !            68:                        IIsyserr("readinput: IIresp sz %d", i);
        !            69:                IItupcnt = IIresp.resp_tups;
        !            70:        }
        !            71: 
        !            72:        /*
        !            73:        **  Parameter Loop.
        !            74:        **      Wander through and start reading parameters.
        !            75:        */
        !            76: 
        !            77:        IInd_init();
        !            78:        for (pc = 0 ; pc < PV_MAXPC; pc++)
        !            79:        {
        !            80:                if (IIread_arg(ppb, &pv[pc]) == PV_EOF)
        !            81:                        break;
        !            82:        }
        !            83: 
        !            84:        /* out of loop, check for vector overflow */
        !            85:        if (pc >= sizeof pv / sizeof pv[0])
        !            86:                IIsyserr("readinput: overflow");
        !            87: 
        !            88:        /* check for error blocks */
        !            89:        if (ppb->pb_type == PB_ERR)
        !            90:        {
        !            91:                IIatoi(pv[0], &eno);
        !            92:                IIerror(eno, pc - 1, &pv[1]);
        !            93:        }
        !            94: }
        !            95: /*
        !            96: **  IIREAD_ARG -- Read a single argument from pipe
        !            97: **
        !            98: **     An argument can be as simple as an integer, or as complex
        !            99: **     as a query tree.
        !           100: **
        !           101: **     Parameters:
        !           102: **             ppb -- the pipe block to read from.
        !           103: **             pparm -- the parameter descripter to put the
        !           104: **                     argument in.
        !           105: **
        !           106: **     Returns:
        !           107: **             PV_EOF -- if last arg read
        !           108: **
        !           109: **     Side Effects:
        !           110: **             May allocate space from Qbuf for trees, etc.
        !           111: **
        !           112: **     Requires:
        !           113: **             pb_get
        !           114: **             syserr
        !           115: **             need
        !           116: **             readqtree
        !           117: **
        !           118: **     Called By:
        !           119: **             readinput
        !           120: **
        !           121: **     Trace Flags:
        !           122: **             10.6 - 10.7
        !           123: */
        !           124: 
        !           125: IIread_arg(ppb, parm)
        !           126: register pb_t  *ppb;
        !           127: char           **parm;
        !           128: {
        !           129:        char            buf[20];
        !           130:        auto char       ptype;
        !           131:        auto short      plen;
        !           132:        register int    i;
        !           133:        register char   *p;
        !           134:        char            *ib;
        !           135:        int             j;
        !           136:        char            *IIneed();
        !           137:        char            *IIitos();
        !           138: 
        !           139:        /* get the parameter type */
        !           140:        i = IIpb_get(ppb, &ptype, 1);
        !           141:        if (i == 0)
        !           142:        {
        !           143:                return (PV_EOF);
        !           144:        }
        !           145:        i = IIpb_get(ppb, &plen, 2);
        !           146:        if (i < 2)
        !           147:                IIsyserr("readarg: pb_get %d", i);
        !           148: 
        !           149:        /* figure out the type */
        !           150:        switch (ptype)
        !           151:        {
        !           152:          case PV_INT:
        !           153:                IIpb_get(ppb, &j, plen);
        !           154:                ib = IIitos(j);
        !           155:                p = IIneed(j = IIlength(ib) + 1);
        !           156:                IIbmove(ib, p, j);
        !           157:                break;
        !           158: 
        !           159:          case PV_STR:
        !           160:                p = IIneed(plen + 1);
        !           161:                IIpb_get(ppb, p, plen);
        !           162:                p[plen] = 0;
        !           163:                break;
        !           164: 
        !           165:          default:
        !           166:                IIsyserr("readinput: type %d len %d", ptype, plen);
        !           167:        }
        !           168:        *parm = p;
        !           169:        return (ptype);
        !           170: }

unix.superglobalmegacorp.com

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