]> code.citadel.org Git - citadel.git/blobdiff - webcit/webcit.h
* Templatize IGNet Node Config
[citadel.git] / webcit / webcit.h
index 9d490779f1a94520b57b700bd50c704a3f87c35f..5d678c3f6b098835c2932ccbeae8563b5502e579 100644 (file)
@@ -265,16 +265,16 @@ struct roomlisting {
  * \brief Dynamic content for variable substitution in templates
  */
 typedef struct _wcsubst {
-       int wcs_type;                       /**< which type of ??? */
-       char wcs_key[32];                   /**< ??? what?*/
-       void *wcs_value;                    /**< ???? what?*/
+       int wcs_type;                       /**< which type of Substitution are we */
+       char wcs_key[32];                   /**< copy of our hashkey for debugging */
+       StrBuf *wcs_value;                  /**< if we're a string, keep it here */
        long lvalue;                        /**< type long? keep data here */
        void (*wcs_function)(void); /**< funcion hook ???*/
 } wcsubst;
 
 #define TYPE_STR   1
 #define TYPE_LONG  2
-#define MAXPARAM  10
+#define MAXPARAM  20
 typedef struct _TemplateParam {
        const char *Start;
        int Type;
@@ -283,6 +283,8 @@ typedef struct _TemplateParam {
 } TemplateParam;
 
 typedef struct _TemplateToken {
+       StrBuf *FlatToken;
+       long Line;
        const char *pTokenStart;
        size_t TokenStart;
        size_t TokenEnd;
@@ -318,16 +320,16 @@ void RegisterConditional(const char *Name, long len,
 
 
 
-typedef void (*SubTemplFunc)(StrBuf *TemplBuffer, void *Context);
-typedef HashList *(*RetrieveHashlistFunc)(void);
-typedef void (*HashDestructorFunc) (HashList *KillMe);
-void RegisterITERATOR(const char *Name, long len, 
+typedef void (*SubTemplFunc)(StrBuf *TemplBuffer, void *Context, WCTemplateToken *Token);
+typedef HashList *(*RetrieveHashlistFunc)(WCTemplateToken *Token);
+typedef void (*HashDestructorFunc) (HashList **KillMe);
+void RegisterITERATOR(const char *Name, long len,
+                     int AdditionalParams, 
                      HashList *StaticList, 
                      RetrieveHashlistFunc GetHash, 
                      SubTemplFunc DoSubTempl,
                      HashDestructorFunc Destructor);
-#define RegisterIterator(a, b, c, d, e) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e)
-
+#define RegisterIterator(a, b, c, d, e, f) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f)
 
 /**
  * \brief Values for wcs_type
@@ -468,6 +470,9 @@ struct wcsession {
        StrBuf *UrlFragment2;                   /**< second urlfragment, if NEED_URL is specified by the handler*/
        StrBuf *WBuf;                           /**< Our output buffer */
        StrBuf *HBuf;                           /**< Our HeaderBuffer */
+
+       HashList *ServCfg;                      /**< cache our server config for editing */
+       HashList *InetCfg;                      /**< Our inet server config for editing */
 };
 
 /** values for WC->current_iconbar */
@@ -558,36 +563,35 @@ void _fmout(StrBuf *Targt, char *align);
 void pullquote_fmout(void);
 void wDumpContent(int);
 
-
 /* These may return NULL if not foud */
 #define sbstr(a) SBstr(a, sizeof(a) - 1)
 const StrBuf *SBSTR(const char *key);
 const StrBuf *SBstr(const char *key, size_t keylen);
 
 #define xbstr(a, b) (char*) XBstr(a, sizeof(a) - 1, b)
-const char *XBstr(char *key, size_t keylen, size_t *len);
-const char *XBSTR(char *key, size_t *len);
+const char *XBstr(const char *key, size_t keylen, size_t *len);
+const char *XBSTR(const char *key, size_t *len);
 
 #define lbstr(a) LBstr(a, sizeof(a) - 1)
-long LBstr(char *key, size_t keylen);
-long LBSTR(char *key);
+long LBstr(const char *key, size_t keylen);
+long LBSTR(const char *key);
 
 #define ibstr(a) IBstr(a, sizeof(a) - 1)
-int IBstr(char *key, size_t keylen);
-int IBSTR(char *key);
+int IBstr(const char *key, size_t keylen);
+int IBSTR(const char *key);
 
 #define havebstr(a) HaveBstr(a, sizeof(a) - 1)
-int HaveBstr(char *key, size_t keylen);
-int HAVEBSTR(char *key);
+int HaveBstr(const char *key, size_t keylen);
+int HAVEBSTR(const char *key);
 
 #define yesbstr(a) YesBstr(a, sizeof(a) - 1)
-int YesBstr(char *key, size_t keylen);
-int YESBSTR(char *key);
+int YesBstr(const char *key, size_t keylen);
+int YESBSTR(const char *key);
 
 /* TODO: get rid of the non-const-typecast */
 #define bstr(a) (char*) Bstr(a, sizeof(a) - 1)
-const char *BSTR(char *key);
-const char *Bstr(char *key, size_t keylen);
+const char *BSTR(const char *key);
+const char *Bstr(const char *key, size_t keylen);
 
 
 
@@ -641,6 +645,7 @@ void serv_read(char *buf, int bytes);
 void serv_gets(char *strbuf);
 void serv_write(const char *buf, int nbytes);
 void serv_puts(const char *string);
+void serv_putbuf(const StrBuf *string);
 void serv_printf(const char *format,...)__attribute__((__format__(__printf__,1,2)));
 void load_floorlist(void);
 void shutdown_sessions(void);
@@ -672,12 +677,15 @@ void SVCALLBACK(char *keyname, var_callback_fptr fcn_ptr);
 void SVCallback(char *keyname, size_t keylen,  var_callback_fptr fcn_ptr);
 #define svcallback(a, b) SVCallback(a, sizeof(a) - 1, b)
 
-void SVPUTBuf(const char *keyname, int keylen, StrBuf *Buf, int ref);
+void SVPUTBuf(const char *keyname, int keylen, const StrBuf *Buf, int ref);
 #define SVPutBuf(a, b, c); SVPUTBuf(a, sizeof(a) - 1, b, c)
 
 void DoTemplate(const char *templatename, long len, void *Context, StrBuf *Target);
 #define do_template(a, b) DoTemplate(a, sizeof(a) -1, b, NULL);
+void url_do_template(void);
 
+int CompareSubstToToken(TemplateParam *ParamToCompare, TemplateParam *ParamToLookup);
+int CompareSubstToStrBuf(StrBuf *Compare, TemplateParam *ParamToLookup);
 
 int lingering_close(int fd);
 char *memreadline(char *start, char *buf, int maxlen);
@@ -797,6 +805,9 @@ void go_selected_language(void);
 void stop_selected_language(void);
 void preset_locale(void);
 void httplang_to_locale(char *LocaleString);
+void StrEndTab(StrBuf *Target, int tabnum, int num_tabs);
+void StrBeginTab(StrBuf *Target, int tabnum, int num_tabs);
+void StrTabbedDialog(StrBuf *Target, int num_tabs, StrBuf *tabnames[]);
 void tabbed_dialog(int num_tabs, char *tabnames[]);
 void begin_tab(int tabnum, int num_tabs);
 void end_tab(int tabnum, int num_tabs);