* hbytes chopto VAR NEWVARLENGTH => suffix (removed from VAR)
* (too short? error)
*
+ * hbytes range VALUE START SIZE => substring (or error)
+ * hbytes overwrite VAR START VALUE
+ * hbytes trimleft VALUE removes any leading 0 octets
+ * hbytes repeat VALUE COUNT => COUNT copies of VALUE
+ *
+ * hbytes h2ulong HEX => ulong (HEX len must be 4)
+ * hbytes ulong2h UL => hex
+ *
+ * ulong ul2bitfields VALUE [SIZE TYPE [TYPE-ARG...] ...] => 0/1
+ * ulong bitfields2ul BASE [SIZE TYPE [TYPE-ARG...] ...] => ULONG
+ * goes from left (MSbit) to right (LSbit) where
+ * SIZE is size in bits
+ * TYPE [TYPE-ARGS...] is as below
+ * zero
+ * ignore
+ * fixed ULONG-VALUE
+ * uint VARNAME/VALUE (VARNAME if ul2bitfields;
+ * ulong VARNAME/VALUE VALUE if bitfields2ul)
+ *
+ * ulong ul2int ULONG => INT can fail if >INT_MAX
+ * ulong int2ul INT => ULONG can fail if <0
+ *
+ * hbytes shift l|r ULONG BITS fails if BITS >32
+ * hbytes mask A B => A & B
+ *
* hbytes compare A B
* => -2 A is lexically earlier than B and not a prefix of B (A<B)
* -1 A is prefix of B but not equal (A<B)
/* from dgram.c */
-extern Tcl_ObjType sockid_type;
+extern Tcl_ObjType dgramsockid_type;
typedef struct DgramSocket *DgramSockID;
/* from hook.c */
void obj_updatestr_array_prefix(Tcl_Obj *o, const Byte *byte,
int l, const char *prefix);
+void obj_updatestr_vstringls(Tcl_Obj *o, ...);
+ /* const char*, int, const char*, int, ..., (const char*)0 */
+void obj_updatestr_string_len(Tcl_Obj *o, const char *str, int l);
+void obj_updatestr_string(Tcl_Obj *o, const char *str);
+
/* from parse.c */
typedef struct {
void fini_hbv(Tcl_Interp *ip, int rc, HBytes_Var *agg);
/* from chop.c */
+ /* only do_... functions declared in tables.h */
+
+/* from ulong.c */
+
+Tcl_ObjType ulong_type;
/* from enum.c */