home *** CD-ROM | disk | FTP | other *** search
/ minnie.tuhs.org / unixen.tar / unixen / PDP-11 / Trees / V7 / usr / src / cmd / sp.c < prev    next >
Encoding:
C/C++ Source or Header  |  1979-01-10  |  1.2 KB  |  76 lines

  1. /*
  2.  * Print horizontally as possible, thus saving paper
  3.  */
  4. #include <stdio.h>
  5. int tab[8] = {8,7,6,5,4,3,2,1};
  6. int next;    /*next output position on line*/
  7. int slen;    /*length at start of line*/
  8. int alen;    /*actual length*/
  9. int elen;    /*length on current line*/
  10. char buf[256];
  11. getit()
  12. {    register int i;
  13.     register c;
  14.     slen=alen=elen=0;
  15.     for(i=0;;i++)
  16.     {    buf[i]=c=getchar();
  17.         switch(c)
  18.         {
  19.         case '\n':    if(i==0) continue;
  20.         case EOF:
  21.             alen=i;
  22.             return(i);
  23.         case '\t':
  24.             elen+= tab[(next+elen)%8];
  25.             slen += tab[slen%8];
  26.             continue;
  27.         default:
  28.             elen++;
  29.             slen++;
  30.             continue;
  31.         }
  32.     }
  33. }
  34. putit(ntab)
  35. {    register int i;
  36.     for(i=0;i<ntab;i++) putchar('\t');
  37.     for(i=0;i<alen;i++) putchar(buf[i]);
  38. }
  39. clean()
  40. {
  41.     putchar('\n');
  42. }
  43. main(argc,argv) char *argv[];
  44. {    int len,ntab;
  45.     int i;
  46.     len=80;
  47.     if(argc>1)
  48.     {    i=atoi(argv[1]);
  49.         if(i<0) i= -i;
  50.         len=(i<1?1:i);
  51.     }
  52.     else len=80;
  53.     for(;;)
  54.     {    if(next==0) ntab=0;
  55.         else if(tab[next%8]<1)
  56.             {    ntab=2;
  57.                 next+= tab[next%8];
  58.                 next += tab[next%8];
  59.             }
  60.             else
  61.             {    ntab=1;
  62.                 next += tab[next%8];
  63.             }
  64.         if(getit()<=0) {clean(); exit(0);}
  65.         if(elen+next>=len)
  66.         {    clean();
  67.             next=slen;
  68.             putit(0);
  69.         }
  70.         else
  71.         {    next += elen;
  72.             putit(ntab);
  73.         }
  74.     }
  75. }
  76.