/*
Copyright (c) 1993 Xerox Corporation.  All rights reserved.
*/
/*
$Id$

$Date$
 *
 * PCR - IOGbl glue
 *
 * Create procs for IOGbl.
 */


#ifndef	←←PCR←IOGblGlue←h
#define ←←PCR←IOGblGlue←h 1


#include <config/PCR←StdDefs.h>
#include <th/PCR←Th.h>
#include <io/PCR←IOGbl.h>

/*
    All the following procs create descriptors with local ref cnt == 1.
    They are initially NIL if not provided.
*/


typedef PCR←ERes PCR←IOGblGlue←CreateProc(
    const PCR←sigset←t *sigMask, PCR←Msec wakeup,
    PCR←IOGbl←DEPtr *gdep,
    PCR←Any cmd, ...
);

extern PCR←IOGblGlue←CreateProc PCR←IOGblGlue←Create;


typedef PCR←ERes PCR←IOGblGlue←CreatePairProc(
    const PCR←sigset←t *sigMask, PCR←Msec wakeup,
    PCR←IOGbl←DEPtr *gde0p, PCR←IOGbl←DEPtr *gde1p,
    PCR←Any cmd, ...
);

extern PCR←IOGblGlue←CreatePairProc PCR←IOGblGlue←CreatePair;




typedef PCR←ERes PCR←IOGblGlue←OpenProc(
    const char *fileName, int oflag, mode←t mode,
    const PCR←sigset←t *sigMask, PCR←Msec wakeup,
    PCR←IOGbl←DEPtr *gdep
);

extern PCR←IOGblGlue←OpenProc PCR←IOGblGlue←Open;


typedef PCR←ERes PCR←IOGblGlue←PipeProc(
    const PCR←sigset←t *sigMask, PCR←Msec wakeup,
    PCR←IOGbl←DEPtr *gde0p, PCR←IOGbl←DEPtr *gde1p
);

extern PCR←IOGblGlue←PipeProc PCR←IOGblGlue←Pipe;


/*
 * Glue to allow stdin/stdout/stderr to be handled correctly ...
 */

PCR←IOGbl←DEPtr (*PCR←IOGBlGlue←getStd)(int fildes);
/*
    ... std descriptors for threads.
*/

PCR←Any /* info */ (* volatile PCR←IOGblGlue←lockStdHD)(int hd);
void (* volatile PCR←IOGblGlue←unlockStdHD)(int hd, PCR←Any info);
/*
    ... for console messages and termination cleanup.
    ({lock,print,unlock} must be in critical section).
*/



/*
 * Initialization -- called from PCR←IOGblImpl.c if defined by
 *   a service provider ...
 */


PCR←ERes (*PCR←IOGBlGlue←setup)(void);

PCR←ERes (*PCR←IOGblGlue←run)(void);


#endif /* ! ←←PCR←IOGblGlue←h */

/*
$Log$
*/