.TITLE SRDTST - FILE-NAME MATCHING ROUTINE .IDENT /X001/ .psect srdtst,I,ro,rel ; +01 For sharable code ; 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 ; ; Edits: ; ;No. Date By Reason ;--- --------- ----- ------------------------------------------------- ;+01 01-Mar-79 HRT Added sharable code support ;+02 01-Mar-79 HRT Added call to system register save routine. MATCH:: CALL $SAVAL ; +02 Save all our registers CALL MATCH0 ; GO DO THE COMPLEX WORK RETURN ; ---> ALL DONE - GO HOME TO MOTHER. MATCH0: MOVB (R2)+,R4 ; GET CHARACTER FROM MATCH TEMPLATE CMPB R4,#'* ; IS IT A '*'?(WILD STRING CHARACTER ) BEQ MWILD ; BR IF YES MATCH1: CALL NEXTCH ; GET NEXT CHARACTER FROM FILE-NAME BNE 1$ ; BR IF THEY DON'T MATCH CMPB R3,#'; ; BOTH AT END OF THEIR STRINGS ? BNE MATCH0 ; NO, TRY MATCH REST OF FILE-NAME RETURN ; YES, FILE-NAME MATCHES SO QUIT. 1$: CMPB R4,#'% ; IS TEMPLATE CHARACTER A % ? BNE 2$ ; NOPE. DOESN'T MATCH CMPB R3,#'; ; YEP, ALLOW MATCH FOR ALL BUT ';' BNE MATCH0 ; IT WAS ALLOWABLE SO MATCH IT. 2$: SEC ; FILE-NAME DOESN'T MATCH. RETURN ; TELL CALLER THE BAD NEWS & 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. DID FILE-NAME RUN OUT ? BEQ 2$ ; YES, TOTAL FAILURE. GO UNWIND & QUIT MOV (SP),R2 ; RECOVER ORIGINAL POS. IN FILE-NAME MOVB -1(R2),R4 ; GET TEMPLATE CHARACTER AGAIN INC -(SP) ; SKIP A CHARACTER IN FILE-NAME MOV (SP),R1 ; GET POINTER BACK TO R1 BR 1$ ; TRY TO MATCH FURTHER DOWN THE F-NAME 2$: TST (SP)+ ; TIDY UP STACK SEC ; SAY IT WAS BAD RETURN ; GO HOME WITH TAIL BETWEEN LEGS 3$: CMP (SP)+,(SP)+ ; TIDY STACK ON SUCESS CLC ; CHUFFED TO BITS RETURN ; NEXTCH: MOVB (R1)+,R3 ; GET NEXT CHARACTER FROM FILE-NAME CMPB R3,#040 ; IS IT A SPACE ? BEQ NEXTCH ; YES - IGNORE IT CMPB R3,R4 ; NO - SET CONDITION CODES FOR LATER RETURN ; AND RETURN .END