+ return ((urlcontent *)U)->sub;
+ else
+ return NULL;
+}
+
+
+/*
+ * Return the value of a variable of a substruct provided by getSubStruct
+ */
+const char *XSubBstr(HashList *sub, const char *key, size_t keylen, size_t *len)
+{
+ void *U;
+
+ if ((sub != NULL) &&
+ GetHash(sub, key, keylen, &U)) {
+ *len = StrLength(((urlcontent *)U)->url_data);
+ return ChrPtr(((urlcontent *)U)->url_data);
+ }
+ else {
+ *len = 0;
+ return ("");
+ }
+}
+
+const char *SubBstr(HashList *sub, const char *key, size_t keylen)
+{
+ void *U;
+
+ if ((sub != NULL) &&
+ GetHash(sub, key, keylen, &U)) {
+ return ChrPtr(((urlcontent *)U)->url_data);
+ }
+ else
+ return ("");
+}
+
+const StrBuf *SSubBstr(HashList *sub, const char *key, size_t keylen)
+{
+ void *U;
+
+ if ((sub != NULL) &&
+ GetHash(sub, key, keylen, &U)) {
+ return ((urlcontent *)U)->url_data;
+ }
+ else
+ return NULL;
+}
+
+long LSubBstr(HashList *sub, const char *key, size_t keylen)
+{
+ void *U;
+
+ if ((sub != NULL) &&
+ GetHash(sub, key, keylen, &U)) {
+ return StrTol(((urlcontent *)U)->url_data);
+ }