home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / languages / perl / scripts-convex / words < prev    next >
Encoding:
Text File  |  1990-11-19  |  932 b   |  39 lines

  1. #!/usr/local/bin/perl
  2.  
  3. sub eol { ($elt+1) % $cols == 0; }    # is this the last elt on line?
  4.  
  5. $maxlen = 1;    # widest string yet seen
  6.  
  7. $winsize = "\0" x 8;
  8. $TIOCGWINSZ = 0x40087468;  # should be require sys/ioctl.pl
  9.  
  10. if (ioctl(STDOUT, $TIOCGWINSZ, $winsize)) {
  11.     ($rows, $cols, $xpixel, $ypixel) = unpack('S4', $winsize);
  12. } else {
  13.     $cols = 80;
  14. }
  15.  
  16.  
  17. while (<>) {     # read stdin into $_
  18.     s/\s+$//;
  19.     $maxlen = $mylen if (($mylen = length($_)) > $maxlen);
  20.     push(list, $_);
  21.  
  22. $maxlen += 1;  # spaces
  23.  
  24. $cols = int($cols / $maxlen);
  25. $rows = int(($#list+$cols) / $cols);
  26. $mask = sprintf("%%-%ds ", $maxlen);
  27.  
  28. for ($elt = 0; $elt < $rows * $cols; $elt++) { 
  29.     $target =  ($elt%$cols) * $rows + int(($elt/$cols));
  30.     $piece = sprintf($mask, $target < ($#list+1) ? $list[$target] : "");
  31.     $piece =~ s/\s+$// if do eol();  # don't blank pad to eol of line
  32.     print $piece;
  33.     print "\n" if do eol();
  34. }
  35.  
  36. print "\n" if do eol();
  37.  
  38.