1: /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1984. */
   2: /* $Header: retab.c,v 1.1 84/07/04 17:57:16 timo Exp $ */
   3: 
   4: /*
   5:  * retab [ [-ain] [-t N] ] [ file ]
   6:  *
   7:  * replace all tabs by appropriate number of spaces,
   8:  * and replace these spaces by optimal number of tabs.
   9:  *
  10:  * -i: replace only initial spaces
  11:  * -n: no spaces are replaced
  12:  * -a: all spaces are replaced (Default)
  13:  * -t N: tab positions are multiples of N; default N=8
  14:  *
  15:  */
  16: 
  17: #define OPTIONS "-[a|i|n] -tN"
  18: #include    "par.h"
  19: #include    <ctype.h>
  20: 
  21: #define NL  '\n'
  22: #define TAB '\t'
  23: #define BS  '\b'
  24: #define SP  ' '
  25: 
  26: int tabwidth = 8;
  27: int rpos, wpos;
  28: char opt = 'a';
  29: 
  30: int
  31: options(c, v) char *v[];    {
  32:     char ch = v[0][1];
  33: 
  34:     VOID(c);
  35:     switch (ch) {
  36:     case 'a':
  37:     case 'i':
  38:     case 'n':
  39:         opt = ch;
  40:         return 1;
  41:     case 't':
  42:         tabwidth = atoi(&v[0][2]);
  43:         if (tabwidth <= 1)
  44:             return ERR;
  45:         return 1;
  46:     default:
  47:         return ERR;
  48:     }
  49: }
  50: 
  51: process()   {
  52:     register int ch;
  53: 
  54:     rpos = wpos = 0;
  55:     while ((ch = getc(ifile)) NE EOF)
  56:     switch (ch) {
  57:     case NL:
  58:         rpos = 0;
  59:         wpos = 0;
  60:         putchar(NL);
  61:         break;
  62:     case BS:
  63:         rpos--;
  64:         break;
  65:     case TAB:
  66:         rpos = ntab(rpos);
  67:         break;
  68:     case SP:
  69:         rpos++;
  70:         break;
  71:     default:
  72:         if (isprint(ch))
  73:             rpos++;
  74:         outchar(ch);
  75:         break;
  76:     }
  77: }
  78: 
  79: outchar(ch) char ch;    {
  80: 
  81:     while (wpos > rpos-1)   {
  82:         putchar(BS);
  83:         wpos--;
  84:     }
  85:     if (opt EQ 'a' || (opt EQ 'i' && wpos EQ 0))
  86:         while (rpos - wpos > 2 && ntab(wpos) < rpos)    {
  87:             putchar(ntab(wpos) EQ wpos+2 ? SP : TAB);
  88:             wpos = ntab(wpos);
  89:         }
  90:     while (wpos < rpos-1)   {
  91:         putchar(SP);
  92:         wpos++;
  93:     }
  94:     putchar(ch);
  95:     wpos++;
  96: }
  97: 
  98: int
  99: ntab(n) {
 100:     return (n + tabwidth) / tabwidth * tabwidth;
 101: }

Defined functions

ntab defined in line 98; used 4 times
options defined in line 30; used 1 times
outchar defined in line 79; used 1 times
  • in line 74
process defined in line 51; used 1 times

Defined variables

opt defined in line 28; used 3 times
rpos defined in line 27; used 11 times
tabwidth defined in line 26; used 5 times
wpos defined in line 27; used 14 times

Defined macros

BS defined in line 23; used 1 times
  • in line 82
NL defined in line 21; used 1 times
  • in line 60
OPTIONS defined in line 17; never used
SP defined in line 24; used 2 times
TAB defined in line 22; used 1 times
  • in line 87
Last modified: 1985-08-27
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 1984
Valid CSS Valid XHTML 1.0 Strict