Annotation of 43BSD/ingres/source/decomp/usubr.c, revision 1.1

1.1     ! root        1: # include      <ingres.h>
        !             2: # include      <aux.h>
        !             3: # include      <tree.h>
        !             4: # include      <symbol.h>
        !             5: # include      <access.h>
        !             6: # include      <pv.h>
        !             7: # include      "globs.h"
        !             8: # include      <sccs.h>
        !             9: 
        !            10: SCCSID(@(#)usubr.c     8.1     12/31/84)
        !            11: 
        !            12: 
        !            13: /*
        !            14: **     usubr.c
        !            15: **
        !            16: **     utility routines to handle setting up params, etc for DBU calls
        !            17: */
        !            18: 
        !            19: 
        !            20: 
        !            21: /*
        !            22:  *     generate domain names, formats
        !            23:  */
        !            24: domnam(lnp, pre)
        !            25: QTREE  **lnp;
        !            26: char   *pre;
        !            27: {
        !            28: 
        !            29:        register char   suf, *n;
        !            30:        char            name[MAXNAME];
        !            31:        char            *getformat();
        !            32:        register QTREE  **p;
        !            33: 
        !            34:        suf = '1';
        !            35:        for (n=name; *n++= *pre++;);
        !            36:        *n = '\0';
        !            37:        n--;
        !            38:        for (p = lnp; *p != NULL; p++)
        !            39:        {
        !            40:                *n = suf++;
        !            41:                setp(PV_STR, name);
        !            42:                setp(PV_STR, getformat(*p));
        !            43:        }
        !            44: }
        !            45: /*
        !            46: **     gets format in ascii from RESDOM or AOP node
        !            47: */
        !            48: static char *
        !            49: getformat(p)
        !            50: QTREE  *p;
        !            51: {
        !            52: 
        !            53:        static char     buf[10];
        !            54:        register char   *b;
        !            55: 
        !            56:        b = buf;
        !            57: 
        !            58:        *b++ = p->sym.value.sym_op.opfrmt;
        !            59:        itoa(p->sym.value.sym_op.opfrml & I1MASK, b);
        !            60:        return(buf);
        !            61: }
        !            62: /*
        !            63: **     makes list of nodes (depth first)
        !            64: */
        !            65: 
        !            66: lnode(nod, lnodv, count)
        !            67: QTREE  *nod, *lnodv[];
        !            68: int    count;
        !            69: {
        !            70:        register QTREE  *q;
        !            71:        register int    i;
        !            72: 
        !            73:        i = count;
        !            74:        q = nod;
        !            75: 
        !            76:        if (q && q->sym.type != TREE)
        !            77:        {
        !            78:                i = lnode(q->left, lnodv, i);
        !            79:                lnodv[i++] = q;
        !            80:        }
        !            81:        return(i);
        !            82: }
        !            83: /*
        !            84: **     Immediately destroys the relation if it is an _SYS
        !            85: */
        !            86: 
        !            87: dstr_rel(relnum)
        !            88: int    relnum;
        !            89: {
        !            90:        initp();
        !            91:        if (dstr_mark(relnum))
        !            92:                call_dbu(mdDESTROY, FALSE);
        !            93:        else
        !            94:                resetp();
        !            95: }
        !            96: /*
        !            97: **     Put relation on list of relations to be
        !            98: **     destroyed. A call to initp() must be
        !            99: **     made before any calls to dstr_mark().
        !           100: **
        !           101: **     A call to call_dbu will actually have
        !           102: **     the relations exterminated
        !           103: **
        !           104: **     Trace Flags:
        !           105: **             65
        !           106: */
        !           107: 
        !           108: dstr_mark(relnum)
        !           109: int    relnum;
        !           110: {
        !           111:        register char   *p;
        !           112:        char            *rnum_convert();
        !           113:        bool            dstr_flag;
        !           114: 
        !           115:        dstr_flag = FALSE;
        !           116:        if (rnum_temp(relnum))
        !           117:        {
        !           118:                p = rnum_convert(relnum);
        !           119: #              ifdef xDTR1
        !           120:                if (tTf(65, 4))
        !           121:                        printf("destroying %s\n", p);
        !           122: #              endif
        !           123:                setp(PV_STR, p);
        !           124:                specclose(relnum);      /* guarantee that relation is closed and descriptor destroyed */
        !           125:                rnum_remove(relnum);
        !           126:                dstr_flag = TRUE;       /* indicate that there are relations to be destroyed */
        !           127:        }
        !           128:        return(dstr_flag);
        !           129: }
        !           130: /*
        !           131: **     Make a temporary relation to match
        !           132: **     the target list of tree.
        !           133: **
        !           134: **     If rnum is positive, use it as the relation number,
        !           135: **     Otherwise allocate a new one.
        !           136: */
        !           137: 
        !           138: mak_t_rel(tree, prefix, rnum)
        !           139: QTREE  *tree;
        !           140: char   *prefix;
        !           141: int    rnum;
        !           142: {
        !           143:        QTREE           *lnodv[MAXDOM + 1];
        !           144:        register int    relnum;
        !           145: 
        !           146:        initp();
        !           147:        setp(PV_STR, "0");      /* initial relstat field */
        !           148:        relnum = rnum < 0 ? rnum_alloc() : rnum;
        !           149:        setp(PV_STR, rnum_convert(relnum));
        !           150:        lnodv[lnode(tree->left, lnodv, 0)] = NULL;
        !           151:        domnam(lnodv, prefix);
        !           152: 
        !           153:        call_dbu(mdCREATE, FALSE);
        !           154:        return (relnum);
        !           155: }
        !           156: 
        !           157: 
        !           158: QTREE **
        !           159: mksqlist(tree, var)
        !           160: QTREE  *tree;
        !           161: int    var;
        !           162: {
        !           163:        register QTREE  **sq;
        !           164:        register int    i;
        !           165:        static QTREE    *sqlist[MAXRANGE];
        !           166: 
        !           167:        sq = sqlist;
        !           168:        for (i = 0; i < MAXRANGE; i++)
        !           169:                *sq++ = 0;
        !           170: 
        !           171:        sqlist[var] = tree;
        !           172:        return (sqlist);
        !           173: }
        !           174: 
        !           175: 
        !           176: 
        !           177: 
        !           178: long
        !           179: rel_pages(tupcnt, width)
        !           180: long   tupcnt;
        !           181: int    width;
        !           182: {
        !           183:        register int    tups_p_page;
        !           184: 
        !           185:        tups_p_page = (PGSIZE - 12) / (width + 2);
        !           186:        return ((tupcnt + tups_p_page - 1) / tups_p_page);
        !           187: }

unix.superglobalmegacorp.com

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