/*-------------------------------------------------------------------------
*
* pgtclId.h--
*    useful routines to convert between strings and pointers
*  Needed because everything in tcl is a string, but often, pointers
*  to data structures are needed.
*    
*
* Copyright (c) 1994, Regents of the University of California
*
* $Id: pgtclId.h,v 1.7 1998/06/16 04:10:17 momjian Exp $
*
*-------------------------------------------------------------------------
*/
  
extern void PgSetConnectionId(Tcl_Interp *interp, PGconn *conn);

#if TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION == 5
/* Only Tcl 7.5 had drivers with this signature */
# define DRIVER_DEL_PROTO ClientData cData, Tcl_Interp *interp, \
 	Tcl_File inFile, Tcl_File outFile
# define DRIVER_OUTPUT_PROTO ClientData cData, Tcl_File outFile, char *buf, \
	int bufSize, int *errorCodePtr
# define DRIVER_INPUT_PROTO ClientData cData, Tcl_File inFile, char *buf, \
	int bufSize, int *errorCodePtr
#else
/* Tcl 7.6 and beyond use this signature */
# define DRIVER_OUTPUT_PROTO ClientData cData, char *buf, int bufSize, \
	int *errorCodePtr
# define DRIVER_INPUT_PROTO ClientData cData, char *buf, int bufSize, \
	int *errorCodePtr
# define DRIVER_DEL_PROTO ClientData cData, Tcl_Interp *interp
#endif

extern PGconn *PgGetConnectionId(Tcl_Interp *interp, char *id, \
	Pg_ConnectionId **);
extern PgDelConnectionId(DRIVER_DEL_PROTO);
extern int PgOutputProc(DRIVER_OUTPUT_PROTO);
extern PgInputProc(DRIVER_INPUT_PROTO);
extern int PgSetResultId(Tcl_Interp *interp, char *connid, PGresult *res);
extern PGresult *PgGetResultId(Tcl_Interp *interp, char *id);
extern void PgDelResultId(Tcl_Interp *interp, char *id);
extern int PgGetConnByResultId(Tcl_Interp *interp, char *resid);
extern void PgStartNotifyEventSource(Pg_ConnectionId *connid);
extern void PgStopNotifyEventSource(Pg_ConnectionId *connid);
extern void PgNotifyTransferEvents(Pg_ConnectionId *connid);
extern void PgNotifyInterpDelete(ClientData clientData, Tcl_Interp *interp);

/* GetFileProc is needed in Tcl 7.6 and later */
#if (TCL_MAJOR_VERSION * 100 + TCL_MINOR_VERSION) >= 706
#define HAVE_TCL_GETFILEPROC 1
#else
#define HAVE_TCL_GETFILEPROC 0
#endif

#if HAVE_TCL_GETFILEPROC
extern Tcl_File PgGetFileProc(ClientData cData, int direction);
#endif

extern Tcl_ChannelType Pg_ConnType;
