ING_DB
This commit is contained in:
parent
82156416e4
commit
1ab047d549
|
|
@ -0,0 +1,26 @@
|
|||
# include <stdio.h>
|
||||
# include "gen.h"
|
||||
# include "../h/pipes.h"
|
||||
|
||||
/*
|
||||
** COPY PIPES
|
||||
**
|
||||
** Copys pipe 'fromd' to pipe 'tod' using pipe buffers 'fromb'
|
||||
** and 'tob'.
|
||||
**
|
||||
** Neither pipe is primed or otherwise set up. The end of pipe
|
||||
** is copied.
|
||||
*/
|
||||
copypipes(fromb, fromd, tob, tod)
|
||||
register struct pipfrmt *fromb;
|
||||
register struct pipfrmt *tob;
|
||||
int fromd;
|
||||
int tod;
|
||||
{
|
||||
register int i;
|
||||
char buf[PBUFSIZ];
|
||||
|
||||
while ((i = rdpipe(P_NORM, fromb, fromd, buf, sizeof buf)) > 0)
|
||||
wrpipe(P_NORM, tob, tod, buf, i);
|
||||
wrpipe(P_END, tob, tod);
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# include <stdio.h>
|
||||
# include "gen.h"
|
||||
# include "../h/pipes.h"
|
||||
|
||||
/*
|
||||
** ENDJOB -- default end of job processing
|
||||
**
|
||||
** This routine is called on a clean exit from the system. It is
|
||||
** supposed to do any cleanup processing and the like. This copy
|
||||
** is a default version, which just returns zero.
|
||||
**
|
||||
** The value of end_job() is passed as the exit status, and should
|
||||
** normally be zero.
|
||||
**
|
||||
** Returns:
|
||||
** exit status for process.
|
||||
** (zero for this dummy version).
|
||||
**
|
||||
** Side Effects:
|
||||
** as needed by user who redefines this, but none in
|
||||
** this copy.
|
||||
*/
|
||||
end_job()
|
||||
{
|
||||
return (0);
|
||||
}
|
||||
|
|
@ -0,0 +1,26 @@
|
|||
# include <stdio.h>
|
||||
# include "gen.h"
|
||||
# include "../h/pipes.h"
|
||||
|
||||
/*
|
||||
** DEFAULT PROC_ERROR ROUTINE
|
||||
**
|
||||
** This routine handles the processing of errors for a typical
|
||||
** process. Please feel free to redefine it if you need other
|
||||
** features.
|
||||
*/
|
||||
|
||||
proc_error(s, fd)
|
||||
register struct pipfrmt *s;
|
||||
register int fd;
|
||||
{
|
||||
struct pipfrmt t;
|
||||
|
||||
if (fd != R_down)
|
||||
AAsyserr(15027);
|
||||
wrpipe(P_PRIME, &t, s->exec_id, (char *) 0, s->func_id);
|
||||
t.err_id = s->err_id;
|
||||
|
||||
copypipes(s, fd, &t, W_up);
|
||||
rdpipe(P_PRIME, s);
|
||||
}
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
# include <stdio.h>
|
||||
# include "gen.h"
|
||||
# include "../h/pipes.h"
|
||||
|
||||
/*
|
||||
** RESYNCHRONIZE PIPES AFTER AN INTERRUPT
|
||||
**
|
||||
** The pipes are all cleared out. This routines must be called
|
||||
** by all processes in the system simultaneously. It should be
|
||||
** called from the interrupt catching routine.
|
||||
*/
|
||||
resyncpipes()
|
||||
{
|
||||
register struct pipfrmt *pbuf;
|
||||
register int fd;
|
||||
struct pipfrmt buf;
|
||||
|
||||
wrpipe(P_PRIME, pbuf = &buf, 0, (char *) 0, 0);
|
||||
|
||||
/* synchronize the downward pipes */
|
||||
if ((fd = R_up) >= 0)
|
||||
rdpipe(P_INT, pbuf, fd);
|
||||
if ((fd = W_down) >= 0)
|
||||
wrpipe(P_INT, pbuf, fd);
|
||||
|
||||
/* now the upward pipes */
|
||||
if ((fd = R_down) >= 0)
|
||||
rdpipe(P_INT, pbuf, fd);
|
||||
if ((fd = W_up) >= 0)
|
||||
wrpipe(P_INT, pbuf, fd);
|
||||
}
|
||||
Loading…
Reference in New Issue