.TITLE FETCH -- FETCH ENTRY IN NAME GCA .SBTTL TITLE PAGE .IDENT /VIN0.0/ ;+ ; ; AUTHOR: 1LT JOEL IRWIN (SAC/ADIPI) ; ; ; DATE: 27 SEP 77 ; ; ; SYSTEM: OISS SUBSYSTEM: INFORMATIONAL ; ; ; FUNCTIONAL DESCRIPTION: ; ; THIS SUBROUTINE WILL BEGIN SEARCHING IN A SPECIFIED ; LOCATION IN THE NAME GCA FOR A MATCH WITH THE ARGUMENTS ; THE USER SPECIFIES TO MATCH AGAINST. IT RETURNS THE ADDRESS ; OF THE NAME GCA ENTRY THAT MATCHED IF ONE WAS FOUND. ; WILDCARD MATCHING IS ALLOWED (THAT IS, THE USER CAN SPECIFY ; THAT MORE THAN ONE ENTRY CAN MATCH). ; ; ; ; RECORD OF MODIFICATIONS ; ; VERSION DATE BY DESCRIPTION ; _______ ____ __ ___________ ; ; ; ; ; ; GLOBAL EVENT FLAG USAGE: ; ; ;- .SBTTL MACROS,SYMBOLS,AND DATA .PAGE ; ; ; LOCAL MACRO DEFINITIONS AND SYSTEM MACRO CALLS ; ; .MCALL STRUCT,SAVE,GETARG,FIND,GETKY,IF,ANDB,END,IFC,IFFND,PUTARG .MCALL IFNFND,UNSAVE,TEXT,WHILE,AND,ELSE STRUCT ;DEFINE THE STRUCTURED MACROS ; ; ; GLOBAL SYMBOL DEFINITIONS AND DATA ; ; .SBTTL INPUTS,OUTPUTS AND EFFECTS .PAGE ;+ ; ; INPUTS: ; ; ARG1 - ADDRESS OF WHERE IN NAME GCA TO START THE SEARCH ; ARG2 - NUMBER OF BYTES IN GCA TO SEARCH BEFORE FAILURE ; ARG3 - ADDRESS OF GROUP ID (0 VALUE IMPLIES WILDCARD) ; ARG4 - ADDRESS OF USER ID (0 VALUE IMPLIES WILDCARD) ; ARG5 - ADDRESS OF RAD50 NAME (0 VALUE IMPLIES WILDCARD) ; ; OUTPUTS: ; ; ARG1 - ADDRESS OF ENTRY THAT MATCHED (0 VALUE IMPLIES NOMATCH) ; ARG2 - NUMBER OF BYTES REMAINING IN NAME GCA BEFORE FAILURE ; ; EFFECTS: ; ; ;- .PAGE .NLIST BIN .GLOBL FETCH ; .PSECT FETCH,RW ;FOR DEBUGGING PURPOSES ONLY .PSECT FETCH,RO TEXT FETCH, SAVE R0,R1,R2 ; WILDCARD MATCH OCCURS IF THE VALUE IS 0. GETARG @1,R0 ;WHERE DO WE BEGIN FROM GETARG @2,R2 ;# OF BYTES LEFT TO MATCH IN NAME GCA ;BEFORE FAILURE FIND ,R0,R2,#ENTRYSZ GETKY R0 ;ADDRESS OF CURRENT ENTRY IF (R0) EQ ;SKIP ALL BLANK ENTRIES BR NOMCH ;(BOTH BYTES ARE 0) END GETARG @3,R1 ;GROUP ID IF R1 NE ;NOMATCH IF GROUP ID IS NONZERO ANDB R1 NE GPID(R0) ;AND GROUP ID DOESNT MATCH BR NOMCH END GETARG @4,R1 ;USER ID IF R1 NE ;NOMATCH IF USER ID IS NONZERO ANDB R1 NE USID(R0) ;AND USER ID DOESNT MATCH BR NOMCH END GETARG 5,R1 ;ADDRESS OF RAD50 NAME IF @R1 NE ;NOMATCH IF RAD50 ADDR IS NOT 0 ;AND NAMES DONT MATCH ADD #USNAME,R0 ;POSITION R0 TO BEG OF NAME FILED MOV #ELSZ/2,-(SP) ;THIS SEC COMPARES THE TWO FOR A MATCH WHILE (SP) NE ;THIS LOOP IS EXITED ONLY IF THERE ;IS A MATCH AND THE COUNTER IS ;DECREMENTED TO ZERO OR A PAIR OF ;CORRESPONDING CHARACTERS DO NOT MATCH AND (R0)+ EQ (R1)+ DEC (SP) ;ONE LESS TO LOOK AT END IF (SP) NE ;IF DIDNT LOOK AT EVERYTHING, NO MATCH ADD #2,SP BR NOMCH ELSE ;LOOKED AT ALL SO MATCH AND CONTINUE ADD #2,SP END END CLC ;TRIED TO FAIL BUT COULDNT, SO BR MCH ;MATCH NOMCH: SEC ;NOMATCH MCH: IFFND CC ;SUCCESS ROUTINE (MATCH) GETKY R1 ;RETURN ADDRESS OF ENTRY ;THAT MATCHED MOV #NAME+SIZE-ENTRYSZ,R0 ;USED TO FIGURE OUT HOW MANY BYTES LEFT PUTARG @1,R1 ;PUT MATCHING ENTRY ADDR BACK IN ;ARG1 SUB R1,R0 ;# OF BYTES COVERED UNTIL MATCH PUTARG @2,R0 ;RETURN THE ANSWER IFNFND ;FAILURE ROUTINE (NOMATCH) CLR R0 ;RETURN NOMATCH INDICATOR PUTARG @1,R0 END UNSAVE R0,R1,R2 END ENDCHK .END