2 * IR toolkit for tcl/tk
4 * See the file LICENSE for details.
5 * Sebastian Hammer, Adam Dickmeiss
8 * Revision 1.1 1996-08-20 09:33:23 adam
9 * Tcl7.5 Generic file handling.
17 #if TCL_MAJOR_VERSION > 7 || (TCL_MAJOR_VERSION == 7 && TCL_MINOR_VERSION > 4)
19 #define IRTCL_USE_TIMER 0
22 void (*f)(ClientData clientData, int r, int w, int e);
23 ClientData clientData;
27 Tcl_TimerToken timer_token;
31 struct sel_proc *next;
34 static struct sel_proc *sel_proc_list = NULL;
37 static void ir_tcl_timer_proc (ClientData clientData)
39 struct sel_proc *sp = (struct sel_proc *) clientData;
44 Tcl_CreateTimerHandler (250, ir_tcl_timer_proc, clientData);
45 (*sp->f)(sp->clientData, sp->mask & TCL_READABLE, sp->mask & TCL_WRITABLE,
46 sp->mask & TCL_EXCEPTION);
50 void ir_tcl_select_set (void (*f)(ClientData clientData, int r, int w, int e),
51 int fd, ClientData clientData, int r, int w, int e)
54 struct sel_proc **sp = &sel_proc_list;
61 mask |= TCL_EXCEPTION;
70 *sp = ir_tcl_malloc (sizeof(**sp));
74 Tcl_CreateTimerHandler (250, ir_tcl_timer_proc, *sp);
76 (*sp)->mask = TCL_READABLE|TCL_WRITABLE;
78 (*sp)->clientData = clientData;
81 struct sel_proc *sp_tmp = *sp;
82 Tcl_DeleteTimerHandler ((*sp)->timer_token);
89 static void ir_tcl_tk_select_proc (ClientData clientData, int mask)
91 struct sel_proc *sp = (struct sel_proc *) clientData;
95 (*sp->f)(sp->clientData, mask & TCL_READABLE, mask & TCL_WRITABLE,
96 mask & TCL_EXCEPTION);
99 void ir_tcl_select_set (void (*f)(ClientData clientData, int r, int w, int e),
100 int fd, ClientData clientData, int r, int w, int e)
103 struct sel_proc *sp = sel_proc_list;
106 mask |= TCL_READABLE;
108 mask |= TCL_WRITABLE;
110 mask |= TCL_EXCEPTION;
119 sp = ir_tcl_malloc (sizeof(*sp));
120 sp->next = sel_proc_list;
124 sp->tcl_File = Tcl_GetFile ((ClientData) fd, TCL_WIN_SOCKET);
126 sp->tcl_File = Tcl_GetFile ((ClientData) fd, TCL_UNIX_FD);
130 sp->clientData = clientData;
132 Tcl_CreateFileHandler (sp->tcl_File, mask, ir_tcl_tk_select_proc, sp);
134 Tcl_DeleteFileHandler (sp->tcl_File);