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

📄 print.c

📁 linux unix curses 库编程实例
💻 C
📖 第 1 页 / 共 2 页
字号:
 #include <stdio.h>#include <stdlib.h>#include <fcntl.h>#include <curses.h>#include <termio.h>#include <sys/types.h>#include <dirent.h>#include <signal.h>#include <unistd.h>#include "srcc.h"#define FLNM 52           /* 显示文件数(14*4) */ int pg_read(char *);int opdir(char *);FILE *fp;char argv[40];struct {	  int num;       /* 状态位         */          int lx,ly;     /* 屏幕坐标       */          char * s; } ss[FLNM];             /* 文件屏幕镜像   */FILE *fd2;int fd1;char s[80];int inter,lo;int size;WINDOW  *win, *swin;int  locate;int  chioce;/*   对主菜单项进行选择 */int DrawPrint(win,fun)WINDOW *win;int fun;{  int i,j,n,ln;  int keyid,outid;  int ret;  char s1[80],s2[80];  char request[25];  char filenam[40],timestr[13];  char *cp;if ((ftoal-Page*FLNM)<FLNM)   size=ftoal-Page*FLNM;else  size=FLNM;  wstandend(win);  wclear(win);  i=0;inter=4;j=inter;ln=0;for (i=0;i<size;i++)  {    if ((i%4)==0)     {      ln=ln+1;      j=inter;     }    ss[i].ly=ln;    ss[i].lx=j;    ss[i].s=item[i+Page*FLNM].name;    ss[i].num=item[i+Page*FLNM].num;    if (ss[i].num==1) { coloron(win,2,0,1);     	mvwaddstr(win,ln,j-2,"●");	coloroff(win,1);	}    else  { coloron(win,6,0,2);     	mvwaddstr(win,ln,j-2,"○");	coloroff(win,2);	}    mvwaddstr(win,ln,j,ss[i].s);    wrefresh(win);    j=j+inter+14;}boo(win);if ( fun == 1 )	return SUCCESS;lo=0;wstandout(win);mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);wrefresh(win);noecho();i=mgetch(&keyid);while(1)  /*no F3*/{	outid=0;   if ( keyid == 1 )    switch(i){   case 53:   /*down*/	  if (ftoal-(FLNM*(Page+1))>0)		{   Page=Page+1;			if ((ftoal-FLNM*Page)>FLNM)					size=FLNM;		    else				    size=ftoal-Page*FLNM;	  			wstandend(win); 	 		wclear(win);	            refresh();   			i=0;			inter=4;			j=inter;			ln=0;		  			for (i=0;i<size;i++) 	 		{    			if ((i%4)==0)     			{      			ln=ln+1;      			j=inter;     			}    			ss[i].ly=ln;    			ss[i].lx=j;    			ss[i].s=item[i+Page*FLNM].name;  	  			ss[i].num=item[i+Page*FLNM].num;	    		if (ss[i].num==1) {				coloron(win,2,0,1);    	 			mvwaddstr(win,ln,j-2,"●");				coloroff(win,1);				}    			else {				coloron(win,6,0,2);   		  		mvwaddstr(win,ln,j-2,"○");				coloroff(win,2);				}	 	    	mvwaddstr(win,ln,j,ss[i].s);    			wrefresh(win);    			j=j+inter+14;			}			lo=0;			boo(win);			             wstandout(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);		 }		 else		 beep();          break;   case 51:  /*up*/	  if ((Page>0)&&(ftoal>FLNM))	    {	Page=Page-1;			size=FLNM;	  			wstandend(win); 	 		wclear(win);	            refresh();   			i=0;			inter=4;			j=inter;			ln=0;		  			for (i=0;i<size;i++) 	 		{    			if ((i%4)==0)     			{      			ln=ln+1;      			j=inter;     			}    			ss[i].ly=ln;    			ss[i].lx=j;    			ss[i].s=item[i+Page*FLNM].name;  	  			ss[i].num=item[i+Page*FLNM].num;	    		if (ss[i].num==1) {				coloron(win,2,0,1);    	 			mvwaddstr(win,ln,j-2,"●");				coloroff(win,1);				}    			else {				coloron(win,6,0,2);   		  		mvwaddstr(win,ln,j-2,"○");				coloroff(win,2);				}	 	    	mvwaddstr(win,ln,j,ss[i].s);    			wrefresh(win);    			j=j+inter+14;			}			lo=0;			boo(win);          wstandout(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);		}		else		beep();          break;   case 54:   /*right*/          wstandend(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          if(lo==size-1)             lo=0;          else             lo=lo+1;                    wstandout(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          break;   case 52:  /*left*/          wstandend(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          if(lo==0)             lo=size-1;          else             lo--;          wstandout(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          break;   case 50: /*down*/          wstandend(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          if((lo+4)<=size-1)             lo=lo+4;          wstandout(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          break;   case 56:  /* up */          wstandend(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          if((lo-4)>=0)             lo=lo-4;          wstandout(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          break;   case 60:  /* F1 KEY */		  memset(timestr,0,sizeof(timestr));		  DrawInput("请输入时间∶年月日时分",timestr,12);		  Settime(timestr);		  break;		}  else     switch(i){  case TAB   : 			outid=1;			break;  case RETURN:  /* FUN F1 */          j=0;            for (i=0;i<80;i++)            {              if (ss[lo].s[i]!='\0')                if(ss[lo].s[i]==' ')                  j=j+1;            }          strcpy(s2,ss[lo].s+j);   	ShowHelp(" 按[↑],[↓],[←],[→],[PageUp],[PageDown]键查看报表,[q]键退出!");	  sprintf(s1,"%s%s",PrintPath,s2);//	  sprintf(s1,"pg %s",ss[lo].s);          refresh();				pg_read(s1);//		  endwin();//          i=system(s1);		  refresh();           wstandend(win);           j=inter;           ln=0;           for (i=0;i<size;i++)            {            if ((i%4)==0)             {              ln=ln+1;              j=inter;              }	    		if (ss[i].num==1) {				coloron(win,2,0,1);    	 			mvwaddstr(win,ln,j-2,"●");				coloroff(win,1);				}    			else {				coloron(win,6,0,2);   		  		mvwaddstr(win,ln,j-2,"○");				coloroff(win,2);				}              mvwaddstr(win,ln,j,ss[i].s);              wrefresh(win);             j=j+inter+14;             }          wstandout(win);          mvwaddstr(win,ss[lo].ly,ss[lo].lx,ss[lo].s);          wrefresh(win);          break;  case CTRL_E:          if (ss[lo].num==1)          { /* strcpy(item[lo].stcd,"0"); */            item[lo+Page*FLNM].num=0;            ss[lo].num=0;            strcpy(s1,"cancel ");            strcat(s1,item[lo+Page*FLNM].prn);            system(s1);          }          else           {			char stpg[4];			memset(s1,0,sizeof(s1));			memset(stpg,0,sizeof(stpg));			DrawInput("请输入起始页号∶",stpg,3);			memset(request,0,sizeof(request));            item[lo+Page*FLNM].num=1;            ss[lo].num=1;            j=0;            for (i=0;i<80;i++) {              	if (ss[lo].s[i]!='\0')                	if(ss[lo].s[i]==' ')                  		j=j+1;            }	    if ( strtol(stpg,(char **)NULL,10) > 1 ) {			system("prnt=11; export prnt");			sprintf(s1,"pr -t +%s %s%s|lpr -o nobanner",stpg,PrintPath,ss[lo].s+j);	    }	    else {			system("prnt=00; export prnt");			if (strcmp(stpg,"0")==0) {				sprintf(s1,"doscp %s%s a:/%s",PrintPath,ss[lo].s+j,ss[lo].s+j);				system(s1);			} else {			if ((strncmp(ss[lo].s+j,"财政扣帐清单",12))==0)			sprintf(s1,"pr -t -l72 %s%s|lpr -o nobanner",PrintPath,ss[lo].s+j);			else {            			strcpy(s1,"lp -o nobanner ");				strcat(s1,PrintPath);          		  	strcat(s1,ss[lo].s+j);			}			}	     }   	    resetty();            fd1=dup(1);            close(1);            creat("newout",0600);            i=system(s1);                        fd2=fopen("newout","r");            fgets(s,80,fd2);            fclose(fd2);            strcpy(item[lo+Page*FLNM].prn,NULL);            i=strlen(s);			ret=GetWord(s,"is",item[lo+Page*FLNM].prn);			fprintf(fp,"print request = %s \n",item[lo+Page*FLNM].prn);			ret=GetWord(strchr(s,'-'),"\0",request);			fprintf(fp,"request = %s len = %d\n",request,strlen(request));			cp=request;            strcpy(item[lo+Page*FLNM].stcd,++cp); /* 打印队列号 */			fprintf(fp,"request id = %s \n",item[lo+Page*FLNM].stcd);			fflush(fp);            close(1);            dup(fd1);            close(fd1);           }            	  endwin();          refresh();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -