home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / sources / misc / 3816 < prev    next >
Encoding:
Text File  |  1992-08-18  |  18.4 KB  |  604 lines

  1. Newsgroups: comp.sources.misc
  2. Path: sparky!kent
  3. From: Michel.Fingerhut@ircam.fr (Michel Fingerhut)
  4. Subject:  v31i087:  versions - version number report generator v3.5, Part01/01
  5. Message-ID: <1992Aug18.204908.20640@sparky.imd.sterling.com>
  6. Followup-To: comp.sources.d
  7. X-Md4-Signature: 1a49630d48c494d72cead3c82d809dda
  8. Sender: kent@sparky.imd.sterling.com (Kent Landfield)
  9. Organization: Inst. de Recherche et Coordination Acoustique/Musique, Paris
  10. Date: Tue, 18 Aug 1992 20:49:08 GMT
  11. Approved: kent@sparky.imd.sterling.com
  12. Lines: 590
  13.  
  14. Submitted-by: Michel.Fingerhut@ircam.fr (Michel Fingerhut)
  15. Posting-number: Volume 31, Issue 87
  16. Archive-name: versions/part01
  17. Environment: Perl
  18.  
  19. Versions is a perl program that reports the version number of selected
  20. programs.  It has a separate configuration file (conceptually similar to
  21. the magic number file description), which tells it, for each program, how
  22. to extract its version number: some are invoked with a special flag, some
  23. are scanned for specific strings.
  24.  
  25. Reports may also include the install date.
  26.  
  27. Reports are printed as a table on stdout or in tbl format, suitable to be
  28. fed into a troff pipe.
  29.  
  30. The Makefile was generated for GNU-make with a special (perl) utility.
  31.  
  32. Please report all comments, suggestions and bugs to mf@ircam.fr.
  33.  
  34. -------------------------------- cut here -----------------------------------
  35. #! /bin/sh
  36. # This is a shell archive.  Remove anything before this line, then unpack
  37. # it by saving it into a file and typing "sh file".  To overwrite existing
  38. # files, type "sh file -c".  You can also feed this as standard input via
  39. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  40. # will see the following message at the end:
  41. #        "End of shell archive."
  42. # Contents:  Makefile versions.1 versions.pl versions.dat
  43. # Wrapped by fingerhu@nadia on Mon Aug 17 14:12:01 1992
  44. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  45. if test -f 'Makefile' -a "${1}" != "-c" ; then 
  46.   echo shar: Will not clobber existing file \"'Makefile'\"
  47. else
  48. echo shar: Extracting \"'Makefile'\" \(1585 characters\)
  49. sed "s/^X//" >'Makefile' <<'END_OF_FILE'
  50. X#
  51. X#            Copyright (c) 1992 by IRCAM
  52. X#                All rights reserved.
  53. X#
  54. X#  For any information regarding this and other IRCAM software, please
  55. X#  send email to:
  56. X#                              manager@ircam.fr
  57. X#
  58. X
  59. X#
  60. X# Makefile    1.3 IRCAM 8/17/92
  61. X#
  62. X# Makefile for mkskel
  63. X#
  64. X# Modification history
  65. X#
  66. X# 17-Aug-92 - Michel Fingerhut (fingerhu@ircam.fr)
  67. X#
  68. X
  69. XMAKEFILE    := Makefile
  70. XTARGET        := versions
  71. XROOTDIR        := /usr/local
  72. XOWNER        := root
  73. XGROUP        := wheel
  74. X
  75. X# Where executables and man pages go
  76. XBINDIR        := $(ROOTDIR)/bin
  77. XLIBDIR        := $(ROOTDIR)/lib
  78. XMANDIR        := $(ROOTDIR)/man
  79. XDESTDIR        := $(BINDIR)
  80. X
  81. XSHFILES        :=  versions.pl 
  82. XLIBFILES    :=  versions.dat
  83. XTAPE        := /dev/rmt0h
  84. XMANFILES1    :=  versions.1 
  85. XMANFILES    :=  $(MANFILES1)       
  86. XINSTMANFILES    := $(addprefix $(MANDIR)/man1/, $(MANFILES1))       
  87. XINSTLIBFILES    := $(addprefix $(LIBDIR)/, $(LIBFILES))
  88. XSOURCE        := $(MAKEFILE) $(MANFILES) $(DOCFILES) $(SHFILES) \
  89. X           $(INCLUDES) $(YACCFILES) $(LEXFILES) \
  90. X           $(CFILES) $(FFILES) $(ASFILES) $(LIBFILES)
  91. X
  92. X.PHONY: all install uninstall clean depend
  93. Xall:     $(TARGET)
  94. X
  95. Xinstall: $(DESTDIR)/$(TARGET) $(INSTMANFILES) $(INSTLIBFILES)
  96. X
  97. Xuninstall:
  98. X    rm -f $(DESTDIR)/$(TARGET) $(INSTMANFILES)
  99. X
  100. Xdepend:
  101. X
  102. X$(TARGET):      $(TARGET).pl
  103. X    cat $< > $@
  104. X    chmod a+x $@
  105. X
  106. X$(DESTDIR)/$(TARGET): $(TARGET)
  107. X    install -c -o $(OWNER) -g $(GROUP) -m 0755 $< $@
  108. X
  109. X$(LIBDIR)/%: %
  110. X    install -c -o $(OWNER) -g $(GROUP) -m 0644 $< $@
  111. X
  112. X$(MANDIR)/man1/% : %
  113. X    install -c -o $(OWNER) -g $(GROUP) -m 0644 $< $@
  114. X
  115. Xtar:
  116. X    tar rfcb $(TAPE) 20 $(SOURCE)
  117. X
  118. Xshar:   $(TARGET).shar
  119. X
  120. X$(TARGET).shar: $(SOURCE)
  121. X    shar $^ > $@
  122. X
  123. Xclean:
  124. X    -rm -f $(OBJECTS)
  125. X    sccs clean
  126. X
  127. END_OF_FILE
  128. if test 1585 -ne `wc -c <'Makefile'`; then
  129.     echo shar: \"'Makefile'\" unpacked with wrong size!
  130. fi
  131. # end of 'Makefile'
  132. fi
  133. if test -f 'versions.1' -a "${1}" != "-c" ; then 
  134.   echo shar: Will not clobber existing file \"'versions.1'\"
  135. else
  136. echo shar: Extracting \"'versions.1'\" \(3891 characters\)
  137. sed "s/^X//" >'versions.1' <<'END_OF_FILE'
  138. X.TH VERSIONS 1 "IRCAM 3.2 8/3/92"
  139. X.SH NAME
  140. Xversions - print versions of locally-installed programs
  141. X.SH SYNOPSIS
  142. X.B versions
  143. X[
  144. X.B \-v
  145. X]
  146. X[
  147. X.B \-l
  148. X]
  149. X[
  150. X.B \-t
  151. X]
  152. X[
  153. X.B \-f
  154. X.I specs-file
  155. X]
  156. X[
  157. X.I program ...
  158. X]
  159. X.SH DESCRIPTION
  160. X.PP
  161. X.B Versions
  162. Xprints the current version number (and installation date, if
  163. X.BR \-l )
  164. Xof some locally installed programs.
  165. XIf no program name is given, it lists all the programs found in the
  166. X.B /usr/local/lib/versions.dat
  167. Xmethods file (or from the
  168. X.I specs-file
  169. Xspecified with the optional
  170. X.B \-f
  171. Xflag).
  172. X
  173. XIf any program names are specified, it lists the required information
  174. Xfor them (if they appear in the methods file).
  175. X.SH OPTIONS
  176. X.TP
  177. X.B \-v
  178. Xprints its own version (equivalent to
  179. X.BR versions\ versions )
  180. Xand exit.
  181. X.TP
  182. X.B \-l
  183. X(long format) prints also installation date
  184. X.TP
  185. X.B \-t
  186. Xproduce output in
  187. X.B tbl
  188. Xformat (suitable to be piped into further processing tools).  If this
  189. Xoption is selected, long format is automatically chosen too.
  190. X.TP
  191. X.B \-f
  192. X.I specs-file
  193. Xread the methods used to extract the version from this file instead of the
  194. Xdefault
  195. X.B /usr/local/lib/versions.dat.
  196. X.TP
  197. X.I program ...
  198. Xprint only the version numbers (and installation dates)
  199. Xof the programs (if their names
  200. Xappear in the methods file).
  201. X.SH THE METHODS FILE
  202. X.I Specs-file
  203. X(or the default
  204. X.BR /usr/local/lib/versions.dat)
  205. Xcontains a list of programs with the method used to retrieve the version
  206. Xnumber in each.  Each line consists of 3
  207. X.I tab-separated
  208. Xfields: the first one
  209. Xis the path to the program, the second one a shell command used
  210. Xin order to extract a string containing the version information,
  211. Xand the last one a perl pattern used to extract the version from the string
  212. Xobtained via the shell command.
  213. X
  214. XThe path may either be absolute, in which case
  215. X.B versions
  216. Xuses it as the location of the program, or relative, in which case it
  217. Xsearches for the file in the
  218. X.B $PATH
  219. Xenvironment variable (at the expense of time).  This allows specifying
  220. Xprograms which may live in different places for different users.
  221. X
  222. XThe perl pattern must include one or two ``bracketing-construct'' ( ... )
  223. Xwhich enclose the pattern retrieving the version number, the second one
  224. Xbeing for the level number.  Hence the use of parentheses in the pattern
  225. Xmust take into account that $1 and $2 are used by the program in order
  226. Xto print the 
  227. X.I version(level)
  228. Xinformation.
  229. X
  230. XEnvironment variables can be used within any part of the line.  It can be
  231. Xused in retrieving user-dependent path as
  232. X.B $HOME/bin.
  233. X
  234. XA limited form of one-level macros is permitted so as to simplify the
  235. Xdescription.  The special
  236. X.B %%
  237. Xmacro stands for the full path (i.e., the first field
  238. Xin each line, usually used in the 2nd field).  Other macros can
  239. Xbe defined in that file: the definition is on a line of the form
  240. X.IR macro=string ,
  241. Xand any subsequent occurrence of 
  242. X.BI % macro
  243. Xor
  244. X.BI %{ macro }
  245. Xis replaced by
  246. X.I string.
  247. XMacro definition lines should not contain tabs (other than leading
  248. Xto a possible comment).
  249. X
  250. XBlank lines and comments (following a # to the end of the line) are
  251. Xpermitted and ignored.  Hence the # character cannot appear in a macro
  252. Xname or value nor anywhere else except as a comment-starter: the pattern
  253. Xfor
  254. X.B named
  255. Xused to be
  256. X.B @(#)named
  257. Xwhich broke with the introduction of comments.  This can be safely
  258. Xreplaced by
  259. X.B @(.)named
  260. Xe.g.
  261. X.SH BUGS
  262. XNot all programs are included, since some don't have an idea of their
  263. Xown version number (other than in the sources, sometimes, wherever they
  264. Xmay be).  It would be nice if people writing significant programs
  265. Xprovided a flag returning the version information, or at least
  266. Xan identifiable string in the executable from which it could be inferred.
  267. X
  268. XMacro names should preferably not be part of other macro names, unless
  269. Xthe { ... } construct is explicitely used.
  270. X.SH AUTHOR
  271. XMichel Fingerhut (fingerhu@ircam.fr) with suggestions by
  272. XPeter W Osel (pwo@sunrise.zfe.siemens.de).
  273. END_OF_FILE
  274. if test 3891 -ne `wc -c <'versions.1'`; then
  275.     echo shar: \"'versions.1'\" unpacked with wrong size!
  276. fi
  277. # end of 'versions.1'
  278. fi
  279. if test -f 'versions.pl' -a "${1}" != "-c" ; then 
  280.   echo shar: Will not clobber existing file \"'versions.pl'\"
  281. else
  282. echo shar: Extracting \"'versions.pl'\" \(5599 characters\)
  283. sed "s/^X//" >'versions.pl' <<'END_OF_FILE'
  284. X#!/usr/local/bin/perl
  285. X#            Copyright (c) 1992 by IRCAM
  286. X#                All rights reserved.
  287. X#
  288. X#  For any information regarding this and other IRCAM software, please 
  289. X#  send email to:
  290. X#                              manager@ircam.fr
  291. X
  292. X#
  293. X# versions    3.5 IRCAM 8/17/92
  294. X#
  295. X# Extract program version number
  296. X#
  297. X# Modification history
  298. X#
  299. X# 22-Jul-92 - Michel Fingerhut (fingerhu@ircam.fr)
  300. X#    added suggestions from Peter W Osel (pwo@sunrise.zfe.siemens.de)
  301. X#
  302. X# 21-Jul-92 - Michel Fingerhut (fingerhu@ircam.fr)
  303. X#    added macro capability and various sanity checks
  304. X#
  305. X# 20-Jul-92 - Michel Fingerhut (fingerhu@ircam.fr)
  306. X#    initial version
  307. X#
  308. X
  309. X$[          = 1;                 # set array base to 1
  310. X$,          = ' ';               # set output field separator
  311. X$\          = "\n";              # set output record separator
  312. X$options    = 'f:vlt';         # for getopts
  313. X
  314. X$specs_file = "/usr/local/lib/versions.dat";    # unless -f to override
  315. X$usage      = "Usage: $0 [-v] [-l] [-t] [-f specs-file] [program ...]\n";
  316. X
  317. X$today        = &asctime(time);
  318. X
  319. X#-------------------------------------------------------------------------------
  320. X# formats for short form of output
  321. X#-------------------------------------------------------------------------------
  322. X
  323. X$format_top_s= "
  324. Xprogram          version
  325. X-------          -------
  326. X.
  327. X";
  328. X
  329. X$format_s= '
  330. X@<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<
  331. X$program,     $version
  332. X.
  333. X';
  334. X
  335. X#-------------------------------------------------------------------------------
  336. X# formats for long form of output
  337. X#-------------------------------------------------------------------------------
  338. X
  339. X$format_top_l= "
  340. Xprogram          version                   date installed
  341. X-------          -------                   --------------
  342. X.
  343. X";
  344. X
  345. X$format_l= '
  346. X@<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<<<<<<< @<<<<<<<<<<<<<<<<<<
  347. X$program,     $version,                 &asctimefile($path)
  348. X.
  349. X';
  350. X
  351. X#------------------------------------------------------------------------------
  352. X# tbl output
  353. X#------------------------------------------------------------------------------
  354. X
  355. X$format_top_t= "print \"
  356. X.ce
  357. XINSTALLED PROGRAMS ON $today
  358. X.sp 5
  359. X.TS H
  360. Xcenter box;
  361. Xc c c
  362. Xl l l.
  363. XProgram\tVersion\tDate installed
  364. X_
  365. X.TH\"";
  366. X
  367. X$format_t    = 'printf "%s\t%s\t%s\n", $program, $version, &asctimefile($path);';
  368. X
  369. X$format_end_t= 'print ".TE"';
  370. X
  371. X#------------------------------------------------------------------------------
  372. X# main program
  373. X#------------------------------------------------------------------------------
  374. X
  375. X# parse arguments
  376. Xrequire 'getopts.pl';
  377. X&Getopts($options) || die $usage;    # parse the arguments
  378. X$specs_file= $opt_f if defined $opt_f;    # override default specs file
  379. X
  380. X# if -v, print version and exit
  381. Xif (defined $opt_v) {
  382. X    print "3.5 IRCAM 8/17/92";
  383. X    exit;
  384. X}
  385. X
  386. X# set format according to -l (long) otherwise short
  387. Xif ($opt_t) {
  388. X    eval $format_top_t;
  389. X} elsif ($opt_l) {
  390. X    eval "format top= $format_top_l; format= $format_l" ;
  391. X} else {
  392. X    eval "format top= $format_top_s; format= $format_s" ;
  393. X}
  394. X
  395. X# determine which selected programs to list
  396. X$doit{shift @ARGV} = 1     while $#ARGV;
  397. X
  398. X# read dat file and execute program
  399. X
  400. Xopen (DAT, $specs_file) || die "Couldn't find specs file $specs_file: $!\n";
  401. X
  402. Xwhile (<DAT>) {
  403. X
  404. X    chop;
  405. X    s/\s*#.*$//;            # strip comments
  406. X    next if /^$/;            # skip empty lines
  407. X    while (/.*\$(\w+).*/) {             # find all env. variables occurrences
  408. X    $value= $ENV{eval $1};        # compute the value
  409. X    s/(\$\w+)/$value/;        # and do the replacement
  410. X    }
  411. X
  412. X    if ( ! /\t/ ) {             # macro descr section contains no tabs
  413. X
  414. X    # this is a macro definition - find name and store the definition
  415. X    @l = split(/=/, $_, 2);
  416. X    die "*** macro % cannot be defined (reserved)\n" if $l[1] eq '%';
  417. X    die "*** macro $l[1] multiply defined\n" if defined $macro{$l[1]};
  418. X    $macro{$l[1]}= $l[2];
  419. X
  420. X    } else {                # if tab, description section
  421. X
  422. X    # perform macro substitution on all the line
  423. X    foreach $key (keys %macro) { 
  424. X        s/\%$key|\%\{$key\}/$macro{$key}/g;
  425. X    }
  426. X
  427. X    # split the line into the path, shell command and perl pattern
  428. X        ($path, $command, $pattern)= split(/\t+/);
  429. X
  430. X    # check if the file exists
  431. X    if ($path !~ /^\/.*/) {
  432. X        # relative path: look for file in $PATH (we won't do aliases!)
  433. X        foreach $dir (split(/:/, $ENV{'PATH'})) {
  434. X        $path= "$dir/$path", last if -f "$dir/$path";
  435. X        }
  436. X    }
  437. X    next if ! -f $path;
  438. X
  439. X    # perform special macro subst: %% -> $path
  440. X    $command=~ s/\%\%/$path/g;
  441. X
  442. X    # identify the program name (after last / in path name)
  443. X    ($program= $path) =~ s/.*\///;    #    isolate prog name (after last / )
  444. X
  445. X    # ignore this entry if there are arguments and it is not one of them
  446. X        next if %doit && ! defined $doit{$program};
  447. X
  448. X    # find version number from pattern
  449. X        undef $version;
  450. X        $version= $1 if `$command` =~ /.*$pattern.*/;
  451. X        $version .= "($2)" if $2;
  452. X
  453. X    # print
  454. X        write          unless $opt_t;
  455. X    eval $format_t if $opt_t;
  456. X    }
  457. X}
  458. Xclose(DAT);
  459. Xeval $format_end_t if $opt_t;
  460. X
  461. X#------------------------------------------------------------------------------
  462. X# asctimefile - return creation time of a file in ascii
  463. X#------------------------------------------------------------------------------
  464. Xsub asctimefile {{
  465. X    &asctime((stat($_[1]))[10]);
  466. X}}
  467. X
  468. X#------------------------------------------------------------------------------
  469. X# asctime - convert time from 1/1/1970 to ascii
  470. X#------------------------------------------------------------------------------
  471. Xsub asctime {{
  472. X
  473. X    local(@mon)=  ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
  474. X               'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec');
  475. X    local(@time)= localtime($_[1]);
  476. X
  477. X    sprintf("%2d %s 19%02d %02d:%02d",
  478. X    $time[4], $mon[$time[5]+1], $time[6], $time[3], $time[2]);
  479. X}}
  480. END_OF_FILE
  481. if test 5599 -ne `wc -c <'versions.pl'`; then
  482.     echo shar: \"'versions.pl'\" unpacked with wrong size!
  483. fi
  484. # end of 'versions.pl'
  485. fi
  486. if test -f 'versions.dat' -a "${1}" != "-c" ; then 
  487.   echo shar: Will not clobber existing file \"'versions.dat'\"
  488. else
  489. echo shar: Extracting \"'versions.dat'\" \(3851 characters\)
  490. sed "s/^X//" >'versions.dat' <<'END_OF_FILE'
  491. X# Macros 3.3 IRCAM 8/17/92 for versions
  492. X#
  493. X#                       Copyright (c) 1992 by IRCAM
  494. X#                           All rights reserved.
  495. X#
  496. X#  For any information regarding this and other IRCAM software, please
  497. X#  send email to:
  498. X#                              manager@ircam.fr
  499. X
  500. XBIN=/usr/local/bin        # where most of our binaries are
  501. XETC=/usr/local/etc        # where some odd ones live
  502. XLIB=/usr/local/lib        # where most of our libraries are
  503. X
  504. Xl=level[^ ]* ([^ ,\n]+)        # retrieves the level number in $2, usually
  505. Xv=[Vv]ersion[^ ]* *([^ ,\n]+)    # retrieves the version number in $1, hopefully
  506. Xs=[^ ,\n]+            # version number string in most cases
  507. Xj=.*\n.*            # junk between version and level across lines
  508. X
  509. XTEX=tex/inputs            # to shorten the macro def. line for tex
  510. Xtv=.def.texinfoversion
  511. X
  512. X# method for emacs: create a lisp file, execute it and remove
  513. Xemacs=cd /tmp; echo \(message emacs-version\) >e.$$; %% -batch -l e.$$; rm e.$$
  514. X
  515. X# method for floppy: as above
  516. Xfloppy=cd /tmp; echo > f$$.f ; %% f$$.f ; rm f$$.*
  517. X
  518. X# Methods
  519. X
  520. X%ETC/amd        %% -v 2>&1            amd (%s)
  521. X%BIN/bison        bison --version 2>/dev/null    Bison %v
  522. X%BIN/bp            strings %%            (NeurDS version %s)
  523. X/usr/ucb/dbx        echo quit | %% %% 2>/dev/null    %v
  524. X%BIN/diff        diff +version 2>&1        GNU diff %v
  525. X%BIN/dig        %% localhost            DiG (%s)
  526. X%BIN/dirmap        strings %%            ^(.*IRCAM.*)
  527. X%BIN/doc        strings %%            Doc - %v
  528. X%BIN/elk        echo 1.5 \(from sources\)    (^.+)
  529. Xelm            %% -v                Elm (%s) PL(%s)
  530. X%BIN/emacs        %emacs                (^.+)
  531. X%BIN/enquire        %%                %v
  532. X%BIN/f2c        echo | %%            version of (.*) ..:
  533. X%BIN/find        %% /dev/null -version 2>&1    %v
  534. X%BIN/flex        %% -v < /dev/null 2>&1        %v
  535. X%BIN/floppy        %floppy                %v
  536. X%BIN/formes        %% -h                NEW:\t(%s)
  537. X%BIN/ftoch        %% -v                Version . (%s)
  538. X%BIN/ftosc        %% -V                (^.*)
  539. X%BIN/g++        gcc -v 2>&1            %v
  540. Xgawk                   %% -W version 2>&1              \(gawk\) (%s).*%l
  541. X%BIN/gcc        %% -v 2>&1            %v
  542. X%BIN/gdb        echo quit | %%            GDB (%s),
  543. X%BIN/gnuplot        echo sh ver | %% 2>&1        %v%j%l
  544. X%BIN/X11/ghostview    strings %%            Ghostview, %v
  545. X%BIN/grep        %% -V 2>&1            grep, %v
  546. X%BIN/iconx        strings %%            Icon %v\.
  547. X%BIN/info        info --version            ^(.*)
  548. X%BIN/X11/imake        strings %%            imake.c,v (%s)
  549. X%BIN/kcl        echo \(bye\) | %%        Version\((%s)\)
  550. X%BIN/kermit        echo quit | %%            C-Kermit, (%s)
  551. X%BIN/lelisp        echo \(end\) | %%        %v
  552. X%BIN/less        strings %%            %v
  553. X%BIN/make        %% -v 2>/dev/null        %v
  554. X%BIN/makemake        cat %%                \t(%s IRCAM) @
  555. X%BIN/man        %% -v 2>&1            man (%s)
  556. X%BIN/matlab        %% -v 2>/dev/null        %v
  557. X%BIN/mkskel        %% -v                ^(.*)
  558. X%BIN/mixview        strings %%            Mixview v. (%s)
  559. X%BIN/monitor        %% -v                (^.*) - Digital
  560. X%ETC/named        strings %%            @\(.\)named (%s)
  561. X%BIN/ofiles        strings %%            ofiles.c,v (%s)
  562. X%BIN/patch        %% -v 2>&1            patch.c,v (%s)%j%l
  563. X%BIN/perl        %% -v                Revision: (%s)%j%l
  564. X%BIN/rcs        strings %%            rcs.c,v (%s)
  565. X%LIB/sbp-INIT        csh %%                Using (.*) Ultrix
  566. X%BIN/scheme        echo \(exit\) | %% -v        Release (.*)
  567. X/sdmach            sysinfo                Kernel Version[^:]*: ([^:]*):
  568. X%BIN/shar        strings %%            shar.c,v (%s)
  569. X/usr/lib/sendmail    echo quit | %% -bs        Sendmail (%s)
  570. X%BIN/svp        %% 2>&1                %v
  571. X%BIN/tangle        strings %%            TANGLE, (.*)
  572. X%BIN/tar        %% +version 2>&1        %v
  573. Xtcsh            %% -c 'echo '$''version''    tcsh (%s)
  574. X%BIN/tex        cd /tmp; echo \\end | %%    %v
  575. X%LIB/%TEX/texinfo.tex    cat %%                %tv{(%s)}
  576. X%BIN/top        strings %%            Top, %v
  577. X%BIN/vgrind        strings %%            from (.*) \(
  578. X%BIN/unshar        strings %%            unshar.c,v (%s)
  579. X%BIN/unzip        %% 2>&1                Zipfile Extract v(.*) of
  580. X%BIN/versions        %% -v                ^(.*)
  581. X%BIN/weave        strings %%            WEAVE, (.*)
  582. X%BIN/X11/x11perf    strings %%            program, %v
  583. X/vmunix            head -1 /etc/motd        (^.+) Sys
  584. X%BIN/wall        %% -v                ^(.*)
  585. X%BIN/write        %% -v                ^(.*)
  586. X%BIN/X11/xftp        strings %%            xftp %v
  587. X%BIN/xlispstat        echo '(exit)' | %%        STAT %v Release (%s)
  588. X%BIN/X11/xmgr        strings %%            %v
  589. X%BIN/X11/xnetanal    strings %%            Analzser v(%s)
  590. X%BIN/X11/xnetgraph    strings %%            Monitor v(%s)
  591. X%BIN/X11/xnetsampler    strings %%            Sampler v(%s)
  592. X%BIN/xtel        %% -v 2>/dev/null        XTEL (%s)
  593. X%BIN/X11/xv        strings %%            Rev: (.*)
  594. END_OF_FILE
  595. if test 3851 -ne `wc -c <'versions.dat'`; then
  596.     echo shar: \"'versions.dat'\" unpacked with wrong size!
  597. fi
  598. # end of 'versions.dat'
  599. fi
  600. echo shar: End of shell archive.
  601. exit 0
  602.  
  603. exit 0 # Just in case...
  604.