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