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