COMPMAC 
COMMON
          CTEXT  COMPMAC - PP SYSTEM MACROS.
 COMPMAC  SPACE  4,10 
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 COMPMAC  SPACE  4,10 
***       COMPMAC - PP SYSTEM MACROS. 
*         G. R. MANSFIELD.  09/27/69. 
*         W. E. GOEBEL.      78/07/12.
 COMPMAC  SPACE  4,10 
***              COMPMAC DEFINES SEVERAL MACROS WHICH ARE USED IN THE 
*         SYSTEM PP PACKAGES. 
 COMPMAC  SPACE  4,10 
***       SCRATCH SYMBOLS.
* 
* 
*         THE FOLLOWING SYMBOLS ARE USED IN MACROS FOR SCRATCH. 
*         .1, .2, .3, .4, .5. 
  
  
          NOREF  .1,.2,.3,.4
 MACREF   SPACE  4,10 
**        MACREF - GENERATE MACRO SYMBOLIC REFERENCE TABLE LISTING. 
* 
*         CAUSES THE MACRO NAME TO BE LISTED IN THE SYMBOLIC
*         REFERENCE TABLE UNDER THE QUALIFIER *MACRO$*. 
* 
*         MACREF MNAME
*                MNAME    MACRO NAME FOR REFERENCE TABLE. 
  
  
          PURGMAC MACREF
  
 MACREF   MACRO  N
  QUAL MACRO$ 
N SET * 
  QUAL *
  ENDM
 ADK      SPACE  4,15 
***       ADK - ADD CONSTANT TO (A).
* 
*         GENERATES EITHER AN *ADC*, *ADN*, OR *SBN* INSTRUCTION, 
*         DEPENDING UPON THE VALUE OF THE OPERAND.  IF THE VALUE
*         OF THE OPERAND REDUCES TO ZERO, NO INSTRUCTION WILL BE
*         GENERATED.
* 
*         ADK    K
* 
*         ENTRY  K = CONSTANT TO BE ADDED TO (A). 
* 
*         NOTE   BECAUSE OF THE VARIABILITY OF THE CODE 
*                GENERATED BY THIS MACRO, IT MUST NOT BE
*                CHANGED BY ON-LINE CODE MODIFICATION.
  
  
          PURGMAC  ADK
  
 ADK      MACRO K 
  IF DEF,K,12D
 .2 SET K 
  IFNE K,0,11D
  IFMI K,1
 .2 SET 777777B+K 
  IFLE .2,77B,3 
  IFNE .2,0,7 
  ADN .2
  SKIP 5
  IFGE .2,777700B,3 
  IFNE .2,777777B,1 
  SBN 777777B-.2
  SKIP 1
  ADC K 
 ADK      ENDM
 BITSET   SPACE  4,10 
***       BITSET - GENERATE BIT CONSTANT. 
* 
* 
*NAME     BITSET (P1,P2,...,PN) 
*         ENTRY  *NAME* = NAME OF BIT CONSTANT. 
*                (PN) = BITS TO SET.
  
  
          PURGMAC  BITSET 
  
          MACRO  BITSET,N,P 
N SET 0 
  IRP P 
.1 DECMIC P 
N SET N+1S".1"
  IRP 
  BSS     0 
  ENDM
          SPACE  4,10 
***       DEFINE ABSOLUTE MEMORY INSTRUCTIONS.
* 
* 
*         LJP    ADDRESS
*         RJP    ADDRESS
*         LDP    ADDRESS
*         ADP    ADDRESS
*         SBP    ADDRESS
*         LMP    ADDRESS
*         STP    ADDRESS
*         RAP    ADDRESS
*         AOP    ADDRESS
*         SOP    ADDRESS
* 
*         DEFINE ABSOLUTE MEMORY INSTRUCTION FOR USE BY OTHER MACROS. 
*         ENTRY  (ADDRESS) = ABSOLUTE MEMORY ADDRESS. 
  
  
 LJP      PPOP   5,0100B
 RJP      PPOP   5,0200B
 LDP      PPOP   5,5000B
 ADP      PPOP   5,5100B
 SBP      PPOP   5,5200B
 LMP      PPOP   5,5300B
 STP      PPOP   5,5400B
 RAP      PPOP   5,5500B
 AOP      PPOP   5,5600B
 SOP      PPOP   5,5700B
 LDBC     SPACE  4,10 
***       LDBC - LOAD (A) WITH BIT CONSTANT.
* 
* 
*         LDBC   (P1,P2,...,PN) 
*         LOAD (A) WITH A CONSTANT CONTAINING BITS PN.
  
  
          PURGMAC  LDBC 
  
 LDBC     MACRO  P
  .1 (P)
  LDC .1
  ENDM
 ADBC     SPACE  4,10 
***       ADBC - ADD BIT CONSTANT TO (A). 
* 
* 
*         ADBC   (P1,P2,...,PN) 
*         ADD A CONSTANT CONTAINING BITS PN TO (A). 
  
  
          PURGMAC  ADBC 
  
 ADBC     MACRO  P
  .1 (P)
  ADC .1
  ENDM
 LPBC     SPACE  4,10 
***       LPBC - ADD BIT CONSTANT TO (A). 
* 
* 
*         LPBC   (P1,P2,...,PN) 
*         LOGICAL PRODUCT OF (A) AND CONSTANT CONTAINING BITS PN. 
  
  
          PURGMAC  LPBC 
  
 LPBC     MACRO  P
  .1 (P)
  LPC .1
  ENDM
 LMBC     SPACE  4,10 
***       LMBC - ADD BIT CONSTANT TO (A). 
* 
* 
*         LMBC   (P1,P2,...,PN) 
*         LOGICAL DIFFERENCE OF (A) AND CONSTANT CONTAINING BITS PN.
  
  
          PURGMAC  LMBC 
  
 LMBC     MACRO  P
  .1 (P)
  LMC .1
  ENDM
 SCBN     SPACE  4,10 
****      SCBN - CLEAR (A) WITH BIT CONSTANT. 
* 
* 
*         SCBN   (P1, P2,...,PN)
*         SELECTIVE CLEAR (A) WITH A CONSTANT CONTAINING BITS PN. 
  
  
          PURGMAC SCBN
  
 SCBN     MACRO  P
  .1 (P)
  SCN .1
 SCBN     ENDM
 BLI      SPACE  4,20 
***       BLI - BUILD LONG INSTRUCTION. 
* 
* 
*TAG      BLI    D
* 
*         ENTRY  (T3) = ADDRESS AT WHICH TO STORE THE LONG INSTRUCTION. 
*                IF D = *T3*, MODIFY THE INSTRUCTION AT (T3). 
*                IF D IS OMITTED, (A) = THE INSTRUCTION TO BE STORED AT 
*                   (T3). 
* 
*         EXAMPLE - 
* 
*         LDC    TAGA 
*         STD    T3 
*         BLI    T3          ADD LONG BIT TO INSTRUCTION AT *TAGA*
* 
*         CALLS  .EST, .BLI.
* 
*         NOTE - *BLI* CALLS THE *.BLI* ENTRY POINT IN *PPR*.  WHEN 
*         *PPR* IS LOADED INTO A CONCURRENT PP (CPP), AN *STIL* 
*         INSTRUCTION IS STORED AT *.BLI*.  THE *BLI* MACRO JUMPS TO
*         THIS INSTRUCTION TO STORE THE DESIRED LONG INSTRUCTION.  TO 
*         GET BACK, *BLI* USES THE *LJM* THAT ACTS AS THE ENTRY/EXIT
*         POINT FOR THE *.EST* SUBROUTINE IN *PPR*.  TO INSURE THAT 
*         CONTROL RETURNS TO THE MACRO GENERATED CODE, *BLI* FIRST
*         CALLS *.EST* TO PRESET THE *LJM*. 
  
  
          PURGMAC  BLI
  
 BLI      MACRO  D
  LOCAL A,B 
  IFC NE,/D//,2 
  IFC NE,/D/T3/,1 
  ERR THE VARIABLE FIELD MUST BE NULL OR CONTAIN *T3* 
  IFC EQ,/D//,1 
  STM A 
  LDC 400000B/ESTE
  RJM .EST
  PJN B 
  LDC 1S15+** 
 A EQU *-1
  IFC EQ,/D/T3/,1 
  LMI T3
  LJM .BLI
 B EQU *
 BLI      ENDM
 BSSB     SPACE  4,25 
***       BSSB - BACKWARD SEQUENTIAL SYMBOL DEFINITION WITHOUT
*                RESERVING SPACE. 
* 
* 
* BEGIN   BSSB   A           BEGIN SYMBOL DEFINITION SEQUENCE 
* TAG1    BSSB   N
* .       .      .
* .       .      .
* 
* TAGN    BSSB   N
* END     BSSB               END SYMBOL DEFINITION SEQUENCE 
* 
*         A = VALUE AT WHICH TO START DEFINITION SEQUENCE.
*         N = NUMBER OF LOCATIONS RESERVED TO THIS SYMBOL.
* 
*         IF NO *BEGIN BSSB* IS USED, THE STARTING VALUE WILL BE THE
*         THE CURRENT VALUE OF THE LOCATION COUNTER.
* 
*         THE *END BSSB* IS ONLY NEEDED IF IT IS NECESSARY TO RESET THE 
*         LOCATION COUNTER TO THE ORIGIN COUNTER OR TO PRINT THE FINAL
*         VALUE OF THE *BSSB* SERIES. 
  
  
          PURGMAC  BSSB 
  
          MACRO  BSSB,S,N 
.1 IFC EQ,*S*BEGIN* 
  BSS 
  LOC N 
.3 SKIP 
.1 ENDIF
.2 IFC EQ,*S*END* 
  BSS 
  LOC *O
.3 SKIP 
.2 ENDIF
 S BSS
  LOC *-N 
.3 ENDIF
  ENDM
 BSSN     SPACE  4,20 
***       BSSN - SEQUENTIAL TAG DEFINITION WITHOUT RESERVING SPACE. 
* 
* 
* BEGIN   BSSN   A           BEGIN TAG DEFINITION SEQUENCE
* TAG1    BSSN   N
* .       .      .
* .       .      .
* 
* TAGN    BSSN   N
* END     BSSN               END TAG DEFINITION SEQUENCE
* 
*         A = NUMBER TO START TAG DEFINITION AT.
*         N = NUMBER OF LOCATIONS RESERVED TO THIS TAG. 
* 
*         IF NO *BEGIN BSSN* IS USED, THE STARTING VALUE WILL BE THE
*         THE CURRENT VALUE OF THE LOCATION COUNTER.
* 
*         THE *END BSSN* IS ONLY NEEDED IF IT IS NECESSARY TO RESET THE 
*         LOCATION COUNTER TO THE ORIGIN COUNTER OR TO PRINT THE FINAL
*         VALUE OF THE *BSSN* SERIES. 
  
  
          PURGMAC  BSSN 
  
          MACRO  BSSN,T,N 
.1 IFC EQ,*T*BEGIN* 
  BSS 
  LOC N 
.3 SKIP 
.1 ENDIF
.2 IFC EQ,*T*END* 
  BSS 
  LOC *O
.3 SKIP 
.2 ENDIF
 T BSS
  LOC *+N 
.3 ENDIF
  ENDM
 CFI      SPACE  4,25 
***       CFI - CALCULATE FIRST WORD INDEX IN MANAGED TABLE.
* 
*         GIVEN AN ORDINAL IN A MANAGED TABLE (CLT, EJT, EST, SYSTEM
*         FNT, JCB OR QFT), THE *CFI* MACRO CALCULATES THE TABLE INDEX
*         OF THE FIRST WORD OF THE ENTRY. 
* 
*         THE *CFI* MACRO REQUIRES THAT TABLE ENTRY LENGTHS BETWEEN 
*         10B AND 40B BE A MULTIPLE OF 4 AND THAT ENTRY LENGTHS 
*         GREATER THAN 40B BE A MULTIPLE OF 10B.  THE MAXUMUM ENTRY 
*         LENGTH SUPPORTED BY *CFI* IS 100B.  THE MAXIMUM ENTRY LENGTH
*         OF CERTAIN TABLES SUCH AS THE EJT AND QFT IS CONSTRAINED BY 
*         SPACE ALLOCATED IN OTHER TABLES SUCH AS THE QUEUE FILE OR 
*         ROLLOUT FILE SYSTEM SECTOR. 
* 
*         CFI    TABLE,ORD,ODC
* 
*         ENTRY  TABLE = MANAGED TABLE MNEMONIC.
*                      CLT = COMMON LIBRARIES TABLE.
*                      EJT = EXECUTING JOB TABLE. 
*                      EST = EQUIPMENT STATUS TABLE.
*                      FNT = SYSTEM FNT TABLE.
*                      JCB = JOB CONTROL BLOCK TABLE. 
*                      QFT = QUEUE FILE TABLE.
*                      ORT = OPTICAL DISK REQUEST TABLE.
*                ORD = OPTIONAL PARAMETER SPECIFYING DIRECT CELL
*                      CONTAINING TABLE ORDINAL.
*                (A) = TABLE ORDINAL, IF *ORD* NOT SPECIFIED. 
*                ODC = OPTIONAL PARAMETER SPECIFYING DIRECT CELL
*                      CONTAINING TABLE ORDINAL, IF *ORD* NOT 
*                      SPECIFIED. 
*                      THIS OPTION SHOULD BE USED IF THE ORDINAL
*                      IS IN A DIRECT CELL AND IS LOADED IN (A) 
*                      ON ENTRY TO THE *CFI* MACRO. 
* 
*         EXIT   (A) = WORD INDEX OF TABLE ENTRY. 
  
  
          PURGMAC  CFI
  
 CFI      MACRO  T,R1,R2
  LOCAL AS1,DC,EL,MN,MNL,MX,MXL,SC1,SC2,ST,TB,TL
  MACREF CFI
.1 SET 0
.A ECHO ,TB=(CLT,EJT,EST,FNT,JCB,QFT,ORT),MN=(3,4,2,2,10B,4,4),MX=(10B,1
,0B,10B,10B,100B,10B,10B) 
.B IFC EQ,$TB$T$
.1 SET 1
MNL SET MN
MXL SET MX
  STOPDUP 
.B ENDIF
.A ENDD 
.A IFEQ .1,0
  ERR ILLEGAL TABLE TYPE - T
.A ELSE 
TL SET T_E
DC SET R1 R2 T0 
.B IFC NE,$R1$$ 
  LDD R1
.B ENDIF
.B IFGE TL,MNL
.B IFLE TL,MXL
.C ECHO ,EL=(2,3,4,5,6,7,10B,14B,20B,24B,30B,34B,40B,50B,60B,70B,100B),S
,T=(0,1,0,1,1,1,0,1,0,1,1,1,0,1,1,1),SC1=(1,1,2,2,1,3,3,1,4,2,1,3,5,2,1,
,3),AS1=(0,1,0,1,1,2,0,1,0,1,1,2,0,1,1,2),SC2=(0,0,0,0,1,0,0,2,0,2,3,2,0
,3,4,3) 
.D IFEQ TL,EL 
.E IFC EQ,$R1$$ 
.E IFC EQ,$R2$$ 
.E IFEQ ST,1
  STD T0
.E ENDIF
  SHN SC1 
.E IFEQ AS1,1 
  ADD DC
.E ENDIF
.E IFEQ AS1,2 
  SBD DC
.E ENDIF
.E IFNE SC2,0 
  SHN SC2 
.E ENDIF
  STOPDUP 
.D ENDIF
.C ENDD 
.B ELSE 
  ERR T ENTRY LENGTH ERROR
.B ENDIF
.A ENDIF
 CFI      ENDM
 CMTM     SPACE  4,10 
***       CMTM - CREATE MACROS TO ACCESS MANAGED TABLES.
* 
*         CMTM   TB 
* 
*         ENTRY  TB = MANAGED TABLE NAME. 
  
  
          PURGMAC  CMTM 
  
 CMTM     MACRO  TB 
  PURGMAC C_TB
C_TB MACRO
.A IF -DEF,.TB
  MACREF C_TB 
.TB SUBR
  STD T0
  LDK TB_P
  CRD CM
  CFI TB,T0 
  ADD CM+1
  SHN 6 
  ADD CM
  SHN 14
  UJN .TB_X 
.A ENDIF
 CMTM     ENDM
 CEJT     SPACE  4,10 
***       CEJT - CONVERT EJT ADDRESS. 
* 
*         ENTRY  (A) = EJT ORDINAL. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS CFI. 
  
  
          CMTM   EJT
 CEST     SPACE  4,10 
***       CEST - CONVERT EST ADDRESS. 
* 
*         ENTRY  (A) = EST ORDINAL. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS CFI. 
  
  
          CMTM   EST
 CFNT     SPACE  4,10 
***       CFNT - CONVERT FNT ADDRESS. 
* 
*         ENTRY  (A) = FNT ORDINAL. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS CFI. 
  
  
          CMTM   FNT
 CJCB     SPACE  4,10 
***       CJCB - CONVERT JCB ADDRESS. 
* 
*         ENTRY  (A) = JCB ORDINAL. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS CFI. 
  
  
          CMTM   JCB
 CQFT     SPACE  4,10 
***       CQFT - CONVERT QFT ADDRESS. 
* 
*         ENTRY  (A) = QFT ORDINAL. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS CFI. 
  
  
          CMTM   QFT
 CORT     SPACE  4,10 
***       CORT - CONVERT ORT ADDRESS. 
* 
*         ENTRY  (A) = ORT ORDINAL. 
* 
*         USES   CM - CM+4. 
* 
*         MACROS CFI. 
  
  
          CMTM   ORT
 CREL     SPACE  4,10 
