home *** CD-ROM | disk | FTP | other *** search
/ Crawly Crypt Collection 1 / crawlyvol1.bin / program / compiler / szadb21b / source / doc / tex / unexpand.c < prev    next >
C/C++ Source or Header  |  1990-06-11  |  1KB  |  63 lines

  1. #include <stdio.h>
  2.  
  3. #define MAXLIN 132
  4. #define TABSTOP 8
  5.  
  6. int                tabs[MAXLIN];
  7.  
  8. main ()
  9. {
  10.     int            c, delay, col;
  11.     void           settab ();
  12.  
  13.     settab (tabs);
  14.  
  15.     col = delay = 0;
  16.     while (EOF != (c = getchar ())) {
  17.         if (MAXLIN < col) {
  18.             /* copy remaining characters on a line */
  19.             do {
  20.                 putchar (c);
  21.             } while ('\n' != c && 
  22.                            EOF != (c = getchar ()));
  23.             col = 0;
  24.         }
  25.         else {
  26.             switch (c) {
  27.             case '\t':
  28.                 while (!tabs[col])
  29.                     col++;
  30.             case ' ':           /* fallthrough */
  31.                 if (!tabs[col]) {
  32.                     col += 1;
  33.                     continue;   /* keep delay */
  34.                 }
  35.                 putchar ((delay == col) ? ' ' : '\t');
  36.                 col += 1;
  37.                 break;
  38.             default:
  39.                 while (delay < col) {
  40.                     putchar (' ');
  41.                     delay += 1;
  42.                 }
  43.                 putchar (c);
  44.                 col = ('\n' == c ? 0 : col + 1);
  45.                 break;
  46.             } /* switch */
  47.         } /* if (MAXLIN < col) */
  48.         delay = col;
  49.     }
  50.     exit (0);
  51. }
  52.  
  53. void
  54. settab (tab_pt)
  55. short           *tab_pt;
  56. {
  57.     int             i;
  58.  
  59.     for (i = 0; i < MAXLIN; i++) {
  60.         *tab_pt++ = (0 == (i % TABSTOP));
  61.     }
  62. }
  63.