.TITLE EQUAL .SBTTL STRING COMPARISON FUNCTION FOR FORTRAN .GLOBL EQUAL ; ; CALL: ; ; LOGICAL EQUAL, FLAG ; FLAG = EQUAL(S1,S2) ; OR FLAG = EQUAL(S1,S2,L) ; OR CALL EQUAL(S1,S2,L,FLAG) ; OR CALL EQUAL(S1,S2,,FLAG) ; ; WHERE S1 AND S2 ARE ARRAYS CONTAINING THE STRINGS TO BE ; COMPARED, L IS THE MAXIMUM NUMBER OF BYTES TO COMPARE, ; AND FLAG RETURNS THE RESULT OF THE COMPARISON (.TRUE. OR ; .FALSE.). COMPARISON STOPS AT THE FIRST NULL IN ; EITHER STRING, OR AT L. ; EQUAL: CLR R0 ;CLEAR FOR RETURN MOV 2(R5),R1 ;ADDRES STRING 1 MOV 4(R5),R2 ;AND STRING 2 CMP @R5,#2 ;2-ARG FORM? BEQ NOLEN CMP 6(R5),#-1 ;NULL 3RD ARG? BEQ NOLEN MOV @6(R5),R3 ;LENGTH IN R3 BLE RETR0 ;IF <= 0, RETURN .FALSE. COMPAR: CMPB (R1)+,(R2)+ ;COMPARE A BYTE BNE RETR0 ;DIFFER TSTB -1(R1) ;BOTH NULL? BEQ ISEQUL ;YES-EQUAL SOB R3,COMPAR ;LOOP ISEQUL: DEC R0 ;ALL AGREE - SET .TRUE. RETR0: CMPB @R5,#4 ;4-ARGUMENT CALL? BNE RETRN MOVB R0,@10(R5) ;YES - RETURN 4TH ARGUMENT RETRN: RTS PC ; NOLEN: CLR R3 ;"INFINITE" MAX. LENGTH BR COMPAR .END