1 static char *sccsid = "@(#)cmp.c 4.1 (Berkeley) 10/01/80"; 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) 101 printf("cmp: cannot open %s\n", arg); 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 } 123