📄 print.c
字号:
//#include <process.h>
#include <stdlib.h>
//#include <dos.h>
#include <stdio.h>
//#include <conio.h>
//#include <bios.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <./asm/io.h>
void pt(char a);
mark()
{
int i,k,count0,count1,pos,len;
char u[2],exe[2],num1[2],numv[2],date[9],time[9];
unsigned char esc[2],CR[2],fs[2],gs[2],LF[2];
static char temp[80];
static char rn[4]={0x0a,0x0d};
static char str1[4]={0x1b,0x40};
static char str2[6]={0x1b,0x45,0x01};
static char str3[6]={0x1b,0x61,0x01};
static char str4[6]={0x1c,0x21,0x04};
static char str7[6]={0x1b,0x45,0x00};//不加重
static char str9[6]={0x1b,0x21,0x21};//数字加大
static char str01[25]="........................";
static char str18[4]={0x1c,0x26};
static char str21[6]={0x1d,0x21,0x22};
static char str11[6]={0x1b,0x61,0x00};
static char str12[6]={0x1c,0x21,0x00};
static char str22[8]={0x1c,0x53,0x03,0x03};
static char str23[6]={0x1b,0x33,0x00};
static char strgsv[8]={0x1d,0x56,0x42,0x00};
//设置打印命令
esc[0]=0x1b; //
esc[1]='\0'; //
CR[0]=0x0d; //
LF[0]=0x0a;
fs[0]=0x1c;
gs[0]=0x1d;
CR[1]='\0';fs[1]='\0';gs[1]='\0';LF[1]='\0';
exe[0]=0x21;
exe[1]='\0';
num1[0]=0x04;
num1[1]='\0';
numv[0]=0x42;
numv[1]='\0';
//clrscr(); // 清除文本模式窗口 <conio.h>
//初始化打印机
count0=strlen(str1); //统计字符串中字符个数 <string.h>
for (i=0;i<=count0;i++)
do
pt(str1[i]); // str1[4]={0x1b,0x40};
//initialize printer
while (!((inb(0x379)&0x80)==128)); // inp(portid): 从硬件端口读一个字节,得到读取的字节
count1=strlen(str3);//center
for (i=0;i<=count1;i++)
do
pt(str3[i]);
while (!((inb(0x379)&0x80)==128));
/*count1=strlen(str2);//emphasize mode
for (i=0;i<=count1;i++)
do
pt(str2[i]);
while (!((inp(0x379)&0x80)==128));
/*count1=strlen(str23);//select line size
for (i=0;i<=count1;i++)
do
pt(str23[i]);
while (!((inp(0x379)&0x80)==128));
*/
count1=strlen(str18);// kanji mode!
for (i=0;i<=count1;i++)
do
pt(str18[i]);
while (!((inb(0x379)&0x80)==128));
count1=strlen(str21);//select char size
for (i=0;i<=count1;i++)
do
pt(str21[i]);
while (!((inb(0x379)&0x80)==128));
strcpy(temp,str01); //str6[50]="12345678901234567890 12345678";
strcat(temp,rn);
count1=strlen(temp);
for (i=0;i<=count1;i++)
do
pt(temp[i]);
while (!((inb(0x379)&0x80)==128));
// 切纸
count1=strlen(strgsv);
for (i=0;i<=count1;i++)
do
pt(strgsv[i]);
while (!((inb(0x379)&0x80)==128));
return;
}
logo()
{
int i,k,count0,count1,pos,len;
char u[2],exe[2],num1[2],numv[2],date[9],time[9];
unsigned char esc[2],CR[2],fs[2],gs[2],LF[2];
static char temp[80];
static char rn[4]={0x0a,0x0d};
static char str1[4]={0x1b,0x40};
static char str2[6]={0x1b,0x45,0x01};
static char str3[6]={0x1b,0x61,0x01};
static char str4[6]={0x1c,0x21,0x04};
static char str7[6]={0x1b,0x45,0x00};//不加重
static char str9[6]={0x1b,0x21,0x21};//数字加大
char str17[50]="深圳市雄震科技有限公司 www.eigec.com";
static char str18[4]={0x1c,0x26};
static char str21[6]={0x1c,0x21,0x0c};
static char str11[6]={0x1b,0x61,0x00};
static char str12[6]={0x1c,0x21,0x00};
static char str22[8]={0x1c,0x53,0x03,0x03};
static char str23[6]={0x1b,0x33,0x00};
//设置打印命令
esc[0]=0x1b; //
esc[1]='\0'; //
CR[0]=0x0d; //
LF[0]=0x0a;
fs[0]=0x1c;
gs[0]=0x1d;
CR[1]='\0';fs[1]='\0';gs[1]='\0';LF[1]='\0';
exe[0]=0x21;
exe[1]='\0';
num1[0]=0x04;
num1[1]='\0';
numv[0]=0x42;
numv[1]='\0';
//clrscr(); // 清除文本模式窗口 <conio.h>
//初始化打印机
count0=strlen(str1); //统计字符串中字符个数 <string.h>
for (i=0;i<=count0;i++)
do
pt(str1[i]); // str1[4]={0x1b,0x40};
//initialize printer
while (!((inb(0x379)&0x80)==128)); // inp(portid): 从硬件端口读一个字节,得到读取的字节
// 按照位 与
strcpy(temp,str3); //字符串拷贝 <string.h>
strcat(temp,str2); //
count1=strlen(temp);
for (i=0;i<=count1;i++)
do
pt(temp[i]);
while (!((inb(0x379)&0x80)==128));
count1=strlen(str3); //居左
for (i=0;i<=count1;i++)
do
pt(str3[i]);
while (!((inb(0x379)&0x80)==128));
strcpy(temp,str12);//恢复缺省字体
count1=strlen(temp);
for (i=0;i<=count1;i++)
do
pt(temp[i]);
while (!((inb(0x379)&0x80)==128));
count1=strlen(str7);//字体不加重
for (i=0;i<=count1;i++)
do
pt(str7[i]);
while (!((inb(0x379)&0x80)==128));
strcpy(temp,str17); //str6[50]="12345678901234567890 12345678";
strcat(temp,rn);
count1=strlen(temp);
for (i=0;i<=count1;i++)
do
pt(temp[i]);
while (!((inb(0x379)&0x80)==128));
return;
}
static char* tz_time (char* buff,int money)
{
time_t t;
struct tm * tm;
time (&t);
tm = localtime (&t);
sprintf (buff,"合计: %02d 元 %d/%02d/%02d %02d:%02d:%02d",
money,tm->tm_year + 1900, tm->tm_mon + 1, tm->tm_mday,
tm->tm_hour, tm->tm_min, tm->tm_sec);
// return buff;
}
int printstr(unsigned char *pstr,int money)
{
int i,k,count0,count1,pos,len;
char u[2],exe[2],num1[2],numv[2],date[9],time[9];
unsigned char esc[2],CR[2],fs[2],gs[2],LF[2];
char temp[200];
static char rn[4]={0x0a,0x0d};
static char str1[4]={0x1b,0x40};
static char str2[6]={0x1b,0x45,0x01};
static char str3[6]={0x1b,0x61,0x01};
static char str4[6]={0x1c,0x21,0x04};
static char str7[6]={0x1b,0x45,0x00};//不加重
static char str9[6]={0x1b,0x21,0x21};//数字加大
static char str18[6]={0x1b,0x21,0x00};
static char str11[6]={0x1b,0x61,0x00};
char buff[20];
static char str12[6]={0x1c,0x21,0x00};
static char str5[30]="体育彩票<49选7>";
static char str6[50]="12345678900000000000 Eigec 00000000";
static char str8[50]="演示票:00000 00001期 2003/12/00开奖";
char str10[20];
char str17[50]="雄震科技有限公司 www.eigec.com";
char systime[20]="\0";
// static char strgsv[8]={0x1d,0x56,0x42,0x00};
unsigned char *ptr=NULL, c=';', *tmstr1, *tmstr2;
tz_time(buff,money);
strcpy(str10,buff);
/*_strdate(date);
_strtime(time);
strcpy(systime,date);
strcat(systime," ");
strcat(systime,time);
*/
// strcat(str10,systime);
// strcat(str10,“2002-09-13 13:28:25”); //str10: 合计:10元 2002/09/13 13:28:25
//设置打印命令
esc[0]=0x1b; //
esc[1]='\0'; //
CR[0]=0x0d; //
LF[0]=0x0a;
fs[0]=0x1c;
gs[0]=0x1d;
CR[1]='\0';fs[1]='\0';gs[1]='\0';LF[1]='\0';
exe[0]=0x21;
exe[1]='\0';
num1[0]=0x04;
num1[1]='\0';
numv[0]=0x42;
numv[1]='\0';
//clrscr(); // 清除文本模式窗口 <conio.h>
//初始化打印机
count0=strlen(str1); //统计字符串中字符个数 <string.h>
for (i=0;i<=count0;i++)
do
pt(str1[i]); // str1[4]={0x1b,0x40};
//initialize printer
while (!((inb(0x379)&0x80)==128)); // inp(portid): 从硬件端口读一个字节,得到读取的字节
// 按照位 与
strcpy(temp,str3); //字符串拷贝 <string.h>
strcat(temp,str2); //
strcat(temp,str4);
strcat(temp,str5);
strcat(temp,rn);
count1=strlen(temp);
for (i=0;i<=count1;i++)
do
pt(temp[i]);
while (!((inb(0x379)&0x80)==128));
count1=strlen(str11); //居左
for (i=0;i<=count1;i++)
do
pt(str11[i]);
while (!((inb(0x379)&0x80)==128));
strcpy(temp,str12);//恢复缺省字体
count1=strlen(temp);
for (i=0;i<=count1;i++)
do
pt(temp[i]);
while (!((inb(0x379)&0x80)==128));
count1=strlen(str7);//字体不加重
for (i=0;i<=count1;i++)
do
pt(str7[i]);
while (!((inb(0x379)&0x80)==128));
strcpy(temp,str6); //str6[50]="12345678901234567890 12345678";
strcat(temp,rn);
strcat(temp,str8); //str8[50]="销售点:99998 01234期 2003/12/31开奖";
strcat(temp,rn);
strcat(temp,str10); //str10[50]="合计: 10元 ";
strcat(temp,rn);
count1=strlen(temp);
for (i=0;i<=count1;i++)
do
pt(temp[i]);
while (!((inb(0x379)&0x80)==128));
count1=strlen(str4);//字体变大
for (i=0;i<=count1;i++)
do
pt(str4[i]);
while (!((inb(0x379)&0x80)==128));
count1=strlen(str9);//数字加大
for (i=0;i<=count1;i++)
do
pt(str9[i]);
while (!((inb(0x379)&0x80)==128));
//打印号码
/* while (ptr=strchr(pstr,c)) //strchr()在一个串中查找给定字符的第一个匹配之处\ 返回该位置指针
//找出pstr中的字符串中第一次出现字符 ; 的位置,返回该位置的指针。
{
pos=ptr-pstr;
len=strlen(pstr)-pos-1; // 得到号码的长度
strncpy(tmstr2,pstr+pos+1,len); //串拷贝 <string.h> 送;后号码到tmstr2
strncpy(tmstr1,pstr,pos); // 送 ; 号前的数据到tmstr1
strcat(tmstr1,rn);
strcpy(pstr,tmstr1);
strcat(pstr,tmstr2);
ptr=NULL;
}
*/
strcpy(temp,str3);
strcat(temp,str2);
strcat(temp,pstr);
strcat(temp,rn);
strcat(temp,rn);
strcat(temp,rn);
strcat(temp,rn);
count1=strlen(temp);
for (i=0;i<=count1;i++)
do
pt(temp[i]);
while (!((inb(0x379)&0x80)==128));
return 0;
}
void pt(char a)
{
int k,j,i;
outb(a,0x378); //输出一个字节到硬件端口 <conio.h>
outb(0x0d,0x37a);
outb(0x0c,0x37a);
for(i=1000;i>0;i--)
for(j=100;j>0;j--)
k=10;
//延迟一毫秒 <dos.h>
return;
}
void PrintPaper(unsigned char *pstr,int * money)
{
iopl(3);
printstr(pstr,money);
logo();
mark();
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -