.TITLE LEQ ; AUTHOR: MARTY PORTNER ; WORLD BOOK-CHILDCRAFT, INC. ;SUBROUTINE TO TEST THE LEXICAL EQUALITY OF TWO STRINGS ;CALLING FORMAT: ; ; LEQ(STR1,STR2) ; THIS FUNCTION RETURNS LOGICAL VALUES .TRUE. (= -1 ) AND ; .FALSE. (= 0 ). THE VALUE .TRUE. IS RETURNED IFF THE TWO ; FOLLOWING CONDITIONS ARE MET IN THE SAME CALL: ; ; 1) ISIZE(STR1)=ISIZE(STR2) ; 2) STR1(I)=STR2(I) FOR ALL I, 0< I <= ISIZE(STR1) ; ; DEFAULTS SUPPLIED: NONE .IDENT $LEQ3$ .PSECT $$STRG,RO,I,CON,LCL LEQ:: CMPB #2,@R5 ;ARGS THERE ?? BEQ 1$ ;IF SO, CONTINUE JMP 5$ ;ELSE EXIT (RET. .FALSE.) 1$: CMP #-1,2(R5) ;TEST ARGUMENT VALIDITY BEQ 5$ ; CMP #-1,4(R5) ; BEQ 5$ ; MOV R1,-(SP) ;SAVE REGISTERS MOV R2,-(SP) ; MOV R3,-(SP) ; MOV #-1,R0 ;ASSUME .TRUE. UNTIL PROVEN .FALSE. MOV 2(R5),R1 ;FIND LENGTH OF 'STR1' 2$: TSTB (R1)+ ;LOOK FOR ZERO BYTE BNE 2$ ; SUB 2(R5),R1 ;LENGTH OF 'STR1' IS IN R1 MOV 4(R5),R2 ;FIND LENGTH OF 'STR2' 3$: TSTB (R2)+ ; BNE 3$ ; SUB 4(R5),R2 ;LENGTH OF 'STR2' IS IN R2 CMP R1,R2 ;ISIZE(STR1)=ISIZE(STR2) ?? BNE 40$ ;NO, RETURN .FALSE. DEC R1 ;ELSE USE LENGTH AS LOOP CONTROL INDEX BEQ 50$ ;IF BOTH LENGTHS ARE NULL, RETURN .TRUE. MOV 2(R5),R2 ;R2 HAS ADDR. OF 'STR1' MOV 4(R5),R3 ;R3 " " " 'STR2' 4$: CMPB (R2)+,(R3)+ ;COMPARE STRINGS BYTE FOR BYTE BNE 40$ ;IF UNEQUAL SOMEWHERE,RETURN .FALSE. SOB R1,4$ ;ELSE, CONTINUE JMP 50$ ;IF STRINGS ARE EQUAL, RETURN .TRUE. 40$: CLR R0 ;RETURN .FALSE. 50$: MOV (SP)+,R3 ; MOV (SP)+,R2 ;RESTORE REGISTERS MOV (SP)+,R1 ; JMP RTRN$ ; 5$: CLR R0 ; RTRN$: RTS PC ;RETURN .END