home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_200 / 214_01 / ctrlshor.c < prev    next >
Encoding:
C/C++ Source or Header  |  1980-01-01  |  3.4 KB  |  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.