Annotation of 42BSD/ingres/source/libq/IIreadinp.c, revision 1.1.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.