**        CREL  - ASSEMBLED CONSTANT RELOCATION.
* 
*         ASSEMBLES INFORMATION TO ALLOW THE SPECIFIED INSTRUCTION OR 
*         DATA LOCATION TO BE MODIFIED BY *COMPSIC*.
* 
*         CREL   A,R
* 
*         ENTRY  *A* = ADDRESS OF TWO BYTES TO BE MODIFIED. 
*                *R* = ADDRESS OF VALUE TO BE ADDED TO TWO BYTES AT *A* 
*                      BY *COMPSIC*.
  
  
          PURGMAC  CREL 
  
 CREL     MACRO  A,R
          LOCAL  B
 B        EQU    A
 SIC      RMT 
          CON    B
          CON    R
 SIC      RMT 
 CREL     ENDM
 DCHAN    SPACE  4,10 
***       DCHAN - DROP CHANNEL. 
* 
* 
*         DCHAN 
*         ENTRY  (A) = CHANNEL NUMBER.
  
  
          PURGMAC  DCHAN
  
 DCHAN    MACRO 
  MACREF DCHAN
  STD CM+1
  MONITOR DCHM
  ENDM
 DEFC     SPACE  4,10 
***       DEFC - CONDITIONALLY DEFINE SYMBOL. 
* 
* 
* SYM     DEFC   VAL
  
  
          PURGMAC  DEFC 
  
          MACRO  DEFC,SYM,VAL 
  MACREF DEFC 
  IF -DEF,SYM,1 
 SYM = VAL
  ENDM
 DELAY    SPACE  4,10 
***       DELAY - DELAY FOR SYSTEM DELAY TIME.
* 
*         DELAYS APPROXIMATELY N/8 MILLISECONDS.  IF N IS NOT SPECIFIED 
*         THE DELAY TIME IS APPROXIMATELY 1/8 MILLISECOND.
* 
*         DELAY  N
* 
*         WHERE  N/8 IS THE NUMBER OF MILLISECONDS TO DELAY.
* 
*         EXIT   (A) = 0. 
  
  
          PURGMAC  DELAY
 DELAY    MACRO  N
  LOCAL A 
  MACREF DELAY
  NOREF .2,.3 
.2 SET 0
.3 SET N 1
  DUP 10,5
  IFEQ .3/2*2-.3,0
.3 SET .3/2 
.2 SET .2+1 
  ELSE 1
  STOPDUP 
  IFGT .3,1,2 
  LDK .3
  STD T0
A LDP .DLY
  ERRNG 10D-.2 DELAY TIME TOO LARGE 
  SHK .2
  SBN 1 
  NJN *-1 
  IFGT .3,1,2 
  SOD T0
  NJN A 
  ENDM
 DFIM     SPACE  4,40 
***       DFIM - DEFINE INSTRUCTION MODIFICATION. 
* 
*         *DFIM* CREATES A REMOTE BLOCK CONTAINING THE INSTRUCTION AND
*         ITS ADDRESS.  *DIMB* CONTAINS THE *HERE* PSEUDO-OP WHICH
*         CAUSES THE REMOTE CODE TO BE ASSEMBLED AND *MDIN* IS AN 
*         EXECUTABLE MACRO THAT ACTUALLY MAKES THE MODIFICATIONS SPECI- 
*         FIED BY THE *DFIM* MACRO. 
* 
*TAG      DFIM   (OPC),ADR
* 
*         ENTRY  *OPC* = COMPASS OP CODE AND VARIABLE FIELD.
*                *ADR* = ADDRESS TO BE MODIFIED WITH *OPC*. 
*                      = * IF NOT SPECIFIED.
*                *TAG* = OPTIONAL LOCATION FIELD SYMBOL.
* 
*         EXIT   *OPC* PLACED IN REMOTE BLOCK NAMED BY
*                *R$* MICRO (DEFAULT IS *SRMT*).
* 
*         EXAMPLE - 
* 
*         LDM    ABCA 
*         DFIM   (UJN  ABCX)
* ABC3    NJN    ABCX 
* 
*         SINCE THE *ADR* PARAMETER WAS OMITTED ON THE *DFIM*, THE
*         *UJN* WILL BE ASSEMBLED SO THAT IT WILL WORK CORRECTLY WHEN 
*         IT IS MOVED TO *ABC3*.
* 
*         SOMEWHERE IN THE PRESET CODE FOR THE PROGRAM, A TEST IS MADE
*         TO DETERMINE WHETHER OR NOT TO ACTUALLY MODIFY THE INSTRUC- 
*         TIONS.  FOR EXAMPLE-
* 
*         LDM    XXXX 
*         ZJN    PRS4        IF INSTRUCTIONS ARE NOT TO BE MODIFIED 
*         MDIN   PRSA        MODIFY THE INSTRUCTIONS
* PRS4      CONTINUE WITH PRESETTING
* 
* 
* PRSA    BSS    0           TABLE OF MODIFIED INSTRUCTIONS 
*         DIMB
  
  
          PURGMAC  DFIM 
  
          MACRO  DFIM,TAG,OPC,ADR 
  LOCAL X,Y,Z 
  MACREF DFIM 
Z MICRO 1,, "QUAL"
X SET ADR * 
Y EQU *O-*L+X 
.1D SET * 
.2D SET *O
  IF -MIC,R$,1
R$ MICRO 1,4, SRMT
  IF DEF,.O"R$",1 
  IFNE .O"R$",*O,2
.O"R$" SET *O 
.L"R$" SET X
  LOC .L"R$"
TAG  OPC
.L"R$" SET *
  ORG .2D 
  LOC .1D 
"R$" RMT
  IF DEF,"R$"A,1
  IFEQ "R$"A,10000,3
"R$" EQU *O 
  QUAL
"R$"A SET 10000 
  IFNE /"Z"/Y,"R$"A,4 
"R$"B SET *O
"R$"C SET 0 
  ORG *O+1
  CON /"Z"/Y
"R$"A SET /"Z"/Y
  QUAL "Z"
  LOC X+"R$"C 
TAG  OPC
  QUAL
"R$"C SET *O-"R$"B-2
  ORG "R$"B 
  CON "R$"C 
  ORG *O+"R$"C+1
  RMT 
 DFIM     ENDM
 DIMB     SPACE  4,10 
***       DIMB - DUMP INSTRUCTION MODIFICATION BLOCK. 
* 
*         DIMB   BN 
* 
*         ENTRY  *BN* = NAME OF REMOTE BLOCK. 
*                     = *SRMT* IF NOT SPECIFIED.
  
  
          PURGMAC  DIMB 
  
 DIMB     MACRO  BN 
  LOCAL Q 
  MACREF DIMB 
Q MICRO 1,, "QUAL"
  IFC EQ,*BN**,2
TN MICRO 1,4, SRMT
  ELSE 1
TN MICRO 1,, BN 
  QUAL
  NOREF "TN"A,"TN"B,"TN"C 
  QUAL *
"TN" HERE 
  CON 0 
"TN"A SET 10000 
  QUAL "Q"
 DIMB     ENDM
 ENDMS    SPACE  4,15 
***       ENDMS - END MASS STORAGE OPERATION. 
* 
* 
*         ENDMS 
*         *ENDMS* RELEASES ALL RESOURCES RESERVED TO THE MASS STORAGE 
*         OPERATION.  SEE *PPR* FOR MORE INFORMATION ON USING THE 
*         *ENDMS* MACRO.
* 
*         EXIT   (A) = 0. 
* 
*         USES   T1, T2, CM - CM+4. 
* 
*         NOTE - THIS MACRO IS THE ONLY SUPPORTED INTERFACE TO THE
*         *.EMS* PPR ENTRY POINT.  THE VALUE OF THIS SYMBOL IS
*         DEFINED IN *COMSMSP* AND *PPCOM*. 
  
  
          PURGMAC  ENDMS
  
 ENDMS    MACRO 
  MACREF ENDMS
  RJP .EMS
  ENDM
 EXECUTE  SPACE  4,15 
***       EXECUTE - PROGRAM/OVERLAY CALL. 
*         THIS MACRO IS INTENDED TO BE USED FOR CROSS REFERENCE 
*         PURPOSES. 
* 
* 
*         EXECUTE NAME,ADDRESS
*         ENTRY  (NAME) = NAME OF PROGRAM/OVERLAY.
*                (ADDRESS) = LOAD ADDRESS FOR OVERLAY IF *NAME* BEGINS
*                            WITH *0*.
*                (ADDRESS) = (*), LOAD *NAME* INTO -A- REGISTER, BUT
*                            DO NOT EXECUTE.
*                (ADDRESS) = (=), DO NOT GENERATE CODE. 
*         CALLS  EXR. 
  
  
          PURGMAC  EXECUTE
  
 EXECUTE  MACRO  N,A
  MACREF EXECUTE
  QUAL
