|
DataMuseum.dkPresents historical artifacts from the history of: DKUUG/EUUG Conference tapes |
This is an automatic "excavation" of a thematic subset of
See our Wiki for more about DKUUG/EUUG Conference tapes Excavated with: AutoArchaeologist - Free & Open Source Software. |
top - metrics - downloadIndex: T t
Length: 1711 (0x6af) Types: TextFile Names: »tabs.c«
└─⟦a0efdde77⟧ Bits:30001252 EUUGD11 Tape, 1987 Spring Conference Helsinki └─⟦this⟧ »EUUGD11/euug-87hel/sec1/tabs/tabs.c«
/* tabs.c by Robert A. Larson */ #include <stdio.h> #define inchar() getc(stdin) #define outchar(c) putc(c, stdout) #define TRUE 1 #define FALSE 0 static unsigned otab = 8; static unsigned lpos = 0; static unsigned nsp = 0; outspace() { register int i; if(otab) { while(nsp>1 && nsp >= (i=otab-(lpos%otab))) { outchar('\t'); nsp -= i; lpos += i; } } lpos += nsp; while(nsp--) outchar(' '); nsp = 0; } main(argc,argv) int argc; register char **argv; { register int c; register unsigned itab = 8; register int trailsup = FALSE; while(--argc) { switch(**++argv) { case '-': for(;;) { switch(*++*argv) { case '\0': goto nextarg; case 'i': itab = 0; while((c = *++*argv)>='0' && c<='9') { itab *= 10; itab += c - '0'; } (*argv)--; break; case 'o': otab = 0; while((c = *++*argv)>='0' && c<='9') { otab *= 10; otab += c - '0'; } (*argv)--; break; case 't': trailsup = TRUE; break; default: fprintf(stderr, "Unknown switch: %c\n", **argv); exit(1); } } nextarg: break; default: fprintf(stderr, "Illegal agument: %s\n", *argv); exit(1); } } for(;;){ switch(c = inchar()){ case -1: if(nsp && !trailsup) outspace(); /* in case the file ends in space */ exit(0); case ' ': nsp++; break; case '\t': if(itab) nsp += itab - ((lpos+nsp)%itab); else { if(nsp) outspace(); outchar(c); lpos++; } break; case '\n': if(nsp && !trailsup) outspace(); outchar(c); lpos = nsp = 0; break; default: if(nsp) outspace(); outchar(c); lpos++; break; } } }