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

$Date$
 *
 * PCR Debugger public interface.
 */

#ifndef ←←PCR←Dbg←h
#define ←←PCR←Dbg←h 1

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

/*
 * Debugger client (debuggee)
 */

extern long
PCR←Dbg←Call(PCR←Any key, PCR←Any arg);
/*
    Invoke the debugger.
    The value of key identifies the (real) type of arg.
    Caller is suspended in such a way that its state may be examined
      (or even modified) by the debugger.
*/

/*
 * Debugger
 */

struct PCR←Dbg←CallInfoRep {
    PCR←Th←T *ci←t;
    PCR←Any ci←key;
    PCR←Any ci←arg;
};

typedef struct PCR←Dbg←CallInfoRep PCR←Dbg←CallInfo;


extern PCR←ERes
PCR←Dbg←AwaitCall(
    PCR←Dbg←CallInfo **cip,
    const PCR←sigset←t *sigMask,
    PCR←Msec wakeup
);
/*
    Wait for a thread to call debugger, fill in *cip.

    Success:
      PCR←ERes←okay
    Failure:
      PCR←ETIMEDOUT
*/

extern PCR←ERes
PCR←Dbg←Restart(PCR←Dbg←CallInfo *ci, long ans);
/*
    Restart the debuggee represented by ci, returning ans as the
      result of his invocation of PCR←Dbg←Call.
    The callinfo ci must have been acquired using PCR←Dbg←AwaitCall.
*/

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

/*
$Log$
*/