(N) SET 0 
  QUAL *
  IFC NE,$A$=$
M MICRO 1,1, N
  IFC EQ,$"M"$0$,3
  IFC NE,$A$*$,2
  LDC A . NO LOAD ADDRESS SPECIFIED 
  STD LA
  LDC 3R_N
  IFC NE,$A$*$,1
  RJP EXR 
  ENDIF 
  ENDM
 ISTORE   SPACE  4,15 
***       ISTORE - INSTRUCTION STORE. 
* 
*         BUILDS AND STORES PP INSTRUCTION VIA IN-LINE CODE 
*         MODIFICATION.  LOCATION TO BE MODIFIED MUST BE
*         PREVIOUSLY DEFINED. 
* 
*         ISTORE CADDR,(INSTR)
* 
*         ENTRY  CADDR = ADDRESS OF CODE TO BE MODIFIED.
*                INSTR = INSTRUCTION (OPERATION CODE AND ADDRESS
*                        FIELD) TO BE STORED. 
  
  
          PURGMAC  ISTORE 
  
 ISTORE   MACRO  CADDR,INSTR
  MACREF ISTORE 
.1 IFC EQ,$INSTR$PSN$ 
  LDN 0 
.1 ELSE 
  LDC **
  ORG *-1 
  LOC CADDR 
  INSTR 
  LOC *O
.1 ENDIF
  STM CADDR 
 ISTORE   ENDM
 LDK      SPACE  4,15 
***       LDK - LOAD CONSTANT INTO (A). 
* 
*         GENERATES EITHER A *LDC*, *LDN*, OR *LCN* INSTRUCTION,
*         DEPENDING UPON THE VALUE OF THE OPERAND.
* 
*         LDK    K
* 
*         ENTRY  K = CONSTANT TO BE LOADED INTO (A).
* 
*         NOTE   BECAUSE OF THE VARIABILITY OF THE CODE 
*                GENERATED BY THIS MACRO, IT MUST NOT BE
*                CHANGED BY ON-LINE CODE MODIFICATION.
  
  
          PURGMAC  LDK
  
 LDK      MACRO  K
  IF DEF,K,9D 
 .1 SET K 
  IFMI .1,1 
 .1 SET 777777B+.1
  IFLE .1,77B,2 
  LDN .1
  SKIP 4
  IFGE .1,777700B,2 
  LCN 777777B-.1
  SKIP 1
  LDC K 
 LDK      ENDM
 LMK      SPACE  4,15 
***       LMK - LOGICAL MINUS CONSTANT WITH (A).
* 
*         GENERATES EITHER AN *LMC* OR AN *LMN* INSTRUCTION,
*         DEPENDING UPON THE VALUE OF THE OPERAND. IF THE 
*         VALUE OF THE OPERAND REDUCES TO ZERO, NO INSTRUCTION
*         WILL BE GENERATED.
* 
*         LMK    K
* 
*         ENTRY  K = CONSTANT TO BE MINUSED WITH (A). 
* 
*         NOTE   BECAUSE OF THE VARIABILITY OF THE CODE 
*                GENERATED BY THIS MACRO, IT MUST NOT BE
*                CHANGED BY ON-LINE CODE MODIFICATION.
  
  
          PURGMAC LMK 
  
 LMK      MACRO  K
  LOCAL B 
  IF DEF,K,6
B SET K 
  IFPL K,4
  IFLE K,77B,3
  IFNE K,0,3
  LMN K 
  SKIP 1
  LMC K 
 LMK      ENDM
 LPK      SPACE  4,15 
***       LPK - LOGICAL PRODUCT CONSTANT WITH (A).
* 
*         GENERATES EITHER AN *LPC*, *LPN*, OR *SCN* INSTRUCTION, 
*         DEPENDING UPON THE VALUE OF THE OPERAND.  IF THE VALUE
*         OF THE OPERARND REDUCES TO ZERO, NO INSTRUCTION WILL BE 
*         GENERATED.
* 
*         LPK    K
* 
*         ENTRY  K = CONSTANT TO BE *ANDED* WITH (A). 
* 
*         NOTE   BECAUSE OF THE VARIABILITY OF THE CODE 
*                GENERATED BY THIS MACRO, IT MUST NOT BE
*                CHANGED BY ON-LINE CODE MODIFICATION.
  
  
          PURGMAC LPK 
  
 LPK      MACRO  K
  IF DEF,K,10D
 .1 SET K 
  IFMI .1,1 
 .1 SET 777777B+.1
  IFLE .1,77B,2 
  LPN .1
  SKIP 5
  IFGE .1,777700B,3 
  IFNE .1,777777B,1 
  SCN 777777B-.1
  SKIP 1
  LPC K 
 LPK      ENDM
 MDIN     SPACE  4,20 
***       MDIN - MODIFY INSTRUCTIONS FROM REMOTE LIST.
* 
*         MDIN   BN 
* 
*         ENTRY  *BN* = NAME OF REMOTE BLOCK. 
*                    = *SRMT* IF NOT SPECIFIED. 
* 
*         EXIT   (A) = 0. 
* 
*         USES   T0 - T2. 
* 
*         FORMAT OF REMOTE BLOCK SEGMENT =
* 
*                VFD    12  / BYTE COUNT (N). 
*                VFD    12  / LOCATION FOR CODE.
*                VFD    N*12/ (N) BYTES OF CODE.
  
  
          PURGMAC  MDIN 
  
 MDIN     MACRO  BN 
  LOCAL L1,L2,L3
  MACREF MDIN 
  IFC EQ,*BN**,2
TN MICRO 1,4, SRMT
  ELSE 1
TN MICRO 1,, BN 
  LDC "TN"-1
  STD T1
  UJN L3
  
L1 STD T0 
  AOD T1
  LDI T1
  STD T2
L2 AOD T1 
  LDI T1
  STI T2
  AOD T2
  SOD T0
  NJN L2
L3 AOD T1 
  LDI T1
  NJN L1
 MDIN     ENDM
 MJP      SPACE  4,15 
***       MJP - CONDITIONAL NEGATIVE SHORT OR LONG JUMP.
* 
*         GENERATES EITHER AN *MJN* OR THE EQUIVALENT LONG JUMP 
*         SERIES, DEPENDING UPON THE VALUE OF THE ADDRESS FIELD,
*         AND UPON WHETHER THE ADDRESS HAS OR HAS NOT YET BEEN
*         DEFINED.
* 
*         MJP    ADDR 
* 
*         ENTRY  ADDR = BRANCH ADDRESS. 
* 
*         NOTE   DISCRETION SHOULD BE EXERCISED IN THE USE OF 
*                THIS MACRO AS IT WILL ALWAYS GENERATE A LONG 
*                JUMP SEQUENCE WHEN BRANCHING FORWARD.
  
  
          PURGMAC  MJP
  
 MJP      MACRO  A
.J IF DEF,A 
.J IFLE *-A,37B 
.J IFPL *-A 
  MJN A 
.J ELSE 
  PJN *+3 
  LJM A 
.J ENDIF
 MJP      ENDM
 MONITOR  SPACE  4,10 
***       MONITOR - REQUEST MONITOR FUNCTION. 
* 
* 
*         MONITOR FUNCTION
*         ENTRY  (FUNCTION) = MONITOR FUNCTION TO PERFORM.
*                PARAMETERS PRESTORED IN (CM+1 - CM+4). 
*         EXIT   NONE.
*         CALLS  FTN. 
  
  
          PURGMAC  MONITOR
  
 MONITOR  MACRO  F
  MACREF MONITOR
.A IFLT F,100B
  LDN F 
.A ELSE 
  LDC F 
.A ENDIF
  RJP FTN 
  ENDM
 NFA      SPACE  4,25 
***       NFA - NEGATIVE FL ACCESS. 
*         THIS MACRO SHOULD BE USED BY PP PROGRAMS WHEN 
*         ACCESSING NEGATIVE FL.
* 
*         NFA    ADDR,CON 
* 
*         ENTRY  ADDR = RELATIVE ADDRESS OF NEGATIVE FL LOCATION. 
*                CON    IF PRESENT, (ADDR) CONTAINS RELATIVE
*                       ADDRESS OF NEGATIVE FL LOCATION.
*                (RA) = REFERENCE ADDRESS.
* 
*         EXIT   (A) = ABSOLUTE ADDRESS.
* 
*         THE FOLLOWING ADDRESSING CONVENTION IS TO BE FOLLOWED WHEN
*         USING THIS MACRO WITH ADDR OF THE FORM (TAG+VAL) OR 
*         (TAG-VAL).
* 
*         ABSOLUTE    NFA MACRO        ADDRESS
*         ADDRESS     ADDR FIELD       DESCRIPTION
* 
*         RA-TAG-N    TAG-N            N WORDS BEFORE TAG IN NFL
*         RA-TAG      TAG              LOCATION TAG IN NFL
*         RA-TAG+N    TAG+N            N WORDS AFTER TAG IN NFL 
* 
*         IF SYMBOL *PCP$* IS DEFINED, THE NFA MACRO MAY BE USED TO 
*         ACCESS THE NFL OF A PCP JOB.  IN THIS CASE, THE *NFA* MACRO 
*         CALLS THE *AJFL* MACRO TO ENSURE THAT CELL *RA* IS SET TO THE 
*         PCP-S RA PRIOR TO ITS USE BY THE *NFA* MACRO.  THIS REQUIRES
*         THAT COMMON DECK *COMSPCP* BE CALLED PRIOR TO THIS POINT, 
*         WITH SYMBOL *AJF$* DEFINED. 
  
          PURGMAC  NFA
  
 NFA  MACRO  A,R
  MACREF NFA
.P IF DEF,PCP$
  AJFL RA 
.P ELSE 
  LDD RA
.P ENDIF
  SHN 6 
.A IFC EQ,$R$$
  ADK -A
.A ELSE 
.C IFLT A,100B
  SBD A 
.C ELSE 
  SBM A 
.C ENDIF
.A ENDIF
  ENDM
 NJP      SPACE  4,15 
***       NJP - CONDITIONAL NONZERO SHORT OR LONG JUMP. 
* 
*         GENERATES EITHER AN *NJN* OR THE EQUIVALENT LONG JUMP 
*         SERIES, DEPENDING UPON THE VALUE OF THE ADDRESS FIELD,
*         AND UPON WHETHER THE ADDRESS HAS OR HAS NOT YET BEEN
*         DEFINED.
* 
*         NJP    ADDR 
* 
*         ENTRY  ADDR = BRANCH ADDRESS. 
* 
*         NOTE   DISCRETION SHOULD BE EXERCISED IN THE USE OF 
*                THIS MACRO AS IT WILL ALWAYS GENERATE A LONG 
*                JUMP SEQUENCE WHEN BRANCHING FORWARD.
  
  
          PURGMAC  NJP
  
 NJP      MACRO A 
.J IF DEF,A 
.J IFLE *-A,37B 
.J IFPL *-A 
  NJN A 
.J ELSE 
  ZJN *+3 
  LJM A 
.J ENDIF
 NJP      ENDM
 OVERFLOW SPACE  4,30 
***       OVERFLOW - TEST FOR PP MEMORY OVERFLOW. 
* 
*         THIS MACRO IS INTENDED TO TEST FOR PP MEMORY OVERFLOW WHEN
*         LOADING OVERLAYS FROM MASS STORAGE.  THIS MACRO SHOULD
*         BE PLACED AT THE END OF THE OVERLAY BEING TESTED. 
*         THIS MACRO ASSUMES THE OVERLAY IS LOADED BY *PPR/PLL* 
*         WHICH WILL NOT READ AN EMPTY END OF RECORD AT THE END 
*         OF THE OVERLAY. 
* 
*         OVERFLOW ORIGIN,END,CMR 
*         ENTRY  ORIGIN = ORIGIN ADDRESS OF OVERLAY.  *PPFW* IS 
*                   ASSUMED IF NO PARAMETER IS ENTERED. 
*                END = ADDRESS THAT IS NOT TO BE DESTROYED.  (I.E.
*                   LWA+1 OF AREA BEING LOADED INTO.)  10000B (END OF 
*                   PP MEMORY) IS ASSUMED IF NO PARAMETER IS ENTERED. 
*                CMR = RESIDENCY STATUS.
*                      *CMR* = OVERLAY MUST BE CENTRAL MEMORY RESIDENT. 
*                      DEFAULT IS MASS STORAGE RESIDENT.
* 
*         FOUR *ERRNG* PSEUDO OPS ARE USED TO INDICATE THE SPACE LEFT 
*         AND THE SIZE OF THE OVERLAY.
*                *BYTES LEFT AFTER LAST SECTOR* = THE NUMBER OF BYTES 
*                   BETWEEN THE LAST BYTE OF THE LAST SECTOR READ IN
*                   AND *END*.  THE ORIGIN ADDRESS OF THE OVERLAY CAN 
*                   BE INCREASED BY THIS AMOUNT WITHOUT CAUSING OVER- 
*                   FLOW.  IF THIS IS LESS THAN 500 THE OVERLAY SIZE
*                   CANNOT BE INCREASED BY SO MUCH THAT ANOTHER SECTOR
*                   IS REQUIRED.
*                *BYTES LEFT IN LAST SECTOR* = THE NUMBER OF BYTES
*                   THAT CAN BE ADDED TO THE OVERLAY WITHOUT REQUIR-
*                   ING ANOTHER SECTOR. 
*                *BYTES CAN BE ADDED TO OVERLAY* = THE MAXIMUM NUMBER 
*                   OF BYTES THAT CAN BE ADDED TO THIS OVERLAY (ASSUM-
*                   ING THE ORG ADDRESS DOES NOT CHANGE) WITHOUT CAUS-
*                   ING OVERFLOW. 
*                *SECTORS NEEDED FOR OVERLAY* = THE NUMBER OF SECTORS 
*                   THAT WILL BE READ INTO THE PP WHEN THE OVERLAY IS 
*                   LOADED FROM MASS STORAGE. 
* 
*         NOTE.  THIS MACRO USES A *USE OVERFLOW* PSEUDO OP TO FORCE
*                THE LITERALS BLOCK TO BE DEFINED.  IF THE PROGRAM HAS
*                A USE BLOCK CALLED *OVERFLOW* THE TEST WILL BE 
*                INCORRECT. 
  
  
          PURGMAC  OVERFLOW 
  
 OVERFLOW MACRO  O,E,C
  MACREF OVERFLOW 
  NOREF .1,.2,.3,.4 
  USE OVERFLOW
.1 SET O PPFW 
.2 SET E 10000B 
.A IFC EQ,/C//
.3 SET *-.1+5+477B
.A ELSE 
.3 SET *-.1+5+4 
.A ENDIF
.4 SET .2-.1+5
.A IFC EQ,/C//
          LIST   M
  
          ERRNG  .2-.1+5-.3/500B*500B   BYTES LEFT AFTER LAST SECTOR
          ERRNG  .3/500B*500B-*+.1-5    BYTES LEFT IN LAST SECTOR 
          ERRNG  .4/500B*500B-*+.1-5    BYTES CAN BE ADDED TO OVERLAY 
          ERRNG  .3/500B                SECTORS NEEDED FOR OVERLAY
  
          LIST   *
.A ELSE 
          LIST   M
  
          ERRNG  .2-.1+5-.3/5*5   BYTES LEFT AFTER LAST WORD
          ERRNG  .3/5*5-*+.1-5    BYTES LEFT IN LAST WORD 
          ERRNG  .4/5*5-*+.1-5    BYTES CAN BE ADDED TO OVERLAY 
          ERRNG  .3/5             WORDS NEEDED FOR OVERLAY
  
          LIST   *
.A ENDIF
  USE * 
  ENDM
 PAUSE    SPACE  4,10 
***       PAUSE - PAUSE FOR RELOCATION AND RESET (RA) AND (FL). 
* 
* 
*         PAUSE  ST 
*         ENTRY  ST IF PRESENT INDICATES CM - CM+4 NEED NOT BE STSW 
*                UPON EXIT FROM PAUSE.
*         CALLS  FTN. 
  
  
          PURGMAC  PAUSE
  
 PAUSE    MACRO  ST 
  MACREF PAUSE
  MONITOR 0 
  IFC EQ,*ST**,3
  LDD CP
  ADN STSW
  CRD CM
  ENDM
 PJP      SPACE  4,15 
***       PJP - CONDITIONAL POSITIVE SHORT OR LONG JUMP.
* 
*         GENERATES EITHER A *PJN* OR THE EQUIVALENT LONG JUMP
*         SERIES, DEPENDING UPON THE VALUE OF THE ADDRESS FIELD,
*         AND UPON WHETHER THE ADDRESS HAS OR HAS NOT YET BEEN
*         DEFINED.
* 
*         PJP    ADDR 
* 
*         ENTRY  ADDR = BRANCH ADDRESS. 
* 
*         NOTE   DISCRETION SHOULD BE EXERCISED IN THE USE OF 
*                THIS MACRO AS IT WILL ALWAYS GENERATE A LONG 
*                JUMP SEQUENCE WHEN BRANCHING FORWARD.
  
  
          PURGMAC  PJP
  
 PJP      MACRO  A
.J IF DEF,A 
.J IFLE *-A,37B 
.J IFPL *-A 
  PJN A 
.J ELSE 
  MJN *+3 
  LJM A 
.J ENDIF
 PJP      ENDM
 RCHAN    SPACE  4,10 
***       RCHAN - REQUEST CHANNEL.
* 
* 
*         RCHAN 
*         ENTRY  (A) = CHANNEL NUMBER.
  
  
          PURGMAC  RCHAN
  
 RCHAN    MACRO  CH 
  MACREF RCHAN
  STD CM+1
  STD CM+2
  MONITOR RCHM
  ENDM
 SBK      SPACE  4,15 
