home *** CD-ROM | disk | FTP | other *** search
/ Shareware Overload / ShartewareOverload.cdr / progm / cpgms.zip / CENTER.C < prev    next >
C/C++ Source or Header  |  1985-11-17  |  3KB  |  132 lines

  1. /*
  2.       This program centers all input lines on a given line length.
  3.         */
  4.  
  5. #include "stdio.h"
  6. #define EOF 0x1a
  7. #define ERROR 0
  8. #define CPMEOF 0X1A
  9. #define NULL 0
  10. #define EOS  0
  11. #define DeSmet 1
  12.  
  13. char    *documentation[] = {
  14. "center centers input lines.",
  15. "   center [flags] [file] [<file] [>file]",
  16. "",
  17. "Flags are single characters preceeded by '-':",
  18. "   l<n>    use a line length of <n> (default is 80).",
  19. "",
  20. "Input is from the given file or stdin if no file is named.",
  21. "Output is to stdout.  To print add >PRN: to your command.",
  22. 0 };
  23.  
  24. int debug = 0;
  25. int lflag = 80;
  26.  
  27. main(argc, argv)
  28. char *argv[];
  29. {
  30.    register char   *p;
  31.    register int    c, i;
  32.     int nfile;
  33.     char tolower();
  34.    FILE  fdta;
  35.  
  36.    if (argc == 2 && argv[1][0] == '?' && argv[1][1] == 0) {
  37.       help(documentation);
  38.       return;
  39.       }
  40.    nfile = argc-1;
  41.    for (i=1; i < argc; ++i) {
  42.       p = argv[i];
  43.       if (*p == '-') {
  44.      ++p;
  45.      while (c = *p++) {
  46.         switch(tolower(c)) {
  47.  
  48.         case '?':
  49.            help(documentation);
  50.            break;
  51.  
  52.         case 'D':
  53.         case 'd':
  54.            debug++;
  55.            break;
  56.  
  57.         case 'L':
  58.         case 'l':
  59.            lflag = atoi(p);       /* convert to numeric */
  60.            while (*p)      /* then skip number */
  61.           p++;
  62.            break;
  63.  
  64.         default:
  65.            usage("Unknown flag");
  66.         }
  67.      }
  68.      argv[i] = 0;
  69.      --nfile;
  70.       }
  71.    }
  72.     if (nfile == 0)
  73.         fdta = stdin;
  74.     else
  75.         for (i=1; i < argc; ++i)
  76.             if (argv[i] != 0) {
  77.             if((fdta = fopen(argv[i],"r")) == NULL)
  78.                 cant(argv[i]);
  79.             break;
  80.             }
  81.  
  82.     center(fdta, argv[i]);
  83.  
  84.     if (fdta != stdin)
  85.           fclose(fdta);
  86. }
  87.  
  88.  
  89. /*******************************************************/
  90.  
  91. usage(s)
  92. char    *s;
  93. {
  94.    puts("?LIST-E-");
  95.    puts(s);
  96.    puts("\n");
  97.    puts("Usage: center [-flags] [file] [<file] [>file].  \n");
  98.    puts(" center ? for help\n");
  99.    exit(1);
  100. }
  101.  
  102.  
  103. /*******************************************************/
  104.  
  105. center(fdin,filenm)
  106. FILE fdin;
  107. char *filenm;
  108. {
  109.     char *cp, *wp;
  110.     int countr, len;
  111.     char c, line[256];
  112.  
  113.     while (wp = cp = fgets(line, sizeof(line), fdin)) {
  114. #if DeSmet
  115.         while (*wp)
  116.             if (*wp++ == '\n')
  117.                 wp[-1] = ' ';
  118. #endif
  119.         len = strlen(trim(line));    /* get non-blank length */
  120.  
  121.          /* output leading blanks */
  122.         for (countr=1; countr < (lflag - len)/2; countr++)
  123.             putc(' ', stdout);
  124.  
  125.          /* output non-blank chars */
  126.         while (c = *cp++)
  127.             putc(c, stdout);
  128.  
  129.         putc('\n', stdout);     /* end of record */
  130.     }
  131. }
  132.