Bell 32V development
[unix-history] / usr / src / cmd / cmp.c
CommitLineData
3b600ead
TL
1#include <stdio.h>
2#include <ctype.h>
3
4FILE *file1,*file2;
5int eflg;
6int lflg = 1;
7long line = 1;
8long chr = 0;
9long skip1;
10long skip2;
11
12long otoi();
13
14main(argc, argv)
15char **argv;
16{
17 register c1, c2;
18 char *arg;
19
20 if(argc < 3)
21 goto narg;
22 arg = argv[1];
23 if(arg[0] == '-' && arg[1] == 's') {
24 lflg--;
25 argv++;
26 argc--;
27 }
28 arg = argv[1];
29 if(arg[0] == '-' && arg[1] == 'l') {
30 lflg++;
31 argv++;
32 argc--;
33 }
34 if(argc < 3)
35 goto narg;
36 arg = argv[1];
37 if( arg[0]=='-' && arg[1]==0 )
38 file1 = stdin;
39 else if((file1 = fopen(arg, "r")) == NULL)
40 goto barg;
41 arg = argv[2];
42 if((file2 = fopen(arg, "r")) == NULL)
43 goto barg;
44 if (argc>3)
45 skip1 = otoi(argv[3]);
46 if (argc>4)
47 skip2 = otoi(argv[4]);
48 while (skip1) {
49 if ((c1 = getc(file1)) == EOF) {
50 arg = argv[1];
51 goto earg;
52 }
53 skip1--;
54 }
55 while (skip2) {
56 if ((c2 = getc(file2)) == EOF) {
57 arg = argv[2];
58 goto earg;
59 }
60 skip2--;
61 }
62
63loop:
64 chr++;
65 c1 = getc(file1);
66 c2 = getc(file2);
67 if(c1 == c2) {
68 if (c1 == '\n')
69 line++;
70 if(c1 == EOF) {
71 if(eflg)
72 exit(1);
73 exit(0);
74 }
75 goto loop;
76 }
77 if(lflg == 0)
78 exit(1);
79 if(c1 == EOF) {
80 arg = argv[1];
81 goto earg;
82 }
83 if(c2 == EOF)
84 goto earg;
85 if(lflg == 1) {
86 printf("%s %s differ: char %ld, line %ld\n", argv[1], arg,
87 chr, line);
88 exit(1);
89 }
90 eflg = 1;
91 printf("%6ld %3o %3o\n", chr, c1, c2);
92 goto loop;
93
94narg:
95 printf("cmp: arg count\n");
96 exit(2);
97
98barg:
99 if (lflg)
100 printf("cmp: cannot open %s\n", arg);
101 exit(2);
102
103earg:
104 printf("cmp: EOF on %s\n", arg);
105 exit(1);
106}
107
108long otoi(s)
109char *s;
110{
111 long v;
112 int base;
113
114 v = 0;
115 base = 10;
116 if (*s == '0')
117 base = 8;
118 while(isdigit(*s))
119 v = v*base + *s++ - '0';
120 return(v);
121}