***       SBK - SUBTRACT CONSTANT FROM (A). 
* 
*         GENERATES EITHER AN *ADC*, *SBN*, OR *ADN* INSTRUCTION, 
*         DEPENDING UPON THE VALUE OF THE OPERAND.  IF THE VALUE
*         OF THE OPERAND REDUCES TO ZERO, NO INSTRUCTION WILL BE
*         GENERATED.
* 
*         SBK    K
* 
*         ENTRY  K = CONSTANT TO BE SUBTRACTED FROM (A).
* 
*         NOTE   BECAUSE OF THE VARIABILITY OF THE CODE 
*                GENERATED BY THIS MACRO, IT MUST NOT BE
*                CHANGED BY ON-LINE CODE MODIFICATION.
  
  
          PURGMAC  SBK
  
 SBK      MACRO  K
  LOCAL B 
  IF DEF,K,3
.1 SET K
  ADK -.1 
  SKIP 8D 
B MICRO 1,, "QUAL"
  RMT 
  QUAL "B"
B EQU K 
  QUAL *
  RMT 
.1 MICRO 1,,*B* 
  ADC -".1" 
 SBK      ENDM
 SETMS    SPACE  4,30 
***       SETMS - SELECT MASS STORAGE PROCESSING DRIVER AND OPTIONS.
* 
*         THE *SETMS* MACRO LOADS A MASS STORAGE DRIVER APPROPRIATE 
*         FOR THE OPERATION TO BE PERFORMED AND SELECTS THE DESIRED 
*         ERROR PROCESSING OPTIONS.  THE DRIVER INTERFACE IS FULLY
*         DOCUMENTED IN *PPR*.
* 
* 
*         SETMS  OP,(EP1,EP2,... ,EPN),AD 
* 
*         OP     OPERATION TO PERFORM.
*                IO      = NORMAL I/O OPERATION SELECTION.
*                PIO     = PRIVILEGED I/O.  DRIVER NAME IS FORCED 
*                          TO *6DI* FOR 7155-TYPE BUFFERED DEVICES. 
*                READSTR = READ STREAM DEVICE.  THIS OPTION APPLIES TO
*                          BUFFERED DEVICES ONLY. 
*                READSYS = READ SYSTEM FILE.  THE EST ORDINAL MAY BE
*                          RESET BY *MTR* TO A BETTER DEVICE.  THIS 
*                          OPERATION TYPE IMPLIES SELECTION OF THE
*                          *EPNS* ERROR PROCESSING OPTION IN THAT *MTR* 
*                          WILL NOT RETURN THE *LNRE* ERROR FLAG FOR AN 
*                          OFF OR SUSPECT DEVICE IF THE *READSYS* 
*                          OPERATION TYPE IS IN EFFECT. 
*                STATUS  = RETURN LOGICAL STATUS.  THE NORMAL *SETMS* 
*                          RETURN PARAMETERS ARE SET BUT THE DRIVER IS
*                          NOT RELOADED.
*                NODRIVER= THE CURRENT DRIVER IS INVALIDATED SUCH THAT
*                          THE NEXT SETMS WILL LOAD A NEW DRIVER. 
*                POSITION= CELL *DRSW* IS CLEARED SO THAT A SEEK WILL 
*                          BE PERFORMED THE NEXT TIME THE DRIVER IS 
*                          CALLED.
* 
*         EPX    ERROR PROCESSING OPTIONS.
*                AD = ALLOW ACCESS OF *DOWN* DEVICE.
*                AR = RETURN TO THE CALLER IMMEDIATELY FOR ANY TYPE 
*                     OF ERROR. 
*                DE = DISABLE *ENDMS*.
*                DF = DISABLE FAILURE EVALUATION.  THE DEVICE WILL NOT
*                     BE FLAGGED AS SUSPECT NOR WILL A TRACK BE SET IN
*                     THE MST WHEN A MEDIA ERROR OCCURS.
*                ER = RETURN TO CALLER FOR NORMAL ERROR CONDITIONS. 
*                     NORMAL ERRORS ARE THOSE NOT INCLUDED AMOUNG 
*                     RESERVE ERROR TYPES.
*                ND = NO LEVEL 1 DIAGNOSTICS SHOULD BE RUN
*                     (ISD DEVICES ONLY). 
*                NF = NO FLUSH OF EXTENDED MEMORY BUFFER ON *WLSF*
*                     FUNCTION (BUFFERED DEVICES ONLY). 
*                NR = IMMEDIATE RETURN ON *DEVICE NOT READY* CONDITION. 
*                NS = IGNORE DEVICE STATE.  THIS OPTION IS USED BY PP 
*                     PROGRAMS ATTEMPT TO ACCESS A DEVICE REGARDLESS OF 
*                     ITS LOGICAL STATUS. 
*                RR = IMMEDIATE RETURN ON RESERVE ERRORS. 
*                RW = REWRITE DATA OPERATION, RECOPY OF EXISTING DATA 
*                     (BUFFERED DEVICES ONLY).
*                SM = DISALLOW *1DD* LOAD INTO THIS PP. 
* 
*         AD     ADDRESS OF WRITE ERROR PROCESSING BUFFER 
* 
*         THIS MACRO MAY BE CALLED FOR CROSS REFERENCE PURPOSES 
*         WITHOUT GENERATING CODE VIA THE FOLLOWING FORMAT -
* 
*                SETMS   =,OP,(EP1,EP2,...,EPN),AD
* 
*         NOTE - THIS MACRO IS THE ONLY SUPPORTED INTERFACE TO THE
*         *.SMS* PPR ENTRY POINT.  THE VALUE OF THIS SYMBOL IS
*         DEFINED IN *COMSMSP* AND *PPCOM*. 
  
  
          PURGMAC  SETMS
  
 SETMS    MACRO  O,E,A
  MACREF SETMS
  IFC EQ,*O*PREAD*,1
  SKIP 1
.1 IFC EQ,*O*PWRITE*
.2 IF DEF,REL=
.2 IFEQ REL=,1
  LDD LA
  ADC *+5 
.2 ELSE 
  LDC *+5 
.2 ENDIF
  STP .SMSB 
  LDC 2RDI
.1 ENDIF
  NOREF .1,.2,.3,.4 
.1 IFC NE,*O*=* 
  IFC EQ,*O*POSITION*,3 
  LDN 0 
  STI D1
.1 SKIP 
  IFC EQ,*O*NODRIVER*,3 
  LDN 0 
  STP MSD 
.1 SKIP 
.2 SET 0
.3 SET 10 
  ECHO ,SO=(IO,PIO,PIOCH,READSYS,READSTR,STATUS,IOCH) 
.2 SET .2+1 
.4 IFC EQ,$SO$O$
._O EQU .2-1
.3 SET ._O
  STOPDUP 
.4 ENDIF
  ENDD
.4 IFEQ .3,10 
  ERR ILLEGAL SETMS OPTION - O
.4 ELSE 
  IRP E 
.3 SET .3+EP_E*10B
  IRP 
  IFC NE,*A**,3 
.3 SET .3+400000B 
  LDC A 
  STP WDSE
  LDK .3
  RJP .SMS
.4 ENDIF
.1 ENDIF
  ENDM
 SFA      SPACE  4,25 
***       SFA - CALCULATE FIRST WORD ADDRESS IN MANAGED TABLE.
* 
*         GIVEN AN ORDINAL IN A MANAGED TABLE (CLT, EJT, EST, SYSTEM
*         FNT OR QFT), THE *SFA* MACRO CALCULATES THE TABLE ADDRSS OF 
*         THE FIRST WORD OF THE ENTRY BY CALLING THE APPROPRIATE
*         PROCESSOR IN THE COMMON DECK *COMPGFP*.  IN THE CASE OF THE 
*         EST, THE *PPR* ROUTINE IS NORMALLY USED.
* 
*         SFA    TABLE,ORD
* 
*         ENTRY  TABLE = MANAGED TABLE MNEMONIC.
*                      CLT = COMMON LIBRARIES TABLE.
*                      EJT = EXECUTING JOB TABLE. 
*                      EST = EQUIPMENT STATUS TABLE.
*                      FNT = SYSTEM FNT TABLE.
*                      JCB = JOB CONTROL BLOCK TABLE. 
*                      QFT = QUEUE FILE TABLE.
*                      ORT = OPTICAL DISK REQUEST TABLE.
*                ORD = OPTIONAL DIRECT CELL OR MEMORY LOCATION
*                      CONTAINING TABLE ORDINAL.
*                (A) = TABLE ORDINAL, IF *ORD* NOT SPECIFIED. 
* 
*         EXIT   (A) = ABSOLUTE ADDRESS OF TABLE ENTRY. 
* 
*         CALLS  .CLT, .EJT, .EST, .FNT, .JCB, .QFT, .ORT.
  
  
          PURGMAC  SFA
  
 SFA      MACRO  T,R
  MACREF SFA
