CRMTASK 
          IDENT  CRMTASK
          ENTRY  CRMTASK
          LCC    OVERLAY(CRMTASK,0,0) 
          SST    BEGN,CMBL
          SYSCOM B1 
*COMMENT  CRMTASK - TAF/CRM STATUS AND DISPLAY TASK.
          COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
*IFCALL   NAM,COMKTAF 
*NIFCALL  NAM,COMKTRN 
          SPACE  4,10 
***       CRMTASK - TAF/CRM STATUS COMMAND AND DISPLAY TASK.
* 
*         R. G. PARKHOUSE.   80/05/23.
*         A. SROKA.          80/07/25.
*         T. E. SCHULL.      84/11/02.
          SPACE  4,90 
***       *CRMTASK* PERFORMS FUNCTIONS FOR *TAF/CRM* AND FORMATS *CRM*
*         STATUS DISPLAYS FOR THE OPERATOR OR AN ANALYST. 
*         *CRMTASK* IS INITIALLY SCHEDULED WHEN - 
* 
*         1) ONE OF THE FOLLOWING *K-DISPLAY* COMMANDS IS ENTERED.
* 
*                CRMSTAT.          DISPLAY GENERAL *CRM* STATUS.
*                CRMSTAT,DB.       DISPLAY STATUS OF DATA BASE. 
*                CRMSTAT,DBPFNXX.  DISPLAY STATUS OF DATA BASE FILE.
*                DBUP,DB.          UP THE DATA BASE.
*                DBUP,DBPFNXX.     UP THE DATA BASE FILE. 
*                DBDOWN,DB.        DOWN THE DATA BASE.
*                DBDOWN,DBPFNXX.   DOWN THE DATA BASE FILE. 
*                MENU.             DISPLAY COMMAND REPERTOIRE.
* 
*         IF *CRMTASK* IS INVOKED FROM THE *K-DISPLAY* AND
*         NO COMMAND IS ENTERED, THEN THE MENU OF VALID 
*         COMMANDS IS DISPLAYED.
* 
*         2) *TAF* RECEIVES A *SIC* REQUEST FROM THE *CRM* BATCH
*            RECOVERY PROGRAM.  *CRMTASK* FORMATS A PARAMETER BLOCK 
*            AND ISSUES A *CRMSIC* REQUEST TO *AAMI*. 
* 
*         3) A TERMINAL OPERATOR INVOKES *CRMTASK* DIRECTLY OR VIA
*            *CALLTSK* REQUEST. IN EITHER CASE THE COMMUNICATION
*            BLOCK MUST BE FORMATTED EXACTLY THE SAME WAY - AS IF 
*            THE MESSAGE CAME DIRECTLY FROM THE TERMINAL. 
* 
*           TERMINAL OPERATOR CANNOT REQUEST ANY FUNCTIONS OTHER
*           THAN *CRMSTAT*, AND THAT IS RESTRICTED TO HIS/HER OWN 
*           DATA BASE.
*           THE HOOKS HAVE BEEN LEFT IN THE CODE TO ENLARGE 
*           THE TERMINAL OPERATOR-S COMMAND REPERTOIRE. 
* 
*            VALID COMMANDS FROM THE TERMINAL ARE - 
* 
*                CRMSTAT,DB.
*                CRMSTAT,DBPFN. 
* 
* 
*         IF *CRMTASK* IS INITIATED FROM THE OPERATOR CONSOLE TO
*         PROCESS ANY ONE OF THE *CRMSTAT* REQUESTS, SUBSEQUENT 
*         *K-DISPLAY* COMMANDS ARE PASSED TO *CRMTASK* RATHER THAN
*         BEING PROCESSED BY *TAF*.  SIMILARLY, WHEN *CRMTASK* IS 
*         INITIATED FROM A TERMINAL TO PROCESS ANY OF THE *CRMSTAT* 
*         REQUESTS, THE DISPLAY IS SENT TO THE TERMINAL AND SUBSEQUENT
*         REQUESTS WILL BE ACCEPTED FROM THE TERMINAL.  IN EITHER CASE, 
*         ADDITIONAL VALID COMMANDS ARE - 
* 
*                END.              END DISPLAY AND CEASE. 
*                +.                DISPLAY NEXT SCREEN IF MORE. 
*                -.                DISPLAY FIRST SCREEN.
* 
*         IN CASE OF *SIC* REQUEST ERRORS, THE FOLLOWING MESSAGES,
*         ALONG WITH THE FIRST 4 WORDS OF MESSAGE IN THE COMMUNICA- 
*         TION BLOCK, WILL BE WRITTEN IN *JOUR0* -
* 
*                CRMTASK- INCORRECT REQUEST.
*                CRMTASK- DATA BASE/FILE NAME UNKNOWN.
*                CRMTASK- INCORRECT TT SEQUENCE NUMBER. 
*                CRMTASK- DATA BASE DOWNED BY OPERATOR. 
*                CRMTASK- NOT ALL DATA BASE FILES UPPED.
*                CRMTASK- DATA BASE/FILE CANNOT BE UPPED. 
*                CRMTASK- DATA BASE/FILE BEING IDLED. 
*                CRMTASK- INCORRECT REQUEST FORMAT. 
* 
*         THE FOLLOWING INFORMATIVE OR ERROR MESSAGES WILL APPEAR 
*         ON A *K-DISPLAY* AS A RESULT OF OPERATOR COMMANDS - 
* 
*                DATA BASE/FILE NAME UNKNOWN. 
*                DATA BASE/FILE CANNOT BE UPPED.
*                DATA BASE/FILE ALREADY DOWN OR IDLE. 
*                INCORRECT PAGING COMMAND.
*                INSUFFICIENT FIELD LENGTH FOR THIS COMMAND.
*                INCORRECT COMMAND. 
*                NOT ALL DATA BASE FILES UPPED. 
*                REQUEST COMPLETE.
* 
*         THE TERMINAL WILL ALSO RECEIVE ALL OF THE ABOVE MESSAGES
*         AND, IN ADDITION MAY RECEIVE THE FOLLOWING -
* 
*                ENTER NEXT COMMAND...
*                CRMTASK TIMEOUT. 
*                CRMTASK COMPLETE.
* 
          SPACE  4,10 
***       COMMON DECKS. 
  
  
 BEGN     BSS    0
*CALL     COMCMAC 
*CALL     COMCDCM 
*CALL     COMCDCP 
*CALL     COMKIPR 
*CALL     COMKMAC 
*CALL     COMKFLD 
*CALL     COMKTDM 
*CALL     COMKCRM 
*CALL     COMKCBD 
*CALL     COMKTER 
          ORG    BEGN 
          SPACE  4,10 
****      ASSEMBLY CONSTANTS. 
  
  
 CMAXNF   EQU    100D        MAXIMUM NUMBER OF DISPLAYABLE DBPFNS 
 KFNL     EQU    20          NUMBER OF LINES BEFORE *MORE* LINE 
****
 CMB      SPACE  4,10 
*         COMMUNICATION BLOCK.
  
 CMBK     BSS    CMBL 
          VFD    60/0L.      MESSAGE TERMINATOR 
          SPACE  4,10 
*         GLOBAL VARIABLES. 
  
 DBNM     CON    0           DATA BASE NAME 
 ORIG     CON    0           TASK ORIGIN (0=TAF, 1=TERMINAL)
 MORE     DATA   10HMORE
 PAGE     CON    DMU         PROCESSOR RE-ENTRY ADDRESS 
 FPAG     CON    DMU         PROCESSOR ENTRY ADDRESS
 NPAG     CON    0           BUFFER ADDRESS FOR NEXT PAGE OF DATA 
 BLNK     DATA   10H
 CWKD     CON    KDE         *K-DISPLAY* CONTROL WORD 
 EAKD     CON    KDEA        *K-DISPLAY* ERROR MESSAGE ADDRESS
 IAKD     CON    0           *K-DISPLAY* INPUT MESSAGE ADDRESS
 DSTP     CON    0           *K-DISPLAY*  (0=FORMATTED , 1=-C- FORMAT)
 RFRS     CON    0           REFRESH *K-DISPLAY* SWITCH 
 CPAR     CON    0           *CRMSTAT* PARAMETER FOR SCREEN REFRESH 
 IOLN     CON    377777B     SYSTEM REQUEST CALL LIMIT
 TILN     CON    7777B       TASK TIME LIMIT
 PADR     BSSZ   5           PARAMETER BLOCK FOR *AAMI* REQUEST 
  
*         *AAMI* CALLING SEUQUENCE FOR *CRMSTAT*. 
  
 CSQ1     CON    PADR 
          CON    PADR+1 
          CON    0
          CON    PADR+2 
          CON    0
  
*         *AAMI* CALLING SEQUENCE FOR *DBUP* AND *DBDOWN*.
  
 CSQ2     CON    PADR 
          CON    PADR+1 
          CON    0
  
*         *AAMI* CALLING SEQUENCE FOR *CRMSIC*. 
  
 CSQ3     CON    PADR 
          CON    PADR+1 
          CON    PADR+2 
          CON    PADR+3 
          CON    0
 CRMTASK  SPACE  4,25 
**        CRMTASK - INITIALIZATION. 
* 
*         THIS SUBROUTINE DETERMINES THE TRANSACTION ORIGIN.
*         THEN, IF *SIC* COMMAND PROCESSING, IT VALIDATES THE 
*         COMMAND AND JUMPS TO THE *SIC* PROCESSOR. IF COM- 
*         MAND ORIGINATES FROM A TERMINAL, THE PARAMETERS ARE 
*         UNPACKED INTO RA+2 AND THEN MOVED BACK TO *TMSW*. 
* 
*         ENTRY  COMMUNICATION BLOCK LOADED.
* 
*         EXIT   TO *CVL*, IF *TAF* OR TERMINAL ORIGIN. 
*                (B3) = FWA OF VALID COMMAND TABLE. 
* 
*         ERROR  TO *IBR*, IF INCORRECT *SIC* COMMAND.
*                (X3) = ERROR CODE. 
*                TO *TTE*, IF INCORRECT TERMINAL COMMAND. 
*                (B2) = ERROR CODE. 
* 
*         USES   X - 0, 1, 2, 3, 5, 6, 7. 
*                A - 1, 2, 5, 6, 7. 
*                B - 1, 3.
* 
*         CALLS  ITU, PRK.
* 
*         MACROS IIO, ITL.
  
  
  
 CRMTASK  BSS    0           ENTRY
          SB1    1
          IIO    IOLN        INCREASE TASK-S SYSTEM REQUEST CALL LIMIT
          ITL    TILN        INCREASE TASK-S TIME LIMIT 
          SX3    KBLG 
          RJ     PRK         PRESET *K-DISPLAY* BUFFER
          SA1    TRSQ 
          MX0    12 
          BX6    X0*X1       EXTRACT DATA BASE FROM C.B.
          SA6    DBNM 
          SX6    B0+
          SA1    CBSYW
          LX1    59-CBSYS 
          NG     X1,CRM1     IF SYSTEM ORIGIN TASK
          SX6    B1          TERMINAL ORIGIN
          MX0    36 
          SA1    TMSW 
          SA2    CRMA 
          SX3    IER0        IN CASE ATTEMPTED *SIC* REQUEST
          BX1    X1-X2
          ZR     X1,IBR      IF *SIC* FROM TERMINAL 
 CRM1     SA6    ORIG        SAVE TASK ORIGIN 
          SX7    KDEB+1      *K-DISPLAY* INPUT LINE 
          SA7    IAKD 
          SB3    CVLA        FWA OF COMMAND TABLE 
          ZR     X6,CVL      IF *TAF* ORIGIN
          RJ     ITU         INSERT TERMINATOR AND UNPACK MESSAGE 
          SA1    2
          SA2    A1+1 
          SA5    CRMB 
          BX6    X1 
          BX5    X5-X1
          NZ     X5,TTE      IF REQUEST OTHER THAN *CRMSTAT*
          SA6    TMSW 
          BX7    X2 
          SB3    CVLA        FWA OF COMMAND TABLE 
          SA7    A6+B1
          EQ     CVL         SEARCH FOR THE PROCESSOR 
  
 CRMA     DATA   0LCRMSIC 
 CRMB     DATA   0LCRMSTAT
 CVL      SPACE  4,25 
