*COMDECK DBG=MAC
 DBG=MAC  CTEXT  DBG=MAC - INTERACTIVE AND BATCH DEBUG PACKAGE MACROS.
 DBG=MAC  SPACE  4,8
          IF     -DEF,QUAL$,1 
          QUAL   DBG=MAC
          BASE   D
 DBG=MAC  SPACE  4,8
**        DBG=MAC - INTERACTIVE AND BATCH DEBUG PACKAGE MACROS. 
* 
* 
*                CONTAINS THE MACROS USED TO ACCESS THE ROUTINES IN 
*         *DBG=IDP*-- 
* 
* NAME    BREAK  LL,UL,INC   TO PLACE A BREAKPOINT
* NAME    REG                TO PROVIDE A SNAPSHOT OF ALL REGISTERS 
* NAME    REG    (X1,X2,A4)  TO PROVIDE A SNAPSHOT OF SELECTED REGISTERS
* NAME    SNAP   FWA,LWA,LEN TO PROVIDE A SNAPSHOT OF CENTRAL MEMORY
 BREAK    SPACE  4,8
**        BREAK - PLACE A BREAKPOINT. 
* 
* 
*                THIS MACRO DOES A RETURN JUMP TO THE INTERACTIVE 
*         DEBUG PACKAGE *IDP*.
* 
* NAME    BREAK  LL,UL,INC
* 
*         ENTRY  NAME = DISPLAY CODE (DPC) MESSAGE TO BE PRINTED WITH 
*                         EACH SNAP. (NR CHARS.LE.8)
*                LL   = LOWER LIMIT (DEFAULT=1) 
*                UL   = UPPER LIMIT (DEFAULT=100) 
*                NUSE =  USE BLOCK FLAG. IF *NUSE* IS NULL, THE PARA- 
*                          METER LIST EXISTS IN *USE DEBUG*, ELSE IS
*                          ASSEMBLED AFTER *RJ* 
* 
*         EXIT   NONE 
* 
*         USES   NONE 
* 
*         CALLS  IDP= 
  
  
          PURGMAC BREAK 
  
          MACRO  BREAK,NAME,LL,UL,INC,NUSE
          LOCAL  RTN
          LOCAL  APL
* 
 +        RJ     =XIDP= 
 -        VFD    30/APL 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    DEBUG
* 
 #NUSE    ELSE
          EQ     RTN
 #NUSE    ENDIF 
 APL      BSS    0
          FRK=   (NAME),LL,UL,INC 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    *
* 
 #NUSE    ELSE
 RTN      BSS    0
 #NUSE    ENDIF 
* 
 BREAK    ENDM
 FRK=     SPACE  4,8
**        FRK= - GENERATE FREQUENCY PARAMETER LIST. 
* 
* 
*         FRK=   (NAME),LL,UL,INC 
* 
*         ENTRY  NAME =  DISPLAY CODE (DPC) MESSAGE TO BE PRINTED WITH
*                          EACH SNAP. (NR CHARS.LE.8) 
*                LL   =  LOWER LIMIT (DEFAULT=1)
*                UL   =  UPPER LIMIT (DEFAULT=100)
*                INC  =  INCREMENT (DEFAULT=1)
*                          LL, UL, AND INC ARE THE SNAP FREQUENCY PAR-
*                          AMETERS AND ARE RELATED AS FOLLOWS--  THE 1ST
*                          SNAP PRINTED WILL OCCUR THE LLTH TIME THIS 
*                          SNAP IS EXECUTED. THE 2ND SNAP PRINTED WILL
*                          OCCUR THE (LL+INC)TH TIME THIS SNAP IS EXEC- 
*                          UTED, AND SO ON. THE LAST SNAP PRINTED WILL
*                          OCCUR THE ULTH TIME THIS SNAP IS EXECUTED. 
* 
*         EXIT   NONE 
* 
*         USES   NONE 
* 
*         CALLS  NONE 
  
  
          PURGMAC FRK=
  
 FRK=     MACRO  NAME,LL,UL,INC 
          CON    LL  1
          CON    UL  100
          CON    INC 1
 .1       IFC    EQ,/NAME// 
          CON    0
 .1       ELSE
          CON    10H_NAME 
 .1       ENDIF 
          CON    0
