summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--gnu/usr.bin/cvs/contrib/clmerge156
-rw-r--r--gnu/usr.bin/cvs/contrib/cvscheck84
-rw-r--r--gnu/usr.bin/cvs/contrib/descend116
-rw-r--r--gnu/usr.bin/cvs/contrib/dirfns481
-rw-r--r--gnu/usr.bin/cvs/contrib/pcl-cvs/cookie.el884
-rw-r--r--gnu/usr.bin/cvs/contrib/pcl-cvs/elib-dll-debug.el298
-rw-r--r--gnu/usr.bin/cvs/contrib/pcl-cvs/elib-dll.el386
-rw-r--r--gnu/usr.bin/cvs/contrib/pcl-cvs/elib-node.el89
-rw-r--r--gnu/usr.bin/cvs/contrib/rcs-to-cvs184
-rw-r--r--gnu/usr.bin/cvs/contrib/rcs2log326
-rw-r--r--gnu/usr.bin/cvs/contrib/rcs2sccs143
-rw-r--r--gnu/usr.bin/cvs/contrib/sccs2rcs277
-rw-r--r--gnu/usr.bin/cvs/cvs/cvsbug.sh533
-rw-r--r--gnu/usr.bin/cvs/cvs/sanity.el18
-rw-r--r--gnu/usr.bin/cvs/cvsinit/cvsinit161
-rw-r--r--gnu/usr.bin/cvs/lib/alloca.c191
-rw-r--r--gnu/usr.bin/cvs/lib/dup2.c40
-rw-r--r--gnu/usr.bin/cvs/lib/fnmatch.c183
-rw-r--r--gnu/usr.bin/cvs/lib/fnmatch.h45
-rw-r--r--gnu/usr.bin/cvs/lib/ftruncate.c76
-rw-r--r--gnu/usr.bin/cvs/lib/getwd.c35
-rw-r--r--gnu/usr.bin/cvs/lib/hostname.c49
-rw-r--r--gnu/usr.bin/cvs/lib/memmove.c57
-rw-r--r--gnu/usr.bin/cvs/lib/mkdir.c129
-rw-r--r--gnu/usr.bin/cvs/lib/rename.c72
-rw-r--r--gnu/usr.bin/cvs/lib/strdup.c43
-rw-r--r--gnu/usr.bin/cvs/lib/strerror.c813
27 files changed, 0 insertions, 5869 deletions
diff --git a/gnu/usr.bin/cvs/contrib/clmerge b/gnu/usr.bin/cvs/contrib/clmerge
deleted file mode 100644
index 1a29311..0000000
--- a/gnu/usr.bin/cvs/contrib/clmerge
+++ /dev/null
@@ -1,156 +0,0 @@
-#!/usr/local/bin/perl
-
-# Merge conflicted ChangeLogs
-# tromey Mon Aug 15 1994
-
-# Due to popular demand, I'm posting my ChangeLog auto-merge tool. Run
-# this on your ChangeLog files when an update leaves them conflicted.
-# The code is appended.
-#
-# Usage is:
-#
-# cl-merge [-i] file ...
-#
-# With -i, it works in place (backups put in a ~ file). Otherwise the
-# merged ChangeLog is printed to stdout.
-#
-# Style comments are welcome. This is my third perl program ever.
-#
-# Please report any bugs to me. I wrote this yesterday, so there are no
-# guarantees about its performance. I recommend checking its output
-# carefully. If you do send a bug report, please includie the failing
-# ChangeLog, so I can include it in my test suite.
-#
-# Tom
-# ---
-# tromey@busco.lanl.gov Member, League for Programming Freedom
-# Sadism and farce are always inexplicably linked.
-# -- Alexander Theroux
-
-# If '-i' is given, do it in-place.
-if ($ARGV[0] eq '-i') {
- shift (@ARGV);
- $^I = '~';
-}
-
-$lastkey = '';
-$lastval = '';
-$conf = 0;
-%conflist = ();
-
-$tjd = 0;
-
-# Simple state machine. The states:
-#
-# 0 Not in conflict. Just copy input to output.
-# 1 Beginning an entry. Next non-blank line is key.
-# 2 In entry. Entry beginner transitions to state 1.
-while (<>) {
- if (/^<<<</ || /^====/) {
- # Start of a conflict.
-
- # Copy last key into array.
- if ($lastkey ne '') {
- $conflist{$lastkey} = $lastval;
-
- $lastkey = '';
- $lastval = '';
- }
-
- $conf = 1;
- } elsif (/^>>>>/) {
- # End of conflict. Output.
-
- # Copy last key into array.
- if ($lastkey ne '') {
- $conflist{$lastkey} = $lastval;
-
- $lastkey = '';
- $lastval = '';
- }
-
- foreach (reverse sort clcmp keys %conflist) {
- print STDERR "doing $_" if $tjd;
- print $_;
- print $conflist{$_};
- }
-
- $lastkey = '';
- $lastval = '';
- $conf = 0;
- %conflist = ();
- } elsif ($conf == 1) {
- # Beginning an entry. Skip empty lines. Error if not a real
- # beginner.
- if (/^$/) {
- # Empty line; just skip at this point.
- } elsif (/^[MTWFS]/) {
- # Looks like the name of a day; assume opener and move to
- # "in entry" state.
- $lastkey = $_;
- $conf = 2;
- print STDERR "found $_" if $tjd;
- } else {
- die ("conflict crosses entry boundaries: $_");
- }
- } elsif ($conf == 2) {
- # In entry. Copy into variable until we see beginner line.
- if (/^[MTWFS]/) {
- # Entry beginner line.
-
- # Copy last key into array.
- if ($lastkey ne '') {
- $conflist{$lastkey} = $lastval;
-
- $lastkey = '';
- $lastval = '';
- }
-
- $lastkey = $_;
- print STDERR "found $_" if $tjd;
- $lastval = '';
- } else {
- $lastval .= $_;
- }
- } else {
- # Just copy.
- print;
- }
-}
-
-%months = ('Jan', 0,
- 'Feb', 1,
- 'Mar', 2,
- 'Apr', 3,
- 'May', 4,
- 'Jun', 5,
- 'Jul', 6,
- 'Aug', 7,
- 'Sep', 8,
- 'Oct', 9,
- 'Nov', 10,
- 'Dec', 11);
-
-# Compare ChangeLog time strings like <=>.
-#
-# 0 1 2 3
-# Thu Aug 11 13:22:42 1994 Tom Tromey (tromey@creche.colorado.edu)
-# 0123456789012345678901234567890
-#
-sub clcmp {
- # First check year.
- $r = substr ($a, 20, 4) <=> substr ($b, 20, 4);
-
- # Now check month.
- $r = $months{$a} <=> $months{$b} if !$r;
-
- # Now check day.
- $r = substr ($a, 8, 2) <=> substr ($b, 8, 2) if !$r;
-
- # Now check time (3 parts).
- $r = substr ($a, 11, 2) <=> substr ($b, 11, 2) if !$r;
- $r = substr ($a, 14, 2) <=> substr ($b, 14, 2) if !$r;
- $r = substr ($a, 17, 2) <=> substr ($b, 17, 2) if !$r;
-
- $r;
-}
diff --git a/gnu/usr.bin/cvs/contrib/cvscheck b/gnu/usr.bin/cvs/contrib/cvscheck
deleted file mode 100644
index 1c66688..0000000
--- a/gnu/usr.bin/cvs/contrib/cvscheck
+++ /dev/null
@@ -1,84 +0,0 @@
-#! /bin/sh
-# $Id: cvscheck,v 1.2 1992/04/10 03:04:19 berliner Exp $
-#
-# cvscheck - identify files added, changed, or removed
-# in CVS working directory
-#
-# Contributed by Lowell Skoog <fluke!lowell@uunet.uu.net>
-#
-# This program should be run in a working directory that has been
-# checked out using CVS. It identifies files that have been added,
-# changed, or removed in the working directory, but not "cvs
-# committed". It also determines whether the files have been "cvs
-# added" or "cvs removed". For directories, it is only practical to
-# determine whether they have been added.
-
-name=cvscheck
-changes=0
-
-# If we can't run CVS commands in this directory
-cvs status . > /dev/null 2>&1
-if [ $? != 0 ] ; then
-
- # Bail out
- echo "$name: there is no version here; bailing out" 1>&2
- exit 1
-fi
-
-# Identify files added to working directory
-for file in .* * ; do
-
- # Skip '.' and '..'
- if [ $file = '.' -o $file = '..' ] ; then
- continue
- fi
-
- # If a regular file
- if [ -f $file ] ; then
- if cvs status $file | grep -s '^From:[ ]*New file' ; then
- echo "file added: $file - not CVS committed"
- changes=`expr $changes + 1`
- elif cvs status $file | grep -s '^From:[ ]*no entry for' ; then
- echo "file added: $file - not CVS added, not CVS committed"
- changes=`expr $changes + 1`
- fi
-
- # Else if a directory
- elif [ -d $file -a $file != CVS.adm ] ; then
-
- # Move into it
- cd $file
-
- # If CVS commands don't work inside
- cvs status . > /dev/null 2>&1
- if [ $? != 0 ] ; then
- echo "directory added: $file - not CVS added"
- changes=`expr $changes + 1`
- fi
-
- # Move back up
- cd ..
- fi
-done
-
-# Identify changed files
-changedfiles=`cvs diff | egrep '^diff' | awk '{print $3}'`
-for file in $changedfiles ; do
- echo "file changed: $file - not CVS committed"
- changes=`expr $changes + 1`
-done
-
-# Identify files removed from working directory
-removedfiles=`cvs status | egrep '^File:[ ]*no file' | awk '{print $4}'`
-
-# Determine whether each file has been cvs removed
-for file in $removedfiles ; do
- if cvs status $file | grep -s '^From:[ ]*-' ; then
- echo "file removed: $file - not CVS committed"
- else
- echo "file removed: $file - not CVS removed, not CVS committed"
- fi
- changes=`expr $changes + 1`
-done
-
-exit $changes
diff --git a/gnu/usr.bin/cvs/contrib/descend b/gnu/usr.bin/cvs/contrib/descend
deleted file mode 100644
index 999c46f..0000000
--- a/gnu/usr.bin/cvs/contrib/descend
+++ /dev/null
@@ -1,116 +0,0 @@
-#! /bin/sh
-# $Id: descend,v 1.1 1992/04/03 05:22:52 berliner Exp $
-#
-# descend - walk down a directory tree and execute a command at each node
-
-fullname=$0
-name=descend
-usage="Usage: $name [-afqrv] command [directory ...]\n
-\040\040-a\040\040All: descend into directories starting with '.'\n
-\040\040-f\040\040Force: ignore errors during descent\n
-\040\040-q\040\040Quiet: don't print directory names\n
-\040\040-r\040\040Restricted: don't descend into RCS, CVS.adm, SCCS directories\n
-\040\040-v\040\040Verbose: print command before executing it"
-
-# Scan for options
-while getopts afqrv option; do
- case $option in
- a)
- alldirs=$option
- options=$options" "-$option
- ;;
- f)
- force=$option
- options=$options" "-$option
- ;;
- q)
- verbose=
- quiet=$option
- options=$options" "-$option
- ;;
- r)
- restricted=$option
- options=$options" "-$option
- ;;
- v)
- verbose=$option
- quiet=
- options=$options" "-$option
- ;;
- \?)
- /usr/5bin/echo $usage 1>&2
- exit 1
- ;;
- esac
-done
-shift `expr $OPTIND - 1`
-
-# Get command to execute
-if [ $# -lt 1 ] ; then
- /usr/5bin/echo $usage 1>&2
- exit 1
-else
- command=$1
- shift
-fi
-
-# If no directory specified, use '.'
-if [ $# -lt 1 ] ; then
- default_dir=.
-fi
-
-# For each directory specified
-for dir in $default_dir "$@" ; do
-
- # Spawn sub-shell so we return to starting directory afterward
- (cd $dir
-
- # Execute specified command
- if [ -z "$quiet" ] ; then
- echo In directory `hostname`:`pwd`
- fi
- if [ -n "$verbose" ] ; then
- echo $command
- fi
- eval "$command" || if [ -z "$force" ] ; then exit 1; fi
-
- # Collect dot file names if necessary
- if [ -n "$alldirs" ] ; then
- dotfiles=.*
- else
- dotfiles=
- fi
-
- # For each file in current directory
- for file in $dotfiles * ; do
-
- # Skip '.' and '..'
- if [ "$file" = "." -o "$file" = ".." ] ; then
- continue
- fi
-
- # If a directory but not a symbolic link
- if [ -d "$file" -a ! -h "$file" ] ; then
-
- # If not skipping this type of directory
- if [ \( "$file" != "RCS" -a \
- "$file" != "SCCS" -a \
- "$file" != "CVS" -a \
- "$file" != "CVS.adm" \) \
- -o -z "$restricted" ] ; then
-
- # Recursively descend into it
- $fullname $options "$command" "$file" \
- || if [ -z "$force" ] ; then exit 1; fi
- fi
-
- # Else if a directory AND a symbolic link
- elif [ -d "$file" -a -h "$file" ] ; then
-
- if [ -z "$quiet" ] ; then
- echo In directory `hostname`:`pwd`/$file: symbolic link: skipping
- fi
- fi
- done
- ) || if [ -z "$force" ] ; then exit 1; fi
-done
diff --git a/gnu/usr.bin/cvs/contrib/dirfns b/gnu/usr.bin/cvs/contrib/dirfns
deleted file mode 100644
index 8324c41..0000000
--- a/gnu/usr.bin/cvs/contrib/dirfns
+++ /dev/null
@@ -1,481 +0,0 @@
-echo 'directory.3':
-sed 's/^X//' >'directory.3' <<'!'
-X.TH DIRECTORY 3 imported
-X.DA 9 Oct 1985
-X.SH NAME
-Xopendir, readdir, telldir, seekdir, rewinddir, closedir \- high-level directory operations
-X.SH SYNOPSIS
-X.B #include <sys/types.h>
-X.br
-X.B #include <ndir.h>
-X.PP
-X.SM
-X.B DIR
-X.B *opendir(filename)
-X.br
-X.B char *filename;
-X.PP
-X.SM
-X.B struct direct
-X.B *readdir(dirp)
-X.br
-X.B DIR *dirp;
-X.PP
-X.SM
-X.B long
-X.B telldir(dirp)
-X.br
-X.B DIR *dirp;
-X.PP
-X.SM
-X.B seekdir(dirp, loc)
-X.br
-X.B DIR *dirp;
-X.br
-X.B long loc;
-X.PP
-X.SM
-X.B rewinddir(dirp)
-X.br
-X.B DIR *dirp;
-X.PP
-X.SM
-X.B closedir(dirp)
-X.br
-X.B DIR *dirp;
-X.SH DESCRIPTION
-XThis library provides high-level primitives for directory scanning,
-Xsimilar to those available for 4.2BSD's (very different) directory system.
-X.\"The purpose of this library is to simulate
-X.\"the new flexible length directory names of 4.2bsd UNIX
-X.\"on top of the old directory structure of v7.
-XIt incidentally provides easy portability to and from 4.2BSD (insofar
-Xas such portability is not compromised by other 4.2/VAX dependencies).
-X.\"It allows programs to be converted immediately
-X.\"to the new directory access interface,
-X.\"so that they need only be relinked
-X.\"when moved to 4.2bsd.
-X.\"It is obtained with the loader option
-X.\".BR \-lndir .
-X.PP
-X.I Opendir
-Xopens the directory named by
-X.I filename
-Xand associates a
-X.I directory stream
-Xwith it.
-X.I Opendir
-Xreturns a pointer to be used to identify the
-X.I directory stream
-Xin subsequent operations.
-XThe pointer
-X.SM
-X.B NULL
-Xis returned if
-X.I filename
-Xcannot be accessed or is not a directory.
-X.PP
-X.I Readdir
-Xreturns a pointer to the next directory entry.
-XIt returns
-X.B NULL
-Xupon reaching the end of the directory or detecting
-Xan invalid
-X.I seekdir
-Xoperation.
-X.PP
-X.I Telldir
-Xreturns the current location associated with the named
-X.I directory stream.
-X.PP
-X.I Seekdir
-Xsets the position of the next
-X.I readdir
-Xoperation on the
-X.I directory stream.
-XThe new position reverts to the one associated with the
-X.I directory stream
-Xwhen the
-X.I telldir
-Xoperation was performed.
-XValues returned by
-X.I telldir
-Xare good only for the lifetime of the DIR pointer from
-Xwhich they are derived.
-XIf the directory is closed and then reopened,
-Xthe
-X.I telldir
-Xvalue may be invalidated
-Xdue to undetected directory compaction in 4.2BSD.
-XIt is safe to use a previous
-X.I telldir
-Xvalue immediately after a call to
-X.I opendir
-Xand before any calls to
-X.I readdir.
-X.PP
-X.I Rewinddir
-Xresets the position of the named
-X.I directory stream
-Xto the beginning of the directory.
-X.PP
-X.I Closedir
-Xcauses the named
-X.I directory stream
-Xto be closed,
-Xand the structure associated with the DIR pointer to be freed.
-X.PP
-XA
-X.I direct
-Xstructure is as follows:
-X.PP
-X.RS
-X.nf
-Xstruct direct {
-X /* unsigned */ long d_ino; /* inode number of entry */
-X unsigned short d_reclen; /* length of this record */
-X unsigned short d_namlen; /* length of string in d_name */
-X char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */
-X};
-X.fi
-X.RE
-X.PP
-XThe
-X.I d_reclen
-Xfield is meaningless in non-4.2BSD systems and should be ignored.
-XThe use of a
-X.I long
-Xfor
-X.I d_ino
-Xis also a 4.2BSDism;
-X.I ino_t
-X(see
-X.IR types (5))
-Xshould be used elsewhere.
-XThe macro
-X.I DIRSIZ(dp)
-Xgives the minimum memory size needed to hold the
-X.I direct
-Xvalue pointed to by
-X.IR dp ,
-Xwith the minimum necessary allocation for
-X.IR d_name .
-X.PP
-XThe preferred way to search the current directory for entry ``name'' is:
-X.PP
-X.RS
-X.nf
-X len = strlen(name);
-X dirp = opendir(".");
-X if (dirp == NULL) {
-X fprintf(stderr, "%s: can't read directory .\\n", argv[0]);
-X return NOT_FOUND;
-X }
-X while ((dp = readdir(dirp)) != NULL)
-X if (dp->d_namlen == len && strcmp(dp->d_name, name) == 0) {
-X closedir(dirp);
-X return FOUND;
-X }
-X closedir(dirp);
-X return NOT_FOUND;
-X.RE
-X.\".SH LINKING
-X.\"This library is accessed by specifying ``-lndir'' as the
-X.\"last argument to the compile line, e.g.:
-X.\".PP
-X.\" cc -I/usr/include/ndir -o prog prog.c -lndir
-X.SH "SEE ALSO"
-Xopen(2),
-Xclose(2),
-Xread(2),
-Xlseek(2)
-X.SH HISTORY
-XWritten by
-XKirk McKusick at Berkeley (ucbvax!mckusick).
-XMiscellaneous bug fixes from elsewhere.
-XThe size of the data structure has been decreased to avoid excessive
-Xspace waste under V7 (where filenames are 14 characters at most).
-XFor obscure historical reasons, the include file is also available
-Xas
-X.IR <ndir/sys/dir.h> .
-XThe Berkeley version lived in a separate library (\fI\-lndir\fR),
-Xwhereas ours is
-Xpart of the C library, although the separate library is retained to
-Xmaximize compatibility.
-X.PP
-XThis manual page has been substantially rewritten to be informative in
-Xthe absence of a 4.2BSD manual.
-X.SH BUGS
-XThe
-X.I DIRSIZ
-Xmacro actually wastes a bit of space due to some padding requirements
-Xthat are an artifact of 4.2BSD.
-X.PP
-XThe returned value of
-X.I readdir
-Xpoints to a static area that will be overwritten by subsequent calls.
-X.PP
-XThere are some unfortunate name conflicts with the \fIreal\fR V7
-Xdirectory structure definitions.
-!
-echo 'dir.h':
-sed 's/^X//' >'dir.h' <<'!'
-X/* dir.h 4.4 82/07/25 */
-X
-X/*
-X * A directory consists of some number of blocks of DIRBLKSIZ
-X * bytes, where DIRBLKSIZ is chosen such that it can be transferred
-X * to disk in a single atomic operation (e.g. 512 bytes on most machines).
-X *
-X * Each DIRBLKSIZ byte block contains some number of directory entry
-X * structures, which are of variable length. Each directory entry has
-X * a struct direct at the front of it, containing its inode number,
-X * the length of the entry, and the length of the name contained in
-X * the entry. These are followed by the name padded to a 4 byte boundary
-X * with null bytes. All names are guaranteed null terminated.
-X * The maximum length of a name in a directory is MAXNAMLEN.
-X *
-X * The macro DIRSIZ(dp) gives the amount of space required to represent
-X * a directory entry. Free space in a directory is represented by
-X * entries which have dp->d_reclen >= DIRSIZ(dp). All DIRBLKSIZ bytes
-X * in a directory block are claimed by the directory entries. This
-X * usually results in the last entry in a directory having a large
-X * dp->d_reclen. When entries are deleted from a directory, the
-X * space is returned to the previous entry in the same directory
-X * block by increasing its dp->d_reclen. If the first entry of
-X * a directory block is free, then its dp->d_ino is set to 0.
-X * Entries other than the first in a directory do not normally have
-X * dp->d_ino set to 0.
-X */
-X#define DIRBLKSIZ 512
-X#ifdef VMUNIX
-X#define MAXNAMLEN 255
-X#else
-X#define MAXNAMLEN 14
-X#endif
-X
-Xstruct direct {
-X /* unsigned */ long d_ino; /* inode number of entry */
-X unsigned short d_reclen; /* length of this record */
-X unsigned short d_namlen; /* length of string in d_name */
-X char d_name[MAXNAMLEN + 1]; /* name must be no longer than this */
-X};
-X
-X/*
-X * The DIRSIZ macro gives the minimum record length which will hold
-X * the directory entry. This requires the amount of space in struct direct
-X * without the d_name field, plus enough space for the name with a terminating
-X * null byte (dp->d_namlen+1), rounded up to a 4 byte boundary.
-X */
-X#undef DIRSIZ
-X#define DIRSIZ(dp) \
-X ((sizeof (struct direct) - (MAXNAMLEN+1)) + (((dp)->d_namlen+1 + 3) &~ 3))
-X
-X#ifndef KERNEL
-X/*
-X * Definitions for library routines operating on directories.
-X */
-Xtypedef struct _dirdesc {
-X int dd_fd;
-X long dd_loc;
-X long dd_size;
-X char dd_buf[DIRBLKSIZ];
-X} DIR;
-X#ifndef NULL
-X#define NULL 0
-X#endif
-Xextern DIR *opendir();
-Xextern struct direct *readdir();
-Xextern long telldir();
-X#ifdef void
-Xextern void seekdir();
-Xextern void closedir();
-X#endif
-X#define rewinddir(dirp) seekdir((dirp), (long)0)
-X#endif KERNEL
-!
-echo 'makefile':
-sed 's/^X//' >'makefile' <<'!'
-XDIR = closedir.o opendir.o readdir.o seekdir.o telldir.o
-XCFLAGS=-O -I. -Dvoid=int
-XDEST=..
-X
-Xall: $(DIR)
-X
-Xmv: $(DIR)
-X mv $(DIR) $(DEST)
-X
-Xcpif: dir.h
-X cp dir.h /usr/include/ndir.h
-X
-Xclean:
-X rm -f *.o
-!
-echo 'closedir.c':
-sed 's/^X//' >'closedir.c' <<'!'
-Xstatic char sccsid[] = "@(#)closedir.c 4.2 3/10/82";
-X
-X#include <sys/types.h>
-X#include <dir.h>
-X
-X/*
-X * close a directory.
-X */
-Xvoid
-Xclosedir(dirp)
-X register DIR *dirp;
-X{
-X close(dirp->dd_fd);
-X dirp->dd_fd = -1;
-X dirp->dd_loc = 0;
-X free((char *)dirp);
-X}
-!
-echo 'opendir.c':
-sed 's/^X//' >'opendir.c' <<'!'
-X/* Copyright (c) 1982 Regents of the University of California */
-X
-Xstatic char sccsid[] = "@(#)opendir.c 4.4 11/12/82";
-X
-X#include <sys/types.h>
-X#include <sys/stat.h>
-X#include <dir.h>
-X
-X/*
-X * open a directory.
-X */
-XDIR *
-Xopendir(name)
-X char *name;
-X{
-X register DIR *dirp;
-X register int fd;
-X struct stat statbuf;
-X char *malloc();
-X
-X if ((fd = open(name, 0)) == -1)
-X return NULL;
-X if (fstat(fd, &statbuf) == -1 || !(statbuf.st_mode & S_IFDIR)) {
-X close(fd);
-X return NULL;
-X }
-X if ((dirp = (DIR *)malloc(sizeof(DIR))) == NULL) {
-X close (fd);
-X return NULL;
-X }
-X dirp->dd_fd = fd;
-X dirp->dd_loc = 0;
-X dirp->dd_size = 0; /* so that telldir will work before readdir */
-X return dirp;
-X}
-!
-echo 'readdir.c':
-sed 's/^X//' >'readdir.c' <<'!'
-X/* Copyright (c) 1982 Regents of the University of California */
-X
-Xstatic char sccsid[] = "@(#)readdir.c 4.3 8/8/82";
-X
-X#include <sys/types.h>
-X#include <dir.h>
-X
-X/*
-X * read an old stlye directory entry and present it as a new one
-X */
-X#define ODIRSIZ 14
-X
-Xstruct olddirect {
-X ino_t od_ino;
-X char od_name[ODIRSIZ];
-X};
-X
-X/*
-X * get next entry in a directory.
-X */
-Xstruct direct *
-Xreaddir(dirp)
-X register DIR *dirp;
-X{
-X register struct olddirect *dp;
-X static struct direct dir;
-X
-X for (;;) {
-X if (dirp->dd_loc == 0) {
-X dirp->dd_size = read(dirp->dd_fd, dirp->dd_buf,
-X DIRBLKSIZ);
-X if (dirp->dd_size <= 0) {
-X dirp->dd_size = 0;
-X return NULL;
-X }
-X }
-X if (dirp->dd_loc >= dirp->dd_size) {
-X dirp->dd_loc = 0;
-X continue;
-X }
-X dp = (struct olddirect *)(dirp->dd_buf + dirp->dd_loc);
-X dirp->dd_loc += sizeof(struct olddirect);
-X if (dp->od_ino == 0)
-X continue;
-X dir.d_ino = dp->od_ino;
-X strncpy(dir.d_name, dp->od_name, ODIRSIZ);
-X dir.d_name[ODIRSIZ] = '\0'; /* insure null termination */
-X dir.d_namlen = strlen(dir.d_name);
-X dir.d_reclen = DIRBLKSIZ;
-X return (&dir);
-X }
-X}
-!
-echo 'seekdir.c':
-sed 's/^X//' >'seekdir.c' <<'!'
-Xstatic char sccsid[] = "@(#)seekdir.c 4.9 3/25/83";
-X
-X#include <sys/param.h>
-X#include <dir.h>
-X
-X/*
-X * seek to an entry in a directory.
-X * Only values returned by "telldir" should be passed to seekdir.
-X */
-Xvoid
-Xseekdir(dirp, loc)
-X register DIR *dirp;
-X long loc;
-X{
-X long curloc, base, offset;
-X struct direct *dp;
-X extern long lseek();
-X
-X curloc = telldir(dirp);
-X if (loc == curloc)
-X return;
-X base = loc & ~(DIRBLKSIZ - 1);
-X offset = loc & (DIRBLKSIZ - 1);
-X (void) lseek(dirp->dd_fd, base, 0);
-X dirp->dd_size = 0;
-X dirp->dd_loc = 0;
-X while (dirp->dd_loc < offset) {
-X dp = readdir(dirp);
-X if (dp == NULL)
-X return;
-X }
-X}
-!
-echo 'telldir.c':
-sed 's/^X//' >'telldir.c' <<'!'
-Xstatic char sccsid[] = "@(#)telldir.c 4.1 2/21/82";
-X
-X#include <sys/types.h>
-X#include <dir.h>
-X
-X/*
-X * return a pointer into a directory
-X */
-Xlong
-Xtelldir(dirp)
-X DIR *dirp;
-X{
-X long lseek();
-X
-X return (lseek(dirp->dd_fd, 0L, 1) - dirp->dd_size + dirp->dd_loc);
-X}
-!
-echo done
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/cookie.el b/gnu/usr.bin/cvs/contrib/pcl-cvs/cookie.el
deleted file mode 100644
index 8bd4bdf..0000000
--- a/gnu/usr.bin/cvs/contrib/pcl-cvs/cookie.el
+++ /dev/null
@@ -1,884 +0,0 @@
-;;; cookie.el,v 1.2 1992/04/07 20:49:12 berliner Exp
-;;; cookie.el -- Utility to display cookies in buffers
-;;; Copyright (C) 1991, 1992 Per Cederqvist
-;;;
-;;; This program is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 2 of the License, or
-;;; (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program; if not, write to the Free Software
-;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;;;; TO-DO: Byt namn! tin -> wrapper (eller n}got b{ttre).
-
-;;; Note that this file is still under development. Comments,
-;;; enhancements and bug fixes are welcome.
-;;; Send them to ceder@lysator.liu.se.
-
-(defun impl nil (error "Not yet implemented!"))
-
-;;; Cookie is a package that imlements a connection between an
-;;; elib-dll and the contents of a buffer. Possible uses are dired
-;;; (have all files in a list, and show them), buffer-list,
-;;; kom-prioritize (in the LysKOM elisp client) and others. pcl-cvs.el
-;;; uses cookie.el.
-;;;
-;;; A cookie buffer contains a header, any number of cookies, and a
-;;; footer. The header and footer are constant strings that are given
-;;; to cookie-create when the buffer is placed under cookie. Each cookie
-;;; is displayed in the buffer by calling a user-supplied function
-;;; that takes a cookie and returns a string. The string may be
-;;; empty, or contain any number of lines. An extra newline is always
-;;; appended unless the string is empty.
-;;;
-;;; Cookie does not affect the mode of the buffer in any way. It
-;;; merely makes it easy to connect an underlying data representation
-;;; to the buffer contents.
-;;;
-;;; The cookie-node data type:
-;;; start-marker
-;;; ;; end-marker This field is no longer present.
-;;; cookie The user-supplied element.
-;;;
-;;; A dll of cookie-nodes are held in the buffer local variable
-;;; cake-tin.
-;;;
-;;; A tin is an object that contains one cookie. You can get the next
-;;; and previous tin.
-;;;
-
-(require 'elib-dll)
-(provide 'cookie)
-
-(defvar cookies nil
- "A doubly linked list that contains the underlying data representation
-for the contents of a cookie buffer. The package elib-dll is used to
-manipulate this list.")
-
-(defvar cookie-pretty-printer nil
- "The function that is used to pretty-print a cookie in this buffer.")
-
-(defvar cookie-header nil
- "The tin that holds the header cookie.")
-
-(defvar cookie-footer nil
- "The tin that holds the footer cookie.")
-
-(defvar cookie-last-tin nil
- "The tin the cursor was positioned at, the last time the cookie
-package checked the cursor position. Buffer local in all buffers
-the cookie package works on. You may set this if your package
-thinks it knows where the cursor will be the next time this
-package is called. It can speed things up.
-
-It must never be set to a tin that has been deleted.")
-
-;;; ================================================================
-;;; Internal functions for use in the cookie package
-
-(put 'cookie-set-buffer 'lisp-indent-hook 1)
-
-(defmacro cookie-set-buffer (buffer &rest forms)
-
- ;; Execute FORMS with BUFFER selected as current buffer.
- ;; Return value of last form in FORMS. INTERNAL USE ONLY.
-
- (let ((old-buffer (make-symbol "old-buffer")))
- (` (let (((, old-buffer) (current-buffer)))
- (set-buffer (get-buffer-create (, buffer)))
- (unwind-protect
- (progn (,@ forms))
- (set-buffer (, old-buffer)))))))
-
-
-(defmacro cookie-filter-hf (tin)
-
- ;; Evaluate TIN once and return it. BUT if it is
- ;; equal to cookie-header or cookie-footer return nil instead.
- ;; INTERNAL USE ONLY.
-
- (let ((tempvar (make-symbol "tin")))
- (` (let (((, tempvar) (, tin)))
- (if (or (eq (, tempvar) cookie-header)
- (eq (, tempvar) cookie-footer))
- nil
- (, tempvar))))))
-
-
-;;; cookie-tin
-;;; Constructor:
-
-(defun cookie-create-tin (start-marker
- cookie)
- ;; Create a tin. INTERNAL USE ONLY.
- (cons 'COOKIE-TIN (vector start-marker nil cookie)))
-
-
-;;; Selectors:
-
-(defun cookie-tin-start-marker (cookie-tin)
- ;; Get start-marker from cookie-tin. INTERNAL USE ONLY.
- (elt (cdr cookie-tin) 0))
-
-;(defun cookie-tin-end-marker (cookie-tin)
-; ;;Get end-marker from cookie-tin. INTERNAL USE ONLY.
-; (elt (cdr cookie-tin) 1))
-
-(defun cookie-tin-cookie-safe (cookie-tin)
- ;; Get cookie from cookie-tin. INTERNAL USE ONLY.
- ;; Returns nil if given nil as input.
- ;; This is the same as cookie-tin-cookie in version 18.57
- ;; of emacs, but elt should signal an error when given nil
- ;; as input (according to the info files).
- (elt (cdr cookie-tin) 2))
-
-(defun cookie-tin-cookie (cookie-tin)
- ;; Get cookie from cookie-tin. INTERNAL USE ONLY.
- (elt (cdr cookie-tin) 2))
-
-
-;;; Modifiers:
-
-(defun set-cookie-tin-start-marker (cookie-tin newval)
- ;; Set start-marker in cookie-tin to NEWVAL. INTERNAL USE ONLY.
- (aset (cdr cookie-tin) 0 newval))
-
-;(defun set-cookie-tin-end-marker (cookie-tin newval)
-; ;; Set end-marker in cookie-tin to NEWVAL. INTERNAL USE ONLY.
-; (aset (cdr cookie-tin) 1 newval))
-
-(defun set-cookie-tin-cookie (cookie-tin newval)
- ;; Set cookie in cookie-tin to NEWVAL. INTERNAL USE ONLY.
- (aset (cdr cookie-tin) 2 newval))
-
-
-
-;;; Predicate:
-
-(defun cookie-tin-p (object)
- ;; Return t if OBJECT is a tin. INTERNAL USE ONLY.
- (eq (car-safe object) 'COOKIE-TIN))
-
-;;; end of cookie-tin data type.
-
-
-(defun cookie-create-tin-and-insert (cookie string pos)
- ;; Insert STRING at POS in current buffer. Remember start
- ;; position. Create a tin containing them and the COOKIE.
- ;; INTERNAL USE ONLY.
-
- (save-excursion
- (goto-char pos)
- ;; Remember the position as a number so that it doesn't move
- ;; when we insert the string.
- (let ((start (if (markerp pos)
- (marker-position pos)
- pos)))
- ;; Use insert-before-markers so that the marker for the
- ;; next cookie is updated.
- (insert-before-markers string)
- (insert-before-markers ?\n)
- (cookie-create-tin (copy-marker start) cookie))))
-
-
-(defun cookie-delete-tin-internal (tin)
- ;; Delete a cookie from the buffer. INTERNAL USE ONLY.
- ;; Can not be used on the footer.
- (delete-region (cookie-tin-start-marker (dll-element cookies tin))
- (cookie-tin-start-marker
- (dll-element cookies
- (dll-next cookies tin)))))
-
-
-
-(defun cookie-refresh-tin (tin)
- ;; Redisplay the cookie represented by TIN. INTERNAL USE ONLY.
- ;; Can not be used on the footer.
-
- (save-excursion
- ;; First, remove the string:
- (delete-region (cookie-tin-start-marker (dll-element cookies tin))
- (1- (marker-position
- (cookie-tin-start-marker
- (dll-element cookies
- (dll-next cookies tin))))))
-
- ;; Calculate and insert the string.
-
- (goto-char (cookie-tin-start-marker (dll-element cookies tin)))
- (insert
- (funcall cookie-pretty-printer
- (cookie-tin-cookie (dll-element cookies tin))))))
-
-
-;;; ================================================================
-;;; The public members of the cookie package
-
-
-(defun cookie-cookie (buffer tin)
- "Get the cookie from a TIN. Args: BUFFER TIN."
- (cookie-set-buffer buffer
- (cookie-tin-cookie (dll-element cookies tin))))
-
-
-
-
-(defun cookie-create (buffer pretty-printer &optional header footer)
-
- "Start to use the cookie package in BUFFER.
-BUFFER may be a buffer or a buffer name. It is created if it does not exist.
-Beware that the entire contents of the buffer will be erased.
-PRETTY-PRINTER is a function that takes one cookie and returns a string
-to be displayed in the buffer. The string may be empty. If it is not
-empty a newline will be added automatically. It may span several lines.
-Optional third argument HEADER is a string that will always be present
-at the top of the buffer. HEADER should end with a newline. Optionaly
-fourth argument FOOTER is similar, and will always be inserted at the
-bottom of the buffer."
-
- (cookie-set-buffer buffer
-
- (erase-buffer)
-
- (make-local-variable 'cookie-last-tin)
- (make-local-variable 'cookie-pretty-printer)
- (make-local-variable 'cookie-header)
- (make-local-variable 'cookie-footer)
- (make-local-variable 'cookies)
-
- (setq cookie-last-tin nil)
- (setq cookie-pretty-printer pretty-printer)
- (setq cookies (dll-create))
-
- (dll-enter-first cookies
- (cookie-create-tin-and-insert
- header header 0))
- (setq cookie-header (dll-nth cookies 0))
-
- (dll-enter-last cookies
- (cookie-create-tin-and-insert
- footer footer (point-max)))
- (setq cookie-footer (dll-nth cookies -1))
-
- (goto-char (point-min))
- (forward-line 1)))
-
-
-(defun cookie-set-header (buffer header)
- "Change the header. Args: BUFFER HEADER."
- (impl))
-
-
-(defun cookie-set-footer (buffer header)
- "Change the footer. Args: BUFFER FOOTER."
- (impl))
-
-
-
-(defun cookie-enter-first (buffer cookie)
- "Enter a COOKIE first in BUFFER.
-Args: BUFFER COOKIE."
-
- (cookie-set-buffer buffer
-
- ;; It is always safe to insert an element after the first element,
- ;; because the header is always present. (dll-nth cookies 0) should
- ;; never return nil.
-
- (dll-enter-after
- cookies
- (dll-nth cookies 0)
- (cookie-create-tin-and-insert
- cookie
- (funcall cookie-pretty-printer cookie)
- (cookie-tin-start-marker
- (dll-element cookies (dll-nth cookies 1)))))))
-
-
-
-(defun cookie-enter-last (buffer cookie)
- "Enter a COOKIE last in BUFFER.
-Args: BUFFER COOKIE."
-
- (cookie-set-buffer buffer
-
- ;; Remember that the header and footer are always present. There
- ;; is no need to check if (dll-nth cookies -2) returns nil.
-
- (dll-enter-before
- cookies
- (dll-nth cookies -1)
- (cookie-create-tin-and-insert
- cookie
- (funcall cookie-pretty-printer cookie)
- (cookie-tin-start-marker (dll-last cookies))))))
-
-
-(defun cookie-enter-after (buffer node cookie)
- (impl))
-
-
-(defun cookie-enter-before (buffer node cookie)
- (impl))
-
-
-
-(defun cookie-next (buffer tin)
- "Get the next tin. Args: BUFFER TIN.
-Returns nil if TIN is nil or the last cookie."
- (if tin
- (cookie-set-buffer buffer
- (cookie-filter-hf (dll-next cookies tin)))))
-
-
-
-(defun cookie-previous (buffer tin)
- "Get the previous tin. Args: BUFFER TIN.
-Returns nil if TIN is nil or the first cookie."
- (if tin
- (cookie-set-buffer buffer
- (cookie-filter-hf (dll-previous cookies tin)))))
-
-
-(defun cookie-nth (buffer n)
-
- "Return the Nth tin. Args: BUFFER N.
-N counts from zero. Nil is returned if there is less than N cookies.
-If N is negative, return the -(N+1)th last element.
-Thus, (cookie-nth dll 0) returns the first node,
-and (cookie-nth dll -1) returns the last node.
-
-Use cookie-cookie to extract the cookie from the tin."
-
- (cookie-set-buffer buffer
-
- ;; Skip the header (or footer, if n is negative).
- (if (< n 0)
- (setq n (1- n))
- (setq n (1+ n)))
-
- (cookie-filter-hf (dll-nth cookies n))))
-
-
-
-(defun cookie-delete (buffer tin)
- "Delete a cookie. Args: BUFFER TIN."
-
- (cookie-set-buffer buffer
- (if (eq cookie-last-tin tin)
- (setq cookie-last-tin nil))
-
- (cookie-delete-tin-internal tin)
- (dll-delete cookies tin)))
-
-
-
-(defun cookie-delete-first (buffer)
- "Delete first cookie and return it. Args: BUFFER.
-Returns nil if there is no cookie left."
-
- (cookie-set-buffer buffer
-
- ;; We have to check that we do not try to delete the footer.
-
- (let ((tin (dll-nth cookies 1))) ;Skip the header.
- (if (eq tin cookie-footer)
- nil
- (cookie-delete-tin-internal tin)
- (cookie-tin-cookie (dll-delete cookies tin))))))
-
-
-
-(defun cookie-delete-last (buffer)
- "Delete last cookie and return it. Args: BUFFER.
-Returns nil if there is no cookie left."
-
- (cookie-set-buffer buffer
-
- ;; We have to check that we do not try to delete the header.
-
- (let ((tin (dll-nth cookies -2))) ;Skip the footer.
- (if (eq tin cookie-header)
- nil
- (cookie-delete-tin-internal tin)
- (cookie-tin-cookie (dll-delete cookies tin))))))
-
-
-
-(defun cookie-first (buffer)
-
- "Return the first cookie in BUFFER. The cookie is not removed."
-
- (cookie-set-buffer buffer
- (let ((tin (cookie-filter-hf (dll-nth cookies -1))))
- (if tin
- (cookie-tin-cookie-safe
- (dll-element cookies tin))))))
-
-
-(defun cookie-last (buffer)
-
- "Return the last cookie in BUFFER. The cookie is not removed."
-
- (cookie-set-buffer buffer
- (let ((tin (cookie-filter-hf (dll-nth cookies -2))))
- (if tin
- (cookie-tin-cookie-safe
- (dll-element cookies tin))))))
-
-
-(defun cookie-empty (buffer)
-
- "Return true if there are no cookies in BUFFER."
-
- (cookie-set-buffer buffer
- (eq (dll-nth cookies 1) cookie-footer)))
-
-
-(defun cookie-length (buffer)
-
- "Return number of cookies in BUFFER."
-
- ;; Don't count the footer and header.
-
- (cookie-set-buffer buffer
- (- (dll-length cookies) 2)))
-
-
-(defun cookie-all (buffer)
-
- "Return a list of all cookies in BUFFER."
-
- (cookie-set-buffer buffer
- (let (result
- (tin (dll-nth cookies -2)))
- (while (not (eq tin cookie-header))
- (setq result (cons (cookie-tin-cookie (dll-element cookies tin))
- result))
- (setq tin (dll-previous cookies tin)))
- result)))
-
-(defun cookie-clear (buffer)
-
- "Remove all cookies in buffer."
-
- (cookie-set-buffer buffer
- (cookie-create buffer cookie-pretty-printer
- (cookie-tin-cookie (dll-element cookies cookie-header))
- (cookie-tin-cookie (dll-element cookies cookie-footer)))))
-
-
-
-(defun cookie-map (map-function buffer &rest map-args)
-
- "Apply MAP-FUNCTION to all cookies in BUFFER.
-MAP-FUNCTION is applied to the first element first.
-If MAP-FUNCTION returns non-nil the cookie will be refreshed.
-
-Note that BUFFER will be current buffer when MAP-FUNCTION is called.
-
-If more than two arguments are given to cookie-map, remaining
-arguments will be passed to MAP-FUNCTION."
-
- (cookie-set-buffer buffer
- (let ((tin (dll-nth cookies 1))
- result)
-
- (while (not (eq tin cookie-footer))
-
- (if (apply map-function
- (cookie-tin-cookie (dll-element cookies tin))
- map-args)
- (cookie-refresh-tin tin))
-
- (setq tin (dll-next cookies tin))))))
-
-
-
-(defun cookie-map-reverse (map-function buffer &rest map-args)
-
- "Apply MAP-FUNCTION to all cookies in BUFFER.
-MAP-FUNCTION is applied to the last cookie first.
-If MAP-FUNCTION returns non-nil the cookie will be refreshed.
-
-Note that BUFFER will be current buffer when MAP-FUNCTION is called.
-
-If more than two arguments are given to cookie-map, remaining
-arguments will be passed to MAP-FUNCTION."
-
- (cookie-set-buffer buffer
- (let ((tin (dll-nth cookies -2))
- result)
-
- (while (not (eq tin cookie-header))
-
- (if (apply map-function
- (cookie-tin-cookie (dll-element cookies tin))
- map-args)
- (cookie-refresh-tin tin))
-
- (setq tin (dll-previous cookies tin))))))
-
-
-
-(defun cookie-enter-cookies (buffer cookie-list)
-
- "Insert all cookies in the list COOKIE-LIST last in BUFFER.
-Args: BUFFER COOKIE-LIST."
-
- (while cookie-list
- (cookie-enter-last buffer (car cookie-list))
- (setq cookie-list (cdr cookie-list))))
-
-
-(defun cookie-filter (buffer predicate)
-
- "Remove all cookies in BUFFER for which PREDICATE returns nil.
-Note that BUFFER will be current-buffer when PREDICATE is called.
-
-The PREDICATE is called with one argument, the cookie."
-
- (cookie-set-buffer buffer
- (let ((tin (dll-nth cookies 1))
- next)
- (while (not (eq tin cookie-footer))
- (setq next (dll-next cookies tin))
- (if (funcall predicate (cookie-tin-cookie (dll-element cookies tin)))
- nil
- (cookie-delete-tin-internal tin)
- (dll-delete cookies tin))
- (setq tin next)))))
-
-
-(defun cookie-filter-tins (buffer predicate)
-
- "Remove all cookies in BUFFER for which PREDICATE returns nil.
-Note that BUFFER will be current-buffer when PREDICATE is called.
-
-The PREDICATE is called with one argument, the tin."
-
- (cookie-set-buffer buffer
- (let ((tin (dll-nth cookies 1))
- next)
- (while (not (eq tin cookie-footer))
- (setq next (dll-next cookies tin))
- (if (funcall predicate tin)
- nil
- (cookie-delete-tin-internal tin)
- (dll-delete cookies tin))
- (setq tin next)))))
-
-(defun cookie-pos-before-middle-p (pos tin1 tin2)
-
- "Return true if POS is in the first half of the region defined by TIN1 and
-TIN2."
-
- (< pos (/ (+ (cookie-tin-start-marker (dll-element cookeis tin1))
- (cookie-tin-start-marker (dll-element cookeis tin2)))
- 2)))
-
-
-(defun cookie-get-selection (buffer pos &optional guess force-guess)
-
- "Return the tin the POS is within.
-Args: BUFFER POS &optional GUESS FORCE-GUESS.
-GUESS should be a tin that it is likely that POS is near. If FORCE-GUESS
-is non-nil GUESS is always used as a first guess, otherwise the first
-guess is the first tin, last tin, or GUESS, whichever is nearest to
-pos in the BUFFER.
-
-If pos points within the header, the first cookie is returned.
-If pos points within the footer, the last cookie is returned.
-Nil is returned if there is no cookie.
-
-It is often good to specify cookie-last-tin as GUESS, but remember
-that cookie-last-tin is buffer local in all buffers that cookie
-operates on."
-
- (cookie-set-buffer buffer
-
- (cond
- ; No cookies present?
- ((eq (dll-nth cookies 1) (dll-nth cookies -1))
- nil)
-
- ; Before first cookie?
- ((< pos (cookie-tin-start-marker
- (dll-element cookies (dll-nth cookies 1))))
- (dll-nth cookies 1))
-
- ; After last cookie?
- ((>= pos (cookie-tin-start-marker (dll-last cookies)))
- (dll-nth cookies -2))
-
- ; We now now that pos is within a cookie.
- (t
- ; Make an educated guess about which of the three known
- ; cookies (the first, the last, or GUESS) is nearest.
- (setq
- guess
- (cond
- (force-guess guess)
- (guess
- (cond
- ;; Closest to first cookie?
- ((cookie-pos-before-middle-p
- pos guess
- (dll-nth cookies 1))
- (dll-nth cookies 1))
- ;; Closest to GUESS?
- ((cookie-pos-before-middle-p
- pos guess
- cookie-footer)
- guess)
- ;; Closest to last cookie.
- (t (dll-previous cookies cookie-footer))))
- (t
- ;; No guess given.
- (cond
- ;; First half?
- ((cookie-pos-before-middle-p
- pos (dll-nth cookies 1)
- cookie-footer)
- (dll-nth cookies 1))
- (t (dll-previous cookies cookie-footer))))))
-
- ;; GUESS is now a "best guess".
-
- ;; Find the correct cookie. First determine in which direction
- ;; it lies, and then move in that direction until it is found.
-
- (cond
- ;; Is pos after the guess?
- ((>= pos (cookie-tin-start-marker (dll-element cookiess guess)))
-
- ;; Loop until we are exactly one cookie too far down...
- (while (>= pos (cookie-tin-start-marker (dll-element cookiess guess)))
- (setq guess (dll-next cookies guess)))
-
- ;; ...and return the previous cookie.
- (dll-previous cookies guess))
-
- ;; Pos is before guess
- (t
-
- (while (< pos (cookie-tin-start-marker (dll-element cookiess guess)))
- (setq guess (dll-previous cookies guess)))
-
- guess))))))
-
-
-(defun cookie-start-marker (buffer tin)
-
- "Return start-position of a cookie in BUFFER.
-Args: BUFFER TIN.
-The marker that is returned should not be modified in any way,
-and is only valid until the contents of the cookie buffer changes."
-
- (cookie-set-buffer buffer
- (cookie-tin-start-marker (dll-element cookies tin))))
-
-
-(defun cookie-end-marker (buffer tin)
-
- "Return end-position of a cookie in BUFFER.
-Args: BUFFER TIN.
-The marker that is returned should not be modified in any way,
-and is only valid until the contents of the cookie buffer changes."
-
- (cookie-set-buffer buffer
- (cookie-tin-start-marker
- (dll-element cookies (dll-next cookies tin)))))
-
-
-
-(defun cookie-refresh (buffer)
-
- "Refresh all cookies in BUFFER.
-Cookie-pretty-printer will be called for all cookies and the new result
-displayed.
-
-See also cookie-invalidate-tins."
-
- (cookie-set-buffer buffer
-
- (erase-buffer)
-
- (set-marker (cookie-tin-start-marker (dll-element cookies cookie-header))
- (point) buffer)
- (insert (cookie-tin-cookie (dll-element cookies cookie-header)))
- (insert "\n")
-
- (let ((tin (dll-nth cookies 1)))
- (while (not (eq tin cookie-footer))
-
- (set-marker (cookie-tin-start-marker (dll-element cookies tin))
- (point) buffer)
- (insert
- (funcall cookie-pretty-printer
- (cookie-tin-cookie (dll-element cookies tin))))
- (insert "\n")
- (setq tin (dll-next cookies tin))))
-
- (set-marker (cookie-tin-start-marker (dll-element cookies cookie-footer))
- (point) buffer)
- (insert (cookie-tin-cookie (dll-element cookies cookie-footer)))
- (insert "\n")))
-
-
-(defun cookie-invalidate-tins (buffer &rest tins)
-
- "Refresh some cookies.
-Args: BUFFER &rest TINS."
-
- (cookie-set-buffer buffer
-
- (while tins
- (cookie-refresh-tin (car tins))
- (setq tins (cdr tins)))))
-
-
-;;; Cookie movement commands.
-
-(defun cookie-set-goal-column (buffer goal)
- "Set goal-column for BUFFER.
-Args: BUFFER GOAL.
-goal-column is made buffer-local."
- (cookie-set-buffer buffer
- (make-local-variable 'goal-column)
- (setq goal-column goal)))
-
-
-(defun cookie-previous-cookie (buffer pos arg)
- "Move point to the ARGth previous cookie.
-Don't move if we are at the first cookie.
-ARG is the prefix argument when called interactively.
-Args: BUFFER POS ARG.
-Sets cookie-last-tin to the cookie we move to."
-
- (interactive (list (current-buffer) (point)
- (prefix-numeric-value current-prefix-arg)))
-
- (cookie-set-buffer buffer
- (setq cookie-last-tin
- (cookie-get-selection buffer pos cookie-last-tin))
-
- (while (and cookie-last-tin (> arg 0))
- (setq arg (1- arg))
- (setq cookie-last-tin
- (dll-previous cookies cookie-last-tin)))
-
- ;; Never step above the first cookie.
-
- (if (null (cookie-filter-hf cookie-last-tin))
- (setq cookie-last-tin (dll-nth cookies 1)))
-
- (goto-char
- (cookie-tin-start-marker
- (dll-element cookies cookie-last-tin)))
-
- (if goal-column
- (move-to-column goal-column))))
-
-
-
-(defun cookie-next-cookie (buffer pos arg)
- "Move point to the ARGth next cookie.
-Don't move if we are at the last cookie.
-ARG is the prefix argument when called interactively.
-Args: BUFFER POS ARG.
-Sets cookie-last-tin to the cookie we move to."
-
- (interactive (list (current-buffer) (point)
- (prefix-numeric-value current-prefix-arg)))
-
- (cookie-set-buffer buffer
- (setq cookie-last-tin
- (cookie-get-selection buffer pos cookie-last-tin))
-
- (while (and cookie-last-tin (> arg 0))
- (setq arg (1- arg))
- (setq cookie-last-tin
- (dll-next cookies cookie-last-tin)))
-
- (if (null (cookie-filter-hf cookie-last-tin))
- (setq cookie-last-tin (dll-nth cookies -2)))
-
- (goto-char
- (cookie-tin-start-marker
- (dll-element cookies cookie-last-tin)))
-
- (if goal-column
- (move-to-column goal-column))))
-
-
-(defun cookie-collect-tins (buffer predicate &rest predicate-args)
-
- "Return a list of all tins in BUFFER whose cookie PREDICATE
-returns true for.
-PREDICATE is a function that takes a cookie as its argument.
-The tins on the returned list will appear in the same order
-as in the buffer. You should not rely on in which order PREDICATE
-is called. Note that BUFFER is current-buffer when PREDICATE
-is called. (If you call cookie-collect with another buffer set
-as current-buffer and need to access buffer-local variables
-from that buffer within PREDICATE you must send them via
-PREDICATE-ARGS).
-
-If more than two arguments are given to cookie-collect the remaining
-arguments will be passed to PREDICATE.
-
-Use cookie-cookie to get the cookie from the tin."
-
- (cookie-set-buffer buffer
- (let ((tin (dll-nth cookies -2))
- result)
-
- (while (not (eq tin cookie-header))
-
- (if (apply predicate
- (cookie-tin-cookie (dll-element cookies tin))
- predicate-args)
- (setq result (cons tin result)))
-
- (setq tin (dll-previous cookies tin)))
- result)))
-
-
-(defun cookie-collect-cookies (buffer predicate &rest predicate-args)
-
- "Return a list of all cookies in BUFFER that PREDICATE
-returns true for.
-PREDICATE is a function that takes a cookie as its argument.
-The cookie on the returned list will appear in the same order
-as in the buffer. You should not rely on in which order PREDICATE
-is called. Note that BUFFER is current-buffer when PREDICATE
-is called. (If you call cookie-collect with another buffer set
-as current-buffer and need to access buffer-local variables
-from that buffer within PREDICATE you must send them via
-PREDICATE-ARGS).
-
-If more than two arguments are given to cookie-collect the remaining
-arguments will be passed to PREDICATE."
-
- (cookie-set-buffer buffer
- (let ((tin (dll-nth cookies -2))
- result)
-
- (while (not (eq tin cookie-header))
-
- (if (apply predicate
- (cookie-tin-cookie (dll-element cookies tin))
- predicate-args)
- (setq result (cons (cookie-tin-cookie (dll-element cookies tin))
- result)))
-
- (setq tin (dll-previous cookies tin)))
- result)))
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-dll-debug.el b/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-dll-debug.el
deleted file mode 100644
index 733ff86..0000000
--- a/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-dll-debug.el
+++ /dev/null
@@ -1,298 +0,0 @@
-;;; elib-dll-debug -- A slow implementation of elib-dll for debugging.
-;;; elib-dll-debug.el,v 1.2 1992/04/07 20:49:13 berliner Exp
-;;; Copyright (C) 1991,1992 Per Cederqvist
-;;;
-;;; This program is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 2 of the License, or
-;;; (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program; if not, write to the Free Software
-;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-
-;;; This is a plug-in replacement for elib-dll.el. It is dreadfully
-;;; slow, but it facilitates debugging. Don't trust the comments in
-;;; this file too much.
-(provide 'elib-dll)
-
-;;;
-;;; A doubly linked list consists of one cons cell which holds the tag
-;;; 'DL-LIST in the car cell and the list in the cdr
-;;; cell. The doubly linked list is implemented as a normal list. You
-;;; should use elib-dll.el and not this package in debugged code. This
-;;; package is not written for speed...
-;;;
-
-;;; ================================================================
-;;; Internal functions for use in the doubly linked list package
-
-(defun dll-get-dummy-node (dll)
-
- ;; Return the dummy node. INTERNAL USE ONLY.
- dll)
-
-(defun dll-list-nodes (dll)
-
- ;; Return a list of all nodes in DLL. INTERNAL USE ONLY.
-
- (cdr dll))
-
-(defun dll-set-from-node-list (dll list)
-
- ;; Set the contents of DLL to the nodes in LIST.
- ;; INTERNAL USE ONLY.
-
- (setcdr dll list))
-
-(defun dll-get-node-before (dll node)
- ;; Return the node in DLL that points to NODE. Use
- ;; (dll-get-node-before some-list nil) to get the last node.
- ;; INTERNAL USE ONLY.
- (while (and dll (not (eq (cdr dll) node)))
- (setq dll (cdr dll)))
- (if (not dll)
- (error "Node not on list"))
- dll)
-
-(defmacro dll-insert-after (node element)
- (let ((node-v (make-symbol "node"))
- (element-v (make-symbol "element")))
- (` (let (((, node-v) (, node))
- ((, element-v) (, element)))
- (setcdr (, node-v) (cons (, element-v) (cdr (, node-v))))))))
-
-;;; ===================================================================
-;;; The public functions which operate on doubly linked lists.
-
-(defmacro dll-element (dll node)
-
- "Get the element of a NODE in a doubly linked list DLL.
-Args: DLL NODE."
-
- (` (car (, node))))
-
-
-(defun dll-create ()
- "Create an empty doubly linked list."
- (cons 'DL-LIST nil))
-
-
-(defun dll-p (object)
- "Return t if OBJECT is a doubly linked list, otherwise return nil."
- (eq (car-safe object) 'DL-LIST))
-
-
-(defun dll-enter-first (dll element)
- "Add an element first on a doubly linked list.
-Args: DLL ELEMENT."
- (setcdr dll (cons element (cdr dll))))
-
-
-(defun dll-enter-last (dll element)
- "Add an element last on a doubly linked list.
-Args: DLL ELEMENT."
- (dll-insert-after (dll-get-node-before dll nil) element))
-
-
-(defun dll-enter-after (dll node element)
- "In the doubly linked list DLL, insert a node containing ELEMENT after NODE.
-Args: DLL NODE ELEMENT."
-
- (dll-get-node-before dll node)
- (dll-insert-after node element))
-
-
-(defun dll-enter-before (dll node element)
- "In the doubly linked list DLL, insert a node containing ELEMENT before NODE.
-Args: DLL NODE ELEMENT."
-
- (dll-insert-after (dll-get-node-before dll node) element))
-
-
-
-(defun dll-next (dll node)
- "Return the node after NODE, or nil if NODE is the last node.
-Args: DLL NODE."
-
- (dll-get-node-before dll node)
- (cdr node))
-
-
-(defun dll-previous (dll node)
- "Return the node before NODE, or nil if NODE is the first node.
-Args: DLL NODE."
-
- (dll-get-node-before dll node))
-
-
-(defun dll-delete (dll node)
-
- "Delete NODE from the doubly linked list DLL.
-Args: DLL NODE. Return the element of node."
-
- ;; This is a no-op when applied to the dummy node. This will return
- ;; nil if applied to the dummy node since it always contains nil.
-
- (setcdr (dll-get-node-before dll node) (cdr node)))
-
-
-(defun dll-delete-first (dll)
-
- "Delete the first NODE from the doubly linked list DLL.
-Return the element. Args: DLL. Returns nil if the DLL was empty."
-
- ;; Relies on the fact that dll-delete does nothing and
- ;; returns nil if given the dummy node.
-
- (setcdr dll (cdr (cdr dll))))
-
-
-(defun dll-delete-last (dll)
-
- "Delete the last NODE from the doubly linked list DLL.
-Return the element. Args: DLL. Returns nil if the DLL was empty."
-
- ;; Relies on the fact that dll-delete does nothing and
- ;; returns nil if given the dummy node.
-
- (setcdr dll (dll-get-node-before dll nil) nil))
-
-
-(defun dll-first (dll)
-
- "Return the first element on the doubly linked list DLL.
-Return nil if the list is empty. The element is not removed."
-
- (car (cdr dll)))
-
-
-
-
-(defun dll-last (dll)
-
- "Return the last element on the doubly linked list DLL.
-Return nil if the list is empty. The element is not removed."
-
- (car (dll-get-node-before dll nil)))
-
-
-
-(defun dll-nth (dll n)
-
- "Return the Nth node from the doubly linked list DLL.
- Args: DLL N
-N counts from zero. If DLL is not that long, nil is returned.
-If N is negative, return the -(N+1)th last element.
-Thus, (dll-nth dll 0) returns the first node,
-and (dll-nth dll -1) returns the last node."
-
- ;; Branch 0 ("follow left pointer") is used when n is negative.
- ;; Branch 1 ("follow right pointer") is used otherwise.
-
- (if (>= n 0)
- (nthcdr n (cdr dll))
- (unwind-protect
- (progn (setcdr dll (nreverse (cdr dll)))
- (nthcdr (- n) dll))
- (setcdr dll (nreverse (cdr dll))))))
-
-(defun dll-empty (dll)
-
- "Return t if the doubly linked list DLL is empty, nil otherwise"
-
- (not (cdr dll)))
-
-(defun dll-length (dll)
-
- "Returns the number of elements in the doubly linked list DLL."
-
- (length (cdr dll)))
-
-
-
-(defun dll-copy (dll &optional element-copy-fnc)
-
- "Return a copy of the doubly linked list DLL.
-If optional second argument ELEMENT-COPY-FNC is non-nil it should be
-a function that takes one argument, an element, and returns a copy of it.
-If ELEMENT-COPY-FNC is not given the elements are not copied."
-
- (if element-copy-fnc
- (cons 'DL-LIST (mapcar element-copy-fnc (cdr dll)))
- (copy-sequence dll)))
-
-
-(defun dll-all (dll)
-
- "Return all elements on the double linked list DLL as an ordinary list."
-
- (cdr dll))
-
-
-(defun dll-clear (dll)
-
- "Clear the doubly linked list DLL, i.e. make it completely empty."
-
- (setcdr dll nil))
-
-
-(defun dll-map (map-function dll)
-
- "Apply MAP-FUNCTION to all elements in the doubly linked list DLL.
-The function is applied to the first element first."
-
- (mapcar map-function (cdr dll)))
-
-
-(defun dll-map-reverse (map-function dll)
-
- "Apply MAP-FUNCTION to all elements in the doubly linked list DLL.
-The function is applied to the last element first."
-
- (unwind-protect
- (setcdr dll (nreverse (cdr dll)))
- (mapcar map-function (cdr dll))
- (setcdr dll (nreverse (cdr dll)))))
-
-
-(defun dll-create-from-list (list)
-
- "Given an elisp LIST create a doubly linked list with the same elements."
-
- (cons 'DL-LIST list))
-
-
-
-(defun dll-sort (dll predicate)
-
- "Sort the doubly linked list DLL, stably, comparing elements using PREDICATE.
-Returns the sorted list. DLL is modified by side effects.
-PREDICATE is called with two elements of DLL, and should return T
-if the first element is \"less\" than the second."
-
- (setcdr dll (sort (cdr dll) predicate))
- dll)
-
-
-(defun dll-filter (dll predicate)
-
- "Remove all elements in the doubly linked list DLL for which PREDICATE
-return nil."
-
- (let* ((prev dll)
- (node (cdr dll)))
-
- (while node
- (cond
- ((funcall predicate (car node))
- (setq prev node))
- (t
- (setcdr prev (cdr node))))
- (setq node (cdr node)))))
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-dll.el b/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-dll.el
deleted file mode 100644
index 855bd19..0000000
--- a/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-dll.el
+++ /dev/null
@@ -1,386 +0,0 @@
-;;; elib-dll.el,v 1.2 1992/04/07 20:49:15 berliner Exp
-;;; elib-dll.el -- Some primitives for Doubly linked lists.
-;;; Copyright (C) 1991, 1992 Per Cederqvist
-;;;
-;;; This program is free software; you can redistribute it and/or modify
-;;; it under the terms of the GNU General Public License as published by
-;;; the Free Software Foundation; either version 2 of the License, or
-;;; (at your option) any later version.
-;;;
-;;; This program is distributed in the hope that it will be useful,
-;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;; GNU General Public License for more details.
-;;;
-;;; You should have received a copy of the GNU General Public License
-;;; along with this program; if not, write to the Free Software
-;;; Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-;;; Mail bug reports to ceder@lysator.liu.se.
-
-(require 'elib-node)
-(provide 'elib-dll)
-
-;;;
-;;; A doubly linked list consists of one cons cell which holds the tag
-;;; 'DL-LIST in the car cell and a pointer to a dummy node in the cdr
-;;; cell. The doubly linked list is implemented as a circular list
-;;; with the dummy node first and last. The dummy node is recognized
-;;; by comparing it to the node which the cdr of the cons cell points
-;;; to.
-;;;
-
-;;; ================================================================
-;;; Internal functions for use in the doubly linked list package
-
-(defun dll-get-dummy-node (dll)
-
- ;; Return the dummy node. INTERNAL USE ONLY.
- (cdr dll))
-
-(defun dll-list-nodes (dll)
-
- ;; Return a list of all nodes in DLL. INTERNAL USE ONLY.
-
- (let* ((result nil)
- (dummy (dll-get-dummy-node dll))
- (node (elib-node-left dummy)))
-
- (while (not (eq node dummy))
- (setq result (cons node result))
- (setq node (elib-node-left node)))
-
- result))
-
-(defun dll-set-from-node-list (dll list)
-
- ;; Set the contents of DLL to the nodes in LIST.
- ;; INTERNAL USE ONLY.
-
- (dll-clear dll)
- (let* ((dummy (dll-get-dummy-node dll))
- (left dummy))
- (while list
- (elib-node-set-left (car list) left)
- (elib-node-set-right left (car list))
- (setq left (car list))
- (setq list (cdr list)))
-
- (elib-node-set-right left dummy)
- (elib-node-set-left dummy left)))
-
-
-;;; ===================================================================
-;;; The public functions which operate on doubly linked lists.
-
-(defmacro dll-element (dll node)
-
- "Get the element of a NODE in a doubly linked list DLL.
-Args: DLL NODE."
-
- (` (elib-node-data (, node))))
-
-
-(defun dll-create ()
- "Create an empty doubly linked list."
- (let ((dummy-node (elib-node-create nil nil nil)))
- (elib-node-set-right dummy-node dummy-node)
- (elib-node-set-left dummy-node dummy-node)
- (cons 'DL-LIST dummy-node)))
-
-(defun dll-p (object)
- "Return t if OBJECT is a doubly linked list, otherwise return nil."
- (eq (car-safe object) 'DL-LIST))
-
-(defun dll-enter-first (dll element)
- "Add an element first on a doubly linked list.
-Args: DLL ELEMENT."
- (dll-enter-after
- dll
- (dll-get-dummy-node dll)
- element))
-
-
-(defun dll-enter-last (dll element)
- "Add an element last on a doubly linked list.
-Args: DLL ELEMENT."
- (dll-enter-before
- dll
- (dll-get-dummy-node dll)
- element))
-
-
-(defun dll-enter-after (dll node element)
- "In the doubly linked list DLL, insert a node containing ELEMENT after NODE.
-Args: DLL NODE ELEMENT."
-
- (let ((new-node (elib-node-create
- node (elib-node-right node)
- element)))
- (elib-node-set-left (elib-node-right node) new-node)
- (elib-node-set-right node new-node)))
-
-
-(defun dll-enter-before (dll node element)
- "In the doubly linked list DLL, insert a node containing ELEMENT before NODE.
-Args: DLL NODE ELEMENT."
-
- (let ((new-node (elib-node-create
- (elib-node-left node) node
- element)))
- (elib-node-set-right (elib-node-left node) new-node)
- (elib-node-set-left node new-node)))
-
-
-
-(defun dll-next (dll node)
- "Return the node after NODE, or nil if NODE is the last node.
-Args: DLL NODE."
-
- (if (eq (elib-node-right node) (dll-get-dummy-node dll))
- nil
- (elib-node-right node)))
-
-
-(defun dll-previous (dll node)
- "Return the node before NODE, or nil if NODE is the first node.
-Args: DLL NODE."
-
- (if (eq (elib-node-left node) (dll-get-dummy-node dll))
- nil
- (elib-node-left node)))
-
-
-(defun dll-delete (dll node)
-
- "Delete NODE from the doubly linked list DLL.
-Args: DLL NODE. Return the element of node."
-
- ;; This is a no-op when applied to the dummy node. This will return
- ;; nil if applied to the dummy node since it always contains nil.
-
- (elib-node-set-right (elib-node-left node) (elib-node-right node))
- (elib-node-set-left (elib-node-right node) (elib-node-left node))
- (dll-element dll node))
-
-
-
-(defun dll-delete-first (dll)
-
- "Delete the first NODE from the doubly linked list DLL.
-Return the element. Args: DLL. Returns nil if the DLL was empty."
-
- ;; Relies on the fact that dll-delete does nothing and
- ;; returns nil if given the dummy node.
-
- (dll-delete dll (elib-node-right (dll-get-dummy-node dll))))
-
-
-(defun dll-delete-last (dll)
-
- "Delete the last NODE from the doubly linked list DLL.
-Return the element. Args: DLL. Returns nil if the DLL was empty."
-
- ;; Relies on the fact that dll-delete does nothing and
- ;; returns nil if given the dummy node.
-
- (dll-delete dll (elib-node-left (dll-get-dummy-node dll))))
-
-
-(defun dll-first (dll)
-
- "Return the first element on the doubly linked list DLL.
-Return nil if the list is empty. The element is not removed."
-
- (if (eq (elib-node-right (dll-get-dummy-node dll))
- (dll-get-dummy-node dll))
- nil
- (elib-node-data (elib-node-right (dll-get-dummy-node dll)))))
-
-
-
-
-(defun dll-last (dll)
-
- "Return the last element on the doubly linked list DLL.
-Return nil if the list is empty. The element is not removed."
-
- (if (eq (elib-node-left (dll-get-dummy-node dll))
- (dll-get-dummy-node dll))
- nil
- (elib-node-data (elib-node-left (dll-get-dummy-node dll)))))
-
-
-
-(defun dll-nth (dll n)
-
- "Return the Nth node from the doubly linked list DLL.
- Args: DLL N
-N counts from zero. If DLL is not that long, nil is returned.
-If N is negative, return the -(N+1)th last element.
-Thus, (dll-nth dll 0) returns the first node,
-and (dll-nth dll -1) returns the last node."
-
- ;; Branch 0 ("follow left pointer") is used when n is negative.
- ;; Branch 1 ("follow right pointer") is used otherwise.
-
- (let* ((dummy (dll-get-dummy-node dll))
- (branch (if (< n 0) 0 1))
- (node (elib-node-branch dummy branch)))
-
- (if (< n 0)
- (setq n (- -1 n)))
-
- (while (and (not (eq dummy node))
- (> n 0))
- (setq node (elib-node-branch node branch))
- (setq n (1- n)))
-
- (if (eq dummy node)
- nil
- node)))
-
-
-(defun dll-empty (dll)
-
- "Return t if the doubly linked list DLL is empty, nil otherwise"
-
- (eq (elib-node-left (dll-get-dummy-node dll))
- (dll-get-dummy-node dll)))
-
-(defun dll-length (dll)
-
- "Returns the number of elements in the doubly linked list DLL."
-
- (let* ((dummy (dll-get-dummy-node dll))
- (node (elib-node-right dummy))
- (n 0))
-
- (while (not (eq node dummy))
- (setq node (elib-node-right node))
- (setq n (1+ n)))
-
- n))
-
-
-
-(defun dll-copy (dll &optional element-copy-fnc)
-
- "Return a copy of the doubly linked list DLL.
-If optional second argument ELEMENT-COPY-FNC is non-nil it should be
-a function that takes one argument, an element, and returns a copy of it.
-If ELEMENT-COPY-FNC is not given the elements are not copied."
-
- (let ((result (dll-create))
- (node (dll-nth dll 0)))
- (if element-copy-fnc
-
- ;; Copy the elements with the user-supplied function.
- (while node
- (dll-enter-last result
- (funcall element-copy-fnc
- (dll-element dll node)))
- (setq node (dll-next dll node)))
-
- ;; Don't try to copy the elements - they might be
- ;; circular lists, or anything at all...
- (while node
- (dll-enter-last result (dll-element dll node))
- (setq node (dll-next dll node))))
-
- result))
-
-
-
-(defun dll-all (dll)
-
- "Return all elements on the double linked list DLL as an ordinary list."
-
- (let* ((result nil)
- (dummy (dll-get-dummy-node dll))
- (node (elib-node-left dummy)))
-
- (while (not (eq node dummy))
- (setq result (cons (dll-element dll node) result))
- (setq node (elib-node-left node)))
-
- result))
-
-
-(defun dll-clear (dll)
-
- "Clear the doubly linked list DLL, i.e. make it completely empty."
-
- (elib-node-set-left (dll-get-dummy-node dll) (dll-get-dummy-node dll))
- (elib-node-set-right (dll-get-dummy-node dll) (dll-get-dummy-node dll)))
-
-
-(defun dll-map (map-function dll)
-
- "Apply MAP-FUNCTION to all elements in the doubly linked list DLL.
-The function is applied to the first element first."
-
- (let* ((dummy (dll-get-dummy-node dll))
- (node (elib-node-right dummy)))
-
- (while (not (eq node dummy))
- (funcall map-function (dll-element dll node))
- (setq node (elib-node-right node)))))
-
-
-(defun dll-map-reverse (map-function dll)
-
- "Apply MAP-FUNCTION to all elements in the doubly linked list DLL.
-The function is applied to the last element first."
-
- (let* ((dummy (dll-get-dummy-node dll))
- (node (elib-node-left dummy)))
-
- (while (not (eq node dummy))
- (funcall map-function (dll-element dll node))
- (setq node (elib-node-left node)))))
-
-
-(defun dll-create-from-list (list)
-
- "Given an elisp LIST create a doubly linked list with the same elements."
-
- (let ((dll (dll-create)))
- (while list
- (dll-enter-last dll (car list))
- (setq list (cdr list)))
- dll))
-
-
-
-(defun dll-sort (dll predicate)
-
- "Sort the doubly linked list DLL, stably, comparing elements using PREDICATE.
-Returns the sorted list. DLL is modified by side effects.
-PREDICATE is called with two elements of DLL, and should return T
-if the first element is \"less\" than the second."
-
- (dll-set-from-node-list
- dll (sort (dll-list-nodes dll)
- (function (lambda (x1 x2)
- (funcall predicate
- (dll-element dll x1)
- (dll-element dll x2))))))
- dll)
-
-
-(defun dll-filter (dll predicate)
-
- "Remove all elements in the doubly linked list DLL for which PREDICATE
-return nil."
-
- (let* ((dummy (dll-get-dummy-node dll))
- (node (elib-node-right dummy))
- next)
-
- (while (not (eq node dummy))
- (setq next (elib-node-right node))
- (if (funcall predicate (dll-element dll node))
- nil
- (dll-delete dll node))
- (setq node next))))
diff --git a/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-node.el b/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-node.el
deleted file mode 100644
index 6c476a3..0000000
--- a/gnu/usr.bin/cvs/contrib/pcl-cvs/elib-node.el
+++ /dev/null
@@ -1,89 +0,0 @@
-;;;; elib-node.el,v 1.2 1992/04/07 20:49:16 berliner Exp
-;;;; This file implements the nodes used in binary trees and
-;;;; doubly linked lists
-;;;;
-;;;; Copyright (C) 1991 Inge Wallin
-;;;;
-;;;; This file is part of the GNU Emacs lisp library, Elib.
-;;;;
-;;;; GNU Elib is free software; you can redistribute it and/or modify
-;;;; it under the terms of the GNU General Public License as published by
-;;;; the Free Software Foundation; either version 1, or (at your option)
-;;;; any later version.
-;;;;
-;;;; GNU Elib is distributed in the hope that it will be useful,
-;;;; but WITHOUT ANY WARRANTY; without even the implied warranty of
-;;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-;;;; GNU General Public License for more details.
-;;;;
-;;;; You should have received a copy of the GNU General Public License
-;;;; along with GNU Emacs; see the file COPYING. If not, write to
-;;;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-;;;;
-;;;; Author: Inge Wallin
-;;;;
-
-;;;
-;;; A node is implemented as an array with three elements, using
-;;; (elt node 0) as the left pointer
-;;; (elt node 1) as the right pointer
-;;; (elt node 2) as the data
-;;;
-;;; Some types of trees, e.g. AVL trees, need bigger nodes, but
-;;; as long as the first three parts are the left pointer, the
-;;; right pointer and the data field, these macros can be used.
-;;;
-
-
-(provide 'elib-node)
-
-
-(defmacro elib-node-create (left right data)
- "Create a tree node from LEFT, RIGHT and DATA."
- (` (vector (, left) (, right) (, data))))
-
-
-(defmacro elib-node-left (node)
- "Return the left pointer of NODE."
- (` (aref (, node) 0)))
-
-
-(defmacro elib-node-right (node)
- "Return the right pointer of NODE."
- (` (aref (, node) 1)))
-
-
-(defmacro elib-node-data (node)
- "Return the data of NODE."
- (` (aref (, node) 2)))
-
-
-(defmacro elib-node-set-left (node newleft)
- "Set the left pointer of NODE to NEWLEFT."
- (` (aset (, node) 0 (, newleft))))
-
-
-(defmacro elib-node-set-right (node newright)
- "Set the right pointer of NODE to NEWRIGHT."
- (` (aset (, node) 1 (, newright))))
-
-
-(defmacro elib-node-set-data (node newdata)
- "Set the data of NODE to NEWDATA."
- (` (aset (, node) 2 (, newdata))))
-
-
-
-(defmacro elib-node-branch (node branch)
- "Get value of a branch of a node.
-NODE is the node, and BRANCH is the branch.
-0 for left pointer, 1 for right pointer and 2 for the data."
- (` (aref (, node) (, branch))))
-
-
-(defmacro elib-node-set-branch (node branch newval)
- "Set value of a branch of a node.
-NODE is the node, and BRANCH is the branch.
-0 for left pointer, 1 for the right pointer and 2 for the data.
-NEWVAL is new value of the branch."
- (` (aset (, node) (, branch) (, newval))))
diff --git a/gnu/usr.bin/cvs/contrib/rcs-to-cvs b/gnu/usr.bin/cvs/contrib/rcs-to-cvs
deleted file mode 100644
index 5863ed8..0000000
--- a/gnu/usr.bin/cvs/contrib/rcs-to-cvs
+++ /dev/null
@@ -1,184 +0,0 @@
-#!/bin/sh
-#
-# $Id: rcs-to-cvs,v 1.4 1994/09/21 07:23:16 berliner Exp $
-# Based on the CVS 1.0 checkin csh script.
-# Contributed by Per Cederqvist <ceder@signum.se>.
-# Rewritten in sh by David MacKenzie <djm@cygnus.com>.
-#
-# Copyright (c) 1989, Brian Berliner
-#
-# You may distribute under the terms of the GNU General Public License.
-#
-#############################################################################
-#
-# Check in sources that previously were under RCS or no source control system.
-#
-# The repository is the directory where the sources should be deposited.
-#
-# Traverses the current directory, ensuring that an
-# identical directory structure exists in the repository directory. It
-# then checks the files in in the following manner:
-#
-# 1) If the file doesn't yet exist, check it in as revision 1.1
-#
-# The script also is somewhat verbose in letting the user know what is
-# going on. It prints a diagnostic when it creates a new file, or updates
-# a file that has been modified on the trunk.
-#
-# Bugs: doesn't put the files in branch 1.1.1
-# doesn't put in release and vendor tags
-#
-#############################################################################
-
-usage="Usage: rcs-to-cvs [-v] [-m message] [-f message_file] repository"
-vbose=0
-message=""
-message_file=/usr/tmp/checkin.$$
-got_one=0
-
-if [ $# -lt 1 ]; then
- echo "$usage" >&2
- exit 1
-fi
-
-while [ $# -ne 0 ]; do
- case "$1" in
- -v)
- vbose=1
- ;;
- -m)
- shift
- echo $1 > $message_file
- got_one=1
- ;;
- -f)
- shift
- message_file=$1
- got_one=2
- ;;
- *)
- break
- esac
- shift
-done
-
-if [ $# -lt 1 ]; then
- echo "$usage" >&2
- exit 1
-fi
-
-repository=$1
-shift
-
-if [ -z "$CVSROOT" ]; then
- echo "Please the environmental variable CVSROOT to the root" >&2
- echo " of the tree you wish to update" >&2
- exit 1
-fi
-
-if [ $got_one -eq 0 ]; then
- echo "Please Edit this file to contain the RCS log information" >$message_file
- echo "to be associated with this directory (please remove these lines)">>$message_file
- ${EDITOR-/usr/ucb/vi} $message_file
- got_one=1
-fi
-
-umask 22
-
-update_dir=${CVSROOT}/${repository}
-[ ! -d ${update_dir} ] && mkdir $update_dir
-
-if [ -d SCCS ]; then
- echo SCCS files detected! >&2
- exit 1
-fi
-if [ -d RCS ]; then
- co RCS/*
-fi
-
-for name in * .[a-zA-Z0-9]*
-do
- case "$name" in
- RCS | \* | .\[a-zA-Z0-9\]\* ) continue ;;
- esac
- echo $name
- if [ $vbose -ne 0 ]; then
- echo "Updating ${repository}/${name}"
- fi
- if [ -d "$name" ]; then
- if [ ! -d "${update_dir}/${name}" ]; then
- echo "WARNING: Creating new directory ${repository}/${name}"
- mkdir "${update_dir}/${name}"
- if [ $? -ne 0 ]; then
- echo "ERROR: mkdir failed - aborting" >&2
- exit 1
- fi
- fi
- cd "$name"
- if [ $? -ne 0 ]; then
- echo "ERROR: Couldn\'t cd to $name - aborting" >&2
- exit 1
- fi
- if [ $vbose -ne 0 ]; then
- $0 -v -f $message_file "${repository}/${name}"
- else
- $0 -f $message_file "${repository}/${name}"
- fi
- if [ $? -ne 0 ]; then
- exit 1
- fi
- cd ..
- else # if not directory
- if [ ! -f "$name" ]; then
- echo "WARNING: $name is neither a regular file"
- echo " nor a directory - ignored"
- continue
- fi
- file="${update_dir}/${name},v"
- comment=""
- if grep -s '\$Log.*\$' "${name}"; then # If $Log keyword
- myext=`echo $name | sed 's,.*\.,,'`
- [ "$myext" = "$name" ] && myext=
- case "$myext" in
- c | csh | e | f | h | l | mac | me | mm | ms | p | r | red | s | sh | sl | cl | ml | el | tex | y | ye | yr | "" )
- ;;
-
- * )
- echo "For file ${file}:"
- grep '\$Log.*\$' "${name}"
- echo -n "Please insert a comment leader for file ${name} > "
- read comment
- ;;
- esac
- fi
- if [ ! -f "$file" ]; then # If not exists in repository
- if [ ! -f "${update_dir}/Attic/${name},v" ]; then
- echo "WARNING: Creating new file ${repository}/${name}"
- if [ -f RCS/"${name}",v ]; then
- echo "MSG: Copying old rcs file."
- cp RCS/"${name}",v "$file"
- else
- if [ -n "${comment}" ]; then
- rcs -q -i -c"${comment}" -t${message_file} -m'.' "$file"
- fi
- ci -q -u1.1 -t${message_file} -m'.' "$file"
- if [ $? -ne 0 ]; then
- echo "ERROR: Initial check-in of $file failed - aborting" >&2
- exit 1
- fi
- fi
- else
- file="${update_dir}/Attic/${name},v"
- echo "WARNING: IGNORED: ${repository}/Attic/${name}"
- continue
- fi
- else # File existed
- echo "ERROR: File exists in repository: Ignored: $file"
- continue
- fi
- fi
-done
-
-[ $got_one -eq 1 ] && rm -f $message_file
-
-exit 0
diff --git a/gnu/usr.bin/cvs/contrib/rcs2log b/gnu/usr.bin/cvs/contrib/rcs2log
deleted file mode 100644
index d790002..0000000
--- a/gnu/usr.bin/cvs/contrib/rcs2log
+++ /dev/null
@@ -1,326 +0,0 @@
-#!/bin/sh
-
-# RCS to ChangeLog generator
-
-# Generate a change log prefix from RCS/* and the existing ChangeLog (if any).
-# Output the new prefix to standard output.
-# You can edit this prefix by hand, and then prepend it to ChangeLog.
-
-# Ignore log entries that start with `#'.
-# Clump together log entries that start with `{topic} ',
-# where `topic' contains neither white space nor `}'.
-
-# Author: Paul Eggert <eggert@twinsun.com>
-
-# OrigId: rcs2log,v 1.9 1993/01/15 05:33:29 eggert Exp
-
-# Copyright 1992, 1993 Free Software Foundation, Inc.
-
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; see the file COPYING. If not, write to
-# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-
-# Parse options.
-
-# defaults
-indent=8 # indent of log line
-length=79 # suggested max width of log line
-tabwidth=8 # width of horizontal tab
-
-while :
-do
- case $1 in
- -i) indent=${2?};;
- -l) length=${2?};;
- -t) tabwidth=${2?};;
- -*) echo >&2 "$0: usage: $0 [-i indent] [-l length] [-t tabwidth] [file ...]"
- exit 1;;
- *) break
- esac
- shift; shift
-done
-
-
-# Log into $rlogout the revisions checked in since the first ChangeLog entry.
-
-date=1970
-if test -s ChangeLog
-then
- # Add 1 to seconds to avoid duplicating most recent log.
- # It's a good thing `rlog' doesn't mind a time ending in `:60'.
- e='
- /^... ... [ 0-9][0-9] [ 0-9][0-9]:[0-9][0-9]:[0-9][0-9] [0-9]+ /{
- printf "%s%02d %s\n", substr($0,1,17), substr($0,18,2)+1, $5
- exit
- }
- '
- d=`awk "$e" <ChangeLog` || exit
- case $d in
- ?*) date=$d
- esac
-fi
-datearg="-d>$date"
-
-rlogout=/tmp/chg$$
-trap exit 1 2 13 15
-trap 'rm -f $rlogout; exit 1' 0
-
-case $# in
-0) set RCS/*
-esac
-
-rlog "$datearg" "$@" >$rlogout || exit
-
-
-# Get the full name of each author the logs mention, and set initialize_fullname
-# to awk code that initializes the `fullname' awk associative array.
-# Warning: foreign authors (i.e. not known in the passwd file) are mishandled;
-# you have to fix the resulting output by hand.
-
-initialize_fullname=
-authors=`
- sed -n 's|^date: *[0-9]*/[0-9][0-9]/[0-9][0-9] [0-9][0-9]:[0-9][0-9]:[0-9][0-9]; *author: *\([^; ]*\).*|\1|p' <$rlogout |
- sort -u
-`
-case $authors in
-?*)
- initialize_author=
- for author in $authors
- do
- initialize_author="$initialize_author
- author[\"$author\"] = 1
- "
- done
-
- awkscript='
- BEGIN {
- alphabet = "abcdefghijklmnopqrstuvwxyz"
- ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"
- '"$initialize_author"'
- }
- {
- if (author[$1]) {
- fullname = $5
- abbr = index(fullname, "&")
- if (abbr) {
- a = substr($1, 1, 1)
- A = a
- i = index(alphabet, a)
- if (i) A = substr(ALPHABET, i, 1)
- fullname = substr(fullname, 1, abbr-1) A substr($1, 2) substr(fullname, abbr+1)
- }
- printf "fullname[\"%s\"] = \"%s\"\n", $1, fullname
- author[$1] = 0
- }
- }
- '
-
- initialize_fullname=`
- (cat /etc/passwd; ypmatch $authors passwd) 2>/dev/null |
- awk -F: "$awkscript"
- `
-esac
-
-
-# Function to print a single log line.
-# We don't use awk functions, to stay compatible with old awk versions.
-# `Log' is the log message (with \n replaced by \r).
-# `files' contains the affected files.
-printlogline='{
-
- # Following the GNU coding standards, rewrite
- # * file: (function): comment
- # to
- # * file (function): comment
- if (Log ~ /^\([^)]*\): /) {
- i = index(Log, ")")
- files = files " " substr(Log, 1, i)
- Log = substr(Log, i+3)
- }
-
- # If "label: comment" is too long, break the line after the ":".
- sep = " "
- if ('"$length"' <= '"$indent"' + 1 + length(files) + index(Log, "\r")) sep = "\n" indent_string
-
- # Print the label.
- printf "%s*%s:", indent_string, files
-
- # Print each line of the log, transliterating \r to \n.
- while ((i = index(Log, "\r")) != 0) {
- printf "%s%s\n", sep, substr(Log, 1, i-1)
- sep = indent_string
- Log = substr(Log, i+1)
- }
-}'
-
-hostname=`(
- hostname || cat /etc/whoami || uuname -l || uname -n
-) 2>/dev/null` || {
- echo >&2 "$0: cannot deduce hostname"
- exit 1
-}
-
-
-# Process the rlog output, generating ChangeLog style entries.
-
-# First, reformat the rlog output so that each line contains one log entry.
-# Transliterate \n to \r so that multiline entries fit on a single line.
-# Discard irrelevant rlog output.
-awk <$rlogout '
- /^Working file:/ { filename = $3 }
- /^date: /, /^(-----------*|===========*)$/ {
- if ($0 ~ /^branches: /) { next }
- if ($0 ~ /^date: [0-9][ /0-9:]*;/) {
- time = substr($3, 1, length($3)-1)
- author = substr($5, 1, length($5)-1)
- printf "%s %s %s %s \r", filename, $2, time, author
- next
- }
- if ($0 ~ /^(-----------*|===========*)$/) { print ""; next }
- printf "%s\r", $0
- }
-' |
-
-# Now each line is of the form
-# FILENAME YYYY/MM/DD HH:MM:SS AUTHOR \rLOG
-# where \r stands for a carriage return,
-# and each line of the log is terminated by \r instead of \n.
-# Sort the log entries, first by date+time (in reverse order),
-# then by author, then by log entry, and finally by file name (just in case).
-sort +1 -3r +3 +0 |
-
-# Finally, reformat the sorted log entries.
-awk '
- BEGIN {
-
- # Initialize the fullname associative array.
- '"$initialize_fullname"'
-
- # Initialize indent string.
- indent_string = ""
- i = '"$indent"'
- if (0 < '"$tabwidth"')
- for (; '"$tabwidth"' <= i; i -= '"$tabwidth"')
- indent_string = indent_string "\t"
- while (1 <= i--)
- indent_string = indent_string " "
-
- # Set up date conversion tables.
- # RCS uses a nice, clean, sortable format,
- # but ChangeLog wants the traditional, ugly ctime format.
-
- # January 1, 0 AD (Gregorian) was Saturday = 6
- EPOCH_WEEKDAY = 6
- # Of course, there was no 0 AD, but the algorithm works anyway.
-
- w[0]="Sun"; w[1]="Mon"; w[2]="Tue"; w[3]="Wed"
- w[4]="Thu"; w[5]="Fri"; w[6]="Sat"
-
- m[0]="Jan"; m[1]="Feb"; m[2]="Mar"
- m[3]="Apr"; m[4]="May"; m[5]="Jun"
- m[6]="Jul"; m[7]="Aug"; m[8]="Sep"
- m[9]="Oct"; m[10]="Nov"; m[11]="Dec"
-
- # days in non-leap year thus far, indexed by month (0-12)
- mo[0]=0; mo[1]=31; mo[2]=59; mo[3]=90
- mo[4]=120; mo[5]=151; mo[6]=181; mo[7]=212
- mo[8]=243; mo[9]=273; mo[10]=304; mo[11]=334
- mo[12]=365
- }
-
- {
- newlog = substr($0, 1 + index($0, "\r"))
-
- # Ignore log entries prefixed by "#".
- if (newlog ~ /^#/) { next }
-
- if (Log != newlog || date != $2 || author != $4) {
-
- # The previous log and this log differ.
-
- # Print the old log.
- if (date != "") '"$printlogline"'
-
- # Logs that begin with "{clumpname} " should be grouped together,
- # and the clumpname should be removed.
- # Extract the new clumpname from the log header,
- # and use it to decide whether to output a blank line.
- newclumpname = ""
- sep = "\n"
- if (date == "") sep = ""
- if (newlog ~ /^{[^ }]*}[ ]/) {
- i = index(newlog, "}")
- newclumpname = substr(newlog, 1, i)
- while (substr(newlog, i+1) ~ /^[ ]/) i++
- newlog = substr(newlog, i+1)
- if (clumpname == newclumpname) sep = ""
- }
- printf sep
- clumpname = newclumpname
-
- # Get ready for the next log.
- Log = newlog
- if (files != "")
- for (i in filesknown)
- filesknown[i] = 0
- files = ""
- }
- if (date != $2 || author != $4) {
- # The previous date+author and this date+author differ.
- # Print the new one.
- date = $2
- author = $4
-
- # Convert nice RCS date like "1992/01/03 00:03:44"
- # into ugly ctime date like "Fri Jan 3 00:03:44 1992".
- # Calculate day of week from Gregorian calendar.
- i = index($2, "/")
- year = substr($2, 1, i-1) + 0
- monthday = substr($2, i+1)
- i = index(monthday, "/")
- month = substr(monthday, 1, i-1) + 0
- day = substr(monthday, i+1) + 0
- leap = 0
- if (2 < month && year%4 == 0 && (year%100 != 0 || year%400 == 0)) leap = 1
- days_since_Sunday_before_epoch = EPOCH_WEEKDAY + year * 365 + int((year + 3) / 4) - int((year + 99) / 100) + int((year + 399) / 400) + mo[month-1] + leap + day - 1
-
- # Print "date fullname (email address)" if the fullname is known;
- # print "date author" otherwise.
- # Get the fullname from the associative array.
- # The email address is just author@thishostname.
- printf "%s %s %2d %s %d ", w[days_since_Sunday_before_epoch%7], m[month-1], day, $3, year
- if (fullname[author])
- printf "%s (%s@%s)\n\n", fullname[author], author, "'"$hostname"'"
- else
- printf "%s\n\n", author
- }
- if (! filesknown[$1]) {
- filesknown[$1] = 1
- if (files == "") files = " " $1
- else files = files ", " $1
- }
- }
- END {
- # Print the last log.
- if (date != "") {
- '"$printlogline"'
- printf "\n"
- }
- }
-' &&
-
-
-# Exit successfully.
-
-exec rm -f $rlogout
diff --git a/gnu/usr.bin/cvs/contrib/rcs2sccs b/gnu/usr.bin/cvs/contrib/rcs2sccs
deleted file mode 100644
index 054ac6c..0000000
--- a/gnu/usr.bin/cvs/contrib/rcs2sccs
+++ /dev/null
@@ -1,143 +0,0 @@
-#!/bin/sh
-#
-#
-# OrigId: rcs2sccs,v 1.12 90/10/04 20:52:23 kenc Exp Locker: kenc
-# $Id: rcs2sccs,v 1.1 1993/12/06 06:37:14 berliner Exp $
-
-############################################################
-# Error checking
-#
-if [ ! -d SCCS ] ; then
- mkdir SCCS
-fi
-
-logfile=/tmp/rcs2sccs_$$_log
-rm -f $logfile
-tmpfile=/tmp/rcs2sccs_$$_tmp
-rm -f $tmpfile
-emptyfile=/tmp/rcs2sccs_$$_empty
-echo -n "" > $emptyfile
-initialfile=/tmp/rcs2sccs_$$_init
-echo "Initial revision" > $initialfile
-sedfile=/tmp/rcs2sccs_$$_sed
-rm -f $sedfile
-revfile=/tmp/rcs2sccs_$$_rev
-rm -f $revfile
-commentfile=/tmp/rcs2sccs_$$_comment
-rm -f $commentfile
-
-# create the sed script
-cat > $sedfile << EOF
-s,;Id;,%Z%%M% %I% %E%,g
-s,;SunId;,%Z%%M% %I% %E%,g
-s,;RCSfile;,%M%,g
-s,;Revision;,%I%,g
-s,;Date;,%E%,g
-s,;Id:.*;,%Z%%M% %I% %E%,g
-s,;SunId:.*;,%Z%%M% %I% %E%,g
-s,;RCSfile:.*;,%M%,g
-s,;Revision:.*;,%I%,g
-s,;Date:.*;,%E%,g
-EOF
-sed -e 's/;/\\$/g' $sedfile > $tmpfile
-cp $tmpfile $sedfile
-############################################################
-# Loop over every RCS file in RCS dir
-#
-for vfile in *,v; do
- # get rid of the ",v" at the end of the name
- file=`echo $vfile | sed -e 's/,v$//'`
-
- # work on each rev of that file in ascending order
- firsttime=1
- rlog $file | grep "^revision [0-9][0-9]*\." | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u +0 +1 +2 +3 +4 +5 +6 +7 +8 | sed -e 's/ /./g' > $revfile
- for rev in `cat $revfile`; do
- if [ $? != 0 ]; then
- echo ERROR - revision
- exit
- fi
- # get file into current dir and get stats
- date=`rlog -r$rev $file | grep "^date: " | awk '{print $2; exit}' | sed -e 's/^19//'`
- time=`rlog -r$rev $file | grep "^date: " | awk '{print $3; exit}' | sed -e 's/;//'`
- author=`rlog -r$rev $file | grep "^date: " | awk '{print $5; exit}' | sed -e 's/;//'`
- date="$date $time"
- echo ""
- rlog -r$rev $file | sed -e '/^branches: /d' -e '1,/^date: /d' -e '/^===========/d' -e 's/$/\\/' | awk '{if ((total += length($0) + 1) < 510) print $0}' > $commentfile
- echo "==> file $file, rev=$rev, date=$date, author=$author"
- rm -f $file
- co -r$rev $file >> $logfile 2>&1
- if [ $? != 0 ]; then
- echo ERROR - co
- exit
- fi
- echo checked out of RCS
-
- # add SCCS keywords in place of RCS keywords
- sed -f $sedfile $file > $tmpfile
- if [ $? != 0 ]; then
- echo ERROR - sed
- exit
- fi
- echo performed keyword substitutions
- rm -f $file
- cp $tmpfile $file
-
- # check file into SCCS
- if [ "$firsttime" = "1" ]; then
- firsttime=0
- echo about to do sccs admin
- echo sccs admin -n -i$file $file < $commentfile
- sccs admin -n -i$file $file < $commentfile >> $logfile 2>&1
- if [ $? != 0 ]; then
- echo ERROR - sccs admin
- exit
- fi
- echo initial rev checked into SCCS
- else
- case $rev in
- *.*.*.*)
- brev=`echo $rev | sed -e 's/\.[0-9]*$//'`
- sccs admin -fb $file 2>>$logfile
- echo sccs get -e -p -r$brev $file
- sccs get -e -p -r$brev $file >/dev/null 2>>$logfile
- ;;
- *)
- echo sccs get -e -p $file
- sccs get -e -p $file >/dev/null 2>> $logfile
- ;;
- esac
- if [ $? != 0 ]; then
- echo ERROR - sccs get
- exit
- fi
- sccs delta $file < $commentfile >> $logfile 2>&1
- if [ $? != 0 ]; then
- echo ERROR - sccs delta -r$rev $file
- exit
- fi
- echo checked into SCCS
- fi
- sed -e "s;^d D $rev ../../.. ..:..:.. [^ ][^ ]*;d D $rev $date $author;" SCCS/s.$file > $tmpfile
- rm -f SCCS/s.$file
- cp $tmpfile SCCS/s.$file
- chmod 444 SCCS/s.$file
- sccs admin -z $file
- if [ $? != 0 ]; then
- echo ERROR - sccs admin -z
- exit
- fi
- done
- rm -f $file
-done
-
-
-############################################################
-# Clean up
-#
-echo cleaning up...
-rm -f $tmpfile $emptyfile $initialfile $sedfile $commentfile
-echo ===================================================
-echo " Conversion Completed Successfully"
-echo ===================================================
-
-rm -f *,v
diff --git a/gnu/usr.bin/cvs/contrib/sccs2rcs b/gnu/usr.bin/cvs/contrib/sccs2rcs
deleted file mode 100644
index 654024b..0000000
--- a/gnu/usr.bin/cvs/contrib/sccs2rcs
+++ /dev/null
@@ -1,277 +0,0 @@
-#!/bin/csh -f
-#
-# Sccs2rcs is a script to convert an existing SCCS
-# history into an RCS history without losing any of
-# the information contained therein.
-# It has been tested under the following OS's:
-# SunOS 3.5, 4.0.3, 4.1
-# Ultrix-32 2.0, 3.1
-#
-# Things to note:
-# + It will NOT delete or alter your ./SCCS history under any circumstances.
-#
-# + Run in a directory where ./SCCS exists and where you can
-# create ./RCS
-#
-# + /usr/local/bin is put in front of the default path.
-# (SCCS under Ultrix is set-uid sccs, bad bad bad, so
-# /usr/local/bin/sccs here fixes that)
-#
-# + Date, time, author, comments, branches, are all preserved.
-#
-# + If a command fails somewhere in the middle, it bombs with
-# a message -- remove what it's done so far and try again.
-# "rm -rf RCS; sccs unedit `sccs tell`; sccs clean"
-# There is no recovery and exit is far from graceful.
-# If a particular module is hanging you up, consider
-# doing it separately; move it from the current area so that
-# the next run will have a better chance or working.
-# Also (for the brave only) you might consider hacking
-# the s-file for simpler problems: I've successfully changed
-# the date of a delta to be in sync, then run "sccs admin -z"
-# on the thing.
-#
-# + After everything finishes, ./SCCS will be moved to ./old-SCCS.
-#
-# This file may be copied, processed, hacked, mutilated, and
-# even destroyed as long as you don't tell anyone you wrote it.
-#
-# Ken Cox
-# Viewlogic Systems, Inc.
-# kenstir@viewlogic.com
-# ...!harvard!cg-atla!viewlog!kenstir
-#
-# Various hacks made by Brian Berliner before inclusion in CVS contrib area.
-#
-# $Id: sccs2rcs,v 1.1 1992/04/10 03:04:26 berliner Exp $
-
-
-#we'll assume the user set up the path correctly
-# for the Pmax, /usr/ucb/sccs is suid sccs, what a pain
-# /usr/local/bin/sccs should override /usr/ucb/sccs there
-set path = (/usr/local/bin $path)
-
-
-############################################################
-# Error checking
-#
-if (! -w .) then
- echo "Error: ./ not writeable by you."
- exit 1
-endif
-if (! -d SCCS) then
- echo "Error: ./SCCS directory not found."
- exit 1
-endif
-set edits = (`sccs tell`)
-if ($#edits) then
- echo "Error: $#edits file(s) out for edit...clean up before converting."
- exit 1
-endif
-if (-d RCS) then
- echo "Warning: RCS directory exists"
- if (`ls -a RCS | wc -l` > 2) then
- echo "Error: RCS directory not empty
- exit 1
- endif
-else
- mkdir RCS
-endif
-
-sccs clean
-
-set logfile = /tmp/sccs2rcs_$$_log
-rm -f $logfile
-set tmpfile = /tmp/sccs2rcs_$$_tmp
-rm -f $tmpfile
-set emptyfile = /tmp/sccs2rcs_$$_empty
-echo -n "" > $emptyfile
-set initialfile = /tmp/sccs2rcs_$$_init
-echo "Initial revision" > $initialfile
-set sedfile = /tmp/sccs2rcs_$$_sed
-rm -f $sedfile
-set revfile = /tmp/sccs2rcs_$$_rev
-rm -f $revfile
-
-# the quotes surround the dollar signs to fool RCS when I check in this script
-set sccs_keywords = (\
- '%W%[ ]*%G%'\
- '%W%[ ]*%E%'\
- '%W%'\
- '%Z%%M%[ ]*%I%[ ]*%G%'\
- '%Z%%M%[ ]*%I%[ ]*%E%'\
- '%M%[ ]*%I%[ ]*%G%'\
- '%M%[ ]*%I%[ ]*%E%'\
- '%M%'\
- '%I%'\
- '%G%'\
- '%E%'\
- '%U%')
-set rcs_keywords = (\
- '$'Id'$'\
- '$'Id'$'\
- '$'Id'$'\
- '$'SunId'$'\
- '$'SunId'$'\
- '$'Id'$'\
- '$'Id'$'\
- '$'RCSfile'$'\
- '$'Revision'$'\
- '$'Date'$'\
- '$'Date'$'\
- '')
-
-
-############################################################
-# Get some answers from user
-#
-echo ""
-echo "Do you want to be prompted for a description of each"
-echo "file as it is checked in to RCS initially?"
-echo -n "(y=prompt for description, n=null description) [y] ?"
-set ans = $<
-if ((_$ans == _) || (_$ans == _y) || (_$ans == _Y)) then
- set nodesc = 0
-else
- set nodesc = 1
-endif
-echo ""
-echo "The default keyword substitutions are as follows and are"
-echo "applied in the order specified:"
-set i = 1
-while ($i <= $#sccs_keywords)
-# echo ' '\"$sccs_keywords[$i]\"' ==> '\"$rcs_keywords[$i]\"
- echo " $sccs_keywords[$i] ==> $rcs_keywords[$i]"
- @ i = $i + 1
-end
-echo ""
-echo -n "Do you want to change them [n] ?"
-set ans = $<
-if ((_$ans != _) && (_$ans != _n) && (_$ans != _N)) then
- echo "You can't always get what you want."
- echo "Edit this script file and change the variables:"
- echo ' $sccs_keywords'
- echo ' $rcs_keywords'
-else
- echo "good idea."
-endif
-
-# create the sed script
-set i = 1
-while ($i <= $#sccs_keywords)
- echo "s,$sccs_keywords[$i],$rcs_keywords[$i],g" >> $sedfile
- @ i = $i + 1
-end
-
-onintr ERROR
-
-############################################################
-# Loop over every s-file in SCCS dir
-#
-foreach sfile (SCCS/s.*)
- # get rid of the "s." at the beginning of the name
- set file = `echo $sfile:t | sed -e "s/^..//"`
-
- # work on each rev of that file in ascending order
- set firsttime = 1
- sccs prs $file | grep "^D " | awk '{print $2}' | sed -e 's/\./ /g' | sort -n -u +0 +1 +2 +3 +4 +5 +6 +7 +8 | sed -e 's/ /./g' > $revfile
- foreach rev (`cat $revfile`)
- if ($status != 0) goto ERROR
-
- # get file into current dir and get stats
- set date = `sccs prs -r$rev $file | grep "^D " | awk '{printf("19%s %s", $3, $4); exit}'`
- set author = `sccs prs -r$rev $file | grep "^D " | awk '{print $5; exit}'`
- echo ""
- echo "==> file $file, rev=$rev, date=$date, author=$author"
- sccs edit -r$rev $file >>& $logfile
- if ($status != 0) goto ERROR
- echo checked out of SCCS
-
- # add RCS keywords in place of SCCS keywords
- sed -f $sedfile $file > $tmpfile
- if ($status != 0) goto ERROR
- echo performed keyword substitutions
- cp $tmpfile $file
-
- # check file into RCS
- if ($firsttime) then
- set firsttime = 0
- if ($nodesc) then
- echo about to do ci
- echo ci -f -r$rev -d"$date" -w$author -t$emptyfile $file
- ci -f -r$rev -d"$date" -w$author -t$emptyfile $file < $initialfile >>& $logfile
- if ($status != 0) goto ERROR
- echo initial rev checked into RCS without description
- else
- echo ""
- echo Enter a brief description of the file $file \(end w/ Ctrl-D\):
- cat > $tmpfile
- ci -f -r$rev -d"$date" -w$author -t$tmpfile $file < $initialfile >>& $logfile
- if ($status != 0) goto ERROR
- echo initial rev checked into RCS
- endif
- else
- # get RCS lock
- set lckrev = `echo $rev | sed -e 's/\.[0-9]*$//'`
- if ("$lckrev" =~ [0-9]*.*) then
- # need to lock the brach -- it is OK if the lock fails
- rcs -l$lckrev $file >>& $logfile
- else
- # need to lock the trunk -- must succeed
- rcs -l $file >>& $logfile
- if ($status != 0) goto ERROR
- endif
- echo got lock
- sccs prs -r$rev $file | grep "." > $tmpfile
- # it's OK if grep fails here and gives status == 1
- # put the delta message in $tmpfile
- ed $tmpfile >>& $logfile <<EOF
-/COMMENTS
-1,.d
-w
-q
-EOF
- ci -f -r$rev -d"$date" -w$author $file < $tmpfile >>& $logfile
- if ($status != 0) goto ERROR
- echo checked into RCS
- endif
- sccs unedit $file >>& $logfile
- if ($status != 0) goto ERROR
- end
- rm -f $file
-end
-
-
-############################################################
-# Clean up
-#
-echo cleaning up...
-mv SCCS old-SCCS
-rm -f $tmpfile $emptyfile $initialfile $sedfile
-echo ===================================================
-echo " Conversion Completed Successfully"
-echo ""
-echo " SCCS history now in old-SCCS/"
-echo ===================================================
-set exitval = 0
-goto cleanup
-
-ERROR:
-foreach f (`sccs tell`)
- sccs unedit $f
-end
-echo ""
-echo ""
-echo Danger\! Danger\!
-echo Some command exited with a non-zero exit status.
-echo Log file exists in $logfile.
-echo ""
-echo Incomplete history in ./RCS -- remove it
-echo Original unchanged history in ./SCCS
-set exitval = 1
-
-cleanup:
-# leave log file
-rm -f $tmpfile $emptyfile $initialfile $sedfile $revfile
-
-exit $exitval
diff --git a/gnu/usr.bin/cvs/cvs/cvsbug.sh b/gnu/usr.bin/cvs/cvs/cvsbug.sh
deleted file mode 100644
index 8c6a5bb..0000000
--- a/gnu/usr.bin/cvs/cvs/cvsbug.sh
+++ /dev/null
@@ -1,533 +0,0 @@
-#!/bin/sh
-# Submit a problem report to a GNATS site.
-# Copyright (C) 1993 Free Software Foundation, Inc.
-# Contributed by Brendan Kehoe (brendan@cygnus.com), based on a
-# version written by Heinz G. Seidl (hgs@ide.com).
-#
-# This file is part of GNU GNATS.
-# Modified by Berliner for CVS.
-# $CVSid: @(#)cvsbug.sh 1.2 94/10/22 $
-#
-# GNU GNATS is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2, or (at your option)
-# any later version.
-#
-# GNU GNATS is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with GNU GNATS; see the file COPYING. If not, write to
-# the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
-
-# The version of this send-pr.
-VERSION=3.2
-
-# The submitter-id for your site.
-SUBMITTER=net
-
-## # Where the GNATS directory lives, if at all.
-## [ -z "$GNATS_ROOT" ] &&
-## GNATS_ROOT=/usr/local/lib/gnats/gnats-db
-
-# The default mail address for PR submissions.
-GNATS_ADDR=bug-cvs@prep.ai.mit.edu
-
-## # Where the gnats category tree lives.
-## DATADIR=/usr/local/lib
-
-## # If we've been moved around, try using GCC_EXEC_PREFIX.
-## [ ! -d $DATADIR/gnats -a -d "$GCC_EXEC_PREFIX" ] && DATADIR=${GCC_EXEC_PREFIX}..
-
-# The default release for this host.
-DEFAULT_RELEASE="cvs-1.4A2"
-
-# The default organization.
-DEFAULT_ORGANIZATION="net"
-
-## # The default site to look for.
-## GNATS_SITE=unknown
-
-## # Newer config information?
-## [ -f ${GNATS_ROOT}/gnats-adm/config ] && . ${GNATS_ROOT}/gnats-adm/config
-
-# What mailer to use. This must come after the config file, since it is
-# host-dependent.
-MAIL_AGENT="/usr/lib/sendmail -oi -t"
-MAILER=`echo $MAIL_AGENT | sed -e 's, .*,,'`
-if [ ! -f "$MAILER" ] ; then
- echo "$COMMAND: Cannot file mail program \"$MAILER\"."
- echo "$COMMAND: Please fix the MAIL_AGENT entry in the $COMMAND file."
- exit 1
-fi
-
-if test "`echo -n foo`" = foo ; then
- ECHON=bsd
-elif test "`echo 'foo\c'`" = foo ; then
- ECHON=sysv
-else
- ECHON=none
-fi
-
-if [ $ECHON = bsd ] ; then
- ECHON1="echo -n"
- ECHON2=
-elif [ $ECHON = sysv ] ; then
- ECHON1=echo
- ECHON2='\c'
-else
- ECHON1=echo
- ECHON2=
-fi
-
-#
-
-[ -z "$TMPDIR" ] && TMPDIR=/tmp
-
-TEMP=$TMPDIR/p$$
-BAD=$TMPDIR/pbad$$
-REF=$TMPDIR/pf$$
-
-if [ -z "$LOGNAME" -a -n "$USER" ]; then
- LOGNAME=$USER
-fi
-
-FROM="$LOGNAME"
-REPLY_TO="$LOGNAME"
-
-# Find out the name of the originator of this PR.
-if [ -n "$NAME" ]; then
- ORIGINATOR="$NAME"
-elif [ -f $HOME/.fullname ]; then
- ORIGINATOR="`sed -e '1q' $HOME/.fullname`"
-elif [ -f /bin/domainname ]; then
- if [ "`/bin/domainname`" != "" -a -f /usr/bin/ypcat ]; then
- # Must use temp file due to incompatibilities in quoting behavior
- # and to protect shell metacharacters in the expansion of $LOGNAME
- /usr/bin/ypcat passwd 2>/dev/null | cat - /etc/passwd | grep "^$LOGNAME:" |
- cut -f5 -d':' | sed -e 's/,.*//' > $TEMP
- ORIGINATOR="`cat $TEMP`"
- rm -f $TEMP
- fi
-fi
-
-if [ "$ORIGINATOR" = "" ]; then
- grep "^$LOGNAME:" /etc/passwd | cut -f5 -d':' | sed -e 's/,.*//' > $TEMP
- ORIGINATOR="`cat $TEMP`"
- rm -f $TEMP
-fi
-
-if [ -n "$ORGANIZATION" ]; then
- if [ -f "$ORGANIZATION" ]; then
- ORGANIZATION="`cat $ORGANIZATION`"
- fi
-else
- if [ -n "$DEFAULT_ORGANIZATION" ]; then
- ORGANIZATION="$DEFAULT_ORGANIZATION"
- elif [ -f $HOME/.organization ]; then
- ORGANIZATION="`cat $HOME/.organization`"
- elif [ -f $HOME/.signature ]; then
- ORGANIZATION="`cat $HOME/.signature`"
- fi
-fi
-
-# If they don't have a preferred editor set, then use
-if [ -z "$VISUAL" ]; then
- if [ -z "$EDITOR" ]; then
- EDIT=vi
- else
- EDIT="$EDITOR"
- fi
-else
- EDIT="$VISUAL"
-fi
-
-# Find out some information.
-SYSTEM=`( [ -f /bin/uname ] && /bin/uname -a ) || \
- ( [ -f /usr/bin/uname ] && /usr/bin/uname -a ) || echo ""`
-ARCH=`[ -f /bin/arch ] && /bin/arch`
-MACHINE=`[ -f /bin/machine ] && /bin/machine`
-
-COMMAND=`echo $0 | sed -e 's,.*/,,'`
-## USAGE="Usage: $COMMAND [-PVL] [-t address] [-f filename] [--request-id]
-USAGE="Usage: $COMMAND [-PVL]
-[--version]"
-REMOVE=
-BATCH=
-
-while [ $# -gt 0 ]; do
- case "$1" in
- -r) ;; # Ignore for backward compat.
-## -t | --to) if [ $# -eq 1 ]; then echo "$USAGE"; exit 1; fi
-## shift ; GNATS_ADDR="$1"
-## EXPLICIT_GNATS_ADDR=true
-## ;;
-## -f | --file) if [ $# -eq 1 ]; then echo "$USAGE"; exit 1; fi
-## shift ; IN_FILE="$1"
-## if [ "$IN_FILE" != "-" -a ! -r "$IN_FILE" ]; then
-## echo "$COMMAND: cannot read $IN_FILE"
-## exit 1
-## fi
-## ;;
- -b | --batch) BATCH=true ;;
- -p | -P | --print) PRINT=true ;;
- -L | --list) FORMAT=norm ;;
- -l | -CL | --lisp) FORMAT=lisp ;;
-## --request-id) REQUEST_ID=true ;;
- -h | --help) echo "$USAGE"; exit 0 ;;
- -V | --version) echo "$VERSION"; exit 0 ;;
- -*) echo "$USAGE" ; exit 1 ;;
- *) echo "$USAGE" ; exit 1
-## if [ -z "$USER_GNATS_SITE" ]; then
-## if [ ! -r "$DATADIR/gnats/$1" ]; then
-## echo "$COMMAND: the GNATS site $1 does not have a categories list."
-## exit 1
-## else
-## # The site name is the alias they'll have to have created.
-## USER_GNATS_SITE=$1
-## fi
-## else
-## echo "$USAGE" ; exit 1
-## fi
- ;;
- esac
- shift
-done
-
-if [ -n "$USER_GNATS_SITE" ]; then
- GNATS_SITE=$USER_GNATS_SITE
- GNATS_ADDR=$USER_GNATS_SITE-gnats
-fi
-
-if [ "$SUBMITTER" = "unknown" -a -z "$REQUEST_ID" -a -z "$IN_FILE" ]; then
- cat << '__EOF__'
-It seems that send-pr is not installed with your unique submitter-id.
-You need to run
-
- install-sid YOUR-SID
-
-where YOUR-SID is the identification code you received with `send-pr'.
-`send-pr' will automatically insert this value into the template field
-`>Submitter-Id'. If you've downloaded `send-pr' from the Net, use `net'
-for this value. If you do not know your id, run `send-pr --request-id' to
-get one from your support site.
-__EOF__
- exit 1
-fi
-
-## if [ -r "$DATADIR/gnats/$GNATS_SITE" ]; then
-## CATEGORIES=`grep -v '^#' $DATADIR/gnats/$GNATS_SITE | sort`
-## else
-## echo "$COMMAND: could not read $DATADIR/gnats/$GNATS_SITE for categories list."
-## exit 1
-## fi
-CATEGORIES="contrib cvs doc pcl-cvs portability"
-
-if [ -z "$CATEGORIES" ]; then
- echo "$COMMAND: the categories list for $GNATS_SITE was empty!"
- exit 1
-fi
-
-case "$FORMAT" in
- lisp) echo "$CATEGORIES" | \
- awk 'BEGIN {printf "( "} {printf "(\"%s\") ",$0} END {printf ")\n"}'
- exit 0
- ;;
- norm) l=`echo "$CATEGORIES" | \
- awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } }
- END {print max + 1;}'`
- c=`expr 70 / $l`
- if [ $c -eq 0 ]; then c=1; fi
- echo "$CATEGORIES" | \
- awk 'BEGIN {print "Known categories:"; i = 0 }
- { printf ("%-'$l'.'$l's", $0); if ((++i % '$c') == 0) { print "" } }
- END { print ""; }'
- exit 0
- ;;
-esac
-
-ORIGINATOR_C='<name of the PR author (one line)>'
-ORGANIZATION_C='<organization of PR author (multiple lines)>'
-CONFIDENTIAL_C='<[ yes | no ] (one line)>'
-SYNOPSIS_C='<synopsis of the problem (one line)>'
-SEVERITY_C='<[ non-critical | serious | critical ] (one line)>'
-PRIORITY_C='<[ low | medium | high ] (one line)>'
-CATEGORY_C='<name of the product (one line)>'
-CLASS_C='<[ sw-bug | doc-bug | change-request | support ] (one line)>'
-RELEASE_C='<release number or tag (one line)>'
-ENVIRONMENT_C='<machine, os, target, libraries (multiple lines)>'
-DESCRIPTION_C='<precise description of the problem (multiple lines)>'
-HOW_TO_REPEAT_C='<code/input/activities to reproduce the problem (multiple lines)>'
-FIX_C='<how to correct or work around the problem, if known (multiple lines)>'
-
-# Catch some signals. ($xs kludge needed by Sun /bin/sh)
-xs=0
-trap 'rm -f $REF $TEMP; exit $xs' 0
-trap 'echo "$COMMAND: Aborting ..."; rm -f $REF $TEMP; xs=1; exit' 1 2 3 13 15
-
-# If they told us to use a specific file, then do so.
-if [ -n "$IN_FILE" ]; then
- if [ "$IN_FILE" = "-" ]; then
- # The PR is coming from the standard input.
- if [ -n "$EXPLICIT_GNATS_ADDR" ]; then
- sed -e "s;^[Tt][Oo]:.*;To: $GNATS_ADDR;" > $TEMP
- else
- cat > $TEMP
- fi
- else
- # Use the file they named.
- if [ -n "$EXPLICIT_GNATS_ADDR" ]; then
- sed -e "s;^[Tt][Oo]:.*;To: $GNATS_ADDR;" $IN_FILE > $TEMP
- else
- cat $IN_FILE > $TEMP
- fi
- fi
-else
-
- if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then
- # If their PR_FORM points to a bogus entry, then bail.
- if [ ! -f "$PR_FORM" -o ! -r "$PR_FORM" -o ! -s "$PR_FORM" ]; then
- echo "$COMMAND: can't seem to read your template file (\`$PR_FORM'), ignoring PR_FORM"
- sleep 1
- PRINT_INTERN=bad_prform
- fi
- fi
-
- if [ -n "$PR_FORM" -a -z "$PRINT_INTERN" ]; then
- cp $PR_FORM $TEMP ||
- ( echo "$COMMAND: could not copy $PR_FORM" ; xs=1; exit )
- else
- for file in $TEMP $REF ; do
- cat > $file << '__EOF__'
-SEND-PR: -*- send-pr -*-
-SEND-PR: Lines starting with `SEND-PR' will be removed automatically, as
-SEND-PR: will all comments (text enclosed in `<' and `>').
-SEND-PR:
-SEND-PR: Choose from the following categories:
-SEND-PR:
-__EOF__
-
- # Format the categories so they fit onto lines.
- l=`echo "$CATEGORIES" | \
- awk 'BEGIN {max = 0; } { if (length($0) > max) { max = length($0); } }
- END {print max + 1;}'`
- c=`expr 61 / $l`
- if [ $c -eq 0 ]; then c=1; fi
- echo "$CATEGORIES" | \
- awk 'BEGIN {printf "SEND-PR: "; i = 0 }
- { printf ("%-'$l'.'$l's", $0);
- if ((++i % '$c') == 0) { printf "\nSEND-PR: " } }
- END { printf "\nSEND-PR:\n"; }' >> $file
-
- cat >> $file << __EOF__
-To: $GNATS_ADDR
-Subject:
-From: $FROM
-Reply-To: $REPLY_TO
-X-send-pr-version: $VERSION
-
-
->Submitter-Id: $SUBMITTER
->Originator: $ORIGINATOR
->Organization:
-`
- if [ -n "$ORGANIZATION" ]; then
- echo "$ORGANIZATION"
- else
- echo " $ORGANIZATION_C" ;
- fi ;
-`
->Confidential: $CONFIDENTIAL_C
->Synopsis: $SYNOPSIS_C
->Severity: $SEVERITY_C
->Priority: $PRIORITY_C
->Category: $CATEGORY_C
->Class: $CLASS_C
->Release: `if [ -n "$DEFAULT_RELEASE" ]; then
- echo "$DEFAULT_RELEASE"
- else
- echo " $RELEASE_C"
- fi; `
->Environment:
- $ENVIRONMENT_C
-`[ -n "$SYSTEM" ] && echo System: $SYSTEM`
-`[ -n "$ARCH" ] && echo Architecture: $ARCH`
-`[ -n "$MACHINE" ] && echo Machine: $MACHINE`
->Description:
- $DESCRIPTION_C
->How-To-Repeat:
- $HOW_TO_REPEAT_C
->Fix:
- $FIX_C
-__EOF__
- done
- fi
-
- if [ "$PRINT" = true -o "$PRINT_INTERN" = true ]; then
- cat $TEMP
- xs=0; exit
- fi
-
- chmod u+w $TEMP
- if [ -z "$REQUEST_ID" ]; then
- eval $EDIT $TEMP
- else
- ed -s $TEMP << '__EOF__'
-/^Subject/s/^Subject:.*/Subject: request for a customer id/
-/^>Category/s/^>Category:.*/>Category: send-pr/
-w
-q
-__EOF__
- fi
-
- if cmp -s $REF $TEMP ; then
- echo "$COMMAND: problem report not filled out, therefore not sent"
- xs=1; exit
- fi
-fi
-
-#
-# Check the enumeration fields
-
-# This is a "sed-subroutine" with one keyword parameter
-# (with workaround for Sun sed bug)
-#
-SED_CMD='
-/$PATTERN/{
-s|||
-s|<.*>||
-s|^[ ]*||
-s|[ ]*$||
-p
-q
-}'
-
-
-while [ -z "$REQUEST_ID" ]; do
- CNT=0
-
- # 1) Confidential
- #
- PATTERN=">Confidential:"
- CONFIDENTIAL=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
- case "$CONFIDENTIAL" in
- ""|yes|no) CNT=`expr $CNT + 1` ;;
- *) echo "$COMMAND: \`$CONFIDENTIAL' is not a valid value for \`Confidential'." ;;
- esac
- #
- # 2) Severity
- #
- PATTERN=">Severity:"
- SEVERITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
- case "$SEVERITY" in
- ""|non-critical|serious|critical) CNT=`expr $CNT + 1` ;;
- *) echo "$COMMAND: \`$SEVERITY' is not a valid value for \`Severity'."
- esac
- #
- # 3) Priority
- #
- PATTERN=">Priority:"
- PRIORITY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
- case "$PRIORITY" in
- ""|low|medium|high) CNT=`expr $CNT + 1` ;;
- *) echo "$COMMAND: \`$PRIORITY' is not a valid value for \`Priority'."
- esac
- #
- # 4) Category
- #
- PATTERN=">Category:"
- CATEGORY=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
- FOUND=
- for C in $CATEGORIES
- do
- if [ "$C" = "$CATEGORY" ]; then FOUND=true ; break ; fi
- done
- if [ -n "$FOUND" ]; then
- CNT=`expr $CNT + 1`
- else
- if [ -z "$CATEGORY" ]; then
- echo "$COMMAND: you must include a Category: field in your report."
- else
- echo "$COMMAND: \`$CATEGORY' is not a known category."
- fi
- fi
- #
- # 5) Class
- #
- PATTERN=">Class:"
- CLASS=`eval sed -n -e "\"$SED_CMD\"" $TEMP`
- case "$CLASS" in
- ""|sw-bug|doc-bug|change-request|support) CNT=`expr $CNT + 1` ;;
- *) echo "$COMMAND: \`$CLASS' is not a valid value for \`Class'."
- esac
-
- [ $CNT -lt 5 -a -z "$BATCH" ] &&
- echo "Errors were found with the problem report."
-
- while true; do
- if [ -z "$BATCH" ]; then
- $ECHON1 "a)bort, e)dit or s)end? $ECHON2"
- read input
- else
- if [ $CNT -eq 5 ]; then
- input=s
- else
- input=a
- fi
- fi
- case "$input" in
- a*)
- if [ -z "$BATCH" ]; then
- echo "$COMMAND: the problem report remains in $BAD and is not sent."
- mv $TEMP $BAD
- else
- echo "$COMMAND: the problem report is not sent."
- fi
- xs=1; exit
- ;;
- e*)
- eval $EDIT $TEMP
- continue 2
- ;;
- s*)
- break 2
- ;;
- esac
- done
-done
-#
-# Remove comments and send the problem report
-# (we have to use patterns, where the comment contains regex chars)
-#
-# /^>Originator:/s;$ORIGINATOR;;
-sed -e "
-/^SEND-PR:/d
-/^>Organization:/,/^>[A-Za-z-]*:/s;$ORGANIZATION_C;;
-/^>Confidential:/s;<.*>;;
-/^>Synopsis:/s;$SYNOPSIS_C;;
-/^>Severity:/s;<.*>;;
-/^>Priority:/s;<.*>;;
-/^>Category:/s;$CATEGORY_C;;
-/^>Class:/s;<.*>;;
-/^>Release:/,/^>[A-Za-z-]*:/s;$RELEASE_C;;
-/^>Environment:/,/^>[A-Za-z-]*:/s;$ENVIRONMENT_C;;
-/^>Description:/,/^>[A-Za-z-]*:/s;$DESCRIPTION_C;;
-/^>How-To-Repeat:/,/^>[A-Za-z-]*:/s;$HOW_TO_REPEAT_C;;
-/^>Fix:/,/^>[A-Za-z-]*:/s;$FIX_C;;
-" $TEMP > $REF
-
-if $MAIL_AGENT < $REF; then
- echo "$COMMAND: problem report sent"
- xs=0; exit
-else
- echo "$COMMAND: mysterious mail failure."
- if [ -z "$BATCH" ]; then
- echo "$COMMAND: the problem report remains in $BAD and is not sent."
- mv $REF $BAD
- else
- echo "$COMMAND: the problem report is not sent."
- fi
- xs=1; exit
-fi
diff --git a/gnu/usr.bin/cvs/cvs/sanity.el b/gnu/usr.bin/cvs/cvs/sanity.el
deleted file mode 100644
index a147057..0000000
--- a/gnu/usr.bin/cvs/cvs/sanity.el
+++ /dev/null
@@ -1,18 +0,0 @@
-;;;; -*- lisp-interaction -*-
-;;;; Time-stamp: <29 Nov 93 14:25:28, by rich@sendai.cygnus.com>
-
-(defun reset-fail-counter (arg)
- (interactive "p")
- (setq fail-counter arg)
- (message (concat "fail-counter = " (int-to-string arg))))
-
-
-(defun inc-next-fail-counter nil
- (interactive)
- (search-forward "failed test ")
- (kill-word 1)
- (insert-string fail-counter)
- (setq fail-counter (+ 1 fail-counter)))
-
-(global-set-key [f15] 'reset-fail-counter)
-(global-set-key [f16] 'inc-next-fail-counter)
diff --git a/gnu/usr.bin/cvs/cvsinit/cvsinit b/gnu/usr.bin/cvs/cvsinit/cvsinit
deleted file mode 100644
index 23c6651..0000000
--- a/gnu/usr.bin/cvs/cvsinit/cvsinit
+++ /dev/null
@@ -1,161 +0,0 @@
-#! /bin/sh
-:
-#
-#ident "@(#)cvs:$Name: $:$Id: cvsinit.sh,v 1.7 1995/11/14 23:44:18 woods Exp $"
-# Copyright (c) 1992, Brian Berliner
-#
-# You may distribute under the terms of the GNU General Public License as
-# specified in the README file that comes with the CVS 1.4 kit.
-
-# This script should be run for each repository you create to help you
-# setup your site for CVS. You may also run it to update existing
-# repositories if you install a new version of CVS.
-
-# this line is edited by Makefile when creating cvsinit.inst
-CVSLIB="/usr/share/examples/cvs"
-
-CVS_VERSION="cvs-1.6.3"
-
-# All purpose usage message, also suffices for --help and --version.
-if test $# -gt 0; then
- echo "cvsinit version $CVS_VERSION"
- echo "usage: $0"
- echo "(set CVSROOT to the repository that you want to initialize)"
- exit 0
-fi
-
-# Make sure that the CVSROOT variable is set
-if [ "x$CVSROOT" = x ]; then
- echo "The CVSROOT environment variable is not set."
- echo ""
- echo "You should choose a location for your source repository"
- echo "that can be shared by many developers. It also helps to"
- echo "place the source repository on a file system that has"
- echo "plenty of free space."
- echo ""
- echo "Please enter the full path for your CVSROOT source repository:"
- read CVSROOT junk
- unset junk
- remind_cvsroot=yes
-else
- remind_cvsroot=no
-fi
-
-# Now, create the $CVSROOT if it is not already there
-if [ ! -d $CVSROOT ]; then
- echo "Creating $CVSROOT..."
- path=
- for comp in `echo $CVSROOT | sed -e 's,/, ,g'`; do
- path=$path/$comp
- if [ ! -d $path ]; then
- mkdir $path
- fi
- done
-else
- true
-fi
-
-# Next, check for $CVSROOT/CVSROOT
-if [ ! -d $CVSROOT/CVSROOT ]; then
- if [ -d $CVSROOT/CVSROOT.adm ]; then
- echo "You have the old $CVSROOT/CVSROOT.adm directory."
- echo "I will rename it to $CVSROOT/CVSROOT for you..."
- mv $CVSROOT/CVSROOT.adm $CVSROOT/CVSROOT
- else
- echo "Creating the $CVSROOT/CVSROOT directory..."
- mkdir $CVSROOT/CVSROOT
- fi
-else
- true
-fi
-if [ ! -d $CVSROOT/CVSROOT ]; then
- echo "Unable to create $CVSROOT/CVSROOT."
- echo "I give up."
- exit 1
-fi
-
-# Create the special control files and templates within $CVSROOT/CVSROOT
-
-EXAMPLES="checkoutlist commitinfo cvswrappers editinfo loginfo modules
-rcsinfo rcstemplate taginfo wrap unwrap"
-
-NEWSAMPLE=false
-for info in $EXAMPLES; do
- if [ -f $CVSROOT/CVSROOT/${info},v ]; then
- if [ ! -f $CVSROOT/CVSROOT/$info ]; then
- echo "Checking out $CVSROOT/CVSROOT/$info"
- echo " from $CVSROOT/CVSROOT/${info},v..."
- (cd $CVSROOT/CVSROOT; co -q $info)
- fi
- else
- NEWSAMPLE=true
- if [ -f $CVSROOT/CVSROOT/$info ]; then
- echo "Checking in $CVSROOT/CVSROOT/${info},v"
- echo " from $CVSROOT/CVSROOT/$info..."
- else
- echo "Creating a sample $CVSROOT/CVSROOT/$info file..."
- case $info in
- modules)
- sed -n -e '/END_REQUIRED_CONTENT/q' \
- -e p $CVSLIB/examples/modules > $CVSROOT/CVSROOT/modules
- ;;
- rcstemplate)
- cp $CVSLIB/examples/$info $CVSROOT/CVSROOT/$info
- ;;
- wrap|unwrap)
- cp $CVSLIB/examples/$info $CVSROOT/CVSROOT/$info
- chmod +x $CVSROOT/CVSROOT/$info
- ;;
- *)
- # comment out everything in all the other examples....
- sed -e 's/^\([^#]\)/#\1/' $CVSLIB/examples/$info > $CVSROOT/CVSROOT/$info
- ;;
- esac
- fi
- (cd $CVSROOT/CVSROOT; ci -q -u -t/dev/null -m"initial checkin of $info" $info)
- fi
-done
-
-if $NEWSAMPLE ; then
- echo "NOTE: You may wish to check out the CVSROOT module and edit any new"
- echo "configuration files to match your local requirements."
- echo ""
-fi
-
-# check to see if there are any references to the old CVSROOT.adm directory
-if grep CVSROOT.adm $CVSROOT/CVSROOT/modules >/dev/null 2>&1; then
- echo "Warning: your $CVSROOT/CVSROOT/modules file still"
- echo " contains references to the old CVSROOT.adm directory"
- echo " You should really change these to the new CVSROOT directory"
- echo ""
-fi
-
-# These files are generated from the contrib files.
-# FIXME: Is it really wise to overwrite possible local changes like this?
-# Normal folks will keep these up to date by modifying the source in
-# their CVS module and re-installing CVS, but is everyone OK with that?
-#
-#
-CONTRIBS="log commit_prep log_accum cln_hist"
-#
-for contrib in $CONTRIBS; do
- echo "Copying the new version of '${contrib}'"
- echo " to $CVSROOT/CVSROOT for you..."
- cp $CVSLIB/contrib/$contrib $CVSROOT/CVSROOT/$contrib
-done
-
-# XXX - also add a stub for the cvsignore file
-
-# Turn on history logging by default
-if [ ! -f $CVSROOT/CVSROOT/history ]; then
- echo "Enabling CVS history logging..."
- touch $CVSROOT/CVSROOT/history
- chmod g+w $CVSROOT/CVSROOT/history
- echo "(Remove $CVSROOT/CVSROOT/history to disable.)"
-fi
-
-# finish up by running mkmodules
-echo "All done! Running 'mkmodules' as my final step..."
-mkmodules $CVSROOT/CVSROOT
-
-exit 0
diff --git a/gnu/usr.bin/cvs/lib/alloca.c b/gnu/usr.bin/cvs/lib/alloca.c
deleted file mode 100644
index b57659e..0000000
--- a/gnu/usr.bin/cvs/lib/alloca.c
+++ /dev/null
@@ -1,191 +0,0 @@
-/*
- alloca -- (mostly) portable public-domain implementation -- D A Gwyn
-
- last edit: 86/05/30 rms
- include config.h, since on VMS it renames some symbols.
- Use xmalloc instead of malloc.
-
- This implementation of the PWB library alloca() function,
- which is used to allocate space off the run-time stack so
- that it is automatically reclaimed upon procedure exit,
- was inspired by discussions with J. Q. Johnson of Cornell.
-
- It should work under any C implementation that uses an
- actual procedure stack (as opposed to a linked list of
- frames). There are some preprocessor constants that can
- be defined when compiling for your specific system, for
- improved efficiency; however, the defaults should be okay.
-
- The general concept of this implementation is to keep
- track of all alloca()-allocated blocks, and reclaim any
- that are found to be deeper in the stack than the current
- invocation. This heuristic does not reclaim storage as
- soon as it becomes invalid, but it will do so eventually.
-
- As a special case, alloca(0) reclaims storage without
- allocating any. It is a good idea to use alloca(0) in
- your main control loop, etc. to force garbage collection.
-*/
-#ifndef lint
-static char SCCSid[] = "@(#)alloca.c 1.1"; /* for the "what" utility */
-#endif
-
-#if defined(emacs) || defined(HAVE_CONFIG_H)
-#include "config.h"
-#ifdef static
-/* actually, only want this if static is defined as ""
- -- this is for usg, in which emacs must undefine static
- in order to make unexec workable
- */
-#ifndef STACK_DIRECTION
-you
-lose
--- must know STACK_DIRECTION at compile-time
-#endif /* STACK_DIRECTION undefined */
-#endif /* static */
-#endif /* emacs || HAVE_CONFIG_H*/
-
-#if __STDC__
-typedef void *pointer; /* generic pointer type */
-#else
-typedef char *pointer; /* generic pointer type */
-#endif
-
-#define NULL 0 /* null pointer constant */
-
-extern void free();
-extern pointer xmalloc();
-
-/*
- Define STACK_DIRECTION if you know the direction of stack
- growth for your system; otherwise it will be automatically
- deduced at run-time.
-
- STACK_DIRECTION > 0 => grows toward higher addresses
- STACK_DIRECTION < 0 => grows toward lower addresses
- STACK_DIRECTION = 0 => direction of growth unknown
-*/
-
-#ifndef STACK_DIRECTION
-#define STACK_DIRECTION 0 /* direction unknown */
-#endif
-
-#if STACK_DIRECTION != 0
-
-#define STACK_DIR STACK_DIRECTION /* known at compile-time */
-
-#else /* STACK_DIRECTION == 0; need run-time code */
-
-static int stack_dir; /* 1 or -1 once known */
-#define STACK_DIR stack_dir
-
-static void
-find_stack_direction (/* void */)
-{
- static char *addr = NULL; /* address of first
- `dummy', once known */
- auto char dummy; /* to get stack address */
-
- if (addr == NULL)
- { /* initial entry */
- addr = &dummy;
-
- find_stack_direction (); /* recurse once */
- }
- else /* second entry */
- if (&dummy > addr)
- stack_dir = 1; /* stack grew upward */
- else
- stack_dir = -1; /* stack grew downward */
-}
-
-#endif /* STACK_DIRECTION == 0 */
-
-/*
- An "alloca header" is used to:
- (a) chain together all alloca()ed blocks;
- (b) keep track of stack depth.
-
- It is very important that sizeof(header) agree with malloc()
- alignment chunk size. The following default should work okay.
-*/
-
-#ifndef ALIGN_SIZE
-#define ALIGN_SIZE sizeof(double)
-#endif
-
-typedef union hdr
-{
- char align[ALIGN_SIZE]; /* to force sizeof(header) */
- struct
- {
- union hdr *next; /* for chaining headers */
- char *deep; /* for stack depth measure */
- } h;
-} header;
-
-/*
- alloca( size ) returns a pointer to at least `size' bytes of
- storage which will be automatically reclaimed upon exit from
- the procedure that called alloca(). Originally, this space
- was supposed to be taken from the current stack frame of the
- caller, but that method cannot be made to work for some
- implementations of C, for example under Gould's UTX/32.
-*/
-
-static header *last_alloca_header = NULL; /* -> last alloca header */
-
-pointer
-alloca (size) /* returns pointer to storage */
- unsigned size; /* # bytes to allocate */
-{
- auto char probe; /* probes stack depth: */
- register char *depth = &probe;
-
-#if STACK_DIRECTION == 0
- if (STACK_DIR == 0) /* unknown growth direction */
- find_stack_direction ();
-#endif
-
- /* Reclaim garbage, defined as all alloca()ed storage that
- was allocated from deeper in the stack than currently. */
-
- {
- register header *hp; /* traverses linked list */
-
- for (hp = last_alloca_header; hp != NULL;)
- if (STACK_DIR > 0 && hp->h.deep > depth
- || STACK_DIR < 0 && hp->h.deep < depth)
- {
- register header *np = hp->h.next;
-
- free ((pointer) hp); /* collect garbage */
-
- hp = np; /* -> next header */
- }
- else
- break; /* rest are not deeper */
-
- last_alloca_header = hp; /* -> last valid storage */
- }
-
- if (size == 0)
- return NULL; /* no allocation required */
-
- /* Allocate combined header + user data storage. */
-
- {
- register pointer new = xmalloc (sizeof (header) + size);
- /* address of header */
-
- ((header *)new)->h.next = last_alloca_header;
- ((header *)new)->h.deep = depth;
-
- last_alloca_header = (header *)new;
-
- /* User storage begins just after header. */
-
- return (pointer)((char *)new + sizeof(header));
- }
-}
-
diff --git a/gnu/usr.bin/cvs/lib/dup2.c b/gnu/usr.bin/cvs/lib/dup2.c
deleted file mode 100644
index 1974383..0000000
--- a/gnu/usr.bin/cvs/lib/dup2.c
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- dup2 -- 7th Edition UNIX system call emulation for UNIX System V
-
- last edit: 11-Feb-1987 D A Gwyn
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <errno.h>
-#include <fcntl.h>
-
-extern int close(), fcntl();
-
-int
-dup2( oldfd, newfd )
- int oldfd; /* already-open file descriptor */
- int newfd; /* desired duplicate descriptor */
-{
- register int ret; /* for fcntl() return value */
- register int save; /* for saving entry errno */
-
- if ( oldfd == newfd )
- return oldfd; /* be careful not to close() */
-
- save = errno; /* save entry errno */
- (void) close( newfd ); /* in case newfd is open */
- /* (may have just clobbered the original errno value) */
-
- ret = fcntl( oldfd, F_DUPFD, newfd ); /* dupe it */
-
- if ( ret >= 0 )
- errno = save; /* restore entry errno */
- else /* fcntl() returned error */
- if ( errno == EINVAL )
- errno = EBADF; /* we think of everything */
-
- return ret; /* return file descriptor */
-}
diff --git a/gnu/usr.bin/cvs/lib/fnmatch.c b/gnu/usr.bin/cvs/lib/fnmatch.c
deleted file mode 100644
index 2a05430..0000000
--- a/gnu/usr.bin/cvs/lib/fnmatch.c
+++ /dev/null
@@ -1,183 +0,0 @@
-/* Copyright (C) 1992 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-/* Modified slightly by Brian Berliner <berliner@sun.com> for CVS use */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-/* IGNORE(@ */
-/* #include <ansidecl.h> */
-/* @) */
-#include <errno.h>
-#include <fnmatch.h>
-
-#if !defined(__GNU_LIBRARY__) && !defined(STDC_HEADERS)
-extern int errno;
-#endif
-
-/* Match STRING against the filename pattern PATTERN, returning zero if
- it matches, nonzero if not. */
-int
-#if __STDC__
-fnmatch (const char *pattern, const char *string, int flags)
-#else
-fnmatch (pattern, string, flags)
- char *pattern;
- char *string;
- int flags;
-#endif
-{
- register const char *p = pattern, *n = string;
- register char c;
-
- if ((flags & ~__FNM_FLAGS) != 0)
- {
- errno = EINVAL;
- return -1;
- }
-
- while ((c = *p++) != '\0')
- {
- switch (c)
- {
- case '?':
- if (*n == '\0')
- return FNM_NOMATCH;
- else if ((flags & FNM_PATHNAME) && *n == '/')
- return FNM_NOMATCH;
- else if ((flags & FNM_PERIOD) && *n == '.' &&
- (n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
- return FNM_NOMATCH;
- break;
-
- case '\\':
- if (!(flags & FNM_NOESCAPE))
- c = *p++;
- if (*n != c)
- return FNM_NOMATCH;
- break;
-
- case '*':
- if ((flags & FNM_PERIOD) && *n == '.' &&
- (n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
- return FNM_NOMATCH;
-
- for (c = *p++; c == '?' || c == '*'; c = *p++, ++n)
- if (((flags & FNM_PATHNAME) && *n == '/') ||
- (c == '?' && *n == '\0'))
- return FNM_NOMATCH;
-
- if (c == '\0')
- return 0;
-
- {
- char c1 = (!(flags & FNM_NOESCAPE) && c == '\\') ? *p : c;
- for (--p; *n != '\0'; ++n)
- if ((c == '[' || *n == c1) &&
- fnmatch(p, n, flags & ~FNM_PERIOD) == 0)
- return 0;
- return FNM_NOMATCH;
- }
-
- case '[':
- {
- /* Nonzero if the sense of the character class is inverted. */
- register int not;
-
- if (*n == '\0')
- return FNM_NOMATCH;
-
- if ((flags & FNM_PERIOD) && *n == '.' &&
- (n == string || ((flags & FNM_PATHNAME) && n[-1] == '/')))
- return FNM_NOMATCH;
-
- not = (*p == '!' || *p == '^');
- if (not)
- ++p;
-
- c = *p++;
- for (;;)
- {
- register char cstart = c, cend = c;
-
- if (!(flags & FNM_NOESCAPE) && c == '\\')
- cstart = cend = *p++;
-
- if (c == '\0')
- /* [ (unterminated) loses. */
- return FNM_NOMATCH;
-
- c = *p++;
-
- if ((flags & FNM_PATHNAME) && c == '/')
- /* [/] can never match. */
- return FNM_NOMATCH;
-
- if (c == '-' && *p != ']')
- {
- cend = *p++;
- if (!(flags & FNM_NOESCAPE) && cend == '\\')
- cend = *p++;
- if (cend == '\0')
- return FNM_NOMATCH;
- c = *p++;
- }
-
- if (*n >= cstart && *n <= cend)
- goto matched;
-
- if (c == ']')
- break;
- }
- if (!not)
- return FNM_NOMATCH;
- break;
-
- matched:;
- /* Skip the rest of the [...] that already matched. */
- while (c != ']')
- {
- if (c == '\0')
- /* [... (unterminated) loses. */
- return FNM_NOMATCH;
-
- c = *p++;
- if (!(flags & FNM_NOESCAPE) && c == '\\')
- /* 1003.2d11 is unclear if this is right. %%% */
- ++p;
- }
- if (not)
- return FNM_NOMATCH;
- }
- break;
-
- default:
- if (c != *n)
- return FNM_NOMATCH;
- }
-
- ++n;
- }
-
- if (*n == '\0')
- return 0;
-
- return FNM_NOMATCH;
-}
diff --git a/gnu/usr.bin/cvs/lib/fnmatch.h b/gnu/usr.bin/cvs/lib/fnmatch.h
deleted file mode 100644
index a1e4f87..0000000
--- a/gnu/usr.bin/cvs/lib/fnmatch.h
+++ /dev/null
@@ -1,45 +0,0 @@
-/* Copyright (C) 1992 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
-
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
-
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-#ifndef _FNMATCH_H
-
-#define _FNMATCH_H 1
-
-/* Bits set in the FLAGS argument to `fnmatch'. */
-#undef FNM_PATHNAME
-#define FNM_PATHNAME (1 << 0)/* No wildcard can ever match `/'. */
-#undef FNM_NOESCAPE
-#define FNM_NOESCAPE (1 << 1)/* Backslashes don't quote special chars. */
-#undef FNM_PERIOD
-#define FNM_PERIOD (1 << 2)/* Leading `.' is matched only explicitly. */
-#undef __FNM_FLAGS
-#define __FNM_FLAGS (FNM_PATHNAME|FNM_NOESCAPE|FNM_PERIOD)
-
-/* Value returned by `fnmatch' if STRING does not match PATTERN. */
-#undef FNM_NOMATCH
-#define FNM_NOMATCH 1
-
-/* Match STRING against the filename pattern PATTERN,
- returning zero if it matches, FNM_NOMATCH if not. */
-#if __STDC__
-extern int fnmatch (const char *pattern, const char *string, int flags);
-#else
-extern int fnmatch ();
-#endif
-
-#endif /* fnmatch.h */
diff --git a/gnu/usr.bin/cvs/lib/ftruncate.c b/gnu/usr.bin/cvs/lib/ftruncate.c
deleted file mode 100644
index 13f20a3..0000000
--- a/gnu/usr.bin/cvs/lib/ftruncate.c
+++ /dev/null
@@ -1,76 +0,0 @@
-/* ftruncate emulations that work on some System V's.
- This file is in the public domain. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-#include <fcntl.h>
-
-#ifdef F_CHSIZE
-int
-ftruncate (fd, length)
- int fd;
- off_t length;
-{
- return fcntl (fd, F_CHSIZE, length);
-}
-#else
-#ifdef F_FREESP
-/* The following function was written by
- kucharsk@Solbourne.com (William Kucharski) */
-
-#include <sys/stat.h>
-#include <errno.h>
-#include <unistd.h>
-
-int
-ftruncate (fd, length)
- int fd;
- off_t length;
-{
- struct flock fl;
- struct stat filebuf;
-
- if (fstat (fd, &filebuf) < 0)
- return -1;
-
- if (filebuf.st_size < length)
- {
- /* Extend file length. */
- if (lseek (fd, (length - 1), SEEK_SET) < 0)
- return -1;
-
- /* Write a "0" byte. */
- if (write (fd, "", 1) != 1)
- return -1;
- }
- else
- {
- /* Truncate length. */
- fl.l_whence = 0;
- fl.l_len = 0;
- fl.l_start = length;
- fl.l_type = F_WRLCK; /* Write lock on file space. */
-
- /* This relies on the UNDOCUMENTED F_FREESP argument to
- fcntl, which truncates the file so that it ends at the
- position indicated by fl.l_start.
- Will minor miracles never cease? */
- if (fcntl (fd, F_FREESP, &fl) < 0)
- return -1;
- }
-
- return 0;
-}
-#else
-int
-ftruncate (fd, length)
- int fd;
- off_t length;
-{
- return chsize (fd, length);
-}
-#endif
-#endif
diff --git a/gnu/usr.bin/cvs/lib/getwd.c b/gnu/usr.bin/cvs/lib/getwd.c
deleted file mode 100644
index 573a788..0000000
--- a/gnu/usr.bin/cvs/lib/getwd.c
+++ /dev/null
@@ -1,35 +0,0 @@
-/* getwd.c -- get current working directory pathname
- Copyright (C) 1992 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-/* Some systems which include both getwd() and getcwd() have an implementation
- of getwd() which is much faster than getcwd(). As a result, we use the
- system's getwd() if it is available */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include "system.h"
-
-/* Get the current working directory into PATHNAME */
-
-char *
-getwd (pathname)
- char *pathname;
-{
- return (getcwd(pathname, PATH_MAX));
-}
diff --git a/gnu/usr.bin/cvs/lib/hostname.c b/gnu/usr.bin/cvs/lib/hostname.c
deleted file mode 100644
index 34be15e..0000000
--- a/gnu/usr.bin/cvs/lib/hostname.c
+++ /dev/null
@@ -1,49 +0,0 @@
-/* hostname.c -- use uname() to get the name of the host
- Copyright (C) 1992 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#if defined(STDC_HEADERS) || defined(USG)
-#include <string.h>
-#ifndef index
-#define index strchr
-#endif
-#else
-#include <strings.h>
-#endif
-
-#include <sys/utsname.h>
-
-/* Put this host's name into NAME, using at most NAMELEN characters */
-
-int
-gethostname(name, namelen)
- char *name;
- int namelen;
-{
- struct utsname ugnm;
-
- if (uname(&ugnm) < 0)
- return (-1);
-
- (void) strncpy(name, ugnm.nodename, namelen-1);
- name[namelen-1] = '\0';
-
- return (0);
-}
diff --git a/gnu/usr.bin/cvs/lib/memmove.c b/gnu/usr.bin/cvs/lib/memmove.c
deleted file mode 100644
index 8818d46..0000000
--- a/gnu/usr.bin/cvs/lib/memmove.c
+++ /dev/null
@@ -1,57 +0,0 @@
-/* memmove -- copy memory regions of arbitary length
- Copyright (C) 1991 Free Software Foundation, Inc.
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-
-/*
-
-NAME
-
- memmove -- copy memory regions of arbitary length
-
-SYNOPSIS
-
- void memmove (void *out, const void *in, size_t n);
-
-DESCRIPTION
-
- Copy LENGTH bytes from memory region pointed to by IN to memory
- region pointed to by OUT.
-
- Regions can be overlapping.
-*/
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef __STDC__
-#include <stddef.h>
-#else
-#define size_t unsigned long
-#endif
-
-void *
-memmove (out, in, length)
- void *out;
- const void* in;
- size_t length;
-{
- bcopy(in, out, length);
- return out;
-}
diff --git a/gnu/usr.bin/cvs/lib/mkdir.c b/gnu/usr.bin/cvs/lib/mkdir.c
deleted file mode 100644
index a70c1d8..0000000
--- a/gnu/usr.bin/cvs/lib/mkdir.c
+++ /dev/null
@@ -1,129 +0,0 @@
-/* mkrmdir.c -- BSD compatible directory functions for System V
- Copyright (C) 1988, 1990 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#ifndef STDC_HEADERS
-extern int errno;
-#endif
-
-/* mkdir and rmdir adapted from GNU tar. */
-
-/* Make directory DPATH, with permission mode DMODE.
-
- Written by Robert Rother, Mariah Corporation, August 1985
- (sdcsvax!rmr or rmr@uscd). If you want it, it's yours.
-
- Severely hacked over by John Gilmore to make a 4.2BSD compatible
- subroutine. 11Mar86; hoptoad!gnu
-
- Modified by rmtodd@uokmax 6-28-87 -- when making an already existing dir,
- subroutine didn't return EEXIST. It does now. */
-
-int
-mkdir (dpath, dmode)
- char *dpath;
- int dmode;
-{
- int cpid, status;
- struct stat statbuf;
-
- if (stat (dpath, &statbuf) == 0)
- {
- errno = EEXIST; /* stat worked, so it already exists. */
- return -1;
- }
-
- /* If stat fails for a reason other than non-existence, return error. */
- if (errno != ENOENT)
- return -1;
-
- cpid = fork ();
- switch (cpid)
- {
- case -1: /* Cannot fork. */
- return -1; /* errno is set already. */
-
- case 0: /* Child process. */
- /* Cheap hack to set mode of new directory. Since this child
- process is going away anyway, we zap its umask.
- This won't suffice to set SUID, SGID, etc. on this
- directory, so the parent process calls chmod afterward. */
- status = umask (0); /* Get current umask. */
- umask (status | (0777 & ~dmode)); /* Set for mkdir. */
- execl ("/bin/mkdir", "mkdir", dpath, (char *) 0);
- _exit (1);
-
- default: /* Parent process. */
- while (wait (&status) != cpid) /* Wait for kid to finish. */
- /* Do nothing. */ ;
-
- if (status & 0xFFFF)
- {
- errno = EIO; /* /bin/mkdir failed. */
- return -1;
- }
- return chmod (dpath, dmode);
- }
-}
-
-/* Remove directory DPATH.
- Return 0 if successful, -1 if not. */
-
-int
-rmdir (dpath)
- char *dpath;
-{
- int cpid, status;
- struct stat statbuf;
-
- if (stat (dpath, &statbuf) != 0)
- return -1; /* stat set errno. */
-
- if ((statbuf.st_mode & S_IFMT) != S_IFDIR)
- {
- errno = ENOTDIR;
- return -1;
- }
-
- cpid = fork ();
- switch (cpid)
- {
- case -1: /* Cannot fork. */
- return -1; /* errno is set already. */
-
- case 0: /* Child process. */
- execl ("/bin/rmdir", "rmdir", dpath, (char *) 0);
- _exit (1);
-
- default: /* Parent process. */
- while (wait (&status) != cpid) /* Wait for kid to finish. */
- /* Do nothing. */ ;
-
- if (status & 0xFFFF)
- {
- errno = EIO; /* /bin/rmdir failed. */
- return -1;
- }
- return 0;
- }
-}
diff --git a/gnu/usr.bin/cvs/lib/rename.c b/gnu/usr.bin/cvs/lib/rename.c
deleted file mode 100644
index 6c43cf6..0000000
--- a/gnu/usr.bin/cvs/lib/rename.c
+++ /dev/null
@@ -1,72 +0,0 @@
-/* rename.c -- BSD compatible directory function for System V
- Copyright (C) 1988, 1990 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <errno.h>
-#ifndef STDC_HEADERS
-extern int errno;
-#endif
-
-/* Rename file FROM to file TO.
- Return 0 if successful, -1 if not. */
-
-int
-rename (from, to)
- char *from;
- char *to;
-{
- struct stat from_stats;
- int pid, status;
-
- if (stat (from, &from_stats) == 0)
- {
- if (unlink (to) && errno != ENOENT)
- return -1;
- if ((from_stats.st_mode & S_IFMT) == S_IFDIR)
- {
- /* Need a setuid root process to link and unlink directories. */
- pid = fork ();
- switch (pid)
- {
- case -1: /* Error. */
- error (1, errno, "cannot fork");
-
- case 0: /* Child. */
- execl (MVDIR, "mvdir", from, to, (char *) 0);
- error (255, errno, "cannot run `%s'", MVDIR);
-
- default: /* Parent. */
- while (wait (&status) != pid)
- /* Do nothing. */ ;
-
- errno = 0; /* mvdir printed the system error message. */
- return status != 0 ? -1 : 0;
- }
- }
- else
- {
- if (link (from, to) == 0 && (unlink (from) == 0 || errno == ENOENT))
- return 0;
- }
- }
- return -1;
-}
diff --git a/gnu/usr.bin/cvs/lib/strdup.c b/gnu/usr.bin/cvs/lib/strdup.c
deleted file mode 100644
index 46fc8a0..0000000
--- a/gnu/usr.bin/cvs/lib/strdup.c
+++ /dev/null
@@ -1,43 +0,0 @@
-/* strdup.c -- return a newly allocated copy of a string
- Copyright (C) 1990 Free Software Foundation, Inc.
-
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
-
-#ifdef HAVE_CONFIG_H
-#include "config.h"
-#endif
-
-#ifdef STDC_HEADERS
-#include <string.h>
-#include <stdlib.h>
-#else
-char *malloc ();
-char *strcpy ();
-#endif
-
-/* Return a newly allocated copy of STR,
- or 0 if out of memory. */
-
-char *
-strdup (str)
- char *str;
-{
- char *newstr;
-
- newstr = (char *) malloc (strlen (str) + 1);
- if (newstr)
- strcpy (newstr, str);
- return newstr;
-}
diff --git a/gnu/usr.bin/cvs/lib/strerror.c b/gnu/usr.bin/cvs/lib/strerror.c
deleted file mode 100644
index b0bec13..0000000
--- a/gnu/usr.bin/cvs/lib/strerror.c
+++ /dev/null
@@ -1,813 +0,0 @@
-/* Extended support for using errno values.
- Copyright (C) 1992 Free Software Foundation, Inc.
- Written by Fred Fish. fnf@cygnus.com
-
-This file is part of the libiberty library.
-Libiberty is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public
-License as published by the Free Software Foundation; either
-version 2 of the License, or (at your option) any later version.
-
-Libiberty is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-Library General Public License for more details.
-
-You should have received a copy of the GNU Library General Public
-License along with libiberty; see the file COPYING.LIB. If
-not, write to the Free Software Foundation, Inc., 675 Mass Ave,
-Cambridge, MA 02139, USA. */
-
-#include "config.h"
-
-#ifndef NEED_sys_errlist
-/* Note that errno.h (not sure what OS) or stdio.h (BSD 4.4, at least)
- might declare sys_errlist in a way that the compiler might consider
- incompatible with our later declaration, perhaps by using const
- attributes. So we hide the declaration in errno.h (if any) using a
- macro. */
-#define sys_errlist sys_errlist__
-#endif
-
-#include <stdio.h>
-#include <errno.h>
-
-#ifndef NEED_sys_errlist
-#undef sys_errlist
-#endif
-
-/* Routines imported from standard C runtime libraries. */
-
-#ifdef __STDC__
-#include <stddef.h>
-extern void *malloc (size_t size); /* 4.10.3.3 */
-extern void *memset (void *s, int c, size_t n); /* 4.11.6.1 */
-#else /* !__STDC__ */
-extern char *malloc (); /* Standard memory allocater */
-extern char *memset ();
-#endif /* __STDC__ */
-
-#ifndef MAX
-# define MAX(a,b) ((a) > (b) ? (a) : (b))
-#endif
-
-/* Translation table for errno values. See intro(2) in most UNIX systems
- Programmers Reference Manuals.
-
- Note that this table is generally only accessed when it is used at runtime
- to initialize errno name and message tables that are indexed by errno
- value.
-
- Not all of these errnos will exist on all systems. This table is the only
- thing that should have to be updated as new error numbers are introduced.
- It's sort of ugly, but at least its portable. */
-
-struct error_info
-{
- int value; /* The numeric value from <errno.h> */
- char *name; /* The equivalent symbolic value */
-#ifdef NEED_sys_errlist
- char *msg; /* Short message about this value */
-#endif
-};
-
-#ifdef NEED_sys_errlist
-# define ENTRY(value, name, msg) {value, name, msg}
-#else
-# define ENTRY(value, name, msg) {value, name}
-#endif
-
-static const struct error_info error_table[] =
-{
-#if defined (EPERM)
- ENTRY(EPERM, "EPERM", "Not owner"),
-#endif
-#if defined (ENOENT)
- ENTRY(ENOENT, "ENOENT", "No such file or directory"),
-#endif
-#if defined (ESRCH)
- ENTRY(ESRCH, "ESRCH", "No such process"),
-#endif
-#if defined (EINTR)
- ENTRY(EINTR, "EINTR", "Interrupted system call"),
-#endif
-#if defined (EIO)
- ENTRY(EIO, "EIO", "I/O error"),
-#endif
-#if defined (ENXIO)
- ENTRY(ENXIO, "ENXIO", "No such device or address"),
-#endif
-#if defined (E2BIG)
- ENTRY(E2BIG, "E2BIG", "Arg list too long"),
-#endif
-#if defined (ENOEXEC)
- ENTRY(ENOEXEC, "ENOEXEC", "Exec format error"),
-#endif
-#if defined (EBADF)
- ENTRY(EBADF, "EBADF", "Bad file number"),
-#endif
-#if defined (ECHILD)
- ENTRY(ECHILD, "ECHILD", "No child processes"),
-#endif
-#if defined (EWOULDBLOCK) /* Put before EAGAIN, sometimes aliased */
- ENTRY(EWOULDBLOCK, "EWOULDBLOCK", "Operation would block"),
-#endif
-#if defined (EAGAIN)
- ENTRY(EAGAIN, "EAGAIN", "No more processes"),
-#endif
-#if defined (ENOMEM)
- ENTRY(ENOMEM, "ENOMEM", "Not enough space"),
-#endif
-#if defined (EACCES)
- ENTRY(EACCES, "EACCES", "Permission denied"),
-#endif
-#if defined (EFAULT)
- ENTRY(EFAULT, "EFAULT", "Bad address"),
-#endif
-#if defined (ENOTBLK)
- ENTRY(ENOTBLK, "ENOTBLK", "Block device required"),
-#endif
-#if defined (EBUSY)
- ENTRY(EBUSY, "EBUSY", "Device busy"),
-#endif
-#if defined (EEXIST)
- ENTRY(EEXIST, "EEXIST", "File exists"),
-#endif
-#if defined (EXDEV)
- ENTRY(EXDEV, "EXDEV", "Cross-device link"),
-#endif
-#if defined (ENODEV)
- ENTRY(ENODEV, "ENODEV", "No such device"),
-#endif
-#if defined (ENOTDIR)
- ENTRY(ENOTDIR, "ENOTDIR", "Not a directory"),
-#endif
-#if defined (EISDIR)
- ENTRY(EISDIR, "EISDIR", "Is a directory"),
-#endif
-#if defined (EINVAL)
- ENTRY(EINVAL, "EINVAL", "Invalid argument"),
-#endif
-#if defined (ENFILE)
- ENTRY(ENFILE, "ENFILE", "File table overflow"),
-#endif
-#if defined (EMFILE)
- ENTRY(EMFILE, "EMFILE", "Too many open files"),
-#endif
-#if defined (ENOTTY)
- ENTRY(ENOTTY, "ENOTTY", "Not a typewriter"),
-#endif
-#if defined (ETXTBSY)
- ENTRY(ETXTBSY, "ETXTBSY", "Text file busy"),
-#endif
-#if defined (EFBIG)
- ENTRY(EFBIG, "EFBIG", "File too large"),
-#endif
-#if defined (ENOSPC)
- ENTRY(ENOSPC, "ENOSPC", "No space left on device"),
-#endif
-#if defined (ESPIPE)
- ENTRY(ESPIPE, "ESPIPE", "Illegal seek"),
-#endif
-#if defined (EROFS)
- ENTRY(EROFS, "EROFS", "Read-only file system"),
-#endif
-#if defined (EMLINK)
- ENTRY(EMLINK, "EMLINK", "Too many links"),
-#endif
-#if defined (EPIPE)
- ENTRY(EPIPE, "EPIPE", "Broken pipe"),
-#endif
-#if defined (EDOM)
- ENTRY(EDOM, "EDOM", "Math argument out of domain of func"),
-#endif
-#if defined (ERANGE)
- ENTRY(ERANGE, "ERANGE", "Math result not representable"),
-#endif
-#if defined (ENOMSG)
- ENTRY(ENOMSG, "ENOMSG", "No message of desired type"),
-#endif
-#if defined (EIDRM)
- ENTRY(EIDRM, "EIDRM", "Identifier removed"),
-#endif
-#if defined (ECHRNG)
- ENTRY(ECHRNG, "ECHRNG", "Channel number out of range"),
-#endif
-#if defined (EL2NSYNC)
- ENTRY(EL2NSYNC, "EL2NSYNC", "Level 2 not synchronized"),
-#endif
-#if defined (EL3HLT)
- ENTRY(EL3HLT, "EL3HLT", "Level 3 halted"),
-#endif
-#if defined (EL3RST)
- ENTRY(EL3RST, "EL3RST", "Level 3 reset"),
-#endif
-#if defined (ELNRNG)
- ENTRY(ELNRNG, "ELNRNG", "Link number out of range"),
-#endif
-#if defined (EUNATCH)
- ENTRY(EUNATCH, "EUNATCH", "Protocol driver not attached"),
-#endif
-#if defined (ENOCSI)
- ENTRY(ENOCSI, "ENOCSI", "No CSI structure available"),
-#endif
-#if defined (EL2HLT)
- ENTRY(EL2HLT, "EL2HLT", "Level 2 halted"),
-#endif
-#if defined (EDEADLK)
- ENTRY(EDEADLK, "EDEADLK", "Deadlock condition"),
-#endif
-#if defined (ENOLCK)
- ENTRY(ENOLCK, "ENOLCK", "No record locks available"),
-#endif
-#if defined (EBADE)
- ENTRY(EBADE, "EBADE", "Invalid exchange"),
-#endif
-#if defined (EBADR)
- ENTRY(EBADR, "EBADR", "Invalid request descriptor"),
-#endif
-#if defined (EXFULL)
- ENTRY(EXFULL, "EXFULL", "Exchange full"),
-#endif
-#if defined (ENOANO)
- ENTRY(ENOANO, "ENOANO", "No anode"),
-#endif
-#if defined (EBADRQC)
- ENTRY(EBADRQC, "EBADRQC", "Invalid request code"),
-#endif
-#if defined (EBADSLT)
- ENTRY(EBADSLT, "EBADSLT", "Invalid slot"),
-#endif
-#if defined (EDEADLOCK)
- ENTRY(EDEADLOCK, "EDEADLOCK", "File locking deadlock error"),
-#endif
-#if defined (EBFONT)
- ENTRY(EBFONT, "EBFONT", "Bad font file format"),
-#endif
-#if defined (ENOSTR)
- ENTRY(ENOSTR, "ENOSTR", "Device not a stream"),
-#endif
-#if defined (ENODATA)
- ENTRY(ENODATA, "ENODATA", "No data available"),
-#endif
-#if defined (ETIME)
- ENTRY(ETIME, "ETIME", "Timer expired"),
-#endif
-#if defined (ENOSR)
- ENTRY(ENOSR, "ENOSR", "Out of streams resources"),
-#endif
-#if defined (ENONET)
- ENTRY(ENONET, "ENONET", "Machine is not on the network"),
-#endif
-#if defined (ENOPKG)
- ENTRY(ENOPKG, "ENOPKG", "Package not installed"),
-#endif
-#if defined (EREMOTE)
- ENTRY(EREMOTE, "EREMOTE", "Object is remote"),
-#endif
-#if defined (ENOLINK)
- ENTRY(ENOLINK, "ENOLINK", "Link has been severed"),
-#endif
-#if defined (EADV)
- ENTRY(EADV, "EADV", "Advertise error"),
-#endif
-#if defined (ESRMNT)
- ENTRY(ESRMNT, "ESRMNT", "Srmount error"),
-#endif
-#if defined (ECOMM)
- ENTRY(ECOMM, "ECOMM", "Communication error on send"),
-#endif
-#if defined (EPROTO)
- ENTRY(EPROTO, "EPROTO", "Protocol error"),
-#endif
-#if defined (EMULTIHOP)
- ENTRY(EMULTIHOP, "EMULTIHOP", "Multihop attempted"),
-#endif
-#if defined (EDOTDOT)
- ENTRY(EDOTDOT, "EDOTDOT", "RFS specific error"),
-#endif
-#if defined (EBADMSG)
- ENTRY(EBADMSG, "EBADMSG", "Not a data message"),
-#endif
-#if defined (ENAMETOOLONG)
- ENTRY(ENAMETOOLONG, "ENAMETOOLONG", "File name too long"),
-#endif
-#if defined (EOVERFLOW)
- ENTRY(EOVERFLOW, "EOVERFLOW", "Value too large for defined data type"),
-#endif
-#if defined (ENOTUNIQ)
- ENTRY(ENOTUNIQ, "ENOTUNIQ", "Name not unique on network"),
-#endif
-#if defined (EBADFD)
- ENTRY(EBADFD, "EBADFD", "File descriptor in bad state"),
-#endif
-#if defined (EREMCHG)
- ENTRY(EREMCHG, "EREMCHG", "Remote address changed"),
-#endif
-#if defined (ELIBACC)
- ENTRY(ELIBACC, "ELIBACC", "Can not access a needed shared library"),
-#endif
-#if defined (ELIBBAD)
- ENTRY(ELIBBAD, "ELIBBAD", "Accessing a corrupted shared library"),
-#endif
-#if defined (ELIBSCN)
- ENTRY(ELIBSCN, "ELIBSCN", ".lib section in a.out corrupted"),
-#endif
-#if defined (ELIBMAX)
- ENTRY(ELIBMAX, "ELIBMAX", "Attempting to link in too many shared libraries"),
-#endif
-#if defined (ELIBEXEC)
- ENTRY(ELIBEXEC, "ELIBEXEC", "Cannot exec a shared library directly"),
-#endif
-#if defined (EILSEQ)
- ENTRY(EILSEQ, "EILSEQ", "Illegal byte sequence"),
-#endif
-#if defined (ENOSYS)
- ENTRY(ENOSYS, "ENOSYS", "Operation not applicable"),
-#endif
-#if defined (ELOOP)
- ENTRY(ELOOP, "ELOOP", "Too many symbolic links encountered"),
-#endif
-#if defined (ERESTART)
- ENTRY(ERESTART, "ERESTART", "Interrupted system call should be restarted"),
-#endif
-#if defined (ESTRPIPE)
- ENTRY(ESTRPIPE, "ESTRPIPE", "Streams pipe error"),
-#endif
-#if defined (ENOTEMPTY)
- ENTRY(ENOTEMPTY, "ENOTEMPTY", "Directory not empty"),
-#endif
-#if defined (EUSERS)
- ENTRY(EUSERS, "EUSERS", "Too many users"),
-#endif
-#if defined (ENOTSOCK)
- ENTRY(ENOTSOCK, "ENOTSOCK", "Socket operation on non-socket"),
-#endif
-#if defined (EDESTADDRREQ)
- ENTRY(EDESTADDRREQ, "EDESTADDRREQ", "Destination address required"),
-#endif
-#if defined (EMSGSIZE)
- ENTRY(EMSGSIZE, "EMSGSIZE", "Message too long"),
-#endif
-#if defined (EPROTOTYPE)
- ENTRY(EPROTOTYPE, "EPROTOTYPE", "Protocol wrong type for socket"),
-#endif
-#if defined (ENOPROTOOPT)
- ENTRY(ENOPROTOOPT, "ENOPROTOOPT", "Protocol not available"),
-#endif
-#if defined (EPROTONOSUPPORT)
- ENTRY(EPROTONOSUPPORT, "EPROTONOSUPPORT", "Protocol not supported"),
-#endif
-#if defined (ESOCKTNOSUPPORT)
- ENTRY(ESOCKTNOSUPPORT, "ESOCKTNOSUPPORT", "Socket type not supported"),
-#endif
-#if defined (EOPNOTSUPP)
- ENTRY(EOPNOTSUPP, "EOPNOTSUPP", "Operation not supported on transport endpoint"),
-#endif
-#if defined (EPFNOSUPPORT)
- ENTRY(EPFNOSUPPORT, "EPFNOSUPPORT", "Protocol family not supported"),
-#endif
-#if defined (EAFNOSUPPORT)
- ENTRY(EAFNOSUPPORT, "EAFNOSUPPORT", "Address family not supported by protocol"),
-#endif
-#if defined (EADDRINUSE)
- ENTRY(EADDRINUSE, "EADDRINUSE", "Address already in use"),
-#endif
-#if defined (EADDRNOTAVAIL)
- ENTRY(EADDRNOTAVAIL, "EADDRNOTAVAIL","Cannot assign requested address"),
-#endif
-#if defined (ENETDOWN)
- ENTRY(ENETDOWN, "ENETDOWN", "Network is down"),
-#endif
-#if defined (ENETUNREACH)
- ENTRY(ENETUNREACH, "ENETUNREACH", "Network is unreachable"),
-#endif
-#if defined (ENETRESET)
- ENTRY(ENETRESET, "ENETRESET", "Network dropped connection because of reset"),
-#endif
-#if defined (ECONNABORTED)
- ENTRY(ECONNABORTED, "ECONNABORTED", "Software caused connection abort"),
-#endif
-#if defined (ECONNRESET)
- ENTRY(ECONNRESET, "ECONNRESET", "Connection reset by peer"),
-#endif
-#if defined (ENOBUFS)
- ENTRY(ENOBUFS, "ENOBUFS", "No buffer space available"),
-#endif
-#if defined (EISCONN)
- ENTRY(EISCONN, "EISCONN", "Transport endpoint is already connected"),
-#endif
-#if defined (ENOTCONN)
- ENTRY(ENOTCONN, "ENOTCONN", "Transport endpoint is not connected"),
-#endif
-#if defined (ESHUTDOWN)
- ENTRY(ESHUTDOWN, "ESHUTDOWN", "Cannot send after transport endpoint shutdown"),
-#endif
-#if defined (ETOOMANYREFS)
- ENTRY(ETOOMANYREFS, "ETOOMANYREFS", "Too many references: cannot splice"),
-#endif
-#if defined (ETIMEDOUT)
- ENTRY(ETIMEDOUT, "ETIMEDOUT", "Connection timed out"),
-#endif
-#if defined (ECONNREFUSED)
- ENTRY(ECONNREFUSED, "ECONNREFUSED", "Connection refused"),
-#endif
-#if defined (EHOSTDOWN)
- ENTRY(EHOSTDOWN, "EHOSTDOWN", "Host is down"),
-#endif
-#if defined (EHOSTUNREACH)
- ENTRY(EHOSTUNREACH, "EHOSTUNREACH", "No route to host"),
-#endif
-#if defined (EALREADY)
- ENTRY(EALREADY, "EALREADY", "Operation already in progress"),
-#endif
-#if defined (EINPROGRESS)
- ENTRY(EINPROGRESS, "EINPROGRESS", "Operation now in progress"),
-#endif
-#if defined (ESTALE)
- ENTRY(ESTALE, "ESTALE", "Stale NFS file handle"),
-#endif
-#if defined (EUCLEAN)
- ENTRY(EUCLEAN, "EUCLEAN", "Structure needs cleaning"),
-#endif
-#if defined (ENOTNAM)
- ENTRY(ENOTNAM, "ENOTNAM", "Not a XENIX named type file"),
-#endif
-#if defined (ENAVAIL)
- ENTRY(ENAVAIL, "ENAVAIL", "No XENIX semaphores available"),
-#endif
-#if defined (EISNAM)
- ENTRY(EISNAM, "EISNAM", "Is a named type file"),
-#endif
-#if defined (EREMOTEIO)
- ENTRY(EREMOTEIO, "EREMOTEIO", "Remote I/O error"),
-#endif
- ENTRY(0, NULL, NULL)
-};
-
-/* Translation table allocated and initialized at runtime. Indexed by the
- errno value to find the equivalent symbolic value. */
-
-static char **error_names;
-static int num_error_names = 0;
-
-/* Translation table allocated and initialized at runtime, if it does not
- already exist in the host environment. Indexed by the errno value to find
- the descriptive string.
-
- We don't export it for use in other modules because even though it has the
- same name, it differs from other implementations in that it is dynamically
- initialized rather than statically initialized. */
-
-#ifdef NEED_sys_errlist
-
-static int sys_nerr;
-static char **sys_errlist;
-
-#else
-
-extern int sys_nerr;
-extern char *sys_errlist[];
-
-#endif
-
-
-/*
-
-NAME
-
- init_error_tables -- initialize the name and message tables
-
-SYNOPSIS
-
- static void init_error_tables ();
-
-DESCRIPTION
-
- Using the error_table, which is initialized at compile time, generate
- the error_names and the sys_errlist (if needed) tables, which are
- indexed at runtime by a specific errno value.
-
-BUGS
-
- The initialization of the tables may fail under low memory conditions,
- in which case we don't do anything particularly useful, but we don't
- bomb either. Who knows, it might succeed at a later point if we free
- some memory in the meantime. In any case, the other routines know
- how to deal with lack of a table after trying to initialize it. This
- may or may not be considered to be a bug, that we don't specifically
- warn about this particular failure mode.
-
-*/
-
-static void
-init_error_tables ()
-{
- const struct error_info *eip;
- int nbytes;
-
- /* If we haven't already scanned the error_table once to find the maximum
- errno value, then go find it now. */
-
- if (num_error_names == 0)
- {
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- if (eip -> value >= num_error_names)
- {
- num_error_names = eip -> value + 1;
- }
- }
- }
-
- /* Now attempt to allocate the error_names table, zero it out, and then
- initialize it from the statically initialized error_table. */
-
- if (error_names == NULL)
- {
- nbytes = num_error_names * sizeof (char *);
- if ((error_names = (char **) malloc (nbytes)) != NULL)
- {
- memset (error_names, 0, nbytes);
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- error_names[eip -> value] = eip -> name;
- }
- }
- }
-
-#ifdef NEED_sys_errlist
-
- /* Now attempt to allocate the sys_errlist table, zero it out, and then
- initialize it from the statically initialized error_table. */
-
- if (sys_errlist == NULL)
- {
- nbytes = num_error_names * sizeof (char *);
- if ((sys_errlist = (char **) malloc (nbytes)) != NULL)
- {
- memset (sys_errlist, 0, nbytes);
- sys_nerr = num_error_names;
- for (eip = error_table; eip -> name != NULL; eip++)
- {
- sys_errlist[eip -> value] = eip -> msg;
- }
- }
- }
-
-#endif
-
-}
-
-/*
-
-NAME
-
- errno_max -- return the max errno value
-
-SYNOPSIS
-
- int errno_max ();
-
-DESCRIPTION
-
- Returns the maximum errno value for which a corresponding symbolic
- name or message is available. Note that in the case where
- we use the sys_errlist supplied by the system, it is possible for
- there to be more symbolic names than messages, or vice versa.
- In fact, the manual page for perror(3C) explicitly warns that one
- should check the size of the table (sys_nerr) before indexing it,
- since new error codes may be added to the system before they are
- added to the table. Thus sys_nerr might be smaller than value
- implied by the largest errno value defined in <errno.h>.
-
- We return the maximum value that can be used to obtain a meaningful
- symbolic name or message.
-
-*/
-
-int
-errno_max ()
-{
- int maxsize;
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
- maxsize = MAX (sys_nerr, num_error_names);
- return (maxsize - 1);
-}
-
-/*
-
-NAME
-
- strerror -- map an error number to an error message string
-
-SYNOPSIS
-
- char *strerror (int errnoval)
-
-DESCRIPTION
-
- Maps an errno number to an error message string, the contents of
- which are implementation defined. On systems which have the external
- variables sys_nerr and sys_errlist, these strings will be the same
- as the ones used by perror().
-
- If the supplied error number is within the valid range of indices
- for the sys_errlist, but no message is available for the particular
- error number, then returns the string "Error NUM", where NUM is the
- error number.
-
- If the supplied error number is not a valid index into sys_errlist,
- returns NULL.
-
- The returned string is only guaranteed to be valid only until the
- next call to strerror.
-
-*/
-
-char *
-strerror (errnoval)
- int errnoval;
-{
- char *msg;
- static char buf[32];
-
-#ifdef NEED_sys_errlist
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
-
-#endif
-
- if ((errnoval < 0) || (errnoval >= sys_nerr))
- {
- /* Out of range, just return NULL */
- msg = NULL;
- }
- else if ((sys_errlist == NULL) || (sys_errlist[errnoval] == NULL))
- {
- /* In range, but no sys_errlist or no entry at this index. */
- sprintf (buf, "Error %d", errnoval);
- msg = buf;
- }
- else
- {
- /* In range, and a valid message. Just return the message. */
- msg = sys_errlist[errnoval];
- }
-
- return (msg);
-}
-
-
-
-/*
-
-NAME
-
- strerrno -- map an error number to a symbolic name string
-
-SYNOPSIS
-
- char *strerrno (int errnoval)
-
-DESCRIPTION
-
- Given an error number returned from a system call (typically
- returned in errno), returns a pointer to a string containing the
- symbolic name of that error number, as found in <errno.h>.
-
- If the supplied error number is within the valid range of indices
- for symbolic names, but no name is available for the particular
- error number, then returns the string "Error NUM", where NUM is
- the error number.
-
- If the supplied error number is not within the range of valid
- indices, then returns NULL.
-
-BUGS
-
- The contents of the location pointed to are only guaranteed to be
- valid until the next call to strerrno.
-
-*/
-
-char *
-strerrno (errnoval)
- int errnoval;
-{
- char *name;
- static char buf[32];
-
- if (error_names == NULL)
- {
- init_error_tables ();
- }
-
- if ((errnoval < 0) || (errnoval >= num_error_names))
- {
- /* Out of range, just return NULL */
- name = NULL;
- }
- else if ((error_names == NULL) || (error_names[errnoval] == NULL))
- {
- /* In range, but no error_names or no entry at this index. */
- sprintf (buf, "Error %d", errnoval);
- name = buf;
- }
- else
- {
- /* In range, and a valid name. Just return the name. */
- name = error_names[errnoval];
- }
-
- return (name);
-}
-
-/*
-
-NAME
-
- strtoerrno -- map a symbolic errno name to a numeric value
-
-SYNOPSIS
-
- int strtoerrno (char *name)
-
-DESCRIPTION
-
- Given the symbolic name of a error number, map it to an errno value.
- If no translation is found, returns 0.
-
-*/
-
-int
-strtoerrno (name)
- char *name;
-{
- int errnoval = 0;
-
- if (name != NULL)
- {
- if (error_names == NULL)
- {
- init_error_tables ();
- }
- for (errnoval = 0; errnoval < num_error_names; errnoval++)
- {
- if ((error_names[errnoval] != NULL) &&
- (strcmp (name, error_names[errnoval]) == 0))
- {
- break;
- }
- }
- if (errnoval == num_error_names)
- {
- errnoval = 0;
- }
- }
- return (errnoval);
-}
-
-
-/* A simple little main that does nothing but print all the errno translations
- if MAIN is defined and this file is compiled and linked. */
-
-#ifdef MAIN
-
-main ()
-{
- int errn;
- int errnmax;
- char *name;
- char *msg;
- char *strerrno ();
- char *strerror ();
-
- errnmax = errno_max ();
- printf ("%d entries in names table.\n", num_error_names);
- printf ("%d entries in messages table.\n", sys_nerr);
- printf ("%d is max useful index.\n", errnmax);
-
- /* Keep printing values until we get to the end of *both* tables, not
- *either* table. Note that knowing the maximum useful index does *not*
- relieve us of the responsibility of testing the return pointer for
- NULL. */
-
- for (errn = 0; errn <= errnmax; errn++)
- {
- name = strerrno (errn);
- name = (name == NULL) ? "<NULL>" : name;
- msg = strerror (errn);
- msg = (msg == NULL) ? "<NULL>" : msg;
- printf ("%-4d%-18s%s\n", errn, name, msg);
- }
-}
-
-#endif
OpenPOWER on IntegriCloud