summaryrefslogtreecommitdiff
path: root/tvision/include/tv/configfile.h
diff options
context:
space:
mode:
Diffstat (limited to 'tvision/include/tv/configfile.h')
-rw-r--r--tvision/include/tv/configfile.h99
1 files changed, 99 insertions, 0 deletions
diff --git a/tvision/include/tv/configfile.h b/tvision/include/tv/configfile.h
new file mode 100644
index 0000000..adba7c9
--- /dev/null
+++ b/tvision/include/tv/configfile.h
@@ -0,0 +1,99 @@
+/***************************************************************************
+
+ Copyright 2002 by Salvador Eduardo Tropea (SET)
+ This file is covered by the GPL license.
+ For more information read configfile.cc
+
+***************************************************************************/
+
+#if defined(Uses_TVConfigFile) && !defined(TVConfigFile_Included)
+#define TVConfigFile_Included
+
+// Structure for a node
+struct TVConfigFileTreeNode
+{
+ char type;
+ char priority;
+ union
+ {
+ long integer;
+ char *string;
+ TVConfigFileTreeNode *content;
+ };
+ char *name;
+ TVConfigFileTreeNode *next;
+};
+
+class CLY_EXPORT TVConfigFile
+{
+public:
+ TVConfigFile();
+ ~TVConfigFile() { FreeTree(); };
+ int Load(const char *file) { ErrorStatus=Read(file); return ErrorStatus; };
+
+ // Priorities 0 to 100
+ enum Priority { justHint=25, fromFile=50, fromApplication=75 };
+
+ int Search(const char *key, char *&p, long &n);
+ int AddInt(const char *key, const char *name, long value, int priority);
+ int AddString(const char *key, const char *name, const char *value, int priority);
+ // Just for debug purposes
+ void Print(FILE *f);
+
+ int ErrorLine;
+ int ErrorStatus;
+ static const char *Errors[];
+
+protected:
+ TVConfigFileTreeNode tree;
+ FILE *f;
+ char *s, *line;
+ size_t sLine;
+
+ void PrintBranch(TVConfigFileTreeNode *base, int indent, FILE *f);
+ void PrintIndent(int indent, FILE *f);
+ int EatSpaces();
+ int GetLine();
+ TVConfigFileTreeNode
+ *NewBranch(const char *name, int len);
+ char *GetString();
+ long GetInteger();
+ int ReadBranch(TVConfigFileTreeNode *&base);
+ int ReadBase(TVConfigFileTreeNode *&base);
+ int SearchInBranch(TVConfigFileTreeNode *b, char *key, char *&p, long &n);
+TVConfigFileTreeNode *
+ SearchOnlyInBranch(TVConfigFileTreeNode *b, char *name, int len);
+TVConfigFileTreeNode *
+ SearchOnlyInBranch(TVConfigFileTreeNode *b, char *name);
+ int Read(const char *file);
+ void FreeList(TVConfigFileTreeNode *p);
+ void FreeTree();
+ int Add(const char *key, TVConfigFileTreeNode *node);
+
+ static int IsWordChar(int val);
+ static char *newStrL(const char *start, int len);
+};
+
+// This is a special case to configure the library
+class CLY_EXPORT TVMainConfigFile
+{
+public:
+ TVMainConfigFile();
+ ~TVMainConfigFile();
+ static int Load();
+ static Boolean Search(const char *key, long &val);
+ static Boolean Search(const char *section, const char *variable, long &val);
+ static char *Search(const char *key);
+ static char *Search(const char *section, const char *variable);
+ static int Add(const char *key, const char *name, long value);
+ static int Add(const char *key, const char *name, const char *value);
+ static void Print(FILE *f) { config->Print(f); };
+ static void SetUserConfigFile(const char *name) { userConfigFile=name; };
+
+protected:
+ static TVConfigFile *config;
+ static char *TestForFileIn(const char *where);
+ static const char *userConfigFile;
+};
+#endif
+