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

1.1     ! root        1: # include      <pv.h>
        !             2: # include      <ingres.h>
        !             3: # include      <aux.h>
        !             4: # include      <catalog.h>
        !             5: # include      <access.h>
        !             6: # include      <func.h>
        !             7: # include      <signal.h>
        !             8: # include      <sccs.h>
        !             9: 
        !            10: SCCSID(@(#)help.c      7.4     9/26/83)
        !            11: 
        !            12: extern short   tTdbu[100];
        !            13: extern int     help();
        !            14: extern int     null_fn();
        !            15: 
        !            16: struct fn_def HelpFn =
        !            17: {
        !            18:        "HELP",
        !            19:        help,
        !            20:        null_fn,                /* initialization function */
        !            21:        null_fn,
        !            22:        NULL,
        !            23:        0,
        !            24:        tTdbu,
        !            25:        100,
        !            26:        'Z',
        !            27:        0
        !            28: };
        !            29: 
        !            30: 
        !            31: /*
        !            32: **  HELP - Provide Information to User
        !            33: **
        !            34: **     Arguments:
        !            35: **             pv[i] - code
        !            36: **                     0 - print relation information
        !            37: **                     1 - print manual section
        !            38: **                     2 - print relation list
        !            39: **                     3 - print relation info for all accessible relations
        !            40: **             pv[i+1] - name of entity for modes 0 or 1
        !            41: **
        !            42: **     Trace Flags:
        !            43: **             44
        !            44: */
        !            45: 
        !            46: help(parmc, parmv)
        !            47: int    parmc;
        !            48: PARM   parmv[];
        !            49: {
        !            50:        DESC            des;
        !            51:        int             mode;
        !            52:        register PARM   *pv;
        !            53:        register int    ret;
        !            54: 
        !            55: # ifdef        xZTR1
        !            56:        if (tTf(44, -1))
        !            57:        {
        !            58:                printf(">>help\n");
        !            59:                if (tTf(44, 0))
        !            60:                        prvect(parmc, parmv);
        !            61:        }
        !            62: # endif
        !            63: 
        !            64:        ret = 0;
        !            65:        pv = parmv;
        !            66:        getuser(-1);    /* init getuser for modes 1 & 2 */
        !            67:        while (pv->pv_type != PV_EOF)
        !            68:        {
        !            69:                mode = atoi((pv++)->pv_val.pv_str);
        !            70:                if (mode < 2 && pv->pv_type == PV_EOF)
        !            71:                        syserr("help: mode %d no val", mode);
        !            72: 
        !            73: #              ifdef xZTR1
        !            74:                if (tTf(44, -1))
        !            75:                {
        !            76:                        printf("help %d", mode);
        !            77:                        if (mode != 2)
        !            78:                                printf(" %s", pv->pv_val.pv_str);
        !            79:                        putchar('\n');
        !            80:                }
        !            81: #              endif
        !            82:                switch (mode)
        !            83:                {
        !            84: 
        !            85:                  case 0:       /* help relation */
        !            86:                        if (!openr(&des, -1, pv->pv_val.pv_str))
        !            87:                        {
        !            88:                                rel_fmt(&des);
        !            89:                                pv->pv_val.pv_str = NULL;
        !            90:                        }
        !            91:                        pv++;
        !            92:                        break;
        !            93: 
        !            94:                  case 1:       /* help manual section */
        !            95:                        if (man(pv->pv_val.pv_str))
        !            96:                                pv->pv_val.pv_str = NULL;
        !            97:                        pv++;
        !            98:                        break;
        !            99: 
        !           100:                  case 2:
        !           101:                  case 3:
        !           102:                        relpr(mode);
        !           103:                        break;
        !           104: 
        !           105:                  default:
        !           106:                        syserr("HELP: mode %d", mode);
        !           107:                }
        !           108:        }
        !           109:        getuser(0);     /* close getuser in case mode 1 or 2 */
        !           110: 
        !           111:        /* now rescan for error messages */
        !           112:        pv = parmv;
        !           113:        while (pv->pv_type != PV_EOF)
        !           114:        {
        !           115:                mode = atoi((pv++)->pv_val.pv_str);
        !           116: 
        !           117:                if (mode < 2)
        !           118:                {
        !           119:                        if (pv->pv_val.pv_str != NULL)
        !           120:                                ret = nferror(5401 + mode, pv->pv_val.pv_str, 0);
        !           121:                        pv++;
        !           122:                }
        !           123:        }
        !           124:        return (ret);
        !           125: }
        !           126: 
        !           127: 
        !           128: /*
        !           129: **  Nroff Manual Section
        !           130: **
        !           131: **     The manual section given by 'name' is nroff'ed.  Returns one
        !           132: **     on success, zero if the manual section is not found.
        !           133: **
        !           134: **     Uses trace flag 11
        !           135: */
        !           136: 
        !           137: int
        !           138: man(name)
        !           139: char   *name;
        !           140: {
        !           141:        char            manual[100];
        !           142:        register int    i;
        !           143:        int             stat;
        !           144:        char            name_nr[18];
        !           145:        register char   *naa;
        !           146:        extern char     *ztack();
        !           147: 
        !           148:        if (length(name) > 14)
        !           149:                return (0);
        !           150: 
        !           151:        /* a null manual name gives table of contents */
        !           152:        if (name[0] == 0)
        !           153:                smove("../toc.nr", name_nr);
        !           154:        else
        !           155:                concat(name, ".nr", name_nr);
        !           156: 
        !           157:        concat(ztack(Pathname, "/doc/quel/"), name_nr, manual);
        !           158:        if ((i = open(manual, 0)) < 0)
        !           159:        {
        !           160:                /* try a unix command instead */
        !           161:                concat(ztack(Pathname, "/doc/unix/"), name_nr, manual);
        !           162:                if ((i = open(manual, 0)) < 0)
        !           163:                        return (0);
        !           164:        }
        !           165:        if (close(i))
        !           166:                syserr("cannot close %s", manual);
        !           167:        ruboff(0);      /* wait for child's death if rubout occures */
        !           168:        i = fork();
        !           169:        if (i == 0)
        !           170:        {
        !           171:                signal(SIGINT, SIG_DFL);        /* die on rubout */
        !           172:                setuid(getuid());
        !           173: #              ifndef xB_UNIX
        !           174:                setgid(getgid());
        !           175: #              endif
        !           176:                naa = ztack(Pathname, "/doc/iaa");
        !           177:                execl("/bin/nroff", "nroff", naa, manual, 0);
        !           178:                execl("/usr/bin/nroff", "nroff", naa, manual, 0);
        !           179:                syserr("help: exec: nroff");
        !           180:        }
        !           181:        /* wait for nroff if fork succeeded */
        !           182:        if (i > 0)
        !           183:                fullwait(i, "help: nroff");
        !           184:        rubon();
        !           185:        return (1);
        !           186: }
        !           187: 
        !           188: 
        !           189: /*
        !           190: **  PRINT DATABASE INFORMATION
        !           191: **
        !           192: **     Prints a list of all the relations in the database, together
        !           193: **     with their owner.
        !           194: **
        !           195: **     Uses trace flag 12
        !           196: */
        !           197: 
        !           198: relpr(mode)
        !           199: int    mode;
        !           200: {
        !           201:        extern DESC     Reldes;
        !           202:        register DESC   *d;
        !           203:        register int                    i;
        !           204:        register char                   *cp;
        !           205:        struct tup_id                   limtid, tid;
        !           206:        char                            buf[MAXLINE + 1];
        !           207:        char                            lastuser[2];
        !           208:        struct relation                 rel;
        !           209: 
        !           210:        opencatalog("relation", 0);
        !           211:        d = &Reldes;
        !           212:        if (i = find(d, NOKEY, &tid, &limtid))
        !           213:                syserr("help: relpr: find %d", i);
        !           214: 
        !           215:        lastuser[0] = '\0';
        !           216: 
        !           217:        if (mode == 2)
        !           218:                printf("\n relation name     relation owner\n\n");
        !           219: 
        !           220:        while ((i = get(d, &tid, &limtid, &rel, 1)) == 0)
        !           221:        {
        !           222:                if (mode == 2)
        !           223:                {
        !           224:                        if (!bequal(lastuser, rel.relowner, 2))
        !           225:                        {
        !           226:                                if (getuser(rel.relowner, buf))
        !           227:                                {
        !           228:                                        /* cant find user code */
        !           229:                                        bmove("  ", buf, 2);
        !           230:                                        cp = &buf[2];
        !           231:                                        bmove(rel.relowner, cp, 2);
        !           232:                                        cp = &cp[2];
        !           233:                                        *cp = '\0';
        !           234:                                }
        !           235:                                else
        !           236:                                {
        !           237:                                        for (cp = buf; *cp != ':'; cp++)
        !           238:                                                ;
        !           239:                                        *cp = '\0';
        !           240:                                }
        !           241:                                bmove(rel.relowner, lastuser, 2);
        !           242:                        }
        !           243:                        printf(" %.12s      %s\n", rel.relid, buf);
        !           244:                }
        !           245:                else
        !           246:                {
        !           247:                        if ((rel.relstat & S_CATALOG) || bequal("_SYS", rel.relid, 4))
        !           248:                                continue;
        !           249:                        if (bequal(Usercode, rel.relowner, 2) || bequal(Admin.adhdr.adowner, rel.relowner, 2))
        !           250:                                rel_fmt(&rel);
        !           251:                }
        !           252:        }
        !           253: 
        !           254:        if (i < 0)
        !           255:                syserr("help: relpr: get %d", i);
        !           256:        if (mode == 2)
        !           257:                printf("\n");
        !           258:        return (0);
        !           259: }
        !           260: 
        !           261: 
        !           262: 
        !           263: /*
        !           264: **  Print Relation Information
        !           265: **
        !           266: **     Prints detailed information regarding the relation.
        !           267: **
        !           268: **     Uses trace flag 13
        !           269: */
        !           270: 
        !           271: rel_fmt(r)
        !           272: register struct relation       *r;
        !           273: {
        !           274:        struct tup_id           limtid, tid;
        !           275:        char                    buf[MAXLINE + 1];
        !           276:        struct attribute        att;
        !           277:        struct index            indkey, ind;
        !           278:        register int            i;
        !           279:        int                     j;
        !           280:        extern DESC             Attdes, Inddes;
        !           281:        char                    *trim_relname();
        !           282: 
        !           283:        printf("\nRelation:\t\t%s\n", trim_relname(r->relid));
        !           284:        i = getuser(r->relowner, buf);
        !           285:        if (i)
        !           286:        {
        !           287:                smove("(xx)", buf);
        !           288:                bmove(r->relowner, &buf[1], 2);
        !           289:        }
        !           290:        else
        !           291:        {
        !           292:                for (i = 0; buf[i] != ':'; i++)
        !           293:                        continue;
        !           294:                buf[i] = 0;
        !           295:        }
        !           296:        printf("Owner:\t\t\t%s\n", buf);
        !           297:        printf("Tuple width:\t\t%d\n", r->relwid);
        !           298:        if (r->relsave != 0)
        !           299:        {
        !           300:                printf("Saved until:\t\t%s", ctime(&r->relsave));
        !           301:        }
        !           302:        if ((r->relstat & S_VIEW) == 0)
        !           303:        {
        !           304:                printf("Number of tuples:\t%ld\n", r->reltups);
        !           305:                printf("Storage structure:\t");
        !           306:                i = r->relspec;
        !           307:                if (i < 0)
        !           308:                {
        !           309:                        printf("compressed ");
        !           310:                        i = -i;
        !           311:                }
        !           312:                switch (i)
        !           313:                {
        !           314:        
        !           315:                  case M_HEAP:
        !           316:                        printf("paged heap\n");
        !           317:                        break;
        !           318:        
        !           319:                  case M_ISAM:
        !           320:                        printf("ISAM file\n");
        !           321:                        break;
        !           322:        
        !           323:                  case M_HASH:
        !           324:                        printf("random hash\n");
        !           325:                        break;
        !           326:        
        !           327:                  default:
        !           328:                        printf("unknown structure %d\n", i);
        !           329:                        break;
        !           330:        
        !           331:                }
        !           332:        }
        !           333: 
        !           334:        printf("Relation type:\t\t");
        !           335:        if (r->relstat & S_CATALOG)
        !           336:                printf("system catalog\n");
        !           337:        else if (r->relstat & S_VIEW)
        !           338:                printf("view\n");
        !           339:        else
        !           340:                if (r->relindxd < 0)
        !           341:                {
        !           342:                        printf("secondary index on ");
        !           343:                        opencatalog("indexes", 0);
        !           344:                        setkey(&Inddes, &indkey, r->relowner, IOWNERP);
        !           345:                        setkey(&Inddes, &indkey, r->relid, IRELIDI);
        !           346:                        if (!getequal(&Inddes, &indkey, &ind, &tid))
        !           347:                                printf("%s\n", trim_relname(ind.irelidp));
        !           348:                        else
        !           349:                                printf("unknown relation\n");
        !           350:                }
        !           351:                else
        !           352:                {
        !           353:                        if (r->relstat & S_DISTRIBUTED)
        !           354:                                printf("distributed ");
        !           355:                        printf("user relation\n");
        !           356:                }
        !           357:        if (r->relindxd > 0)
        !           358:        {
        !           359:                printf("Secondary Indices:\t");
        !           360:                opencatalog("indexes", 0);
        !           361:                setkey(&Inddes, &indkey, r->relid, IRELIDP);
        !           362:                setkey(&Inddes, &indkey, r->relowner, IOWNERP);
        !           363:                if (i = find(&Inddes, EXACTKEY, &tid, &limtid, &indkey))
        !           364:                        syserr("help: find %d indexes", i);
        !           365:                j = FALSE;
        !           366:                while ((i = get(&Inddes, &tid, &limtid, &ind, 1)) == 0)
        !           367:                {
        !           368:                        if (!bequal(&indkey, &ind, MAXNAME + 2))
        !           369:                                continue;
        !           370:                        if (j)
        !           371:                                printf(", ");
        !           372:                        j =TRUE;
        !           373:                        printf("%s", trim_relname(ind.irelidi));
        !           374:                }
        !           375:                if (i < 0)
        !           376:                        syserr("help:get indexes %d", i);
        !           377:                if (!j)
        !           378:                        printf("unknown");
        !           379:        }
        !           380:        printf("\n");
        !           381: 
        !           382:        opencatalog("attribute", 0);
        !           383:        printf("\n attribute name    type  length  keyno.\n\n");
        !           384:        seq_init(&Attdes, r);
        !           385:        while (seq_attributes(&Attdes, r, &att))
        !           386:        {
        !           387:                printf(" %.12s      %c%8d",
        !           388:                        att.attname, att.attfrmt, att.attfrml & 0377);
        !           389:                if (att.attxtra)
        !           390:                        printf("%7d", att.attxtra);
        !           391:                printf("\n");
        !           392:        }
        !           393: 
        !           394:        printf("\n");
        !           395:        return (0);
        !           396: }

unix.superglobalmegacorp.com

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