home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 January / usenetsourcesnewsgroupsinfomagicjanuary1994.iso / sources / misc / volume2 / cls < prev    next >
Internet Message Format  |  1991-08-07  |  8KB

  1. From: jerryp@cmx.npac.syr.EDU (Jerry Peek)
  2. Newsgroups: comp.sources.misc
  3. Subject: v02i091: cls, etc.: Compressed "ls"-type listing programs for BSD
  4. Message-ID: <8804101844.AA22110@cmx.npac.syr.EDU>
  5. Date: 10 Apr 88 18:44:53 GMT
  6. Approved: allbery@ncoast.UUCP
  7.  
  8. comp.sources.misc: Volume 2, Issue 91
  9. Submitted-By: "Jerry Peek" <jerryp@cmx.npac.syr.EDU>
  10. Archive-Name: cls
  11.  
  12. The standard 4.2/4.3 BSD "ls" command automatically adjusts the number
  13. of columns it displays to fit the longest filename in the directory.
  14. So, a directory listing of, say, 100 files, can scroll off the screen
  15. if a couple of the filenames are very long.  The compressed ls programs
  16. limit filename length; if a name is too long, they put a ">" character
  17. at the end of the filename.
  18.  
  19. There's more info in the README file.
  20.  
  21. --Jerry Peek, Northeast Parallel Architectures Center, Syracuse, NY
  22.   jerryp@amax.npac.syr.edu
  23.   (315)423-1722
  24.  
  25. --------------------------- Cut here and feed to sh --------------------------
  26. # This is a shell archive.  Remove anything before this line,
  27. # then unpack it by saving it in a file and typing "sh file".
  28. #
  29. # Wrapped by buckwheat!jerryp on Sun Apr 10 14:27:24 EDT 1988
  30. # Contents:  Makefile README cls cls.sed
  31.  
  32. echo extracting - Makefile
  33. sed 's/^X//' > "Makefile" <<'X//E*O*F Makefile//'
  34. X#
  35. X# makefile for cls, clf, cls2, clf2
  36. X#
  37. X# Jerry Peek, Northeast Parallel Architectures Center, Syracuse, NY
  38. X# jerryp@amax.npac.syr.edu
  39. X# (315)423-1722
  40. X#
  41. X
  42. X# REMOVE ANY EXISTING LINK BECAUSE ln -s WON'T OVERWRITE EXISTING SYMLINK.
  43. X# THEN, TEST LINK TO BE SURE IT POINTS AT SOMETHING:
  44. XMAKELINK = -rm -f $@ ;\
  45. X    ln -s $? $@ ;\
  46. X    test -f $@
  47. X
  48. Xall: clf cls clf2 cls2
  49. X
  50. Xclf clf2 cls2: cls
  51. X    $(MAKELINK)
  52. X//E*O*F Makefile//
  53. chmod u=rw,g=r,o=r Makefile
  54.  
  55. echo extracting - README
  56. sed 's/^X//' > "README" <<'X//E*O*F README//'
  57. XThis package of files sets up four programs that do "compressed" ls-type
  58. Xlistings.  They only work on BSD 4.2 and 4.3 UNIX (also ULTRIX); you won't
  59. Xneed them on SysV, XENIX, or other systems which limit filenames to 14
  60. Xcharacters or less.
  61. X
  62. XI wrote them because the standard "ls" command automatically adjusts the
  63. Xnumber of columns it displays to fit the longest filename.  So, a directory
  64. Xlisting of, say, 100 files, can scroll off the screen if a couple of the
  65. Xfilenames are very long.  The compressed ls programs limit filename length;
  66. Xif a name is too long, they put a ">" character at the end of the filename.
  67. XSee the program's comment block for more explanation.
  68. X
  69. XHere's an example.
  70. X    
  71. X    % ls
  72. X    1test                           junque3
  73. X    2test                           long_exe_file_name,_etc._etc.
  74. X    3test                           long_text_file_name,_etc._etc.
  75. X    4test                           shortexe
  76. X    dir_short                       shorttext
  77. X    directory_with_long_name_too    test1
  78. X    junque1                         test2
  79. X    junque2
  80. X    % cls
  81. X    1test          dir_short      junque3        shorttext
  82. X    2test          directory_wit> long_exe_file> test1
  83. X    3test          junque1        long_text_fil> test2
  84. X    4test          junque2        shortexe
  85. X    % cls2
  86. X    1test          2test          3test          4test          dir_short
  87. X    directory_wit> junque1        junque2        junque3        long_exe_file>
  88. X    long_text_fil> shortexe       shorttext      test1          test2
  89. X    % ls -F
  90. X    1test                           junque3
  91. X    2test*                          long_exe_file_name,_etc._etc.*
  92. X    3test                           long_text_file_name,_etc._etc.
  93. X    4test                           shortexe*
  94. X    dir_short/                      shorttext
  95. X    directory_with_long_name_too/   test1
  96. X    junque1                         test2
  97. X    junque2
  98. X    % clf
  99. X    1test          dir_short/     junque3        shorttext
  100. X    2test*         directory_wi>/ long_exe_fil>* test1
  101. X    3test          junque1        long_text_fil> test2
  102. X    4test          junque2        shortexe*
  103. X    % clf2
  104. X    1test          2test*         3test          4test          dir_short/
  105. X    directory_wi>/ junque1        junque2        junque3        long_exe_fil>*
  106. X    long_text_fil> shortexe*      shorttext      test1          test2
  107. X
  108. XThe clx2 programs run faster because they don't have to count the number
  109. Xof lines in the "ls" output.  But, the ordering is different.
  110. X
  111. XAll four programs actually run from the same code; the real source file is
  112. X"cls", and the others are symbolic links to it. I use symlinks instead of
  113. Xhard links because I maintain the software with RCS.  The short makefile
  114. XI've sent along should set things up for you... just type "make".
  115. XMove the "cls.sed" program to whatever directory you'd like to keep it, then
  116. Xedit the "sed=" line in the "cls" file -- to let it find the "cls.sed" file.
  117. X
  118. XThe programs are quick hacks, but they've been very very useful.
  119. XIf anyone makes any fixes or improvements, please send them to me!
  120. X
  121. X--Jerry Peek, Northeast Parallel Architectures Center, Syracuse, NY
  122. X  jerryp@amax.npac.syr.edu
  123. X  (315)423-1722
  124. X//E*O*F README//
  125. chmod u=rw,g=r,o=r README
  126.  
  127. echo extracting - cls
  128. sed 's/^X//' > "cls" <<'X//E*O*F cls//'
  129. X#! /bin/sh
  130. X#    $Header: cls,v 1.2 88/02/03 14:21:20 jerryp Exp $
  131. X#
  132. X###    clf,cls,clf2,cls2 - compressed "ls" and "ls -F" directory listings
  133. X###    Usage: cmd [dirs]
  134. X##
  135. X##    clf, cls, clf2, AND cls2 ARE SUBSTITUTES FOR ls -F AND ls.
  136. X##    THEY MAKE COMPRESSED LISTINGS OF THE DIRECTORY.  NAMES LONGER
  137. X##    THAN 14 CHARACTERS ARE TRUNCATED LIKE THIS:
  138. X##        - ON ALL REGULAR FILES (NOT EXECUTABLE, DIRECTORIES, ETC.),
  139. X##          THE 14TH AND SUCCEEDING CHARACTERS ARE REPLACED WITH A ">".
  140. X##        - WHEN USING clf AND clf2: EXECUTABLE FILES, DIRECTORIES,
  141. X##          ETC. WITH NAMES LONGER THAN 13 CHARACTERS... THE 13TH
  142. X##          CHARACTER IS REPLACED WITH ">", AND THE 14TH CHARACTER
  143. X##          WILL BE A * FOR EXECUTABLE FILES, / FOR DIRECTORIES, ETC.
  144. X##
  145. X##    cls AND clf LIST FILES ALPHABETICALLY DOWN SCREEN, LIKE ls DOES:
  146. X##        a    d    k    p    s
  147. X##        b    j    n    r    z
  148. X##    cls2 AND clf2 LIST THEM ALPHABETICALLY ACROSS THE SCREEN:
  149. X##        a    b    d    j    k
  150. X##        n    p    r    s    z
  151. X##
  152. X##    USAGE:  
  153. X##        % clf [file] [files]
  154. X##        % clf2 [file] [files]
  155. X##        % cls [file] [files]
  156. X##        % cls2 [file] [files]
  157. X
  158. Xtemp=/tmp/CLS$$        # TEMP FILE
  159. X
  160. X# pr PROGRAM: MAKE 5 COLUMNS, NO HEADING, 78 COLUMNS WIDE:
  161. Xpr='pr -5 -t -w78'
  162. X
  163. X# sed PROGRAM... IF LINE IS OVER 14 CHARACTERS AND ENDS WITH SYMBOL
  164. X# "*", "/", "@", OR "=", TRUNCATE AFTER 12 AND REPLACE WITH >SYMBOL...
  165. X# OTHERWISE, IF NAME IS OVER 14 CHARACTERS, TRUNCATE AFTER 13; ADD A >
  166. Xsed='sed -f /u1/npac/jerryp/.lib/cls.sed'
  167. X
  168. Xcase "$0" in
  169. X*clf2)    ls -F1 "$@" | $sed | $pr -l1
  170. X        exit 0
  171. X        ;;
  172. X*cls2)    ls -1 "$@" | $sed | $pr -l1
  173. X        exit 0
  174. X        ;;
  175. X*clf)    ls -F1 "$@" | $sed > $temp ;;
  176. X*cls)    ls -1 "$@" | $sed > $temp ;;
  177. X*)    echo "$0: Help!  Shouldn't get here!";
  178. X    exit 1
  179. X    ;;
  180. Xesac
  181. X
  182. X# (THESE COMMANDS ONLY DONE BY cls AND clf.)
  183. X# LENGTH OF LISTING = ( number of files / 5 ) + 1
  184. X$pr -l`expr \( \`wc -l < $temp\` / 5 \) + 1` $temp
  185. Xrm -f $temp
  186. X//E*O*F cls//
  187. chmod u=rwx,g=rx,o=rx cls
  188.  
  189. echo extracting - cls.sed
  190. sed 's/^X//' > "cls.sed" <<'X//E*O*F cls.sed//'
  191. X/[/@*=]$/s/^\(............\)...*\([/@*=][/@*=]*\)$/\1>\2/
  192. Xs/^\(.............\)...*/\1>/
  193. X//E*O*F cls.sed//
  194. chmod u=r,g=r,o=r cls.sed
  195.  
  196. echo Inspecting for damage in transit...
  197. temp=/tmp/shar$$; dtemp=/tmp/.shar$$
  198. trap "rm -f $temp $dtemp; exit" 0 1 2 3 15
  199. cat > $temp <<\!!!
  200.       18      70     391 Makefile
  201.       67     361    3182 README
  202.       57     348    1781 cls
  203.        2       2      88 cls.sed
  204.      144     781    5442 total
  205. !!!
  206. wc  Makefile README cls cls.sed | sed 's/^X//' | diff -b $temp - >$dtemp
  207. if [ -s $dtemp ]
  208. then echo "Ouch [diff of wc output]:" ; cat $dtemp
  209. else echo "No problems found."
  210. fi
  211. exit 0
  212.