📄 cfgfile.c
字号:
#include <unistd.h>#include <fcntl.h>#include <sys/stat.h>#include "gmclient.h"char sqlhost[50];char sqluser[20];char sqlpassword[20];unsigned int sqlport;char sqlsocket[100];GdkColor background;GdkColor layoutline;GdkColor font;GdkColor klineup;GdkColor klinedown;GdkColor aline;GdkColor kavgline1;GdkColor kavgline2;GdkColor kavgline3;GdkColor kavgline4;GdkColor kavgline5;GdkColor jszb1;GdkColor jszb2;GdkColor jszb3;GdkColor jszb4;GdkColor jszb5;GdkColor up;GdkColor down;GdkColor equal;GdkColor fsline;GdkColor fsavgline;GdkColor fscolume;COLORARRAY ca[]={ {"背景颜色","background",&background}, {"线框颜色","layoutline",&layoutline}, {"字体颜色","font",&font}, {"上涨K线","klineup",&klineup}, {"下跌K线","klinedown",&klinedown}, {"美国线 ","aline",&aline}, {"均线一 ","kavgline1",&kavgline1}, {"均线二 ","kavgline2",&kavgline2}, {"均线三 ","kavgline3",&kavgline3}, {"均线四 ","kavgline4",&kavgline4}, {"均线五 ","kavgline5",&kavgline5}, {"指标线一","jszb1",&jszb1}, {"指标线二","jszb2",&jszb2}, {"指标线三","jszb3",&jszb3}, {"指标线四","jszb4",&jszb4}, {"指标线五","jszb5",&jszb5}, {"上涨颜色","up",&up}, {"下跌颜色","down",&down}, {"相等颜色","equal",&equal}, {"分时线 ","fsline",&fsline}, {"分时均线","fsavgline",&fsavgline}, {"分时量 ","fscolume",&fscolume}, {"","",NULL}};gchar eg[MAXCFGLINELEN];gchar si[MAXCFGLINELEN];gchar sr[MAXCFGLINELEN];FONTARRAY fa[]={ {"英文字体","eg",eg}, {"列表字体","si",si}, {"图形字体","sr",sr}, {"","",NULL} };int cfgfileflag=0;static int cfgfilelinenum=0;/* 0--read fail 1--success*/static gchar *cfgrec[MAXCFGFILELINENUM];static gchar cfgstr[MAXCFGLINELEN];static int readCfgFile(void);//static int printCfg(void);static int findCfgLine(gchar *str);static int findChar(gchar *str,gchar c);static int readCfgRecord(gchar *str,gchar *context);static int readCfgColorRecord(gchar *str,GdkColor *c);static int writeCfgRecord(gchar *str,gchar *context);static int writeCfgColorRecord(gchar *str,GdkColor *c);static int writeCfgFile(void);int readCfg(void){ int mod; char tmp[20]; if(cfgfileflag) releaseCfgRecord(); if(!readCfgFile()) return FAIL; // printf("go here\n"); for(mod=0;ca[mod].color;mod++) readCfgColorRecord(ca[mod].colorname,ca[mod].color); for(mod=0;fa[mod].font;mod++) readCfgRecord(fa[mod].fontname,fa[mod].font); readCfgRecord("host",sqlhost); readCfgRecord("user",sqluser); readCfgRecord("password",sqlpassword); readCfgRecord("port",tmp); sqlport=atoi(tmp); readCfgRecord("unixsocket",sqlsocket); return SUCCESS; }int writeCfg(void){ int i; int flag=0; char tmp[20]; for(i=0;ca[i].color;i++) writeCfgColorRecord(ca[i].colorname,ca[i].color); for(i=0;ca[i].color;i++) writeCfgRecord(fa[i].fontname,fa[i].font); writeCfgRecord("host",sqlhost); writeCfgRecord("user",sqluser); writeCfgRecord("password",sqlpassword); sprintf(tmp,"%d",sqlport); writeCfgRecord("port",tmp); writeCfgRecord("unixsocket",sqlsocket); flag=writeCfgFile(); return flag;}int readCfgFile(void){ FILE *fp; gchar tmpstr[MAXCFGLINELEN]; gchar tmpchar; int linelen; if((fp=fopen(CFGFILE,"r"))==NULL){ printf("Read config file <stock.conf> error.\n"); printf("Please check stock.conf is exist,\n"); printf("and restart program!\n"); return FAIL; } fseek(fp,0,SEEK_SET); linelen=0; while(!feof(fp)){ tmpchar=fgetc(fp); if(tmpchar == '\n'){ tmpstr[linelen]='\0'; cfgrec[cfgfilelinenum]=(gchar *) g_malloc(sizeof(char)*(linelen+1)); strcpy(cfgrec[cfgfilelinenum],tmpstr); cfgfilelinenum++; if(cfgfilelinenum >= MAXCFGFILELINENUM) return FAIL; linelen=0; } else{ if(linelen<MAXCFGLINELEN){ tmpstr[linelen]=tmpchar; linelen++; } } } tmpstr[linelen-1]='\0'; cfgrec[cfgfilelinenum]=(gchar *) g_malloc(sizeof(char)*(linelen+1)); strcpy(cfgrec[cfgfilelinenum],tmpstr); cfgfilelinenum++;// printf("cfglinenum: %d\n",cfgfilelinenum); cfgfileflag = 1; fclose(fp); return SUCCESS;} int writeCfgFile(void){ FILE *fp; gchar tmpstr[MAXCFGLINELEN]; int i; if(!cfgfileflag) return FAIL; if((fp=fopen(CFGFILE,"w"))==NULL){ printf("write stock.conf file error.\n"); return FAIL; } fseek(fp,0,SEEK_SET); for(i=0;i<cfgfilelinenum;i++){ if(i==(cfgfilelinenum-1)){ sprintf(tmpstr,"%s",cfgrec[i]); } else{ sprintf(tmpstr,"%s%c",cfgrec[i],'\n'); } fwrite(tmpstr,1,strlen(tmpstr),fp); } fclose(fp); return SUCCESS;} int readCfgRecord(gchar *str,gchar *context){ int line; gchar *tmpstr; if((line=findCfgLine(str))== -1){ return FAIL; } else{// printf("find %d\n",line); bzero(cfgstr,MAXCFGLINELEN); strcpy(cfgstr,strchr(cfgrec[line],'=')); tmpstr=&cfgstr[1]; strcpy(context,ltrimStr(tmpstr)); return SUCCESS; } }int writeCfgRecord(gchar *str,gchar *context){ int line; int add; if((line=findCfgLine(str))== -1){ return FAIL; } else{ if((add=findChar(cfgrec[line],'='))==-1){ return FAIL; } else{ strcpy(&cfgrec[line][add+1],context); // printf("write %s %s success.\n",str,context); return SUCCESS; } } }int readCfgColorRecord(gchar *str,GdkColor *c){ gchar cstr[10]; gchar tmp[MAXCFGLINELEN]; if(readCfgRecord(str,tmp)){ c->pixel=0; strncpy(cstr,tmp,6); cstr[6]=0; c->red=strtol(cstr,(char **)NULL,16); strncpy(cstr,&tmp[7],6); cstr[6]=0; c->green=strtol(cstr,(char **)NULL,16); strncpy(cstr,&tmp[14],6); cstr[6]=0; c->blue=strtol(cstr,(char **)NULL,16); } else{ c->pixel=0; c->red=0xFFFF; c->green=0xFFFF; c->blue=0xFFFF; } return SUCCESS;}int writeCfgColorRecord(gchar *str,GdkColor *c){ int line; gchar cstr[200]; if((line=findCfgLine(str))== -1){ return FAIL; } sprintf(cstr,"0x%4X,0x%4X,0x%4X",c->red,c->green,c->blue); return writeCfgRecord(str,cstr); }int findCfgLine(gchar *str){ int i; if(!cfgfileflag) return -1; for(i=0;i<cfgfilelinenum;i++){ if(cfgrec[i][0] == '#'){ continue; }// printf("%s %s\n",cfgrec[i],str); if(!strncmp(cfgrec[i],str,strlen(str))){ return i; } else{ continue; } } return -1; }int findChar(gchar *str,gchar c){ int i; if(str == NULL) return -1; for(i=0;i<(int)strlen(str);i++){ if(str[i] == c) return i; } return -1;}int printCfg(void){ int i; if(!cfgfileflag) return FAIL; for(i=0;i<cfgfilelinenum;i++) printf("%s\n",cfgrec[i]); return SUCCESS;}void releaseCfgRecord(void){ int i; if(!cfgfileflag) return; for(i=0;i<cfgfilelinenum;i++) g_free(cfgrec[i]); cfgfileflag = 0 ; cfgfilelinenum = 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -