?? 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 + -