rsalz@uunet.uu.net (Rich Salz) (06/03/89)
Submitted-by: Axel Mahler <unido!coma!axel> Posting-number: Volume 19, Issue 24 Archive-name: shape/part11 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 11 (of 33)." # Contents: man/man1/retrv.1 man/man1/vcat.1 src/afs/afstore.c # src/inc/afsys.h src/vc/Makefile # Wrapped by rsalz@papaya.bbn.com on Thu Jun 1 19:27:00 1989 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'man/man1/retrv.1' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/man1/retrv.1'\" else echo shar: Extracting \"'man/man1/retrv.1'\" \(9516 characters\) sed "s/^X//" >'man/man1/retrv.1' <<'END_OF_FILE' X... X... Copyright (C) 1989, 1990 W. Koch, A. Lampen, A. Mahler, W. Obst, X... and U. Pralle X... X... This software is published on an as-is basis. There is ABSOLUTELY NO X... WARRANTY for any part of this software to work correctly or as described X... in the manuals. We do not accept any liability for any kind of damage X... caused by use of this software, such as loss of data, time, money, or X... effort. X... X... Permission is granted to use, copy, modify, or distribute any part of X... this software as long as this is done without asking for charge, and X... provided that this copyright notice is retained as part of the source X... files. You may charge a distribution fee for the physical act of X... transferring a copy, and you may at your option offer warranty X... protection in exchange for a fee. X... X... Direct questions to: Tech. Univ. Berlin X... Wilfried Koch X... Sekr. FR 5-6 X... Franklinstr. 28/29 X... D-1000 Berlin 10, West Germany X... X... Tel: +49-30-314-22972 X... E-mail: shape@coma.uucp or shape@db0tui62.bitnet X... X... X... $Header: retrv.1[3.2] Thu Feb 23 18:13:43 1989 axel@coma published $ X... X... Log for /u/shape/dist-tape/src/vc/retrv.1[3.0] X... Thu Feb 23 18:13:43 1989 axel@coma published $ X... --- empty log message --- X... retrv.1[3.1] Thu Feb 23 18:13:43 1989 axel@coma published $ X... --- empty log message --- X... retrv.1[3.2] Thu Feb 23 18:13:43 1989 axel@coma published $ X... --- empty log message --- X... X.TH RETRV 1 retrv \n(dy.\n(mo.\n(yr X.SH NAME Xretrv \- retrieve a revision of a file X.SH SYNOPSIS X.IP \fBretrv\fR\ [\ \fIoptions\fR\ ]\fR\ files\ \.\|. 0.5i X.IP \fBvcat\fR\ [\ \fIoptions\fR\ ]\fR\ files\ \.\|. X.IP \fIOptions:\fR \w'\fIOptions:++\fR'u X[\ \fB\-fhlmqt\fR\ ] [\ \fB\-V\ \fI<version>\ \fR] [\ \fB\-a\ \fIafile\fR\ ] X[\ \fB\-date\ \fI<date>\ \fR] [\ \fB\-dest\fI\ path\fR\ ] X.br X[\ \fB\-g\ \fIgeneration\ \fR] X[\ \fB\-n\ \fIauthor\fR\ ] [\ \fB\-p\ \fIprojectname\fR\ ] X[\ \fB\-s\ \fIstate\fR\ ] X.SH DESCRIPTION X.PP X\fBRetrv\fR retrieves a specified, previously saved version of a file from Xthe version object base. XUnless otherwise Xspecified by the project context (\fB\-p\fR), the archive is expected to Xreside in the AFS subdirectory. The retrieved version will be created Xin the current directory. Retrieve tries to be careful if an Xattempt is made to overwrite an existing busy-version: unless \fB\-f\fR Xis specified, \fBretrv\fR will ask the caller for permission. XIf no busy version exists, one is created with the same modes as the Xformerly saved version. If a busy version exists, its modes are preserved Xunless X\fB\-m\fR is given. X.PP X\fIVersion attributes\fR that are cited within the text of a stored revision Xare expanded by default. Attribute citation expressions are left unchanged Xif a revision is retrieved with the \fB\-lock\fR option. X.PP XIf the program is invoked as \fBvcat\fR, the specified version(s) Xwill be printed on standard output. No status change of the Xobject base will Xoccur in this case. The \fB\-t\fR switch of the \fBretrv\fR command Xcorresponds to \fBvcat\fR. X.PP XThere's a number of ways to specify which version shall be retrieved. XWith \fB\-V\fR an explicit version can be selected. XAnother kind of argument to \fB\-V\fR Xcould be a symbolic name that was assigned to Xthe desired version by use of the \-n option of \fBsave\fR. XObject names may also be given in \fIbound version notation\fR, Xi.e. a notation that identifies a particular version of an object (e.g. X\fCmkattr.c[2.4]\fR). It is also possible to use a previously assigned X\fIsymbolic name\fR rather than a numerical Xversion identification (e.g. \fCmkattr.c[tools-V4R3]\fR). Make sure Xto escape the bracket-symbols as these usually have meaning to the Xshell. X.PP XAlternatively, Xversions Xcan be selected by supplying certain attribute values to \fBretrv\fR, such as Xthe name of the author, the version state, a generation number or a Xset of user defined attributes, possibly describing a variant. In case Xthat more than one version has the desired attributes, the newest Xof them is selected. XThis behaviour can be turned off by setting the \fB\-x\fR switch (exact!) which Xindicates that the supplied version specification should match exactly Xone version. \fB\-V\fR implies \fB\-x\fR. X.PP XAny combination of the selection options implies a conjunctive Xsearch expression. X.LP XIn complete detail, \fBretrv\fR can be invoked with the following options: X.IP \fB\-f\fR \w'\fB\-V\ \fI<version>\fR'u Xforces the reinstallation of the specified version as busy version without Xasking the user, even if a writable (possibly unsaved) busy version Xexists. This option should be used together with \fB\-x\fR. X.IP "\fB\-h\fR" Xprints brief instructions about using this program. X.IP \fB\-lock\fR Xtries to reserve the privilege to add a new version to an object Xhistory, thus preventing multiple programmers working upon the same Xobject base from interfering with each other by saving concurrent updates. XThis simple mechanism is for use in small development projects, that do X\fInot\fR employ the scheme of private, experimental archives for each Xparticipating programmer, and one centralized \fIproject library\fR where Xindividual work results are collected. XWhen setting a new lock on an object history, the requesting user Xis prompted for an optional description of the planned changes. X.IP \fB\-m\fR Xreinstalls the new busy version with the file modes that were in effect Xwhen the specified version was saved. X.IP \fB\-q\fR Xquiet operation. No messages are printed on standard output. XIf a current busy version exists, it will not be overwritten by Xthe specified version unless \fB\-f\fR is set. This option is useful for Xbatch operation. X.IP \fB\-t\fR Xprint the contents of the specified version on standard output. XThe current busy version is not affected. See also \fBvcat\fR. X.IP \fB\-version\fR Xprint version identification for this program. X.IP \fB\-x\fR Xrequire an exact match of the version specification. In case that a Xversion specification matches more than one version in the archive X(e.g. if no options are supplied at all), \fBretrv\fR by default selects the X\fInewest\fR of them. With \fB\-x\fR set, the retrieve operation \fIfails\fR Xif more than one version matches the given version specification. X.IP \fB\-V\ \fI<version>\fR Xexplicitly select the version determined by \fIversion\fR. \fIVersion\fR Xcan be of the form \fIgeneration\.revision\fR (e.g. 9.4) or it Xcan be a unique symbolic name that was previously assigned to a version Xby use of the \-n option of \fBsave\fR (e.g. \fCrelease4\fR). X.IP \fB\-a\ \fIafile\fR Xselect versions that conform to the attribute specification in \fIafile\fR. XAttributes must be given in the form \fIname=value\fR Xwith one attribute specification per line and no white-space. XThe attribute value is optional, however, the \fIequal\fR symbol must Xbe present. If the \fB\-a\fR option is omitted, \fBretrv\fR searches Xthe environment for a variable \fIRETRATTRS\fR. If this variable Xis absent, no user defined attributes will be used to determine the Xversion to be selected. X.IP \fB\-date\ \fI<date>\fR X.IP \fB\-d\ \fI<date>\fR Xselects the newest version that was saved \fIbefore\fR the date given Xby \fIdate\fR. The date specification has the form \fIYY/MM/DD[/HH:MM]\fR. XThe brackets indicate that the daytime specification is optional. XThe option \fB\-d\fR is shorthand for \fB\-date\fR. X.IP \fB\-dest\fI\ path\fR Xretrieves the specified version from the object base and installs Xa \fIcopy\fR it in the directory denoted by \fIpath\fR. As this Xdirectory may be a long way apart from the directory containing Xthe AFS archives, this copy of the retrieved version is separated Xfrom its history and subsequently \fIunrelated\fR to the object Xhistory it came from. Proper object histories require a constant Xspatial relationship of any busy versions and the corresponding Xarchives. This relationship requires the archives to reside Xin a subdirectory Xnamed \fIAFS\fR. X.IP \fB\-g\ \fIgeneration\fR Xselects the newest version that was saved during generation \fIgeneration\fR. X.IP \fB\-n\ \fIauthor\fR Xselects the newest version that was saved by the user \fIauthor\fR. X.IP \fB\-p\ \fIprojectname\fR Xestablishes a \fIproject context\fR for the retrieve operation. XThe project context defines the extent of the search space to be Xconsidered by \fIretrv\fR, the permissions of the user issuing Xthe command and a number of other parameters. X.br XProject support is not implemented in the current version and so Xthis option has no effect yet. X.IP \fB\-s\ \fIstate\fR Xselects the newest version that has the given \fIstate. State\fR may Xbe either of \fIbusy, saved, proposed, published, accessed, \fRor\fI Xfrozen\fR. X.SH FILES XAll revisions of documents are retrieved from archive files located Xin the subdirectory XAFS. X.SH SEE ALSO Xsave(1), rsrv(1), sbmt(1), shape(1), vadm(1), vl(1), Xaf_intro(3), af_archive(5) X.SH BUGS XProject support is yet unimplemented. X.PP XSupport of user-defined attributes is rudimentary. Specification of such Xattributes must be syntactically correct. X.PP X\fBretrv\fR neither reads the \fIShapefile\fR nor the \fIMakefile\fR and Xconsequently sticks with the 'individual document level' rather than to Xsupport handling of entire systems or subsystems (higer level targets Xin \fI{Shape,Make}file\fRs). X.SH AUTHOR XAxel Mahler X.br XTechnical University Berlin X.sp X\fIUUCP:\fR axel@coma.uucp (unido!coma!axel) X.br X\fIBITNET:\fR axel@db0tui62 END_OF_FILE if test 9516 -ne `wc -c <'man/man1/retrv.1'`; then echo shar: \"'man/man1/retrv.1'\" unpacked with wrong size! fi # end of 'man/man1/retrv.1' fi if test -f 'man/man1/vcat.1' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'man/man1/vcat.1'\" else echo shar: Extracting \"'man/man1/vcat.1'\" \(9516 characters\) sed "s/^X//" >'man/man1/vcat.1' <<'END_OF_FILE' X... X... Copyright (C) 1989, 1990 W. Koch, A. Lampen, A. Mahler, W. Obst, X... and U. Pralle X... X... This software is published on an as-is basis. There is ABSOLUTELY NO X... WARRANTY for any part of this software to work correctly or as described X... in the manuals. We do not accept any liability for any kind of damage X... caused by use of this software, such as loss of data, time, money, or X... effort. X... X... Permission is granted to use, copy, modify, or distribute any part of X... this software as long as this is done without asking for charge, and X... provided that this copyright notice is retained as part of the source X... files. You may charge a distribution fee for the physical act of X... transferring a copy, and you may at your option offer warranty X... protection in exchange for a fee. X... X... Direct questions to: Tech. Univ. Berlin X... Wilfried Koch X... Sekr. FR 5-6 X... Franklinstr. 28/29 X... D-1000 Berlin 10, West Germany X... X... Tel: +49-30-314-22972 X... E-mail: shape@coma.uucp or shape@db0tui62.bitnet X... X... X... $Header: retrv.1[3.2] Thu Feb 23 18:13:43 1989 axel@coma published $ X... X... Log for /u/shape/dist-tape/src/vc/retrv.1[3.0] X... Thu Feb 23 18:13:43 1989 axel@coma published $ X... --- empty log message --- X... retrv.1[3.1] Thu Feb 23 18:13:43 1989 axel@coma published $ X... --- empty log message --- X... retrv.1[3.2] Thu Feb 23 18:13:43 1989 axel@coma published $ X... --- empty log message --- X... X.TH RETRV 1 retrv \n(dy.\n(mo.\n(yr X.SH NAME Xretrv \- retrieve a revision of a file X.SH SYNOPSIS X.IP \fBretrv\fR\ [\ \fIoptions\fR\ ]\fR\ files\ \.\|. 0.5i X.IP \fBvcat\fR\ [\ \fIoptions\fR\ ]\fR\ files\ \.\|. X.IP \fIOptions:\fR \w'\fIOptions:++\fR'u X[\ \fB\-fhlmqt\fR\ ] [\ \fB\-V\ \fI<version>\ \fR] [\ \fB\-a\ \fIafile\fR\ ] X[\ \fB\-date\ \fI<date>\ \fR] [\ \fB\-dest\fI\ path\fR\ ] X.br X[\ \fB\-g\ \fIgeneration\ \fR] X[\ \fB\-n\ \fIauthor\fR\ ] [\ \fB\-p\ \fIprojectname\fR\ ] X[\ \fB\-s\ \fIstate\fR\ ] X.SH DESCRIPTION X.PP X\fBRetrv\fR retrieves a specified, previously saved version of a file from Xthe version object base. XUnless otherwise Xspecified by the project context (\fB\-p\fR), the archive is expected to Xreside in the AFS subdirectory. The retrieved version will be created Xin the current directory. Retrieve tries to be careful if an Xattempt is made to overwrite an existing busy-version: unless \fB\-f\fR Xis specified, \fBretrv\fR will ask the caller for permission. XIf no busy version exists, one is created with the same modes as the Xformerly saved version. If a busy version exists, its modes are preserved Xunless X\fB\-m\fR is given. X.PP X\fIVersion attributes\fR that are cited within the text of a stored revision Xare expanded by default. Attribute citation expressions are left unchanged Xif a revision is retrieved with the \fB\-lock\fR option. X.PP XIf the program is invoked as \fBvcat\fR, the specified version(s) Xwill be printed on standard output. No status change of the Xobject base will Xoccur in this case. The \fB\-t\fR switch of the \fBretrv\fR command Xcorresponds to \fBvcat\fR. X.PP XThere's a number of ways to specify which version shall be retrieved. XWith \fB\-V\fR an explicit version can be selected. XAnother kind of argument to \fB\-V\fR Xcould be a symbolic name that was assigned to Xthe desired version by use of the \-n option of \fBsave\fR. XObject names may also be given in \fIbound version notation\fR, Xi.e. a notation that identifies a particular version of an object (e.g. X\fCmkattr.c[2.4]\fR). It is also possible to use a previously assigned X\fIsymbolic name\fR rather than a numerical Xversion identification (e.g. \fCmkattr.c[tools-V4R3]\fR). Make sure Xto escape the bracket-symbols as these usually have meaning to the Xshell. X.PP XAlternatively, Xversions Xcan be selected by supplying certain attribute values to \fBretrv\fR, such as Xthe name of the author, the version state, a generation number or a Xset of user defined attributes, possibly describing a variant. In case Xthat more than one version has the desired attributes, the newest Xof them is selected. XThis behaviour can be turned off by setting the \fB\-x\fR switch (exact!) which Xindicates that the supplied version specification should match exactly Xone version. \fB\-V\fR implies \fB\-x\fR. X.PP XAny combination of the selection options implies a conjunctive Xsearch expression. X.LP XIn complete detail, \fBretrv\fR can be invoked with the following options: X.IP \fB\-f\fR \w'\fB\-V\ \fI<version>\fR'u Xforces the reinstallation of the specified version as busy version without Xasking the user, even if a writable (possibly unsaved) busy version Xexists. This option should be used together with \fB\-x\fR. X.IP "\fB\-h\fR" Xprints brief instructions about using this program. X.IP \fB\-lock\fR Xtries to reserve the privilege to add a new version to an object Xhistory, thus preventing multiple programmers working upon the same Xobject base from interfering with each other by saving concurrent updates. XThis simple mechanism is for use in small development projects, that do X\fInot\fR employ the scheme of private, experimental archives for each Xparticipating programmer, and one centralized \fIproject library\fR where Xindividual work results are collected. XWhen setting a new lock on an object history, the requesting user Xis prompted for an optional description of the planned changes. X.IP \fB\-m\fR Xreinstalls the new busy version with the file modes that were in effect Xwhen the specified version was saved. X.IP \fB\-q\fR Xquiet operation. No messages are printed on standard output. XIf a current busy version exists, it will not be overwritten by Xthe specified version unless \fB\-f\fR is set. This option is useful for Xbatch operation. X.IP \fB\-t\fR Xprint the contents of the specified version on standard output. XThe current busy version is not affected. See also \fBvcat\fR. X.IP \fB\-version\fR Xprint version identification for this program. X.IP \fB\-x\fR Xrequire an exact match of the version specification. In case that a Xversion specification matches more than one version in the archive X(e.g. if no options are supplied at all), \fBretrv\fR by default selects the X\fInewest\fR of them. With \fB\-x\fR set, the retrieve operation \fIfails\fR Xif more than one version matches the given version specification. X.IP \fB\-V\ \fI<version>\fR Xexplicitly select the version determined by \fIversion\fR. \fIVersion\fR Xcan be of the form \fIgeneration\.revision\fR (e.g. 9.4) or it Xcan be a unique symbolic name that was previously assigned to a version Xby use of the \-n option of \fBsave\fR (e.g. \fCrelease4\fR). X.IP \fB\-a\ \fIafile\fR Xselect versions that conform to the attribute specification in \fIafile\fR. XAttributes must be given in the form \fIname=value\fR Xwith one attribute specification per line and no white-space. XThe attribute value is optional, however, the \fIequal\fR symbol must Xbe present. If the \fB\-a\fR option is omitted, \fBretrv\fR searches Xthe environment for a variable \fIRETRATTRS\fR. If this variable Xis absent, no user defined attributes will be used to determine the Xversion to be selected. X.IP \fB\-date\ \fI<date>\fR X.IP \fB\-d\ \fI<date>\fR Xselects the newest version that was saved \fIbefore\fR the date given Xby \fIdate\fR. The date specification has the form \fIYY/MM/DD[/HH:MM]\fR. XThe brackets indicate that the daytime specification is optional. XThe option \fB\-d\fR is shorthand for \fB\-date\fR. X.IP \fB\-dest\fI\ path\fR Xretrieves the specified version from the object base and installs Xa \fIcopy\fR it in the directory denoted by \fIpath\fR. As this Xdirectory may be a long way apart from the directory containing Xthe AFS archives, this copy of the retrieved version is separated Xfrom its history and subsequently \fIunrelated\fR to the object Xhistory it came from. Proper object histories require a constant Xspatial relationship of any busy versions and the corresponding Xarchives. This relationship requires the archives to reside Xin a subdirectory Xnamed \fIAFS\fR. X.IP \fB\-g\ \fIgeneration\fR Xselects the newest version that was saved during generation \fIgeneration\fR. X.IP \fB\-n\ \fIauthor\fR Xselects the newest version that was saved by the user \fIauthor\fR. X.IP \fB\-p\ \fIprojectname\fR Xestablishes a \fIproject context\fR for the retrieve operation. XThe project context defines the extent of the search space to be Xconsidered by \fIretrv\fR, the permissions of the user issuing Xthe command and a number of other parameters. X.br XProject support is not implemented in the current version and so Xthis option has no effect yet. X.IP \fB\-s\ \fIstate\fR Xselects the newest version that has the given \fIstate. State\fR may Xbe either of \fIbusy, saved, proposed, published, accessed, \fRor\fI Xfrozen\fR. X.SH FILES XAll revisions of documents are retrieved from archive files located Xin the subdirectory XAFS. X.SH SEE ALSO Xsave(1), rsrv(1), sbmt(1), shape(1), vadm(1), vl(1), Xaf_intro(3), af_archive(5) X.SH BUGS XProject support is yet unimplemented. X.PP XSupport of user-defined attributes is rudimentary. Specification of such Xattributes must be syntactically correct. X.PP X\fBretrv\fR neither reads the \fIShapefile\fR nor the \fIMakefile\fR and Xconsequently sticks with the 'individual document level' rather than to Xsupport handling of entire systems or subsystems (higer level targets Xin \fI{Shape,Make}file\fRs). X.SH AUTHOR XAxel Mahler X.br XTechnical University Berlin X.sp X\fIUUCP:\fR axel@coma.uucp (unido!coma!axel) X.br X\fIBITNET:\fR axel@db0tui62 END_OF_FILE if test 9516 -ne `wc -c <'man/man1/vcat.1'`; then echo shar: \"'man/man1/vcat.1'\" unpacked with wrong size! fi # end of 'man/man1/vcat.1' fi if test -f 'src/afs/afstore.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/afs/afstore.c'\" else echo shar: Extracting \"'src/afs/afstore.c'\" \(9385 characters\) sed "s/^X//" >'src/afs/afstore.c' <<'END_OF_FILE' X/* X * Copyright (C) 1989, 1990 W. Koch, A. Lampen, A. Mahler, W. Obst, X * and U. Pralle X * X * This software is published on an as-is basis. There is ABSOLUTELY NO X * WARRANTY for any part of this software to work correctly or as described X * in the manuals. We do not accept any liability for any kind of damage X * caused by use of this software, such as loss of data, time, money, or X * effort. X * X * Permission is granted to use, copy, modify, or distribute any part of X * this software as long as this is done without asking for charge, and X * provided that this copyright notice is retained as part of the source X * files. You may charge a distribution fee for the physical act of X * transferring a copy, and you may at your option offer warranty X * protection in exchange for a fee. X * X * Direct questions to: Tech. Univ. Berlin X * Wilfried Koch X * Sekr. FR 5-6 X * Franklinstr. 28/29 X * D-1000 Berlin 10, West Germany X * X * Tel: +49-30-314-22972 X * E-mail: shape@coma.uucp or shape@db0tui62.bitnet X */ X/* X * Shape/AFS X * X * afstore.c -- interface to archives and binary pools X * X * Author: Andreas Lampen, TU-Berlin (andy@coma.UUCP) X * (andy@db0tui62.BITNET) X * X * $Header: afstore.c[1.5] Wed Feb 22 16:28:15 1989 andy@coma published $ X * X * EXPORT: X * af_bldfile -- build file containing data of version X * af_newvers -- get attribute buffer for new version X * af_delvers -- delete version X * af_addvers -- add version X * af_updtvers -- update attribute buffer of version X * af_detlist -- detach archive or binary pool X */ X X#include <stdio.h> X#include <string.h> X#ifdef SUNOS_4_0 X#include <strings.h> X#endif X#include <sys/time.h> X#include <sys/types.h> X#include <sys/stat.h> X X#include "typeconv.h" X#include "afsys.h" X#include "afs.h" X#include "afarchive.h" X X/*========================================================================= X * af_arlock -- lock archive X * X *=========================================================================*/ X XLOCAL af_arlock (list) X Af_revlist *list; X{ X struct stat ibuf; X char lckfilename [MAXNAMLEN*4]; X FILE *lckfd; X X if (stat (list->af_arfilename, &ibuf) == ERROR) /* no archive file present */ X { X /* if there should be an archive file */ X if (list->af_lastmod != (time_t) 0) X FAIL ("arlock", "archive file lost", AF_EINTERNAL, ERROR); X } X else X { X /* if archive has changed since last read */ X if (list->af_lastmod != (time_t) af_cvttime (ibuf.st_mtime)) X FAIL ("arlock", "", AF_EARCHANGED, ERROR); X } X X (void) strcpy (lckfilename, list->af_arfilename); X lckfilename [strlen (lckfilename) - sizeof (char)] = AF_LCKEXT; X if (stat (lckfilename, &ibuf) == ERROR) /* no lock file present */ X { X /* create lockfile */ X if ((lckfd = fopen (lckfilename, "w")) == (FILE *)0) X SFAIL ("arlock", "fopen (lockfile)", AF_ESYSERR, ERROR); X (void) fclose (lckfd); X af_reglckfile (lckfilename); X return (AF_OK); X } X X sleep (AF_LOCKTIMEOUT); X X if (stat (lckfilename, &ibuf) == ERROR) /* no lock file present */ X { X if ((lckfd = fopen (lckfilename, "w")) == (FILE *)0) X SFAIL ("arlock", "fopen (lockfile)", AF_ESYSERR, ERROR); X (void) fclose (lckfd); X af_reglckfile (lckfilename); X return (AF_OK); X } X else X FAIL ("arlock", "", AF_EARLOCKED, ERROR); X} X X/*========================================================================= X * af_arunlock -- unlock archive X * X *=========================================================================*/ X XLOCAL af_arunlock (list) X Af_revlist *list; X{ X char lckfilename [MAXNAMLEN*4]; X struct stat ibuf; X X (void) strcpy (lckfilename, list->af_arfilename); X lckfilename [strlen (lckfilename) - sizeof (char)] = AF_LCKEXT; X X /* update list descriptor */ X if (stat (list->af_arfilename, &ibuf) != ERROR) X list->af_lastmod = (time_t) af_cvttime (ibuf.st_mtime); X X if (af_unlink (lckfilename) == ERROR) X FAIL ("af_arunlock", "lock file lost", AF_EINTERNAL, ERROR); X return (AF_OK); X} X X/*========================================================================= X * af_bldfile X * X *=========================================================================*/ X XEXPORT af_bldfile (key, name) X Af_key *key; X char *name; X{ X struct timeval tvp[2]; X X if (key->af_ldes->af_extent & AF_BPOOL) X { X /* get file from binary pool */ X if (af_cpfile (af_bpfilename (CATTR(key).af_syspath, VATTR(key).af_hashname), VATTR(key).af_fsize, name) == ERROR) X FAIL ("bldfile", "cpfile", AF_ESYSERR, ERROR); X /*** set modification and access date ***/ X tvp[0].tv_sec = VATTR(key).af_atime; X tvp[0].tv_usec = 0; X tvp[1].tv_sec = VATTR(key).af_mtime; X tvp[1].tv_usec = 0; X if (utimes (name, tvp) == ERROR) X FAIL ("bldfile", "utimes", AF_ESYSERR, ERROR); X (void) af_uchmod (name, (int) VATTR(key).af_mode); X } X else X { X /* get data from archive file */ X if (af_readdata (key->af_ldes) == ERROR) X return (ERROR); X X if (af_undodelta (key, name) == ERROR) X return (ERROR); X } X return (AF_OK); X} X X X/*========================================================================= X * af_newvers X * X *=========================================================================*/ X XEXPORT af_newvers (list, key, mode) X Af_revlist *list; X Af_key *key; X int mode; X{ X if (mode != AF_SOURCE) X FAIL ("newvers", "invalid mode", AF_EINTERNAL, ERROR); X X key->af_ldes = list; X /* if revision list is full */ X if ((key->af_lpos = af_gfreepos (list)) == ERROR) X FAIL ("newvers", "too many new revisions", AF_EINTERNAL, ERROR); X X /* get data from archive */ X if (af_readdata (list) == ERROR) X return (ERROR); X X return (AF_OK); X} X X X X/*========================================================================= X * af_delvers -- delete version X * X *=========================================================================*/ X XEXPORT af_delvers (key) X Af_key *key; X{ X char *busyname; X X /* if key points to a file in a binary pool */ X if (key->af_ldes->af_extent & AF_BPOOL) X return (af_delbpentry (key)); X X /* if "key" points to a busy version */ X if (af_arlock (key->af_ldes) == ERROR) X return (ERROR); X X if (VATTR(key).af_state == AF_BUSY) X { X VATTR(key).af_predgen = AF_NOVNUM; X VATTR(key).af_predrev = AF_NOVNUM; X VATTR(key).af_lckname = (char *)0; X VATTR(key).af_lckhost = (char *)0; X VATTR(key).af_ltime = AF_NOTIME; X /* remove busy file */ X busyname = af_gbusname (CATTR(key).af_syspath, VATTR(key).af_name, VATTR(key).af_type); X (void) af_unlink (busyname); X af_hashfree (&(VATTR(key).af_uhtab)); X } X else X /* remove delta */ X { X /* read data section of archive */ X if (af_readdata (key->af_ldes) == ERROR) X return (ERROR); X X key->af_ldes->af_datasize -= VATTR(key).af_notesize; X if (VATTR(key).af_repr == AF_DELTA) X key->af_ldes->af_datasize -= VATTR(key).af_dsize; X else X key->af_ldes->af_datasize -= VATTR(key).af_fsize; X X (void) af_rmdelta (key); X } X X /* clear "valid" bit */ X VATTR(key).af_class &= ~AF_VALID; X X key->af_ldes->af_nrevs--; X X if (af_writearchive (key->af_ldes) == ERROR) X { X (void) af_arunlock (key->af_ldes); X return (ERROR); X } X else X return (af_arunlock (key->af_ldes)); X} X X/*========================================================================= X * af_addvers -- add version X * X *=========================================================================*/ X XEXPORT af_addvers (key) X Af_key *key; X{ X /* this function should only be used for archives (not for bpools */ X /* I know, it is not very well-designed but ... */ X if (key->af_ldes->af_extent & AF_BPOOL) X FAIL ("addvers", "cannot apply on binary pools", AF_EINTERNAL, ERROR); X if (af_arlock (key->af_ldes) == ERROR) X return (ERROR); X if (af_writearchive (key->af_ldes) == ERROR) X { X (void) af_arunlock (key->af_ldes); X return (ERROR); X } X else X return (af_arunlock (key->af_ldes)); X} X X/*========================================================================= X * af_updtvers -- update attribute buffer of version X * X *=========================================================================*/ X XEXPORT af_updtvers (key, mode) X Af_key *key; X int mode; X{ X if (mode & (AF_ALLVERS | AF_CHANGE)) X { X /* update time of last status change (ctime) for all versions */ X /* not yet implemented (update ctime) */ X } X else X { X if (mode & AF_CHANGE) /* update ctime only for this version */ X VATTR(key).af_ctime = (time_t) af_acttime (); X } X X if (key->af_ldes->af_extent & AF_BPOOL) X return (af_rplbpentry (key, key, key)); X else X { X if (af_arlock (key->af_ldes) == ERROR) X return (ERROR); X if (af_writearchive (key->af_ldes) == ERROR) X { X (void) af_arunlock (key->af_ldes); X return (ERROR); X } X else X return (af_arunlock (key->af_ldes)); X } X} X X/*========================================================================= X * af_detlist -- detach archive or binary pool X * X *=========================================================================*/ X XEXPORT af_detlist (list) X Af_revlist *list; X{ X if (list->af_extent & AF_BPOOL) X return (af_detbpool (list)); X else X return (af_detarchive (list)); X} X END_OF_FILE if test 9385 -ne `wc -c <'src/afs/afstore.c'`; then echo shar: \"'src/afs/afstore.c'\" unpacked with wrong size! fi # end of 'src/afs/afstore.c' fi if test -f 'src/inc/afsys.h' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/inc/afsys.h'\" else echo shar: Extracting \"'src/inc/afsys.h'\" \(9500 characters\) sed "s/^X//" >'src/inc/afsys.h' <<'END_OF_FILE' X/* X * Copyright (C) 1989, 1990 W. Koch, A. Lampen, A. Mahler, W. Obst, X * and U. Pralle X * X * This software is published on an as-is basis. There is ABSOLUTELY NO X * WARRANTY for any part of this software to work correctly or as described X * in the manuals. We do not accept any liability for any kind of damage X * caused by use of this software, such as loss of data, time, money, or X * effort. X * X * Permission is granted to use, copy, modify, or distribute any part of X * this software as long as this is done without asking for charge, and X * provided that this copyright notice is retained as part of the source X * files. You may charge a distribution fee for the physical act of X * transferring a copy, and you may at your option offer warranty X * protection in exchange for a fee. X * X * Direct questions to: Tech. Univ. Berlin X * Wilfried Koch X * Sekr. FR 5-6 X * Franklinstr. 28/29 X * D-1000 Berlin 10, West Germany X * X * Tel: +49-30-314-22972 X * E-mail: shape@coma.uucp or shape@db0tui62.bitnet X */ X/* X * Shape/AFS X * X * afsys.h - Internal type and Constant-Definitions for the X * Attribute-Filesystem X * X * Author: Andreas Lampen (andy@coma.UUCP X * andy@db0tui62.BITNET) X * X * $Header: afsys.h[1.5] Wed Feb 22 16:29:46 1989 andy@coma published $ X */ X X#ifndef _AFSYS_ X#define _AFSYS_ X X/*========================================================================= X * Installation dependent constants X *=========================================================================*/ X X#include <stdio.h> X#include <sys/types.h> X#ifndef MAXNAMLEN X#include <sys/dir.h> X#endif X#include <sys/param.h> X X#ifndef _TYPECONV_ X# ifdef ULTRIX_2_0 X# define Uid_t int X# define Gid_t int X# else X# define Uid_t uid_t X# define Gid_t gid_t X# endif X#endif X X#ifdef ULTRIX_2_0 X#define MAXHOSTNAMELEN 64 X#endif X X/*========================================================================= X * general constants X *=========================================================================*/ X X#ifndef TRUE X#define TRUE 1 X#endif X#ifndef FALSE X#define FALSE 0 X#endif X X#define ERROR -1 X#define LOCAL static X#define EXPORT X#define bool short X X/*========================================================================= X * Hash stuff X *=========================================================================*/ X Xtypedef struct Af_hshent Af_hashent; X Xtypedef struct Af_hsh Af_hash; X Xstruct Af_hsh { int hsize, /* No. of slots in hashtable */ X (*fhash)(); /* Pointer to hash-function */ X Af_hashent *hashtb; /* Anchor of hashtable */ X }; X X/*========================================================================= X * Internal Type Definitions X *=========================================================================*/ X X/**** buffer for version-independent attributes ****/ Xtypedef struct { X char *af_host; /* hostname */ X char *af_syspath; /* system path (incl. host) */ X char *af_ownname; /* name of owner */ X char *af_ownhost; /* host of owner */ X } Af_cattrs; X X/**** buffer for version-dependent attributes ****/ Xtypedef struct { X char *af_name; /* filename */ X char *af_type; /* filename extension (type) */ X int af_gen; /* generation number */ X int af_rev; /* revision number */ X char *af_variant; /* variant string */ X short af_state; /* version state (see below) */ X short af_class; /* file class */ X char *af_auname; /* name of author */ X char *af_auhost; /* host of author */ X u_short af_mode; /* protection (from inode) */ X char *af_lckname; /* name of locker */ X char *af_lckhost; /* host of locker */ X time_t af_mtime; /* date of last modification */ X time_t af_atime; /* date of last access */ X time_t af_ctime; /* date of last status change*/ X time_t af_stime; /* save date */ X time_t af_ltime; /* date of last lock change */ X off_t af_notesize; /* size of note */ X char *af_note; /* modification note */ X int af_udanum; /* number of uda entries */ X Af_hash af_uhtab; /* hash table for udefattrs */ X short af_repr; /* kind of representation */ X off_t af_fsize; /* size of file */ X off_t af_dsize; /* size of delta */ X char *af_data; /* ptr to chunk or delta */ X char *af_hashname; /* name of associated file */ X short af_nlinks; /* # of links to attrbuf */ X int af_succgen, /* physical */ X af_succrev; /* successor */ X int af_predgen, /* physical */ X af_predrev; /* predecessor */ X } Af_vattrs; X X/**** Descriptor for revision list ****/ Xtypedef struct rvlist Af_revlist; X Xstruct rvlist { X char *af_arfilename; /* filename of archive */ X time_t af_lastmod; /* last mod. of archive file */ X char *af_busyfilename; /* filename of busy version */ X short af_nrevs; /* number of revs in list */ X short af_listlen; /* total length of list */ X off_t af_datasize; /* size of data-segment */ X short af_extent; /* extent of revision list */ X Af_cattrs af_cattrs; /* version-independent attrs */ X Af_vattrs *af_list; /* pointer to revision list */ X int af_refcount; /* number of keys in use */ X char *af_mem; /* list of ptrs to alloc. mem. */ X Af_revlist *af_next; /* index of next freelist entry */ X }; X X/*========================================================================= X * More Hash stuff X *=========================================================================*/ X Xstruct Af_hshent { char *symbol; X Af_revlist *revlist; X Af_hashent *next; X }; X X/*========================================================================= X * Internal Installation dependent constants X *=========================================================================*/ X X#define AF_MAXSYMS 211 /* size of hashtable for symbols */ X#define AF_MAXUDAS 61 /* size of hashtable for user defined attrs */ X#define AF_SEGLEN 32 /* size of segment for (re-)allocation */ X X/**** "syntactical sugar" for user defined attributes ****/ X#define AF_UDANAMDEL '=' /* Delimiter for UDA name in archive */ X#define AF_UDAVALDEL '\01' /* Delimiter for UDA values in arch. */ X X/**** UNIX Environment ****/ X#define AF_TMPDIR "/tmp" /* location of archive files */ X#define AF_SUBDIR "AFS" /* subdirectory for archives */ X#define AF_ARCHEXT 'A' /* extension for archive names */ X#define AF_DATAEXT 'D' /* extension for datafile names */ X#define AF_LCKEXT 'L' /* extension for lock files */ X#define AF_ARCHTMP 'T' /* extension for temp archive names */ X#define AF_DATATMP 'U' /* extension for temp datafile names */ X#define AF_ERRLOG "/tmp/AFSerrlog" /* Error Log file */ X X/**** file locking ****/ X#define AF_LOCKTIMEOUT (unsigned) 1 /* wait 1 sec when archive is locked */ X X/*========================================================================= X * Internal Constant Definitions X *=========================================================================*/ X X/**** general ****/ X X#define AF_READ 0 X#define AF_WRITE 1 X#define AF_RDWR 2 X X/**** representation types ****/ X X#define AF_CHUNK 0 X#define AF_DELTA 1 X#define AF_FILE 2 /* version resides in an own file (busy version) */ X X/**** Version numbering ****/ X X#define AF_INITGEN 1 X#define AF_INITREV 0 X X/**** Modes for archive manipulation ****/ X X#define AF_CHANGE 01 X#define AF_ALLVERS 02 X X/**** Environment interaction ****/ X X#define AF_ENVBPSIZE "AFSBPSIZ" /* name of environment variable defining */ X /* max. number of files in bin. pool */ X#define AF_MAXBPSIZE 64 /* max # of files in binary pool if no */ X /* environment variable is present */ X X/**** Permissions for checkperm ****/ X X#define AF_OWNER 0001 X#define AF_AUTHOR 0002 X#define AF_LOCKHOLDER 0004 X#define AF_WORLD 0010 X X#define AF_REMOTE -2 X X/*========================================================================= X * Useful macros X *=========================================================================*/ X X#define CATTR(keyp) keyp->af_ldes->af_cattrs X#define VATTR(keyp) keyp->af_ldes->af_list[keyp->af_lpos] X X/* compare filekeys -- returnes 0 if equal (like strcmp) */ X#define af_keycmp(key1,key2) (((key1)->af_ldes != (key2)->af_ldes) || ((key1)->af_lpos != (key2)->af_lpos)) X X/* report error and return */ X#define FAIL(msg1,msg2,errcd,retcd) { af_err (msg1, msg2, errcd); return (retcd); } X#define SFAIL(msg1,msg2,errcd,retcd) { af_serr (msg1, msg2, errcd); return (retcd); } X X/* convert nil pointer to empty string */ X#define NOTNIL(str) (str ? str : "") X X/*========================================================================= X * Declarations X *=========================================================================*/ X Xchar *af_malloc(), *af_realloc(), *af_gtmpname(), *af_gethostname(); Xchar *af_entersym(), *af_replsym(), *af_garname(), *af_gbusname(); Xchar *af_bpfilename(); Xchar *af_rbphashname(), *af_unixname(), *af_gbpname(), *af_uniqpath(); Xchar *af_hashsym(), *af_symlookup(), *af_vallookup(), *af_enterhost(); Xvoid af_frmemlist(), af_serr(), af_err(), af_wng(); Xvoid af_free(), af_frmemlist(), af_regtmpfile(), af_unregtmpfile(); Xoff_t af_retfsize(); XUid_t af_getuid(), getuid(); XGid_t af_getgid(); X#endif END_OF_FILE if test 9500 -ne `wc -c <'src/inc/afsys.h'`; then echo shar: \"'src/inc/afsys.h'\" unpacked with wrong size! fi # end of 'src/inc/afsys.h' fi if test -f 'src/vc/Makefile' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'src/vc/Makefile'\" else echo shar: Extracting \"'src/vc/Makefile'\" \(9367 characters\) sed "s/^X//" >'src/vc/Makefile' <<'END_OF_FILE' X# X# Copyright (C) 1989, 1990 W. Koch, A. Lampen, A. Mahler, W. Obst, X# and U. Pralle X# X# This software is published on an as-is basis. There is ABSOLUTELY NO X# WARRANTY for any part of this software to work correctly or as described X# in the manuals. We do not accept any liability for any kind of damage X# caused by use of this software, such as loss of data, time, money, or effort. X# X# Permission is granted to use, copy, modify, or distribute any part of X# this software as long as this is done without asking for charge, and X# provided that this copyright notice is retained as part of the source X# files. You may charge a distribution fee for the physical act of X# transferring a copy, and you may at your option offer warranty X# protection in exchange for a fee. X# X# Direct questions to: Tech. Univ. Berlin X# Wilfried Koch X# Sekr. FR 5-6 X# Franklinstr. 28/29 X# D-1000 Berlin 10, West Germany X# X# Tel: +49-30-314-22972 X# E-mail: shape@coma.uucp or shape@db0tui62.bitnet X# X# X# $Header: Makefile[1.2] Thu Feb 23 18:13:23 1989 axel@coma published $ X# X# Log for /u/shape/dist-tape/src/vc/Makefile[1.0] X# Thu Feb 23 18:13:23 1989 axel@coma save $ X# This Makefile is solely intended for the bootstrap installation X# of the SHAPE version-control system. It should be invoked by a X# master Make 'install' process defining the macros BASE, SYSTEM, and X# possibly CONFIG from the commandline. X# X# Makefile[1.1] Thu Feb 23 18:13:23 1989 axel@coma published $ X# added target 'depend:'. Works very nice. X# X# Makefile[1.2] Thu Feb 23 18:13:23 1989 axel@coma published $ X# --- empty log message --- X# X# X# Makefile for Version Control System X# (used only for porting and installing) X X# X# general part X X# ---> define operating system X# known systems are: BSD_4_3 SUNOS_4_0 ULTRIX_2_0 XSYSTEM = BSD_4_3 X X# ---> define config X# any combination of: X# -DSYSLOG -- the syslog facility shall be used for protocoling errors X# -DOLDDBM -- use "dbm" instead of "ndbm" (don't forget to set -ldbm) X#define c libraries X# "CLIBS = -ldbm" is necessary when compiling with -DOLDDBM XCONFIG = XCLIBS = X X# ---> define locations of sources and executables XBASE = /u/shape XSRCDIR = $(BASE)/src/vc XLIBDIR = $(BASE)/lib XINCLUDEDIR = $(BASE)/src/inc X X# define anything you like here (e.g. /usr/local) XINSTALDIR = $(BASE)/bin XINSTALOWNER = shape XINSTALGROUP = unib X XBUCKS = $$ X XCC = cc -DCFFLGS='"$(BUCKS)Flags: <$<> $(CFLAGS) $$"' X XCFLAGS = -g -D$(SYSTEM) $(CONFIG) -I$(INCLUDEDIR) XLDFLAGS = -g X X# X# Product definition part X# X XCOMPONENTS = $(MANUALS) $(MODULES) $(DEFINES) X XMODULES = \ X doretrv.c \ X dosave.c \ X mkattr.c \ X project.c \ X retrv.c \ X save.c \ X sighand.c \ X util.c \ X vl.c \ X vldovl.c \ X vlmisc.c \ X vlopt.c \ X vadm.c \ X vadm_utils.c \ X vadm_note.c \ X vadm_delete.c \ X vadm_promote.c \ X vadm_reserve.c \ X vadm_symname.c \ X vadm_gkeys.c \ X vc_call.c \ X vc_files.c \ X vc_keyboardIo.c \ X vc_lock.c X XDEFINES = \ X afsapp.h \ X locks.h \ X retrv.h \ X save.h \ X typeconv.h \ X vl.h \ X vadm.h \ X vadmdefs.h \ X vc_sysdep.h X XMANUALS = \ X retrv.1 \ X save.1 \ X vadm.1 \ X vcintro.1 \ X vl.1 X XPRODUCT = vccommands XSUBPRODUCTS = \ X $(BASE)/lib/libafs \ X $(BASE)/lib/libutil X X XAFSLIB = $(BASE)/lib/libafs.a XUTLIB = $(BASE)/lib/libutil.a X XAFSINC = $(BASE)/src/inc X XPROGS = save retrv vl vadm XVERSION = version X XSAVESRC = save.c dosave.c vc_lock.c mkattr.c $(COMMONSRC) XSAVEOBJS = save.o dosave.o vc_lock.o mkattr.o XRETRSRC = retrv.c doretrv.c mkattr.c vc_lock.c $(COMMONSRC) XRETROBJS = retrv.o doretrv.o mkattr.o vc_lock.o XVLSRC = vl.c vlmisc.c vldovl.c vlopt.c mkattr.c $(VERSION).c XVLOBJS = vl.o vlmisc.o vldovl.o vlopt.o mkattr.o XVLINC = vl.h afs_huda.h XVADMOBJS = vadm.o vadm_utils.o vadm_note.o vadm_delete.o vadm_promote.o\ X vadm_symname.o vadm_reserve.o vadm_gkeys.o vc_call.o vc_files.o\ X vc_keyboardIo.o vc_lock.o util.o sighand.o mkattr.o XVADMSRC = vadm.c vadm_utils.c vadm_note.c vadm_delete.c vadm_promote.c\ X vadm_symname.c vadm_reserve.c vadm_gkeys.c vc_call.c vc_files.c\ X vc_keyboardIo.c vc_lock.c util.c sighand.c mkattr.c $(COMMONSRC) XVADMINC = vadm.h vadmdefs.h vc_sysdep.h XCOMMON = project.o sighand.o util.o $(VERSION).o XCOMMONSRC = project.c sighand.c util.c $(VERSION).c XALLOBJS = $(SAVEOBJS) $(RETROBJS) $(VLOBJS) $(COMMON) X Xall: save retrv vl vadm X Xsave: $(SAVEOBJS) $(COMMON) $(AFSLIB) $(UTLIB) X cc $(LDFLAGS) -o $@ $(SAVEOBJS) $(COMMON) $(UTLIB) $(AFSLIB) $(CLIBS) X Xretrv: $(RETROBJS) $(COMMON) $(AFSLIB) $(UTLIB) X cc $(LDFLAGS) -o $@ $(RETROBJS) $(COMMON) $(UTLIB) $(AFSLIB) $(CLIBS) X Xvl: $(VLOBJS) $(AFSLIB) $(UTLIB) X cc $(LDFLAGS) -o $@ $(VLOBJS) $(VERSION).o $(UTLIB) $(AFSLIB) $(CLIBS) X Xvadm: $(VADMOBJS) $(AFSLIB) $(UTLIB) X cc $(LDFLAGS) -o $@ $(VADMOBJS) $(VERSION).o $(UTLIB) $(AFSLIB) \ X $(CLIBS) X Xinstall: all X @echo -n installing version control system in $(INSTALDIR)...; \ X (cd $(BASE)/bin; rm -f save retrv vadm vl sbmt vcat vlog) ; \ X echo -n .; \ X install -c -m 755 save $(INSTALDIR); \ X echo -n .; \ X install -c -m 755 retrv $(INSTALDIR); \ X echo -n .; \ X install -c -m 755 vadm $(INSTALDIR); \ X echo -n .; \ X install -c -m 755 vl $(INSTALDIR); \ X echo -n .; \ X ln save sbmt; \ X echo -n .; \ X ln retrv vcat; \ X echo -n .; \ X ln vl vlog; \ X echo done X Xdepend: X $(CC) -M $(CFLAGS) $(MODULES) | \ X sed -e '/\/usr\/include/d' -e 's.$(BASE).$$(BASE).g' | sort \ X | uniq > makedep X echo '/^# DO NOT DELETE THIS LINE/+1,$$d' >eddep X echo '$$r makedep' >>eddep X echo 'w' >>eddep X cp Makefile Makefile.bak X ex - Makefile < eddep X rm makedep eddep X X X# DO NOT DELETE THIS LINE Xdoretrv.o: $(BASE)/src/inc/afs.h Xdoretrv.o: $(BASE)/src/inc/afsys.h Xdoretrv.o: ./afsapp.h Xdoretrv.o: ./locks.h Xdoretrv.o: ./project.h Xdoretrv.o: ./retrv.h Xdoretrv.o: ./typeconv.h Xdoretrv.o: doretrv.c Xdosave.o: $(BASE)/src/inc/afs.h Xdosave.o: $(BASE)/src/inc/afsys.h Xdosave.o: ./afsapp.h Xdosave.o: ./locks.h Xdosave.o: ./project.h Xdosave.o: ./save.h Xdosave.o: ./typeconv.h Xdosave.o: dosave.c Xmkattr.o: $(BASE)/src/inc/afs.h Xmkattr.o: $(BASE)/src/inc/afsys.h Xmkattr.o: ./afsapp.h Xmkattr.o: ./retrv.h Xmkattr.o: ./typeconv.h Xmkattr.o: mkattr.c Xproject.o: ./project.h Xproject.o: project.c Xretrv.o: $(BASE)/src/inc/ParseArgs.h Xretrv.o: $(BASE)/src/inc/afs.h Xretrv.o: $(BASE)/src/inc/afsys.h Xretrv.o: ./afsapp.h Xretrv.o: ./project.h Xretrv.o: ./retrv.h Xretrv.o: ./typeconv.h Xretrv.o: retrv.c Xsave.o: $(BASE)/src/inc/ParseArgs.h Xsave.o: ./afsapp.h Xsave.o: ./project.h Xsave.o: ./save.h Xsave.o: ./typeconv.h Xsave.o: save.c Xsighand.o: $(BASE)/src/inc/afs.h Xsighand.o: $(BASE)/src/inc/afsys.h Xsighand.o: ./afsapp.h Xsighand.o: ./typeconv.h Xsighand.o: sighand.c Xutil.o: $(BASE)/src/inc/afs.h Xutil.o: $(BASE)/src/inc/afsys.h Xutil.o: ./afsapp.h Xutil.o: ./locks.h Xutil.o: ./project.h Xutil.o: ./typeconv.h Xutil.o: util.c Xvadm.o: $(BASE)/src/inc/ParseArgs.h Xvadm.o: $(BASE)/src/inc/afs.h Xvadm.o: $(BASE)/src/inc/afsys.h Xvadm.o: ./afsapp.h Xvadm.o: ./typeconv.h Xvadm.o: ./vadm.h Xvadm.o: vadm.c Xvadm_delete.o: $(BASE)/src/inc/afs.h Xvadm_delete.o: $(BASE)/src/inc/afsys.h Xvadm_delete.o: ./afsapp.h Xvadm_delete.o: ./locks.h Xvadm_delete.o: ./typeconv.h Xvadm_delete.o: ./vadm.h Xvadm_delete.o: vadm_delete.c Xvadm_gkeys.o: $(BASE)/src/inc/afs.h Xvadm_gkeys.o: $(BASE)/src/inc/afsys.h Xvadm_gkeys.o: ./afsapp.h Xvadm_gkeys.o: ./typeconv.h Xvadm_gkeys.o: ./vadm.h Xvadm_gkeys.o: vadm_gkeys.c Xvadm_note.o: $(BASE)/src/inc/afs.h Xvadm_note.o: $(BASE)/src/inc/afsys.h Xvadm_note.o: ./afsapp.h Xvadm_note.o: ./locks.h Xvadm_note.o: ./typeconv.h Xvadm_note.o: ./vadm.h Xvadm_note.o: ./vc_sysdep.h Xvadm_note.o: vadm_note.c Xvadm_promote.o: $(BASE)/src/inc/afs.h Xvadm_promote.o: $(BASE)/src/inc/afsys.h Xvadm_promote.o: ./afsapp.h Xvadm_promote.o: ./locks.h Xvadm_promote.o: ./typeconv.h Xvadm_promote.o: ./vadm.h Xvadm_promote.o: vadm_promote.c Xvadm_reserve.o: $(BASE)/src/inc/afs.h Xvadm_reserve.o: $(BASE)/src/inc/afsys.h Xvadm_reserve.o: ./afsapp.h Xvadm_reserve.o: ./locks.h Xvadm_reserve.o: ./typeconv.h Xvadm_reserve.o: ./vadm.h Xvadm_reserve.o: vadm_reserve.c Xvadm_symname.o: $(BASE)/src/inc/afs.h Xvadm_symname.o: $(BASE)/src/inc/afsys.h Xvadm_symname.o: ./afsapp.h Xvadm_symname.o: ./project.h Xvadm_symname.o: ./typeconv.h Xvadm_symname.o: ./vadm.h Xvadm_symname.o: vadm_symname.c Xvadm_utils.o: $(BASE)/src/inc/afs.h Xvadm_utils.o: $(BASE)/src/inc/afsys.h Xvadm_utils.o: ./afsapp.h Xvadm_utils.o: ./typeconv.h Xvadm_utils.o: ./vadm.h Xvadm_utils.o: ./vadmdefs.h Xvadm_utils.o: vadm_utils.c Xvc_call.o: ./afsapp.h Xvc_call.o: ./typeconv.h Xvc_call.o: vc_call.c Xvc_files.o: $(BASE)/src/inc/afs.h Xvc_files.o: $(BASE)/src/inc/afsys.h Xvc_files.o: ./afsapp.h Xvc_files.o: ./locks.h Xvc_files.o: ./typeconv.h Xvc_files.o: ./vc_sysdep.h Xvc_files.o: vc_files.c Xvc_keyboardIo.o: ./afsapp.h Xvc_keyboardIo.o: ./typeconv.h Xvc_keyboardIo.o: vc_keyboardIo.c Xvc_lock.o: $(BASE)/src/inc/afs.h Xvc_lock.o: $(BASE)/src/inc/afsys.h Xvc_lock.o: ./afsapp.h Xvc_lock.o: ./typeconv.h Xvc_lock.o: vc_lock.c Xvl.o: $(BASE)/src/inc/ParseArgs.h Xvl.o: ./afsapp.h Xvl.o: ./typeconv.h Xvl.o: ./vl.h Xvl.o: vl.c Xvldovl.o: $(BASE)/src/inc/afs.h Xvldovl.o: $(BASE)/src/inc/afsys.h Xvldovl.o: ./afsapp.h Xvldovl.o: ./typeconv.h Xvldovl.o: ./vl.h Xvldovl.o: vldovl.c Xvlmisc.o: $(BASE)/src/inc/afs.h Xvlmisc.o: $(BASE)/src/inc/afsys.h Xvlmisc.o: ./afsapp.h Xvlmisc.o: ./typeconv.h Xvlmisc.o: ./vl.h Xvlmisc.o: vlmisc.c Xvlopt.o: $(BASE)/src/inc/ParseArgs.h Xvlopt.o: ./afsapp.h Xvlopt.o: ./typeconv.h Xvlopt.o: ./vl.h Xvlopt.o: vlopt.c END_OF_FILE if test 9367 -ne `wc -c <'src/vc/Makefile'`; then echo shar: \"'src/vc/Makefile'\" unpacked with wrong size! fi # end of 'src/vc/Makefile' fi echo shar: End of archive 11 \(of 33\). cp /dev/null ark11isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 33 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0 -- Please send comp.sources.unix-related mail to rsalz@uunet.uu.net.