home *** CD-ROM | disk | FTP | other *** search
/ Microsoft Programmer's Library 1.3 / Microsoft-Programers-Library-v1.3.iso / sampcode / prof_c / 09print / pr.c < prev    next >
Encoding:
C/C++ Source or Header  |  1988-08-11  |  2.2 KB  |  105 lines

  1. /*
  2.  *    pr -- file printer
  3.  */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <dos.h>
  8. #include <local\std.h>
  9. #include "print.h"
  10.  
  11. char Pagelist[MAXLINE];
  12.  
  13. main(argc, argv)
  14. int argc;
  15. char **argv;
  16. {
  17.     int ch;
  18.     BOOLEAN errflag;
  19.     extern PRINT pcnf;
  20.     static char pgm[MAXNAME + 1] = { "pr" };
  21.  
  22.     extern char *getpname(char *, char *);
  23.     extern int getopt(int, char **, char *);
  24.     extern char *optarg;
  25.     extern int optind, opterr;
  26.     extern int pr_gcnf(char *);
  27.     extern pr_file(char *, int, char **);
  28.     extern void pr_help(char *);
  29.     extern void fixtabs(int);
  30.     extern int setprnt();
  31.  
  32.     if (_osmajor >= 3)
  33.         getpname(*argv, pgm);
  34.  
  35.     /* do configuration */
  36.     if (pr_gcnf(pgm) != 0) {
  37.         fprintf(stderr, "%s: Configuration error", pgm);
  38.         exit(2);
  39.     }
  40.     if (setprnt() == -1) {
  41.         fprintf(stderr, "%s: Bad printer configuration\n", pgm);
  42.         exit(1);
  43.     }
  44.     fixtabs(pcnf.p_tabint);
  45.  
  46.     /* process command-line arguments */
  47.     while ((ch = getopt(argc, argv, "efgh:l:no:ps:w:")) != EOF) {
  48.         switch (ch) {
  49.                 case 'e':
  50.             /* force "Epson-compatible " printer mode */
  51.             pcnf.p_mode = 1;
  52.             break;
  53.         case 'f':
  54.             /* use formfeed to eject a page */
  55.             pcnf.p_ff = 1;
  56.             break;
  57.                 case 'g':
  58.             /* force "generic" printer mode */
  59.             pcnf.p_mode = 0;
  60.             break;
  61.         case 'h':
  62.             /* use specified header */
  63.             strcpy(pcnf.p_hdr, optarg);
  64.             break;
  65.         case 'l':
  66.             /* set lines per page */
  67.             pcnf.p_len = atoi(optarg);
  68.             break;
  69.                 case 'n':
  70.             /* enable line numbering */
  71.             pcnf.p_lnum = 1;
  72.                         break;
  73.                 case 'o':
  74.             /* set left margin */
  75.             pcnf.p_lmarg = atoi(optarg);
  76.             break;
  77.                 case 'p':
  78.             /* preview output on screen */
  79.             strcpy(pcnf.p_dest, "");
  80.             break;
  81.                 case 's':
  82.             /* output selected pages */
  83.             strcpy(Pagelist, optarg);
  84.             break;
  85.                 case 'w':
  86.                         /* set page width in columns */
  87.             pcnf.p_wid = atoi(optarg);
  88.             break;
  89.         case '?':
  90.             /* unknown option */
  91.             errflag = TRUE;
  92.             break;
  93.         }
  94.     }
  95.     if (errflag == TRUE) {
  96.         pr_help(pgm);
  97.         exit(3);
  98.     }
  99.  
  100.     /* print the files */
  101.     pr_file(pgm, argc - optind, argv += optind);
  102.  
  103.     exit(0);
  104. }
  105.