📄 config.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 + -