ASMB,R,L,C
      HED (FMGR) SY.TR: SEARCH FOR PROGRAMS USING A DISC
*     NAME:   SY.TR 
*     SOURCE: 92071-18074 
*     RELOC:  92071-16074 
*     PGMR:   M.L.K.
*     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 SY.TR,7 92071-1X074 REV.2041 800506 
* 
      ENT SY.TR 
* 
      EXT .ENTR, CR.LU, .XLD
      EXT $ID#, $IDA, $IDSZ, $SWLU
      SUP 
      SKP 
* 
*     DESCRIPTION 
* 
*     THIS ROUTINE SEARCHES THE ID SEGMENTS FOR ANY CURRENTLY 
*     EXECUTING PROGRAMS USING THE SPECIFIED DISC.
*     IT ALSO TESTS FOR USE OF THE SYSTEM AND SWAP FILES. 
*     A LIST OF ADDRESSES POINTING TO THE ID SEGMENT NAMES USING
*     THE DISC AND THE HIGHEST DISC ADDRESS IN USE IS RETURNED
* 
*     CALLING SEQUENCE: 
* 
*     COUNT = SY.TR(DISC, ARRAY, ASIZE, TRACK, SECTR) 
* 
*     WHERE:
* 
*     COUNT WILL BE THE NUMBER OF ACTIVE PROGRAMS ON DISC 
* 
*     DISC  IS THE DISC TO BE EXAMINED
* 
*     ARRAY WILL CONTAIN THE ID SEGMENT ADDRESSES 
* 
*     ASIZE IS THE LENGTH OF ARRAY
* 
*     TRACK WILL BE THE TRACK ADDRESS OF LAST ACTIVE PROGRAM
* 
*     SECTR WILL BE THE SECTOR ADDRESS OF LAST ACTIVE PROGRAM 
      SKP 
* 
*     ENTRY 
* 
DISC  NOP 
ARRAY NOP 
ASIZE NOP 
TRACK NOP 
SECTR NOP 
* 
SY.TR NOP 
      JSB .ENTR     SET UP PARAMETERS 
      DEF DISC
* 
      CLA           INITIALIZE
      STA CNT       CLEAR CONFLICT COUNT
      CCA           SET TRACK 
      STA TRACK,I   AND SECTOR
      STA SECTR,I   TO -1 TO INDICATE NOT USED
      LDA ASIZE,I   SET UP TO COUNT THE ENTRIES IN THE ARRAY
      CMA,INA       SET IT NEGATIVE 
      SSA,RSS       IF IT WAS NEGATIVE OR 0 
      CCA             SET IT TO 1 
      STA ASIZE     NOW STORE IT
* 
      JSB CR.LU     GO GET DISC LU
      DEF *+2 
      DEF DISC,I
* 
      SZA,RSS       IF NOTHING FOUND, 
      JMP SY.TR,I     EXIT
* 
      STA DISC      SAVE DISC LU
      JSB .XLD      GET NUMBER OF ID SEGMENTS 
      DEF $ID#+0
      CMA,INA       SET NEGATIVE FOR LOOP COUNTER 
      STA LPCNT       AND SAVE
* 
      JSB .XLD      GET START OF ID SEGMENTS
      DEF $IDA+0
      STA IDPTR       AND SAVE
* 
      CLA,INA       INITIALIZE
      STA IDSEG      ID SEGMENT NUMBER
* 
LOOP  LDA IDPTR     GET ID POINTER
      ADA .12        POINT TO NAME
      JSB .XLD      GET FIRST WORD OF NAME
      DEF A,I 
      SZA,RSS       IF DORMANT (ZERO),
      JMP NEXT       THEN GO TRY NEXT ENTRY 
* 
      LDA IDPTR 
      ADA .27       POINT TO LU IN ID SEGMENT 
      JSB .XLD        NOW GET IT
      DEF A,I 
      AND B377      ISOLATE LU
      CPA DISC      IF NOT ON SPECIFIED DISC, 
      RSS 
      JMP NEXT       THEN GO TRY NEXT ENTRY 
* 
      LDB IDSEG 
      JSB STUFF     PUT SEGMENT NUMBER INTO CONFLICT ARRAY
* 
      LDA IDPTR 
      ADA .25       POINT TO ID WORD WITH SECTOR (WORD 26)
      JSB .XLD       GET IT 
      DEF A,I 
      AND B377      ISOLATE SECTOR ADDRESS
      ALS            AND CONVERT INTO BLOCKS
      STA TSECT       SAVE FOR TEST 
