|
DataMuseum.dkPresents historical artifacts from the history of: CP/M |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about CP/M Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - download
Length: 2560 (0xa00) Types: TextFile Names: »LPR.C«
└─⟦23f778bf6⟧ Bits:30005378 BDS C v1.46 & Pascal/MT+ v5.5 (Callan format) └─ ⟦this⟧ »LPR.C« └─⟦4ada80662⟧ Bits:30005446 Pascal/MT+ v5.5 & XREF & BDS C v1.46 └─ ⟦this⟧ »LPR.C«
/* Line printer formatter Written by Leor Zolman May 28, 1980 First prints all files named on the command line, and then asks for names of more files to print until a null line is typed. Control-Q aborts current printing and goes to next file. Paper should be positioned ready to print on the first page; each file is always printed in an even number of pages so that new files always start on the same phase of fan-fold paper. Tabs are expanded into spaces. */ #include "bdscio.h" #define FF 0x0c /* formfeed character, or zero if not supported */ #define PGLEN 66 /* lines per lineprinter page */ int colno, linesleft; main(argc,argv) char **argv; æ int i, pgno, fd; char dateÆ30Å, linebufÆ135Å; /* date and line buffers */ char fnbufÆ30Å, *fname; /* filename buffer & ptr */ char ibufÆBUFSIZÅ; /* buffered input buffer */ char *gets(); pgno = colno = 0; linesleft = PGLEN; printf("What is today's date? "); gets(date); while (1) æ if (argc-1) æ fname = *++argv; argc--; å else æ printf("ØnEnter file to print, or CR if done: "); if (!*(fname = gets(fnbuf))) break; å if ((fd = fopen(fname,ibuf)) == ERROR) æ printf("Can't open %sØn",fname); continue; å else printf("ØnPrinting %-13s",fname); for (pgno = 1; ; pgno++) æ putchar('*'); sprintf(linebuf,"ØnØn%28s%-13s%5s%-3d%20sØnØnØn", "file: ",fname,"page ",pgno,date); linepr(linebuf); loop: if (!fgets(linebuf,ibuf)) break; if (kbhit() && getchar() == 0x11) break; if (linepr(linebuf)) continue; if (linesleft > 2) goto loop; formfeed(); å formfeed(); if (pgno % 2) formfeed(); fabort(fd); å å /* Print a line of text out on the list device, and return true if a formfeed was encountered in the text. */ linepr(string) char *string; æ char c, ffflag; ffflag = 0; while (c = *string++) switch (c) æ case FF: ffflag = 1; break; case 'Øn': putlpr('Ør'); putlpr('Øn'); colno = 0; linesleft--; break; case 'Øt': do æ putlpr(' '); colno++; å while (colno % 8); break; default: putlpr(c); colno++; å if (ffflag) formfeed(); return ffflag; å putlpr(c) char c; æ bios(5,c); å formfeed() æ if (FF) putlpr(FF); else while (linesleft--) putlpr('Øn'); linesleft = PGLEN; å «eof»