ASMB,R,L,C HED (FMGR) F.SET: FILTER SET, TEST AND GET ROUTINES * NAME: F.SET * SOURCE: 92071-18018 * RELOC: 92071-16018 * PGMR: G.A.A. * MOD: E.D.B. * * *************************************************************** * * (C) COPYRIGHT HEWLETT-PACKARD COMPANY 1980. ALL RIGHTS * * * RESERVED. NO PART OF THIS PROGRAM MAY BE PHOTOCOPIED, * * * REPRODUCED OR TRANSLATED TO ANOTHER PROGRAM LANGUAGE WITHOUT* * * THE PRIOR WRITTEN CONSENT OF HEWLETT-PACKARD COMPANY. * * *************************************************************** * NAM F.SET,7 92071-1X018 REV.2041 800508 * ENT F.SET, F.TST, F.GET * EXT DR.RD, PK.DR EXT .ENTR, .MVW SUP SKP * * DESCRIPTION * * THESE ROUTINES PROVIDE A FILTER FOR FMGR COMMANDS * WHICH OPERATE ON A SERIES OF FILES (CO, DL, PU, RN). * * THE FMGR BUFFER PK.DR IS USED TO HOLD THE DIRECTORY * BUFFER BETWEEN F.GET CALLS, SO IT SHOULD NOT BE USED * BY THE CALLING ROUTINE. * * * F.SET SETS UP THE FILTER MASK * * CALLING SEQUENCE: * * CALL F.SET(NAME,OPTS) * * WHERE: * * NAME IS THE NAME MASK (3-WORD ARRAY) * A "-" IN ANY POSITION WILL MATCH ANY CHARACTER, * ANY OTHER CHARACTER MUST MATCH EXACTLY * * OPTS IS THE SUBPARAMETER MASK ARRAY (5-WORD ARRAY) * A "-" OR 0 AS ANY SUBPARAMETER WILL MATCH ANY VALUE, * A NEGATIVE SECURITY CODE WILL MATCH A POSITIVE VALUE, * ANY OTHER VALUES MUST MATCH EXACTLY * * * F.TST TESTS A FILE NAMR AGAINST THE FILTER MASK * (F.SET MUST BE USED TO SET UP FILTER) * * CALLING SEQUENCE: * * CALL F.TST(ENTRY) * * WHERE: * * ENTRY IS THE FILE ENTRY TO BE TESTED * (16-WORD ARRAY LOCATED IN MEMORY) * * * F.GET GETS THE NEXT FILE FROM A DIRECTORY * WHICH MATCHES THE FILTER MASK * (F.SET MUST BE USED TO SET UP FILTER). * F.GET WILL ALWAYS RETURN THE CARTRIGE HEADER THE * FIRST TIME IT IS CALLED (IE. WHEN N(2) = 0). * * CALLING SEQUENCE: * * ERR = F.GET(ENTRY,N) * * WHERE: * * ENTRY WILL BE THE NEXT FILE MAIN ENTRY FROM THE DIRECTORY * SPECIFIED BY N. * * N INDICATES THE LAST POSITION SEARCHED WITHIN THE * DIRECTORY. THIS PARAMETER IS A 2-WORD ARRAY. THE * FIRST WORD CONTAINS THE +CRN/-LU OF THE DIRECTORY * BEING SEARCHED; THE SECOND WORD CONTAINS THE FILE * ENTRY POSITION (RELATIVE TO THE BEGINNING OF THE FILE). * * ERR WILL BE THE ERROR RETURN CODE * * POSSIBLE ERRORS: * * 0 NO ERROR (FILE ENTRY RETURNED) * -12 END OF FILE DIRECTORY * -32 CARTRIDGE NOT FOUND SKP * * F.SET ENTRY * NAME NOP OPTS NOP * F.SET NOP ENTRY JSB .ENTR GET PARAMETERS DEF NAME * CLE PRESET MASK-USED FLAG * JSB NAMF GET MASK AND TEST FOR FIRST WORD STA NM1.C SET THE VALUES STB NM1.M FOR LATER * JSB NAMF GET SAME FOR WORD 2 STA NM2.C AND SAVE STB NM2.M * JSB NAMF SAME FOR NAME 3 STA NM3.C STB NM3.M * CLA CLEAR A-REG ELA GET MASK-USED FLAG STA MASK AND SAVE * LDA OPTS GET ADDRESS OF SUB PRAMS * JSB SUTY GET MASK FOR SC STA SC.C1 SAVE SC VALUE ONE SSA IF NEGATIVE, CMA,INA ALSO SAVE POSITIVE SC STA SC.C2 STB SC.M * ISZ OPTS SKIP OVER CRN * JSB SUTY GET MASK FOR TYPE STA TYP.C STB TYP.M * JSB SUTY STB SIZ.M ALS CONVERT SIZE IN BLOCKS TO SECTORS STA SIZ.C * JSB SUTY NOW GET RECORD LENGTH STA RCL.C STB RCL.M SET VALUES * LDA MASK GET MASK-USED FLAG JMP F.SET,I RETURN ALL MASKS SET UP SKP * * NAMF: SET UP NAME MASK * NAMF NOP CLB INITIALIZE MASK WORD LDA NAME,I GET VALUE AND C377 ISOLATE THE HIGH CHAR CPA "HM" IF "-", CCE,RSS THEN LEAVE MASK ALONE, AND SET MASK FLAG LDB C377 ELSE SET HIGH CHAR MASK * XOR NAME,I ISOLATE LOW CHAR CPA "LM" IF "-", CCE,RSS THEN LEAVE MASK ALONE, AND SET MASK FLAG ADB B377 ELSE SET LOW CHAR MASK * LDA NAME,I GET THE VALUE AND B MASK IT ISZ NAME STEP FOR NEXT TIME JMP NAMF,I RETURN A=VALUE, B= MASK * * SUTY: SET UP SUBPARAMETER MASK * SUTY NOP TYPE MASK SET ROUTINE LDA OPTS,I GET CURRENT PRAM SZA,RSS SET MASK BASED ON IF SUPPLIED CLB,RSS CCB B IS MASK ,A IS VALUE ISZ OPTS STEP TO NEXT ENTRY JMP SUTY,I RETURN SKP * * STORAGE AREA * B377 OCT 377 C377 OCT 177400 * NM1.C NOP NM2.C NOP NM3.C NOP SC.C1 NOP SC.C2 NOP TYP.C NOP SIZ.C NOP RCL.C NOP * NM1.M NOP NM2.M NOP NM3.M NOP SC.M NOP TYP.M NOP SIZ.M NOP RCL.M NOP * "HM" OCT 26400 "LM" OCT 55 SKP * * F.TST ENTRY * DADD NOP * F.TST NOP MASK TEST ROUTINE PRAM IS ADDRESS OF DIRECTORY ENTRY JSB .ENTR DEF DADD * LDB DADD,I GET THE ADDRESS * LDA B,I FILE NAME (1) AND NM1.M KEEP UNMASKED CHAR CPA NM1.C IF OK, INB,RSS THEN CONTINUE JMP FEXIT ELSE TAKE FEXIT * LDA B,I FILE NAME (2) AND NM2.M CPA NM2.C INB,RSS JMP FEXIT * LDA B,I FILE NAME (3) AND NM3.M CPA NM3.C INB,RSS JMP FEXIT * LDA B,I FILE TYPE AND TYP.M CPA TYP.C INB,RSS JMP FEXIT * INB INB STEP OVER DISC ADDRESS * LDA B,I FILE SIZE AND SIZ.M CPA SIZ.C INB,RSS JMP FEXIT * LDA B,I RECORD LENGTH AND RCL.M CPA RCL.C INB,RSS JMP FEXIT * LDA B,I SECURITY CODE AND SC.M CPA SC.C1 TWO CHANCES HERE RSS CPA SC.C2 OK? CCA,RSS YES * FEXIT CLA MATCH FAILED EXIT * JMP F.TST,I RETURN SKP * * F.GET ENTRY * ENTRY NOP N NOP * F.GET NOP ENTRY JSB .ENTR GET PARAMETERS DEF ENTRY * LDA N,I GET THE CRN STA CRN ISZ N * * GET AN ENTRY FROM THE FILE DIRECTORY * AGAIN LDB N,I GET THE ENTRY NUMBER ASR 16 EXTEND SIGN DIV .8 DIVIDE BY ENTRIES / BLOCK BLF MULTIPLY OFFSET BY 16 (WORDS) ADB DPKDR ADD DIRECTORY BLOCK OFFSET STB OFF AND SAVE LDB CRN GET CARTRIDGE ID CPB CCRN IF CURRENT CRN, RSS THEN CONTINUE JMP READ ELSE READ FROM FILE DIRECTORY * CPA CBLK IF CURRENT BLOCK, JMP NOREA THEN DON'T READ FROM FILE DIRECTORY * READ STA CBLK SAVE BLOCK NUMBER FOR DR.RD STB CCRN JSB DR.RD NOW READ FROM FILE DIRECTORY DEF *+4 DEF .1 DEF CCRN DEF CBLK * SEZ IF CARTRIDGE NOT FOUND, JMP ER32 THEN TAKE ERROR EXIT * NOREA ISZ N,I INCREMENT ENTRY NUMBER FOR NEXT TIME * LDA OFF,I GET FIRST WORD OF ENTRY SZA,RSS IF END OF DIRECTORY (ZERO), JMP FIN THEN WE ARE FINISHED * INA,SZA,RSS IF PURGED ENTRY (-1), JMP AGAIN THEN CONTINUE * SSA IF CARTRIDGE ENTRY (NEGATIVE), JMP MATCH THEN WE MATCHED * JSB F.TST TEST FILE ENTRY DEF *+2 DEF OFF * SZA,RSS IF FILE DID NOT MATCH FILTER, JMP AGAIN THEN TRY NEXT ENTRY * MATCH LDA OFF NOW MOVE ENTRY TO USER ARRAY LDB ENTRY JSB .MVW DEF .16 NOP * CLA SET FOR NORMAL RETURN JMP EREX * FIN LDA N12 END OF DIRECTORY JMP EREX * ER32 LDA N32 CARTRIDGE NOT FOUND * EREX JMP F.GET,I RETURN * * STORAGE AREA * N6 DEC -6 N12 DEC -12 N32 DEC -32 * .1 DEC 1 .8 DEC 8 .16 DEC 16 * DPKDR DEF PK.DR * CRN NOP CARTRIDGE REFERENCE NUMBER CCRN NOP CURRENT CARTRIDGE REFERENCE NUMBER CBLK NOP CURRENT DIRECTORY BLOCK NUMBER OFF NOP ENTRY MEMORY ADDRESS * MASK NOP MASK-USED FLAG * A EQU 0 B EQU 1 * END EQU * * END