**        CVL - COMMAND VALIDATION. 
* 
*         CVL VALIDATES THE COMMAND AND JUMPS TO THE RELEVANT COMMAND 
*         PROCESSOR.
* 
*         ENTRY  (B3) = FWA OF VALID COMMAND TABLE. 
*                (IAKD) = *K-DISPLAY* INPUT MESSAGE ADDRESS.
*                FIRST WORD OF DATA AREA OF COMMUNICATION BLOCK HAS THE 
*                COMMAND. 
* 
*         EXIT   TO RELEVANT COMMAND PROCESSOR. 
* 
*         ERROR  TO *TPA*  (*TAF* ORIGIN).
*                TO *TTE*  (TERMINAL ORIGIN). 
*                (B2) = ERROR CODE. 
* 
*         USES   X - 0, 1, 2, 3, 4, 7.
*                A - 1, 2, 3, 7.
*                B - 2, 3.
* 
*         CALLS  SEM. 
* 
*         MACROS MOVE.
  
  
 CVL      BSS    0           ENTRY
          MOVE   KBLCL,KBLC,KDBD  BLANK ERROR MESSAGE LINES 
          MOVE   KBLCL,KBLC,KDCM
          MOVE   KBLFL,KBLF,KDAF
          MOVE   KBLFL,KBLF,KDEA
          SA1    TRSQ 
          SA2    TMSW+1      PARAMETER
          MX0    12 
          BX4    X1-X2
          SA3    ORIG 
          BX4    X0*X4
          MX0    42 
          SX7    B0+
          SA1    TMSW 
          SA7    RFRS        RESET SCREEN REFRESH SWITCH
          ZR     X3,CVL1     IF *TAF* ORIGIN
          ZR     X2,CVL1     IF NO PARAMETER
          NZ     X4,CVL2     IF NOT TERMINAL OWN DATA BASE
 CVL1     SA2    B3          NEXT COMMAND FROM LIST 
          ZR     X2,CVL2     IF END OF LIST 
          SB3    B3+B1
          BX3    X0*X2
          BX3    X3-X1
          NZ     X3,CVL1     IF NO MATCH
          SB3    X2+         COMMAND PROCESSOR ADDRESS
          JP     B3          PROCESS COMMAND
  
 CVL2     SA3    ORIG        ORIGIN 
          SB2    ER5         *INCORRECT COMMAND.* 
          NZ     X3,TTE      IF TERMINAL ORIGIN 
          RJ     SEM         SET ERROR MESSAGE
          EQ     TPA         DISPLAY ERROR MESSAGE
  
  
*         VALID COMMAND TABLE FIRST TIME THROUGH. 
  
 CVLA     BSS    0
          VFD    42/0,18/DMU
          VFD    42/0LMENU,18/DMU 
          VFD    42/0LCRMSTAT,18/CRS
          VFD    42/0LDBUP,18/DBU 
          VFD    42/0LDBDOWN,18/DBD 
          VFD    42/0LCRMSIC,18/SIC 
          CON    0           TABLE TERMINATOR 
  
*         VALID COMMAND TABLE WHILE RUNNING.
  
 CVLB     VFD    42/0LCRMSTAT,18/CRS
          VFD    42/0LDBUP,18/DBU 
          VFD    42/0LDBDOWN,18/DBD 
          VFD    42/0LMENU,18/DMU 
          VFD    42/0LEND,18/TPD
          VFD    42/1C+,18/PFP
          VFD    42/1C-,18/PBP
          CON    0           TABLE TERMINATOR 
 CRS      SPACE  4,25 
**        CRS - CRMSTAT PROCESSOR.
* 
*         CRS VALIDATES THE PARAMETER AND IF VALID ISSUES A *CRMSTAT* 
*         REQUEST TO *AAMI* TO GET STATUS INFORMATION.
* 
*         ENTRY  SECOND WORD OF DATA AREA OF COMMUNICATION BLOCK
*                CONTAINS THE PARAMETER.
* 
*         EXIT   TO *FCD* IF CRM STATUS REQUEST.
*                TO *FDD* IF DATA BASE STATUS REQUEST.
*                TO *FFD* IF FILE STATUS REQUEST. 
* 
*         ERROR  TO *TPA*.  (TAF ORIGIN). 
*                (X1) = ADDRESS OF K-DISPLAY CONTROL WORD.
*                TO *TTE*.  (TERMINAL ORIGIN).
*                (B2) = ERROR CODE. 
* 
*         USES   X - ALL. 
*                A - 1, 3, 4, 7.
*                B - 2. 
* 
*         CALLS  CST, SEM.
  
  
 CRS      BSS    0           ENTRY
          SX7    B0+
          SB2    BUFSIZE
 CRS1     SB2    B2-1        CLEAR BUFFER 
          SA7    BADR+B2
          PL     B2,CRS1     IF NOT ENTIRE BUFFER SET TO ZEROS
          SA4    ORIG        ORIGIN 
          SA1    TMSW+1      PARAMETER
          SX6    B1 
          BX7    X1 
          SA6    RFRS        SET SWITCH TO REFRESH *K-DISPLAY*
          SA7    CPAR        SAVE *CRMSTAT* PARAMETER 
          ZR     X1,CRS3     IF NO PARAMETER
          MX0    12 
          BX2    -X0*X1 
          SA3    DBNM 
          ZR     X4,CRS2     IF SYSTEM ORIGIN 
          BX3    X1-X3
          BX3    X0*X3
          SB2    ER5         *INCORRECT REQUEST*
          NZ     X3,TTE      IF TERMINAL DID NOT REQUEST OWN DATA BASE
 CRS2     NZ     X2,CRS5     IF FILE STATUS REQUEST 
          EQ     CRS4        PROCESS DATA BASE STATUS REQUEST 
  
*         CRM STATUS REQUEST. 
  
 CRS3     SX5    B0+         FUNCTION CODE - *CRM* STATUS 
          SB2    ER5         *INCORRECT COMMAND*
          NZ     X4,TTE      IF REQUEST FROM TERMINAL 
          SX6    BADR        FWA OF BUFFER TO RECEIVE STATUS
          SX7    CST1L       LENGTH OF BUFFER 
          RJ     CST         ISSUE *CRMSTAT* REQUEST
          SB2    ER4         *INSUFICIENT FIELD LENGTH.*
          NZ     X2,CRS6     IF BUFFER TOO SMALL
          SX5    B1+         FUNCTION CODE - REQUEST ALL *TDRF-S* 
          SX6    BADR+CST1L  FWA OF BUFFER TO RECEIVE STATUS
          SX7    CST2L       LENGTH OF BUFFER 
          RJ     CST         ISSUE *CRMSTAT* FUNCTION 
          NZ     X2,CRS6     IF BUFFER TOO SMALL
          EQ     FCD         FORMAT DISPLAY 
  
*         DATA BASE STATUS REQUEST. 
  
 CRS4     SX5    B1+B1       FUNCTION CODE - DATA BASE STATUS 
          BX5    X1+X5       DATA BASE NAME + FUNCTION CODE 
          SX6    BADR        FWA OF BUFFER TO RECEIVE STATUS
          SX7    DST1L       LENGTH OF BUFFER 
          RJ     CST         ISSUE *CRMSTAT* REQUEST
          SX2    X2-1 
          SB2    ER0         *DATA BASE/FILE NAME UNKNOWN.* 
          ZR     X2,CRS6     IF DATA BASE UNKNOWN 
          SB2    ER4         *INSUFICIENT FIELD LENGTH.*
          PL     X2,CRS6     IF BUFFER TOO SMALL
          SA1    TMSW+1      DATA BASE NAME 
          SX5    3           FUNCTION CODE - REQUEST ALL *TLNT-S* 
          BX5    X1+X5
          SX6    BADR+DST1L  FWA OF BUFFER TO RECEIVE STATUS
          SX7    DST2L       LENGTH OF BUFFER 
          RJ     CST         ISSUE *CRMSTAT* REQUEST
          SB2    ER4         *INSUFICIENT FIELD LENGTH.*
          NZ     X2,CRS6     IF BUFFER TOO SMALL
          EQ     FDD         FORMAT DISPLAY 
  
*         FILE STATUS REQUEST.
  
 CRS5     SX5    4           FUNCTION CODE - FILE STATUS
          BX5    X1+X5       FILE NAME + FUNCTION CODE
          SX6    BADR        FWA OF BUFFER TO RECEIVE STATUS
          SX7    FSTBL       LENGTH OF BUFFER 
          RJ     CST         ISSUE *CRMSTAT* REQUEST
          SX2    X2-1 
          SB2    ER0         *DATA BASE/FILE NAME UNKNOWN.* 
          ZR     X2,CRS6     IF FILE NAME UNKNOWN 
          SB2    ER4         *INSUFICIENT FIELD LENGTH.*
          PL     X2,CRS6     IF BUFFER TOO SMALL
          EQ     FFD         FORMAT DISPLAY 
  
*         PROCESS ERRORS. 
  
 CRS6     NZ     X4,TTE      IF TERMINAL ORIGIN 
          RJ     SEM         SET ERROR MESSAGE
          EQ     TPA         DISPLAY ERROR MESSAGE
 DBD      SPACE  4,25 
**        DBD - DATA BASE DOWN. 
* 
*         DBD ISSUES A REQUEST TO *AAMI* TO DOWN A DATA BASE OR DATA
*         BASE FILE.
* 
*         ENTRY  SECOND WORD OF DATA AREA OF COMMUNICATION BLOCK
*                CONTAINS DATA BASE OR FILE NAME. 
* 
*         EXIT   TO *TPA*.  (TAF ORIGIN). 
*                (X1) = ADDRESS OF *K-DISPLAY* CONTROL WORD.
*                TO *TPD*.  (TERMINAL ORIGIN).
* 
*         ERROR  TO *TPA*.  (TAF ORIGIN). 
*                (X1) = ADDRESS OF *K-DISPLAY* CONTROL WORD.
*                TO *TTE*.  (TERMINAL ORIGIN).
*                (B2) = ERROR CODE. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 2, 6, 7.
*                B - 2. 
* 
*         CALLS  SEM. 
* 
*         MACROS DBDOWN.
  
  
 DBD      BSS    0           ENTRY
          SX6    DMU
          SA6    FPAG        SET PROCESSOR ADDRESS
          SA6    PAGE 
          SX6    KDE         *K-DISPLAY* CONTROL WORD 
          SX7    KDEA        *K-DISPLAY* ERROR LINE 
          SA6    CWKD 
          SA7    EAKD 
          SX6    KDEB+1      *K-DISPLAY* INPUT LINE 
          SA6    IAKD 
          SX6    B0+         FORMATTED *K-DISPLAY*
          SA6    DSTP 
          SA1    TMSW+1      DATA BASE OR FILE NAME 
          BX6    X1 
          BX7    X7-X7
          SA6    PADR 
          SA7    A6+B1       CLEAR STATUS WORD
          SA7    A7+B1       PARAMETER LIST TERMINATOR
          DBDOWN CSQ2        ISSUE *AAMI* REQUEST 
          SA1    PADR+1      STATUS 
          SA2    ORIG 
          NZ     X1,DBD1     IF ERROR 
          SB2    ER7         *REQUEST COMPLETE.*
          NZ     X2,TPD      IF TERMINAL ORIGIN 
          RJ     SEM
          EQ     TPA         COMPLETE PROCESSING
  
 DBD1     SX6    X1-TERB
          SB2    ER0         *DATA BASE/FILE NAME UNKNOWN.* 
          ZR     X6,DBD2     IF NO FILE OR DATA BASE
          SB2    ER3         *DATA BASE/FILE ALREADY DOWN OR IDLE.* 
 DBD2     NZ     X2,TTE      IF TERMINAL ORIGIN 
          RJ     SEM         SET ERROR MESSAGE
          EQ     TPA         DISPLAY ERROR MESSAGE
 DBU      SPACE  4,25 
