home *** CD-ROM | disk | FTP | other *** search
/ NetNews Usenet Archive 1992 #18 / NN_1992_18.iso / spool / comp / lang / perl / 5368 < prev    next >
Encoding:
Internet Message Format  |  1992-08-18  |  22.2 KB

  1. Xref: sparky comp.lang.perl:5368 alt.sources:1910
  2. Path: sparky!uunet!mcsun!uknet!pyrltd!abigale!joel
  3. From: joel@abigale.UUCP (Joel Rosi-Schwartz)
  4. Newsgroups: comp.lang.perl,alt.sources
  5. Subject: locsym - First major upgrade ;-)
  6. Summary: Now uses 70% less disk space!
  7. Message-ID: <1992Aug.202757.7799@abigale.uucp>
  8. Date: 18 Aug 92 19:27:56 GMT
  9. Sender: Joel Rosi-Schwartz <joel@abigale.UUCP>
  10. Followup-To: comp.lang.perl
  11. Organization: Techne Research, Finchampstead, Berkshire (UK)
  12. Lines: 505
  13.  
  14.  
  15. Hi folks,
  16.  
  17. Well after an extensive development effort I have been able to reduce
  18. the disk usage of the symbols database by an amazing 70% ;-)
  19.  
  20. Well, okay, it wasn't really that hard.  By creating a numeric key for
  21. each library path in the database itself, I was able to avoid putting
  22. the path inside the record of each function it contains---just put
  23. the short one or two char key.  Then locsym simply does a lookup on the
  24. number to derefrence it back to the path name.  My database dropped
  25. from 900k down to 260k.
  26.  
  27. My thanks to John Paul Adams for the info on AIX and to Lauren Weinstein
  28. for checking it out on ISC.  Lauren found that ISC ran fine as is.
  29.  
  30. Enjoy,
  31. joel
  32.  
  33. ----  cut here  --------  snip/snip  --------------------------------------
  34. #! /bin/sh
  35. # This is a shell archive.  Remove anything before this line, then unpack
  36. # it by saving it into a file and typing "sh file".  To overwrite existing
  37. # files, type "sh file -c".  You can also feed this as standard input via
  38. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  39. # will see the following message at the end:
  40. #        "End of archive 1 (of 1)."
  41. # Contents:  INSTALL MANIFEST locsym mksymdb readme.aix
  42. # Wrapped by joel@abigale on Tue Aug 18 19:51:35 1992
  43. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  44. if test -f 'INSTALL' -a "${1}" != "-c" ; then 
  45.   echo shar: Will not clobber existing file \"'INSTALL'\"
  46. else
  47. echo shar: Extracting \"'INSTALL'\" \(393 characters\)
  48. sed "s/^X//" >'INSTALL' <<'END_OF_FILE'
  49. XNo big deal here.  The two things to look out for are the
  50. Xlocation of the symbols database and the list of directories
  51. Xwhich are parsed for libraries.  Not that the list of dirs is
  52. Xfor the "root" to start the search in, as I use find to pick
  53. Xup all of the libs below these points.  If you change the
  54. Xlocation of the database in "mksymdb" make sure to also change
  55. Xit in "locsym".
  56. X
  57. XCheers,
  58. Xjoel
  59. END_OF_FILE
  60. if test 393 -ne `wc -c <'INSTALL'`; then
  61.     echo shar: \"'INSTALL'\" unpacked with wrong size!
  62. fi
  63. # end of 'INSTALL'
  64. fi
  65. if test -f 'MANIFEST' -a "${1}" != "-c" ; then 
  66.   echo shar: Will not clobber existing file \"'MANIFEST'\"
  67. else
  68. echo shar: Extracting \"'MANIFEST'\" \(357 characters\)
  69. sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
  70. X   File Name        Archive #    Description
  71. X-----------------------------------------------------------
  72. X INSTALL                    1    How to install package
  73. X MANIFEST                   1    This file
  74. X locsym                     1    Look up functions in database
  75. X mksymdb                    1    Build the symbol database
  76. X readme.aix                 1    How to set up for AIX
  77. END_OF_FILE
  78. if test 357 -ne `wc -c <'MANIFEST'`; then
  79.     echo shar: \"'MANIFEST'\" unpacked with wrong size!
  80. fi
  81. # end of 'MANIFEST'
  82. fi
  83. if test -f 'locsym' -a "${1}" != "-c" ; then 
  84.   echo shar: Will not clobber existing file \"'locsym'\"
  85. else
  86. echo shar: Extracting \"'locsym'\" \(7076 characters\)
  87. sed "s/^X//" >'locsym' <<'END_OF_FILE'
  88. X#!/usr/local/bin/perl
  89. Xeval "exec /usr/local/bin/perl -S $0 $*"
  90. X    if $running_under_some_shell;
  91. X
  92. X  #          $Id: locsym,v 1.3 1992/08/18 18:38:43 joel Exp root $
  93. X  # ======================================================================== #
  94. X  #                                                                          #
  95. X  #  locsym and its sister program mksymdb attemts to handle the common      #
  96. X  #  progamming problem of finding which library or libraries contains       #
  97. X  #  the definition of a given symbol.  mksymdb needs only be run once to    #
  98. X  #  set up the dbm database (or, of course, if you change your libraries).  #
  99. X  #  After that to find a given function or extern definition is a quick     #
  100. X  #  look-up using locdb.                                                    #
  101. X  #                                                                          #
  102. X  #  This code is for sure not portable across systems at this point.  I've  #
  103. X  #  looked at Larry Wall's Configrue program to get an idea of what needs   #
  104. X  #  to be done to make it portable and only understand half of it (maybe;-) #
  105. X  #  Please send me any code towards this end and I will try to maintain     #
  106. X  #  this such that as many systems as possible work without kluges.         #
  107. X  #                                                                          #
  108. X  #  The sole purpose of the copyright is so I don't get sued and my soul ;-)#
  109. X  #  intention is that it should be as helpful and useful to as many folks   #
  110. X  #  as possible, without anyone trying to hoard it or claim it as their     #
  111. X  #  own.  Use it in peace and good health.                                  #
  112. X  #                                                                          #
  113. X  #  Suggestions, advice, bug reports and flames to:                         #
  114. X  #                                                                          #
  115. X  #        Joel Rosi-Schwartz                                                #
  116. X  #        Techne Research                                                   #
  117. X  #        The United Kingdom                                                #
  118. X  #        E-mail: joel@abigale.UUPC                                         #
  119. X  #        Or: uknet.ac.uk!pyrltd.uucp!abigale.uucp!joel                     #
  120. X  #        Phone: +44 734 730.260                                            #
  121. X  #        Fax: +44 734 730.272                                              #
  122. X  #                                                                          #
  123. X  # ======================================================================== #
  124. X
  125. X#
  126. X# How much noise do we want ;-)
  127. X#
  128. X$verbose = 0;
  129. X$quiet = 0;
  130. X$debug = 0;
  131. X
  132. X#
  133. X# Our symbols database.
  134. X#
  135. X$symdb = '/usr/local/etc/symdb';
  136. X%SYMDB = ();
  137. X
  138. X#
  139. X# Open up a existing symbols database.
  140. X#
  141. Xdbmopen (%SYMDB, $symdb, undef());
  142. X
  143. X#
  144. X# Loop over ARGV and find all the requested symbols.
  145. X# If the user hands us a regex, then we do a long
  146. X# search through the whole database, otherwise we
  147. X# do a quick lookup.
  148. X#
  149. X#  The database tends to get very big fast. Instead of listing
  150. X#  each library in full for every subroutine, we use a bit
  151. X#  of indirection.  Each library is listed once and keyed.  Then
  152. X#  we just list the short key in the subroutine record.  A fast
  153. X#  lookup will give us back the library name.  The keys are numbers
  154. X#  so the is no chance of a conflict with a real function name.
  155. X#
  156. Xforeach $symbol (@ARGV) {
  157. X    if ( $symbol =~ /[*?+[{\\^]/) {
  158. X        $found = 0;
  159. X
  160. X        while (($key, $val) = each %SYMDB) {
  161. X            if ($key =~ /$symbol/) {
  162. X                @archives = split (' ', $val);
  163. X                if (@archives) {
  164. X                    $found = 1;
  165. X                    print "$key:\n";
  166. X                    foreach $archive (@archives) {
  167. X                        print "        $SYMDB{$archive}\n";
  168. X                    }
  169. X                    print "\n";
  170. X                }
  171. X            }
  172. X        }
  173. X
  174. X        print "$symbol: not found\n" unless $found;
  175. X    } else {
  176. X        @archives = split (' ', $SYMDB{$symbol});
  177. X        if (@archives) {
  178. X            print "$symbol:\n";
  179. X            foreach $archive (@archives) {
  180. X                print "        $SYMDB{$archive}\n";
  181. X            }
  182. X            print "\n";
  183. X        }
  184. X        else {
  185. X            print "$symbol: not found\n";
  186. X            print "\n";
  187. X        }
  188. X    }
  189. X}
  190. X
  191. X#
  192. X# And say bye
  193. X#
  194. Xdbmclose (SYMDB);
  195. Xexit 0;
  196. X
  197. X  #############################################################################
  198. X  #                                                                           #
  199. X  #  Copyright (c) 1992 Techne Research                                       #
  200. X  #  Copyright (c) 1992 Joel Rosi-Schwartz                                    #
  201. X  #  All rights reserved.                                                     #
  202. X  #                                                                           #
  203. X  #  Redistribution and use in source and binary forms, with or without       #
  204. X  #  modification, are permitted provided that the following conditions       #
  205. X  #  are met:                                                                 #
  206. X  #  1. Redistributions of source code must retain the above copyright        #
  207. X  #     notice, this list of conditions and the following disclaimer.         #
  208. X  #  2. Redistributions in binary form must reproduce the above copyright     #
  209. X  #     notice, this list of conditions and the following disclaimer in the   #
  210. X  #     documentation and/or other materials provided with the distribution.  #
  211. X  #  3. All advertising materials mentioning features or use of this software #
  212. X  #     must display the following acknowledgement:                           #
  213. X  #       This product includes software developed by the Techne Research     #
  214. X  #  4. The name of Techne Research may not be used to endorse or promote     #
  215. X  #     products derived from this software without specific prior written    #
  216. X  #     permission.                                                           #
  217. X  #                                                                           #
  218. X  #  THIS SOFTWARE IS PROVIDED BY THE TECHNE RESEARCH (UK) ``AS IS'' AND      #
  219. X  #  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE    #
  220. X  #  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR       #
  221. X  #  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL COMDISCO SYSTEMS INC BE       #
  222. X  #  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR      #
  223. X  #  CONSEQUENTIAL #  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT     #
  224. X  #  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR       #
  225. X  #  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,    #
  226. X  #  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE     #
  227. X  #  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,        #
  228. X  #  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                       #
  229. X  #                                                                           #
  230. X  # This copyright notice derived from material copyrighted by the Regents    #
  231. X  # of the University of California.                                          #
  232. X  #                                                                           #
  233. X  #############################################################################
  234. X
  235. X#
  236. END_OF_FILE
  237. if test 7076 -ne `wc -c <'locsym'`; then
  238.     echo shar: \"'locsym'\" unpacked with wrong size!
  239. fi
  240. chmod +x 'locsym'
  241. # end of 'locsym'
  242. fi
  243. if test -f 'mksymdb' -a "${1}" != "-c" ; then 
  244.   echo shar: Will not clobber existing file \"'mksymdb'\"
  245. else
  246. echo shar: Extracting \"'mksymdb'\" \(8455 characters\)
  247. sed "s/^X//" >'mksymdb' <<'END_OF_FILE'
  248. X#!/usr/local/bin/perl
  249. Xeval "exec /usr/local/bin/perl -S $0 $*"
  250. X    if $running_under_some_shell;
  251. X
  252. X  #          $Id: mksymdb,v 1.4 1992/08/18 18:37:54 joel Exp root $
  253. X  # ======================================================================== #
  254. X  #                                                                          #
  255. X  #   Copyright (c)       1992 by Techne Resarch                             #
  256. X  #   Copyright (c)       1992 by Joel Rosi-Schwartz                         #
  257. X  #   All Rights Reserved                                                    #
  258. X  #                                                                          #
  259. X  #   Full Copyright notice at bottom of file.                               #
  260. X  #                                                                          #
  261. X  #  mksymdb and its sister program locsym attemts to handle the common      #
  262. X  #  progamming problem of finding which library or libraries contains       #
  263. X  #  the definition of a given symbol.  mksymdb needs only be run once to    #
  264. X  #  set up the dbm database (or, of course, if you change your libraries).  #
  265. X  #  After that to find a given function or extern definition is a quick     #
  266. X  #  look-up using locdb.                                                    #
  267. X  #                                                                          #
  268. X  #  This code is for sure not portable across systems at this point.  I've  #
  269. X  #  looked at Larry Wall's Configrue program to get an idea of what needs   #
  270. X  #  to be done to make it portable and only understand half of it (maybe;-) #
  271. X  #  Please send me any code towards this end and I will try to maintain     #
  272. X  #  this such that as many systems as possible work without kluges.         #
  273. X  #                                                                          #
  274. X  #  The sole purpose of the copyright is so I don't get sued and my soul ;-)#
  275. X  #  intention is that it should be as helpful and useful to as many folks   #
  276. X  #  as possible, without anyone trying to hoard it or claim it as their     #
  277. X  #  own.  Use it in peace and good health.                                  #
  278. X  #                                                                          #
  279. X  #  Suggestions, advice, bug reports and flames to:                         #
  280. X  #                                                                          #
  281. X  #        Joel Rosi-Schwartz                                                #
  282. X  #        Techne Research                                                   #
  283. X  #        The United Kingdom                                                #
  284. X  #        E-mail: joel@abigale.UUPC                                         #
  285. X  #        Or: uknet.ac.uk!pyrltd.uucp!abigale.uucp!joel                     #
  286. X  #        Phone: +44 734 730.260                                            #
  287. X  #        Fax: +44 734 730.272                                              #
  288. X  #                                                                          #
  289. X  # ======================================================================== #
  290. X
  291. X#
  292. X# How much noise do we want ;-)
  293. X#
  294. X$verbose = 0;
  295. X$quiet = 0;
  296. X$debug = 0;
  297. X
  298. X#
  299. X# The root directories of all archives we will parse.
  300. X#
  301. X@libroots = (
  302. X    '/lib',
  303. X    '/usr/lib',
  304. X    '/usr/local/lib',
  305. X    );
  306. X
  307. X#
  308. X# The "nm" command which will create quickly parseable output.
  309. X#
  310. X$nmcmd = 'nm -p';
  311. X
  312. X#
  313. X# Our symbols database.
  314. X#
  315. X$symdb = '/usr/local/etc/symdb';
  316. X%SYMDB = ();
  317. X
  318. X#
  319. X# Save the sysmdb iff it exists, JIC.
  320. X#
  321. Xif ( -e "${symdb}.pag") {
  322. X    print STDERR "${symdb}.pag exists. Saving in ${symdb}.pag-\n"
  323. X        unless $quiet;
  324. X    rename ("${symdb}.pag", "${symdb}.pag-") ||
  325. X        die "Could not rename ${symdb}.pag: $!\n";
  326. X}
  327. X
  328. Xif ( -e "${symdb}.dir") {
  329. X    print STDERR "${symdb}.dir exists. Saving in ${symdb}.dir-\n"
  330. X        unless $quiet;
  331. X    rename ("${symdb}.dir", "${symdb}.dir-") ||
  332. X        die "Could not rename ${symdb}.dir: $!\n";
  333. X}
  334. X
  335. X#
  336. X# Open up a new one.
  337. X#
  338. Xdbmopen (%SYMDB, $symdb, 0666);
  339. X
  340. X#
  341. X# Gather up all of the ".a" files to parse.
  342. X# Note that the regex in find is "lib*.a", since I explicity
  343. X# want to avoid the Xenix [SML] libs.
  344. X#
  345. Xprint STDERR "Locating all archives, please be patient ..." unless $quiet;
  346. X@archives = `find @libroots -type f -name "lib*.a" -print`;
  347. X
  348. Xprint STDERR " done\n" unless $quiet;
  349. X
  350. X#
  351. X# Okay, lets take a look.
  352. X# We open each archive in turn and add the archive name to
  353. X# the list for each externally visible symbol.
  354. X#
  355. X#  The database tends to get very big fast. Instead of listing
  356. X#  each library in full for every subroutine, we use a bit
  357. X#  of indirection.  Each library is listed once and keyed.  Then
  358. X#  we just list the short key in the subroutine record.  A fast
  359. X#  lookup will give us back the library name.  The keys are numbers
  360. X#  so the is no chance of a conflict with a real function name.
  361. X#
  362. X$indir = 0;
  363. X
  364. Xforeach $archive (@archives) {
  365. X    $indir++;
  366. X    %seen = ();        # to weed out duplicate symbols
  367. X    chop $archive;
  368. X    $SYMDB{$indir} = $archive;
  369. X    print STDERR "Processing $archive\n" unless $quiet;
  370. X    open (NMOUT, "$nmcmd $archive|");
  371. X
  372. XSYMBOL:
  373. X    while (<NMOUT>) {
  374. X        $symbol = '';
  375. X        chop;
  376. X        if (/^.*\s+[ATDS]\s+([^_.].*)/o) { $symbol = $1 };
  377. X        next unless $symbol;
  378. X        # weed out file names from shared libs
  379. X        next SYMBOL if $symbol =~ m=^/shlib/=o;
  380. X        # only one per archive, thank you
  381. X        next SYMBOL if $seen{$symbol}++;
  382. X        $SYMDB{$symbol} .= " $indir";
  383. X        print STDERR "$symbol: $SYMDB{$symbol}\n" if $verbose;
  384. X    }
  385. X}
  386. X
  387. X#
  388. X# And say bye
  389. X#
  390. Xdbmclose (SYMDB);
  391. Xprint STDERR "Processing complete\n" unless $quiet;
  392. Xexit 0;
  393. X
  394. X  #############################################################################
  395. X  #                                                                           #
  396. X  #  Copyright (c) 1992 Techne Research                                       #
  397. X  #  Copyright (c) 1992 Joel Rosi-Schwartz                                    #
  398. X  #  All rights reserved.                                                     #
  399. X  #                                                                           #
  400. X  #  Redistribution and use in source and binary forms, with or without       #
  401. X  #  modification, are permitted provided that the following conditions       #
  402. X  #  are met:                                                                 #
  403. X  #  1. Redistributions of source code must retain the above copyright        #
  404. X  #     notice, this list of conditions and the following disclaimer.         #
  405. X  #  2. Redistributions in binary form must reproduce the above copyright     #
  406. X  #     notice, this list of conditions and the following disclaimer in the   #
  407. X  #     documentation and/or other materials provided with the distribution.  #
  408. X  #  3. All advertising materials mentioning features or use of this software #
  409. X  #     must display the following acknowledgement:                           #
  410. X  #       This product includes software developed by the Techne Research     #
  411. X  #  4. The name of Techne Research may not be used to endorse or promote     #
  412. X  #     products derived from this software without specific prior written    #
  413. X  #     permission.                                                           #
  414. X  #                                                                           #
  415. X  #  THIS SOFTWARE IS PROVIDED BY THE TECHNE RESEARCH (UK) ``AS IS'' AND      #
  416. X  #  ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE    #
  417. X  #  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR       #
  418. X  #  PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL COMDISCO SYSTEMS INC BE       #
  419. X  #  LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR      #
  420. X  #  CONSEQUENTIAL #  DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT     #
  421. X  #  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR       #
  422. X  #  BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,    #
  423. X  #  WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE     #
  424. X  #  OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,        #
  425. X  #  EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.                       #
  426. X  #                                                                           #
  427. X  # This copyright notice derived from material copyrighted by the Regents    #
  428. X  # of the University of California.                                          #
  429. X  #                                                                           #
  430. X  #############################################################################
  431. X
  432. X#
  433. END_OF_FILE
  434. if test 8455 -ne `wc -c <'mksymdb'`; then
  435.     echo shar: \"'mksymdb'\" unpacked with wrong size!
  436. fi
  437. chmod +x 'mksymdb'
  438. # end of 'mksymdb'
  439. fi
  440. if test -f 'readme.aix' -a "${1}" != "-c" ; then 
  441.   echo shar: Will not clobber existing file \"'readme.aix'\"
  442. else
  443. echo shar: Extracting \"'readme.aix'\" \(1542 characters\)
  444. sed "s/^X//" >'readme.aix' <<'END_OF_FILE'
  445. X
  446. XJohn tested out mksymdb/locsym on his RS6000 running AIX and has
  447. Xthe following advice for getting it working.
  448. X
  449. XThanks John
  450. X======================================================================
  451. X
  452. XFrom: John Paul Adams <ccaajpa@ucl.ac.uk>
  453. XDate: Tue, 18 Aug 92 11:02:55 +0100
  454. X
  455. XMany thanks for posting your "locsym" program yesterday to the Perl
  456. Xnewsgroup. It has already prooved useful here and furthers my cause
  457. Xfor having Perl on our system!
  458. X
  459. XI used it on our mainframe service, an IBM RS/6000 workstation running
  460. XAIX version 3.1 which is fully supported by Perl version 4.035. I thought
  461. Xyou may be interested in what I needed to do to get your script
  462. Xworking correctly.
  463. X
  464. XAIX is a horrendous mixture of BSD and System V. This means that the
  465. X'nm' program is linked to the System V version and hence doesn't take
  466. Xthe "-p" option. Fortunately you provided a define for that so we could
  467. Xspecify "/usr/ucb/nm -p" to force it to use the BSD version.
  468. X
  469. XThe only other problem I encountered was when a the find command
  470. Xwas looking in a directory that was a symbolic link. If you do an 'ls' 
  471. Xon a directory that is actually a link to somewhereelse, then you just
  472. Xget the directory name, hence it wasnt going into those directories.
  473. XThis is fixed under AIX 3.1 by putting "directory/." so that it goes
  474. Xinto that directory.
  475. X
  476. XOther than that, a wonderfully simple script that would mean a I could
  477. Xhave compiled many more programs in the past when porting to AIX !!!
  478. X
  479. XJohn Adams,
  480. XUser Support,
  481. XUniversity College London Computer Centre.
  482. X
  483. XJ.Adams@uk.ac.ucl
  484. END_OF_FILE
  485. if test 1542 -ne `wc -c <'readme.aix'`; then
  486.     echo shar: \"'readme.aix'\" unpacked with wrong size!
  487. fi
  488. # end of 'readme.aix'
  489. fi
  490. echo shar: End of archive 1 \(of 1\).
  491. cp /dev/null ark1isdone
  492. MISSING=""
  493. for I in 1 ; do
  494.     if test ! -f ark${I}isdone ; then
  495.     MISSING="${MISSING} ${I}"
  496.     fi
  497. done
  498. if test "${MISSING}" = "" ; then
  499.     echo You have the archive.
  500.     rm -f ark[1-9]isdone
  501. else
  502.     echo You still need to unpack the following archives:
  503.     echo "        " ${MISSING}
  504. fi
  505. ##  End of shell archive.
  506. exit 0
  507.  
  508.  
  509. -- 
  510.      ==================================================================
  511.      ||               T E C H N E   R E S E A R C H                  ||
  512.      ||  ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++  ||
  513.      ||                     Joel Rosi-Schwartz                       ||
  514.      ||   Hildorien House            +   Email: joel@abigale.UUCP    ||
  515.      ||   12 Waverley Way            +    (pyrltd!abigale.UUCP!joel) ||
  516.      ||   Finchampstead, Wokingham   +   Phone: +44 (734) 730.260    ||
  517.      ||   Berkshire RG11 4YD (UK)    +   Fax:   +44 (734) 730.272    ||
  518.      ==================================================================
  519.