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

📄 pub_prtlib.c

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