C PROGRAM MATCH.FT C -------------- C C FUNCTION MATCH(IPAT,INS) C C C C C C P.LEMKIN C NATIONAL INSTUTUTES OF HEALTH C BETHESDA, MD 20014 C C C OCT 22, 1976 C AUGUST 12, 1976 C AUGUST 4, 1976 C C PURPOSE C ------- C TEST FOR FILE NAME MATCH WHERE THE PATTERN IS IPAT[1:4] C AND THE INSTANCE IS INS[1:4]. THAT IS IPAT MIGHT BE "*.FT" C AND INS "CAT.FT". C C LET F=[1:3] AND E=[4] SUBSCRIPTS FOR JPAT AND JINS. C LET -.- DENOTE THE TEST OF THE REQUIRED FIELDS C FOR JPAT AND JINS. C C IF (F.E) OR (*.E) OR (F.*) OR (*.*) C THEN RETURN (TRUE=1) ELSE RETURN (FALSE=0); C C .COMPILE MATCH.RL < MATCH.FT C DIMENSION JPAT(2),JPATB(2),JINS(2),JINSB(2) C C C [1] COPY NAMES TO LOCAL ARRAYS JPAT=IPAT JINS=INS C S INC \IPAT# /BUMP ARG PTRS S INC \INS# S TAD I \IPAT S DCA \JPAT# S TAD I \INS S DCA \JINS# C S INC \IPAT# /BUMP ARG PTRS S INC \INS# S TAD I \IPAT S DCA \JPATB S TAD I \INS S DCA \JINSB C S INC \IPAT# /BUMP ARG PTRS S INC \INS# S TAD I \IPAT S DCA \JPATB# S TAD I \INS S DCA \JINSB# C ISTAR=0 S TAD (-5200 /-"*@" S DCA \ISTAR C C C [1.1] FIND THE GENERALIZED PATTERN FORM THIS PARTICULAR C INSTANCE BY REPLACEING "?" IN THE COPY OF THE PATTERN WITH C THE CORESPONDING CHARACTERS IN THE COPY OF THE INSTANCE. CALL QUESTION(JPAT,JINS,JPAT) C C C [2] TEST FOR *.* S TAD \ISTAR / FIRST 2 CHARS S TAD \JPAT S SZA CLA S JMP \400 /NOT (*.-) C S TAD \ISTAR S TAD \JPATB# /EXTENSION S SZA CLA S JMP \300 /NOT *.* BUT IS *.E C YES, *.* RETURN TRUE 200 MATCH=1 RETURN C C C [3] TEST FOR *.E S\300, TAD \JPATB# S CIA S TAD \JINSB# /TEST EXTENSION CHARS S SZA CLA S JMP \400 /E DOES NOT MATCH. SEE IF (F.*) C YES, (*.E) RETURN TRUE GOTO 200 C C C [4] TEST FOR F.E S \400, TAD \JPAT /TEST F[1] S CIA S TAD \JINS S SZA CLA S JMP \600 /FAILED C S TAD \JPAT# /TEST F[2] S CIA S TAD \JINS# S SZA CLA S JMP \600 /FAILED C S TAD \JPATB /TEST F[3] S CIA S TAD \JINSB S SZA CLA S JMP \600 /FAILED C C FOUND EXACT F MATCH, NOW TEST FOR EXACT E MATCH S TAD \JPATB# S CIA S TAD \JINSB# S SZA CLA S JMP \500 /NOT E MATCH SEE IF (F.*) C YES (F.E), RETURN TRUE GOTO 200 C C C [5] TEST IF F.* S \500, TAD \ISTAR S TAD \JPATB# S SZA CLA S JMP \600 /FAILED C YES, F.*, RETURN TRUE GOTO 200 C C C [6] FAILED, RETURN FALSE 600 MATCH=0 RETURN END