Work on file cmd/cmp.s
Synthesized-from: v2
--- /dev/null
+/ cmp -- compare files
+
+
+ cmp (sp)+,$3
+ beq 1f
+ jsr r5,mesg; <Usage: cmp arg1 arg2\n\0>; .even
+ sys exit
+1:
+ tst (sp)+
+ mov (sp)+,0f
+ sys open; 0:..; 0
+ bec 1f
+ jsr r5,mesg; <Can't open arg1.\n\0>; .even
+ sys exit
+1:
+ mov r0,f1
+ mov (sp)+,0f
+ sys open; 0:..; 0
+ bec 1f
+ jsr r5,mesg; <Can't open arg2.\n\0>; .even
+ sys exit
+1:
+ mov r0,f2
+ clr r2
+1:
+ jsr r5,getw; f1
+ bvs eof1
+ mov r0,r3
+ jsr r5,getw; f2
+ bvs eof2
+ cmp r0,r3
+ beq 2f
+ mov r0,r4
+ mov r2,r0
+ jsr pc,octal
+ jsr r5,mesg; <: \0>; .even
+ mov r3,r0
+ jsr pc,octal
+ jsr r5,mesg; < \0>;
+ mov r4,r0
+ jsr pc,octal
+ jsr r5,mesg; <\n\0>
+2:
+ add $2,r2
+ br 1b
+eof1:
+ jsr r5,getw; f2
+ bvs 1f
+ jsr r5,mesg; <EOF on arg1.\n\0>; .even
+ sys exit
+1:
+ sys exit
+
+eof2:
+ jsr r5,mesg; <EOF on arg2.\n\0>; .even
+ sys exit
+
+mesg:
+ movb (r5)+,ch
+ beq 1f
+ mov $1,r0
+ sys write; ch; 1
+ br mesg
+1:
+ inc r5
+ bic $1,r5
+ rts r5
+
+getw:
+ mov (r5)+,r1
+ cmp 2(r1),$1
+ bne 1f
+ mov *4(r1),r0
+ bic $!377,r0
+ dec 2(r1)
+ rts r5
+1:
+ sub $2,2(r1)
+ bge 1f
+ mov (r1),r0
+ mov r1,0f
+ add $6,0f
+ sys read; 0:..; 512.
+ mov r0,2(r1)
+ bne 2f
+ sev
+ rts r5
+2:
+ mov r1,4(r1)
+ add $6,4(r1)
+ sub $2,2(r1)
+1:
+ mov *4(r1),r0
+ add $2,4(r1)
+ rts r5
+
+octal:
+ mov r4,-(sp)
+ mov r0,r5
+ mov $6,-(sp)
+1:
+ clr r4
+ alsc $1,r4
+ cmp (sp),$6
+ beq 2f
+ alsc $2,r4
+2:
+ add $'0,r4
+ mov r4,ch
+ mov $1,r0
+ sys write; ch; 1
+ dec (sp)
+ bne 1b
+ tst (sp)+
+ mov (sp)+,r4
+ rts pc
+
+ .bss
+
+ch: .=.+2
+f1: .=.+6; .=.+512.
+f2: .=.+6; .=.+512.
+*4(r1),r0
+ bic $!377,r0
+ dec 2(r1)
+ rts r5
+1:
+ sub $2,2(r1)
+ bge 1f
+ mov (r1),r0
+ mov r1,0f
+ add $6,0f
+ sys read; 0:..
\ No newline at end of file