ASMB,R,L,C * NAME: QUERY * SOURCE: 92070-18315 * RELOC: 92070-1X315 * PGMR: B.W. * * *************************************************************** * * (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 QUERY,7 92070-1X315 REV.1941 800317 ********************************************************************** * 1) 3/17/80 FIXED OLDSN CALL TO PRCSS TO JMP PRCSS+1 * * * 4.2 Query * * 4.2.1 Purpose * * This is a three routine package to use the indexed libraries. * These routines return to allow the loader to use nonindexed libraries * if they are not indexed. * * 4.2.2 Function * * The QUERY routine is called by SE.MS instead of PRCSS to allow the * searching of indexed libraries. In the event that the library * currently open is not indexed then the file state is returned to that * before the call and PRCSS is called as is now done. If the library is * indexed then PRCSS is instructed to only load 1 module and the library * is positioned to the module to load before calling PRCSS. * * 4.2.3 Calling sequence * * JSB QUERY * RETURNS P+1 ERROR A REG CONTAINS ERROR CODE * P+2 NORMAL A REG CONTAINS PRCSS CODE RETURN * * The following globals are referenced by QUERY. * Note other globals are required by PRCSS. * &MODE 0/1, YES/NO MODULE SPECIFIED IN COMMAND? * &MNAM MODULE NAME * &MLEN MODULE NAME LENGTH IN WORDS * &NMOD 0/1, N MODULES/ 1 MODULE TO PROCESS * ID.CB LIBRARY DCB * * EXTERNAL ROUTINES. * L.ADD LOADER LIB SYMBOL SEARCH * SER SEARCH INDEXED LIB * PRCSS PROCESS LIBRARY MODULE * FMPER PROCESS FMP ERROR * LDRER PROCESS LOADR ERROR * * 4.2.4 Operation * * Query * 1) MODULE OR SYMBOL MODE? * 2) MODULE * 3) REQUEST MODULE FROM LIBRARY (CALL SER) * 4) CALL PSP (POST SEARCH PROCESS) * 5) CALL P&P (POSITION LIB AND PROCESS) * 6) RETURN * * 7) SYMBOL * 8) REQUEST SYMBOL INDEX ENTRY (CALL SER) * 9) CALL PSP * 10) SEE IF ANY SYMBOLS FIX UNDEFS? (L.ADD CALL) * A) YES CALL P&P * 11) GOTO 8 * *  PSP (TEST SER RETURN) *  1) EOF OR NOT FOUND RETURN FROM QUERY *  2) ANY SER ERROR RETURN APP. ERROR MSG. *  3) IF NOT INDEXED *   A) POSITION FILE TO START *   B) SET SCAN N MODULES * C) PROCESS LIBRARY ALL MODULES * D) RETURN FROM QUERY * 4) RETURN FROM PSP * * P&P (POSITION AND PROCESS LIBRARY MODULE) * 1) POSITION FILE TO CURRENT NAM * 2) SET SCAN 1 MODULE * 3) PROCESS 1 MODULE OF LIBRARY * 4) RETURN FROM P&P * ******************************************************************* * SUP PRESS EXTRANOIUS LISTING ENT QUERY * EXT APOSN FMP ROUTINE TO POSITION FILES EXT PRCSS LOADER PROCESS RELOATABLE MODULE EXT FMPER LOADER FMP ERROR ROUTINE EXT LDRER LOADER ERROR ROUTINE EXT RWNDF FMP REWIND ROUTINE EXT $FNAM SET COMPARE FOR MODULE NAME EXT ID.CB DCB OF LIBRARY FILE EXT SER INDEXED FILE SEARCH ROUTINE EXT L.ADD LOADER LIB ROUTINE TO SEARCH SYM TAB EXT &MNAM MODULE NAME (IN PRCSS) EXT &MLEN MODULE NAME LENGTH IN WORDS EXT &MODE 0/1 MODULE/SYMBOL SEARCH EXT &NMOD 0/1 N/1 MODULES TO RELOCATE (PRCSS) EXT FDONE FLAG PRCSS ON READ FIRST REC EXT NOR.L NUMBER TO FLAG ANYTHING LOADED EXT NM1.L FLAG USED BY PRCSS EXT SCSEG FLAG USED BY PRCSS EXT POST FMP POST FILE EXT .MVW MOVE WORDS A EQU 0 B EQU 1 * QUERY NOP JSB RWNDF TEST LIBRARY TO SEE IF REWINDABLE DEF *+3 DEF ID.CB LIBRARY DCB TO TEST REWIND DEF ERROR * CPA N3 IF ERROR IS -3 (NOT REWINDABLE) THEN JMP OLDSN FILE INDEX NOT USABLE PROCESS IN OLD WAY * CLA STA IREC CLEAR CURRENT POSITION TO START SCAN * * MAKE COPY OF DCB TO USE SEPARATE DCB FOR INDEX AND RELOCATION * BECAUSE THE NAMR IS NOT AVAILABLE JUST COPY DCB HEADER * AND REINITIALIZE THE ABSOLUTE POINTERS IN DCB HEADER TO DATA * WITH EITHER A RWNDF CALL OR APOSN CALL * THIS CODE IS WORTH ABOUT 10% OF LOADER TIME. * IF IT IS REMOVED SER WILL HAVE TO BE MODIFIED TO REMEMBER ITS * LAST LOCATION AND USE APOSN TO POSITION TO THE CURRENT POSITION * IN THE INDEX BEING LOOKED AT. * LDA @D.CB LDB @D.DX JSB .MVW MOVE IDCB HEADER INTO NEW DATA BLOCK DEF P16 TO FORM LOCAL INDEX DCB DEF 0 * JSB RWNDF DEF *+3 PRAY FOR THIS! DEF ID.DX TO RESET ABSOLUTE POINTERS TO DATA BUFFER DEF ERROR CURRENTLY DOES ON L AND RTE-IVB. 2/28/80 SZA JMP QUERY,I * CCB INIT FLAGS USED BY PRCSS TO STB NOR.L SIGNAL RESULTS OF PROCESS RUN STB NM1.L * LDA &MODE SEE IF MODULE MODE. SZA 0- MODULE 1- SYMBOL JMP SYM * STA $FNAM CLEAR NEXT NAM WANT SPECIFIC NAM STA ERROR SET MODE FOR REQUEST MODULE JSB SER DEF *+8 DEF ID.DX LIBRARY DCB DEF ERROR ERROR RETURN DEF &MNAM MODULE NAME DEF &MLEN MODULE NAME LENGTH WRDS DEF IREC RECORD # POSITION OF MODULE IN LIB DEF IBLK BLOCK # DEF IWRD WORD # * JSB PSP CHECK FOR ERROR RETURN JSB P&P POSITION FILE AND PROCESS * ISZ QUERY MAKE GOOD RETURN JMP QUERY,I SAVING RETURNED A REG FROM PRCSS * SYM CLA,INA SET REQUEST FOR NEXT NAM STA $FNAM SO THAT ENT RECORD IS FOR CLA MODULE THAT HASN'T BEEN LOOKED STA ERROR AT YET! JSB SER DEF *+8 DEF ID.DX LIB DCB DEF ERROR DEF &MNAM MODULE NAME DEF &MLEN MODULE NAME LENGTH DEF IREC NAM RECORD # DEF IBLK BLK # DEF IWRD WRD # JSB PSP CHECK FOR ERROR RETURN * * SEARCH ENT SYMBOLS IN THIS AND SUCCESSIVE NAM MODULES * RQLP CLA,INA STA ERROR SET MODE FOR ENT INDEX RECORD JSB SER DEF *+8 DEF ID.DX LIBRARY DCB DEF ERROR DEF ADENT ADDRESS OF ENT INDEX REC DEF LNENT LENGTH OF ENT INDEX REC DEF IREC LAST VALID NAM RECORD # DEF IBLK BLK # DEF IWRD WRD # * JSB PSP CHECK FOR ERROR RETURN * * SEE IF ANY SYMBOLS FIX UNDEFS? * LDA ADENT LOAD ADDRESS OF INDEX REC ADA LNENT CALC ADDRESS OF WORD BEYOND REC STA CNTR SAVE IN END COUNT LDA ADENT ADA P3 STEP TO LENGTH OF FIRST SYMBOL STA NXSYM SAVE ADDRESS OF LEN OF CURRENT SYM * TSTLP LDA NXSYM GET ADDRESS OF SYM LEN LDB A,I CPB P3 IF SYM LEN <> 3 THEN NO MATCH RSS THIS RELEASE JMP NXT? INA STEP TO SYMBOL STA ADSYM * JSB L.ADD SEE IF SYMBOL UNDEFINED DEF *+5 DEF ADSYM,I DEF VALSM RETURNED SYMBOL VALUE DEF SADDR RETURNED SYMBOL TABLE ADDRESS DEF RESLT 0 FND, 1 NOT FND, 2 UNDEF * LDA RESLT CPA P2 JMP FND RESOLVES UNDEF SO RELOCATE! * NXT? LDA NXSYM SEE IF MORE SYMBOLS IN REC ADA A,I ADDRESS OF LENGTH OF NEXT SYM INA STEP TO ADDRESS OF LEN NEXT SYM STA NXSYM CMA,INA ADA CNTR END OF RECORD YET? CMA,INA SSA JMP TSTLP MORE SYMBOLS JMP RQLP GET NEXT ENT ENTRY * FND JSB P&P PROCESS THIS MODULE JMP SYM SKIP TO NEXT NAM MODULE AND CONT SEARCH * SKP * *P&P POSITION AND PROCESS THE FILE TO DO 1 MODULE * P&P NOP JSB APOSN POSITION LIB FILE TO LAST DEF *+6 VALID NAM RECORD DEF ID.CB+0 LIB DCB DEF ERROR+0 DEF IREC RECORD FOR CURRENT NAM MODULE DEF IBLK DEF IWRD * CLA,INA STA &NMOD SET FOR REL ONLY 1 MODULE STA FDONE FORCE READ OF NAM RECORD BY PRCSS CLE FLAG NEW LOAD JSB PRCSS REL CURRENT MODULE JMP QUERY,I ERROR RETURN FROM PRCSS JMP P&P,I NORMAL RETURN * SKP * * PSP POST SEARCH PROCESSING FOR ERROR RETURNS * PSP NOP LDA ERROR IF NO ERROR AT ALL RETURN SZA,RSS JMP PSP,I CPA =B100003 EOF OR NOT FOUND IN INDEX RSS JMP M.ERS * ISZ QUERY DO ERROR FREE RETURN FROM QUERY CLA STA SCSEG CLEAR RETURNING FROM SEG NAM FLAG! CCA SET A EOF RETURN LIKE PRCSS JMP QUERY,I * M.ERS CPA =B100002 IF NO DIRECTORY FAKE CALL TO PRCSS JMP OLDSN IN OLD NON INDEXED METHOD * *PROCESS LOADER ERRORS HERE IF FMP ERROR THEN RETURN AND LET *CALLER PROCESS FMP ERROR FMP ERROR CODE RETURNED IN A REG * M.ER2 CPA =B100000 BAD INDEX RECORD RSS JMP M.ER3 LDA P11 IL INDEX JMP PRTER POST ERROR M.ER3 CPA =B100001 BAD CHECKSUM RSS JMP QUERY,I TAKE FMP ERROR RETURN * LDA N1 CK SUM PRTER JSB LDRER PRINT LOADR ERROR MESSAGE CLA TAKE ERROR EXIT SUPPESS FURTHOR MESSAGES JMP QUERY,I * SKP * * OLDSN RESET CONDITIONS TO ALLOW THIS CODE TO BE INVISABLE * IF THE FILE BEING SEARCHED IS NOT INDEXED * OLDSN JSB RWNDF REWIND FILE TO START DEF *+3 DEF ID.CB+0 LIB DCB DEF ERROR CLA SET SCAN N MODULES STA &NMOD INA FORCE READ OF FIRST RECORD STA FDONE LDA QUERY RESET RETURN ADDRESS AS IF THIS CODE STA PRCSS NEVER EXISTED. CLE FLAG NEW LOAD JMP PRCSS+1 PRCSS WILL RETURN TO QUERY'S CALLER * SKP *DATA AREA ADENT BSS 1 ADDRESS OF INDEX ENT BUFFER LNENT BSS 1 LENGTH OF INDEX ENT RECORD ADSYM BSS 1 ADDRESS OF SYMBOL FOR CALL CNTR BSS 1 END MARK FOR SYMBOL COMPARE LOOP ERROR BSS 1 ERROR PARM FOR CALLS IREC BSS 1 POSITION NAM RECORD IBLK BSS 1 IWRD BSS 1 P16 DEC 16 N1 DEC -1 N3 DEC -3 NXSYM BSS 1 POINTER TO CURRENT SYM IN ENT RECORD P11 DEC 11 P2 DEC 2 P3 DEC 3 RESLT BSS 1 RESULT OF SYMBOL TABLE SEARCH SADDR BSS 1 SYMBOL TABLE ADDRESS IF DEFINED VALSM BSS 1 SYMBOL VALUE IF KNOWN @D.CB DEF ID.CB+0 ADDRESS OF DCB FROM CALLER @D.DX DEF ID.DX+0 ADDRESS OF LOCAL DCB ID.DX BSS 272 LOCAL DCB TO REDUCE IO ON LIB SEARCH END