#include #include FILE *file1,*file2; int eflg; int lflg = 1; long line = 1; long chr = 0; long skip1; long skip2; long otoi(); main(argc, argv) char **argv; { register c1, c2; char *arg; if(argc < 3) goto narg; arg = argv[1]; if(arg[0] == '-' && arg[1] == 's') { lflg--; argv++; argc--; } arg = argv[1]; if(arg[0] == '-' && arg[1] == 'l') { lflg++; argv++; argc--; } if(argc < 3) goto narg; arg = argv[1]; if( arg[0]=='-' && arg[1]==0 ) file1 = stdin; else if((file1 = fopen(arg, "r")) == NULL) goto barg; arg = argv[2]; if((file2 = fopen(arg, "r")) == NULL) goto barg; if (argc>3) skip1 = otoi(argv[3]); if (argc>4) skip2 = otoi(argv[4]); while (skip1) { if ((c1 = getc(file1)) == EOF) { arg = argv[1]; goto earg; } skip1--; } while (skip2) { if ((c2 = getc(file2)) == EOF) { arg = argv[2]; goto earg; } skip2--; } loop: chr++; c1 = getc(file1); c2 = getc(file2); if(c1 == c2) { if (c1 == '\n') line++; if(c1 == EOF) { if(eflg) exit(1); exit(0); } goto loop; } if(lflg == 0) exit(1); if(c1 == EOF) { arg = argv[1]; goto earg; } if(c2 == EOF) goto earg; if(lflg == 1) { printf("%s %s differ: char %ld, line %ld\n", argv[1], arg, chr, line); exit(1); } eflg = 1; printf("%6ld %3o %3o\n", chr, c1, c2); goto loop; narg: printf("cmp: arg count\n"); exit(2); barg: if (lflg) printf("cmp: cannot open %s\n", arg); exit(2); earg: printf("cmp: EOF on %s\n", arg); exit(1); } long otoi(s) char *s; { long v; int base; v = 0; base = 10; if (*s == '0') base = 8; while(isdigit(*s)) v = v*base + *s++ - '0'; return(v); }