home *** CD-ROM | disk | FTP | other *** search
/ CP/M / CPM_CDROM.iso / lambda / soundpot / p / ut-c.lbr / LPR.CZ / LPR.C
Encoding:
C/C++ Source or Header  |  1993-10-25  |  2.1 KB  |  85 lines

  1. /* lpr.c -- UTOOL. Send stdin to printer
  2.  
  3.      author: David H. Wolen
  4.      last change: 12/1/82
  5.  
  6.      usage:    prog |lpr -lnp 5 55
  7.                lpr <file
  8.  
  9.      options:  -l  left margin (default 8)
  10.                -n  lines per page (default 50)
  11.                -p  pause after each page. <cr> to
  12.                    resume, anything else to quit.
  13.                    (default false)
  14.  
  15.  
  16.      input:    STDIN
  17.      output:   printer
  18.  
  19.      notes:    (1)  form feed after each page and at eof
  20.                (2)  if both -l and -n are used, margin
  21.                     value must preceed page size value.
  22.  
  23.  
  24.      linkage:  a:clink lpr -f dio -ca (uses deff3.crl)
  25. */
  26.  
  27. #include "a:bdscio.h"
  28. #include "dio.h"
  29.  
  30. #define  STDIN  0
  31. #define  STDLST 2
  32.  
  33. main(argc,argv)
  34. int  argc;
  35. char *argv[];
  36. {
  37.      int  margflg, lmarg, psflg, psize, pause, lcount, i;
  38.      char line[MAXLINE], *s;
  39.  
  40.      dioinit(&argc,argv);
  41.      margflg=psflg=pause=FALSE;
  42.      lmarg=8;
  43.      psize=50;
  44.  
  45.      while(--argc > 0 && (*++argv)[0]=='-')
  46.           for(s=argv[0]+1; *s != '\0'; s++)
  47.                switch(*s)
  48.                     {case 'L':  margflg=TRUE; break;
  49.                     case 'N':   psflg=TRUE;  break;
  50.                     case 'P':   pause=TRUE;  break;
  51.                     default:    error("lpr: invalid option");
  52.                     }
  53.  
  54.      if(margflg)
  55.           {if( (lmarg=atoi(*argv++)) < 0)
  56.                error("lpr: left margin < 0");
  57.           }
  58.  
  59.      if(psflg)
  60.           {if( (psize=atoi(*argv)) < 1)
  61.                error("lpr: page size < 1");
  62.           }
  63.  
  64.      lcount=1;
  65.  
  66.      while(fgets(line,STDIN))
  67.           {for(i=0; i<lmarg; i++)  fputs(" ",STDLST);
  68.           fputs(line,STDLST);
  69.           if(++lcount <= psize)  continue;
  70.           else
  71.                {fputs("\f",STDLST);
  72.                lcount=1;
  73.                if(pause)
  74.                     {if(bdos(1)=='\r')  continue;
  75.                     else
  76.                          break;
  77.                     }
  78.                }
  79.           }
  80.  
  81.      if(lcount > 1)  fputs("\f",STDLST);
  82.  
  83.      dioflush();
  84. }
  85.