.1 SET 0
.A ECHO ,TB=(CLT,EJT,EST,FNT,JCB,QFT,ORT) 
.B IFC EQ,$TB$T$
.1 SET 1
  STOPDUP 
.B ENDIF
.A ENDD 
.A IFEQ .1,1
.B IFC NE,$R$$
.C IFLT R,100B
  LDD R 
.C ELSE 
  LDM R 
.C ENDIF
.B ENDIF
.B IFC NE,/T/EST/ 
  RJM .T
.B ELSE 
  RJP .T
.B ENDIF
.A ELSE 
  ERR ILLEGAL TABLE TYPE - T
.A ENDIF
 SFA      ENDM
 SHK      SPACE  4,15 
***       SHK - CONDITIONALLY GENERATE SHIFT INSTRUCTION. 
* 
*         GENERATES A *SHN* INSTRUCTION IF THE VALUE
*         OF THE OPERAND IS NON-ZERO. 
* 
*         SHK    K
* 
*         ENTRY  K = SHIFT COUNT. 
* 
*         NOTE   BECAUSE OF THE VARIABILITY OF THE CODE 
*                GENERATED BY THIS MACRO, IT MUST NOT BE
*                CHANGED BY ON-LINE CODE MODIFICATION.
  
  
          PURGMAC SHK 
  
 SHK      MACRO  K
  IFNE K,0,1
  SHN K 
 SHK      ENDM
 SUBR     SPACE  4,10 
***       SUBR - DEFINE SUBROUTINE ENTRY/EXIT LINE. 
* 
* 
*NAME     SUBR   RTN
*         DECLARE *NAME* TO BE THE ENTRY POINT TO A PP SUBROUTINE.
*         THIS SUBROUTINE IS ENTERED VIA RETURN JUMP TO *NAME*. 
*         *RTN* = OPTIONAL RETURN IF NOT ENTERED VIA RETURN JUMP. 
* 
*         THE FOLLOWING CODE IS GENERATED - 
*NAMEX    LJM    RTN         OR 
*NAMEX    LJM    *
*NAME     EQU    *-1
  
  
          PURGMAC  SUBR 
  
          MACRO  SUBR,A,B 
          IFC    EQ,$B$$,2
 A_X      LJP    *
          ELSE   1
 A_X      LJP    B
A EQU *-1 
  ENDM
 TADC     SPACE  4,10 
***       TADC - RELOCATABLE *ADC* INSTRUCTION. 
* 
*         ASSEMBLES AN *ADC* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TADC   C,R
* 
*         ENTRY  C = CONSTANT TO BE ASSEMBLED INTO *ADC* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *C* BY *COMPSIC*.
  
  
          PURGMAC  TADC 
  
 TADC     MACRO  C,R
          LOCAL  A
 A        EQU    *
          ADC    C
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TADC     ENDM
 TADM     SPACE  4,10 
***       TADM - RELOCATABLE *ADM* INSTRUCTION. 
* 
*         ASSEMBLES AN *ADM* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TADM   M,D,R
* 
*         ENTRY  M = CONSTANT TO BE ASSEMBLED INTO *ADM* INSTRUCTION. 
*                D = DIRECT CELL. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *M* BY *COMPSIC*.
  
  
          PURGMAC  TADM 
  
 TADM     MACRO  M,D,R
          LOCAL  A
 A        EQU    *
          IFC    EQ,$D$$,1
          ADM    M
          ELSE   1
          ADM    M,D
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TADM     ENDM
 TADN     SPACE  4,10 
***       TADN - RELOCATABLE *ADN* INSTRUCTION. 
* 
*         ASSEMBLES AN *ADN* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TADN   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *ADN* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TADN 
  
 TADN     MACRO  N,R
          LOCAL  A
 A        EQU    *-1
          ADN    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TADN     ENDM
 TAOM     SPACE  4,10 
***       TAOM - RELOCATABLE *AOM* INSTRUCTION. 
* 
*         ASSEMBLES AN *AOM* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TAOM   M,D,R
* 
*         ENTRY  M = CONSTANT TO BE ASSEMBLED INTO *AOM* INSTRUCTION. 
*                D = DIRECT CELL. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *M* BY *COMPSIC*.
  
  
          PURGMAC  TAOM 
  
 TAOM     MACRO  M,D,R
          LOCAL  A
 A        EQU    *
          IFC    EQ,$D$$,1
          AOM    M
          ELSE   1
          AOM    M,D
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TAOM     ENDM
 TLCN     SPACE  4,10 
***       TLCN - RELOCATABLE *LCN* INSTRUCTION. 
* 
*         ASSEMBLES AN *LCN* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLCN   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *LCN* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TLCN 
  
 TLCN     MACRO  N,R
          LOCAL  A
 A        EQU    *-1
          LCN    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLCN     ENDM
 TLDC     SPACE  4,10 
***       TLDC - RELOCATABLE *LDC* INSTRUCTION. 
* 
*         ASSEMBLES AN *LDC* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLDC   C,R
* 
*         ENTRY  C = CONSTANT TO BE ASSEMBLED INTO *LDC* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *C* BY *COMPSIC*.
  
  
          PURGMAC  TLDC 
  
 TLDC     MACRO  C,R
          LOCAL  A
 A        EQU    *
          LDC    C
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLDC     ENDM
 TLDM     SPACE  4,10 
***       TLDM - RELOCATABLE *LDM* INSTRUCTION. 
* 
*         ASSEMBLES AN *LDM* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLDM   M,D,R
* 
*         ENTRY  M = CONSTANT TO BE ASSEMBLED INTO *LDM* INSTRUCTION. 
*                D = DIRECT CELL. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *M* BY *COMPSIC*.
  
  
          PURGMAC  TLDM 
  
 TLDM     MACRO  M,D,R
          LOCAL  A
 A        EQU    *
          IFC    EQ,$D$$,1
          LDM    M
          ELSE   1
          LDM    M,D
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLDM     ENDM
 TLDN     SPACE  4,10 
***       TLDN - RELOCATABLE *LDN* INSTRUCTION. 
* 
*         ASSEMBLES AN *LDN* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLDN   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *LDN* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TLDN 
  
 TLDN     MACRO  N,R
          LOCAL  A
 A        EQU    *-1
          LDN    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLDN     ENDM
 TLMC     SPACE  4,10 
***       TLMC - RELOCATABLE *LMC* INSTRUCTION. 
* 
*         ASSEBLES AN *LMC* INSTRUCTION AND INFORMATION TO ALLOW THE
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLMC   C,R
* 
*         ENTRY  C = CONSTANT TO BE ASSEMBLED INTO *LMC* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *C* BY *COMPSIC*.
  
  
          PURGMAC  TLMC 
  
 TLMC     MACRO  C,R
          LOCAL  A
 A        EQU    *
          LMC    C
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLMC     ENDM
 TLMM     SPACE  4,10 
***       TLMM - RELOCATABLE *LMM* INSTRUCTION. 
* 
*         ASSEMBLES AN *LMM* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLMM   M,D,R
* 
*         ENTRY  M = CONSTANT TO BE ASSEMBLED INTO *LMM* INSTRUCTION. 
*                D = DIRECT CELL. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *M* BY *COMPSIC*.
  
  
          PURGMAC  TLMM 
  
 TLMM     MACRO  M,D,R
          LOCAL  A
 A        EQU    *
          IFC    EQ,$D$$,1
          LMM    M
          ELSE   1
          LMM    M,D
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLMM     ENDM
 TLMN     SPACE  4,10 
***       TLMN - RELOCATABLE *LMN* INSTRUCTION. 
* 
*         ASSEMBLES AN *LMN* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLMN   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *LMN* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TLMN 
  
 TLMN     MACRO  N,R
          LOCAL  A
 A        EQU    *-1
          LMN    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLMN     ENDM
 TLPC     SPACE  4,10 
***       TLPC - RELOCATABLE *LPC* INSTRUCTION. 
* 
*         ASSEMBLES AN *LPC* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLPC   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *LPC* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TLPC 
  
 TLPC     MACRO  N,R
          LOCAL  A
 A        EQU    *
          LPC    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLPC     ENDM
 TLPN     SPACE  4,10 
***       TLPN - RELOCATABLE *LPN* INSTRUCTION. 
* 
*         ASSEMBLES AN *LPN* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TLPN   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *LPN* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TLPN 
  
 TLPN     MACRO  N,R
          LOCAL  A
 A        EQU    *-1
          LPN    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TLPN     ENDM
 TRAM     SPACE  4,10 
