home *** CD-ROM | disk | FTP | other *** search
/ The C Users' Group Library 1994 August / wc-cdrom-cusersgrouplibrary-1994-08.iso / vol_200 / 214_01 / ctrlshor.c < prev    next >
Text File  |  1979-12-31  |  3KB  |  150 lines

  1. /* CTRLSHOR.C    VERS:- 01.00  DATE:- 09/26/86  TIME:- 09:36:26 PM */
  2. /*
  3. %CC1 $1.C -X -E5000
  4. %CLINK $1 DIO -S
  5. %DELETE $1.CRL 
  6. */
  7. /* 
  8. Description:
  9.  
  10. File filter:
  11.     strips high bits
  12.     displays control char (not cr, lf, tab) as "^char".
  13.     
  14. Use to find and display hidden control characters in wordprocessor files, 
  15.     eg wordstar files.
  16.  
  17. Operates under DIO, for saving output or other redirection of it.
  18.  
  19. Adapted from Van Nuys Toolkit program CLEAN, by Eugene H. Mallory.
  20.  
  21. By J.A. Rupley, Tucson, Arizona
  22. Coded for BDS C compiler, version 1.50a
  23. */
  24. /*********************************************************************
  25. *            CTRLSHOW  by J.A. Rupley, from             *
  26. **********************************************************************
  27. *                              CLEAN                                 *
  28. **********************************************************************
  29. *                  COPYRIGHT 1983 EUGENE H. MALLORY                  *
  30. *********************************************************************/
  31. #include "BDSCIO.H"
  32. #include "DIO.H"
  33.  
  34. main(argc, argv)
  35.  
  36. char **argv;
  37. int argc;
  38.  
  39. {
  40.     int c, oldc, indicate, col, blankc;
  41.     dioinit(&argc, argv);
  42.     col = 1;
  43.     blankc = oldc = 0;
  44.     /*********************************************************************
  45.     ***               ARGUMENT PROCESSING                              ***
  46.     *********************************************************************/
  47.  
  48.     int ii, jj, optionerr;
  49.     char *ss;
  50.     optionerr = 0;
  51.     indicate = FALSE;
  52.  
  53.     for (ii = argc - 1; ii > 0; ii--)
  54.         if (argv[ii][0] == '-')
  55.         {
  56.             for (ss = &argv[ii][1]; *ss != '\0';)
  57.             {
  58.                 switch (toupper(*ss++))
  59.                 {
  60.                 case 'H' :
  61.                     optionerr = TRUE;
  62.                     break;
  63.                 default :
  64.                     typef("CLEAN: Illegal option %c.\n"
  65.                         , *--ss);
  66.                     ss++;
  67.                     optionerr = TRUE;
  68.                     break;
  69.                 }
  70.                 while (isdigit(*ss))
  71.                     ss++;
  72.             }
  73.             for (jj = ii; jj < (argc - 1); jj++)
  74.                 argv[jj] = argv[jj + 1];
  75.             argc--;
  76.         }
  77.  
  78.     if (optionerr)
  79.     {
  80.         typef("CTRLSHOW: has no legal options\n");
  81.         typef("usage: ctrlshow  <source_file  >destination_file\n");
  82.         typef("        strips high bits\n");
  83.         typef("        converts (ctrl-char) to (^)(char)\n");
  84.         typef("        for use in display of ctrl chararacters\n");
  85.         exit(0);
  86.     }
  87.  
  88.     /*********************************************************************
  89.     ***                  END OF ARGUMENT PROCESSING                    ***
  90.     *********************************************************************/
  91.  
  92.     while ((c = getchar()) != EOF)
  93.     {
  94.         c &= 0x7f;
  95.  
  96.         if (c != ' ' && c != '\n' && c != '\r')
  97.             while (blankc > 0 && col < 130)
  98.             {
  99.                 putchar(' ');
  100.                 blankc--;
  101.                 col++;
  102.             }
  103.  
  104.         if (c == ' ')
  105.             blankc++;
  106.         else
  107.             if (c == '\t')
  108.             do
  109.                 putchar(' ');
  110.         while (++col % 8 != 1)
  111.             ;
  112.         else
  113.             if (c == '\n')
  114.         {
  115.             blankc = 0;
  116.             putchar(c);
  117.             col = 1;
  118.         }
  119.         else
  120.             if (c == '\r')
  121.             {
  122.                 putchar(c);
  123.                 blankc = 0;
  124.                 col = 1;
  125.             }
  126.             else
  127.                 if (c < 0x20)
  128.                 {
  129.                     putchar('^');
  130.                     putchar(c + 0x40);
  131.                 }
  132.         else
  133.             {
  134.             putchar(c);
  135.             col++;
  136.         }
  137.         if (col >= 130)
  138.         {
  139.             putchar('\n');
  140.             col = 1;
  141.             c = '\n';
  142.             blankc = 0;
  143.         }
  144.         oldc = c;
  145.     }
  146.     if (oldc != '\n')
  147.         putchar('\n');
  148.     dioflush();
  149. }
  150.