          EJECT
          TITLE  MACRO DEFINITIONS.
*         CTEXT CTC$DFT MACROS.
*
*         THIS DECK DEFINES ALL MACROS USED BY DFT.
*
 CALL     SPACE  4,10
**        CALL - LOAD NECESSARY OVERLAY AND EXECUTE ROUTINE.
*
*         GIVES CONTROL TO A ROUTINE IN THE SAME OR A DIFFERENT
*         OVERLAY.  WHEN THAT ROUTINE COMPLETES, CONTROL RETURNS
*         TO THE STATEMENTS FOLLOWING THIS MACRO.  NOTE THAT *CALL*
*         CANNOT SAFELY BE USED WITHIN A *SUBR*-DEFINED SUBROUTINE
*         OR IF OVERLAY-RESIDENT DATA LOCATIONS ARE DEFINED, SINCE
*         THE ORIGINAL OVERLAY MAY HAVE TO BE RELOADED AFTER THE
*         CALLED OVERLAY (AND ANY OVERLAYS CALLED BY THAT OVERLAY)
*         HAVE COMPLETED.  ALSO, *CALL* MAY NOT BE USED BY ANY
*         ROUTINE DIRECTLY INVOKED BY *TIM* OR A RECURSIVE CALL WILL
*         OCCUR LEADING TO STACK OVERFLOW.
*
*         CALL   RTN
*
*         RTN = NAME OF CORRESPONDING ROUTINE TO CALL.


          PURGMAC  CALL
 CALL     MACRO  NAME
          LDC    NAME_E+NAME_O*10000
          RJM    LNO
          ENDM
 ROUTINE  SPACE  4,10
**        ROUTINE - DEFINE ENTRY POINT FOR CALL MACRO.
*
*         ROUTINE RNAME
*
*         RNAME = NAMED ENTRY POINT.
*
*         NOTE:  PLACE THIS MACRO AFTER DSI$PP_MACROS CALL.

          PURGMAC ROUTINE
 ROUTINE  MACRO  RNAME,NG
          IFC    EQ,$NG$$,1
          QUAL
 RNAME_E  BSS    0
 RNAME_O  EQU    OVLN
          IFC    EQ,$NG$$,1
          QUAL   *
 RNAME_X  EQU    LNOF
          ENDM
*COPYC DSI$MAINTENANCE_REGISTER_MACROS
 MACROS   SPACE  4,10
**        MACRO DEFINITIONS.
*
*         THE FOLLOWING MACROS ARE USED IN BUILDING THE
*         BUFFER CONTROL WORD FOR DFT.
*
*         NOTE:  THESE MACROS EXPECT DIRECT CELLS FOR A CM WORD TO BE
*                DEFINED AT TAG *BC*.
*
*                THESE MACROS ALSO EXPECT COMMON DECK CTC$DFT_CONSTANTS
*                TO BE PRESENT.
*
*                ALSO DIRECT CELL *EI*,AND *DFTA* MUST BE DEFINED.
 BUILDRG  SPACE  4,10
**        BUILDRG - BUILD REGISTER LIST.
*         BUILDS CORRECTED OR UNCORRECTED REGISTER LIST TO BE
*         PROCESSED BY READ MAINTENANCE REGISTER.
*
*         CALL FORMAT    BUILDRG RLIST
*
*         USES   *REGI*, *REGL*, T1.
*
*         CALLS  *RMR*.


          PURGMAC  READRG
 BUILDRG  MACRO  RLIST
          LDC    RLIST
          RJM    BRL
          ENDM
 CHECK    SPACE  4,10
**        CHECK - DETERMINE WHICH OS SHOULD PROCESS ERROR.
*         CHECKS WHETHER THE *E7* OR *E8* FLAG IN THE DFT HEADER
*         SHOULD BE SET BASED ON WHAT OS SHOULD PROCESS THE ERROR.
*
*         CHECK  OS
*
*         OS = *E8* OR *E7* TO SPECIFY WHICH OS SHOULD PROCESS THE
*                ERROR.
*
*         USES   CM - CM+3.
*
*         CALLS  IDA.


          PURGMAC  CHECK
 CHECK    MACRO  OS
          LOCAL  C,D
          LDN    HDRP
          RJM    IDA
          CRDL   CM
          LDDL   CM+DHFLG
          SHN    21-DH.F_OS
          MJN    D           IF VALID DATA FOR SPECIFIED OS ALREADY SET
          LDDL   CM+DHFLG
          SHN    21-DH.FL
 .OS      IFC    EQ,$OS$E8$
          PJN    C           IF 180 LOGGING
 .OS      ELSE
          MJN    C           IF 170 LOGGING
 .OS      ENDIF
          LDML   VOSD
 .OS1     IFC    EQ,$OS$E8$
          SHN    21-BC.FV8
 .OS1     ELSE
          SHN    21-BC.FV7
 .OS1     ENDIF
          MJN    C           IF VALID DATA FOR SPECIFIED OS
          LDN    CM          CLEAR FLAGS IN DFT HEADER
          RJM    SET
          LMBC   DH.F_OS
          STDL   CM+DHFLG
          LDN    HDRP
          RJM    IDA
          RDCL   CM
          UJN    D

 C        LDN    CM          SET FLAGS IN DFT HEADER
          RJM    CLR
          LMBC   DH.F_OS
          STDL   CM+DHFLG
          LDN    HDRP
          RJM    IDA
          RDSL   CM
 D        BSS    0
          ENDM
 READRG   SPACE  4,10
**        READRG - READ REGISTER LIST.
*         READS CORRECTED OR UNCORRECTED REGISTER LIST INTO
*         SCRATCH MAINTENANCE BUFFER REGISTER.
*
*         READRG RLIST
*
*
*         CALLS  *RMR*, *BRL*.


          PURGMAC  READRG
 READRG   MACRO  RLIST
          LDC    RLIST
          RJM    BRL
          CALL   RMR
          ENDM
 REGLST   SPACE  4,10
**        REGLST - DEFINE LIST OF REGISTERS TO BE LOGGED.
*
* NAME    REGLST (RN1,RN2,RN3...)
*
*         NAME = NAME OF LIST.
*         RN(I) = LIST OF REGISTERS TO LOG.


          PURGMAC  REGLST
          MACRO  REGLST,NAME,(RLIST)
          LOCAL  SIZE
 NAME     CON    SIZE
          LIST   G
          IRP    RLIST
          CON    0#_RLIST
          IRP
          LIST   *
 SIZE     EQU    *-NAME-2
          ENDM
 SETDAC   SPACE  4,10
**        SETDAC - SET DFT ACTION CODE.
*
*         SETDAC ACTION
*
*         ACTION = ADDRESS OF DFT ACTION ROUTINE TO EXECUTE.
*
*         USES   DFTA.


          PURGMAC  SETDAC
 SETDAC   MACRO  ACTION
          LDC    ACTION
          STM    DFTA
          ENDM
 SETDAN   SPACE  4,10
**        SETDAN - SET DFT ANALYSIS CODE.
*         SET DFT ANALYSIS CODE IN THE SCRATCH BUFFER CONTROL WORD.
*
*         SETDAN DANAL
*
*         DANAL = ERROR PRIORITY AND DFT ANALYSIS CODE.
*
*         NOTE   THIS MACRO PRESERVES AN EXISTING OS ACTION CODE IN
*                THE BUFFER CONTROL WORD ENTRY.
*
*         USES   BC, ET.


          PURGMAC  SETDAN
 SETDAN   MACRO  DANAL
 V        SET    0
          ECHO   ,M=(0#1000,1),B=(DANAL)
 V        SET    M*B+V
          ENDD
          LDD    ET
          SHN    BC.ANE
          ADK    V
          STDL   BC+BCDA
          LDDL   BC+BCEI
          LPC    0#00FF
          STDL   BC+BCEI
          LDD    EI
          SHN    BC.EI
          LMDL   BC+BCEI
          STDL   BC+BCEI
          ENDM
 SETFLG   SPACE  4,10
**        SETFLG - SET BUFFER CONTROL WORD FLAGS.
*         SETS SPECIFIED FLAGS WHICH ARE REASONABLE IN THE ENVIRONMENT
*         (CYBER 170 STANDALONE, DUAL STATE, CYBER 180 STANDALONE).
*
*         SETFLG (F1,F2,..FN)
*
*         FN = ONE OR MORE OF THE FOLLOWING FLAGS -
*                *BC.CL* = LOG ERROR TO CONSOLE
*                *BC.FL* = LOG ERROR TO OS ERROR LOG
*                *BC.FI* = SET INTERLOCK
*                *BC.F8* = CYBER 180 VALID DATA
*                *BC.F7* = CYBER 170 VALID DATA
*
*         CALLS  CKF.


          PURGMAC  SETFLG
 SETFLG   MACRO  FLAGS
          MACREF SETFLG
          LCN    0
          LMBC   (FLAGS)
          LPDL   BC+BCFLG
          LMBC   (FLAGS)
          STDL   BC+BCFLG
          RJM    CKF         CHECK FLAGS FOR APPLICABILITY
          ENDM
 SETOSA   SPACE  4,15
**        SETOSA - SET OS ACTION CODE.
*         SET OS ACTION CODE IN THE SCRATCH BUFFER CONTROL WORD.
*         IF VERSION <= 3, USE THE OLD OS ACTION CODE.  IF VERSION >= 4,
*         USE THE NEW OS ACTION CODE.
*
*         SETOSA OSA,NOSA
*
*         OSA = OLD OS ACTION CODE (VERSION 3 OR LESS).
*         NOSA = NEW OS ACTION CODE (VERSION 4).
*
*         CALLS  VCK.
*
*         NOTE   THIS MACRO PRESERVES AN EXISTING ELEMENT INDEX IN THE
*                BUFFER CONTROL WORD ENTRY.


          PURGMAC  SETOSA
 SETOSA   MACRO  OSA,NOSA
          LOCAL  A,B
          LDDL   BC+BCEI
          LPC    0#FF00
          STDL   BC+BCEI
          LDN    VER4        CHECK VERSION NUMBER
          RJM    VCK
          PJN    A           IF VERSION 4 OR GREATER
          LDK    OSA         USE OLD OS ACTION CODE
          UJN    B           STORE CODE

 A        LDK    NOSA        USE NEW OS ACTION CODE
 B        RADL   BC+BCEI
          ENDM
 TASK     SPACE  4,10
**        TASK - DEFINE ROUTINES TO BE USED TO PERFORM A TASK.
*         LIST OF ROUTINES WHICH WHEN EXECUTED ACCOMPLISHES A
*         MORE COMPLEX GOAL. WHEN THE TASK TERMINATES, CONTROL PASSES
*         TO *EXTR*.
*
*         TASK   (RTN1,RTN2,...RNTN)
*
*         RTN(I) = ROUTINE TO CALL.


          PURGMAC  TASK
 TASK     MACRO  TLIST
          LOCAL  TASK1
          IRP    TLIST
          CALL   TLIST
          LDM    TERT
          NJP    TASK1       IF TERMINATE TASK = TRUE
          IRP
          LJM    EXTR        END OF TABLE

 TASK1    LDN    0
          STM    TERT        RESET FLAG TO DEFAULT
          LDM    DFTA
          STD    T1
          LJM    0,T1        EXECUTE NEW TASK LIST
          ENDM

*         END OF CTC$DFT MACROS
