X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=ir-tclp.h;h=f41717f64a3a6c23db69e24fff3bf4109aa49e5c;hb=12e63b65feb50e719b87ccd6ed2e383b66319407;hp=8a78675e55af4a577ca9586d5f750dc038f0df77;hpb=52284820cfaee3773182b71bc96fe2e307d9ee49;p=ir-tcl-moved-to-github.git diff --git a/ir-tclp.h b/ir-tclp.h index 8a78675..f41717f 100644 --- a/ir-tclp.h +++ b/ir-tclp.h @@ -5,7 +5,70 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: ir-tclp.h,v $ - * Revision 1.15 1995-08-29 15:30:15 adam + * Revision 1.31 1996-03-05 09:21:19 adam + * Bug fix: memory used by GRS records wasn't freed. + * Rewrote some of the error handling code - the connection is always + * closed before failback is called. + * If failback is defined the send APDU methods (init, search, ...) will + * return OK but invoke failback (as is the case if the write operation + * fails). + * Bug fix: ref_count in assoc object could grow if fraction of PDU was + * read. + * + * Revision 1.30 1996/02/29 15:30:23 adam + * Export of IrTcl functionality to extensions. + * + * Revision 1.29 1996/02/26 18:38:33 adam + * Work on export of set methods. + * + * Revision 1.28 1996/02/23 17:31:41 adam + * More functions made available to the wais tcl extension. + * + * Revision 1.27 1996/02/23 13:41:41 adam + * Work on public access to simple ir class system. + * + * Revision 1.26 1996/02/21 10:16:20 adam + * Simplified select handling. Only one function ir_tcl_select_set has + * to be externally defined. + * + * 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. + * + * Revision 1.23 1996/01/19 16:22:40 adam + * New method: apduDump - returns information about last incoming APDU. + * + * Revision 1.22 1996/01/10 09:18:44 adam + * PDU specific callbacks implemented: initRespnse, searchResponse, + * presentResponse and scanResponse. + * Bug fix in the command line shell (tclmain.c) - discovered on OSF/1. + * + * Revision 1.21 1996/01/04 16:12:14 adam + * Setting PDUType renamed to eventType. + * + * Revision 1.20 1996/01/04 11:05:23 adam + * New setting: PDUType - returns type of last PDU returned from the target. + * Fixed a bug in configure/Makefile. + * + * Revision 1.19 1995/11/13 09:55:46 adam + * Multiple records at a position in a result-set with differnt + * element specs. + * + * Revision 1.18 1995/10/18 16:42:44 adam + * New settings: smallSetElementSetNames and mediumSetElementSetNames. + * + * Revision 1.17 1995/10/16 17:00:56 adam + * New setting: elementSetNames. + * Various client improvements. Medium presentation format looks better. + * + * Revision 1.16 1995/09/20 11:37:01 adam + * Configure searches for tk4.1 and tk7.5. + * Work on GRS. + * + * Revision 1.15 1995/08/29 15:30:15 adam * Work on GRS records. * * Revision 1.14 1995/08/04 11:32:40 adam @@ -89,6 +152,17 @@ #include "ir-tcl.h" typedef struct { + char *name; + int (*method) (void *obj, Tcl_Interp *interp, int argc, char **argv); + char *desc; +} IrTcl_Method; + +typedef struct { + void *obj; + IrTcl_Method *tab; +} IrTcl_Methods; + +typedef struct { char **databaseNames; int num_databaseNames; char *queryType; @@ -96,6 +170,10 @@ typedef struct { int replaceIndicator; char *referenceId; + char *elementSetNames; + char *smallSetElementSetNames; + char *mediumSetElementSetNames; + int smallSetUpperBound; int largeSetLowerBound; int mediumSetPresentNumber; @@ -104,10 +182,13 @@ typedef struct { typedef struct { int ref_count; - char *cs_type; + char *comstackType; int protocol_type; int failInfo; COMSTACK cs_link; +#if IRTCL_GENERIC_FILES + Tcl_File csFile; +#endif int state; @@ -131,6 +212,7 @@ typedef struct { char *userInformationField; char *hostname; + char *eventType; char *buf_in; int len_in; @@ -141,6 +223,10 @@ typedef struct { Tcl_Interp *interp; char *callback; char *failback; + char *initResponse; + + int apduLen; + int apduOffset; #if CCL2RPN CCL_bibset bibset; @@ -177,6 +263,12 @@ struct GRS_Record_entry { union { struct IrTcl_GRS_Record_ *sub; char *str; + struct { + int len; + char *buf; + } octets; + int num; + int bool; } tagData; }; @@ -187,6 +279,7 @@ typedef struct IrTcl_GRS_Record_ { typedef struct IrTcl_RecordList_ { int no; + char *elements; int which; union { struct { @@ -215,9 +308,12 @@ typedef struct IrTcl_SetObj_ { int number; int numberOfRecordsReturned; char *setName; + char *recordElements; int recordFlag; int which; int nonSurrogateDiagnosticNum; + char *searchResponse; + char *presentResponse; IrTcl_Diagnostic *nonSurrogateDiagnosticList; IrTcl_RecordList *record_list; IrTcl_SetCObj set_inher; @@ -253,6 +349,7 @@ typedef struct IrTcl_ScanObj_ { int num_entries; int num_diagRecs; + char *scanResponse; IrTcl_ScanEntry *entries; IrTcl_Diagnostic *nonSurrogateDiagnosticList; int nonSurrogateDiagnosticNum; @@ -269,15 +366,40 @@ int ir_tcl_send_APDU (Tcl_Interp *interp, IrTcl_Obj *p, Z_APDU *apdu, const char *msg, const char *object_name); int ir_tcl_send_q (IrTcl_Obj *p, IrTcl_Request *rq, const char *msg); void ir_tcl_del_q (IrTcl_Obj *p); -void *ir_tcl_malloc (size_t size); int ir_tcl_strdup (Tcl_Interp *interp, char** p, const char *s); int ir_tcl_strdel (Tcl_Interp *interp, char **p); char *ir_tcl_fread_marc (FILE *inf, size_t *size); -void ir_tcl_read_grs (Z_GenericRecord *r, IrTcl_GRS_Record **grs_record); +void ir_tcl_grs_mk (Z_GenericRecord *r, IrTcl_GRS_Record **grs_record); +void ir_tcl_grs_del (IrTcl_GRS_Record **grs_record); int ir_tcl_get_grs (Tcl_Interp *interp, IrTcl_GRS_Record *grs_record, int argc, char **argv); +int ir_tcl_method (Tcl_Interp *interp, int argc, char **argv, + IrTcl_Methods *tab, int *ret); +int ir_tcl_get_set_int (int *val, Tcl_Interp *interp, int argc, char **argv); + +typedef struct { + const char *name; + int (*ir_init) (ClientData clientData, Tcl_Interp *interp, + int argc, char **argv, ClientData *subData, + ClientData parentData); + int (*ir_method) (ClientData clientData, Tcl_Interp *interp, + int argc, char **argv); + void (*ir_delete)(ClientData clientData); +} IrTcl_Class; + +extern IrTcl_Class ir_obj_class; +extern IrTcl_Class ir_set_obj_class; + +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); + +int ir_tcl_eval (Tcl_Interp *interp, const char *command); +void ir_tcl_disconnect (IrTcl_Obj *p); + #define IR_TCL_FAIL_CONNECT 1 #define IR_TCL_FAIL_READ 2 #define IR_TCL_FAIL_WRITE 3