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: }

Defined functions

clean defined in line 39; used 2 times
getit defined in line 11; used 1 times
  • in line 64
main defined in line 43; never used
putit defined in line 34; used 2 times

Defined variables

alen defined in line 8; used 3 times
buf defined in line 10; used 2 times
elen defined in line 9; used 6 times
next defined in line 6; used 12 times
slen defined in line 7; used 5 times
tab defined in line 5; used 6 times
Last modified: 1979-01-10
Generated: 2016-12-26
Generated by src2html V0.67
page hit count: 483
Valid CSS Valid XHTML 1.0 Strict