?? pub_prtlib.c
字號:
#define EXTERNEXEC SQL include "acccore.h";EXEC SQL include "pub.h";EXEC SQL include "dbbuf.h";EXEC SQL include "accnet.h";#define PZDYJ 0 /*憑證打印機*/#define BBDYJ 1 /*報表打印機*/static struct esbxx stPsbxx[2];/***外部使用函數*/int PubPrint(struct accjz *); /*打印主控函數*/int Pub_SockPrint(int, char*, char *, char *, char *, int); /*套打主控函數*/int Pub_SockPrint1(int, char*, char *, char *, char *, int); /*套打主控函數*/int Pub_TablePrint(int, char *, char *, char *, int, int, int, int,\ int, int, char*, int, char*, int);/*報表打印主控函數*/int Pub_TspzPrint(int, char*, char*, char*, int, char*, int);/*特殊憑證打印*/int Pub_PrtHead(FILE *,char *,int); /*寫打印前臺流程控制信息*//***內部使用函數*/static int _read_prtdata(char *, char **); /*讀打印數據函數*/ static int _read_fmtdata(char *, SOCKDATA **); /*讀格式數據函數*/ static void _getprtdata(char *,char *, long *);/*解析打印數據函數*//*生成套打打印文件 */static int _create_prtoutfile(SOCKDATA *, char *,char*,char*);/*生成套打串口打印文件*/static int _create_prtauxoutfile(SOCKDATA*,char*,char*,char*);static void _adjust_rowlen(char, FILE *); /*調整行距為 n/120 inch*/static int _sock_deal(struct edyrw ,long); /*套打打印處理*/static int _table_deal(struct edyrw ,long); /*報表打印處理*/static int _pzdy_deal(struct edyrw ,long); /*憑證打印處理*//*************************函數名稱 PubPrint()函數功能 后臺打印主控流程入參 ptBuf 報文結構出參 ptBuf 報文結構返回 0 成功 其他 失敗**************************/int PubPrint(struct accjz *ptBuf){ EXEC SQL BEGIN DECLARE SECTION; struct edyrw tDyrw; /*打印任務表結構*/ char strJym[7]; /*交易碼*/ char strJygn[2]; /*交易功能*/ EXEC SQL END DECLARE SECTION; char strDataFile[100]; /*打印數據文件名*/ char strOutFile[100]; /*打印輸出文件名*/ PubStrTrim(ptBuf -> p_jym); strcpy(strJym, ptBuf -> p_jym); /*交易簡碼*/ PubStrncpy(strJygn,ptBuf ->p_jygn,1); /*交易功能*/ EXEC SQL declare DYRW_cur cursor for select * into :tDyrw from edyrw where jym = :strJym and jygn = :strJygn order by rwh; EXEC SQL open DYRW_cur; if(sqlca.sqlcode != 0) { PubErr(-1,__FILE__,__LINE__,PXYM,"打開DYRW_cur錯[sqlcode=%d]", sqlca.sqlcode); return -1; } for(;;) { EXEC SQL fetch DYRW_cur; if(sqlca.sqlcode != 0) { if(sqlca.sqlcode == 100) { EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; break; } EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; PubErr(-1,__FILE__,__LINE__,PXYM,"讀表edyrw錯[sqlcode=%d]", sqlca.sqlcode); return -1; } if(tDyrw.dylx == 0) /*套打任務*/ { if(_sock_deal(tDyrw ,ptBuf -> p_zjls) < 0) { PLOG("PubPrint()調用_sock_deal()錯"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } else if(tDyrw.dylx == 1) /*報表打印任務*/ { if(_table_deal(tDyrw, ptBuf -> p_zjls) < 0) { PLOG("PubPrint()調用_table_deal()錯"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } else if( tDyrw.dylx == 2) /*憑證打印*/ { if(_pzdy_deal(tDyrw, ptBuf -> p_zjls) < 0) { PLOG("PubPrint()調用_table_deal()錯"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } else if( tDyrw.dylx == 3) /*交易已生成打印文件*/ { char filename[1024], filename1[1024], buf[4096]; FILE *fp, *fp1; PubStrTrim(pTrInfo -> xcwj); PubStrTrim(tDyrw.sjwjm); PubStrTrim(tDyrw.dywjm); if(strlen(tDyrw.dywjm) != 0) sprintf(strOutFile,"%s%-6.6ld", tDyrw.dywjm, \ ptBuf -> p_zjls); else { if(strlen(tDyrw.sjwjm) != 0) { sprintf(strOutFile,"%s%-6.6ld", tDyrw.sjwjm,\ ptBuf -> p_zjls); sprintf(tDyrw.dywjm, tDyrw.sjwjm); } else { PubErr(-1,__FILE__,__LINE__,PXYM,\ "打印任務表中數據文件名和打印輸出文件名不能都空"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } sprintf ( filename, "%s/%s", getenv("PRINTERDIR"), strOutFile ); sprintf ( filename1, "%s.prn", filename ); strcat ( strOutFile, ".prn" ); if ( (fp = fopen( filename, "r" )) == NULL ) { continue; } if ( (fp1 = fopen( filename1, "w" )) == NULL ) { PubErr(-1,__FILE__,__LINE__,PXYM, "打開文件錯filename=%s",filename1); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } PubStrTrim(tDyrw.dyts); if(strlen(tDyrw.dyts) == 0) { if(Pub_PrtHead(fp1, NULL, tDyrw.cdkz) < 0) { PLOG("Pub_TspzPrint()調用Pub_PtrHead()錯"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } else { if(Pub_PrtHead(fp1, tDyrw.dyts, tDyrw.cdkz) < 0) { PLOG("Pub_TspzPrint()調用Pub_PtrHead()錯"); EXEC SQL close DYRW_cur; EXEC SQL free DYRW_cur; return -1; } } while ( fgets(buf, 4096, fp) ) fprintf(fp1, "%s", buf); fclose(fp); fclose(fp1); /*下傳文件*/ if(strlen(pTrInfo -> xcwj) == 0) strcpy(pTrInfo -> xcwj, strOutFile); else { strcat(pTrInfo -> xcwj, "+"); strcat(pTrInfo -> xcwj, strOutFile); } } } return 0;} /*************************函數名稱 _sock_print()函數功能 后臺打印 套打處理入參 tDyrw 打印任務結構 lZjls 交易流水號 出參 無 返回 0 成功 其他 失敗**************************/static int _sock_deal(struct edyrw tDyrw ,long lZjls){ FILE * fp; char strDataFile[200]; char strOutFile[200]; char strFmtFile[200]; int iRet; PubStrTrim(tDyrw.sjwjm); PubStrTrim(tDyrw.gswjm); PubStrTrim(tDyrw.dywjm); PubStrTrim(tDyrw.dyts); /*判別打印數據文件是否存在*/ sprintf(strDataFile,"%s/%s%-6.6ld",getenv("PRINTERDIR"),tDyrw.sjwjm,lZjls); if((fp = fopen(strDataFile, "r")) == NULL) { if(errno == 2) { PubErr(0,__FILE__,__LINE__,"000", "打印數據文件[%s]不存在", strDataFile); return 0; } else { PubErr(-1,__FILE__,__LINE__,PXYM,"讀打開文件[%s]錯[%s]",\ strDataFile, strerror(errno)); return -1; } } fclose(fp); /*生成打印文件*/ sprintf(strDataFile,"%s%-6.6ld", tDyrw.sjwjm, lZjls); sprintf(strFmtFile,"%s", tDyrw.gswjm); if(strlen(tDyrw.dywjm) == 0) /*未配置打印文件名*/ sprintf(strOutFile,"%s%-6.6ld.prn", tDyrw.sjwjm, lZjls); else sprintf(strOutFile,"%s%-6.6ld.prn", tDyrw.dywjm, lZjls); if(strlen(tDyrw.dyts) == 0) /*沒有打印提示*/ iRet = Pub_SockPrint(pTrInfo -> pzdyjxh, strFmtFile, \ strDataFile, strOutFile, NULL, tDyrw.cdkz); else iRet = Pub_SockPrint(pTrInfo -> pzdyjxh, strFmtFile, \ strDataFile, strOutFile, tDyrw.dyts, tDyrw.cdkz); if(iRet < 0) { PLOG("_sock_deal()調用Pub_SockPrint()錯"); return -1; } /*下傳文件*/ if(strlen(pTrInfo -> xcwj) == 0) strcpy(pTrInfo -> xcwj, strOutFile); else { strcat(pTrInfo -> xcwj, "+"); strcat(pTrInfo -> xcwj, strOutFile); } return 0;} /*************************函數名稱 _table_print()函數功能 后臺打印 報表打印處理入參 tDyrw 打印任務結構 lZjls 交易流水號 出參 無 返回 0 成功 其他 失敗**************************/static int _table_deal(struct edyrw tDyrw ,long lZjls){ FILE * fp; char strDataFile[200]; char strOutFile[200]; char strFmtFile[200]; int TBLNUM_col; /*每頁橫向表數*/ int TBLNUM_row; /*每頁表數*/ int PageNum; /*表內每頁行數*/ int LineFlag; /*橫線標志*/ int TBL_Space; /*表間換行數*/ int VarFlag; /*替換標志*/ char sYscs[32]; /*壓縮參數*/ char *tmpptr, *tmpptr1; short sLeftMargin = 0; int iRet; PubStrTrim(tDyrw.sjwjm); PubStrTrim(tDyrw.gswjm); PubStrTrim(tDyrw.dywjm); PubStrTrim(tDyrw.dyts); /*判別打印數據文件是否存在*/ sprintf(strDataFile,"%s/%s%-6.6ld",getenv("PRINTERDIR"),tDyrw.sjwjm,lZjls); if((fp = fopen(strDataFile, "r")) == NULL) { if(errno == 2) { PubErr(0,__FILE__,__LINE__,"000", "打印數據文件[%s]不存在", strDataFile); return 0; } else { PubErr(-1,__FILE__,__LINE__,PXYM,"讀打開文件[%s]錯[%s]",\ strDataFile, strerror(errno)); return -1; } } fclose(fp); /*生成打印文件*/ sprintf(strDataFile,"%s%-6.6ld", tDyrw.sjwjm, lZjls); sprintf(strFmtFile,"%s.gs", tDyrw.gswjm); if(strlen(tDyrw.dywjm) == 0) /*未配置打印文件名*/ sprintf(strOutFile,"%s%-6.6ld.prn", tDyrw.sjwjm, lZjls); else sprintf(strOutFile,"%s%-6.6ld.prn", tDyrw.dywjm, lZjls); /*準備打印參數*/ PubStrTrim(tDyrw.dycs); TBLNUM_col = atoi(tDyrw.dycs); tmpptr = strstr(tDyrw.dycs,"|"); if(tmpptr == NULL) { PubErr(-1,__FILE__,__LINE__,PXYM,"報表打印dycs格式錯"); return -1; } tmpptr ++; TBLNUM_row = atoi(tmpptr); tmpptr = strstr(tmpptr,"|"); if(tmpptr == NULL) { PubErr(-1,__FILE__,__LINE__,PXYM,"報表打印dycs格式錯"); return -1; } tmpptr ++; PageNum = atoi(tmpptr); tmpptr = strstr(tmpptr,"|"); if(tmpptr == NULL)
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -