home *** CD-ROM | disk | FTP | other *** search
- Subject: v19i020: A software configuration management system, Part07/33
- Newsgroups: comp.sources.unix
- Sender: sources
- Approved: rsalz@uunet.UU.NET
-
- Submitted-by: Axel Mahler <unido!coma!axel>
- Posting-number: Volume 19, Issue 20
- Archive-name: shape/part07
-
-
-
- #! /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 7 (of 33)."
- # Contents: bin/rcs2afs man/man3/afversions.3 src/afs/Shapefile
- # src/misc/hash.c src/vc/save.c src/vc/vc_call.c src/vfind/at_misc.c
- # Wrapped by rsalz@papaya.bbn.com on Thu Jun 1 19:26:55 1989
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- if test -f 'bin/rcs2afs' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'bin/rcs2afs'\"
- else
- echo shar: Extracting \"'bin/rcs2afs'\" \(6853 characters\)
- sed "s/^X//" >'bin/rcs2afs' <<'END_OF_FILE'
- X#! /bin/csh -f
- 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# LAST EDIT: Thu Feb 23 18:53:42 1989 by Uli Pralle (coma!uli)
- X# LAST EDIT: Wed Oct 26 23:58:29 1988 by Uli Pralle (coma!uli)
- X# LAST EDIT: Tue Oct 25 23:59:52 1988 by Uli Pralle (coma!uli)
- X#
- X# rcs2afs -- convert a RCS file to AFS
- X# Uli Pralle (uli@coma.UUCP)
- Xset AFSid = '$Header: rcs2afs[1.0] Thu Feb 23 19:03:47 1989 uli@coma published $'
- X
- X#
- X# Log for /u/shape/dist-tape/bin/rcs2afs[1.0]
- X# Thu Feb 23 19:03:47 1989 uli@coma published $
- X# --- empty log message ---
- X#
- X
- Xset progname = $0
- Xset progname = $progname:t # weiss der henker warum $0:t nicht geht...
- X # und kommt mit bloss keiner mit rtfm...
- X
- Xif ($#argv == 0) goto usage
- X
- Xset files = ""
- Xset _verbose = 1
- Xset incremental = 0
- Xset preserve = 0
- Xset mode = 644
- X
- X# test for options
- Xset i = 0
- Xwhile ($i < $#argv)
- X @ i++
- X switch ($argv[$i])
- X case "-incremental":
- X echo "Option -incremental not yet implemented."
- X goto usage
- X set incremantal = 1
- X continue;
- X case "-preserve":
- X set preserve = 1
- X continue;
- X case "-mode":
- X @ i++;
- X set mode = $argv[$i]
- X continue;
- X case "-q":
- X set _verbose = 0
- X continue;
- X case "-h":
- X case "-help":
- X goto usage # never returns
- X continue;
- X case "-version":
- X set noglob
- X set vers = ($AFSid)
- X set last = $#vers
- X @ last--
- X echo "This is $vers[2]:t $vers[3-$last]"
- X unset noglob
- X exit (0)
- X default:
- X set files = ($files "$argv[$i]")
- X continue;
- X endswitch
- Xend
- X
- Xif ($#files == 0) goto usage
- X
- Xonintr signal # catch signals
- X
- Xset busysaved = 0 # 1 if busy version existst
- X
- X# generate awk script
- X
- Xcat << AWKEOF > /tmp/$$.awk
- X#! /bin/awk -f
- XBEGIN {
- X revs = 0;
- X branches = 0;
- X nsym = 0;
- X}
- X
- X/head/ || /next/ {
- X if (\$2 != ";") {
- X rev[revs] = substr(\$2,1,length(\$2)-1);
- X revs++;
- X }
- X}
- X
- X/symbols/ {
- X symbolics = substr(\$0,index(\$0,\$2));
- X symbolics = substr(symbolics, 1, length(symbolics) -1 );
- X}
- X
- X/comment/ {
- X clead = substr(\$0, index(\$0,\$2));
- X clead = substr(clead,2,length(clead)-3);
- X if (clead == "@@") {
- X clead = "@";
- X }
- X}
- X
- X/branches/ {
- X if (\$2 != ";") {
- X branches++;
- X }
- X}
- X
- X/desc/ { exit; }
- X
- XEND {
- X printf ("set revisions = (");
- X for (revs--; revs >= 0; revs-- )
- X printf ("%s ", rev[revs]);
- X printf (")\n");
- X printf ("set clead = \"%s\"\n", clead);
- X printf ("set branches = \"%s\"\n", branches);
- X printf ("set symbolics = (");
- X nsym = split(symbolics, symbolics);
- X for (i = 1; i <= nsym; i++) {
- X split (symbolics[i], foo, ":");
- X printf ("%s %s ", foo[2], foo[1]);
- X }
- X printf (")\n");
- X}
- XAWKEOF
- X
- Xif (! -d AFS) then
- X if ($_verbose) echo "Creating AFS directory."
- X mkdir AFS
- Xendif
- X
- X# process each RCS file
- Xforeach i ($files)
- X set i = "`basename $i ',v'`,v"
- X
- X set dir = ""
- X if (! -e $i) then
- X if ( -e RCS/$i) then
- X set dir = "RCS/"
- X else
- X echo "RCS archive <$i> not found. --- Skipped." > /dev/tty
- X continue;
- X endif
- X endif
- X
- X set noglob
- X eval `awk -f /tmp/$$.awk $dir$i`
- X unset noglob
- X
- X set i = $i:t
- X
- X if ($#revisions == 0) then
- X echo "$i is not an RCS archive. --- Skipped." > /dev/tty
- X continue
- X endif
- X
- X if ($branches > 0) then
- X echo "Warning: $i contains non convertible branches. Ignored."
- X endif
- X
- X set busyvers = `basename $i ",v"`
- X
- X if ($incremental) then
- X set vlrevisions = (`vl $busyvers | sed -e 's/.*\[//' -e 's/\]//'`)
- X endif
- X
- X if (-e $busyvers) then
- X if ($_verbose) echo "Temporary saving busy version $busyvers as $$save..."
- X mv $busyvers $$save
- X set busysaved = 1
- X endif
- X
- X if (! $preserve) set curgen = `echo $revisions[1] | sed -e 's/\.[0-9]*//'`
- X
- X if ($_verbose) echo -n $i":"
- X
- X if (! $incremental) then
- X (rm -f AFS/*$busyvers*) >& /dev/null
- X
- X foreach j ($revisions)
- X if ($_verbose) echo -n " $j"
- X co -r$j $busyvers >& /dev/null
- X chmod $mode $busyvers
- X
- X if ($status != 0) then
- X echo $progname":" "co fails. Do You wish to continue ? [y/n]" > /dev/tty
- X set answer = $<
- X switch ($answer)
- X case "N":
- X case "n":
- X goto cleanup
- X case "y":
- X case "Y":
- X default:
- X continue;
- X endswitch
- X endif
- X
- X if (! $preserve) then
- X set thisgen = `echo $j | sed -e 's/\.[0-9]*//'`
- X
- X if ($thisgen > $curgen) then # change in generation
- X Save -fq $busyvers
- X set curgen = $thisgen
- X else
- X save -fq $busyvers
- X endif
- X else
- X save -fq -setvnum $j $busyvers
- X endif
- X rm -f $busyvers
- X end
- X
- X# set comment leader, iff necessary
- X set noglob
- X if ("$clead" != "") then
- X vadm -q -setc $clead $busyvers
- X endif
- X unset noglob
- X
- X if ($_verbose) echo ""
- X
- X# preserve symbolic names
- X set k = 1;
- X while ($k <= $#symbolics)
- X set thisrev = $symbolics[$k]
- X @ k++;
- X set thissymbolic = $symbolics[$k]
- X vadm -q -V $thisrev -symbolic $thissymbolic $busyvers
- X @ k++;
- X end
- X
- X if ($busysaved == 1) then
- X if ($_verbose) echo "$busyvers restored..."
- X mv $$save $busyvers
- X set busysaved = 0
- X endif
- Xend
- X
- Xif ($_verbose) echo "done."
- Xrm -f /tmp/$$.awk
- Xexit (0)
- X
- Xsignal:
- X if ($_verbose) then
- X echo ""
- X echo $progname": Caught signal, cleaning up..."
- X endif
- Xcleanup:
- X if ($busysaved == 1) then
- X if ($_verbose) echo "$busyvers restored..."
- X mv $$save $busyvers
- X set busysaved = 0
- X endif
- X rm -f /tmp/$$.awk
- X if ($_verbose) echo "terminated."
- X exit (1)
- X
- Xusage:
- X echo $progname":" "[-h -q -incremental -preserve] file ..."
- X echo " -h -- this help"
- X echo " -q -- be quiet"
- X echo " -incremental -- convert into an existing AFS file (not yet implemented)"
- X echo " -preserve -- preserve RCS version numbering"
- X exit (1)
- X
- X# Local Variables:
- X# tab-stop-list:(2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72)
- X# eval:(local-set-key " " 'tab-to-tab-stop)
- X# End:
- X
- X
- END_OF_FILE
- if test 6853 -ne `wc -c <'bin/rcs2afs'`; then
- echo shar: \"'bin/rcs2afs'\" unpacked with wrong size!
- fi
- chmod +x 'bin/rcs2afs'
- # end of 'bin/rcs2afs'
- fi
- if test -f 'man/man3/afversions.3' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'man/man3/afversions.3'\"
- else
- echo shar: Extracting \"'man/man3/afversions.3'\" \(6476 characters\)
- sed "s/^X//" >'man/man3/afversions.3' <<'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.TH AF_VERSIONS 3 "" \n(dy.\n(mo.\n(yr
- X.SH NAME
- Xaf_version \(em interface to the version control system in the Attribute
- XFilesystem
- X.SH SYNOPSIS
- X\fB#include <afs.h>
- X.sp
- Xaf_newgen (key, newkey)
- X.br
- XAf_key *key, *newkey;
- X.sp
- Xaf_setbusy (busykey, newkey)
- X.br
- XAf_key *busykey, *newkey;
- X.sp
- Xaf_saverev (busykey, savekey)
- X.br
- XAf_key *busykey, *savekey;
- X.sp
- Xaf_savebinary (busykey, savekey)
- X.br
- XAf_key *busykey, *savekey;
- X.sp
- Xaf_rstate (key)
- X.br
- XAf_key *key;
- X.sp
- Xaf_sstate (key, state)
- X.br
- XAf_key *key;
- X.br
- Xint state;
- X.sp
- Xaf_svnum (key, gen, rev)
- X.br
- Xint gen, rev;
- X.SH DESCRIPTION
- X\fIAf_newgen\fR opens a new generation in a line of development.
- XThe last saved version will be duplicated. This creates a new ASO,
- Xthat is numbered by a new generation number (increased by 1)
- Xand the initial revision number (0).
- XAll other attributes remain unchanged.
- X\fIaf_newgen\fR requires a lock (see af_lock(3)) set on the ASO specified
- Xby \fIkey\fR.
- X.PP
- XWith \fIaf_setbusy\fR you can declare a saved version as new busy version.
- X\fBNote:\fR Only the corresponding attributes are updated.
- X\fIAf_setbusy\fR does not copy any data! You have to use \fIaf_open(3)\fR
- Xand \fIfread/fwrite(3)\fR to produce a new busy version
- X\fIAf_setbusy\fR requires a lock (see af_lock(3)) set on the ASO specified
- Xby \fIbusykey\fR.
- X.PP
- X\fIAf_saverev\fR makes a copy of the ASO identified by \fIbusykey\fR.
- XThis new ASO gets the status \fIsaved\fR and a version number
- Xaccording to the AFS version-numbering scheme:
- X.RS
- XThe initial revision is numbered by generation number 1 and revision number 0.
- XAll other saved versions get version numbers built from
- Xthese of their predecessors by preserving the generation number and
- Xincreasing the revision number by 1.
- X.RE
- XAll remaining attributes (including user defined attributes) are inherited
- Xfrom the busy version.
- XThe key of the generated ASO is returned in \fIsavekey\fR.
- XUse \fIaf_dropkey\fR to free the allocated memory associated with
- X\fIsavekey\fR.
- X.br
- XBefore you can save an ASO you must reserve the update permission
- Xfor the corresponding line of development by locking the busy
- Xobject (\fIaf_lock\fR).
- XThe execution of \fIaf_saverev\fR does not affect the lock
- X(it remains active).
- X.PP
- X\fIAf_savebinary\fR saves an ASO to a derived object pool.
- XDerived object pools are intended to hold derived objects that can be
- Xreproduced at any time.
- XThis is important, because ASOs residing in derived object pools
- Xthat have not been accessed for a longer time may be deleted
- Xautomatically due to storage limitations for derived object pools.
- XThe maximum number of objects stored in a binary pool
- Xcan be given by setting the environment variable AFSBPSIZ to the
- Xappropriate value (default is 64).
- XSee \fIaf_intro (3)\fR for further details on derived object pools.
- X.br
- XASOs that are saved in derived object pools do not get a version number.
- XBy means of \fIaf_svnum\fR you can attach any version number to an
- XASO stored in a derived object pool.
- X.br
- XBy saving an object to a derived object pool, the given busy object
- X(identified by \fIbusykey\fR) is destroyed.
- XDuring the execution of \fIaf_savebinary\fR \fIbusykey\fR is
- Xautomatically dropped and cannot be used any longer.
- X.PP
- X\fIAf_rstate\fR returns the version state of the ASO
- Xidentified by \fIkey\fR.
- XPossible states are:
- X.IP \fBbusy\fR 0.8i
- XThe version is under development and its contents may
- Xbe changed.
- X.IP \fBsaved\fR
- XThe version is saved and may be used for later backup.
- X.IP \fBproposed\fR
- XThe version has been submitted for publication by the developer
- Xbut still needs formal approval by a quality assurance board
- Xto become publically visible and accessible in the official
- Xdatabase.
- X.IP \fBpublished\fR
- XThe version has passed the formal approval and is now accessible to
- Xevery member of the project. It is not yet accessed and may therefore
- Xbe withdrawn if necessary.
- X.IP \fBaccessed\fR
- XThe version has been published, and is now
- Xaccessed by some members of the project.
- X.IP \fBfrozen\fR
- XThe version may be part of a system configuration
- Xthat has been released to the outside world. This means it must, under
- Xno circumstances, be destroyed.
- X.RE
- X.PP
- XThe function
- X\fIaf_sstate\fR sets the state of the identified ASO.
- XOnly state transitions from one state to the next or previous state
- X(according to the list above) are allowed.
- X.PP
- X\fIAf_svnum\fR sets the version number of the identified ASO to the
- Xgiven generation (\fIgen\fR) and revision (\fIrev\fR) number.
- XThe version number of source objects can only be \(bqincreased\(rq \-
- Xthe version number of derived objects can be set to any value.
- X\fIAf_svnum\fR requires a lock (see af_lock(3)) set on the ASO specified
- Xby \fIkey\fR.
- X.SH SEE ALSO
- Xaf_intro (3), af_lock(3)
- X.SH DIAGNOSTICS
- XUpon error, \-1 is returned and \fIaf_errno\fR is set to the corresponding
- Xerror number
- X.SH BUGS
- X\fIAf_setbusy\fR interrupts the delta chain if no busy version is present.
- XFor the user of AFS, this is only a performance loss \- not a malfunction.
- X.PP
- XDue to limitations in the \s-1UNIX\s+1 filesystem, only the creator
- X(author) of a derived object may save it to a derived object pool.
- X.PP
- XEmpty files cannot be inserted in a derived object pool.
- X.PP
- XShrinking of binary pools (setting AFSBPSIZ to a value that is smaller
- Xthan the actual number of files inthe binary pool) causes
- Xuncontrolled removing of supernumerary files. They are \fInot\fR
- Xcleared out on a last accessed basis.
- END_OF_FILE
- if test 6476 -ne `wc -c <'man/man3/afversions.3'`; then
- echo shar: \"'man/man3/afversions.3'\" unpacked with wrong size!
- fi
- # end of 'man/man3/afversions.3'
- fi
- if test -f 'src/afs/Shapefile' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/afs/Shapefile'\"
- else
- echo shar: Extracting \"'src/afs/Shapefile'\" \(6254 characters\)
- sed "s/^X//" >'src/afs/Shapefile' <<'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# Shapefile for AFS
- X#
- X# $Header: Shapefile[1.0] Wed Feb 22 16:28:28 1989 andy@coma published $
- X#
- X
- XUSERID = `/usr/ucb/whoami`\@`hostname`
- X
- X#
- X# Tool definition & location part
- X# (these macros might be site and/or system-dependent)
- X#
- X
- XSYSTEM = bsd_4_3
- XQUALITY = test_profiling
- Xvpath = /u/shape/src/delta
- X
- X# ---> define locations of sources and executables
- XSRCDIR = /u/andy/shape/afs
- XINSTALDIR = /u/shape
- XAFSINC = /u/shape/src/inc
- XDELTAPATH = /u/shape/src/delta
- XINSTALOWNER = shape
- XINSTALGROUP = unib
- X
- X#% VARIANT-SECTION
- X
- Xvclass system ::= (bsd_4_3, sunos_3_4, sunos_4_0, ultrix_2_0)
- Xvclass quality ::= (test, test_profiling, trace, final)
- X
- Xbsd_4_3:
- X vflags = -DBSD_4_3 -DSYSLOG
- Xsunos_3_4:
- X vflags = -DSUNOS_3_4 -DOLDDBM
- X CLIBS = -ldbm
- Xsunos_4_0:
- X vflags = -DSUNOS_4_0 -DSYSLOG
- Xultrix_2_0:
- X vflags = -DULTRIX_2_0 -DOLDDBM
- X CLIBS = -ldbm
- X
- Xtest:
- X CFLAGS = -g
- X LDFLAGS = -g
- Xtest_profiling:
- X CFLAGS = -pg -g
- X LDLAGS = -pg -g
- Xtrace:
- X CFLAGS = -g -DMEMDEBUG -DTMPDEBUG -DHASHDEBUG
- Xfinal:
- X CFLAGS = -g
- X LDFLAGS = -g
- X
- X#% END-VARIANT-SECTION
- X
- X#% RULE-SECTION
- X
- Xtestrule:
- X af_version.c, attrge (state, saved), attrmax (version);
- X *, attr (state, busy);
- X *, attrge (state, saved), attrmax (version), \
- X msg (used archived version of $+.).
- X
- Xrelrule:
- X bsfd.c, attr (state, busy);
- X lcs*.c, attr (state, busy);
- X *, attr (state, published), attrmax (version).
- X
- X#% END-RULE-SECTION
- X
- XPRODUCT = afs
- XPROGS = libafs.a afsrepair
- X
- XSOURCE = \
- X afarchive.c afenviron.c aflib.c afvers.c afdelta.c afkeys.c\
- X afstates.c afsattrs.c afretr.c afsysc.c affiles.c afcattrs.c\
- X afsets.c afhash.c afcompar.c afbpool.c afsymtab.c afstore.c\
- X aflock.c afsrepair.c
- X
- X
- XDELTASOURCE = \
- X bsfd.c lcs.main.c lcs.cdlt.c lcs.gedc.c edcmd.h suffix.h predef.h
- X
- XINCLUDE = afs.h afsys.h afarchive.h
- X
- XCOMPONENTS = $(SOURCE) $(INCLUDE) afsrepair.h
- X
- X.BPOOL: $(AFSOBJS) $(DELTALIB) $(AFSDB)
- X
- XVERSION = af_version
- X
- XAFSOBJS = \
- X afarchive.o afenviron.o aflib.o afvers.o afdelta.o afkeys.o\
- X afstates.o afsattrs.o afretr.o afsysc.o affiles.o afcattrs.o\
- X afsets.o afhash.o afcompar.o afbpool.o afsymtab.o afstore.o\
- X aflock.o
- X
- XDELTALIB = bsfd.o lcs.cdlt.o lcs.gedc.o lcs.main.o
- X#DELTALIB = deltalib.o
- X
- XTESTSOURCE = \
- X testmain.c testcall.c testfdes.c testkey.c testabuf.c testset.c\
- X testvar.c testshow.c test.h
- X
- XAFSDB = testmain.o testcall.o testshow.o testvar.o testkey.o testset.o\
- X testabuf.o testfdes.o
- X
- X#
- X# Top level targets (containing selection rules)
- X#
- X
- Xall: testrule +$(SYSTEM) +$(QUALITY) libafs.a afsrepair afsdb
- X# "afsdb" only on coma
- X
- Xlib: testrule +$(SYSTEM) +$(QUALITY) libafs.a
- X
- Xrepair: testrule +$(SYSTEM) +$(QUALITY) afsrepair
- X
- Xtest: testrule +$(SYSTEM) +$(QUALITY) afsdb
- X
- Xinstallall: install installtest
- X
- Xinstall: relrule +$(SYSTEM) +final installafs
- X
- X# installtest: relrule +$(SYSTEM) +final prepare_testrel installafsdb
- Xinstalltest: relrule +$(SYSTEM) +test prepare_testrel installafsdb
- X
- Xobjects : testrule +$(SYSTEM) +$(QUALITY) $(AFSOBJS) afsrepair.o
- X
- X#
- X# building the library
- X#
- X
- Xlibafs.a: $(AFSOBJS) $(DELTALIB) $(VERSION).o
- X @ar ruv libafs.a $(AFSOBJS) $(DELTALIB) $(VERSION).o
- X
- X#
- X# preparing releases
- X#
- X
- Xsave:
- X save $(COMPONENTS) $(TESTSOURCE)
- X
- Xrelease:
- X @rm -f $(VERSION).c; \
- X echo 'char *$Shapefile () {' >> $(VERSION).c ; \
- X echo ' static char ConfID[] = "$1.0 ($Wed Feb 22 16:25:33 1989 by $andy@coma$)";' >> $(VERSION).c ; \
- X echo ' return ConfID;' >> $(VERSION).c ; \
- X echo '}' >> $(VERSION).c; \
- X sbmt -fq $(VERSION).c; \
- X __rel__=`vl -y $(VERSION).c | sed -e 's/^.*\[//;s/\]$$//'`; \
- X echo Generating Release $$__rel__; \
- X sbmt -q -n rel-$$__rel__ $(COMPONENTS) $(TESTSOURCE) Shapefile Makefile; \
- X echo ;\
- X echo don\'t forget to execute \'shape install\'
- X
- Xgeneration:
- X
- X#
- X# installing
- X#
- X
- Xinstallafs: libafs.a afsrepair $(AFSINC)/afs.h $(AFSINC)/afsys.h
- X mv $(INSTALDIR)/lib/libafs.a $(INSTALDIR)/lib/libafs.backup
- X install -c -m 644 -o $(INSTALOWNER) -g $(INSTALGROUP) libafs.a $(INSTALDIR)/lib
- X ranlib $(INSTALDIR)/lib/libafs.a
- X install -c -m 755 -o $(INSTALOWNER) -g $(INSTALGROUP) afsrepair $(INSTALDIR)/bin
- X
- X$(AFSINC)/afs.h: afs.h
- X install -c -m 644 -o $(INSTALOWNER) -g $(INSTALGROUP) afs.h $(AFSINC)
- X
- X$(AFSINC)/afsys.h: afsys.h
- X install -c -m 644 -o $(INSTALOWNER) -g $(INSTALGROUP) afsys.h $(AFSINC)
- X touch $(AFSINC)/afs.h
- X
- X#
- X# archive repair tool
- X#
- X
- X$(AFSOBJS) $(AFSDB) afsrepair.o: $(INCLUDE)
- X
- Xafsrepair.o: afsrepair.h
- X
- Xafsrepair: afsrepair.o afsysc.o afsymtab.o afenviron.o afhash.o\
- X aflib.o af_version.o
- X $(CC) -o afsrepair $(LDFLAGS) afsrepair.o afsysc.o afsymtab.o\
- X afenviron.o afhash.o aflib.o af_version.o
- X
- X#
- X# Test-environment for libafs.a (only on coma)
- X#
- X
- Xinstallafsdb: $(AFSDB) afsdb
- X install -c -m 755 -o $(INSTALOWNER) -g $(INSTALGROUP) afsdb $(INSTALDIR)/bin
- X rm -f $(INSTALDIR)/bin/afstest
- X ln $(INSTALDIR)/bin/afsdb $(INSTALDIR)/bin/afstest
- X
- Xafsdb: $(AFSDB) $(AFSOBJS) $(DELTALIB) $(VERSION).o
- X $(CC) -o afsdb $(LDFLAGS) $(AFSDB) $(AFSOBJS) $(VERSION).o\
- X $(DELTALIB) $(CLIBS)
- X
- X$(AFSDB): test.h
- X
- X#
- X# Miscellaneous stuff
- X#
- X
- Xlint:
- X lint $(DELTASOURCE) $(SOURCE)
- X
- Xtags: $(SOURCE)
- X /usr/local/etags $(SOURCE)
- X
- Xxref: $(SOURCE)
- X /usr/ucb/ctags -w -x $(SOURCE) > xref
- X
- Xclean :
- X rm $(AFSOBJS)
- X
- Xtar:
- X tar cvf /tmp/afs.tar $(COMPONENTS) $(TESTSOURCE) Makefile; \
- X cd $(DELTAPATH); \
- X tar uvf /tmp/afs.tar $(DELTASOURCE)
- END_OF_FILE
- if test 6254 -ne `wc -c <'src/afs/Shapefile'`; then
- echo shar: \"'src/afs/Shapefile'\" unpacked with wrong size!
- fi
- # end of 'src/afs/Shapefile'
- fi
- if test -f 'src/misc/hash.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/misc/hash.c'\"
- else
- echo shar: Extracting \"'src/misc/hash.c'\" \(6107 characters\)
- sed "s/^X//" >'src/misc/hash.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 */
- Xstatic char *AFSid = "$Header: hash.c[2.1] Thu Feb 23 21:24:20 1989 axel@coma published $";
- X
- X/*
- X * Log for /u/shape/dist-tape/src/misc/hash.c[1.1]
- X * Thu Feb 23 21:24:20 1989 axel@coma save $
- X * --- empty log message ---
- X * hash.c[2.0] Thu Feb 23 21:24:20 1989 axel@coma published $
- X * --- empty log message ---
- X * hash.c[2.1] Thu Feb 23 21:24:20 1989 axel@coma published $
- X * --- empty log message ---
- X */
- X/*
- X * $Log: hash.c,v $
- X * Revision 2.0 88/06/29 16:14:43 axel
- X * New System Generation
- X *
- X * Revision 1.1 88/06/07 17:10:05 axel
- X * This version is part of a release
- X *
- X */
- X
- X#include <stdio.h>
- X#include <sys/types.h>
- X#include <sys/stat.h>
- X#include <strings.h>
- X#include "hash.h"
- X
- Xhashinit (htab, hsize, sizeratio, fhash) Hash *htab; int hsize, sizeratio,
- X (*fhash)(); {
- X char *chash, *malloc();
- X int ltimes, ctimes;
- X register int i;
- X register int lnull = 0L;
- X long *lhash;
- X
- X/*
- X * Determination of reasonable size and initialization of hashtable.
- X */
- X
- X /* initialize Hash - structure */
- X htab->hsize = hsize/sizeratio;
- X if ((htab->hashtb =
- X (Hashent *)malloc (htab->hsize*sizeof (Hashent))) == NULL) {
- X perror ("malloc hashtable");
- X exit (1);
- X }
- X htab->fhash = fhash;
- X#ifdef CCOL
- X htab->collcnt = 0;
- X#endif
- X htab->symcount = 0;
- X
- X /* set hashlist all zeros, take care of alignment */
- X lhash = (long *)htab->hashtb;
- X ltimes = (htab->hsize*sizeof (Hashent))/sizeof (long);
- X ctimes = (htab->hsize*sizeof (Hashent))%sizeof (long);
- X for (i=0; i < ltimes; i++)
- X *lhash++ = lnull;
- X chash = (char *)lhash;
- X for (i=0; i < ctimes; i++)
- X *chash++ = '\0';
- X/*
- X * End of hashtable initialization.
- X */
- X}
- X
- Xchar *hashsym (htab, symbol, symval) Hash *htab; char *symbol, *symval; {
- X/*
- X * put entry into hashtable. Only called, if symbol hasn't been found in
- X * hashtable. Function returns pointer to the symbol-string and sets
- X * external variable cur_symval to corresponding symval.
- X */
- X int symindex;
- X Hashent *new, *curptr;
- X
- X htab->symcount++;
- X symindex = htab->fhash (htab, symbol);
- X if (!htab->hashtb[symindex].symbol[0]) { /* found entry is not used yet */
- X strcpy (htab->hashtb[symindex].symbol, symbol);
- X strcpy (htab->hashtb[symindex].symval, symval);
- X htab->hashtb[symindex].next = NULL;
- X htab->cur_symval = htab->hashtb[symindex].symval;
- X return htab->hashtb[symindex].symbol;
- X }
- X else { /* oh boy - a collision! */
- X#ifdef CCOLL
- X htab->collcnt++;
- X fprintf (stderr, "%d'th hash-collision.\n", htab->collcnt);
- X#endif
- X new = (Hashent*)malloc (sizeof (Hashent));
- X strcpy (new->symbol, symbol);
- X strcpy (new->symval, symval);
- X new->next = NULL;
- X curptr = &htab->hashtb[symindex];
- X while (curptr->next) curptr = curptr->next;
- X curptr->next = new;
- X htab->cur_symval = new->symval;
- X return new->symbol;
- X } /* endif */
- X} /* end symhash */
- X
- Xint fhash (htab, hstr) Hash *htab; char *hstr; {
- X register int lhstr, hval = 0, i;
- X
- X lhstr = strlen (hstr);
- X for (i = 0; i < lhstr; i++)
- X hval = hval + i*hstr[i];
- X return hval%htab->hsize;
- X}
- X
- Xchar *symlookup (htab, symbol) Hash *htab; char *symbol; {
- X/*
- X * Function searches htab for an entry with the given name symbol.
- X * If such an entry exists, a pointer to the symbol string is returned
- X * and the external variable cur_symval is set to the corresponding
- X * symbolvalue
- X */
- X int where;
- X Hashent *targ;
- X
- X where = htab->fhash (htab, symbol);
- X if (htab->hashtb[where].symbol[0]) { /* well, we found at least something */
- X if (!strcmp (symbol, htab->hashtb[where].symbol)) { /* found it ? */
- X htab->cur_symval = htab->hashtb[where].symval;
- X return htab->hashtb[where].symbol;
- X }
- X else { /* maybe it is somewhere down the gully */
- X targ = &htab->hashtb[where];
- X while (targ->next) {
- X targ = targ->next;
- X if (!strcmp (targ->symbol, symbol)) {
- X htab->cur_symval = targ->symval;
- X return targ->symbol;
- X }
- X }
- X }
- X }
- X /* when we come to this point, the symbol hasn't been known */
- X htab->cur_symval = NULL;
- X return NULL;
- X}
- X
- Xchar *cur_symval (htab) Hash *htab; {
- X return htab->cur_symval;
- X}
- X
- Xdestroy_htab (htab) Hash *htab; {
- X free (htab->hashtb);
- X}
- X
- Xdumphtb (htab) Hash *htab; {
- X extern FILE *yyout;
- X register int i;
- X register Hashent *h;
- X
- X#ifdef CCOLL
- X fprintf (yyout, "Hash-collision statistics:\n");
- X fprintf (yyout, "Table-size: %d\tNo. of symbols: %d\tCollisions: %d\n",
- X htab->hsize, htab->symcount, htab->collcnt);
- X#endif
- X
- X for (i = 0; i < htab->hsize; i++) {
- X if (htab->hashtb[i].symbol[0]) {
- X h = &htab->hashtb[i];
- X while (h) {
- X fprintf (yyout, "symbol: %s", h->symbol);
- X if (h->symval[0])
- X fprintf (yyout, ", value: %s.\n", h->symval);
- X else
- X fprintf (yyout, " -- no value.\n");
- X h = h->next;
- X }
- X }
- X else fprintf (yyout, "empty hastable-entry.\n");
- X }
- X}
- X
- Xgetfsize (fil) FILE *fil; {
- X struct stat buf;
- X
- X if (fil == stdin) {
- X return DEFHSIZE;
- X }
- X else {
- X if (fstat (fileno (fil), &buf) == -1) {
- X perror ("file should be accessible");
- X exit (1);
- X }
- X return (int)buf.st_size;
- X }
- X}
- END_OF_FILE
- if test 6107 -ne `wc -c <'src/misc/hash.c'`; then
- echo shar: \"'src/misc/hash.c'\" unpacked with wrong size!
- fi
- # end of 'src/misc/hash.c'
- fi
- if test -f 'src/vc/save.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/vc/save.c'\"
- else
- echo shar: Extracting \"'src/vc/save.c'\" \(6983 characters\)
- sed "s/^X//" >'src/vc/save.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#ifndef lint
- Xstatic char *AFSid = "$Header: save.c[3.15] Thu Feb 23 18:13:53 1989 axel@coma published $";
- X#ifdef CFFLGS
- Xstatic char *ConfFlg = CFFLGS;
- X /* should be defined from within Makefile */
- X#endif
- X#endif
- X/*
- X * Log for /u/shape/dist-tape/src/vc/save.c[3.8]
- X * Thu Feb 23 18:13:53 1989 axel@coma published $
- X * --- empty log message ---
- X * save.c[3.11] Thu Feb 23 18:13:53 1989 axel@coma published $
- X * --- empty log message ---
- X * save.c[3.12] Thu Feb 23 18:13:53 1989 axel@coma save $
- X * --- empty log message ---
- X * save.c[3.13] Thu Feb 23 18:13:53 1989 axel@coma save $
- X * --- empty log message ---
- X * save.c[3.14] Thu Feb 23 18:13:53 1989 axel@coma save $
- X * --- empty log message ---
- X * save.c[3.15] Thu Feb 23 18:13:53 1989 axel@coma published $
- X * --- empty log message ---
- X */
- X
- X#include <signal.h>
- X#include <stdio.h>
- X#include <ctype.h>
- X#include <strings.h>
- X#include "ParseArgs.h"
- X#include "save.h"
- X#include "project.h"
- X
- Xchar *progname, vcomment[1024], tfname[MAXNAMLEN], atr_fname[MAXNAMLEN],
- X symname[MAXNAMLEN], projname[80];
- Xint newvnum;
- X
- X/* forward decls for option handlers */
- Xextern handle_R_switch ();
- Xextern handle_f_switch ();
- Xextern handle_q_switch ();
- Xextern handle_u_switch ();
- Xextern handle_a_opt ();
- Xextern handle_m_opt ();
- Xextern handle_n_opt ();
- Xextern handle_p_opt ();
- Xextern handle_svnum_opt ();
- Xextern handle_t_opt ();
- Xextern usage ();
- X
- Xunsigned int options;
- X
- XOptDesc argdesc[] = {
- X { "version", OPT_IS_SWITCH, handle_R_switch },
- X { "f", OPT_IS_SWITCH, handle_f_switch },
- X { "q", OPT_IS_SWITCH, handle_q_switch },
- X { "u", OPT_IS_SWITCH, handle_u_switch },
- X { "unlock", OPT_IS_SWITCH, handle_u_switch },
- X { "a", OPT_HAS_ARG, handle_a_opt },
- X { "m", OPT_HAS_ARG, handle_m_opt },
- X { "n", OPT_HAS_ARG, handle_n_opt },
- X { "p", OPT_HAS_ARG, handle_p_opt },
- X { "setvnum", OPT_HAS_ARG, handle_svnum_opt },
- X { "t", OPT_HAS_ARG, handle_t_opt },
- X { "h", OPT_IS_SWITCH, usage },
- X { "?", OPT_HAS_ARG, usage },
- X { (char *) NULL, NULL, NULL }
- X};
- X
- Xstruct Transaction ThisTransaction;
- Xint nfnms;
- X
- Xmain (ac, av) char **av; {
- X register int i;
- X int nac, rc = 0;
- X char projname[80], **nav, messg[80], *es, *getenv(), *version();
- X Project pdesc;
- X
- X if (!rindex (av[0], '/')) progname = av[0];
- X else progname = rindex (av[0], '/') + 1;
- X /* make prog-name available to entire program */
- X
- X if (ac < 2) {
- X usage ();
- X exit (1);
- X }
- X
- X if (isupper(progname[0])) options |= NEWGEN;
- X if (strcmp (progname+1, SAVE)) /* check from 2nd char onwards */
- X options |= SUBMIT;
- X if (ParseArgs (ac, av, &nac, &nav, argdesc)) {
- X usage ();
- X }
- X
- X if (!(options & ATTRDEF)) {
- X es = getenv (SVATTR);
- X if ((es) && (es[0] != '\0')) {
- X options |= ATTRDEF;
- X (void)strcpy (atr_fname, es);
- X }
- X }
- X
- X if (GetProject (projname, &pdesc) < 0) {
- X (void)sprintf (messg, "%s %s", EINVALPROJ, projname);
- X logmsg (messg);
- X exit (1);
- X }
- X
- X CatchSigs ();
- X nfnms = nac;
- X ThisTransaction.tr_rc = 0;
- X for (i = 0; i < nfnms; i++) {
- X if (!setjmp (ThisTransaction.tr_env)) {
- X ThisTransaction.tr_seqno = i;
- X (void)strcpy (ThisTransaction.tr_fname, nav[i]);
- X ThisTransaction.tr_done = FALSE;
- X SaveAFile (nav[i], &pdesc);
- X }
- X else { /* ThisTransaction was aborted */
- X rc += ThisTransaction.tr_rc;
- X }
- X }
- X logmsg ("done.");
- X return (rc);
- X}
- X
- XSfunc_t interrupt_action () { /* is executed by appropriate signal handler */
- X char messg[80];
- X int mask = sigblock (SIGINT);
- X
- X if ((nfnms - ThisTransaction.tr_seqno) > 1) {
- X (void)sprintf (messg, "\ncompletely stop saving (%d files unsaved) ?",
- X nfnms - ThisTransaction.tr_seqno);
- X if (ask_confirm (messg, "no")) {
- X if (ThisTransaction.tr_done) {
- X (void)sprintf (messg, "\ntoo late, %s already saved",
- X ThisTransaction.tr_fname);
- X logmsg (messg);
- X return; /* continue where we've been interrupted */
- X }
- X (void)sprintf (messg, "%s not saved", ThisTransaction.tr_fname);
- X logmsg (messg);
- X (void)sigsetmask (mask);
- X longjmp (ThisTransaction.tr_env, 1);
- X }
- X else {
- X (void)sprintf (messg, "%s not saved", ThisTransaction.tr_fname);
- X logmsg (messg);
- X exit (1);
- X }
- X }
- X else {
- X (void)sprintf (messg, "\n%s not saved", ThisTransaction.tr_fname);
- X logmsg (messg);
- X exit (1);
- X }
- X}
- X
- Xlogmsg (msg) char *msg; {
- X if (!(options & QUIETPLEASE)) {
- X fprintf (stdout, "%s\n", msg);
- X }
- X}
- X
- Xlogerr (msg) char *msg; {
- X fprintf (stderr, "%s: %s\n", progname, msg);
- X}
- X
- X/*ARGSUSED*/
- Xhandle_R_switch (o, a) char *o, *a; {
- X printf ("This is %s version %s.\n", progname, version());
- X printf ("AFS version %s.\n", af_version());
- X exit (0);
- X}
- X
- X/*ARGSUSED*/
- Xhandle_a_opt (o, a) char *o, *a; {
- X options |= ATTRDEF;
- X (void)strcpy (atr_fname, a);
- X return 0;
- X}
- X
- X/*ARGSUSED*/
- Xhandle_f_switch (o, a) char *o, *a; {
- X options |= FORCE;
- X return 0;
- X}
- X
- X/*ARGSUSED*/
- Xhandle_m_opt (o, a) char *o, *a; {
- X if (!(options & TXTFSET)) {
- X options |= MSGSET;
- X (void)strcpy (vcomment, a);
- X return 0;
- X }
- X return 0;
- X}
- X
- X/*ARGSUSED*/
- Xhandle_n_opt (o, a) char *o, *a; {
- X if (a && a[0]) {
- X options |= SYMNSET;
- X (void)strcpy (symname, a);
- X }
- X return 0;
- X}
- X
- X/*ARGSUSED*/
- Xhandle_q_switch (o, a) char *o, *a; {
- X options |= QUIETPLEASE;
- X return 0;
- X}
- X
- X/*ARGSUSED*/
- Xhandle_p_opt (o, a) char *o, *a; {
- X options |= OTHERPROJ;
- X (void)strcpy (projname, a);
- X return 0;
- X}
- X
- X/*ARGSUSED*/
- Xhandle_svnum_opt (o, a) char *o, *a; {
- X char messg[80];
- X if (!(newvnum = mkvno (a))) {
- X (void)sprintf (messg, "bad version number \"%s\"", a);
- X logerr (messg);
- X return 1;
- X }
- X options |= SETVNUM;
- X return 0;
- X}
- X
- X/*ARGSUSED*/
- Xhandle_t_opt (o, a) char *o, *a; {
- X if (options & MSGSET) {
- X options &= ~MSGSET;
- X }
- X options |= TXTFSET;
- X (void)strcpy (tfname, a);
- X return 0;
- X}
- X
- X/*ARGSUSED*/
- Xhandle_u_switch (o, a) char *o, *a; {
- X options |= LCKGIVEUP;
- X return 0;
- X}
- X
- Xusage () {
- X pa_ShortUsage (progname, argdesc, "files ...");
- X exit (1);
- X}
- X
- END_OF_FILE
- if test 6983 -ne `wc -c <'src/vc/save.c'`; then
- echo shar: \"'src/vc/save.c'\" unpacked with wrong size!
- fi
- # end of 'src/vc/save.c'
- fi
- if test -f 'src/vc/vc_call.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/vc/vc_call.c'\"
- else
- echo shar: Extracting \"'src/vc/vc_call.c'\" \(5928 characters\)
- sed "s/^X//" >'src/vc/vc_call.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#ifndef lint
- Xstatic char *AFSid = "$Header: vc_call.c[1.10] Thu Feb 23 18:14:28 1989 axel@coma published $";
- X#ifdef CFFLGS
- Xstatic char *ConfFlg = CFFLGS;
- X /* should be defined from within Makefile */
- X#endif
- X#endif
- X/*
- X * Log for /u/shape/dist-tape/src/vc/vc_call.c[1.3]
- X * Thu Feb 23 18:14:28 1989 axel@coma published $
- X * --- empty log message ---
- X * vc_call.c[1.6] Thu Feb 23 18:14:28 1989 axel@coma published $
- X * --- empty log message ---
- X * vc_call.c[1.7] Thu Feb 23 18:14:28 1989 axel@coma save $
- X * --- empty log message ---
- X * vc_call.c[1.8] Thu Feb 23 18:14:28 1989 axel@coma save $
- X * --- empty log message ---
- X * vc_call.c[1.9] Thu Feb 23 18:14:28 1989 axel@coma save $
- X * --- empty log message ---
- X * vc_call.c[1.10] Thu Feb 23 18:14:28 1989 axel@coma published $
- X * --- empty log message ---
- X */
- X
- X#include <stdio.h>
- X#include <strings.h>
- X#include <signal.h>
- X#include <sys/types.h>
- X#include <sys/stat.h>
- X#include <sys/wait.h>
- X#ifndef MAXNAMLEN
- X#include <sys/dir.h>
- X#endif MAXNAMLEN
- X#include "afsapp.h"
- X#include <sys/resource.h>
- X
- Xextern char *malloc();
- Xextern char *FindProgram();
- X
- X/**/
- Xint call (status, this_program, argvec)
- X union wait *status;
- X char *this_program;
- X char **argvec;
- X{
- X int pid, offered_pid;
- X extern char **environ;
- X
- X if (!rindex (this_program, '/')) {
- X if ((this_program = FindProgram (this_program)) == NULL)
- X return 0;
- X }
- X
- X if (!FileExecutable (this_program))
- X return 0;
- X
- X pid = vfork ();
- X
- X if (pid == -1) {
- X logerr ("Can't fork");
- X return 0;
- X }
- X
- X if (!pid) {
- X /* child */
- X /* close open files ? */
- X execve (this_program, argvec, environ);
- X logerr ("Can't exec");
- X _exit (1);
- X return 1; /* to make lint happy */
- X }
- X else {
- X /* parent */
- X /* here we must redefine actual interrupt handler. */
- X while ( ((offered_pid = wait (status)) != pid) && (offered_pid != -1))
- X ; /* nothing to do */
- X
- X
- X if (offered_pid == -1) {
- X return 0;
- X }
- X /* here we must reconstruct old sighandl */
- X if (status->w_status)
- X return 0;
- X else
- X return 1;
- X }
- X/*NOTREACHED*/
- X return 1;
- X}
- X
- X/**/
- Xint call_editor (editor, file, contents, newcontents)
- X char *editor, *file, *contents;
- X/* unsigned long *newcontents; */
- X char **newcontents;
- X{
- X /*
- X * Calls editor "editor" with file "file" and returns its
- X * contents after the editor session in "newcontents".
- X * Return value is the length of the new text.
- X *
- X * On failure, 0 is returned to indicate the error. newcontents
- X * is *not* updated and points to nowhere. On error the file
- X * will be removed.
- X *
- X * If "contents" points to a valid text, this text is put (not appended)
- X * into the temporary file before editor starts. Text must be
- X * NULL terminated, otherwise strange things will happen...
- X */
- X
- X FILE *fid;
- X char *new;
- X char cmd[MAXNAMLEN];
- X int length;
- X union wait status;
- X struct stat sbuf;
- X char buf[100];
- X char *argvec[10];
- X
- X *newcontents = NULL; /* don't get confused on error. */
- X
- X Register (file, TYPEF);
- X if ((fid = fopen (file, "w")) == NULL) { /* create a file */
- X (void)sprintf (buf,"Can't open temporary file %s.", file);
- X UnRegister (file, TYPEF);
- X logerr (buf);
- X return -1;
- X }
- X
- X if (contents && *contents) {
- X length = strlen (contents);
- X
- X if (fwrite (contents, sizeof (char), length, fid) != length) {
- X (void)sprintf (buf, "lost bytes while writing to %s.", file);
- X logerr (buf);
- X (void)fclose (fid);
- X RemoveFile (file);
- X UnRegister (file, TYPEF);
- X return -1;
- X }
- X }
- X
- X (void)fclose (fid);
- X
- X (void)sprintf (cmd, "%s %s", editor, file);
- X (void)sprintf (buf, "starting up %s...", cmd);
- X logmsg (buf);
- X
- X argvec[0] = editor;
- X argvec[1] = file;
- X argvec[2] = (char *) NULL;
- X
- X /* if (retcode = system (cmd)) { */
- X /*VARARGS2*/
- X if (! call (&status, editor, argvec)) {
- X (void)sprintf (buf, "Editor %s exited abnormally.", editor);
- X logerr (buf);
- X RemoveFile (file);
- X UnRegister (file, TYPEF);
- X return -1;
- X }
- X
- X if (stat (file, &sbuf) == -1) {
- X (void)sprintf (buf,"Can't stat temporary file %s.", file);
- X logerr (buf);
- X return -1;
- X }
- X
- X if ((fid = fopen (file, "r")) == NULL) {
- X (void)sprintf (buf,"Can't reopen temporary file %s.", file);
- X logerr (buf);
- X RemoveFile (file);
- X UnRegister (file, TYPEF);
- X return -1;
- X }
- X RemoveFile (file);
- X UnRegister (file, TYPEF);
- X length = sbuf.st_size;
- X if ((new = malloc ((unsigned)(sizeof (char) * (length + 1)))) == NULL) {
- X logerr ("Can't malloc for new");
- X (void)fclose (fid);
- X return -1;
- X }
- X
- X if (!fread (new, sizeof (char), length, fid)) {
- X (void)sprintf (buf, "lost bytes while reading from %s.", file);
- X logerr (buf);
- X (void)fclose (fid);
- X return -1;
- X }
- X new[length] = NULL;
- X
- X (void)fclose (fid);
- X *newcontents = new;
- X return length;
- X}
- END_OF_FILE
- if test 5928 -ne `wc -c <'src/vc/vc_call.c'`; then
- echo shar: \"'src/vc/vc_call.c'\" unpacked with wrong size!
- fi
- # end of 'src/vc/vc_call.c'
- fi
- if test -f 'src/vfind/at_misc.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'src/vfind/at_misc.c'\"
- else
- echo shar: Extracting \"'src/vfind/at_misc.c'\" \(6781 characters\)
- sed "s/^X//" >'src/vfind/at_misc.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/* LAST EDIT: Mon Feb 20 15:43:04 1989 by Uli Pralle (coma!uli) */
- X/*
- X * at_misc.c
- X */
- X#ifndef lint
- Xstatic char *AFSid = "$Header: at_misc.c[1.2] Tue Feb 21 20:22:58 1989 uli@coma published $";
- Xstatic char *Objfile = "at_misc.c[1.2] published";
- X#ifdef CFFLGS
- X static char *Cflags = CFFLGS;
- X#endif
- X#endif
- X/*
- X * Log for /u/shape/dist-tape/src/vfind/at_misc.c[1.2]
- X * Tue Feb 21 20:22:58 1989 uli@coma published $
- X * * This file contains many AFS utilities that makes life easier.
- X * This comes with atk.h.
- X *
- X *
- X */
- X
- X#include <sys/types.h>
- X#include <sys/stat.h>
- X#include <sys/param.h>
- X#include <time.h>
- X#include <strings.h>
- X
- X#include <afs.h>
- X
- Xextern char *malloc();
- Xstatic char at_filemode[12];
- X
- Xchar *at_getmode (attr)
- X Af_attrs *attr;
- X{
- X /* This function should return a capital 'L' in the file-class field */
- X /* to indicate a *locked* version. Maybe optional. Instead of Ownername */
- X /* the name of the locker is to be printed. */
- X ushort mode;
- X
- X mode = attr->af_mode;
- X (void) sprintf (at_filemode, " %c%c%c%c%c%c%c%c%c",
- X (mode & S_IREAD) ? 'r' : '-',
- X (mode & S_IWRITE) ? 'w' : '-',
- X (mode & S_IEXEC) ? 'x' : '-',
- X (mode & (S_IREAD >> 3)) ? 'r' : '-',
- X (mode & (S_IWRITE >> 3)) ? 'w' : '-',
- X (mode & (S_IEXEC >> 3)) ? 'x' : '-',
- X (mode & (S_IREAD >> 6)) ? 'r' : '-',
- X (mode & (S_IWRITE >> 6)) ? 'w' : '-',
- X (mode & (S_IEXEC >> 6)) ? 'x' : '-'
- X );
- X
- X switch (mode & S_IFMT) {
- X case S_IFDIR:
- X at_filemode[0] = 'd';
- X break;
- X case S_IFCHR:
- X at_filemode[0] = 'c';
- X break;
- X case S_IFBLK:
- X at_filemode[0] = 'b';
- X break;
- X case S_IFREG:
- X at_filemode[0] = '-';
- X break;
- X case S_IFLNK:
- X at_filemode[0] = 'l';
- X break;
- X case S_IFSOCK:
- X at_filemode[0] = 's';
- X break;
- X }
- X
- X if (mode & S_ISUID)
- X at_filemode[1] = 's';
- X if (mode & S_ISGID)
- X at_filemode[6] = 's';
- X if (mode & S_ISVTX)
- X at_filemode[9] = 't';
- X
- X return at_filemode;
- X}
- X
- Xchar *
- X#ifdef __STDC__
- X at_symbfiletype (u_short mode, int afstate)
- X#else
- Xsymbfiletype (mode, afstate) u_short mode; int afstate;
- X#endif
- X{
- X if (afstate == AF_NOSTATE) return "$"; /* derived object */
- X switch (mode & S_IFMT) {
- X case S_IFDIR:
- X return "/";
- X case S_IFLNK:
- X return "@";
- X case S_IFSOCK:
- X return "=";
- X default:
- X if ((mode & S_IEXEC) || (mode & (S_IEXEC >> 3)) || (mode & (S_IEXEC >> 6)))
- X return "*";
- X else
- X return "";
- X }
- X}
- X
- Xint at_string2state (string)
- X char *string;
- X{
- X if (!strcmp(string,"busy"))
- X return AF_BUSY;
- X else if (!strcmp(string,"save"))
- X return AF_SAVED;
- X else if (!strcmp(string,"proposed"))
- X return AF_PROPOSED;
- X else if (!strcmp(string,"published"))
- X return AF_PUBLISHED;
- X else if (!strcmp(string,"accessed"))
- X return AF_ACCESSED;
- X else if (!strcmp(string,"frozen"))
- X return AF_FROZEN;
- X else return AF_NOSTATE;
- X}
- X
- Xchar *at_getversstate (attr, verbose) Af_attrs *attr; int verbose;
- X{
- X int state;
- X
- X state = attr->af_state;
- X
- X switch (state) {
- X case AF_BUSY:
- X return verbose ? "[busy]" : "b";
- X case AF_SAVED:
- X return verbose ? "[save]" : "s";
- X case AF_PROPOSED:
- X return verbose ? "[prop]" : "p";
- X case AF_PUBLISHED:
- X return verbose ? "[publ]" : "P";
- X case AF_ACCESSED:
- X return verbose ? "[acce]" : "a";
- X case AF_FROZEN:
- X return verbose ? "[froz]" : "f";
- X default:
- X return verbose ? "[drvd]" : "$"; /* binary pool ? */
- X }
- X}
- X
- Xstatic char boundversion[2*MAXNAMLEN];
- X
- Xchar *at_getbndvers (attr)
- X Af_attrs *attr;
- X{
- X char *path, *name, *type;
- X int gen, rev;
- X
- X path = attr->af_syspath;
- X name = attr->af_name;
- X type = attr->af_type;
- X gen = attr->af_gen;
- X rev = attr->af_rev;
- X
- X if (gen == AF_BUSYVERS && rev == AF_BUSYVERS) {
- X (void) sprintf (boundversion, "%s%s%s%s%s",
- X (path[0]) ? path : "",
- X (path[0]) ? "/" : "",
- X name,
- X (type[0]) ? "." : "",
- X (type[0]) ? type : "");
- X }
- X else {
- X (void) sprintf (boundversion, "%s%s%s%s%s[%d.%d]",
- X (path[0]) ? path : "",
- X (path[0]) ? "/" : "",
- X name,
- X (type[0]) ? "." : "",
- X (type[0]) ? type : "",
- X gen, rev);
- X }
- X
- X return boundversion;
- X}
- X
- Xstatic char at_filename[MAXNAMLEN+1];
- X
- Xchar *at_getfilename (attr)
- X Af_attrs *attr;
- X{
- X (void) sprintf (at_filename, "%s%s%s", attr->af_name,
- X attr->af_type[0] ? "." : "",
- X attr->af_type[0] ? attr->af_type : "" );
- X
- X return at_filename;
- X}
- X
- Xchar *at_getdate (attr)
- X Af_attrs *attr;
- X{
- X time_t date;
- X char *tmp_time;
- X extern char *ctime();
- X
- X date = (attr->af_state == AF_BUSY ? attr->af_mtime : attr->af_stime);
- X tmp_time = ctime(&date);
- X
- X /* Format is "Sun Sep 16 01:03:52 1973\n\0" */
- X tmp_time = tmp_time + 4;
- X tmp_time[20] = '\0';
- X return tmp_time;
- X}
- X
- Xstatic char at_userandhost[20];
- X
- Xchar *at_getuser(user)
- X Af_user *user;
- X{
- X char tmp[20];
- X
- X tmp[0] = '\0';
- X (void) strncat (tmp, user->af_username, 8);
- X (void) strcat (tmp, "@");
- X (void) strncat (tmp, user->af_userhost, 8);
- X (void) sprintf (at_userandhost, "%-16s", tmp);
- X return at_userandhost;
- X}
- X
- Xint at_matchuda (attrbuf, uda)
- X Af_attrs *attrbuf;
- X char *uda;
- X{
- X /* Returns 1 if attrbuf has an uda uda, otherwise 0. */
- X
- X char *v, *cp;
- X char **udattrs = attrbuf->af_udattrs;
- X int ul, vl = 0;
- X
- X if (!uda) return 0;
- X
- X if (v = index(uda, '='))
- X vl = strlen(++v);
- X
- X ul = strlen(uda) - vl - 1;
- X
- X while (udattrs && *udattrs)
- X if (!strncmp(uda, *udattrs, ul)) {
- X cp = (*udattrs)+ul;
- X if (*cp == '\0' && !v) return 1;
- X if (*cp == '=' && !v)
- X return 1;
- X else cp++;
- X
- X while (cp) {
- X if (*cp == '\n')
- X cp++;
- X if (!strncmp(cp, v, vl))
- X return 1;
- X else
- X if (cp = index(cp , '\n'))
- X cp++;
- X else
- X return 0;
- X }
- X }
- X else
- X udattrs++;
- X
- X return 0;
- X}
- END_OF_FILE
- if test 6781 -ne `wc -c <'src/vfind/at_misc.c'`; then
- echo shar: \"'src/vfind/at_misc.c'\" unpacked with wrong size!
- fi
- # end of 'src/vfind/at_misc.c'
- fi
- echo shar: End of archive 7 \(of 33\).
- cp /dev/null ark7isdone
- 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
-