// ------------------------------- // // -------- Start of File -------- // // ------------------------------- // // ----------------------------------------------------------- // // C++ Source Code File Name: edscfg.cpp // C++ Compiler Used: MSVC, BCC32, GCC, HPUX aCC, SOLARIS CC // Produced By: glNET Software // File Creation Date: 10/15/1999 // Date Last Modified: 05/25/2001 // Copyright (c) 2001 glNET Software // ----------------------------------------------------------- // // ------------- Program Description and Details ------------- // // ----------------------------------------------------------- // /* This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this library; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Code used to test the eds configuration manager. */ // ----------------------------------------------------------- // #include <iostream.h> #include "edscfg.h" #ifdef __MSVC_DEBUG__ #include "leaktest.h" #endif // Data structure use to store program configuration values struct ProgramConfig { ProgramConfig() { // Set the default values s_val = "YES"; i_val = 32768; l_val = 2147483647; d_val = 1.12345; } ProgramConfig(const ProgramConfig &ob) { s_val = ob.s_val; i_val = ob.i_val; l_val = ob.l_val; d_val = ob.d_val; } UString s_val; int i_val; long l_val; double d_val; }; void PausePrg() { cout << endl; cout << "Press <Enter> to continue..." << endl; cin.get(); } void DumpConfig(edsConfig *edscfg) { edsConfigListNode *ptr = (edsConfigListNode *)edscfg->GetHead(); while(ptr) { cout << ptr->node_data.str << ' ' << endl; ptr = ptr->GetNext(); } } void DisplayConfig(edsConfig *CfgData, ProgramConfig *cfg) // Display the program configuration and load config values { char *v1 = CfgData->GetStrValue("String"); if(!v1) { cout << "String section missing from config file" << endl; } else { cout << "String section of config file = " << v1 << endl; cfg->s_val = v1; } int v2 = CfgData->GetIntValue("Int"); if(!v2) { cout << "Int section missing from config file" << endl; } else { cout << "Integer section of config file = " << v2 << endl; cfg->i_val = v2; } double v3 = CfgData->GetFloatValue("Float"); if(!v3) { cout << "Float section missing from config file" << endl; } else { cout << "Floating Point number section of config file = " << v3 << endl; cfg->d_val = v3; } long v4 = CfgData->GetLongValue("Long"); if(!v4) { cout << "Long int section missing from config file" << endl; } else { cout << "Long int section of config file = " << v4 << endl; cfg->l_val = v4; } cout << endl; } void MultipleRead(edsConfig *CfgData) { char *ServerName = CfgData->GetStrValue("ServerName"); if(!ServerName) { cout << "ServerName value is not set in the config file" << endl; return; } else cout << "Server name = " << ServerName << endl; char *FullPathName = CfgData->GetStrValue("FullPathName0"); if(!FullPathName) { cout << "No path names are set in the config file" << endl; return; } char cfgValue[255]; char *cfgName = "FullPathName"; long file_num = -1; while(1) { file_num++; sprintf(cfgValue, "FullPathName%d", file_num); char *buf = CfgData->GetStrValue(cfgValue); if(!buf) break; UString sbuf(buf); unsigned offset = 0; unsigned index = 0; while(1) { offset = sbuf.Find("/", offset); if(offset != -1) index = offset; if(offset == -1) break; offset++; } if(index > 0) sbuf.DeleteAt(0, ++index); if(sbuf.length() == 0) { cout << "Invalid file name for " << cfgValue << endl; return; } cout << "Reading: " << buf << endl; cout << "Copying to: " << sbuf << endl; buf = 0; for(int i = 0; i < 255; i++) cfgValue[i] = 0; } cout << endl; } void NewParmID(edsConfig *CfgData) { CfgData->UnLoad(); CfgData->SetParmID("://"); UString parmName("http"); CfgData->ReadComments(); CfgData->ReLoad(); edsConfigListNode *ptr = (edsConfigListNode *)CfgData->GetHead(); while(ptr) { // Scan until end of list unsigned offset = 0; offset = ptr->node_data.str.Find(parmName); if(offset != -1) { UString ServerName(ptr->GetNext()->node_data.str); UString FullPathName(ptr->GetNext()->node_data.str); unsigned offset = ServerName.Find("/"); if(offset != -1) { ServerName.DeleteAt(offset, (ServerName.length() - offset)); FullPathName.DeleteAt(0, offset); cout << "Server: " << ServerName << " Path: " << FullPathName << endl; } } ptr = ptr->GetNext(); } } void WriteNewConfig(edsConfig *CfgData) { CfgData->WriteConfigLine("Long", "2147483647"); CfgData->WriteConfigLine("Int", "32768"); CfgData->WriteConfigLine("Float", "1.12345"); CfgData->WriteConfigLine("String", "YES"); CfgData->WriteConfigLine("ServerName", "www.myserver.net"); CfgData->WriteConfigLine("FullPathName0", "/home1/webpages/index.html"); CfgData->WriteConfigLine("FullPathName1", "/home1/webpages/images/brick.jpg"); CfgData->WriteConfigLine("FullPathName2", "/home3/mail_list/list_add.htm"); CfgData->WriteConfigLine("FullPathName3", "/home3/mail_list/list_remove.htm"); CfgData->WriteConfigLine("FullPathName4", "/home1/webpages/images/button_bar.jpg"); CfgData->WriteConfigLine("FullPathName5", "/pub/docs/release_notes/mod1.txt"); CfgData->WriteConfigLine("FullPathName6", "/pub/docs/release_notes/mod2.txt"); CfgData->WriteConfigLine("FullPathName7", "/pub/docs/release_notes/mod3.txt"); CfgData->WriteLine("http://www.myserver.net/home1/webpages/index.html"); CfgData->WriteLine("http://www.myserver.net/home1/webpages/images/ \ brick.jpg"); CfgData->WriteLine("http://www.myserver.net/home3/mail_list/list_add.htm"); CfgData->WriteLine("http://www.myserver.net/home3/mail_list/ \ list_remove.htm"); CfgData->WriteLine("http://www.myserver.net/home1/webpages/images/ \ button_bar.jpg"); CfgData->WriteLine("http://www.myserver.net/pub/docs/release_notes/ \ mod1.txt"); CfgData->WriteLine("http://www.myserver.net/pub/docs/release_notes/ \ mod2.txt"); CfgData->WriteLine("http://www.myserver.net/pub/docs/release_notes/ \ mod3.txt"); } int main() { #ifdef __MSVC_DEBUG__ InitLeakTest(); #endif edsConfig *CfgData = new edsConfig("testfile.eds"); ProgramConfig *cfg = new ProgramConfig; if(!CfgData->Exists()) { cout << endl; cout << "The eds config file does not exist!" << endl; cout << "Writing new config file..." << endl; WriteNewConfig(CfgData); cout << endl; } cout << "Processing the config file" << endl; if(CfgData->OpenDatabase()->GetDatabaseError() != gxDBASE_NO_ERROR) { cout << CfgData->OpenDatabase()->DatabaseExceptionMessage() << endl; delete CfgData; delete cfg; return 1; } CfgData->Load(); cout << endl; DisplayConfig(CfgData, cfg); ProgramConfig org_config(*cfg); // Record the original values cout << "Testing reload function" << endl; PausePrg(); CfgData->ReLoad(); DisplayConfig(CfgData, cfg); cout << "Writing new values to the file" << endl; PausePrg(); if(!CfgData->ChangeConfigValue("String", "NO")) cout << "Could not change string value" << endl; if(!CfgData->ChangeConfigValue("Float", 1.98712)) cout << "Could not change floating point value" << endl; if(!CfgData->ChangeConfigValue("Int", 12345)) cout << "Could not change integer value" << endl; if(!CfgData->ChangeConfigValue("Long", 23889)) cout << "Could not change long integer value" << endl; CfgData->ReLoad(); DisplayConfig(CfgData, cfg); cout << "Restoring orignal values" << endl; PausePrg(); CfgData->ChangeConfigValue("String", org_config.s_val); CfgData->ChangeConfigValue("Int", org_config.i_val); CfgData->ChangeConfigValue("Float", org_config.d_val); CfgData->ChangeConfigValue("Long", org_config.l_val); CfgData->ReLoad(); DisplayConfig(CfgData, cfg); cout << "Performing a multiple read and parsing operation" << endl; PausePrg(); MultipleRead(CfgData); cout << "Reloading the file with a new parameter ID string" << endl; PausePrg(); NewParmID(CfgData); CfgData->UnLoad(); delete CfgData; delete cfg; return 0; } // ----------------------------------------------------------- // // ------------------------------- // // --------- End of File --------- // // ------------------------------- //