.TITLE DIRTST FILE-NAME MATCHING ROUTINE .IDENT /12APR82/ ; EDIT # 0001 8 JAN 1979 11:46:30 DR1:[300,3]SRDTST.MAC;3 ;**V5.0 ; PREVIOUS EDIT 15 DEC 1978 17:56:40 DR1:[300,3]SRDTST.MAC;2 ;**V5.0 ;**-2 ; ; THIS MODULE WAS FORMERLY "SRDTST" FILE-NAME MATCHING ROUTINE FOR ; SORT FILE DIRECTORY UTILITY SRD V5.0 ; ; SPECIAL TEMPLATE CHARACTERS INCLUDE: ; "*" - WILD STRING ; "%" - WILD CHARACTER ; "?" - WILD CHARACTER ; ; ON ENTRY: ; R1 POINTS TO THE ACTUAL FILE-NAME ; R2 POINTS TO THE MATCH TEMPLATE ; NB: ; BOTH THE FILE-NAME AND THE TEMPLATE MUST TERMINATE ; IN A SEMICOLON (;). ; ; RETURNS SUCCESS OR FAILURE INDICATOR IN THE 'C'-BIT ; ;***** ; ; UPDATE 4/12/82 -- PRS; REVISE SRDTST.MAC TO BE A LITTLE LESS TWISTED ; AND REMOVE AN ENDLESS LOOP PROBLEM IF MATCH TEMPLATE ; TERMINATES IN "?;" ; ;***** ;- ; .PSECT $CODE1,RO,I,LCL,REL,CON .DRTST:: ;GLOBAL ENTRY POINT CALL $SAVAL ;SAVE ALL REGISTERS ; MATCH0: MOVB (R2)+,R4 ;GET CHARACTER FROM MATCH TEMPLATE CMPB R4,#'* ;IS IT A '*' ? ( WILD STRING CHARACTER ) BEQ MWILD ;BR IF YES MATCH1: 1$: MOVB (R1)+,R3 ;GET NEXT CHARACTER FROM FILE-NAME CMPB R3,#40 ;IS IT A SPACE ? BEQ 1$ ;BRANCH IF YES, IGNORE IT 5$: CMPB R4,#'% ;WILD CHARACTER IN TEMPLATE ? BEQ 10$ ;BRANCH IF YES, MATCHES ANYTHING CMPB R4,#'? ;SAME FOR "?" BEQ 10$ CMPB R3,R4 ;CHECK 2 CHARACTERS BNE 15$ ;BRANCH IF DON'T MATCH 10$: CMPB R3,#'; ;CHECK FOR END OF FILE-NAME BNE MATCH0 ;BRANCH IF MORE TO GO CLC ;ELSE, SHOW SUCCESS RETURN ;AND EXIT 15$: SEC ;SHOW FAILURE RETURN ;AND EXIT ; MWILD: MOVB (R2)+,R4 ;GET NEXT CHARACTER FROM TEMPLATE CMPB R4,#'* ;ANOTHER WILD CARD ?? BEQ MWILD ;YES, DON'T BE B....Y SILLY ! MOV R2,-(SP) ;SAVE CONTEXT FOR LATER MOV R1,-(SP) ;.. 1$: CALL MATCH1 ;TRY TO MATCH REMAINDER OF TEMPLATE. BCC 3$ ;WE MANAGED IT. CMPB @(SP)+,#'; ;IT DIDN'T. WAS IT BECAUSE FILE-NAME RAN OUT ? BEQ 2$ ;YES, TOTAL FAILURE. GO UNWIND & QUIT. MOV (SP),R2 ;RECOVER ORIGINAL POSITION IN FILE-NAME MOVB -1(R2),R4 ;GET TEMPLATE CHARACTER AGAIN INC -(SP) ;SKIP A CHARACTER IN FILE-NAME THAT WAS WRONG MOV (SP),R1 ;GET POINTER BACK TO R1 BR 1$ ;TRY TO MATCH FURTHER DOWN THE FILE-NAME. 2$: ADD #2,SP ;TIDY UP STACK SEC ;SAY IT WAS BAD RETURN ;GO HOME WITH TAIL BETWEEN LEGS 3$: ADD #4,SP ;TIDY STACK ON SUCESS CLC ;CHUFFED TO BITS RETURN ; ; .END