**        DBU - DATA BASE UP. 
* 
*         DBU ISSUES A REQUEST TO *AAMI* TO UP A DATA BASE OR DATA BASE 
*         FILE. 
* 
*         ENTRY  SECOND WORD OF DATA AREA OF COMMUNICATION BLOCK
*                CONTAINS DATA BASE OR FILE NAME. 
* 
*         EXIT   TO *TPA*.  (TAF ORIGIN). 
*                (X1) = ADDRESS OF *K-DISPLAY* CONTROL WORD.
*                TO *TPD*.  (TERMINAL ORIGIN).
* 
*         ERROR  TO *TPA*.  (TAF ORIGIN). 
*                (X1) = ADDRESS OF *K-DISPLAY* CONTROL WORD.
*                TO *TTE*.  (TERMINAL ORIGIN).
*                (B2) = ERROR CODE. 
* 
*         USES   X - 1, 2, 6, 7.
*                A - 1, 2, 6, 7.
*                B - 2. 
* 
*         CALLS  SEM. 
* 
*         MACROS DBUP.
  
  
 DBU      BSS    0           ENTRY
          SX6    DMU
          SA6    FPAG        SET PROCESSOR ADDRESS
          SA6    PAGE 
          SX6    KDE         *K-DISPLAY* CONTROL WORD 
          SX7    KDEA        *K-DISPLAY* ERROR LINE 
          SA6    CWKD 
          SA7    EAKD 
          SX6    KDEB+1      *K-DISPLAY* INPUT LINE 
          SA6    IAKD 
          SX6    B0+         FORMATTED *K-DISPLAY*
          SA6    DSTP 
          SA1    TMSW+1      DATA BASE OR FILE NAME 
          BX6    X1 
          BX7    X7-X7
          SA6    PADR 
          SA7    A6+B1       CLEAR STATUS WORD
          SA7    A7+B1       PARAMETER LIST TERMINATOR
          DBUP   CSQ2        ISSUE *AAMI* REQUEST 
          SA1    PADR+1      STATUS 
          SA2    ORIG 
          NZ     X1,DBU1     IF ERROR 
          SB2    ER7         *REQUEST COMPLETE.*
          NZ     X2,TPD      IF TERMINAL ORIGIN 
          RJ     SEM
          EQ     TPA         COMPLETE PROCESSING
  
 DBU1     SX6    X1-TERB
          SB2    ER0         *DATA BASE/FILE NAME UNKNOWN.* 
          ZR     X6,DBU2     IF NO FILE OR DATA BASE
          SB2    ER1         *NOT ALL DATA BASE FILES UPPED.* 
          SX6    X1-TERAL 
          ZR     X6,DBU2     IF NOT ALL FILES UP
          SB2    ER2         *DATA BASE/FILE CANNOT BE UPPED.*
 DBU2     NZ     X2,TTE      IF TERMINAL ORIGIN 
          RJ     SEM         SET ERROR MESSAGE
          EQ     TPA         DISPLAY ERROR MESSAGE
 DMU      SPACE  4,25 
**        DMU - DISPLAY MENU. 
* 
*         THIS SUBROUTINE DISPLAYS THE MENU OF *CRMTASK*
*         COMMANDS UPON THE *K-DISPLAY*. IT CAN ONLY BE 
*         INVOKED BY *K-DISPLAY* COMMAND. NO PROVISIONS ARE 
*         MADE TO DISPLAY MENU AT THE TERMINAL. 
* 
*         ENTRY  NONE.
* 
*         EXIT   TO *TPA*.
*                (X1) = *K-DISPLAY* CONTROL WORD. 
* 
*         ERROR  TO *TTE*, IF TERMINAL ORIGIN.
*                (B2) =ERROR CODE.
*                TO *IBR*, IF *SIC* REQUEST.
*                (X3) = ERROR CODE. 
* 
*         USES   X - 1, 3, 4, 6, 7. 
*                A - 1, 6, 7. 
*                B - 2, 3.
* 
*         MACROS SYSTEM.
  
  
 DMU      BSS    0           ENTRY
          SX6    DMU
          SA6    FPAG        SET PROCESSOR ADDRESS
          SA6    PAGE 
          SX6    KDE         *K-DISPLAY* CONTROL WORD 
          SX7    KDEA        *K-DISPLAY* ERROR LINE 
          SA6    CWKD 
          SA7    EAKD 
          SX6    KDEB+1      *K-DISPLAY* INPUT LINE 
          SA6    IAKD 
          SX6    B0+         FORMATTED *K-DISPLAY*
          SA6    DSTP 
          SA1    ORIG 
          SB2    ER5         *INCORRECT COMMAND.* 
          SX1    X1-1 
          ZR     X1,TTE      IF TERMINAL ORIGIN 
          SX3    B0+         *INCORRECT SIC REQUEST.* 
          PL     X1,IBR      IF *BTRAN* REQUEST 
          SX1    KDE         *K-DISPLAY* CONTROL WORD 
          EQ     TPA         DISPLAY THE MENU 
 PBP      SPACE  4,20 
**        PBP - PAGE BACKWARD PROCESSOR.
* 
*         PBP REPROCESSES THE *CRMSTAT* INFORMATION AGAIN.
*         IT GETS THE FWA OF THE BUFFER AND ENTERS THE AP-
*         PROPRIATE DISPLAY PROCESSOR.
* 
*         ENTRY  (FPAG) = PROCESSOR ADDRESS.
*                (BADR) = CONTAINS DATA RECEIVED FROM *AAMI*. 
* 
*         EXIT   TO (PAGE). 
* 
*         USES   X - 2. 
*                A - 2. 
*                B - 3. 
  
  
 PBP      BSS    0           ENTRY
          SA2    FPAG 
          SB3    X2+
          JP     B3          ENTER PROCESSOR
 PFP      SPACE  4,20 
**        PFP - PAGE FORWARD PROCESSOR. 
* 
*         PFP GETS THE BUFFER ADDRESS FROM WHICH TO CONSTRUCT THE NEXT
*         PAGE OF THE DISPLAY, AND RE-ENTERS THE DISPLAY PROCESSOR. 
* 
*         ENTRY  (PAGE) = PROCESSOR ADDRESS FOR REENTRY.
*                (NPAG) = BUFFER ADDRESS OF DATA FOR DISPLAY. 
* 
*         EXIT   TO DISPLAY PROCESSOR WHOSE ADDRESS IS IN *PAGE*. 
*                (A5) = FWA OF BUFFER OF DISPLAY DATA.
*                (X5) = CONTENTS OF A WORD AT (A5). 
* 
*         USES   X - 1, 2, 5. 
*                A - 1, 2, 5. 
*                B - 3. 
  
  
 PFP      BSS    0           ENTRY
          SA1    NPAG 
          SA2    PAGE 
          SB3    X2 
          SA5    X1 
          JP     B3          REENTER DISPLAY PROCESSOR
 SIC      SPACE  4,20 
**        SIC - PROCESS *CRMSIC* REQUEST. 
* 
*         SIC REFORMATS THE INFORMATION FROM THE COMMUNICATION BLOCK
*         INTO A PARAMETER BLOCK, AND ISSUES A *CRMSIC* REQUEST TO
*         *AAMI*. 
* 
*         ENTRY  FIRST FOUR WORDS OF DATA AREA OF COMMUNICATION BLOCK 
*                CONTAIN INFORMATION TO BE STORED IN PARAMETER BLOCK. 
* 
*         EXIT   TO *TPD*.
* 
*         ERROR  TO *IBR*.
*                (X3) = ERROR CODE. 
* 
*         USES   X - 0, 1, 3, 6, 7. 
*                A - 1, 3, 6, 7.
* 
*         MACROS CRMSIC.
  
  
 SIC      BSS    0           ENTRY
          SA1    TMSW+1 
          MX0    42 
          BX6    X0*X1       DATA BASE/FILE NAME
          SA6    PADR 
          SX7    B0 
          SA7    A6+B1       CLEAR STATUS WORD
          BX6    -X0*X1      BATCH JOB SEQUENCE NUMBER
          SA6    A7+B1
          SA1    A1+B1       FUNCTION CODE
          BX6    X1 
          SA6    A6+B1
          SA7    A6+B1       PARAMETER LIST TERMINATOR
          CRMSIC CSQ3        ISSUE *AAMI* REQUEST 
          SA3    PADR+1      STATUS 
          ZR     X3,TPD      IF NO ERROR
          SX6    X1-TERB
          SX3    IER1 
          ZR     X6,IBR      IF UNKNOWN DATA BASE 
          SX3    IER2 
          SX6    X1-TERAD 
          ZR     X6,IBR      IF INCORRECT TT NUMBER 
          SX3    IER3 
          SX6    X1-TERAK 
          ZR     X6,IBR      IF DATA BASE DOWNED BY OPERATOR
          SX3    IER4 
          SX6    X1-TERAL 
          ZR     X6,IBR      IF NOT ALL FILE UP 
          SX3    IER5 
          SX6    X1-TERAM 
          ZR     X6,IBR      IF DATA BASE CANNOT BE UPPED 
          SX3    IER6 
          SX6    X1-TERAG 
          ZR     X6,IBR      IF DATA BASE IDLING DOWN 
          SX3    IER7 
          EQ     IBR         JOURNAL MESSAGE AND QUIT 
 CST      SPACE  4,45 
**        CST - ISSUE *CRMSTAT* REQUEST.
* 
*         THIS SUBROUTINE REQUESTS *AAMI* STATUS. FUNCTION CODE IN X5 
*         DETERMINES WHAT IS RETURNED BY *AAMI*.
* 
*         FC = 0, *AAMI* RETURNS *TSEQ* TABLE,
*                                A WORD OF BINARY ZEROS,
*                                INPUT QUEUE FET, 
*                                INPUT QUEUE, 
*                                OUTPUT QUEUE FET,
*                                OUTPUT QUEUE,
*                                A WORD OF BINARY ZEROS.
*            = 1, *AAMI* RETURNS ALL *TDRF* TABLES, 
*                                A WORD OF BINARY ZEROS.
*            = 2, *AAMI* RETURNS *TDRF* TABLE,
*                                A WORD OF BINARY ZEROS,
*                                *TARF* TABLE,
*                                A WORD OF BINARY ZEROS,
*                                ALL *TQRF* TABLES FOR
*                                THE SPECFIED DATA BASE,
*                                A WORD OF BINARY ZEROS.
*            = 3, *AAMI* RETURNS ALL *TLNT* TABLES FOR
*                                THE SPECFIED DATA BASE,
*                                A WORD OF BINARY ZEROS.
*            = 4, *AAMI* RETURNS *TLNT* TABLE,
*                                A WORD OF BINARY ZEROS,
*                                NUMBER OF ACTIVE USERS,
*                                NUMBER OF LOCKED RECORDS FOR 
*                                THE SPECFIED DATA BASE FILE, 
*                                A WORD OF BINARY ZEROS.
* 
*         ENTRY  (X5) = FUNCTION CODE 
*                (X6) = FWA OF BUFFER 
*                (X7) = LENGTH OF BUFFER
* 
*         EXIT   (X2) = STATUS REPLY
* 
*         USES   X - 2, 6, 7. 
*                A - 2, 6, 7. 
* 
*         MACROS CRMSTAT. 
  
  
 CST      SUBR               ENTRY/EXIT 
          SA7    PADR+2 
          SA6    CSQ1+2 
          BX6    X6-X6
          SA6    A7-B1
          BX6    X5 
          SA6    A6-B1
          BX7    X7-X7
          SA7    A7+B1       PARAMETER LIST TERMINATOR
          CRMSTAT CSQ1       ISSUE *AAMI* REQUEST 
          SA2    PADR+1      STATUS WORD
          EQ     CSTX        RETURN 
 FCD      SPACE  4,20 
