home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-07-11 | 65.0 KB | 1,844 lines |
- Newsgroups: comp.sources.misc
- From: laplante@crim.ca (Pierre Laplante)
- Subject: v38i041: lude - A Distributed Software Library, Part09/12
- Message-ID: <1993Jul11.224728.16795@sparky.imd.sterling.com>
- X-Md4-Signature: 2d1dfcbee8c7b2e37f2e5841c389e868
- Sender: kent@sparky.imd.sterling.com (Kent Landfield)
- Organization: Sterling Software
- Date: Sun, 11 Jul 1993 22:47:28 GMT
- Approved: kent@sparky.sterling.com
-
- Submitted-by: laplante@crim.ca (Pierre Laplante)
- Posting-number: Volume 38, Issue 41
- Archive-name: lude/part09
- Environment: UNIX
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # Contents: lude-1.1/run/crim/sun4.1_sparc/include/lude/fileutil.pl
- # lude-1.1/src/orig/COPYING lude-1.1/src/orig/README
- # lude-1.1/src/orig/bug-report/lude-bug.el
- # lude-1.1/src/orig/src/ludeadminc lude-1.1/src/orig/src/ludeinc
- # lude-1.1/src/orig/src/ludelist
- # Wrapped by kent@sparky on Sun Jul 11 15:49:15 1993
- PATH=/bin:/usr/bin:/usr/ucb:/usr/local/bin:/usr/lbin ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 9 (of 12)."'
- if test -f 'lude-1.1/run/crim/sun4.1_sparc/include/lude/fileutil.pl' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lude-1.1/run/crim/sun4.1_sparc/include/lude/fileutil.pl'\"
- else
- echo shar: Extracting \"'lude-1.1/run/crim/sun4.1_sparc/include/lude/fileutil.pl'\" \(5290 characters\)
- sed "s/^X//" >'lude-1.1/run/crim/sun4.1_sparc/include/lude/fileutil.pl' <<'END_OF_FILE'
- X# fileutil - a library of functions to work on files and directories.
- X# Copyright (C) 1992,1993 Stephane Boucher.
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with this program; if not, write to the Free Software
- X# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X$FULL_VERSION.= '$Id: fileutil.pl,v 1.3 1993/03/17 14:56:43 sbo Exp $' ."\n";
- X
- X
- X#-----------------------------------------------------------------------
- X# Description : Delete the files given in parameters.
- X#
- X# Parameters : $options - commands influencing the
- X# behavior of the deletion process
- X# This parameter is a string of letters
- X# where each letter modifies the behavior.
- X# Currently available:
- X# 'r' - recursive deletion.
- X# @files - List of files to delete.
- X#
- X# Returns : The number of files successfuly removed.
- X# A removed directory counts as one, even
- X# though the recursion process might have removed
- X# many others.
- X#
- Xsub RmFiles {
- X # Make sure that the number of parameters is correct
- X if(scalar(@_)<1){die "Incorrect Number Of Parameters, stopped";}
- X local($options, @files)=@_;
- X local($recursive)=0; # Recursion off by default
- X local($remFiles)=0; # So far, 0 file was removed
- X
- X # Scan options
- X foreach $opt (split(//, $options)) {
- X if ($opt eq 'r') {
- X $recursive=1;
- X }
- X else {
- X die "Unknown option $opt, stopped";
- X }
- X }
- X
- X stat('.');
- X if (-w _) {
- X foreach $f (@files) {
- X # The links should not be followed, so lstat is used
- X # instead of stat
- X lstat($f);
- X if (-f _ || -l _) {
- X if (unlink($f)) {
- X $remFiles++;
- X }
- X }
- X elsif (-d _ && $recursive) {
- X local(*dir);
- X local($savedir)=&GetCwd();
- X local(@files);
- X # Number of files removed in the directory $f
- X local($dirRmFiles)=0;
- X
- X opendir(dir, $f);
- X @files=grep(!/^\.{1,2}$/, readdir(dir));
- X closedir(dir);
- X
- X if (! &ChDir($f)) {
- X # Can't change directory
- X # Ignore that file
- X }
- X else {
- X $dirRmFiles=&RmFiles($options, @files);
- X
- X # Go back to the previous current directory
- X &ChDir($savedir);
- X
- X # If all files in directory $f were removed...
- X if ($dirRmFiles == scalar(@files)) {
- X # Remove the directory
- X if (rmdir($f)) {
- X $remFiles++;
- X }
- X }
- X }
- X }
- X }
- X }
- X else {
- X # Don't have write permission on the directory, so it will not
- X # be possible to remove anything.
- X }
- X
- X return $remFiles;
- X}
- X
- X#-----------------------------------------------------------------------
- X# Find out what the current directory is
- X#
- X$libdir'CWD=`pwd`;
- Xif ($? != 0) {
- X # The pwd command did not succeed.
- X # Let's try something else...
- X if (defined($ENV{'CWD'})) {
- X $libdir'CWD=$ENV{'CWD'};
- X }
- X else {
- X die "Could not find out what the current directory is, stopped";
- X }
- X}
- Xif ($libdir'CWD !~ m|^/|) {
- X die "CWD=\"$libdir'CWD\" Is Not an acceptable value\n" .
- X "The CWD should be an absolute path,\nstopped";
- X}
- X
- X#-----------------------------------------------------------------------
- X# Description : Same thing as the built in chdir
- X#
- X# Parameters : Same thing as the built in chdir
- X#
- X# Returns : Same thing that chdir would return.
- X# $! is also set the same way it would be if
- X# chdir was called.
- X#
- Xsub ChDir {
- X if(scalar(@_)!=1){die "Wrong Number Of Argument To ChDir, stopped";}
- X local($dir)=@_;
- X local($newdir);
- X local($retval)=0;
- X
- X if ($dir eq '.') {
- X # Directory does not change
- X $newdir=$libdir'CWD;
- X }
- X else {
- X if ($dir =~ m|^/|) {
- X $newdir=$dir;
- X }
- X else {
- X $newdir="$libdir'CWD/$dir";
- X }
- X # Add a trailing '/' if none is present
- X if ($newdir !~ m|[/]$|) {
- X $newdir.='/';
- X }
- X # Remove path component before //
- X $newdir =~ s|^.*[/]([/].*)$|$1|;
- X # Remove ./
- X while($newdir =~ s|[/]\.[/]|/|) {}
- X # Remove something/../
- X while ($newdir =~ s|[/][^/]+[/]\.\.[/]|/|) {}
- X # Remove trailing '/'
- X chop($newdir);
- X }
- X if ($retval=chdir($newdir)) {
- X $libdir'CWD=$newdir;
- X }
- X # Note that $! is unchanged after chdir, so ChDir
- X # has the same functionnality as chdir.
- X return $retval;
- X}
- X
- X#-----------------------------------------------------------------------
- X# Description : Get the current working directory.
- X#
- X# Parameters : none.
- X#
- X# Returns : Return the current directory found.
- X#
- Xsub GetCwd {
- X if (scalar(@_)!=0) {
- X die "Wrong Number Of Argument To GetCwd, stopped";
- X }
- X return $libdir'CWD;
- X}
- X
- X1;
- X
- X# ;;; Local Variables: ***
- X# ;;; mode:perl ***
- X# ;;; End: ***
- END_OF_FILE
- if test 5290 -ne `wc -c <'lude-1.1/run/crim/sun4.1_sparc/include/lude/fileutil.pl'`; then
- echo shar: \"'lude-1.1/run/crim/sun4.1_sparc/include/lude/fileutil.pl'\" unpacked with wrong size!
- fi
- # end of 'lude-1.1/run/crim/sun4.1_sparc/include/lude/fileutil.pl'
- fi
- if test -f 'lude-1.1/src/orig/COPYING' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lude-1.1/src/orig/COPYING'\"
- else
- echo shar: Extracting \"'lude-1.1/src/orig/COPYING'\" \(12473 characters\)
- sed "s/^X//" >'lude-1.1/src/orig/COPYING' <<'END_OF_FILE'
- X
- X GNU GENERAL PUBLIC LICENSE
- X Version 1, February 1989
- X
- X Copyright (C) 1989 Free Software Foundation, Inc.
- X 675 Mass Ave, Cambridge, MA 02139, USA
- X Everyone is permitted to copy and distribute verbatim copies
- X of this license document, but changing it is not allowed.
- X
- X Preamble
- X
- X The license agreements of most software companies try to keep users
- Xat the mercy of those companies. By contrast, our General Public
- XLicense is intended to guarantee your freedom to share and change free
- Xsoftware--to make sure the software is free for all its users. The
- XGeneral Public License applies to the Free Software Foundation's
- Xsoftware and to any other program whose authors commit to using it.
- XYou can use it for your programs, too.
- X
- X When we speak of free software, we are referring to freedom, not
- Xprice. Specifically, the General Public License is designed to make
- Xsure that you have the freedom to give away or sell copies of free
- Xsoftware, that you receive source code or can get it if you want it,
- Xthat you can change the software or use pieces of it in new free
- Xprograms; and that you know you can do these things.
- X
- X To protect your rights, we need to make restrictions that forbid
- Xanyone to deny you these rights or to ask you to surrender the rights.
- XThese restrictions translate to certain responsibilities for you if you
- Xdistribute copies of the software, or if you modify it.
- X
- X For example, if you distribute copies of a such a program, whether
- Xgratis or for a fee, you must give the recipients all the rights that
- Xyou have. You must make sure that they, too, receive or can get the
- Xsource code. And you must tell them their rights.
- X
- X We protect your rights with two steps: (1) copyright the software, and
- X(2) offer you this license which gives you legal permission to copy,
- Xdistribute and/or modify the software.
- X
- X Also, for each author's protection and ours, we want to make certain
- Xthat everyone understands that there is no warranty for this free
- Xsoftware. If the software is modified by someone else and passed on, we
- Xwant its recipients to know that what they have is not the original, so
- Xthat any problems introduced by others will not reflect on the original
- Xauthors' reputations.
- X
- X The precise terms and conditions for copying, distribution and
- Xmodification follow.
- X
- X GNU GENERAL PUBLIC LICENSE
- X TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
- X
- X 0. This License Agreement applies to any program or other work which
- Xcontains a notice placed by the copyright holder saying it may be
- Xdistributed under the terms of this General Public License. The
- X"Program", below, refers to any such program or work, and a "work based
- Xon the Program" means either the Program or any work containing the
- XProgram or a portion of it, either verbatim or with modifications. Each
- Xlicensee is addressed as "you".
- X
- X 1. You may copy and distribute verbatim copies of the Program's source
- Xcode as you receive it, in any medium, provided that you conspicuously and
- Xappropriately publish on each copy an appropriate copyright notice and
- Xdisclaimer of warranty; keep intact all the notices that refer to this
- XGeneral Public License and to the absence of any warranty; and give any
- Xother recipients of the Program a copy of this General Public License
- Xalong with the Program. You may charge a fee for the physical act of
- Xtransferring a copy.
- X
- X 2. You may modify your copy or copies of the Program or any portion of
- Xit, and copy and distribute such modifications under the terms of Paragraph
- X1 above, provided that you also do the following:
- X
- X a) cause the modified files to carry prominent notices stating that
- X you changed the files and the date of any change; and
- X
- X b) cause the whole of any work that you distribute or publish, that
- X in whole or in part contains the Program or any part thereof, either
- X with or without modifications, to be licensed at no charge to all
- X third parties under the terms of this General Public License (except
- X that you may choose to grant warranty protection to some or all
- X third parties, at your option).
- X
- X c) If the modified program normally reads commands interactively when
- X run, you must cause it, when started running for such interactive use
- X in the simplest and most usual way, to print or display an
- X announcement including an appropriate copyright notice and a notice
- X that there is no warranty (or else, saying that you provide a
- X warranty) and that users may redistribute the program under these
- X conditions, and telling the user how to view a copy of this General
- X Public License.
- X
- X d) You may charge a fee for the physical act of transferring a
- X copy, and you may at your option offer warranty protection in
- X exchange for a fee.
- X
- XMere aggregation of another independent work with the Program (or its
- Xderivative) on a volume of a storage or distribution medium does not bring
- Xthe other work under the scope of these terms.
- X
- X 3. You may copy and distribute the Program (or a portion or derivative of
- Xit, under Paragraph 2) in object code or executable form under the terms of
- XParagraphs 1 and 2 above provided that you also do one of the following:
- X
- X a) accompany it with the complete corresponding machine-readable
- X source code, which must be distributed under the terms of
- X Paragraphs 1 and 2 above; or,
- X
- X b) accompany it with a written offer, valid for at least three
- X years, to give any third party free (except for a nominal charge
- X for the cost of distribution) a complete machine-readable copy of the
- X corresponding source code, to be distributed under the terms of
- X Paragraphs 1 and 2 above; or,
- X
- X c) accompany it with the information you received as to where the
- X corresponding source code may be obtained. (This alternative is
- X allowed only for noncommercial distribution and only if you
- X received the program in object code or executable form alone.)
- X
- XSource code for a work means the preferred form of the work for making
- Xmodifications to it. For an executable file, complete source code means
- Xall the source code for all modules it contains; but, as a special
- Xexception, it need not include source code for modules which are standard
- Xlibraries that accompany the operating system on which the executable
- Xfile runs, or for standard header files or definitions files that
- Xaccompany that operating system.
- X
- X 4. You may not copy, modify, sublicense, distribute or transfer the
- XProgram except as expressly provided under this General Public License.
- XAny attempt otherwise to copy, modify, sublicense, distribute or transfer
- Xthe Program is void, and will automatically terminate your rights to use
- Xthe Program under this License. However, parties who have received
- Xcopies, or rights to use copies, from you under this General Public
- XLicense will not have their licenses terminated so long as such parties
- Xremain in full compliance.
- X
- X 5. By copying, distributing or modifying the Program (or any work based
- Xon the Program) you indicate your acceptance of this license to do so,
- Xand all its terms and conditions.
- X
- X 6. Each time you redistribute the Program (or any work based on the
- XProgram), the recipient automatically receives a license from the original
- Xlicensor to copy, distribute or modify the Program subject to these
- Xterms and conditions. You may not impose any further restrictions on the
- Xrecipients' exercise of the rights granted herein.
- X
- X 7. The Free Software Foundation may publish revised and/or new versions
- Xof the General Public License from time to time. Such new versions will
- Xbe similar in spirit to the present version, but may differ in detail to
- Xaddress new problems or concerns.
- X
- XEach version is given a distinguishing version number. If the Program
- Xspecifies a version number of the license which applies to it and "any
- Xlater version", you have the option of following the terms and conditions
- Xeither of that version or of any later version published by the Free
- XSoftware Foundation. If the Program does not specify a version number of
- Xthe license, you may choose any version ever published by the Free Software
- XFoundation.
- X
- X 8. If you wish to incorporate parts of the Program into other free
- Xprograms whose distribution conditions are different, write to the author
- Xto ask for permission. For software which is copyrighted by the Free
- XSoftware Foundation, write to the Free Software Foundation; we sometimes
- Xmake exceptions for this. Our decision will be guided by the two goals
- Xof preserving the free status of all derivatives of our free software and
- Xof promoting the sharing and reuse of software generally.
- X
- X NO WARRANTY
- X
- X 9. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
- XFOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
- XOTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
- XPROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
- XOR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
- XMERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
- XTO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
- XPROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
- XREPAIR OR CORRECTION.
- X
- X 10. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
- XWILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
- XREDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
- XINCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
- XOUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
- XTO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
- XYOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
- XPROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
- XPOSSIBILITY OF SUCH DAMAGES.
- X
- X END OF TERMS AND CONDITIONS
- X
- X Appendix: How to Apply These Terms to Your New Programs
- X
- X If you develop a new program, and you want it to be of the greatest
- Xpossible use to humanity, the best way to achieve this is to make it
- Xfree software which everyone can redistribute and change under these
- Xterms.
- X
- X To do so, attach the following notices to the program. It is safest to
- Xattach them to the start of each source file to most effectively convey
- Xthe exclusion of warranty; and each file should have at least the
- X"copyright" line and a pointer to where the full notice is found.
- X
- X <one line to give the program's name and a brief idea of what it does.>
- X Copyright (C) 19yy <name of author>
- X
- X This program is free software; you can redistribute it and/or modify
- X it under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 1, or (at your option)
- X any later version.
- X
- X This program is distributed in the hope that it will be useful,
- X but WITHOUT ANY WARRANTY; without even the implied warranty of
- X MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X GNU General Public License for more details.
- X
- X You should have received a copy of the GNU General Public License
- X along with this program; if not, write to the Free Software
- X Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- XAlso add information on how to contact you by electronic and paper mail.
- X
- XIf the program is interactive, make it output a short notice like this
- Xwhen it starts in an interactive mode:
- X
- X Gnomovision version 69, Copyright (C) 19xx name of author
- X Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
- X This is free software, and you are welcome to redistribute it
- X under certain conditions; type `show c' for details.
- X
- XThe hypothetical commands `show w' and `show c' should show the
- Xappropriate parts of the General Public License. Of course, the
- Xcommands you use may be called something other than `show w' and `show
- Xc'; they could even be mouse-clicks or menu items--whatever suits your
- Xprogram.
- X
- XYou should also get your employer (if you work as a programmer) or your
- Xschool, if any, to sign a "copyright disclaimer" for the program, if
- Xnecessary. Here a sample; alter the names:
- X
- X Yoyodyne, Inc., hereby disclaims all copyright interest in the
- X program `Gnomovision' (a program to direct compilers to make passes
- X at assemblers) written by James Hacker.
- X
- X <signature of Ty Coon>, 1 April 1989
- X Ty Coon, President of Vice
- X
- XThat's all there is to it!
- END_OF_FILE
- if test 12473 -ne `wc -c <'lude-1.1/src/orig/COPYING'`; then
- echo shar: \"'lude-1.1/src/orig/COPYING'\" unpacked with wrong size!
- fi
- # end of 'lude-1.1/src/orig/COPYING'
- fi
- if test -f 'lude-1.1/src/orig/README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lude-1.1/src/orig/README'\"
- else
- echo shar: Extracting \"'lude-1.1/src/orig/README'\" \(12877 characters\)
- sed "s/^X//" >'lude-1.1/src/orig/README' <<'END_OF_FILE'
- X
- X ANNOUNCING LUDE: A DISTRIBUTED SOFTWARE LIBRARY
- X
- X
- X
- X Pierre Laplante; Centre de Recherche Informatique de Montreal
- X Stephane Boucher, Michel Dagenais: Ecole Polytechnique de Montreal
- X Robert Gerin-Lajoie, Pierre Mailhot: Universite de Montreal
- X
- X
- X The LUDE tools and associated documentation are freely redistributable
- X under the terms of the GNU General Public License as published by
- X the Free Software Foundation; either version 2, or (at your option)
- X any later version.
- X
- X
- XNumerous software packages are being used and updated regularly on most
- Xcomputer systems. Installing all these software packages is a formidable
- Xtask because each one has a different procedure for compiling or for
- Xplacing the files required at run time. This limits the number of
- Xpackages that a single system administrator can maintain. Moreover, it
- Xis difficult to organize software servers such that:
- X
- X - heterogeneous systems can be served.
- X
- X - each disk server can decide, on a package per package basis, if it wants a
- X network access or a local copy of the executables
- X and/or source code.
- X
- X - users can access new software packages without editing their
- X configuration files (.login .cshrc).
- X
- X - more than one version of a given package can coexist during transitions.
- X
- X - each software package is kept in a separate subtree to ease the
- X management of disk space and prevent name conflicts.
- X
- X - all the documentation is easily accessible through a single
- X user interface.
- X
- X
- XThe LUDE (Logitheque Universitaire Distribuee et Extensible) software
- Xlibrary is a joint project of the Computer Science and Operational Research
- XDepartment of Universite de Montreal, of the Electrical and Computer
- XEngineering Department of Ecole Polytechnique de Montreal
- Xand of the Centre de recherche informatique de Montreal.
- XThe LUDE project was initiated in December 1991 to address the above
- Xmentioned goals. LUDE is an organization for installing software
- Xpackages, a set of tools to install and uninstall software packages
- Xand browse their documentation, and a number of FTP servers offering
- Xover 100 pre-installed freely available software packages.
- X
- XThe LUDE software library enables a large number of sites to pool the
- Xsoftware packages compiled by their system administrators. Each computer
- Xcan act as a client and/or a server as it desires. A client only needs a
- Xnetwork connection to a LUDE server (such as the Internet). A server
- Xneeds to install software packages as described in the Lude documentation
- Xand to export them through NFS (Network File System) or FTP (File Transfer
- XProtocol). A client may represent a more or less heavy load for a server:
- X
- X - A client takes a complete copy whenever a new package is available and
- X remains autonomous thereafter. This represents a light load and can be
- X performed between distant sites.
- X
- X - A client takes a copy of the install and run subtrees and
- X maintains a symbolic link to the source code on the server. If access to
- X the source code is relatively infrequent, this is not a very heavy load
- X either.
- X
- X - A client only keeps symbolic links to the server
- X for the source code as well as the run time for most
- X software packages. Thus, each time one such package is
- X accessed, the server is involved. This is only acceptable if the client
- X and server are very close, on the same network and in the same
- X organization.
- X
- X
- XTypically, a multi-level client server organization will be found:
- X
- X - Public servers allow clients from around the world to take copies of
- X their packages through FTP. Some usage restrictions may apply if
- X the load is too high on these servers.
- X
- X - Departmental servers regularly interact with public servers to keep a
- X large set of up to date packages. Departmental clients may then use these
- X packages either by taking a copy or even through symbolic links for the
- X infrequently used packages. In some cases, a departmental server can also
- X be a public server.
- X
- X - A local server takes a copy of frequently used packages from the
- X departmental server and perhaps keeps symbolic links for other packages.
- X The source code for these packages is normally accessed through a
- X symbolic link to the departmental server or to a nearby consenting
- X public server.
- X
- X - Individual workstations may simply mount /usr/local from the
- X laboratory server.
- X
- X - Notebook computers copy packages according to their upcoming needs for
- X standalone, nomadic, operation.
- X
- X
- XIn order to make the servers directly accessible to the lude tools, the
- X/usr/local/server directory must lead to the /usr/local/soft
- Xdirectories on the reachable servers. This is conveniently achieved
- Xthrough automount (amd-5.2) and NFS. For instance, one could have:
- X
- X% ls /usr/local/server
- Xlude-poly lude-iro1 lude-crim
- X% ls /usr/local/server/lude-poly
- Xamd-5.2 ghostscript-2.4.1
- Xandrew-5.1 ghostview-1.2
- Xdig.2.0 less-177
- Xemacs-18.58 libg++-2.0
- Xemacs-19.0 lude-1.0
- Xfind-3.5 modula3-2.11
- Xgcc-2.1
- X
- X
- XSome coordination is required between the different lude servers.
- XIndeed, the same class names must be used to characterize the
- Xarchitecture and operating system of the computers. Similarly, when
- Xmany packages use the same information (fonts, emacs macros),
- Xthe location in /usr/local must be agreed upon.
- X
- XMailing lists have been created for this purpose. Eventually they may
- Xbe replaced by Usenet newsgroups.
- X
- Xlude@iro.umontreal.ca: discussion and announcements on lude.
- X
- Xlude-request@iro.umontreal.ca: requests to be added or removed
- X
- Xlude-bugs@iro.umontreal.ca: problems encountered using the tools
- X associated with lude.
- X
- X
- XEach software package has a unique name consisting of its name and
- Xversion number (for instance emacs-18.58). However, several
- Xmodifications (or minor versions) may exist for a package;
- Xthese usually represent minor modifications to
- Xthe original source code (for instance in the Makefile). Most often,
- Xa single modification is needed and is named after the person or
- Xthe site performing the compilation. Sometimes, a second
- Xmodification exists which brings locally developed
- Xnew functionality, such as the modifications poly-plain and
- Xpoly-8bit for standard emacs versus one that accepts
- Xaccentuated characters.
- X
- XThe compiled binaries for a software package will differ according to the
- Xtarget architecture and operating system. The two together form the
- Xclass of the target system. The following classes have been
- Xregistered up to now. It is important that the same names be used
- Xthroughout the various LUDE software libraries on connected servers.
- X
- X - linux0.99.10_386
- X
- X - sun3.5_68020
- X
- X - sun3.5_68010
- X
- X - sun4.1_sparc
- X
- X - sol2.1_sparc
- X
- X - vax4.3_vax
- X
- X - ultrix2.1_uvax
- X
- X - ultrix4.1_mips
- X
- X - dec2.1_alpha
- X
- X - hp8.0_s200
- X
- X - hp8.0_s800
- X
- X - ibm3.1_rs6000
- X
- X - sgi4.0_mips
- X
- X
- XThe proposed organization can be used on most operating systems that
- Xoffer tree-structured file systems and symbolic links. The utilities
- Xthat come along with LUDE require the Perl interpreter (available on
- Xmost platforms) and the system commands tar, date, hostname/uname
- Xand domainname.
- X
- XTo install LUDE, one needs access to the /usr/local directory,
- Xand bin, lib, include, man, info, doc, soft and server sub-directories
- Xmust exist. A new sub-directory under /usr/local/soft will be created
- Xfor each software package installed.
- X
- XTo start, the LUDE utilities and the Perl interpreter must be retrieved.
- XThe following FTP servers are accessible on the Internet:
- Xftp.crim.ca, ftp.iro.umontreal.ca and ftp.vlsi.polymtl.ca. With FTP,
- Xit is often easier to retrieve the complete subtree for a package
- Xand then remove the unwanted binaries (for architectures not
- Xused at your site).
- X
- XHere is how to proceed for installing lude and perl:
- X
- X% cd /usr/local/soft
- X% ftp ftp.crim.ca
- XConnected to Clouso.CRIM.CA.
- X220 clouso FTP server (Version 2.0WU(3) Mon Apr 12 22:48:26 EDT 1993) ready.
- XName (ftp.crim.ca:dagenais): ftp
- X331 Guest login ok, send e-mail address as password.
- XPassword:
- X230-
- X230-This ftp daemon support tar and compress.
- X230-To get a directory, append ".tar" to the name of the directory.
- X230-To get a compress version, append ".Z" to the name of the directory or file.
- X230-
- X230-
- X230 Guest login ok, access restrictions apply.
- Xftp> cd lude-crim
- X250 CWD command successful.
- Xftp> binary
- X200 Type set to I.
- Xftp> ls
- X200 PORT command successful.
- X150 Opening ASCII mode data connection for file list.
- XX11R5
- XTeX-3.141
- Xxrolo-v2p6
- Xprocmail-2.7
- Xet3.0-alpha.1
- Xlucid-19.3
- Xhyperbole-3.04
- Xwafe-0.92
- Xcvswrapper-0.9
- Xxntp-3.0
- Xbibview-1.4
- Xetgdb
- Xperl-4.035
- Xlude-1.1
- X226 Transfer complete.
- X859 bytes received in 0.3 seconds (2.8 Kbytes/s)
- Xftp> get lude-1.1.tar.Z
- X200 PORT command successful.
- X150 Opening BINARY mode data connection for /bin/tar.
- X226 Transfer complete.
- Xlocal: lude-1.1.tar.Z remote: lude-1.1.tar.Z
- Xftp> get perl-4.035.tar.Z
- X200 PORT command successful.
- X150 Opening BINARY mode data connection for /bin/tar.
- X226 Transfer complete.
- Xlocal: perl-4.035.tar.Z remote: perl-4.035.tar.Z
- Xftp> quit
- X221 Goodbye.
- X
- X% zcat lude-1.1.tar.Z | tar xf -
- X% rm lude-1.1.tar.Z
- X% zcat perl-4.035.tar.Z | tar xf -
- X% rm perl-4.035.tar.Z
- X% sh
- X$ PERL=/usr/local/soft/perl-4.035/run/poly/sun4.1_sparc/bin/perl
- X$ cd /usr/local/soft/lude-1.1/run/poly_eng/sun4.1_sparc/bin
- X$ $PERL lude -sof perl-4.035 -mod poly -cl sun4.1_sparc -link
- X$ ./lude -sof lude-1.1 -mod poly -class sun4.1_sparc -link
- X$ exit
- X%
- X
- X
- XThen, any other software package is easily installed. Suppose that you
- Xalso downloaded modula3-2.11.tar.Z in /usr/local/soft using FTP.
- XThe following commands are now sufficient to install it.
- X
- X% zcat modula3-2.11.tar.Z | tar xf -
- X% rm modula3-2.11.tar.Z
- X% lude -sof modula3-2.11 -mod poly -class sun4.1_sparc -link
- X
- X
- XHowever, if lude or perl are not available for your
- Xarchitecture, their README files should explain how they can be
- Xcompiled and installed.
- X
- XEach software package is placed in its own subtree. Moreover, every
- Xversion of a software package is treated as a different package with its
- Xown subtree. The unique name of a package is then formed by the
- Xconcatenation of its name and version number (e.g. emacs-18.58,
- Xmodula3-2.11). This enables more than one version of the same software
- Xto coexist peacefully during transitions and simplifies the management
- Xof disk space since each package is kept separate.
- X
- XInside the subtree, three subdirectories are present src,
- Xrun and install, as well as a file, history, which traces where
- Xthis package was copied from.
- X
- X Software-Version
- X ______________________________|____________________
- X / | | \
- X src run history install
- X ___|___ ________|____ ___|___
- X / | \ / | \ / | \
- Xorig mod ... share mod ... orig mod ...
- X _|_ _|_____________ ______|______
- X / \ / | \ / \
- X man ... `class` share ... `class` ...
- X ______________|____ _|_ | |
- X / | | | | \ / \ | |
- X bin man lib etc info ... man ... mapping mapping
- X
- X
- XThe lude tools are used to create this file hierarchy, to install
- Xsymbolic links in the standard directories (/usr/local/bin, lib...)
- Xand to make the associated documentation available via World Wide Web
- Xand WAIS document browsing servers.
- X
- XEach installed software package has an associated summary under the
- XInternet Anonymous FTP Archive format (IAFA-PACKAGES). Moreover,
- Xman pages, info files and miscellaneous files in the doc subdirectory
- Xof a package are recognized by the documentation indexing tool.
- XPortions of this documentation (synopsis of man pages, IAFA-PACKAGES
- Xfiles...) is indexed through the Wide Area Information System (WAIS)
- Xand all these files are linked to form a World Wide Web hypertext
- Xdocument. Thus, it permits keyword searches to find relevant
- Xsoftware packages, and easy hypertext navigation through
- Xthe IAFA-PACKAGES, info, doc and man pages that accompany a
- Xsoftware package, using a single browsing tool.
- X
- X
- XMost of this announcement was extracted from the info manual that
- Xcomes with Lude. Some may like to use Lude servers to browse source code,
- Xor to check how packages were compiled on a certain platform
- X(modifications to Makefiles) while others will directly install the
- Xpre compiled binaries. One should always be VERY CAREFUL executing
- Xdownloaded binaries and probably never do so as superuser.
- X
- XEnjoy!
- END_OF_FILE
- if test 12877 -ne `wc -c <'lude-1.1/src/orig/README'`; then
- echo shar: \"'lude-1.1/src/orig/README'\" unpacked with wrong size!
- fi
- # end of 'lude-1.1/src/orig/README'
- fi
- if test -f 'lude-1.1/src/orig/bug-report/lude-bug.el' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lude-1.1/src/orig/bug-report/lude-bug.el'\"
- else
- echo shar: Extracting \"'lude-1.1/src/orig/bug-report/lude-bug.el'\" \(1257 characters\)
- sed "s/^X//" >'lude-1.1/src/orig/bug-report/lude-bug.el' <<'END_OF_FILE'
- X# Lude-bug - Util to report lude bugs.
- X
- X# Copyright (C) 1992 Stephane Boucher.
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with this program; if not, write to the Free Software
- X# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X(defvar lude-bug-template-file "/usr/users/sbo/lude/bug-report/template"
- X "File containing the template to use for Lude's bug repports.")
- X
- X(defvar lude-bug-email-addr "lude-bugs@iro.umontreal.ca"
- X "E-mail address where to send bug reports.")
- X
- X(defun lude-report-bug ()
- X (interactive)
- X (mail)
- X (goto-char (point-min))(end-of-line)
- X (insert lude-bug-email-addr)
- X (goto-char (point-max))
- X (insert-file lude-bug-template-file)
- X (goto-char (point-min))(next-line 1)(end-of-line))
- X
- X(provide 'lude-bug)
- END_OF_FILE
- if test 1257 -ne `wc -c <'lude-1.1/src/orig/bug-report/lude-bug.el'`; then
- echo shar: \"'lude-1.1/src/orig/bug-report/lude-bug.el'\" unpacked with wrong size!
- fi
- # end of 'lude-1.1/src/orig/bug-report/lude-bug.el'
- fi
- if test -f 'lude-1.1/src/orig/src/ludeadminc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lude-1.1/src/orig/src/ludeadminc'\"
- else
- echo shar: Extracting \"'lude-1.1/src/orig/src/ludeadminc'\" \(8880 characters\)
- sed "s/^X//" >'lude-1.1/src/orig/src/ludeadminc' <<'END_OF_FILE'
- X# ludeadminc - Project lude.
- X# Copyright (C) 1991,1992 Pierre Laplante
- X# Copyright (C) 1992,1993 Stephane Boucher, Ecole Polytechnique de Montreal.
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with this program; if not, write to the Free Software
- X# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X$FULL_VERSION.= '$Id: ludeadminc,v 1.4 1993/03/17 19:44:08 sbo Exp $' ."\n";
- X
- X#-----------------------------------------------------------------------
- X#
- X# Local definitions
- X#
- X
- Xsub localDef {
- X
- X# Environnement
- X
- X $ENV{'SHELL'} = '/bin/sh' if $ENV{'SHELL'} ne '';
- X
- X # debug level
- X if (!defined($Debugvalue)) { $Debugvalue=$DEFAULTDEBUGLEVEL; }
- X
- X # get progname
- X $Progname=&BaseName($0);
- X
- X $Server=$Software=$Modification="";
- X $Create=$Mount_tfs=$Umount_tfs=$Lock=$Release=$FALSE;
- X $Duplicate=$Unduplicate=$FALSE;
- X $Show=$Verbose=$FALSE;
- X}
- X
- X
- Xsub ExecCommands {
- X local($retval)=1; # Success by default
- X
- X if ($Server ne '/') {
- X &DispSoftFoundOnce("$SERVER_DIR/$Server", $Software, $Modification, $Class);
- X }
- X else {
- X &DispSoftFoundOnce("$SOFT_DIR", $Software, $Modification, $Class);
- X }
- X
- X if ($Create) {
- X &Verbose($VERB_START_CREATE, $Software, $Modification, $Class);
- X if (! &Create($Server, $Software, $Modification, $Class)) {
- X return 0;
- X }
- X &Warning($VERB_CREATE_DONE);
- X &HistAppend("create", $Server, $Software, $Modification, $Class);
- X }
- X if ($Duplicate) {
- X &Verbose($VERB_START_DUPLICATE, "$Software/src/$Modification");
- X if (&Duplicate($Server, $Software, $Modification)) {
- X return 0;
- X }
- X &Warning($VERB_DUPLICATE_DONE);
- X &HistAppend("duplicate", $Server, $Software, $Modification, '');
- X }
- X if ($Unduplicate) {
- X &Verbose($VERB_START_UNDUPLICATE, "$Software/src/$Modification");
- X if (! &Unduplicate($Server, $Software, $Modification)) {
- X return 0;
- X }
- X &Warning($VERB_UNDUPLICATE_DONE);
- X &HistAppend("unduplicate", $Server, $Software, $Modification, '');
- X }
- X if ($Mount_tfs) {
- X &Verbose($VERB_START_MOUNT_TFS);
- X if (! &Mount_tfs($Server, $Software, $Modification)) {
- X return 0;
- X }
- X &Warning($VERB_MOUNT_TFS_DONE);
- X &HistAppend("mount_tfs", $Server, $Software, $Modification, $Class);
- X }
- X if ($Umount_tfs) {
- X &Verbose($VERB_START_UMOUNT_TFS);
- X if (! &Umount_tfs($Server, $Software, $Modification)) {
- X return 0;
- X }
- X &Warning($VERB_UMOUNT_TFS_DONE);
- X &HistAppend("umount_tfs", $Server, $Software, $Modification, $Class);
- X }
- X if ($Lock) {
- X &Verbose($VERB_START_LOCK);
- X if (! &Lock($Server, $Software, $Modification, $Class)) {
- X return 0;
- X }
- X &Warning($VERB_LOCK_DONE);
- X &HistAppend("lock", $Server, $Software, $Modification, $Class);
- X }
- X if ($Release) {
- X &Verbose($VERB_START_RELEASE);
- X if (! &Release($Server, $Software, $Modification, $Class)) {
- X return 0;
- X }
- X &Warning($VERB_RELEASE_DONE);
- X &HistAppend("release", $Server, $Software, $Modification, $Class);
- X }
- X
- X return $retval;
- X}
- X
- X
- X#-----------------------------------------------------------------------
- X#
- X# Initialisation
- X#
- X# Returns : the number of commands left to do
- X# or -1 if any error
- Xsub Initialisation {
- X local($retval)=1; # success by default
- X local($cmdsToDo)=0;
- X local($displayVersion)=$FALSE;
- X local($displayFullVersion)=$FALSE;
- X
- X# Globals definitions
- X
- X# Locals definitions
- X
- X &localDef();
- X
- X# scan aguments
- X
- X local($class_arg) =&BldRegexpMinRqr('class', 2);
- X local($create_arg) =&BldRegexpMinRqr('create', 2);
- X local($debug_arg) =&BldRegexpMinRqr('debug', 2);
- X local($duplicate_arg) =&BldRegexpMinRqr('duplicate', 2);
- X local($full_version_arg)=&BldRegexpMinRqr("full-version", 1);
- X local($help_arg) =&BldRegexpMinRqr("help", 1);
- X local($language_arg) ='language';
- X local($lock_arg) =&BldRegexpMinRqr("lock", 2);
- X local($modification_arg)=&BldRegexpMinRqr("modification", 3);
- X local($mount_tfs_arg) =&BldRegexpMinRqr("mount_tfs", 3);
- X local($release_arg) =&BldRegexpMinRqr("release", 1);
- X local($server_arg) =&BldRegexpMinRqr("server", 2);
- X local($show_arg) =&BldRegexpMinRqr("show", 2);
- X local($software_arg) =&BldRegexpMinRqr("software", 2);
- X local($umount_tfs_arg) =&BldRegexpMinRqr('umount_tfs', 2);
- X local($unduplicate_arg) =&BldRegexpMinRqr('unduplicate', 2);
- X local($verbose_arg) =&BldRegexpMinRqr("verbose", 4);
- X local($version_arg) =&BldRegexpMinRqr("version", 4);
- X
- X while ($_=$ARGV[0],/^-/) {
- X
- X last if (/^--$/);
- X
- X shift(@ARGV);
- X
- X if (/^-$class_arg$/o) { &Arg($_, *Class, '[\-\w+.]+'); }
- X elsif (/^-$create_arg$/o) { $cmdsToDo++; $Create=$TRUE; }
- X elsif (/^-$debug_arg$/o) { &Arg($_, *Debuglevel, '[0-9]+'); }
- X elsif (/^-$duplicate_arg$/o) { $cmdsToDo++; $Duplicate=$TRUE; }
- X elsif (/^-$full_version_arg$/o) { $displayFullVersion=$TRUE; }
- X elsif (/^-($help_arg)|([?])$/o) { &Help; }
- X elsif (/^-$language_arg$/o) { shift @ARGV; } # Just ignore it
- X elsif (/^-$lock_arg$/o) { $cmdsToDo++; $Lock=$TRUE; }
- X elsif (/^-$modification_arg$/o) {
- X &Arg($_, *Modification, '[\-\w+.]+');
- X }
- X elsif (/^-$mount_tfs_arg$/o) {
- X if ($CONF_HAVE_TFS) { $cmdsToDo++; $Mount_tfs=$TRUE; }
- X else { &Usage($ERR_TFS_NOT_SUPPORTED); }
- X }
- X elsif (/^-$release_arg$/o) { $cmdsToDo++; $Release=$TRUE; }
- X elsif (/^-$show_arg$/o) { $Show=$Verbose=$TRUE; } # verbose implicit
- X elsif (/^-$server_arg$/o) { &Arg($_, *Server, '[\-\w+.]+'); }
- X elsif (/^-$software_arg$/o) {
- X &Arg($_, *Software, '[\-\w+.]+');
- X }
- X elsif (/^-$umount_tfs_arg$/o){ $cmdsToDo++; $Umount_tfs=$TRUE; }
- X elsif (/^-$unduplicate_arg$/o) { $cmdsToDo++; $Unduplicate=$TRUE; }
- X elsif (/^-$verbose_arg$/o) { $Verbose=$TRUE; }
- X elsif (/^-$version_arg$/o) { $displayVersion=$TRUE; }
- X else {
- X &Usage($INVALID_ARGUMENT, $_);
- X }
- X }
- X
- X # Display the version immediately if requested
- X if ($displayVersion) {
- X print $OUT $VERSION . "\n";
- X }
- X # Display the full version (i.e. RCS revs) immediately if requested
- X if ($displayFullVersion) {
- X print $OUT $FULL_VERSION . "\n";
- X }
- X
- X #
- X # Validation of the arguments
- X #
- X # Extra and invalid argument
- X if ( $ARGV[0] ne "" ) {
- X &Usage($INVALID_ARGUMENT, $ARGV[0]);
- X }
- X
- X # -class with anything
- X # -debug with anything
- X # -duplicate with anything but ...
- X if ($Duplicate && ($Mount_tfs || $Umount_tfs || $Unduplicate)) {
- X &Usage($ERR_INCOMP_ARGS, '-mount_tfs|-umount_tfs|-unduplicate');
- X }
- X # -lock with anything
- X # -modification with anything
- X # -modification must be specified with...
- X if ($Modification eq '' && ($Create)) {
- X &Usage($ERR_ARG_REQUIRED, '-modification');
- X }
- X # -mount_tfs with anything but ...
- X if ($Mount_tfs && ($Umount_tfs)) {
- X &Usage($ERR_INCOMP_ARGS, '-mount_tfs', '-umount_tfs');
- X }
- X # -release with anything
- X # -server with anything
- X # -software with anything
- X # -software is required with ...
- X if ($Software eq '' && ($Create || $Mount_tfs ||
- X $Umount_tfs || $Lock || $Release)) {
- X &Usage($ERR_ARG_REQUIRED, '-software');
- X }
- X # -umount_tfs with anything but ...
- X if ($Umount_tfs && ($Mount_tfs)) {
- X &Usage($ERR_INCOMP_ARGS, '-umount_tfs', '-mount_tfs');
- X }
- X # -unduplicate with anything but ...
- X if ($Unduplicate && ($Mount_tfs || $Umount_tfs || $Duplicate)) {
- X &Usage($ERR_INCOMP_ARGS, '-mount_tfs|-umount_tfs|-duplicate');
- X }
- X # -verbose with anything
- X
- X # Find the default class if not already specified
- X local(@classes);
- X if ($Class eq '') {
- X local($cmd);
- X if ($Create) {
- X $cmd='class';
- X chop($Class=`$cmd`);
- X @classes=($Class);
- X }
- X else {
- X $cmd='class -l';
- X @classes=split(/\s+/, `$cmd`);
- X }
- X }
- X else {
- X @classes=($Class);
- X }
- X
- X if (! $Create) {
- X # Find a server
- X local($searchcmd)='lst';
- X
- X local(@serverfound)=
- X &FindSoftware($searchcmd, $Server, $Software, $Modification, @classes);
- X
- X # If the list @serverfound is empty, that means an error
- X if (scalar(@serverfound) == 0) {
- X &Error($ERR_NOSER, $Software);
- X }
- X else {
- X ($Server, $Software, $Modification, $Class)=
- X split($;, $serverfound[$[]);
- X }
- X }
- X elsif ($Server eq '') {
- X # Case of a create command with no server specified
- X $Server='/';
- X }
- X
- X return $cmdsToDo;
- X}
- X
- X1;
- X
- X# ;;; Local Variables: ***
- X# ;;; mode:perl ***
- X# ;;; End: ***
- END_OF_FILE
- if test 8880 -ne `wc -c <'lude-1.1/src/orig/src/ludeadminc'`; then
- echo shar: \"'lude-1.1/src/orig/src/ludeadminc'\" unpacked with wrong size!
- fi
- # end of 'lude-1.1/src/orig/src/ludeadminc'
- fi
- if test -f 'lude-1.1/src/orig/src/ludeinc' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lude-1.1/src/orig/src/ludeinc'\"
- else
- echo shar: Extracting \"'lude-1.1/src/orig/src/ludeinc'\" \(13078 characters\)
- sed "s/^X//" >'lude-1.1/src/orig/src/ludeinc' <<'END_OF_FILE'
- X# ludeinc - Project lude.
- X# Copyright (C) 1991, 1992 Pierre Laplante.
- X# Copyright (C) 1992 Stephane Boucher.
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with this program; if not, write to the Free Software
- X# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X$FULL_VERSION.= '$Id: ludeinc,v 1.5 1993/06/01 16:57:02 dagenais Exp $' ."\n";
- X
- X#-----------------------------------------------------------------------
- X#
- X# ExecCommands: Determine which command to execute.
- X#
- Xsub ExecCommands {
- X local($retval)=1; # Success by default
- X local($install);
- X
- X # Set $softdir in case it is needed later to DispSoftFoundOnce
- X if ($Server ne '/') {
- X $softdir="$SERVER_DIR/$Server";
- X }
- X else {
- X $softdir=$LOCAL_DIR;
- X }
- X
- X $install="$SOFT_DIR/$Software/install/$Modification/$Class";
- X
- X if ($Rmlink) {
- X &DispSoftFoundOnce($softdir, $Software, $Modification, $Class);
- X &Verbose($VERB_START_RMLINK);
- X
- X # Read the mapping file
- X if ( -r "$install/$MAPPING" ) {
- X if (! &ReadMapping("$install/$MAPPING")) {
- X return 0;
- X }
- X }
- X
- X if ( -x "$install/$BEFORERMLINK") {
- X &RunCmd("$install/$BEFORERMLINK");
- X }
- X
- X if ((&RmLinks("$SOFT_DIR/$Software/run/$Modification/$Class", "$LOCAL_DIR", "")+
- X &RmLinkDoc($Software, $Modification)) <=> 2) {
- X # all 2 operation did not succeed
- X return 0;
- X }
- X if ( -x "$install/$AFTERRMLINK") {
- X &RunCmd("$install/$AFTERRMLINK");
- X }
- X
- X &Warning($WARN_RMLINK);
- X &HistAppend("rmlink", '/', $Software, $Modification, $Class);
- X }
- X
- X # Copy the files
- X if ($Copy ne '') {
- X &DispSoftFoundOnce($softdir, $Software, $Modification, $Class);
- X &Verbose($VERB_START_COPY, $Copy);
- X
- X local($targ);
- X if ($Target ne '') { $targ=$Target; }
- X elsif ($Lntarget ne '') { $targ=$Lntarget; }
- X else { $targ='/'; }
- X
- X if (! &Copy($targ, $Server,
- X $Software, $Modification, $Class, $Copy)) {
- X return 0;
- X }
- X else {
- X if ($Lntarget ne '') {
- X if (! symlink("$SERVER_DIR/$targ/$Software", "$SOFT_DIR/$Software")) {
- X &NFError($ERR_SYMLINK,
- X "$SERVER_DIR/$targ/$Software", "$SOFT_DIR/$Software",
- X "");
- X return 0;
- X }
- X }
- X }
- X
- X &Warning($WARN_COPY);
- X &HistAppend("copy: ($Copy)", $targ, $Software, $Modification, $Class);
- X }
- X elsif ($Rmcopy) {
- X &DispSoftFoundOnce($softdir, $Software, $Modification, $Class);
- X &Verbose($VERB_START_RMCOPY);
- X
- X local($targ);
- X if ($Target ne '') { $targ=$Target; }
- X elsif ($Lntarget ne '') { $targ=$Lntarget; }
- X else { $targ='/'; }
- X
- X &RmCopy($targ, $Software, $Modification, $Class);
- X &Warning($WARN_RMCOPY);
- X &HistAppend("rmcopy", $targ, $Software, $Modification, $Class);
- X }
- X
- X # Do the links
- X if ( $Link ) {
- X &DispSoftFoundOnce($softdir, $Software, $Modification, $Class);
- X &Verbose($VERB_START_LINK);
- X
- X # Read the mapping file
- X if ( -r "$install/$MAPPING" ) {
- X if (! &ReadMapping("$install/$MAPPING")) {
- X return 0;
- X }
- X }
- X
- X if ( -x "$install/$BEFORELINK") {
- X &RunCmd("$install/$BEFORELINK");
- X }
- X
- X &MkLinks("$SOFT_DIR/$Software/run/$Modification/$Class", "$LOCAL_DIR", "");
- X &LinkDoc($Software, $Modification);
- X
- X if ( -x "$install/$AFTERLINK") {
- X &RunCmd("$install/$AFTERLINK");
- X }
- X
- X &Warning($WARN_LINK);
- X &HistAppend("link", '/', $Software, $Modification, $Class);
- X }
- X
- X return $retval;
- X}
- X
- X
- X#-----------------------------------------------------------------------
- X#
- X# Local definitions
- X#
- X
- Xsub localDef {
- X
- X# Environnement
- X
- X $ENV{'SHELL'} = '/bin/sh' if $ENV{'SHELL'} ne '';
- X
- X# debug level
- X
- X if (!defined($Debugvalue)) { $Debugvalue=$DEFAULTDEBUGLEVEL; }
- X
- X# get progname
- X
- X $Progname=&BaseName($0);
- X
- X
- X
- X#-----------------------------------------------------------------------
- X#
- X# Globals definitions
- X#
- X
- Xif (!defined($Progname)) { $Progname="ludeinc"; }
- X
- Xif (!defined($HELP)) {
- X $HELP="There is no help defined for this program.\n";
- X}
- X
- X $Link=$Rmlink=$Rmcopy=$Index=
- X $Force=$FALSE;
- X $Show=$Verbose=$FALSE;
- X $Modification=$Class=$Preserve=$Software="";
- X $Server='';
- X $Copy="";
- X $Target=$Lntarget="";
- X $Config="";
- X}
- X
- X#-----------------------------------------------------------------------
- X#
- X# Description: Initialise some variables.
- X# parse and validate the command line arguments.
- X#
- X# Parameters : none
- X#
- X# return : the number of commands still to be done
- X# or -1 if an error occured
- X#
- Xsub Initialisation {
- X local($cmdsToDo)=0; # Nothing left to do
- X local($test)=$FALSE; # By default the soft must be released
- X local($displayVersion)=$FALSE;
- X local($displayFullVersion)=$FALSE;
- X
- X # Locals definitions
- X &localDef();
- X
- X local($class_arg) =&BldRegexpMinRqr("class", 2);
- X local($config_arg) =&BldRegexpMinRqr("config", 3);
- X local($copy_arg) =&BldRegexpMinRqr("copy", 3);
- X local($debug_arg) =&BldRegexpMinRqr("debug", 1);
- X local($force_arg) =&BldRegexpMinRqr("force", 2);
- X local($full_version_arg)=&BldRegexpMinRqr("full-version", 2);
- X local($help_arg) =&BldRegexpMinRqr("help", 1);
- X local($install_arg) =&BldRegexpMinRqr("install", 3);
- X local($language_arg) ='language';
- X local($link_arg) =&BldRegexpMinRqr("link", 2);
- X local($lntarget_arg) =&BldRegexpMinRqr("lntarget", 2);
- X local($modification_arg)=&BldRegexpMinRqr("modification", 1);
- X local($preserve_arg) =&BldRegexpMinRqr("preserve", 1);
- X local($rmcopy_arg) =&BldRegexpMinRqr("rmcopy", 3);
- X local($rmlink_arg) =&BldRegexpMinRqr("rmlink", 3);
- X local($server_arg) =&BldRegexpMinRqr("server", 2);
- X local($show_arg) =&BldRegexpMinRqr("show", 2);
- X local($software_arg) =&BldRegexpMinRqr("software", 2);
- X local($target_arg) =&BldRegexpMinRqr("target", 2);
- X local($test_arg) =&BldRegexpMinRqr("test", 2);
- X local($uninstall_arg) =&BldRegexpMinRqr("uninstall",1);
- X local($verbose_arg) =&BldRegexpMinRqr("verbose", 4);
- X local($version_arg) =&BldRegexpMinRqr("version", 4);
- X
- X while ($_=$ARGV[0],/^-/) {
- X
- X last if (/^--$/);
- X
- X shift(@ARGV);
- X
- X if (/^-$class_arg$/o) { &Arg($_, *Class, '[\-\w+.]+'); }
- X elsif (/^-$config_arg$/o) { &Arg($_, *Config, '[^\s]+'); }
- X elsif (/^-$copy_arg$/o) { $cmdsToDo++;
- X &Arg($_, *Copy,
- X '((src,run)|(run,src)|(src)|(run)|(none))');
- X }
- X elsif (/^-$debug_arg$/o) { &Arg($_, *Debugvalue, '[0-9]+'); }
- X elsif (/^-$force_arg$/o) { $Force=$TRUE; }
- X elsif (/^-$full_version_arg$/o) { $displayFullVersion=$TRUE; }
- X elsif (/^-($help_arg)|([?])$/o) { &Help; }
- X elsif (/^-$install_arg$/o) { $cmdsToDo+=2; $Copy='run';
- X $Link=$TRUE; }
- X elsif (/^-$language_arg$/o) { shift @ARGV; } # Just ignore it
- X elsif (/^-$link_arg$/o) { $cmdsToDo++; $Link=$TRUE; }
- X elsif (/^-$lntarget_arg$/o) {
- X &Arg($_, *Lntarget, '[\-\w+.]+');
- X }
- X elsif (/^-$modification_arg$/o) {
- X &Arg($_, *Modification, '[\-\w+.]+');
- X }
- X elsif (/^-$preserve_arg$/o) { &Arg($_, *Preserve, '[^\s]+'); }
- X elsif (/^-$rmcopy_arg$/o) { $cmdsToDo++; $Rmcopy=$TRUE; }
- X elsif (/^-$rmlink_arg$/o) { $cmdsToDo++; $Rmlink=$TRUE; }
- X elsif (/^-$server_arg$/o) { &Arg($_, *Server, '[\-\w+.]+'); }
- X elsif (/^-$show_arg$/o) { $Show=$Verbose=$TRUE; } # Show implies Verbose
- X elsif (/^-$software_arg$/o) {
- X &Arg($_, *Software, '[\-0-9a-zA-Z.+_]+');
- X }
- X elsif (/^-$target_arg$/o) {
- X &Arg($_, *Target, '[\-0-9a-zA-Z.+_]+');
- X }
- X elsif (/^-$test_arg$/o) { $test=$TRUE; }
- X elsif (/^-$uninstall_arg$/o) { $cmdsToDo+=2;
- X $Rmcopy=$Rmlink=$TRUE;
- X }
- X elsif (/^-$verbose_arg$/o) { $Verbose=$TRUE; }
- X elsif (/^-$version_arg$/o) { $displayVersion=$TRUE; }
- X else {
- X &Usage($INVALID_ARGUMENT, $_);
- X }
- X }
- X
- X # Display the version immediately if requested
- X if ($displayVersion) {
- X print $OUT $VERSION ."\n";
- X }
- X # Display the full version (i.e. RCS revs) immediately if requested
- X if ($displayFullVersion) {
- X print $OUT $FULL_VERSION ."\n";
- X }
- X
- X #
- X # Validation of the arguments
- X #
- X # Extra and invalid argument
- X if ( $ARGV[0] ne "" ) {
- X &Usage($INVALID_ARGUMENT, $ARGV[0]);
- X }
- X
- X # -class with anything
- X # -config with anything
- X # -copy with anything but ...
- X if ($Copy ne '' && ($Rmlink || $Rmcopy)) {
- X &Usage($ERR_INCOMP_ARGS, '-copy', '-rmlink|-rmcopy');
- X }
- X # -force with anything but ...
- X if ($Force && ($Target ne '' || $Lntarget ne '' ||
- X $Rmlink || $Preserve ne '' || $Rmcopy)) {
- X &Usage($ERR_INCOMP_ARGS, '-force',
- X '-target|-lntraget|-rmlink|-preserve|-rmcopy');
- X }
- X # -link with anything but ...
- X if ($Link && ($Target ne '' || $Rmlink || $Rmcopy)) {
- X &Usage($ERR_INCOMP_ARGS, '-link', '-target|-rmlink|-rmcopy');
- X }
- X # -lntarget with anything but ...
- X if ($Lntarget ne '' && ($Rmlink || $Target ne '')) {
- X &Usage($ERR_INCOMP_ARGS, '-lntarget',
- X '-rmlink|-target');
- X }
- X # -modification with anything
- X # -preserve with anything but ...
- X if ($Preserve ne '' && ($Target ne '' ||
- X $Rmlink || $Force || $Rmcopy)) {
- X &Usage($ERR_INCOMP_ARGS, '-preserve',
- X '-target|-rmlink|-force|-rmcopy');
- X }
- X # -rmcopy with anything but ...
- X if ($Rmcopy && ($Server ne '' || $Copy ne '' || $Link ||
- X $Force || $Preserve ne '')) {
- X &Usage($ERR_INCOMP_ARGS, '-rmcopy',
- X '-server|-target|-copy|-link|-force|-preserve');
- X }
- X # -rmlink with anything but ...
- X if ($Rmlink && ($Server ne '' || $Target ne '' ||
- X $Copy ne '' || $Lntarget ne '' || $Link ||
- X $Force || $Preserve ne '')) {
- X &Usage($ERR_INCOMP_ARGS, '-rmlink',
- X '-server|-target|-copy|-lntraget|-link|-force|-preserve');
- X }
- X # -server with anything but ...
- X if ($Server ne '' && ($Rmlink || $Rmcopy)) {
- X &Usage($ERR_INCOMP_ARGS, '-server', '-rmlink|-rmcopy');
- X }
- X # -software must be specified with...
- X if ($Software eq '' && ($Copy ne '' || $Rmcopy ||
- X $Link || $Rmlink)) {
- X &Usage($ERR_ARG_REQUIRED, '-software');
- X }
- X # -show with anything
- X # -target with anything but ...
- X if ($Target ne '' && ($Man || $Info || $Doc ||
- X $Link || $Rmlink || $Force || $Lntarget ne '' ||
- X $Preserve ne '')) {
- X &Usage($ERR_INCOMP_ARGS, '-target',
- X '-man|-info|-doc|-link|-force|-lntarget|-rmlink|-preserve|-rmcopy');
- X }
- X # -test requires -copy or -rmcopy or -link or -rmlink
- X if ($test == $TRUE && ($Copy eq '' && ! $Rmcopy && ! $Link && ! $Rmlink)) {
- X &Usage($ERR_ARG_REQUIRES, '-test',
- X '-copy|-rmcopy|-link|-rmlink');
- X }
- X # -verbose with anything
- X
- X # Find the default class if not already specified
- X local(@classes);
- X if ($Class eq '') {
- X @classes=split(/\s+/, `class -l`);
- X }
- X else {
- X @classes=($Class);
- X }
- X
- X # Set the search commands
- X #
- X local($searchcmd);
- X if ($Copy ne '' || $Rmcopy) {
- X $searchcmd='ls';
- X }
- X else {
- X $searchcmd='l';
- X }
- X
- X # Do not requre the file /usr/local/soft/install/mod/class/LUDE
- X if ($test || $Rmcopy || $Rmlink) { $searchcmd.='t'; }
- X
- X # Choose the server where to search
- X local($searchServer)='';
- X if ($Rmcopy) {
- X # In the case of Rmcopy, we use $Target or $Lntarget
- X if ($Target ne '') {
- X $searchServer=$Target;
- X }
- X elsif ($Lntarget ne '') {
- X $searchServer=$Lntarget;
- X }
- X }
- X else {
- X $searchServer=$Server;
- X }
- X
- X local(@serverfound)=
- X &FindSoftware($searchcmd, $searchServer, $Software, $Modification, @classes);
- X
- X # If the list @serverfound is empty, that means an error
- X if (scalar(@serverfound) == 0) {
- X &Error($ERR_NOSER, $Software);
- X }
- X else {
- X ($Server, $Software, $Modification, $Class)=split($;, $serverfound[$[]);
- X if ($Rmcopy) {
- X if ($Lntarget ne '') {
- X $Lntarget=$Server;
- X }
- X else {
- X $Target=$Server;
- X }
- X }
- X }
- X
- X # Get the version of lude that was used to install the found software
- X local(%kw)=&GetKeyWord($Server, $Software,
- X "$Modification/$LUDE_FILE", 'LUDE-VERSION');
- X if ($kw{'LUDE-VERSION'} =~ m|^\s*([0-9]+)\.([0-9]+)\s*$|o) {
- X $LudeVersionUsedForSoft{'major'} = $1;
- X $LudeVersionUsedForSoft{'minor'} = $2;
- X }
- X else {
- X &Error($ERR_NO_LUDE_VERSION_USED_FOR_SOFT);
- X }
- X
- X # Test to make sure that that a copy on top of itself is not made
- X if ($Copy ne '' &&
- X ((($Target eq '' || $Lntarget eq '') && $Server eq '/') ||
- X ($Target eq $Server || $Lntarget eq $Server))) {
- X &Error($ERR_CANNOT_CP_SOFT_ON_ITSELF);
- X }
- X return $cmdsToDo;
- X}
- X
- X1;
- X
- X# ;;; Local Variables: ***
- X# ;;; mode:perl ***
- X# ;;; End: ***
- END_OF_FILE
- if test 13078 -ne `wc -c <'lude-1.1/src/orig/src/ludeinc'`; then
- echo shar: \"'lude-1.1/src/orig/src/ludeinc'\" unpacked with wrong size!
- fi
- # end of 'lude-1.1/src/orig/src/ludeinc'
- fi
- if test -f 'lude-1.1/src/orig/src/ludelist' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'lude-1.1/src/orig/src/ludelist'\"
- else
- echo shar: Extracting \"'lude-1.1/src/orig/src/ludelist'\" \(5492 characters\)
- sed "s/^X//" >'lude-1.1/src/orig/src/ludelist' <<'END_OF_FILE'
- X#!/usr/local/bin/perl
- X
- X# ludelist - Project lude.
- X# Copyright (C) 1992,1993 Stephane Boucher, Ecole Polytechnique de Montreal.
- X#
- X# This program is free software; you can redistribute it and/or modify
- X# it under the terms of the GNU General Public License as published by
- X# the Free Software Foundation; either version 1, or (at your option)
- X# any later version.
- X#
- X# This program is distributed in the hope that it will be useful,
- X# but WITHOUT ANY WARRANTY; without even the implied warranty of
- X# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- X# GNU General Public License for more details.
- X#
- X# You should have received a copy of the GNU General Public License
- X# along with this program; if not, write to the Free Software
- X# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- X
- X$FULL_VERSION=
- X "-- ludelist --\n" .
- X "This is part of LUDE (Logitheque Universitaire Distribuee et Extensible)\n\n";
- X
- X$FULL_VERSION.= '$Id: ludelist,v 1.3 1993/03/17 14:56:55 sbo Exp $' ."\n";
- X
- X$VERSION='%VERSION%';
- X
- X#-----------------------------------------------------------------------
- X#
- X# Globals definitions
- X#
- X
- X$PL_INCDIR="%PL_INCDIR%";
- X$LANG_PATH="%LANG_PATH%:../lang";
- X$LUDEMISC="ludemisc";
- X$LUDELISTINC="ludelistinc";
- X
- X#-----------------------------------------------------------------------
- X# Main program
- X#
- Xmain: {
- X local($exitval)=0; # Success by default
- X
- X unshift(@INC,"$PL_INCDIR");
- X
- X require('config.pl');
- X
- X # Load and initialise the language support immediatly so
- X # that the messages are available the soonest possible.
- X # If an error occure in this phase, the execution is
- X # immediatly aborted.
- X require('ludelang.pl');
- X &InitLang($CONF_LANG_DEFAULT, $LANG_PATH, 'ludemisc', @ARGV);
- X &InitLang($CONF_LANG_DEFAULT, $LANG_PATH, 'ludelist', @ARGV);
- X &InitLang($CONF_LANG_DEFAULT, $LANG_PATH, 'ludedatafiles', @ARGV);
- X
- X require($LUDEMISC);
- X require($LUDELISTINC);
- X require("BldRegexpMinRqr.pl");
- X
- X if (! &VerifySystem) {
- X $exitval=1;
- X }
- X elsif (! &Initialisation) {
- X $exitval=2;
- X }
- X elsif (! &ExecCommands) {
- X $exitval=3;
- X }
- X
- X exit $exitval;
- X}
- X
- X
- X#-----------------------------------------------------------------------
- X# Description : List the softwares according the given specification.
- X#
- X# Parameters : $listtype - type of listing requested
- X# @lstsoft - list of softwares found.
- X#
- X# Returns : nothing
- X#
- Xsub List {
- X local($listtype, @lstsoft)=@_;
- X
- X if ($listtype == $RAW_LISTING) {
- X &RawList(@lstsoft);
- X }
- X elsif ($listtype == $SHORT_LISTING) {
- X &ShortList(@lstsoft);
- X }
- X elsif ($listtype == $LONG_LISTING) {
- X &LongList(@lstsoft);
- X }
- X else {
- X &Error($ERR_INTERNAL,
- X sprintf("\"(%d)\", %s:%d", scalar(@_), __FILE__, __LINE__));
- X }
- X}
- X
- X#-----------------------------------------------------------------------
- X# Description : Output a raw listing. A raw listing being:
- X# -one line per software
- X# -each line made up of 4 fields seperated by blanks
- X# -Each fields in order of appearance are:
- X# server software modification class
- X#
- X# Parameters : @lstsoft - Softwares to be listed.
- X#
- X# Returns : nothing
- X#
- Xsub RawList {
- X local(@lstsofts)=@_;
- X local($server, $soft, $mod, $cla);
- X
- X for $s (@lstsofts) {
- X ($server, $soft, $mod, $cla)=split($;, $s);
- X print $OUT $server . ' ' . $soft . ' ' . $mod . ' ' . $cla . "\n";
- X }
- X}
- X
- X#-----------------------------------------------------------------------
- X# Description : Output a listing containing the server, software name,
- X# modification name, class, and a one line summary.
- X#
- X# Parameters : @lstsoft - Softwares to be listed.
- X#
- X# Returns : nothing
- X#
- Xsub ShortList {
- X local(@lstsofts)=@_;
- X local($server, $soft, $mod, $cla);
- X local(%kws);
- X local($prevsoft)='';
- X
- X for $s (@lstsofts) {
- X ($server, $soft, $mod, $cla)=split($;, $s);
- X if ($soft ne $prevsoft) {
- X print $OUT "$soft:\n";
- X %kws=&GetKeyWord($server, $soft, $IAFA_FILE, 'ABSTRACT');
- X $kws{'ABSTRACT'} =~ m/^([^\n]*)/;
- X if ($1 !~ /^\s*$/) {
- X print "\t$Prkw{'ABSTRACT'} : $1\n\n";
- X }
- X $prevsoft=$soft;
- X }
- X print "\t$Prkw{'SERVER'} : $server\n" .
- X "\t$Prkw{'MODIFICATION'} : $mod\n" .
- X "\t$Prkw{'CLASS'} : $cla\n";
- X print "\n";
- X }
- X}
- X
- X#-----------------------------------------------------------------------
- X# Description : Not yet implemented
- X#
- X# Parameters :
- X#
- X# Returns : nothing
- X#
- Xsub LongList {
- X print $OUT "Long Format Not Yet Implemented.\n";
- X}
- X
- X#-----------------------------------------------------------------------
- X# Description : Sort the list of software according to the following
- X# keys (in order of precedence):
- X# soft, server, mod, class
- X#
- X# Parameters : a and b as required by perl for a function
- X# designed to be used with the builtin function sort.
- X#
- X# Returns : -1 if $a precedes $b
- X# 0 if $a is same as $b
- X# 1 if $a follows $b
- X#
- Xsub SortSoftware {
- X local($ser1, $soft1, $mod1, $cla1)=split(/$;/, $a);
- X local($ser2, $soft2, $mod2, $cla2)=split(/$;/, $b);
- X local($cmp);
- X $cmp = $soft1 cmp $soft2;
- X if (! $cmp) {
- X $cmp = $ser1 cmp $ser2;
- X if (! $cmp) {
- X $cmp = $mod1 cmp $mod2;
- X if (! $cmp) {
- X $cmp = $cla1 cmp $cla2;
- X }
- X }
- X }
- X return $cmp;
- X}
- X# ;;; Local Variables: ***
- X# ;;; mode:perl ***
- X# ;;; End: ***
- END_OF_FILE
- if test 5492 -ne `wc -c <'lude-1.1/src/orig/src/ludelist'`; then
- echo shar: \"'lude-1.1/src/orig/src/ludelist'\" unpacked with wrong size!
- fi
- chmod +x 'lude-1.1/src/orig/src/ludelist'
- # end of 'lude-1.1/src/orig/src/ludelist'
- fi
- echo shar: End of archive 9 \(of 12\).
- cp /dev/null ark9isdone
- MISSING=""
- for I in 1 2 3 4 5 6 7 8 9 10 11 12 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 12 archives.
- rm -f ark[1-9]isdone ark[1-9][0-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-