|
|
BSD 4.3
# include <stdio.h>
# include <ingres.h>
# include <aux.h>
# include <access.h>
# include <lock.h>
# include <pv.h>
# include <sccs.h>
SCCSID(@(#)helpr.c 8.2 2/8/85)
extern int Status;
short tTdbu[100];
DESC Btreesec;
int Btree_fd;
char *Fileset;
main(argc, argv)
int argc;
char *argv[];
{
extern struct out_arg Out_arg;
register char **av;
register int i;
register char *p;
extern char *Parmvect[];
extern char *Flagvect[];
extern char *Dbpath;
int nc;
PARM newpv[PV_MAXPC];
PARM *nv;
char *qm;
char *qmtest();
argv[argc] = NULL;
# ifdef xSTR1
tTrace(argv, 'T', tTdbu, 100);
# endif
i = initucode(argc, argv, TRUE, NULL, M_SHARE);
# ifdef xSTR2
if (tTf(0, 1))
printf("initucode=%d, Dbpath='%s'\n", i, Dbpath);
# endif
switch (i)
{
case 0:
case INDIRECT:
break;
case NODB:
case INDNODB:
printf("Database %s does not exist\n", Parmvect[0]);
exit(-1);
case NOACCESS:
printf("You are not authorized to access this database\n");
exit(-1);
case INVALIDUSR:
printf("You are not a valid INGRES user\n");
exit(-1);
case NODBNAME:
printf("No database name specified\n");
usage:
printf("usage: helpr database [relname ...]\n");
exit(-1);
default:
syserr("initucode %d", i);
}
/*
if (Flagvect[0] != NULL)
{
printf("No flags are allowed for this command\n");
goto usage;
}
*/
if (chdir(Dbpath) < 0)
syserr("cannot access data base %s", p);
# ifdef xTTR2
if (tTf(1, 0))
printf("entered database %s\n", Dbpath);
# endif
/* initialize access methods (and Admin struct) for user_ovrd test */
acc_init();
# ifdef xTTR3
if (tTf(2, 0))
printf("access methods initialized\n");
# endif
set_so_buf();
av = &Parmvect[1]; /* get first param after database name */
p = *av;
if (p == NULL)
{
/* special case of no relations specified */
newpv[0].pv_type = PV_INT;
newpv[0].pv_val.pv_int = RELIST;
newpv[1].pv_type = PV_EOF;
# ifdef xTTR3
if (tTf(3, 0))
printf("calling help, no relations specified\n");
# endif
help(1, newpv);
}
else
{
do
{
nc = 0;
nv = newpv;
if ((qm = qmtest(p)) != NULL)
{
/* either help view, integrity or protect */
av++;
while ((p = *av++) != NULL)
{
if ((i = (int) qmtest(p)) != NULL)
{
/* change of qmtest result */
qm = (char *) i;
continue;
}
(nv)->pv_type = PV_STR;
(nv++)->pv_val.pv_str = qm;
(nv)->pv_type = PV_STR;
(nv++)->pv_val.pv_str = p;
nc += 2;
}
# ifdef xTTR3
if (tTf(3, 0))
printf("calling display\n");
# endif
nv->pv_type = PV_EOF;
/*
display(nc, newpv);
*/
}
else
{
/* help relname */
while ((p = *av++) != NULL && qmtest(p) == NULL)
{
if (sequal("all", p))
{
(nv)->pv_type = PV_INT;
(nv++)->pv_val.pv_int = ALLRELINFO;
nc++;
}
else
{
(nv)->pv_type = PV_INT;
(nv++)->pv_val.pv_int = RELINFO;
(nv)->pv_type = PV_STR;
(nv++)->pv_val.pv_str = p;
nc += 2;
}
}
nv->pv_type = PV_EOF;
# ifdef xTTR3
if (tTf(3, 0))
printf("calling help\n");
# endif
help(nc, newpv);
/* this backs av up one step, so
* that it points at the keywords (permit,
* integrity, view) or the NULL
*/
--av;
}
} while (p != NULL);
}
fflush(stdout);
exit(0);
}
char *qmtest(p)
register char *p;
{
if (sequal("view", p))
return ("4");
else if (sequal("permit", p))
return ("5");
else if (sequal("integrity", p))
return ("6");
else
return (NULL);
}
rubproc()
{
exit(1);
}
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.