**        FCD - FORMAT CRMSTAT DISPLAY. 
* 
*         FCD EXTRACTS RAW DATA FROM THE *TSEQ*, *AMIQ*, *AMOQ*, *TDRF* 
*         TABLES AND FORMATS A *K-DISPLAY*. 
* 
*         ENTRY  BADR = FWA OF TABLES.
* 
*         REENTRY  AT *FCD5*. 
*                (A5) = FWA OF NEXT *TDRF*. 
*                (X5) = FIRST WORD OF *TDRF*. 
* 
*         EXIT   TO *TPA*.
* 
*         USES   X - ALL. 
*                A - 1, 2, 3, 4, 5, 6, 7. 
*                B - 2, 3, 4, 6.
* 
*         CALLS  CDD. 
  
  
 FCD      BSS    0           ENTRY
          SX6    FCD
          SA6    FPAG        SET PROCESSOR ADDRESS
          SA6    PAGE 
          SX6    KDA         *K-DISPLAY* CONTROL WORD 
          SX7    KDAF        *K-DISPLAY* ERROR LINE 
          SA6    CWKD 
          SA7    EAKD 
          SX6    KDAG+1      *K-DISPLAY* INPUT LINE 
          SA6    IAKD 
          SX6    B0          FORMATTED *K-DISPLAY*
          SX1    B0          INITIALIZE COUNT OF ACTIVE TRANSACTIONS
          SA6    DSTP 
          SB2    TSEQE       LENGTH OF *TSEQ* TABLE ENTRY 
          SB3    CMDM*RMDM+1 NO OF ENTRIES
          SA5    BADR-TSEQE 
 FCD1     SB3    B3-B1
          LT     B3,FCD2     IF ALL ENTRIES CHECKED 
          SA5    A5+B2       NEXT ENTRY 
          ZR     X5,FCD1     IF EMPTY 
          SX1    X1+1        INCREMENT ACTIVE COUNT 
          EQ     FCD1        NEXT ENTRY 
  
 FCD2     RJ     CDD         CONVERT TO DECIMAL DISPLAY 
          SA6    KDAB+1      STORE IN DISPLAY BUFFER
          SA5    A5+TSEQE+1  SKIP LAST ENTRY AND THE ZERO WORD
          SA1    A5+B1       GET *AMIQ* FET POINTERS
          SX1    X1          FIRST
          SA2    A1+B1       IN 
          SA3    A2+B1       OUT
          SA4    A3+1 
          SX4    X4          LIMIT
          IX6    X2-X3       IN-OUT 
          PL     X6,FCD3     IF IN .GE. OUT 
          IX3    X4-X3       LIMIT-OUT
          IX2    X2-X1       IN-FIRST 
          IX6    X2+X3       REQUESTS IN *AMIQ* 
 FCD3     BX1    X6 
          MX0    24 
          RJ     CDD         CONVERT TO DECIMAL DISPLAY 
          SA1    KDAA        NUMBER OF TRANSACTIONS IN INPUT QUEUE
          BX2    X0*X1       EXTRACT *KDL* COORDINATES
          BX6    -X0*X6 
          BX6    X2+X6
          SA6    A1          STORE IN DISPLAY BUFFER
          SA5    A5+AAMQFL+AIBFL  GET *AMOQ* FET POINTERS 
          SA2    A5+B1
          SX2    X2          FIRST
          SA3    A2+B1       IN 
          SA4    A3+B1       OUT
          SA1    A4+B1
          SX1    X1          LIMIT
          IX6    X3-X4
          IX4    X1-X4       LIMIT-OUT
          PL     X6,FCD4     IF IN .GE. OUT 
          IX3    X3-X2       IN - FIRST 
          IX6    X3+X4       REQUESTS IN *AMOQ* 
 FCD4     BX1    X6 
          RJ     CDD         CONVERT TO DECIMAL DISPLAY 
          SA1    KDAC        NUMBER OF TRANSACTIONS IN OUTPUT QUEUE 
          BX2    X0*X1       EXTRACT *KDL* COORDINATES
          BX6    -X0*X6 
          BX6    X2+X6
          SA6    A1          STORE IN DISPLAY 
          SA5    A5+AAMQFL+AOBFL+1  POSITION TO FIRST *TDRF*
  
*         REENTRY POINT.
* 
*         ENTRY  (A5) = ADDRESS OF THE NEXT *TDRF* TO DISPLAY.
*                (X5) = FIRST WORD OF THE NEXT *TDRF* TO DISPLAY. 
  
 FCD5     SB3    3           DATA BASES PER DISPLAY LINE
          SA4    KDAD-2 
          SB4    10          NUMBER OF LINES PER DISPLAY
          SA3    A4+1        *KDAD*-1 
          BX6    X3 
          MX0    TDIDN
          SA6    A3+         IN CASE OF NO DATA BASES 
 FCD6     ZR     X5,FCD9     IF NO DATA BASES 
          SA3    A5+TDODW 
          SA4    A4+2        ADDRESS IN DISPLAY BUFFER
          SA2    A5+TDIDW 
          BX6    X0*X2
          LX4    59-35
          SA1    A5+TDSDW 
          BX4    -X0*X4 
          BX6    X4+X6       INSERT DATA BASE NAME INTO THE LINE
          LX6    35-59
          SA6    A4 
          LX3    59-TDODS 
          SB6    B0          INITIALIZE STATUS = UP 
          NG     X1,FCD7     IF DATA BASE DOWN
          LX1    TDSDS-TDSIS
          PL     X1,FCD8     IF NOT IDLE
          SB6    B1          STATUS = IDLE
          EQ     FCD8        SET STATUS IN DISPLAY
  
 FCD7     SB6    B1+B1       STATUS = DOWN
          PL     X3,FCD8     IF NOT OPERATOR DOWN 
          SB6    B6+B1       STATUS = OPERATOR DOWN 
 FCD8     SA3    FCDA+B6     GET STATUS 
          BX6    X3 
          SA6    A6+B1       STORE IN DISPLAY BUFFER
          SB3    B3-1 
          SA5    A5+TDRFE    NEXT *TDRF*
          NE     B3,FCD6     IF MORE TO GO IN THIS LINE 
          SB3    3
          SB4    B4-1        DECREMENT LINE COUNT 
          NE     B4,FCD6     IF DISPLAY NOT FULL
          ZR     X5,FCD9     IF ALL DATA BASES DISPLAYED
          SA2    MORE 
          BX6    X2 
          SX7    A5 
          SA6    KDAE+1      INDICATE MORE TO BE DISPLAYED
          SA7    NPAG        SAVE FWA FOR NEXT PAGE 
          SX7    FCD5 
          SA7    PAGE        SAVE RESTART ADDRESS FOR PAGING
          SX1    KDA         ADDRESS OF K-DISPLAY CONTROL WORD
          EQ     TPA         GO TO TERMINATION PROCESSOR
  
 FCD9     SA2    BLNK        BLANK OUT UNUSED PART OF DISPLAY 
          SX7    FCD
          SA7    PAGE        ALLOW FORWARD PAGING TO ROLL BACK
          SX4    B3+
          MX0    24 
          LX4    1           CONVERT DATA BASES/LINE TO WORDS/LINE
          SX1    KDA         *K-DISPLAY* CONTROL WORD 
          SB3    X4+
          SB4    B4+1        BLANK OUT *MORE* LINE
 FCD10    EQ     B4,TPA      IF ALL LINES BLANKED 
          SB6    B3-6 
          NE     B6,FCD11    IF NOT FIRST WORD OF DISPLAY LINE
          SA4    A6+B1
          BX6    X0*X4       RETAIN *DSD* CO-ORDINATES
          BX3    -X0*X2 
          BX6    X6+X3
          SA6    A4+
          EQ     FCD12       CONTINUE WITH THE NEXT WORD
  
 FCD11    BX6    X2 
          SA6    A6+1 
 FCD12    SB3    B3-B1
          NE     B3,FCD10    IF MORE WORDS IN LINE
          SB4    B4-B1       DECREMENT LINE COUNT 
          SB3    6           WORDS PER DISPLAY LINE 
          EQ     FCD10       BLANK NEXT WORD
  
*         TABLE OF DATA BASE STATUSES.
  
 FCDA     BSS    0
          LOC    0
          DATA   10H UP 
          DATA   10H IDLE 
          DATA   10H DOWN 
          DATA   10H OP-DOWN
          LOC    *O 
 FDD      SPACE  4,30 
**        FDD - FORMAT DATA BASE DISPLAY. 
* 
*         FDD EXTRACTS RAW DATA FROM THE *TDRF*, *TARF*, *TQRF* TABLES
*         AND FORMATS A DATA BASE STATUS DISPLAY SUITABLE FOR THE 
*         OPERATOR CONSOLE OR USER TERMINAL.  IF THE DISPLAY IS TO
*         BE SENT TO A TERMINAL, DISPLAY LINES MAY ROLL OFF 
*         THE TOP OF THE SCREEN.  DUE TO THE LARGE NUMBER OF
*         TERMINAL TYPES, NO ATTEMPT IS MADE TO PREVENT THIS. 
* 
*         ENTRY  BADR = FWA OF TABLES.
* 
*         RE-ENTRY  AT *FDD4*, *FDD14*, AND *FDD15*.
*                (A5) = FWA OF NEXT *TLNT*. 
*                (X5) = FIRST WORD OF *TLNT*. 
* 
*         EXIT   TO *TPA* IF TAF ORIGIN.
*                (X1) = ADDRESS OF K-DISPLAY CONTROL WORD.
*                TO *TPB* IF TERMINAL ORIGIN. 
*                (X1) = FWA OF SEND BUFFER. 
*                (X5) = NUMBER OF WORDS TO SEND.
* 
*         USES   X - ALL. 
*                A - ALL. 
*                B - ALL. 
* 
*         CALLS  CDD, SFN.
* 
*         MACROS MOVE.
  
  
 FDD      BSS    0           ENTRY
          SX6    FDD
          SA6    FPAG        SET PROCESSOR ADDRESS
          SA6    PAGE 
          SX6    KDB         *K-DISPLAY* CONTROL WORD 
          SX7    KDBD        *K-DISPLAY* ERROR LINE 
          SA6    CWKD 
          SA7    EAKD 
          SX6    KDBE        *K-DISPLAY* INPUT LINE 
          SA6    IAKD 
          SX6    B1+         -C- FORMAT DISPLAY 
          SA6    DSTP 
          SA1    BADR+TDSDW 
          SA2    BADR+TDIDW 
          MX0    12 
          BX4    X0*X2       DATA BASE NAME 
          LX4    -12
          LX0    -12
          SA3    KDBG+2 
          BX6    -X0*X3      MASK OUT ANY PREVIOUS NAME 
          BX6    X6+X4       MERGE IN CURRENT NAME
          SA6    A3          STORE IN DATA BASE STATUS HEADING
          SB6    B0          PRESET STATUS = UP 
          NG     X1,FDD1     IF FILE DOWN 
          LX1    TDSDS-TDSIS
          PL     X1,FDD2     IF NOT IDLE
          SB6    B1+         SET STATUS = IDLE
          EQ     FDD2        STORE STATUS 
  
 FDD1     SA2    BADR+TDODW  OPERATOR DOWN INDICATOR
          SB6    B1+B1
          LX2    59-TDODS 
          PL     X2,FDD2     IF NOT OPERATOR DOWN 
          SB6    3
 FDD2     SA3    FDDE+B6     GET STATUS MESSAGE 
          LX3    6
          SX6    1R=&1R 
          LX6    54 
          BX6    X6-X3
          SA6    KDBH+2      STORE IN DATA BASE STATUS HEADING
          SA1    BADR+TDRFE+1 
          NZ     X1,FDD3     IF AFTER IMAGE RECOVERY FILE EXISTS
          SA2    BLNK 
          SA1    A1+B1       FWA OF FIRST *TLNT*
          BX6    X2 
          SA6    KDBG+5      BLANK OUT AFTER IMAGE RECOVERY FILE NAME 
          SA6    KDBH+5      AND PRU-S REMAINING
          MOVE   KDBFW,KDBF,KDBA  STORE DATA BASE STATUS HEADING
          SA5    BADR+DST1L+TLFNW  FWA OF 1ST *TLNT* FILE NAME
          EQ     FDD13       FORMAT FILE LIST 
  
 FDD3     SA1    A1+TAFFW 
          MX0    42 
          BX1    X0*X1       AFTER IMAGE RECOVERY FILE NAME 
          SA2    FDDD 
          BX6    X1+X2       PAD NAME WITH BLANKS 
          LX6    -6 
          MX0    TACPN
          SA6    KDBG+5      STORE IN DATA BASE STATUS HEADING
          SA1    BADR+TDRFE+1+TACPW 
          LX1    59-TACPS 
          BX1    X0*X1
          LX1    TACPN
          RJ     CDD         CONVERT UNUSED PRU COUNT 
          BX6    X4 
          LX6    -6 
          MX0    TQFFN
          SA6    KDBH+5      STORE IN DATA BASE STATUS HEADING
          MOVE   KDBFW,KDBF,KDBA  STORE DATA BASE STATUS HEADING
          MOVE   KDBIW,KDBI,KDBB  STORE BEFORE IMAGE FILE HEADER
          SA5    A1+TARFE-TACPW+1 
          SB4    KFNL-KDBFL-KDBIL  NUMBER OF DISPLAY LINES
          SX6    1R 
          LX6    59-5 
          SA6    KDBB+KDBIW-1 
          EQ     FDD5        DISPLAY *BRF-S*
  
