Annotation of 42BSD/ingres/source/dbu/print.c, revision 1.1

1.1     ! root        1: # include      <pv.h>
        !             2: # include      <ingres.h>
        !             3: # include      <access.h>
        !             4: # include      <aux.h>
        !             5: # include      <lock.h>
        !             6: # include      <func.h>
        !             7: # include      <sccs.h>
        !             8: 
        !             9: SCCSID(@(#)print.c     7.1     2/5/81)
        !            10: 
        !            11: extern short   tTdbu[];
        !            12: extern int     print();
        !            13: extern int     null_fn();
        !            14: 
        !            15: struct fn_def PrintFn =
        !            16: {
        !            17:        "PRINT",
        !            18:        print,
        !            19:        null_fn,                /* initialization function */
        !            20:        null_fn,
        !            21:        NULL,
        !            22:        0,
        !            23:        tTdbu,
        !            24:        100,
        !            25:        'Z',
        !            26:        0
        !            27: };
        !            28: 
        !            29: 
        !            30: 
        !            31: 
        !            32: /*
        !            33: **  PRINT -- print relation
        !            34: **
        !            35: **     Parameters:
        !            36: **             parmv[0] through parmv[parmc -2] contain names
        !            37: **             of relations to be printed on the standard output.
        !            38: **             Note that this calls printatt, so all the output formatting 
        !            39: **             features associated with printatt are available here.
        !            40: **
        !            41: **             parmv[parmc - 1].pv_type is PV_INT for other than a "normal"
        !            42: **             print.  In this case parmv[parmc - 1] is 0 for headers on
        !            43: **             every page, and 1 for all headers and footers suppressed.
        !            44: **             err_array is set to 0 for a good relation, 1 for no
        !            45: **             relation by that name, and -1 for a view.
        !            46: **
        !            47: **     Returns:
        !            48: **             0 if no errors else the last error number
        !            49: **
        !            50: **     Trace Flags:
        !            51: **             40
        !            52: */
        !            53: 
        !            54: print(parmc, parmv)
        !            55: int    parmc;
        !            56: PARM   parmv[];
        !            57: {
        !            58:        DESC                    d;
        !            59:        extern DESC             Attdes;
        !            60:        struct attribute        att, katt;
        !            61:        char                    tuple[MAXTUP];
        !            62:        TID                     tid, limtid;
        !            63:        TID                     stid;
        !            64:        register int            i;
        !            65:        register int            ern;
        !            66:        register char           *name;
        !            67:        extern struct out_arg   Out_arg;
        !            68:        int                     mode;
        !            69:        int                     lineno;
        !            70:        int                     pc;
        !            71:        int                     err_array[PV_MAXPC];
        !            72: 
        !            73: #      ifdef xZTR1
        !            74:        if (tTf(40, -1))
        !            75:        {
        !            76:                printf("entering print\n");
        !            77:                prvect(parmc, parmv);
        !            78:        }
        !            79: #      endif
        !            80: 
        !            81:        if (parmv[parmc - 1].pv_type == PV_INT)
        !            82:                mode = parmv[parmc - 1].pv_val.pv_int;
        !            83:        else
        !            84:                mode = -1;
        !            85: 
        !            86:        opencatalog("attribute", 0);
        !            87: 
        !            88:        for (pc = 0; pc <= parmc - 1; pc++)
        !            89:        {
        !            90:                name = parmv[pc].pv_val.pv_str;
        !            91: 
        !            92:                ern = openr(&d, 0, name);
        !            93:                if (ern == AMOPNVIEW_ERR)
        !            94:                {
        !            95:                        err_array[pc] = 5002;   /* can't print a view */
        !            96:                        continue;
        !            97:                }
        !            98:                if (ern > 0)
        !            99:                {       
        !           100:                        err_array[pc] = 5001;   /* cannot open relation */
        !           101:                        continue;
        !           102:                }
        !           103:                if (ern < 0)
        !           104:                        syserr("printr:openr target %s, %d",
        !           105:                        name, ern);
        !           106:                if ((d.reldum.relstat & S_PROTALL) && (d.reldum.relstat & S_PROTRET) &&
        !           107:                        !bequal(Usercode, d.reldum.relowner, 2))
        !           108:                {
        !           109:                        err_array[pc] = 5003;   /* protection violation */
        !           110:                        closer(&d);
        !           111:                        continue;
        !           112:                }
        !           113: 
        !           114: 
        !           115:                /* a printable relation */
        !           116:                err_array[pc] = 0;
        !           117: #              ifdef xZTR2
        !           118:                if (tTf(40, 1))
        !           119:                        printdesc(&d);
        !           120: #              endif
        !           121:                lineno = Out_arg.linesperpage - 6;
        !           122:                if (mode <= 0)
        !           123:                {
        !           124:                        if (mode == 0)
        !           125:                                putchar('\014');        /* form feed */
        !           126:                        printf("\n%s relation\n", name);
        !           127:                        lineno -= 2;
        !           128:                }
        !           129:        
        !           130:                find(&d, NOKEY, &tid, &limtid);
        !           131:        
        !           132:                if (Lockrel)
        !           133:                        setrll(A_SLP, d.reltid.ltid, M_SHARE);  /* set shared lock on relation*/
        !           134:                for (;;)
        !           135:                {
        !           136:                        if (mode <= 0)
        !           137:                        {
        !           138:                                beginhdr();
        !           139:                                seq_init(&Attdes, &d);
        !           140:                                for (i = 1; seq_attributes(&Attdes, &d, &att); i++)
        !           141:                                {
        !           142:                                        printhdr(d.relfrmt[i], d.relfrml[i], att.attname);
        !           143:                                }
        !           144:                                printeol();
        !           145:                                printeh();
        !           146:                                lineno -= 3;
        !           147:                        }
        !           148:        
        !           149: #                      ifdef xZTM
        !           150:                        if(tTf(99, 1))
        !           151:                                timtrace(29, 0);
        !           152: #                      endif
        !           153:                        while ((ern = get(&d, &tid, &limtid, tuple, TRUE)) == 0)
        !           154:                        {
        !           155:                                printup(&d, tuple);
        !           156: 
        !           157:                                if (mode == 0 && --lineno <= 0)
        !           158:                                {
        !           159:                                        printf("\n\n\n\n\n\n");
        !           160:                                        lineno = Out_arg.linesperpage - 6;
        !           161:                                        break;
        !           162:                                }
        !           163:                        }
        !           164: #                      ifdef xZTM
        !           165:                        if(tTf(99, 1))
        !           166:                                timtrace(30, 0);
        !           167: #                      endif
        !           168:                        if (ern > 0)
        !           169:                                break;
        !           170:        
        !           171:                        if (ern < 0)
        !           172:                                syserr("print: get %d", ern);
        !           173:                }
        !           174:        
        !           175:                if (mode <= 0)
        !           176:                        printeh();
        !           177:                if (Lockrel)
        !           178:                        unlrl(d.reltid.ltid);   /* release relation lock */
        !           179:        
        !           180:                closer(&d);
        !           181:        }
        !           182:        /* check for any error messages that should be printed */
        !           183:        ern = 0;
        !           184:        for (pc = 0; pc <= parmc - 1; pc++)
        !           185:        {
        !           186:                if (i = err_array[pc])
        !           187:                {
        !           188:                        ern = nferror(i, parmv[pc].pv_val.pv_str, 0);
        !           189:                }
        !           190:        }
        !           191:        return (ern);
        !           192: }

unix.superglobalmegacorp.com

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