*                            USED BY *FRK=/TSNAP* TO KEEP SNAP COUNT
 FRK=     ENDM
 REG      SPACE  4,8
**        REG - REGISTER SNAPSHOT.
* 
* 
* NAME    REG    RG,LL,UL,INC,NUSE,UF                                   000170
* 
*         REG 
*         REG    (X1,B3,A4) 
*         REG    NOREG
* 
*         ENTRY  NAME =  DISPLAY CODE (DPC) MESSAGE TO BE PRINTED WITH
*                          EACH SNAP. (NR CHARS.LE.8) 
*                     =  NULL IF NO SNAP HEADER 
*                RG   =  NULL IF ALL REGISTERS ARE TO BE DUMPED 
*                     =  A LIST OF THE REGISTERS (ENCLOSED IN PARENS) 
*                          DESIRED TO BE DUMPED 
*                     =  NON-REGISTER/NON-NULL IF NO REGISTERS TO BE
*                          DUMPED 
*                LL   =  LOWER LIMIT (DEFAULT=1)
*                UL   =  UPPER LIMIT (DEFAULT=100)
*                NUSE =  USE BLOCK FLAG. IF *NUSE* IS NULL, THE PARA- 
*                          METER LIST EXISTS IN *USE DEBUG*, ELSE IS
*                          ASSEMBLED AFTER *RJ* 
*                UF   =  A STRING OF USER SNAP FLAGS PROCESSED BY       000190
*                        INSTALLER SUPPLIED USF= MACRO IF DESIRED.      000200
*                        USF= SHOULD GENERATE 1 WORD.                   000210
* 
*         EXIT   NONE 
* 
*         USES   NONE 
* 
*         CALLS  FRK=,REG=,RGR=,USF=(IF DEF)                            000212
  
  
          PURGMAC REG 
  
          MACRO  REG,NAME,RG,LL,UL,INC,NUSE,UF                          000214
          LOCAL  '?ID#001,'?ID#004                                      000215
          LOCAL  RTN
          LOCAL  APL
* 
 +        RJ     =XREG= 
 -        VFD    30/APL 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    DEBUG
* 
 #NUSE    ELSE
          EQ     RTN
 #NUSE    ENDIF 
 APL      BSS    0
          FRK=   (NAME),LL,UL,INC 
 '?ID#001 BSS 0                                                         000230
          USF=   (UF)                                                   000240
*                                                                       000241
 '?ID#002 IFNE *P,60D                                                   000242
          IFNE *P,0,2                                                   000243
          POS 0                                                         000244
 '?ID#003 SKIP                                                          000245
*                                                                       000246
 '?ID#002 ENDIF                                                         000247
 '?ID#004 BSS 0                                                         000248
*                                                                       000249
          IFNE   '?ID#004-'?ID#001,1,2                                  000250
 '?ID#003 ENDIF                                                         000251
 P        ERR    *USF=* DID NOT GENERATE EXACTLY 60D BITS. "SEQUENCE"   000252
*                                                                       000253
          RGR=   (RG) 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    *
* 
 #NUSE    ELSE
 RTN      BSS    0
 #NUSE    ENDIF 
* 
 REG      ENDM
  
          PURGMAC REGS
 REGS     OPSYN  REG
 RGR=     SPACE  4,8
**        RGR= - GENERATE REGISTER PARAMETER LIST.
* 
* 
*                SEE *DSR/DBG=IDP*. 
* 
*         RGR=   RG 
* 
*         RGR=
*         RGR=   (X1,X2,A3,B4)
*         RGR=   NOREG
* 
*         ENTRY  RG   =  NULL IF ALL REGISTERS ARE TO BE DUMPED 
*                     =  A LIST OF THE REGISTERS (ENCLOSED IN PARENS) 
*                          DESIRED TO BE DUMPED 
*                     =  NON-REGISTER/NON-NULL IF NO REGISTERS TO BE
*                          DUMPED 
* 
*         EXIT   NONE 
* 
*         USES   NONE 
* 
*         CALLS  NONE 
  
  
          PURGMAC RGR=
  
 RGR=     MACRO  RG 
* 
 .1       IFC    EQ,/RG// 
          DATA   -1 
 .1       ELSE
