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

📄 pub_prtlib.c

📁 本原码主要是综合业务系统里面的一个打印程序
💻 C
📖 第 1 页 / 共 3 页
字号:
#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 + -