*         RE-ENTRY POINT. 
* 
*         ENTRY  (A5) = ADDRESS OF THE NEXT *TLNT* TO DISPLAY.
*                (X5) = FIRST WORD OF THE NEXT *TLNT* TO DISPLAY. 
  
 FDD4     MOVE   KDBKW,KDBK,KDBA  STORE FILE AND STATUS SUB-HEADING 
          SX6    1R 
          LX6    59-5 
          SA6    KDBA+KDBKW-1 
          SB4    KFNL-KDBKL  NUMBER OF DISPLAY LINES
 FDD5     SB3    6           NUMBER OF WORDS PER DISPLAY LINE 
 FDD6     SA5    A5+TQSTW    *BRF* STATUS WORD
          SA2    A5+TQFFW-TQSTW  *BRF* FILE NAME
          MX0    TQFFN
          BX1    X0*X2
          RJ     SFN
          LX6    41-59
          SA6    A6+B1       STORE *BRF* FILE NAME
          SA3    FDDA        STATUS = UP
          PL     X5,FDD7     IF *BRF* UP
          SA3    FDDB        STATUS = DOWN
 FDD7     BX6    X3 
          SA6    A6+B1       STORE STATUS 
          SB3    B3-2        DECREMENT COUNT
          SA5    A5+TQRFE-TQSTW  NEXT *BRF* 
          ZR     X5,FDD8     IF NO MORE *BRF-S* 
          NE     B3,FDD6     IF MORE *BRF-S* THIS DISPLAY LINE
          SB4    B4-1        DECREMENT THE LINE COUNT 
          SX6    1R 
          LX6    59-5 
          SA6    A6+B1       SKIP OVER END OF LINE
          NE     B4,FDD5     IF DISPLAY NOT FULL
          SX6    FDD4        RE-ENTRY ADDRESS 
          EQ     FDD20       PROCESS NEXT PAGE
  
*         DISPLAY *AFTER IMAGE RECOVERY FILES*. 
  
 FDD8     SB4    B4-B1       DECREMENT DISPLAY LINE COUNT 
          SA2    BLNK 
          BX6    X2 
          ZR     B3,FDD10    IF DISPLAY LINE FULL 
 FDD9     SA6    A6+1        BLANK OUT REST OF LINE 
          SA6    A6+1 
          SB3    B3-2 
          NE     B3,FDD9     IF MORE TO BLANK 
 FDD10    SB5    6
          LT     B4,B5,FDD11 IF NOT ENOUGH ROOM ON CURRENT PAGE 
          SX5    A6+2        SKIP OVER END OF LINE
          MOVE   KDBJW,KDBJ,X5  MOVE FILE HEADING TO DISPLAY
          SB4    B4-KDBJL    DECREMENT LINE COUNT 
          SB5    X5+KDBJW    FWA TO STORE FILE NAMES
          SA5    BADR+DST1L+TLFNW  FWA OF FIRST *TLNT* FILE NAME
          EQ     FDD16       FORMAT FILE LIST 
  
 FDD11    ZR     B4,FDD12    IF ALL LINES PROCESSED 
          SX6    1R 
          LX6    59-5 
          SA6    A6+B1       END OF LINE
          SB3    6           RE-INITIALIZE COUNT
          EQ     FDD8        BLANK OUT NEXT LINE
  
 FDD12    SX6    FDD15       RE-ENTRY ADDRESS 
          SA5    BADR+DST1L+TLFNW  FWA OF FIRST *TLNT* FILE NAME
          EQ     FDD20       PROCESS NEXT PAGE
  
 FDD13    MOVE   KDBJW,KDBJ,KDBB  STORE DATA BASE FILE HEADER 
          SB5    KDBB+KDBJW  FWA TO STORE FILE NAMES
          SB4    KFNL-KDBFL-KDBJL  NUMBER OF DISPLAY LINES
          EQ     FDD16       DISPLAY DATA BASE FILES
  
*         RE-ENTRY POINTS.
* 
*         ENTRY  (A5) = ADDRESS OF THE NEXT *TLNT* TO DISPLAY.
*                (X5) = FIRST WORD OF THE NEXT *TLNT* TO DISPLAY. 
  
 FDD14    MOVE   KDBKW,KDBK,KDBA  STORE FILE AND STATUS SUB-HEADING 
          SB5    KDBA+KDBKW  FWA TO STORE FILE NAMES
          SB4    KFNL-KDBKL  NUMBER OF DISPLAY LINES
          EQ     FDD16       DISPLAY DATA BASE FILES
  
 FDD15    MOVE   KDBJW,KDBJ,KDBA  STORE DATA BASE FILE HEADER 
          SB5    KDBA+KDBJW  FWA TO STORE FILE NAMES
          SB4    KFNL-KDBJL  NUMBER OF DISPLAY LINES
 FDD16    MX0    TLFNN
          SB3    6           WORDS PER DISPLAY LINE 
 FDD17    BX1    X0*X5
          RJ     SFN
          LX6    41-59
          SA2    A5+TLFDW-TLFNW  STATUS WORD
          LX2    59-TLFDS 
          SB6    B0+         STATUS = UP
          NG     X2,FDD18    IF FILE DOWN 
          LX2    TLFDS-TLFIS
          PL     X2,FDD19    IF FILE NOT IDLE 
          SB6    B1          STATUS = IDLE
          EQ     FDD19       GET STATUS 
  
 FDD18    LX2    TLFDS-TLFES
          SB6    2           STATUS = DOWN
          PL     X2,FDD19    IF NOT DUE TO *CRM* ERROR
          SB6    B6+2        STATUS=*CRM* ERROR 
 FDD19    SA3    FDDE+B6     GET STATUS 
          BX7    X3 
          SA6    B5          STORE FILE NAME
          SA7    A6+1 
          SB3    B3-2 
          SB5    B5+2        ADDRESS FOR NEXT FILE NAME 
          SA5    A5+TLNTE-TLFNW  NEXT *TLNT*
          ZR     X5,FDD21    IF END 
          NE     B3,FDD17    IF MORE FILES THIS DISPLAY LINE
          SB3    6
          SB4    B4-B1       DECREMENT LINE COUNT 
          SB5    B5+B1       ADDRESS OF NEXT DISPLAY LINE 
          NE     B4,FDD17    IF DISPLAY NOT FULL
          SX6    FDD14       RE-ENTRY ADDRESS 
  
*         PROCESS NEXT PAGE.
  
 FDD20    SA6    PAGE 
          SA2    MORE 
          BX6    X2 
          SX7    A5 
          SX1    KDB         *K-DISPLAY* CONTROL WORD 
          SA6    KDBC+1      INDICATE MORE FILES
          SA7    NPAG        NEXT ADDRESS IN THE BUFFER 
          SA2    ORIG 
          ZR     X2,TPA      IF *TAF* ORIGIN
          SX1    KDBA        FWA OF SEND BUFFER 
          SX5    KDBC-KDBA+2 WORDS TO SEND TO TERMINAL
          EQ     TPB         SEND DISPLAY TO TERMINAL 
  
*         BLANK OUT UNUSED PART OF LAST PAGE. 
  
 FDD21    SA2    BLNK        BLANK OUT UNUSED PART OF DISPLAY 
          BX6    X2 
          SX7    FDD
          SA7    PAGE        ALLOW FORWARD PAGING TO ROLL BACK
          SB4    B4+1        BLANK OUT *MORE* LINE
          SX5    B5-KDBA+1   WORDS TO SEND
 FDD22    NE     B3,FDD23    IF NOT END OF DISPLAY LINE 
          SB3    6
          SB5    B5+1        SKIP OVER END OF LINE
          SB4    B4-1        DECREMENT THE LINE COUNT 
 FDD23    LE     B4,FDD24    IF ALL LINES PROCESSED 
          SA6    B5+
          SB5    B5+B1
          SB3    B3-B1
          EQ     FDD22       BLANK NEXT WORD
  
 FDD24    SX1    KDB
          SA2    ORIG 
          ZR     X2,TPA      IF *TAF* ORIGIN
          SX1    KDBA        FWA OF SEND BUFFER 
          EQ     TPB         SEND DISPLAY TO TERMINAL 
  
  
 FDDA     DATA   10H   UP       *BRF* STATUS *UP* 
 FDDB     DATA   10H   DOWN     *BRF* STATUS DOWN 
 FDDC     CON    0           DISPLAY ADDRESS FOR FILE NAMES 
 FDDD     VFD    42/0,18/3L 
  
*         TABLE OF DATA BASE FILE STATUSES. 
  
 FDDE     BSS    0
          LOC    0
          DATA   10H   UP       FILE UP 
          DATA   10H   IDLE     FILE IDLE 
          DATA   10H   DOWN     FILE DOWN FOR BATCH RECOVERY
          DATA   10H   O-DOWN   FILE DOWNED BY OPERATOR COMMAND 
          DATA   10H   E-DOWN   FILE DOWN DUE TO *CRM* ERROR
          LOC    *O 
 FFD      SPACE  4,25 
**        FFD - FORMAT FILE DISPLAY.
* 
*         FFD EXTRACTS RAW DATA FROM THE *TLNT* AND COUNT OF USERS AND
*         LOCKS ON THE FILE, AND FORMATS A DISPLAY SUITABLE FOR THE 
*         OPERATOR CONSOLE OR USER TERMINAL.
* 
*         ENTRY  BADR = FWA OF *TLNT*.
* 
*         EXIT   TO *TPA* IF TAF ORIGIN.
*                (X1) = ADDRESS OF K-DISPLAY CONTROL WORD.
*                TO *TPB* IF TERMINAL ORIGIN. 
*                (X1) = FWA OF *SEND* BUFFER. 
*                (X5) = NUMBER OF WORDS TO SEND.
* 
*         USES   X - 0, 1, 2, 4, 5, 6, 7. 
*                A - 1, 2, 5, 6, 7. 
*                B - 6, 7.
* 
*         CALLS  CDD, DXB, SFN. 
* 
*         MACROS MOVE.
  
  
 FFD      BSS    0           ENTRY
          SX6    FFD
          SA6    FPAG        SET PROCESSOR ADDRESS
          SA6    PAGE 
          SX6    KDC         *K-DISPLAY* CONTROL WORD 
          SX7    KDCM        *K-DISPLAY* ERROR LINE 
          SA6    CWKD 
          SA7    EAKD 
          SX6    KDCN        *K-DISPLAY* INPUT LINE 
          SA6    IAKD 
          SX6    B1          -C- FORMAT DISPLAY 
          MX0    42 
          SA6    DSTP 
          SA1    BADR+TLFNW 
          BX1    X0*X1       FILE NAME
          SB6    B0          PRESET STATUS = UP 
          RJ     SFN         SPACE FILL NAME
          LX6    -6 
          SA6    KDCB+3      STORE IN DISPLAY BUFFER
          SA1    BADR+TLFDW  FILE STATUS
          NG     X1,FFD1     IF FILE DOWN 
          LX1    TLFDS-TLFIS
          PL     X1,FFD2     IF FILE NOT IDLE 
          SB6    B1+         SET STATUS IDLE
          EQ     FFD2        GET STATUS MESSAGE 
  
 FFD1     LX1    TLFDS-TLFES
          SB6    B1+B1       SET STATUS = DOWN
          PL     X1,FFD2     IF NOT DUE TO *CRM* ERROR
          SB6    3           SET STATUS = *CRM* ERROR*
 FFD2     SA2    FFDA+B6     GET STATUS 
          BX6    X2 
          SA6    KDCD+3      STORE IN DISPLAY BUFFER
          SA1    BADR+TLNTE+1  COUNT OF ACTIVE FILE USERS 
          RJ     CDD         CONVERT TO DECIMAL DISPLAY 
          LX4    -18
          MX0    -54
          SA5    FFDB 
          BX4    -X0*X4 
          BX6    X4+X5
          SA6    KDCK+3      STORE IN DISPLAY BUFFER
          SA1    A1+1        COUNT OF LOCKS 
          RJ     CDD         CONVERT TO DECIMAL DISPLAY 
          LX4    -18
          BX4    -X0*X4 
          BX6    X4+X5
          SA6    KDCL+3      STORE IN DISPLAY BUFFER
          SA1    BADR+TLRFW  RECOVERABILITY FLAG
          SB6    B0+
          LX1    59-TLRFS 
          MX0    TLPNN
          NG     X1,FFD4     IF FILE RECOVERABLE
          SB6    B1+
 FFD4     SA2    FFDC+B6
          SA1    BADR+TLPNW  PACK NAME
          BX6    X2 
          SA6    KDCE+3      RECOVERABILITY TO DISPLAY BUFFER 
          BX1    X0*X1
          RJ     SFN         SPACE FILL EVEN IF PACK NAME ABSENT
          LX6    -6 
          SA6    KDCF+3      PACK NAME TO DISPLAY BUFFER
          MX0    TLDVN
          SA1    BADR+TLDVW  DEVICE TYPE
          LX1    59-TLDVS 
          BX6    X0*X1
          NZ     X6,FFD5     IF DEVICE TYPE PRESENT 
          SA1    FFDD 
          BX6    X1 
          SA6    KDCG+3      STORE DEFAULT IN DISPLAY 
          EQ     FFD6        PROCESS ATTACH MODE
  
 FFD5     LX6    -6 
          SA5    BADR+TLUNW  NUMBER OF UNITS ON DEVICE
          SA6    KDCG+3      SAVE DEVICE TYPE IN DISPLAY BUFFER 
          LX5    59-TLUNS 
          MX0    TLUNN
          BX5    X0*X5
          SB7    -B1
          RJ     DXB
          MX0    24 
          BX6    X0*X6
          SA2    KDCG+3      PICK DEVICE TYPE 
          LX6    24 
          BX6    X2+X6       DEVICE TYPE AND NO. OF UNITS 
          SA6    A2+
 FFD6     SB6    4
          SA2    FFDK 
          MX0    -3 
          LX2    3
          SA1    BADR+TLMDW  PICK ATTACH MODE CODE
          MX6    TLMDN
          LX1    59-TLMDS 
          BX1    X6*X1
          LX1    TLMDN
 FFD7     BX5    -X0*X2 
          BX6    X5-X1
          ZR     X6,FFD8     IF ATTACH MODE CODE FOUND
          SB6    B6-B1
          LX2    15 
          NZ     B6,FFD7     IF NOT ALL CODES EXAMINED
          SA2    FFDM        PUT BLANKS FOR ATTACH MODE MNEMONICS 
 FFD8     MX7    12 
          BX1    X7*X2       ISOLATE MNEMONIC ATTACH MODE 
          RJ     SFN         PAD WITH BLANKS
          LX6    -6 
          SA6    KDCH+3      STORE ATTACH MODE MNEMONIC 
          MX0    TLKLN
          SA1    BADR+TLKLW  SIZE OF PRIMARY KEY
          LX1    59-TLKLS 
          BX1    X0*X1
          LX1    TLKLN       RIGHT JUSTIFY THE NUMBER 
          RJ     CDD         CONVERT TO DECIMAL 
          BX6    X4 
          LX6    35-59
          SA6    KDCI+4      STORE IN DISPLAY BUFFER
          MX0    TLNAN
          SA1    BADR+TLNAW  NUMBER OF ALTERNATE KEYS 
          LX1    59-TLNAS 
          BX1    X0*X1
          LX1    TLNAN
          RJ     CDD         CONVERT TO DISPLAY 
          MX0    -36
          SA2    FFDE 
          BX6    X4 
          LX6    35-59
          BX6    -X0*X6 
          BX7    X2+X6
          SA7    KDCJ+4      STORE IN DISPLAY BUFFER
          SX1    KDC         K-DISPLAY CONTROL WORD 
          SA2    ORIG 
          ZR     X2,TPA      IF TAF ORIGIN
          SX1    KDCA        FWA OF SEND BUFFER 
          SX5    KDC1L       WORDS TO SEND
          EQ     TPB         SEND DISPLAY TO TERMINAL 
  
  
*         TABLE OF FILE STATUSES. 
  
 FFDA     BSS    0
          LOC    0
          DATA   10H UP 
          DATA   10H IDLE 
          DATA   10H DOWN 
          DATA   10H E-DOWN 
          LOC    *O 
  
 FFDB     DATA   1L=
 FFDC     DATA   10H YES
          DATA   10H NO 
 FFDD     DATA   10H DEFAULT
 FFDE     DATA   4LS =
 FFDK     VFD    3/PTRD,12/2LR ,3/PTWR,12/2LW ,3/PTMD,12/2LM
          VFD    3/PTRM,12/2LRM 
 FFDL     DATA   7LKEYS = 
 FFDM     DATA   10H
 IBR      SPACE  4,15 
**        IBR - INCORRECT *BTRAN* REQUEST.
* 
*         THIS SUBROUTINE JOURNALS AN INCORRECT *SIC* REQUEST 
*         IN *JOUR0* AND TERMINATES THE TASK. 
* 
*         ENTRY  (X3) = ERROR CODE. 
*                COMMUNICATION BLOCK CONTAINS INCORRECT REQUEST.
* 
*         USES   X - 0, 1, 3, 6.
*                A - 1, 6.
*                B - 2, 3.
* 
*         MACROS CEASE, JOURNL. 
  
  
 IBR      BSS    0           ENTRY
          SB2    3
          LX3    2
          MX0    -12
          SA1    IBRA+X3     ERROR MESSAGE ADDRESS
          SB3    TMSW 
 IBR1     SA3    A1+B2       MOVE MESSAGE TO JOURNAL BUFFER 
          BX6    X3 
          SA6    IBRB+B2
          SB2    B2-1 
          PL     B2,IBR1     IF NOT ENTIRE MESSAGE MOVED
          SA1    TNAM 
          BX1    -X0*X1 
          SX6    IBRB 
          SX0    X1-5 
          NG     X0,IBR2     IF COMMUNICATION BLOCK 4 WORDS OR LESS 
          SX1    4
 IBR2     SB2    X1 
          SX1    X1+4        FORM PARAMETER WORD FOR JOURNAL CALL 
          LX1    18 
          BX6    X1+X6
          SB2    B2-B1
          SA6    PADR 
 IBR3     SA1    B3+B2       COPY COMMUNICATION BLOCK 
          BX6    X1 
          SA6    IBRC+B2
          SB2    B2-1 
          PL     B2,IBR3     IF MORE WORDS IN THE COMMUNICATION BLOCK 
          JOURNL PADR 
          CEASE              END TASK 
  
 IBRA     BSS    0
          DATA   40HCRMTASK- INCORRECT REQUEST. 
          DATA   40HCRMTASK- DATA BASE/FILE NAME UNKNOWN. 
          DATA   40HCRMTASK- INCORRECT TT SEQUENCE NUMBER.
          DATA   40HCRMTASK- DATA BASE DOWNED BY OPERATOR.
          DATA   40HCRMTASK- NOT ALL DATA BASE FILES UPPED. 
          DATA   40HCRMTASK- DATA BASE/FILE CANNOT BE UPPED.
          DATA   40HCRMTASK- DATA BASE/FILE BEING IDLED.
          DATA   40HCRMTASK- INCORRECT REQUEST FORMAT.
  
 IBRB     BSS    4           ERROR MESSAGE AREA 
 IBRC     BSSZ   4
  
 IBRE     BSS    0           ERROR CODES
          LOC    0
 IER0     BSS    1           INCORRECT REQUEST
 IER1     BSS    1           DATA BASE/FILE UNKNOWN 
 IER2     BSS    1           INCORRECT TT SEQUENCE
 IER3     BSS    1           DATA BASE/FILE DOWNED BY OPERATOR
 IER4     BSS    1           NOT ALL FILES UPPED
 IER5     BSS    1           DATA BASE/FILE CANNOT BE UPPED 
 IER6     BSS    1           IDLE DATA BASE/FILE
 IER7     BSS    1           REQUEST FORMAT ERROR 
          LOC    *O 
          ORG    IBRE 
 ITU      SPACE  4,20 
**        ITU - INSERT TERMINATOR AND UNPACK MESSAGE. 
* 
*         THIS SUBROUTINE DETERMINES WHERE THE TERMINAL MESSAGE 
*         ENDS AND INSERTS A TERMINATOR THEN UNPACKS THE MESSAGE
*         TO RA+2.
* 
*         ENTRY  DATA IN MESSAGE AREA.
* 
*         EXIT   TERMINATOR IS INSERTED IN MESSAGE AND IT IS
*                UNPACKED TO RA+2.
* 
*         ERROR  TO *TTE* IF UNPACK ERRORS. 
* 
*         USES   X - 0, 1, 2, 5, 6, 7.
*                A - 1, 2, 5, 7.
*                B - 1, 2, 3, 7.
* 
*         CALLS  UPC. 
  
 ITU      SUBR                ENTRY/EXIT
          SA2    CBSYW
          MX0    -12
          BX2    -X0*X2      NUMBER OF WORDS IN MESSAGE 
          SB2    X2+TMSW-2   LWA OF MESSAGE 
          MX0     -6
          SA1    B2+B1       LWA OF MESSAGE 
          SA2    A1-B1
          SX6    1R.
          BX7    -X0*X2 
          NZ     X1,ITU1     IF LAST WORD CONTAINS NON ZERO CHARACTERS
          NZ     X7,ITU1     IF NEXT TO LAST WORD IS FULL 
          BX7    X2+X6
          SA7    A2 
          EQ     ITU3        UNPACK 
  
 ITU1     SB2    B2+B1
          SB3    CMBK+CMBL-1 LWA OF COMMUNICATION BLOCK 
          SA1    B2          CURRENT WORD TO CHECK
          GE     B2,B3,ITU3  IF MESSAGE EXCEEDED LIMIT
          SB3    60 
 ITU2     LX1    6
          BX2    -X0*X1 
          SB3    B3-6 
          NG     B3,ITU1     IF END OF WORD 
          NZ     X2,ITU2     IF NOT END OF MESSAGE
          BX1    X1+X6       INSERT TERMINATOR
          LX7    X1,B3
          SA7    A1+
 ITU3     SA5    TMSW        FWA OF MESSAGE 
          SB7    2
          RJ     UPC         UNPACK TERMINAL COMMAND
          SB2    ER5         *INCORRECT COMMAND*
          NZ     X6,TTE      IF UNPACK ERRORS 
          EQ     ITUX        RETURN 
 SEM      SPACE  4,20 
