ING_DB
This commit is contained in:
parent
83975093c3
commit
3a3c2a6e27
|
|
@ -0,0 +1,235 @@
|
|||
# include <stdio.h>
|
||||
# include "../conf/gen.h"
|
||||
# include "../h/dbs.h"
|
||||
# include "../h/aux.h"
|
||||
# include "../h/access.h"
|
||||
# include "../h/bs.h"
|
||||
|
||||
# ifdef P8000
|
||||
ret_buf AAjmp_buf;
|
||||
# else
|
||||
jmp_buf AAjmp_buf;
|
||||
# endif
|
||||
|
||||
int Dflag; /* print descriptor */
|
||||
int Lflag; /* print line table */
|
||||
short Tflag; /* print tuple */
|
||||
extern int AAdbstat;
|
||||
|
||||
main(argc, argv)
|
||||
int argc;
|
||||
char *argv[];
|
||||
{
|
||||
register char **av;
|
||||
register char *p;
|
||||
register int i;
|
||||
register int badf;
|
||||
extern char *AAdbpath;
|
||||
extern char *AAproc_name;
|
||||
extern char *Parmvect[];
|
||||
extern char *Flagvect[];
|
||||
# ifdef SETBUF
|
||||
char stdbuf[BUFSIZ];
|
||||
|
||||
setbuf(stdout, stdbuf);
|
||||
# endif
|
||||
|
||||
AAproc_name = "PAGER";
|
||||
|
||||
# ifdef xSTR1
|
||||
AAtTrace(&argc, argv, 'X');
|
||||
# endif
|
||||
|
||||
badf = 0;
|
||||
switch (i = initucode(argc, argv, TRUE, (char *) 0, -1))
|
||||
{
|
||||
case 0:
|
||||
case 5:
|
||||
break;
|
||||
|
||||
case 1:
|
||||
case 6:
|
||||
AAsyserr(0, "Die Datenbank '%s' existiert nicht", Parmvect[0]);
|
||||
|
||||
case 2:
|
||||
AAsyserr(0, "Sie duerfen auf die Datenbank '%s' nicht zugreifen", Parmvect[0]);
|
||||
|
||||
case 3:
|
||||
AAsyserr(0, "Sie sind kein eingetragener DBS-Nutzer");
|
||||
|
||||
case 4:
|
||||
printf("Sie haben keinen Datenbanknamen angegeben\n");
|
||||
badf++;
|
||||
break;
|
||||
|
||||
default:
|
||||
AAsyserr(22200, AAproc_name, i);
|
||||
}
|
||||
|
||||
for (av = Flagvect; p = *av; av++)
|
||||
{
|
||||
if (p[0] != '-')
|
||||
goto badflag;
|
||||
switch (p[1])
|
||||
{
|
||||
case 'd':
|
||||
case 'D':
|
||||
Dflag++;
|
||||
break;
|
||||
|
||||
case 'l':
|
||||
case 'L':
|
||||
Lflag++;
|
||||
break;
|
||||
|
||||
case '1':
|
||||
case '2':
|
||||
case '3':
|
||||
case '4':
|
||||
case '5':
|
||||
case '6':
|
||||
case '7':
|
||||
case '8':
|
||||
case '9':
|
||||
AA_atoi(&p[1], &Tflag);
|
||||
Lflag++;
|
||||
break;
|
||||
|
||||
default:
|
||||
badflag:
|
||||
printf("Unbekanntes Flag '%s'\n", p);
|
||||
badf++;
|
||||
}
|
||||
}
|
||||
if (badf)
|
||||
{
|
||||
flush();
|
||||
exit(-1);
|
||||
}
|
||||
|
||||
/*
|
||||
** Check for usage errors.
|
||||
*/
|
||||
for (i = 1; Parmvect[i]; i++)
|
||||
continue;
|
||||
if (i < 2)
|
||||
AAsyserr(0, "HINWEIS: pager [-d] [-l] [-no] db_name {relation}");
|
||||
|
||||
/*
|
||||
** Check for superuser
|
||||
*/
|
||||
if (!(AAdbstat & U_SUPER))
|
||||
AAsyserr(0, "Sie duerfen PAGER nicht verwenden");
|
||||
|
||||
p = Parmvect[0]; /* data base is first parameter */
|
||||
if (chdir(AAdbpath) < 0)
|
||||
AAsyserr(22201, AAproc_name, p);
|
||||
|
||||
/* initialize access methods (and AAdmin struct) for user_ovrd test */
|
||||
AAam_start();
|
||||
|
||||
av = &Parmvect[1];
|
||||
while (p = *av++)
|
||||
pager(p);
|
||||
fflush(stdout);
|
||||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
# ifdef STACK
|
||||
static ACCBUF pg_buf;
|
||||
# endif
|
||||
|
||||
pager(name)
|
||||
register char *name;
|
||||
{
|
||||
register int i;
|
||||
register ACCBUF *b;
|
||||
register DESC *d;
|
||||
register int f;
|
||||
register int k;
|
||||
long page;
|
||||
DESC desc;
|
||||
# ifndef STACK
|
||||
ACCBUF pg_buf;
|
||||
# endif
|
||||
|
||||
if ((i = AArelopen(d = &desc, 0, name)) == 1)
|
||||
{
|
||||
printf("PAGER: relation '%s' does not exist\n", name);
|
||||
return;
|
||||
}
|
||||
else if (i < 0)
|
||||
AAsyserr(22202, name, i);
|
||||
|
||||
printf("\n\nPAGES for ");
|
||||
switch (abs(d->reldum.relspec))
|
||||
{
|
||||
case M_HEAP:
|
||||
printf("HEAP");
|
||||
break;
|
||||
|
||||
case M_HASH:
|
||||
printf("HASH");
|
||||
break;
|
||||
|
||||
case M_ISAM:
|
||||
printf("ISAM");
|
||||
break;
|
||||
|
||||
default:
|
||||
printf("%4d", d->reldum.relspec);
|
||||
}
|
||||
printf("-relation %s: %5ld\n", name, d->reldum.relprim);
|
||||
printf("---------------------------------------\n\n");
|
||||
f = d->relfp; /* file descriptor for relation file */
|
||||
page = 0;
|
||||
b = &pg_buf;
|
||||
|
||||
if (Dflag)
|
||||
{
|
||||
AAprdesc(d);
|
||||
printf("\n");
|
||||
}
|
||||
if (d->reldum.relatts > Tflag)
|
||||
d->reldum.relatts = Tflag;
|
||||
|
||||
while (read(f, b, AApgsize) == AApgsize)
|
||||
{
|
||||
printf("%5ld(%4d|%4d):%5ld->%5ld\n", page, b->nxtlino,
|
||||
b->linetab[LINETAB(b->nxtlino)], b->mainpg, b->ovflopg);
|
||||
if (Lflag)
|
||||
{
|
||||
if (Tflag)
|
||||
{
|
||||
for (i = 0; i < b->nxtlino; i++)
|
||||
if (k = b->linetab[LINETAB(i)])
|
||||
{
|
||||
printf("%5ld/%4d|%4d: ", page, i, k);
|
||||
AAprtup(d, ((char *) b) + k);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
printf(" ");
|
||||
for (i = 0; i < b->nxtlino; i++)
|
||||
if (b->linetab[LINETAB(i)])
|
||||
printf("%5d", i);
|
||||
printf("\n ");
|
||||
for (i = 0; i < b->nxtlino; i++)
|
||||
if (k = b->linetab[LINETAB(i)])
|
||||
printf("%5d", k);
|
||||
printf("\n");
|
||||
}
|
||||
}
|
||||
page++;
|
||||
}
|
||||
AArelclose(d);
|
||||
}
|
||||
|
||||
|
||||
rubproc()
|
||||
{
|
||||
fflush(stdout);
|
||||
exit(0);
|
||||
}
|
||||
Loading…
Reference in New Issue