COMCDCM 
COMMON
          CTEXT  COMCDCM - CPU DISPLAY CONSOLE MACROS.
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 DCM      SPACE  4,10 
***       COMCDCM - CPU DISPLAY CONSOLE MACROS. 
* 
*         J. T. LITTLE.     84/01/05. 
          SPACE  4,10 
***              *COMCDCM* CONTAINS MACROS FOR ACCESSING THE SYSTEM 
*         DISPLAY CONSOLE BY *K* AND *L* DISPLAY UTILITIES. 
 CONSOLE  SPACE  4,20 
***       CONSOLE - SET *K* DISPLAY CONTROL.
* 
*         CONSOLE ADDR
* 
*         ENTRY  *ADDR* = ADDRESS OF DISPLAY CONTROL WORD.
* 
*T ADDR   1/0,1/U,1/0,1/S,2/0,18/  IB,18/  RB,18/  LB 
*         U      =1, IF UPDATE OF STATUS WORD IS NOT REQUIRED.
*         S      =1, IF DISPLAY INPUT TO BE SUPPRESSED FROM DAYFILE.
*         IB     ADDRESS OF KEYBOARD INPUT BUFFER.
*         RB     ADDRESS OF RIGHT SCREEN DISPLAY BUFFER.
*         LB     ADDRESS OF LEFT SCREEN DISPLAY BUFFER. 
* 
*         USES   X - 1, 2.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  CONSOLE
  
 CONSOLE  MACRO  A
  MACREF CONSOLE
  R= X1,A 
  SX2 5 
  RJ =XCPM= 
 CONSOLE  ENDM
 CSTATUS  SPACE  4,15 
***       CSTATUS - GET CONSOLE TYPE. 
* 
*         CSTATUS ADDR
* 
*         ENTRY  *ADDR* = ADDRESS OF STATUS WORD FOR CONSOLE TYPE.
* 
*T ADDR   12/TYPE,48/0
*         TYPE   =0, IF CC545 CONSOLE.
*                =1, IF CDC721 CONSOLE. 
* 
*         USES   X - 1, 2.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  CSTATUS
  
 CSTATUS  MACRO  A
  MACREF CSTATUS
  R= X1,A 
  SX2 137B
  RJ =XCPM= 
 CSTATUS  ENDM
 DSDINP   SPACE  4,20 
***       DSDINP - TRANSFER *L* DISPLAY KEYBOARD INPUT
*         FROM CMR BUFFER TO USER-S FL. 
* 
*         DSDINP N,C
* 
*         ENTRY  *N* = FWA OF BLOCK IN USER-S FL TO RECEIVE 
*                      KEYBOARD INPUT FROM *DSD*. 
*                *C* = FLAG TO CLEAR *L* DISPLAY INTERLOCK
*                      AND ACCEPT NO MORE COMMANDS. 
* 
*         USES   X - 1, 2.
* 
*         CALLS  CPM=.
* 
*         NOTE   SEE *CPM* DOCUMENTATION IN *TDU* FUNCTION FOR
*                FORMAT OF COMMAND BUFFER IN USER-S FL. 
  
  
          PURGMAC  DSDINP 
  
 DSDINP   MACRO  N,C
  MACREF DSDINP 
  R= X1,N 
 .A IFC NE,$C$$ 
  R= X2,1 
  LX2 18
  BX1 X1+X2 
 .A ENDIF 
  SX2 103B
  RJ =XCPM= 
 DSDINP   ENDM
 DSDOUT   SPACE  4,20 
***       DSDOUT - TRANSFER *L* DISPLAY DATA FROM USER-S FL 
*         TO CMR BUFFER.
* 
*         DSDOUT N,I
* 
*         ENTRY  *N* = FWA OF BLOCK IN USER-S FL CONTAINING *L* 
*                      DISPLAY INFORMATION. 
*                *I* = SPECIFIES THAT *N* CONTAINS THE FWA
*                      OF THE DISPLAY BUFFER. 
* 
*         USES   X - 1, 2.
*                A - 1. 
* 
*         CALLS  CPM=.
* 
*         NOTE   SEE *CPM* DOCUMENTATION IN *TDC* FUNCTION FOR
*                FORMAT OF DISPLAY BUFFER IN USER-S FL. 
  
  
          PURGMAC  DSDOUT 
  
 DSDOUT   MACRO  N,I
  MACREF DSDOUT 
 .A IFC EQ,$I$$ 
  R= X1,N 
 .A ELSE
  R= A1,N 
 .A ENDIF 
  SX2 102B
  RJ =XCPM= 
 DSDOUT   ENDM
 DSL      SPACE  4,10 