**        SEM - SET ERROR MESSAGE.
* 
*         SEM SETS AN ERROR MESSAGE ON THE *K-DISPLAY*. 
* 
*         ENTRY  (B2) = INDEX INTO TABLE MESSAGE ADDRESSES. 
*                (DSTP) = *K-DISPLAY* FORMAT FLAG.
*                (EAKD) = *K-DISPLAY* ERROR LINE. 
*                (CWKD) = ADDRESS OF *K-DISPLAY* CONTROL WORD.
* 
*         EXIT   (X1) = ADDRESS OF *K-DISPLAY* CONTROL WORD.
* 
*         USES   X - 1, 2, 3. 
*                A - 1, 3.
*                B - 5. 
* 
*         MACROS MOVE.
  
  
 SEM      SUBR               ENTRY/EXIT 
          SB5    ERK
          SA1    DSTP 
          ZR     X1,SEM1     IF FORMATTED *K-DISPLAY* 
          SB5    ERT
 SEM1     SA1    B5+B2       GET ERROR MESSAGE
          SX2    X1          MESSAGE ADDRESS
          SA3    EAKD        *K-DISPLAY* ERROR LINE 
          AX1    18          MESSAGE LENGTH 
          MOVE   X1,X2,X3    MOVE MESSAGE TO DISPLAY
          SA1    CWKD        ADDRESS OF *K-DISPLAY* CONTROL WORD
          EQ     SEMX        RETURN 
 TPR      SPACE  4,10 
***       TERMINATION PROCESSING ROUTINES.
 TPA      SPACE  4,15 
**        TPA - TERMINATION PROCESSOR FOR *K-DISPLAY* COMMAND.
* 
*         ENTRY  (X1) = *K-DISPLAY* CONTROL WORD. 
* 
*         EXIT   TO *CVL*, IF NEW COMMAND ENTERED.
*                (B3) = FWA OF VALID COMMAND TABLE. 
*                TO *CRS*, IF REFRESHING *CRMSTAT* DISPLAY. 
*                (TMSW+1) = PARAMETER OF LAST *CRMSTAT* COMMAND.
* 
*         USES   X - 1, 2, 3, 4, 6. 
*                A - 1, 2, 4, 6.
*                B - 3. 
* 
*         MACROS SYSTEM.
  
  
 TPA      BSS    0           ENTRY
          BX6    X1 
          SA6    TPAA        SAVE THE DISPLAY BUFFER ADDRESS
          SA4    IAKD 
          MOVE   5,TDUA,X4   ECHO *DSD* INPUT TO *K-DISPLAY*
          SX6    B0          CLEAR MESSAGE AREA 
          SA6    TMSW 
          SA6    A6+B1
          SA1    TPAA        RESTORE THE DISPLAY BUFFER ADDRESS 
 TPA1     SYSTEM CTI,,X1,8   TAF FUNCTION - SET *K-DISPLAY* 
          SA1    TMSW 
          ZR     X1,TPA3     IF NO NEW COMMAND
          SX2    1R+
          SX3    1R-
          BX6    X1 
          IX2    X2-X1
          IX3    X3-X1
          LX6    54 
          SB3    CVLB 
          ZR     X2,TPA2     IF *+* 
          ZR     X3,TPA2     IF *-* 
          EQ     CVL         SEARCH FOR THE PROCESSOR 
  
 TPA2     SA6    TMSW 
          EQ     CVL         VALIDATE NEXT COMMAND
  
 TPA3     SA2    RFRS 
          SA1    TPAA 
          ZR     X2,TPA1     IF LAST COMMAND NOT *CRMSTAT*
          SA2    A2+B1       PICK PARAMETER OF LAST *CRMSTAT* 
          BX6    X2 
          SA6    TMSW+1 
          EQ     CRS         RE-ISSUE *CRMSTAT* REQUEST 
  
 TPAA     BSS    1           SAVE AREA FOR DISPLAY BUFFER ADDRESS 
 TPB      SPACE  4,20 
**        TPB - TERMINATION PROCESSOR FOR TERMINAL DISPLAY. 
* 
*         ENTRY  (X1) = FWA OF SEND BUFFER. 
*                (X5) = NUMBER WORDS TO SEND. 
* 
*         EXIT   TO *CVL*.
*                (B3) = FWA OF VALID COMMAND TABLE. 
* 
*         ERROR  TO *TTE*.
*                (B2) = ERROR CODE. 
* 
*         USES   X - ALL. 
*                A - 1, 5, 6. 
*                B - 2, 3, 5, 6, 7. 
* 
*         CALLS  ITU. 
* 
*         MACROS SEND, WAITINP. 
  
  
 TPB      BSS    0           ENTRY
          SX3    MAXWS       MAXIMUM WORDS + 1 FOR A *SEND* REQUEST 
          SX4    X3-1 
          IX5    X5-X3
          BX6    X1 
          LX6    30 
          MX0    1
          SA6    PADR        STORE MESSAGE ADDRESS
          NG     X5,TPB2     IF LESS THAN MAXIMUM WORDS TO SEND 
          LX0    -2          FLAG NOT LAST BLOCK
          BX6    X0+X6
          BX6    X6+X4
          MX0    18 
          LX0    -12
          SA6    A6+
          LX4    30 
 TPB1     SEND   PADR        SEND DATA TO TERMINAL
          SA1    PADR 
          BX2    -X0*X1 
          BX1    X0*X1
          IX1    X1+X4       INCREMENT MESSAGE ADDRESS
          BX6    X2+X1
          SA6    A1 
          IX5    X5-X3
          PL     X5,TPB1     IF STILL .GT. MAXIMUM FOR SEND 
 TPB2     IX5    X5+X3       WORDS TO SEND
          ZR     X5,TPB2.1   IF WORD COUNT IS ZERO
          MX0    18 
          LX0    -12
          BX6    X0*X6
          BX6    X6+X5
          SA6    A6 
          SEND   PADR        SEND FINAL BLOCK 
 TPB2.1   SA1    MADB 
          BX6    X1 
          SA6    PADR 
          SEND   PADR        SEND MESSAGE 
          SX6    B0          CLEAR MESSAGE AREA 
          SA6    TMSW 
          SA6    A6+B1
          SX6    300
          SA6    TPBB 
          WAITINP  TPBB      WAIT FOR NEXT COMMAND
          SA1    TMSW 
          SX1    X1-1 
          NZ     X1,TPB3     IF NOT TIMEOUT 
          SB2    ER8         *CRMTASK TIMEOUT.* 
          EQ     TTE         TERMINATE TASK IN ERROR
  
 TPB3     RJ     ITU         INSERT TERMINATOR AND UNPACK 
          SA1    B1+
          SB5    TMSW 
 TPB4     SA1    A1+1        NEXT WORD
          BX6    X1 
          SA6    B5 
          SB5    B5+1 
          SB6    B6-1 
          NE     B6,TPB4     IF MORE WORDS TO MOVE
          SB3    CVLB        FWA OF TABLE OF VALID COMMANDS 
          SA1    TMSW 
          SX2    1R+
          SX3    1R-
          BX6    X1 
          IX2    X2-X1
          IX3    X3-X1
          LX6    59-5 
          ZR     X2,TPB5     IF *+* 
          ZR     X3,TPB5     IF *-* 
          EQ     CVL         VALIDATE COMMAND 
  
 TPB5     SA6    TMSW 
          EQ     CVL         VALIDATE COMMAND 
  
 TPBB     CON    0           WAIT TIME IN SECONDS 
 TPD      SPACE  4,10 
**        TPD - TERMINATION PROCESSOR TASK CEASE. 
* 
*         ENTRY  (ORIG) = ORIGIN CODE.
* 
*         USES   X - 1, 6.
*                A - 1, 6.
* 
*         MACROS CEASE, SEND. 
  
  
 TPD      BSS    0           ENTRY
          SA1    ORIG 
          SX1    X1-1 
          NZ     X1,TPD1     IF NOT TERMINAL ORIGIN 
          SA1    MADA 
          BX6    X1 
          SA6    PADR 
          SEND   PADR        ISSUE TERMINATION MESSAGE
 TPD1     CEASE              END TASK 
 TTE      SPACE  4,10 
**        TTE - TERMINATE TERMINAL IN ERROR.
* 
*         ENTRY  (B2) = ERROR CODE. 
* 
*         USES   X - 1, 2, 6. 
*                A - 1, 6.
* 
*         MACROS CEASE, SEND. 
  
  
 TTE      BSS    0           ENTRY
          SA1    ERT+B2 
          SX2    X1          FWA OF THE MESSAGE 
          AX1    18          MESSAGE LENGTH 
          LX2    30 
          BX6    X2+X1
          SA6    PADR 
          SEND   PADR        SEND ERROR MESSAGE 
          SA1    MADA 
          BX6    X1 
          SA6    PADR 
          SEND   PADR        SEND TERMINATION MESSAGE 
          CEASE              TERMINATE TASK 
 ERK      SPACE  4,10 
*         TABLE OF MESSAGE CODES FOR BOTH TERMINAL AND *K-DISPLAY*. 
  
ERC       BSS    0
          LOC    0
 ER0      BSS    1           *DATA BASE/FILE NAME UNKNOWN.* 
 ER1      BSS    1           *NOT ALL DATA BASE FILES UPPED.* 
 ER2      BSS    1           *DATA BASE/FILE CANNOT BE UPPED.*
 ER3      BSS    1           *DATA BASE/FILE ALREADY DOWN OR IDLE.* 
 ER4      BSS    1           *INSUFFICIENT FL FOR THIS COMMAND.*
 ER5      BSS    1           *INCORRECT COMMAND.* 
 ER7      BSS    1           *REQUEST COMPLETE.*
 ER8      BSS    1           *CRMTASK TIMEOUT.* (TERMINAL ONLY) 
          LOC    *O 
          ORG    ERC         RESET ORIGIN COUNTER 
  
*         ERROR MESSAGES FOR *K-DISPLAY*. 
  
 ERKA     KDL    7,M,(DATA BASE/FILE NAME UNKNOWN.) 
 ERKAL    EQU    *-ERKA 
 ERKB     KDL    7,M,(NOT ALL DATA BASE FILES UPPED.) 
 ERKBL    EQU    *-ERKB 
 ERKC     KDL    7,M,(DATA BASE/FILE CANNOT BE UPPED.)
 ERKCL    EQU    *-ERKC 
 ERKD     KDL    7,M,(DATA BASE/FILE ALREADY DOWN OR IDLE.) 
 ERKDL    EQU    *-ERKD 
 ERKE     KDL    7,M,(INSUFFICIENT FIELD LENGTH FOR THIS COMMAND.)
 ERKEL    EQU    *-ERKE 
 ERKF     KDL    7,M,(INCORRECT COMMAND.) 
 ERKFL    EQU    *-ERKF 
 ERKH     KDL    7,M,(REQUEST COMPLETE.)
 ERKHL    EQU    *-ERKH 
  
