3 * IR toolkit for tcl/tk
5 * See the file LICENSE for details.
6 * Sebastian Hammer, Adam Dickmeiss
9 * Revision 1.2 1995-08-03 13:23:01 adam
12 * Revision 1.1 1995/07/28 10:28:39 adam
13 * First work on request queue.
24 void *ir_tcl_malloc (size_t size)
26 void *p = malloc (size);
29 logf (LOG_FATAL, "Out of memory. %d bytes requested", size);
35 int ir_tcl_send_APDU (Tcl_Interp *interp, IrTcl_Obj *p, Z_APDU *apdu,
40 if (!z_APDU (p->odr_out, &apdu, 0))
42 Tcl_AppendResult (interp, odr_errlist [odr_geterror (p->odr_out)],
44 odr_reset (p->odr_out);
47 rp = &p->request_queue;
50 *rp = ir_tcl_malloc (sizeof(**rp));
52 (*rp)->buf_out = odr_getbuf (p->odr_out, &(*rp)->len_out, NULL);
53 odr_setbuf (p->odr_out, NULL, 0, 1);
54 odr_reset (p->odr_out);
55 if (p->state == IR_TCL_R_Idle)
57 if (ir_tcl_send_q (p, *rp, msg) == TCL_ERROR)
59 sprintf (interp->result, "cs_put failed in %s", msg);
66 int ir_tcl_send_q (IrTcl_Obj *p, IrTcl_Request *rp, const char *msg)
70 r = cs_put (p->cs_link, rp->buf_out, rp->len_out);
75 ir_select_add_write (cs_fileno (p->cs_link), p);
76 logf (LOG_DEBUG, "Send part of %s", msg);
77 p->state = IR_TCL_R_Writing;
81 logf (LOG_DEBUG, "Send %s (%d bytes)", msg, rp->len_out);
82 p->state = IR_TCL_R_Waiting;