home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 112.lha / Tabs / detab.c < prev    next >
C/C++ Source or Header  |  1986-11-20  |  2KB  |  80 lines

  1. /* detab.c - proper expansion of TABs while printing a file */
  2.  
  3. #include "stdio.h"
  4. #define MAXTAB 35
  5.  
  6. void _wb_parse(){} /* null routine */
  7.  
  8. main(argc, argv)
  9. int argc;
  10. char *argv[];
  11. {
  12. FILE    *in, *out, *fopen();
  13. int     tabcol[MAXTAB];
  14. register int c, outcol, index;
  15.  
  16. /* define columns with TAB stops */
  17. tabcol[0] = 10;
  18. for ( index = 1; index < MAXTAB; index++ )
  19.     tabcol[index] = tabcol[index-1] + 8;
  20.  
  21. if ( argc != 3 )
  22.     {
  23.     printf("Usage:  %s infile outfile\n",argv[0]);
  24.     exit(20);
  25.     }
  26.  
  27. /* open input file */
  28. if ( (in = fopen(argv[1], "r") ) == NULL)
  29.     {
  30.     printf("Can't open %s for input.\n", argv[1]);
  31.     exit(20);
  32.     }
  33.  
  34. /* open file */
  35. if ( (out = fopen(argv[2], "w") ) == NULL)
  36.     {
  37.     printf("Can't open %s for output.\n", argv[2]);
  38.     exit(20);
  39.     }
  40.  
  41. /* process the file */
  42. outcol = 1;
  43. index = 0;
  44. while ( (c = getc(in)) != EOF )
  45.     {
  46.     if ( c == '\n' )  /* it's a newline */
  47.         { 
  48.         outcol = 1;
  49.         index = 0;
  50.         }
  51.     if ( c == '\t' ) /* it's a TAB! */
  52.         {
  53.         /* look for next TAB stop */
  54.         while ( tabcol[index] <= outcol )
  55.             {
  56.             index++;
  57.             if ( index >= MAXTAB )
  58.                 {
  59.                 printf("\nToo many TABs in line.\n");
  60.                 exit(20);
  61.                 }
  62.             }
  63.         /* expand TAB to spaces */
  64.         while ( outcol < tabcol[index] )
  65.             {
  66.             putc(' ', out);
  67.             outcol++;
  68.             }
  69.         }
  70.     else
  71.         /* copy character exactly */
  72.         {
  73.         putc(c, out);
  74.         outcol++;
  75.         }
  76.     }
  77. fclose(in);
  78. fclose(out);
  79. }
  80.