*         TABLE OF ERROR MESSAGE ADDRESSES AND LENGTHS. 
  
 ERK      BSS    0
          LOC    0
          VFD    24/0,18/ERKAL,18/ERKA
          VFD    24/0,18/ERKBL,18/ERKB
          VFD    24/0,18/ERKCL,18/ERKC
          VFD    24/0,18/ERKDL,18/ERKD
          VFD    24/0,18/ERKEL,18/ERKE
          VFD    24/0,18/ERKFL,18/ERKF
          VFD    24/0,18/ERKHL,18/ERKH
          LOC    *O 
 ERT      SPACE  4,10 
*         ERROR MESSAGES FOR TERMINAL.
  
 ERTA     DATA   50CDATA BASE/FILE NAME UNKNOWN.
 ERTAL    EQU    *-ERTA 
 ERTB     DATA   50CNOT ALL DATA BASE FILES UPPED.
 ERTBL    EQU    *-ERTB 
 ERTC     DATA   50CDATA BASE/FILE CANNOT BE UPPED. 
 ERTCL    EQU    *-ERTC 
 ERTD     DATA   50CDATA BASE/FILE ALREADY DOWN OR IDLE.
 ERTDL    EQU    *-ERTD 
 ERTE     DATA   50CINSUFFICIENT FIELD LENGTH FOR THIS COMMAND. 
 ERTEL    EQU    *-ERTE 
 ERTF     DATA   50CINCORRECT COMMAND.
 ERTFL    EQU    *-ERTF 
 ERTH     DATA   50CREQUEST COMPLETE. 
 ERTHL    EQU    *-ERTH 
 ERTI     DATA   50CCRMTASK TIMEOUT.
 ERTIL    EQU    *-ERTI 
  
*         TABLE OF ERROR MESSAGE ADDRESSES AND LENGTHS. 
  
 ERT      BSS    0
          LOC    0
          VFD    24/0,18/ERTAL,18/ERTA
          VFD    24/0,18/ERTBL,18/ERTB
          VFD    24/0,18/ERTCL,18/ERTC
          VFD    24/0,18/ERTDL,18/ERTD
          VFD    24/0,18/ERTEL,18/ERTE
          VFD    24/0,18/ERTFL,18/ERTF
          VFD    24/0,18/ERTHL,18/ERTH
          VFD    24/0,18/ERTIL,18/ERTI
          LOC    *O 
          SPACE  4
 MSGA     DATA   1L 
          DATA   C*CRMTASK COMPLETE.* 
 MSGAL    EQU    *-MSGA 
 MSGB     DATA   1L 
          DATA   C*ENTER NEXT COMMAND...* 
 MSGBL    EQU    *-MSGB 
  
  
 MADA     VFD    30/MSGA,30/MSGAL 
 MADB     VFD    30/MSGB,30/MSGBL 
 KDA      SPACE  4,10 
*         CRMSTAT K-DISPLAY.
  
 KDA      VFD    10/0,1/0,1/0,6/0,18/0,24/2  FORMAT CONTROL WORD
          KDL    28,T,(CRM STATUS)
          KDL    16,,(TRANSACTIONS IN INPUT QUEUE =  )
 KDAA     KDL    47,K,(      )
          KDL    16,,(ACTIVE TRANSACTIONS =)
 KDAB     KDL    37,K,(                )
          KDL    16,,(TRANSACTIONS IN OUTPUT QUEUE = )
 KDAC     KDL    47,H,(      )
          KDL    6,K,(DATA                DATA                DATA) 
          KDL    6,H,(BASE   STATUS       BASE   STATUS       BASE   STA
,TUS) 
 KDAD     BSS    0           START OF VARIABLE DISPLAY
          DUP    KFNL-10,1   ASSIGN SPACE FOR DATA BASE NAMES/STATUSES
          KDL    7,K,(
,      )
 KDAE     KDL    5,K,(
,      )                     *MORE* LINE
 KDAF     KDL    7,M,(
,      )                     MESSAGE LINE 
 KDAG     KDL    1,I,(
,       )                    KEYBOARD INPUT LINE
          CON    0           END OF DISPLAY 
 KDB      SPACE  4,10 
*         DATA BASE STATUS DISPLAY. 
  
 KDB      BSS    0                 ZERO BYTE FORMAT 
          VFD    10/0,1/0,1/1,1/1,5/0,18/0,24/2  FORMAT CONTROL WORD
 KDBA     BSS    0
          DUP    5,1
          DATA   60C
, 
 KDBB     BSS    0
          DUP    15,1 
          DATA   60C
, 
 KDBC     DATA   60C
,                            *MORE* LINE
 KDBD     DATA   50C
,                            END OF MESSAGE LINE
 KDBE     DATA   50C
,                            END OF KEYBOARD INPUT LINE 
          CON    0
  
*         DATA BASE STATUS HEADING. 
  
 KDBF     DATA   60C
, 
          DATA   60C   ---------------- CRM DATA BASE STATUS -----------
,-----
          DATA   60C
, 
 KDBG     DATA   60C   DATA BASE NAME =             AFTER IMAGE FILE =
, 
 KDBH     DATA   60C   DATA BASE STATUS =           PRU-S REMAINING = 
, 
 KDBFW    EQU    *-KDBF      NUMBER OF WORDS
 KDBFL    EQU    KDBFW/7     NUMBER OF LINES
          ERRNZ  KDBFL*7-KDBFW  ASSUMES 7 WORDS PER DISPLAY LINE
  
*         BEFORE IMAGE FILE HEADER. 
  
 KDBI     DATA   60C
, 
          DATA   60C    ------------- BEFORE IMAGE FILES STATUS --------
,------ 
          DATA   60C    FILE    STATUS      FILE    STATUS      FILE
,STATUS 
          DATA   60C
, 
 KDBIW    EQU    *-KDBI      NUMBER OF WORDS
 KDBIL    EQU    KDBIW/7     NUMBER OF LINES
          ERRNZ  KDBIL*7-KDBIW  ASSUMES 7 WORDS PER DISPLAY LINE
  
*         DATA BASE FILE HEADER.
  
 KDBJ     DATA   60C
, 
          DATA   60C    --------------- DATA BASE FILES STATUS ---------
,------ 
          DATA   60C    FILE    STATUS      FILE    STATUS      FILE
,STATUS 
          DATA   60C
, 
 KDBJW    EQU    *-KDBJ      NUMBER OF WORDS
 KDBJL    EQU    KDBJW/7     NUMBER OF LINES
          ERRNZ  KDBJL*7-KDBJW  ASSUMES 7 WORDS PER DISPLAY LINE
  
*         FILE AND STATUS SUB-HEADING.
  
 KDBK     DATA   60C
, 
          DATA   60C    FILE    STATUS      FILE    STATUS      FILE
,STATUS 
          DATA   60C
, 
 KDBKW    EQU    *-KDBK      NUMBER OF WORDS
 KDBKL    EQU    KDBKW/7     NUMBER OF LINES
          ERRNZ  KDBKL*7-KDBKW  ASSUMES 7 WORDS PER DISPLAY LINE
 KDC      SPACE  4,10 
*         FILE STATUS DISPLAY.
  
 KDC      BSS    0           ZERO BYTE FORMAT 
          VFD    10/0,1/0,1/1,1/1,5/0,18/0,24/2  FORMAT CONTROL WORD
 KDCA     DATA   1L 
          DATA   C*                        CRM FILE STATUS *
          DATA   1L 
 KDCB     DATA   C*                 FILE NAME =            *
 KDCD     DATA   C*                 FILE STATUS =          *
 KDCE     DATA   C*                 RECOVERABLE =          *
          DATA   1L 
 KDCF     DATA   C*                 PACK NAME =            *
 KDCG     DATA   C*                 DEVICE TYPE =          *
 KDCH     DATA   C*                 ATTACH MODE =          *
          DATA   1L 
 KDCI     DATA   C*                 SIZE OF PRIMARY KEY =            *
 KDCJ     DATA   C*                 NUMBER OF ALTERNATE KEYS =       *
          DATA   1L 
 KDCK     DATA   C*                 ACTIVE USERS =         *
 KDCL     DATA   C*                 ACTIVE LOCKS =         *
 KDC1L    EQU    KDCL+3-KDCA
          DUP    5,1
          DATA   1L 
 KDCM     DATA   50C
,                            END OF MESSAGE LINE
 KDCN     DATA   C* 
,      *                     END OF KEYBOARD INPUT LINE 
          CON    0           END OF DISPLAY 
          SPACE  4,10 
**        MENU DISPLAY. 
  
 KDE      BSS    0
          VFD    10/0,1/0,1/0,6/0,18/0,24/2 
          KDL    25,T,(CRMTASK COMMANDS)
          KDL    8,K,(CRMSTAT            SEE ALL CRM DATA BASES.) 
          KDL    8,K,(CRMSTAT,DB         SEE CRM DATA BASE DB.) 
          KDL    8,H,(CRMSTAT,DBPFN      SEE CRM DATA BASE FILE DBPFN.) 
          KDL    8,K,(DBDOWN,DB          DOWN DATA BASE DB.)
          KDL    8,K,(DBDOWN,DBPFN       DOWN DATA BASE FILE DBPFN.)
          KDL    8,K,(DBUP,DB            UP DATA BASE DB.)
          KDL    8,H,(DBUP,DBPFN         UP DATA BASE FILE DBPFN.)
          KDL    8,K,(END                END CRMTASK PROCESSING.) 
          KDL    8,K,(MENU               SEE THIS DISPLAY.) 
          KDL    8,K,(+                  PAGE LEFT SCREEN FORWARD.) 
          KDL    8,K,(-                  PAGE LEFT SCREEN BACKWARD.)
 KDEA     KDL    7,M,(
,      )                     MESSAGE LINE 
 KDEB     KDL    1,I,(
,      )                     KEYBOARD INPUT LINE
          CON    0           END OF DISPLAY 
          SPACE  4,10 
  
*         BLANK LINES FOR *K-DISPLAY*.
  
 KBLC     DATA   50H
 KBLCL    EQU    *-KBLC 
 KBLF     KDL    7,M,(
,      )
 KBLFL    EQU    *-KBLF 
          SPACE  4,10 
*         Y-COORDINATE TABLE. 
  
 KBLG     KDL    *
 PRK      HERE               REMOTE BLOCK FROM *COMCDCP*
  
          SPACE  4,10 
***       COMMON DECKS. 
  
*CALL     COMCCDD 
*CALL     COMCDCP 
*CALL,COMCDXB 
*CALL     COMCMVE 
*CALL     COMCSFN 
*CALL     COMCSNM 
*CALL     COMCSYS 
*CALL     COMCUPC 
*CALL,COMSPFM 
 BUF      EJECT 
*         DEFINE BUFFER SIZES FOR *AAMI* REQUESTS.
  
 CST1L    EQU    CMDM*RMDM*TSEQE+TSEQE+1+2*AAMQFL+AIBFL+AOBFL+1 
 CST2L    EQU    CMAXDB*TDRFE+1 
 DST1L    EQU    TDRFE+1+TARFE+1+BMAX*TQRFE+1 
 DST2L    EQU    CMAXNF*TLNTE+1 
 FSTBL    EQU    TLNTE+1+2+1
  
*         DETERMINE MAXIMUM REQUIRED BUFFER SIZE. 
  
 .1       MAX    CST1L,DST1L,FSTBL
 .2       MAX    CST2L,DST2L
 BUFSIZE  EQU    .1+.2
  
*         ALLOCATE BUFFER.
  
 BADR     BSSZ   BUFSIZE+10B
          SPACE  4,10 
          END    CRMTASK
