#include #include #define TABSTOP 4 void detab(int tabstop); int fill(int indent, int tabstop); /* detab input, takes one optional argument for tabstop width */ int main(int argc, char *argv[]) { int tabstop; if (argc < 2 || !(tabstop = atoi(argv[1]))) detab(TABSTOP); else detab(tabstop); return 0; } /* detabs input with spaces, tab stop width is 'tabstop' */ void detab(int tabstop) { int c, indent = 0; /* indent starts at 0 */ while ((c = getchar()) != EOF) if (c == '\t') indent = fill(indent, tabstop); else { putchar(c); indent = (c == '\n') ? 0 : indent + 1; } } /* fills output with spaces from indent to next tabstop */ /* returns new indent */ int fill(int indent, int tabstop) { int w = tabstop - indent % tabstop; for (; w > 0; --w) { putchar(' '); ++indent; } return indent; }