***       TRAM - RELOCATABLE *RAM* INSTRUCTION. 
* 
*         ASSEMBLES AN *RAM* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TRAM   M,D,R
* 
*         ENTRY  M = CONSTANT TO BE ASSEMBLED INTO *RAM* INSTRUCTION. 
*                D = DIRECT CELL. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *M* BY *COMPSIC*.
  
  
          PURGMAC  TRAM 
  
 TRAM     MACRO  M,D,R
          LOCAL  A
 A        EQU    *
          IFC    EQ,$D$$,1
          RAM    M
          ELSE   1
          RAM    M,D
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TRAM     ENDM
 TSBM     SPACE  4,10 
***       TSBM - RELOCATABLE *SBM* INSTRUCTION. 
* 
*         ASSEMBLES AN *SBM* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TSBM   M,D,R
* 
*         ENTRY  M = CONSTANT TO BE ASSEMBLED INTO *SBM* INSTRUCTION. 
*                D = DIRECT CELL. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *M* BY *COMPSIC*.
  
  
          PURGMAC  TSBM 
  
 TSBM     MACRO  M,D,R
          LOCAL  A
 A        EQU    *
          IFC    EQ,$D$$,1
          SBM    M
          ELSE   1
          SBM    M,D
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TSBM     ENDM
 TSBN     SPACE  4,10 
***       TSBN - RELOCATABLE *SBN* INSTRUCTION. 
* 
*         ASSEMBLES AN *SBN* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TSBN   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *SBN* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TSBN 
  
 TSBN     MACRO  N,R
          LOCAL  A
 A        EQU    *-1
          SBN    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TSBN     ENDM
 TSCN     SPACE  4,10 
***       TSCN - RELOCATABLE *SCN* INSTRUCTION. 
* 
*         ASSEMBLES AN *SCN* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TSCN   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *SCN* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TSCN 
  
 TSCN     MACRO  N,R
          LOCAL  A
 A        EQU    *-1
          SCN    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TSCN     ENDM
 TSHN     ENDM
***       TSHN - RELOCATABLE *SHN* INSTRUCTION. 
* 
*         ASSEMBLES AN *SHN* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TSHN   N,R
* 
*         ENTRY  N = CONSTANT TO BE ASSEMBLED INTO *SHN* INSTRUCTION. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *N* BY *COMPSIC*.
  
  
          PURGMAC  TSHN 
  
 TSHN     MACRO  N,R
          LOCAL  A
 A        EQU    *-1
          SHN    N
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TSHN     ENDM
 TSOM     SPACE  4,10 
***       TSOM - RELOCATABLE *SOM* INSTRUCTION. 
* 
*         ASSEMBLES AN *SOM* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TSOM   M,D,R
* 
*         ENTRY  M = CONSTANT TO BE ASSEMBLED INTO *SOM* INSTRUCTION. 
*                D = DIRECT CELL. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *M* BY *COMPSIC*.
  
  
          PURGMAC  TSOM 
  
 TSOM     MACRO  M,D,R
          LOCAL  A
 A        EQU    *
          IFC    EQ,$D$$,1
          SOM    M
          ELSE   1
          SOM    M,D
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TSOM     ENDM
 TSTM     SPACE  4,10 
***       TSTM - RELOCATABLE *STM* INSTRUCTION. 
* 
*         ASSEMBLES AN *STM* INSTRUCTION AND INFORMATION TO ALLOW THE 
*         CONSTANT VALUE TO BE MODIFIED BY *COMPSIC*. 
* 
*         TSTM   M,D,R
* 
*         ENTRY  M = CONSTANT TO BE ASSEMBLED INTO *STM* INSTRUCTION. 
*                D = DIRECT CELL. 
*                R = ADDRESS OF VALUE TO BE ADDED TO *M* BY *COMPSIC*.
  
  
          PURGMAC  TSTM 
  
 TSTM     MACRO  M,D,R
          LOCAL  A
 A        EQU    *
          IFC    EQ,$D$$,1
          STM    M
          ELSE   1
          STM    M,D
 SIC      RMT 
          CON    A
          CON    R
 SIC      RMT 
 TSTM     ENDM
 UJP      SPACE  4,15 
***       UJP - UNCONDITIONAL SHORT OR LONG JUMP. 
* 
*         GENERATES EITHER A *UJN* OR AN *LJM* INSTRUCTION, 
*         DEPENDING UPON THE VALUE OF THE ADDRESS FIELD,
*         AND UPON WHETHER THE ADDRESS HAS OR HAS NOT YET 
*         BEEN DEFINED. 
* 
*         UJP    ADDR 
* 
*         ENTRY  ADDR = BRANCH ADDRESS. 
* 
*         NOTE   DISCRETION SHOULD BE EXERCISED IN THE USE OF 
*                THIS MACRO AS IT WILL ALWAYS GENERATE A LONG 
*                JUMP SEQUENCE WHEN BRANCHING FORWARD.
  
  
          PURGMAC  UJP
  
 UJP      MACRO  A
.J IF DEF,A 
.J IFLE *-A,37B 
.J IFPL *-A 
  UJN A 
.J ELSE 
  LJM A 
.J ENDIF
 UJP      ENDM
 ZJP      SPACE  4,15 
***       ZJP - CONDITIONAL ZERO SHORT OR LONG JUMP.
* 
*         GENERATES EITHER A *ZJN* OR THE EQUIVALENT LONG JUMP
*         SERIES, DEPENDING UPON THE VALUE OF THE ADDRESS FIELD,
*         AND UPON WHETHER THE ADDRESS HAS OR HAS NOT YET BEEN
*         DEFINED.
* 
*         ZJP    ADDR 
* 
*         ENTRY  ADDR = BRANCH ADDRESS. 
* 
*         NOTE   DISCRETION SHOULD BE EXERCISED IN THE USE OF 
*                THIS MACRO AS IT WILL ALWAYS GENERATE A LONG 
*                JUMP SEQUENCE WHEN BRANCHING FORWARD.
  
  
          PURGMAC  ZJP
  
 ZJP      MACRO  A
.J IF DEF,A 
.J IFLE *-A,37B 
.J IFPL *-A 
  ZJN A 
.J ELSE 
  NJN *+3 
  LJM A 
.J ENDIF
 ZJP      ENDM
 .1       SPACE  4,10 
**        .1 - GENERATE BIT CONSTANT. 
* 
* 
*         .1     (P1,P2,...,PN) 
*         ENTRY  (PN) = BIT CONSTANT TO SET.
  
  
          PURGMAC  .1 
  
 .1       MACRO  P
.1 SET 0
  IRP P 
.2 DECMIC P 
.1 SET .1+1S".2"
  IRP 
  ENDM
 BITCON   SPACE  4,10 
***       BITCON - SET BIT CONSTANT.
* 
* 
*         BITCON (P1,P2,...,PN) 
*         ENTRY  (PN) = BIT NUMBERS TO SET. 
  
  
          PURGMAC  BITCON 
  
 BITCON   MACRO  P
.1 BITSET (P) 
  CON .1
  ENDM
 INDEX    SPACE  4,30 
***       INDEX - GENERATE INDEXED TABLE. 
* 
* 
*NAME     INDEX  TYPE,ADDRESS 
*         THIS MACRO IS INTENDED TO GENERATE TABLES WHICH ARE INDEXED 
*         BY SYMBOLIC CONSTANTS SUCH AS FILE AND JOB ORIGIN CODES.
*         IT HAS 3 CALLING SEQUENCES. 
*         IF *NAME* IS PRESENT, THE FWA OF THE TABLE IS SET TO *NAME*.
* 
*         IF *ADDRESS* IS MISSING, THE TABLE IS TERMINATED WITH AN
*         *ORG* TO THE END OF THE TABLE.  THIS RESULTS IN ZERO ENTRIES
*         FOR UNDEFINED ENTRIES IN THE TABLE. 
* 
*         OTHERWISE, A TABLE ENTRY IS MADE AT *INDEX* + *TYPE* OF 
*         *ADDRESS*.
* 
*         EXAMPLE - TO GENERATE A TABLE FOR PROCESSING FILE TYPES.
* 
*TFTP     INDEX              BEGIN TABLE
* 
*         INDEX  PRFT,PRP    PROCESS PRINT FILE AT *PRP*
*         INDEX  LOFT,LOP    PROCESS LOCAL FILE AT *LOP*
* 
*         INDEX  MXFT        TERMINATE TABLE AT *TFTP*+*MXFT* 
* 
*         THE CODE PROCESSING THIS TABLE NOTES THAT - 
*         A FILE TYPE \ *MXFT* CANNOT BE PROCESSED, 
*         A TABLE ENTRY = 0, CANNOT BE PROCESSED. 
* 
*         USES   SYMBOL NAME *INDEX*. 
*         CALLS  NONE.
  
  
          PURGMAC  INDEX
  
          MACRO  INDEX,A,B,C
  IFC NE,$A$$ 
A BSS 0 
.2 SET A
  ELSE 5
  ORG .2+B
  IFC NE,$C$$,2 
  LOC B 
  CON C 
  BSS 0 
  ENDM
          ENDX
