COMCDCP 
COMMON
          CTEXT  COMCDCP - CPU DISPLAY CONSOLE PROCESSORS.
          SPACE  4,10 
          BASE   D
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 DCP      SPACE  4,10 
***       COMCDCP - CPU DISPLAY CONSOLE PROCESSORS. 
* 
*         J. T. LITTLE.      84/02/23.
          SPACE  4,10 
***       *COMCDCP* CONTAINS SUBROUTINES USED BY *K* AND *L* DISPLAY
*         UTILITIES.  SUBROUTINES *PGD* AND *PRK* ARE CONTAINED IN
*         LABELED REMOTE BLOCKS.  A *HERE* INSTRUCTION LABELED *PGD*
*         OR *PRK* WILL ASSEMBLE THE RESPECTIVE CODE AT THAT LOCATION.
 PGD      SPACE  4,40 
 PGD      RMT 
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   COMCDCP
 QUAL$    ENDIF 
**        PGD - PAGE *K* OR *L* DISPLAY.
* 
*         ENTRY  (X1) = ADDRESS OF *K* DISPLAY CONTROL WORD OR ADDRESS
*                       CONTAINING *L* DISPLAY OUTPUT BUFFER ADDRESS. 
*                (X2) = FWA OF PAGE TABLE WITH THE FOLLOWING FORMAT.
* 
*T        12/     NL,18/        CL,12/     NR,18/        CR 
*T,       6/  0,18/        K,18/        M,18/        B
*         NL     NUMBER OF LEFT SCREEN PAGES. 
*         CL     INDEX OF CURRENT LEFT SCREEN.
*         NR     NUMBER OF RIGHT SCREEN PAGES.
*         CR     INDEX OF CURRENT RIGHT SCREEN. 
*         K      KEYBOARD INPUT LINE ADDRESS IN DISPLAY BUFFER. 
*         M      ERROR MESSAGE LINE ADDRESS IN DISPLAY BUFFER.
*         B      FWA OF PAGE DISPLAY BUFFER.
* 
*                (X3) = PAGING CHARACTER, LEFT JUSTIFIED AND
*                       ZERO-FILLED.
*                (X4) = 0 FOR *K* DISPLAY.
*                     = 1 FOR *L* DISPLAY.
*                (B1) = 1.
* 
*         EXIT   *K* DISPLAY CONTROL WORD UPDATED.
*                *L* DISPLAY OUTPUT BUFFER ADDRESS UPDATED. 
*                PAGE TABLE HEADER WORD UPDATED.
*                (X4) = 0 IF LEGAL PAGING INPUT.
*                     = 1 IF NOT LEGAL PAGING INPUT.
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 6. 
*                B - 3, 4, 5, 6.
* 
*         NOTE   THE PAGT MACRO WILL GENERATE THE PAGE TABLE IN THE 
*                CORRECT FORMAT.
  
  
 PGD8     SX4    B1+
  
 PGD      SUBR               ENTRY/EXIT 
          SA1    X1+
          SB6    X4+
  
*         SEARCH PAGE COMMAND TABLE.
  
          SA4    PGDA-1 
          MX7    6
 PGD1     SA4    A4+B1       GET COMMAND TABLE ENTRY
          ZR     X4,PGD8     IF END OF COMMAND TABLE
          BX6    X7*X4
          BX6    X6-X3
          NZ     X6,PGD1     IF NOT A MATCH 
  
*         PROCESS PAGE COMMAND. 
  
          SB4    X4          SHIFT FACTOR 
          ZR     B6,PGD2     IF *K* DISPLAY 
          ZR     B4,PGD8     IF RIGHT SCREEN COMMAND FOR *L* DISPLAY
 PGD2     LX4    42          PAGE DISPLAY 
          SB3    X4          PAGE INCREMENT 
          SA2    X2          PAGE TABLE HEADER
          LX2    B4 
          MX7    -12
          SX3    X2          CURRENT PAGE INDEX 
          ZR     X3,PGD8     IF NO PAGES IN TABLE 
          SX3    X3+B3       NEW PAGE INDEX 
          ZR     X3,PGD3     IF PAGED BACK TOO FAR
          LX2    -18
          BX4    -X7*X2 
          SB3    X4 
          SB5    X3 
          LX2    18 
          GE     B3,B5,PGD4  IF DID NOT PAGE TOO FAR FORWARD
 PGD3     SX3    B1+         SET TO FIRST PAGE
  
