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

📄 config.cpp

📁 一套linux下的C++开发库
💻 CPP
字号:
/***************************************************************************                          config.cpp  -  description                             -------------------    begin                : Fri Jul 20 2001    copyright            : (C) 2001 by Mark    email                : alben@yeah.net ***************************************************************************//*************************************************************************** *                                                                         * *   This program is free software; you can redistribute it and/or modify  * *   it under the terms of the GNU General Public License as published by  * *   the Free Software Foundation; either version 2 of the License, or     * *   (at your option) any later version.                                   * *                                                                         * ***************************************************************************/#include <string.h>#include <stdlib.h>#include <stdarg.h>#include <fstream.h>#include "exception.h"#include "config.h"static int s_iConfigLineLenLimit = 255;static void InitDefault(va_list ap);static void SetVal(va_list ap, char* sP, char* sV);static int GetParamVal(char* sLine, char* sParam, char* sVal);extern int errno;void InitConfig(const char* sConfigFile, ...){	char sLine[s_iConfigLineLenLimit+1], sParam[s_iConfigLineLenLimit+1], sVal[s_iConfigLineLenLimit+1];	va_list ap;	va_start(ap, sConfigFile);	InitDefault(ap);	va_end(ap);	ifstream in(sConfigFile, ios::in | ios::nocreate);	if (in.fail())		throw CFileException("open config file fail.", __FILE__, __LINE__);		while (true)	{		in.getline(sLine, sizeof(sLine));		if (in.eof())			break;		else if (in.fail())			throw CFileException("read config file fail.", __FILE__, __LINE__);				if (strcmp(sLine, "") != 0)		{			if (GetParamVal(sLine, sParam, sVal) == 0)			{				va_start(ap, sConfigFile);				SetVal(ap, sParam, sVal);				va_end(ap);			}		}	}	}void InitDefault(va_list ap){	char *sParam, *sVal, *sDefault;	double *pdVal, dDefault;	long *plVal, lDefault;	int iType, *piVal, iDefault;	int iSize;	sParam = va_arg(ap, char*);	while (sParam != NULL)	{		iType = va_arg(ap, int);		switch(iType)		{			case CFG_STRING:				sVal = va_arg(ap, char*);				sDefault = va_arg(ap, char*);				iSize = va_arg(ap, int);				strncpy(sVal, sDefault, iSize-1);				sVal[iSize-1] = 0;				break;							case CFG_INT:				piVal = va_arg(ap, int*);				iDefault = va_arg(ap, int);				*piVal = iDefault;				break;											case CFG_LONG:				plVal = va_arg(ap, long*);				lDefault = va_arg(ap, long);				*plVal = lDefault;				break;			case CFG_DOUBLE:				pdVal = va_arg(ap, double*);				dDefault = va_arg(ap, double);				*pdVal = dDefault;				break;		}				sParam = va_arg(ap, char*);	}}void SetVal(va_list ap, char* sP, char* sV){	char *sParam, *sVal, *sDefault;	double *pdVal, dDefault;	long *plVal, lDefault;	int iType, *piVal, iDefault;	int iSize;	sParam = va_arg(ap, char*);	while (sParam != NULL)	{		iType = va_arg(ap, int);		switch(iType)		{			case CFG_STRING:				sVal = va_arg(ap, char*);				sDefault = va_arg(ap, char*);				iSize = va_arg(ap, int);				break;							case CFG_INT:				piVal = va_arg(ap, int*);				iDefault = va_arg(ap, int);				break;											case CFG_LONG:				plVal = va_arg(ap, long*);				lDefault = va_arg(ap, long);				break;			case CFG_DOUBLE:				pdVal = va_arg(ap, double*);				dDefault = va_arg(ap, double);				break;		}		if (strcmp(sP, sParam) == 0)		{			switch(iType)			{				case CFG_STRING:					strncpy(sVal, sV, iSize-1);					sVal[iSize-1] = 0;					break;									case CFG_INT:					*piVal = atoi(sV);					break;														case CFG_LONG:					*plVal = atol(sV);					break;				case CFG_DOUBLE:					*pdVal = atof(sV);					break;			}						return;		}		sParam = va_arg(ap, char*);	}}int GetParamVal(char* sLine, char* sParam, char* sVal){	char *p, *sP, *sV;	//Get sParam		p = sLine;	while(*p != '\0')	{		if ((*p != ' ') && (*p != '\t') && (*p != '\n'))			break;		p++;	}		if (*p == '#')		return 1;		sP = sParam;	while(*p != '\0')	{		if ((*p == ' ') || (*p == '\t') || (*p == '\n'))			break;					*sP = *p;		p++;		sP++;	}	*sP = '\0';		//Get sVal	while(*p != '\0')	{		if ((*p != ' ') && (*p != '\t') && (*p != '\n'))			break;		p++;	}			sV = sVal;	while(*p != '\0')	{		if ((*p == ' ') || (*p == '\t') || (*p == '\n'))			break;					*sV = *p;		p++;		sV++;	}	*sV = '\0';		return 0;}

⌨️ 快捷键说明

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