* Copyright (c) 1989 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
* 3. All advertising materials mentioning features or use of this software
* must display the following acknowledgement:
* This product includes software developed by the University of
* California, Berkeley and its contributors.
* 4. Neither the name of the University nor the names of its contributors
* may be used to endorse or promote products derived from this software
* without specific prior written permission.
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
"@(#) Copyright (c) 1989 The Regents of the University of California.\n\
static char sccsid
[] = "@(#)comm.c 5.7 (Berkeley) 11/1/90";
#define MAXLINELEN (_POSIX2_LINE_MAX + 1)
char *tabs
[] = { "", "\t", "\t\t" };
register int comp
, file1done
, file2done
, read1
, read2
;
register char *col1
, *col2
, *col3
;
int ch
, flag1
, flag2
, flag3
;
FILE *fp1
, *fp2
, *file();
char **p
, line1
[MAXLINELEN
], line2
[MAXLINELEN
];
flag1
= flag2
= flag3
= 1;
while ((ch
= getopt(argc
, argv
, "-123")) != EOF
)
/* for each column printed, add another tab offset */
col1
= col2
= col3
= NULL
;
for (read1
= read2
= 1;;) {
/* read next line, check for EOF */
file1done
= !fgets(line1
, MAXLINELEN
, fp1
);
file2done
= !fgets(line2
, MAXLINELEN
, fp2
);
/* if one file done, display the rest of the other file */
if (!(comp
= strcmp(line1
, line2
))) {
(void)printf("%s%s", col3
, line1
);
/* lines are different */
(void)printf("%s%s", col1
, line1
);
(void)printf("%s%s", col2
, line2
);
(void)printf("%s%s", offset
, buf
);
} while (fgets(buf
, MAXLINELEN
, fp
));
if (!(fp
= fopen(name
, "r"))) {
(void)fprintf(stderr
, "comm: can't read %s.\n", name
);
(void)fprintf(stderr
, "usage: comm [-123] [ - ] file1 file2\n");