SFM 
          IDENT  SFM,SFM
          PERIPH
          BASE   MIXED
          SST 
 STI$     EQU    1           SET UNCONDITIONAL RETURN FROM *COMPSTI*
*COMMENT  SFM - SYSTEM FILE MANAGER.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          TITLE  SFM - SYSTEM FILE MANAGER. 
          SPACE  4
***       SFM - SYSTEM FILE MANAGER.
*         G. R. MANSFIELD.  70/10/02. 
*         R. A. JAPS.        75/01/02.
*         S. L. KSANDER.     75/05/26.
*         P. D. HAAS.        79/05/23.
          SPACE  4
***              SFM PERFORMS VARIOUS FILE MANAGING TASKS FOR A JOB.
          SPACE  4
***       CALL. 
* 
* 
*T        18/ *SFM*,1/,1/1,4/,12/ CODE,6/,18/ FET 
*         CODE   FUNCTION CODE
*         FET    ADDRESS OF FET 
* 
*T FET    42/ LFN , 17/  , 1/0
*T,FET+1  12/ ET , 3/  , 1/E, 26/   , 18/ FIRST 
*T,FET+2  42/  , 18/  IN
*T,FET+3  42/  , 18/  OUT 
*T,FET+4  42/  , 18/ LIMIT
*T,FET+5  60/ 
*T,FET+6  60/ 
*T,FET+7  12/ EQ, 24/ , 12/ TY, 6/ , 6/ WI
* 
*         LFN = LOCAL FILE NAME.
*         ET  = EQUIPMENT TYPE. 
*         E   = RETURN ERROR CODE.
*         EQ  = EST ORDINAL.
*         TY  = DAYFILE TYPE. (SEE COMSIOQ FOR DEFINED CODES).
*                1 = SYSTEM DAYFILE 
*                2 = ACCOUNT DAYFILE
*                3 = ERRLOG DAYFILE 
*                4 = MAINTENANCE LOG DAYFILE
*         WI  = WORD INDEX IN SECTOR (SETDI). 
* 
*         RETURN. 
* 
*T FET    42/  *FILE NAME*,8/  EC,9/,1/1
*         EC     ERROR CODE 
          SPACE  4
***       DAYFILE MESSAGES. 
* 
* 
*         * SFM ARGUMENT ERROR.*
*                ARGUMENT TO SFM WAS OUT OF RANGE.
* 
*         * SFM BML MESSAGE LENGTH ERROR.*
*                BML MESSAGE LENGTH IS = 0, OR .GT. 6.
* 
*         * SFM INCORRECT REQUEST.* 
*                CAN INDICATE ONE OF THE FOLLOWING CONDITIONS - 
*                1. SFM NOT CALLED WITH AUTO RECALL.
*                2. FUNCTION CODE OUT OF RANGE. 
*                3. USER DOES NOT HAVE SYSTEM ORIGIN PRIVILEGES.
*                4. CALLING PROGRAM IS NOT SSJ=.
* 
*         * SFM INCORRECT DAYFILE CODE.*
*                DAYFILE CODE PASSED IN THE FET WAS NOT WITHIN RANGE. 
* 
*         * SFM INCORRECT EQUIPMENT.* 
*                EQUIPMENT NOT WITHIN EST OR NOT MASS STORAGE.
* 
*         * SFM FILE NOT FOUND.*
*                REQUESTED FILE WAS NOT FOUND.
* 
*         * SFM DUPLICATE FILE FOUND.*
*                THE REQUESTED FILE IS ALREADY ATTACHED TO THE
*                CONTROL POINT. 
* 
*         * SFM FILE NOT ON MASS STORAGE.*
*                SELF EXPLANATORY.
* 
*         * SFM I/O SEQUENCE ERROR.*
*                ACTION HAS BEEN REQUESTED ON A BUSY FILE.
* 
*         * SFM FILE EMPTY.*
*                SELF EXPLANATORY.
* 
*         * SFM FILE NAME ERROR.* 
*                FILE NAME, LFN, PASSED THROUGH FET IS NOT A
*                VALID FILE NAME. 
* 
*         * SFM FNT FULL.*
*                A FAST ATTACH FILE COULD NOT BE CREATED BECAUSE
*                THE FNT WAS FULL.
* 
*         * SFM INCORRECT FILE TYPE.* 
*                FILE MUST BE LOCAL FOR SYSTEM FILE AND DIRECT
*                ACCESS FOR FAST ATTACH FILE. 
* 
*         * SFM DIRECT ACCESS FILE ERROR.*
*                ERROR WAS ENCOUNTERED ON SYSTEM SECTOR OF A DIRECT 
*                ACCESS FILE. 
* 
*         *  XXXXXXX TERMINATED.* 
*                THE DAYFILE XXXXXXX, HAS BEEN TERMINATED.
*                (ISSUED TO SYSTEM AND CONTROL POINT DAYFILES). 
* 
*         * DAYFILE TERMINATED.*
*                SELF EXPLANATORY. (ISSUED TO TERMINATED DAYFILE).
* 
*         * SFM UNABLE TO INTERLOCK DEVICE.*
*                REQUEST WAS NOT PERFORMED BECAUSE DEVICE COULD 
*                NOT BE INTERLOCKED.
* 
*         * SFM TRACK INTERLOCK ERROR.* 
*                CAN INDICATE ONE OF THE FOLLOWING CONDITIONS.
*                1. TRACK WAS INTERLOCKED WHEN IT SHOULD NOT
*                   HAVE BEEN.
*                2. TRACK WAS NOT INTERLOCKED WHEN IT SHOULD
*                   HAVE BEEN.
* 
*         * SFM SYSTEM SECTOR ERROR.* 
*                AN ERROR HAS BEEN ENCOUNTERED WHILE ATTEMPTING 
*                TO READ A SYSTEM SECTOR. 
* 
*         * SFM GLOBAL FAST ATTACH LIMIT.*
*                THIS MESSAGE IS ISSUED WHEN A REQUEST IS 
*                MADE TO ENTER A GLOBAL FAST ATTACH FILE
*                AND NO SPACE IS AVAILABLE IN THE *FAT*.
* 
*         * SFM ABORTED.* 
*                ERROR FLAG WAS SET AT SFM,S CONTROL POINT. 
* 
*         * SFM UNRECOVERABLE LINK DEVICE ERROR.* 
*                READ OR WRITE ERROR WHEN ATTEMPTING TO UPDATE
*                *FAT* ENTRIES ON LINK DEVICE.
* 
*         * SFM FAST ATTACH SYSTEM SECTOR ERROR.* 
*                AN UNRECOVERABLE ERROR WAS DETECTED WHEN TRYING TO 
*                READ THE SYSTEM SECTOR OF THE FILE BEING ENTERED 
*                INTO FAST ATTACH STATUS.  THE FILE WAS ENTERED,
*                HOWEVER, THE SYSTEM SECTOR POINTERS WERE NOT SET.
*                THIS FILE MAY NOT BE DUMPED PROPERLY BY *PFDUMP* 
*                WHEN THIS OCCURS.
* 
*         * SFM LINK FAST ATTACH FILE NOT FOUND.* 
*                AN ATTEMPT TO LINK TO AN EXISTING FAST ATTACH FILE 
*                WAS UNSUCCESSFUL BECAUSE THE FILE WAS NOT FOUND
*                IN THE *FAT*.
* 
*         * SFM FAMILY STILL ACTIVE.* 
*                AN ATTEMPT HAS BEEN MADE TO REMOVE A FAST ATTACH FILE
*                FROM A FAMILY WHILE ACTIVITY STILL EXISTS WITHIN 
*                THAT FAMILY. 
* 
*         THE FOLLOWING ERROR MESSAGES ARE ISSUED IF THE *EP* BIT 
*         IS NOT SET. OTHERWISE, THE SPECIFIED ERROR CODE IS
*         RETURNED TO FET+0.  ERRORS FOR THOSE FUNCTIONS WHICH
*         HAVE ONLY A ONE-WORD PARAMETER BLOCK WILL ALWAYS BE 
*         PROCESSED AS IF *EP* HAD BEEN SET.  (THESE ERRORS 
*         ARE DOCUMENTED BELOW IN PARENTHESES.) 
* 
*         * SFM DAYFILE BUSY.*
*                EC = 1. THE DAYFILE IS CURRENTLY BUSY. 
* 
*         * SFM MASS STORAGE NOT AVAILABLE.*
*                EC = 2. MASS STORAGE IS NOT AVAILABLE ON THE 
*                SPECIFIED DEVICE.
* 
*         * SFM FILE NOT FOUND.*
*                EC = 3. THE FILE FOR WHICH ACTION HAS BEEN 
*                REQUESTED CAN NOT BE FOUND.
* 
*         * SFM UNCORRECTABLE RMS ERROR.* 
*                EC = 4. AN UNCORRECTABLE RMS ERROR HAS BEEN DETECTED 
*                DURING AN I/O OPERATION. 
* 
*         + *CPD* NOT ACTIVE.+
*                EC = 5. *SFM* WAS CALLED TO SET THE *CPD* DROP 
*                FLAG WHEN *CPD* WAS NOT ACTIVE.
* 
*         * SFM - LID TABLE TOO LONG FOR BUFFER.* 
*                EC = 6.  AN ATTEMPT WAS MADE TO GET A COPY OF THE
*                LID TABLE BUT THE LIDT WAS LARGER THAN THE CALLER-S
*                BUFFER.
* 
*         (LID UNKNOWN OR NOT LEGAL.) 
*                EC=7. THE SPECIFIED LID WAS NOT FOUND IN THE 
*                LID TABLE, OR IS NOT EXACTLY 3 CHARACTERS LONG.
* 
*         ( INCORRECT LID ATTRIBUTES.)
*                EC=10.   THE SPECIFIED ATTRIBUTES ARE NOT CORRECT FOR
*                THE SPECIFIED LID. 
* 
*         ( CURRENT ATTRIBUTES NOT IN LID TABLE.) 
*                EC = 11.  THE CURRENT ATTRIBUTES SPECIFIED DO NOT
*                MATCH THOSE CURRENTLY IN THE LID TABLE FOR THE 
*                SPECIFIED LID. 
* 
*         ( LID TABLE OVERFLOW.)
*                EC = 12.  THE SPECIFIED NEW LID CANNOT BE ADDED TO THE 
*                LID TABLE, SINCE THE LID TABLE IS ALREADY FULL.
* 
*         ( TOO MANY HOST LIDS.)
*                EC = 13.  THE SPECIFIED NEW HOST LID CANNOT BE ADDED 
*                TO THE LID TABLE, SINCE THE TABLE ALREADY CONTAINS 
*                THE MAXIMUM NUMBER OF HOST LIDS. 
* 
*         ( INCORRECT SUBFUNCTION CODE.)
*                EC = 14.  THE SPECIFIED SUBFUNCTION IS NOT DEFINED FOR 
*                THIS FUNCTION. 
* 
*         ( INCORRECT NETWORK STATUS PARAMETER.)
*                EC = 15.  THE SPECIFIED NETWORK STATUS IS NOT VALID. 
* 
*         ( CHECK PARAMETER BLOCK ENTRIES FOR ERROR.) 
*                EC = 16.  AT LEAST ONE PARAMETER BLOCK ENTRY COULD NOT 
*                BE PROCESSED DUE TO AN ERROR DETECTED.  THE CALLER MAY 
*                NEED TO CHECK EACH PARAMETER ENTRY (BYTE 4) TO DETER-
*                MINE WHICH ONES WERE NOT PROCESSED, AND WHY. 
          SPACE  4
***       ACCOUNT FILE MESSAGES.
* 
* 
*         *SDCA, XXXXXX.XXXSECS.* 
*                CPU MONITOR PROGRAM MODE TIME. 
* 
*         *SDCM, XXXXXX.XXXKUNS.* 
*                NUMBER OF STORAGE MOVES. 
* 
*         *SDMR, XXXXXX.XXXKUNS.* 
*                CONTROL POINTS MOVED.
* 
*         *SDMS, XXXXXX.XXXKUNS.* 
*                SECTORS ROLLED.
* 
*         *SDNF, XXXXXX.XXXKUNS.* 
*                NUMBER OF FL INCREASES TO NFL. 
* 
*         *SDSF, XXXXXX.XXXKUNS.* 
*                NUMBER OF TIMES RECALL STACK IS FULL.
* 
*         *SDTS, XXXXXX.XXXKUNS.* 
*                JOBS ROLLED DUE TO TIME SLICE. 
* 
*         *SDTO, XXXXXX.XXXKUNS.* 
*                JOBS ROLLED DUE TO SLICE LIMIT OR TIME SLICE 
*                WITH OUTPUT PENDING. 
* 
*         *SDPX, XXXXXX.XXXKUNS.* 
*                PP EXCHANGE PRIORITY REQUESTS. 
* 
*         *ABST, X...X.*
*                SYSTEM TITLE.
* 
*         *ABSV, X...X.*
*                SYSTEM VERSION.
* 
*         *ABSY,  YY/MM/DD.*
*                BEGINNING OF A NEW ACCOUNT DAYFILE DUE TO
*                INITIALIZATION OR TERMINATION ON DATE
*                YY/MM/DD.
* 
*         *AESY,  YY/MM/DD.*
*                END OF AN ACCOUNT DAYFILE ON DATE YY/MM/DD.
          SPACE  4,10 
***       ERROR LOG MESSAGES. 
* 
* 
*         *CHXX,YYYYYYYYY.* = EQUIPMENT ON CHANNEL XX IS RUNNING WITH 
*         FIRMWARE REVISION YYYYYYYYY.
* 
*         *ETXXX, UYY,PS=ZZZZZZ.* = THE PACK ON PHYSICAL UNIT YY OF EST 
*         ORDINAL XXX OF TYPE ET HAS A SERIAL NUMBER OF ZZZZZZ. 
          SPACE  4
          SPACE  4
**        ROUTINES CALLED.
* 
* 
*         0BF - BEGIN FILE. 
*         0DF - DROP FILE.
*         0TD - TERMINATE DAYFILE.
*         0CI - IDENTIFY FIRMWARE.
*         0PI - LIST PACK SERIAL NUMBER.
          SPACE  4
*CALL     COMPMAC 
*CALL     COMSCPS 
*CALL     COMSSSD 
*CALL     COMSDFS 
*CALL     COMSEJT 
*CALL     COMSHIO 
*CALL     COMSIOQ 
*CALL     COMSLFD 
*CALL     COMSMSC 
*CALL     COMSMSP 
*CALL     COMSMST 
          QUAL   COMSMTX
*CALL     COMSMTX 
          QUAL   *
*CALL     COMSPFM 
*CALL     COMSPIM 
*CALL     COMSSCD 
*CALL     COMSSSE 
*CALL     COMSSSJ 
          QUAL   TFM
*CALL     COMSTFM 
          QUAL   *
*CALL     COMSMMF 
*CALL     COMSWEI 
*CALL     COMSZOL 
          LIST   X
*CALL     COMSSFM 
          LIST   *
          SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 FS       EQU    20 - 24     FST ENTRY (5 LOCATIONS)
 FT       EQU    20 - 21     FIRST
 IN       EQU    22 - 23     IN 
 P0       EQU    25          OVERLAY PROCESSOR ADDRESS
 HI       EQU    25          *FAT* INDEX OF AVAILABLE HOLE
 QA       EQU    26          FNT ORDINAL
 FC       EQU    27          *FAT* TABLE COUNT
 TY       EQU    30          DAYFILE TYPE 
 DA       EQU    30 - 31     LINK DEVICE PARAMETERS 
 ID       EQU    32          MACHINE ID 
 CN       EQU    33 - 37     CM WORD BUFFER 
 FN       EQU    40 - 44     FILE NAME (5 LOCATIONS)
 OT       EQU    40 - 41     OUT
 LM       EQU    42 - 43     LIMIT
 LS       EQU    45          LAST FET STATUS
 JC       EQU    46          JOB COUNT (MAXIMUM)
 MI       EQU    46          MACHINE INDEX
 BA       EQU    47          *FAT* ITEM BASE ADDRESS
 FA       EQU    57          ADDRESS OF FNT ENTRY 
 TE       EQU    60          NUMBER OF TABLE ENTRIES (FNT)
 LO       EQU    61          LAST MASS STORAGE ORDINAL + 1
 ES       EQU    62 - 66     CM WORD BUFFER (EST ENTRY) 
 FI       EQU    67          *FAT* INDEX OF ENTRY / HOLE
          SPACE  4,10 
**        ASSEMBLY CONSTANTS. 
  
  
 ILKN     EQU    200000      INTERLOCK DAYFILE MESSAGE OPTION 
****
          TITLE  MACRO DEFINITIONS. 
 ABORT    SPACE  4,10 
**        ABORT - ABORT CONTROL POINT.
* 
*         ABORT  ADDR 
* 
*         ENTRY  *ADDR* = MESSAGE ADDRESS.
* 
*         EXIT   TO *ABT*.
  
  
          PURGMAC  ABORT
  
 ABORT    MACRO  A
          MACREF ABORT
          LDC    A
          LJM    ABT
          ENDM
 ENTRY    SPACE  4,10 
**        ENTRY - DEFINE OVERLAY ENTRY NAME.
* 
*         ENTRY  NAME 
* 
*         ENTRY  *NAME* = NAME OF PROCESSOR ADDRESS.
  
  
          PURGMAC  ENTRY
  
          MACRO  ENTRY,N
          MACREF ENTRY
          QUAL
 N        EQU    *+1R".M"*10000B
          QUAL   ".O" 
 N        BSS    0
          ENDM
 ERROR    SPACE  4,10 
**        ERROR - RETURN ERROR CODE TO FET. 
* 
*         ERROR  EC 
* 
*         ENTRY  *EC* = ERROR CODE. 
* 
*         EXIT   TO *ERR*.
  
  
          PURGMAC  ERROR
  
 ERROR    MACRO  E
          MACREF ERROR
          LDN    E
          LJM    ERR
          ENDM
 FCN      SPACE  4,50 
**        FCN - DEFINE FUNCTION PROCESSOR.
* 
* TN      FCN    F,N,L,P,S,M,E,A
* 
*         TN     TABLE NAME (FIRST CALL ONLY).
*         F      FUNCTION CODE. 
*         N      NAME OF FUNCTION PROCESSOR.
*         L      REQUIRED FET LENGTH - 1. 
*         P      CALLER MUST HAVE SYSTEM ORIGIN PRIVILEGES. 
*         S      CALLER MUST BE SPECIAL SYSTEM JOB (SSJ). 
*         M      MAINTENANCE ACCESS ALLOWED 
*         E      EITHER SSJ= OR SYSTEM ORIGIN PRIVILEGES REQUIRED.
*         A      ALLOW ACCESS IF CALLER HAS PRIVILEGED ANALYST
*                VALIDATION AND IF *PRIVILEGED ANALYST MODE* ENABLED. 
* 
*         TABLE GENERATED.
* 
*T,TN     12/O,12/N,1/S,1/P,1/M,1/E,1/A,1/0,6/L 
* 
*         O      OVERLAY NAME (LAST CHARACTER)
*         N      PROCESSOR ADDRESS
*         S      SSJ= REQUIRED
*         P      SYSTEM ORIGIN PRIVILEDGES REQUIRED 
*         M      MAINTENANCE ACCESS ALLOWED 
*         E      EITHER SSJ= OR SYSTEM ORIGIN PRIVILEGES REQUIRED.
*         A      ALLOW ACCESS IF CALLER HAS PRIVILEGED ANALYST
*                VALIDATION AND IF *PRIVILEGED ANALYST MODE* ENABLED. 
*         L      REQUIRED FET LENGTH - 1
  
  
          MACRO  FCN,TN,F,N,L,P,S,M,E,A 
          MACREF FCN
 .1       IFC    NE,$TN$$ 
 TN       BSS    0
 .T       SET    TN 
 .1       ELSE
          ORG    .T+3*F 
 .2       IFC    NE,$N$$
          LOC    F
          CON    N/10000B,N-N/10000B*10000B 
 .3       IFC    EQ,$S$SSJ$ 
          VFD    1/1
 .3       ELSE
          VFD    1/0
 .3       ENDIF 
 .4       IFC    NE,$P$$
          VFD    1/1
 .4       ELSE
          VFD    1/0
 .4       ENDIF 
 .5       IFC    NE,$M$$
          VFD    1/1
 .5       ELSE
          VFD    1/0
 .5       ENDIF 
 .6       IFC    NE,$E$$
          VFD    1/1
 .6       ELSE
          VFD    1/0
 .6       ENDIF 
 .7       IFC    NE,$A$$
          VFD    1/1
 .7       ELSE
          VFD    1/0
 .7       ENDIF 
          VFD    1/0
          VFD    6/L
 .2       ENDIF 
          BSS    0
 .1       ENDIF 
          ENDM
          SPACE  4,2
 .N       SET                0
 OVLB     MICRO  1,, 3S      BASE OVERLAY NAME
 OVERLAY  SPACE  4,20 
**        OVERLAY - GENERATE OVERLAY CONSTANTS. 
* 
*         OVERLAY (TEXT),LOAD,NQ
* 
*         ENTRY  *TEXT* = TEXT FOR SUBTITLE.
*                *LOAD* = IF SPECIFIED, DEFINE ORIGIN ADDRESS.
*                *NQ* = IF SPECIFIED, OVERLAY NOT QUALIFIED.
  
          PURGMAC OVERLAY 
  
 OVERLAY  MACRO  TEXT,LOAD,NQ 
          QUAL
          NOREF  .N 
          MACREF OVERLAY
 .N       SET    .N+1 
 .M       MICRO  .N,1, ZYXWVUTSRQPONMLKJIHGFEDCBA 
 .O       MICRO  1,3 "OVLB"".M" 
          IFC    EQ,*NQ**,1 
          QUAL   ".O" 
          TTL    SFM/".O" - TEXT
          IDENT  ".O",OVL    TEXT 
          TITLE 
*COMMENT  SFM - TEXT
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          IFC    NE,*LOAD** 
          ORG    LOAD 
          ELSE   1
          ORG    OVLA 
 OVL      LJM    *
          UJN    OVL
          ENDM
 PERR     SPACE  4,10 
**        PERR - PUT ERROR CODE IN PARAMETER BLOCK ENTRY. 
* 
*         PERR   EC 
* 
*         ENTRY  *EC* = ERROR CODE. 
* 
*         EXIT   *EC* PLACED IN BYTE 4 OF PARAMETER BLOCK ENTRY 
*                AND WORD REWRITTEN TO USER-S FL. 
* 
*         CALLS  /3SW/PER.
  
  
          PURGMAC  PERR 
  
 PERR     MACRO  E
          MACREF PERR 
          LDN    E
          RJM    PER
          ENDM
 SUBSYST  SPACE  4,10 
**        SUBSYST - GENERATE SUBSYSTEM TABLE. 
* 
*         SUBSYST  NAME,ID,PR,PP,AUTO,DEF,DCP,CP,PROC,ABT 
* 
*         ENTRY  *ID* = SUBSYSTEM ID. 
* 
*         GENERATE TABLE OF *SSSL* BYTES AND MASKS. 
* 
*T        12/ BYTE, 12/ MASK
  
  
          PURGMAC  SUBSYST
  
 SUBSYST  MACRO  NM,ID,PT,PP,AU,DF,DC,CP,PR,AB
 .SUB     RMT 
 .1       SET    MXSI-ID
 .21      SET    .1/12D 
 .3       SET    4-.21       *SSSL* BYTE
 .4       DECMIC .1-12D*.21 
 .5       SET    1S".4"      *SSSL* MASK
          INDEX  (MXSI*2-ID*2),(.3,.5)
 .SUB     RMT 
 SUBSYST  ENDM
          TITLE  MAIN PROGRAM.
 SFM      SPACE  4
**        SFM - MAIN PROGRAM. 
  
  
          ORG    PPFW 
 SFM      RJM    PRS         PRESET PROGRAM 
 SFM1     LDC    0
 SFMA     EQU    *-1
          ZJN    SFM2        IF NO OVERLAY LOAD 
          LMC    2L"OVLB"    LOAD OVERLAY 
          RJM    EXR
 SFM2     LJM    *           PROCESS REQUEST
 SFMB     EQU    *-1
  
 SFMX     RJM    CFB         SET FILE NOT BUSY
          RJM    GFE         READ FILE NAME 
          CRD    FN 
          AOD    LS          SET FET NOT BUSY 
          STD    FN+4 
          LDD    FN+3 
          SCN    77 
          LMC    0
 SFMC     EQU    *-1         (ERROR CODE) 
          STD    FN+3 
          RJM    GFE         STORE FET STATUS 
          CWD    FN 
 SFMD     LDN    0
          ZJN    SFM3        IF NO SYSTEM SECTOR ERROR
          LDC    ERFS        * FAST ATTACH SYSTEM SECTOR ERROR.*
          RJM    DFM
 SFM3     LDM    SFMF 
          ZJN    DPP         IF OPERATION COMPLETE
          STD    T1 
          LDD    T5 
          STM    CKPA+3      SET EQUIPMENT IN REQUEST 
          LDD    CP          SET CONTROL POINT
          SHN    -7 
          RAM    1,T1 
          LDD    IA          STORE INPUT REGISTER 
          CWM    0,ON 
 SFMF     EQU    *-1
          EXECUTE  CPD,=
          EXECUTE  1CK,=
          UJN    SFM4        EXIT TO PP RESIDENT
  
 DPP      MONITOR DPPM       DROP PP
 SFM4     LJM    PPR         EXIT TO PP RESIDENT
  
 CKPA     VFD    18/3R1CK,6/40,12/4,24/0
 ERFS     DATA   C* SFM FAST ATTACH SYSTEM SECTOR ERROR.* 
  
 FETL     CON    0           FET LENGTH REQUIRED FOR FUNCTION 
          TITLE  RESIDENT SUBROUTINES.
 ABT      SPACE  4
**        ABT - ABORT JOB.
* 
*         ENTRY  (A) = FWA OF MESSAGE.
* 
*         EXIT   TO *ERR1*. 
*                (DA) = ADDRESS OF MESSAGE. 
* 
*         CALLS  CFI. 
  
  
 ABT      BSS    0           ENTRY
          STD    DA 
          LDC    0
*         LDC    1           (*DATI* INTERLOCK SET) 
*         LDC    2           (*DATI* AND *FATI* INTERLOCK SET)
 ABTB     EQU    *-1
          ZJN    ABT0        IF NO FLAG REGISTER INTERLOCKS SET 
          LDN    DATI        CLEAR *DATI* INTERLOCK 
          RJM    /3SY/CFI 
          ZJN    ABT0        IF *FATI* INTERLOCK NOT SET
          LDN    FATI        CLEAR *FATI* INTERLOCK 
          RJM    /3SY/CFI 
 ABT0     LDC    ABP
          UJN    ERR1        LOAD ERROR PROCESSING OVERLAY
 ERR      SPACE  4,10 
**        ERR - ERROR EXIT PROCESSOR. 
* 
*         ENTRY  (A) = ERROR CODE.
* 
*         EXIT   TO *SFM0*. 
* 
*         USES   DA.
  
  
 ERR      BSS    0           ENTRY
          STD    DA 
          LDC    ERP
 ERR1     STM    SFMB        SET PROCESSOR ADDRESS
          SHN    -14
          STM    SFMA 
          LJM    SFM1        LOAD ERROR PROCESSING OVERLAY
 ERS      SPACE  4,10 
**        ERS - ENTER PP RECALL STACK.
* 
*         ENTRY  (A) = RECALL STACK REASON CODE.
* 
*         EXIT   TO *PPR*.
* 
*         USES   CM - CM+5. 
* 
*         MACROS MONITOR. 
  
  
 ERS      BSS    0           ENTRY
          STD    CM          SAVE RECALL STACK REASON CODE
          LDN    ZERL 
          CRD    CM+1 
          LDD    MA          RECALL *SFM* 
          CWD    IR 
          ADN    1
          CWD    CM 
          MONITOR  RECM 
          LJM    PPR         EXIT TO PP RESIDENT
 CFB      SPACE  4,10 
**        CFB - CLEAR FILE BUSY.
* 
*         ENTRY  (FA) = FNT ADDRESS OF BUSY FILE. 
*                (FS - FS+4) = FST INFORMATION. 
* 
*         EXIT   (A) = (FA) = 0.
* 
*         MACROS NFA. 
  
  
 CFB      SUBR               ENTRY/EXIT 
          LDD    FA 
          ZJN    CFBX        IF NO FILE ASSIGNED
          AOD    FS+4 
          NFA    FA,R        CLEAR FILE BUSY
          ADN    FSTL 
          CWD    FS 
          LDN    0           CLEAR FNT ADDRESS
          STD    FA 
          UJN    CFBX        RETURN 
 DRF     SPACE   4,15 
**        DRF - DROP FILE.
* 
*         ENTRY  (FA) = INDEX OF FNT ENTRY. 
* 
*         EXIT   (A) = (FA) = 0.
* 
*         ERROR  TO *EER* IF MASS STORAGE DEVICE INACCESSIBLE.
* 
*         CALLS  *0DF*. 
  
  
 DRF      SUBR               ENTRY/EXIT 
          LDN    1           SET *UNLOAD* FILE FLAG FOR *0DF* 
          STM    OVL0-1 
          EXECUTE 0DF,OVL0
          ZJN    DRFX        IF FILE RELEASED 
*         UJN    EER         EVALUATE MASS STORAGE ERROR RETURN 
 EER      SPACE  4,15 
**        EER - EVALUATE MASS STORAGE ERROR RETURN. 
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   JOB IS ROLLED OUT TO WAIT FOR A DEVICE TO BECOME 
*                ACCESSIBLE IF A NON-SUBSYSTEM JOB ENCOUNTERED A
*                RECOVERABLE READ/WRITE ERROR ON THE DEVICE.
* 
*         USES   IR+4.
* 
*         CALLS  CFB, RTI, *1RJ*. 
* 
*         MACROS ENDMS, ERROR, EXECUTE, PAUSE.
  
  
 EER      ENDMS 
          RJM    RTI         RELEASE TRACK INTERLOCK
          LDM    RDCT 
          SHN    21-12
          PJN    EER2        IF RECOVERABLE ERROR 
 EER1     ERROR  /ERR/RMS 
  
 EER2     LDM    MSD         CHECK CALLER 
          SHN    21-13
          PJN    EER1        IF SUBSYSTEM 
          PAUSE 
          LDD    CM+1 
          NJP    SFMX        IF ERROR FLAG SET
          RJM    CFB
          LDD    T5          SET EST ORDINAL
          STD    IR+4 
          EXECUTE  1RJ       RECALL JOB 
 EFN      SPACE  4
**        EFN - ENTER FILE NAME.
* 
*         ENTRY  (FN - FN+4) = FILE NAME. 
* 
*         EXIT   (FA) = INDEX OF FNT ENTRY. 
*                (FS - FS+4) = FST ENTRY. 
* 
*         CALLS  VFN, *0BF*.
* 
*         MACROS ABORT, EXECUTE.
  
  
 EFN      SUBR               ENTRY/EXIT 
          RJM    VFN         VERIFY FILE NAME 
          NJN    EFN1        IF NO ERROR
          ABORT  /MESS/ERFN  * SFM FILE NAME ERROR.*
  
 EFN1     LDN    0           SELECT NO RETURN WITHOUT FILE CREATED
          STM    OVL0-1 
          LDN    NEEQ        ASSIGN NULL EQUIPMENT
          STD    FS 
          EXECUTE 0BF,OVL0
          UJN    EFNX        RETURN WITH NEW FILE CREATED 
  
*         PROCESS ADVANCE EXIT FROM *0BF* IF FILE ALREADY EXISTS. 
  
          LDN    0           CLEAR FNT ENTRY ADDRESS
          STD    FA 
          ABORT  /MESS/ERDF  * SFM DUPLICATE FILE FOUND.* 
 FDB      SPACE  4,10 
**        FDB - FLUSH DAYFILE BUFFER. 
* 
*         ENTRY  (A) = ADDRESS OF TERMINATING MESSAGE.
*                (TY) = DAYFILE TYPE. 
* 
*         EXIT   DAYFILE BUFFER FLUSHED.
* 
*         CALLS  DFM, *0TD*.
* 
*         MACROS EXECUTE. 
  
  
 FDB      SUBR               ENTRY/EXIT 
          LMC    ILKN        ADD INTERLOCK REQUEST
          RJM    DFM         ISSUE DAYFILE MESSAGE
          LDD    TY 
          STM    OVL0-1      SET *0TD* PARAMETER
          EXECUTE 0TD,OVL0   FLUSH BUFFER 
          UJN    FDBX        RETURN 
 GFE      SPACE  4,5
**        GFE - GET FET ADDRESS.
* 
*         EXIT   (A) = FET ADDRESS. 
  
  
 GFE      SUBR               ENTRY/EXIT 
          LDD    IR+3 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          UJN    GFEX        RETURN 
 LLT      SPACE  4,10 
**        LLT - LOCATE LABEL TRACK. 
* 
*         ENTRY  (T5) = EST ORDINAL.
* 
*         EXIT   (A) = (T6) = LABEL TRACK.
*                (CM - CM+4) = EST ENTRY. 
*                (T0 - T4) = *ALGL* WORD OF MST.
* 
*         USES   T6, CM - CM+4, T0 - T4.
  
  
 LLT      SUBR               ENTRY/EXIT 
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        READ *ALGL* WORD FROM THE MST
          SHN    3
          ADN    ALGL 
          CRD    T0 
          LDD    T0+1        SET LABEL TRACK
          STD    T6 
          UJN    LLTX        RETURN 
 SDA      SPACE  4,8
**        SDA - SET DAYFILE POINTER ADDRESS.
* 
*         ENTRY  (TY) = DAYFILE TYPE. 
*                     = 0 IF USER DAYFILE.
* 
*         EXIT   (A) = ADDRESS OF DAYFILE POINTER FST.
* 
*         MACROS NFA. 
  
  
 SDA1     NFA    DAPN+2      SET ADDRESS OF JOB DAYFILE FST 
  
 SDA      SUBR               ENTRY/EXIT 
          LDD    TY 
          ZJN    SDA1        IF USER DAYFILE
          STD    T0 
          SHN    1
          ADD    T0 
 SDAA     ADC    **          (FWA-1 OF DAYFILE POINTERS)
          UJN    SDAX        RETURN 
 SDT      SPACE  4,10 
**        SDT - SET DAYFILE TYPE. 
* 
*         EXIT   (TY) = DAYFILE TYPE. 
*                (CN - CN+4) = WORD 7 OF FET. 
* 
*         CALLS  GFE. 
  
  
 SDT      SUBR               ENTRY/EXIT 
          RJM    GFE         READ FET+7 
          ADN    7
          CRD    CN 
          LDD    CN+3        SET DAYFILE TYPE 
          LPN    77 
          STD    TY 
          ZJN    SDT1        IF INCORRECT TYPE
          SBN    EXDF+1 
          MJN    SDTX        IF VALID DAYFILE TYPE
 SDT1     ABORT  /MESS/ERDC  * SFM INCORRECT DEVICE CODE.*
 RMS      SPACE  4,10 
**        RMS - READ MASS STORAGE.
* 
*         ENTRY  (A) = BUFFER ADDRESS.
*                (T5 - T7) = MASS STORAGE PARAMETERS. 
* 
*         EXIT   (A) .GE. 0.
* 
*         ERROR  TO *EER*.
* 
*         CALLS  RDS. 
  
  
 RMS      SUBR               ENTRY/EXIT 
          RJM    RDS
          PJN    RMSX        IF SUCCESSFUL READ 
          LJM    EER         EVALUATE ERROR RETURN
 RTI      SPACE  4,10 
**        RTI - RELEASE TRACK INTERLOCK.
* 
*         ENTRY  (RTIA) = TRACK NUMBER IF TRACK INTERLOCKED.
* 
*         EXIT   (A) = (RTIA) = 0.
* 
*         CALLS  CTI. 
  
  
 RTI      SUBR               ENTRY/EXIT 
          LDC    0
 RTIA     EQU    *-1
          ZJN    RTIX        IF NO TRACK INTERLOCK
          RJM    CTI
*         LDN    0           CLEAR INTERLOCK STATUS 
          STM    RTIA 
          UJN    RTIX        RETURN 
 WMS      SPACE  4,10 
**        WMS - WRITE MASS STORAGE. 
* 
*         ENTRY  (A) = BUFFER ADDRESS.
*                (T5 - T7) = MASS STORAGE PARAMETERS. 
* 
*         EXIT   (A) .GE. 0.
* 
*         ERROR  TO *EER*.
* 
*         CALLS  WDS. 
  
  
 WMS      SUBR               ENTRY/EXIT 
          RJM    WDS
          PJN    WMSX        IF SUCCESSFUL WRITE
          LJM    EER         EVALUATE ERROR RETURN
 WTI      SPACE  4,15 
**        WTI - WAIT FOR TRACK INTERLOCK. 
* 
*         ENTRY  (T5) = EQUIPMENT.
*                (T6) = TRACK.
* 
*         EXIT   (A) = 0, IF INTERLOCK SET. 
*                    = 1, IF *ORET* ERROR FLAG SET IN CPA.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  STI. 
* 
*         MACROS DELAY, PAUSE.
  
  
 WTI3     LDN    1           RETURN WITH ERROR
  
 WTI      SUBR               ENTRY/EXIT 
 WTI1     RJM    STI         SET TRACK INTERLOCK
          ZJN    WTIX        IF INTERLOCK SET 
  
*         DELAY 100 MILLISECONDS AND RETRY. 
  
          LDC    1400 
          STD    T0 
 WTI2     DELAY 
          PAUSE 
          LDD    CM+1 
          LMN    ORET 
          ZJN    WTI3        IF *ORET* ERROR FLAG SET 
          SOD    T0 
          PJN    WTI2        IF MORE DELAY REQUIRED 
          UJN    WTI1        LOOP TO RETRY INTERLOCK
          SPACE  4
*         COMMON DECKS. 
  
  
*CALL     COMPCTI 
*CALL     COMPDTS 
 EJT$     EQU    0           DEFINE *COMPGFP* ACCESS TO EJT 
 FNT$     EQU    0           DEFINE *COMPGFP* ACCESS TO FNT 
 IFP$     EQU    0           GENERATE *IFP* REMOTE CODE 
 JCB$     EQU    0           DEFINE *COMPGFP* ACCESS TO JCB 
*CALL     COMPGFP 
*CALL     COMPRLA 
*CALL     COMPSAF 
*CALL     COMPSEI 
*CALL     COMPSFB 
*CALL     COMPSTI 
*CALL     COMPVFN 
          QUAL   MIO
 QUAL$    EQU    1
 RDS      EQU    RMS
 WDS      EQU    WMS
*CALL     COMPRSS 
*CALL     COMPWEI 
*CALL     COMPWSS 
          QUAL   *
 RSS      EQU    /MIO/RSS 
 WEI      EQU    /MIO/WEI 
 WSS      EQU    /MIO/WSS 
 CFS      SPACE  4,10 
**        CFS - CHECK FILE STATUS.
* 
*         ENTRY  (FA) = INDEX OF FNT ENTRY. 
* 
*         EXIT   (FS - FS+4) = FST ENTRY. 
*                (ES - ES+4) = FILE EQUIPMENT EST ENTRY.
*                (CM - CM+4) = FNT ENTRY. 
*                (T5) = EST ORDINAL.
*                (T6) = FIRST TRACK.
* 
*         CALLS  SFB. 
* 
*         MACROS ABORT, SFA.
  
  
 CFS      SUBR               ENTRY/EXIT 
          RJM    SFB         SET FILE BUSY
          ZJN    CFS1        IF NO REJECT 
          LDN    0
          STD    FA 
          ABORT  /MESS/ERIO  * SFM I/O SEQUENCE ERROR.* 
  
 CFS1     LDD    FS          READ EST ENTRY 
          STD    T5 
          SFA    EST
          ADK    EQDE 
          CRD    ES 
          LDD    ES          CHECK EQUIPMENT
          SHN    6
          MJN    CFS2        IF MASS STORAGE
          ABORT  /MESS/ERMS  * SFM FILE NOT ON MASS STORAGE.* 
  
 CFS2     LDD    FS+1        SET FIRST TRACK
          STD    T6 
          LDD    FS+2 
          NJN    CFSX        RETURN IF FILE USED
          ABORT  /MESS/ERFE  * SFM FILE EMPTY.* 
          SPACE  4
 TDYN     SPACE  4,10 
**        TDYN - TABLE OF DAYFILE NAMES.
  
  
 TDYN     BSS    0
          LOC    SDAY 
          CON    NDYF        SYSTEM DAYFILE 
          CON    NACF        ACCOUNT DAYFILE
          CON    NERL        ERRLOG DAYFILE 
          CON    NBML        MAINTENANCE LOG
          LOC    *O 
          SPACE  4
 NDYF     VFD    42/0LDAYFILE,6/1,6/LIFT,6/0
 NACF     VFD    42/0LACCOUNT,6/1,6/LIFT,6/0
 NERL     VFD    42/0LERRLOG,6/1,6/LIFT,6/0 
 NBML     VFD    42/0LMAINLOG,6/1,6/LIFT,6/0
          USE    OVERLAY
 OVLA     EQU    *+5         OVERLAY BASE ADDRESS 
 ADF      TITLE  FUNCTION PROCESSORS. 
 ADF      SPACE  4
***       FUNCTION *AMDF* - ACCESS MASTER DAYFILE.
* 
*         READ CM PART OF DAYFILE STARTING AT FIRST, AND MAKE LOCKED
*         LIBRARY FILE AT CONTROL POINT.
* 
*         ENTRY CONDITIONS. 
* 
*         MESSAGE TO ISSUE IN BUFFER STARTING AT FIRST. 
*         (MAXIMUM LENGTH OF 30 CHARACTERS.)  THE MESSAGE IS
*         ISSUED BEFORE THE CM BUFFER IS COPIED AND THE FILE
*         LENGTH CALCULATED.  THE MESSAGE WILL BE THE LAST ONE
*         IN THE DAYFILE FOR THIS ACCESS TO THE DAYFILE.
* 
*         EXIT CONDITIONS.
* 
*T FET+5  42/  0 , 18/ RL 
*T,FET+6  42/  0 , 18/ CL 
* 
*         RL = DAYFILE LENGTH AT LAST DEADSTART.
*         CL = CURRENT DAYFILE LENGTH IN PRUS.
  
  
 ADF      BSS    0           ENTRY
          LDN    SDAY        SELECT MASTER DAYFILE
 ADF1     STD    TY          SAVE DAYFILE TYPE
          RJM    CBL         CHECK DAYFILE BUFFER LENGTH
  
*         CHECK FILE STATUS.
  
          RJM    SAF         SEARCH FOR ASSIGNED FILE 
          ZJN    ADF3        IF NOT FOUND 
          RJM    SFB         SET FILE BUSY
          ZJN    ADF2        IF NO REJECT 
          LDN    0
          STD    FA 
          ABORT  /MESS/ERIO  * SFM I/O SEQUENCE ERROR.* 
  
 ADF2     RJM    DRF         DROP FILE
 ADF3     RJM    EFN         ENTER FILE NAME
          RJM    SDA         SET DAYFILE FST ADDRESS
          CRD    FS          READ DAYFILE FST 
          SBN    1           READ DAYFILE BUFFER POINTERS 
          CRD    CM 
          AOD    CM+2        VALIDATE BUFFER POINTERS 
          RJM    VBP
          MJN    ADF4        IF DATA FITS IN BUFFER AND IN FL 
          NFA    FA,R        READ CORRECT FST FOR *ABT* 
          ADN    FSTL 
          CRD    FS 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
*         INTERLOCK DAYFILE.
  
 ADF4     LDD    FS          SET EQUIPMENT
          STD    T5 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          LDD    TY 
          NJN    ADF5        IF NOT USER DAYFILE DUMP 
          LJM    ADF8        PROCESS USER DAYFILE DUMP
  
 ADF5     LDD    TH          FLAG TRACK INTERLOCK SET 
          RAM    ADFE 
          RJM    STI         SET TRACK INTERLOCK
          ZJN    ADF6        IF TRACK INTERLOCKED 
          NFA    FA,R        READ CORRECT FST FOR *ABT* 
          ADN    FSTL 
          CRD    FS 
          ERROR  /ERR/DFB    EC=1, DAYFILE BUSY 
  
 ADF6     LDD    T6          SET TRACK INTERLOCKED STATUS 
          STM    RTIA 
          LDD    CP          FETCH EJT ORDINAL
          ADN    TFSW 
          CRD    CM 
          SFA    EJT,CM      READ SEQUENCE NUMBER FROM EJT
          CRM    BFMS,ON
          ADN    SCLE-JSNE-1 GET JOB SERVICE CLASS
          CRD    CM 
          LDC    2R 
          STM    BFMS+2 
          STM    BFMS+3 
          LDD    CM          SET SERVICE CLASS IN MESSAGE 
          SHN    -6 
          STM    BFMS+4 
          LDD    CN+3        READ DAYFILE MESSAGE 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CN+4 
          CRD    CM+1 
 ADFC     ADN    0
*         ADN    1           (MAINTENANCE LOG PROCESSING) 
          CRM    BFMS+5,TR
*         CRM    BFMS,TR     (MAINTENANCE LOG PROCESSING) 
 ADFD     EQU    *-1
          LDN    0           ENSURE MESSAGE HAS TERMINATOR
          STM    BFMS+5+3*5 
          LDD    CM+1        BYTE COUNT OF MAINTENANCE LOG MESSAGE
 ADFF     UJN    ADF7.4      CONTINUE 
*         NJN    ADF7.3      (MAINTENANCE LOG PROCESSING) 
 ADF7     RJM    RTI         RELEASE TRACK INTERLOCK
          NFA    FA,R        RESTORE FST FOR ABORT PROCESSING 
          ADN    FSTL 
          CRD    FS 
          ABORT  /MESS/ERWC  * SFM BML MESSAGE LENGTH ERROR.* 
  
 ADF7.3   SBN    7
          PJN    ADF7        IF WORD COUNT TOO LARGE
          ADN    7
 ADF7.4   SHN    2
          RAD    CM+1 
          LDM    ADFG-1,TY   ISSUE MESSAGE AND INTERLOCK DAYFILE
          SHN    14 
          ADC    ILKN+BFMS
          RJM    DFM
  
*         TRANSFER CM DAYFILE BUFFER TO CONTROL POINT.
  
          LDD    TY          CHECK DAYFILE TYPE 
          LMN    BMLF 
          NJN    ADF8        IF NOT MAINTENANCE LOG 
          LDN    BMLL        READ MAINTENANCE LOG CONTROL WORD
          CRD    CM 
          LDD    CN+3        STORE CONTROL WORD IN BUFFER 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CN+4 
          CWD    CM 
          AOD    CN+4        ADVANCE IN POINTER 
          SHN    -14
          RAD    CN+3 
 ADF8     RJM    CDF         DUMP CM DAYFILE TO CONTROL POINT 
  
*         UPDATE FET INFORMATION. 
  
          LDD    T6 
          STD    T2 
          STD    T3 
          ZJN    ADF9        IF NO FIRST TRACK
          RJM    SEI
          LCN    FSMS        DISCOUNT SYSTEM SECTOR 
          RAD    T3 
          PJN    ADF9        IF NO BORROW 
          SOD    T2          PROPAGATE BORROW 
          AOD    T3 
 ADF9     LDN    ZERL 
          CRD    CM 
          LDD    T3 
          STD    CM+4        LOWER HALF OF FILE LENGTH
          LDD    T2 
          STD    CM+3        UPPER HALF OF FILE LENGTH
          LDN    0
          STD    CN 
          STD    CN+1 
          STD    CN+2 
          RJM    GFE         STORE IN 
          ADN    2
          CWD    CN 
          ADN    6-2         STORE SECTOR COUNT 
          CWD    CM 
  
*         GET LENGTH OF DAYFILE AT LAST DEADSTART.
  
          LDD    TY 
          NJN    ADF10       IF NOT USER DAYFILE DUMP 
          LJM    ADF12
  
 ADF10    RJM    SDA         READ BUFFER STATUS WORD
          CRD    CM 
          LDN    2           CLEAR BUFFER INTERLOCK 
          RAD    CM+4 
          RJM    SDA         STORE BUFFER STATUS WORD 
          CWD    CM 
          SETMS  IO 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          LDM    TDYN-1,TY   READ SYSTEM SECTOR 
          RJM    RSS
          ZJN    ADF11       IF NO ERROR
          RJM    RTI         RELEASE TRACK INTERLOCK
          NFA    FA,R        READ CORRECT FST FOR *ABT* 
          ADN    FSTL 
          CRD    FS 
          ABORT  /MESS/ERSE  * SFM SYSTEM SECTOR ERROR.*
  
 ADF11    ENDMS 
          LDN    ZERL        SET LENGTH IN FET+5
          CRD    CM 
          LDM    FLSS 
          STD    CM+3 
          LDM    FLSS+1 
          STD    CM+4 
          RJM    GFE
          ADN    5
          CWD    CM 
  
*         ATTACH DAYFILE TO CONTROL POINT.
  
 ADF12    LDC    4           SET FILE STATUS
*         LDC    1004        (IF TRACK INTERLOCK SET) 
 ADFE     EQU    *-1
          STD    FS+4 
          LDD    FS+2 
          ZJN    ADF13       IF FILE NOT USED 
          LDD    FS+1        REWIND FILE
          STD    FS+2 
          LDN    FSMS        SET FIRST DATA SECTOR
          STD    FS+3 
 ADF13    NFA    FA,R        READ FNT ENTRY 
          CRD    CM 
          LDD    CM+3        SET EXTEND-ONLY AND WRITE LOCKOUT
          SCN    77 
          LMN    21 
          STD    CM+3 
          LDC    LIFT*100    SET FILE TYPE TO *LIBRARY* 
          STD    CM+4 
          NFA    FA,R        STORE FNT ENTRY
          CWD    CM 
          LDN    22          LAST STATUS = EOR
          STD    LS 
          LJM    SFMX        EXIT 
  
 ADFG     BSS    0           TABLE OF DAYFILE MESSAGE OPTIONS 
          LOC    SDAY 
          CON    JNMN/10000 
          CON    AJNN/10000 
          CON    EJNN/10000 
          CON    BMLN/10000 
          LOC    *O 
 AAC      SPACE  4
***       FUNCTION *AAFF* - ACCESS ACCOUNT FILE.
* 
*         READ CM PART OF DAYFILE STARTING AT FIRST, AND MAKE LOCKED
*         LIBRARY TYPE FILE AT CONTROL POINT. 
  
  
 AAC      BSS    0           ENTRY
          LDN    ACCF        SELECT ACCOUNT FILE
          UJN    AER1 
 AER      SPACE  4
***       FUNCTION *AELF* - ACCESS ERROR LOG. 
* 
*         READ CM PART OF DAYFILE STARTING AT FIRST, AND MAKE LOCKED
*         LIBRARY TYPE FILE AT CONTROL POINT. 
  
  
 AER      LDN    ERLF        SELECT ERROR LOG 
 AER1     LJM    ADF1        ACCESS DAYFILE 
 AMF      SPACE  4,10 
***       FUNCTION *AMLF* - ACCESS MAINTENANCE LOG. 
* 
*         READ CM PART OF DAYFILE STARTING AT FIRST, AND MAKE LOCKED
*         LIBRARY TYPE FILE AT CONTROL POINT. 
  
  
 AMF      LCN    5           ADJUST ADDRESS FOR ACCESS MESSAGE
          RAM    ADFD 
          AOM    ADFC 
          LDC    NJNI+ADF7.3-ADFF 
          STM    ADFF 
          LDN    BMLF        SELECT MAINTENANCE LOG 
          UJN    AER1        ACCESS DAYFILE 
  
          ERRNG  37-ADF7.3+ADFF  JUMP OUT OF RANGE
 AUD      SPACE  4
***       FUNCTION *AUDF* - ACCESS USER DAYFILE.
* 
*         READ CM PART OF DAYFILE STARTING AT FIRST, AND MAKE LOCKED
*         LIBRARY TYPE FILE AT CONTROL POINT. 
  
  
 AUD      LDN    0           SELECT USER DAYFILE
          UJN    AER1 
 RDT      SPACE  4
***       FUNCTION *RDTF* - RETURN DEVICE TYPE. 
* 
*         FET+1, BYTE 0 = EST ORDINAL.
*         RETURN DEVICE TYPE IN FET+1, BYTE 0.
  
  
 RDT      RJM    GFE         GET FET ADDRESS
          ADN    1
          CRD    CM 
          LDN    ESTP        READ EST POINTER 
          CRD    FS 
          LDD    CM          LOAD EST ORDINAL 
          SBD    FS+2 
          MJN    RDT1        IF IN TABLE
          ABORT  /MESS/EREQ  * SFM INCORRECT EQUIPMENT.*
  
 RDT1     SFA    EST,CM 
          ADK    EQDE 
          CRD    FS          READ EST ENTRY 
          LDD    FS 
          LPC    4000 
          LMD    FS+3 
          STD    CM 
          RJM    GFE         RETURN DEVICE TYPE TO FET
          ADN    1
          CWD    CM 
          LJM    SFMX        EXIT 
 PAD      SPACE  4,5
***       FUNCTION *PADF* - PROTECT ACTIVE DAYFILE. 
* 
*         AN ACTIVE DAYFILE OF TYPE, TY, WILL BE PROTECTED BY 
*         PLACING THE FIRST TRACK FROM THE DAYFILE POINTER INTO THE 
*         APPROPRIATE TRACK BYTE IN THE SECTOR OF LOCAL AREAS.
*         THE TRACK INTERLOCK IS ASSUMED TO BE INTERLOCKED. 
*         THE TRACK INTERLOCK WILL BE CLEARED.
  
  
 PDF      RJM    SDT         SET DAYFILE TYPE 
          RJM    SDA         SET DAYFILE POINTER ADDRESS
          CRD    CM 
          LDD    CM          SET EQUIPMENT
          STD    T5 
          LDD    CM+1        SET FIRST TRACK
          STD    T6 
          RJM    DTS         DETERMINE TRACK STATUS 
          MJN    PDF1        IF TRACK INTERLOCKED 
          ABORT  /MESS/ERTE  * SFM TRACK INTERLOCK ERROR.*
  
 PDF1     LDD    T6          CLEAR TRACK INTERLOCK
          RJM    CTI
          LDN    SPFS        SET PRESERVED FILE BIT 
          STD    CM+3 
          LDD    T5          SET EQUIPMENT
          STD    CM+1 
          LDD    T6          SET FIRST TRACK
          STD    CM+2 
          MONITOR STBM
 PDF2     LDC    CKPA        SET CHECKPOINT REQUEST 
          STM    SFMF 
          LJM    SFMX        RETURN 
 CDB      SPACE  4,6
***       FUNCTION *CDBF* - CLEAR DAYFILE BYTE. 
* 
*         THE TRACK INTERLOCK AND THE FIRST TRACK BYTE FOR THE
*         SPECIFIED DAYFILE ON THE SPECIFIED DEVICE WILL BE CLEARED.
  
  
 CDB      RJM    SDT         SET DAYFILE TYPE 
          LDD    CN          SET EQUIPMENT
          STD    T5 
          STM    CDBA 
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    CN 
          LDD    CN          CHECK IF MASS STORAGE
          SHN    21-13
          MJN    CDB2        IF MASS STORAGE EQUIPMENT
 CDB1     ABORT  /MESS/EREQ  * SFM INCORRECT EQUIPMENT.*
  
 CDB2     RJM    RLA         READ SECTOR OF LOCAL AREAS 
          ZJN    CDB1        IF NO ENTRY FOR THIS MACHINE 
          PJN    CDB3        IF NO MASS STORAGE ERROR 
          ERROR  /ERR/RMS    EC=3, SFM UNCORECTABLE RMS ERROR 
  
 CDB3     ADD    TY          SET TRACK BYTE ADDRESS 
          SBN    SDAY 
          STD    T1 
          LDI    T1          SET FIRST TRACK OF INACTIVE DAYFILE
          STD    T6 
          RJM    DTS         DETERMINE TRACK STATUS 
          MJN    CDB4        IF TRACK INTERLOCK SET 
          ABORT  /MESS/ERTE  * SFM TRACK INTERLOCK ERROR.*
  
 CDB4     LDD    TY          SET CHECKPOINT PARAMETER 
          STM    CKPA+4 
          RJM    CIB         CLEAR FST INTERLOCK BIT
          LDD    T6          CLEAR TRACK INTERLOCK
          RJM    CTI
          LDD    MA          LOCATE THE *ZZZZLBT* FILE
          CWM    ATDD,ON
          SBN    1
          CRD    FN 
          RJM    SAF
          ZJN    CDB5        IF FILE NOT FOUND
          RJM    DRF         RETURN THE *ZZZZLBT* FILE
          LDC    *           RESET THE EST ORDINAL
 CDBA     EQU    *-1
          STD    T5 
          LJM    PDF2        SET CHECKPOINT REQUEST 
  
 CDB5     ABORT  /MESS/ERFF  * SFM FILE NOT FOUND.* 
 ATD      SPACE  4,15 
 ATD      TITLE  ATTACH INACTIVE DAYFILE. 
***       FUNCTION *ATDF* - ATTACH INACTIVE DAYFILE.
* 
*         THE SPECIFIED INACTIVE DAYFILE ON EQUIPMENT, EQ, IS ATTACHED
*         TO THE CONTROL POINT AS A LIBRARY TYPE FILE WITH ITS TRACK
*         INTERLOCK BIT SET. THE FILE NAME IS TAKEN FROM THE FIRST
*         WORD OF THE FET.
* 
*         IF A LIBRARY TYPE FILE WITH THE SAME FILE NAME IS FOUND 
*         ATTACHED TO THE CONTROL POINT, THEN THE CALLER IS ABORTED.
*         IF THE DUPLICATE FILE IS NOT A LIBRARY TYPE FILE, THEN
*         IT IS RETURNED BEFORE CREATING THE NEW FILE.
* 
*         THE LABEL TRACK ON THE DAYFILE DEVICE WILL BE INTERLOCKED TO
*         PREVENT PROBLEMS CAUSED BY MULTIPLE *DFTERM* RUNS.  THIS
*         INTERLOCK IS NORMALLY CLEARED BY A *CDBF* CALL.  TO ALLOW 
*         FOR A POSSIBLE ABORT OF *DFTERM*, A LOCAL FILE *ZZZZLBT* OF 
*         FILE TYPE *LIFT* WILL BE CREATED.  THIS FILE POINTS TO THE
*         INTERLOCKED LABEL.  *0DF* WILL CLEAR THE INTERLOCK WHEN 
*         THE *ZZZZLBT* FILE IS RETURNED. 
  
  
 ATD      BSS    0           ENTRY
          LDD    MA          CREATE THE *ZZZZLBT* FILE
          CWM    ATDD,ON
          SBN    1
          CRD    FN 
 ATD0     LDN    NEEQ        SET THE NULL EQUIPMENT 
          STD    FS 
          LDN    2           RETURN IF NFL INCREASE PENDING 
          STM    OVL0-1 
          EXECUTE  0BF,OVL0 
          UJN    ATD0.2      CHECK FOR FNT ENTRY CREATED
  
*         PROCESS DUPLICATE FILE. 
  
          RJM    SFB         SET FILE BUSY
          NJN    ATD0.1      IF FILE BUSY REJECT
          RJM    DRF         DROP THE FILE
          UJN    ATD0        RETRY THE FILE CREATION
  
 ATD0.1   ABORT  /MESS/ERDF  * SFM DUPLICATE FILE FOUND.* 
  
 ATD0.2   ZJN    ATD0.3      IF FNT CREATED 
          LDN    NFIR 
          LJM    ERS         ENTER PP RECALL STACK
  
 ATD0.3   LDD    FA          SAVE THE FNT OFFSET
          STM    ATDC 
          RJM    GFE         GET THE DAYFILE FNT NAME 
          CRD    FN 
          RJM    VFN         VERIFY FILE NAME 
          NJN    ATD1        IF NAME VERIFIES 
          ABORT  /MESS/ERFN  * SFM FILE NAME ERROR.*
  
*         GET FIRST TRACK OF FILE TO ATTACH.
  
 ATD1     RJM    SDT         SET DAYFILE TYPE 
          LDD    CN          SET EST ORDINAL
          STD    T5 
          STM    ATDB        SAVE EST ORDINAL 
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    CN 
          LDD    CN 
          SHN    21-13
          MJN    ATD3        IF MASS STORAGE
 ATD2     ABORT  /MESS/EREQ  * SFM INCORRECT EQUIPMENT.*
  
 ATD3     RJM    RLA         READ SECTOR OF LOCAL AREAS 
          ZJN    ATD2        IF NO ENTRY FOR THIS MACHINE 
          PJN    ATD4        IF NO MASS STORAGE ERROR 
          ERROR  /ERR/RMS    EC=3, UNCORRECTABLE RMS ERROR
  
 ATD4     ADD    TY          SET TRACK BYTE ADDRESS 
          SBN    SDAY 
          STD    T1 
          LDI    T1          SET FIRST TRACK OF INACTIVE DAYFILE
          STD    T6 
          STM    ATDA 
          NJN    ATD5        IF FILE EXISTS 
          ERROR  /ERR/FNF    EC=2, FILE NOT FOUND 
  
*         SET TRACK INTERLOCK.
  
 ATD5     RJM    STI         SET TRACK INTERLOCK
          ZJN    ATD7        IF INTERLOCK SET 
          ERROR  /ERR/DFB    EC=0, DAYFILE BUSY 
  
*         ENTER FILE IN FNT TABLE.
  
 ATD6     RJM    SFB         SET FILE BUSY
          NJN    ATD7.1      IF FILE BUSY REJECT
          RJM    DRF         DROP FILE
  
 ATD7     LDN    NEEQ        SET NULL EQUIPMENT 
          STD    FS 
          LDN    2           RETURN TO ENTER PP STACK ON NFL INCREASE 
          STM    OVL0-1 
          EXECUTE 0BF,OVL0   MAKE FNT/FST ENTRY 
          UJN    ATD7.2      CHECK IF FNT ENTRY CREATED 
  
*         PROCESS DUPLICATE FILE. 
  
          NFA    FA,R        READ FNT ENTRY OF DUPLICATE FILE 
          CRD    FS 
          LDD    FS+4        CHECK FILE TYPE
          SHN    -6 
          LMN    LIFT 
          NJN    ATD6        IF FILE NOT *LIBRARY* TYPE 
 ATD7.1   LDN    0           CLEAR FNT ENTRY ADDRESS
          STD    FA 
          LDM    ATDA        CLEAR TRACK INTERLOCK
          RJM    CTI
          ABORT  /MESS/ERDF  * SFM DUPLICATE FILE FOUND.* 
  
 ATD7.2   ZJN    ATD8        IF FNT ENTRY CREATED 
          LDM    ATDA        CLEAR TRACK INTERLOCK
          RJM    CTI
          LDN    NFIR        REASON CODE = NFL INCREASE PENDING 
          LJM    ERS         ENTER PP RECALL STACK
  
*         BUILD FNT/FST ENTRY.
  
 ATD8     LDC    *           SET FIRST TRACK
 ATDA     EQU    *-1         (DAYFILE FIRST TRACK)
          STD    FS+1 
          STD    FS+2        SET CURRENT TRACK
          LDC    *           SET EQUIPMENT
 ATDB     EQU    *-1         (EST ORDINAL)
          STD    FS 
          STD    T5          SET EST ORDINAL
          LDN    FSMS        SET CURRENT SECTOR 
          STD    FS+3 
          LDC    1005        SET TRACK INTERLOCK, EOR 
          STD    FS+4 
          LDC    LIFT*100    SET FILE TYPE TO *LIBRARY* 
          STD    FN+4 
          RJM    LLT         LOCATE LABEL TRACK 
          RJM    WTI         SET TRACK INTERLOCK
          NJP    ATD9        IF TRACK INTERLOCK NOT SET 
          NFA    FA,R        STORE FNT ENTRY
          CWD    FN 
          ADN    FSTL        STORE THE FST ENTRY
          CWD    FS 
          LDC    **          COMPLETE THE *ZZZZLBT* FILE
 ATDC     EQU    *-1
          STD    FA 
          NFA    FA,R 
          ADK    FNTL 
          CRD    FN 
          ADN    FSTL-FNTL
          CRD    FS 
          LDM    ATDB        SET THE EST ORDINAL
          STD    FS 
          RJM    LLT         SET THE LABEL TRACK
          STD    FS+1 
          STD    FS+2 
          LDC    1005        SET THE TRACK INTERLOCK FLAG 
          STD    FS+4 
          LDC    LIFT*100    SET LIBRARY FILE TYPE
          STD    FN+4 
          NFA    FA,R 
          ADK    FNTL 
          CWD    FN 
          ADN    FSTL-FNTL
          CWD    FS 
          LDN    0           CLEAR THE FNT POINTER
          STD    FA 
          LJM    SFMX 
  
 ATD9     LDD    FS+1        CLEAR TRACK INTERLOCK ON DAYFILE 
          RJM    CTI
          RJM    DRF         RETURN FNT ENTRY 
          ERROR  /ERR/DFB    EC=1, DAYFILE BUSY 
  
 ATDD     VFD    42/0LZZZZLBT,18/0
 GDI      SPACE  4,10 
***       FUNCTION *GDIF* - GET DEVICE INFORMATION. 
* 
*         COPY DEVICE INFORMATION SECTOR FOR SPECIFIED DEVICE 
*         INTO CENTRAL BUFFER STARTING AT *FIRST*.
* 
*         THE CALLING PROGRAM MUST HAVE SYSTEM ORIGIN AND 
*         AN *SSJ=*  ENTRY POINT. 
  
  
 GDI      BSS    0           ENTRY
          LDD    HN          VALIDATE BUFFER POINTERS 
          RJM    VBP
          MJN    GDI1        IF DATA FITS IN BUFFER AND IN FL 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 GDI1     RJM    GFE         READ EST ORDINAL 
          ADN    7
          CRD    CM 
          LDD    CM          VALIDATE EQUIPMENT 
          RJM    VEQ
          RJM    RDI         READ DEVICE INFORMATION SECTOR 
          ENDMS 
          LDD    CN+3        WRITE SECTOR TO CENTRAL BUFFER 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CN+4 
          CWM    BFMS+2,HN
          LDN    0           UPDATE BUFFER POINTERS 
          STD    CN 
          STD    CN+1 
          STD    CN+2 
          RJM    GFE         SET (OUT) = (FIRST)
          ADN    3
          CWD    CN 
          LDD    T1          SET (IN) = (FIRST) + (WORDS TRANSFERRED) 
          RAD    CN+4 
          SHN    -14
          RAD    CN+3 
          RJM    GFE
          ADN    2
          CWD    CN 
          LDN    22          LAST STATUS = EOR
          STD    LS 
          LJM    SFMX        EXIT 
 SDF      SPACE  4,10 
***       FUNCTION *SDFF* - SET DEVICE INFORMATION. 
* 
*         SET FIELDS IN DEVICE INFORMATION SECTOR OF
*         SPECIFIED DEVICE.  WORD AT *WI* IS UPDATED WITH DATA
*         FOUND IN CENTRAL BUFFER AT *FIRST*. 
* 
*         THE CALLING PROGRAM MUST HAVE SYSTEM ORIGIN 
*         PRIVILEGES AND AN *SSJ=* ENTRY POINT. 
  
  
 SDF      BSS    0           ENTRY
          RJM    GFE         READ *FIRST* 
          ADN    1
          CRD    CN 
          ADN    7-1         READ (FET+7) 
          CRD    CM 
          LDD    CN+3 
          LPN    37 
          STD    CN+3 
          SHN    14 
          LMD    CN+4 
          SHN    -6 
          SBD    FL 
          MJN    SDF1        IF DATA WITHIN FL
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 SDF1     LDD    CM+4        SAVE WORD INDEX
          LPN    77 
          STM    SDFA 
          SBN    MNIT 
          PJN    SDF2        IF NOT RESERVED WORD 
          ABORT  /MESS/ERIR  * SFM INCORRECT REQUEST.*
  
 SDF2     LDD    CM          VALIDATE EQUIPMENT 
          RJM    VEQ
          LDN    0           FORCE LABEL TRACK INTERLOCK
          STM    RDIA 
          RJM    RDI         READ DEVICE INFORMATION SECTOR 
          LDC    *           CALCULATE ADDRESS OF WORD IN BUFFER
 SDFA     EQU    *-1         (INDEX OF WORD TO UPDATE)
          SHN    2
          ADM    SDFA 
          ADC    BFMS+2 
          STM    SDFB 
          LDD    CN+3 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CN+4 
          CRM    *,ON        UPDATE WORD
 SDFB     EQU    *-1         (ADDRESS OF WORD WITHIN BUFFER)
          LDN    PDTL        UPDATE SECTOR MODIFICATION DATE
          CRM    BFMS+2+SMIT*5,ON 
          LDC    BFMS+WLSF   REWRITE SECTOR 
          RJM    WMS
          ENDMS 
          RJM    RTI         RELEASE LABEL TRACK INTERLOCK
          LJM    SFMX        EXIT 
 RSD      SPACE  4,10 
          TITLE  SUBROUTINES. 
 CBL      SPACE  4,10 
**        CBL - CHECK DAYFILE BUFFER LENGTH.
* 
*         ENTRY  (TY) = DAYFILE TYPE. 
* 
*         EXIT   (A) = BUFFER LENGTH. 
*                TO *ABT* IF ZERO LENGTH DAYFILE BUFFER.
* 
*         USES   FA, CM - CM+4. 
* 
*         CALLS  SDA. 
  
  
 CBL      SUBR               ENTRY/EXIT 
          RJM    SDA         SET DAYFILE ADDRESS
          SBN    1           READ BUFFER LENGTH (OUT POINTER) WORD
          CRD    CM 
          LDD    CM+2 
          NJN    CBLX        IF NOT ZERO LENGTH BUFFER
          STD    FA          CLEAR FST ADDRESS
          ABORT  /MESS/ERFE  * SFM FILE EMPTY.* 
 CDF      SPACE  4,10 
**        CDF - COPY DAYFILE. 
* 
*         ENTRY  (CN+3 - CN+4) = IN POINTER.
* 
*         EXIT   (CN+3 - CN+4) ADVANCED.
* 
*         USES   T1 - T3, CM - CM+7.
* 
*         CALLS  SBA, SDA.
  
  
 CDF      SUBR               ENTRY/EXIT 
          RJM    SDA         SET DAYFILE FET ADDRESS
          SBN    1
          CRD    CM+3 
          SBN    1
          CRD    CM 
          LDD    HN          SET BLOCK SIZE FOR READ
          STD    T3 
 CDF1     LDD    CM+4        IN - OUT 
          SBD    CM+7 
          ZJN    CDFX        IF BUFFER EMPTY
          PJN    CDF2        IF IN .GT. OUT 
          ADD    CM+5        ADD BUFFER LENGTH
 CDF2     SBD    T3 
          PJN    CDF3        IF FULL BLOCK IN BUFFER
          ADD    HN          ADJUST BLOCK SIZE
          STD    T3 
 CDF3     LDD    T3          SET WORD COUNT FOR READ
          STD    T2 
          ADD    CM+7        ADD OUT - BUFFER LENGTH
          SBD    CM+5 
          MJN    CDF4        IF NO WRAP AROUND
          ZJN    CDF4        IF NO WRAP AROUND
          STD    T1          WORD COUNT FOR FIRST READ
          LDD    CM+5        WORD COUNT FROM OUT TO END OF BUFFER 
          SBD    CM+7 
          STD    T2 
          SHN    2
          ADD    T2 
          ADC    BFMS        BUFFER ADDRESS FOR FIRST READ
          STM    CDFA 
          RJM    SBA         READ WRAP AROUND 
          CRM    *,T1 
 CDFA     EQU    *-1
 CDF4     RJM    SBA         READ DAYFILE BLOCK 
          ADD    CM+7 
          CRM    BFMS,T2
          LDD    CN+3        STORE DATA READ
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CN+4 
          CWM    BFMS,T3
          LDD    T3          ADVANCE IN POINTER 
          RAD    CN+4 
          SHN    -14
          RAD    CN+3 
          LDD    T3          ADVANCE DAYFILE OUT POINTER
          RAD    CM+7 
          SBD    CM+5 
          MJN    CDF5        IF NO WRAP AROUND
          STD    CM+7 
 CDF5     LJM    CDF1        LOOP FOR NEXT BLOCK
 CIB      SPACE  4,15 
**        CIB - CLEAR FST INTERLOCK BIT.
*         THE TRACK INTERLOCK BIT IN THE FST FOR THE OLD
*         DAYFILE IS CLEARED. 
* 
*         ENTRY  (IR+3 - IR+4) = FET ADDRESS. 
* 
*         EXIT   FST ENTRY REWRITTEN. 
* 
*         USES   FA, CM - CM+4, FN - FN+4.
* 
*         CALLS  GFE, SAF.
* 
*         MACROS NFA. 
  
  
 CIB      SUBR               ENTRY/EXIT 
          RJM    GFE         GET FET ADDRESS
          CRD    FN          READ FILE NAME 
          RJM    SAF         SEARCH FOR ASSIGNED FILE 
          ZJN    CIBX        IF FILE NOT FOUND
          NFA    FA,R 
          ADN    FSTL 
          CRD    CM          READ FST ENTRY 
          LDD    CM+4        CLEAR INTERLOCK BIT
          LPC    6777 
          STD    CM+4 
          NFA    FA,R 
          ADN    FSTL 
          CWD    CM          REWRITE FST ENTRY
          LDN    0           CLEAR FNT ORDINAL
          STD    FA 
          UJN    CIBX        RETURN 
 SBA      SPACE  4,10 
**        SBA - SET BUFFER ADDRESS. 
* 
*         ENTRY  (TY) = DAYFILE TYPE. 
*                (CM - CM+1) = DAYFILE BUFFER ADDRESS.
* 
*         EXIT   (A) = DAYFILE BUFFER ADDRESS.
* 
*         MACROS NFA. 
  
  
 SBA1     NFA    DAYN        SET JOB DAYFILE BUFFER ADDRESS 
  
 SBA      SUBR               ENTRY/EXIT 
          LDD    TY 
          ZJN    SBA1        IF JOB DAYFILE 
          LDD    CM          SET SYSTEM DAYFILE BUFFER ADDRESS
          SHN    14 
          ADD    CM+1 
          UJN    SBAX        RETURN 
 RDI      SPACE  4,20 
**        RDI - READ DEVICE INFORMATION SECTOR. 
* 
*         ENTRY  (T5) = EQUIPMENT.
*                (RDIA) = *PSN* IF LABEL TRACK IS TO BE INTERLOCKED.
* 
*         EXIT   (T6) = LABEL TRACK.
*                (T7) = *DILT* SECTOR.
*                (BFMS) = DEVICE INFORMATION SECTOR.
* 
*         ERROR  TO *DPP* IF ERROR FLAG SET.
* 
*         CALLS  LLT, RMS, WTI. 
* 
*         MACROS SETMS. 
  
  
 RDI      SUBR               ENTRY/EXIT 
          RJM    LLT         LOCATE LABEL TRACK 
 RDIA     UJN    RDI2        BYPASS LABEL TRACK INTERLOCK 
*         PSN                (*SETDI* FUNCTION) 
          RJM    WTI         SET LABEL TRACK INTERLOCK
          NJP    DPP         IF ERROR FLAG SET
          LDD    T6 
          STM    RTIA 
 RDI2     LDN    DILT        SET SECTOR 
          STD    T7 
          SETMS  IO,RW
          LDC    BFMS        READ SECTOR
          RJM    RMS
          UJP    RDIX        RETURN 
 VBP      SPACE  4,15 
**        VBP - VALIDATE BUFFER POINTERS. 
* 
*         ENTRY  (A) = BUFFER LENGTH REQUIRED.
* 
*         EXIT   (A) .LT. 0 IF VALID POINTERS.
*                (CN+3 - CN+4) = (FIRST). 
* 
*         USES   T0, T1, CN - CN+4, T2 - T2+4.
* 
*         CALLS  GFE. 
  
  
 VBP      SUBR               ENTRY/EXIT 
          STD    T1 
          RJM    GFE         READ *FIRST* 
          ADN    1
          CRD    CN 
          ADN    3           READ *LIMIT* 
          CRD    T2 
          LDD    T2+3 
          LPN    37 
          STD    T2+3 
          SHN    14 
          LMD    T2+4 
          SBN    1
          SHN    -6 
          SBD    FL 
          PJN    VBPX        IF LIMIT .GT. FL 
          LDD    CN+3 
          LPN    37 
          STD    CN+3 
          SHN    14 
          LMD    CN+4 
          ADD    T1          FIRST+BUFL 
          STD    T2 
          SHN    -14
          SBD    T2+3 
          NJN    VBPX        IF (FIRST+BUFL) .NE. LIMIT 
          LDD    T2 
          SBD    T2+4 
          UJN    VBPX        RETURN 
 VEQ      SPACE  4,10 
**        VEQ - VALIDATE EQUIPMENT. 
* 
*         ENTRY  (A) = EST ORDINAL. 
* 
*         EXIT   (CM - CM+4) = EST ENTRY. 
*                TO *ABT* IF INCORRECT EQUIPMENT. 
* 
*         USES   T5, CM - CM+4. 
* 
*         MACROS ABORT, SFA.
  
  
 VEQ      SUBR               ENTRY/EXIT 
          STD    T5 
          ZJN    VEQ1        IF NOT LEGAL EST ORDINAL 
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          SHN    21-13
          MJN    VEQX        IF MASS STORAGE EQUIPMENT
 VEQ1     ABORT  /MESS/EREQ  * SFM INCORRECT EQUIPMENT.*
          SPACE  4
          SPACE  4
 OVL0     EQU    BFMS-ZDFL
          ERRNG  OVL0-*-5    OVERFLOW INTO ZERO LEVEL OVERLAY AREA
          ERRNG  EPFW-OVL0-ZBFL  CHECK LENGTH OF *0BF*
          ERRNG  EPFW-OVL0-ZTDL  CHECK LENGTH OF *0TD*
 PRS      TITLE  PRESET.
**        PRS - PRESET PROGRAM. 
* 
*         EXIT   (LS) = LAST FET STATUS.
*                (FA) = 0.
*                (FI) = 0.
*                (MI) = 1.
*                (TE) = NUMBER OF ENTRIES IN FNT. 
*                (FN - FN+4) = FIRST WORD OF FET. 
  
  
 PRS      SUBR               ENTRY/EXIT 
          LDN    0           CLEAR FST ADDRESS
          STD    T1 
          STD    FA 
          STD    FI 
          LDN    1           PRESET MACHINE INDEX 
          STD    MI 
          RJM    CRS         CHECK RECALL STATUS
          ZJN    PRS1        IF RECALL NOT SET
  
*         CHECK FUNCTION CODE.
  
          LDD    IR+2        CHECK FUNCTION CODE
          SHN    1
          ADD    IR+2 
          STD    T7 
          SBK    MXFN*3 
          MJN    PRS2        IF LEGAL CODE
 PRS1     ABORT  /MESS/ERIR  * SFM INCORRECT REQUEST.*
  
*         CHECK FET ADDRESS.
  
 PRS2     LDD    IR+3        CHECK FET ADDRESS
          LPN    77 
          STD    IR+3 
          SHN    14 
          MJN    PRS2.1      IF OUT OF RANGE
          LMD    IR+4 
          ADN    1
          SHN    -6 
          SBD    FL 
          MJN    PRS2.2      IF NOT OUT OF RANGE
 PRS2.1   ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
*         CHECK FET LENGTH. 
  
 PRS2.2   LDM    TFCN+2,T7
          LPN    77 
          STM    FETL        SAVE REQUIRED FET LENGTH 
          ZJN    PRS2.3      IF NO FET REQUIRED 
          RJM    GFE         GET FET ADDRESS
          ADN    1
          CRD    CM 
          LDD    CM+3        SET FET LENGTH 
          SHN    -6 
          ADN    5
          STD    T1 
          LDM    FETL        CHECK FET LENGTH 
          SBD    T1 
          PJN    PRS2.1      IF FET NOT LONG ENOUGH 
 PRS2.3   LDD    IR+3 
          SHN    14 
          LMD    IR+4 
          ADD    T1 
          SHN    -6 
          SBD    FL 
          PJN    PRS2.1      IF OUT OF RANGE
  
*         CHECK FOR PRIVILEGED ANALYST ACCESS.
  
          LDM    TFCN+2,T7
          SHN    21-7 
          PJN    PRS3        IF NOT CHECKING FOR PRIVILEGED ANALYST 
          RJM    VPA         VALIDATE PRIVILEGED ANALYST
          ZJN    PRS3.1      IF PRIVILEGED ANALYST ACCESS ALLOWED 
  
*         CHECK FOR EITHER SYSTEM ORIGIN PRIVILEGES OR *SSJ=*.
  
 PRS3     LDM    TFCN+2,T7
          SHN    21-10
          PJN    PRS4        IF NOT CHECKING FOR *SYOT* OR *SSJ=* 
          RJM    CUA         CHECK USER ACCESS
          ZJN    PRS3.1      IF CALLER HAS SYSTEM ORIGIN PRIVILEGES 
          LDD    CP          CHECK FOR *SSJ=* 
          ADK    SEPW 
          CRD    CM 
          LDD    CM 
          SHN    21-2 
          PJN    PRS5        IF CALLER IS NOT *SSJ=*
 PRS3.1   LJM    PRS7        PROCESS FUNCTION 
  
*         CHECK FOR SYSTEM ORIGIN PRIVILEGES. 
  
 PRS4     LDM    TFCN+2,T7   CHECK USER ACCESS REQUIRMENTS
          SHN    21-12
          PJN    PRS6        IF NO REQUIREMENTS 
          RJM    CUA         CHECK USER ACCESS
          ZJN    PRS6        IF CALLER HAS SYSTEM ORIGIN PRIVILEGES 
          LDD    CM          CHECK MAINTENANCE ACCESS 
          NJN    PRS5        IF NOT MAINTENANCE ACCESS
          LDM    TFCN+2,T7
          SHN    21-11
          MJN    PRS6        IF MAINTENANCE ACCESS ALLOWED
 PRS5     LJM    PRS1        * SFM INCORRECT REQUEST.*
  
*         CHECK FOR *SSJ=*. 
  
 PRS6     LDM    TFCN+2,T7
          SHN    21-13
          PJN    PRS7        IF NOT CHECKING FOR *SSJ=* 
          LDD    CP          READ SPECIAL ENTRY POINTS
          ADC    SEPW 
          CRD    CM 
          LDD    CM 
          SHN    21-2 
          PJN    PRS5        IF *SSJ=* NOT PRESENT
  
*         PROCESS FUNCTION. 
  
 PRS7     LDM    TFCN,T7     SET OVERLAY NAME 
          STM    SFMA 
          LDM    TFCN+1,T7   SET PROCESSOR ADDRESS
          STM    SFMB 
          RJM    GFE         GET FET ADDRESS
          CRD    FN 
          LDD    FN+4        SAVE LAST FET STATUS 
          LPC    1776 
          STD    LS 
          LDN    DFPP        READ DAYFILE POINTER WORD
          CRD    CM 
          LDD    CM          SET FWA-1 OF DAYFILE POINTERS
          SHN    14 
          LMD    CM+1 
          SBN    1
          STM    SDAA+1 
          SHN    -14
          RAM    SDAA 
          LDN    FNTP        SET FNT POINTER
          CRD    CM 
          LDD    CM+2        SET NUMBER OF ENTRIES
          STD    TE 
          RJM    IFP         INITIALIZE TABLE ACCESS ROUTINES 
          LJM    PRSX        RETURN 
  
  
 IFP      HERE               DUMP *IFP* REMOTE CODE 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPCRS 
 SSJ$     EQU    1           SET SSJ CHECKING FOR *COMPCUA* 
*CALL     COMPCUA 
*CALL     COMPVPA 
 TFCN     SPACE  4,20 
**        TFCN - TABLE OF FUNCTION CODE PROCESSORS. 
* 
*T,       12/O,12/N,1/S,1/P,1/M,1/E,1/A,1/0,6/L 
* 
*         N      FUNCTION PROCESSOR ADDRESS.
*         O      OVERLAY NAME.
*         S      *SSJ=* ENTRY POINT REQUIRED. 
*         P      SYSTEM ORIGIN PRIVILEGES REQUIRED. 
*         M      MAINTENANCE ACCESS ALLOWED.
*         E      EITHER *SSJ=* OR SYSTEM ORIGIN PRIVILEGES REQUIRED.
*         A      ALLOW ACCESS IF CALLER HAS PRIVILEGED ANALYST
*                VALIDATION AND IF *PRIVILEGED ANALYST MODE* ENABLED. 
*         L      REQUIRED FET LENGTH - 1. 
  
  
 TFCN     FCN 
          FCN    TAFF,TAD,6,P,SSJ      TERMINATE ACTIVE DAYFILE 
          FCN    AMDF,ADF,5,P,,,,A     ACCESS MASTER DAYFILE
          FCN    AAFF,AAC,5,P,,,,A     ACCESS ACCOUNT DAYFILE 
          FCN    AELF,AER,5,P,,M,,A    ACCESS ERROR LOG 
          FCN    AMLF,AMF,5,P,,M       ACCESS MAINTENANCE LOG 
          FCN    AUDF,AUD,5            ACCESS USER DAYFILE
          FCN    RDTF,RDT,4,P          RETURN DEVICE TYPE 
          FCN    PADF,PDF,6,P,SSJ      PROTECT ACTIVE DAYFILE 
          FCN    CDBF,CDB,6,P,SSJ      CLEAR DAYFILE BYTE 
          FCN    EFAF,EGF,5,P,SSJ      ENTER LOCAL FAST ATTACH FILE 
          FCN    DFAF,DFA,5,P,SSJ      DELETE FAST ATTACH FILE
          FCN    ECFF,ECF,5,P,SSJ      ENTER *CPD* SAMPLE FILE
          FCN    ATDF,ATD,6,,SSJ       ATTACH INACTIVE DAYFILE
          FCN    EGFF,EGF,5,P,SSJ      ENTER GLOBAL FAST ATTACH FILE
          FCN    ELFF,ELF,5,P,SSJ      ENTER LINK FAST ATTACH FILE
          FCN    GDIF,GDI,6,P,SSJ      GET DEVICE INFORMATION 
          FCN    SDFF,SDF,6,P,SSJ      SET DEVICE INFORMATION 
          FCN    RSDF,RSD,0,,,,E       RETURN SYSTEM DATA 
          FCN    CSTF,CST,0,P          CLEAR SUBSYSTEM ACCESS FLAG
          FCN    SSTF,CST,0,P          SET SUBSYSTEM ACCESS FLAG
          FCN    SCDF,SCD,4,P          SET *CPD* DROP FLAG
          FCN    CFFF,CFA,5,P,SSJ      COUNT FAST ATTACH FILES
          FCN    MDFF,DMM,4,P          DUMP MACHINE MEMORY
          FCN    GLAF,GLA,0            GET LID ATTRIBUTES 
          FCN    GLTF,GLT,4,,,,E       GET LID TABLE
          FCN    GLPF,GLP,0,,,,E       GET PID ATTRIBUTES 
          FCN    GSSF,GSS,0            GET ORIGIN TYPE ACCESS LEVELS
          FCN    GEAF,GEA,0            GET EQUIPMENT ACCESS LEVEL LIMITS
          FCN    GSMF,GSM,0            GET SYSTEM SECURITY MODE 
          FCN    SPTF,SPT,0,,,,E       SET PID ATTRIBUTES 
          FCN    ILTF,INT,0,,,,E       INITIALIZE LDT 
          FCN    GLCF,GLC,0,,,,E       GET LID CONFIGURATION
          FCN    SUSF,SSS,0,P          SET SUBSYSTEM STATUS 
          FCN    GTSF,GTS,0            GET *TMS* STATUS 
          FCN    TPDF,TPD,0,,SSJ       TRANSFER RESOURCE PREVIEW DATA 
          FCN    MXFN 
          SPACE  4,10 
          OVERFLOW
          OVERLAY (ERROR PROCESSOR.)
 ABP      SPACE  4,15 
**        ABP - ABORT JOB.
* 
*         ENTRY  (DA) = MESSAGE ADDRESS.
*                (FS - FS+4) = FST ENTRY. 
*                (FA) = FST ADDRESS.
*                (FA) = 0, IF NO FILE.
* 
*         USES   CM+1, FS+4.
* 
*         CALLS  CFB, DFM.
* 
*         MACROS MONITOR. 
  
  
 ABP      ENTRY              ENTRY
          LDD    DA          ISSUE MESSAGE TO DAYFILE 
          ZJN    ABP2        IF NO DAYFILE MESSAGE
 ABP0     RJM    DFM
          RJM    CFB         CLEAR FILE BUSY
 ABP1     MONITOR  ABTM      ABORT PROGRAM
          LJM    PPR         EXIT TO PP RESIDENT
  
 ABP2     LDC    /MESS/ERIE  * SFM INTERNAL ERROR.* 
          UJN    ABP0        ISSUE MESSAGE
  
  
*         DAYFILE ERROR MESSAGES. 
  
  
          QUAL   MESS 
 ERAB     DATA   C* SFM ABORTED.* 
 ERAE     DATA   C* SFM ARGUMENT ERROR.*
 ERAF     DATA   C* SFM FAMILY STILL ACTIVE.* 
 ERDA     DATA   C* SFM DIRECT ACCESS FILE ERROR.*
 ERDC     DATA   C* SFM INCORRECT DAYFILE CODE.*
 ERDF     DATA   C* SFM DUPLICATE FILE FOUND.*
 EREQ     DATA   C* SFM INCORRECT EQUIPMENT.* 
 ERFA     DATA   C* SFM LINK FAST ATTACH FILE NOT FOUND.* 
 ERFE     DATA   C* SFM FILE EMPTY.*
 ERFF     DATA   C* SFM FILE NOT FOUND.*
 ERFN     DATA   C* SFM FILE NAME ERROR.* 
 ERFT     DATA   C* SFM INCORRECT FILE TYPE.* 
 ERFU     DATA   C* SFM FNT FULL.*
 ERIO     DATA   C* SFM I/O SEQUENCE ERROR.*
 ERIR     DATA   C* SFM INCORRECT REQUEST.* 
 ERLE     DATA   C* SFM UNRECOVERABLE LINK DEVICE ERROR.* 
 ERMS     DATA   C* SFM FILE NOT ON MASS STORAGE.*
 ERNH     DATA   C* SFM GLOBAL FAST ATTACH LIMIT.*
 ERSE     DATA   C* SFM SYSTEM SECTOR ERROR.* 
 ERTE     DATA   C* SFM TRACK INTERLOCK ERROR.* 
 ERUD     DATA   C* SFM UNABLE TO INTERLOCK DEVICE.*
 ERWC     DATA   C* SFM BML MESSAGE LENGTH ERROR.*
 ERIE     DATA   C* SFM INTERNAL ERROR.*
          QUAL   *
 ERP      SPACE  4,10 
**        ERP - COMMON ERROR EXIT FROM SFM. 
* 
*         ENTRY  (DA) = ERROR CODE. 
* 
*         USES   DA, LS, CM - CM+4. 
* 
*         CALLS  GFE. 
  
  
 ERP      ENTRY              ENTRY
          LDM    FETL        CHECK FET LENGTH 
          ZJN    ERP0        IF ONE-WORD FET
          RJM    GFE         GET FET ADDRESS
          ADN    1
          CRD    CM 
          LDD    CM+1        CHECK IF EP BIT SET
          SHN    21-10
          PJN    ERP1        IF EP BIT NOT SET
 ERP0     LDD    DA          SET ERROR CODE IN FET+0
          SHN    12 
          RAD    LS 
          SHN    -14
          STM    SFMC 
          LJM    SFMX        RETURN TO USER 
  
 ERP1     LDD    DA          CHECK ERROR TYPE 
          LMN    /ERR/DFB 
          NJN    ERP2        IF NOT DAYFILE BUSY ERROR
          LDN    TIRR        REASON CODE = TRACK INTERLOCK
          LJM    ERS         ENTER PP RECALL STACK
  
 ERP2     LDM    TEMT,DA     SET ERROR MESSAGE ADDRESS
          STD    DA 
          LJM    ABP         ABORT JOB
          SPACE  4,10 
**        DEFINED ERROR CODES.
* 
*         EC     DESCRIPTION
*         1      DAYFILE BUSY.
*         2      MASS STORAGE NOT AVAILABLE.
*         3      FILE NOT FOUND.
*         4      UNCORRECTABLE RMS ERROR. 
*         5      *CPD* NOT ACTIVE 
*         6      RETURN INFORMATION TOO LONG FOR BUFFER.
*         7      LID UNKNOWN OR NOT LEGAL.
*         10     INCORRECT LID ATTRIBUTES.
*         11     CURRENT ATTRIBUTES NOT IN LID TABLE. 
*         12     LID TABLE OVERFLOW.
*         13     TOO MANY HOST LIDS.
*         14     INCORRECT SUBFUNCTION CODE.
*         15     INCORRECT NETWORK STATUS PARAMETER.
*         16     CHECK PARAMETER BLOCK ENTRIES FOR ERROR. 
  
  
 TEMT     INDEX 
          INDEX  /ERR/DFB,ERPA
          INDEX  /ERR/TKL,ERPB
          INDEX  /ERR/FNF,ERPC
          INDEX  /ERR/RMS,ERPD
          INDEX  /ERR/CNF,ERPE
          INDEX  /ERR/LTL,ERPF
          INDEX  /ERR/LNL,NMSG
          INDEX  /ERR/ILA,NMSG
          INDEX  /ERR/LOA,NMSG
          INDEX  /ERR/LTO,NMSG
          INDEX  /ERR/TMH,NMSG
          INDEX  /ERR/IFC,NMSG
          INDEX  /ERR/IST,NMSG
          INDEX  /ERR/CPB,NMSG
          INDEX  /ERR/MXSE
  
  
 ERPA     DATA   C* SFM - DAYFILE BUSY.*
 ERPB     DATA   C* SFM - TRACK LIMIT.* 
 ERPC     DATA   C* SFM - FILE NOT FOUND.*
 ERPD     DATA   C* SFM - UNCORRECTABLE RMS ERROR.* 
 ERPE     DATA   C+ *CPD* NOT ACTIVE.+
 ERPF     DATA   C* SFM - LID TABLE TOO LONG FOR BUFFER.* 
  
 NMSG     EQU    0           (NO DAYFILE MESSAGE ISSUED)
          SPACE  4,10 
          OVERFLOW  OVLA
          OVERLAY (FAST ATTACH PROCESSORS.) 
          SPACE  4
 EFA      TITLE  FUNCTION PROCESSORS
 CFA      SPACE  4,10 
***       FUNCTION *CFFF* - COUNT FAST ATTACH FILES.
* 
*         *CFA* COUNTS FAST ATTACH FILES FOR THE FAMILY OF THE CALLING
*         PROGRAM AND COMPARES IT TO THE DAF COUNT OF THE SAME FAMILY.
*         *CFA* MUST BE CALLED BY A SPECIAL SYSTEM JOB. 
* 
*         ENTRY  (IR+3 - IR+4) = FET FWA. 
* 
*         EXIT   (FET+5) = 36/ 0, 24/ C 
* 
*         MACROS SFA. 
  
  
 CFA      ENTRY              ENTRY
          LDD    CP          GET FAMILY NAME
          ADN    PFCW 
          CRD    CM 
          SFA    EST,CM+3 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADN    PFGL 
          CRD    CM 
  
*         COUNT FAST ATTACH FILES ON SPECIFIED FAMILY.
  
          LDN    0           INITIALIZE FAFT COUNT
          STD    T1 
          STD    QA 
 CFA1     AOD    QA          ADVANCE FNT ORDINAL
          LMD    TE 
          ZJN    CFA3        IF END OF FNT
          SFA    FNT,QA      READ FNT ENTRY 
          CRD    CN 
          ADN    FSTG        READ FST INFORMATION 
          CRD    T3 
          LDD    CN+4        CHECK FILE TYPE
          SHN    -6 
          LMN    FAFT 
          NJN    CFA1        IF NOT FAFT
          LDD    T3 
          STD    T2          SAVE EST ORDINAL 
          SFA    EST
          ADK    EQDE 
          CRD    T3          EST WORD 
          LDD    T3+4        READ FAMILY NAME 
          SHN    3
          ADN    PFGL 
          CRD    T3 
          RJM    CFM         COMPARE FAMILY NAMES 
          NJN    CFA1        IF NOT SAME FAMILY 
          AOD    T1          INCREMENT FAFT COUNT 
          UJN    CFA1        LOOP 
  
*         GET DIRECT ACCESS FILE (DAF) COUNT FOR SPECIFIED FAMILY.
  
 CFA3     LDN    ESTP        GET EST POINTER
          CRD    FN 
          LDD    FN+3        SAVE LAST MASS STORAGE ORDINAL + 1 
          STD    FN+1 
          LDN    0           INITIALIZE DAF COUNT 
          STD    FN+3 
          STD    FN+4 
          LDN    NOPE-1      INITIALIZE EST ORDINAL FOR SEARCH
          STD    FN 
 CFA4     AOD    FN          GET NEXT EST ENTRY 
          LMD    FN+1 
          ZJN    CFA5        IF END OF MASS STORAGE EQUIPMENTS
          SFA    EST,FN      READ EST ENTRY 
          ADK    EQDE 
          CRD    CN 
          LDD    CN 
          SHN    21-13
          PJN    CFA4        IF NOT MS EQUIPMENT
          LDD    CN+4        GET FAMILY NAME
          SHN    3
          ADN    PFGL 
          CRD    T3 
          RJM    CFM         COMPARE FAMILY NAMES 
          NJN    CFA4        IF NOT SAME FAMILY 
          LDD    CN+4        GET DAF COUNT
          SHN    3
          ADN    STLL 
          CRD    CN 
          LDD    CN+3        INCREMENT DAF COUNT
          RAD    FN+4 
          SHN    -14
          RAD    FN+3 
          UJN    CFA4        SEARCH FOR ANOTHER FAMILY DEVICE 
  
*         STORE RESULT. 
  
 CFA5     LDN    ZERL 
          CRD    CM 
          LDD    FN+3 
          SHN    14 
          ADD    FN+4 
          SBD    T1          (DAF COUNT) - (FAFT COUNT) 
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          RJM    GFE         WRITE FET+5
          ADN    5
          CWD    CM 
          LJM    SFMX        EXIT 
 ECF      SPACE  4,10 
***       FUNCTION *ECFF* - ENTER *CPD* SAMPLE FILE.
* 
*         SPECIFIED FILE MUST BE A DIRECT ACCESS FILE.
*         NO ACTION TAKEN IF SPECIFIED FILE ALREADY ENTERED.
  
  
 ECF      ENTRY              ENTRY
          LCN    FAFT-PMFT   ENABLE SEARCH FOR *PMFT* FILE
          RAM    FATC 
          RJM    VLF         VERIFY LOCAL FILE
          NJN    ECF1        IF FILE UNDEFINED IN SYSTEM FNT
          LJM    SFMX        RETURN 
  
 ECF1     RJM    IFA         INITIALIZE SYSTEM FNT ENTRY
          LDD    QA 
          STM    ECFA+2      SET FNT ORDINAL FOR *CPD* CALL 
          NFA    FA,R 
          ADN    FSTL        RESTORE FST INFORMATION
          CRD    FS 
          LDD    IR+3        SET FET ADDRESS
          STM    ECFA+3 
          LDD    IR+4 
          STM    ECFA+4 
          RJM    GFE         READ LIMIT WORD
          ADN    4
          CRD    CN 
          LDD    FA          SET LOCAL FNT OFFSET 
          STD    CN 
          RJM    GFE         UPDATE FET 
          ADN    4
          CWD    CN 
          LDC    ECFA        ENABLE *CPD* CALL
          STM    SFMF 
          LJM    SFMX        RETURN 
  
  
 ECFA     VFD    18/3RCPD,6/40,12/0,24/0
 EFA      SPACE  4,10 
***       FUNCTION *EFAF* - ENTER LOCAL FAST ATTACH FILE. 
* 
*         SPECIFIED FILE MUST BE A DIRECT ACCESS FILE.
*         NO ACTION TAKEN IF SPECIFIED FILE ALREADY ENTERED.
 EGF      SPACE  4
***       FUNCTION *EGFF* - ENTER GLOBAL FAST ATTACH FILE.
* 
*         THE SPECIFIED FILE IS ENTERED INTO THE GLOBAL FAST
*         ATTACH STATUS IF IT RESIDES ON A SHARED DEVICE.  IF THE 
*         FILE IS NOT ON A SHARED DEVICE, THE FUNCTION IS EXACTLY 
*         THE SAME AS FUNCTION *EFAF*, ENTER LOCAL FAST ATTACH. 
* 
*         THE SPECIFIED FILE MUST BE A DIRECT ACCESS FILE.
  
  
 EGF      ENTRY              ENTRY
          RJM    VLF         VERIFY LOCAL FILE
          NJN    EGF1        IF FAST ATTACH FILE NOT FOUND
          LJM    SFMX        EXIT 
  
 EGF1     LDD    ES          CHECK FILE ON SHARED DEVICE
          SHN    21-11
          PJN    EGF2        IF NOT SHARED DEVICE 
          LDD    IR+2 
          LMN    EFAF 
          NJN    EGF3        IF NOT LOCAL FAST ATTACH 
          RJM    SMI         GET MACHINE INDEX
          STD    MI 
 EGF2     UJN    EGF6        UPDATE SYSTEM SECTOR 
  
 EGF3     SOM    EGFA 
          RJM    SMP         SET MMF PARAMETERS 
          LDD    ES 
          SHN    21-4 
          MJN    EGF6        IF INDEPENDENT SHARED DEVICE 
          LDN    DATI        SET *DATI* INTERLOCK 
          RJM    SFR
          RJM    SFT         SEARCH *FAT* TABLE 
          NJN    EGF4        IF ENTRY FOUND 
          RJM    EFI         ENTER *FAT* TABLE ENTRY
          ZJN    EGF5        IF HOLE USED FOR ENTRY 
          RJM    IFC         INCREMENT FAST ATTACH COUNT
          UJN    EGF5 
  
 EGF4     RJM    UFI         UPDATE *FAT* ENTRY 
 EGF5     LDN    DATI        CLEAR *DATI* INTERLOCK 
          RJM    CFI
 EGF6     LDD    MI          SET SYSTEM SECTOR ADDRESS OF WRITE FLAG
          STD    BA 
          SHN    2
          ADC    UCSS 
          RAD    BA 
          RJM    IFA         INITIALIZE FAST ATTACH FILE
          LDN    1           READ SYSTEM SECTOR 
          RJM    RFS
          NJN    EGF8        IF SYSTEM SECTOR ERROR 
          LDD    ES 
          LPN    20 
          ZJN    EGF7        IF NOT INDEPENDENT SHARED DEVICE 
          LDN    4           SET MACHINE ACTIVE FLAG
 EGF7     ADN    1           SET LOCAL WRITE FLAG 
*         ADN    0           (CLEAR LOCAL WRITE FLAG - GLOBAL FILE) 
 EGFA     EQU    *-1
          STI    BA 
          LDC    4000        SET FAST ATTACH INDICATOR
          LMD    FI 
          STM    FISS 
          LDM    CASS        CLEAR CURRENT ACCESS MODE
          SCN    37 
          STM    CASS 
          LDD    QA          SET FNT ORDINAL
          STM    FASS 
          LDD    MA          COPY FILE NAME TO SYSTEM SECTOR
          CWD    FN 
          CRM    FNSS,ON
          RJM    WFS         REWRITE SYSTEM SECTOR
 EGF8     LDD    FI          SET *FAT* INDEX IN FNT ENTRY 
          RAD    FN+3 
          SFA    FNT,QA      STORE FNT ENTRY
          CWD    FN 
          ADN    FSTG 
          CWD    FS 
          LJM    SFMX        RETURN 
 ELF      SPACE  4
***       FUNCTION *ELFF* - ENTER LINK FAST ATTACH FILE.
* 
*         A SEARCH IS MADE OF THE ECS/FAT TABLE IN ORDER TO DETERMINE 
*         IF A FILE WITH THE SPECIFIED NAME HAS ALREADY BEEN ENTERED
*         INTO GLOBAL FAST ATTACH STATUS.  THE EST ORDINAL AND
*         FIRST TRACK RETURNED FROM *PFM* IN *TERW* ARE USED TO 
*         UNIQUELY IDENTIFY THE FILE. 
  
  
 ELF      ENTRY              ENTRY
          LDD    CP          SET EQUIPMENT AND FIRST TRACK
          ADN    TERW 
          CRD    CM 
          LDD    CM+4        SET TRACK
          STD    FS+1 
          LDD    CM+3        SET EQUIPMENT
          LPC    777
          STD    FS 
          STD    T5 
          SFA    EST         SET EQUIPMENT EST
          ADK    EQDE 
          CRD    ES 
          LDD    ES          CHECK FILE ON SHARED DEVICE
          SHN    21-11
          PJN    ELF1        IF FILE NOT ON SHARED DEVICE 
          RJM    SMP         SET MMF PARAMETERS 
          LDD    ES 
          SHN    21-4 
          MJN    ELF4        IF INDEPENDENT SHARED DEVICE 
          LDN    DATI        SET *DATI* INTERLOCK 
          RJM    SFR
          RJM    SFT         SEARCH *FAT* TABLE 
          NJN    ELF2        IF FILE FOUND
 ELF1     ABORT  /MESS/ERFA  * SFM LINK FAST ATTACH FILE NOT FOUND.*
  
 ELF2     LDD    MI          CHECK MACHINE ALREADY ENTERED
          SHN    2           OFFSET = (MI+1)*5+(BA) 
          ADD    MI 
          ADN    5
          ADD    BA 
          STD    T1 
          LDI    T1 
          ZJN    ELF5        IF MACHINE NOT ENTERED YET 
          LDN    DATI        CLEAR *DATI* INTERLOCK 
          RJM    CFI
 ELF3     LJM    SFMX        RETURN 
  
 ELF4     LDD    ES+4        READ FAMILY NAME 
          SHN    3
          ADN    PFGL 
          CRD    CN 
          LDD    MA          MOVE FILE NAME 
          CWD    FN 
          CRD    CM 
          RJM    FAT         SEARCH FOR FAST ATTACH FILE
          NJN    ELF6        IF FILE NOT FOUND
          UJN    ELF3        RETURN 
  
 ELF5     RJM    UFI         UPDATE *FAT* TABLE 
          LDN    DATI        CLEAR *DATI* INTERLOCK 
          RJM    CFI
 ELF6     RJM    IFA         INITIALIZE FAST ATTACH FILE
          LDD    ES 
          LPN    20 
          ZJN    ELF7        IF NOT INDEPENDENT SHARED DEVICE 
          RJM    RFS         READ SYSTEM SECTOR 
          NJN    ELF3        IF SYSTEM SECTOR ERROR 
          LDD    MI 
          SHN    2
          ADD    MI 
          ADC    UCSS 
          STD    T1 
          LDN    4           SET MACHINE ACTIVE FLAG
          RAI    T1 
          RJM    WFS         REWRITE SYSTEM SECTOR
 ELF7     LDD    FI          SET *FAT* INDEX IN FNT ENTRY 
          RAD    FN+3 
          SFA    FNT,QA      STORE FNT ENTRY
          CWD    FN 
          ADN    FSTG 
          CWD    FS 
          LDD    FS          SET EST ORDINAL
          STD    CM+1 
          LDN    IUCS        INCREMENT USER COUNT 
          STD    CM+3 
          MONITOR  SMDM 
          LJM    SFMX 
 DFA      SPACE  4
***       FUNCTION *DFAF* - DELETE FAST ATTACH FILE.
* 
*         SPECIFIED FILE MUST BE ASSIGNED TO CONTROL POINT. 
  
  
 DFA      ENTRY              ENTRY
          RJM    VLF         VERIFY LOCAL FILE
          ZJN    DFA1        IF FAST ATTACH FILE FOUND
          LJM    SFMX 
  
 DFA1     LDC    DFAB-4      PRESET TABLE ADDRESS 
          STD    CM 
 DFA1.1   LDN    4           INCREMENT ADDRESS FOR NEXT ENTRY 
          RAD    CM 
          LDM    0,CM 
          ZJN    DFA1.2      IF END OF TABLE
          LMD    FN 
          NJN    DFA1.1      IF NO FILE NAME MATCH
          LDM    1,CM 
          LMD    FN+1 
          NJN    DFA1.1      IF NO FILE NAME MATCH
          LDM    2,CM 
          LMD    FN+2 
          NJN    DFA1.1      IF NO FILE NAME MATCH
          LDM    3,CM 
          LMD    FN+3 
          SCN    77 
          ZJN    DFA2        IF IGNORE FAMILY ACTIVITY COUNT
 DFA1.2   LDD    CP          CHECK FAMILY ACTIVITY COUNT
          ADN    PFCW 
          CRD    CM 
          SFA    EST,CM+3 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADN    DULL 
          CRD    CM 
          LDD    CM+4 
          LPC    3777 
          SBN    1
          ZJN    DFA2        IF NO FAMILY ACTIVITY
          ABORT  /MESS/ERAF  * SFM FAMILY STILL ACTIVE.*
  
 DFA2     LDD    FS+4        CLEAR FAST ATTACH INDICATOR
          LPC    5777 
          STD    FS+4 
          LDC    SYFT*100    SET FILE TYPE
          STD    FN+4 
          LDN    ZERL 
          CRD    CN 
          LDD    T1          SET FNT ORDINAL
          STD    QA 
          SFA    FNT         READ FNT ENTRY 
          CRD    CM 
          CWD    FN 
          ADN    FSTG 
          CWD    CN 
          LDD    CM+3        CHECK GLOBAL FAST ATTACH 
          LPN    77 
          ZJN    DFA3        IF NOT GLOBAL FAST ATTACH
          RJM    SMP
          LDD    ES 
          SHN    21-4 
          PJN    DFA7        IF NOT INDEPENDENT SHARED DEVICE 
  
*         CLEAR FST ADDRESS FROM SYSTEM SECTOR. 
  
 DFA3     LDD    FS          RESTORE EQUIPMENT
          STD    T5 
          LDD    FS+1        RESTORE FIRST TRACK
          STD    T6 
          LDN    0           READ SYSTEM SECTOR 
          RJM    RFS
          NJN    DFA6        IF SYSTEM SECTOR ERROR 
          LDD    ES 
          LPN    20 
          ZJN    DFA4        IF NOT SHARED DEVICE 
          RJM    SMI         GET MACHINE INDEX
          STD    MI 
          RJM    CAC
          ZJN    DFA4        IF LAST MACHINE RELEASING FILE 
          LDN    0           CLEAR ACCESS MODE
          STM    CASS 
          STI    T2          CLEAR LOCAL WRITE FLAG 
          UJN    DFA5        REWRITE SYSTEM SECTOR
  
 DFA4     STM    FISS 
 DFA5     RJM    WFS         REWRITE SYSTEM SECTOR
 DFA6     LJM    DFA11       DECREMENT USER COUNT 
  
*         PROCESS MMF FAST ATTACH FILE. 
  
 DFA7     LDN    DATI        SET *DATI* INTERLOCK 
          RJM    SFR
          RJM    SFT         SEARCH *FAT* TABLE 
          NJN    DFA8        IF FILE FOUND
          ABORT  /MESS/ERFF  * SFM FILE NOT FOUND.* 
  
 DFA8     LDD    MI          SET LOCAL WORD OFFSET
          SHN    2
          ADD    MI 
          ADN    5
          ADD    BA 
          STM    DFAA 
          LDN    ZERL        DELETE LOCAL ENTRY 
          CRM    *,ON 
 DFAA     EQU    *-1
          LDN    MXMF        PRESET SEARCH LOOP 
          STD    T0 
 DFA8.1   SOD    T0          CHECK FOR OTHER MACHINES 
          MJN    DFA9        IF NO OTHER MACHINES ACTIVE
          SHN    2
          ADD    T0 
          ADD    BA 
          STD    T1 
          LDM    2*5,T1 
          NJN    DFA10       IF NOT LAST MACHINE OUT
          UJN    DFA8.1      CHECK NEXT MACHINE SLOT
  
*         PROCESS LAST ENTRY REMOVED. 
  
 DFA9     LDN    ZERL        SET TO DELETE ENTRY
          CRD    CM 
          LDN    0           CLEAR WORD ZERO OF *FAT* ENTRY 
          RJM    WFW
          LDN    DATI        CLEAR *DATI* INTERLOCK 
          RJM    CFI
          LJM    DFA3        UPDATE SYSTEM SECTOR AND FST 
  
 DFA10    LDC    LDNI        CLEAR LOCAL ENTRY
          STM    UFIA 
          RJM    UFI         UPDATE *FAT* ENTRY 
          LDN    DATI        CLEAR *DATI* INTERLOCK 
          RJM    CFI
          RJM    CFE         CLEAR LOCAL FNT ENTRY
          LDD    FS          DECREMENT COUNT FOR FAST ATTACH
          STD    CM+1 
          LDN    DUCS 
          STD    CM+3 
          MONITOR  SMDM 
 DFA11    LDD    FS          DECREMENT COUNT FOR LOCAL FILE 
          STD    CM+1        SET EQUIPMENT
          LDN    DUCS 
          STD    CM+3 
          MONITOR  SMDM 
          LJM    SFMX 
  
  
*         TABLE OF SYSTEM FILES FOR FAMILY ACTIVITY OVERRIDE. 
  
 DFAB     BSS    0
          DATA   7L"TMFC"    TMS DATABASE 
          CON    0           END OF TABLE 
 GTS      SPACE  4,10 
***       FUNCTION *GTSF* - GET TMS STATUS. 
* 
*         ENTRY  (IR+3 - IR+4) = PARAMETER WORD ADDRESS.
* 
*         EXIT   (ADDRESS) = BIT 59 SET IF TMS IS ENABLED.
*                            BIT 58 SET IF TFM BINARIES ON SYSTEM.
*                            BIT 57 SET IF TMS ACTIVE ON FAMILY.
*                            BIT 1 SET IF DEFAULT *TO=E*. 
*                            BIT 0 SET IF DEFAULT *TO=F*. 
  
  
 GTS      ENTRY              ENTRY
          LDD    CP          GET FAMILY EST ORDINAL 
          ADN    PFCW 
          CRD    CM 
          SFA    EST,CM+3    GET EST ENTRY
          CRD    CM 
          LDD    CM+4        GET FAMILY NAME FROM MST 
          SHN    3
          ADN    PFGL 
          CRD    CN 
          LDD    MA          GET TAPE CATALOG NAME
          CWM    GTSC,ON
          LDD    MA 
          CRD    CM 
          RJM    FAT         FIND FAST ATTACH FILE
          STD    CM 
          LDN    ZERL        PRESET PARAMETER WORD
          CRD    CN 
          LDD    CM          SET FILE STATUS
          LMN    1
          SHN    11-0 
          STD    CN 
          EXECUTE  TFM,=
          LDC    100+1RT     SET NAME OF TMS PP PROGRAM *TFM* 
          STD    CM+2 
          LDC    2RFM 
          STD    CM+3 
          MONITOR  SPLM      SEARCH PERIPHERAL LIBRARY
          LDD    CM+4        CHECK IF TMS BINARIES IN SYSTEM
          ADD    CM+3 
          ZJN    GTS1        IF NO BINARIES 
          LDC    2000        FLAG BINARIES IN SYSTEM
          RAD    CN 
 GTS1     LDN    SSTL        GET TMS ENABLED/DISABLED STATUS
          CRD    CM 
          LDD    CM+2 
          LPN    1
          LMN    1
          SHN    13-0 
          RAD    CN 
          NFA    TMSN        GET TMS CONTROL WORD 
          CRD    CM 
          LDD    CM+4        PRESET USER DEFAULTS 
          SHN    1-12 
          STD    CN+4 
          SHN    21-13-1+12 
          MJN    GTS3        IF DEFAULTS SET BY USER
          LDD    CP          FETCH EJT ORDINAL
          ADK    TFSW 
          CRD    CM 
          SFA    EJT,CM      CALCULATE EJT ENTRY ABSOLUTE ADDRESS 
          ADK    SCLE        GET JOB ORIGIN TYPE
          CRD    CM 
          LDD    CM 
          LPN    17 
          NJN    GTS2        IF NOT SYSTEM ORIGIN 
          AOM    GTSA        CHANGE SHIFT COUNTS
          AOM    GTSB 
 GTS2     LDK    TFML        GET TMS SYSTEM STATUS WORD 
          CRD    CM 
          LDD    CM+4        SET *TO=F* OR *TO=T* 
 GTSA     SHN    0-12 
*         SHN    0-11        SYSTEM ORIGIN
          LPN    1
          STD    CN+4 
          LDD    CM+4        SET *TO=E* OR *TO=C* 
 GTSB     SHN    1-10 
*         SHN    1-7         SYSTEM ORIGIN
          LPN    2
          RAD    CN+4 
 GTS3     LDD    CN+4        SET DEFAULT TAPE OPTIONS 
          LMN    3
          LPN    3
          STD    CN+4 
          LDN    0
          STD    T1 
          RJM    GFE         WRITE REPLY WORD 
          CWD    CN          RETURN TMS STATUS
          LJM    DPP         DROP PP
  
 GTSC     DATA   7L"TMFC"    TAPE CATALOG FILE NAME 
 SCD      SPACE  4,10 
***       FUNCTION *SCDF* - SET *CPD* DROP FLAG.
* 
*         THIS FUNCTION WILL SET THE *CPD* DROP FLAG IN CMR.  AS A
*         RESULT, THE COPY OF *CPD* THAT IS RUNNING WILL TERMINATE. 
*         IT WILL ALSO ASSIGN THE ACTIVE *SAMPLE* FILE (IF ONE EXISTS)
*         TO THE CALLING JOB AS A LOCAL FILE. 
  
  
 SCD      ENTRY              ENTRY
  
*         CHECK IF *CPD* IS ACTIVE. 
  
          LDN    PPCP        SET PP COMMUNICATION AREA ADDRESSES
          CRD    CM 
          LDD    CM+4 
          STD    DA 
          LDN    PPUL 
          CRD    CM 
          LDD    CM+2 
          SHN    3
          ADD    DA 
          STD    T2 
 SCD1     LDD    DA          CHECK PP PROGRAM NAME
          CRD    CM 
          LDD    CM+1 
          SCN    77 
          SHN    6
          LMD    CM 
          LMC    3RDCP
          ZJN    SCD2        IF *CPD* FOUND 
          LDN    10 
          RAD    DA 
          LMD    T2 
          NJN    SCD1        IF MORE PP-S TO CHECK
          STD    DA 
          LJM    SCD4        PROCESS SAMPLE FILE
  
 SCD2     LDN    1           SET *CPD* DROP FLAG
          STD    CM+1 
          STD    CM+2 
          LDD    MA 
          CWM    SCDA,ON
          MONITOR  UADM 
 SCD3     DELAY              WAIT AWHILE
          PAUSE 
          LDD    CM+1 
          NJP    SFMX        IF ERROR FLAG SET
          LDD    DA 
          CRD    CM 
          LDD    CM+1        CHECK PP ASSIGNED
          SCN    77 
          SHN    6
          LMD    CM 
          LMC    3RDCP
          ZJN    SCD3        IF *CPD* STILL ACTIVE
  
*         PROCESS SAMPLE FILE.
  
 SCD4     LDN    0           INITIALIZE SEARCH INDEX
          STD    QA 
 SCD5     AOD    QA          ADVANCE ORDINAL
          LMD    TE 
          NJN    SCD6        IF NOT END OF FNT
          ERROR  /ERR/FNF    EC = 3, * SFM FILE NOT FOUND.* 
  
 SCD6     SFA    FNT,QA      READ FNT ENTRY 
          CRD    FN 
          LDD    FN+4 
          LMC    PMFT*100 
          NJN    SCD5        IF INCORRECT TYPE
  
*         CREATE LOCAL FILE.
  
          RJM    EFN         ENTER FILE NAME
          LDN    ZERL 
          CRD    CN 
          LDD    MA 
          CWD    FN 
          CRD    CM 
          LDD    CM+3        CLEAR MODE FLAGS 
          SCN    77 
          STD    CM+3 
          LDC    SYFT*100    SET FILE TYPE
          STD    CM+4 
          SFA    FNT,QA 
          CRD    FN 
          CWD    CM          RESTORE SYSTEM FNT SLOT
          ADN    FSTG 
          CRD    FS 
          CWD    CN 
          NFA    FA,R        STORE FILE TYPE IN LOCAL FNT 
          CWD    FN 
          SOD    FS+4        SET FILE BUSY
          LDD    DA 
          NJP    SFMX        IF *CPD* FOUND 
          ERROR  /ERR/CNF    EC=5, * CPD NOT ACTIVE.* 
  
  
 SCDA     CON    LIOS        INCREMENT LOW CORE FIELD BY ONE
          CON    INWL        WORD ADDRES
          CON    2*100+1     BIT ADDRESS/FIELD WIDTH
          CON    0
          CON    0
 CAC      SPACE  4,10 
**        CAC - CHECK ACTIVITY COUNTS.
* 
*         ENTRY  (BFMS) = SYSTEM SECTOR.
*                (MI) = MACHINE INDEX.
* 
*         EXIT   (A) = 0 IF LAST MACHINE TO DELETE FILE.
*                (T2) = *UCSS* OFFSET FOR THIS MACHINE. 
* 
*         USES   CM, T2.
  
  
 CAC      SUBR               ENTRY/EXIT 
          LDD    MI 
          SHN    2
          ADD    MI 
          ADC    UCSS 
          STD    T2 
          LDI    T2          CLEAR MACHINE ACTIVE FLAG
          SCN    4
          STI    T2 
          LDN    0
          STD    CM 
 CAC1     LDM    UCSS+5,CM   CHECK FOR OTHER MACHINES ACTIVE
          LPN    4
          NJN    CACX        IF MACHINE ACTIVE
          LDN    5
          RAD    CM          ADVANCE TO NEXT MACHINE
          ADC    -MISD*5
          NJN    CAC1        IF NOT ALL MACHINES CHECKED
          LDM    CASS        SET CURRENT ACCESS TO WRITE
          SCN    20 
          LMN    20 
          STM    CASS 
          LDN    0
          UJN    CACX        RETURN 
          TITLE  SUBROUTINES. 
 CFE      SPACE  4,10 
**        CFE - CLEAR LOCAL FNT ENTRY.
* 
*         ENTRY  (FA) = INDEX OF FNT ENTRY. 
* 
*         EXIT   (A) = (FA) = 0.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR. 
  
  
 CFE      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    CM 
          LDD    FA 
          ZJN    CFEX        IF NO LOCAL FILE 
          STD    CM+4 
          LDN    DLFS        DELETE LOCAL FNT ENTRY 
          STD    CM+1 
          MONITOR  PLFM 
*         LDN    0           CLEAR FNT INDEX
          STD    FA 
          UJN    CFEX        RETURN 
 CFI      SPACE  4,10 
**        CFI - CLEAR FLAG REGISTER INTERLOCK.
* 
*         ENTRY  (A) = INTERLOCK TO CLEAR. (*DATI* OR *FATI*) 
* 
*         EXIT   (A) = (ABTB).
*                INTERLOCK CLEARED. 
* 
*         USES   CM - CM+4. 
  
  
 CFI      SUBR               ENTRY/EXIT 
          SHN    6
          STD    CM+1 
          LDN    CFRS        CLEAR FLAG REGISTER BITS 
          SHN    11 
          STD    CM+3 
          MONITOR ECSM
          SOM    ABTB        CLEAR INTERLOCK HELD 
          UJN    CFIX        RETURN 
 CFM      SPACE  4,10 
**        CFM - COMPARE FAMILY NAMES. 
* 
*         ENTRY  (T3 - T7) = FAMILY NAME A. 
*                (CM - CM+4) = FAMILY NAME B. 
* 
*         EXIT   (A) = 0, IF SAME FAMILY NAME.
  
  
 CFM      SUBR               ENTRY/EXIT 
          LDD    CM 
          LMD    T3 
          NJN    CFMX        IF NOT SAME FAMILY 
          LDD    CM+1 
          LMD    T3+1 
          NJN    CFMX        IF NOT SAME FAMILY 
          LDD    CM+2 
          LMD    T3+2 
          NJN    CFMX        IF NOT SAME FAMILY 
          LDD    CM+3 
          LMD    T3+3 
          SHN    -6 
          UJN    CFMX        RETURN 
 ECS      SPACE  4
**        EXTENDED MEMORY - READ/WRITE EXTENDED MEMORY. 
* 
*         ENTRY  (A) = NUMBER OF WORDS*100. 
*                (CM+3 - CM+4) SET UP FOR *ECSM*. 
* 
*         EXIT   TO *ABT* IF UNRECOVERED ERROR. 
* 
*         USES   CM - CM+4. 
*                MESSAGE BUFFER IS USED FOR CM BUFFER.
  
  
 ECS      SUBR               ENTRY/EXIT 
          STD    CM+1        SET WORDS TO READ/WRITE
          LDD    MA          SET BUFFER ADDRESS 
          STD    CM+2 
          MONITOR  ECSM      READ/WRITE EXTENDED MEMORY 
          LDD    CM+1 
          ZJN    ECSX        IF NO ERROR
          ABORT  /MESS/ERLE  * SFM UNRECOVERED LINK DEVICE ERROR.*
 EFI      SPACE  4,20 
**        EFI - ENTER *FAT* ITEM. 
* 
*         ENTRY  (FN - FN+3) = FAST ATTACH FILE NAME. 
*                (FS - FS+4) = FILE FST ENTRY.
*                (ES - ES+4) = FILE EST ENTRY.
*                (FC) = *FAT* TABLE COUNT.
*                (FI) = *FAT* TABLE INDEX OF HOLE 
*                (ID) = MACHINE ID
*                (MI) = MACHINE INDEX 
* 
*         EXIT   (A) .EQ. 0 IF HOLD USED FOR ENTRY. 
*                (A) .NE. 0 IF NEW ENTRY CREATED AT END OF TABLE. 
*                TO *ABT* IF *FAT* SPACE NOT AVAILABLE. 
* 
*         USES   CM - CM+4, T1, T6, T7. 
*                MESSAGE BUFFER USED FOR CM/ECS BUFFER. 
* 
*         CALLS  CEA, ECS.
  
  
 EFI      SUBR               ENTRY/EXIT 
          LDD    FI 
          NJN    EFI1        IF HOLE AVAILABLE
          AOM    EFIA        SET NEW ENTRY CREATED
          LDN    20          SET AVAILABLE ENTRY COUNT
 EFIB     SHN    0
          SBK    FAST 
          SHN    6-FATS 
          STD    T1 
          LDD    FC 
          STD    FI 
          SBD    T1 
          MJN    EFI1        IF SPACE AVAILABLE 
          ABORT  /MESS/ERNH  * SFM GLOBAL FAST ATTACH LIMIT.* 
  
*         SET *FAT* WORDS IN EXTENDED MEMORY. 
  
 EFI1     LDN    ZERL        SET FIRST TRACK AND USER COUNTS
          CRD    CM 
          LDD    FS+1 
          STD    CM+1 
          LDN    0           SET WORD TO WRITE
          STD    T3 
 EFI2     AOD    T3          WRITE WORDS 1 THROUGH 1+MXMF 
          RJM    WFW
          LDN    ZERL        SET LOCAL AREAS
          CRD    CM 
          LDD    T3 
          SBN    1+MXMF 
          MJN    EFI2        IF NOT END OF LOCAL WORDS TO WRITE 
          LDD    ID          SET MACHINE ID IN ENTRY BEING CREATED
          STD    CM 
          LDD    MI 
          ADN    1
          RJM    WFW         WRITE *FAT* WORD 
          LDD    ES+4        SET FAMILY AND DEVICE NUMBER 
          SHN    3
          ADN    PFGL 
          CRD    CM 
          LDN    0
          STD    CM+4 
          LDN    2+MXMF 
          RJM    WFW         WRITE *FAT* WORD 
  
*         WRITE WORD 0 OF *FAT* ENTRY TO LINK DEVICE. 
  
          LDD    MA          SET FILE NAME
          CWD    FN 
          CRD    CM 
          LDN    0
          RJM    WFW         WRITE FILE NAME
 EFIA     LDN    0           SET RETURN STATUS
*         LDN    1           SET IF NEW ENTRY CREATED 
          LJM    EFIX        RETURN 
 IFA      SPACE  4,15 
**        IFA - INITIALIZE FAST ATTACH FILE.
* 
*         ENTRY  (FN - FN+4) = FILE NAME. 
*                (FS - FS+4) = FST INFORMATION. 
* 
*         EXIT   (QA) = ORDINAL OF GLOBAL FNT ENTRY.
*                (T5) = EST ORDINAL.
*                (T6) = FIRST TRACK OF FAST ATTACH FILE.
*                (TY) = 0 IF FILE NAME FOUND IN FNT.
* 
*         ERROR  TO *ABT* IF FILE INTERLOCK NOT AVAILABLE.
* 
*         USES   CM - CM+7. 
* 
*         CALLS  CTE, SSF.
* 
*         MACROS ABORT, MONITOR, SFA. 
  
  
 IFA      SUBR               ENTRY/EXIT 
          LDD    FN+3 
          SCN    77          CLEAR MODE FIELD 
          STD    FN+3 
          RJM    SSF         SEARCH FOR *SYFT* TYPE FILE
          ZJN    IFA1        IF FILE NOT FOUND
          SFA    FNT
          STD    CM+4        SET ADDRESS OF FNT ENTRY 
          SHN    -14
          STD    CM+3 
          LDN    0           INTERLOCK FNT ENTRY
          STD    CM+1 
          MONITOR  UTEM 
          LDD    CM+1 
          ZJN    IFA2        IF FILE INTERLOCKED
          LDN    0
          STD    FA 
          ABORT  /MESS/ERIO  * SFM I/O SEQUENCE ERROR.* 
  
 IFA1     LDC    SYFT*100+1  SET INTERLOCK IN REQUEST 
          STD    FN+4 
          LDD    MA          MOVE FILE NAME 
          CWD    FN 
          CRD    CM+3 
          LDN    PFNT        CREATE FNT ENTRY 
          RJM    CTE
          ZJN    IFA3        IF FNT FULL
          LDD    CM+1        SET FNT ORDINAL
          STD    QA 
 IFA2     STD    TY          SET FNT CREATION STATUS
          LDC    FAFT*100    SET FILE TYPE
          STD    FN+4 
          LDD    FS          SET EQUIPMENT
          STD    T5 
          LDD    FS+1        SET FIRST TRACK
          STD    T6 
          LDN    0           CLEAR USER COUNTS
          STD    FS+2 
          STD    FS+3 
          STD    FS+4 
          LJM    IFAX        RETURN 
  
 IFA3     STD    FA          CLEAR LOCAL FNT OFFSET 
          ABORT  /MESS/ERFU  * SFM FNT FULL.* 
 IFC      SPACE  4
**        IFC - INCREMENT FAST ATTACH COUNT.
* 
*         EXIT   FAST ATTACH COUNT UPDATED IN MMF ENVIRONMENT TABLE.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CEA, ECS, RET. 
  
  
 IFC      SUBR               ENTRY/EXIT 
          RJM    RET         READ *FAET* WORD 
          LDD    MA          WRITE WORD BACK TO LINK DEVICE 
          CWD    CM 
          RJM    CEA         CONVERT EXTENDED MEMORY ADDRESS
          LDN    FAET 
          RAD    CM+4 
          SHN    -14
          ADC    WECS*1000   SET TO WRITE EXTENDED MEMORY 
          RAD    CM+3 
          LDN    1-1         SET TO WRITE 1 WORD
          RJM    ECS
          UJN    IFCX        RETURN 
 RET      SPACE  4
**        RET - READ ENVIRONMENT TABLE. 
* 
*         ENTRY  (RETA) = LINK DEVICE LABEL TRACK.
* 
*         EXIT   (FC) = *FAT* TABLE COUNT.
*                (CM - CM+4) = *FAET* WORD FROM ENVIRONMENT 
*                TABLE WITH COUNT INCREMENTED BY 1. 
*                (T6) = LINK DEVICE LABEL TRACK.
*                (T7) = ENVIRONMENT TABLE SECTOR. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CEA, ECS.
  
  
 RET      SUBR               ENTRY/EXIT 
          LDC    0           SET LABEL TRACK
 RETA     EQU    *-1
          STD    T6 
          LDN    ETLT        SET ENVIRONMENT TABLE SECTOR 
          STD    T7 
          RJM    CEA         CONVERT EXTENDED MEMORY ADDRESS
          LDN    FAET        READ *FAT* COUNT 
          RAD    CM+4 
          SHN    -14
          ADC    RECS*1000   SET TO READ EXTENDED MEMORY
          RAD    CM+3 
          LDN    1-1         SET TO READ 1 WORD 
          RJM    ECS         READ EXTENDED MEMORY 
          LDD    MA          READ ENTRY 
          CRD    CM 
          AOD    CM+4        INCREMENT COUNT
          STD    FC 
          UJN    RETX        RETURN 
 RFS      SPACE  4,15 
**        RFS - READ FILE SYSTEM SECTOR.
* 
*         ENTRY  (A) = 0 IF LOCAL FNT ENTRY NOT TO BE CLEARED.
*                (QA) = FNT ORDINAL.
*                (T5) = EST ORDINAL.
*                (T6) = FIRST TRACK.
*                (TY) = FNT CREATION STATUS.
* 
*         EXIT   (A) = 0 IF SYSTEM SECTOR READ WITHOUT ERROR. 
* 
*         USES   T3, CM - CM+4. 
* 
*         CALLS  CFE, RSS, RTI, WTI.
* 
*         MACROS ABORT, ENDMS, MONITOR, SETMS, SFA. 
  
  
 RFS3     LDD    T6          SET TRACK INTERLOCKED STATUS 
          STM    RTIA 
          LDD    T3 
          ZJN    RFS4        IF LOCAL FNT ENTRY NOT TO BE CLEARED 
          RJM    CFE         CLEAR LOCAL FNT ENTRY
*         LDN    0           READ SYSTEM SECTOR 
 RFS4     RJM    RSS
          ZJN    RFSX        IF NO ERRORS 
          ENDMS 
          RJM    RTI         RELEASE TRACK INTERLOCK
          AOM    SFMD 
  
 RFS      SUBR               ENTRY/EXIT 
          STD    T3 
          SETMS  IO,(DE,RW) 
          RJM    WTI         SET TRACK INTERLOCK
          ZJN    RFS3        IF INTERLOCK SET 
          LDD    TY 
          ZJN    RFS2        IF FNT ENTRY NOT CREATED 
          LDD    QA 
          STD    CM+1 
          LDN    PFNT        RELEASE FNT ENTRY
          STD    CM+2 
          MONITOR  MTRM 
 RFS1     ABORT  /MESS/ERDA  * SFM DIRECT ACCESS FILE ERROR.* 
  
 RFS2     LDC    SYFT*100    RESET FILE TYPE
          STD    FN+4 
          SFA    FNT,QA      RESTORE FNT ENTRY
          CWD    FN 
          UJN    RFS1        ABORT
 SFR      SPACE  4,10 
**        SFR - SET FLAG REGISTER INTERLOCK.
* 
*         ENTRY  (A) = INTERLOCK TO OBTAIN, (*DATI* OR *FATI*). 
* 
*         EXIT   (A) = (ABTB).
* 
*         ERROR  TO *ABT* IF ERROR FLAG SET.
* 
*         USES   CM - CM+4. 
* 
*         MACROS MONITOR, PAUSE.
  
  
 SFR2     STD    CM          CLEAR WAITING MESSAGE
          LDD    CP 
          ADN    MS2W 
          CWD    CM 
          AOM    ABTB        SET INTERLOCK OBTAINED 
  
 SFR      SUBR               ENTRY/EXIT 
          SHN    6
          STM    SFRA        SAVE SUBFUNCTION 
 SFR1     LDN    SFRS        SET FLAG REGISTER BITS 
          SHN    11 
          STD    CM+3 
          LDC    *           REQUEST FLAG REGISTER INTERLOCK
 SFRA     EQU    *-1
          STD    CM+1 
          MONITOR ECSM
          LDD    CM+1        CHECK INTERLOCK STATUS 
          ZJN    SFR2        IF INTERLOCK ACHIEVED
          LDD    CP          SET WAITING MESSAGE
          ADN    MS2W 
          CWM    SFRB,TR
          PAUSE 
          LDD    CM+1        CHECK ERROR FLAG 
          ZJN    SFR1        IF NOT ERROR FLAG SET
          ABORT  /MESS/ERAB  * SFM ABORTED.*
  
 SFRB     DATA   C*$WAITING - RECOVERY INTERLOCK.*
 SFS      SPACE  4
**        SFS - SEARCH *FAT* SECTOR.
* 
*         ENTRY  (FN - FN+3) = FAST ATTACH FILE NAME. 
*                (FS - FS+4) = FILE FST ENTRY.
*                (ES - ES+4) = FILE EST ENTRY.
*                (FI) = CURRENT *FAT* INDEX.
*                (BFMS - BFMS+502) = *FAT* SECTOR.
*                (FC) = *FAT* TABLE COUNT.
* 
*         EXIT   (A) .EQ. 0 IF MATCHING ENTRY FOUND.
*                (A) .LT. 0 IF END OF TABLE.
*                (BA) = BASE ADDRESS OF MATCHED ENTRY.
*                (FI) = BASE ADDRESS OF LAST HOLE ENCOUNTERED.
*                (HI) = *FAT* INDEX OF LAST HOLE. 
* 
*         USES   CM - CM+4. 
  
  
 SFS6     LDN    2           SET NO MATCH STATUS
 SFS7     SBN    1
  
 SFS      SUBR               ENTRY/EXIT 
          LDC    BFMS+2      SET BASE ADDRESS 
          STD    BA 
          UJN    SFS2 
  
 SFS0     LDD    FI          SET HOLE INFORMATION 
          STD    HI 
          LDD    BA 
          STM    SFTA 
 SFS1     LDK    FATL*5      INCREMENT BASE ADDRESS 
          RAD    BA 
          LMC    BFMS+2+100*5 CHECK FOR END OF SECTOR 
          ZJN    SFS6        IF END OF SECTOR 
 SFS2     AOD    FI          INCREMENT TABLE INDEX
          LPN    77 
          LMD    FC          CHECK FOR END OF TABLE 
          ZJN    SFS7        IF END OF TABLE
          LDI    BA          COMPARE FILE NAME
          ZJN    SFS0        IF HOLE
          LMD    FN 
          NJN    SFS1        IF NOT A MATCH 
          LDM    1,BA 
          LMD    FN+1 
          NJN    SFS1        IF NOT A MATCH 
          LDM    2,BA 
          LMD    FN+2 
          NJN    SFS1        IF NOT A MATCH 
          LDM    3,BA 
          LMD    FN+3 
          SCN    77 
          NJN    SFS1        IF NOT A MATCH 
  
          LDM    1*5+1,BA    CHECK FIRST TRACK
          LMD    FS+1 
          NJN    SFS1        IF NOT MATCHING FIRST TRACK
  
          LDD    ES+4 
          SHN    3
          ADN    PFGL 
          CRD    CM 
          LDM    MXMF*5+2*5+0,BA
          LMD    CM 
          NJN    SFS3        IF NOT MATCHING FAMILY 
          LDM    MXMF*5+2*5+1,BA
          LMD    CM+1 
          NJN    SFS3        IF NOT MATCHING FAMILY 
          LDM    MXMF*5+2*5+2,BA
          LMD    CM+2 
          NJN    SFS3        IF NOT MATCHING FAMILY 
          LDM    MXMF*5+2*5+3,BA
          LMD    CM+3 
          ZJN    SFS4        IF MATCHING DEVICE NUMBER
 SFS3     LJM    SFS1 
  
 SFS4     LJM    SFSX        MATCHING ENTRY FOUND 
 SFT      SPACE  4,20 
**        SFT - SEARCH *FAT* TABLE. 
* 
*         ENTRY  (DA - DA+1) = LINK DEVICE PARAMETERS.
* 
*         EXIT   (A) .EQ. 0, IF ENTRY NOT FOUND.
*                (FI) = *FAT* INDEX OF FILE/HOLE. 
*                (BA) = BASE ADDRESS OF FILE/HOLE.
*                (FC) = *FAT* COUNT.
* 
*         USES   T4 - T7. 
* 
*         CALLS  RDS, RET, SFS. 
* 
*         MACROS ENDMS, SETMS.
  
  
 SFT      SUBR               ENTRY/EXIT 
          LDD    DA          SET LINK DEVICE PARAMETERS 
          STD    T5 
          SETMS  IO 
          RJM    RET         READ ENVIRONMENT TABLE 
          LDD    DA+1 
          STD    T6 
          LDN    FAST        SET STARTING *FAT* SECTOR
          STD    T7 
          LCN    0           INITIALIZE *FAT* INDICIES
          STD    FI 
          ADN    1
          STD    HI 
 SFT1     LDC    BFMS        SET BUFFER ADDRESS 
          RJM    RDS         READ *FAT* SECTOR
          MJN    SFT4        IF READ ERROR
          RJM    SFS         SEARCH *FAT* SECTOR
          ZJN    SFT3        IF FILE FOUND
          MJN    SFT2        IF END OF TABLE FOUND
          AOD    T7          INCREMENT TO NEXT SECTOR 
          LMN    20          CHECK FOR END-OF-TABLE 
          NJN    SFT1        IF NOT END-OF-TABLE
  
 SFT2     SOM    SFTB        SET FILE NOT FOUND 
          LDD    HI          SET HOLE ADDRESS 
          STD    FI 
          LDC    0           BASE ADDRESS OF FILE/HOLE
 SFTA     EQU    *-1
          STD    BA 
 SFT3     ENDMS 
 SFTB     LDN    1           SET RETURN STATUS
*         LDN    0           SET IF FILE NOT FOUND
          LJM    SFTX        RETURN 
  
 SFT4     ABORT  /MESS/ERLE  * SFM UNRECOVERED LINK DEVICE ERROR.*
 SMP      SPACE  4
**        SMP - SET MULTI-MAINFRAME PARAMETERS. 
* 
*         ENTRY  (ES - ES+4) = FILE EQUIPMENT EST ENTRY.
*                (T5) = EST ORDINAL.
* 
*         EXIT   (DA) = EST ORDINAL OF LINK DEVICE. 
*                (DA+1) = *FAT* TRACK.
*                (MI) = MACHINE INDEX.
*                (FI) = MACHINE INDEX.
*                (ID) = MACHINE ID. 
*                (RETA) = LINK DEVICE LABEL TRACK.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  SMI. 
* 
*         MACROS SFA. 
  
  
 SMP      SUBR               ENTRY/EXIT 
          RJM    SMI         GET MACHINE INDEX FOR DEVICE 
          STD    MI 
          STD    FI 
          LDC    MMFL        SET *MMFL* PARAMETERS
          CRD    CM 
          LDD    CM          SET MACHINE ID 
          STD    ID 
          LDD    ES 
          SHN    21-4 
          MJN    SMPX        IF INDEPENDENT SHARED DEVICE 
          LDD    CM+1        SET LINK EQUIPMENT 
          LPC    777
          STD    DA 
          SFA    EST         SET *FAT* TRACK
          ADK    EQDE 
          CRD    CM 
          ADK    EQAE-EQDE
          CRD    CN 
          LDD    CN+2        SET LINK DEVICE SHIFT COUNT
          SHN    -6 
          LPN    3
          RAM    EFIB 
          LDD    CM+4 
          SHN    3
          ADN    ALGL 
          CRD    CM 
          LDD    CM+4 
          STD    DA+1 
          LDD    CM+1        SET LABEL TRACK
          STM    RETA 
          UJP    SMPX        RETURN 
 SSF      SPACE  4
**        SSF - SEARCH FOR *SYFT* FILE. 
* 
*         ENTRY  (FN - FN+4) = FILE NAME. 
* 
*         EXIT   (A) = (QA) = FNT ORDINAL IF FILE FOUND.
*                    = 0 IF FILE NOT FOUND
* 
*         USES   CN - CN+4. 
* 
*         MACROS SFA. 
  
  
 SSF2     STD    QA          SET FILE NOT FOUND 
  
 SSF      SUBR               ENTRY/EXIT 
          LDN    0
          STD    QA 
 SSF1     AOD    QA          ADVANCE FNT ORDINAL
          LMD    TE 
          ZJN    SSF2        IF END OF FNT
          SFA    FNT,QA      READ FNT ENTRY 
          CRD    CN 
          LDD    CN+4        CHECK FILE TYPE
          SHN    -6 
          LMN    SYFT 
          NJN    SSF1        IF NOT *SYFT* FILE 
          LDD    CN          COMPARE FILE NAME
          ZJN    SSF1        IF EMPTY ENTRY 
          LMD    FN 
          NJN    SSF1        IF NOT MATCHING NAME 
          LDD    CN+1 
          LMD    FN+1 
          NJN    SSF1        IF NOT MATCHING NAME 
          LDD    CN+2 
          LMD    FN+2 
          NJN    SSF1        IF NOT MATCHING NAME 
          LDD    CN+3 
          LMD    FN+3 
          SCN    77 
          NJN    SSF1        IF NOT MATCHING NAME 
          LDD    QA 
          UJN    SSFX        EXIT 
 UFI      SPACE  4
**        UFI - UPDATE *FAT* ITEM.
* 
*         ENTRY  (ID) = MACHINE ID. 
*                (MI) = MACHINE INDEX.
*                (FI) = INDEX OF ENTRY. 
* 
*         EXIT   *FAT* ITEM UPDATED AND WRITTEN BACK TO LINK DEVICE.
* 
*         USES   CM - CM+4, T6, T7. 
* 
*         CALLS  CEA, CFI, ECS, SFR.
  
  
 UFI      SUBR               ENTRY/EXIT 
          LDN    FATI        SET *FATI* INTERLOCK 
          RJM    SFR
          LDN    ZERL        SET ENTRY TO WRITE 
          CRD    CM 
 UFIA     LDD    ID          SET MACHINE ID 
*         LDN    0           IF CLEAR ENTRY 
          STD    CM 
          LDD    MI 
          ADN    1
          RJM    WFW         WRITE LOCAL MACHINE WORD 
          LDM    UFIA 
          LMC    LDNI+0 
          NJN    UFI1        IF NOT CLEARING ENTRY
          LDN    ZERL        CLEAR ATTACH MODES IN GLOBAL ENTRY 
          CRD    CM 
          LDD    FS+1        PRESERVE FIRST TRACK 
          STD    CM+1 
          LDN    1
          RJM    WFW         WRITE *FAT* WORD 
 UFI1     LDN    FATI        CLEAR *FATI* INTERLOCK 
          RJM    CFI
          LJM    UFIX        RETURN 
 VLF      SPACE  4,15 
**        VLF - VERIFY LOCAL FILE.
* 
*         EXIT   (A) = 0, IF FAST ATTACH ENTRY FOUND. 
*                (T1) = FNT INDEX FOR FAST ATTACH FILE. 
*                (T5) = EQUIPMENT.
*                (FN - FN+4) = FNT ENTRY. 
* 
*         ERROR  TO *ABT* IF LOCAL FILE NOT FOUND.
*                TO *ABT* IF LOCAL FILE NOT TYPE *PMFT*.
* 
*         USES   CM - CM+4, CN - CN+4.
* 
*         CALLS  CFS, FAT, SAF. 
* 
*         MACROS NFA. 
  
  
 VLF      SUBR               ENTRY/EXIT 
          RJM    SAF         SEARCH FOR ASSIGNED FILE 
          ZJN    VLF1        IF FILE NOT FOUND
          RJM    CFS         CHECK FILE STATUS
          NFA    FA,R        READ FNT ENTRY 
          CRD    FN 
          LDD    CM+4        CHECK FILE TYPE
          SHN    -6 
          LMN    PMFT 
          ZJN    VLF2        IF DIRECT ACCESS FILE
          LDN    /MESS/ERFT-/MESS/ERFF  * SFM INCORRECT FILE TYPE.* 
 VLF1     ADC    /MESS/ERFF  * SFM FILE NOT FOUND.* 
          LJM    ABT         PROCESS ERROR
  
*         SEARCH FOR EXISTING FAST ATTACH FILE. 
  
 VLF2     LDD    ES+4        GET DEVICE NAME FROM MST 
          SHN    3
          ADN    PFGL 
          CRD    CN 
          RJM    FAT         SEARCH FOR FAST ATTACH FILE
          STD    T0          SAVE RESPONSE
          LDD    FS          RESTORE EQUIPMENT
          STD    T5 
          LDD    T0          (A) = RESPONSE FROM *COMPFAT*. 
          UJN    VLFX        RETURN 
 WFS      SPACE  4,15 
**        WFS - WRITE FILE SYSTEM SECTOR. 
* 
*         ENTRY  (T5) = EST ORDINAL.
*                (T6) = FIRST TRACK.
*                TRACK INTERLOCK SET. 
* 
*         EXIT   TRACK INTERLOCK CLEARED. 
* 
*         CALLS  RTI, WSS.
* 
*         MACROS ENDMS. 
  
  
 WFS      SUBR               ENTRY/EXIT 
          RJM    WSS         WRITE SYSTEM SECTOR
          ENDMS 
          RJM    RTI         RELEASE TRACK INTERLOCK
          UJN    WFSX        RETURN 
 WFW      SPACE  4,10 
**        WFW - WRITE *FAT* WORD. 
* 
*         ENTRY  (A) = OFFSET IN *FAT* OF WORD TO WRITE.
*                (FI) = *FAT* INDEX OF ENTRY. 
*                (CM - CM+4) = WORD TO WRITE. 
* 
*         USES   T1, T6, T7, CM - CM+4. 
* 
*         CALLS  CEA, ECS.
  
  
 WFW      SUBR               ENTRY/EXIT 
          STM    WFWA        SAVE OFFSET OF WORD TO WRITE 
          LDD    MA          STORE WORD TO WRITE
          CWD    CM 
          LDD    DA+1        SET *FAT* TRACK
          STD    T6 
          LDN    FAST        SET FIRST *FAT* SECTOR 
          STD    T7 
          RJM    CEA         CONVERT EXTENDED MEMORY ADDRESS
          LDD    FI 
          SHN    FATS 
          ADC    *           ADD OFFSET OF WORD TO WRITE
 WFWA     EQU    *-1
          RAD    CM+4 
          SHN    -14
          ADC    WECS*1000   SET TO WRITE EXTENDED MEMORY 
          RAD    CM+3 
          LDK    1*100-100   SET TO WRITE 1 WORD
          RJM    ECS         WRITE EXTENDED MEMORY
          UJN    WFWX        RETURN 
          SPACE  4,10 
**        COMMON DECKS. 
  
  
*CALL     COMPCEA 
*CALL     COMPCTE 
*CALL     COMPFAT 
*CALL     COMPSMI 
          SPACE  4
          ERRNG  BFMS-*      CODE OVERLAPS SECTOR BUFFER
          OVERFLOW  OVLA,EPFW 
          OVERLAY (RETURN SYSTEM DATA PROCESSORS.)
          SPACE  4,10 
*CALL     COMSEVT 
*CALL     COMSMTR 
*CALL     COMSPDT 
*CALL     COMSMLS 
 SUB$     EQU    1           ASSEMBLE *SUBSYST* MACRO CALLS 
*CALL     COMSSSD 
          SPACE  4,10 
**        ASSEMBLY CONSTANTS. 
  
  
 TJCBL    EQU    JCBE*MXJC-JCBE  LENGTH OF *JCB* TABLE
          TITLE  SECURITY FUNCTIONS.
 GEAF     SPACE  4,10 
***       FUNCTION *GEAF* - GET EQUIPMENT ACCESS LEVEL LIMITS.
* 
*         ENTRY.
* 
*T,ADDR   48/ ,12/ EO 
* 
*         EO     EST ORDINAL. 
* 
*         EXIT. 
* 
*T,ADDR   36/ ,12/ ALL ,12/ EO
* 
*         ALL    ACCESS LEVEL LIMITS. 
*         EO     EST ORDINAL. 
  
  
 GEA3     ABORT  /MESS/ERIR  * SFM INCORRECT REQUEST.*
  
 GEA4     ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
  
 GEA      ENTRY              ENTRY
          RJM    CSS
          MJN    GEA3        IF NO SUBSYSTEM OR SSJ= ENTRY POINT
          RJM    GFE         GET REPLY WORD 
          CRD    CN 
          LDN    ESTP        CHECK IF ORDINAL WITHIN EST
          CRD    CM 
          LDD    CN+4 
          SBD    CM+2 
          PJN    GEA4        IF NOT WITHIN EST
          SFA    EST,CN+4    READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          ADK    EQAE-EQDE   READ ACCESS LEVELS 
          CRD    T1 
          LDD    CM 
          SHN    21-13
          PJN    GEA1        IF NOT MASS STORAGE
          LDD    CM+4 
          SHN    3
          ADK    PFGL 
          CRD    CM 
          LDD    CM+4 
          SHN    -6 
          UJN    GEA2        SET ACCESS LEVEL 
  
 GEA1     LDD    T1+3        SET ACCESS LEVEL IN REPLY WORD 
          LPN    77 
 GEA2     STD    CN+3 
          RJM    GFE         WRITE REPLY WORD 
          CWD    CN 
          LJM    DPP         DROP PP
 GSMF     SPACE  4,15 
***       FUNCTION *GSMF* - GET SYSTEM SECURITY MODE. 
* 
*         RETURNS A NONZERO VALUE IF THE SYSTEM IS RUNNING IN 
*         A SECURED MODE. 
* 
*         EXIT. 
* 
*T ADDR   48/0, 12/ SM
* 
*         SM = 0 IF SYSTEM IN UNSECURED MODE. 
*         SM = 1 IF SYSTEM IN SECURED MODE. 
  
  
 GSM      ENTRY              ENTRY
          LDN    SSML        GET SYSTEM SECURITY MODE 
          CRD    CM 
          LDN    ZERL 
          CRD    CN 
          LDD    CM 
          LPN    7
          ZJN    GSM1        IF SYSTEM UNSECURED
          AOD    CN+4 
 GSM1     RJM    GFE         WRITE REPLY WORD 
          CWD    CN 
          LJM    DPP         DROP PP
 GSSF     SPACE  4,15 
***       FUNCTION *GSSF* - GET ORIGIN TYPE ACCESS LEVELS.
* 
*         RETURNS SECURITY MODE, OUTPUT QUEUE SPECIAL HANDLING
*         LEVEL, AND ORIGIN TYPE SECURITY ACCESS LIMITS.
* 
*         EXIT. 
* 
*T,ADDR   3/ ,3/ OQSH ,3/ ,3/ SM ,12/ SY ,12/ BC ,12/ RB ,12/ IA
* 
*         OQSH = OUTPUT QUEUE SPECIAL HANDLING LEVEL. 
*         SM = SECURITY MODE. 
*         SY = 3/ , 3/SYOT LOWER LIMIT, 3/ , 3/SYOT UPPER LIMIT.
*         BC = 3/ , 3/BCOT LOWER LIMIT, 3/ , 3/BCOT UPPER LIMIT.
*         RB = 3/ , 3/RBOT LOWER LIMIT, 3/ , 3/RBOT UPPER LIMIT.
*         IA = 3/ , 3/IAOT LOWER LIMIT, 3/ , 3/IAOT UPPER LIMIT.
  
  
 GSS      ENTRY              ENTRY
          RJM    CSS
          MJN    GSS2        IF NO SUBSYSTEM OR SSJ= ENTRY POINT
          LDN    SSML        GET SECURITY MODE AND OQSH 
          CRD    CN 
          LDN    IAOT        PRESET LOOP CONTROL
          STD    T1 
 GSS1     LDN    0           GET NEXT SERVICE CONTROL WORD
          SFA    JCB
          ADD    T1 
          CRD    CM 
          LDD    CM+1        SET ACCESS LIMITS IN REPLY WORD
          LPN    7
          STD    CM+2 
          LDD    CM+1 
          LPN    70 
          SHN    3
          ADD    CM+2 
          STM    CN+1,T1
          SOD    T1 
          PJN    GSS1        IF MORE LIMITS TO OBTAIN 
          RJM    GFE         RETURN REPLY WORD
          CWD    CN 
          LJM    DPP         DROP PP
  
 GSS2     ABORT  /MESS/ERIR  * SFM INCORRECT REQUEST.*
 CSS      SPACE  4,10 
**        CSS - CHECK FOR SSJ= ENTRY POINT OR SUBSYSTEM ID. 
* 
*         EXIT   (A) .GE. 0 IF EITHER FOUND.
* 
*         USES   CM - CM+4, CN - CN+4.
  
  
 CSS      SUBR               ENTRY/EXIT 
          LDD    CP          CHECK FOR SSJ= ENTRY POINT 
          ADK    JCIW 
          CRD    CM 
          ADK    SEPW-JCIW
          CRD    CN 
          LDD    CN 
          LPN    4
          NJN    CSSX        IF SSJ= ENTRY POINT FOUND
          LDD    CM+2        CHECK FOR SUBSYSTEM ID 
          ADC    -LSSI
          UJN    CSSX        RETURN 
          TITLE  MAIN ROUTINE.
 RSD      SPACE  4,10 
***       FUNCTION *RSDF* - RETURN SYSTEM DATA. 
  
  
  
 RSD      ENTRY              ENTRY
 RSD0     LDD    IR+3        CHECK CONTROL WORD ADDRESS 
          SHN    14 
          ADD    IR+4 
          SHN    -6 
          SBD    FL 
          PJN    RSD2        IF NEXT CONTROL WORD  NOT IN BOUNDS
          RJM    GFE         READ CONTROL WORD
          CRD    ES 
          LDD    ES          CHECK SUBFUNCTION
          NJN    RSD1        IF NOT END OF REQUESTS 
          LJM    DPP         DROP PPU 
  
 RSD1     SBN    MXSF 
          MJN    RSD3        IF VALID SUBFUNCTION 
 RSD2     ABORT  /MESS/ERIR  * SFM INCORRECT REQUEST.*
  
 RSD3     LDD    ES+3        CHECK RETURN ADDRESS 
          LPN    77 
          STD    ES+3 
          SHN    14 
          LMD    ES+4 
          MJN    RSD4        IF INCORRECT ADDRESS 
          ADD    ES+2 
          SHN    -6 
          SBD    FL 
          MJN    RSD5        IF WITHIN FL 
 RSD4     ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 RSD5     LDM    TRSD,ES     SET PROCESSING ADDRESS 
          STM    RSDA 
          RJM    *
 RSDA     EQU    *-1
  
*         EXIT TO SUBFUNCTION PROCESSORS WITH - 
*                (ES - ES+4) = CONTROL WORD.
* 
*         RETURN FROM SUBFUNCTION PROCESSORS WITH - 
*                (ES - ES+4) = CONTROL WORD.
*                (FC) = WORD COUNT. 
  
 RSD6     LDC    4000        SET DATA NOT AVAILABLE 
          RAD    ES 
          LDN    0           RETURN ZERO WORDS RETURNED 
          STD    FC 
 RSD7     LDD    FC          SET NUMBER OF WORDS RETURNED 
          STD    ES+2 
          RJM    GFE         RETURN CONTROL WORD
          CWD    ES 
          AOD    IR+4        INCREMENT ADDRESS TO NEXT CONTROL WORD 
          SHN    -14
          RAD    IR+3 
          LJM    RSD0        PROCESS NEXT CONTROL WORD
 TRSD     SPACE 4,10
*         TRSD -  TABLE OF SUBFUNCTION PROCESSORS.
  
  
 TRSD     INDEX 
          INDEX  RDDF,RDD 
          INDEX  SDIF,SDI 
          INDEX  PDAF,PDA 
          INDEX  PDLF,PDL 
          INDEX  RFDF,RFD 
          INDEX  RSSF,RSS 
          INDEX  RSCF,RSC 
          INDEX  RCIF,RCI 
          INDEX  IOSF,IOS 
          INDEX  MXSF 
          TITLE  SUBFUNCTION PROCESSORS.
 IOS      SPACE  4,20 
**        IOS - RETURN BUFFER I/O STATISTICS. 
* 
*T,FA     12/*IOSF*, 12/ , 12/ WC, 6/ , 18/ ADDR
* 
*         WC     LENGTH OF BUFFER TO RECEIVE DATA 
*                (*SFM* WILL RETURN NUMBER OF WORDS WRITTEN)
* 
*         ADDR   FWA OF CM BUFFER 
* 
*T,ADDR   12/ DT, 18/ ESTO, 30/ 
*T        30/ RCNT0, 30/ WCNT0
*T,       30/ RCNT1, 30/ WCNT1
*T,       30/ RCNT2, 30/ WCNT2
*T,       30/ RCNT3, 30/ WCNT3
*T,       30/ RCNT4, 30/ WCNT4
*T,       30/ RCNT5, 30/ WCNT5
*T,       30/ RCNT6, 30/ WCNT6
*T,       30/ RCNT7, 30/ WCNT7
* 
*         DT = DEVICE TYPE
*         ESTO = EST ORDINAL IN DISPLAY CODE
* 
* 
*         ----------------------------------------------------------- 
*         I   FIELD      I          LENGTH OF READ TRANSFER IN-     I 
*         I              I         *CBT*S               SECTORS     I 
*         ----------------------------------------------------------- 
*         I              I                     I                    I 
*         I   RCNT0      I           1         I       1 - 40B      I 
*         I   RCNT1      I         2 - 3       I     41B - 140B     I 
*         I   RCNT2      I         4 - 7       I    141B - 340B     I 
*         I   RCNT3      I       10B - 17B     I    341B - 740B     I 
*         I   RCNT4      I       20B - 37B     I    741B - 1740B    I 
*         I   RCNT5      I       40B - 77B     I   1741B - 3740B    I 
*         I   RCNT6      I      100B - 177B    I   3741B - 7740B    I 
*         I   RCNT7      I     MORE THAN 177B  I   MORE THAN 7740B  I 
*         I              I                     I                    I 
*         ----------------------------------------------------------- 
* 
* 
*         ----------------------------------------------------------- 
*         I   FIELD      I      LENGTH OF WRITE TRANSFER IN-        I 
*         I              I         *CBT*S               SECTORS     I 
*         ----------------------------------------------------------- 
*         I              I                     I                    I 
*         I   WCNT0      I           1         I       1 - 40B      I 
*         I   WCNT1      I         2 - 3       I     41B - 140B     I 
*         I   WCNT2      I         4 - 7       I    141B - 340B     I 
*         I   WCNT3      I       10B - 17B     I    341B - 740B     I 
*         I   WCNT4      I       20B - 37B     I    741B - 1740B    I 
*         I   WCNT5      I       40B - 77B     I   1741B - 3740B    I 
*         I   WCNT6      I      100B - 177B    I   3741B - 7740B    I 
*         I   WCNT7      I     MORE THAN 177B  I   MORE THAN 7740B  I 
*         I              I                     I                    I 
*         ----------------------------------------------------------- 
  
  
 IOS      SUBR               ENTRY/EXIT 
          RJM    LPT         LOCK *PROBE* TABLE 
          ZJN    IOS2        IF *PROBE* TABLE LOCKED
 IOS1     LJM    RSD6        IF DATA NOT AVAILABLE
  
 IOS2     STD    FC          INITIALIZE WORD COUNT
          LDN    1           INITIALIZE PUT/IOST INDEX
          STD    T3 
          LDK    BIOL        READ BUFFER TABLE POINTER
          CRD    CM 
          LDD    CM+1        READ *PUT* TABLE POINTER 
          SHN    14 
          ADD    CM+2 
          NJN    IOS2.1      IF BUFFERED I/O TABLES PRESENT 
          LDC    4000        CLEAR PROBE INTERLOCK
          STD    FN 
          LDC    PRBP 
          CWD    FN 
          UJN    IOS1        RETURN WITH NO DATA
  
 IOS2.1   ADK    PUTP 
          CRD    FS 
          ADK    IOSP-PUTP   READ FWA OF I/O STATISTICS TABLE 
          CRD    FN 
          LDD    FS+3        CLEAR FLAGS
          LPN    77 
          STD    FS+3 
          LDD    FN+1        SET LENGTH OF *IOST* ENTRY 
          SHN    -6 
          STD    T2 
          ADN    1           SET LENGTH OF *PROBE* ENTRY
          STD    T1 
 IOS3     LDD    T3          READ EST ORDINAL FROM PUT
          SHN    PUTLS
          ADK    UNCT 
          ADD    FS+4 
          SHN    6
          ADD    FS+3 
          SHN    14 
          CRD    CM 
          LDD    CM+1        CONVERT EST ORDINAL TO DISPLAY CODE
          LPC    707
          ADC    2R00 
          SHN    6
          STM    IOSA+2 
          SHN    -6 
          SCN    77 
          STM    IOSA+1 
          LDD    CM+1 
          SHN    -3 
          LPN    7
          ADN    1R0
          RAM    IOSA+1 
          SFA    EST,CM+1    READ DEVICE EST
          CRD    CM 
          LDD    CM+3        SET DEVICE TYPE
          STM    IOSA 
          LDD    T3          READ I/O STATISTICS TABLE
          SHN    PUTLS
          ADD    FN+4 
          SHN    6
          ADD    FN+3 
          SHN    14 
          CRM    IOSB,T2
          LDD    ES+2        CHECK IF ROOM IN BUFFER
          SBD    FC 
          SBD    T1 
          PJN    IOS4        IF ROOM FOR DATA 
          LDC    PRBP        CLEAR PROBE INTERLOCK
          CRD    FN 
          LDC    4000 
          STD    FN 
          LDC    PRBP 
          CWD    FN 
          ABORT  /MESS/ERAE  *SFM ARGUMENT ERROR.*
  
 IOS4     LDD    ES+3        RETURN DATA TO CALLER
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          ADD    FC 
          CWM    IOSA,T1
          LDD    T1          UPDATE WORD COUNT
          RAD    FC 
          AOD    T3          INCREMENT INDEX
          LDD    FS 
          SBD    T3 
          MJN    IOS5        IF NO MORE *PUT*S
          LJM    IOS3        PROCESS NEXT *PUT* 
  
 IOS5     LDC    PRBP        CLEAR PROBE INTERLOCK
          CRD    FN 
          LDC    4000 
          STD    FN 
          LDC    PRBP 
          CWD    FN 
          LJM    RSD7        RETURN 
 RDD      SPACE  4,10 
**        RDD - RETURN DAYFILE DATA FROM SECTOR OF LOCAL AREAS. 
* 
*T,FA     12/*RDDF* ,12/ EQ ,12/ WC ,6/ ,18/ADDR
* 
*         EQ     EST ORDINAL TO CHECK FOR DAYFILES
*         WC     LENGTH OF CM BUFFER TO RECEIVE DATA
*                (*SFM* WILL RETURN NUMBER OF WORDS WRITTEN)
*         ADDR   FWA OF CM BUFFER 
* 
* 
*T,ADDR   12/ SDF ,12/ ADF ,12/ELD ,12/ BML ,12/
* 
*         SDF    FIRST TRACK OF SYSTEM DAYFILE
*         ADF    FIRST TRACK OF ACCOUNT DAYFILE 
*         ELD    FIRST TRACK OF ERRLOG
*         BML    FIRST TRACK OF BINARY MAINTENCE LOG
* 
*         IF A DAYFILE DOES NOT EXIST ON A DEVICE, THE FIRST TRACK
*         WILL BE SET TO ZERO.
  
  
 RDD      SUBR               ENTRY
          LDN    ESTP        GET EST POINTERS 
          CRD    CN 
          LDD    ES+1        SET EQUIPMENT
          STD    T5 
          SBD    CN+2 
          PJN    RDD1        IF EQUIPMENT OUT OF EST
          SFA    EST,T5      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM          CHECK EQUIPMENT TYPE 
          SHN    21-13
          MJN    RDD2        IF MASS STORAGE
 RDD1     ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 RDD2     LDN    ZERL 
          CRD    CN 
          RJM    RLA         READ SECTOR OF LOCAL AREAS (SLA) 
          MJN    RDD3        IF READ ERROR
          ZJN    RDD3        IF NO SLA ENTRY FOR THIS MACHINE 
          STM    RDDA 
 RDD3     LDD    ES+3        STORE DAYFILE DATA 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          CWM    CN,ON
 RDDA     EQU    *-1
          LDN    1
          STD    FC 
          LJM    RSD7        RETURN 
 SDIF     SPACE  4,20 
***       SDI - RETURN AND/OR CLEAR STATISTICAL DATA AREA.
* 
*         THE STATISTICAL DATA AREA IS RETURNED TO THE
*         SPECIFIED BUFFER. 
* 
*T,FA     12/ *SDIF* ,12/ FLAGS ,12/ WC ,6/ ,18/ ADDR 
* 
*         FLAGS  1, RETURN DATA TO CM BUFFER
*                2, CLEAR STATISTICAL DATA AREA IN CMR
*                3, RETURN DATA TO CM BUFFER AND THEN CLEAR 
*                   THE STATISTICAL DATA AREA IN CMR
*         WC     LENGTH OF CM BUFFER
*                (*SFM* WILL RETURN NUMBER OF WORDS WRITTEN)
*         ADDR   FWA OF CM BUFFER 
  
  
 SDI      SUBR               ENTRY
          LDN    0           PRESET NUMBER OF WORDS TO WRITE
          STD    FC 
          LDD    ES+1 
          SHN    21-0 
          PJN    SDI2        IF DATA NOT TO BE RETURNED 
          LDN    SDAL        SET NUMBER OF WORDS TO RETURN
          STD    FC 
          LDD    ES+2        CHECK BUFFER SIZE
          SBD    FC 
          PJN    SDI1        IF BUFFER LARGE ENOUGH 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 SDI1     LDC    SDAP        READ STATISTICAL AREA POINTER
          CRD    CM 
          LDD    CM 
          STM    SDIA+3 
          SHN    14 
          ADD    CM+1 
          STM    SDIA+4 
          CRM    BFMS,FC
          LDD    ES+3        WRITE STATISTICAL DATA TO BUFFER 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          CWM    BFMS,FC
 SDI2     LDD    ES+1 
          SHN    21-1 
          PJN    SDI3        IF STATISTICAL DATA AREA NOT TO BE CLEARED 
          LDN    ZERL        CLEAR STATISTICAL DATA AREA
          CRD    CM 
          LDD    MA 
          CWM    SDIA,ON
          CWD    CM 
          MONITOR CSTM
 SDI3     LJM    RSD7        RETURN 
  
  
 SDIA     VFD    36/SDAL,24/0 
 PDLF     SPACE  4,10 
***       PDLF - RETURN *PROBE* DATA TABLE LENGTH.
* 
*         THE MINIMUM BUFFER SIZE REQUIRED FOR THE *PROBE* DATA TABLES
*         IS RETURNED TO THE CALLER.
* 
*T,FA     12/ *PDLF* ,12/ ,12/ WC ,6/ 18/ ADDR
* 
*         WC     LENGTH OF CM BUFFER
*                (*SFM* WILL RETURN NUMBER OF WORDS WRITTEN)
*         ADDR   FWA OF CM BUFFER 
* 
* 
*T,ADDR   60/ REQUIRED BUFFER SIZE FOR *PROBE* DATA 
  
  
 PDL      SUBR               ENTRY
          LDN    1           SET WORD COUNT 
          STD    FC 
          LDD    ES+2        CHECK BUFFER SIZE
          SBD    FC 
          PJN    PDL1        IF BUFFER LARGE ENOUGH 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 PDL1     RJM    LPT         LOCK *PROBE* TABLE 
          ZJN    PDL2        IF *PROBE* TABLE LOCKED
          LJM    RSD6        RETURN DATA NOT AVAILABLE STATUS 
  
 PDL2     LDN    ZERL 
          CRD    CM 
          RJM    DPT         DETERMINE *PROBE* TABLE LENGTH 
          STD    CM+4 
          SHN    -14
          STD    CM+3 
          LDD    ES+3        RETURN TABLE LENGTH TO CM BUFFER 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          CWD    CM 
          LDC    PRBP        UNLOCK *PROBE* TABLE 
          CWD    FN 
          LJM    RSD7        RETURN 
 PDAF     SPACE  4,20 
**        PDAF - RETURN/CLEAR *PROBE* DATA TABLES.
* 
*T,FA     12/ *PDAF* ,12/ FLAGS ,12/ WC ,6/ ,18/ ADDR 
* 
*         FLAGS  1, RETURN DATA TO CM BUFFER
*                2, CLEAR *PROBE* DATA AREA IN CMR
*                3, RETURN DATA TO CM BUFFER AND THEN CLEAR 
*                   THE *PROBE* DATA AREA IN CMR
*         WC     LENGTH OF CM BUFFER
*                (*SFM* WILL RETURN NUMBER OF WORDS WRITTEN)
*         ADDR   FWA OF CM BUFFER 
  
  
 PDA      SUBR               ENTRY
          LDN    0
          STD    FC 
          RJM    LPT         LOCK *PROBE* TABLE 
          ZJN    PDA2        IF *PROBE* TABLE LOCKED
          LJM    RSD6        RETURN DATA NOT AVAILABLE STATUS 
  
 PDA1     LJM    PDA6        CLEAR *PROBE* DATA TABLES
  
 PDA2     LDD    ES+1 
          SHN    21-0 
          PJN    PDA1        IF *PROBE* DATA NOT TO BE RETURNED 
          RJM    DPT         DETERMINE *PROBE* TABLE LENGTH 
          STD    FC          SET WORD COUNT 
          SBD    ES+2 
          ZJN    PDA3        IF BUFFER LARGE ENOUGH 
          MJN    PDA3        IF BUFFER LARGE ENOUGH 
          LDC    PRBP        UNLOCK *PROBE* TABLE 
          CWD    FN 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 PDA3     LDC    TPRDL
          STD    T1 
          LDN    0           INITIALIZE TABLE INDEX 
          STD    T2 
          LDK    PDTL        READ PACKED DATE AND TIME
          CRD    CN 
          UJN    PDA5        WRITE PACKED DATE AND TIME TO BUFFER 
  
 PDA4     LDD    FN+3        READ NEXT WORD TO TRANSFER 
          SHN    14 
          LMD    FN+4 
          ADD    T2 
          CRD    CN 
          AOD    T2          INCREMENT TABLE INDEX
 PDA5     LDD    ES+3        WRITE WORD TO BUFFER 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          ADD    T2 
          CWD    CN 
          SOD    T1 
          PJN    PDA4        IF DATA LEFT TO TRANSFER 
          RJM    RPC         RETURN *PLD* COUNTS
 PDA6     LDD    ES+1 
          SHN    21-1 
          PJN    PDA7        IF TABLE NOT TO BE CLEARED 
          LDC    PRBP        READ *PROBE* TABLE POINTER 
          CRD    CM 
          LDD    CM+1        CLEAR FUNCTION CODE
          LPN    77 
          STD    CM+1 
          MONITOR  CSTM 
          LDK    PDTL        READ PACKED DATE AND TIME
          CRD    CN 
          LDD    FN+3 
          SHN    14 
          LMD    FN+4 
          CWD    CN 
          RJM    CBS         CLEAR BUFFERED I/O STATISTICS
 PDA7     LDC    PRBP        UNLOCK *PROBE* TABLE 
          CWD    FN 
          LJM    RSD7        RETURN 
 CBS      SPACE  4,10 
**        CBS - CLEAR BUFFERED I/O STATISTICS.
* 
*         USES   T1, CM - CM+4, CN - CN+4, FS - FS+4. 
  
  
 CBS      SUBR
          LDK    BIOL        FETCH BUFFERED I/O CONTROL TABLE ADDRESS 
          CRD    FS 
          LDD    FS+1 
          SHN    14 
          LMD    FS+2 
          ZJN    CBSX        IF NO BUFFERED I/O DEVICES DEFINED 
          CRD    CN          READ POINTER WORD
          ERRNZ  IBSP        *IBSP* MUST BE ZERO
  
*         BUILD A BLOCK OF ZEROES FOR CLEARING MEMORY.
  
          LDN    10*5 
          STD    T1 
 CBS1     LDN    0
          STM    BFMS,T1
          SOD    T1 
          PJN    CBS1        IF MORE TO CLEAR 
  
*         CLEAR STATISTICS WORDS. 
  
          LDN    IBSL        SET LENGTH OF STATISTICS AREA
          STD    T1 
          LDD    CN+3 
          SHN    14 
          LMD    CN+4 
          CWM    BFMS,T1     CLEAR STATISTICS BLOCK 
  
*         CLEAR CHANNEL TABLE REQUEST COUNTERS. 
  
          LDN    0           PRESET FOR *UTEM* FUNCTION 
          STD    CM+2 
          LDD    FS+1        READ CHANNEL TABLE POINTER WORD
          SHN    14 
          LMD    FS+2 
          ADN    CCTP 
          CRD    CN 
          SOD    CN 
 CBS2     SHN    CCTLS
          ADN    CCNT 
          ADD    CN+4 
          SHN    6
          ADD    CN+3 
          SHN    14 
          STD    CM+4        SET ADDRESS FOR *UTEM* 
          SHN    -14
          STD    CM+3 
          LDN    1
          STD    CM+1        NUMBER OF UPDATES TO PROCESS 
          LDD    MA 
          CWM    CBSA,ON     WRITE *UTEM* PARAMETERS
          MONITOR  UTEM      CLEAR REQUEST COUNTER
          SOD    CN 
          PJN    CBS2        IF MORE CHANNEL TABLES TO PROCESS
  
*         CLEAR *PUT* STATISTICS AREAS. 
  
          LDN    INST-RDST+1
          STD    T1          SET LENGTH OF STATISTICS AREA
          LDD    FS+1 
          SHN    14 
          LMD    FS+2 
          ADN    PUTP 
          CRD    CN          READ *PUT* POINTER 
          LDD    CN+3        CLEAR FLAGS
          LPN    77 
          STD    CN+3 
          LDD    CN 
 CBS3     SHN    PUTLS
          ADN    RDST 
          ADD    CN+4 
          SHN    6
          ADD    CN+3 
          SHN    14 
          CWM    BFMS,T1     CLEAR STATISTICS AREA
          SOD    CN 
          PJN    CBS3        IF MORE *PUT*S TO CLEAR
          LJM    CBSX        RETURN 
  
 CBSA     VFD    6/0,6/36D,6/0,42/0  *UTEM* PARAMETERS
 RFDF     SPACE  4,20 
**        RFDF - RETURN FAMILY ORDINAL TABLE FROM LOW CORE. 
* 
*T,FA     12/*RFDF* ,12/LENGTH ,12/ WC ,6/ ,18/ADDR 
* 
*         WC     LENGTH OF CM BUFFER
*                (*SFM* WILL RETURN NUMBER OF WORDS WRITTEN. THIS WILL
*                BE THE NUMBER OF FOT ORDINALS CURRENTLY RESERVED.) 
*         LENGTH  ZERO ON CALL. *SFM* WILL RETURN THE MAXIMUM NUMBER
*                OF FOT ORDINALS THAT MAY USED. 
*         ADDR   FWA OF CM BUFFER 
* 
* 
*T,ADDR   42/*FAMILY NAME*,18/ FOT ORDINAL
* 
*         ONE CM WORD WILL BE RETURNED FOR EACH ORDINAL THAT IS 
*         CURRENTLY RESERVED. 
  
  
 RFD      SUBR               ENTRY
          LDC    FOTP        GET FOT POINTER
          CRD    CM 
          LDD    CM+2        CALCULATE FOT ORDINALS IN USE
          SBN    1
          SBD    CM+3 
          STD    FC          NUMBER OF WORDS TO BE RETURNED 
          LDD    ES+2        CHECK CM BUFFER LENGTH 
          SBD    FC 
          PJN    RFD1        IF CM BUFFER LARGE ENOUGH
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 RFD1     LDD    CM          TRANSFER FOT TO PP BUFFER
          SHN    14 
          ADD    CM+1 
          ADN    1           BEGIN WITH SECOND WORD 
          CRM    BFMS,FC
          LDC    BFMS        SET FWA OF BUFFER
          STD    T1 
          LDN    1           INITIALIZE ORDINAL 
          STD    T2 
 RFD2     LDM    3,T1        SET FOT ORDINAL
          SCN    77 
          STM    3,T1 
          LDD    T2 
          STM    4,T1 
          LDN    5           ADVANCE POINTER
          RAD    T1 
          AOD    T2          ADVANCE ORDINAL
          SBD    FC 
          SBN    1
          MJN    RFD2        IF NOT END OF TABLE
          LDD    ES+3        RETURN FOT TO CM BUFFER
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          CWM    BFMS,FC
          SOD    CM+2        RETURN TOTAL NUMBER OF ORDINALS POSSIBLE 
          STD    ES+1 
          LJM    RSD7        RETURN 
 RSC      SPACE  4,10 
**        RSCF - RETURN SERVICE CLASS CONTROL TABLE FROM LOW CORE.
* 
*T,FA     12/ *RSCF* ,12/ 0 ,12/ WC ,6/ 0 ,18/ ADDR 
* 
*         WC     NUMBER OF WORDS IN CM BUFFER.  MUST BE AT LEAST *SCTE*.
*                *SFM* WILL RETURN THE NUMBER OF WORDS WRITTEN. 
*         ADDR   FWA OF CM BUFFER.
* 
*         A COPY OF THE *SCT* IS RETURNED IN THE CM BUFFER. 
  
  
 RSC      SUBR               ENTRY
          LDN    SCTE        SET NUMBER OF WORDS TO RETURN
          STD    FC 
          LDD    ES+2 
          SBD    FC 
          PJN    RSC1        IF BUFFER LARGE ENOUGH 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 RSC1     LDK    JBCP        GET ADDRESS OF *SCT* 
          CRD    CM 
          LDD    CM          RETURN *SCT* TO CM BUFFER
          SHN    14 
          ADD    CM+1 
          CRM    SBUF,FC
          LDD    ES+3 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          CWM    SBUF,FC
          LJM    RSD7        RETURN 
 RSSF     SPACE  4,25 
**        RSSF - RETURN SUBSYSTEM DATA. 
* 
*T,FA     12/*RSSF* ,12/ ,12/ WC ,6/ ,18/ADDR 
* 
*         WC     LENGTH OF CM BUFFER
*                (*SFM* WILL RETURN NUMBER OF WORDS WRITTEN)
*         ADDR   FWA OF THE CM BUFFER 
* 
* 
*T,ADDR   41/ , 1/F, 6/ CP, 12/ EJTO
* 
*         CP     CONTROL POINT NUMBER WHERE SUBSYSTEM MUST RESIDE 
*                WHEN IT IS ACTIVE
*         F      ENABLE/DISABLE FLAG
*                =0, IF SUBSYSTEM ENABLED 
*                =1, IF SUBSYSTEM DISABLED
*         EJTO   EJT ORDINAL OF THE SUBSYSTEM (ZERO IF NOT ACTIVE)
* 
*         ONE CM WORD WILL BE RETURNED FOR EACH SUBSYSTEM THAT IS 
*         SUPPORTED BY THE OPERATING SYSTEM.
  
  
 RSS      SUBR               ENTRY
          LDN    SBUFL/5     SAVE NUMBER OF CM WORDS TO BE RETURNED 
          STD    FC 
          LDC    SBUFL
          STD    T2 
          LDD    ES+2        CHECK CM BUFFER
          SBD    FC 
          PJN    RSS1        IF BUFFER LARGE ENOUGH 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 RSS1     LDN    0           CLEAR PP BUFFER
          STM    SBUF-1,T2
          SOD    T2 
          NJN    RSS1        IF NOT END OF BUFFER 
*         STD    T2          INITIALIZE CP AND EJTO INDEX 
          STD    T3          INITIALIZE RETURN DATA BUFFER INDEX
          STD    T4          INITIALIZE *TSSS* INDEX
          LDC    SSCP        GET FWA OF THE SSCT
          CRD    CM 
          LDN    SSCTL*2     LENGTH OF SSCT AND SSAT (IN CM WORDS)
          STD    T1 
          LDD    CM+2        READ SSCT AND SSAT 
          SHN    14 
          ADD    CM+3 
          CRM    BFMS,T1
          LDK    SSSL        READ STATUS WORD 
          CRD    CM 
 RSS2     LDM    BFMS,T2     GET CONTROL POINT NUMBER 
          LPN    37 
          STM    SBUF+3,T3
          LDM    BFMS+SSCTL*5,T2  GET EJT ORDINAL 
          STM    SBUF+4,T3
          LDM    TSSS,T4     GET *SSSL* BYTE POSITION 
          STD    T1 
          LDM    TSSS+1,T4   CHECK STATUS BIT 
          STM    RSSA 
          LDM    CM,T1
          LPC    ** 
 RSSA     EQU    *-1         (SUBSYSTEM MASK BIT) 
          ZJN    RSS3        IF SUBSYSTEM ENABLED 
          LDC    100B        SET DISABLED STATUS
          RAM    SBUF+3,T3
 RSS3     LDN    5           LENGTH OF ONE ENTRY IN PP BUFFER 
          RAD    T3          INCREMENT RETURN BUFFER INDEX
          LDN    2           INCREMENT TABLE INDEX
          RAD    T4 
          AOD    T2          INCREMENT CP AND EJTO INDEX
          SBN    MXSI-LSSI   TOTAL NUMBER OF SUPPORTED SUBSYSTEMS 
          ZJN    RSS4        IF ALL SUBSYSTEMS PROCESSED
          LJM    RSS2        PROCESS NEXT ENTRY 
  
 RSS4     LDD    ES+3        RETURN SUBSYSTEM DATA TO CM BUFFER 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          CWM    SBUF,FC
          LJM    RSD7        RETURN 
  
  
**        TSSS - TABLE OF SUBSYSTEM STATUS INFORMATION. 
* 
*T        12/ BYTE, 12/ MASK
  
  
 TSSS     INDEX 
 .SUB     HERE
          INDEX  MXSI*2-LSSI*2
  
  
 SBUF     EQU    BFMS+SSCTL*5*2    FWA RETURN DATA PP BUFFER
 .NSS     SET    MXSI-LSSI         TOTAL NUMBER OF SUBSYSTEMS POSSIBLE
 SBUFL    EQU    .NSS*5            LENGTH OF PP BUFFER
 SBUFE    EQU    SBUF+SBUFL        END OF PP BUFFER 
          ERRNG  7777-SBUFE        TEST FOR PP BUFFER OVERFLOW
 DPT      SPACE  4,10 
**        DPT - DETERMINE *PROBE* TABLE LENGTH. 
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) = MINIMUM SIZE OF CM BUFFER NEEDED TO
*                RECEIVE *PROBE* DATA.
* 
*         USES   T1 - T7. 
* 
  
  
 DPT      SUBR               ENTRY/EXIT 
          LDC    PLDP        FETCH PLD POINTER
          CRD    T1 
          ADN    PSTP-PLDP   GET PST POINTER
          CRD    T3 
          LDD    T3+2        COMPUTE LENGTH OF *PLD*
          SBD    T1 
          SHN    14 
          ADD    T3+3 
          SBD    T1+1 
          ADC    TPRDL
          UJN    DPTX        RETURN 
 LPT      SPACE  4,35 
**        LPT - LOCK *PROBE* TABLES.
* 
*         ENTRY  NONE.
* 
*         EXIT   (A) .EQ. 0 IF *PROBE* TABLES LOCKED
*                (A) .NE. 0 IF *PROBE* TABLES NOT PRESENT.
*                (FN - FN+4) = *PROBE* TABLE POINTER. 
* 
*         USES   CM - CM+4, FN - FN+4.
* 
*         MACROS DELAY, MONITOR, PAUSE. 
  
  
 LPT2     LDC    PRBP        READ *PROBE* DATA POINTER
          CRD    FN 
          LDC    4000        CLEAR *PROBE* TABLE LOCK FLAG
          RAD    FN 
          LDN    0           SET *PROBE* TABLE INTERLOCKED
  
 LPT      SUBR               ENTRY/EXIT 
          LDC    SSTL        READ *PROBE* STATUS
          CRD    CM 
          LDD    CM+2 
          LPC    100
          NJN    LPTX        IF *PROBE* NOT ENABLED 
 LPT1     LDD    MA          LOCK *PROBE* TABLE 
          CWM    LPTA,ON
          LDN    1
          STD    CM+1 
          STD    CM+2 
          MONITOR  UADM 
          LDD    CM+1 
          ZJN    LPT2        IF *PROBE* TABLE LOCKED
          DELAY 
          PAUSE 
          LDD    CM+1 
          ZJN    LPT1        IF NO ERROR FLAG 
          LJM    DPP         DROP PPU 
  
  
 LPTA     CON    LDOS        DECREMENT LOW CORE FIELD BY ONE
          CON    PRBP        WORD ADDRESS 
          CON    59D*100+1   BIT ADDRESS/FIELD WIDTH
          CON    0
          CON    0
 RPC      SPACE  4,10 
**        RPC - RETURN *PLD* COUNTS.
* 
*         ENTRY  (FN - FN+4) = *PROBE* TABLE POINTERS.
* 
*         EXIT   *PROBE*/*PLD* INFORMATION WRITTEN TO BUFFER. 
* 
*         USES   CM - CM+4, CN - CN+4, DA - DA+1, T3 - T7.
* 
*         CALLS  DPT, SDR.
* 
*         DEFINE (DA - DA+1) = FWA OF *PROBE* TABLE *TSPL*. 
*                (T3) = LENGTH OF *TSPL*. 
*                (T4) = *TSPL* TABLE INDEX. 
*                (T5) = *PLD* INDEX.
*                (T6 - T7) = FWA OF *PLD*.
* 
*         NOTE   THIS ROUTINE COMBINES THE INFORMATION FROM THE 
*                *PROBE* TABLE *TSPL* WITH INFORMATION FROM THE *PLD* 
*                TO CREATE THE FOLLOWING ENTRY THAT IS RETURNED TO THE
*                CM BUFFER. 
* 
*T        18/ PPU ,6/ R ,6/  ,30/ COUNT 
* 
*         PPU    NAME OF PPU PROGRAM. 
*         R      PPU PROGRAM RESIDENCE. 
*                0 = ASR RESIDENT.
*                1 = CM RESIDENT
*                2 = DISK RESIDENT
*         COUNT  NUMBER OF TIMES THE PPU PROGRAM WAS LOADED.
  
  
 RPC      SUBR               ENTRY/EXIT 
          RJM    DPT         DETERMINE *PROBE* TABLE LENGTH 
          ADC    -TPRDL 
          STD    T3 
          LDC    TSPL        SET FWA OF *TSPL*
          ADD    FN+4 
          STD    DA+1 
          SHN    -14
          ADD    FN+3 
          STD    DA 
          LDC    PLDP        FETCH PLD POINTER
          CRD    T6 
          LDN    0           INITIALIZE *PROBE* TABLE INDEX 
          STD    T4 
          STD    T5          INITIALIZE *PLD* INDEX 
 RPC1     LPN    1
          NJN    RPC2        IF MORE DATA TO PROCESS
          LDD    DA          READ *PROBE* DATA
          SHN    14 
          ADD    DA+1 
          ADD    T4 
          CRD    CM 
          AOD    T4          INCREMENT PROBE TABLE INDEX
 RPC2     LDN    0           CHECK IF LAST *PLD* ENTRY ENCOUNTERED
*         LDN    1           (LAST *PLD* ENTRY ENCOUNTERED) 
 RPCA     EQU    *-1
          NJN    RPCX        IF END OF *PLD*
          LDD    T6          READ *PLD* ENTRIES 
          SHN    14 
          ADD    T7 
          ADD    T5 
          CRD    CN 
  
*         THE LAST ENTRY OF THE *PLD* IS RESERVED FOR *SFP*.
*         THIS *PLD* ENTRY HAS NO PP NAME.  THEREFORE, *SFP*
*         MUST BE SET INTO THE ENTRY BEFORE IT IS RETURNED TO 
*         THE CM BUFFER.
  
          LDD    CN          CHECK FOR *SFP* *PLD* ENTRY
          NJN    RPC3        IF NOT *SFP* ENTRY 
          LDC    3RPSF       SET *SFP* AS PPU NAME
          STD    CN 
          SHN    -6 
          LMD    CN+1 
          SCN    77 
          LMD    CN+1 
          STD    CN+1 
          AOM    RPCA        FLAG LAST *PLD* ENTRY ENCOUNTERED
 RPC3     LDD    T5 
          LPN    1
          NJN    RPC4        IF RETURNING SECOND ENTRY OF *PROBE* DATA
          LDD    CM+4        SET *PROBE* COUNT INTO FIRST *PLD* ENTRY 
          STD    CN+4 
          LDD    CM+3 
          STD    CN+3 
          LDD    CM+2 
          LPN    77 
          STD    CN+2 
          UJN    RPC5        SET DEVICE RESIDENCE 
  
 RPC4     LDD    CM+2        SET *PROBE* COUNT FOR SECOND *PLD* ENTRY 
          SCN    77 
          SHN    6
          LMD    CM+1 
          SHN    6
          STD    CN+4 
          LPC    770000 
          LMD    CM 
          SHN    6
          STD    CN+3 
          SHN    -14
          STD    CN+2 
 RPC5     LDD    CN+1        SET DEVICE RESIDENCE 
          RJM    SDR
          STD    CN+1 
          LDD    ES+3        RETURN DATA TO CM BUFFER 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          ADC    TPRDL+1
          ADD    T5 
          CWD    CN 
          AOD    T5 
          LJM    RPC1        LOOP FOR MORE DATA 
 SDR      SPACE  4,15 
**        SDR - SET DEVICE RESIDENCE. 
* 
*         ENTRY  (A) = BYTE 1 OF *PLD* ENTRY. 
* 
*         EXIT   (A) = BYTE 1 OF *PROBE/PLD* ENTRY
* 
*         USES   T1, T2, FS - FS+4. 
* 
*         MACROS SFA. 
* 
*         NOTE   0 = ASR. 
*                1 = CM RESIDENT. 
*                2 = DISK RESIDENT. 
  
  
 SDR      SUBR               ENTRY/EXIT 
          STD    T2 
          SHN    0-5         CHECK FOR CM RESIDENCE 
          LPN    1
          STD    T1 
          NJN    SDR1        IF CM RESIDENT 
          LDD    T2          EXTRACT EST ORDINAL
          LPN    37 
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    FS 
          LDD    FS          CHECK IF SYSTEM FILE PRESENT 
          SHN    1-12 
          LPN    2
          STD    T1 
 SDR1     LDD    T2          SET RESIDENCE CODE 
          SCN    77 
          LMD    T1 
          UJN    SDRX        RETURN 
 RCIF     SPACE  4,15 
**        RCIF - RETURN/UPDATE SYSTEM SERVICE CLASS DATA. 
* 
*         *RCI* READS OR UPDATES THE CONTENTS OF THE *JCB* (JOB 
*         CONTROL AREA) TABLE IN CMR. 
* 
*T FA     12/ *RCIF* ,11/ ,1/ F,12/ WC,6/ ,18/ ADDR 
* 
*         F      = 0 IF DATA TO BE READ.
*                = 1 IF DATA TO BE UPDATED. 
*         WC     CM BUFFER LENGTH 
*                (*SFM* WILL RETURN NUMBER OF WORDS WRITTEN). 
*         ADDR   FWA OF CM BUFFER.
* 
*         NOTE - FOR THE UPDATE OPTON - THE LAST TWO WORDS OF EACH
*                *JCB* (WORDS *JCTT* AND *CTMT*) ARE NOT UPDATED. 
  
  
 RCI      SUBR               ENTRY/EXIT 
  
*         CHECK FOR SYSTEM ORIGIN AND *SSJ=* ENTRY POINT. 
  
          RJM    CUA         CHECK USER ACCESS
          NJN    RCI1        IF NOT SYSTEM ORIGIN 
          LDD    CP 
          ADK    SEPW 
          CRD    CM 
          LDD    CM 
          SHN    21-2 
          MJN    RCI2        IF SYSTEM ORIGIN AND *SSJ=*
 RCI1     ABORT  /MESS/ERIR  * SFM INCORRECT REQUEST.*
  
*         CHECK FOR READ OR UPDATE OPTION.
  
 RCI2     LDK    TJCBL       SET LENGTH OF *JCB* TABLE
          STD    FC 
          SBD    ES+2        CHECK CM BUFFER
          ZJN    RCI3        IF BUFFER CORRECT SIZE 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 RCI3     LDN    1           INITIALIZE SERVICE CLASS NUMBER
          STD    T1 
          LDN    0           INITIALIZE CM BUFFER OFFSET
          STD    T2 
          LDD    ES+1        CHECK READ/WRITE FLAG
          LPN    1
          NJN    RCI5        IF DATA TO BE WRITTEN
  
*         READ *JCB* TABLE TO JOB BUFFER. 
  
          LDN    JCBE        SET WORD COUNT 
          STD    T3 
 RCI4     SFA    JCB,T1      GET *JCB* ADDRESS
          CRM    RCIB,T3     READ NEXT *JCB* ENTRY
          RJM    GCA         GET CM BUFFER ADDRESS
          ADD    T2 
          CWM    RCIB,T3     WRITE NEXT *JCB* ENTRY TO CM BUFFER
          LDN    JCBE        ADJUST OFFSET FOR NEXT SERVICE CLASS 
          RAD    T2 
          AOD    T1          INCREMENT SERVICE CLASS
          SBN    MXJC 
          NJN    RCI4        IF MORE *JCB* ENTRIES TO COPY
          LJM    RSD7        RETURN 
  
*         UPDATE *JCB*. 
  
 RCI5     LDN    JCBE-2      DO NOT UPDATE LAST TWO WORDS OF EACH *JCB* 
          ERRNZ  JCBE-JCTT-2 CODE DEPENDS ON VALUE
          STD    T3          SET WORD COUNT 
 RCI6     RJM    GCA         GET CM BUFFER ADDRESS FOR NEXT *JCB* ENTRY 
          ADD    T2 
          CRM    RCIB,T3     READ NEXT UPDATED *JCB* ENTRY
          SFA    JCB,T1 
          CWM    RCIB,T3     UPDATE NEXT *JCB* ENTRY
          LDN    ZERL 
          CRD    CM 
          LDN    CCSS        CONVERT CPU SCHEDULING PARAMETERS
          STD    CM+2 
          LDD    T1          SET SERVICE CLASS
          STD    CM+4 
          MONITOR  SCTM      SET SYSTEM CONTROL PARAMETERS
          LDN    JCBE        ADJUST OFFSET FOR NEXT SERVICE CLASS 
          RAD    T2 
          AOD    T1          INCREMENT SERVICE CLASS
          SBN    MXJC 
          NJN    RCI6        IF MORE *JCB* ENTRIES TO UPDATE
  
*         ISSUE JOB LIMIT CHANGED EVENT.
  
 RCI7     LDN    ZERL 
          CRD    CM 
          LDN    SCFE 
          STD    CM+4 
          MONITOR  EATM 
          LJM    RSD7        RETURN 
 GCA      SPACE  4,10 
**        GCA - GET CM BUFFER ADDRESS.
* 
*         ENTRY  (ES+3 - ES+4) = FWA CM BUFFER FOR JOB. 
* 
*         EXIT   (A) = FWA CM BUFFER FOR JOB. 
  
  
 GCA      SUBR               ENTRY/EXIT 
          LDD    ES+3        GET FWA CM BUFFER
          LPN    77 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    ES+4 
          UJN    GCAX        RETURN 
  
  
 RCIB     EQU    *           *JCB* BUFFER 
 RCIBL    EQU    JCBE*5      *JCB* BUFFER LENGTH
          ERRPL  RCIB+RCIBL-BFMS  BUFFER OVERFLOWS *BFMS* 
  
*         BUFFER FOR I/O STATISTICS.
  
 IOSA     VFD    12/0,18/0,6/0,12/0,12/0
 IOSB     EQU    IOSA+5 
          ERRPL  IOSB+PUTL*5-BFMS  BUFFER OVERFLOWS *BFMS*
          SPACE  4,10 
**        COMMON DECKS. 
  
  
 QUAL$    SET    0           FORCE UNQUALIFIED COMMON DECKS 
*CALL     COMPCUA 
          SPACE  4,10 
          OVERFLOW  OVLA,EPFW 
          OVERLAY  (MISCELLANEOUS FUNCTIONS.) 
          SPACE  4,10 
 SUB$     EQU    1           ASSEMBLE *SUBSYST* MACRO CALLS 
*CALL     COMSSSD 
          TITLE  CSTF/SSTF/SUSF FUNCTION PROCESSOR. 
***       FUNCTION *CSTF* - CLEAR SUBSYSTEM ACCESS FLAG.
* 
*         THE SUBSYSTEM ACESS FLAG (BIT 11D OF THE SUBSYSTEM-S SSCT 
*         ENTRY) WILL BE CLEARED. 
* 
*         EXIT CONDITIONS.
* 
*T STATUS 48/  0,9/  0,2/  ST,1/  C 
*         C      COMPLETION BIT.
*         ST = 0 IF SUBSYSTEM ACCESS FLAG WAS SET AT TIME OF CALL.
*         ST = 1 IF SUBSYSTEM ACCESS FLAG WAS ALREADY CLEAR.
 SST      SPACE  4,10 
***       FUNCTION *SSTF* - SET SUBSYSTEM ACCESS FLAG.
* 
*         THE SUBSYSTEM ACCESS FLAG (BIT 11D OF THE SUBSYSTEM-S SSCT
*         ENTRY) WILL BE SET. 
* 
* 
*T STATUS 48/  0,9/  0,2/  ST,1/  C 
*         C      COMPLETION BIT.
*         ST = 0 IF SUBSYSTEM ACCESS FLAG WAS CLEAR AT TIME OF CALL.
*         ST = 1 IF SUBSYSTEM ACCESS FLAG WAS ALREADY SET.
  
  
 CST      ENTRY              ENTRY
          LDN    ZERL        CLEAR STATUS WORD
          CRD    CN 
          AOD    CN+4        SET COMPLETE BIT 
          LDD    CP          GET SUBSYSTEM IDENTIFICATION NUMBER
          ADN    JCIW 
          CRD    CM 
          LDD    IR+2 
          SBN    CSTF-CSCF
          SHN    14 
          LMD    CM+2 
  
          ERRNZ  SSTF-CSTF-1       VALUES MUST BE CONSECUTIVE 
          ERRNZ  SSCF-CSCF-1       VALUES MUST BE CONSECUTIVE 
  
          RJM    AST         SET/CLEAR SUBSYSTEM ACCESS FLAG
          NJN    CST1        IF FLAG IS ALREADY IN DESIRED STATE
          LDN    2           SET REPLY CODE 
          RAD    CN+4 
 CST1     LDD    IR+3        RETURN STATUS TO CALLER
          SHN    6
          ADD    RA 
          SHN    6
          ADD    IR+4 
          CWD    CN 
          LJM    DPP         DROP PP
 SUSF     SPACE  4,10 
***       FUNCTION *SUSF* - SET SUBSYSTEM STATUS. 
* 
*         THE CONTROL POINT NUMBER, IF SPECIFIED, WILL BE PLACED
*         INTO THE SUBSYSTEM-S SSCT ENTRY.  THE *SSSL* STATUS BIT 
*         WILL BE SET TO THE SPECIFIED STATUS (ENABLED OR DISABLED).
* 
*         ENTRY 
* 
*T,ADDR   41/ , 1/F, 6/ CP, 12/ SSID
* 
*         F = 1, IF SUBSYSTEM TO BE DISABLED. 
*           = 0, IF SUBSYSTEM TO BE ENABLED.
*         CP = CONTROL POINT NUMBER + 40B, IF SPECIFIED.
*         SSID = SUBSYSTEM ID.
  
  
 SSS3     ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 SSS      ENTRY              ENTRY
          RJM    GFE         GET PARAMETER WORD 
          CRD    CM 
          LDD    CM+4        SAVE SSID
          STD    T6 
          SBK    MXSI+1 
          PJN    SSS3        IF SSID OUT OF RANGE 
          ADK    MXSI-LSSI
          MJN    SSS3        IF SSID OUT OF RANGE 
          LDD    CM+3 
          SHN    21-5        SAVE ENABLE/DISABLE FLAG 
          STD    T7 
          PJN    SSS1        IF NO CONTROL POINT SPECIFIED
          SHN    6
          LPN    37 
          STD    T1          SAVE CONTROL POINT 
          LDN    NCPL        CHECK CONTROL POINT
          CRD    CM 
          LDD    T1 
          SBD    CM+1 
          SBN    1
          PJN    SSS3        IF INVALID CONTROL POINT NUMBER
          LDN    SECF 
          SHN    14 
          LMD    T6 
          RJM    AST         UPDATE SSCT
  
*         UPDATE *SSSL* STATUS BIT. 
  
 SSS1     LDC    MXSI        COMPUTE TABLE OFFSET 
          SBD    T6 
          SHN    1
          STD    T6 
          LDM    TSSS,T6     GET *SSSL* BYTE NUMBER 
          ADN    CM 
          STD    T5 
          LDM    TSSS+1,T6   SET MASK 
          STD    T6 
          LCN    0
          LMD    T6 
          STM    SSSA 
          LDD    T7 
          NJN    SSS2        IF *DISABLE* 
          STD    T6          CLEAR STATUS BITS
 SSS2     LDK    SSSL        READ STATUS WORD 
          CRD    CM 
          LDI    T5 
          LPC    *
 SSSA     EQU    *-1
          LMD    T6 
          STI    T5 
          LDK    SSSL        REWRITE STATUS WORD
          CWD    CM 
          LJM    DPP         DROP PP
 TSSS     SPACE 4,10
**        TSSS - TABLE OF SUBSYSTEM STATUS INFORMATION. 
* 
*T        12/ BYTE, 12/ MASK
  
  
 TSSS     INDEX 
 .SUB     HERE
          INDEX  MXSI*2-LSSI*2
          TITLE  MDFF FUNCTION PROCESSOR. 
 DMM      SPACE  4,15 
***       FUNCTION *MDFF* - DUMP MACHINE MEMORY.
* 
*         ENTRY CONDITIONS. 
*T FET+5  24/ ,12/ 0,24/ FWA/100
*         FWA = ABSOLUTE ADDRESS OF FIRST WORD TO DUMP. 
*         FIRST, IN, OUT, LIMIT SET TO RECEIVE DUMP DATA. 
* 
*         EXIT CONDITIONS.
*T FET+5  24/ MEMORY SIZE/100,12/ 0,24/ UNCHANGED 
* 
*         MEMORY SIZE IS FROM CMR WORD *MABL*.
*         MEMORY DATA FROM FWA IS WRITTEN INTO THE BUFFER 
*         AND *IN* IS SET CORRECTLY.  MEMORY WILL BE DUMPED 
*         IN ANY NUMBER OF 100 WORD BLOCKS NEEDED TO FILL 
*         THE BUFFER TO .LT. 100 REMAINING FREE WORDS.
* 
*         IN A SECURED SYSTEM, ONLY CMR AND THE CALLER-S FIELD
*         LENGTH WILL BE RETURNED.  THE REST OF CENTRAL MEMORY
*         WILL BE WRITTEN AS BINARY ZEROES. 
  
  
 DMM      ENTRY              ENTRY
          LDN    2           SET VALIDATION OPTION
          STD    CM+1 
          LDD    IR+4        SET FET ADDRESS
          STD    CM+4 
          LDD    IR+3 
          STD    CM+3 
          MONITOR VFPM       VALIDATE FET PARAMETERS
          LDD    CM+1 
          ZJN    DMM1        IF NO ERROR
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 DMM1     LDK    CMRL        GET CMR SIZE 
          CRD    ES 
          ADK    SSTL-CMRL   GET SECURITY UNLOCK STATUS 
          CRD    CN 
          ADK    SSML-SSTL   GET SYSTEM SECURITY MODE 
          CRD    CM 
          LDD    CM 
          LPN    7
          ZJN    DMM3        IF NOT SECURED SYSTEM
          LDD    CN 
          SHN    21-11
          MJN    DMM3        IF SECURITY UNLOCK STATUS
          AOM    DMMC        SET SECURED SYSTEM FLAG
          LDC    500D        CLEAR BUFFER 
          STD    T2 
 DMM2     LDN    0
          STM    ZBUF-1,T2
          SOD    T2 
          NJN    DMM2        IF MORE TO CLEAR 
 DMM3     LDK    MABL        READ HARDWARE OPTIONS
          CRD    CM 
          LDD    CM+1 
          SHN    21-13
          PJN    DMM4        IF CM EXTENSION PRESENT
          LDM    DMMB        SET NO CME MODE
          STM    DMMA 
 DMM4     LDN    6
          STD    T1 
          RJM    GFE         GET FET ADDRESS
          CRM    BUF,T1      READ FET 
          LDD    CM+3        ADJUST 262K MEMORY SIZE
          ADN    1
          SCN    1
          STM    BUF+5*5+1
          STD    ES+1 
          SHN    -14
          ADD    CM+2 
          STM    BUF+5*5
          STD    ES 
          RJM    GFE
          ADN    5
          CWM    BUF+5*5,ON 
          LDM    BUF+1*5+3   SET FET PARAMETERS 
          LPN    37 
          STD    FT 
          LDM    BUF+1*5+4
          STD    FT+1 
          LDM    BUF+2*5+3
          STD    IN 
          LDM    BUF+2*5+4
          STD    IN+1 
          LDM    BUF+4*5+3
          LPN    37 
          STD    LM 
          LDM    BUF+4*5+4
          STD    LM+1 
          RJM    CIB         GET BUFFER SIZE
          SHN    -6          MAKE MULTIPLE OF 100 
          NJN    DMM5        IF LARGE ENOUGH
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 DMM5     STD    CN          SAVE WORD COUNT/100
          LDM    BUF+5*5+3   GET FWA/100
          STD    CN+3 
          LDM    BUF+5*5+4
          STD    CN+4 
          SBD    ES+1        FWA - MACHINE SIZE 
          SHN    -21
          LMC    -0 
          ADD    CN+3 
          SBD    ES 
          MJN    DMM6        IF FWA .LT. MACHINE SIZE 
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 DMM6     LDN    0
*         LDN    1           (SECURED SYSTEM) 
 DMMC     EQU    *-1
          ZJP    DMM9        IF NOT SECURED SYSTEM
          LDD    CN+3 
          NJN    DMM7        IF FWA PAST CMR
          LDD    CN+4 
          SBD    ES+4 
          MJP    DMM9        IF FWA WITHIN CMR
  
*         CHECK FOR REQUESTED BLOCK FWA WITHIN CALLER-S FL
  
 DMM7     LDD    CP          CHECK FOR FWA .LT. FWA OF CALLER-S FL
          ADK    FLSW+1 
          CRD    CM 
          LDD    CN+4 
          SBD    CM+2 
          SHN    -21
          LMC    -0 
          ADD    CN+3 
          SBD    CM+1 
          MJN    DMM8        IF FWA .LT. THAN FWA OF CALLER-S FL
          LDD    CM+3        CALCULATE LWA+1 OF CALLER-S FL 
          LPC    3777 
          ADD    CM+2 
          ADD    CM+4 
          STD    CM+2 
          SHN    -14
          RAD    CM+1 
          LDD    CN+4        CHECK FOR FWA .GT. LWA OF CALLER-S FL
          SBD    CM+2 
          SHN    -21
          LMC    -0 
          ADD    CN+3 
          SBD    CM+1 
          MJN    DMM9        IF FWA WITHIN CALLER-S FL
 DMM8     LDC    ZBUF        SET BUFFER ADDRESS FOR ZEROES
          STM    DMMD 
          UJN    DMM12       PAUSE AND WRITE BUFFER 
  
 DMM9     LDC    BUF         SET BUFFER ADDRESS FOR CM DATA 
          STM    DMMD 
          LRD    CN+3        SET *R* REGISTER TO FWA
*         UJN    DMM10       (CME NOT PRESENT)
 DMMA     EQU    *-1
  
          LDC    400000      SET RELATIVE ADDRESS = 0 
          UJN    DMM11       READ DATA FROM CM
  
 DMM10    LDD    CN+4 
          SHN    6
 DMM11    CRM    BUF,HN 
 DMM12    PAUSE              RESET *R* REGISTER 
          LDD    HN 
          STD    T1 
          LDC    BUF         WRITE TO CM BUFFER 
 DMMD     EQU    *-1         (BUFFER ADDRESS) 
          RJM    WBB
          SOD    CN          DECREMENT BLOCK COUNT
          ZJN    DMM14       IF NO SPACE REMAINS
          AOD    CN+4        ADVANCE ABSOLUTE ADDRESS 
          SHN    -14
          RAD    CN+3 
          SBD    ES          COMPARE TO LIMIT VALUE 
          NJN    DMM13       IF NOT EQUAL 
          LDD    CN+4 
          SBD    ES+1 
 DMM13    NJP    DMM6        IF NOT END OF MEMORY 
 DMM14    LDN    ZERL        RETURN IN POINTER
          CRD    CM 
          LDD    IN 
          STD    CM+3 
          LDD    IN+1 
          STD    CM+4 
          RJM    GFE
          ADN    2
          CWD    CM 
          SBN    2           SET COMPLETION BIT 
          CRD    CM 
          LDD    CM+4 
          SCN    1
          LMN    1
          STD    CM+4 
          RJM    GFE
          CWD    CM 
          LJM    DPP         EXIT 
  
 DMMB     BSS    0
          LOC    DMMA 
          UJN    DMM10       CME NOT PRESENT
          LOC    *O 
 TPDF     SPACE  4,10 
***       FUNCTION *TPDF* - TRANSFER RESOURCE PREVIEW DATA. 
* 
*         ENTRY 
* 
*T,ADDR   60/ FIRST WORD OF PREVIEW DATA
* 
*         SSID = SUBSYSTEM ID.
  
  
 TPD      ENTRY              ENTRY
          LDK    LPDS-1      SET PREVIEW DATA LENGTH
          STD    T1 
          LDD    IR+3 
          SHN    14 
          ADD    IR+4 
          ADD    T1          DATA LWA + 1 
          SHN    -6 
          SBD    FL 
          MJN    TPD1        IF DATA WITHIN FL
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 TPD1     RJM    GFE         SET DATA ADDRESS 
          CRM    BUF,T1      READ PREVIEW DATA
          LDN    ZERL 
          CRD    CM 
          CRD    FS 
          LDK    LDSP 
          CRD    CN 
          LDK    LLDS        SET PREVIEW BUFFER INTERLOCK WORD ADDRESS
          RAD    CN+3 
          STD    CM+4 
          SHN    -14
          RAD    CN+2 
          STD    CM+3 
          MONITOR  UTEM      INTERLOCK PREVIEW BUFFER 
          LDD    CM+1 
          NJN    TPD2        IF BUFFER NOT INTERLOCKED
          LCN    0           SET NON-ZERO FIELD (REQUIRED BY *UTEM*)
          STD    FS 
          LDD    CN+2        SET PREVIEW DATA ADDRESS 
          SHN    14 
          ADD    CN+3 
          ADN    1
          CWM    BUF,T1      UPDATE PREVIEW BUFFER
          ADK    -LPDS       CLEAR BUFFER INTERLOCK 
          CWD    FS 
 TPD2     LJM    DPP         EXIT 
          SPACE  4
*         COMMON DECKS. 
  
  
 QUAL$    SET    1
 AST$     SET    1           ASSEMBLE TABLE UPDATE CODE IN *COMPAST*
*CALL     COMPAST 
*CALL     COMPCIB 
*CALL     COMPWBB 
  
  
          USE    BUFFER 
 BUF      EQU    *
 ZBUF     EQU    *+500D      ZERO BUFFER FOR *MDFF* 
          ERRPL  ZBUF+500D-EPFW 
          OVERLAY  (LID MANAGEMENT PROCESSOR.)
          SPACE  4
          TITLE  LID TABLE FUNCTION PROCESSORS. 
 GLAF     SPACE  4,15 
***       GLAF - GET LID ATTRIBUTES.
* 
*         *GLAF* RETURNS VARIOUS ATTRIBUTES FOR A SPECIFIED LID.
* 
*         ENTRY - 
*T FET+0  18/LID,42/1 
*                LID = THREE CHARACTER ALPHANUMERIC LID.
*         EXIT -
*T FET+0  18/LID,12/AT,6/ ,3/RFU,3/NW,8/RC,9/0,1/C
*                AT = 1/H,1/L,1/E,1/V,1/SH,1/SL,1/B,3/RFU,2/RFI 
*                     H = HOST. 
*                     L = LINKED MAINFRAME. 
*                     E = ENABLED LID.
*                     V = PRE-VALIDATION REQUIRED.
*                     SH = STORE AND FORWARD LID ON HOST. 
*                     SL = STORE AND FORWARD LID ON LINKED MAINFRAME. 
*                     B = LOOPBACK LID ON HOST MAINFRAME. 
*                     RFU = RESERVED FOR FUTURE USE.
*                     RFI = RESERVED FOR INSTALLATION.
*                NW = 1/SSF,1/RHF,1/NHP.
*                     SSF = SCOPE 2 STATION FACILITY. 
*                     RHF = REMOVE HOST FACILITY. 
*                     NHP = NETWORK HOST PRODUCTS.
*                     NOTE - ONLY NETWORKS WITH CURRENTLY AVAILABLE 
*                            PATHS TO ENABLED *PID*S ARE RETURNED.
*                RC = RESPONSE CODE.
  
  
 GLA      ENTRY 
          RJM    GFE         READ LID 
          CRD    ES 
          LDD    ES+1        ENSURE PROPER FORMAT ON LID
          SCN    77 
          STD    ES+1 
          LDN    0           CLEAR REMAINING FIELDS 
          STD    ES+2 
          STD    ES+3 
          STD    ES+4 
          STD    FN+4        CLEAR INITIAL NEXT PID INDEX 
          LDK    LIDP        FWA OF LDT 
          CRD    T1 
          LDN    1           INITIALIZE INDEX INTO LDT
          STD    T6 
          LDD    T1          GET LDT HEADER 
          SHN    14 
          LMD    T2 
          CRD    CM 
 GLA1     LDD    FN+4        INCREMENT NEXT PID INDEX 
          RAD    T6 
          RJM    RPE         READ PID ENTRY 
          MJN    GLA2        IF ENABLED PID FOUND 
  
*         ALL PIDS HAVE BEEN PROCESSED.  WRITE REPLY BLOCK AND RETURN.
  
          RJM    GFE         WRITE REPLY BLOCK
          CWD    ES 
          LJM    SFMX        RETURN 
  
 GLA2     LDN    3-1         SET POINTER TO FWA-1 OF FIRST LID ENTRY
          STD    FI 
 GLA3     RJM    RLE         READ LID ENTRY 
          NJN    GLA1        IF NO MATCHING LIDS FOR THIS PID 
          LDD    CN+2 
          SHN    21-13
          PJN    GLA3.3      IF LID NOT ENABLED 
          LDD    ES+1        SET ENABLED PID/LID FLAG 
          SCN    10 
          LMN    10 
          STD    ES+1 
 GLA3.3   LDD    CN+2 
          SHN    21-12
          MJN    GLA3.5      IF STORE/FORWARD 
          LDD    FS+1 
          SHN    21-3 
          PJN    GLA4        IF NO PRE-VALIDATION ON PID
          UJN    GLA3.7      SET PRE-VALIDATION FLAG
  
 GLA3.5   SHN    21-11+12-21
          PJN    GLA4        IF NO PRE-VALIDATION ON LID
 GLA3.7   LDD    ES+1        SET PRE-VALIDATION FLAG
          SCN    4
          LMN    4
          STD    ES+1 
 GLA4     LDD    FS+1 
          SHN    21-5 
          MJN    GLA7        IF HOST
          LDD    CN+2 
          SHN    21-12
          MJN    GLA5        IF STORE/FORWARD 
          LDD    ES+1        SET *L* FLAG 
          SCN    20 
          LMN    20 
          STD    ES+1 
          UJN    GLA10       CHECK FOR ENABLED NETWORKS 
  
 GLA5     LDD    ES+1        SET *SL* FLAG
          SCN    1
          LMN    1
          STD    ES+1 
 GLA6     LJM    GLA3        PROCESS NEXT LID 
  
 GLA7     LDD    CN+2 
          SHN    21-12
          MJN    GLA8        IF STORE/FORWARD 
          LDD    ES+1        SET *H* FLAG 
          SCN    40 
          LMN    40 
          UJN    GLA9        UPDATE ATTRIBUTES FIELD
  
 GLA8     LDD    ES+1        SET *SH* FLAG
          SCN    2
          LMN    2
 GLA9     STD    ES+1 
          LDD    CN+2 
          SHN    21-10
          PJN    GLA10       IF LOOPBACK FLAG NOT SET 
          LDD    ES+2        SET *B* FLAG 
          LPC    3777 
          LMC    4000 
          STD    ES+2 
  
*         CHECK FOR ENABLED NETWORKS. 
  
 GLA10    LDD    CN+2        CHECK FOR STORE/FORWARD ATTRIBUTE
          SHN    21-12
          MJN    GLA6        IF STORE/FORWARD 
          LDD    FS+4        CHECK FOR *NAM* ENABLED
          LPN    17 
          LMK    /NTS/ISV 
          NJN    GLA11       IF *NAM* NOT AVAILABLE 
          LDD    ES+3        SET *NAM* ENABLED FLAG 
          SHN    -6+22
          SCN    NANS 
          LMN    NANS 
          SHN    6
          STD    ES+3 
 GLA11    LDD    FS+4        CHECK FOR *RHF* ENABLED
          SHN    0-4
          LPN    17 
          LMK    /NTS/ISV 
          NJN    GLA12       IF *RHF* NOT AVAILABLE 
          LDD    ES+3        SET *RHF* ENABLED FLAG 
          SHN    -6+22
          SCN    RHNS 
          LMN    RHNS 
          SHN    6
          STD    ES+3 
 GLA12    LDD    FS+4        CHECK FOR *SSF* ENABLED
          SHN    0-10 
          LMK    /NTS/ISV 
          NJN    GLA13       IF *SSF* NOT AVAILABLE 
          LDD    ES+3        SET *SSF* ENABLED FLAG 
          SHN    -6+22
          SCN    SSNS 
          LMN    SSNS 
          SHN    6
          STD    ES+3 
 GLA13    LJM    GLA3        PROCESS NEXT LID 
 GLCF     SPACE  4,40 
***       GLCF - GET LID CONFIGURATION. 
* 
*         *GLCF* RETURNS MULTIPLE ENTRIES, WHERE EACH ENTRY CONSISTS
*         OF THE LID ATTRIBUTES, THE ENABLED PID, ITS ATTRIBUTES, AND 
*         THE VARIOUS NETWORK STATUSES ASSOCIATED WITH THAT PID.  SEE 
*         *PPCOM* FOR THE FORMAT OF THE LDT, THE CONTENTS OF THE
*         ATTRIBUTES FIELD, AND THE CONTENTS OF THE NETWORK STATUS
*         FIELD.
* 
*         ENTRY - 
*T FET+0  12/WC,30/0,8/RC,9/0,1/1 
*T        18/LID,42/
*T        60/ 
*T         .
*T         .
*T         .
*T        60/ 
*                WC = WORD COUNT (INCLUDING TWO HEADER WORDS) OF THE
*                  AVAILABLE REPLY BLOCK SIZE.
*                RC = RESPONSE CODE.
*                LID = THREE CHARACTER ALPHANUMERIC LOGICAL ID. 
* 
*         EXIT -
*T FET+0  60/ UNCHANGED 
*T        18/LID, 30/, 12/NP
*T        18/PID1, 1/S, 1/B, 6/, 10/RFI, 12/, 12/NW 
*T                       .
*T                       .
*T                       .
*T        18/PIDN, 1/S, 1/B, 6/, 10/RFI, 12/, 12/NW 
*                NP = NUMBER OF ENABLED PIDS FOUND IN LDT THAT DEFINE 
*                  THIS LID.  NOTE THAT IF THIS NUMBER EXCEEDS (WC)-2,
*                  A *BUFFER TOO SMALL* ERROR WILL BE RETURNED TO THE 
*                  CALLER.
*                PIDI = THREE CHARACTER ALPHANUMERIC ENABLED PHYSICAL 
*                  ID.
*                S = STORE AND FORWARD FLAG.
*                B = LOOPBACK FLAG. 
*                RFI = RESERVED FOR INSTALLATION. 
*                NW = NETWORK STATUSES. 
  
  
 GLC11    ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 GLC      ENTRY 
          LDD    IR+3        CHECK REPLY BLOCK ADDRESS
          SHN    14 
          LMD    IR+4 
          SHN    -6 
          SBD    FL 
          PJN    GLC11       IF ADDRESS BEYOND FL 
          RJM    GFE         GET REPLY BLOCK WORD COUNT 
          CRD    CM 
          ADN    1           GET LID TO BE MATCHED
          CRD    ES 
          LDD    IR+3        CHECK LWA OF REPLY BLOCK 
          SHN    14 
          LMD    IR+4 
          ADD    CM 
          SHN    -6 
          SBD    FL 
          PJN    GLC11       IF LWA OUT OF RANGE
          LDD    CM          SAVE REPLY BLOCK WORD COUNT
          SBN    2           DO NOT COUNT HEADER WORDS
          STD    T7 
          ZJN    GLC1        IF NO REPLY BLOCK LENGTH SPECIFIED 
          PJN    GLC2        IF REPLY BLOCK LENGTH SPECIFIED
 GLC1     ERROR  /ERR/LTL    RETURN BUFFER TOO SMALL
  
 GLC1.5   ERROR  /ERR/LNL    LID NOT LEGAL
  
 GLC2     LDD    ES          CHECK LID
          ZJN    GLC1.5      IF LID IS INCORRECT
          LDD    ES+1        ENSURE PROPER FORMAT ON LID
          SCN    77 
          ZJN    GLC1.5      IF LID IS INCORRECT
          STD    ES+1 
          LDN    1           INITIALIZE TABLE OFFSET
          STD    T6 
          LDK    LIDP        GET FWA OF LDT 
          CRD    T1 
          LDD    T1          GET LDT HEADER 
          SHN    14 
          LMD    T2 
          CRD    CM 
          LDN    0           INITIALIZE NUMBER OF PIDS RETURNED 
          STD    ES+4 
  
*         CHECK NEXT PID IN THE LDT.
  
 GLC3     LDD    CM+4 
          NJN    GLC4        IF MORE PIDS TO CHECK
          LJM    GLC10       FINISH PROCESSING
  
 GLC4     SOD    CM+4        DECREMENT REMAINING PID COUNT
          LDD    T1          GET FIRST WORD OF PID ENTRY
          SHN    14 
          LMD    T2 
          ADD    T6 
          CRD    FS 
          ADN    1           SECOND WORD OF PID ENTRY 
          CRD    FN 
          ADN    1           THIRD WORD OF PID ENTRY
          CRD    CN 
          LDD    FS+1 
          SHN    21-4 
          MJN    GLC6        IF PID ENABLED 
 GLC5     LDD    FN+4        POINT TO NEXT PID
          RAD    T6 
          UJN    GLC3        CHECK NEXT PID 
  
 GLC6     LDN    3-1         FWA-1 OF FIRST LID ENTRY 
          STD    ES+2 
          LDD    CN+4        NUMBER OF LID SLOTS
          STD    T3 
  
*         CHECK NEXT LID IN THE LDT.
  
 GLC7     AOD    ES+2        POINT TO NEXT LID ENTRY
          SOD    T3          DECREMENT LID COUNT
          MJN    GLC5        IF NO MORE LIDS FOR THIS PID 
          LDD    T1          READ TABLE ENTRY 
          SHN    14 
          LMD    T2 
          ADD    T6 
          ADD    ES+2 
          CRD    CN 
  
*         COMPARE LID TO LID ENTRY IN THE LDT.
  
          LDD    ES 
          LMD    CN 
          NJN    GLC7        IF LIDS DO NOT MATCH 
          LDD    ES+1 
          LMD    CN+1 
          NJN    GLC7        IF LIDS DO NOT MATCH 
          LDD    CN+2 
          SHN    21-13
          PJN    GLC7        IF LID NOT ENABLED 
  
*         RETURN LID-S ATTRIBUTES ALONG WITH PID INFORMATION. 
  
          SHN    5-12-21+13 
          LPN    50          SAVE *S* AND *B* FLAGS 
          STD    CN+2 
          LPN    10 
          SHN    1           POSITION *B* FLAG
          RAD    CN+2 
          SCN    10          CLEAR OLD *B* FLAG 
          STD    CN+2 
          LDD    FS+1 
          SCN    77 
          LMD    CN+2        MERGE FLAGS INTO REPLY WORD
          STD    FS+1 
          LDN    0           CLEAR REMAINING FIELDS 
          STD    FS+2 
          STD    FS+3 
          SOD    T7          DECREMENT SIZE OF REPLY BLOCK
 GLCA     EQU    *-1
*         UJN    GLC9        (BYPASS IF REPLY BLOCK TOO SMALL)
          PJN    GLC8        IF ROOM LEFT IN REPLY BLOCK
          AOM    GLCB        INDICATE REPLY BLOCK TOO SMALL 
          ISTORE GLCA,(UJN GLC9)  BYPASS LOGIC WHEN REPLY BLOCK FULL
          UJN    GLC9        INCREMENT PID COUNT
  
 GLC8     RJM    GFE         WRITE RETURN INFORMATION 
          ADN    2           ALLOW FOR HEADER WORDS 
          ADD    ES+4 
          CWD    FS 
 GLC9     AOD    ES+4        INCREMENT ENABLED PID COUNT
          LJM    GLC7        PROCESS NEXT LID 
  
 GLC10    LDN    0           CLEAR FIELD
          STD    ES+2 
          RJM    GFE         RETURN PID COUNT 
          ADN    1
          CWD    ES 
          LDD    ES+4 
          ZJN    GLC12       IF NO MATCHING LIDS FOUND
          LDN    0
 GLCB     EQU    *-1
*         LDN    1           (REPLY BUFFER TOO SMALL) 
          ZJP    SFMX        IF ENOUGH ROOM IN REPLY BUFFER 
          LJM    GLC1        REPLY BUFFER TOO SMALL 
  
 GLC12    ERROR  /ERR/LNL    UNKNOWN LID
 GLP      SPACE  4,20 
***       GLPF - GET PID ATTRIBUTES.
* 
*         *GLPF* RETURNS THE THREE PID WORDS ASSOCIATED WITH THE SPECI- 
*         FIED PID TO THE REPLY BUFFER.  SEE *PPCOM* FOR THE FORMAT OF
*         THE THREE PID WORDS.
* 
*         ENTRY - 
*T FET+0  18/PID,24/0,8/0,9/0,1/0 
*T,       60/0
*T,       60/0
*T,       60/0
*                PID = PID TO BE MATCHED. 
* 
*         EXIT -
*T FET+0  18/PID,24/0,8/RC,9/0,1/1
*T,       60/WORD 1 OF PID ENTRY
*T,       60/WORD 2 OF PID ENTRY
*T,       60/WORD 3 OF PID ENTRY
  
  
 GLP2     ABORT  /MESS/ERAE  * SFM - ARGUMENT ERROR.* 
  
 GLP      ENTRY              ENTRY
          LDD    IR+3        CHECK REPLY BLOCK ADDRESS
          SHN    14 
          LMD    IR+4 
          SHN    -6 
          SBD    FL 
          PJN    GLP2        IF ADDRESS OUT OF RANGE
          LDD    IR+3        CHECK REPLY BLOCK LWA
          SHN    14 
          LMD    IR+4 
          ADN    4
          SHN    -6 
          SBD    FL 
          PJN    GLP2        IF ADDRESS OUT OF RANGE
          RJM    GFE         GET SEARCH PID 
          CRD    FN 
          LDD    FN+1        ENSURE 3 CHARACTER PID 
          SCN    77 
          STD    FN+1 
          RJM    FMP         FIND MATCHING PID IN LID TABLE 
          ZJN    GLP1        IF NO MATCH FOUND
          LDD    T1          GET PID ENTRY
          SHN    14 
          LMD    T2 
          ADD    T6 
          CRM    GLPA,TR
          RJM    GFE         WRITE PID INFORMATION
          ADN    1
          CWM    GLPA,TR
          LJM    SFMX        RETURN 
  
 GLP1     ERROR  /ERR/LNL    * PID/LID NOT LEGAL* 
  
 GLPA     BSS    3*5         PID BUFFER 
 GLTF     SPACE  4,10 
***       GLTF - GET LID TABLE. 
* 
*         *GLTF* RETURNS THE ENTIRE LID TABLE (INCLUDING THE HEADER)
*         TO THE BUFFER ASSOCIATED WITH THE USER-S FET.  THE FET
*         POINTERS ARE UPDATED TO REFLECT THE PRESENCE OF THIS
*         DATA IN THE BUFFER.  SEE *PPCOM* FOR THE FORMAT OF
*         THE LID TABLE.  IF THE LID TABLE IS TOO LONG FOR THE BUFFER,
*         ERROR CODE 6 IS RETURNED, AND FET+5, BYTE 0 CONTAINS THE
*         LENGTH OF THE LID TABLE.
  
  
 GLT      ENTRY 
          LDK    LIDP        FWA OF LDT 
          CRD    ES 
          LDD    ES          INITIALIZE LDT ADDRESS 
          RAM    GLTA 
          LDD    ES+1 
          STM    GLTA+1 
          LDD    ES          GET LENGTH OF LDT
          SHN    14 
          LMD    ES+1 
          CRD    ES 
          RJM    GFE         READ FET POINTERS
          ADN    1
          CRD    CM          *FIRST*
          ADN    3
          CRD    CN          *LIMIT*
          LDD    CM+3 
          LPN    77 
          STD    CM+3 
          LDD    CN+3 
          LPN    77 
          STD    CN+3 
          SHN    14 
          LMD    CN+4 
          SHN    -6 
          SBD    FL 
          PJN    GLT1        IF *LIMIT* OUT OF RANGE
          LDD    CN+3 
          SBD    CM+3 
          MJN    GLT1        IF *FIRST* NOT WITHIN *LIMIT*
          SHN    14 
          ADD    CN+4 
          SBD    CM+4 
          SBN    1
          PJN    GLT2        IF *FIRST* LESS THAN *LIMIT* 
 GLT1     ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 GLT2     LDN    ZERL        CALCULATE NEW VALUE OF *IN*
          CRD    FN 
          LDD    CM+3 
          SHN    14 
          LMD    CM+4 
          ADD    ES          LENGTH OF TABLE
          STD    FN+4 
          SHN    -14
          STD    FN+3 
          LDD    CN+3        CHECK IF ENOUGH SPACE IN BUFFER
          SBD    FN+3 
          MJN    GLT3        IF NO SPACE IN BUFFER
          SHN    14 
          ADD    CN+4 
          SBD    FN+4 
          SBN    1
          PJN    GLT4        IF ENOUGH SPACE IN BUFFER
 GLT3     RJM    GFE         RETURN LID TABLE LENGTH
          ADN    5
          CWD    ES 
          ERROR  /ERR/LTL    EC=6, LID TABLE TOO LONG FOR BUFFER
  
 GLT4     LDN    0           INITIALIZE TABLE OFFSET
          STD    T2 
 GLT5     LDD    ES          LDT LENGTH 
          NJN    GLT6        IF LDT DEFINED 
          LDN    1           RETURN LDT HEADER
          STD    ES 
 GLT6     STD    T1 
          ADC    -LIDTL 
          MJN    GLT7        IF REMAINDER OF LDT FITS IN BUFFER 
          ZJN    GLT7        IF REMAINDER OF LDT FITS IN BUFFER 
          LDK    LIDTL       PROCESS ONE BUFFER OF DATA 
          STD    T1 
 GLT7     LDC    **          READ LDT INTO BUFFER 
 GLTA     EQU    *-2
          CRM    LIDT,T1
          LDD    CM+3        RETURN LDT TO USER-S FL
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CM+4 
          ADD    T2 
          CWM    LIDT,T1
          LDD    ES 
          SBD    T1 
          ZJN    GLT8        IF ENTIRE LDT WRITTEN TO USER-S FL 
          STD    ES 
          LDD    T1          UPDATE LDT ADDRESS 
          RAM    GLTA+1 
          SHN    -14
          RAM    GLTA 
          LDD    T1          UPDATE OFFSET TO USER-S FL 
          RAD    T2 
          LJM    GLT5        READ/WRITE THE LDT TO USER-S FL
  
 GLT8     LDK    ZERL        RETURN *IN* AND *OUT* TO FET 
          CRD    CN 
          LDD    CM+3 
          STD    CN+3 
          LDD    CM+4 
          STD    CN+4 
          RJM    GFE
          ADN    2
          CWD    FN 
          ADN    1
          CWD    CN 
          LJM    SFMX        COMPLETE *SFM* PROCESSING
 INT      SPACE  4,10 
***       ILTF - INITIALIZE THE LDT.
* 
*         *ILTF* WRITES THE ENTIRE LDT (INCLUDING THE HEADER) FROM THE
*         BUFFER ASSOCIATED WITH THE USER-S FET TO THE FWA OF THE 
*         TABLE, FOUND IN *LIDP*.  SEE *PPCOM* FOR THE FORMAT OF THE
*         LDT.
  
  
 INT      ENTRY 
          RJM    ILT         INTERLOCK THE LDT
          RJM    GFE         READ LENGTH OF PARAMETER BLOCK 
          CRD    FN 
  
*         TEST IF PARAMETER BLOCK LENGTH IS WITHIN FL.
  
          LDD    IR+3 
          SHN    14 
          LMD    IR+4 
          ADD    FN 
          ADN    1           INCLUDE PARAMETER BLOCK HEADER 
          SHN    -6 
          SBD    FL 
          MJN    INT1        IF PARAMETER BLOCK WITHIN FL 
          RJM    CLI         CLEAR THE LDT INTERLOCK
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 INT1     LDN    1           INITIALIZE PARAMETER BLOCK OFFSET
          STD    T2 
          LDK    LIDP        READ FWA OF LDT
          CRD    FS 
          LDD    FS          FWA OF LDT 
          RAM    INTA 
          LDD    FS+1 
          STM    INTA+1 
  
*         ENSURE THE NEW TABLE FITS WITHIN LDT-S ALLOTTED SPACE.
  
          LDD    FN 
          ZJN    INT2        IF NO PARAMETER BLOCK LENGTH SPECIFIED 
          SBD    FS+2 
          MJN    INT3        IF TABLE FITS WITHIN ALLOTTED SPACE
          ZJN    INT3        IF TABLE EXCEEDS ALLOTTED SPACE
 INT2     RJM    CLI         CLEAR THE LDT INTERLOCK
          ERROR  /ERR/LTL    RETURN INFORMATION TOO LARGE 
  
*         CALCULATE NUMBER OF CM WORDS TO READ/WRITE. 
  
 INT3     LDD    FN          REMAINING NUMBER OF CM WORDS TO PROCESS
          STD    T1 
          ADC    -LIDTL 
          MJN    INT4        IF PARAMETER BLOCK FITS IN PP BUFFER 
          ZJN    INT4        IF PARAMETER BLOCK FITS IN PP BUFFER 
          LDK    LIDTL       PROCESS ONE BUFFER OF DATA 
          STD    T1 
 INT4     RJM    GFE         CURRENT ADDRESS OF PARAMETER BLOCK 
          ADD    T2 
          CRM    LIDT,T1
          LDC    **          WRITE BUFFER TO LDT IN CM
 INTA     EQU    *-2
          CWM    LIDT,T1
          LDD    FN 
          SBD    T1 
          ZJN    INT5        IF ENTIRE PARAMETER BLOCK PROCESSED
          STD    FN 
          LDD    T1          INCREMENT ADDRESS FOR NEXT BLOCK OF DATA 
          RAM    INTA+1 
          SHN    -14
          RAM    INTA 
          LDD    T1          INCREMENT PARAMETER BLOCK OFFSET 
          RAD    T2 
          UJN    INT3        PROCESS REMAINING PARAMETER BLOCK
  
 INT5     RJM    CLI         CLEAR THE LDT INTERLOCK
          LJM    SFMX        RETURN 
 SPT      SPACE  4,10 
**        SPTF - SET PID ATTRIBUTES.
* 
*         *SPTF* CAN PERFORM A NUMBER OF DIFFERENT TASKS DEPENDING UPON 
*         THE SUBFUNCTION ISSUED WITH THIS FUNCTION.  SEE *COMCCMD* FOR 
*         THE ENTRY AND EXIT FORMATS FOR THE VARIOUS SUBFUNCTIONS.
  
  
 SPT4     RJM    CLI         CLEAR THE INTERLOCK
          ERROR  /ERR/LNL    LID/PID NOT LEGAL
  
 SPT      ENTRY 
          RJM    ILT         INTERLOCK THE LDT
          LDK    LIDP        GET LDT ADDRESS
          CRD    FS 
          LDD    FS+2 
          SBN    2
          MJN    SPT4        IF NO LDT DEFINED
          RJM    GFE
          CRD    FN 
          LDD    FN+1        CHECK NUMBER OF PIDS 
          ZJN    SPT2        IF NO PIDS 
          LDD    FN          VALIDATE SUBFUNCTION 
          SBN    MXSP 
          MJN    SPT1        IF VALID SUBFUNCTION 
          RJM    CLI         CLEAR THE LDT INTERLOCK
          ERROR  /ERR/IFC    INCORRECT SUBFUNCTION CODE 
  
*         CHECK IF PARAMETER BLOCK IS WITHIN FL.
  
 SPT1     LDD    IR+3 
          SHN    14 
          LMD    IR+4 
          ADD    FN+1 
          SHN    -6 
          SBD    FL 
          PJN    SPT2        IF PARAMETER BLOCK BEYOND FL 
          LDM    TSPT,FN     SET PROCESSOR ADDRESS
          STM    SPTA 
          RJM    *           PROCESS SUBFUNCTION
 SPTA     EQU    *-1         (PROCESSOR ADDRESS)
          RJM    CLI         CLEAR THE LDT INTERLOCK
          LDM    PERA 
          NJN    SPT3        IF ERROR DETECTED IN PARAMETER BLOCK 
          LJM    SFMX        RETURN 
  
 SPT2     RJM    CLI         CLEAR THE LDT INTERLOCK
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 SPT3     ERROR  /ERR/CPB    CHECK PARAMETER BLOCK FOR ERRORS 
          SPACE  4,10 
*         TABLE OF SUBFUNCTION PROCESSOR ADDRESSES. 
  
 TSPT     INDEX 
          INDEX  SPAF,SPA 
          INDEX  SNSF,SNS 
          INDEX  SMFF,SMF 
          INDEX  ALDF,ALD 
          INDEX  DLDF,DLD 
          INDEX  SLTF,ALD 
          INDEX  MXSP 
          TITLE  SUBROUTINES. 
 ALD      SPACE  4,15 
**        ALD - ADD LID AND/OR SET NEW LID ATTRIBUTES.
* 
*         ENTRY  (FN) = SUBFUNCTION TO BE PROCESSED.
*                (FN+1) = NUMBER OF ENTRIES TO PROCESS. 
* 
*         EXIT   ALL PARAMETER BLOCK ENTRIES PROCESSED. 
* 
*         USES   ES+2, T3, CM - CM+4, FN - FN+4.
* 
*         CALLS  FMP, GFE, RLE. 
* 
*         MACROS PERR.
  
  
 ALD      SUBR               ENTRY/EXIT 
          LDD    FN 
          LMK    ALDF 
          ZJN    ALD1        IF ADDING LID AND ATTRIBUTES 
  
*         ONLY THE LID ATTRIBUTES ARE BEING CHANGED.  SOME BRANCH 
*         ADDRESSES AND SOME FLAGS MUST BE ALTERED TO ALLOW ONLY
*         CHANGING THE ATTRIBUTES.
  
          LDC    ZJNI+ALD7-ALDA  CHANGE BRANCH ADDRESS
          STM    ALDA 
          LDC    UJNI+77-ALDB+ALD4  CHANGE BRANCH ADDRESS 
          STM    ALDB 
          SOM    ALDC 
          LDN    0           INITIALIZE PARAMETER BLOCK INDEX 
 ALD1     STD    T3 
          LDD    FN+1        NUMBER OF PARAMETER BLOCK ENTRIES
          STD    ES+2 
 ALD2     AOD    T3          INCREMENT PARAMETER BLOCK INDEX
          SBD    ES+2 
          MJN    ALD3        IF MORE ENTRIES TO PROCESS 
          NJN    ALDX        IF ALL ENTRIES PROCESSED 
 ALD3     RJM    GFE         READ PARAMETER BLOCK ENTRY 
          ADD    T3 
          CRD    FN 
          RJM    FMP         FIND MATCHING PID
          NJN    ALD6        IF MATCH 
 ALD4     PERR   /ERR/LNL    PID/LID NOT LEGAL
 ALD5     UJN    ALD2        PROCESS NEXT ENTRY 
  
 ALD6     LDD    FN+1        SET UP LID TO BE MATCHED 
          LPN    77 
          SHN    14 
          LMD    FN+2 
          SHN    14 
          STD    ES 
          SHN    -6 
          SCN    77 
          STD    ES+1 
          LDN    3-1         INDEX - 1 TO FIRST LID 
          STD    FI 
          RJM    RLE         READ LID ENTRY 
          ZJN    ALD4        IF LIDS MATCH
*         ZJN    ALD7        IF SETTING ATTRIBUTES ONLY 
 ALDA     EQU    *-1
          PJN    ALD8        IF HOLE FOUND
*         UJN    ALD4        PID/LID NOT LEGAL (SETTING ATTRIBUTES) 
 ALDB     EQU    *-1
          PERR   /ERR/LTO    LID TABLE OVERFLOW 
          UJN    ALD5        PROCESS NEXT ENTRY 
  
 ALD7     LDD    T1          SAVE LID ADDRESS 
          SHN    14 
          LMD    T2 
          ADD    T6 
          ADD    FI 
          STD    T5 
          SHN    -14
          STD    T4 
 ALD8     LDD    T4          GET LDT ENTRY
          SHN    14 
          LMD    T5 
          CRD    CM 
  
*         SET NEW LID ATTRIBUTES. 
  
          LDD    FN+3        CHECK ATTRIBUTES 
          LPC    177
          ZJN    ALD9        IF VALID ATTRIBUTES
          PERR   /ERR/ILA    INCORRECT LID ATTRIBUTE
          UJN    ALD11       PROCESS NEXT ENTRY 
  
 ALD9     LDD    FN+3 
          STD    CM+2 
          LDN    1
*         LDN    0           (SETTING NEW ATTRIBUTES ONLY)
 ALDC     EQU    *-1
          ZJN    ALD10       IF SETTING NEW ATTRIBUTES ONLY 
          LDD    ES          INSERT LID 
          STD    CM 
          LDD    ES+1 
          STD    CM+1 
 ALD10    LDD    T4          REWRITE LDT ENTRY
          SHN    14 
          LMD    T5 
          CWD    CM 
          PERR   /ERR/CMP    REQUEST COMPLETE 
 ALD11    LJM    ALD2        PROCESS NEXT ENTRY 
  
          ERRNG  37+ALDA-ALD7  ERROR IF OUT OF RANGE
          ERRNG  37+ALD4-ALDB  ERROR IF OUT OF RANGE
 CLI      SPACE  4,10 
**        CLI - CLEAR LID TABLE INTERLOCK.
* 
*         USES   FS - FS+4. 
  
  
 CLI      SUBR               ENTRY/EXIT 
          LDK    LIDP        READ LDT POINTER 
          CRD    FS 
          LDD    FS+4        CLEAR INTERLOCK BIT
          SCN    1
          STD    FS+4 
          LDC    LIDP        REWRITE POINTER WORD 
          CWD    FS 
          UJN    CLIX        RETURN 
 DLD      SPACE  4,15 
**        DLD - DELETE LID. 
* 
*         ENTRY  (FN+1) = NUMBER OF ENTRIES TO PROCESS. 
* 
*         EXIT   LID DELETED FROM LDT, IF MATCH FOUND.
* 
*         USES   T3, CN - CN+2, ES - ES+2, FN - FN+4. 
* 
*         CALLS  FMP, GFE, RLE. 
* 
*         MACROS PERR.
  
  
 DLD      SUBR               ENTRY/EXIT 
          LDN    0           INITIALIZE PARAMETER BLOCK INDEX 
          STD    T3 
          LDD    FN+1        NUMBER OF PARAMETER BLOCK ENTRIES
          STD    ES+2 
 DLD1     AOD    T3          INCREMENT PARAMETER BLOCK INDEX
          SBD    ES+2 
          MJN    DLD2        IF MORE ENTRIES TO PROCESS 
          NJN    DLDX        IF ALL ENTRIES PROCESSED 
 DLD2     RJM    GFE         READ PARAMETER BLOCK ENTRY 
          ADD    T3 
          CRD    FN 
          RJM    FMP         FIND MATCHING PID
          NJN    DLD4        IF MATCH 
          PERR   /ERR/LNL    PID/LID NOT LEGAL
 DLD3     UJN    DLD1        PROCESS NEXT ENTRY 
  
 DLD4     LDD    FN+1        SET UP LID TO BE MATCHED 
          LPN    77 
          SHN    14 
          LMD    FN+2 
          SHN    14 
          STD    ES 
          SHN    -6 
          SCN    77 
          STD    ES+1 
          LDN    3-1         INDEX - 1 TO FIRST LID 
          STD    FI 
          RJM    RLE         READ LID ENTRY 
          ZJN    DLD6        IF LIDS MATCH
          PERR   /ERR/LNL    PID/LID NOT LEGAL
 DLD5     UJN    DLD3        PROCESS NEXT ENTRY 
  
 DLD6     LDK    ZERL        CLEAR LID ENTRY
          CRD    CN 
          LDD    T1          UPDATE LDT ENTRY 
          SHN    14 
          LMD    T2 
          ADD    T6 
          ADD    FI 
          CWD    CN 
          PERR   /ERR/CMP    REQUEST COMPLETE 
          UJN    DLD3        PROCESS NEXT ENTRY 
 FMP      SPACE  4,15 
**        FMP - FIND MATCHING PID.
* 
*         ENTRY  (FN - FN+1) = PID BEING MATCHED. 
* 
*         EXIT   (A) = 0, IF NO MATCH FOUND.
*                (A) .NE. 0, IF MATCH FOUND.
*                (T1 - T2) = FWA OF LDT.
*                (T6) = TABLE OFFSET OF MATCHING PID, IF ONE FOUND. 
* 
*         USES   T1, T2, T6, CM - CM+4, CN - CN+4, FS - FS+4. 
* 
*         CALLS  CLI. 
* 
*         MACROS ERROR. 
  
  
 FMP      SUBR               ENTRY/EXIT 
          LDK    LIDP        GET LDT ADDRESS
          CRD    CM 
          LDD    CM+1        SAVE LDT ADDRESS 
          STD    T2 
          LDD    CM 
          STD    T1 
          SHN    14          READ LDT HEADER
          LMD    T2 
          CRD    CM 
          LDN    1           INITIAL LID TABLE POINTER OFFSET 
          STD    T6 
          LDD    CM+4 
          NJN    FMP1        IF PIDS DEFINED IN LDT 
          RJM    CLI         CLEAR THE LDT INTERLOCK
          ERROR  /ERR/LNL    LID/PID NOT LEGAL
  
 FMP1     LDD    T1          GET PID
          SHN    14 
          LMD    T2 
          ADD    T6 
          CRD    CM 
          ADN    1           GET SECOND WORD OF PID 
          CRD    FS 
          ADN    1           GET THIRD WORD OF PID
          CRD    CN 
  
*         CHECK FOR MATCHING PIDS.
  
          LDD    CM+1 
          LMD    FN+1 
          SCN    77 
          SHN    6
          ADD    CM 
          LMD    FN 
          NJN    FMP3        IF NO MATCH
          LDN    1           INDICATE MATCH FOUND 
 FMP2     LJM    FMPX        RETURN 
  
 FMP3     LDD    FS+4 
          ZJN    FMP2        IF ALL PIDS SEARCHED 
          RAD    T6          POINT TO NEXT PID
          UJN    FMP1        READ NEXT PID ENTRY
 ILT      SPACE  4,10 
**        ILT - INTERLOCK LID TABLE.
* 
*         EXIT   LID TABLE INTERLOCKED. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS ABORT, DELAY, MONITOR, PAUSE.
  
  
 ILT      SUBR               ENTRY/EXIT 
 ILT1     LDN    ZERL        INTERLOCK LID TABLE
          CRD    CM 
          ADK    LIDP-ZERL   FWA OF LDT 
          STD    CM+4 
          MONITOR  UTEM 
          LDD    CM+1 
          ZJN    ILTX        IF TABLE INTERLOCKED 
          DELAY 
          PAUSE 
          LDD    CM+1 
          ZJN    ILT1        IF NO ERROR FLAG 
          ABORT  /MESS/ERAB  *SFM ABORTED*
 PER      SPACE  4,10 
**        PER - PROCESS PARAMETER BLOCK ENTRY ERROR.
* 
*         ENTRY  (A) = ERROR CODE.
*                (T3) = PARAMETER BLOCK ENTRY INDEX.
* 
*         EXIT   ERROR CODE PLACED IN PARAMETER BLOCK ENTRY AND WORD
*                REWRITTEN TO USER-S FL.
*                (PERA) = ERROR CODE, IF ERROR DETECTED.
* 
*         USES   FN+4.
* 
*         CALLS  GFE. 
  
  
 PER      SUBR               ENTRY/EXIT 
          STD    FN+4 
          LMK    /ERR/CMP 
          ZJN    PER1        IF NO ERROR DETECTED 
          STM    PERA        SAVE ERROR CODE
 PER1     RJM    GFE         REWRITE PARAMETER BLOCK ENTRY
          ADD    T3          ADDRESS INDEX
          CWD    FN 
          UJN    PERX        RETURN 
  
 PERA     CON    0           ERROR CODE 
 RLE      SPACE  4,15 
**        RLE - READ LID ENTRY. 
* 
*         ENTRY  (ES - ES+1) = LID TO BE MATCHED. 
*                (FI) = INDEX - 1 TO NEXT LID.
*                (T1 - T2) = FWA OF LDT.
*                (T6) = LDT INDEX OF FIRST WORD OF PID BEING PROCESSED. 
*                (CN+4) = NUMBER OF LIDS IN THIS PID. 
* 
*         EXIT   (A) = 0, IF LIDS MATCH.
*                    .GT. 0, IF HOLE FOUND. 
*                    .LT. 0, IF NO HOLE/MATCHING LID FOUND. 
*                (T4 - T5) = LDT ADDRESS, IF HOLE FOUND.
* 
*         USES   FI, T0, T4, T5, T6, CN - CN+4. 
  
  
 RLE3     LDD    T4 
          NJN    RLEX        IF HOLE FOUND
          LCN    1           INDICATE NO HOLE/MATCHING LID FOUND
  
 RLE      SUBR               ENTRY/EXIT 
          LDD    CN+4        NUMBER OF LID SLOTS
          STD    T0 
          LDN    0           INITIALIZE FIRST HOLE POINTER
          STD    T4 
          STD    T5 
 RLE1     AOD    FI          SET INDEX TO NEXT LID ENTRY
          SOD    T0          DECREMENT LID COUNT
          MJN    RLE3        IF NO MORE LID SLOTS FOR THIS PID
          LDD    T1          READ TABLE ENTRY 
          SHN    14 
          LMD    T2 
          ADD    T6 
          ADD    FI 
          CRD    CN 
  
*         COMPARE LID TO LID ENTRY IN LDT.
  
          LDD    CN 
          ZJN    RLE2        IF NO LID PRESENT
          LMD    ES 
          NJN    RLE1        IF NO MATCH
          LDD    CN+1 
          LMD    ES+1 
          SCN    77 
          ZJN    RLEX        IF MATCH 
          UJN    RLE1        CHECK NEXT LID ENTRY 
  
*         PROCESS HOLE IN THE LDT.
  
 RLE2     LDD    T4 
          NJN    RLE1        IF PRIOR HOLE FOUND
          LDD    T1          SAVE POINTERS TO FIRST HOLE
          SHN    14 
          LMD    T2 
          ADD    T6 
          ADD    FI 
          STD    T5 
          SHN    -14
          STD    T4 
          UJN    RLE1        CHECK NEXT LID ENTRY 
 RPE      SPACE  4,15 
**        RPE - READ PID ENTRY. 
* 
*         ENTRY  (T1 - T2) = FWA OF LDT.
*                (T6) = LDT INDEX OF PID CURRENTLY BEING PROCESSED. 
*                (CM+4) = REMAINING NUMBER OF PIDS TO PROCESS.
* 
*         EXIT   (A) = 0, IF ALL PIDS HAVE BEEN PROCESSED.
*                (A) .LT. 0, IF ENABLED PID FOUND.
*                (FS - FS+4) = FIRST WORD OF PID ENTRY. 
*                (FN - FN+4) = SECOND WORD OF PID ENTRY.
*                (CN - CN+4) = THIRD WORD OF PID ENTRY. 
* 
*         USES   CM+4, T6, CN - CN+4, FN - FN+4, FS - FS+4. 
  
  
 RPE      SUBR               ENTRY/EXIT 
 RPE1     LDD    CM+4 
          ZJN    RPEX        IF ALL PIDS PROCESSED
          SOD    CM+4        DECREMENT REMAINING PID COUNT
          LDD    T1          GET FIRST WORD OF PID ENTRY
          SHN    14 
          LMD    T2 
          ADD    T6 
          CRD    FS 
          ADN    1           GET SECOND WORD OF PID ENTRY 
          CRD    FN 
          ADN    1           GET THIRD WORD OF PID ENTRY
          CRD    CN 
          LDD    FS+1 
          SHN    21-4 
          MJN    RPEX        IF PID ENABLED 
          LDD    FN+4        POINT TO NEXT PID
          RAD    T6 
          UJN    RPE1        CHECK NEXT PID 
 SMF      SPACE  4,10 
**        SMF - SET MAINFRAME DESCRIPTOR. 
* 
*         ENTRY  (FN+1) = NUMBER OF ENTRIES TO PROCESS. 
* 
*         EXIT   MAINFRAME DESCRIPTION UPDATED IN PID ENTRY IN THE LDT. 
* 
*         USES   T0, T3, FN - FN+4, FS - FS+4.
* 
*         CALLS  FMP, GFE.
* 
*         MACROS PERR.
  
  
 SMF      SUBR               ENTRY/EXIT 
          LDN    0           INITIALIZE PARAMETER BLOCK OFFSET
          STD    T3 
          LDD    FN+1        NUMBER OF PARAMETER BLOCK ENTRIES
          STD    T0 
 SMF1     AOD    T3          INCREMENT PARAMETER BLOCK OFFSET 
          SBD    T0 
          MJN    SMF2        IF MORE ENTRIES TO PROCESS 
          NJN    SMFX        IF ALL ENTRIES PROCESSED 
 SMF2     RJM    GFE         READ PARAMETER BLOCK ENTRY 
          ADD    T3 
          CRD    FN 
          RJM    FMP         FIND MATCHING PID
          NJN    SMF3        IF MATCH 
          PERR   /ERR/LNL    PID/LID NOT LEGAL
          UJN    SMF1        PROCESS NEXT ENTRY 
  
*         WRITE NEW MAINFRAME DESCRIPTION TO THE LDT. 
  
 SMF3     LDD    FN+2 
          SCN    77 
          SHN    6
          LMD    FN+1 
          SHN    6
          STD    FS 
          LDD    FN+2 
          LPN    77 
          SHN    14 
          LMD    FN+3 
          SHN    -6 
          STD    FS+1 
          LDD    FN+4 
          SCN    77 
          SHN    6
          LMD    FN+3 
          SHN    6
          STD    FS+2 
          LDD    FS+3 
          LPN    77 
          STD    FS+3 
          LDD    FN+4 
          SHN    6
          RAD    FS+3 
          LDD    T1          PID ADDRESS IN LDT 
          SHN    14 
          LMD    T2 
          ADD    T6 
          ADN    1
          CWD    FS 
          PERR   /ERR/CMP    REQUEST COMPLETE 
          LJM    SMF1        PROCESS NEXT ENTRY 
 SNS      SPACE  4,10 
**        SNS - SET NETWORK STATUS. 
* 
*         ENTRY  (FN+1) = NUMBER OF ENTRIES TO PROCESS. 
* 
*         EXIT   ALL ENTRIES IN THE PARAMETER BLOCK HAVE THEIR APPRO- 
*                PRIATE NETWORK STATUS FIELDS UPDATED.
* 
*         USES   T0, T3, FN - FN+4. 
* 
*         CALLS  CLI, FMP, GFE, UTE.
* 
*         MACROS ABORT, PERR. 
  
  
 SNS      SUBR               ENTRY/EXIT 
          LDD    FN+1        SAVE PID COUNT 
          STD    T0 
          SBN    1
          NJN    SNS1        IF MORE THAN ONE PID TO PROCESS
          LDM    SNSB        ALLOW CLEARING OF ALL PIDS OPTION
          STM    SNSA 
 SNS1     LDD    FN+2        CHECK FOR VALID NETWORK
          STD    T4          SAVE NETWORK FLAG
          ZJN    SNS2        IF NO NETWORKS SPECIFIED 
          SCN    SSNS+RHNS+NANS 
          ZJN    SNS3        IF VALID NETWORK FLAGS 
 SNS2     RJM    CLI         CLEAR THE LDT INTERLOCK
          ABORT  /MESS/ERAE  * SFM ARGUMENT ERROR.* 
  
 SNS3     STD    T3          INITIALIZE PARAMETER BLOCK INDEX 
 SNS4     AOD    T3          INCREMENT PARAMETER BLOCK INDEX
          SBD    T0 
          MJN    SNS5        IF MORE ENTRIES TO PROCESS 
          NJN    SNSX        IF ALL ENTRIES PROCESSED 
 SNS5     RJM    GFE         READ PID ENTRY 
          ADD    T3          ADD INDEX
          CRD    FN 
          UJN    SNS6        CHECK PID
  
 SNSA     EQU    *-1
*         LDD    FN+1        (IF SETTING STATUS ON ALL PIDS PERMITTED)
          SCN    77 
          SHN    6
          LMD    FN 
          LMC    3R***
          ZJN    SNS8        IF SETTING STATUS ON ALL PIDS
  
 SNS6     LDD    FN+4        CHECK FOR VALID STATUS 
          SBK    /NTS/RS3 
          MJN    SNS9        IF VALID STATUS
          SBK    /NTS/DAB-/NTS/RS3
          ERRNZ  /NTS/DAB-/NTS/RS7-1
          ZJN    SNS9        IF VALID STATUS
          PERR   /ERR/IST    INCORRECT NETWORK STATUS 
 SNS7     UJN    SNS4        PROCESS NEXT PARAMETER BLOCK ENTRY 
  
 SNS8     LDD    FN+4 
          LMK    /NTS/NAV 
          NJP    SNS2        IF NOT *NETWORK NOT AVAILABLE* 
          RJM    UTE         UPDATE ALL LDT TABLE ENTRIES 
          LJM    SNSX        RETURN 
  
 SNS9     RJM    FMP         FIND MATCHING PID
          ZJN    SNS10       IF NO MATCH
          RJM    UTE         UPDATE LDT TABLE ENTRY 
          UJN    SNS7        PROCESS NEXT PARAMETER BLOCK ENTRY 
  
 SNS10    PERR   /ERR/LNL    PID/LID NOT LEGAL
          UJN    SNS7        PROCESS NEXT PARAMETER BLOCK ENTRY 
  
 SNSB     LDD    FN+1        (USED IF *** OPTION ALLOWED) 
 SPA      SPACE  4,10 
**        SPA - SET PID ATTRIBUTES. 
* 
*         ENTRY  (FN+1) = NUMBER OF ENTRIES TO PROCESS. 
* 
*         EXIT   ALL ENTRIES IN THE PARAMETER BLOCK HAVE THEIR APPRO- 
*                PRIATE PID ATTRIBUTE FIELDS UPDATED. 
* 
*         USES   T1 - T3, T6, FN - FN+4.
* 
*         CALLS  FMP, GFE.
* 
*         MACROS PERR.
  
  
 SPA      SUBR               ENTRY/EXIT 
          LDD    FN+1        SET PID COUNT
          STD    T3 
 SPA1     RJM    GFE         GET PARAMETER WORD 
          ADD    T3 
          CRD    FN 
          RJM    FMP         FIND MATCHING PID IN LID TABLE 
          NJN    SPA2        IF PID FOUND 
          PERR   /ERR/LNL    PID/LID NOT LEGAL
          UJN    SPA3        DECREMENT PID COUNT
  
 SPA2     LDD    T1          GET PID ENTRY
          SHN    14 
          LMD    T2 
          ADD    T6 
          CRD    CM 
          LDD    CM+1        CLEAR OLD PID ATTRIBUTES 
          SCN    34 
          STD    CM+1 
          LDD    FN+4        SET PID ATTRIBUTES 
          SHN    4-13 
          LPN    34 
          RAD    CM+1 
          LDD    T1          REPLACE PID ENTRY
          SHN    14 
          LMD    T2 
          ADD    T6 
          CWD    CM 
          PERR   /ERR/CMP    REQUEST COMPLETE 
 SPA3     SOD    T3          DECREMENT PID COUNT
          NJP    SPA1        IF MORE PIDS TO PROCESS
          LJM    SPAX        RETURN 
 UTE      SPACE  4,15 
**        UTE - UPDATE LDT TABLE ENTRY. 
* 
*         ENTRY  (A) = 0, IF NETWORK STATUS OF ALL PIDS IN LDT ARE TO 
*                    BE UPDATED.
*                (A) .NE. 0, IF NETWORK STATUS OF ONLY ONE PID IS TO BE 
*                    UPDATED. 
*                (T1 - T2) = ADDRESS OF LDT ENTRY TO BE UPDATED, IF 
*        ONLY             ONE PID BEING UPDATED.
*                (T4) = NETWORK FLAG. 
*                (FN - FN+4) = CURRENT PID ENTRY BEING PROCESSED. 
*                (FN+3) = 1, IF ENABLING OR DISABLING NETWORK.
*                       = 0, IF SETTING NEW NETWORK STATUS. 
*                (FN+4) = 8/0,1/E,3/ST. 
* 
*         EXIT   THE NETWORK STATUS FIELD OF THE APPROPRIATE PID(S) HAS 
*         S) HAS BEEN UPDATED.
* 
*         USES   T1, T2, CN, CN+1, CM - CM+4, FS - FS+4.
* 
*         CALLS  CLI. 
* 
*         MACROS ABORT, PERR. 
  
  
 UTE      SUBR               ENTRY/EXIT 
          STD    CN          SAVE PID UPDATE STATUS 
          NJN    UTE1        IF UPDATING STATUS OF ONE PID
          STD    T6          INITIALIZE LDT INDEX 
          LDK    LIDP        GET FWA OF LDT 
          CRD    CM 
          LDD    CM          SET POINTER TO FIRST PID IN LDT
          SHN    14 
          LMD    CM+1 
          ADN    1
          STD    T2 
          SHN    -14
          STD    T1 
  
*         STORE APPROPRIATE NETWORK STATUS MASK AND NEW NETWORK STATUS. 
  
 UTE1     LDD    FN+3        SET APPROPRIATE MASK 
          ADC    TUTE+2 
          STM    UTEA 
          LDN    0           INITIALIZE ADDRESS FOR TABLE SEARCH
          STD    CN+1 
          STM    UTEC        CLEAR STATUS MASK
          LDD    FN+4        PRESET STATUS
          SHN    4
          RAD    FN+4 
          SCN    17 
          SHN    4
          RAD    FN+4 
 UTE2     LDM    TUTE,CN+1
          ZJN    UTE5        IF NETWORK NOT FOUND 
          LMD    T4 
          SBD    T4 
          MJN    UTE3        IF MATCH ON NETWORK
          LDM    TUTE+1,CN+1  NETWORK CLEARING MASK 
          UJN    UTE4        BUILD MASK 
  
 UTE3     LDM    TUTE+2,CN+1  STATUS
*         LDM    TUTE+3,CN+1 (ENABLE/DISABLE NETWORK) 
 UTEA     EQU    *-1
 UTE4     LMM    UTEC 
          STM    UTEC 
          LDN    TUTEL       INCREMENT NETWORK POINTER
          RAD    CN+1 
          UJN    UTE2        CHECK NEXT NETWORK 
  
 UTE5     LCN    0           FORM NEW NETWORK STATUS
          LMM    UTEC 
          STM    UTEB 
          LDD    FN+4 
          LPC    ** 
 UTEB     EQU    *-1
          STD    FN+4 
  
*         READ LDT PID ENTRY AND UPDATE APPROPRIATE NETWORK STATUS. 
  
 UTE6     LDD    T1          READ NETWORK STATUS
          SHN    14 
          LMD    T2 
          ADD    T6 
          CRD    CM 
          ADN    1           READ NEXT PID OFFSET 
          CRD    FS 
          LDD    CM+4        CLEAR CURRENT NETWORK STATUS 
          LPC    ** 
 UTEC     EQU    *-1
          LMD    FN+4        NEW NETWORK STATUS 
          STD    CM+4 
          LDD    T1          REWRITE *LDT* ENTRY
          SHN    14 
          LMD    T2 
          ADD    T6 
          CWD    CM 
          PERR   /ERR/CMP    REQUEST COMPLETED
          LDD    CN 
          NJN    UTE7        IF UPDATING ONLY ONE PID ENTRY 
          LDD    FS+4 
          ZJN    UTE7        IF NO MORE PIDS IN *LDT* 
          RAD    T6          UPDATE POINTER TO NEXT PID 
          UJN    UTE6        PROCESS NEXT PID IN *LDT*
  
 UTE7     LJM    UTEX        RETURN 
  
 TUTE     BSS    0
          CON    NANS,17,10,7         *NAM* 
 TUTEL    EQU    *-TUTE      LENGTH OF TABLE ENTRY
          CON    RHNS,360,200,160     *RHF* 
          CON    SSNS,7400,4000,3400  *SSF* 
          CON    0           END OF TABLE 
          SPACE  4,10 
**        LID TABLE BUFFER. 
  
 LIDL1    EQU    200*5       PP WORD LENGTH OF BUFFER 
 LIDL2    MIN    5*MXLDT,LIDL1  LDT PP BUFFER LENGTH
 LIDTL    EQU    LIDL2/5     CM WORD LENGTH OF BUFFER 
 LIDT     EQU    BFMS-LIDL2  LDT BUFFER ADDRESS 
  
  
          SPACE  4,10 
          ERRNG  LIDT-* 
          OVERFLOW  OVLA,EPFW 
          OVERLAY (DAYFILE TERMINATION PROCESSOR.)
 TAD      SPACE  4,15 
***       FUNCTION *TAFF* - TERMINATE ACTIVE DAYFILE. 
* 
*         SSJ= REQUIRED. A NEW FILE IS CREATED WITH A DAYFILE 
*         FORMATTED SYSTEM SECTOR AND EOI SECTOR ON EQUIPMENT, EQ.
*         THE TRACK INTERLOCK IS SET FOR THE SPECIFIED DAYFILE AND A
*         TERMINATING DAYFILE MASSAGE IS ISSUED TO FLUSH THE BUFFER 
*         AND INTERLOCK THE DAYFILE. THE TERMINATED DAYFILE IS THEN 
*         ATTACHED TO THE CONTROL POINT AS A LOCKED LIBRARY FILE AND
*         THE NEW DAYFILE IS STARTED BY WRITING ITS FST ENTRY INTO
*         THE DAYFILE POINTER AREA AND SETTING ITS TRACK INTERLOCK
*         AFTER MOVING A CREATION DATE MESSAGE INTO THE DAYFILE BUFFER. 
* 
*         THE LABEL TRACK ON THE DAYFILE DEVICE WILL BE INTERLOCKED TO
*         PREVENT PROBLEMS CAUSED BY MULTIPLE *DFTERM* RUNS.  THIS
*         INTERLOCK IS NORMALLY CLEARED BY A *CDBF* CALL.  TO ALLOW 
*         FOR A POSSIBLE ABORT OF *DFTERM*, A LOCAL FILE *ZZZZLBT* OF 
*         FILE TYPE *LIFT* WILL BE CREATED.  THIS FILE POINTS TO THE
*         INTERLOCKED LABEL.  *0DF* WILL CLEAR THE INTERLOCK WHEN 
*         THE *ZZZZLBT* FILE IS RETURNED. 
  
  
 TAD      ENTRY              ENTRY
          LDD    MA          CREATE THE *ZZZZLBT* FILE
          CWM    TADI,ON
          SBN    1
          CRD    FN 
 TAD0     LDN    NEEQ        SET THE NULL EQUIPMENT 
          STD    FS 
          LDN    2           RETURN IF NFL INCREASE PENDING 
          STM    OVL0-1 
          EXECUTE  0BF,OVL0 
          UJN    TAD0.2      CHECK FOR FNT ENTRY CREATED
  
*         PROCESS DUPLICATE FILE. 
  
          RJM    SFB         SET FILE BUSY
          NJN    TAD0.1      IF FILE BUSY REJECT
          RJM    DRF         DROP THE FILE
          UJN    TAD0        RETRY THE FILE CREATION
  
 TAD0.1   ABORT  /MESS/ERDF  * SFM DUPLICATE FILE FOUND.* 
  
 TAD0.2   ZJN    TAD0.3      IF FNT CREATED 
          LDN    NFIR 
          LJM    ERS         ENTER PP RECALL STACK
  
 TAD0.3   LDD    FA          SAVE THE FNT OFFSET
          STM    TADC 
          RJM    GFE         READ FILE NAME 
          CRD    FN 
          RJM    VFN         VERIFY FILE NAME 
          NJN    TAD1        IF FILE NAME VERIFIES
          ABORT  /MESS/ERFN  * SFM FILE NAME ERROR.*
  
 TAD1     RJM    SDT         SET DAYFILE TYPE 
          LDD    CN          SET EST ORDINAL FOR NEW DAYFILE
          STD    T5 
          ADD    TH          SET MASS STORAGE ASSIGNMENT BY *0BF* 
          STD    FS 
          LDN    0           SELECT NO RETURN WITHOUT FILE CREATED
          STM    OVL0-1 
          EXECUTE 0BF,OVL0
          UJN    TAD4        FNT/FST CREATED
  
*         PROCESS DUPLICATE FILE. 
  
          NFA    FA,R        READ FNT ENTRY 
          CRD    FS 
          LDD    FS+4        CHECK FILE TYPE
          SHN    -6 
          LMN    LIFT 
          NJN    TAD3        IF NOT LIBRARY FILE TYPE 
 TAD2     LDN    0
          STD    FA          CLEAR FNT INDEX
          ABORT  /MESS/ERDF  * SFM DUPLICATE FILE FOUND.* 
  
 TAD3     RJM    SFB         SET FILE BUSY
          NJN    TAD2        IF FILE BUSY REJECT
          RJM    DRF         DROP FILE
          LJM    TAD         RETRY FUNCTION 
  
*         BUILD DAYFILE SYSTEM SECTOR AND EOI SECTOR. 
  
 TAD4     LDD    FA          SAVE THE FNT OFFSET
          STM    TADT 
          LDC    501-DTEI-3*5 
          STD    T1 
 TAD5     LDN    0           CLEAR SYSTEM SECTOR / EOI BUFFER 
          STM    BFMS+DTEI+3*5,T1 
          SOD    T1 
          PJN    TAD5        IF NOT END OF BUFFER 
          LDD    CN          SET EST ORDINAL
          STD    T5 
          LDD    FS+1        SET FIRST TRACK
          NJN    TAD6        IF TRACK ASSIGNED
          RJM    DRF         DROP NEW DAYFILE 
          LDM    TADC 
          STD    FA 
          RJM    DRF         DROP *ZZZZLBT* FILE
          ERROR  /ERR/TKL    EC=2, MASS STORAGE NOT AVAILABLE 
  
 TAD6     STD    T6 
          LDM    TDYN-1,TY   SET DAYFILE NAME IN SYSTEM SECTOR
          STM    TADA 
          LDD    MA 
          CWM    *,ON 
 TADA     EQU    *-1
          SBN    1
          CRM    FNSS,ON
          SBN    1           SET DAYFILE NAME IN DAYFILE MESSAGE
          CRM    TADF+1,ON
          LDD    FA          SAVE FNT INDEX 
          STM    TADB 
          NFA    FA,R        SET FST INFORMATION IN SYSTEM SECTOR 
          ADN    FSTL 
          CRM    EQSS,ON
          LDN    0           CLEAR FNT INDEX
          STD    FA 
          STM    FASS 
          LDN    PDTL        SET DATE AND TIME GROUP IN EOI 
          CRM    BFMS+DTEI,TR 
  
*         WRITE SYSTEM SECTOR AND EOI SECTOR OF NEW DAYFILE.
  
          SETMS  IO 
          RJM    WSS         WRITE SYSTEM SECTOR
          RJM    WEI         WRITE EOI SECTOR 
          ENDMS 
  
*         SET EOI IN TRT AND BUILD FST FOR NEW DAYFILE. 
  
          LDD    T5          SET EQUIPMENT
          STD    CM+1 
          LDD    T6          SET FIRST TRACK
          STD    FS+2 
          LPC    3777 
          STD    CM+2 
          LDD    T7          SET SECTOR 
          STD    FS+3 
          STD    CM+3 
          MONITOR DTKM       DROP TRACKS
          RJM    WTI         SET TRACK INTERLOCK ON NEW DAYFILE 
          ZJN    TAD7        IF TRACK INTERLOCK SET 
          LJM    DPP         DROP PPU 
  
*         SET TRACK INTERLOCK ON OLD DAYFILE. 
  
 TAD7     RJM    SDA         READ DAYFILE FST 
          CRD    FN 
          LDD    FN          SET DAYFILE EST ORDINAL
          STD    T5 
          LDD    FN+1        SET DAYFILE FIRST TRACK
          STD    T6 
          LDC    **          SET FNT INDEX
 TADB     EQU    *-1         (FNT INDEX)
          STD    FA 
          RJM    STI         SET TRACK INTERLOCK
          ZJN    TAD9        IF TRACK INTERLOCK SET 
 TAD8     LDC    **          DROP NEW DAYFILE 
 TADT     EQU    *-1
          STD    FA 
          RJM    DRF
          LDM    TADC        DROP *ZZZZLBT* FILE
          STD    FA 
          RJM    DRF         DROP FILE
          ERROR  /ERR/DFB    EC=1, DAYFILE BUSY 
  
*         INTERLOCK THE LABEL TRACK TO PREVENT *1CK* FROM UPDATING
*         THE LOCAL AREA SECTOR UNTIL *DFTERM* ISSUES THE *CDBF*
*         FUNCTION.  THIS INTERLOCK IS NECESSARY ONLY WHEN ANOTHER
*         *DFTERM* IS EXECUTING AND IS TERMINATING ANOTHER DAYFILE
*         ON THE SAME DEVICE. 
  
 TAD9     RJM    LLT         LOCATE LABEL TRACK 
          STD    T2 
          RJM    WTI         SET LABEL TRACK INTERLOCK
          ZJN    TAD10       IF LABEL TRACK INTERLOCK SET 
          LDD    FN          CLEAR TRACK INTERLOCK ON OLD FILE
          STD    T5 
          LDD    FN+1 
          RJM    CTI         CLEAR TRACK INTERLOCK
          UJN    TAD8        DROP NEW FILE
  
 TAD10    LDC    **          COMPLETE THE *ZZZZLBT* FILE
 TADC     EQU    *-1
          STD    T1 
          NFA    T1,R 
          ADK    FNTL 
          CRD    CM 
          ADN    FSTL-FNTL
          CRD    CN 
          LDD    T5          SET THE EST ORDINAL
          STD    CN 
          LDD    T2          SET THE LABEL TRACK
          STD    CN+1 
          STD    CN+2 
          LDC    1005        SET THE TRACK INTERLOCK FLAG 
          STD    CN+4 
          LDC    LIFT*100    SET LIBRARY FILE TYPE
          STD    CM+4 
          NFA    T1,R 
          ADK    FNTL 
          CWD    CM 
          ADN    FSTL-FNTL
          CWD    CN 
  
*         BUILD FNT FOR OLD DAYFILE.
  
          NFA    FA,R        READ FNT 
          CRD    CN 
          LDC    LIFT*100+SSST  SET LIBRARY FILE TYPE 
          STD    CN+4 
          LDD    CN+3        SET WRITE LOCKOUT
          SCN    77 
          LMN    1
          STD    CN+3 
  
*         SET TIME IN CREATION MESSAGES FOR NEW DAYFILE.
  
          LDN    TIML        SET TIME 
          CRM    TADD,ON
  
*         TERMINATE OLD DAYFILE.
  
          LDC    2RTE        RESET MESSAGE
          STM    TADF+5 
          LDD    TY 
          LMN    ERLF 
          NJN    TAD11       IF NOT ERRLOG TERMINATION
          LDC    2R 
          UJN    TAD12       SET BLANKS 
  
 TAD11    LDM    TADF+4 
          SCN    77 
          LMN    1R 
 TAD12    STM    TADF+4 
          LDC    TADF 
          RJM    DFM         ISSUE MESSAGE TO SYSTEM DAYFILE
          LDM    TDMO-1,TY   SET PROCESSOR ADDRESS
          STD    T1 
          LJM    0,T1        SET PROCESSOR ADDRESS
  
 TAD13    LDC    JNMN+TADE   TERMINATE SYSTEM DAYFILE 
          UJN    TAD15       ISSUE MESSAGE
  
 TAD14    LDC    EJNN+TADE   TERMINATE ERRLOG DAYFILE 
 TAD15    RJM    FDB         FLUSH DAYFILE BUFFER 
          LDN    2           SET *CREATION DATE* IN MESSAGE 
          STD    T1 
          LDD    MA 
          CWM    TADH,T1
          SBD    T1 
          CRM    TADF+5,T1
          LDN    DTEL        SET DATE 
          CRM    TADG,ON
          LDN    6
          UJN    TAD17       WRITE CREATION MESSAGE TO BUFFER 
  
 TAD16    LDN    TADML       SET MESSAGE LENGTH 
          STD    CM+1 
          LDC    BMLN+TADM   TERMINATE MAINTENANCE LOG
          RJM    FDB
          LDC    DS0101      SET MAINTENANCE LOG CREATION SYMPTOM 
          STM    TADM+1 
          LDN    2
          STD    T1 
          LDD    MA          MOVE MESSAGE 
          CWM    TADM,T1
          SBN    2
          CRM    TADF,T1
          LDN    PDTL        SET DATE AND TIME IN MESSAGE 
          CRM    TADD,ON
          LDN    4           SET MESSAGE LENGTH 
          STM    TADD 
 TAD17    UJN    TAD19       WRITE CREATION MESSAGE TO BUFFER 
  
 TAD18    LDN    DTEL        TERMINATE ACCOUNT DAYFILE
          CRM    TADL,ON
          LDN    2           MOVE ACCOUNT MESSAGE 
          STD    T1 
          LDD    MA 
          CWM    TADK,T1
          LDD    MA 
          CRM    TADF,T1
          LDC    AJNN+TADE
          RJM    FDB         FLUSH DAYFILE BUFFER 
          LCN    1RE-1RB     SET *ABSY* IN MESSAGE
          RAM    TADF 
          LDN    4
 TAD19    STD    T1          SAVE WORD COUNT
          LDC    2R 
          STD    CM 
          LDD    MA          SET JOB NAME IN CREATION MESSAGES
          CWM    TADE,ON
          SBN    1
          CRD    CM+1 
          CWD    CM 
          CRM    TADE,ON
  
*         SET NEW DAYFILE FST AND WRITE MESSAGE TO BUFFER.
  
          RJM    SDA         SET DAYFILE FST ADDRESS
          SBN    1           READ DAYFILE OUT POINTER 
          CRD    CM 
          SBN    1           READ IN POINTER
          CRD    ES 
          LDD    TY          SET BUFFER INDEX 
          SHN    6
          LMN    3           CLEAR BUFFER INTERLOCK 
          STD    FS+4 
          LDN    0           SET OUT = FIRST
          STD    CM+4 
          LDD    T1          SET IN 
          STD    ES+4 
          LDD    ES+2        CLEAR THE THRESHOLD INCREMENT
          SCN    7
          STD    ES+2 
          LDD    ES          WRITE CREATION MESSAGE TO BUFFER 
          SHN    14 
          ADD    ES+1 
          CWM    TADD,T1
          LDM    TDMP-1,TY   SET PROCESSOR ADDRESS
          STD    T4 
          LJM    0,T4        PROCESS APPROPRIATE DAYFILE
  
 TAD20    LDN    7           SET BML MESSAGE LENGTH 
          STD    T3 
          STM    TADD 
          LDN    ZERL        CLEAR BML MESSAGE AREA 
          CRM    TADF,ON
          LDC    DM0400      SET SYSTEM CREATION INFORMATION ID 
          STM    TADF 
          LDC    SS0100      SET SYSTEM TITLE SYMPTOM 
          STM    TADF+1 
          LDC    TADF+5      SET INFORMATION READ ADDRESS 
          UJN    TAD22       SAVE MESSAGE ADDRESS 
  
 TAD21    LCN    1RY-1RT     CHANGE ACCOUNT MESSAGE TO *ABST* 
          RAM    TADF+1 
          LDN    ZERL        TERMINATE LINE 
          CRM    TADF+4*5,ON
          LDC    TADF+3      SET INFORMATION READ ADDRESS 
 TAD22    STM    TADQ 
          STM    TADR 
 TAD23    LDN    4           READ SYSTEM TITLE
          STD    T4 
          LDN    SYTL 
          CRM    TADF,T4
 TADQ     EQU    *-1
          RJM    CML         DETERMINE MESSAGE LENGTH 
          RJM    BWA         DETERMINE BUFFER ADDRESS 
          CWM    TADD,T3     WRITE MESSAGE TO BUFFER
          LDD    TY 
          LMN    BMLF 
          NJN    TAD24       IF NOT BML 
          LDN    5           SET BML MESSAGE LENGTH 
          STD    T3 
          STM    TADD 
          LDC    SS0101      SET SYSTEM VERSION SYMPTOM 
          STM    TADF+1 
          UJN    TAD25       PROCESS SYSTEM VERSION 
  
 TAD24    LMN    BMLF&ACCF
          NJN    TAD25       IF NOT ACCOUNT FILE
          LDN    1RV-1RT     CHANGE ACCOUNT MESSAGE TO *ABSV* 
          RAM    TADF+1 
          LDN    ZERL        TERMINATE LINE 
          CRM    TADF+2*5,ON
 TAD25    LDN    2           READ SYSTEM VERSION
          STD    T4 
          LDN    SVNL 
          CRM    TADF,T4
 TADR     EQU    *-1
          RJM    CML         DETERMINE MESSAGE LENGTH 
          RJM    BWA         DETERMINE BUFFER WORD ADDRESS
          CWM    TADD,T3     WRITE MESSAGE TO BUFFER
          RJM    SDA         SET DAYFILE POINTER ADDRESS
          SBN    2
          CWD    ES 
          ADN    1
          CWD    CM 
          ADN    1           STORE BUFFER STATUS
          CWD    FS 
  
*         WRITE FNT/FST ATTACHING OLD DAYFILE TO CONTROL POINT. 
  
          LDC    1005        SET TRACK INTERLOCK AND NOT BUSY 
          STD    FN+4 
          NFA    FA,R        STORE FNT ENTRY
          CWD    CN 
          ADN    FSTL 
          CWD    FN 
          LDD    TY 
          LMN    ERLF 
          ZJN    TAD26       IF ERRLOG
          LMN    ERLF&BMLF
          NJN    TAD27       IF NOT BML 
          AOM    TADS 
  
 TAD26    LDN    ESTP        GET NUMBER OF MASS STORAGE DEVICES+1 
          CRD    CM 
          LDD    CM+3 
          STD    LO 
          LDC    OVL0        SET MASS STORAGE LOAD ADDRESS
          STD    LA 
 TADS     LDN    1           ISSUE MESSAGE TO ERRLOG
*         LDN    2           ISSUE MESSAGE TO BML 
          RJM    IME         PROCESS MASS STORAGE 
 TAD27    LDN    0           CLEAR FNT INDEX
          STD    FA 
          LJM    SFMX        RETURN 
  
  
*         DAYFILE MESSAGES. 
  
  
 TADD     DATA   H* HH.MM.SS.*
 TADE     VFD    24/4L"SJSN",24/4HS.  ,12/SYSC
 TADF     DATA   C*  XXXXXXX TERMINATED.* 
 TADG     DATA   C* YY/MM/DD.    *
 TADH     DATA   H* CREATION DATE      *
 TADK     DATA   H*AESY, *
 TADL     DATA   C* YY/MM/DD.  *
 TADI     VFD    42/0LZZZZLBT,18/0
  
 TADM     CON    DM0406,DS0103  MAINTENANCE LOG MESSAGE 
          BSSZ   TADM+2*5-* 
 TADML    EQU    *-TADM      LENGTH OF MAINTENANCE LOG MESSAGE
 TDMO     SPACE  4,10 
**        TDMO - TABLE OF DAYFILE MESSAGE OPTIONS.
* 
*         THIS TABLE IS USED TO ISSUE THE TERMINATING 
*         DAYFILE MESSAGE TO THE CORRECT DAYFILE. 
  
  
 TDMO     BSS    0
          LOC    SDAY 
          CON    TAD13       SYSTEM DAYFILE 
          CON    TAD18       ACCOUNT DAYFILE
          CON    TAD14       ERRLOG DAYFILE 
          CON    TAD16       MAINTENANCE LOG
          LOC    *O 
 TDMP     SPACE  4,10 
**        TDMP - TABLE OF DAYFILE MESSAGE PROCESSOR OPTIONS.
* 
*         THIS TABLE IS USED TO ISSUE THE SYSTEM TITLE
*         AND VERSION TO THE CORRECT DAYFILE. 
  
  
 TDMP     BSS    0
          LOC    SDAY 
          CON    TAD23       SYSTEM DAYFILE 
          CON    TAD21       ACCOUNT DAYFILE
          CON    TAD23       ERRLOG DAYFILE 
          CON    TAD20       MAINTENANCE DAYFILE
          LOC    *O 
 BWA      SPACE  4,10 
**        BWA -  GET BUFFER WORD ADDRESS. 
* 
*         ENTRY  (ES - ES+4) = FWA OF DAYFILE BUFFER POINTER. 
*                (T3) = LENGTH OF MESSAGE.
* 
*         EXIT   (A) = ADDRESS OF FREE BUFFER WORD. 
*                (ES+4) = WORD COUNT UPDATED. 
* 
*         USES   ES+4.
  
  
 BWA      SUBR               ENTRY/EXIT 
          LDD    T3          LENGTH OF MESSAGE
          RAD    ES+4        UPDATE WORD COUNT
          LDD    ES 
          SHN    14 
          ADD    ES+1 
          ADD    ES+4        ADD TO IN POINTER
          SBD    T3 
          UJN    BWAX        RETURN 
 CML      SPACE  4,10 
**        CML - CHECK MESSAGE LENGTH. 
* 
*         ENTRY  (TY) = TYPE OF DAYFILE.
* 
*         EXIT   (T3) = MESSAGE LENGTH IF NOT BML.
* 
*         USES   T3, T4.
  
  
 CML      SUBR               ENTRY/EXIT 
          LDD    TY          CHECK DAYFILE TYPE 
          LMN    BMLF 
          ZJN    CMLX        IF BML 
          LDC    TADF+4      FIRST WORD TO CHECK FOR END
          STD    T4 
          LDN    3           PRESET MESSAGE LENGTH
          STD    T3 
 CML1     LDI    T4 
          ZJN    CMLX        IF END OF MESSAGE
          AOD    T3          INCREMENT MESSAGE LENGTH 
          LDN    5           INCREMENT END OF MESSAGE ADDRESS 
          RAD    T4 
          UJN    CML1        CHECK NEXT CM WORD 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
          LIST   X
*CALL     COMPPDI 
          LIST   *
          SPACE  4,10 
          ERRNG  OVL0-*      OVERFLOW INTO OVERLAY LOAD AREA
          SPACE  4,10 
          OVERFLOW  OVLA,EPFW 
          TTL    SFM - SYSTEM FILE MANAGER. 
          SPACE  4
          END 
