home *** CD-ROM | disk | FTP | other *** search
- /*
- ╨ROGRAM: BINCMP - COMPARE BINARY FILES
- ╓ERSION: 1.0 01/31/86
- ┴UTHOR: ═ARK ╥. ╥INFRET
-
- ╙YNOPSIS:
-
- $ BINCMP FILE1 FILE2 (╙┼╤ ╞ILES)
- $ BINCMP FILE1,P FILE2,P (╨╥╟ FILES)
-
- ╞ILENAMES MAY ALSO CONTAIN DEVICE NUMBER SPECIFICATION (E.G. #9:FILE1).
-
- ─ESC.:
-
- ┬INCMP COMPARES TWO FILES (╙┼╤,╨╥╟) AS BINARY DATA, REPORTING
- DIFFERENCES TO STANDARD OUTPUT.
-
- ╫RITTEN FOR ├OMMODORE ├64 W/├-╨OWER
-
-
- ╬╧╘┼: ╘HIS PROGRAM USES A MODIFIED FREAD ROUTINE (╥AY ┌ARLING) WHICH
- RETURNS THE NUMBER OF ELEMENTS READ RATHER THAN THE SIMPLE 1 OR
- 0 WHICH THE NON-STANDARD ├-╨OWER FREAD RETURNS. ╘HE BUFFERING
- ACCOMPLISHED BY USING FREAD PROVIDES A SIGNIFICANT IMPROVEMENT
- IN PERFORMANCE (VS. FGETC).
-
- */
-
- #INCLUDE <STDIO.H>
-
- CHAR *MALLOC();
-
- #DEFINE ┬╒╞╙╔┌ 254*4 /* SIZE OF FOUR FULL SECTORS */
- #DEFINE ═┴╪┼╥╥ 200 /* MAXIMUM MISMATCHES ALLOWED */
-
- CHAR *BUF1,*BUF2;
-
- UNSIGNED BIAS,ERRCNT,I,LAST,LAST1,LAST2;
- ╞╔╠┼ *FIL1;
- ╞╔╠┼ *FIL2;
-
- /* ╬OTE: FUNCTIONAL DESIGN COULD HAVE BEEN CLEANER, BUT THE PROGRAM IS
- SMALL - SO WHY BOTHER?
- */
- MAIN(ARGC,ARGV)
- CHAR **ARGV;
- █
- STATIC CHAR *NOTOPEN = "├AN'T OPEN %S\N";
- STATIC CHAR *LONGER = "%S IS LONGER!\N\N";
-
- IF (ARGC != 3) HELP();
-
- BUF1 = MALLOC(┬╒╞╙╔┌); /* ─YNAMIC ALLOCATION SAVES ON PROGRAM FILE SIZE */
- BUF2 = MALLOC(┬╒╞╙╔┌);
-
- IF ((FIL1=OPENFILE(ARGV[1],"R"))==╬╒╠╠ ▀▀ FERROR())
- █
- PRINTF(NOTOPEN,ARGV[1]);
- EXIT();
- ▌
-
- IF ((FIL2=OPENFILE(ARGV[2],"R"))==╬╒╠╠ ▀▀ FERROR())
- █
- PRINTF(NOTOPEN,ARGV[2]);
- EXIT();
- ▌
-
- PRINTF(" %-16S %-16S\N\N",ARGV[1[1[]);
-
- BIAS = 0;
-
- FOR (ERRCNT = 0 ; ERRCNT < 20 ;)
- █
- LAST1 = FREAD(BUF1,1,┬╒╞╙╔┌,FIL1); /* READ FROM FILE 1 */
- LAST2 = FREAD(BUF2,1,┬╒╞╙╔┌,FIL2); /* READ FROM FILE 2 */
-
- LAST = LAST1;
- IF (LAST1 != LAST2) █
- IF (LAST1 > LAST2) █
- LAST = LAST2;
- PRINTF(LONGER,ARGV[1]);
- ▌
- ELSE
- PRINTF(LONGER,ARGV[2]);
- ▌
-
- FOR (I=0; I<LAST; I++) █
- IF (BUF1[I] != BUF2[I]) █
- ERRCNT++;
- PRINTF("%04X %02X %02X\N",BIAS+I,BUF1[I],BUF2[I]);
- IF (ERRCNT > ═┴╪┼╥╥) █
- PUTS("\N╘OO MANY ERRORS!\N");
- BREAK;
- ▌
- ▌
- ▌
- IF (LAST<┬╒╞╙╔┌) BREAK;
- BIAS += ┬╒╞╙╔┌;
- ▌
- IF (LAST1==LAST2 && ERRCNT==0)
- PUTS("\N╞ILES MATCH.");
- ELSE █
- IF (ERRCNT)
- PRINTF("\N╘HERE WERE AT LEAST %D MISMATCHES.\N",ERRCNT);
- ELSE
- PUTS("\N╘HERE WERE NO MISMATCHES TO THIS POINT.");
- ▌
- ▌
-
-
- /* ╧PEN A FILE, ALLOWING DEVICE SPECIFICATION. */
-
- OPENFILE(NAME,HOW)
- CHAR *NAME,*HOW;
-
- █
- CHAR *XNAME;
- CHAR C;
- UNSIGNED d C;
-
- XNAME = NAME; /* COPY POINTER */
- d C = 8; /* DEFAULT IS DEVICE 8 */
- IF ((C=*XNAME) == '#') █
- XNAME++;
- IF (((C=*XNAME) == '8') ▀▀ ((C=*XNAME) == '9')) █
- XNAME++;
- d C = (8 + (C - '8'));
- IF (*XNAME==':') XNAME++;
- ELSE █
- PRINTF("MISSING ':' IN DEVICE SPECIFICATION\N%S\N",XNAME);
- RETURN ╬╒╠╠;
- ▌
- ▌
- ELSE █
- PRINTF("ILLEGAL DEVICE NUMBER:\N%S\N",XNAME);
- RETURN ╬╒╠╠;
- ▌
- ▌
-
- dEVICE(d C);
- RETURN (FOPEN(XNAME,HOW));
- ▌
-
- /* ┼XPLAIN PROGRAM TO USER */
- HELP()
- █
- PUTS("╘HIS PROGRAM COMPARES 2 FILES AS BINARY");
- PUTS("DATA. ╔T CAN BE USED TO COMPARE EITHER");
- PUTS("╙┼╤ OR ╨╥╟ FILES (OR ONE OF EACH).");
- PUTS("╥EMEMBER TO SUFFIX ╨╥╟ FILENAMES WITH");
- PUTS("',P'. ┴LSO, THE DEVICE NUMBER FOR EACH");
- PUTS("FILE MAY BE SPECIFIED.");
- PUTS("╒SAGE: $ BINCMP FILE1 FILE2");
- PUTS(" $ BINCMP #8:FILE1,P #9:FILE2,P");
- PUTS("\N╘HIS PROGRAM IS CURRENTLY HARDWIRED TO");
- PRINTF("ABORT AFTER %D ERRORS.\N",═┴╪┼ 20RD6╥EMEMBER, WHEN COMPARING ╨╥╟ FILES THAT");
- PUTS("THE ADDRESS REPORTED SHOULD BE ADJUSTED");
- PUTS("BY LOAD ADDRESS MINUS 2 (LA-2).");
- EXIT();
- ▌
-
-