* 
      LDA IDPTR 
      ADA .26       POINT TO MAIN TRACK WORD (WORD 27)
      JSB .XLD       GET IT 
      DEF A,I 
      JSB HIEST     UPDATE HIGHEST DISC ADDRESS 
* 
NEXT  JSB .XLD      GET ID SEGMENT SIZE 
      DEF $IDSZ+0 
      ADA IDPTR     BUMP ID SEGMENT POINTER 
      STA IDPTR      AND SAVE FOR NEXT ROUND
      ISZ IDSEG     INCREMENT ID SEGMENT NUMBER 
      ISZ LPCNT     IF NOT FINISHED,
      JMP LOOP       THEN GO CHECK NEXT ID SEGMENT
      SKP 
* 
*     CHECK FOR SWAPPING AREA 
* 
      JSB .XLD      GET THE SWAPPING DISC'S LU
      DEF $SWLU+0 
      CPA DISC      IF ON SPECIFIED DISC, 
      CCB,RSS        THEN SET B TO INDICATE SWAP AREA 
      JMP TERM       ELSE TERMINATE 
* 
      JSB STUFF     PUT SWAP INDICATOR IN THE ARRAY 
      JSB .XLD      GET SWAP SECTOR 
      DEF $SWLU+1 
      STA TSECT      SAVE FOR TEST
      JSB .XLD      GET SWAP TRACK
      DEF $SWLU+2 
      JSB HIEST     UPDATE HIGHEST DISC ADDRESS 
* 
*     PUT TERMINATING 0 IN BUFFER 
* 
TERM  CLB           PUT TERMINATING 0 IN THE ARRAY
      JSB STUFF 
      LDA CNT       GET CONFLICT COUNT
      ADA N1        SUBTRACT 1 FOR TERMINATING ZERO 
      JMP SY.TR,I    AND EXIT 
      SKP 
* 
*     THIS ROUTINE TESTS PASSED DISC ADDRESSES (A = TRACK AND 
*     TSECT = SECTOR) AND COMPARES THEM AGAINST TRACK,I AND SECTR,I.
*     IT THEN STORES THE HIGHEST DISC ADDRESS IN TRACK,I AND SECTR,I. 
* 
HIEST NOP 
      LDB TRACK,I   GET CURRENT TRACK 
      CMB,INB       SET IT NEGATIVE 
      ADB A         ADD THE NEW TRACK VALUE 
      SSB           POSITIVE OR NEGATIVE? 
      JMP HIEST,I   NEGATIVE, SO EXIT 
* 
      SZB,RSS       SAME TRACK? 
      JMP SECTS     YES, TEST SECTOR
* 
      STA TRACK,I   NEW TRACK  IS GREATER SO STORE IT 
* 
      LDA TSECT     AND STORE NEW SECTOR
      STA SECTR,I 
      JMP HIEST,I   EXIT
* 
SECTS LDA TSECT     GET NEW SECTOR
      LDB SECTR,I   GET CURRENT SECTOR
      CMB,INB        MAKE IT NEGATIVE 
      ADB A           SUBTRACT CURRENT FROM NEW SECTOR
      SSB,RSS       IF THE NEW SECTOR GREATER OR EQUAL? 
      STA SECTR,I    THEN SAVE IT 
      JMP HIEST,I   EXIT
      SKP 
* 
*     THIS ROUTINE ADDS THE CONTENTS OF THE B REGISTER TO THE 
*     USER'S ID ARRAY.
* 
STUFF NOP 
      ISZ CNT       INCREMENT CONFLICT COUNT
      LDA ASIZE     GET THE REMAINING ARRAY SIZE
      SZA,RSS       IF ARRAY FULL,
      JMP STUFF,I    THEN EXIT
* 
      INA           INCREMENT THE COUNT 
      STA ASIZE      AND SAVE FOR NEXT TIME 
      STB ARRAY,I   STORE B INTO ARRAY
      ISZ ARRAY      AND POINT TO NEXT ENTRY
      JMP STUFF,I   RETURN
      SKP 
* 
*     STORAGE 
* 
N1    DEC -1
* 
.12   DEC 12
.25   DEC 25
.26   DEC 26
.27   DEC 27
* 
B377  OCT 377 
* 
LPCNT NOP           LOOP COUNTER
IDPTR NOP           ID SEGMENT ADDRESS POINTER
IDSEG NOP           ID SEGMENT NUMBER 
CNT   NOP           CONFLICT COUNT
* 
TSECT NOP           TEST SECTOR 
* 
A     EQU 0 
B     EQU 1 
* 
END   EQU * 
* 
      END 
                                                                                                                        