* 
 .2       IRP    RG 
 .3       IF     -REG,RG
          DATA   0
 .3       ELSE
 .T       MICRO  1,1,/RG/ 
 .R       MICRO  2,1,/RG/ 
          VFD    60/=XIDP=SV_".T"+".R"
 .3       ENDIF 
 .2       IRP 
* 
          DATA   0
 .1       ENDIF 
* 
 RGR=     ENDM
 SNAP     SPACE  4,8
**        SNAP - SNAPSHOT OF REGISTERS AND CORE.
* 
* 
* NAME    SNAP   FWA,LWA,LNG,RG,LL,UL,INC,NUSE,UF                       000280
*         SNAP   *FWA,,**LNG,(X1,X2,B5,A1)
* 
*         ENTRY  NAME =  DISPLAY CODE (DPC) MESSAGE TO BE PRINTED WITH
*                          EACH SNAP. (NR CHARS.LE.8) 
*                     =  NULL IF NO SNAP HEADER 
*                FWA  =  FWA OF CORE TO BE DUMPED. THIS PARAMETER MUST
*                          APPEAR IF A CORE DUMP IS DESIRED.
*                LWA  =  LWA OF CORE TO BE DUMPED. (OPTIONAL) 
*                LNG  =  NR OF WORDS TO BE DUMPED. *LWA* AND *LNG* ARE
*                          RELATED AS FOLLOWS--  DUMP IS FROM 
*                          FWA TO FWA+LNG UNLESS LNG IS NULL OR ZERO. 
*                          IN THAT CASE, DUMP IS FROM FWA TO LWA. 
*                RG   =  NULL IF ALL REGISTERS ARE TO BE DUMPED 
*                     =  A LIST OF THE REGISTERS (ENCLOSED IN PARENS) 
*                          DESIRED TO BE DUMPED 
*                     =  NON-REGISTER/NON-NULL IF NO REGISTERS TO BE
*                          DUMPED 
*                LL   =  LOWER LIMIT (DEFAULT=1)
*                UL   =  UPPER LIMIT (DEFAULT=100)
*                INC  =  INCREMENT (DEFAULT=1)
*                NUSE =  USE BLOCK FLAG. IF *NUSE* IS NULL, THE PARA- 
*                          METER LIST EXISTS IN *USE DEBUG*, ELSE IS
*                          ASSEMBLED AFTER *RJ* 
*                UF   =  A STRING OF USER SNAP FLAGS PROCESSED BY       000300
*                        INSTALLER SUPPLIED USF= MACRO IF DESIRED.      000310
*                        USF= SHOULD GENERATE 1 WORD.                   000320
* 
*         NOTES-- AN INDIRECT ADDRESSING SYNTAX IS PROVIDED FOR THE FWA,
*         LWA, AND LNG PARAMETERS. ANY OF THESE PARAMETERS PRECEDED BY
*         AN ASTERICK (*) DENOTES ONE LEVEL OF INDIRECT ADDRESSING. 
*         N LEVELS OF INDIRECT ADDRESSING ARE POSSIBLE (N.LE.2**21-1) 
*         BY STACKING ASTERICKS. (E.G.  SNAP  **X1,***LWA)
* 
*                A SINGLE REGISTER OR AN ADDRESS EXPRESSION CAN BE USED 
*         FOR THE FWA, LWA, OR LNG PARAMETER, BUT A MIX (E.G. SNAP X1+1)
*         IS NOT ALLOWED. 
* 
*         EXIT   NONE 
* 
*         USES   NONE        (ALL REGISTERS ARE SAVED AND RESTORED) 
* 
*         CALLS  FRK=,RGR=,SNG=,SNP=,USF=(IF DEF)                       000323
  
  
          PURGMAC SNAP
  
          MACRO  SNAP,NAME,FWA,LWA,LNG,RG,LL,UL,INC,NUSE,UF             000325
          LOCAL  '?ID#005,'?ID#008                                      000326
          LOCAL  RTN
          LOCAL  APL
* 
 +        RJ     =XSNP= 
 -        VFD    30/APL 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    DEBUG
