给LQ-150K打印机增加换行换页功能 傅叔平 1995-03-10 程序一是换页程序,程序二是换行程序。它们用C语言写成,在TurboC 2.0和Borland C++ 3.1中编译通过。在DOS环境中的使用方法如下: 换页:在系统提示符下键入命令FF; 换行:在系统提示符下键入命令LF[n]。这里的n是可选参数,缺省时换一行,选用时换n行,例如,要打印机换三行(走纸三行)则键入命令LF3。 如要在Windows环境下使用,可在“文件管理器”窗口中双击FF.EXE或LF.EXE文件名,但由于换行程序有命令行参数,所以最好用PIF编辑器编辑一个非Windows应用程序的程序信息文件并建立相应的图标(具体方法请参见作者的文章《在Windows3.1中运行非Windows应用程序的四种方法》,软件报,94年2期)。 本文用的方法是直接向打印机端口传送数据,绕过了BIOS的打印中断调用,因此这两个程序独立于任何系统,可在DOS、Windows及各种汉字平台中使用。如果将这两个程序作为C函数在其它汉字应用软件中应用,也解决了应用软件在汉字环境下使打印机换行换页的问题。 本文的程序也适用于EPSON LQ-100、LQ-1600K、LQ-1500等指令兼容的打印机。 实际上,本文的方法可用于一切打印机操作,如设定纸长、设定字型、退纸等。这只要按打印机的说明书将相应的指令序列用本文程序的方法依次送到打印机端口即可。另外,为使用更加方便,可将程序驻留内存,使用时用热键弹出。限于篇幅,这些内容作者将另文叙述。作者已将操作打印机的诸多方面集成于一个软件中。不熟悉C语言的读者可与作者联系。 程序一 /* SOURCE FILENAME:FF.C */ #include Void printer_out(int prndata) { int prnout_data,prnin_mode,prnout_ctrl; prnout_data=peek(0x40,0x08); prnin_mode=prnuot_data+1; prnout_ctrl=prnout_data+2; outportb(prnout_data,prndata); while(!(inportb(prnin_mode) & 0x80)) ; /* printer is busy */ outportb(prnout_ctrl,0x1f); outportb(prnout_ctrl,0x1e); } void main(void) { printer_out(0x0c); } 程序二 /* SOURCE FILENAME:LF.C */ #include void printer_out(int prndata) { int prnout_data,prnin_mode,prnout_ctrl; prnout_data=peek(0x40,0x08); prnin_mode=prnout_data+1 prnout_ctrl=prnout_data+2; outportb(prnout_data,prndata); while(!(inportb(prnin_mode) & 0x80)) ; /* printer is busy */ outportb(prnout_ctrl,0x1f); outportb(prnout_ctrl,0x1e); } void main(int argc,char *argv[]) { int i,n; if(argc>1) n=atoi(argv[1]); else n=1; for(i=1;i<=n;i++)printer_out(0x0a); } (傅叔平)