ING_DB
This commit is contained in:
parent
bf7e7a41ed
commit
ebf9fac4c3
|
|
@ -0,0 +1,212 @@
|
||||||
|
# include <stdio.h>
|
||||||
|
# include "gen.h"
|
||||||
|
# include "../h/dbs.h"
|
||||||
|
# include "../h/aux.h"
|
||||||
|
# include "../h/lock.h"
|
||||||
|
# include "../h/bs.h"
|
||||||
|
|
||||||
|
# define CLOSED 077
|
||||||
|
|
||||||
|
char *Fileset; /* unique string to append to temp file names */
|
||||||
|
char *AAusercode; /* code to append to relation names */
|
||||||
|
char *AAdatabase; /* database name */
|
||||||
|
char **Xparams; /* other parameters */
|
||||||
|
char *AApath; /* pathname of DBS subtree */
|
||||||
|
char *AAdbpath; /* pathname of DB (always empty) */
|
||||||
|
int R_up; /* pipe descriptor: read from above */
|
||||||
|
int W_up; /* pipe descriptor: write to above */
|
||||||
|
int R_down; /* pipe descriptor: read from below */
|
||||||
|
int W_down; /* pipe descriptor: write to below */
|
||||||
|
int R_front; /* pipe descriptor: read from front end */
|
||||||
|
int W_front; /* pipe descriptor: write to front end */
|
||||||
|
int W_err; /* pipe descriptor: write error message (usually W_up */
|
||||||
|
int Eql; /* flag set if running an EQL program */
|
||||||
|
int Rublevel; /* rubout level, set to -1 if turned off */
|
||||||
|
struct out_arg AAout_arg; /* output arguments */
|
||||||
|
int Standalone; /* not standalone */
|
||||||
|
|
||||||
|
/*
|
||||||
|
** Initialize DBS Process
|
||||||
|
**
|
||||||
|
** All initialization for a process is performed, including
|
||||||
|
** initialization of trace info and global variables. Typical
|
||||||
|
** call is
|
||||||
|
** initproc(procname, argv);
|
||||||
|
** with procname being a string (e.g., "PARSER"),
|
||||||
|
** argv is the parameter of main().
|
||||||
|
**
|
||||||
|
** Calling this routine should be one of the first things done
|
||||||
|
** in main().
|
||||||
|
**
|
||||||
|
** Information passed in argv is as follows:
|
||||||
|
** argv[0] - line from process table
|
||||||
|
** argv[1] - pipe vector
|
||||||
|
** argv[1][0] - R_up
|
||||||
|
** argv[1][1] - W_up
|
||||||
|
** argv[1][2] - R_down
|
||||||
|
** argv[1][3] - W_down
|
||||||
|
** argv[1][4] - R_front
|
||||||
|
** argv[1][5] - W_front
|
||||||
|
** argv[1][6] - AAlockdes
|
||||||
|
** argv[2] - Fileset - unique character string for temp file names.
|
||||||
|
** argv[3] - AAusercode - two character user identifier
|
||||||
|
** argv[4] - AAdatabase - database name
|
||||||
|
** argv[5->n] - Xparams - additional parameters,
|
||||||
|
** different for each process. See .../files/proctab
|
||||||
|
** for what each process actually gets.
|
||||||
|
**
|
||||||
|
** The pipe descriptors are passed with the 0100 bit set, so that
|
||||||
|
** they will show up in a readable fashion on a "ps".
|
||||||
|
**
|
||||||
|
** A flag "Eql" is set if running an EQL program. The flag
|
||||||
|
** is set to 1 if the EQL program is a 6.0 or 6.0 EQL program,
|
||||||
|
** and to 2 if it is a 6.2 EQL program.
|
||||||
|
**
|
||||||
|
** User flags "[+-]x" are processed. Note that the syntax of some of
|
||||||
|
** these are assumed to be correct. They should be checked in
|
||||||
|
** src/support/proc_tab.c.
|
||||||
|
**
|
||||||
|
** Signal 2 is caught and processed by 'rubcatch', which will
|
||||||
|
** eventually call 'rubproc', a user supplied routine which cleans
|
||||||
|
** up the relevant process.
|
||||||
|
*/
|
||||||
|
initproc(procname, argv)
|
||||||
|
char *procname;
|
||||||
|
char **argv;
|
||||||
|
{
|
||||||
|
static int reenter;
|
||||||
|
register char *p;
|
||||||
|
register char **q;
|
||||||
|
register int fd;
|
||||||
|
register int i;
|
||||||
|
extern char *AAproc_name;
|
||||||
|
extern rubcatch(); /* defined in rub.c */
|
||||||
|
extern int wronbrpipe();
|
||||||
|
extern int (*signal())();
|
||||||
|
|
||||||
|
Standalone = FALSE;
|
||||||
|
AAproc_name = procname;
|
||||||
|
reenter = 0;
|
||||||
|
setexit();
|
||||||
|
if (reenter++)
|
||||||
|
{
|
||||||
|
fflush(stdout);
|
||||||
|
exit(-1);
|
||||||
|
}
|
||||||
|
signal(13, wronbrpipe);
|
||||||
|
if (signal(2, (int (*)()) 1) == (int (*)()) 0)
|
||||||
|
{
|
||||||
|
signal(2, rubcatch); /* interrupt-signal */
|
||||||
|
signal(3, rubcatch); /* quit-signal */
|
||||||
|
}
|
||||||
|
else
|
||||||
|
Rublevel = -1;
|
||||||
|
p = argv[1];
|
||||||
|
R_up = fd = *p++ & 077;
|
||||||
|
if (fd == CLOSED)
|
||||||
|
R_up = -1;
|
||||||
|
W_up = fd = *p++ & 077;
|
||||||
|
if (fd == CLOSED)
|
||||||
|
W_up = -1;
|
||||||
|
W_err = W_up;
|
||||||
|
R_down = fd = *p++ & 077;
|
||||||
|
if (fd == CLOSED)
|
||||||
|
R_down = -1;
|
||||||
|
W_down = fd = *p++ & 077;
|
||||||
|
if (fd == CLOSED)
|
||||||
|
W_down = -1;
|
||||||
|
R_front = fd = *p++ & 077;
|
||||||
|
if (fd == CLOSED)
|
||||||
|
R_front = -1;
|
||||||
|
W_front = fd = *p++ & 077;
|
||||||
|
if (fd == CLOSED)
|
||||||
|
W_front = -1;
|
||||||
|
AAlockdes = fd = *p++ & 077;
|
||||||
|
if (fd == CLOSED)
|
||||||
|
AAlockdes = -1;
|
||||||
|
|
||||||
|
q = &argv[2];
|
||||||
|
Fileset = *q++;
|
||||||
|
AAusercode = *q++;
|
||||||
|
AAdatabase = *q++;
|
||||||
|
AApath = *q++;
|
||||||
|
Xparams = q;
|
||||||
|
|
||||||
|
/* process flags */
|
||||||
|
for ( ; (p = *q) != (char *) -1 && p; q++)
|
||||||
|
{
|
||||||
|
if (p[0] != '-')
|
||||||
|
continue;
|
||||||
|
switch (p[1])
|
||||||
|
{
|
||||||
|
case '&': /* EQL program */
|
||||||
|
Eql = 1;
|
||||||
|
if (p[6])
|
||||||
|
Eql = 2;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'c': /* c0 sizes */
|
||||||
|
AA_atoi(&p[2], &AAout_arg.c0width);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'i': /* iNsizes */
|
||||||
|
i = p[2] - '0';
|
||||||
|
switch (i)
|
||||||
|
{
|
||||||
|
case sizeof (char):
|
||||||
|
AA_atoi(&p[3], &AAout_arg.i1width);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case sizeof (short):
|
||||||
|
AA_atoi(&p[3], &AAout_arg.i2width);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case sizeof (long):
|
||||||
|
AA_atoi(&p[3], &AAout_arg.i4width);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'f': /* fN sizes */
|
||||||
|
p = &p[3];
|
||||||
|
fd = *p++;
|
||||||
|
while (*p != '.')
|
||||||
|
p++;
|
||||||
|
*p++ = 0;
|
||||||
|
# ifndef NO_F4
|
||||||
|
i = (*q)[2] - '0';
|
||||||
|
if (i == sizeof (float))
|
||||||
|
{
|
||||||
|
AA_atoi(&(*q)[4], &AAout_arg.f4width);
|
||||||
|
AA_atoi(p, &AAout_arg.f4prec);
|
||||||
|
AAout_arg.f4style = fd;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
# endif
|
||||||
|
{
|
||||||
|
AA_atoi(&(*q)[4], &AAout_arg.f8width);
|
||||||
|
AA_atoi(p, &AAout_arg.f8prec);
|
||||||
|
AAout_arg.f8style = fd;
|
||||||
|
}
|
||||||
|
*--p = '.'; /* restore parm for dbu's */
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'v': /* vertical seperator */
|
||||||
|
AAout_arg.coldelim = p[2];
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'l': /* horizontal seperator */
|
||||||
|
AAout_arg.linedelim = p[2];
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
wronbrpipe()
|
||||||
|
{
|
||||||
|
extern int errno;
|
||||||
|
|
||||||
|
errno = 22; /* EINVAL */
|
||||||
|
AAsyserr(15003);
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue