X-Git-Url: http://www.chiark.greenend.org.uk/ucgi/~ian/git?p=chiark-tcl.git;a=blobdiff_plain;f=hbytes%2Fhbytes.h;h=b49301f02a935950b0c9a17c725ce395dde0671e;hp=4b4f4e8210ecacf106d8a8671f5dc5a9ada13380;hb=9b2c18cc9d122b45f9e737864921d32baa599f0c;hpb=d6fd8ff47e228354088d5be383a55d1d24099c36;ds=sidebyside diff --git a/hbytes/hbytes.h b/hbytes/hbytes.h index 4b4f4e8..b49301f 100644 --- a/hbytes/hbytes.h +++ b/hbytes/hbytes.h @@ -122,6 +122,8 @@ #include +#include + typedef unsigned char Byte; /* from hbytes.c */ @@ -213,22 +215,38 @@ void scriptinv_invoke(ScriptToInvoke *si, int argc, Tcl_Obj **argv); /* from idtable.c */ typedef struct { - const char *const prefix; - int n; - void **a; -} IdDataTable; + const char *valprefix, *assockey; + void (*destroyitem)(Tcl_Interp *ip, void *val); +} IdDataSpec; + +/* The stored struct must start with a single int, conventionally + * named `ix'. When the struct is returned for the first time ix must + * be -1; on subsequent occasions it must be >=0. ix will be -1 iff + * the struct is registered by the iddatatable machinery. */ extern Tcl_ObjType tabledataid_nearlytype; -int tabledataid_parse(Tcl_Interp *ip, Tcl_Obj *o, IdDataTable *tab); +int tabledataid_parse(Tcl_Interp *ip, Tcl_Obj *o, const IdDataSpec *idds); +void tabledataid_disposing(Tcl_Interp *ip, void *val, const IdDataSpec *idds); + /* call this when you destroy the struct, to remove its name; + * _disposing is idempotent */ + +/* from adns.c */ + +typedef struct { + const char *name; + adns_rrtype number; +} AdnsTclRRTypeInfo; + +extern const IdDataSpec adnstcl_queries, adnstcl_resolvers; /* from dgram.c */ -extern IdDataTable dgram_socks; +extern const IdDataSpec dgram_socks; int newfdposixerr(Tcl_Interp *ip, int fd, const char *m); /* from tuntap.c */ -extern IdDataTable tuntap_socks; +extern const IdDataSpec tuntap_socks; /* from hook.c */