-$Id: CHANGELOG,v 1.14 1996-01-29 11:35:17 adam Exp $
+$Id: CHANGELOG,v 1.15 1996-02-05 17:58:02 adam Exp $
06/19/95 Release of ir-tcl-1.0b
------------------------------------------------------
29/01/96 Bug fix: cs_type member in ir-tclp.h renamed to comstackType to
avoid conflict with cs_type macro defined by YAZ.
+05/02/96 Ported ir-tcl to Tcl7.5b1/tk4.1b1. Ir-tcl is now incompatible with
+ the alpha versions of tcl7.5/tk4.1.
+
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: ir-tcl.c,v $
- * Revision 1.73 1996-01-29 11:35:19 adam
+ * Revision 1.74 1996-02-05 17:58:03 adam
+ * Ported ir-tcl to use the beta releases of tcl7.5/tk4.1.
+ *
+ * Revision 1.73 1996/01/29 11:35:19 adam
* Bug fix: cs_type member renamed to comstackType to avoid conflict with
* cs_type macro defined by YAZ.
*
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>
-#ifdef WINDOWS
#include <time.h>
-#else
-#include <sys/time.h>
-#endif
#include <assert.h>
#define CS_BLOCK 0
p->comstackType, NULL);
return TCL_ERROR;
}
+#if IRTCL_GENERIC_FILES
+#ifdef WINDOWS
+ p->csFile = Tcl_GetFile (cs_fileno(p->cs_link), TCL_WIN_SOCKET);
+#else
+ p->csFile = Tcl_GetFile (cs_fileno(p->cs_link), TCL_UNIX_FD);
+#endif
+#endif
if ((r=cs_connect (p->cs_link, addr)) < 0)
{
interp->result = "connect fail";
}
logf(LOG_DEBUG, "cs_connect() returned %d", r);
p->eventType = "connect";
+#if IRTCL_GENERIC_FILES
+ ir_select_add (p->csFile, p);
+#else
ir_select_add (cs_fileno (p->cs_link), p);
+#endif
if (r == 1)
{
+#if IRTCL_GENERIC_FILES
+ ir_select_add_write (p->csFile, p);
+#else
ir_select_add_write (cs_fileno (p->cs_link), p);
+#endif
p->state = IR_TCL_R_Connecting;
}
else
p->eventType = NULL;
p->hostname = NULL;
p->cs_link = NULL;
+#if IRTCL_GENERIC_FILES
+ p->csFile = 0;
+#endif
return TCL_OK;
}
if (p->hostname)
{
free (p->hostname);
p->hostname = NULL;
+#if IRTCL_GENERIC_FILES
+ ir_select_remove_write (p->csFile, p);
+ ir_select_remove (p->csFile, p);
+#else
ir_select_remove_write (cs_fileno (p->cs_link), p);
ir_select_remove (cs_fileno (p->cs_link), p);
+#endif
odr_reset (p->odr_in);
logf(LOG_DEBUG, "Closing connection");
cs_close (p->cs_link);
p->cs_link = NULL;
+#if IRTCL_GENERIC_FILES
+ Tcl_FreeFile (p->csFile);
+ p->csFile = NULL;
+#endif
ODR_MASK_ZERO (&p->options);
ODR_MASK_SET (&p->options, 0);
return;
}
p->state = IR_TCL_R_Idle;
+#if IRTCL_GENERIC_FILES
+ ir_select_remove_write (p->csFile, p);
+#else
ir_select_remove_write (cs_fileno (p->cs_link), p);
+#endif
if (r < 0)
{
logf (LOG_DEBUG, "cs_rcvconnect error");
if ((r=cs_get (p->cs_link, &p->buf_in, &p->len_in)) <= 0)
{
logf (LOG_DEBUG, "cs_get failed, code %d", r);
+#if IRTCL_GENERIC_FILES
+ ir_select_remove (p->csFile, p);
+#else
ir_select_remove (cs_fileno (p->cs_link), p);
+#endif
do_disconnect (p, NULL, 2, NULL);
if (p->failback)
{
if (r < 0)
{
logf (LOG_DEBUG, "cs_rcvconnect error");
+#if IRTCL_GENERIC_FILES
+ ir_select_remove_write (p->csFile, p);
+#else
ir_select_remove_write (cs_fileno (p->cs_link), p);
+#endif
if (p->failback)
{
p->failInfo = IR_TCL_FAIL_CONNECT;
do_disconnect (p, NULL, 2, NULL);
return;
}
+#if IRTCL_GENERIC_FILES
+ ir_select_remove_write (p->csFile, p);
+#else
ir_select_remove_write (cs_fileno (p->cs_link), p);
+#endif
if (p->callback)
IrTcl_eval (p->interp, p->callback);
return;
{
logf(LOG_DEBUG, "Write completed");
p->state = IR_TCL_R_Waiting;
+#if IRTCL_GENERIC_FILES
+ ir_select_remove_write (p->csFile, p);
+#else
ir_select_remove_write (cs_fileno (p->cs_link), p);
+#endif
free (rq->buf_out);
rq->buf_out = NULL;
}
* OF THIS SOFTWARE.
*
* $Log: ir-tcl.h,v $
- * Revision 1.11 1995-09-21 13:11:52 adam
+ * Revision 1.12 1996-02-05 17:58:04 adam
+ * Ported ir-tcl to use the beta releases of tcl7.5/tk4.1.
+ *
+ * Revision 1.11 1995/09/21 13:11:52 adam
* Support of dynamic loading.
* Test script uses load command if necessary.
*
#ifndef IR_TCL_H
#define IR_TCL_H
+#if TCL_MAJOR_VERSION > 7 || (TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION >= 5)
+#define IRTCL_GENERIC_FILES 1
+#else
+#define IRTCL_GENERIC_FILES 0
+#endif
+
int Irtcl_Init (Tcl_Interp *interp);
+#if IRTCL_GENERIC_FILES
+void ir_select_add (Tcl_File file, void *obj);
+void ir_select_add_write (Tcl_File file, void *obj);
+void ir_select_remove (Tcl_File file, void *obj);
+void ir_select_remove_write (Tcl_File file, void *obj);
+#else
void ir_select_add (int fd, void *obj);
void ir_select_add_write (int fd, void *obj);
void ir_select_remove (int fd, void *obj);
void ir_select_remove_write (int fd, void *obj);
+#endif
+
void ir_select_read (ClientData clientData);
void ir_select_write (ClientData clientData);
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: ir-tclp.h,v $
- * Revision 1.24 1996-01-29 11:35:27 adam
+ * Revision 1.25 1996-02-05 17:58:04 adam
+ * Ported ir-tcl to use the beta releases of tcl7.5/tk4.1.
+ *
+ * Revision 1.24 1996/01/29 11:35:27 adam
* Bug fix: cs_type member renamed to comstackType to avoid conflict with
* cs_type macro defined by YAZ.
*
int protocol_type;
int failInfo;
COMSTACK cs_link;
+#if IRTCL_GENERIC_FILES
+ Tcl_File csFile;
+#endif
int state;
* Sebastian Hammer, Adam Dickmeiss
*
* $Log: tclmain.c,v $
- * Revision 1.15 1996-01-10 09:18:45 adam
+ * Revision 1.16 1996-02-05 17:58:05 adam
+ * Ported ir-tcl to use the beta releases of tcl7.5/tk4.1.
+ *
+ * Revision 1.15 1996/01/10 09:18:45 adam
* PDU specific callbacks implemented: initRespnse, searchResponse,
* presentResponse and scanResponse.
* Bug fix in the command line shell (tclmain.c) - discovered on OSF/1.
}
}
+#if IRTCL_GENERIC_FILES
+void ir_select_add (Tcl_File file, void *obj)
+{
+ int fd = (int) Tcl_GetFileInfo (file, NULL);
+#else
void ir_select_add (int fd, void *obj)
{
+#endif
callback_table[fd].obj = obj;
callback_table[fd].r_handle = ir_select_read;
callback_table[fd].w_handle = NULL;
max_fd = fd;
}
+#if IRTCL_GENERIC_FILES
+void ir_select_add_write (Tcl_File file, void *obj)
+{
+ int fd = (int) Tcl_GetFileInfo (file, NULL);
+#else
void ir_select_add_write (int fd, void *obj)
{
+#endif
callback_table[fd].w_handle = ir_select_write;
if (fd > max_fd)
max_fd = fd;
}
+#if IRTCL_GENERIC_FILES
+void ir_select_remove_write (Tcl_File file, void *obj)
+{
+ int fd = (int) Tcl_GetFileInfo (file, NULL);
+#else
void ir_select_remove_write (int fd, void *obj)
{
+#endif
callback_table[fd].w_handle = NULL;
}
+#if IRTCL_GENERIC_FILES
+void ir_select_remove (Tcl_File file, void *obj)
+{
+ int fd = (int) Tcl_GetFileInfo (file, NULL);
+#else
void ir_select_remove (int fd, void *obj)
{
+#endif
callback_table[fd].r_handle = NULL;
callback_table[fd].w_handle = NULL;
callback_table[fd].x_handle = NULL;