⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 varstore.h

📁 htp是一个HTML预处理器。页面可以用htp扩展的类HTML的宏编写。这可以简化维护一个一致外观的Web页面集.
💻 H
字号:
/*//// varstore.h//// Variable store functions//// Copyright (c) 1995-96 Jim Nelson.  Permission to distribute// granted by the author.  No warranties are made on the fitness of this// source code.//*/#ifndef VARSTORE_H#define VARSTORE_H/*// maximum length for the variable name and the variables value*/#define MAX_VARNAME_LEN         (256)#define MAX_VARVALUE_LEN        (512)/*// variable destructor callback ... set to NULL if no callback required when// destroyed*/typedef void (*VAR_DESTRUCTOR)(const char *name, const char *value,    uint type, uint flag, void *param);/*// a variable held in the store*/typedef struct tagVARIABLE{    struct tagVARIABLE  *next;    char                name[MAX_VARNAME_LEN];    char                value[MAX_VARVALUE_LEN];    uint                type;    uint                flag;    void                *param;    VAR_DESTRUCTOR      destructor;} VARIABLE;/*// variable store structure//// parent and child refers to scope ... when traversing the chain for a// particular macro, always look to parent scope if not found in current*/typedef struct tagVARSTORE{    struct tagVARSTORE      *parent;    struct tagVARSTORE      *child;    VARIABLE                *lastVariable;    VARIABLE                **variableHashTable;} VARSTORE;/*// statistics for performance measurement*/#if DEBUGextern uint variableLookups;extern uint variableCacheHits;extern uint variableStringCompares;extern uint variableMissedStringCompares;extern uint variableHashCalcs;#endif/*// GetVariableType() will return this value if the variable is not found*/#define VAR_TYPE_UNKNOWN        ((uint) -1)/*// GetVariableFlag() will return this value if the variable is not found*/#define VAR_FLAG_UNKNOWN        ((uint) -1)/*// initialize a VARSTORE*/BOOL InitializeVariableStore(VARSTORE *varstore);/*// destroys a variable store and ALL child scope stores*/void DestroyVariableStore(VARSTORE *varstore);/*// Push, pop, and get current varstore context ... note that for pop and// get, simply passing a variable store somewhere in the context will get// or pop the topmost one, and for push it will find the topmost context// before adding the new context*/void PushVariableStoreContext(VARSTORE *parent, VARSTORE *varstore);VARSTORE *PopVariableStoreContext(VARSTORE *varstore);VARSTORE *PeekVariableStoreContext(VARSTORE *varstore);/*// add a variable to a store ... the store will keep its// own copy of the variable kept, no need to maintain name and// value once added//// Set destructor to NULL if no additional processing required before// destroying the variable.  Otherwise, pass a pointer to a function.//// Returns FALSE if unable to add variable into the store*/BOOL StoreVariable(VARSTORE *varstore, const char *name, const char *value,    uint type, uint flag, void *param, VAR_DESTRUCTOR destructor);/*// Returns TRUE if variable found in store (case-insensitive)*/BOOL VariableExists(VARSTORE *varstore, const char *name);/*// A variable's destructor will be called from the context of these// functions*/BOOL RemoveVariable(VARSTORE *varstore, const char *name);void ClearVariableList(VARSTORE *varstore);/*// Get variable information ... returns NULL for GetVariableValue(),// VAR_TYPE_UNKNOWN for GetVariableType(), and VAR_FLAG_UNKNOWN for// GetVariableFlag() if variable not in list//// GetVariableParam() returns NULL if not found ... since this is a valid// return value, caller should really use VariableExists() first!*/const char *GetVariableValue(VARSTORE *varstore, const char *name);uint GetVariableType(VARSTORE *varstore, const char *name);uint GetVariableFlag(VARSTORE *varstore, const char *name);void *GetVariableParam(VARSTORE *varstore, const char *name);#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -