DDF 
          IDENT  DDF,DDF
          PERIPH
          BASE   M
          SST    BFMS,FNSS,EQSS,FTSS,NSSS,GQSS,FASS,DTSS
          TITLE DDF - DISPLAY DISK FILE.
*COMMENT  DDF - DISPLAY DISK FILE.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 DDF      SPACE  4,10 
***       DDF - DISPLAY DISK FILE.
* 
*         J. J. EIKUM.       73/03/13.
*         J. J. EIKUM.       78/11/24.
*         P. C. HIGGINS.     81/06/08.
*         P. C. HIGGINS.     84/05/01.
*         L. K. JACOBS.      84/10/01.
 DDF      SPACE  4,50 
***              DDF PROVIDES THE CAPABILITY TO READ AND DISPLAY THE
*         CONTENTS OF PHYSICAL DISK SECTORS.  THE CONTENTS OF THE 
*         SECTOR CAN BE CHANGED AND THE SECTOR REWRITTEN. 
* 
*                SEVERAL METHODS ARE PROVIDED TO SPECIFY THE DISK 
*         ADDRESS TO READ.  THE ADDRESS CAN BE SPECIFIED EXPLICITLY 
*         BY ENTERING THE EST ORDINAL, TRACK, AND SECTOR, OR AN FNT,
*         EJT, OR QFT ORDINAL CAN BE SPECIFIED AND THE BEGINNING OR 
*         CURRENT POSITION WILL BE DISPLAYED.  SEVERAL SCRATCH AREAS
*         ARE AVAILABLE TO STORE EST ORDINAL, TRACK, AND SECTOR 
*         WHILE READING OTHER LOCATIONS ON MASS STORAGE.  RANDOM
*         ADRESSING AND PERMANENT FILE REFERENCING COMMANDS ARE ALSO
*         PROVIDED.  DDF PROVIDES THE CAPABILITY OF PRINTING THE
*         INFORMATION DISPLAYED.
* 
*                WARNING.  SINCE THE MASS STORAGE I/O IS DONE BY DDF
*         ITSELF, THE DISPLAY MAY BLINK DURING THE ACTUAL TRANSFER, 
*         ESPECIALLY IN A BUSY SYSTEM.  IF THE DISK CHANNEL HANGS FOR 
*         ANY REASON, THE CONSOLE WILL BLANK AND THE KEYBOARD WILL BE 
*         INOPERABLE. 
* 
*                WARNING.  SOME OF THE DDF COMMANDS, THE ONES THAT
*         REQUIRE THE KEYBOARD TO BE UNLOCKED, CAN MAKE CHANGES THAT
*         MAY CAUSE THE SYSTEM TO HANG OR PERMANENT FILES TO BE LOST. 
*         THESE BAD EFFECTS MAY NOT OCCUR UNTIL SOME TIME AFTER THE 
*         CHANGES HAVE BEEN MADE AND AT THAT TIME IT MAY BE IMPOSSIBLE
*         TO UNDERSTAND WHAT HAPPENED.  ALSO, IT IS REMOTELY POSSIBLE 
*         TO BLANK THE CONSOLE WHILE USING THESE COMMANDS.  IT IS 
*         IMPORTANT THAT THE DDF USER UNDERSTAND WHAT IS BEING DONE 
*         BEFORE USING THESE COMMANDS.
 DDF      SPACE  4,10 
***       DAYFILE MESSAGES. 
* 
* 
*         * INCORRECT USER ACCESS.* = *SECURITY-UNLOCK* WAS NOT SET 
*         ON A SECURED SYSTEM.
 DDF      SPACE  4,10 
***       OPERATOR MESSAGES.
* 
* 
*         THE FOLLOWING MESSAGES MAY APPEAR AT THE CONTROL POINT. 
* 
*         * WAITING FOR MEMORY.* = DDF IS WAITING FOR CM TO STORE 
*                THE DISPLAY AND COMMAND PROCESSORS.
*         *READING EQXXX TP=XXXX CT=XXXX* = SHOWS STATUS OF CHECKOUT
*                DURING A PACK RECOVERY.
* 
* 
*         ABOVE THE COMMAND LINE, THE FOLLOWING MESSAGES MAY APPEAR.
* 
*         *FORMAT ERROR.* = A FORMAT ERROR WAS DETECTED DURING
*                TRANSLATION OF THE ENTRY.
*         *INCORRECT ENTRY.* = THE COMMAND WAS NOT LEGAL. 
*         *INCORRECT EQUIPMENT.* = THE EST ORDINAL SPECIFIED EITHER WAS 
*                NOT MASS STORAGE OR WAS A NULL EQUIPMENT.
*         *INCORRECT PARAMETER.* = THE PARAMETER IN THE ENTRY WAS 
*                INCORRECT OR TOO LARGE.
*         *REPEAT ENTRY.* = THE ENTRY WILL NOT BE CLEARED AFTER 
*                EXECUTION. 
*         *SYSTEM BUSY.* = DDF IS WAITING FOR THE SYSTEM TO PROCESS 
*                A REQUEST. 
*         * BYTE NNNN.* = THE DATA SPECIFIED IS IN BYTE NNNN. 
*         * LENGTH = NNNNNNNNB.* = THE *SKIPEI* COMMAND HAS SKIPPED 
*                NNNNNNNN (OCTAL) SECTORS.
* 
*         THE FOLLOWING MESSAGES TELL WHY THE *SCAN* COMMAND STOPPED. 
*         *LINKAGE BYTE BAD.* 
*         *SYSTEM SECTOR LINKAGE BYTE BAD.* 
*         *TRACK LINK IN WRONG SECTOR.* 
*         *WORD COUNT TOO BIG.* 
*         *TRACK NOT RESERVED.* 
* 
*         THE FOLLOWING MESSAGES MAY APPEAR DURING A PACK RECOVERY. 
*         *ERROR IN TRACK STATUS.*
*         *END OF EQUIPMENT.* 
*         *SYSTEM SECTOR IN TRACK.* 
*         *NEXT TRACK IN USE.*
* 
*         SOME COMMANDS READ SEVERAL SECTORS. IF A DISK ERROR IS
*         ENCOUNTERED WHILE PROCESSING THE COMMAND, PROCESSING STOPS
*         AND THE ERROR CODE IS DISPLAYED ON THE LEFT SCREEN. 
 DDF      SPACE  4,10 
*         COMMON DECKS. 
  
  
*CALL     COMDMAC 
*CALL     COMPMAC 
*CALL     COMSCPS 
*CALL     COMSEJT 
*CALL     COMSLFD 
*CALL     COMSPIM 
*CALL     COMSMSP 
*CALL     COMSMST 
*CALL     COMSPRD 
*CALL     COMSSSD 
*CALL     COMSZOL 
 DDF      SPACE  4,10 
**        PROGRAMS CALLED.
* 
*         DDFILE - DDF UTILITY FUNCTION PROCESSOR.
*         NOTE - (RA+2) = POINTER TO OUTPUT FILE. 
*                (RA+3) = POINTER TO *DBUF*.
*                (RA+4) = LWA+1 OF *DDFILE*.
*                (RA+5) = CPU STATUS WORD - USED TO RECEIVE FUNCTION
*                         CODE FROM *DDF*.
*                THE ASSEMBLY CONSTANT *D* (=5) IS USED TO REFERENCE
*                THESE LOCATIONS. 
 DDF      SPACE  4,50 
**        DDF LOADING SEQUENCE. 
* 
*         THE FOLLOWING SEQUENCE IS USED TO INITIALIZE *DDF*. 
* 
*         A) UPON ENTRY *DDF* BRANCHES TO *PRS*.
*                - CHECK FOR LEGAL USER.
*                - LOAD *DDFILE*. 
*                - REQUEST FL FOR CM RESIDENT TABLES AND PROCESSOR
*                  OVERLAYS.
*                - LOAD RIGHT SCREEN PROCESSOR OVERLAYS TO CM.
*         B) *PRS* BRANCHES TO *LCP*. 
*                - LOAD AND PRESET EACH COMMAND PROCESSOR OVERLAY, AND
*                  LOAD COMMAND PROCESSORS TO CM. 
*                - WRITE TABLES TO CM.
*         C) LOAD RESIDENT OVERLAY. 
*                - PRESET DIRECT CELLS AND CONSTANTS. 
*                - SET CHANNELS AND REQUEST DISPLAY.
*                - SET EQUIPMENT PARAMETERS FOR DEFAULT FAMILY-S
*                  LABEL TRACK. 
*                - CLEAR END OF SECTOR BUFFER FOR NEATER DISPLAY. 
*         D) ENTER MAIN LOOP VIA THE READ SECTOR COMMAND PROCESSOR. 
* 
*         DDF LOADING SEQUENCE DIAGRAM -
* 
*         ORIGINAL PROGRAM
* 
*         LOC PPFW(1100)----------------------------------------------
*             DDF(MAIN LOOP)
*             DLS(LEFT SCREEN DRIVER) 
*             DRS(RIGHT SCREEN DRIVER)
*         LOC RSPLA---------------------------------------------------
*             TABLES(TCEF,TCRO) 
*             LCP(LOAD COMMAND PROCESSORS)>>>>>>>>>V>>>>>V>>>>>V>>>>>V
*         LOC OVL----------------------------------V-----V-----V     V
*             PRS                                 8XB   8XC   8XD    V
*             RIGHT SCREEN PROCESSORS              .     .     .     V
*         LOC RESLA(AFTER  LONGEST-----------------.-----.-----.-----V
*               SINGLE RIGHT SCREEN                .     .     .    8XA 
*               PROCESSOR)                         .     .     .     .
*                                                  .     .     .     .
*                                                  .     .     .     .
*         LOC CPLA---------------------------------.-----.-----.-----.
*                                                  .     .     .    PRR 
*                                                  .     .     .     .
*                                                  .     .     .     .
* 
* 
*         PP STRUCTURE AFTER LOAD COMPLETE, DURING EXECUTION -
* 
*         LOC PPFW(1100)--------------------
*             DDF(MAIN LOOP)
*             DLS(LEFT SCREEN DRIVER) 
*             DRS(RIGHT SCREEN DRIVER)
*         LOC RSPLA-------------------------
*             / CURRENT   / 
*             / RIGHT     / 
*             / SCREEN    / 
*             / PROCESSOR / 
*         LOC RESLA-------------------------
*               8XA - 
*             RESIDENT
*             ROUTINES
*             PKI, ETC. 
*         LOC BFMS--------------------------
*             SECTOR BUFFER 
*         LOC CPLA--------------------------
*             / CURRENT   / 
*             / COMMAND   / 
*             / PROCESSOR / 
* 
* 
*         CM STRUCTURE AFTER LOAD COMPLETE, DURING EXECUTION -
* 
*         ORG-------------------------------------------------
*             DDFILE(CP PROGRAM)
*         DDFILE FL-------------------------------------------
*             TCEF(TABLE OF COMMAND FORMATS)
*             TCRO(TABLE OF RIGHT SCREEN PROCESSOR OVERLAYS)
*         DDFILE FL + CMTL------------------------------------
*             RIGHT SCREEN PROCESSORS 
*             COMMAND PROCESSORS(LOADED FROM OVERLAYS)
 DDF      SPACE  4,10 
****      DIRECT LOCATION ASSIGNMENTS.
  
  
 MC       EQU    T4          MASS STORAGE CHANNEL (NOT A SCRATCH CELL)
 EQ       EQU    T5          EST ORDINAL (NOT A SCRATCH CELL) 
 TK       EQU    T6          TRACK (NOT A SCRATCH CELL) 
 SC       EQU    T7          SECTOR (NOT A SCRATCH CELL)
 DK       EQU    15          DISPLAY KEYBOARD CONTROL 
*                16          SPARE
*                17          SPARE
 AB       EQU    20 - 24     ASSEMBLY BUFFER
 UI       EQU    AB+3        USER INDEX 
 RI       EQU    AB+3        RANDOM INDEX 
 BA       EQU    25 - 26     BUFFER ADDRESS 
 RC       EQU    27          REPEAT COUNT 
 SB       EQU    30          SYSTEM BUSY FLAG 
 CR       EQU    31          CHANNEL RESERVED FLAG
 RS       EQU    32          RIGHT SCREEN DISPLAY 
 TA       EQU    33          CM SYNTAX TABLE ADDRESS/100B 
 EF       EQU    34          EXECUTE FLAG 
 LT       EQU    35          LAST TRACK NUMBER ON EQUIPMENT 
 LS       EQU    36          LAST SECTOR NUMBER ON TRACK
 RT       EQU    37          CM TRT RECOVERY TABLE ADDRESS/100B 
 KE       EQU    40          KEYBOARD ENTRY 
 KI       EQU    41          KEYBOARD BUFFER INDEX
 KM       EQU    42          KEYBOARD MESSAGE POINTER 
 CA       EQU    43          CHARACTER ADDRESS
 FN       EQU    44 - 50     FILE NAME
*         EQU    51 - 57     SPARES 
 PF       EQU    60 - 64     PF CONTROL WORD
*                65          SPARE
 XC       EQU    66          X-COORDINATE (6000B, CH01 ASSUMED) 
 YC       EQU    67          Y-COORDINATE 
  
****
 DDF      SPACE  4,20 
**        DIRECT CELL USAGE.
* 
*         THE FOLLOWING DIRECT CELLS CAN BE USED AS SCRATCH LOCATIONS 
*         BY THE DISPLAY ROUTINES AND COMMAND PROCESSORS. 
* 
*         T0 - T3.
*         CM - CM+4.
*         AB - AB+4.
*         RC. 
*         YC. 
* 
*         THE FOLLOWING DIRECT CELLS CAN BE USED AS SCRATCH LOCATIONS 
*         BY THE COMMAND PROCESSORS ONLY. 
* 
*         FN - FN+4.
 DDF      TITLE  MACRO DEFINITIONS. 
*         MACRO DEFINITIONS.
 ACRDEF   SPACE  4,10 
**        ACRDEF - AUX COMMAND ROUTINE DEFINITION.
* 
*NAME     ACRDEF
* 
*         ENTRY  *NAME* = OVERLAY NAME (CM FL RESIDENT).
* 
*         DEFINES TAG *NAME_M* AS INDEX OF OVERLAY CONTROL WORD IN
*         TABLE *TCRO*. 
  
  
          PURGMAC  ACRDEF 
  
          MACRO  ACRDEF,NAM 
          CON    /NAM/NAM,NAM_L,0,NAM,0 
 .1       SET    *O-TCRO-5
          QUAL
 NAM_N    EQU    /PRESET/.1/5 
          QUAL   *
          LOC    .1/5+1 
          ENDM   ACRDEF 
 ACROVL   SPACE  4,10 
**        ACROVL - DEFINE AUX COMMAND ROUTINE OVERLAY.
* 
*NAME     ACROVL LA 
* 
*         ENTRY  *NAME* = NAME OF OVERLAY.  (CM FL RESIDENT)
*                *LA* = LOAD ADDRESS. 
* 
*         NOTE   IF THE OVERLAY IS TO USE THE RIGHT SCREEN DISPLAY
*                OVERLAY AREA, SEE COMMENTS ON USE OF THIS AREA 
*                WITH DEFINITION OF SYMBOL *ACRLA*. 
*         NOTE   TO BEGIN A SEQUENCE OF OVERLAYS, THE SYMBOL *ACRA* 
*                MUST BE UNDEFINED OR EQUAL TO ZERO.
  
  
          PURGMAC  ACROVL 
  
          MACRO  ACROVL,NAM,LA
          LOC    *O 
          BSS    0
 .A       IF     DEF,//ACRA 
 .B       IFNE   //ACRA,0 
          QUAL   *
          QUAL   PRESET 
 .1       SET    *-ACRA+4 
 "ACRA"L  EQU    .1/5 
 .CMTL    SET    .CMTL+"ACRA"L
          QUAL   *
 .A       ENDIF 
 .B       ENDIF 
          USE    NAM
 .C       IFC    NE,$NAM$$
          QUAL   PRESET 
 NAM      EQU    *
 ACRA     MICRO  1,, NAM
          QUAL   *
          QUAL
 ACRA     SET    *
          QUAL   *
          QUAL   NAM
          LOC    LA 
 NAM      EQU    *
 .C       ELSE
          QUAL
 ACRA     SET    0
          QUAL   *
 .C       ENDIF 
          ENDM   ACROVL 
 COMMAND  SPACE  4,10 
**        COMMAND - ENTER COMMAND PROCESSOR.
* 
*CMD      COMMAND 
* 
*         ENTRY  *CMD* = NAME OF COMMAND PROCESSOR. 
* 
*         NOTE - COMMAND PROCESSORS CANNOT USE LITERALS.
  
  
          PURGMAC  COMMAND
  
          MACRO  COMMAND,CMD
          LOC    *O 
          BSS    0
 .A       IF     DEF,CMDA 
          QUAL   PRESET 
 .1       SET    *-/DDF".N"/CMDA+4
 "CMDA"L  EQU    .1/5 
 .MCMDL   MAX    .MCMDL,"CMDA"L 
 .CMTL    SET    .CMTL+"CMDA"L
          QUAL   *
 .A       ENDIF 
 .B       IFC    NE,$CMD$$
          QUAL   PRESET 
 CMD      EQU    .N*10000+* 
 CMDA     MICRO  1,, CMD
          QUAL   *
 CMDA     SET    *
          LOC    CPLA 
 .B       ENDIF 
          ENDM   COMMAND
 ENTER    SPACE  4,10 
**        ENTER - ENTER SPECIAL SYNTAX. 
* 
*CMD      ENTER  (SYNTAX),D 
* 
*         ENTRY  *CMD* = NAME OF COMMAND PROCESSOR. 
*                *SYNTAX* = SYNTAX OF COMMAND.
*                IF *D* IS PRESENT, A DUMMY ENTRY IS DEFINED. 
  
  
          PURGMAC  ENTER
  
          MACRO  ENTER,CMD,SYNTAX,D 
 .A       IFC    EQ,$D$$
          CON    CMD_L*100+CMD/10000,CMD-CMD/10000*10000
 .A       ELSE
 CMD      EQU    *O 
          CON    0,0
 .A       ENDIF 
          ORG    *O-2 
 .1       SET    *
          DATA   Z$SYNTAX$
      BSSZ   10-*O+.1    FILL REMAINDER OF SYNTAX AREA (15D CHAR MAX) 
 .B       IFC    EQ,$D$$
          CON    CMD_L*100+CMD/10000,CMD-CMD/10000*10000
 .B       ELSE
          CON    0,0
 .B       ENDIF 
 .1       SET    *O-TCEF
          LOC    .1/5 
          ENDM   ENTER
 INDEX    SPACE  4,40 
**        INDEX - GENERATE INDEXED TABLE. 
*         (MODIFIED VERSION OF MACRO FROM *COMPMAC*.) 
* 
* 
*NAME     INDEX  TYPE,ADDRESS 
* 
*         ENTRY  *NAME* = TABLE NAME. 
*                *TYPE* = OFFSET INTO TABLE FOR THIS ENTRY. 
*                *ADDRESS* = CONTENTS OF THIS ENTRY.
* 
*         THIS MACRO IS INTENDED TO GENERATE TABLES WHICH ARE INDEXED 
*         BY SYMBOLIC CONSTANTS SUCH AS FILE AND JOB ORIGIN CODES.
*         IT HAS 3 CALLING SEQUENCES. 
* 
*         IF *NAME* IS PRESENT, THE FWA OF THE TABLE IS SET TO *NAME*.
* 
*         IF *ADDRESS* IS MISSING, THE TABLE IS TERMINATED WITH AN
*         *ORG* TO THE END OF THE TABLE.  THIS RESULTS IN ZERO ENTRIES
*         FOR UNDEFINED ENTRIES IN THE TABLE. 
* 
*         OTHERWISE, A TABLE ENTRY IS MADE AT *INDEX* + *TYPE* OF 
*         *ADDRESS*.
* 
*         EXAMPLE - TO GENERATE A TABLE FOR PROCESSING FILE TYPES.
* 
*TFTP     INDEX              BEGIN TABLE
* 
*         INDEX  PRFT,PRP    PROCESS PRINT FILE AT *PRP*
*         INDEX  LOFT,LOP    PROCESS LOCAL FILE AT *LOP*
* 
*         INDEX  MXFT        TERMINATE TABLE AT *TFTP*+*MXFT* 
* 
*         THE CODE PROCESSING THIS TABLE NOTES THAT - 
*         A FILE OF TYPE *MXFT* CANNOT BE PROCESSED,
*         A TABLE ENTRY = 0, CANNOT BE PROCESSED. 
* 
*         USES   SYMBOL NAME *INDEX*. 
  
  
          PURGMAC  INDEX
  
          MACRO  INDEX,A,B,C
.A IFC NE,$A$$
A BSS 0 
.1 SET A
.2 SET *O 
.A ELSE 
  ORG .2+B
  IFC NE,$C$$,2 
  LOC B 
  CON C 
  LOC .1+B
  BSS 0 
.A ENDIF
  ENDM  INDEX 
 OVERLAY  SPACE  4,10 
**        OVERLAY - DEFINE NEW OVERLAY. 
* 
*         OVERLAY ORG,(TITLE) 
* 
*         ENTRY  *ORG* = ORIGIN ADDRESS OF OVERLAY. 
*                *TITLE* = TITLE FOR OVERLAY. 
  
  
          PURGMAC OVERLAY 
  
 OVERLAY  MACRO  O,TEXT 
 .N       SET    .N+1 
          ERRNG  1R4-.N      TOO MANY OVERLAYS
 .N       MICRO  .N,1, ABCDEFGHIJKLMNOPQRSTUVWXYZ01234
          TTL    DDF/8"OVLN"".N" - TEXT 
          TITLE 
          QUAL   DDF".N"
          IDENT  8"OVLN"".N",O    TEXT
*COMMENT  DDF - TEXT
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          ORG    O
          ENDM   OVERLAY
 RSDEF    SPACE  4,10 
**        RSDEF - RIGHT SCREEN PROCESSOR DEFINITION.
* 
*NAME     RSDEF  R
* 
*         ENTRY  *NAME* = PROCESSOR OVERLAY NAME. 
*                *R* = FLAG TO INDICATE PROCESSOR IS RESIDENT, NOT
*                      AN OVERLAY.
* 
*         DEFINES TAG *NAME_N* AS INDEX OF OVERLAY CONTROL WORD IN
*         TABLE *TDPO*. 
  
  
          PURGMAC  RSDEF
  
          MACRO  RSDEF,NAM,R
 .A       IFC    EQ,$R$$
          CON    /NAM/NAM,NAM_L,0,NAM,0 
 .A       ELSE
          CON    NAM,0,0,0,0
 .A       ENDIF 
 .1       SET    *O-TCRO-5
          QUAL
 NAM_N    EQU    /PRESET/.1/5 
          QUAL   *
          LOC    .1/5+1 
          ENDM   RSDEF
 RSOVL    SPACE  4,10 
**        RSOVL - DEFINE RIGHT SCREEN DISPLAY PROCESSOR OVERLAY.
* 
*NAME     RSOVL  LA 
* 
*         ENTRY  *NAME* = NAME OF PROCESSOR.
*                *LA* = LOAD ADDRESS. 
* 
*         NOTE - THE DISPLAY PROCESSORS CANNOT USE LITERALS.
*              - THE ENTRY TO THE ROUTINE IS AT *LA*+1. 
  
  
          PURGMAC  RSOVL
  
          MACRO  RSOVL,NAM,LA 
          LOC    *O 
          BSS    0
 .A       IF     DEF,//RSPA 
          QUAL   *
          QUAL   PRESET 
 .1       SET    *-RSPA+4 
 "RSPA"L  EQU    .1/5 
 .MRSPL   MAX    .MRSPL,"RSPA"L 
 .CMTL    SET    .CMTL+"RSPA"L
          QUAL   *
 .A       ENDIF 
          USE    NAM
 .B       IFC    NE,$NAM$$
          QUAL   PRESET 
 NAM      EQU    *
 RSPA     MICRO  1,, NAM
          QUAL   *
          QUAL
 RSPA     SET    *
          QUAL   *
          QUAL   NAM
          LOC    LA 
 NAM      EQU    *
 .B       ENDIF 
          ENDM   RSOVL
 DDF      SPACE  4,20 
****      ASSEMBLY CONSTANTS. 
  
  
 CH       EQU    CHDS        DISPLAY CHANNEL
 D        EQU    5           CPU STATUS WORD
 KBUFL    EQU    32D+2       KEYBOARD BUFFER LENGTH 
 NSRA     EQU    6           NUMBER OF SCRATCH REGISTER AREAS 
 RCPC     EQU    12D         RIGHT SCREEN - COMMANDS PER COLUMN 
 MLPS     EQU    40          MAIN LOOPS PER SECOND ON CC545 
  
  
 NAME     MICRO  1,, DDF
 OVLN     MICRO  1,, X
 PNFL     EQU    0           TABLE INDEX FOR LOCAL FNT ACCESS 
 .N       SET    0           OVERLAY NUMBER 
          QUAL   PRESET 
 .1       SET    0
 .2       SET    0
          NOREF  .1,.2
 .MRSPL   SET    0           MAXIMUM RIGHT SCREEN PROCESSOR LENGTH
          NOREF  .MRSPL 
 .MCMDL   SET    0           MAXIMUM COMMAND PROCESSOR LENGTH 
          NOREF  .MCMDL 
          QUAL   *
  
****
          TITLE  MAIN PROGRAM.
 DDF      SPACE  4,10 
**        DDF - MAIN PROGRAM. 
  
  
          ORG    PPFW 
  
 DDF      BSS    0           ENTRY
          LJM    /PRESET/PRS PRESET PROGRAM 
*         CON    0,**        (IF *DDFILE* NOT LOADED BY PRESET) 
  
*         MAIN LOOP.
  
 DDF1     RJM    DLS         DISPLAY LEFT SCREEN
          DFIM   (CON RJMI)  PROCESS KEYBOARD FOR 721 
          UJN    *+2
          CON    PKI
          RJM    SYS         DISPLAY SYSTEM HEADERS 
          RJM    DRS         DISPLAY RIGHT SCREEN 
          RJM    PSS         PAUSE FOR SYSTEM 
          CFNC   THCF        TRANSFER HIDDEN TO VISIBLE, CLEAR HIDDEN 
          DCN    CH+40
          RJM    PKI         PROCESS KEYBOARD INPUT 
          RJM    RCP         RECALL COMMAND PROCESSOR IF NECESSARY
          UJN    DDF1        LOOP 
 DPP      SPACE  4,10 
**        DPP - DROP PP.
  
  
 DPP      BSS    0           ENTRY
          LDN    10          CLEAR *DIS* FLAG 
          STD    CM+4 
          LDN    CCTS 
          STD    CM+1 
          MONITOR  SJCM 
          MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT TO PP RESIDENT
 GLOBAL   SPACE  4,10 
*         GLOBAL DATA.
  
  
          DFIM   (CON C721) 
 DCTY     CON    C545        DISPLAY CONSOLE TYPE 
          DFIM   (CON T721) 
 CTOS     CON    T545        TOP OF SCREEN
          DFIM   (CON Y721-YINC)
 CBOS     CON    Y545-YINC   BOTTOM OF SCREEN 
          DFIM   (CON -YINC) SINGLE SPACE FOR 721 
 DBLS     CON    -YINC*2     DOUBLE SPACE Y-COORDINATE INCREMENT
          DFIM   (CON LN08) 
 CPFC     CON    LN13        LINE ABOVE FIRST LINE OF PFC 
          TITLE  LEFT SCREEN DISPLAY. 
***       LEFT SCREEN.
* 
*         THE LEFT SCREEN DISPLAYS INFORMATION ABOUT THE DISK 
*         AND THE CONTROL POINT.  THE LOGICAL ADDRESS ON THE DISK 
*         APPEARS FIRST.  THE LINK BYTE FROM THE TRT FOR
*         THE CURRENT TRACK IS DISPLAYED AND IS INTENSIFIED IF IT IS
*         NOT THE SAME AS THE CONTENTS OF THE LINKAGE BYTES.  THE CEN-
*         TRAL MEMORY ADDRESS, BYTE NUMBER OF THE TRT ENTRY AND 
*         RESERVATION, INTERLOCK, AND PRESERVED FILE STATUSES ARE ALSO
*         DISPLAYED.
* 
*         THE FAMILY AND PACK NAMES, AND THE CONTROL POINT
*         NUMBER AND JSN OF THE ASSOCIATED JOB ARE DISPLAYED. 
*         THE DISK-S PERMITS AND INDIRECT TRACK NUMBERS ARE SHOWN.
*         IF PRESENT, BOTH CONTROL POINT MESSAGES ARE DISPLAYED.
*         IF A DISK ERROR OCCURS, THE ERROR CODE RETURNED IN LOCATION 
*         *RDCT* BY THE DRIVER IS DISPLAYED.
* 
*         THE CONTENTS OF THE SCRATCH REGISTERS, THE PHYSICAL 
*         LOCATION, AND THE HARDWARE STATUS CODE (THE MEANING WILL VARY 
*         DEPENDING ON THE TYPE OF MASS STORAGE) ARE ALSO DISPLAYED.
* 
*         IF A PACK RECOVERY IS IN PROGRESS, THE TRACK POINTER AND
*         TRACK RECOVERY WORD ARE DISPLAYED.
 DLS      SPACE  4,15 
**        DLS - DISPLAY LEFT SCREEN.
* 
*         ENTRY  (RT) = CM RECOVERY DATA TABLE ADDRESS. 
*                       (ZERO IF RECOVERY ROUTINES NOT USED.) 
* 
*         USES   T1, T2, T3, AB - AB+4, CM - CM+4, RC, YC.
* 
*         CALLS  CTR, DOL, D2S, D4D, D6S, SNT.
* 
*         MACROS CFNC, DFIM, DISPLA, DISPHD, SFA. 
  
  
 DLS      SUBR               ENTRY/EXIT 
          CFNC   SLSF        SELECT LEFT SCREEN, SMALL CHARACTERS 
          DISPHD (DDF.  DISPLAY DISK FILE.) 
          DFIM   (CON LN06),*+1 
          LDC    LN08        OUTPUT COORDINATES 
          STD    YC 
          OAN    CH+40
          LDD    XC 
          OAN    CH+40
  
*         DISPLAY DISK ADDRESS DATA.
  
          DISPLA CH01,,( EST =) 
          LDD    EQ          DISPLAY TOP DIGIT
          SHN    -6 
          ZJN    DLS1        IF NO UPPER DIGIT
          ADN    1R0
 DLS1     OAN    CH+40
          LDD    EQ 
          RJM    D2S         DISPLAY LAST TWO DIGITS
          DISPLA CH15,,( TK = ) 
          LDD    TK 
          RJM    D4D         DISPLAY TRACK NUMBER 
          DISPLA CH30,,(ADDRESS OF TRT =) 
          LDD    TK 
          SHN    -2 
 DLSA     ADC    TRTS 
          RJM    D6S         DISPLAY TRT ADDRESS
          DISPLA ,,(BYTE) 
          LDD    TK 
          LPN    3
          ADN    1R0
          OAN    CH+40
          LCN    YINC        MOVE TO NEXT LINE
          RAD    YC 
          OAN    CH+40
          DISPLA CH01,,( TYPE = ) 
          SFA    EST,EQ      DISPLAY EQUIPMENT TYPE 
          ADK    EQDE 
          CRD    AB 
          LDD    AB+3 
          OAN    CH+40
          DISPLA CH15,,( SC = ) 
          LDD    SC 
          RJM    D4D         DISPLAY SECTOR NUMBER
          DISPLA CH30,,(CONTENTS OF TRT = ) 
          LDN    0
          STD    RC 
          RJM    SNT         GET NEXT TRACK LINK
          STD    T2 
          LDM    BFMS 
          NJN    DLS2        IF NOT EOF/EOI 
          LDM    BFMS+1 
 DLS2     SHN    6
          PJN    DLS3        IF NOT A CHAIN BYTE
          SHN    -6 
          LMD    T2 
          ZJN    DLS3        IF TRT AND CHAIN BYTE MATCH
          DFIM   (CFNC BIVF)
          PSN 
          PSN 
          LDN    3
          STD    RC 
 DLS3     LDC    CH48        OUTPUT X-COORDINATE
          OAN    CH+40
          LDD    T2 
          RJM    D4D         OUTPUT VALUE 
          DFIM   (CFNC EIVF)
          SOD    RC 
          PJN    DLS3        IF REPEAT COUNT NOT COMPLETE 
          PSN 
          PSN 
  
*         DISPLAY TRACK STATUS. 
  
          RJM    CTR         CHECK TRACK RESERVATION BIT
          STD    T2 
          MJN    DLS4        IF TRACK RESERVED
          DISPLA CH53,,(NOT),H
 DLS4     DISPLA CH57,,(RESERVED) 
          LCN    YINC 
          RAD    YC 
          OAN    CH+40
          DISPLA CH01,,( STATE = )
          LDD    AB 
          LPN    3
          SHN    1
          STD    T1 
          LDM    DLSE,T1
          OAN    CH+40
          LDM    DLSE+1,T1
          OAN    CH+40
          LDD    T2 
          SHN    21-7 
          PJN    DLS6        IF NOT FIRST TRACK PRESERVED FILE
          DISPLA CH56,,(PRESERVED)
 DLS6     LDD    T2 
          SHN    21-3 
          PJN    DLS7        IF NOT INTERLOCKED 
          LCN    YINC 
          RAD    YC 
          OAN    CH+40
          DISPLA CH54,,(INTERLOCKED)
          DFIM   (CON LN11),*+1 
 DLS7     LDC    LN15 
          OAN    CH+40
          SBN    YINC 
          STD    YC 
  
*         DISPLAY FAMILY AND PACK NAMES.
  
          DISPLA CH01,,(FAMILY = )
          SFA    EST,PF+4    DISPLAY FAMILY NAME
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADK    PFGL 
          CRD    CM 
          LDN    3
          OAM    CM,CH
          LDD    CM+3 
          SCN    77 
          OAN    CH+40
          DISPLA CH22,,( PACK = ) 
          LDN    3           DISPLAY PACK NAME
          OAM    PF,CH
          LDD    PF+3 
          SCN    77 
          OAN    CH+40
  
*         DISPLAY CONTROL POINT INFORMATION.
  
          DISPLA CH42,,( CP = ) 
          LDD    CP          DISPLAY CONTROL POINT NUMBER 
          SHN    -7 
          RJM    D2S         DISPLAY TWO DIGITS 
          DISPLA CH55,,(JSN = ) 
          LDC    0
 DLSB     EQU    *-1         (ADDRESS OF EJT ENTRY, SET BY *PRS*) 
          CRD    CM 
          LDN    2           DISPLAY JOB SEQUENCE NAME
          OAM    CM,CH
  
*         DISPLAY FIRST PERMIT AND DATA TRACK NUMBERS.
  
          LDD    YC 
          OAN    CH+40
          DISPLA CH01,,(PERMITS TRACK = ) 
          LDD    AB+4 
          SHN    3
          ADN    ALGL 
          CRD    CM 
          LDD    CM+2 
          RJM    D4D         DISPLAY TRACK NUMBER 
          DISPLA CH26,,( FIRST TRACK INDIRECT CHAIN = ) 
          LDD    CM 
          RJM    D4D         DISPLAY TRACK NUMBER 
  
*         DISPLAY CONTROL POINT MESSAGES. 
  
          LCN    YINC*2      OUTPUT COORDINATES 
          RAD    YC 
          OAN    CH+40
          LDD    XC 
          OAN    CH+40
          LDD    CP          DISPLAY FIRST MESSAGE LINE 
          ADN    MS1W 
          RJM    DOL         DISPLAY ONE LINE 
          LCN    YINC 
          RAD    YC 
          LDN    2           OUTPUT COORDINATES 
          OAM    XC,CH
          LDD    CP 
          ADN    MS2W        OUTPUT SECOND MESSAGE LINE 
          RJM    DOL         DISPLAY ONE LINE 
  
*         DISPLAY SCRATCH AREAS.
  
          LCN    YINC*2      OUTPUT COORDINATES 
          RAD    YC 
          OAN    CH+40
          DISPLA CH01,,(------------SCRATCH AREAS-------------) 
          LDM    RDCT 
          LPN    77 
          ZJN    DLS8.1      IF NO ERROR
          STD    T3 
          DFIM   (CFNC BIVF)
          PSN 
          PSN 
          LDN    3
          STD    RC 
 DLS8     DISPLA CH44,,(ERROR = ) 
          LDM    DLSD,T3
          OAN    CH+40
          DFIM   (CFNC EIVF)
          SOD    RC 
          NJN    DLS8        IF REPEAT COUNT NOT COMPLETE 
          PSN 
          PSN 
          DFIM   (LCN YINC) 
 DLS8.1   LCN    YINC*2 
          RAD    YC 
          OAN    CH+40
          DISPLA CH06,,(EST     TK      SC      COMMENT)
          LDC    SRA
          STD    T2 
          LDN    0
          STD    T3 
 DLS9     LCN    YINC 
          RAD    YC 
          OAN    CH+40
          LDD    XC 
          OAN    CH+40
          AOD    T3 
          SHN    6
          OAN    CH+40       DISPLAY SCRATCH AREA LETTER
          LDI    T2          DISPLAY EST ORDINAL
          RJM    D6S
          AOD    T2 
          LDI    T2          DISPLAY TRACK
          RJM    D6S
          AOD    T2 
          LDI    T2          DISPLAY SECTOR 
          RJM    D6S
          LDN    0
          OAN    CH+40
          LDN    2           DISPLAY COMMENT
          RAD    T2 
          LDN    4
          STD    CM 
 DLS10    LDI    T2 
          OAN    CH+40
          AOD    T2 
          SOD    CM 
          PJN    DLS10       IF MORE COMMENT
          LDD    T3 
          LMN    NSRA 
          ZJN    DLS11       IF END OF SCRATCH AREAS
          LJM    DLS9        LOOP FOR REST OF SCRATCH REGISTERS 
  
*         DISPLAY RECOVERY DATA.
  
 DLS11    LDD    RT 
          NJN    DLS12       IF RECOVERY TABLE PRESENT
          LJM    DLS14       RETURN 
  
 DLS12    LCN    YINC*2      OUTPUT COORDINATES 
          RAD    YC 
          OAN    CH+40
          DISPLA CH01,,(TRACK POINTER = ) 
          LDD    RA 
          ADD    RT 
          SHN    6
 DLSC     ADN    RCPW        READ POINTER WORD
*         ADN    ICPW        IF BUILDING INDIRECT CHAIN 
*         ADN    BSPW        IF IN *BLDSTRT.* 
          CRD    CM 
          LDD    CM 
          RJM    D4D         DISPLAY TRACK POINTER
          LCN    YINC        OUTPUT COORDINATES 
          RAD    YC 
          OAN    CH+40
          DISPLA CH01,,(TRACK RECOVERY WORD = ) 
          LDD    RA 
          ADD    RT 
          SHN    6
          ADD    TK 
          ADC    TRCT-4000
          CRD    CM 
          LDN    CM 
          STD    T3 
 DLS13    LDN    0
          OAN    CH+40
          LDI    T3 
          RJM    D4D         DISPLAY FOUR DIGITS
          AOD    T3 
          SBN    CM+5 
          MJN    DLS13       IF MORE OF WORD TO DISPLAY 
 DLS14    FJM    *,CH        IF CHANNEL FULL, WAIT
          DCN    CH+40
          LJM    DLSX        RETURN 
  
  
          LIST   G
 DLSD     EQU    *-1
          ECHO   1,ERRCODE=("DREC") 
          CON    EMN._ERRCODE  "TXT._ERRCODE" ERROR 
          LIST   *
  
 DLSE     BSS    0
          DATA   4HON 
          DATA   4HIDLE 
          DATA   4HOFF
          DATA   4HDOWN 
          TITLE  RIGHT SCREEN DISPLAY.
***       RIGHT SCREEN. 
*                THE RIGHT SCREEN DISPLAYS THE CONTENTS OF THE DISK 
*         SECTOR.  THE BYTE NUMBERS ARE THE ACTUAL BYTE NUMBERS FOR 
*         THE PHYSICAL DISK SECTOR (I.E. BYTES 0 AND 1 ARE THE CONTROL
*         BYTES).  THESE BYTE NUMBERS ARE USED IN THE MEMORY CHANGING 
*         COMMANDS. 
* 
*                THE RIGHT SCREEN IS CHANGED WITH THE RIGHT BLANK OR
*         TAB KEY.  FOR SOME DISPLAYS THE */* INCREMENTS THE ADDRESSES
*         DISPLAYED.
 DRS      SPACE  4,15 
**        DRS - DISPLAY RIGHT SCREEN. 
* 
*         ENTRY  (RS) = INDEX INTO TABLE OF RIGHT SCREEN DISPLAYS.
*                RIGHT SCREEN SELECTED - SMALL CHARACTERS.
*                CHANNEL ACTIVE.
* 
*         EXIT   TO DISPLAY ROUTINE.
*                (T3) = BFMS, BUFFER ADDRESS. 
* 
*         USES   T3.
* 
*         CALLS  LDO, RIGHT SCREEN PROCESSORS.
  
  
 DRS2     FJM    *,CH        IF CHANNEL FULL, WAIT UNTIL EMPTY
          DCN    CH+40
  
 DRS      SUBR               ENTRY/EXIT 
          LDM    DRSB        CHECK FOR OVERLAY LOADED 
          LMD    RS 
          ZJN    DRS1        IF DISPLAY UNCHANGED 
          LDD    RS 
          RJM    LDO         LOAD DISPLAY OVERLAY 
 DRS1     LDC    BFMS        SET BUFFER ADDRESS 
          STD    T3 
          LJM    **          JUMP TO DISPLAY PROCESSOR
*         LJM    RSPLA       (NOT FORMATTED DISPLAY)
*         LJM    DFD         (IF FORMATTED DISPLAY) 
 DRSA     EQU    *-1         OVERLAY CONTROL WORD FROM CM TABLE 
  
  
*         CONTROL WORD FROM CM TABLE = (DRSA).
  
*DRSA     DATA   0           ADDRESS OF LOADED DISPLAY PROCESSOR
          DATA   0           PROCESSOR LENGTH 
          CON    0,0
          DATA   0           DISPLAY INDEX
          ERRNZ  *-DRSA-5    CONTROL WORD MUST BE FIVE BYTES
  
 DRSB     CON    MXDI        CURRENTLY LOADED RIGHT SCREEN DISPLAY ID 
*                            (PRESET TO ILLEGAL ID FOR INITIALIZATION)
  
  
 DIS      HERE               DISPLAY DATA 
  
 RSPLA    BSS    0           RIGHT SCREEN PROCESSOR LOAD ADDRESS
          TITLE  CENTRAL MEMORY RESIDENT TABLES.
          USE    PRESET 
          QUAL   PRESET 
**        CM TABLES.
* 
 TCEF     SPACE  4,15 
**        TCEF - TABLE OF COMMAND ENTRY FORMATS.
* 
*         VFD    96/Z*SYNTAX* 
*         VFD    6/L,1/0,5/OVL,12/PP ADDR 
* 
*         AFTER LOAD TO CM
*         VFD    96/Z*SYNTAX* 
*         VFD    6/L,1/1,17/CM ADDR 
* 
*                L   = COMMAND PROCESSOR LENGTH (CM WORDS). 
*                OVL = LAST CHARACTER OF OVERLAY NAME.
*                PP/CM ADDR = ADDRESS OF PROCESSOR. 
  
  
 TCEF     BSS    0
          LOC    0
 ARD      ENTER  (AUTOREAD.)
 BTR      ENTER  (BEGINR.)
 BEI      ENTER  (BLDEOI.)
 BLS      ENTER  (BLDSL.) 
 BRS      ENTER  (BLDSTRT.) 
 BOT      ENTER  (BOT.) 
 CTB      ENTER  (CTB.) 
 DEP      ENTER  (DEP.) 
 DIS      ENTER  (DIS.) 
 DRP      ENTER  (DROP.)
 DTK      ENTER  (DTK.) 
 EEP      ENTER  (EEP.) 
 EET      ENTER  (EJT.) 
 EST      ENTER  (EST.) 
 EFO      ENTER  (FAMILY.)
 FPE      ENTER  (FIND.)
 FIS      ENTER  (FINDISS.) 
 FOV      ENTER  (FINDO.) 
 FST      ENTER  (FINDS.) 
 FSS      ENTER  (FINDSS.)
 EFB      ENTER  (FNT.) 
 EFL      ENTER  (FNTL.)
 EFC      ENTER  (FNTLC.) 
 GTT      ENTER  (GETTRT.)
 HOL      ENTER  (HOLD.)
 LSA      ENTER  (LOAD.)
 NAT      ENTER  (NEXTAT.)
 NSS      ENTER  (NEXTSS.)
 EPN      ENTER  (PACKNAM.) 
 PRD      ENTER  (PREAD.) 
 PTK      ENTER  (PTK.) 
 PWT      ENTER  (PWRITE.)
 EIT      ENTER  (QFT.) 
 ERA      ENTER  (RANDOM.)
 REC      ENTER  (RECOVER.) 
 SCN      ENTER  (SCAN.)
 ELS      ENTER  (SC.*.)
 ESC      ENTER  (SC.)
 SRW      ENTER  (SETRW.) 
 STP      ENTER  (SETTP.) 
 SPF      ENTER  (SHOWPF.)
 SKE      ENTER  (SKIPEI.)
 SKF      ENTER  (SKIPF.) 
 SKR      ENTER  (SKIPR.) 
 STB      ENTER  (STB.) 
 SSA      ENTER  (STORE.) 
 ETK      ENTER  (TK.)
 SCT      ENTER  (UI.)
 WRT      ENTER  (WRITE.) 
  
 TCEFA    ENTER  ( ),DUMMY  LISTING FILE COMMANDS 
 CLF      ENTER  (LISTING.) 
 OUT      ENTER  (OUT.) 
 PRT      ENTER  (PRINT.) 
 RET      ENTER  (RETURN.)
 REW      ENTER  (REWIND.)
 SID      ENTER  (SETID.) 
 SKL      ENTER  (SKIPL.) 
  
 .END     ENTER  ,DUMMY      END OF TABLE 
          QUAL
          LOC    *O 
 .1       SET    *-/PRESET/TCEF 
 TCEFL    EQU    .1/5        LENGTH OF TABLE
          QUAL   *
 TDPO     SPACE  4,10 
**        TCRO - TABLE OF CENTRAL RESIDENT OVERLAYS.
* 
*         VFD    12/ENTRY,12/L,24/ADDR,12/DI
* 
*                ENTRY = PROCESSOR ENTRY ADDRESS. 
*                L = PROCESSOR LENGTH IN CM WORDS.
*                    (L=0 IF NOT AN OVERLAY)
*                ADDR = PP ADDRESS OF CODE BEFORE LOADED TO CM. 
*                     = CM ADDRESS AFTER PRESET.
*                DI = OPTION (USUALLY A BUFFER INDEX).
  
  
 TCRO     BSS    0
          LOC    0
 DFB      RSDEF              DISPLAY SECTOR - FIVE BYTES/LINE 
 DTB      RSDEF              DISPLAY SECTOR - TEN BYTES/LINE
 DTX      RSDEF              DISPLAY SECTOR - TEXT
 DLC      RSDEF              DISPLAY LEGAL COMMANDS 
 DFD      RSDEF              DISPLAY SECTOR - FORMATTED 
 DSS      RSDEF              DISPLAY SYSTEM SECTOR FOR *DFD*
 DPE      RSDEF              DISPLAY PFC SECTOR FOR *DFD* 
 DEI      RSDEF              DISPLAY EOI SECTOR FOR *DFD* 
 MXDO     EQU    *           MAXIMUM DISPLAY OVERLAY INDEX+1
 TAR      ACRDEF             TABLE ACCESS ROUTINES (EJT, FNT, QFT)
 LRR      ACRDEF             LABEL/TRT RECONSTRUCTION SUBROUTINES 
          QUAL
          LOC    *O 
 TCRO     EQU    0+TCEFL     CM ADDRESS OF TABLE
 MXDI     EQU    DFDN+1      MAXIMUM DISPLAY INDEX FOR DISPLAY TOGGLE 
 .1       SET    *-/PRESET/TCRO 
 TCROL    EQU    .1/5        TABLE LENGTH IN CM WORDS 
          SPACE  4,10 
 .1       SET    *-/PRESET/TCEF 
 CMTL     EQU    .1/5        CM TABLE AREA LENGTH 
          QUAL   *
 .CMTL    SET    CMTL        ACCUMULATE TOTAL CM REQUIRED 
          TITLE  LOAD COMMAND PROCESSORS. 
 LCP      SPACE  4,15 
**        LCP - LOAD COMMAND PROCESSORS.
* 
*         ENTRY  FROM PRS.
*                (AB+3 - AB+4) = CM LOAD ADDRESS COMMAND PROCESSORS.
*                (RC) = 1.
*                (TA) = CM FWA FOR TABLES.
* 
*         EXIT   TO RESIDENT OVERLAY PRESET.
* 
*         USES   AB, AB+3, AB+4, RC, T1.
* 
*         CALLS  EXR, PSS.
  
  
 LCP3     LDC    CMTL        WRITE TABLES TO CM 
          STD    T1 
          LDD    RA 
          ADD    TA 
          SHN    6
          CWM    TCEF,T1
          LDC    3R8"OVLN"A  LOAD RESIDENT ROUTINES OVERLAY 
          RJM    EXR         EXECUTE OVERLAY
  
 LCP      BSS    0
 LCP1     RJM    PSS         PAUSE FOR SYSTEM 
          AOD    RC          ADVANCE OVERLAY NAME 
          SBN    .L+1 
          PJN    LCP3        IF ALL COMMAND OVERLAYS LOADED 
          LDD    RC          LOAD NEXT OVERLAY
          ADC    2L8"OVLN"
          RJM    EXR         EXECUTE OVERLAY
          LDC    TCEF-2      SET COMMAND TABLE ADDRESS
          STD    AB 
 LCP2     LDN    2           CHECK NEXT COMMAND 
          RAD    AB 
          LDI    AB 
          ZJN    LCP1        IF END OF COMMAND TABLE
          LDN    10          ADVANCE TO OVERLAY ID
          RAD    AB 
          LDI    AB 
          SHN    21-5 
          MJN    LCP2        IF PROCESSOR ALREADY LOADED
          STD    T1 
          SHN    5-21 
          LPN    37 
          LMD    RC 
          NJN    LCP2        IF COMMAND PROCESSOR NOT IN THIS OVERLAY 
          LDM    1,AB        SET PP MEMORY ADDRESS
          STM    LCPA 
          LDI    AB          SET CM ADDRESS INTO TABLE
          SCN    77 
          LMD    AB+3 
          LMN    40 
          STI    AB 
          LDD    AB+4 
          STM    1,AB 
          LDD    AB+3        WRITE PROCESSOR TO CM
          SHN    6
          ADD    RA 
          SHN    6
          ADD    AB+4 
          CWM    **,T1
 LCPA     EQU    *-1         (PP ADDRESS OF PROCESSOR)
          LDD    T1          UPDATE CM ADDRESS
          RAD    AB+4 
          SHN    -14
          RAD    AB+3 
          LJM    LCP2        LOOP 
 PSS      SPACE  4,10 
**        PSS - PAUSE FOR SYSTEM. 
* 
*         EXIT   TO *PPR*, IF ERROR FLAG SET. 
*                (CM+1) = 0 IF ERROR FLAG NOT SET.
* 
*         MACROS MONITOR, PAUSE.
  
  
 PSS      SUBR               ENTRY/EXIT 
          PAUSE 
          LDD    CM+1 
          ZJN    PSSX        IF ERROR FLAG NOT SET
          MONITOR  DPPM      DROP PP
          LJM    PPR         EXIT 
 OVL      SPACE  4,10 
**        OVL - COMMAND PROCESSOR OVERLAY LOAD ADDRESS. 
  
  
 OVL      EQU    *+5
          TITLE  PRESET PROGRAM.
 PRS      SPACE  4,10 
**        PRS - PRESET PROGRAM. 
* 
*         EXIT   TO PPR IF ANY ERRORS.
*                TO LCP TO CONTINUE PRESET. 
*                (AB+3 - AB+4) = CM LOAD ADDRESS COMMAND PROCESSORS.
*                (RC) = 1.
*                (TA) = CM FWA FOR TABLES.
*                (DDF) = 0, IF *DDFILE* NOT LOADED. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  DFM, CUA, PSS. 
* 
*         MACROS EXECUTE, MONITOR, PAUSE. 
  
  
 PRS      BSS    0
          RJM    CUA         CHECK USER ACCESS
          NJN    PRS0        IF JOB HAS NO SYSTEM ORIGIN PRIVILEGES 
          LDK    SSML 
          CRD    CM 
          LDD    CM 
          LPN    7
          ZJN    PRS1        IF UNSECURED SYSTEM
          LDK    SSTL 
          CRD    CM 
          LDD    CM 
          SHN    21-11
          MJN    PRS1        IF *SECURITY-UNLOCK* SET 
 PRS0     LDC    PRSE        * INCORRECT USER ACCESS.*
          RJM    DFM         SEND DAYFILE MESSAGE 
          MONITOR ABTM
          LJM    PPR         EXIT 
  
 PRS1     LDN    1           PRESET OVERLAY COUNTER 
          STD    RC 
          LDN    10 
          STD    CM+4 
          LDN    SCTS        SET *DIS* FLAG 
          STD    CM+1 
          MONITOR  SJCM 
 PRS2     RJM    PSS         PAUSE FOR SYSTEM 
          LDD    FL 
          NJN    PRS3        IF NONZERO FIELD LENGTH
          LDN    ZERL 
          CRD    CM 
          AOD    CM+1        REQUEST MEMORY 
          MONITOR  RSTM 
          UJN    PRS2        LOOP 
  
 PRS3     RJM    PSS         PAUSE FOR SYSTEM 
          LDN    ZERL        CLEAR CPU READY FLAG 
          CRD    CM 
          LDD    RA 
          SHN    6
          ADN    D
          CWD    CM 
          LDD    CP          WRITE CONTROL CARD TO MESSAGE AREA 
          ADN    MS1W 
          CWM    PRSB,ON
          CWD    CM 
          ADN    TFSW-MS1W-1 FETCH EJT ORDINAL
          CRD    CM 
          SFA    EJT,CM 
          STD    CM+4        SET ADDRESS OF EJT ENTRY 
          STM    DLSB 
          SHN    -14
          STD    CM+3 
          RAM    DLSB-1 
          LDN    0
          STD    CM+2 
          LDN    1S5+1       SET JOB ADVANCE
          STD    CM+1 
          LDD    MA 
          CWM    PRSF,ON
          MONITOR  UTEM 
          LDD    CM+1        CHECK *UTEM* RESPONSE
          NJP    PRS3        IF REJECT
          RJM    PSS         PAUSE
          LDN    ZERL 
          CRD    CM 
          LDD    MA          CALL *1AJ* WITH CONTROL CARD IN MS1W 
          CWM    PRSC,ON
          CWD    CM 
          EXECUTE  1AJ,=
          MONITOR  RPPM 
          LDD    CM+1 
          ZJN    PRS5        IF PP NOT ASSIGNED 
 PRS4     PAUSE              WAIT UNTIL CPU READY 
          LDD    CM+1 
          ZJN    PRS6        IF ERROR FLAG NOT SET
 PRS5     LDN    0           DISABLE LISTING FILE COMMANDS
          STM    TCEFA
          STM    DDF         INDICATE *DDFILE* NOT LOADED 
          STD    CM+1        CLEAR ERROR FLAG 
          MONITOR  CEFM 
          LDN    ZERL 
          UJN    PRS7        REQUEST STORAGE FOR COMMAND PROCESSORS 
  
 PRS6     LDD    RA          READ CPU READY FLAG
          SHN    6
          ADN    D
          CRD    CM 
          LDD    CM 
          ZJN    PRS4        IF NOT READY 
  
*         REQUEST FL FOR COMMAND PROCESORS. 
  
          LDD    RA          GET LWA+1 OF DDFILE
          SHN    6
          ADN    D-1
 PRS7     CRD    AB 
          LDD    AB+3 
          SHN    14 
          ADD    AB+4 
          ADN    77 
          SHN    -6 
          STD    TA          SET CM TABLE ADDRESS 
          SHN    6
          ADC    TCMTL+77    CM FL INCREASE REQUIRED
          SHN    -6 
          STD    AB          (AB) = REQUIRED FL 
          LDD    CP 
          ADN    MS1W 
          CWM    PRSD,TR     * WAITING FOR MEMORY.* 
 PRS8     LDN    ZERL 
          CRD    CM 
          LDD    AB          REQUEST STORAGE
          STD    CM+1 
          MONITOR  RSTM 
          RJM    PSS         PAUSE
          LDD    AB 
          LMD    FL 
          NJN    PRS8        IF MEMORY NOT OBTAINED 
  
*         LOAD DISPLAY PROCESSOR OVERLAYS TO CM.
  
          LDD    TA          INITIALIZE OVERLAY ADDRESS POINTER 
          SHN    6
          ADC    CMTL 
          STD    AB+4 
          SHN    -14
          STD    AB+3 
          LDN    0
          STD    AB 
 PRS9     LDM    TCRO+1,AB   SET WORD COUNT 
          ZJN    PRS10       IF NOT AN OVERLAY
          STD    T1 
          LDM    TCRO+3,AB   SET PP MEMORY ADDRESS
          STM    PRSA 
          LDD    AB+3        SET CM ADDRESS INTO TABLE
          STM    TCRO+2,AB
          LDD    AB+4 
          STM    TCRO+3,AB
          LDD    AB+3        WRITE PROCESSOR TO CM
          SHN    6
          ADD    RA 
          SHN    6
          ADD    AB+4 
          CWM    **,T1
 PRSA     EQU    *-1         (PP ADDRESS OF PROCESSOR)
          LDD    T1          UPDATE CM ADDRESS
          RAD    AB+4 
          SHN    -14
          RAD    AB+3 
 PRS10    LDN    5           ADVANCE INDEX
          RAD    AB 
          SBN    MXDO*5 
          PJN    PRS11       IF END OF TABLE
          LJM    PRS9        LOOP 
 PRS11    LJM    LCP         LOAD COMMAND PROCESSORS FROM OVERLAYS
  
  
 PRSB     VFD    48/8L$DDFILE.,12/0 
 PRSC     VFD    18/3R1AJ,6/0,12/2,12/0,12/4
 PRSD     DATA   C* WAITING FOR MEMORY.*
 PRSE     DATA   C* INCORRECT USER ACCESS.* 
 PRSF     VFD    12/1,6/6,42/1   SET JOB ADVANCE
          SPACE  4,10 
**        PRESET COMMON DECKS.
  
  
 QUAL$    EQU    0           DONT REQUALIFY COMMON DECKS
*CALL     COMPCUA 
 EJT$     EQU    0           DEFINE *COMPGFP* ACCESS TO EJT 
*CALL     COMPGFP 
  
  
          QUAL   *           RESUME UNQUALIFIED DEFINITIONS 
          TITLE  RIGHT SCREEN DISPLAY PROCESSOR CM RESIDENT OVERLAYS. 
 DFB      SPACE  4,10 
***              FIVE BYTES PER LINE. 
*                THE CONTENTS OF THE SECTOR ARE DISPLAYED BY CENTRAL
*                MEMORY WORD.  THE BYTE NUMBERS ARE DISPLAYED IN
*                PARENTHESIS AFTER THE CENTRAL MEMORY WORD NUMBER.
*                THE */* IS USED TO TOGGLE BETWEEN THE FIRST AND
*                SECOND HALF OF THE SECTOR.  THE NUMBER OF WORDS
*                DISPLAYED IS DETERMINED BY THE WORD COUNT IN THE 
*                CONTROL BYTES. 
 DFB      SPACE  4,15 
**        DFB - DISPLAY FIVE BYTES/LINE.
* 
*         ENTRY  CONSOLE FUNCTIONED FOR RIGHT SCREEN. 
*                (DRSA - DRSA+4) = PROCESSOR CONTROL WORD.
*                (T3) = BUFFER ADDRESS. 
* 
*         EXIT   TO DRS2. 
* 
*         USES   T3, YC, AB - AB+4. 
* 
*         CALLS  DMW, D4D, SPP. 
* 
*         MACROS DISPLA.
  
  
 DFB      RSOVL  RSPLA
          DISPHD (DDF.  5 BYTES/LINE.)
          LDM    CTOS        SET TOP OF SCREEN
          OAN    CH+40
          SBN    YINC 
          STD    YC 
          DISPLA CH01,,(LINKAGE BYTES = ) 
          LDI    T3          DISPLAY CONTROL BYTES
          RJM    D4D         DISPLAY FOUR DIGITS
          LDN    0
          OAN    CH+40
          LDM    BFMS+1 
          RJM    D4D         DISPLAY FOUR DIGITS
          RJM    SPP         SET PAGE PARAMETERS
          ZJN    DFB1        IF NO WORDS TO DISPLAY 
          STD    AB+4 
          LDM    BFMS+1      NUMBER OF WORDS IN SECTOR
          SBD    AB          - FIRST WORD NUMBER
          MJN    DFB4        IF NO DATA TO BE DISPLAYED 
          SBD    AB+4        - PAGE SIZE
          PJN    DFB2        IF FULL PAGE TO BE DISPLAYED 
          RAD    AB+4        ADJUST WORD COUNT TO DISPLAY 
 DFB1     ZJN    DFB4        IF NO DATA TO DISPLAY
 DFB2     LCN    YINC        ADVANCE Y-COORDINATE 
          RAD    YC 
          LDD    AB          SET LAST WORD NUMBER + 1 
          ADN    10 
          STD    AB+1 
          LCN    10          DECREMENT WORDS TO DISPLAY 
          RAD    AB+4 
          PJN    DFB3        IF FULL GROUP TO BE DISPLAYED
          RAD    AB+1        ADJUST LAST WORD NUMBER
          LDN    0
          STD    AB+4 
 DFB3     LDD    AB          SET FIRST BYTE NUMBER
          SHN    2           FIRST WORD NUMBER * 5
          STD    AB+2 
          LDD    AB 
          ADN    2           + 2
          RAD    AB+2        = FIRST BYTE NUMBER
          LDN    0           SET DISPLAY MODE 
          STD    AB+3 
          RJM    DMW         DISPLAY MEMORY WORDS 
          LDD    AB+4 
          NJN    DFB2        IF MORE WORDS TO DISPLAY 
 DFB4     LJM    DRS2        EXIT 
  
  
 DIS      HERE
 DTB      SPACE  4,10 
***              TEN BYTES PER LINE.
*                THE CONTENTS OF THE SECTOR ARE DISPLAYED 10B BYTES PER 
*                LINE.  THE ENTIRE SECTOR IS DISPLAYED ON THE SCREEN
*                WITH BYTE NUMBERS. 
 DTB      SPACE  4,15 
**        DTB - DISPLAY TEN BYTES/LINE
* 
*         ENTRY  CONSOLE FUNCTIONED FOR RIGHT SCREEN. 
*                (DRSA - DRSA+4) = PROCESSOR CONTROL WORD.
*                (T3) = BUFFER ADDRESS. 
* 
*         EXIT   TO DRS2. 
* 
*         USES   T2, T3, XC, YC.
* 
*         CALLS  D4D, ODC.
  
  
 DTB      RSOVL  RSPLA
          DISPHD (DDF.  10B BYTES/LINE.)
          LDC    LN05 
          STD    YC 
          LDM    DCTY        SET FIRST BYTE NUMBER
          SBK    C545 
          ZJN    DTB1        IF CC545 CONSOLE 
          LDN    0           CLEAR BOTTOM OF SCREEN ADJUSTMENT
          STM    DTBA 
          LDM    DRSA+4      CHECK PAGE NUMBER FOR 721
          LPN    1
          ZJN    DTB1        IF FIRST PAGE
          LDC    250         SET FIRST BYTE SECOND PAGE 
 DTB1     STD    T2 
  
*         OUTPUT ONE LINE.
  
 DTB2     LDN    2           OUTPUT COORDINATES 
          OAM    XC,CH
          LDD    T2 
          RJM    D4D         DISPLAY BYTE NUMBER
          LDN    7*XINC 
 DTB3     RAD    XC          OUTPUT X-COORDINATE
          OAN    CH+40
          LDM    BFMS,T2
          RJM    D4D         DISPLAY CONTENTS OF BYTE 
          AOD    T2 
          LPN    7
          ZJN    DTB4        IF END OF LINE 
          LDN    5*XINC 
          UJN    DTB3        LOOP TO DISPLAY REST OF LINE 
  
*         OUTPUT DISPLAY CODE FOR LINE. 
  
 DTB4     OAN    CH+40
          LDC    CH01        RESET X-COORDINATE 
          STD    XC 
          LDC    BFMS-10     SET ADDRESS OF FIRST BYTE
          ADD    T2 
          STD    T3 
          LDN    10          BYTES TO DISPLAY 
          RJM    ODC         OUTPUT DISPLAY CODE
          LDD    T2 
          LPN    77 
          NJN    DTB5        IF NOT NEW BLOCK 
  
*         ADVANCE Y-COORDINATE. 
  
          LCN    YINC 
          RAD    YC 
 DTB5     LCN    YINC 
          RAD    YC 
          SBM    CBOS 
 DTBA     ADN    YINC*4 
          MJN    DTB8        IF AT BOTTOM OF SCREEN 
          LDC    500-1       CHECK FOR END OF DISPLAY 
          SBD    T2 
          MJN    DTB6        IF AT BOTTOM OF SCREEN 
          LJM    DTB2        LOOP 
  
*         DISPLAY LAST TWO BYTES. 
  
 DTB6     LDN    2           OUTPUT COORDINATES 
          OAM    XC,CH
          LDD    T2          DISPLAY BYTE NUMBER
          RJM    D4D
          LDN    7*XINC 
 DTB7     RAD    XC          OUTPUT X-COORDINATE
          OAN    CH+40
          LDM    BFMS,T2     DISPLAY CONTENTS OF BYTE 
          RJM    D4D
          AOD    T2 
          LPN    1
          ZJN    DTB9        IF BOTH BYTES DISPLAYED
          LDN    5*XINC 
          UJN    DTB7        LOOP TO DISPLAY REST OF LINE 
  
 DTB8     UJN    DTB10       RETURN 
  
 DTB9     LDC    CH49        OUTPUT DISPLAY CODE FOR LAST 2 BYTES 
          OAN    CH+40
          LDC    BFMS+500 
          STD    T3 
          LDN    2
          RJM    ODC
          LDC    CH01        RESET X-COORDINATE 
          STD    XC 
 DTB10    LJM    DRS2        RETURN 
  
  
 DIS      HERE
 DTX      SPACE  4,10 
***              TEXT.
*                DISPLAYS THE CONTENTS OF THE SECTOR IN TEXT MODE.
*                THE AMOUNT OF TEXT TO DISPLAY IS DETERMINED BY THE 
*                WORD COUNT IN THE CONTROL BYTES. 
 DTX      SPACE  4,15 
**        DTX - DISPLAY TEXT. 
* 
*         ENTRY  CONSOLE FUNCTIONED FOR RIGHT SCREEN. 
*                (DRSA - DRSA+4) = PROCESSOR CONTROL WORD.
*                (T3) = BUFFER ADDRESS. 
* 
*         EXIT   TO DRS2. 
* 
*         USES   T1, T2, T3, AB, YC.
* 
*         CALLS  ODC. 
  
  
 DTX      RSOVL  RSPLA
          DISPHD (DDF.  TEXT MODE DISPLAY.) 
          LDM    CTOS 
          ADN    YINC 
          STD    YC 
          LDM    BFMS        SET WORD COUNT 
          NJN    DTX2        IF DATA TO DISPLAY 
 DTX1     LJM    DTX7        RETURN 
  
 DTX2     LDM    BFMS+1 
          STD    AB 
          LDM    DCTY        SET FIRST BYTE NUMBER
          SBK    C545 
          ZJN    DTX3        IF CC545 CONSOLE 
          LDM    DRSA+4      CHECK PAGE NUMBER FOR 721
          LPN    1
          ZJN    DTX3        IF FIRST PAGE
          LDC    -40         DECREMENT NUMBER OF WORDS TO DISPLAY 
          RAD    AB 
          MJN    DTX1        IF NO WORDS TO DISPLAY 
          LDC    240         SET FIRST BYTE SECOND PAGE 
 DTX3     ADN    2
          RAD    T3          FIRST BYTE TO DISPLAY
          LDN    0
          STD    T1 
 DTX4     LDD    XC 
 DTX5     OAN    CH+40
          LCN    YINC 
          RAD    YC 
          SBM    CBOS 
          MJN    DTX7        IF BOTTOM OF SCREEN REACHED
          LDD    YC 
          OAN    CH+40
          LDN    0           INITIALIZE LINE WORD COUNT 
          STD    T2 
 DTX6     LDD    T1 
          SBD    AB 
          ZJN    DTX7        IF ALL WORDS DISPLAYED 
          LDN    5
          RJM    ODC         OUTPUT DISPLAY CODE WORD 
          AOD    T1 
          LDM    -1,T3
          ZJN    DTX4        IF END OF TEXT LINE
          AOD    T2 
          SBN    5
          NJN    DTX6        IF NOT END OF SCREEN LINE
          LDC    CH05        CONTINUE ON NEXT LINE OF SCREEN
          UJN    DTX5        LOOP FOR REST OF LINE
  
 DTX7     LJM    DRS2        RETURN 
  
  
 DIS      HERE
 DLC      SPACE  4,10 
***              LEGAL COMMANDS.
*                DISPLAYS A LIST OF THE DDF COMMANDS. 
 DLC      SPACE  4,15 
**        DLC - DISPLAY LEGAL COMMANDS. 
* 
*         ENTRY  CONSOLE FUNCTIONED FOR RIGHT SCREEN. 
*                (DRSA - DRSA+4) = PROCESSOR CONTROL WORD.
*                (TA) = ADDRESS OF COMMAND TABLE IN CM. 
* 
*         EXIT   TO DRS2. 
* 
*         USES   T2, DK, RC, XC, YC, AB - AB+4. 
* 
*         CALLS  DOL. 
  
  
 DLC      RSOVL  RSPLA
          DISPHD (DDF.  LEGAL COMMANDS.)
          LDN    0           INITIALIZE COMMAND INDEX 
          STD    DK 
 DLC1     LDM    CTOS 
          STD    YC 
          LDN    RCPC        COMMANDS PER COLUMN
          STD    RC 
 DLC2     LDN    2           OUTPUT COORDINATES 
          OAM    XC,CH
          LDD    RA          GET ADDRESS OF COMMAND 
          ADD    TA 
          SHN    6
          ADD    DK 
          ADN    2           CHECK NEXT COMMAND 
          CRD    AB 
          SBN    2
          RJM    DOL         DISPLAY COMMAND
          LDD    AB          CHECK NEXT COMMAND 
          ZJN    DLC3        IF END OF COMMANDS 
          LCN    YINC        ADVANCE Y-COORDINATE 
          RAD    YC 
          LDN    2           ADVANCE COMMAND INDEX
          RAD    DK 
          SOD    RC 
          NJN    DLC2        IF NOT END OF COLUMN 
          LDC    13D*XINC    ADVANCE X-COORDINATE 
          RAD    XC 
          UJN    DLC1        START NEXT COLUMN
  
 DLC3     LDM    DCTY        RESET COORDINATES
          SBK    C545 
          ZJN    DLC4        IF CC545 CONSOLE 
          LDN    3*YINC 
 DLC4     SBK    3*YINC+RCPC*YINC 
          ADM    CTOS 
          STD    YC 
          LDC    CH01 
          STD    XC 
  
*         OUTPUT SPECIAL CHARACTER COMMANDS.
  
          LDC    DLCA-1 
          STD    T2 
 DLC5     LCN    YINC 
          RAD    YC 
          LDN    2
          OAM    XC,CH
 DLC6     AOD    T2          DISPLAY LINE 
          LDI    T2 
          OAN    CH+40
          LPN    77 
          NJN    DLC6        IF NOT END OF LINE 
          LDM    1,T2 
          NJN    DLC5        IF MORE LINES TO DISPLAY 
          LJM    DRS2        RETURN 
  
  
 DLCA     BSS    0
          DATA   Z*+   INCREMENT SECTOR.* 
          DATA   Z*-   DECREMENT SECTOR.* 
          DATA   Z*.   ADVANCE PAST END OF TRACK, ZERO SECTOR.* 
          DATA   Z*,   ADVANCE TO NEXT TRACK IN CHAIN.* 
          DATA   Z*=   ADVANCE PAST EOI.* 
          DATA   Z*8   INCREMENT TRACK.*
          DATA   Z*9   DECREMENT TRACK.*
          DATA   Z*/   ADVANCE RIGHT SCREEN.* 
          DATA   Z*SPACE - READ CURRENT SECTOR.*
          DATA   Z*RIGHT BLANK OR TAB - CHANGE RIGHT DISPLAY.*
          CON    0
  
  
 DIS      HERE
 DFD      SPACE  4,20 
**        DFD - DISPLAY FORMATTED DATA. 
* 
*         DETERMINES SECTOR TYPE AND CALLS APPROPRIATE FORMATTING 
*         DISPLAY PROCESSOR.
* 
*         ENTRY  CONSOLE FUNCTIONED FOR RIGHT SCREEN. 
*                (DRSA - DRSA+4) = PROCESSOR CONTROL WORD.
*                (T3) = BUFFER ADDRESS. 
* 
*         EXIT   TO DRS2. 
* 
*         USES   AB.
* 
*         CALLS  DEI, DPE, DSS, D4D, LDO. 
* 
*         MACROS DISPLA.
  
  
 DFD      RSOVL  RSPLA
          DISPHD (DDF.  FORMATTED DISPLAY.) 
          LDM    CTOS 
          OAN    CH+40
          ADM    DBLS        DOUBLE SPACE 
          ADN    YINC        BACK UP ONE
          STD    YC 
          DISPLA CH01,,(LINKAGE BYTES = ) 
          LDI    T3 
          RJM    D4D         DISPLAY FIRST BYTE 
          LDN    0
          OAN    CH+40
          STD    AB 
          LDM    BFMS+1 
          RJM    D4D         DISPLAY SECOND BYTE
          LDI    T3 
          ZJN    DFD2        IF EOF/EOI SECTOR
          LDM    BFMS+1 
          ZJN    DFD5        IF EMPTY SECTOR
          LDI    T3 
          SHN    6
          ADM    BFMS+1 
          LMC    377777 
          NJN    DFD1        IF NOT SYSTEM SECTOR 
          LDN    DSSN        SELECT SYSTEM SECTOR DISPLAY 
          UJN    DFD3        LOAD PROCESSOR 
  
 DFD1     LDN    DPEN        SELECT PFC DISPLAY 
          UJN    DFD3        LOAD PROCESSOR 
  
 DFD2     LDM    BFMS+1 
          NJN    DFD5        IF NOT EOI SECTOR
          LDN    DEIN        SELECT EOI SECTOR DISPLAY
 DFD3     LMM    DFDB 
          ZJN    DFD4        IF PROCESSOR LOADED
          LMM    DFDB 
          STM    DFDB 
          RJM    LDO         LOAD DISPLAY OVERLAY 
          LDD    CM          SET PROCESSOR ADDRESS
          STM    DFDA 
 DFD4     LJM    **          JUMP TO DISPLAY PROCESSOR
 DFDA     EQU    *-1
  
 DFD5     LJM    DRS2        RETURN 
  
  
 DFDB     DATA   0           CURRENT PROCESSOR ID 
 DCE      SPACE  4,15 
**        DCE - DISPLAY PF CATALOG ENTRY. 
* 
*         ENTRY  (AB+2) = SET FOR CALL TO DMW.
*                (T3) = BUFFER ADDRESS. 
* 
*         EXIT   DATA DISPLAYED.
* 
*         USES   T1, AB, AB+1, CM, YC.
* 
*         CALLS  DPT, DMW.
* 
*         MACROS DISPLA.
  
  
 DCE      SUBR               ENTRY/EXIT 
          LDM    CPFC        SET *DMW* PARAMETERS 
          STD    YC 
          LDN    0
          STD    AB 
          LDN    NWCE 
          STD    AB+1 
          LDC    TPFC 
          STD    AB+3 
          RJM    DMW         DISPLAY MEMORY WORDS 
  
*         DISPLAY DATES AND MODES.
  
          LDM    DBLS 
          RAD    YC 
          LPC    7777 
          OAN    CH+40
          LDC    -NWCE*5
          ADD    T3 
          STD    CM 
          DISPLA CH01,,(CREATED   ) 
          LDD    CM          DISPLAY CREATION DATE
          ADN    FCCD 
          RJM    DPT         DISPLAY PACKED DATE AND TIME 
          DISPLA CH34,,( CT = ) 
          LDM    FCCT,CM     DISPLAY FILE CATAGORY
          SHN    -6 
          STD    T1 
          LDM    DCEA,T1
          OAN    CH+40
          DISPLA ,,(    M = ) 
          LDM    FCAM,CM     DISPLAY ACCESS MODE
          LPN    77 
          STD    T1 
          LDM    DCEB,T1
          OAN    CH+40
          LCN    YINC 
          RAD    YC 
          OAN    CH+40
          DISPLA CH01,,(MODIFIED  ) 
          LDD    CM          DISPLAY MODIFICATION DATE
          ADN    FCMD 
          RJM    DPT
          DISPLA CH35,,(CONTROL   ) 
          LDD    CM          DISPLAY CONTROL CHANGE DATE
          ADN    FCKD 
          RJM    DPT
          LCN    YINC 
          RAD    YC 
          OAN    CH+40
          DISPLA CH01,,(ACCESSED  ) 
          LDD    CM          DISPLAY LAST ACCESS DATE 
          ADN    FCAD 
          RJM    DPT
          DISPLA CH35,,(UTILITY   ) 
          LDD    CM          DISPLAY UTILITY ACCESS DATE
          ADN    FCUD 
          RJM    DPT
          LJM    DCEX        RETURN 
  
  
 DCEA     DATA   2HPR        FILE CATAGORIES
          DATA   2HSP 
          DATA   2HPU 
  
 DCEB     DATA   2HWR        ACCESS MODES 
          DATA   2HRD 
          DATA   2HAP 
          DATA   2HEX 
          DATA   2H 
          DATA   2HMD 
          DATA   2HRM 
          DATA   2HRA 
 DPT      SPACE  4,10 
**        DPT - DISPLAY PACKED DATE AND TIME. 
* 
*         ENTRY  (A) = ADDRESS OF PACKED DATE AND TIME. 
* 
*         USES   T1, AB - AB+4. 
* 
*         CALLS  CDD. 
  
  
 DPT      SUBR               ENTRY/EXIT 
          STD    T1 
          LDI    T1          CONVERT YEAR 
          SHN    -6 
          SBN    30D
          PJN    DPT1        IF YEAR GREATER THAN 1999
          ADC    100D 
 DPT1     RJM    CDD
          SHN    6
          LMN    1R/
          STD    AB+1 
          SHN    -14
          LMC    2L 
          STD    AB 
          LDI    T1          CONVERT MONTH
          LPN    77 
          RJM    CDD
          STD    AB+2 
          AOD    T1 
          LDI    T1          CONVERT DAY
          SHN    -6 
          RJM    CDD
          SHN    6
          LMN    1R.
          STD    AB+4 
          SHN    -14
          LMC    2L / 
          STD    AB+3 
          LDN    5           DISPLAY * YY/MM/DD.* 
          OAM    AB,CH
          LDI    T1          CONVERT HOUR 
          LPN    77 
          RJM    CDD
          SHN    6
          LMN    1R.
          STD    AB+1 
          SHN    -14
          LMC    2L 
          STD    AB 
          AOD    T1 
          LDI    T1          CONVERT MINUTE 
          SHN    -6 
          RJM    CDD
          STD    AB+2 
          LDI    T1          CONVERT SECOND 
          LPN    77 
          RJM    CDD
          SHN    6
          LMN    1R.
          STD    AB+4 
          SHN    -14
          LMC    2L . 
          STD    AB+3 
          LDN    5           DISPLAY * HH/MM/SS.* 
          OAM    AB,CH
          LJM    DPTX        RETURN 
          SPACE  4,10 
**        *DFD* COMMON DECKS. 
  
  
*CALL     COMPCDD 
          SPACE  4,10 
*         PFC TAGS FOR DISPLAYS.
  
  
 TPFC     DATA   10H FCFN/FCUI
          DATA   10H FCLF/FCBT
          DATA   10H FCRI/FCCD
          DATA   10H FCAC/FCMD
          DATA   10H FCCT/FCAD
          DATA   10H FCKD 
          DATA   10H FCRS/FCUD
          DATA   10H FCPW/FCXD
          DATA   10H FCAF/FCAA
          DATA   10H FCAL/FCFC
          DATA   10H FCCN 
          DATA   10H FCP1 
          DATA   10H FCP2 
          DATA   10H FCTF/FCTV
          DATA   10H FCCW 
          DATA   10H FCIW 
          SPACE  4,10 
*         FNT DISPLAY TAGS. 
  
  
 TFNT     DATA   10H FNT
          DATA   10H FST
  
 DIS      HERE
          SPACE  4,10 
          QUAL
 .1       SET    *-RSPLA+4
 FDPLA    EQU    RSPLA+.1/5*5  FORMATTED DISPLAY PROCESSOR LOAD ADDRESS 
          QUAL   *
 DSS      SPACE  4,10 
***              SYSTEM SECTOR DISPLAY. 
*                IF THE SECTOR CURRENTLY IN THE BUFFER IS A SYSTEM
*                SECTOR, THE VARIOUS FIELDS THEREIN ARE DISPLAYED.
 DSS      SPACE  4,15 
**        DSS - DISPLAY SYSTEM SECTOR.
* 
*         ENTRY  FROM DFD.
*                CONSOLE FUNCTIONED FOR RIGHT SCREEN. 
*                (T3) = BUFFER ADDRESS. 
*                (YC) = Y-COORDINATE. 
* 
*         EXIT   TO DRS2. 
* 
*         USES   AB - AB+3, YC. 
* 
*         CALLS  DCE, DMW, DPT. 
* 
*         MACROS DISPLA.
  
  
 DSS      RSOVL  FDPLA
          LDN    0           DISPLAY FNT/FST
          STD    AB 
          LDN    2
          STD    AB+1 
          LDN    FNSS-BFMS
          STD    AB+2 
          LDC    /DFD/TFNT
          STD    AB+3 
          RJM    DMW         DISPLAY MEMORY WORDS 
          LDM    DBLS 
          RAD    YC 
          LPC    7777 
          OAN    CH+40
          DISPLA CH01,,(SYSTEM SECTOR.  UPDATED)
          LDC    DTSS+2      DISPLAY DATE AND TIME
          RJM    /DFD/DPT 
  
*         DISPLAY PFC ENTRY FOR DIRECT ACCESS OR FAST ATTACH FILES. 
  
          LDM    FNSS+4      CHECK FILE TYPE
          SHN    -6 
          LMN    PMFT 
          ZJN    DSS1        IF DIRECT ACCESS PERMANENT FILE
          LMN    FAFT&PMFT
          NJN    DSS2        IF NOT FAST ATTACH FILE
 DSS1     LDN    CTSS-BFMS
          STD    AB+2 
          RJM    /DFD/DCE    DISPLAY CATALOG ENTRY
 DSS2     LJM    DRS2        RETURN 
  
  
 DIS      HERE
 DPE      SPACE  4,10 
***              PFC ENTRY. 
*                THE CONTENTS OF ONE PERMANENT FILE CATALOG ENTRY ARE 
*                DISPLAYED.  THE CENTRAL MEMORY WORD NUMBER DISPLAYED 
*                IS RELATIVE TO THE BEGINNING OF THE PFC ENTRY.  THE
*                BYTE NUMBER RELATIVE TO THE BEGINNING OF THE SECTOR
*                IS DISPLAYED IN PARENTHESIS AFTER THE CM WORD NUMBER.
*                THE */* IS USED TO ADVANCE TO THE NEXT PFC ENTRY IN
*                THE SECTOR.
 DPE      SPACE  4,15 
**        DPE - DISPLAY PFC ENTRY.
* 
*         ENTRY  FROM DFD.
*                CONSOLE FUNCTIONED FOR RIGHT SCREEN. 
*                (DRSA - DRSA+4) = PROCESSOR CONTROL WORD.
*                (T3) = BUFFER ADDRESS. 
*                (YC) = Y-COORDINATE. 
* 
*         EXIT   TO DRS2. 
* 
*         USES   T2, AB+2, DRSA+4.
* 
*         CALLS  DCE, D2S.
* 
*         MACROS DISPLA.
  
  
 DPE      RSOVL  FDPLA
          LDM    DRSA+4      CHECK INDEX
          SHN    NWCES
          SBM    BFMS+1 
          PJN    DPE1        IF NOT IN SECTOR 
          ADN    NWCE-1 
          MJN    DPE2        IF END OF PFC NOT IN SECTOR
 DPE1     LDN    0
          STM    DRSA+4 
 DPE2     LCN    YINC*2 
          RAD    YC 
          OAN    CH+40
          DISPLA CH01,,(PFC ORDINAL = ) 
          LDM    DRSA+4 
          ADN    1R0
          OAN    CH+40
          LDM    DRSA+4 
          SHN    NWCES
          STD    T2 
          SHN    2
          ADD    T2 
          ADN    2
          STD    AB+2 
          RJM    /DFD/DCE    DISPLAY CATALOG ENTRY
          LJM    DRS2        RETURN 
  
  
 DIS      HERE
 DEI      SPACE  4,10 
***              EOI SECTOR DISPLAY.
*                IF THE SECTOR CURRENTLY IN THE BUFFER IS AN EOI
*                SECTOR, THE VARIOUS FIELDS THEREIN ARE DISPLAYED.
 DEI      SPACE  4,15 
**        DEI - DISPLAY EOI SECTOR. 
* 
*         ENTRY  FROM DFD.
*                CONSOLE FUNCTIONED FOR RIGHT SCREEN. 
*                (T3) = BUFFER ADDRESS. 
* 
*         EXIT   TO DRS2. 
* 
*         USES   AB - AB+3, YC. 
* 
*         CALLS  DMW, DPT.
* 
*         MACROS DISPLA.
  
  
 DEI      RSOVL  FDPLA
          LDN    0           DISPLAY FNT/FST
          STD    AB 
          LDN    2
          STD    AB+1 
          LDN    FNEI 
          STD    AB+2 
          LDC    /DFD/TFNT
          STD    AB+3 
          RJM    DMW         DISPLAY MEMORY WORDS 
          LDM    DBLS 
          RAD    YC 
          LPC    7777 
          OAN    CH+40
          DISPLA CH01,,(EOI SECTOR.  UPDATED) 
          LDC    BFMS+DTEI+2 DISPLAY DATE AND TIME
          RJM    /DFD/DPT 
          LJM    DRS2        RETURN 
  
  
 DIS      HERE
          SPACE  4,10 
          RSOVL              END OF RIGHT SCREEN PROCESSORS 
  
          QUAL   PRESET 
 .1       MAX    DSSL,DPEL,DEIL 
 .2       SET    FDPLA-RSPLA
 .MRSPL   MAX    .MRSPL,.2/5+.1 MAXIMUM TOTAL OVERLAY AREA
          QUAL   *
 MRSPL    EQU    /PRESET/.MRSPL  MAX RIGHT SCREEN PROCESSOR LENGTH
          SPACE  4,15 
**        AUXILIARY COMMAND ROUTINES ORIGIN DEFINITION. 
* 
*         THIS AREA AT THE END OF THE RIGHT SCREEN PROCESSOR OVERLAY
*         AREA MAY BE USED BY COMMAND PROCESSORS FOR EXTRA SUBROUTINES. 
*         BEFORE LOADING THE SUBROUTINES, THE COMMAND PROCESSOR MUST
*         FIRST SET THE DISPLAY INDEX (RS) TO *DFBN* TO SELECT THE
*         SHORTEST DISPLAY OVERLAY (*DFB*).  NOTE THAT THIS MUST BE 
*         DONE BEFORE EACH CALL TO REFRESH THE DISPLAY TO OVERRIDE ANY
*         KEYBOARD REQUESTS THAT CHANGE THE RIGHT SCREEN DISPLAY. 
* 
*         ** THE *DFB* DISPLAY MUST NOT USE ANY SECONDARY OVERLAYS. **
  
  
 ACRLA    EQU    RSPLA+/PRESET/DFBL*5 
 MACRL    EQU    MRSPL-/PRESET/DFBL    MAXIMUM LENGTH OF OVERLAY
          SPACE  4,10 
**        RESIDENT OVERLAY ORIGIN DEFINITION. 
* 
*         THIS OVERLAY IS LOADED ONCE AND REMAINS IN THE PP.
  
  
 RESLA    EQU    RSPLA+MRSPL*5-4  RESIDENT LOAD ADDRESS 
          SPACE  4,10 
          OVERFLOW  PPFW
          OVERLAY  RESLA,(RESIDENT ROUTINES.) 
  
          QUAL   *
          BSS    2
  
          LJM    PRR         PRESET RESIDENT ROUTINES 
  
*         ABOVE CODE MAY BE OVERLAYED BY RIGHT SCREEN PROCESSORS. 
          TITLE  KEYBOARD INPUT PROCESSING. 
***       KEYBOARD INPUT. 
*         IF THE CHARACTERS ARE THE FIRST ENTRY, THE FOLLOWING
*         APPLIES - 
*         *+* READS THE NEXT SECTOR.  IF AT EOI OR END OF THE TRACK THE 
*                CURRENT SECTOR IS REREAD.
*         *-* READS THE PREVIOUS SECTOR.  IF AT THE BEGINNING OF TRACK
*                THE CURRENT SECTOR IS REREAD.
*         *.* ADVANCES TO TRACK IN THE CONTROL BYTES AND SETS THE 
*                SECTOR TO 0.  IF THE CONTROL BYTES DO NOT CONTAIN A
*                TRACK LINK, THE CURRENT SECTOR IS REREAD.
*         *,* ADVANCES TO THE NEXT TRACK IN THE TRT CHAIN.  THE SECTOR
*                NUMBER IS NOT CHANGED.  IF CURRENTLY IN THE LAST 
*                TRACK IN THE CHAIN, THE CURRENT SECTOR IS REREAD.
*         *=* READS THE NEXT SECTOR AFTER EOI.  IF THE EOI IS AT THE
*                END OF AN EOI TRACK, THE CURRENT SECTOR IS REREAD. 
*         *CR* SETS *REPEAT ENTRY.* 
*         * * READS THE CURRENT SECTOR INTO THE BUFFER. 
*         (*) HOLDS DISPLAY.
*         *8* INCREMENTS THE TRACK NUMBER BY ONE AND READS THE SECTOR.
*         *9* DECREMENTS THE TRACK NUMBER BY ONE AND READS THE SECTOR.
*         RIGHT BLANK OR TAB CHANGES THE RIGHT SCREEN DISPLAY.
*         */* ADVANCES THE ADDRESS DISPLAYED ON THE RIGHT SCREEN. 
* 
*         ALL COMMANDS ARE DISPLAYED ON THE BOTTOM OF THE LEFT SCREEN 
*         AS THEY ARE ENTERED.
* 
*         *CR* MUST FOLLOW ALL COMMANDS BEFORE ACTION IS TAKEN. 
*         *BKSP* DELETES THE PREVIOUS CHARACTER TYPED.
*         LEFT BLANK OR BACKTAB DELETES THE CURRENT LINE BEING ENTERED. 
* 
*         COMMANDS ARE PROCESSED INTERPRETIVELY.  AFTER THE PERIOD (.)
*         ANY ALPHA-NUMERIC CHARACTERS CAN BE ENTERED, HOWEVER, THE 
*         MESSAGE *FORMAT ERROR.* OR *INCORRECT PARAMETER.* WILL APPEAR 
*         AFTER THE *CR* IS ENTERED IF AN ERROR IS MADE.
* 
*         NOTE THAT MOST COMMANDS DO NOT CAUSE A SECTOR TO ACTUALLY 
*         BE READ AND DISPLAYED.  AFTER ENTERING COMMANDS THAT CHANGE 
*         THE EQUIPMENT, TRACK, OR SECTOR A SPACE MUST BE ENTERED TO
*         READ THE SECTOR.  THIS ALLOWS DATA FROM ONE SECTOR TO BE
*         READ AND WRITTEN TO ANOTHER SECTOR. 
* 
*         AFTER A COMMAND THAT CHANGES THE EQUIPMENT OR TRACK, THE
*         TRACK AND SECTOR NUMBERS ARE CHECKED.  IF EITHER THE TRACK
*         OR SECTOR IS ILLEGAL ON THE EQUIPMENT/TRACK, IT WILL BE SET 
*         TO ZERO.
* 
 DKB      SPACE  4,10 
**        DKB - DISPLAY KEYBOARD BUFFER.
* 
*         ENTRY  (KM) = ADDRESS OF KEYBOARD MESSAGE.
*                (DK) = DISPLAY KEYBOARD CONTROL(721 ONLY). 
* 
*         EXIT   (A) = (DK), ZERO FOR CC545.
* 
*         USES   DK, T1, YC.
* 
*         MACROS CFNC, DFIM.
  
  
 DKB      SUBR               ENTRY/EXIT 
          CFNC   SLPF        SELECT LEFT PRIORITY OUTPUT
          DFIM   (CON LN51),*+1 
          LDC    LN49-YINC/2 SET Y-COORDINATE 
          STD    YC 
          DFIM   (UJN DKB1) 
  
*         DISPLAY KEYBOARD BUFFER IN MEDIUM CHARACTERS ON CC545.
  
          DCN    CH+40
          CFNC   SLMF        SELECT LEFT SCREEN, MEDIUM CHARACTERS
          LDN    4           SET INTENSIFICATION COUNT
          STD    DK 
 DKB1     LDN    2           OUTPUT COORDINATES 
          OAM    XC,CH
*         LDN    0
          STD    T1 
 DKB2     LDM    KBUF,T1
          ZJN    DKB3        IF END OF KEYBOARD LINE
          SHN    6
          ADM    KBUF+1,T1
          OAN    CH+40
          LDN    2           ADVANCE INDEX
          RAD    T1 
          SBD    KI 
          MJN    DKB2        IF NOT END OF KEYBOARD LINE
 DKB3     CFNC   EELF        ERASE TO END OF LINE 
  
*         DISPLAY KEYBOARD MESSAGE(S) IF SET. 
  
          LDN    2           OUTPUT ERROR MESSAGE LINE COORDINATE 
          OAM    DKBA,CH
          LDD    KM 
          ZJN    DKB5        IF ERROR MESSAGE NOT SET 
          STD    T1          SET MESSAGE ADDRESS
 DKB4     LDI    T1          DISPLAY MESSAGE
          OAN    CH+40
          LPN    77 
          ZJN    DKB5        IF END OF MESSAGE
          AOD    T1 
          UJN    DKB4        DISPLAY NEXT BYTE
  
 DKB5     LDD    SB 
          NJN    DKB6        IF SYSTEM BUSY FLAG CLEAR
          DISPLA ,,(SYSTEM BUSY.) 
  
*         LOOP FOR PROPER INTENSIFICATION.
  
          DFIM   (CFNC EELF)
 DKB6     SOD    DK 
          ZJN    DKB7        IF INTENSIFICATION COMPLETE
          LJM    DKB1        LOOP 
  
 DKB7     FJM    *,CH        IF CHANNEL FULL, WAIT UNTIL EMPTY
          DCN    CH+40
          LDD    DK 
          LJM    DKBX        RETURN 
  
*         COORDINATES FOR ERROR MESSAGE LINE. 
  
 DKBA     CON    CH01 
          DFIM   (CON LN50) 
          CON    LN48+YINC/2
 PKI      SPACE  4,10 
**        PKI - PROCESS KEYBOARD INPUT. 
* 
*         EXIT   TO SPECIAL CHARACTER PROCESSOR.
*                TO FIRST CHARACTER PROCESSOR.
*                TO *BSP* IF KEYBOARD BUFFER FULL.
*                TO *IKE* IF NOT A SPECIAL CHARACTER. 
* 
*         USES   DK, EF, KE, KI, T1.
* 
*         CALLS  BSP, DKB, IKE, SPECIAL CHARACTER PROCESSORS. 
  
  
 PKI8     STM    PKIA        STORE CHARACTER
 PKI9     LDN    0
          STD    DK 
 PKIX     RJM    DKB         DISPLAY KEYBOARD LINE
          NJN    PKI1        IF INPUT NOT COMPLETE
  
          LJM    *           ENTRY/EXIT 
 PKI      EQU    *-1
*PKI      SUBR               ENTRY/EXIT 
          LDN    0
          STD    DK 
 PKI1     CFNC   SKIF        SELECT KEYBOARD INPUT
          IAN    CH+40
          DCN    CH+40
          STD    KE 
          ZJN    PKI8        IF NO INPUT
          DFIM   (UJN PKI3) 
          LDC    60B         PRESET TO *CR* 
 PKIA     EQU    *-1
          ZJN    PKI2        IF NO PREVIOUS CHARACTER 
          SOM    PKIB        DECREMENT COUNTER
          NJN    PKI9        IF DELAY NOT ELAPSED 
          LDN    20          SET REPEAT DELAY 
 PKI2     LMN    24          SET INITIAL DELAY
          STM    PKIB 
 PKI3     LDD    KE 
          STM    PKIA 
          SBN    63 
          PJN    PKI9        IF ILLEGAL CHARACTER 
          ADN    63-1R8 
          MJN    PKI7        IF NOT SPECIAL FIRST CHARACTER 
          LDD    KI 
          NJN    PKI4        IF NOT FIRST CHARACTER 
          LDM    PKIC-1R8,KE GET ADDRESS OF PROCESSOR 
          STD    T1 
          UJN    PKI5        PROCESS COMMAND
  
 PKI4     LDD    KE 
          SBN    53 
          MJN    PKI7        IF NOT SPECIAL CHARACTER 
          LDM    PKID-53,KE  GET ADDRESS OF PROCESSOR 
          STD    T1 
 PKI5     LJM    0,T1        PROCESS COMMAND
  
 PKI6     LDN    1R          REPLACE CODE FOR SPACE 
          STD    KE 
 PKI7     LDN    0           CLEAR EXECUTE FLAG 
          STD    EF 
          LDD    KE 
          STM    KBUF,KI
          AOD    DK 
          AOD    KI 
          LMK    KBUFL-1
          NJN    IKE         IF BUFFER NOT FULL 
          LJM    BSP         DELETE LAST CHARACTER ENTERED
  
  
 PKIB     CON    1           DELAY COUNT
 PKIC     SPACE  4,10 
*         TABLE OF SPECIAL FIRST CHARACTERS.
  
  
 PKIC     BSS    0
          LOC    1R8
          CON    ITN         8 - INCREMENT TRACK NUMBER 
          CON    DTN         9 - DECREMET TRACK NUMBER
          CON    AOS         + - ADVANCE ONE SECTOR 
          CON    BOS         - - BACKUP ONE SECTOR
          CON    DDC         * - DROP DISPLAY CHANNEL 
          CON    IRD         / - INCREMENT RIGHT DISPLAY
          CON    PKIX        (
          CON    PKIX        )
          CON    CMB         LEFT BLANK - CLEAR MESSAGE AND KEYBOARD
          CON    APE         = - ADVANCE PAST EOI 
          CON    RRD         RIGHT BLANK - ROTATE RIGHT DISPLAY 
          CON    AOT         , - ADVANCE ONE TRACK
          CON    ATZ         . - ADVANCE ONE TRACK AND ZERO SECTOR NO.
          CON    SRE         CR - SET REPEAT ENTRY
          CON    PKIX        BKSP 
          CON    RCS         SPACE - READ CURRENT SECTOR
          LOC    *O 
 PKID     SPACE  4,10 
*         TABLE OF SPECIAL CHARACTERS.
  
  
 PKID     BSS    0
          LOC    53 
          CON    CMB         LEFT BLANK - CLEAR MESSAGE AND KEYBOARD
          CON    PKI7        =
          CON    RRD         RIGHT BLANK - ROTATE RIGHT DISPLAY 
          CON    PKI7        ,
          CON    PKI7        .
          CON    PEC         CR - PROCESS ENTERED COMMAND 
          CON    BSP         BKSP - DELETE LAST CHARACTER 
          CON    PKI6        SPACE
          LOC    *O 
 IKE      SPACE  4,15 
**        IKE - INTERPRET KEYBOARD ENTRY. 
* 
*         ENTRY  (EF) = 0 IF INTERPRET ONLY.
*                (EF) " 0 IF EXECUTE REQUESTED. 
*                (KI) = END OF BUFFER POINTER.
*                (TA) = CM FWA OF COMMAND TABLE.
* 
*         EXIT   TO PKIX  IF EXECUTE NOT REQUESTED. 
*                TO EMC IF FIRST CHARACTER 0 - 7. 
*                TO COMMAND PROCESSOR IF EXECUTE AND COMMAND COMPLETE.
*                    (CA) = ADDRESS OF NEXT CHARACTER IN BUFFER.
* 
*         USES   T1 - T3, CA, CM, KM. 
* 
*         CALLS  EMC, COMMAND PROCESSORS. 
  
  
 IKE      LDN    0
          STD    T1          SET TRIAL CHARACTER
          STD    CM          SET SYNTAX TABLE INDEX 
          LDM    KBUF        CHECK FIRST CHARACTER
          SBN    1R0
          MJN    IKE1        IF ALPHABETIC
          SBN    8D 
          PJN    IKE1        IF ABOVE 7 
          LJM    EMC         PROCESS MEMORY CHANGE COMMAND
  
 IKE1     LDN    2           SET SYNTAX ENTRY LENGTH
          STD    T2 
          LDD    RA          READ ENTRY 
          ADD    TA 
          SHN    6
          ADD    CM 
          CRM    IKEA,T2
          LDN    2           ADVANCE INDEX FOR NEXT PASS
          RAD    CM 
          LDC    IKEA        SET ENTRY POINTER
          STD    T2 
          LDI    T2 
          NJN    IKE2        IF NOT END OF TABLE
          LJM    IKE9        PROCESS END OF SCAN
  
 IKE2     LDC    KBUF        SET CHARACTER ADDRESS
          STD    CA 
 IKE3     LDI    T2          COMPARE UPPER
          SHN    -6 
          ZJN    IKE7        IF COMPARE COMPLETE
          STD    T3 
          LMI    CA 
          NJN    IKE4        IF NO MATCH
          AOD    CA 
          LDI    T2          COMPARE LOWER
          LPN    77 
          ZJN    IKE7        IF COMPARE COMPLETE
          STD    T3 
          LMI    CA 
          NJN    IKE4        IF NO MATCH
          AOD    T2 
          AOD    CA 
          UJN    IKE3        LOOP 
  
*         PROCESS NO MATCH FOUND. 
  
 IKE4     LDI    CA 
          NJN    IKE5        IF DIFFERENT CHARACTER 
          LDD    T1 
          NJN    IKE6        IF NOT UNIQUE ENTRY
          LDD    T3          SET NEXT CHARACTER 
          STD    T1 
 IKE5     LJM    IKE1        LOOP 
  
 IKE6     LMD    T3 
          ZJN    IKE5        IF SAME CHARACTER
          UJN    IKE10       CHECK EXECUTE FLAG 
  
*         PROCESS UNIQUE CHARACTER. 
  
 IKE7     LDD    EF 
          NJN    IKE8        IF EXECUTE FLAG SET
          LJM    PKIX        RETURN IF INTERPRET ONLY 
  
*         PROCESS COMMAND.
  
 IKE8     LDM    IKEA+10     SET WORD COUNT 
          SHN    -6 
          STD    T1 
          LDM    IKEA+10     GET CM ADDRESS 
          LPN    37 
          SHN    6
          ADD    RA 
          SHN    6
          ADM    IKEA+11
          CRM    CPLA,T1     READ COMMAND PROCESSOR 
          LJM    CPLA        EXECUTE COMMAND
  
*         PROCESS END OF FORMAT SCAN. 
  
 IKE9     LDD    T1 
          NJN    IKE12       IF UNIQUE CHARACTER
          STM    KBUF-1,KI   BACKSPACE POINTER
          SOD    KI 
 IKE10    LDD    EF 
          ZJN    IKE11       IF EXECUTE FLAG NOT SET
          LDC    SREA        *REPEAT ENTRY.*
          STD    KM 
 IKE11    LJM    PKIX        RETURN 
  
 IKE12    SBN    1R=
          PJN    IKE10       IF SPECIAL CHARACTER 
          LDD    T1          FILL NEXT CHARACTER
          STM    KBUF,KI
          AOD    KI 
          LJM    IKE         LOOP 
  
  
 IKEA     BSS    12          COMMAND SYNTAX BUFFER
          SPACE  4,10 
**        EXIT ROUTINES FOR COMMAND PROCESSORS. 
 ERR      SPACE  4,10 
**        ERR - SET ERROR MESSAGE.
  
  
 ERR1     LDC    =C*FORMAT ERROR.*
          UJN    ERR         SET MESSAGE
  
 ERR2     LDC    =Z*INCORRECT PARAMETER.* 
          UJN    ERR         SET MESSAGE
  
 ERR3     LDC    =Z*NOT FOUND.* 
          UJN    ERR         SET MESSAGE
  
 ERR4     LDC    =Z*INCORRECT ENTRY.* 
          UJN    ERR         SET MESSAGE
  
 ERR5     LDC    =Z*INCORRECT EQUIPMENT.* 
  
 ERR      STD    KM 
          UJN    RET         RETURN 
 IMS      SPACE  4,10 
**        IMS - INITIALIZE MASS STORAGE DRIVERS AND RANDOM ACCESS.
  
  
 IMS      RJM    CTS         CHECK TRACK AND SECTOR NUMBERS 
*         UJN    RET         RETURN 
 RET      SPACE  4,10 
**        RET - NORMAL RETURN.
  
  
 RET      LDN    0           CLEAR INDEX
 RET1     STD    T1          SET CLEARING INDEX 
          LDD    KM 
          NJN    RET3        IF MESSAGE SET 
          LDD    T1          SET KEYBOARD INDEX 
          STD    KI 
 RET2     LDN    0           CLEAR BUFFER 
          STM    KBUF,T1
          AOD    T1 
          LMC    KBUFL
          NJN    RET2        IF NOT END OF BUFFER 
 RET3     LDC    RCPX        RESTORE LOOP 
          STM    RCPA 
          STD    SB          CLEAR *SYSTEM BUSY* INDICATION 
          LJM    PKIX        RETURN 
 SBN      SPACE  4,10 
**        SBN - SET BYTE NUMBER MESSAGE.
* 
*         (FN) = BYTE NUMBER. 
  
  
 SBN      LDD    FN          CONVERT NUMBER 
          SHN    -6 
          RJM    C2D         CONVERT TOP TWO DIGITS 
          STM    SBNB 
          LDD    FN 
          RJM    C2D         CONVERT TWO DIGITS 
          STM    SBNB+1 
  
*         CHECK RIGHT SCREEN PAGE.
  
          LDD    RS 
          SBK    DFBN 
          DFIM   (ZJN SBN1) 
          ZJN    SBN3        IF FIVE BYTE DISPLAY 
          SBN    DLCN-DFBN
          DFIM   (MJN SBN3) 
          MJN    SBN4        IF TEN BYTE OR TEXT DISPLAY
          ZJN    SBN4        IF COMMAND DISPLAY 
  
*         SET PAGE NUMBER FOR FOUR PAGE DISPLAY.
  
 SBN1     LDN    0
          STM    DRSA+4 
          LDC    -2-500/4 
 SBN2     RAD    FN 
          MJN    SBN4        IF ON CURRENT PAGE 
          AOM    DRSA+4 
          LDC    -500/4 
          UJN    SBN2        LOOP TO CHECK NEXT PAGE
  
*         SET PAGE NUMBER FOR TWO PAGE DISPLAY. 
  
 SBN3     LDD    FN 
          ADC    -242 
          SHN    0-21 
          LMN    1
          STM    DRSA+4 
 SBN4     LDC    SBNA 
          LJM    SKM         DISPLAY MESSAGE
  
  
 SBNA     DATA   H* BYTE *
 SBNB     DATA   Z*NNNN.* 
 SCP      SPACE  4,10 
**        SCP - START UP CPU PROGRAM. 
* 
*         ENTRY  (A) = FUNCTION NUMBER * 2 + 1. 
*                (CM - CM+4) = CONTENTS OF CPU STATUS WORD. 
  
  
 SCP      STD    CM+4 
          LDD    RA 
          SHN    6
          ADN    D
          CWD    CM 
          LJM    RET         RETURN 
 SKM      SPACE  4,10 
**        SKM - SET KEYBOARD MESSAGE. 
* 
*         ENTRY  (A) = ADDRESS OF MESSAGE.
  
  
 SKM      EQU    ERR
          SPACE  4,10 
**        SPECIAL CHARACTER PROCESSORS. 
 AOS      SPACE  4,10 
**        AOS - ADVANCE ONE SECTOR. 
  
  
 AOS      LDD    SC          CHECK SECTOR COUNT 
          SBD    LS 
          ZJN    AOS1        IF END OF TRACK
          LDM    BFMS 
          ADM    BFMS+1 
          ZJN    AOS1        IF END OF INFORMATION
          AOD    SC 
 AOS1     LJM    RCS         READ SECTOR
 AOT      SPACE  4,10 
**        AOT - ADVANCE ONE TRACK.
  
  
 AOT      RJM    SNT         GET NEXT TRACK 
          SHN    6
          PJN    AOT1        IF END OF CHAIN
          SHN    -6 
          STD    TK 
 AOT1     UJN    ATZ2        CHECK TRACK NUMBER 
 APE      SPACE  4,10 
**        APE - ADVANCE PAST EOI. 
  
  
 APE      LDD    SC 
          SBD    LS 
          ZJN    APE1        IF END OF TRACK
          AOD    SC          ADVANCE TO NEXT SECTOR 
          UJN    APE2        READ SECTOR
  
 APE1     RJM    SNT         GET NEXT TRACK 
          SHN    6
          PJN    APE2        IF EOI TRACK 
          SHN    -6 
          STD    TK 
          LDN    0
          STD    SC 
 APE2     LJM    RCS         READ SECTOR
 ATZ      SPACE  4,10 
**        ATZ - ADVANCE ONE TRACK AND ZERO SECTOR.
  
  
 ATZ      LDM    BFMS 
          NJN    ATZ1        IF NOT EOF 
          LDM    BFMS+1 
 ATZ1     SHN    6
          PJN    ATZ2        IF NOT CHAIN BYTE
          SHN    -6 
          STD    TK          SET NEXT TRACK 
          LDN    0
          STD    SC 
 ATZ2     RJM    CTS         CHECK SECTOR LIMIT 
          LJM    RCS         READ SECTOR
 BOS      SPACE  4,10 
**        BOS - BACKUP ONE SECTOR.
  
  
 BOS      LDD    SC 
          ZJN    BOS1        IF BEGINNING OF TRACK
          SOD    SC 
 BOS1     LJM    RCS         READ SECTOR
 BSP      SPACE  4,10 
**        BSP - BACKSPACE KEYBOARD BUFFER.
  
  
 BSP      SOD    KI          DECREMENT POINTER
          LDD    KM 
          LMC    SREA 
          ZJN    BSP1        IF *REPEAT ENTRY.* 
          LDN    0
          STD    KM          CLEAR MESSAGE
 BSP1     STM    KBUF,KI     CLEAR LAST CHARACTER 
          LJM    RET3        RESTORE LOOP 
 CMB      SPACE  4,10 
**        CMB - CLEAR MESSAGE AND BUFFER. 
  
  
 CMB      LDN    0           CLEAR KEYBOARD MESSAGE 
          STD    KM 
          STM    RDCT        CLEAR DRIVER ERROR CODE
          STD    CM          CLEAR CONTROL POINT MESSAGES 
          LDD    CP 
          ADN    MS1W 
          CWD    CM 
          ADN    MS2W-MS1W
          CWD    CM 
          LJM    RET         CLEAR KEYBOARD BUFFER
 DDC      SPACE  4,10 
**        DDC - DROP DISPLAY CHANNEL. 
  
  
 DDC      RJM    HDC         HOLD DISPLAY CHANNEL 
          RJM    CSB         CLEAR SCREEN BUFFER
          UJN    IRD1        RETURN TO *PKIX* 
 DTN      SPACE  4,10 
**        DTN - DECREMENT TRACK NUMBER. 
  
 DTN      SOD    TK 
 DTN1     LPC    3777 
          ADC    4000 
          STD    TK 
          LJM    ATZ2        CHECK TRACK NUMBER 
 IRD      SPACE  4,10 
**        IRD - INCREMENT RIGHT DISPLAY.
  
  
 IRD      AOM    DRSA+4      INCREMENT DISPLAY INDEX
          LPC    777
          STM    DRSA+4 
 IRD1     LJM    PKIX        RETURN 
 ITN      SPACE  4,10 
**        ITN - INCREMENT TRACK NUMBER. 
  
  
 ITN      AOD    TK 
          UJN    DTN1        CHECK TRACK NUMBER 
 PEC      SPACE  4,10 
**        PEC - PROCESS ENTERED COMMAND.
  
  
 PEC      LDN    1           SET EXECUTE FLAG 
          STD    EF 
          LJM    IKE         CHECK COMMAND
 RCS      SPACE  4,10 
**        RCS - READ CURRENT SECTOR.
  
  
 RCS      RJM    RSB         READ SECTOR
          LJM    RET3        RESTORE MAIN LOOP
 RRD      SPACE  4,10 
**        RRD - ROTATE RIGHT DISPLAY. 
  
  
 RRD      AOD    RS          INCREMENT RIGHT DISPLAY POINTER
          SBN    MXDI 
          NJN    RRD1        IF LEGAL DISPLAY 
          STD    RS 
 RRD1     UJN    IRD1        RETURN TO *PKIX* 
 SRE      SPACE  4,10 
**        SRE - SET REPEAT ENTRY. 
  
  
 SRE      LDC    SREA 
          STD    KM 
          UJN    RRD1        RETURN TO *PKIX* 
  
  
 SREA     DATA   Z*REPEAT ENTRY.* 
          TITLE  MEMORY CHANGES.
 EMC      SPACE  4,10 
***       MEMORY CHANGES. 
*         XXX,YYYY.  ENTER YYYY INTO BYTE XXX.
*         XXX,DCC    ENTER CHARACTERS CC IN BYTE XXX. 
* 
*         IF THE COMMA *,* IS REPLACED BY A PLUS *+*, THE BYTE NUMBER 
*         WILL BE INCREMENTED AFTER THE ENTRY IS PROCESSED.  THE ACTUAL 
*         DATA ON THE DISK IS NOT CHANGED UNTIL THE WRITE COMMAND IS
*         ENTERED.
 EMC      SPACE  4,10 
**        EMC - ENTER MEMORY CHANGE.
* 
*         ENTRY  (EF) = 0 IF INTERPRET ONLY.
*                (EF) " 0 IF EXECUTE REQUESTED. 
* 
*         USES   T1, AB+4, CM, CA, KM, RC.
* 
*         CALLS  BSP, CDR, RET. 
  
  
 EMC      LDC    KBUF 
          STD    CA 
          RJM    CDR         CONVERT BYTE NUMBER
          ZJN    EMC2        IF NO MORE CHARACTERS
          LMN    1R+
          ZJN    EMC1        IF *+* 
          LMN    1R,&1R+
          NJN    EMC3        IF ILLEGAL CHARACTER 
 EMC1     LDD    AB+4 
          STD    RC 
          ADC    -502 
          PJN    EMC3        IF BYTE NUMBER TOO LARGE 
          LDD    CA 
          STD    CM 
          AOD    CA 
          LDI    CA 
          LMN    1RD
          ZJN    EMC6        IF CHARACTER ENTRY 
  
*         ENTER OCTAL VALUE.
  
          RJM    CDR         CONVERT VALUE
 EMC2     ZJN    EMC4        IF NO MORE CHARACTERS
          LMN    1R.
          ZJN    EMC7        IF *.* 
 EMC3     LJM    BSP         DELETE ILLEGAL CHARACTER 
  
*         INCOMPLETE ENTRY. 
  
 EMC4     LDD    EF 
          ZJN    EMC5        IF EXECUTE NOT REQUESTED 
          LDC    SREA        SET *REPEAT ENTRY.*
          STD    KM 
 EMC5     LJM    PKIX        RETURN 
  
*         ENTER DISPLAY CODE. 
  
 EMC6     LDM    3,CA 
          NJN    EMC3        IF TOO MANY CHARACTERS 
          LDM    1,CA 
          SHN    6
          ADM    2,CA 
          STD    AB+4        VALUE
  
*         ENTRY  COMPLETE.
  
 EMC7     LDD    EF 
          ZJN    EMC5        IF EXECUTE NOT REQUESTED 
          LDD    AB+4 
          STM    BFMS,RC     STORE VALUE
          LDI    CM 
          LMN    1R+
          ZJN    EMC8        IF *+* TYPE ENTRY
          LJM    RET         RETURN 
  
*         *+* ENTRY, ADVANCE ADDRESS. 
  
 EMC8     LDD    CM 
          SBN    1
          STD    T1 
 EMC9     AOI    T1          ADVANCE ADDRESS
          SBN    1R8
          MJN    EMC11       IF NO OVERFLOW 
          LDN    1R0         RESET DIGIT
          STI    T1 
          SOD    T1 
          ADC    -KBUF
          PJN    EMC9        IF MORE DIGITS 
          LDN    KBUFL-1
          STD    T1 
 EMC10    LDM    KBUF,T1     SHIFT BUFFER ONE CHARACTER RIGHT 
          STM    KBUF+1,T1
          SOD    T1 
          PJN    EMC10       IF MORE CHARACTERS 
          LDN    1R1
          STM    KBUF        ADD LEADING 1
          AOD    CM          INCREMENT CHARACTER COUNT
 EMC11    LDM    1,CM 
          LMN    1RD
          NJN    EMC12       IF NOT CHARACTER ENTRY 
          AOD    CM 
 EMC12    LDD    CM 
          ADC    -KBUF+1
          LJM    RET1        CLEAR LAST PART OF ENTRY 
          TITLE  SUBROUTINES. 
 ASD      SPACE  4,10 
**        ASD - ASSEMBLE DIGITS.
* 
*         ENTRY  (CA) = ADDRESS OF CHARACTER STRING.
* 
*         EXIT   (AB - AB+4) = ASSEMBLY.
*                TO ERR IF NOT TERMINATED BY A *.*. 
* 
*         CALLS  CDR, ERR1. 
  
  
 ASD      SUBR               ENTRY/EXIT 
          RJM    CDR         CONVERT DIGITS 
          LMN    1R.
          ZJN    ASDX        IF PERIOD
          LJM    ERR1        *FORMAT ERROR.*
 ASN      SPACE  4,10 
**        ASN - ASSEMBLE NAME.
* 
*         ENTRY  (CA) = ADDRESS OF CHARACTER STRING.
* 
*         EXIT   (FN - FN+4) = NAME (LEFT JUSTIFIED). 
*                TO ERR IF ILLEGAL CHARACTER OR MORE THAN 7 CHARACTERS. 
* 
*         USES   T1, T2.
* 
*         CALLS  ERR2.
  
  
 ASN3     LDD    T2          ADD CHARACTER TO NAME
          STM    FN,T1
  
 ASN      SUBR               ENTRY/EXIT 
          LDN    ZERL 
          CRD    FN 
          LDN    0
          STD    T1 
 ASN1     LDI    CA          ASSEMBLE CHARACTERS
          ZJN    ASN2        IF END OF CHARACTER STRING 
          SBN    1R.
          ZJN    ASNX        IF TERMINATOR
          LDI    CA          SAVE CHARACTER 
          SHN    6
          STD    T2 
          AOD    CA 
          LDI    CA 
          ZJN    ASN2        IF END OF CHARACTER STRING 
          SBN    1R.
          ZJN    ASN3        IF TERMINATOR
          LDI    CA          ADD CHARACTERS TO NAME 
          LMD    T2 
          STM    FN,T1
          AOD    CA 
          AOD    T1 
          SBN    4
          MJN    ASN1        IF LESS THAN 7 CHARACTERS
 ASN2     LJM    ERR2        *INCORRECT PARAMETER.* 
 CDR      SPACE  4,10 
**        CDR - CONVERT DIGITS RIGHT ADJUSTED.
* 
*         ENTRY  (CA) = ADDRESS OF CHARACTER STRING.
* 
*         EXIT   (A) = SEPARATOR CHARACTER. 
*                (AB - AB+4) = ASSEMBLY.
*                (CA) = ADDRESS OF SEPAROTOR CHARACTER. 
* 
*         USES   T2, T3, CA.
  
  
 CDR      SUBR               ENTRY/EXIT 
          LDN    ZERL        CLEAR ASSEMBLY AREA
          CRD    AB 
 CDR1     LDI    CA          LOAD CHARACTER 
          SBN    1R0
          MJN    CDR2        IF ALPHA 
          SBN    1R8-1R0
          MJN    CDR3        IF OCTAL DIGIT 
          SBN    1R -1R8
          ZJN    CDR5        IF SPACE 
 CDR2     LDI    CA          LOAD CHARACTER 
          UJN    CDRX        RETURN 
  
 CDR3     ADN    1R8-1R0     STORE DIGIT
          STD    T3 
          LDN    AB+4        SET BYTE ADDRESS 
          STD    T2 
 CDR4     LDI    T2          LOAD BYTE
          SHN    3
          ADD    T3          ADD NEW DIGIT
          STI    T2          STORE
          SHN    -14         SAVE OVERFLOW
          STD    T3 
          SOD    T2          ADVANCE BYTE ADDRESS 
          LMN    AB-1 
          NJN    CDR4        IF NOT END OF ASSEMBLY AREA
 CDR5     AOD    CA          ADVANCE ADDRESS
          UJN    CDR1        LOOP 
 CEQ      SPACE  4,10 
**        CEQ - CHECK EQUIPMENT.
* 
*         ENTRY  (EQ) = EQUIPMENT.
* 
*         EXIT   TO *ERR5* IF INCORRECT EQUIPMENT.
* 
*         USES   CM - CM+4. 
* 
*         MACROS SFA. 
  
  
 CEQ      SUBR               ENTRY/EXIT 
          SFA    EST,EQ      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4        MST ADDRESS/10 
          SHN    3
          ADN    DDLL 
          CRD    CM 
          LDD    CM 
          SHN    21-12
          PJN    CEQX        IF NOT NULL EQUIPMENT
          LJM    ERR5        *INCORRECT EQUIPMENT.* 
 CLB      SPACE  4,10 
**        CLB - CHECK LOCK BIT. 
* 
*         EXIT   TO ERR IF KEYBOARD LOCKED. 
*                (CM - CM+4) = *SSTL* WORD READ FROM CMR. 
* 
*         USES   CM - CM+4. 
* 
*         CALLS  ERR. 
  
  
 CLB      SUBR               ENTRY/EXIT 
          LDK    SSTL        CHECK *SECURITY-UNLOCK* BIT
          CRD    CM 
          LDD    CM 
          SHN    21-11
          MJN    CLBX        IF UNLOCKED
          LJM    ERR4        *INCORRECT ENTRY.* 
 CSA      SPACE  4,10 
**        CSA - COMPUTE SCRATCH AREA ADDRESS. 
* 
*         ENTRY  (CA) = POINTER TO NEXT CHARACTER.
* 
*         EXIT   (CA) UPDATED.
*                (T2) = ADDRESS OF SCRATCH AREA.
* 
*         CALLS  ERR1, ERR2.
  
  
 CSA      SUBR               ENTRY/EXIT 
          LDI    CA 
          SBN    NSRA+1 
          PJN    CSA1        IF ILLEGAL CHARACTER 
          LDI    CA          CALCULATE ADDRESS
          SBN    1
          SHN    3
          ADI    CA 
          ADC    SRA-1
          STD    T2 
          AOD    CA          CHECK NEXT CHARACTER 
          LDI    CA 
          LMN    1R.
          ZJN    CSAX        IF LEGAL SEPARATOR 
          LJM    ERR1        *FORMAT ERROR.*
  
 CSA1     LJM    ERR2        *INCORRECT PARAMETER.* 
 CSB      SPACE  4,10 
**        CSB - CLEAR SCREEN BUFFER.
* 
*         CLEAR SCREEN BUFFER, RESET TOP OF PAGE, AND SET *PKI*-S 
*         RETURN ADDRESS TO *DDF1* WHEN THE CONSOLE TYPE IS A *CDC721*. 
* 
*         USES   T1.
* 
*         MACROS CFNC, DFIM.
  
  
 CSB1     LDN    CSBAL-1
          STD    T1 
 CSB2     LDM    CSBA,T1     ISSUE FUNCTION 
          CFNC
          SOD    T1 
          PJN    CSB2        IF MORE FUNCTIONS
          LDC    DDF1        SET *PKI* EXIT 
          STM    PKI
  
 CSB      SUBR               ENTRY/EXIT 
          DFIM   (UJN CSB1) 
          UJN    CSBX        RETURN 
  
  
 CSBA     BSS    0           TABLE OF FUNCTION CODES IN REVERSE ORDER 
          CON    CHSF        CLEAR HIDDEN SCREEN
          CON    RTPF        RESET TOP OF PAGE
          CON    SRSF        SELECT RIGHT SCREEN, SMALL CHARACTERS
          CON    RTPF        RESET TOP OF PAGE
          CON    SLSF        SELECT LEFT SCREEN, SMALL CHARACTERS 
 CSBAL    EQU    *-CSBA 
 CTR      SPACE  4,10 
**        CTR - CHECK TRACK RESERVATION BIT.
* 
*         EXIT   (A) .LT. 0 IF RESERVATION BIT SET. 
* 
*         CALLS  SNT. 
  
  
 CTR      SUBR               ENTRY/EXIT 
          RJM    SNT         SET NEXT TRACK 
          LDD    T1 
          ADC    SHNI+22-4
          STM    CTRA 
          LDD    CM+4 
 CTRA     SHN    ** 
          UJN    CTRX        RETURN 
 CTS      SPACE  4,10 
**        CTS - CHECK TRACK AND SECTOR AND ZERO IF TOO LARGE. 
* 
*         ENTRY  (EQ) = EST ORDINAL.
* 
*         EXIT   (A) .NE. 0, IF DEVICE IS INACCESSIBLE. (OFF OR DOWN) 
*                (LS) = LAST SECTOR FOR CURRENT TRACK AND EQUIPMENT.
*                (LT) = MAXIMUM TRACK NUMBER FOR DEVICE.
*                (SC) = 0 IF IT WAS LARGER THAN THE SECTOR LIMIT. 
*                (TK) = 4000 IF IT WAS LARGER THAN (LT).
* 
*         USES   AB - AB+4, CM - CM+4.
  
  
 CTS      SUBR               ENTRY/EXIT 
 CTSA     SETMS  IO,(AR,NS,AD,RW,DF)
*         SETMS  IO,(RR,NR,NS,AD,RW,DF)  (ERROR PROCESSING ENABLED) 
          LDD    CM+4        SET FIRST WORD OF TRT
          SHN    3
          ADK    TDGL 
          CRD    CM 
          ADK    TRLL-TDGL
          CRD    AB 
          LDD    AB+3 
          LPN    77 
          SHN    14 
          LMD    AB+4 
          SBD    TH          =4000/4
          STM    DLSA+1 
          STM    SNTA+1 
          SHN    -14
          LMC    ADCI 
          STM    DLSA 
          STM    SNTA 
          LDD    CM          GET MAXIMUM TRACK
          ADC    4000-1 
          STD    LT 
          SBD    TK 
          PJN    CTS1        IF LEGAL TRACK 
          LDC    4000 
          STD    TK 
 CTS1     LDM    SLM         CHECK SECTOR 
          SBN    1
          STD    LS 
          SBD    SC 
          PJN    CTS2        IF LEGAL SECTOR
          LDN    0
          STD    SC 
 CTS2     UJP    CTSX        RETURN 
 DMW      SPACE  4,20 
**        DMW - DISPLAY MEMORY WORDS. 
* 
*         ENTRY  (AB) = WORD NUMBER OF FIRST LINE TO DISPLAY. 
*                (AB+1) = WORD NUMBER+1 OF LAST LINE. 
*                (AB+2) = INDEX FOR FIRST BYTE TO DISPLAY.
*                (AB+3) = N TO DISPLAY KEYWORD TABLE. 
*                        (N = FWA OF TABLE, 10 CHARACTERS PER ENTRY.) 
*                       = 0 TO SUPPRESS KEYWORD DISPLAY.
*                (YC) = Y-COORDINATE ABOVE FIRST LINE TO BE DISPLAYED.
* 
*         EXIT   (AB) = (AB+1). 
*                (T3) = ADDRESS OF LAST BYTE DISPLAYED + 1. 
*                (YC) = Y-COORDINATE OF LAST LINE DISPLAYED.
* 
*         USES   T3, AB, AB+2, YC, RC.
* 
*         CALLS  D2D, D4D, ODC. 
  
  
 DMW      SUBR               ENTRY/EXIT 
          LDD    AB 
          SBD    AB+1 
          PJN    DMWX        IF NOTHING TO DISPLAY
          LDD    AB+3        SET TABLE ADDRESS
          STM    DMWA 
          LDD    AB+2        SET BYTE ADDRESS 
          ADC    BFMS 
          STD    T3 
  
*         DISPLAY LABEL FOR WORD. 
  
 DMW1     LCN    YINC 
          RAD    YC 
          OAN    CH+40       OUTPUT COORDINATES 
          LDD    XC 
          OAN    CH+40
          LDD    AB          DISPLAY CM WORD NUMBER 
          RJM    D2D
          LDC    2R ( 
          OAN    CH+40
          LDD    AB+2        DISPLAY BYTE NUMBER
          RJM    D4D
          LDC    2R)
          OAN    CH+40
          LDD    AB+3 
          ZJN    DMW2        IF NOT TABLE DISPLAY 
          LDN    5           DISPLAY TABLE DATA 
          OAM    **,CH
 DMWA     EQU    *-1
          LDN    5           ADVANCE TABLE POINTER
          RAM    DMWA 
  
*         DISPLAY CONTENTS OF WORD. 
  
 DMW2     LDN    0           DISPLAY 5 BYTES
          STD    RC 
          OAN    CH+40
 DMW3     LDN    0
          OAN    CH+40
          LDI    T3          DISPLAY CONTENTS OF BYTE 
          RJM    D4D
          AOD    T3 
          AOD    RC 
          LMN    5
          NJN    DMW3        IF MORE BYTES
*         LDN    0           DISPLAY 5 BYTES IN DISPLAY CODE
          OAN    CH+40
          LCN    5
          RAD    T3 
          LDN    5
          RJM    ODC         OUTPUT DISPLAY CODE
 DMW4     LDN    5           INCREMENT BYTE ADDRESS 
          RAD    AB+2 
          AOD    AB          INCREMENT CM WORD NUMBER 
          LMD    AB+1 
          ZJN    DMW5        IF END OF DISPLAY
          LJM    DMW1        LOOP 
  
 DMW5     LJM    DMWX        RETURN 
 D2D      SPACE  4,10 
**        D2D - DISPLAY 2 DIGITS. 
* 
*         ENTRY  (A) = DIGITS RIGHT ADJUSTED. 
  
  
 D2D      SUBR               ENTRY/EXIT 
          LPN    77          UNPACK DIGITS
          STD    T0 
          SHN    3
          LMD    T0 
          SCN    70 
          ADC    2R00        CONVERT TO DISPLAY CODE
          OAN    CH+40
          UJN    D2DX        RETURN 
 D4D      SPACE  4,10 
**        D4D - DISPLAY 4 DIGITS. 
* 
*         ENTRY  (A) = DIGITS RIGHT ADJUSTED. 
* 
*         USES   T1.
* 
*         CALLS  D2D. 
  
  
 D4D      SUBR               ENTRY/EXIT 
          STD    T1 
          SHN    -6          DISPLAY FIRST 2 DIGITS 
          RJM    D2D
          LDD    T1          DISPLAY SECOND 2 DIGITS
          RJM    D2D
          UJN    D4DX        RETURN 
 END      SPACE  4,10 
**        END - END CPU PROGRAM.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  WCC. 
  
  
 END      SUBR               ENTRY/EXIT 
 ENDA     RJM    WCC         WAIT FOR CPU TO COMPLETE 
*         UJN    ENDX        (*DDFILE* NOT LOADED)
          LDN    0*2+1
          STD    CM+4 
          LDD    RA 
          SHN    6
          ADN    D
          CWD    CM 
          UJN    ENDX        RETURN 
 LDO      SPACE  4,20 
**        LDO - LOAD OVERLAY. 
* 
*         ENTRY  (A) = OVERLAY CONTROL WORD INDEX.
*                      (RELATIVE TO *TCRO*) 
*                (DRSB) = PREVIOUS (RS).
*                (DRSA - DRSA+4) = CURRENT OVERLAY CONTROL WORD.
* 
*         EXIT   (DRSA - DRSA+4) UPDATED AS REQUIRED. 
*                (DRSB) UPDATED IF DISPLAY IS BEING CHANGED.
*                (CM) = LOAD ADDRESS. 
*                OVERLAY LOADED AND PRESET. 
*                OLD OVERLAY CONTROL WORD WRITTEN TO CM, IF VALID,
*                TO PRESERVE DISPLAY INDEX. 
* 
*         USES   AB, CM - CM+4. 
* 
*         CALLS  MCI. 
  
  
 LDO      SUBR               ENTRY/EXIT 
          STD    AB          SAVE INDEX 
          LDD    RA          LOAD CONTROL WORD FOR DESIRED OVERLAY
          ADD    TA 
          SHN    6
          ADC    TCRO 
          ADD    AB 
          CRD    CM 
          LDD    CM+1        CHECK WORD COUNT 
          ZJN    LDO1        IF NO LOAD REQUIRED
          LDD    CM          SET LOAD ADDRESS 
          STM    LDOA 
          LDD    CM+2        LOAD PROCESSOR OVERLAY 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    CM+3 
          CRM    **,CM+1
 LDOA     EQU    *-1         LOAD ADDRESS 
 LDO1     LDD    AB 
          LMD    RS 
          NJP    LDOX        IF NOT A MAIN DISPLAY OVERLAY
          LDM    DRSB 
          SBN    MXDI 
          PJN    LDO2        IF OLD CONTROL WORD INVALID
          LDD    RA          STORE OLD CONTROL WORD 
          ADD    TA 
          SHN    6
          ADC    TCRO 
          ADM    DRSB 
          CWM    DRSA,ON
 LDO2     LDD    RA          READ NEW PROCESSOR CONTROL WORD
          ADD    TA 
          SHN    6
          ADC    TCRO 
          ADD    RS 
          CRM    DRSA,ON     (SETS PROCESSOR ENTRY ADDRESS FOR *LJM*) 
          LDD    RS          UPDATE OLD ID
          STM    DRSB 
          LJM    LDOX        RETURN 
 ODC      SPACE  4,10 
**        ODC - OUTPUT DISPLAY CODE.
* 
*         ENTRY  (A) = NUMBER OF BYTES TO DISPLAY.
*                (T3) = ADDRESS OF FIRST BYTE.
*                (XC) = 6000. 
* 
*         EXIT   (T3) = ADDRESS OF NEXT BYTE. 
* 
*         USES   T0, T3.
  
  
 ODC2     LDI    T3          DISPLAY BOTH CHARACTERS
 ODC3     OAN    CH+40
          AOD    T3 
          SOD    T0 
          NJN    ODC1        IF MORE BYTES TO DISPLAY 
  
 ODC      SUBR               ENTRY/EXIT 
          STD    T0 
 ODC1     LDI    T3 
          SBD    XC 
          MJN    ODC2        IF UPPER CHARACTER LEGAL 
          LPN    77 
          UJN    ODC3        DISPLAY LOWER CHARACTER ONLY 
 RCP      SPACE  4,10 
**        RCP - RECALL COMMAND PROCESSOR IF NECESSARY.
* 
*         ENTRY  (RCPA) = ADDRESS IN COMMAND PROCESSOR IF RECALLING.
*                       = RCPX IF NO RECALL NEEDED. 
* 
*         EXIT   (RCPA) UPDATED.
  
  
 RCP      SUBR               ENTRY/EXIT 
 RCP1     LJM    RCPX        RETURN IF NO RECALL
*         LJM    COMMAND     (RECALL COMMAND PROCESSOR) 
 RCPA     EQU    *-1
          SOM    RCPB 
          PJN    RCP1        IF RECALL COUNT NOT EXAUSTED 
          DFIM   (LDN MLPS-1) 
          LDN    0           RESET RECALL COUNT 
          STM    RCPB 
          UJN    RCPX        RETURN TO MAIN LOOP
  
  
 RCPB     CON    0           RECALL COUNT 
 RSB      SPACE  4,10 
**        RSB - READ SECTOR TO BUFFER.
* 
*         EXIT   (A) .LT. 0 IF ERROR ON READ. 
*                (A) = 0 IF NO ERROR. 
* 
*         CALLS  CEQ, RDS.
* 
*         MACROS ENDMS. 
  
  
 RSB      SUBR               ENTRY/EXIT 
          RJM    CEQ         CHECK EQUIPMENT
          LDC    BFMS 
          RJM    RDS         READ SECTOR
          MJN    RSBX        IF ERROR 
          ENDMS 
*         LDN    0
          STM    RDCT 
          UJN    RSBX        RETURN 
 SNS      SPACE  4,10 
**        SNS - SET NEXT SECTOR.
* 
*         EXIT   (A) = 0 IF CURRENTLY AT EOI. 
  
  
 SNS1     LDM    BFMS 
          NJN    SNS2        IF NOT EOF 
          LDM    BFMS+1 
 SNS2     STD    TK 
  
 SNS      SUBR               ENTRY/EXIT 
          LDM    BFMS 
          ADM    BFMS+1 
          ZJN    SNSX        IF EOI 
          AOD    SC 
          SBD    LS 
          SBN    1
          NJN    SNSX        IF NOT END OF TRACK
          STD    SC          SET SECTOR TO ZERO 
          LDM    BFMS 
          SHN    6
          ADM    BFMS+1 
          LMC    377777 
          NJN    SNS1        IF NOT SYSTEM SECTOR 
          LDM    NSSS 
          UJN    SNS2        ENTER TRACK FROM SYSTEM SECTOR 
 SPP      SPACE  4,10 
**        SPP - SET PAGE PARAMETERS.
* 
*         ENTRY  (DRSA+4) = PAGE INDEX. 
*                (T3) = BFMS. 
* 
*         EXIT   (A) = NUMBER OF WORDS TO DISPLAY (PAGE SIZE).
*                (AB) = FIRST CM WORD NUMBER (PAGE INDEX * PAGE SIZE).
* 
*         USES   AB.
  
  
 SPP      SUBR               ENTRY/EXIT 
          LDM    DRSA+4 
          DFIM   (LPN 3)
          LPN    1           PAGE INDEX 
          DFIM   (SHN 4)     * 20B, 721 PAGE SIZE 
          SHN    5           * 40B, 545 PAGE SIZE 
          STD    AB          = FIRST CM WORD NUMBER 
          LDI    T3          SET UP NUMBER OF WORDS TO DISPLAY
          ZJN    SPPX        IF EOI SECTOR
          DFIM   (LDN 20)    721 PAGE SIZE IN CM WORDS
          LDN    40          545 PAGE SIZE IN CM WORDS
          UJN    SPPX        RETURN 
 WCC      SPACE  4,10 
**        WCC - WAIT FOR CPU TO COMPLETE. 
* 
*         EXIT   (CM - CM+4) = CONTENTS OF CPU STATUS WORD. 
* 
*         CALLS  RCPA.
  
  
 WCC      SUBR               ENTRY/EXIT 
 WCC1     RJM    RCPA        RETURN TO MAIN LOOP
          LDD    RA          READ STATUS WORD 
          SHN    6
          ADN    D
          CRD    CM 
          LDD    CM+4 
          ZJN    WCCX        IF COMPLETE
          UJN    WCC1        LOOP 
          SPACE  4,10 
*         COMMON DECKS. 
  
  
          QUAL   COMDDSP     AVOID *RDS* DEFINITION CONFLICT
*CALL     COMDDSP 
          QUAL   *
 RDC      EQU    /COMDDSP/RDS     REQUEST DISPLAY CHANNEL 
 DDS      EQU    /COMDDSP/DDS 
 HDC      EQU    /COMDDSP/HDC 
 PSS      EQU    /COMDDSP/PSS 
  
*CALL     COMDSYS 
  
*CALL     COMPC2D 
  
          QUAL   COMPSNT
 IRA$     EQU    *
          QUAL   *
*CALL     COMPSNT 
  
  
          TITLE  BUFFERS. 
 SRA      SPACE  4,10 
**        SRA - SCRATCH REGISTER AREA.
* 
*         9 BYTES PER ENTRY.
*                0 = EST ORDINAL. 
*                1 = TRACK. 
*                2 = SECTOR.
*                3 = 3/DISPLAY NUMBER,9/DISPLAY INDEX 
*                4 - 8 = 10 CHARACTER COMMENT 
  
  
 SRA      BSSZ   9D*NSRA
 KBUF     SPACE  4,10 
 KBUF     BSSZ   KBUFL       KEYBOARD BUFFER
          SPACE  4,10 
 DIS      HERE
          SPACE  4,10 
          USE    PRESET 
  
 BFMS     BSSN   502         SECTOR BUFFER
 CPLA     BSSN   0           COMMAND PROCESSOR LOAD ADDRESS 
 END      BSSN
          SPACE  4,10 
*         COMMON DECKS THAT DEFINE TAGS BASED ON *BFMS*.
  
  
          QUAL   LSD
*CALL     COMSLSD 
          QUAL   *
*CALL     COMSPFM 
*CALL     COMSSSE 
*CALL     COMSWEI 
          TITLE  PRESET PROGRAM.
 PRR      SPACE  4,10 
**        PRR - PRESET RESIDENT ROUTINES. 
  
  
 PRR3     LDN    10          CLEAR LAST PART OF BUFFER
          STD    T1 
 PRR4     LDN    0
          STM    BFMS+500,T1
          SOD    T1 
          PJN    PRR4        IF MORE TO CLEAR 
          LJM    RCS         READ SECTOR
          ERRNG  BFMS+500-*  CLEARING CODE OVERFLOWS END OF BUFFER
  
 PRR      BSS    0           ENTRY
          LDN    0           PRESET DIRECT CELLS
          STD    CR 
          STD    KI 
          STD    KM 
          STD    DK 
          STM    RSPLA
          STD    RT 
          LDK    DFBN        PRESET FIVE BYTE RIGHT SCREEN DISPLAY
          STD    RS 
          LDD    CP 
          ADK    PFCW 
          CRD    CM 
          ADK    PKNW-PFCW
          CRD    PF 
          LDD    CM+3 
          STD    PF+4 
          LDC    CH01        PRESET X-COORDINATE
          STD    XC 
          STD    SB          CLEAR SYSTEM BUSY FLAG 
          LDK    DSEQ        CHECK DISPLAY CONSOLE TYPE 
          SFA    EST
          ADK    EQAE 
          CRD    CM 
          LDD    CM+2 
          ZJN    PRR1        IF CC545 CONSOLE 
          MDIN               MODIFY DISPLAY GENERATOR 
 PRR1     LDN    0           CLEAR *.* IN COMMON DECKS
          STM    D6SA 
          STM    D2SB        CLEAR *OAN* INSTRUCTION
          LDD    RA          PRESET CPU PROGRAM ADDRESS CONSTANTS 
          SHN    6
          ADN    D-2
          CRD    CM 
          LDD    CM+3 
          STD    BA 
          LDD    CM+4 
          STD    BA+1 
          LDM    DDF
          NJN    PRR2        IF *DDFILE* LOADED 
          ISTORE ENDA,(UJN ENDX)
 PRR2     RJM    RDC         REQUEST DISPLAY
          RJM    CSB         CLEAR SCREEN BUFFER
          LDN    ZERL        CLEAR CONTROL POINT MESSAGES 
          CRD    CM 
          LDD    CP 
          ADN    MS1W 
          CWD    CM 
          ADK    MS2W-MS1W
          CWD    CM 
          LDN    0           INITIALIZE DISK ADDRESS DATA 
          STD    SC 
          LDC    PFNL        GET DEFAULT FAMILY ORDINAL 
          CRD    CM 
          LDD    CM+3 
          STD    EQ 
          SFA    EST         GET LABEL TRACK NUMBER 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+4 
          SHN    3
          ADN    ALGL 
          CRD    CM 
          LDD    CM+1 
          STD    TK 
          RJM    CTS         CHECK TRACK VALUE
          LDC    DDF1        PRESET *PKI* EXIT
          STM    PKI
          LJM    PRR3        CLEAR BUFFER AND ENTER MAIN LOOP 
          SPACE  4,10 
**        DUMP INSTRUCTION MODIFICATION BLOCK.
  
  
          DIMB
          SPACE  4,10 
          OVERFLOW  RESLA 
          OVERLAY /PRESET/OVL,(COMMAND PROCESSORS.) 
 OVL      SPACE  4,10 
**        OVL - INITIALIZE OVERLAY. 
* 
*         LOAD NON-COMMAND OVERLAYS TO CM.
  
  
 OVL      SUBR               ENTRY/EXIT 
  
*         INITIALIZE *COMPGFP* IN OVERLAY BEFORE SAVING IN CM.
  
          RJM    IFP         INITIALIZE FNT PROCESSORS
  
*         SAVE *TAR* OVERLAY IN CM. 
  
          LDN    /PRESET/TARL     SET OVERLAY LENGTH
          STD    T1 
          LDD    AB+3        SAVE CM ADDRESS
          STM    /PRESET/TCRO+TARN*5+2
          LDD    AB+4 
          STM    /PRESET/TCRO+TARN*5+3
          LDD    AB+3        WRITE OVERLAY TO CM
          SHN    6
          ADD    RA 
          SHN    6
          ADD    AB+4 
          CWM    /PRESET/TAR,T1 
          LDD    T1          UPDATE CM ADDRESS
          RAD    AB+4 
          SHN    -14
          RAD    AB+3 
          UJN    OVLX        RETURN 
          SPACE  4,10 
***       THE FOLLOWING COMMANDS ARE AVAILABLE -
 ARD      SPACE  4,10 
***       AUTOREAD.NNNN.
*         REREAD THE SECTOR EVERY NNNN SECONDS.  IF NNNN IS NOT 
*         ENTERED, ONE IS USED. AUTOREAD IS TERMINATED BY CLEARING
*         THE COMMAND WITH THE LEFT BLANK OR BACKTAB KEY. 
  
  
 ARD      COMMAND 
          LDN    MLPS        SET DEFAULT COUNT
          STD    FN+1 
          LDI    CA 
          ZJN    ARD1        IF NO SECOND COUNT ENTERED 
          RJM    ASD         ASSEMBLE COUNT 
          LDD    AB+4 
          SHN    5           * 40 
          ERRNZ  MLPS-40     CODE ASSUMES EQUALITY SHIFT 5 = * 40 
          STD    FN+1 
 ARD1     LDD    FN+1        SET COUNT
          STD    FN 
 ARD2     RJM    RCPA        RETURN TO MAIN LOOP
          SOD    FN 
          PJN    ARD2        IF MORE DELAY
          RJM    RSB         READ SECTOR
          UJN    ARD1        RESET COUNT
 BEI      SPACE  4,10 
***       BLDEOI. 
*         CREATES A EOI SECTOR IN BUFFER. 
  
  
 BEI      COMMAND 
          LDC    BFMS 
          STD    T3 
 BEI1     LDN    0
          STI    T3 
          AOD    T3 
          ADC    -BFMS-2-100*5
          MJN    BEI1        IF NOT END OF BUFFER 
          LDC    2RDD 
          STM    FNSS 
          LDN    1RF
          SHN    6
          STM    FNSS+1 
          LDN    PDTL        SET DATE AND TIME
          CRM    DTSS,ON
          LJM    RET         RETURN 
 BOT      SPACE  4,15 
***       BOT.NNNN. 
*         BACK UP ONE TRACK.  SEARCH THE TRT STARTING AT TRACK NNNN FOR 
*         A TRACK THAT POINTS TO THE CURRENT TRACK.  IF ONE IS FOUND, 
*         THE CURRENT TRACK IS SET TO THAT VALUE.  IF NO TRACK IS FOUND 
*         THAT POINTS TO THE CURRENT TRACK, *INCORRECT PARAMETER.* IS 
*         DISPLAYED.  IF NNNN IS NOT ENTERED, THE SEARCH STARTS AT
*         TRACK 0.
* 
*         NOTE THAT THE SEQUENCE OF COMMANDS *TK.NNNN.*, *BOT.*,
*         *TK.NNNN.*, *BOT.AAAA.* (WHERE AAAA IS THE TRACK RETURNED BY
*         THE FIRST *BOT.* COMMAND + 1) CAN BE USED TO DETERMINE IF 
*         TWO DIFFERENT TRACKS ARE BOTH LINKED TO TRACK NNNN. 
  
  
 BOT      COMMAND 
          LDD    TK 
          STD    RC 
          LDI    CA 
          ZJN    BOT1        IF NO TRACK ENTERED (START AT TRACK 0) 
          RJM    ASD         ASSEMBLE TRACK NUMBER
          LDD    AB+4 
 BOT1     LPC    3777 
          ADC    4000 
          STD    TK          SET STARTING TRACK 
 BOT2     RJM    SNT         GET LINK 
          LMD    RC 
          ZJN    BOT3        IF LINKED TO CURRENT TRACK 
          AOD    TK 
          LMD    LT 
          NJN    BOT2        IF MORE TRACKS TO CHECK
          LDD    RC          RESTORE CURRENT TRACK
          STD    TK 
          LJM    ERR2        *INCORRECT PARAMETER.* 
  
 BOT3     LJM    RET         RETURN 
 CTB      SPACE  4,10 
***       CTB.
*         CLEAR THE TRACK INTERLOCK BIT FOR CURRENT TRACK AND 
*         EQUIPMENT.  THE KEYBOARD MUST BE UNLOCKED TO USE THIS 
*         COMMAND.
  
  
 CTB      COMMAND 
          RJM    CLB         CHECK LOCK BIT 
          RJM    SNT         CHECK TRACK INTERLOCK BIT
          LDD    T1 
          ADC    SHNI+22-4-4
          STM    CTBA 
          LDD    CM+4 
 CTBA     SHN    ** 
          MJN    CTB1        IF TRACK INTERLOCK IS SET
          LJM    ERR4        *INCORRECT ENTRY.* 
  
 CTB1     LDD    EQ 
          STD    CM+1 
          LDD    TK 
          STD    CM+2 
          LDN    CTIS 
          STD    CM+3 
          MONITOR STBM
          LJM    RET         RETURN 
 DEP      SPACE  4,10 
***       DEP.
*         DISABLE ERROR PROCESSING FOR CALLS TO THE MASS STORAGE
*         DRIVER TO READ A SECTOR.
*         (BY DEFAULT, ERROR PROCESSING IS DISABLED.) 
  
  
 DEP      COMMAND 
          LDN    DEPL-1 
          STD    T1 
 DEP1     LDM    DEPA,T1     MOVE SETMS CODE
          STM    CTSA,T1
          SOD    T1 
          PJN    DEP1        IF MOVE NOT COMPLETE 
          LJM    RET         RETURN 
  
  
 DEPA     SETMS  IO,(AR,NS,AD,RW,DF)  SELECT RETURN ON ALL ERRORS 
 DEPL     EQU    *-DEPA      LENGTH 
 DIS      SPACE  4,10 
***       DIS.
*         DROP DISPLAY AND CALL *DIS* TO CONTROL POINT. 
  
  
 DIS      COMMAND 
          RJM    END         END CPU PROGRAM
          RJM    DDS         DROP DISPLAY 
          LDD    CP          SET CONTROL POINT NUMBER 
          SHN    -7 
          RAM    DISA+1 
          LDD    IA          WRITE INPUT REGISTER 
          CWM    DISA,ON
          LJM    PPR         EXIT TO PP RESIDENT
  
  
 DISA     VFD    60/0LDIS 
 DRP      SPACE  4,10 
***       DROP. 
*         DROP DISPLAY AND PP.
  
  
 DRP      COMMAND 
          RJM    END         END CPU PROGRAM
          RJM    DDS         DROP DISPLAY 
          LJM    DPP         DROP PP
 DTK      SPACE  4,10 
***       DTK.SSSS. 
*         DROP TRACKS STARTING WITH THE CURRENT TRACK AND SET THE EOI 
*         SECTOR IN THE TRT TO SSSS.
* 
*         DTK.
*         DROP TRACKS TO END OF CHAIN STARTING WITH THE CURRENT TRACK.
* 
*         THE KEYBOARD MUST BE UNLOCKED TO USE THIS COMMAND.
  
  
 DTK      COMMAND 
          RJM    CLB         CHECK LOCK BIT 
          RJM    CTR         CHECK TRACK RESERVATION
          PJN    DTK2        IF TRACK RESERVATION BIT NOT SET 
          LDD    EQ          SET EST ORDINAL
          ADC    4000        SET CHECKPOINT 
          STD    CM+1 
          LDD    TK 
          STD    CM+2 
          LDI    CA 
          ZJN    DTK1        IF NO SECTOR SPECIFIED 
          RJM    ASD         ASSEMBLE SECTOR NUMBER 
          LDD    AB+4 
          STD    CM+3 
          SBD    LS 
          SBN    1
          PJN    DTK2        IF ILLEGAL SECTOR
          LDD    CM+2        CLEAR SECTOR PARAMETER BIT 
          LPC    3777 
          STD    CM+2 
 DTK1     MONITOR DTKM
          LJM    RET         RETURN 
  
 DTK2     LJM    ERR2        *INCORRECT PARAMETER.* 
 EEP      SPACE  4,10 
***       EEP.
*         ENABLE ERROR PROCESSING FOR CALLS TO THE MASS STORAGE 
*         DRIVER TO READ A SECTOR.
*         (BY DEFAULT, ERROR PROCESSING IS DISABLED.) 
  
  
 EEP      COMMAND 
          LDN    EEPL-1 
          STD    T1 
 EEP1     LDM    EEPA,T1     MOVE SETMS CODE
          STM    CTSA,T1
          SOD    T1 
          PJN    EEP1        IF MOVE NOT COMPLETE 
          LJM    RET         RETURN 
  
  
 EEPA     SETMS  IO,(RR,NR,NS,AD,RW,DF)  RETURN ON NOT READY/RESERVED 
 EEPL     EQU    *-EEPA      LENGTH 
          ERRNZ  DEPL-EEPL   SETMS MACRO LENGTH CHANGE
 EET      SPACE  4,10 
***       EJT.NNNN. 
*         ENTER DISK ADDRESS FROM EJT ORDINAL NNNN. 
*         (0 .LE. NNNN .LE. LARGEST EJT ORDINAL.)  THE EQUIPMENT, 
*         TRACK, AND SECTOR ARE SET TO THE BEGINNING OF THE FILE. 
*         *INCORRECT PARAMETER.* IS DISPLAYED IF THE EJT ENTRY IS NOT 
*         USED OR THE FILE DOES NOT HAVE ANY TRACKS ASSIGNED. 
  
  
 EET      COMMAND 
          LDN    TARN 
          RJM    LDO         LOAD OVERLAY 
          LDN    PEJT 
          RJM    /TAR/RFE    READ FST ENTRY 
          LDD    FN+1 
          ZJP    ERR2        IF TRACK NOT ASSIGNED
          STD    TK 
          LDN    0           CLEAR SECTOR 
          STD    SC 
          LJM    IMS         INITIALIZE MASS STORAGE
 EST      SPACE  4,10 
***       EST.NN. 
*         ENTER EST ORDINAL.  THE EQUIPMENT MUST BE A MASS STORAGE
*         DEVICE. 
  
  
 EST      COMMAND 
          RJM    ASD         ASSEMBLE NUMBER
          LDD    AB+4 
          LPC    777
          STD    AB 
          SFA    EST         READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM 
          SHN    6
          PJN    EST1        IF NOT MASS STORAGE
          LDD    CM+4        MST ADDRESS/10 
          SHN    3
          ADN    DDLL 
          CRD    CM 
          LDD    CM 
          SHN    21-12
          MJN    EST1        IF NULL EQUIPMENT
          LDD    AB 
          STD    EQ 
          LJM    IMS         INITIALIZE MASS STORAGE
  
 EST1     LJM    ERR5        *INCORRECT EQUIPMENT.* 
 EFO      SPACE  4,10 
***       FAMILY.CCCCCCC. 
*         USE PERMANENT FILE FAMILY *CCCCCCC*.  (THE FAMILY IS SET
*         INTERNALLY IN DDF.  *PFCW* IN THE CONTROL POINT AREA IS NOT 
*         CHANGED.)  THE FAMILY IS INITIALLY SET TO THE FAMILY
*         SPECIFIED IN *PFCW*.
  
  
 EFO      COMMAND 
          RJM    ASN         ASSEMBLE NAME
          RJM    SFE         SET FAMILY EQUIPMENT 
          NJN    EFO1        IF FAMILY NOT FOUND
          LDD    T2          SET FAMILY EST ORDINAL 
          STD    PF+4 
          LJM    RET         RETURN 
  
 EFO1     LJM    ERR2        *INCORRECT PARAMETER.* 
  
  
*CALL     COMPSFE 
 FPE      SPACE  4,25 
***       FIND. 
*         THE FIND COMMAND SCANS THE CATALOG TRACK STARTING AT THE
*         CURRENT POSITION SEARCHING FOR THE SPECIFIED CATALOG ENTRY. 
*         THE CATALOG TRACK MUST BE READ VIA APPROPRIATE COMMANDS 
*         (FAMILY, PACKNAM, UI, ETC.) BEFORE THE FIND COMMAND IS USED.
*         THE FOLLOWING OPTIONS ARE AVAILABLE.
* 
*         FIND.CCCCCCC.NNNNNN.
*         SEARCH FOR PERMANENT FILE CCCCCCC WITH USER INDEX NNNNNN. 
* 
*         FIND.CCCCCCC..
*         SEARCH FOR PERMANENT FILE CCCCCCC WITH A ZERO USER INDEX
*         (I.E. A HOLE).
* 
*         FIND.CCCCCCC. 
*         SEARCH FOR PERMANENT FILE CCCCCCC.  THE USER INDEX IS 
*         IGNORED.
* 
*         FIND..NNNNNN. 
*         SEARCH FOR A PERMANENT FILE WITH USER INDEX NNNNNN.  THE FILE 
*         NAME IS IGNORED.
* 
*         FIND... 
*         SEARCH FOR A PERMANENT FILE WITH A ZERO USER INDEX.  THE FILE 
*         NAME IS IGNORED.  (I.E. SEARCH FOR ANY HOLE.) 
  
  
 FPE      COMMAND 
          RJM    ASN         GET FILE NAME
          AOD    CA 
          LDI    CA 
          ZJN    FPE1        IF UI NOT ENTERED
          RJM    ASD         ASSEMBLE USER INDEX
          LDD    AB+3 
          LPN    37 
          RAD    FN+3 
          LDD    AB+4 
          STD    FN+4 
 FPE1     LDD    RS 
          LMN    DFDN 
          SHN    12 
          ADM    /DFD/DFDB
          LMN    DPEN 
          NJN    FPE2        IF PFC DISPLAY NOT UP
          LDM    DRSA+4 
          UJN    FPE3        STORE PFC ORDINAL
  
 FPE2     LDN    0
 FPE3     STD    T3 
          SHN    NWCES
          STD    T1 
          SHN    2
          RAD    T1 
          LDM    BFMS 
          ADM    BFMS+1 
          NJN    FPE4        IF EOI NOT ENCOUNTERED 
          LJM    ERR3        *NOT FOUND.* 
  
*         COMPARE PARAMETERS WITH THE CATALOG ENTRY.
  
 FPE4     LDD    FN 
          ZJN    FPE6        IF FILE NAME NOT SPECIFIED 
          LDN    0
          STD    T2 
 FPE5     LDM    FN,T2       COMPARE NAME 
          LMM    BFMS+2,T1
          NJN    FPE7        IF NOT A MATCH 
          AOD    T1 
          AOD    T2 
          SBN    3
          MJN    FPE5        IF MORE CHARACTERS 
          LDD    FN+3        COMPARE SEVENTH CHARACTER
          LMM    BFMS+2,T1
          SCN    77 
          NJN    FPE9        IF NOT A MATCH 
 FPE6     LDD    T3 
          SHN    NWCES
          STD    T1 
          SHN    2
          RAD    T1 
          LDI    CA 
          NJN    FPE8        IF UI SPECIFIED
          LDM    BFMS+2+FCUI,T1 
          LPN    37 
          ADM    BFMS+2+FCUI+1,T1 
          NJN    FPE11       IF NON-ZERO, ASSUME MATCH
 FPE7     UJN    FPE9        CONTINUE SEARCH
  
 FPE8     LDM    BFMS+2+FCUI,T1 
          LMD    FN+3 
          LPN    37 
          NJN    FPE9        IF UI DOES NOT MATCH 
          LDM    BFMS+2+FCUI+1,T1 
          LMD    FN+4 
          ZJN    FPE11       IF UI MATCHES
  
*         ADVANCE TO NEXT CATALOG ENTRY.
  
 FPE9     AOD    T3          ADVANCE BUFFER INDEX 
          SHN    NWCES
          STD    T1 
          SBM    BFMS+1 
          PJN    FPE10       IF END OF SECTOR 
          LDD    T1 
          SHN    2
          RAD    T1 
          LJM    FPE4        LOOP 
  
 FPE10    RJM    SNS         SET NEXT SECTOR
          RJM    RSB         READ SECTOR
          MJN    FPE12       IF ERROR 
          RJM    RCPA        RETURN TO MAIN LOOP
          LJM    FPE2        LOOP 
  
*         DISPLAY PFC ENTRY.
  
 FPE11    LDN    DFDN        SET DISPLAY
          STD    RS 
          RJM    LDO         LOAD OVERLAY 
          LDD    T3 
          STM    DRSA+4 
 FPE12    LJM    RET         RETURN 
 FIS      SPACE  4,10 
***       FINDISS.NNNNNN. 
*         STARTING AT THE CURRENT POSITION, SEARCH FOR THE NEXT SYSTEM
*         SECTOR WITH USER INDEX NNNNNN ON THE CHAIN.  IF NNNNNN IS 
*         NOT SPECIFIED THE USER INDEX IS NOT CHECKED AND THE NEXT
*         SYSTEM SECTOR IS DISPLAYED.  THIS COMMAND IS INTENDED TO BE 
*         USED ON THE INDIRECT ACCESS PERMANENT FILE CHAIN. 
  
  
 FIS      COMMAND 
          LDI    CA 
          ZJN    FIS1        IF NO USER INDEX SPECIFIED 
          RJM    ASD         ASSEMBLE USER INDEX
          LDD    AB+3 
          STD    FN+3 
          LDD    AB+4 
          STD    FN+4 
 FIS1     RJM    SNS         ADVANCE TO NEXT SECTOR 
          NJN    FIS3        IF NOT EOI 
          RJM    SNT         GET NEXT TRACK 
          STD    T1 
          SHN    6
          MJN    FIS2        IF NOT EOI TRACK 
          SHN    -6 
          LMD    SC 
          NJN    FIS2        IF NOT AT EOI INDICATED IN TRT 
          LJM    ERR3        *NOT FOUND.* 
  
 FIS2     AOD    SC 
          SBD    LS 
          SBN    1
          NJN    FIS3        IF NOT END OF TRACK
          STD    SC 
          LDD    T1 
          STD    TK 
 FIS3     RJM    RSB         READ SECTOR
          MJN    FIS5        IF ERROR 
          LDM    BFMS 
          SHN    6
          ADM    BFMS+1 
          LMC    377777 
          NJN    FIS4        IF NOT SYSTEM SECTOR 
          LDI    CA 
          ZJN    FIS5        IF NO UI SPECIFIED 
          LDM    CTSS+3 
          LMD    FN+3 
          LPN    37 
          NJN    FIS4        IF UI DOES NOT MATCH 
          LDM    CTSS+4 
          LMD    FN+4 
          ZJN    FIS5        IF UI MATCHES
 FIS4     RJM    RCPA        RETURN TO MAIN LOOP
          LJM    FIS1        LOOP 
  
 FIS5     LJM    RET         RETURN 
 FOV      SPACE  4,10 
***       FINDO.NNNN NNNN NNNN NNNN NNNN. 
*         SEARCH FROM THE CURRENT POSITION FOR THE OCTAL NUMBER 
*         SPECIFIED.  THE NUMBER CAN BE 1 TO 20 DIGITS AND IS RIGHT 
*         JUSTIFIED IN AS MANY BYTES AS ARE NECESSARY TO HOLD THE 
*         NUMBER.  THE SEARCH STARTS ON A BYTE BOUNDARY AND THE BYTE
*         NUMBER IS DISPLAYED IF THE SEARCH IS SUCCESSFUL.  IF THE
*         FIRST PART OF THE NUMBER IS FOUND AT THE END OF THE BUFFER, 
*         THE SEARCH IS TERMINATED EVEN THOUGH THE ENTIRE NUMBER
*         WAS NOT FOUND.  IF THE CARRIAGE RETURN IS ENTERED AGAIN,
*         THE SEARCH CONTINUES AT THE CURRENT MATCH.
  
  
 FOV      COMMAND 
          LDD    CA          SAVE CHARACTER ADDRESS 
          STD    FN+4 
          LDN    0
          STD    T1 
 FOV1     AOD    CA          FIND SIZE OF NUMBER
          LDI    CA 
          ZJN    FOV2        IF END OF STRING 
          LMN    1R 
          NJN    FOV1        IF NOT BLANK CHARACTER 
          AOD    T1          COUNT BLANKS 
          UJN    FOV1        CHECK NEXT CHARACTER 
  
 FOV2     SOD    CA          SET BYTE COUNT 
          SBD    FN+4 
          SBD    T1 
          ADN    3
          SHN    -2 
          STD    FN+3 
 FOV3     LDD    FN+4        CONVERT NUMBER 
          STD    CA 
          RJM    ASD         ASSEMBLE DIGITS
          LDD    KM          CHECK KEYBOARD MESSAGE 
          LMC    SBNA 
          NJN    FOV4        IF NOT MESSAGE FROM FINDO
          STD    KM 
          LJM    FOV9        CONTINUE SEARCH
  
 FOV4     LDM    BFMS 
          ZJN    FOV5        IF EOF 
          LDM    BFMS+1 
 FOV5     ZJN    FOV10       IF ZERO LENGTH SECTOR
          SHN    2           SET BYTE COUNT 
          ADM    BFMS+1 
          ADN    2
          STD    FN+2 
          LDN    2           SET STARTING POSITION
          STD    FN 
          STD    FN+1 
 FOV6     LDN    5           SET BEGINNING OF SEARCH
          SBD    FN+3 
          STD    T3 
 FOV7     LDM    BFMS,FN+1   COMPARE BYTES
          LMM    AB,T3
          NJN    FOV9        IF NOT A MATCH 
          AOD    T3 
          LMN    5
          ZJN    FOV8        IF SEARCH COMPLETE 
          AOD    FN+1 
          LMD    FN+2 
          NJN    FOV7        IF NOT END OF SECTOR 
 FOV8     LJM    SBN         DISPLAY BYTE NUMBER
  
 FOV9     AOD    FN 
          STD    FN+1 
          LMD    FN+2 
          NJN    FOV6        IF NOT END OF SECTOR 
 FOV10    RJM    RCPA        RETURN TO MAIN LOOP
          RJM    SNS         READ NEXT SECTOR 
          ZJN    FOV11       IF EOI 
          RJM    RSB         READ SECTOR
          MJN    FOV12       IF ERROR 
          LJM    FOV3        LOOP 
  
 FOV11    LJM    ERR3        *NOT FOUND.* 
  
 FOV12    LJM    RET         RETURN 
 FST      SPACE  4,10 
***       FINDS.CCCCCCC 
*         SEARCH FROM THE CURRENT POSITION FOR THE STRING OF CHARACTERS 
*         CCCCCCC.  IF THE FIRST PART OF THE STRING MATCHES THE 
*         END OF THE BUFFER, THE SEARCH IS TERMINATED EVEN THOUGH THE 
*         ENTIRE STRING WAS NOT FOUND.  THE BYTE NUMBER OF THE BEGIN- 
*         ING OF THE STRING IS DISPLAYED.  IF THE CARRIAGE RETURN IS
*         ENTERED, THE SEARCH IS BEGUN AGAIN AT THAT POINT. 
  
  
 FST      COMMAND 
          LDI    CA 
          NJN    FST1        IF CHARACTER STRING ENTERED
          LJM    ERR2        *INCORRECT PARAMETER.* 
  
 FST1     LDD    KM          CHECK KEYBOARD MESSAGE 
          LMC    SBNA 
          NJN    FST2        IF NOT MESSAGE FROM FINDS
          STD    KM 
          LDN    1
          STD    T2 
          LJM    FST9        CONTINUE SEARCH AT NEXT BYTE 
  
 FST2     LDM    BFMS 
          ZJN    FST3        IF EOF 
          LDM    BFMS+1 
          NJN    FST4        IF NOT ZERO LENGTH SECTOR
 FST3     LJM    FST10       ADVANCE TO NEXT SECTOR 
  
 FST4     SHN    2           SET BYTE COUNT 
          ADM    BFMS+1 
          ADN    2
          STD    FN+2 
          LDN    2           SET STARTING BYTE NUMBER 
          STD    FN 
          STD    FN+1 
          LDD    CA          SET BEGINNING OF STRING
          STD    T3 
 FST5     LDN    2           SET FIRST/SECOND HALF OF BYTE FLAG 
          STD    T2 
 FST6     LDM    BFMS,FN+1   CHECK FIRST CHARACTER OF BYTE
          SHN    -6 
          LMI    T3 
          NJN    FST9        IF CHARACTERS DONT MATCH 
          AOD    T3 
 FST7     LDI    T3          CHECK SECOND CHARACTER OF BYTE 
          ZJN    FST8        IF SEARCH COMPLETE 
          LMM    BFMS,FN+1
          LPN    77 
          NJN    FST9        IF CHARACTERS DONT MATCH 
          AOD    T3 
          LDI    T3 
          ZJN    FST8        IF SEARCH COMPLETE 
          AOD    FN+1        ADVANCE TO NEXT 2 CHARACTERS 
          LMD    FN+2 
          NJN    FST6        IF NOT END OF SECTOR 
 FST8     LJM    SBN         DISPLAY BYTE NUMBER
  
 FST9     LDD    CA          RESET POINTERS 
          STD    T3 
          LDD    FN 
          STD    FN+1 
          SOD    T2 
          NJN    FST7        IF STARTED WITH FIRST CHARACTER OF BYTE
          AOD    FN          ADVANCE SEARCH TO START WITH NEXT BYTE 
          STD    FN+1 
          LMD    FN+2 
          NJN    FST5        IF NOT END OF SECTOR 
 FST10    RJM    RCPA        RETURN TO MAIN LOOP
          RJM    SNS         SET NEXT SECTOR
          ZJN    FST11       IF EOI 
          RJM    RSB         READ SECTOR
          MJN    FST12       IF ERROR 
          LJM    FST2        SEARCH NEW SECTOR
  
 FST11    LJM    ERR3        *NOT FOUND.* 
  
 FST12    LJM    RET         RETURN 
 FSS      SPACE  4,10 
***       FINDSS.NNNNNN.
*         STARTING FROM THE CURRENT TRACK AND SEARCHING TO THE END
*         OF THE TRT, FIND AND DISPLAY THE NEXT SYSTEM SECTOR WITH
*         USER INDEX NNNNNN.  IF NNNNNN IS NOT SPECIFIED, THE USER
*         INDEX IS NOT CHECKED. 
  
  
 FSS      COMMAND 
          LDN    0
          STD    SC 
          LDI    CA 
          ZJN    FSS1        IF UI NOT ENTERED
          RJM    ASD         ASSEMBLE USER INDEX
          LDD    AB+3 
          STD    FN+3 
          LDD    AB+4 
          STD    FN+4 
 FSS1     AOD    TK          ADVANCE TO NEXT TRACK
          LMD    LT 
          NJN    FSS2        IF NOT END OF TRT
          SOD    TK 
          LJM    ERR3        *NOT FOUND.* 
  
 FSS2     RJM    SNT         CHECK FOR FLAWED TRACK 
          LMC    3777 
          ZJN    FSS1        IF FLAWED TRACK
          RJM    RSB         READ SECTOR
          MJN    FSS4        IF ERROR 
          LDM    BFMS 
          SHN    6
          ADM    BFMS+1 
          LMC    377777 
          NJN    FSS3        IF NOT SYSTEM SECTOR 
          LDI    CA 
          ZJN    FSS4        IF NO UI SPECIFIED 
          LDM    FNSS+4      CHECK FILE TYPE
          SHN    -6 
          LMN    PMFT 
          NJN    FSS3        IF NOT PERMANENT FILE SYSTEM SECTOR
          LDM    CTSS+3 
          LMD    FN+3 
          LPN    37 
          NJN    FSS3        IF UI DOES NOT MATCH 
          LDM    CTSS+4 
          LMD    FN+4 
          ZJN    FSS4        IF UI MATCHES
 FSS3     RJM    RCPA        RETURN TO MAIN LOOP
          LJM    FSS1        LOOP 
  
 FSS4     LJM    RET         RETURN 
 EFB      SPACE  4,10 
***       FNT.NNNN. 
*         ENTER DISK ADDRESS FROM GLOBAL FNT ORDINAL NNNN.
*         (0 .LE. NNNN .LE. LARGEST FNT ORDINAL.)  THE EQUIPMENT, 
*         TRACK, AND SECTOR ARE SET TO THE BEGINNING OF THE FILE. 
*         *INCORRECT PARAMETER.* IS DISPLAYED IF THE FNT ENTRY IS NOT 
*         USED OR THE FILE DOES NOT HAVE ANY TRACKS ASSIGNED. 
  
  
 EFB      COMMAND 
          LDN    TARN 
          RJM    LDO         LOAD OVERLAY 
          LDN    PFNT 
          RJM    /TAR/RFE    READ FST ENTRY 
          LDD    FN+1 
          ZJP    ERR2        IF TRACK NOT ASSIGNED
          STD    TK          TRACK
          LDN    0
          STD    SC          SECTOR 
          LJM    IMS         INITIALIZE MASS STORAGE
 EFL      SPACE  4,10 
***       FNTL.NNNN.
*         ENTER DISK ADDRESS FROM LOCAL FNT ORDINAL NNNN. 
*         (0 .LE. NNNN .LE. LARGEST FNT ORDINAL.)  THE EQUIPMENT, 
*         TRACK, AND SECTOR ARE SET TO THE BEGINNING OF THE FILE. 
*         *INCORRECT PARAMETER.* IS DISPLAYED IF THE FNT ENTRY IS NOT 
*         USED OR THE FILE DOES NOT HAVE ANY TRACKS ASSIGNED. 
  
  
 EFL      COMMAND 
          LDN    TARN 
          RJM    LDO         LOAD OVERLAY 
          LDN    PNFL 
          RJM    /TAR/RFE    READ FST ENTRY 
          LDD    FN+1 
          ZJP    ERR2        IF TRACK NOT ASSIGNED
          STD    TK 
          LDN    0           CLEAR SECTOR 
          STD    SC 
          LJM    IMS         INITIALIZE MASS STORAGE
 EFC      SPACE  4,10 
***       FNTLC.NNNN. 
*         ENTER DISK ADDRESS FROM LOCAL FNT ORDINAL NNNN. 
*         (0 .LE. NNNN .LE. LARGEST FNT ORDINAL.)  THE EQUIPMENT, 
*         TRACK, AND SECTOR ARE SET TO THE CURRENT POSITION OF THE
*         FILE.  *INCORRECT PARAMETER.* IS DISPLAYED IF THE FNT ENTRY 
*         IS NOT USED OR THE FILE DOES NOT HAVE ANY TRACKS ASSIGNED.
  
  
 EFC      COMMAND 
          LDN    TARN 
          RJM    LDO         LOAD OVERLAY 
          LDN    PNFL 
          RJM    /TAR/RFE    READ FST ENTRY 
          LDD    T3          CHECK FILE TYPE
          CRD    CM 
          LDD    FN+2        SET TRACK
          ZJN    EFC2        IF NO CURRENT TRACK
          STD    TK 
          LDD    FN+3        SET SECTOR 
          STD    SC 
          UJN    EFC3        INITIALIZE MASS STORAGE
  
 EFC2     STD    SC          SET SECTOR 
          LDD    FN+1        SET TRACK
          STD    TK 
 EFC3     LJM    IMS         INITIALIZE MASS STORAGE
 GTT      SPACE  4,10 
***       GETTRT.NNNN.
*         THIS COMMAND IS INTENDED TO BE USED ON THE LABEL TRACK.  THE
*         EQUIPMENT AND TRACK MUST BE SET FOR THE LABEL TRACK BEFORE
*         THE COMMAND IS USED.  GETTRT READS THE SECTOR THAT CONTAINS 
*         THE CHECKPOINTED TRT INFORMATION FOR TRACK NNNN AND DISPLAYS
*         THE BYTE NUMBER WITHIN THE SECTOR FOR THAT TRACK. 
  
  
 GTT      COMMAND 
          RJM    ASD         GET TRACK NUMBER 
          LDD    AB+4        GET BYTE NUMBER WITHIN CM WORD 
          LPC    3777 
          STD    AB+4 
          LPN    3
          STD    AB+3 
          LDD    AB+4        GET CM WORD NUMBER 
          SHN    -2 
          STD    AB+2 
          SHN    -6          SET SECTOR NUMBER
          STD    SC 
          SHN    6
          STD    AB+1 
          AOD    SC 
          LDD    AB+2        GET CM WORD NUMBER WITH SECTOR 
          SBD    AB+1 
          STD    AB 
          SHN    2           CALCULATE BYTE NUMBER
          ADD    AB 
          ADD    AB+3 
          ADN    2
          STD    FN 
          RJM    RSB         READ SECTOR
          LJM    SBN         DISPLAY BYTE NUMBER
 HOL      SPACE  4,10 
***       HOLD. 
*         DROP DISPLAY AND WAIT FOR OPERATOR ASSIGNMENT.  RESERVED
*         CHANNEL IS NOT DROPPED. 
  
  
 HOL      COMMAND 
          RJM    DDS         DROP DISPLAY 
          LDD    MA          SAVE DISK DATA 
          CWD    T3 
          RJM    RDC         REQUEST DISPLAY
          RJM    CSB         CLEAR SCREEN BUFFER
          LDD    MA          RESTORE DISK DATA
          CRD    T3 
          LJM    IMS         INITIALIZE MASS STORAGE
 EIT      SPACE  4,10 
***       QFT.NNNN. 
*         ENTER DISK ADDRESS FROM QFT ORDINAL NNNN. 
*         (0 .LE. NNNN .LE. LARGEST QFT ORDINAL.)  THE EQUIPMENT, 
*         TRACK, AND SECTOR ARE SET TO THE BEGINNING OF THE FILE. 
*         *INCORRECT PARAMETER.* IS DISPLAYED IF THE QFT ENTRY IS NOT 
*         USED OR THE FILE DOES NOT HAVE ANY TRACKS ASSIGNED. 
  
  
 EIT      COMMAND 
          LDN    TARN 
          RJM    LDO         LOAD OVERLAY 
          LDN    PQFT 
          RJM    /TAR/RFE    READ FST ENTRY 
          LDD    FN+1 
          ZJP    ERR2        IF TRACK NOT ASSIGNED
          STD    TK 
          LDN    0           CLEAR SECTOR 
          STD    SC 
          LJM    IMS         INITIALIZE MASS STORAGE
 LSA      SPACE  4,10 
***       LOAD.C. 
*         RELOAD THE EQUIPMENT, TRACK, AND SECTOR FROM SCRATCH AREA 
*         C.  C IS A SINGLE ALPHABETIC CHARACTER (LEGAL CHARACTERS ARE
*         DISPLAYED ON THE LEFT SCREEN).  (REFER TO THE STORE COMMAND.) 
  
  
 LSA      COMMAND 
          RJM    CSA         GET ADDRESS OF SCRATCH AREA
          LDI    T2 
          ZJN    LSA1        IF STORE NOT DONE
          STD    EQ 
          LDM    1,T2 
          STD    TK 
          LDM    2,T2 
          STD    SC 
          LDM    3,T2        SET DISPLAY
          SHN    -11
          STD    RS 
          RJM    LDO         LOAD OVERLAY 
          LDM    3,T2 
          LPC    777
          STM    DRSA+4 
          LJM    IMS         INITIALIZE MASS STORAGE
  
 LSA1     LJM    ERR2        *INCORRECT PARAMETER.* 
 EPN      SPACE  4,10 
***       PACKNAM.CCCCCCC.
*         USE PERMANENT FILE PACK CCCCCCC.  (THE PACK NAME IS SET 
*         INTERNALLY IN DDF.  *PKNW* IN THE CONTROL POINT AREA IS NOT 
*         CHANGED.)  THE PACK NAME IS INITIALLY SET TO THE NAME IN
*         *PKNW*. 
  
  
 EPN      COMMAND 
          RJM    ASN         GET NAME 
          LDD    FN          SAVE NAME
          STD    PF 
          LDD    FN+1 
          STD    PF+1 
          LDD    FN+2 
          STD    PF+2 
          LDD    PF+3 
          LPN    77 
          LMD    FN+3 
          STD    PF+3 
          LJM    RET         RETURN 
 PRD      SPACE  4,10 
***       PREAD.
*         READ THE CURRENT SECTOR USING THE *READ PROTECTED SECTOR* 
*         FUNCTION.  THIS COMMAND REPLACES THE SPACE KEY WHEN READING 
*         PROTECTED SECTORS.  SPECIAL KEYS LIKE *+* AND *-* CANNOT
*         BE USED TO READ PROTECTED SECTORS. THE KEYBOARD MUST BE 
*         UNLOCKED TO USE THIS COMMAND. 
  
  
 PRD      COMMAND 
          RJM    CLB         CHECK LOCK BIT 
          RJM    CEQ         CHECK EQUIPMENT
          LDD    TK          SAVE TRACK AND SECTOR
          STD    FN 
          LDD    SC 
          STD    FN+1 
          LDD    EQ          SET EQUIPMENT
          ADC    1000 
          STM    PRDB 
          EXECUTE  0PI,PRDB+1  SET UP DRIVER FOR PROTECTED SECTORS
          LDD    FN          RESET TRACK AND SECTOR 
          STD    TK 
          LDD    FN+1 
          STD    SC 
          LDM    KBUF+1 
          LMN    1RW
          NJN    PRD1        IF NOT *PWRITE* COMMAND
          LDC    WDS
          STM    PRDA 
 PRD1     LDC    BFMS        READ/WRITE SECTOR
          RJM    RDS
 PRDA     EQU    *-1
*         RJM    WDS         (*PWRITE* COMMAND) 
          MJN    PRD2        IF ERROR 
          ENDMS 
*         LDN    0
          STM    RDCT 
 PRD2     LDM    RDCT        RELOAD DRIVER
          STD    FN 
          LDD    T6 
          STD    FN+1 
          RJM    CTS
          LDD    FN 
          STM    RDCT 
          LDD    FN+1 
          STD    T6 
          LJM    RET         RETURN 
  
  
 PRDB     BSS    0           *0PI* LOAD ADDRESS 
          ERRNG  7777-PRDB-1-ZPXL  *0PI* OVERFLOWS PP MEMORY
 PTK      SPACE  4,10 
***       PTK.NNNN. 
*         ENTER PROTECTED TRACK.  THIS COMMAND WORKS THE SAME AS THE
*         TK. COMMAND EXCEPT THE NUMBER ENTERED IS NOT CHECKED AND THE
*         KEYBOARD MUST BE UNLOCKED.
  
  
 PTK      COMMAND 
          RJM    CLB         CHECK LOCK BIT 
          RJM    ASD         ASSEMBLE TRACK NUMBER
          LDD    AB+4 
          LPC    3777 
          LMC    4000 
          STD    TK 
          LJM    RET         RETURN 
 PWT      SPACE  4,10 
***       PWRITE. 
*         WRITE THE CURRENT SECTOR USING THE *WRITE PROTECTED SECTOR* 
*         FUNCTION.  THIS COMMAND SHOULD BE USED INSTEAD OF THE *WRITE* 
*         COMMAND WHEN WRITING PROTECTED SECTORS. 
  
  
          QUAL   PRESET 
 PWT      EQU    PRD
 PWTL     EQU    PRDL 
          QUAL   *
 ERA      SPACE  4,20 
***       RANDOM.NNNN.RRRR. 
*         SET TRACK AND SECTOR FOR RANDOM ADDRESS RRRR WITH FIRST TRACK 
*         NNNN.  *INCORRECT PARAMETER.* IS DISPLAYED IF THE RANDOM
*         ADDRESS IS NOT ON THE TRACK.
* 
* 
*         RANDOM..RRRR. 
*         SET TRACK AND SECTOR FOR RANDOM ADDRESS RRRR USING THE
*         CURRENT TRACK AS THE FIRST TRACK.  *INCORRECT PARAMETER.* IS
*         DISPLAYED IF THE RANDOM ADDRESS IS NOT ON THE CHAIN.
* 
* 
*         RANDOM.C.RRRR.
*         SET TRACK AND SECTOR FOR RANDOM ADDRESS RRRR USING THE TRACK
*         SPECIFIED BY SCRATCH REGISTER C AS THE FIRST TRACK. 
*         *INCORRECT PARAMETER.* IS DISPLAYED IF THE RANDOM ADDRESS IS
*         NOT ON THE CHAIN. 
  
  
 ERA      COMMAND 
          LDD    TK          SAVE CURRENT TRACK 
          STD    RC 
          LDI    CA 
          LMN    1R.
          ZJN    ERA3        IF TRACK NUMBER NOT ENTERED
          LDI    CA 
          SBN    NSRA+1 
          PJN    ERA1        IF NOT A SCRATCH AREA
          RJM    CSA         COMPUTE SCRATCH AREA ADDRESS 
          LDM    1,T2        SET TRACK FROM SCRATCH AREA
          UJN    ERA2        STORE TRACK
  
 ERA1     RJM    ASD         GET FIRST TRACK
          LDD    AB+4 
 ERA2     STD    TK 
 ERA3     AOD    CA 
          RJM    CDR         GET RANDOM ADDRESS 
          LMN    1R.
          NJN    ERA4        IF FORMAT ERROR
          RJM    CRA         CHECK RANDOM ADDRESS 
          MJN    ERA5        IF NOT ON CHAIN
          LJM    RET         RETURN 
  
 ERA4     LDD    RC          RESET TRACK
          STD    TK 
          LJM    ERR1        *FORMAT ERROR.*
  
 ERA5     LDD    RC          RESET TRACK
          STD    TK 
          LJM    ERR2        *INCORRECT PARAMETER.* 
  
  
*CALL     COMPCRA 
 ESC      SPACE  4,10 
***       SC.NNNN.
*         ENTER SECTOR NUMBER.  *INCORRECT PARAMETER.* IS DISPLAYED IF
*         THE SECTOR NUMBER IS TOO LARGE. 
  
  
 ESC      COMMAND 
          RJM    ASD         ASSEMBLE NUMBER
          LDD    LS 
          SBD    AB+4 
          MJN    ESC1        IF ILLEGAL SECTOR
          LDD    AB+4 
          STD    SC 
          LJM    RET         RETURN 
  
 ESC1     LJM    ERR2        *INCORRECT PARAMETER.* 
 ELS      SPACE  4,10 
***       SC.*. 
*         ENTER THE NUMBER OF THE LAST SECTOR ON THE TRACK INTO THE 
*         SECTOR NUMBER.
  
  
 ELS      COMMAND 
          LDD    LS          SET LAST SECTOR
          STD    SC 
          LJM    RET         RETURN 
 SCN      SPACE  4,15 
***       SCAN. 
*         SCAN FROM THE CURRENT POSITION UNTIL THE END OF INFORMATION 
*         CONTROL BYTES ARE ENCOUNTERED.  THE SCAN STOPS IF, AT SOME
*         POINT, THE CONTROL BYTES ARE INCORRECT OR THE TRACK IS NOT
*         RESERVED. 
* 
* 
*         SCAN.*. 
*         SCAN FROM THE CURRENT POSITION UNTIL THE END OF INFORMATION 
*         INDICATED IN THE TRT IS REACHED.  THIS IS INTENDED TO BE USED 
*         FOR THE INDIRECT ACCESS PERMANENT FILE CHAIN.  NOTE - WHEN
*         *PFM* DELINKS A TRACK IN THE MIDDLE OF THE CHAIN, IT DOES NOT 
*         UPDATE THE TRACK POINTER IN THE PRECEEDING TRACK.  THIS WILL
*         CAUSE SCAN TO STOP AT THIS POINT AND DISPLAY AN ERROR.
  
  
 SCN      COMMAND 
 SCN1     RJM    RCPA        RETURN TO MAIN LOOP
          RJM    SNT         CHECK TRT
          LDN    0           SET ERROR MESSAGE NUMBER 
          STD    T3 
          LDM    BFMS 
          SHN    6
          ADM    BFMS+1 
          LMC    377777 
          NJN    SCN2        IF NOT SYSTEM SECTOR 
          AOD    T3 
          LDM    NSSS 
          UJN    SCN3        CHECK SYSTEM SECTOR POINTER
  
 SCN2     LDM    BFMS 
          NJN    SCN3        IF NOT EOF 
          LDM    BFMS+1 
          NJN    SCN3        IF NOT EOI 
          LJM    SCN9        CHECK EOI PROCESSING 
  
 SCN3     SHN    6
          PJN    SCN4        IF NOT A TRACK LINK BYTE 
          SHN    -6 
          LMM    CM,T1
          NJN    SCN8        IF LINKAGE BYTES DONT MATCH TRT
          LDN    2           SET ERROR MESSAGE NUMBER 
          STD    T3 
          LDD    SC 
          LMD    LS 
          NJN    SCN8        IF TRACK LINK NOT IN LAST SECTOR 
          UJN    SCN5        CHECK WORD COUNT 
  
 SCN4     SHN    -6 
          SBN    1
          LMD    SC 
          NJN    SCN8        IF NEXT SECTOR .NE. CURRENT SECTOR+1 
 SCN5     LDN    3           SET MESSAGE NUMBER 
          STD    T3 
          LDM    BFMS        CHECK WORD COUNT 
          ZJN    SCN6        IF EOF 
          LDD    HN 
          SBM    BFMS+1 
          MJN    SCN8        IF BAD WORD COUNT
 SCN6     AOD    T3 
          RJM    CTR         CHECK TRACK RESERVATION
          PJN    SCN8        IF TRACK NOT RESERVED
          RJM    SNS         ADVANCE TO NEXT SECTOR 
 SCN7     RJM    RSB         READ SECTOR
          MJN    SCN11       IF ERROR 
          LJM    SCN1        LOOP 
  
 SCN8     LDM    SCNA,T3     GET MESSAGE
          LJM    SKM         SET KEYBOARD MESSAGE 
  
 SCN9     LDI    CA 
          ZJN    SCN11       IF NOT SCAN TO TRT EOI 
          RJM    SNT         SET NEXT TRACK 
          STD    T1 
          SHN    6
          MJN    SCN10       IF NOT EOI TRACK 
          SHN    -6 
          LMD    SC 
          ZJN    SCN11       IF AT EOI INDICATED IN TRT 
 SCN10    AOD    SC          ADVANCE TO NEXT SECTOR 
          SBD    LS 
          SBN    1
          NJN    SCN7        IF NOT END OF TRACK
          STD    SC 
          LDD    T1 
          STD    TK 
          UJN    SCN7        READ NEXT SECTOR 
  
 SCN11    LJM    RET         RETURN 
  
  
 SCNA     CON    SCNB,SCNC,SCND,SCNE,SCNF 
 SCNB     DATA   Z*LINKAGE BYTE BAD.* 
 SCNC     DATA   Z*SYSTEM SECTOR LINKAGE BYTE BAD.* 
 SCND     DATA   Z*TRACK LINK IN WRONG SECTOR.* 
 SCNE     DATA   Z*WORD COUNT TOO BIG.* 
 SCNF     DATA   Z*TRACK NOT RESERVED.* 
 SPF      SPACE  4,10 
***       SHOWPF. 
*         DISPLAY THE PERMANENT FILE WHOSE CATALOG ENTRY IS CURRENTLY 
*         DISPLAYED.  THE *PFC* DISPLAY MUST BE ON THE RIGHT SCREEN TO
*         USE THIS COMMAND.  THE DEVICE, TRACK, AND SECTOR FROM THE 
*         PFC CURRENTLY DISPLAYED ARE USED TO DISPLAY THE FILE.  IF THE 
*         DEVICE IS NOT PRESENT, *INCORRECT PARAMETER* IS DISPLAYED.
  
  
 SPF      COMMAND 
          LDD    RS          CHECK CURRENT DISPLAY
          LMN    DFDN 
          SHN    12 
          ADM    /DFD/DFDB
          LMN    DPEN 
          NJP    ERR4        IF PFC DISPLAY NOT UP
          LDM    DRSA+4      COMPUTE PFC ADDRESS
          SHN    NWCES
          STD    FN 
          SHN    2
          RAD    FN 
          LDM    BFMS+2+FCDN,FN  DETERMINE EQUIPMENT FILE IS ON 
          LPN    77 
          ZJN    SPF2        IF FILE IS ON MASTER DEVICE
          STD    CM 
          LDD    MA          SAVE CURRENT DIRECT CELLS
          ADN    4
          CWD    T3 - T7
          ADN    1
          CWD    CM+3 - CM+7
          LDD    T5          SEARCH FOR DEVICE
          RJM    SDN
          PJN    SPF1        IF DEVICE FOUND
          ADN    1
          ZJN    SPF4        IF DEVICE NOT FOUND
 SPF1     LDD    MA          RESTORE DIRECT CELLS USED BY *COMPSDN* 
          ADN    4+1
          CRD    CM+3 
 SPF2     LDM    BFMS+2+FCBT,FN  SET TRACK
          STD    T6 
          LDM    BFMS+2+FCBS,FN  SET SECTOR 
          STD    T7 
          SHN    21-13
          PJN    SPF3        IF INDIRECT ACCESS FILE
          LDN    0
          STD    T7 
 SPF3     LJM    IMS         INITIALIZE MASS STORAGE
  
 SPF4     LDD    MA          RESTORE PREVIOUS VALUES TO DIRECT CELLS
          ADN    4
          CRD    T3 
          ADN    1
          CRD    CM+3 
          LJM    ERR2        *INCORRECT PARAMETER*
  
  
*CALL     COMPSDN 
 SKE      SPACE  4,10 
***       SKIPEI. 
*         SET TRACK AND SECTOR TO EOI BASED ON CURRENT POSITION AND 
*         INFORMATION IN THE TRT.  THE NUMBER OF SECTORS SKIPPED IS 
*         DISPLAYED ON THE LEFT SCREEN. 
  
  
 SKE      COMMAND 
          RJM    SEI         SEARCH FOR EOI 
          LDD    T2          SET UP MESSAGE 
          SHN    -6 
          RJM    C2D         CONVERT TWO DIGITS 
          STM    SKEB 
          LDD    T2 
          RJM    C2D         CONVERT TWO DIGITS 
          STM    SKEB+1 
          LDD    T3 
          SHN    -6 
          RJM    C2D         CONVERT TWO DIGITS 
          STM    SKEB+2 
          LDD    T3 
          RJM    C2D         CONVERT TWO DIGITS 
          STM    SKEB+3 
          LDC    SKEA 
          LJM    SKM         SET KEYBOARD MESSAGE 
  
  
 SKEA     DATA   H* LENGTH = *
 SKEB     DATA   Z*NNNNNNNNB.*
  
  
*CALL     COMPSEI 
 SKF      SPACE  4,10 
***       SKIPF.
*         READ THE FILE STARTING AT THE CURRENT POSITION UNTIL AN EOF 
*         IS ENCOUNTERED. 
  
  
 SKF      COMMAND 
 SKF1     RJM    SNS         ADVANCE TO THE NEXT SECTOR 
          RJM    RSB         READ SECTOR
          MJN    SKF2        IF ERROR 
          RJM    RCPA        RETURN TO MAIN LOOP
          LDM    BFMS 
          ADM    BFMS+1 
          ZJN    SKF3        IF EOI 
          LDM    BFMS 
          NJN    SKF1        IF NOT EOF 
 SKF2     LJM    RET         RETURN 
  
 SKF3     LJM    ERR3        *NOT FOUND.* 
 SKR      SPACE  4,10 
***       SKIPR.
*         READ THE FILE STARTING AT THE CURRENT POSITION UNTIL AN EOR 
*         OR EOF IS ENCOUNTERED.
  
  
 SKR      COMMAND 
 SKR1     RJM    SNS         ADVANCE TO THE NEXT SECTOR 
          RJM    RSB         READ SECTOR
          MJN    SKR2        IF ERROR 
          RJM    RCPA        RETURN TO MAIN LOOP
          LDM    BFMS 
          ADM    BFMS+1 
          ZJN    SKR3        IF EOI 
          LDM    BFMS 
          ZJN    SKR2        IF EOF 
          LDM    BFMS+1 
          SHN    -6 
          NJN    SKR1        IF NOT SHORT PRU 
 SKR2     LJM    RET         RETURN 
  
 SKR3     LJM    ERR3        *NOT FOUND.* 
 STB      SPACE  4,10 
***       STB.
*         SET THE TRACK INTERLOCK BIT FOR THE CURRENT TRACK.  THE 
*         KEYBOARD MUST BE UNLOCKED TO USE THIS COMMAND.
  
  
 STB      COMMAND 
          RJM    CLB         CHECK LOCK BIT 
 STB1     RJM    CTR         CHECK TRACK RESERVATION
          MJN    STB2        IF TRACK IS RESERVED 
          LJM    ERR4        *INCORRECT ENTRY.* 
  
 STB2     LDD    EQ 
          STD    CM+1 
          LDD    TK 
          STD    CM+2 
          LDN    STIS 
          STD    CM+3 
          MONITOR STBM
          LDD    CM+1 
          ZJN    STB3        IF REQUEST HONORED 
          LDN    0
          STD    SB 
          RJM    RCPA        RETURN TO MAIN LOOP
          UJN    STB1        LOOP 
  
 STB3     LJM    RET         RETURN 
 SSA      SPACE  4,10 
***       STORE.C.COMMENT 
*         STORE THE CURRENT EQUIPMENT, TRACK, AND SECTOR INTO SCRATCH 
*         AREA C.  C IS A SINGLE ALPHABETIC CHARACTER (LEGAL CHARACTERS 
*         ARE DISPLAYED ON THE LEFT SCREEN).  THE COMMENT IS COPIED TO
*         THE SCRATCH AREA AND DISPLAYED ON THE LEFT SCREEN.  THE 
*         COMMENT IS FOR CONVENIENCE ONLY AND IS TRUNCATED TO 10
*         CHARACTERS.  THE EQUIPMENT, TRACK, AND SECTOR CAN BE RELOADED 
*         FROM THE SCRATCH AREA WITH THE *LOAD* COMMAND.
  
  
 SSA      COMMAND 
          RJM    CSA         GET ADDRESS OF SCRATCH AREA
          LDD    EQ          SAVE EQUIPMENT 
          STI    T2 
          AOD    T2 
          LDD    TK          SAVE TRACK 
          STI    T2 
          AOD    T2 
          LDD    SC          SAVE SECTOR
          STI    T2 
          AOD    T2 
          LDD    RS          SAVE DISPLAY INFORMATION 
          SHN    11 
          ADM    DRSA+4 
          STI    T2 
          AOD    T2 
          LDN    4           COPY COMMENT 
          STD    T1 
          AOD    CA 
 SSA1     LDI    CA 
          SHN    6
          ADM    1,CA 
          STI    T2 
          LDN    2
          RAD    CA 
          AOD    T2 
          SOD    T1 
          PJN    SSA1        IF MORE BYTES
          LJM    RET         RETURN 
 ETK      SPACE  4,10 
***       TK.NNNN.
*         ENTER TRACK NUMBER.  *INCORRECT PARAMETER.* IS DISPLAYED IF 
*         THE NUMBER IS TOO LARGE.
  
  
 ETK      COMMAND 
          RJM    ASD         ASSEMBLE NUMBER
          LDD    AB+4 
          LPC    3777 
          ADC    4000 
          STD    T2 
          SBD    LT 
          SBN    1
          PJN    ETK1        IF ILLEGAL TRACK 
          LDD    T2 
          STD    TK 
          LJM    RET         RETURN 
  
 ETK1     LJM    ERR2        *INCORRECT PARAMETER.* 
 SCT      SPACE  4,10 
***       UI.NNNNNN.
*         SET EQUIPMENT AND TRACK FOR THE CATALOG ENTRIES FOR USER
*         INDEX NNNNNN (NNNNNN .LE. 377777).  *INCORRECT PARAMETER.* IS 
*         DISPLAYED IF THE CATALOG IS NOT FOUND (THIS MAY BE THE RESULT 
*         OF ENTERING THE WRONG FAMILY OR PACK NAME.)  IF THE FAMILY
*         OR PACK NAME ARE CHANGED (AFTER ENTERING THE *UI* COMMAND), 
*         THE *UI* COMMAND MUST BE REENTERED. 
  
  
 SCT      COMMAND 
          RJM    ASD         GET USER INDEX 
          LDD    MA          SAVE CURRENT ENTRIES 
          ADN    5
          CWD    T3 
          LDN    PF 
          RJM    SCA         SET CATALOG ADDRESS
          PJN    SCT1        IF DEVICE FOUND AND ACCESSIBLE 
          ADN    1
          NJN    SCT2        IF NOT FOUND 
 SCT1     LDN    DFDN 
          STD    RS 
          RJM    LDO         LOAD OVERLAY 
          LDN    0           SET SECTOR 
          STD    SC 
          STM    DRSA+4      SET DISPLAY INDEX
          LJM    IMS         INITIALIZE MASS STORAGE
  
 SCT2     LDD    MA          RESTORE PREVIOUS ENTRIES 
          ADN    5
          CRD    T3 
          LJM    ERR2        *INCORRECT PARAMETER.* 
  
  
*CALL     COMPSCA 
 WRT      SPACE  4,10 
***       WRITE.
*         WRITE THE CONTENTS OF THE BUFFER TO THE SECTOR CURRENTLY
*         INDICATED.  IF THE KEYBOARD IS NOT UNLOCKED, *INCORRECT 
*         ENTRY.* IS DISPLAYED. 
  
  
 WRT      COMMAND 
          RJM    CLB         CHECK FOR LOCKED KEYBOARD
          RJM    CEQ         CHECK EQUIPMENT
          LDC    BFMS+WLSF
          RJM    WDS         WRITE DATA 
          ENDMS 
          LJM    RET         RETURN 
          SPACE  4,10 
          COMMAND 
 TAR      SPACE  4,10 
**        TAR - TABLE ACCESS ROUTINES.
* 
*         THIS CM RESIDENT OVERLAY CONTAINS THE SUBROUTINES REQUIRED
*         FOR COMMANDS *EJT.*, *FNT.*, *FNTL.*, *FNTLC.*, AND *QFT.*
*         TO ACCESS THE CMR/NFL TABLES INVOLVED TO READ A FST ENTRY.
* 
*         THEY ARE LOADED AT THE END OF THE COMMAND OVERLAY.
  
  
          QUAL   PRESET 
 .1       MAX    EETL,EFBL,EFLL,EFCL,EITL 
          QUAL   *
          QUAL
 TARLA    EQU    CPLA+/PRESET/.1*5     TAR OVERLAY LOAD ADDRESS 
          QUAL   *
 TAR      ACROVL TARLA
 CFA      SPACE 4,10
**        CFA - CALCULATE FNT ADDRESS.
* 
*         ENTRY  (CA) = ADDRESS OF CHARACTER STRING.
* 
*         EXIT   (T3) = LOCAL FNT POINTER.
* 
*         USES   CM - CM+4. 
* 
*         CALL   ASD. 
  
  
 CFA      SUBR               ENTRY/EXIT 
          RJM    ASD         GET FNT ORDINAL
          LDN    LENF        COMPUTE FNT NFL ADDRESS (FNTN+NNNN*LENF) 
          STD    T0 
          LDC    FNTN 
          STD    T3 
 CFA1     LDD    AB+4 
          RAD    T3 
          SHN    -14
          NJN    CFA2        IF OVERFLOW
          SOD    T0 
          NJN    CFA1        IF MULTIPLY BY LENF INCOMPLETE 
          LDD    CP 
          ADN    FLSW        GET NFL/100B 
          CRD    CM 
          LDD    CM          FORM LWA+1 OF LOCAL FNT AREA 
          SHN    6
          ADN    1
          STD    CM+1 
          LDD    T3 
          SBD    CM+1 
          MJN    CFAX        IF LEGAL ORDINAL 
 CFA2     LJM    ERR2        *INCORRECT PARAMETER.* 
 CTO      SPACE  4,15 
**        CTO - CHECK TABLE ORDINAL.
* 
*         ENTRY  (A)  = MANAGED TABLE IDENTIFICATION CODE.
*                (CA) = ADDRESS OF CHARACTER STRING.
* 
*         EXIT   (T3) = TABLE ORDINAL.
*                (T1) = MANAGED TABLE IDENTIFICATION CODE.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  ASD. 
  
  
 CTO      SUBR               ENTRY/EXIT 
          STD    T1 
          RJM    ASD         ASSEMBLE TABLE ORDINAL 
          LDM    TMTP,T1     READ POINTER WORD
          CRD    CM 
          LDD    AB+4        CHECK VALID ORDINAL
          STD    T3 
          SBD    CM+2 
          MJN    CTOX        IF LEGAL ORDINAL 
          LJM    ERR2        *INCORRECT PARAMETER.* 
 RFE      SPACE  4,15 
**        RFE - READ FST ENTRY. 
* 
*         ENTRY  (A)  = MANAGED TABLE IDENTIFICATION CODE.
*                (CA) = ADDRESS OF CHARACTER STRING.
* 
*         EXIT   (FN - FN+4) = FST ENTRY. 
*                (T3) = FNT ADDRESS.
*                (EQ) = EST ORDINAL.
* 
*         USES   CM - CM+4. 
* 
*         CALLS  CFA, CTO, .EJT, .FNT, .QFT.
* 
*         MACROS NFA, SFA.
  
  
 RFE4     LDD    FN          SET EST ORDINAL
          STD    EQ 
  
 RFE      SUBR               ENTRY/EXIT 
          LMK    PNFL 
          NJN    RFE1        IF NOT LOCAL FNT 
          STD    T1 
          RJM    CFA         CALCULATE FNT ADDRESS
          NFA    T3,R 
          UJN    RFE2        READ TABLE ENTRY 
  
 RFE1     LMK    PNFL 
          RJM    CTO         CHECK TABLE ORDINAL
          LDM    TMTA,T1
          STD    CM 
          LDD    T3          GET ADDRESS OF SPECIFIED ENTRY 
          RJM    0,CM 
 RFE2     ADM    TFSI,T1
          CRD    FN          READ FST ENTRY 
          LDD    FN+1 
          ZJN    RFE3        IF EMPTY FILE
          SFA    EST,FN 
          ADK    EQDE 
          CRD    CM          READ EST ENTRY 
          LDD    CM 
          SHN    21-13
          MJN    RFE4        IF MASS STORAGE
 RFE3     LJM    ERR2        *INCORRECT PARAMETER.* 
  
  
 TFSI     INDEX              LIST OF INDICES TO FST ENTRY 
          INDEX  PNFL,FSTL
          INDEX  PFNT,FSTG
          INDEX  PQFT,ENTQ
          INDEX  PEJT,SCHE
          INDEX  PEJT+1 
  
  
 TMTA     INDEX              LIST OF MANAGED TABLE ACCESS ROUTINES
          INDEX  PFNT,.FNT
          INDEX  PQFT,.QFT
          INDEX  PEJT,.EJT
          INDEX  PEJT+1 
  
  
 TMTP     INDEX              LIST OF MANAGED TABLE POINTER ADDRESSES
          INDEX  PFNT,FNTP
          INDEX  PQFT,QFTP
          INDEX  PEJT,EJTP
          INDEX  PEJT+1 
  
  
 QUAL$    EQU    0           SELECT UNQUALIFIED ASSEMBLY OF COMPGFP 
 EJT$     EQU    0           DEFINE *COMPGFP* ACCESS TO EJT 
 FNT$     EQU    0           DEFINE *COMPGFP* ACCESS TO FNT 
 QFT$     EQU    0           DEFINE *COMPGFP* ACCESS TO QFT 
 IFP$     EQU    0           GENERATE *IFP* REMOTE CODE 
 .OFFS    SET    *O-*L
*CALL     COMPGFP 
          SPACE  4,10 
          ACROVL
          ERRNG  EPFW-TARLA-/PRESET/TARL*5  *TAR* OVERFLOWS ERROR PROC. 
  
*         SINCE THE IFP CODE FOR COMPGFP IS EXECUTED DURING PRESET, 
*         THE LOCATIONS TO BE PRESET MUST BE REFERENCE VIA THE ORIGIN 
*         COUNTER, RATHER THAN THE LOCATION COUNTER (WHICH WAS USED TO
*         DEFINE THE SYMBOLS *EJTB*, *FNTB*, AND *QFT*).
*         TO ACCOMPLISH THIS, THE PRESET CODE IS ASSEMBLED USEING A 
*         DIFFERENT QUALIFIER.  THIS NECESSITATES REDEFINING THE
*         ASSEMBLY OPTION TAGS AS WELL. 
  
          USE    PRESET 
 QUAL$    EQU    0           SELECT UNQUALIFIED ASSEMBLY OF COMPGFP 
 EJT$     EQU    0           DEFINE *COMPGFP* ACCESS TO EJT 
 EJTB     EQU    /TAR/EJTB+/TAR/.OFFS 
 FNT$     EQU    0           DEFINE *COMPGFP* ACCESS TO FNT 
 FNTB     EQU    /TAR/FNTB+/TAR/.OFFS 
 QFT$     EQU    0           DEFINE *COMPGFP* ACCESS TO QFT 
 QFTB     EQU    /TAR/QFTB+/TAR/.OFFS 
 IFP$     EQU    0           GENERATE *IFP* REMOTE CODE 
 IFP      HERE               ASSEMBLE *IFP* REMOTE CODE HERE
          USE    *
          SPACE  4,10 
          OVERFLOW  /PRESET/OVL 
          QUAL   *           RESUME UNQUALIFIED DEFINITIONS 
          OVERLAY /PRESET/OVL,(LISTING FILE COMMAND PROCESSORS.)
 OVL      SUBR               ENTRY/EXIT 
          UJN    OVLX        RETURN 
          SPACE  4,10 
***       THE FOLLOWING COMMANDS ARE USED TO PRINT THE CONTENTS OF THE
*         DISK SECTOR AND MANIPULATE THE LISTING FILE.
 CLF      SPACE  4,10 
***       LISTING.CCCCCCC.
*         SET THE LISTING FILE NAME TO CCCCCCC.  THE LISTING FILE IS
*         ORIGINALLY *OUTPUT*.
  
  
 CLF      COMMAND 
          RJM    WCC         WAIT FOR PREVIOUS REQUEST TO COMPLETE
          RJM    ASN         GET NAME 
          LDD    BA 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    BA+1 
          CWD    FN          WRITE NAME TO BUFFER 
          LDN    2*2+1
          LJM    SCP         START CPU
 OUT      SPACE  4,10 
***       OUT.
*         RELEASE THE LISTING FILE TO THE OUTPUT QUEUE. 
  
  
 OUT      COMMAND 
          RJM    WCC         WAIT FOR PREVIOUS REQUEST TO COMPLETE
          LDN    3*2+1
          LJM    SCP         START CPU
 PRT      SPACE  4,10 
***       PRINT.
*         PRINT THE CURRENT EQUIPMENT, TRACK, SECTOR, TRT INFORMATION,
*         AND THE CONTENTS OF THE SECTOR. 
* 
* 
*         PRINT.NNNN. 
*         PRINT THE NEXT NNNN (MUST BE AN OCTAL NUMBER) SECTORS START-
*         ING WITH THE CURRENT SECTOR.  PRINTING WILL STOP AT EOI IF
*         ENCOUNTERED BEFORE NNNN SECTORS HAVE BEEN PRINTED.  ONE PAGE
*         OF OUTPUT IS PRODUCED FOR EACH SECTOR PRINTED.
  
  
 PRT      COMMAND 
          LDI    CA 
          ZJN    PRT1        IF NUMBER NOT ENTERED
          RJM    ASD         CONVERT NUMBER 
          LDD    AB+4 
          SBN    1
 PRT1     STD    FN          SAVE COUNT 
 PRT2     RJM    WCC         WAIT FOR PREVIOUS REQUEST TO COMPLETE
          RJM    SNT         GET CONTENTS OF TRT
          STD    AB 
          LDD    CM+4 
          STD    AB+1 
          LDM    DLSA 
          STD    AB+3 
          LDM    DLSA+1 
          STD    AB+4 
          LDD    TK 
          SHN    -2 
          RAD    AB+4 
          SHN    -14
          RAD    AB+3 
          LDM    BFMS 
          STD    T5+3        (=CM)
          LDM    BFMS+1 
          STD    T5+4        (=CM+1)
          LDD    BA 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    BA+1 
          CWD    T5          WRITE OUT EQUIPMENT AND CONTROL BYTES
          ADN    1
          CWD    AB 
          ADN    1
          CWM    BFMS+2,HN   WRITE OUT CONTENTS OF BUFFER 
          RJM    WCC         RESET (CM - CM+4)
          SOD    FN          DECREMENT COUNT
          MJN    PRT3        IF DONE
          RJM    SNS         SET NEXT SECTOR
          ZJN    PRT3        IF AT EOI
          LDN    1*2+1       SET FUNCTION CODE
          STD    CM+4 
          LDD    RA 
          SHN    6
          ADN    D
          CWD    CM 
          RJM    RSB         READ NEXT SECTOR 
          MJN    PRT4        IF ERROR 
          LJM    PRT2        LOOP 
  
 PRT3     LDN    1*2+1
          LJM    SCP         START CPU
  
 PRT4     LJM    RET         RETURN 
 RET      SPACE  4,10 
***       RETURN. 
*         RETURN THE LISTING FILE.
  
  
 RET      COMMAND 
          RJM    WCC         WAIT FOR PREVIOUS REQUEST TO COMPLETE
          LDN    6*2+1
          LJM    SCP         START CPU
 REW      SPACE  4,10 
***       REWIND. 
*         REWIND THE LISTING FILE.
  
  
 REW      COMMAND 
          RJM    WCC         WAIT FOR PREVIOUS REQUEST TO COMPLETE
          LDN    4*2+1
          LJM    SCP         START CPU
 SID      SPACE  4,10 
***       SETID.NN. 
*         SET THE ID FOR THE OUTPUT FILE TO NN. 
  
  
 SID      COMMAND 
          RJM    WCC         WAIT FOR PREVIOUS REQUEST TO COMPLETE
          RJM    ASD         CONVERT ID 
          LDD    BA 
          SHN    6
          ADD    RA 
          SHN    6
          ADD    BA+1 
          CWD    AB 
          LDN    7*2+1
          LJM    SCP         START CPU
 SKL      SPACE  4,10 
***       SKIPL.
*         POSITION TO THE END OF THE LISTING FILE.
  
  
 SKL      COMMAND 
          RJM    WCC         WAIT FOR PREVIOUS REQUEST TO COMPLETE
          LDN    5*2+1
          LJM    SCP         START CPU
          SPACE  4,10 
          COMMAND 
          SPACE  4,10 
          OVERFLOW  /PRESET/OVL 
          QUAL   *
          OVERLAY /PRESET/OVL,(LABEL/TRT RECONSTRUCTION PROCESSORS.)
 OVL      SPACE  4,10 
**        PRESET THE OVERLAY BY LOADING THE AUXILIARY COMMAND 
*         PROCESSOR SUBROUTINES TO CM.
  
  
 OVL      SUBR               ENTRY/EXIT 
          LDN    /PRESET/LRRL  SET OVERLAY LENGTH 
          STD    T1 
          LDD    AB+3        SAVE CM ADDRESS
          STM    /PRESET/TCRO+LRRN*5+2
          LDD    AB+4 
          STM    /PRESET/TCRO+LRRN*5+3
          LDD    AB+3        WRITE OVERLAY TO CM
          SHN    6
          ADD    RA 
          SHN    6
          ADD    AB+4 
          CWM    /PRESET/LRR,T1 
          LDD    T1          UPDATE CM ADDRESS
          RAD    AB+4 
          SHN    -14
          RAD    AB+3 
          UJN    OVLX        EXIT 
          SPACE  4,10 
***       THE FOLLOWING COMMANDS CAN BE USED TO RECONSTRUCT THE LABEL 
*         AND TRT OF A DEVICE THAT HAS LOST THEM.  THE COMMANDS WILL
*         NOT NECESSARILY RECOVER THE DEVICE CORRECTLY.  THE COMMANDS 
*         (IN APPROXIMATE ORDER OF USE) ARE - 
* 
*           BEGINR  - BEGIN RECOVERY BY INITIALIZING TABLES;
*           RECOVER - SCAN DEVICE TO FIND FILES;
*           BLDTRT  - CHECK FOR LINKAGE ERRORS AND BUILD A SECTOR OF
*                     THE TRT FOR THE LABEL TRACK.
*           NEXTAT  - FIND AND READ NEXT AVAILABLE TRACK. 
*                     (A TRACK WITH NO LINKAGE IN THE RECOVERY TABLES.) 
*           NEXTSS  - FIND AND READ NEXT TRACK IN THE RECOVERY TABLE
*                     THAT BEGINS WITH A SYSTEM SECTOR. 
*           SETTRT  - MODIFY POINTERS FOR RECOVER COMMAND.
*           SETRW   - MODIFY RECOVERY DATA FOR A TRACK. 
*           BLDSL   - CREATE LABEL SECTOR FOR DEVICE. 
* 
*         THESE COMMANDS USE A RECOVERY TABLE IN CM TO KEEP TRACK OF
*         LINKAGES.  THE TABLE IS INITIALIZED BY THE *BEGINR.* COMMAND. 
*         THE OTHER COMMANDS USE OR MODIFY THE DATA IN THE TABLE TO 
*         EFFECT DEVICE RECOVERY.  THE TABLE IS FORMATTED AS FOLLOWS. 
* 
* 
*T,MST    IMAGE OF MST FOR DEVICE. (MSTL WORDS LONG)
* 
* 
*T,SSDW   *FNSS* WORD FROM SYSTEM SECTOR OF CURRENT CHAIN.
*         *FTSS* WORD.
*         *DTSS* WORD.                 (THREE WORDS FOR FNSS....DTSS) 
* 
* 
*T,RCPW   12/FT, 12/PT, 12/SC, 24/UNUSED         (RECOVER POINTERS) 
* 
*                FT - FIRST TRACK OF CURRENT CHAIN. 
*                PT - PREVIOUS TRACK IN CHAIN.
*                SC - CURRENT SECTOR FOR EOI SEARCH AFTER ERROR.
* 
* 
*T,ICPW   12/FT, 12/PT, 36/UNUSED      (INDIRECT CHAIN POINTERS)
* 
*                FT - FIRST TRACK OF INDIRECT CHAIN IN *BLDIC* COMMAND. 
*                PT - PREVIOUS TRACK OF INDIRECT CHAIN. 
* 
* 
*T,BSPW   12/TT, 12/SC, 12/FT, 12/NF, 12/TL  (BUILD POINTERS) 
* 
*                TT - DESTINATION TRACK FOR WRITING TRT.
*                SC - SECTOR FOR CURRENT PIECE OF TRT.
*                FT - FIRST TRACK FOR CURRENT PIECE OF TRT. 
*                NF - DAF FILE COUNT. 
*                TL - TRT LENGTH FROM MST.
* 
* 
*         TWO RESERVED WORDS FOLLOW.
* 
* 
*T,TRCT   BEGINNING OF TRACK RECOVERY TABLE.
*                (MSTL+10 WORD FROM BEGINNING OF MST AREA.) 
*                (ONE WORD PER TRACK AS FOLLOWS)
* 
*T        6/TY, 1/RE, 1/SS, 1/FL, 1/, 2/EI, 12/FT, 12/PT, 12/NT, 12/LC
* 
*                TY - FILE TYPE FROM SYSTEM SECTOR. 
*                RE - READ ERROR DETECTED IN TRACK. 
*                SS - SYSTEM SECTOR IN TRACK AT OTHER THAN SECTOR ZERO. 
*                FL - FLAWED TRACK INDICATOR. 
*                EI - EOI STATUS FOR TRACK. 
*                     =0 - NO EOI.
*                     =1 - NORMAL EOI IN TRACK. 
*                     =2 - EOI, WRITTEN BY IMS. 
*                FT - FIRST TRACK OF CHAIN LINKED TO THIS TRACK.
*                PT - FIRST TRACK ENCOUNTERED LINKED TO THIS ONE. 
*                     ((PT) = CURRENT TRACK IF START OF FILE) 
*                NT - NEXT TRACK OR EOI SECTOR NUMBER.
*                LC - LINKAGE COUNT. (NUMBER OF TRACKS LINKED 
*                     TO THIS TRACK.) 
          SPACE  4,10 
**        LINKAGE RECOVERY DEFINITIONS. 
* 
*         THE FOLLOWING SYMBOLS ARE USED TO REFERENCE THE 
*         CM RECOVERY TABLES. 
  
  
          QUAL
 SSDW     EQU    MSTL+0      SYSTEM SECTOR DATA WORDS 
 RCPW     EQU    MSTL+3      RECOVERY POINTER WORD
 ICPW     EQU    MSTL+4      INDIRECT CHAIN RECOVERY POINTER WORD 
 BSPW     EQU    MSTL+5      BUILD SECTOR POINTER WORD
*                MSTL+6      SPARE
*                MSTL+7      SPARE
 TRCT     EQU    MSTL+10     TRACK RECOVERY TABLE 
  
 CRAL     EQU    TRCT+4077   CM RECOVERY AREA LENGTH
          QUAL   *
          SPACE  4,10 
**        DIRECT CELL USAGE CONVENTIONS.
* 
*         (FN - FN+4) = RECOVERY POINTERS.
*                     = (RCPW) FOR BEGINR, NEXXTAT, NEXTSS, RECOVER.
*                     = (ICPW) FOR BLDIC.  (NOT YET IMPLEMENTED)
*                     = (BSPW) FOR BLDSL, BLDTRT. 
*         (AB - AB+4) = RECOVERY WORD FOR CURRENT TRACK.
 BTR      SPACE  4,10 
***       BEGINR. 
*         BEGIN TRACK RECOVERY FOR THE CURRENT SELECTED EQUIPMENT BY
*         RESERVING AND CLEARING THE CM RECOVERY TABLES.
*         THE EQUIPMENT TO BE RECOVERED MUST BE REMOVABLE AND UNLOADED. 
*         THE MST IN CMR FOR THE SELECTED EQUIPMENT IS USED TO
*         INITIALIZE THE MST FOR THE LABEL TRACK BUILT BY THE RECOVERY
*         COMMANDS.  BE SURE THE EQUIPMENT MNEMONIC IN THE *E,M*
*         DISPLAY MATCHES THE PACK TO BE RECOVERED.  IF THIS COMMAND IS 
*         USED AGAIN, RECOVERY IS RESTARTED FOR THE CURRENT EQUIPMENT.
  
  
 BTR      COMMAND 
          LDD    RT 
          NJN    BTR2        IF NOT FIRST USE OF *BEGINR.*
          LDD    FL          REQUEST STORAGE FOR TABLE
          STD    RT          SAVE TABLE ADDRESS 
          ADN    CRAL/100B
          STD    AB 
          LDD    CP 
          ADN    MS1W 
          CWM    BTRA,TR     * WAITING FOR MEMORY.* 
 BTR1     LDN    ZERL        REQUEST STORAGE FOR RECOVERY TABLE 
          CRD    CM 
          LDD    AB 
          STD    CM+1 
          MONITOR  RSTM 
          RJM    PSS         PAUSE
          LDD    AB 
          LMD    FL 
          NJN    BTR1        IF MEMORY NOT OBTAINED 
 BTR2     LDN    DFBN        SET DEFAULT DISPLAY AND LOAD SUBROUTINES 
          STD    RS 
          LDN    LRRN        OVERLAY CONTROL WORD INDEX 
          RJM    LDO         LOAD OVERLAY 
          SFA    EST,EQ      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDN    MSTL        SET UP MST SKELTON FOR RECOVERY
          STD    T1 
          LDD    CM+4        GET MST ADDRESS
          SHN    3
          CRM    EPFW,T1
          RJM    MST         SET MST AREA 
          LDD    RA          WRITE MST TO RECOVERY TABLE
          ADD    RT 
          SHN    6
          CWM    EPFW,T1
          LDN    ZERL 
          CRD    AB          CLEAR RECOVERY WORDS 
          CRD    FN 
          LDD    CP          CLEAR MESSAGE
          ADN    MS1W 
          CWD    FN 
 BTR3     LDD    RA          CLEAR RECOVERY TABLE 
          ADD    RT 
          SHN    6
          ADD    T1 
          CWD    FN 
          AOD    T1 
          ADC    -CRAL
          MJN    BTR3        IF MORE TO CLEAR 
          LDC    4000-1      SET INITIAL TRACK
          STD    FN 
          RJM    /LRR/SRP    SAVE RECOVERY POINTERS 
          AOD    FN          READ FIRST SECTOR
          STD    TK 
          LDN    0
          STD    SC 
          RJM    RSB         READ SECTOR TO BUFFER
          LJM    RET         RETURN 
  
  
 BTRA     DATA   C* WAITING FOR MEMORY.*
 MST      SPACE  4,10 
**        MST - SET MST RECOVERY TABLE. 
* 
*         ENTRY  (EPFW - EPFW+MSTL) = MST IMAGE.
* 
*         EXIT   MST SET FOR RECOVERY OPERATIONS. 
* 
*         USES   T3.
  
  
 MST      SUBR               ENTRY/EXIT 
          LDC    EPFW+ALGL*5
          STD    T3 
          LDC    /LSD/FLTK
          STM    1,T3 
          LDN    0
          STI    T3          CLEAR INDIRECT POINTER 
          STM    2,T3        CLEAR PERMITS POINTER
          STM    3,T3        CLEAR CATALOG TRACK COUNT
          STM    4,T3        CLEAR *DAT* POINTER
 .1       SET    STLL-ALGL
          LDN    .1*5 
          RAD    T3 
          LDN    2
          STI    T3          CLEAR INITIALIZE REQUESTS
          LDN    0
          STM    1,T3        CLEAR ERROR STATUS 
          STM    3,T3        CLEAR DAF USER COUNT 
          LJM    MSTX        RETURN 
 BLS      SPACE  4,20 
***       BLDSL.
*         BUILDS A LABEL SECTOR IMAGE IN THE DATA BUFFER FROM DATA
*         IN THE CM RECOVERY TABLE.  ONCE THE OTHER RECOVERY COMMANDS 
*         HAVE COMPLETED, THE MEMORY CHANGE COMMANDS CAN FILL IN ANY
*         MISSING DATA.  THE BUFFER CAN THEN BE WRITTEN TO DISK WITH
*         THE WRITE COMMAND.
* 
*         NOTE - IF THIS COMMAND IS USED AFTER THE *RECOVER* COMMAND
*         COMPLETES, THE MST IN THE DATA BUFFER WILL SHOW THE 
*         POINTERS TO THE FIRST TRACK OF THE PERMIT DATA AND INDIRECT 
*         PF CHAIN.  SINCE THE *RECOVER* COMMAND IS UNABLE TO FIND THE
*         CATALOG TRACK CHAIN, THESE POINTERS ARE HELPFUL IN LOCATING 
*         THE CATALOG TRACK CHAIN, WHICH IS ALLOCATED BY *IMS*
*         IMMEDIATELY PRECEEDING THESE TWO TRACKS.  THIS ONLY APPLIES 
*         TO THE INITIAL CATALOG TRACKS.  OVERFLOW TRACKS ARE LINKED
*         THRU THE LAST SECTOR OF ONE OF THE INITIAL TRACKS.
  
  
 BLS      COMMAND 
          LDD    RT 
          NJN    BLS1        IF RECOVERY TABLES NOT PRESENT 
          LJM    ERR4        *INCORRECT COMMAND.* 
  
 BLS1     LDN    DFBN        SET DEFAULT DISPLAY AND LOAD SUBROUTINES 
          STD    RS 
          LDN    LRRN        OVERLAY CONTROL WORD INDEX 
          RJM    LDO         LOAD OVERLAY 
          LDC    3777        SET LINKAGE FOR SYSTEM SECTOR
          STM    BFMS 
          LDN    77 
          STM    BFMS+1 
 BLS2     LDN    ZERL        CLEAR SECTOR BUFFER
          CRM    FNSS,ON
 BLSA     EQU    *-1
          LDN    5           ADVANCE BUFFER ADDRESS 
          RAM    BLSA 
          LMC    BFMS+2+100*5 
          NJN    BLS2        IF CLEAR INCOMPLETE
          LDN    2
          STD    T1 
 BLS3     LDM    BLSB,T1     SET FILE NAME = *LABEL*
          STM    FNSS,T1
          SOD    T1 
          PJN    BLS3        IF COPY INCOMPLETE 
          LDC    SYFT*1S6    SET FILE TYPE
          STM    FNSS+4 
          LDD    EQ          SET EQUIPMENT ORDINAL
          STM    FTSS-1 
          LDN    PDTL        SET DATE AND TIME
          CRM    DTSS,ON
          LDN    1
          STM    NSSS        SET NEXT SECTOR
          STM    DTSS        SET FLAG 
          STM    /LSD/LLSS   SET LABEL LEVEL
          SFA    EST,EQ      READ EST ENTRY 
          ADK    EQDE 
          CRD    CM 
          LDD    CM+3        SET EQUIPMENT MNEMONIC 
          STM    /LSD/E4SS
          LDN    MSTL        READ MST FROM RECOVERY AREA
          STD    T1 
          LDD    RA 
          ADD    RT 
          SHN    6
          CRM    /LSD/N4SS,T1 
          LDM    /LSD/N4SS+ALGL*5+1  SET LABEL TRACK AND SECTOR 
          STD    TK 
          STM    FTSS 
          LDN    0
          STD    SC 
          LJM    RET         RETURN 
  
  
 BLSB     DATA   Z*LABEL* 
 BRS      SPACE  4,10 
***       BLDSTRT.
*         BUILD NEXT SECTOR OF TRT DATA FOR LABEL TRACK.  AFTER LAST
*         SECTOR IS BUILT, THE POINTERS ARE RESET FOR THE FIRST SECTOR
*         AGAIN.  TRACK AND SECTOR ARE SET FOR *WRITE* COMMAND. 
* 
*         BLDSTRT.N.
*         BUILD SECTOR *N* OF TRT DATA FOR LABEL TRACK.  (N .GE. 1) 
* 
*         NOTE   IT WILL BE NECESSARY TO MANUALLY GENERATE THE EOI
*                SECTOR FOR THE LABEL TRACK.
  
  
 BRS      COMMAND 
          LDD    RT 
          NJN    BRS1        IF TABLES NOT ALLOCATED
          LJM    ERR4        *INCORRECT ENTRY.* 
  
 BRS1     LDN    DFBN        SET DEFAULT DISPLAY AND LOAD SUBROUTINES 
          STD    RS 
          LDN    LRRN        OVERLAY CONTROL WORD INDEX 
          RJM    LDO         LOAD OVERLAY 
          LDN    BSPW-RCPW   SET POINTER INDEX
          RAM    /LRR/RRPA
          STM    /LRR/SRPA
          RJM    /LRR/RRP    RESTORE RECOVERY POINTERS
          LDD    FN 
          NJN    BRS2        IF NOT INITIAL ENTRY 
          STD    FN+1 
          LDD    RA          GET LABEL TRACK FROM MST 
          ADD    RT 
          SHN    6
          ADN    ALGL 
          CRD    CM 
          LDD    CM+1 
          STD    FN 
 BRS2     LDI    CA          CHECK PARAMETER
          ZJN    BRS3        IF NO SECTOR SPECIFIED 
          SBN    1R1
          MJN    BRS4        IF ILLEGAL SECTOR NUMBER 
          STD    FN+1 
 BRS3     AOD    FN+1        ADVANCE SECTOR 
          SBN    1
          SHN    10          (400B  TK/PRU) 
          ADC    4000 
          STD    FN+2        SET STARTING TRACK 
          SBD    LT 
          MJN    BRS5        IF LEGAL SECTOR
 BRS4     LJM    ERR2        *INCORRECT PARAMETER*
  
*         CHECK ALL TRACKS FOR ERRORS.
  
 BRS5     RJM    CLE         CHECK FOR LINKAGE ERRORS 
          RJM    BTS         BUILD TRT SECTOR 
          LDM    BFMS+1 
          LMC    100
          ZJN    BRS8        IF SECTOR FULL, NOT END OF TRT 
  
*         COMPLETE LAST SECTOR OF TRT.
  
          LDD    TK 
          LPN    3
          ZJN    BRS7        IF LAST WORD FULL
 BRS6     LDC    3777        SET UNUSABLE TRACKS AS FLAWED
          STI    T3 
          AOD    T3 
          LDD    RC 
          SHN    1
          LMN    1
          STD    RC 
          AOD    TK 
          LPN    3
          NJN    BRS6        IF NOT END OF WORD 
          LDD    RC          SAVE TRACK STATUS BYTE 
          STI    T3 
          AOD    T3 
          AOM    BFMS+1      INCREMENT SECTOR WORD COUNT
 BRS7     LDN    0           CLEAR REMAINDER OF LAST SECTOR 
          STI    T3 
          AOD    T3 
          ADC    -BFMS-2-100*5
          MJN    BRS7        IF NOT END OF SECTOR 
          LDN    0           RESET POINTER TO START OVER
          STD    FN 
  
*         SET POINTERS AND RETURN.
  
 BRS8     LDD    TK          SAVE NEXT TRACK
          STD    FN+2 
          LDD    FN          SET DESTINATION ADDRESS
          STD    TK 
          LDD    FN+1        SET SECTOR 
          STD    SC 
          LDD    RA          SAVE POINTERS
          ADD    RT 
          SHN    6
          ADN    BSPW 
          CWD    FN 
          LJM    RET         RETURN 
 BTS      SPACE  4,10 
**        BTS - BUILD TRT SECTOR. 
* 
*         BUILD A SECTOR OF TRT FROM RECOVERY TABLE.
  
  
 BTS      SUBR               ENTRY/EXIT 
          LDD    FN+1        SET LINK 
          ADN    1
          STM    BFMS 
          LDN    0
          STD    RC 
          STM    BFMS+1 
          LDC    BFMS+2 
          STD    T3 
          LDD    FN+2 
          STD    TK 
  
*         BUILD TRT FROM RECOVERY TABLE.
  
 BTS1     RJM    /LRR/STA    SET TABLE ADDRESS
          CRD    AB          READ TRACK RECOVERY WORD 
          LDD    AB 
          LPN    10 
          ZJN    BTS2        IF NOT FLAWED TRACK
          LDC    3777        SET FLAWED TRACK 
          STI    T3 
          UJN    BTS4        SET STATUS 
  
 BTS2     LDD    AB+3 
          STI    T3 
          LDD    AB 
          SCN    77 
          ZJN    BTS3        IF NOT FIRST TRACK OF FILE 
          LDC    401
          UJN    BTS5        SET TRACK STATUS 
  
 BTS3     LDD    AB+3 
          ZJN    BTS5        IF TRACK NOT LINKED
 BTS4     LDN    1           SET TRACK STATUS 
 BTS5     SHN    21          MERGE STATUS 
          LMD    RC 
          SHN    1
          STD    RC 
          AOD    T3          ADVANCE TRACK POINTERS 
          AOD    TK 
          LPN    3
          NJN    BTS6        IF TRT WORD NOT COMPLETE 
          LDD    RC          STORE TRACK STATUS BYTE
          STI    T3 
          AOD    T3 
          LDN    0
          STD    RC 
          AOM    BFMS+1      INCREMENT SECTOR WORD COUNT
          LMC    100
          ZJN    BTS7        IF SECTOR FULL 
 BTS6     LDD    TK 
          LMD    LT 
          ZJN    BTS7        IF END OF TRT
          LJM    BTS1        PROCESS NEXT ENTRY 
  
 BTS7     LJM    BTSX        RETURN 
 CLE      SPACE  4,10 
**        CLE - CHECK FOR LINKAGE ERRORS. 
* 
*         VERIFY THAT ALL TRACKS RESERVED HAVE UNIQUE LINKAGE.
  
  
 CLE      SUBR               ENTRY/EXIT 
          LDC    4000 
          STD    TK 
 CLE1     RJM    /LRR/STA    SET TABLE ADDRESS
          CRD    AB          READ TRACK RECOVERY WORD 
          LDD    AB 
          LPN    64 
          NJN    CLE2        IF ERRORS
          LDD    AB+4 
          SBN    2
          MJN    CLE3        IF LINKAGE UNIQUE
 CLE2     LDC    CLEA        *ERROR IN TRACK STATUS.* 
          LJM    ERR         OUTPUT MESSAGE 
  
 CLE3     AOD    TK 
          SBD    LT 
          MJN    CLE1        IF ALL TRACKS NOT CHECKED
          UJN    CLEX        RETURN - NO ERRORS 
  
  
 CLEA     DATA   Z*ERROR IN TRACK STATUS.*
 NAT      SPACE  4,10 
***       NEXTAT. 
*         LOCATES THE NEXT AVAILABLE TRACK ON THE CURRENT EQUIPMENT,
*         AND READS THE FIRST SECTOR OF THE TRACK.  THE SEARCH BEGINS 
*         AT THE DISPLAYED TRACK POINTER+1.  BY RESETTING THE TRACK 
*         POINTER TO TRACK ZERO, AND USING THIS COMMAND, UNRESERVED 
*         TRACKS CAN BE FOUND AND CHECKED FOR BEING PART OF THE 
*         CATALOG TRACK CHAIN OR INDIRECT FILE CHAIN. 
  
  
 NAT      COMMAND 
          LDD    RT 
          NJN    NAT1        IF TABLES ALLOCATED
          LJM    ERR4        *INCORRECT ENTRY.* 
  
 NAT1     LDN    DFBN        SET DEFAULT DISPLAY AND LOAD SUBROUTINES 
          STD    RS 
          LDN    LRRN        OVERLAY CONTROL WORD INDEX 
          RJM    LDO         LOAD OVERLAY 
          RJM    /LRR/RRP    RESTORE RECOVERY POINTERS
          UJN    NAT3        ENTER LOOP 
  
 NAT2     RJM    /LRR/STA    SET TABLE ADDRESS
          CRD    AB          READ TRACK RECOVERY WORD 
          LDD    AB+1        CHECK FOR LINK 
          ZJN    NAT4        IF TRACK AVAILABLE 
 NAT3     AOD    FN 
          STD    TK 
          SBD    LT 
          MJN    NAT2        IF NOT END OF DEVICE 
          SOD    TK 
          LDC    NATA        *END OF EQUIPMENT.*
          LJM    ERR         OUTPUT MESSAGE 
  
 NAT4     STD    SC 
          RJM    /LRR/SRP    SAVE UPDATED RECOVERY POINTERS 
          RJM    RSB         READ SECTOR TO BUFFER
          LJM    RET         RETURN 
  
  
 NATA     DATA   Z*END OF EQUIPMENT.* 
 NSS      SPACE  4,10 
***       NEXTSS. 
*         LOCATES THE NEXT TRACK IN THE RECOVERY TABLE THAT BEGINS
*         WITH A SYSTEM SECTOR.  THE SEARCH BEGINS AT THE DISPLAYED 
*         TRACK POINTER+1.
  
  
 NSS      COMMAND 
          LDD    RT 
          NJN    NSS1        IF TABLES ALLOCATED
          LJM    ERR4        *INCORRECT ENTRY.* 
  
 NSS1     LDN    DFBN        SET DEFAULT DISPLAY AND LOAD GUBROUTINES 
          STD    RS 
          LDN    LRRN        OVERLAY CONTROL WORD INDEX 
          RJM    LDO         LOAD OVERLAY 
          RJM    /LRR/RRP    RESTORE RECOVERY POINTERS
          UJN    NSS3        ENTER LOOP 
  
 NSS2     RJM    /LRR/STA    SET TABLE ADDRESS
          CRD    AB          READ TRACK RECOVERY WORD 
          LDD    AB          CHECK FOR SYSTEM SECTOR
          SCN    77 
          NJN    NSS4        IF SYSTEM SECTOR (FIRST TRACK) 
 NSS3     AOD    FN 
          STD    TK 
          SBD    LT 
          MJN    NSS2        IF NOT END OF DEVICE 
          SOD    TK 
          LDC    NSSA        *END OF EQUIPMENT.*
          LJM    ERR         OUTPUT MESSAGE 
  
 NSS4     LDN    0
          STD    SC 
          RJM    /LRR/SRP    SAVE UPDATED RECOVERY POINTERS 
          RJM    RSB         READ SECTOR TO BUFFER
          LJM    RET         RETURN 
  
  
 NSSA     DATA   Z*END OF EQUIPMENT.* 
 REC      SPACE  4,15 
***       RECOVER.
*         RECOVER TRACKS STARTING AT FIRST TRACK OF DEVICE.  IF THIS
*         COMMAND IS USED MORE THAN ONCE SINCE A *BEGINR* COMMAND, IT 
*         CONTINUES RECOVERY BY FINDING THE NEXT SYSTEM SECTOR TRACK. 
* 
*         RECOVER.X.         (X = ANY CHARACTER.) 
*         CONTINUE RECOVERY BY SCANNING FROM CURRENT POSITION TO EOI. 
* 
*         RECOVERY DATA IS ADDED TO THE TABLE BY SEARCHING FOR TRACKS 
*         THAT BEGIN WITH A SYSTEM SECTOR, AND FOLLOWING THE LINKAGE
*         TO EOI.  ERRORS AND ANOMOLYS ARE FLAGGED.  THE INDIRECT CHAIN 
*         IS NOT TRACED.  THE DISPLAY IS DROPPED UNTIL AN ERROR 
*         OCCURS, OR UNTIL THE SEARCH COMPLETES.  IT IS THEN
*         REQUESTED AGAIN AS IF A *HOLD* COMMAND HAD BEEN USED. 
  
  
 REC      COMMAND 
          LDD    RT 
          NJN    REC1        IF TABLES ALLOCATED. 
          LJM    ERR4        *INCORRECT COMMAND.* 
  
 REC1     LDN    DFBN        SET DEFAULT DISPLAY AND LOAD SUBROUTINES 
          STD    RS 
          LDN    LRRN        OVERLAY CONTROL WORD INDEX 
          RJM    LDO         LOAD OVERLAY 
          RJM    /LRR/RRP    RESTORE RECOVERY POINTERS
          LDI    CA          CHECK MODE 
          ZJN    REC2        IF NO ENTRY SPECIFIED
          RJM    DDS         DROP DISPLAY 
          AOD    FN+2        ADVANCE TO NEXT SECTOR 
          STD    SC 
          LJM    REC5        CONTINUE FROM NEXT SECTOR. 
  
 REC2     RJM    DDS         DROP DISPLAY 
  
*         ENTER HERE TO CHECK NEXT TRACK FOR SYSTEM SECTOR. 
  
 REC3     AOD    FN          SET TRACK AND SECTOR 
          STD    FN+1 
          STD    TK 
          LMD    LT 
          NJN    REC4        IF NOT END OF EQUIPMENT
          SOD    TK 
          SOD    FN 
          LDC    RECB        *END OF EQUIPMENT.*
          LJM    REC14       REPORT ERROR 
  
 REC4     LDN    0
          STD    SC 
          RJM    /LRR/STA    SET TABLE ADDRESS
          CRD    AB          READ TRACK RECOVERY WORD 
          LDD    AB+1 
          NJN    REC3        IF TRACK LINKED
          RJM    RSB         READ SECTOR TO BUFFER
          MJP    REC13       IF ERROR 
          LDM    BFMS        CHECK FOR SYSTEM SECTOR
          SHN    6
          ADM    BFMS+1 
          ZJN    REC6        IF EOI AT (SC) = 0 
          LMC    377777 
          NJN    REC3        IF NOT SYSTEM SECTOR 
          RJM    /LRR/CSS    CHECK SYSTEM SECTOR
          ZJN    REC7        IF NO CHAIN RECOVERY 
  
*         ENTER HERE TO SCAN FROM CURRENT POSITION TO EOI.
  
 REC5     RJM    /LRR/SRP    SAVE RECOVERY POINTERS 
          RJM    /LRR/WSM    WRITE STATUS MESSAGE 
          RJM    PSS         PAUSE FOR SYSTEM 
          RJM    /LRR/RRP    RESTORE RECOVERY POINTERS
          RJM    SNS         SET NEXT SECTOR
          NJN    REC8        IF NOT EOI 
  
*         CHECK EOI SECTOR. 
  
 REC6     RJM    /LRR/CEI    CHECK EOI
          RJM    /LRR/STA    SET TABLE ADDRESS
          CWD    AB          SAVE TRACK RECOVERY WORD 
 REC7     LJM    REC3        LOOP TO FIND NEXT FILE 
  
 REC8     LDD    SC 
          ZJN    REC10       IF NEW TRACK 
          RJM    RSB         READ SECTOR TO BUFFER
          MJP    REC13       IF ERROR 
          LDM    BFMS        CHECK FOR SYSTEM SECTOR IN TRACK 
          SHN    6
          ADM    BFMS+1 
          LMC    377777 
          NJP    REC5        IF NOT SYSTEM SECTOR 
          LDD    AB          SET SYSTEM-SECTOR-IN-TRACK STATUS
          SCN    20 
          LMN    20 
          STD    AB 
          LDC    RECC        *SYSTEM SECTOR IN TRACK.*
          LJM    REC14       PROCESS ERROR
  
*         ADVANCE TO NEXT TRACK.
  
 REC10    LDD    TK          SET FORWARD LINK 
          STD    AB+3 
          LDD    FN+1        RESET TRACK
          STD    TK 
          RJM    /LRR/STA    SET TABLE ADDRESS
          CWD    AB          SAVE TRACK RECOVERY WORD 
          LDD    AB+3        SET NEW TRACK
          STD    TK 
          RJM    /LRR/STA    SET TABLE ADDRESS
          CRD    AB          READ TRACK RECOVERY WORD 
          AOD    AB+4 
          LDD    AB+1 
          NJN    REC12       IF TRACK ALREADY LINKED
          RJM    RSB         READ SECTOR TO BUFFER
          MJP    REC13       IF ERROR 
          LDM    BFMS        CHECK FOR BEGINNING OF ANOTHER FILE
          SHN    6
          ADM    BFMS+1 
          LMC    377777 
          ZJN    REC12       IF SYSTEM SECTOR 
          LDD    FN          SET REVERSE LINKS
          STD    AB+1 
          LDD    FN+1 
          STD    AB+2 
          LDD    TK 
          STD    FN+1 
          LJM    REC5        LOOP 
  
*         TRACK TO BE LINKED IS ALREADY IN USE. 
  
 REC12    LDC    RECD        *NEXT TRACK IN USE.* 
          UJN    REC14       PROCESS ERROR
  
*         PROCESS READ ERROR IN TRACK.
  
 REC13    LDD    AB          SET ERROR STATUS 
          SCN    40 
          LMN    40 
          STD    AB 
          LDN    0
  
*         TERMINATE PROCESSING. 
  
 REC14    STD    T3          SAVE MESSAGE ADDRESS 
          LDD    SC          SAVE CURRENT SECTOR
          STD    FN+2 
          RJM    /LRR/SRP    SAVE RECOVERY POINTERS 
          RJM    /LRR/RDM    RESUME DISPLAY MODE
          LDD    T3 
          LJM    ERR         REPORT ERROR 
  
  
 RECB     DATA   Z*END OF EQUIPMENT.* 
 RECC     DATA   Z*SYSTEM SECTOR IN TRACK.* 
 RECD     DATA   Z*NEXT TRACK IN USE.*
 SRW      SPACE  4,10 
***       SETRW.B.NNNN. 
*         CHANGE BYTE *B* OF CURRENT TRACK RECOVERY WORD TO *NNNN*. 
  
  
 SRW      COMMAND 
          LDD    RT 
          NJN    SRW1        IF TABLES ALLOCATED
          LJM    ERR4        *INCORRECT ENTRY.* 
  
 SRW1     LDN    DFBN        SET DEFAULT DISPLAY AND LOAD SUBROUTINES 
          STD    RS 
          LDN    LRRN        OVERLAY CONTROL WORD INDEX 
          RJM    LDO         LOAD OVERLAY 
          RJM    /LRR/STA    SET TABLE ADDRESS
          CRD    CM          READ TRACK RECOVERY WORD 
          RJM    ASD         GET BYTE NUMBER
          LDD    AB+4 
          STD    RC 
          SBN    5
          PJN    SRW2        IF OUT OF RANGE
          AOD    CA          ADVANCE CHARACTER ADDRESS
          RJM    ASD         ASSEMBLE NEW VALUE 
          LDD    AB+4 
          STM    CM,RC
          RJM    /LRR/STA    SET TABLE ADDRESS
          CWD    CM          SAVE TRACK RECOVERY WORD 
          LJM    RET         RETURN 
  
 SRW2     LJM    ERR2        *INCORRECT PARAMETER.* 
 STP      SPACE  4,10 
***       SETTP.NNNN. 
*         SETS RECOVERY TRACK POINTER FOR *RECOVER.*, *NEXTAT.*,
*         *NEXTSS.*, AND *SETRW.*  COMMANDS TO *NNNN*.
  
  
 STP      COMMAND 
          LDD    RT 
          NJN    STP1        IF TABLES ALLOCATED
          LJM    ERR4        *INCORRECT ENTRY.* 
  
 STP1     ADD    RA          READ POINTER WORD
          SHN    6
          ADN    RCPW 
          CRD    CM 
          RJM    ASD         ASSEMBLE VALUE 
          LDD    AB+4 
          LPC    3777 
          LMC    4000 
          STD    CM 
          STD    TK 
          LDD    RA          SAVE UPDATED POINTER WORD
          ADD    RT 
          SHN    6
          ADN    RCPW 
          CWD    CM 
          LDN    0
          STD    SC 
          RJM    RSB         READ SECTOR TO BUFFER
          LJM    RET         RETURN 
          SPACE  4,10 
          COMMAND            TERMINATE COMMANDS 
 LRR      SPACE  4,10 
**        LRR - LABEL/TRT RECONSTRUCTION SUBROUTINES. 
* 
*         THE FOLLOWING ROUTINES ARE SAVED IN CENTRAL TO BE LOADED
*         AT THE END OF THE RIGHT SCREEN PROCESSOR AREA AS NEEDED.
  
  
 LRR      ACROVL ACRLA
 CEI      SPACE  4,15 
**        CEI - CHECK EOI SECTOR. 
* 
*         ENTRY  (AB - AB+4) = TRACK RECOVERY WORD. 
*                (FN - FN+4) = RECOVERY POINTERS. 
* 
*         EXIT   (A) = 0  IF INDIRECT CHAIN.
*                RECOVERY POINTERS UPDATED. 
* 
*         USES   T1, CM - CM+4. 
* 
*         CALLS  STA. 
  
  
 CEI      SUBR               ENTRY/EXIT 
          LDD    SC 
          STD    AB+3 
          AOD    AB          SET EOI STATUS 
          LDD    SC 
          LMN    LS 
          ZJN    CEIX        IF AT END OF TRACK 
          AOD    SC 
          RJM    RSB         READ SECTOR TO BUFFER
          ZJN    CEI1        IF NO READ ERROR 
          RJM    SRP         SAVE RECOVERY POINTERS 
          RJM    /LRR/RDM    RESUME DISPLAY MODE
          LJM    RET         RETURN 
  
 CEI1     LDN    2
          STD    T1 
          SOD    SC 
          LDM    BFMS 
          ADM    BFMS+1 
          NJN    CEI3        IF NOT ANOTHER EOI SECTOR
 CEI2     LDM    BFMS+FNEI,T1  CHECK FOR FILENAME *IMS* 
          LMM    CEIB,T1
          NJN    CEI3        IF NOT CATALOG/PERMIT/DATA TRACK 
          SOD    T1 
          PJN    CEI2        IF CHECK NOT COMPLETE
          AOD    AB          SET IMS EOI STATUS 
 CEI3     LDN    0           FORCE EOI STATUS FOR *SNS* 
          STM    BFMS 
          STM    BFMS+1 
          LJM    CEIX        RETURN 
  
  
 CEIB     DATA   Z*IMS* 
 CSS      SPACE  4,15 
**        CSS - CHECK SYSTEM SECTOR.
* 
*         ENTRY  (AB - AB+4) = TRACK RECOVERY WORD. 
*                (FN - FN+4) = RECOVERY POINTERS. 
* 
*         EXIT   (A) = 0  IF INDIRECT CHAIN.
*                RECOVERY POINTERS UPDATED. 
* 
*         USES   T1, CM - CM+4. 
* 
*         CALLS  STA, ERR.
  
  
 CSS      SUBR               ENTRY/EXIT 
          LDD    RA          READ MST RECOVERY AREA 
          ADD    RT 
          SHN    6
          ADN    ALGL 
          CRD    CM 
          ADN    SSDW-ALGL   SAVE FNT/FST/DATE/TIME 
          CWM    FNSS,TR
          LDD    FN          SET LINKAGE
          STD    AB+1 
          STD    AB+2 
          LDM    FNSS+4      SET FILE TYPE
          SHN    -6 
          STD    T1 
          SHN    6
          RAD    AB 
          LDD    T1 
          LMN    SYFT 
          NJN    CSSX        IF NOT SPECIAL FILE
          LDN    2
          STD    T1 
 CSS1     LDM    FNSS,T1     CHECK FOR FILENAME *LABEL* 
          LMM    CSSA,T1
          NJN    CSS2        IF NOT LABEL SECTOR
          SOD    T1 
          PJN    CSS1        IF CHECK NOT COMPLETE
          LDN    1           ALGL BYTE POINTER
          UJN    CSS6        SAVE TRACK 
  
 CSS2     LDN    2
          STD    T1 
 CSS3     LDM    FNSS,T1     CHECK FOR FILENAME *DATA*
          LMM    CSSB,T1
          NJN    CSS4        IF NOT INDIRECT CHAIN
          SOD    T1 
          PJN    CSS3        IF CHECK NOT COMPLETE
          LDN    0           ALGL BYTE POINTER
          UJN    CSS6        SAVE TRACK 
  
 CSS4     LDN    2
          STD    T1 
          LDM    FNSS+3 
          LMM    CSSC+3 
          SCN    77 
          NJN    CSS7        IF NOT PERMIT CHAIN
 CSS5     LDM    FNSS,T1     CHECK FOR FILENAME *PERMIT*
          LMM    CSSC,T1
          NJN    CSS7        IF NOT PERMIT CHAIN
          SOD    T1 
          PJN    CSS5        IF CHECK NOT COMPLETE
          LDN    2           ALGL BYTE POINTER
  
*         SAVE TRACK IN PROPER *ALGL* BYTE. 
  
 CSS6     STD    T1 
          LDD    TK          SAVE TRACK POINTER 
          STM    CM,T1
          LDD    RA 
          ADD    RT 
          SHN    6
          ADN    ALGL 
          CWD    CM 
          RJM    SRP         SAVE RECOVERY POINTERS 
          LDD    T1 
          ZJN    CSS7        IF INDIRECTS 
          LMN    1
          NJN    CSS7        IF NOT LABEL 
          RJM    RDM         RESUME DISPLAY MODE
          LDC    CSSA        *LABEL*
          LJM    ERR         OUTPUT MESSAGE 
  
 CSS7     LJM    CSSX        EXIT 
  
  
 CSSA     DATA   Z*LABEL* 
 CSSB     DATA   Z*DATA*
 CSSC     DATA   Z*PERMIT*
 RDM      SPACE  4,10 
**        RDM - RESUME DISPLAY. 
* 
*         RESETS PARAMETERS AND REQUESTS DISPLAY. 
* 
*         USES   T3.
* 
*         CALLS  CSB, RDC, MDC. 
  
  
 RDM      SUBR               ENTRY/EXIT 
          LDD    MA          SAVE DISK DATA 
          CWD    T3 
          RJM    RDC         REQUEST DISPLAY CHANNEL
          RJM    CSB         CLEAR SCREEN BUFFER
          LDD    MA          RESTORE DISK DATA
          CRD    T3 
          UJN    RDMX        RETURN 
 RRP      SPACE  4,10 
**        RRP - RESTORE RECOVERY POINTERS.
* 
*         ENTRY  (TK) = CURRENT TRACK.
* 
*         EXIT   (AB - AB+4) = TRACK RECOVERY WORD. 
*                (FN - FN+4) = RECOVERY POINTERS. 
  
  
 RRP      SUBR               ENTRY/EXIT 
          LDD    RA 
          ADD    RT 
          SHN    6
 RRPA     ADN    RCPW 
*         ADN    ICPW        IF INDIRECT CHAIN RECOVERY 
*         ADN    BSPW        IF GENERATION OF TRT (BLDSTRT.)
          CRD    FN 
          RJM    STA         SET TABLE ADDRESS
          CRD    AB          READ TRACK RECOVERY WORD 
          UJN    RRPX        RETURN 
 SRP      SPACE  4,10 
**        SRP - SAVE RECOVERY POINTERS. 
* 
*         ENTRY  (TK) = CURRENT TRACK.
*                (AB - AB+4) = TRACK RECOVERY WORD. 
*                (FN - FN+4) = RECOVERY POINTERS. 
* 
*         EXIT   WORDS STORED IN CM RECOVERY AREA.
  
  
 SRP      SUBR               ENTRY/EXIT 
          RJM    STA         SET TABLE ADDRESS
          CWD    AB          SAVE TRACK RECOVERY WORD 
          LDD    RA          SAVE RECOVERY PARAMETERS 
          ADD    RT 
          SHN    6
 SRPA     ADN    RCPW 
*         ADN    ICPW        IF INDIRECT CHAIN RECOVERY 
*         ADN    BSPW        IF GENERATION OF TRT (BLDSTRT.)
          CWD    FN 
          UJN    SRPX        RETURN 
 STA      SPACE  4,10 
**        STA - SET TABLE ADDRESS.
* 
*         EXIT   (A) = CM ADDRESS FOR CURRENT TRACK RECOVERY WORD.
  
  
 STA      SUBR               ENTRY/EXIT 
          LDD    RA 
          ADD    RT 
          SHN    6
          ADD    TK 
          ADC    TRCT-4000
          UJN    STAX        RETURN 
 WSM      SPACE  4,10 
**        WSM - WRITE STATUS MESSAGE. 
* 
*         WRITES MESSAGE TO MS1W FOR RECOVERY STATUS. 
  
  
 WSM      SUBR               ENTRY/EXIT 
          LDD    EQ          SET EST IN MESSAGE 
          SHN    -6 
          ADC    2RQ0 
          STM    WSMA+5 
          LDD    EQ 
          RJM    C2D         CONVERT TO DISPLAY 
          STM    WSMA+6 
          LDD    FN          SET TRACK POINTER IN MESSAGE 
          SHN    -6 
          RJM    C2D         CONVERT TO DISPLAY 
          STM    WSMA+11
          LDD    FN 
          RJM    C2D         CONVERT TO DISPLAY 
          STM    WSMA+12
          LDD    FN+1        SET CURRENT TRACK IN MESSAGE 
          SHN    -6 
          RJM    C2D         CONVERT TO DISPLAY 
          STM    WSMA+15
          LDD    FN+1 
          RJM    C2D         CONVERT TO DISPLAY 
          STM    WSMA+16
          LDN    ZERL 
          CRD    CM 
          LDD    CP          WRITE MESSAGE TO MS1W
          ADN    MS1W 
          CWM    WSMA,TR
          CWD    CM          SET EOL
          LJM    WSMX        RETURN 
  
  
 WSMA     DATA   30H READING EQXXX TP=XXXX CT=XXXX
          SPACE  4,10 
          ACROVL             END OF OVERLAY 
          ERRNG  MACRL-/PRESET/LRRL  *LRR* OVERFLOWS DISPLAY OVL AREA 
          SPACE  4,10 
          OVERFLOW  /PRESET/OVL 
          QUAL   *
          SPACE  4,10 
          QUAL
 .L       EQU    .N          LAST OVERLAY LETTER
 MCMDL    EQU    /PRESET/.MCMDL  MAXIMUM COMMAND PROCESSOR LENGTH 
 TCMTL    EQU    /PRESET/.CMTL    TOTAL CM REQUIRED FOR RESIDENT OVLS 
          SPACE  4,10 
          ERRNG  EPFW-CPLA-MCMDL*5  COMMAND(S) OVERFLOW ERROR PROCESSOR 
 DDF      TTL    DDF - DISPLAY DISK FILE. 
          END 
