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

📄 editini.c

📁 本程序在S3C44B0 uClinux的嵌入式GUI
💻 C
字号:
 //EditIni.c 查看/修改 .ini 文件 //.ini 文件 规则: // 以 txt 文本方式存放,文本中不能有 tab 符, 每行 INI_LINE_LENGTH  (64) 个字符 // 最后一个字符为';', // 文本第一行 为表示后续 行数的 三位数字 // [组名称]=002         ->=002,本组后续行数 // aaaaaaaa=16          ->=16,aaaaaaaa数值参数 // bbbbbbbb=[蓝色快车]  ->=[蓝色快车],bbbbbbbb字符串参数 #include <stdio.h> #include "pos.h" //const char IniFileName[]={"/ramdisk/PosDef.ini"}; const char IniFileName[]={"/mnt/nand_disk1/PosDef.ini"};  //系统、税控定义文件 const char GT_FileName[]={"/mnt/nand_disk1/gt_list.ini"}; //商品部类表文件 //"003",				总行数 //"[GoodsList]=002", //"type01=" //"rate01=" // #define INI_LINE_LENGTH  64 const char IBM_prompt[]        ={"[IBM (CN)] copyright 12.5"}; const char BlueExpress_Prompt[]={"[蓝色快车]版权所有,12.5"}; /*   int  TaxFlg;		//=0->未进入税控,=1->已进入税控   int  TaxReporting;	//=0->正常使用中,=1->进入纳税申报,未确认完税   int  PaperRollStatus;//=0->未登记发票卷,=1->已登记发票卷,=2->=2->应发票汇总   char CurCode[11];     //当前发票号   char IndexCode[13];  //税种税目索引号 010200000000 */ #define INI_ITEM_LINE  29+1  //下面增加一行,INI_ITEM_LINE值加一 const char IniFileArr[INI_ITEM_LINE][INI_LINE_LENGTH]= { "029",				//总行数 "[TaxStatus]=018",	//本项目组行数 "TaxFlag=0",		//项目内容 =0->未进入税控,=1->已进入税控 "TaxReportting=0",	//=0->正常使用中,=1->进入纳税申报,未确认完税 "PaperRollStatus=0",	//=0->未登记发票卷,=1->已登记发票卷,=2->=2->应发票汇总 "CurCode=0000000000",	//当前发票号 "InvCode=00000000000000000000",//发票代码 "InvBeginNo=0000000000",		//发票起始号 "InvEndNo=0000000000",			//发票截止号 "BoxCode=Not define",		//税控器编号     16 ASC STR "UserCode=Not define",		//纳税人编码     16 ASC STR "UserName=Not define",     //纳税人单位名称 40 STR "BeginDate=Not define",	//应用起用日期   YYYY-MM-DD 10 ASC STR "ValidDate=Not define",	//应用有效日期   YYYY-MM-DD 10 ASC STR "InvalidDate=Not define",			//开票截止日期   YYYY-MM-DD "OneInvoiceValLimit=Not define",	//单张开票限额 000,000,000·00 (不足前面补空格) "TotalLimit=Not define",			//开票累计金额限额  "ReturnTotalLimit=Not define",		//退票累计金额限额  "TaxTypeIndex=Not define",			//税种税目索引号  "010203040506" "UserEditListFlg=1",				//是否允许用户修改编辑 部类表 0->不允许,1->允许(default) "[Copyright]=003", "Company=[poly group (china)]", "MacType=2402-Linux", "Ver=POLY copyright 04.03.12", "[TCP/IP]=003", "MacIP=192.168.0.100", "MaskIP=255.255.255.0", "DefaultServer=202.96.134.133", "[Device]=001", "COM2=38400,n,8,1", }; //修改FileName->[ItemName]->SubItem数值,def_val为要修改的参数 int  kds_WriteDefVal(char FileName[],char ItemName[],char SubItem[],unsigned long def_val); //读出FileName->[ItemName]->SubItem数值 unsigned long  kds_ReadDefVal(char FileName[],char ItemName[],char SubItem[]); //写入FileName->[ItemName]->SubItem字符串,StrBuf为要修改的字符串 int  kds_WriteDefTxt(char FileName[],char ItemName[],char SubItem[],char *StrBuf); //读出FileName->[ItemName]->SubItem字符串到StrBuf int  kds_ReadDefTxt(char FileName[],char ItemName[],char SubItem[],char *StrBuf); //修改FileName->[ItemName]->SubItem数值int  kds_WriteDefVal(char FileName[],char ItemName[],char SubItem[],unsigned long def_val) { FILE *fp; char buf[INI_LINE_LENGTH+3]; int lines,sub_lines,cnt,ii,len,jj,kk,line_cnt=0;   int ret_val = -1;   if((fp = fopen(FileName,"rt+"))==NULL)       return -1;   fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++; buf[3]=0; //读出第一行   lines = atoi(buf); //总共行数   //printf("\nlines : %d\n",lines);   for(cnt=0;cnt<lines;cnt++){       fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++; //读出一行       //printf("\n L%d:%s\n",cnt,buf);       if( memcmp(buf, ItemName, strlen(ItemName)) == 0) { //本行 对应 ItemName[] ?           buf[strlen(ItemName)+4]=0;           sub_lines = atoi((char*)&buf[strlen(ItemName)+1]); //子项目行数           for(ii=0;ii<sub_lines;ii++){              fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++;  //读出一行              //printf("\n L%d:%s\n",ii,buf);              if( memcmp(buf, SubItem, strlen(SubItem)) == 0) { //本行 对应 SubItem[] ?                  sprintf((char *)&buf[strlen(SubItem)+1], "%d", def_val);                  kk = strlen(buf);  //当前行长                  len = INI_LINE_LENGTH - kk;     //填入空格数量                  for(jj=0;jj<len;jj++) buf[kk+jj] = 0x20; //填入空格                  buf[INI_LINE_LENGTH - 1]=';'; buf[INI_LINE_LENGTH]=0; //填入本行结束';'                  printf("\n L%d:%s\n",cnt,buf);                  fseek(fp,-(INI_LINE_LENGTH + 2),SEEK_CUR);                  fputs(buf,fp);                  ret_val = 0;                  break;              }           }//end for           break;       }//end if( memcmp   } //end for(cnt   fclose(fp);   return ret_val; }  //读出FileName->[ItemName]->SubItem数值unsigned long  kds_ReadDefVal(char FileName[],char ItemName[],char SubItem[]) { FILE *fp; char buf[INI_LINE_LENGTH + 3]; int lines,sub_lines,cnt,ii,jj,line_cnt=0;   unsigned long ret_val = 0;   if((fp = fopen(FileName,"rt"))==NULL)       return -1;   fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++; buf[3]=0;   lines = atoi(buf); //总共行数   for(cnt=0;cnt<lines;cnt++){       fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++; //读出一行       if( memcmp(buf, ItemName, strlen(ItemName)) == 0) { //本行 对应 ItemName[] ?           buf[strlen(ItemName)+4]=0;           sub_lines = atoi((char*)&buf[strlen(ItemName)+1]); //子项目行数           for(ii=0;ii<sub_lines;ii++){              fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++;  //读出一行              if( memcmp(buf, SubItem, strlen(SubItem)) == 0) { //本行 对应 SubItem[] ?                  jj = 0;                  while(buf[strlen(SubItem)+jj++]!=0x20) ;                  jj--; buf[strlen(SubItem)+jj]=0;                  ret_val = atol((char*)&buf[strlen(SubItem)+1]); //得到 对应值                  break;              }           }//end for           break;       }//end if( memcmp   } //end for(cnt   fclose(fp);   return ret_val; }  //写入FileName->[ItemName]->SubItem字符串int  kds_WriteDefTxt(char FileName[],char ItemName[],char SubItem[],char *StrBuf) { FILE *fp; char buf[INI_LINE_LENGTH + 3]; int lines,sub_lines,cnt,ii,jj,line_cnt=0;   int ret_val = -1;       int kk,len;   if((fp = fopen(FileName,"r+t"))==NULL)       return -1;   fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++; buf[3]=0;   lines = atoi(buf); //总共行数   for(cnt=0;cnt<lines;cnt++){       fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++; //读出一行       if( memcmp(buf, ItemName, strlen(ItemName)) == 0) { //本行 对应 ItemName[] ?           buf[strlen(ItemName)+4]=0;           sub_lines = atoi((char*)&buf[strlen(ItemName)+1]); //子项目行数           for(ii=0;ii<sub_lines;ii++){              fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++;  //读出一行              if( memcmp(buf, SubItem, strlen(SubItem)) == 0) { //本行 对应 SubItem[] ?                  sprintf((char *)&buf[strlen(SubItem)+1], "%s", StrBuf);                  kk = strlen(buf);  //当前行长                  len = INI_LINE_LENGTH - kk;     //填入空格数量                  for(jj=0;jj<len;jj++) buf[kk+jj] = 0x20; //填入空格                  buf[INI_LINE_LENGTH - 1]=';'; buf[INI_LINE_LENGTH]=0; //填入本行结束';'                  fseek(fp,-(INI_LINE_LENGTH + 2),SEEK_CUR);                  fputs(buf,fp);                  ret_val = 0;                  break;              }           }//end for           break;       }//end if( memcmp   } //end for(cnt   fclose(fp);   return ret_val; } //读出FileName->[ItemName]->SubItem字符串到StrBufint  kds_ReadDefTxt(char FileName[],char ItemName[],char SubItem[],char *StrBuf) { FILE *fp; char buf[INI_LINE_LENGTH + 10]; int lines,sub_lines,cnt,ii,jj,line_cnt=0;   int ret_val = -1;   *StrBuf = 0;   if((fp = fopen(FileName,"rt"))==NULL)       return -1;   fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++; buf[3]=0;   lines = atoi(buf); //总共行数   //printf("TL:%d\n",lines);   for(cnt=0;cnt<lines;cnt++){       fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++; //读出一行       //printf("%s",buf);       if( memcmp(buf, ItemName, strlen(ItemName)) == 0) { //本行 对应 ItemName[] ?           buf[strlen(ItemName)+4]=0;           sub_lines = atoi((char*)&buf[strlen(ItemName)+1]); //子项目行数	   //printf("SL:%d\n",sub_lines);           for(ii=0;ii<sub_lines;ii++){              fgets(buf,INI_LINE_LENGTH + 4,fp); line_cnt++;  //读出一行	      //printf("%s",buf);              if( memcmp(buf, SubItem, strlen(SubItem)) == 0) { //本行 对应 SubItem[] ?                  jj = INI_LINE_LENGTH - 1;  //从后向前找到第一个不是空格的位置                  while(buf[--jj]==0x20) {;}                  buf[++jj]=0;                  jj -= strlen(SubItem);                  memmove(StrBuf,&buf[strlen(SubItem)+1],jj); //取得字符串                  break;              }           }//end for           break;       }//end if( memcmp   } //end for(cnt   fclose(fp);   return ret_val; }int CheckFileExist(char *FileName) { int status;   status = access(FileName,0);   if (status == 0)      printf("File exists\n");   else      printf("File doesn't exist\n");   return status; } //1. 在PC一侧 in.tftpd -l -s [ftp服务器目录] //2. 支持tftp client, 在console中键入:tftp -gl 文件名 tftp服务器地址, //就可以通过tftp下载文件,但是请注意:POS机的当前路径必须可写, //目前可写路径是/var, /ramdisk, /mnt/nand_disk1 int  kds_MakeFirstInitFile( void ) { int  i;   char SpaceLine[INI_LINE_LENGTH+3];   FILE *fp;    if( CheckFileExist( (char*)IniFileName )!=0 ) //无文件,则建立文件 { //建立文件   printf("create new file ...\n");   fp = fopen(IniFileName,"w");   if(fp==NULL) return -1;   for(i=0;i<INI_ITEM_LINE;i++){ //向文件中写出厂设置内容      memset(SpaceLine,0x20,INI_LINE_LENGTH);      memmove(SpaceLine,IniFileArr[i],strlen(IniFileArr[i]));      SpaceLine[INI_LINE_LENGTH]=0x0d; SpaceLine[INI_LINE_LENGTH+1]=0x0a; SpaceLine[INI_LINE_LENGTH+2]=0;      //printf("%s",SpaceLine);      fputs(SpaceLine,fp);   }   fclose(fp); 	 } printf("The file is exist . \n");   return 0;	 }void kds_main( void ) { unsigned long para_val;   char StrBuf[INI_LINE_LENGTH];   if( kds_MakeFirstInitFile()==0 )      printf("Tne INI file create sucesseful ! \n");   else      printf("Tne INI file create un-sucesseful ! \n");      //管理 数值 (得到 TaxFlag 值)   para_val = kds_ReadDefVal( (char *)IniFileName,"[TaxStatus]","TaxFlag");   printf("%s,%d\n","TaxFlag",para_val);   //(得到 TaxReportting 值)   para_val = kds_ReadDefVal( (char *)IniFileName,"[TaxStatus]","TaxReportting");   printf("%s,%d\n","TaxReportting",para_val);   //(得到 PaperRollStatus 值)   para_val = kds_ReadDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus");   printf("%s,%d\n","PaperRollStatus",para_val);   //修改 PaperRollStatus   //if(para_val==0) para_val = 1;   //else            para_val = 0;   //kds_WriteDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus",para_val);   //(再得到 PaperRollStatus 值)   para_val = kds_ReadDefVal( (char *)IniFileName,"[TaxStatus]","PaperRollStatus");   printf("%s,%d\n","PaperRollStatus",para_val);   //管理 字符串 (得到 MacType 值)   kds_ReadDefTxt( (char *)IniFileName,"[Copyright]","MacType",StrBuf);   printf("%s:%s\n","MacType",StrBuf);   //(得到 Ver 值)   kds_ReadDefTxt( (char *)IniFileName,"[Copyright]","Ver",StrBuf);   printf("%s:%s\n","Ver",StrBuf);   //(修改 Ver 值)   //kds_WriteDefTxt( (char *)IniFileName,"[Copyright]","Ver",(char*)IBM_prompt);   //(再得到 Ver 值)   kds_ReadDefTxt( (char *)IniFileName,"[Copyright]","Ver",StrBuf);   printf("%s:%s\n","Ver",StrBuf);   //(得到 MacIP 值)   kds_ReadDefTxt( (char *)IniFileName,"[TCP/IP]","MacIP",StrBuf);   printf("%s:%s\n","MacIP",StrBuf);   //kds_WriteDefTxt("DOS_DEF.INI","[system prompt line]","prompt",(char*)BlueExpress_Prompt);   //(得到 COM0 值)   kds_ReadDefTxt( (char *)IniFileName,"[Device]","COM2",StrBuf);   printf("%s:%s\n","COM2",StrBuf);   printf("\n");   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","InvCode",StrBuf);   printf("InvCode:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","InvBeginNo",StrBuf);   printf("InvBeginNo:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","InvEndNo",StrBuf);   printf("InvEndNo  :%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","CurCode",StrBuf);   printf("CurCode   :%s\n",StrBuf);   printf("\n");   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","BoxCode",StrBuf);   printf("BoxCode:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","UserCode",StrBuf);   printf("UserCode:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","UserName",StrBuf);   printf("UserName:%s,%x,%x\n",StrBuf,StrBuf[0],StrBuf[1]);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","BeginDate",StrBuf);   printf("BeginDate:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","ValidDate",StrBuf);   printf("ValidDate:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","InvalidDate",StrBuf);   printf("InvalidDate:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","OneInvoiceValLimit",StrBuf);   printf("OneInvoiceValLimit:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","TotalLimit",StrBuf);   printf("TotalLimit:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","ReturnTotalLimit",StrBuf);   printf("ReturnTotalLimit:%s\n",StrBuf);   kds_ReadDefTxt( (char *)IniFileName,"[TaxStatus]","TaxTypeIndex",StrBuf);   printf("TaxTypeIndex:%s\n",StrBuf); }/* //The system inteval is defined as 1 Tsec (about 50 msecs), //The macro function __peekw and constant TIMER_LO //are given in IBMPC.H #define TIMER_LO 0x46C #define MEM_W(s, o) (*(int _far *)((long)(s)<<16|(o)))void __delay_as_tick(int tsecs) { unsigned int tickref;   int ii;   for (ii = 0; ii < tsecs; tsecs++ ) {       tickref = MEM_W( 0,TIMER_LO );       while ( tickref == MEM_W( 0,TIMER_LO ) )            {;}   } } */

⌨️ 快捷键说明

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