📄 pub_prtlib.c
字号:
SockData.sPosY = atoi(strTmpBuf); strcpy(strTmpBuf,strtok(NULL,",")); if(strTmpBuf[0] != 0x00) SockData.sControl = atoi(strTmpBuf); if(SockData.sControl == 5) { strcpy(strTmpBuf, strtok(NULL,",")); SockData.sLen = atoi(strTmpBuf); } ptSockData = malloc(sizeof(SOCKDATA)); memcpy(ptSockData, &SockData, sizeof(SOCKDATA)); if(ptSockDataHead == NULL) ptSockDataHead = ptSockData; else { ptSockData1 = ptSockDataHead; for(;ptSockData1->next != NULL; ptSockData1 = ptSockData1->next); ptSockData1 -> next = ptSockData; ptSockData -> prev = ptSockData1; } } fclose(fp); *p = ptSockDataHead; return 0;}/******************************函数名称 Pub_SockPrint 函数功能 套打处理函数 入参 sbxh 设备序号 (凭证打印机型号) strFmtFile 打印格式文件名(不带路径) strDataFile 打印数据文件名(不带路径) strOutFile 打印文件名(不带路径) strPrompt 打印提示(可为NULL) RePrtNum 重打提示 <0 无限次重打提示 =0 不提示重打 >0 重打提示次数出参 无 返回 0 成功 -1 失败******************************/int Pub_SockPrint(int sbxh,char*strFmtFile, char *strDataFile, char *strOutFile, char *strPrompt, int RePrtNum){ char strSysCommand[100]; /*命令串*/ FILE * fp; /*文件指针*/ char * pData; /*打印数据指针*/ long lFileSize; /*文件大小变量*/ char strBuf[200]; /*临时串*/ char strRePrompt[100]; /*重打提示控制信息*/ char *tmpptr, *tmpptr1, *tmpptr2; /*临时指针*/ short sSuccFlag; /*成功标志*/ SOCKDATA *ptSockDataHead,*ptSockData, *ptSockData1, *ptSockData2; struct esbxx tSbxx; /*设备信息结构*/ ptSockData = NULL; pData = NULL; if(RePrtNum < 0) /*无限次重打提示*/ strcpy(strRePrompt,"{{{REPNUM3000}}}"); else /*有限次重打提示*/ sprintf(strRePrompt,"{{{REPNUM%ld}}}",RePrtNum); /*读设备信息*/ if(PubGetSbxx(sbxh, &tSbxx) < 0) { PLOG("Pub_SockPrint()调用PubGetSbxx()错"); return -1; } memcpy(&(stPsbxx[PZDYJ]), &tSbxx, sizeof(struct esbxx)); /*读打印数据*/ if(_read_prtdata(strDataFile,&pData) < 0) { PLOG("Print_Sock()调用_read_prtdata()错"); return -1; } /*打印数据预处理(去掉其中的回车换行符号)*/ tmpptr = malloc(strlen(pData) + 1); memset(tmpptr, 0x00, strlen(pData) + 1); tmpptr1 = pData; tmpptr2 = tmpptr; for(;;) { if(*tmpptr1 == 0x00) break; if(*tmpptr1 == LF || *tmpptr1 == CR) { tmpptr1 ++; continue; } *tmpptr2 = *tmpptr1; tmpptr1 ++; tmpptr2 ++; } strcpy(pData, tmpptr); free(tmpptr); /*读打印格式文件*/ if(_read_fmtdata(strFmtFile, &ptSockDataHead) < 0) { PLOG("Print_Sock()调用_read_fmtdata()错"); return -1; } /*SOCKDATA链表填写打印数据*/ ptSockData = ptSockDataHead; tmpptr = pData; /*如果打印数据第一个字符为'|'则跳过*/ if(*tmpptr == '|') tmpptr ++; sSuccFlag = 1; for(; ptSockData != NULL; ptSockData = ptSockData -> next) { tmpptr1 = strstr(tmpptr, "|"); if(tmpptr1 == NULL) break; *tmpptr1 = 0x00; if(strlen(tmpptr) < 100) strcpy(ptSockData -> strData,tmpptr); else { strncpy(ptSockData -> strData, tmpptr,99); ptSockData -> strData[99] = 0x00; } tmpptr = ++tmpptr1; } if(sSuccFlag == 0) { /*释放打印数据*/ if(pData != NULL) free(pData); /*释放链表数据*/ if(ptSockDataHead == NULL) return -1; ptSockData1 = ptSockDataHead; for(;ptSockData1 != NULL;) { ptSockData2 = ptSockData1 -> next; free(ptSockData1); ptSockData1 = ptSockData2; } return -1; } PubStrTrim(stPsbxx[PZDYJ].devcname); if(strncmp(stPsbxx[PZDYJ].devcname,"PR50",4)) { if(_create_prtoutfile(ptSockDataHead, strOutFile,strPrompt, strRePrompt) < 0) { PLOG("SockPrint()调用_create_prtoutfile()错"); sSuccFlag = 0; } } else { if(_create_prtauxoutfile(ptSockDataHead,strOutFile, strPrompt, strRePrompt) < 0) { PLOG("SockPrint()调用_create_prtauxoutfile()错"); sSuccFlag = 0; } } /*释放打印数据*/ if(pData != NULL) free(pData); /*释放链表数据*/ if(ptSockDataHead == NULL) return -1; ptSockData1 = ptSockDataHead; for(;ptSockData1 != NULL;) { ptSockData2 = ptSockData1 -> next; free(ptSockData1); ptSockData1 = ptSockData2; } if(sSuccFlag == 1) return 0; else return -1; }/********************************** 函数名称 Pub_SockPrint1 函数功能 套打处理函数(打印数据以串形式提供) 入参 sbxh 设备序号 (凭证打印机型号) strFmtFile 打印格式文件名(不带路径) strData 打印数据串 strOutFile 打印文件名(不带路径) strPrompt 打印提示(可为NULL) RePrtNum 重打提示 <0 无限次重打提示 =0 不提示重打 >0 重打提示次数出参 无 返回 0 成功 -1 失败******************************/int Pub_SockPrint1(int sbxh,char*strFmtFile, char *strData, char *strOutFile, char *strPrompt, int RePrtNum){ char strSysCommand[100]; /*命令串*/ FILE * fp; /*文件指针*/ long lFileSize; /*文件大小*/ char strBuf[200]; /*临时串*/ char strRePrompt[100]; /*重打提示控制信息*/ char *tmpptr, *tmpptr1, *tmpptr2; /*临时指针*/ short sSuccFlag; /*成功标志*/ /*套打位置描述结构(指针)*/ SOCKDATA *ptSockDataHead,*ptSockData, *ptSockData1, *ptSockData2; struct esbxx tSbxx; /*设备信息*/ ptSockData = NULL; if(RePrtNum < 0) /*无限次重打提示*/ strcpy(strRePrompt,"{{{REPNUM3000}}}"); else /*有限次重打提示*/ sprintf(strRePrompt,"{{{REPNUM%ld}}}",RePrtNum); /*读设备信息*/ if(PubGetSbxx(sbxh, &tSbxx) < 0) { PLOG("Pub_SockPrint()调用PubGetSbxx()错"); return -1; } memcpy(&(stPsbxx[PZDYJ]), &tSbxx, sizeof(struct esbxx)); /*读打印格式文件*/ if(_read_fmtdata(strFmtFile, &ptSockDataHead) < 0) { PLOG("Print_Sock()调用_read_fmtdata()错"); return -1; } /*SOCKDATA链表填写打印数据*/ ptSockData = ptSockDataHead; tmpptr = strData; /*如果打印数据第一个字符为'|'则跳过*/ if(*tmpptr == '|') tmpptr ++; sSuccFlag = 1; for(; ptSockData != NULL; ptSockData = ptSockData -> next) { tmpptr1 = strstr(tmpptr, "|"); if(tmpptr1 == NULL) { PubErr(-1,__FILE__,__LINE__,PXYM,"打印数据不够"); sSuccFlag = 0; break; } *tmpptr1 = 0x00; if(strlen(tmpptr) < 100) strcpy(ptSockData -> strData,tmpptr); else { strncpy(ptSockData -> strData, tmpptr,99); ptSockData -> strData[99] = 0x00; } tmpptr = ++tmpptr1; } if(sSuccFlag == 0) { /*释放链表数据*/ if(ptSockDataHead == NULL) return -1; ptSockData1 = ptSockDataHead; for(;ptSockData1 != NULL;) { ptSockData2 = ptSockData1 -> next; free(ptSockData1); ptSockData1 = ptSockData2; } return -1; } PubStrTrim(stPsbxx[PZDYJ].devcname); if(strncmp(stPsbxx[PZDYJ].devcname,"PR50",4)) { if(_create_prtoutfile(ptSockDataHead, strOutFile,strPrompt, strRePrompt) < 0) { PLOG("SockPrint()调用_create_prtoutfile()错"); sSuccFlag = 0; } } else { if(_create_prtauxoutfile(ptSockDataHead,strOutFile, strPrompt, strRePrompt) < 0) { PLOG("SockPrint()调用_create_prtauxoutfile()错"); sSuccFlag = 0; } } /*释放链表数据*/ ptSockData1 = ptSockDataHead; for(;ptSockData1 != NULL;) { ptSockData2 = ptSockData1 -> next; free(ptSockData1); ptSockData1 = ptSockData2; } if(sSuccFlag == 1) return 0; else return -1; }/******************************函数名称 _create_prtoutfile()函数功能 套打生成打印文件函数 入参 ptSockData 打印数据(含控制)链表头 strOutFile 打印数据文件名(无路径) strPrompt 打印提示 strRePrompt 重打控制出参 无 返回 0 成功 -1 失败******************************/static int _create_prtoutfile(SOCKDATA *ptSockData,char *strOutFile, char *strPrompt,char *strRePrompt){ FILE *fp; /*文件指针*/ char strBuf[200]; /*临时串*/ short sOldPosX = 0, sOldPosY = -1; /*打印头位置
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -