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

📄 print.c

📁 一个在linux+MiniGui的彩票销售终端程序,基于framebuffer的程序.
💻 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 + -