.TITLE FFDELM - SEARCH FOR DELIMITER .IDENT /17MAY7/ ;09:25:00 LV ; .ENTRY FFDELM - SEARCH FOR DELIMITER ;+ ; F F D E L M ; ; PURPOSE: SEARCH FOR THE DELIMITER SPECIFIED BY DELIM ; ; INTERFACE: CALLING SEQUENCE: (FORTRAN-CALLABLE SUBROUTINE) ; CALL FFDELM(PTRS,DELIM) ; ; INPUT: PTRS = ADDRESS OF POINTER ARRAY FOR FFSCAN ; SEE FFSCAN FOR DESCRIPTION OF PTRS ARRAY ; DELIM(INTEGER) = DELIMITER TO BE SEARCHED FOR ; ; OUTPUT: IF THE SEARCH IS UNSUCCESSFUL, IERR IS SET ; .TRUE. AND PTRS(2) POINTS TO THE ADDRESS WHERE ; THE SCAN BEGAN. IF THE SEARCH IS SUCCESSFUL, ; PTRS(2) IS SET TO THE BYTE FOLLOWING THE ; SPECIFIED DELIMITING CHARACTER. ; ; METHOD: THIS ROUTINE IS AN EXTENSION OF THE FFSCAN PACKAGE. ; SEE FFSCAN FOR DESCRIPTION OF PTRS ARRAY. ; ; LANGUAGE: MACRO-11 ; ; RESTRICTIONS: FFINIT MUST BE CALLED BEFORE THIS ROUTINE. ; ;- ; REVISIONS: ; 17-MAY-77 LV UPDATED TO CONFORM TO STANDARDS ; .GLOBL FFDELM .MCALL CALL,RETURN FFDELM: MOV 2(R5),R0 ;GET PTRS ADDR. MOV 4(R5),R2 ;DELIMITER IN R2 TST (R0)+ ;SKIP IERR ADDR. MOV (R0)+,R1 ;GET SCAN POINTER CALL SKPB ;SKIP BLANKS 1$: CMP R1,(R0) ;AT END-OF-LINE? BEQ 2$ ;BRANCH IF YES ;DON'T UPDATE SCAN PTR. CALL FINDD ;LOOK FOR DELIMITER SPECIFED ;IN R2 BCS 2$ ;FOUND A REGULAR DELIMITER BNE 1$ ;CHECK NEXT CHAR IF NO MOV R1,-(R0) ;FOUND DELIMITER, UPDATE BR 3$ ;SCAN PTR. 2$: TST -(R0) ;BACK UP TO PNTR. ADDR. MOV #177777,@-(R0) ;SET IERR 3$: RETURN .PAGE ; SUBROUTINE SKPB ; SKIP BLANKS SUBROUTINE SKPB: CMP R1,(R0) ;AT END-OF-LINE? BEQ 1$ ;RETURN IF YES CMPB (R1)+,#' ;BLANK? BEQ SKPB ;CONTINUE IF YES DEC R1 ;BACK UP OVER NON-BLANK 1$: RETURN ; ; ; ; SUBROUTINE FINDD ; LOOK FOR THE DELIMITER SPECIFIED IN R2 FINDD: MOVB (R1)+,R4 ;GET CHARACTER CMPB R4,#', ;REGULAR DELIMITER? BEQ 1$ ;YES CMPB R4,#' ;REGULAR DELIMITER? BEQ 1$ ;YES CMPB R4,(R2) ;SPECIFIED DELIMITER? CLC ;NO REGULAR DELIMITER FOUND RETURN ;RETURN 1$: SEC ;FOUND REGULAR DELIMITER RETURN .END