diff options
author | jkh <jkh@FreeBSD.org> | 1993-06-18 04:22:21 +0000 |
---|---|---|
committer | jkh <jkh@FreeBSD.org> | 1993-06-18 04:22:21 +0000 |
commit | 7067738d6ce62410bf037507ed279733f38b3910 (patch) | |
tree | 6f106f098cccf2f7c2095fd71351c516fa2c3890 /gnu/usr.bin/rcs/merge/merge.c | |
download | FreeBSD-src-7067738d6ce62410bf037507ed279733f38b3910.zip FreeBSD-src-7067738d6ce62410bf037507ed279733f38b3910.tar.gz |
Updated GNU utilities
Diffstat (limited to 'gnu/usr.bin/rcs/merge/merge.c')
-rw-r--r-- | gnu/usr.bin/rcs/merge/merge.c | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/gnu/usr.bin/rcs/merge/merge.c b/gnu/usr.bin/rcs/merge/merge.c new file mode 100644 index 0000000..4067c18 --- /dev/null +++ b/gnu/usr.bin/rcs/merge/merge.c @@ -0,0 +1,97 @@ +/* merge - three-way file merge */ + +/* Copyright 1991 by Paul Eggert + Distributed under license by the Free Software Foundation, Inc. + +This file is part of RCS. + +RCS 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. + +RCS 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 RCS; see the file COPYING. If not, write to +the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. + +Report problems and direct all questions to: + + rcs-bugs@cs.purdue.edu + +*/ + +#include "rcsbase.h" + + +static char const usage[] = + "\nmerge: usage: merge [-p] [-q] [-L label1 [-L label3]] file1 file2 file3\n"; + + static exiting void +badoption(a) + char const *a; +{ + faterror("unknown option: %s%s", a-2, usage); +} + + +mainProg(mergeId, "merge", "$Id: merge.c,v 1.2 1991/08/19 03:13:55 eggert Exp $") +{ + register char const *a; + char const *label[2], *arg[3]; + int labels, tostdout; + + labels = 0; + tostdout = false; + + while ((a = *++argv) && *a++ == '-') { + switch (*a++) { + case 'p': tostdout = true; break; + case 'q': quietflag = true; break; + case 'L': + if (1<labels) + faterror("too many -L options"); + if (!(label[labels++] = *++argv)) + faterror("-L needs following argument"); + --argc; + break; + default: + badoption(a); + } + if (*a) + badoption(a); + --argc; + } + + if (argc != 4) + faterror("%s arguments%s", + argc<4 ? "not enough" : "too many", usage + ); + + /* This copy keeps us `const'-clean. */ + arg[0] = argv[0]; + arg[1] = argv[1]; + arg[2] = argv[2]; + + switch (labels) { + case 0: label[0] = arg[0]; /* fall into */ + case 1: label[1] = arg[2]; + } + + exitmain(merge(tostdout, label, arg)); +} + + +#if lint +# define exiterr mergeExit +#endif + exiting void +exiterr() +{ + tempunlink(); + _exit(DIFF_TROUBLE); +} |