.TITLE KOMSTR ; FUNCTION KOMSTR(S1,K1,N,S2,K2) ; ; THIS FUNCTION COMPARES TWO STRINGS OF CHARACTERS. A RESULT OF -1,0, ; OR 1 IS RETURNED TO INDICATE THAT THE FIRST STRING IS LESS THAN, ; EQUAL TO, OR GREATER THAN THE SECOND STRING IN VALUE. THE RESULT ; DEPENDS ON THE COLLATING SEQUENCE OF THE MACHINE. ; ; ; ARGUMENTS --- ; S1 - AN ARRAY CONTAINING ONE OF THE STRINGS TO BE COMPARED ; K1 - INTEGER STATING THE LOCATION WITHIN THE STRING S1 OF THE ; FIRST CHARACTER TO BE COMPARED ; N -- NUMBER OF CHARACTERS TO BE COMPARED ; S2 - AN ARRAY CONTAINING A STRING OF CHARACTERS TO BE COMPARED ; WITH THE CHARACTERS IN STRING S1 ; K2 - INTEGER STATING THE LOCATION WITHIN THE STRING S2 OF THE ; FIRST CHARACTER TO BE COMPARED ; KOMSTR - INTEGER VALUE OF THE FUNCTION SET TO -1,0,1 TO INDICATE ; THAT STRING S1 IS LESS THAN, EQUAL TO, OR GREATER THAN ; STRING S2 ; ; .PSECT KOMSTR::MOV @6(R5),R0 ;N BLE SET0 ;ERROR IF N.LE.0 MOV @4(R5),R1 ;K1 BLE SET0 ;ERROR IF K1.LE.0 MOV @12(R5),R2 ;K2 BLE SET0 ;ERROR IF K2.LE.0 DEC R1 ADD 2(R5),R1 ;ADDRESS(S1(K1)) DEC R2 ADD 10(R5),R2 ;ADDRESS(S2(K2)) LOOP: CMPB (R1)+,(R2)+ ;S1(K1+I-1)-S2(K2+I-1) BLT SETM1 BGT SETP1 SOB R0,LOOP ;DO I=1,N ;STRINGS ARE EQUAL IF LOOP COMPLETES ;AND KOMSTR=R0=0 RTS PC SETM1: MOV #-1,R0 ;STRING 1 .LT. STRING 2 RTS PC ;KOMSTR=-1 SETP1: MOV #1,R0 ;STRING 1 .GT. STRING 2 RTS PC ;KOMSTR=1 SET0: CLR R0 ;ERROR IN CALLING SEQUENCE RTS PC ;KOMSTR=0 .END