summaryrefslogtreecommitdiff
path: root/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/pblock.h
diff options
context:
space:
mode:
Diffstat (limited to 'ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/pblock.h')
-rw-r--r--ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/pblock.h193
1 files changed, 193 insertions, 0 deletions
diff --git a/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/pblock.h b/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/pblock.h
new file mode 100644
index 00000000000..4dc1629fcd0
--- /dev/null
+++ b/ACE/apps/JAWS/clients/WebSTONE/src/nsapi-includes/base/pblock.h
@@ -0,0 +1,193 @@
+/*
+ * $Id$
+ *
+ * Copyright (c) 1994, 1995. Netscape Communications Corporation. All
+ * rights reserved.
+ *
+ * Use of this software is governed by the terms of the license agreement for
+ * the Netscape Communications or Netscape Comemrce Server between the
+ * parties.
+ */
+
+
+/* ------------------------------------------------------------------------ */
+
+
+/*
+ * pblock.h: Header for Parameter Block handling functions
+ *
+ *
+ * A parameter block is a set of name=value pairs which are generally used
+ * as parameters, but can be anything. They are kept in a hash table for
+ * reasonable speed, but if you are doing any intensive modification or
+ * access of them you should probably make a local copy of each parameter
+ * while working.
+ *
+ * When creating a pblock, you specify the hash table size for that pblock.
+ * You should set this size larger if you know that many items will be in
+ * that pblock, and smaller if only a few will be used or if speed is not
+ * a concern.
+ *
+ * The hashing function is very simple right now, and only looks at the
+ * first character of name.
+ *
+ * Rob McCool
+ *
+ */
+
+#ifndef PBLOCK_H
+#define PBLOCK_H
+
+/*
+ * Requires that the macros MALLOC and STRDUP be set to "safe" versions that
+ * will exit if no memory is available. If not under MCC httpd, define
+ * them to be the real functions and play with fire, or make your own
+ * function.
+ */
+
+#include "../netsite.h"
+
+#include <ctype.h> /* isspace */
+#include <stdio.h> /* sprintf */
+#include <string.h> /* strlen, strcmp */
+
+
+/* ------------------------------ Structures ------------------------------ */
+
+
+typedef struct {
+ char *name,*value;
+} pb_param;
+
+struct pb_entry {
+ pb_param *param;
+ struct pb_entry *next;
+};
+
+typedef struct {
+ int hsize;
+ struct pb_entry **ht;
+} pblock;
+
+
+/* ------------------------------ Prototypes ------------------------------ */
+
+
+/*
+ * param_create creates a parameter with the given name and value. If name
+ * and value are non-NULL, they are copied and placed into the new pb_param
+ * struct.
+ */
+
+pb_param *param_create(char *name, char *value);
+
+/*
+ * param_free frees a given parameter if it's non-NULL, and returns 1 if
+ * p was non-NULL, and 0 if p was NULL.
+ *
+ * Useful for error checking pblock_remove.
+ */
+
+int param_free(pb_param *pp);
+
+/*
+ * pblock_create creates a new pblock with hash table size n.
+ *
+ * It returns the newly allocated pblock.
+ */
+
+pblock *pblock_create(int n);
+
+/*
+ * pblock_free frees the given pblock and any entries inside it.
+ *
+ * If you want to save anything in a pblock, remove its entities with
+ * pblock_remove first and save the pointers you get.
+ */
+
+void pblock_free(pblock *pb);
+
+/*
+ * pblock_find finds the entry with the given name in pblock pb.
+ *
+ * If it is successful, it returns the param block. If not, it returns NULL.
+ */
+
+#define pblock_find(name, pb) (_pblock_fr(name,pb,0))
+
+/*
+ * pblock_findval finds the entry with the given name in pblock pb, and
+ * returns its value, otherwise returns NULL.
+ */
+
+char *pblock_findval(char *name, pblock *pb);
+
+/*
+ * pblock_remove behaves exactly like pblock_find, but removes the given
+ * entry from pb.
+ */
+
+#define pblock_remove(name, pb) (_pblock_fr(name,pb,1))
+
+/*
+ * pblock_nvinsert creates a new parameter with the given name and value
+ * and inserts it into pblock pb. The name and value in the parameter are
+ * also newly allocated. Returns the pb_param it allocated (in case you
+ * need it).
+ *
+ * pblock_nninsert inserts a numerical value.
+ */
+
+pb_param *pblock_nvinsert(char *name, char *value, pblock *pb);
+pb_param *pblock_nninsert(char *name, int value, pblock *pb);
+
+/*
+ * pblock_pinsert inserts a pb_param into a pblock.
+ */
+
+void pblock_pinsert(pb_param *pp, pblock *pb);
+
+/*
+ * pblock_str2pblock scans the given string str for parameter pairs
+ * name=value, or name="value". Any \ must be followed by a literal
+ * character. If a string value is found, with no unescaped = signs, it
+ * will be added with the name 1, 2, 3, etc. depending on whether it was
+ * first, second, third, etc. in the stream (zero doesn't count).
+ *
+ * Returns the number of parameters added to the table, or -1 upon error.
+ */
+
+int pblock_str2pblock(char *str, pblock *pb);
+
+/*
+ * pblock_pblock2str places all of the parameters in the given pblock
+ * into the given string (NULL if it needs creation). It will re-allocate
+ * more space for the string. Each parameter is separated by a space and of
+ * the form name="value"
+ */
+
+char *pblock_pblock2str(pblock *pb, char *str);
+
+/*
+ * pblock_copy copies the entries in the given source pblock to the
+ * destination one. The entries are newly allocated so that the original
+ * pblock may be freed or the new one changed without affecting the other.
+ */
+
+void pblock_copy(pblock *src, pblock *dst);
+
+/*
+ * pblock_pb2env copies the given pblock into the given environment, with
+ * one new env entry for each name/value pair in the pblock.
+ */
+
+char **pblock_pb2env(pblock *pb, char **env);
+
+
+/* --------------------------- Internal things ---------------------------- */
+
+
+pb_param *_pblock_fr(char *name, pblock *pb, int remove);
+
+
+#endif