home *** CD-ROM | disk | FTP | other *** search
- ;COMPARE.ASM
- ;11/??/77 ORIGINALLY WRITTEN BY WARD CHRISTENSEN
- ;12/31/77 ADD PICKUP OF SECOND FILENAME IF BLANK
- ;01/08/77 ADD SEQIO MACLIB TO READ BIG BLOCKS
- BSIZE EQU 4096 ;DISK BUFFER SIZE (TIMES 2)
- ORG 100H
- MACLIB SEQIO
- MOVE MACRO ?F,?T,?L
- MVI B,?L
- LXI D,?F
- LXI H,?T
- CALL MOVER
- ENDM
- ;TYPE SINGLE CHAR OR CHAR IN A
- TYPE MACRO ?C
- IF NOT NUL ?C
- MVI A,?C
- ENDIF
- PUSH B
- PUSH D
- PUSH H
- PUT CON
- POP H
- POP D
- POP B
- ENDM
- PRINT MACRO ?L
- LOCAL Z
- CALL Z
- IRP ?M,<?L>
- DB ?M
- ENDM
- DB '$'
- Z POP D
- MVI C,@MSG
- CALL @BDOS
- ENDM
- ;
- ;COMPARE.ASM - COMPARES 2 FILES
- ;
- ;COMMAND FORMAT: COMPARE NAME1 NAME2
- ; IF NAME2 = NAME1 BUT IS ON B DISK,
- ; JUST TYPE: COMPARE NAME1 B:
- ;
- PRINT <'COMPARE.COM 1/8/78',0DH,0AH>
- ;
- ;INIT STACK
- ;
- POP H ;GET CP/M RET ADDR
- SHLD EXIT+1 ;MODIFY RETURN ADDR
- LXI SP,STACK ;GET MY STACK
- ;
- ;IF THE SECOND FCB IS BLANK,
- ;MOVE IN THE NAME FROM THE FIRST
- ;
- LDA @TFCB+17
- CPI ' '
- JNZ MOVE2 ;NOT BLANK
- MOVE @TFCB+1,@TFCB+17,11
- ;
- ;'DECLARE' BOTH FCB'S
- ;
- MOVE2 FILE INFILE,FILE1,,1,,BSIZE
- FILE INFILE,FILE2,,2,,BSIZE
- ;
- ;COMPARE THE 2 FILES 1 BYTE AT A TIME
- ;
- COMP CALL READ1
- MOV B,A ;SAVE CHAR
- PUSH B
- CALL READ2
- POP B
- CMP B
- JZ COMP
- ;
- ;FILES UNEQUAL
- ;
- UNEQUAL PRINT 'FILES UNEQUAL AFTER '
- PRBYTES LXI D,BYTES
- MVI C,@MSG
- CALL @BDOS
- PRINT <'LAST DATA READ FROM FILE 1:',0DH,0AH>
- LHLD PRTPTR
- DCR L
- MVI B,0
- PRTLP INR L
- MOV A,M
- CPI 0DH
- JZ GOTCR
- CPI 0AH
- JZ TYPEIT
- CPI 9 ;TAB
- JZ TYPEIT
- CPI ' '
- JC HEX
- CPI 7FH
- JNC HEX
- TYPEIT TYPE
- LDA COL
- INR A
- STA COL
- CPI 60
- JC NEXT
- XRA A
- STA COL
- PUSH B
- PUSH H
- PRINT <0DH,0AH>
- POP H
- POP B
- JMP NEXT
- GOTCR XRA A
- STA COL
- MVI A,0DH
- JMP TYPEIT
- HEX PUSH PSW ;SAVE CHAR
- TYPE '('
- POP PSW
- PUSH PSW
- RAR
- RAR
- RAR
- RAR
- CALL NIBBL
- POP PSW
- CALL NIBBL
- LDA COL
- ADI 3
- STA COL
- MVI A,')'
- JMP TYPEIT
- NEXT DCR B
- JNZ PRTLP
- JMP EXIT
- ;
- ;READ BYTE FROM FILE 1
- ;
- READ1 GET FILE1
- JZ EOF1 ;GOT EOF?
- LHLD PRTPTR
- MOV M,A
- INR L
- SHLD PRTPTR
- PUSH PSW ;SAVE CHAR
- LXI H,BYTES+5
- READI MOV A,M
- ORI '0' ;IN CASE IT WAS BLANK
- INR A
- MOV M,A
- CPI '9'+1 ;TIME TO CARRY?
- JNZ READNC
- MVI M,'0'
- DCX H
- JMP READI
- READNC POP PSW
- RET
- ;
- ;EOF ON FILE 1 - SET FLAG, READ 2
- ;
- EOF1 MVI A,'Y'
- STA EOFLG
- CALL READ2
- PRINT <'EOF FILE 1, NOT FILE 2',0DH,0AH>
- JMP UNEQUAL
- ;
- READ2 GET FILE2
- RNZ ;NO EOF
- ;
-
- ;GOT EOF ON FILE 2, MUST HAVE GOTTEN IT ON FILE 1
- ;
- EOF2 LDA EOFLG
- CPI 'Y'
- JZ AOK
- PRINT <'EOF FILE 2 BEFORE FILE 1',0DH,0AH>
- JMP UNEQUAL
- ;
- ;A-OK - FILES MATCH
- ;
- AOK PRINT 'FILES MATCH, LENGTH IS '
- LXI D,BYTES
- MVI C,@MSG
- CALL @BDOS
- ;NOTE THE FOLLOWING DOES NOT RESTORE CP/M'S
- ;STACK POINTER, BUT THAT IS 'OK' BECAUSE THE
- ;FIRST INSTRUCTION IN CP/M IS A LXI SP
- EXIT JMP $-$ ;CP/M RET ADDR (MODIFIED)
- ERXIT POP D ;GET MESSAGE
- MVI C,@MSG
- CALL @BDOS
- JMP EXIT
- NIBBL ANI 0FH
- CPI 10
- JC NUM
- ADI 7
- NUM ADI '0'
- TYPE
- RET
- ;MOVE FROM (DE) TO (HL) LENGTH IN B
- MOVER LDAX D
- MOV M,A
- INX D
- INX H
- DCR B
- JNZ MOVER
- RET
- EOFLG DB 'N'
- COL DB 0
- BYTES DB ' BYTES',0DH,0AH,'$'
- PRTPTR DW BUFF
- DS 30 ;STACK
- STACK EQU $
- ;ORG TO PAGE BECAUSE 'INR L' USED TO LOOP THRU IT
- ORG ($+255) AND 0FF00H ;TO PAGE
- BUFF EQU $
- REPT 16
- DB ' '
- ENDM
- BUFFERS EQU $
- MEMSIZE EQU BUFFERS+@NXTB
- END
-