📄 paramreaderutil.cpp
字号:
/*********************************
Author: Yaojinyi
Date: 2002-2-10 10:30:47
Description:
Read Param from configure file
Last modifier: Yaojinyi
Last modification date: 2002-2-10 10:30:47
Note:
*********************************/
#include "paramreaderutil.h"
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#define NULLCHAR '\0'
//class ParamReader paramreader;
ParamReader::ParamReader(){
}
void ParamReader::AddItem(option_t& item){
opt.push_back(item);
}
void ParamReader::ResetItem(){
opt.clear();
}
void ParamReader::GetOptions(int argc, char** argv){
/* skip command name */
argv++ ; argc-- ;
/* first, search option '-file' */
int i ;
for(i = 0 ; i < argc-1 ; i++) {
if (!strcmp(*(argv + i),"-file")) {
GetOptions(*(argv+i+1));
}
}
/* next, analyze command line option */
while (argc > 0) {
if (!strcmp(*argv, "-file")) {
argv += 2 ;
argc -= 2 ;
continue ;
}
std::vector<option_t>::iterator iter;
for(iter = opt.begin(); iter != opt.end(); iter ++)
{
if (strcmp(*argv + 1, iter->optname))
continue ;
/* match */
argv++ ;
argc-- ;
switch(iter->vsize) {
case V_INT:
*((int *)iter->vptr) = atoi(*argv) ;
break ;
case V_STRING:
strcpy((char *)iter->vptr, *argv) ;
break ;
case V_FLOAT:
*((float *)iter->vptr) = float(atof(*argv)) ;
break ;
case V_BOOL:
*((bool *)iter->vptr) = true ;
argv-- ;
argc++ ;
break ;
case V_ONOFF:
if (argc > 0 && (*argv)[0] != '-') {
*((bool *)iter->vptr) = (!strcmp(*argv, "on")) ? true : false ;
} else {
/* if there's nothing specified, then we set it to true */
*((bool *)iter->vptr) = true;
argv-- ;
argc++ ;
}
break ;
}
break ;
}
argv++ ;
argc-- ;
}
}
void ParamReader::ParseOptions(const char *Info){
for(;Info[0] !=NULL;Info++)
{
if (Info[0] == '('){
ParseItem(Info+1);
}
}
};
void ParamReader::GetOptions(const char* filename){
FILE *fp ;
if ((fp = fopen(filename,"r")) == NULL) {
return ;
}
char buf[100] ;
while(fgets(buf,100,fp) != NULL) {
/* ignore remark line */
if (buf[0] == '#' || buf[0] == '\n' || buf[0] == '\r') continue ;
/* replace from ':' to ' ' */
char *t = buf ;
while(*t != NULLCHAR) {
if (*t == ':') *t = ' ' ;
t++ ;
}
ParseItem(buf);
}
fclose(fp) ;
}
void ParamReader::ReadString(const char** src, char* value){
while((*src)[0] == ' ' || (*src)[0] == '"'
|| (*src)[0] == '\t' || (*src)[0] == '\n' ||
(*src)[0] == '\r')
{
(*src) ++;
}
while((*src)[0] != ')' && (*src)[0] != 0 && (*src)[0] != '"'
&& (*src)[0] != ' ' && (*src)[0] != '\t' && (*src)[0] != '\n'
&& (*src)[0] != '\r')
{
*value= *(*src) ;
value++;
(*src)++;
}
*value = '\0';
}
void ParamReader::ParseItem(const char *buf)
{
int n;
char com[256] ;
char onoff[16] ;
n = sscanf(buf,"%s", com);
if (n < 1) {
return ;
}
buf += strlen(com);
std::vector<option_t>::iterator iter;
for(iter = opt.begin(); iter != opt.end(); iter ++)
{
if (strcmp(com, iter->optname))
continue ;
/* match */
switch(iter->vsize) {
case V_INT:
n = sscanf(buf, "%d", (int *)iter->vptr) ;
break ;
case V_STRING:
ReadString(&buf, (char*)iter->vptr);
break ;
case V_FLOAT:
n = sscanf(buf, "%f", (float *)iter->vptr) ;
break ;
case V_BOOL:
case V_ONOFF:
ReadString(&buf, onoff);
if(!strncmp(onoff, "1", 1) || !strncmp(onoff, "on", 2) || !strncmp(onoff, "yes", 3)){
*((bool *)iter->vptr) = true;
}else{
*((bool *)iter->vptr) = false;
}
break ;
default:
break;
}
break ;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -