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   <catalog.h>
   8: # include   <btree.h>
   9: # include   <sccs.h>
  10: # include   <errors.h>
  11: 
  12: SCCSID(@(#)print.c	8.6	3/20/85)
  13: 
  14: extern  short   tTdbu[];
  15: extern  int print();
  16: extern  int null_fn();
  17: 
  18: struct fn_def PrintFn =
  19: {
  20:     "PRINT",
  21:     print,
  22:     null_fn,        /* initialization function */
  23:     null_fn,
  24:     NULL,
  25:     0,
  26:     tTdbu,
  27:     100,
  28:     'Z',
  29:     0
  30: };
  31: 
  32: 
  33: 
  34: 
  35: /*
  36: **  PRINT -- print relation
  37: **
  38: **	Parameters:
  39: **		parmv[0] through parmv[parmc -2] contain names
  40: **		of relations to be printed on the standard output.
  41: **		Note that this calls printatt, so all the output formatting
  42: **		features associated with printatt are available here.
  43: **
  44: **		parmv[parmc - 1].pv_type is PV_INT for other than a "normal"
  45: **		print.  In this case parmv[parmc - 1] is 0 for headers on
  46: **		every page, and 1 for all headers and footers suppressed.
  47: **		err_array is set to 0 for a good relation, 1 for no
  48: **		relation by that name, and -1 for a view.
  49: **
  50: **	Returns:
  51: **		0 if no errors else the last error number
  52: **
  53: **	Trace Flags:
  54: **		40
  55: */
  56: 
  57: print(parmc, parmv)
  58: int parmc;
  59: PARM    parmv[];
  60: {
  61:     DESC            d;
  62:     extern DESC     Attdes;
  63:     struct attribute    att, katt;
  64:     char            tuple[MAXTUP];
  65:     TID         tid, limtid;
  66:     TID         stid;
  67:     register int        i;
  68:     register int        ern;
  69:     register char       *name;
  70:     extern struct out_arg   Out_arg;
  71:     int         mode;
  72:     int         lineno;
  73:     int         pc;
  74:     int         err_array[PV_MAXPC];
  75:     char            btree[MAXNAME + 4];
  76:     struct locator      tidpos;
  77:     long            page, mtid, t, next;
  78:     extern DESC     Btreesec;
  79:     extern int      Btree_fd;
  80:     extern HDRINFO      *Hdrptr;
  81:     extern HDRINFO      *Fieldwidth;
  82:     extern int      Hdr;
  83:     HDRINFO         *hptr;
  84:     HDRINFO         *tptr;
  85:     int         start;
  86: 
  87: #	ifdef xZTR1
  88:     if (tTf(40, -1))
  89:     {
  90:         printf("entering print\n");
  91:         prvect(parmc, parmv);
  92:     }
  93: #	endif
  94: 
  95:     if (parmv[parmc - 1].pv_type == PV_INT)
  96:         mode = parmv[parmc - 1].pv_val.pv_int;
  97:     else
  98:         mode = -1;
  99: 
 100:     opencatalog("attribute", OR_READ);
 101: 
 102:     for (pc = 0; pc <= parmc - 1; pc++)
 103:     {
 104:         name = parmv[pc].pv_val.pv_str;
 105: 
 106:         ern = openr(&d, OR_READ, name);
 107:         if (d.reldum.reldim > 0)
 108:         {
 109:             bmove(d.relbtree, &Btreesec, sizeof(Btreesec));
 110:             Btree_fd = d.btree_fd;
 111:         }
 112:         if (ern == AMOPNVIEW_ERR)
 113:         {
 114:             err_array[pc] = NOPRINTVIEW;    /* can't print a view */
 115:             continue;
 116:         }
 117:         if (ern > 0)
 118:         {
 119:             err_array[pc] = BADRELNAME; /* cannot open relation */
 120:             continue;
 121:         }
 122:         if (ern < 0)
 123:             syserr("printr:openr target %s, %d",
 124:             name, ern);
 125:         if ((d.reldum.relstat & S_PROTALL) && (d.reldum.relstat & S_PROTRET) &&
 126:             !bequal(Usercode, d.reldum.relowner, UCODE_SZ))
 127:         {
 128:             err_array[pc] = PROTVIOL;   /* protection violation */
 129:             closer(&d);
 130:             continue;
 131:         }
 132: 
 133: 
 134:         /* a printable relation */
 135:         err_array[pc] = 0;
 136: #		ifdef xZTR2
 137:         if (tTf(40, 1))
 138:             printdesc(&d);
 139: #		endif
 140:         lineno = Out_arg.linesperpage - 6;
 141:         if (mode <= 0)
 142:         {
 143:             if (mode == 0)
 144:                 putchar('\014');    /* form feed */
 145:             printf("\n%s relation\n", name);
 146:             lineno -= 2;
 147:         }
 148: 
 149:         if (!d.reldum.reldim)
 150:             find(&d, NOKEY, &tid, &limtid);
 151: 
 152:         if (Lockrel)
 153:             setrll(A_SLP, d.reltid.ltid, M_SHARE);  /* set shared lock on relation*/
 154:         for (;;)
 155:         {
 156:             if (mode <= 0)
 157:             {
 158:                 Hdr = TRUE;
 159:                 beginhdr();
 160:                 seq_init(&Attdes, &d);
 161:                 start = 1;
 162:                 for (i = 1; seq_attributes(&Attdes, &d, &att); i++)
 163:                 {
 164:                     if (d.relfrmt[i] == 'c')
 165:                     {
 166:                         tptr = (HDRINFO *) malloc(sizeof(HDRINFO));
 167:                         if (start)
 168:                         {
 169:                             Hdrptr = tptr;
 170:                             Fieldwidth = Hdrptr;
 171:                             start = 0;
 172:                         }
 173:                         else
 174:                             hptr->next = tptr;
 175:                         hptr = tptr;
 176:                     }
 177: 
 178:                     printhdr(d.relfrmt[i], d.relfrml[i], att.attname);
 179:                     if (d.relfrmt[i] == 'c')
 180:                     {
 181:                         tptr->len = d.relfrml[i];
 182:                         tptr->len &= 0377;
 183:                         tptr->next = NULL;
 184:                     }
 185:                 }
 186:                 printeol();
 187:                 printeh();
 188:                 lineno -= 3;
 189:             }
 190: 
 191:             if (d.reldum.reldim > 0)
 192:             {
 193:                 btreename(d.reldum.relid, btree);
 194:                 page = RT;
 195:                 for (i = 0; i < d.reldum.reldim -1 ; ++i)
 196:                 {
 197:                     t = get_tid(page, 1, &tidpos);
 198:                     if (t < 0)
 199:                         break;  /* lid value doesn't exist */
 200:                     bmove(&t, &page, LIDSIZE);
 201:                 }
 202:                 ern = 1;
 203:                 if (t >= 0)
 204:                 {
 205:                     do
 206:                     {
 207:                         get_node(page, &tidpos.page);
 208:                         next = tidpos.page.nexttree;
 209:                         get_tid(page, 1, &tidpos);
 210:                         page = tidpos.pageno;
 211:                         ern = 0;
 212:                         while (ern == 0)
 213:                         {
 214:                             for (i = 0; i < tidpos.page.nelmts && ern == 0; ++i)
 215:                             {
 216:                                 mtid = tidpos.page.node.leafnode.tid_pos[tidpos.page.node.leafnode.tid_loc[i]];
 217:                                 ern = get(&d, &mtid, &mtid, tuple, FALSE);
 218:                                 printup(&d, tuple);
 219: 
 220:                                 if (mode == 0 && --lineno <= 0)
 221:                                 {
 222:                                     printf("\n\n\n\n\n\n");
 223:                                     lineno = Out_arg.linesperpage - 6;
 224:                                     ern = 1;
 225:                                     break;
 226:                                 }
 227:                             }
 228:                             page = tidpos.page.node.leafnode.nextleaf;
 229:                             if (page == NULL)
 230:                                 ern = 1;
 231:                             else
 232:                                 get_node(page, &tidpos.page);
 233:                         }
 234:                     } while (page = next);
 235:                 }
 236:             }
 237:             else
 238:             {
 239:                 while ((ern = get(&d, &tid, &limtid, tuple, TRUE)) == 0)
 240:                 {
 241:                     printup(&d, tuple);
 242: 
 243:                     if (mode == 0 && --lineno <= 0)
 244:                     {
 245:                         printf("\n\n\n\n\n\n");
 246:                         lineno = Out_arg.linesperpage - 6;
 247:                         break;
 248:                     }
 249:                 }
 250:             }
 251:             if (ern > 0)
 252:                 break;
 253: 
 254:             if (ern < 0)
 255:                 syserr("print: get %d", ern);
 256:         }
 257: 
 258:         if (mode <= 0)
 259:         {
 260:             printeh();
 261:             Hdr = FALSE;
 262:         }
 263:         if (Lockrel)
 264:             unlrl(d.reltid.ltid);   /* release relation lock */
 265: 
 266:         closer(&d);
 267:     }
 268:     /* check for any error messages that should be printed */
 269:     ern = 0;
 270:     for (pc = 0; pc <= parmc - 1; pc++)
 271:     {
 272:         if (i = err_array[pc])
 273:         {
 274:             ern = nferror(i, parmv[pc].pv_val.pv_str, 0);
 275:         }
 276:     }
 277:     return (ern);
 278: }

Defined functions

print defined in line 57; used 2 times

Defined variables

PrintFn defined in line 18; never used
Last modified: 1986-04-17
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 956
Valid CSS Valid XHTML 1.0 Strict