*         UPDATE PAGE TABLE HEADER WORD.
  
 PGD4     MX4    42 
          BX2    X4*X2
          BX6    X2+X3
          LX6    B4 
          SA6    A2          REPLACE HEADER WORD
  
*         UPDATE PAGE DISPLAY ADDRESS.
  
          NZ     B4,PGD5     IF LEFT SCREEN 
          LX6    12 
          BX6    -X7*X6      NUMBER OF LEFT PAGES 
          SB3    X3 
          SB3    B3+X6       POSITION OF RIGHT PAGE IN TABLE
          SA3    A2+B3       ADDRESS OF NEW DISPLAY 
          LX1    42 
          SX6    X3 
          BX1    X4*X1
          BX6    X1+X6       INSERT NEW RIGHT SCREEN ADDRESS
          LX6    18 
          EQ     PGD7        REPLACE ADDRESS WORD 
  
 PGD5     SB3    X3 
          SA3    A2+B3       GET ADDRESS OF NEW DISPLAY 
          NZ     B6,PGD6     IF *L* DISPLAY 
          BX1    X4*X1
          SX6    X3+
          BX6    X1+X6
          EQ     PGD7        REPLACE ADDRESS WORD 
  
 PGD6     SX6    X3+
 PGD7     SA6    A1          REPLACE ADDRESS WORD 
          SX4    B0 
          EQ     PGDX        RETURN 
  
  
**        PAGE COMMAND TABLE. 
* 
*T ADDR   24/   PC,18/  PF/,18/  SF 
*         PC     PAGING CHARACTER.
*         PF     PAGING FACTOR. 
*         SF     SHIFT FACTOR.
  
  
 PGDA     VFD    24/1L+,18/1,18/30
          VFD    24/1L-,18/-1,18/30 
          VFD    24/1L(,18/1,18/0 
          VFD    24/1L),18/-1,18/0
          CON    0           END OF TABLE 
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 PGD      EQU    /COMCDCP/PGD 
 QUAL$    ENDIF 
 PGD      RMT 
 PRK      SPACE  4,25 
 PRK      RMT 
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   COMCDCP
 QUAL$    ENDIF 
**        PRK - PRESET *K* DISPLAY. 
* 
*         ENTRY  (X3) = FWA OF Y COORDINATE TABLE OF THE FOLLOWING
*                       FORM. 
* 
*T        24/0,18/LL,18/Y 
*         LL     LOCATION OF Y-COORDINATE IN DISPLAY BUFFER.
*         Y      Y COORDINATE FOR 721 CONSOLE.
* 
*                (B1) = 1.
* 
*         EXIT   (X4) = CONSOLE TYPE. 
* 
*         USES   X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 4, 7.
* 
*         MACROS CSTATUS. 
* 
*         NOTE   THE KDL MACRO IN *COMCDCM* GENERATES THE Y COORDINATE
*                TABLE  IN THE CORRECT FORMAT.  THE Y COORDINATE IS 
*                ASSUMED TO BE IN BYTE 1 OF THE DISPLAY BUFFER WORD.
  
  
 PRK      SUBR               ENTRY/EXIT 
          CSTATUS  PRKA 
          SA4    PRKA 
          ZR     X4,PRKX     IF CC545 
          LX4    12 
          SA1    X3-1 
          MX6    48 
          LX6    36 
 PRK1     SA1    A1+B1       GET NEXT TABLE ENTRY 
          ZR     X1,PRKX     IF END OF TABLE
          SX3    X1 
          AX1    18 
          SA2    X1 
          LX3    36 
          BX2    X6*X2
          BX7    X2+X3       BUFFER WORD WITH NEW Y COORDINATE
          SA7    A2          REPLACE WORD IN BUFFER 
          EQ     PRK1        CONTINUE PROCESSING TABLE
  
  
 PRKA     CON    0           CONSOLE STATUS WORD
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 PRK      EQU    /COMCDCP/PRK 
 QUAL$    ENDIF 
 PRK      RMT 
          BASE   *
 DCP      ENDX