***       DSL - GENERATE *K* DISPLAY LINE.
* 
*         DSL    X,Y,(STRING) 
* 
*         ENTRY  *X* = COLUMN (0 = FAR LEFT). 
*                *Y* = LINE (0 = TOP LINE). 
*                *STRING* = CHARACTER STRING TO BE DISPLAYED. 
*                ASSUMES 64 CHARACTERS PER LINE.
* 
*         EXIT   IF *Y* = K, K IS INCREMENTED BY 1. 
  
  
          PURGMAC  DSL
  
 DSL      MACRO  X,Y,A
  LOCAL XX,YY 
  MACREF DSL
 B MICRO 1,6,$A$
 C MICRO 7,,$A$ 
 XX EQU X 
 YY EQU Y 
  VFD 12/6000B+XX*8,12/7756B-YY*10,36/6H"B" 
  DATA L$"C"$ 
  IFC EQ,$Y$K$,1
 K SET K+1
 DSL      ENDM
          SPACE  4,10 
 KDL      SPACE  4,35 
***       KDL - GENERATE K-DISPLAY LINE.
* 
*         KDL    X,Y,(STRING) 
* 
*         ENTRY  *X* = COLUMN (1 = FAR LEFT). 
*                *Y* = LINE (1 = TOP LINE). 
*                IF *Y* =T, LINE NUMBER IS SET TO 2 AND K IS THEN 
*                        SET TO 4.  THIS IS FOR THE TITLE LINE. 
*                       =H, LINE NUMBER IS SET TO K AND K IS THEN 
*                        SET TO K+2.  THIS IS FOR A HEADER LINE - A 
*                        LINE WHICH WILL BE FOLLOWED BY A BLANK LINE. 
*                       =M, LINE NUMBER IS SET TO 22 AND K IS THEN
*                        SET TO 23.  THIS IS FOR THE MESSAGE LINE.
*                       =I, LINE NUMBER IS SET TO 23.  THIS IS FOR
*                        THE KEYBOARD INPUT LINE. 
*                       =K, LINE NUMBER IS SET TO K AND K IS THEN 
*                        SET TO K+1.
*                       =NULL, LINE NUMBER IS SET TO K .  IF K IS 
*                        UNDEFINED, THEN LINE NUMBER IS SET TO 1. 
*                       =NUMBER, LINE IS SET TO THAT NUMBER.  IF
*                        .LT. 1 OR .GT. 23, THEN LINE IS SET TO 1.
*                       =*, THEN REMOTE BLOCK IS ASSEMBLED AT THE 
*                        LOCATION OF THE MACRO CALL.
* 
*                *STRING* = CHARACTER STRING TO BE DISPLAYED (0 - 64
*                CHARACTERS). 
*                ASSUMES 64 CHARACTERS PER LINE.
*                ASSUMES 23 LINES PER DISPLAY.
* 
*         EXIT   K IS SET TO NEXT LINE NUMBER AS DESCRIBED ABOVE. 
*                AN ENTRY IN THE KDL REMOTE BLOCK WILL BE GENERATED FOR 
*                EACH Y VALUE .NE. *.  IT IS 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.
* 
*         NOTE   THE KDL REMOTE BLOCK IS USED BY SUBROUTINE PRK IN
*                COMCDCP. 
  
  
          PURGMAC KDL 
  
 KDL MACRO  X,Y,S 
  LOCAL XX,YY,LL
  MACREF KDL
 B MICRO 1,6,$S$
 C MICRO 7,,$S$ 
 XX EQU X-1 
 LL EQU * 
 .A IFC NE,$X$*$
 .B IFC EQ,$Y$K$
  IF -DEF,K,1 
 K SET 1
 YY EQU K 
 K SET K+1
 .B ELSE
 .C IFC EQ,$Y$T$
 YY SET 2 
 K SET 4
 .C ELSE
 .D IFC EQ,$Y$H$
 YY SET K 
 K SET K+2
 .D ELSE
 .E IFC EQ,$Y$$ 
  IF -DEF,K,1 
 K SET 1
 YY SET K 
 .E ELSE
 .F IFC EQ,$Y$M$
 YY SET 22
 K SET 23 
 .F ELSE
 .G IFC EQ,$Y$I$
 YY SET 23
 K SET 1
 .G ELSE
 YY EQU Y 
 .B ENDIF 
 .C ENDIF 
 .D ENDIF 
 .E ENDIF 
 .F ENDIF 
 .G ENDIF 
 .H IFGT YY,23
  ERR     LINE VALUE TOO LARGE
 YY SET 1 
 .H ELSE
 .I IFLT YY,1 
  ERR     LINE VALUE TOO SMALL
 YY SET 1 
 .I ENDIF 
 .H ENDIF 
 .J IFGT XX,63
 XX SET 0 
 .J ELSE
 .K IFLT XX,0 
 XX SET 0 
 .K ENDIF 
 .J ENDIF 
  VFD 12/6000B+XX*8,12/7707B-YY*15,36/6L"B" 
  DATA L$"C"$ 
 KDL RMT
  VFD 24/0,18/LL,18/7726B-YY*10 
 KDL RMT
 .A ELSE
 KDL HERE 
  CON 0 
 .A ENDIF 
 KDL      ENDM
 PAGT     SPACE  4,25 
***       PAGT - GENERATE PAGE TABLE. 
* 
*     A   PAGT    B,C,D,E 
* 
*         ENTRY  *A* = FWA OF PAGE TABLE.  WHEN SPECIFIED, THIS 
*                      INDICATES THE FIRST ENTRY IN THE PAGE TABLE. 
*                *B* = FWA OF PAGE DISPLAY BUFFER.  IF NOT SPECIFIED, 
*                      INDICATES THE START OF RIGHT SCREENS.
*                *C* = ERROR MESSAGE LINE ADDRESS IN DISPLAY BUFFER 
*                      (OPTIONAL).
*                *D* = KEYBOARD INPUT LINE ADDRESS IN DISPLAY BUFFER
*                      (OPTIONAL).
*                *E* = INDEX OF INITIAL DISPLAY (OPTIONAL). 
* 
*         EXIT   PAGE TABLE GENERATED 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.
* 
*         NOTE   THE PAGE TABLE IS USED BY SUBROUTINE PRK IN COMCDCP. 
  
  
          PURGMAC  PAGT 
  
          MACRO  PAGT,T,L,M,K,I 
  MACREF PAGT 
 .A IFC NE,$T$$ 
 .4 SET -1
 .3 SET 0 
 .2 SET 0 
 .1 SET 0 
 PGT RMT
 T VFD 12/.1,18/.2,12/.3,18/.4
 PGT RMT
 .A ENDIF 
 .F IFC NE,$I$$ 
 .E IFGT .4,-1
 .4 SET I 
 .E ELSE
 .2 SET I 
 .E ENDIF 
 .F ENDIF 
 .B IFC NE,$L$$ 
 .C IFC NE,$L$*$
 .D IFGT .4,-1
 .3 SET .3+1
 .D ELSE
 .1 SET .1+1
 .D ENDIF 
 PGT RMT
  VFD 6/0,18/K,18/M,18/L
 PGT RMT
 .C ELSE
 .G IFGT .1,0 
 .2 MAX .2,1
 .G ELSE
 .2 SET 0 
 .G ENDIF 
 .H IFGT .3,0 
 .4 MAX .4,1
 .H ELSE
 .4 SET 0 
 .H ENDIF 
 PGT HERE 
 .C ENDIF 
 .B ELSE
 .4 SET 0 
 .B ENDIF 
 PAGT     ENDM
 DCM      ENDX