* 
 #NUSE    ELSE
          EQ     RTN
 #NUSE    ENDIF 
 APL      BSS    0
          FRK=   (NAME),LL,UL,INC 
          SNG=   (FWA)
          SNG=   (LWA)
          SNG=   (LNG)
 '?ID#005 BSS 0                                                         000340
          USF=   (UF)                                                   000350
*                                                                       000352
 '?ID#006 IFNE *P,60D                                                   000353
          IFNE *P,0,2                                                   000354
          POS 0                                                         000355
 '?ID#007 SKIP                                                          000356
*                                                                       000357
 '?ID#006 ENDIF                                                         000358
 '?ID#008 BSS 0                                                         000359
*                                                                       000360
          IFNE   '?ID#008-'?ID#005,1,2                                  000361
 '?ID#007 ENDIF                                                         000362
 P        ERR    *USF= DID NOT GENERATE EXACTLY 60D BITS. "SEQUENCE"    000363
*                                                                       000364
          RGR=   (RG) 
* 
 #NUSE    IFC    EQ,/NUSE// 
          USE    *
* 
 #NUSE    ELSE
 RTN      BSS    0
 #NUSE    ENDIF 
* 
 SNAP     ENDM
 SNG=     SPACE  4,8
**        SNG= - GENERATE INDIRECT/ADDRESS FIELDS.
* 
* 
*         GENERATES-- 
* 
*         VFD    18/0 
*         VFD    21/NR OF LEVELS OF INDIRECT ADDRESSING (0=DIRECT)
*         VFD    21/ADDRESS AT BEGINNING OF INDIRECT CHAIN
* 
*         SNG=   (*ADDR)
* 
*         ENTRY  *        =  A LEVEL OF INDIRECT ADDRESSING.
*                              NO * MEANS DIRECT ADDRESSING.
*                              E.G. *ADDR MEANS THE CONTENTS OF ADDR
*                              CONTAIN AN ADDRESS THAT IS TO BE USED BY 
*                              SNAP UTILITY.
*                ADDR     =  THE BEGINNING OF THE ADDRESS CHAIN.
  
  
          PURGMAC SNG=
  
 SNG=     MACRO  ARG
 .9       SET    -1 
 +        VFD    18/0 
* 
 .D       DUP    -1 
 .9       SET    .9+1 
 .1       MICRO  .9+1,1,/ARG/ 
          IFC    NE,/".1"/*/,1
          STOPDUP 
 .D       ENDD
* 
 .2       MICRO  .9+1,,/ARG/
* 
 #RG      IF     REG,".2" 
          IFEQ   .9,0,1 
 .9       SET    .9+1 
 .3       MICRO  1,1,/".2"/ 
 .4       MICRO  2,1,/".2"/ 
 .2       MICRO  1,,/=XIDP=SV_".3"+".4"/
* 
 #RG      ELSE
 .5       MICRO  1,2,/".2"/ 
          IFC    EQ,/".5"/=X/,1 
 .2       MICRO  3,,/".2"/
          IF     -DEF,".2",1
          SKIP   1
          IF     -ABS,".2",1
 .2       MICRO  1,,/=X".2"/
 #RG      ENDIF 
* 
          VFD    21/.9
          VFD    21/".2"
 SNG=     ENDM
 USF=     SPACE  4,8                                                    000390
**        USF= - GENERATE USER FLAG PARAMETER CELL.                     000400
*                                                                       000410
*                                                                       000420
*         THIS IS A DUMMY TO CREATE A ZERO WORD IF THE USER             000430
*         DOES NOT DESIRE OWN CODE.                                     000440
*                                                                       000450
*         USF=   USF                                                    000460
*                                                                       000470
*         ENTRY  USF  = ANY LEGAL STRING OF CHARACTERS                  000480
*                                                                       000490
*         EXIT   NONE                                                   000500
*                                                                       000510
*         USES   NONE                                                   000520
*                                                                       000530
*         CALLS  NONE                                                   000540
                                                                        000550
 .1       IF     -MAC,USF=                                              000560
 USF=     MACRO  USF                                                    000570
          CON    0                                                      000580
 USF=     ENDM                                                          000590
 .1       ENDIF                                                         000600
 DBG=MAC  SPACE  4,8
          BASE   *
 QUAL$    IF     -DEF,QUAL$ 
          QUAL   *
 QUAL$    ENDIF 
          ENDX
