COMCMAC 
COMMON
          CTEXT  COMCMAC - CPU SYSTEM MACROS. 
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
          SPACE  4,10 
***       COMCMAC - CPU SYSTEM MACROS.
*         G. R. MANSFIELD.  70/10/23. 
*         K. R. COMBS.      74/02/18. 
          SPACE  4,10 
***              COMCMAC CONTAINS MACROS FOR ACCESSING SYSTEM FUNCTIONS 
*         FOR SYSTEM PROGRAMS.  IN GENERAL, THESE FUNCTIONS ARE 
*         ALLOWED FOR SYSTEM ORIGIN ONLY.  COMMON DECKS FOR PROCESSORS
*         MUST BE CALLED. 
 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
 ACCSF    SPACE  4,20 
***       ACCSF - ATTACH CONTROL STATEMENT FILE.
* 
*         ACCSF  FILE,SAVE,LOCK 
* 
*         ENTRY  *FILE* = ADDRESS OF FET FOR FILE.
*                *SAVE* = IF SPECIFIED IS ADDRESS OF WORD TO
*                RECEIVE POSITION INFORMATION.
*                *LOCK* = IF SPECIFIED, FORCE FILE TO BE LOCKED 
*                         LIBRARY FILE. 
* 
*         EXIT
*T FET+6  60/  CS 
*         CS     CONTROL STATEMENT NUMBER 
* 
*         CALLS  LFM=.
  
  
          PURGMAC ACCSF 
  
 ACCSF    MACRO  F,A,L
  MACREF ACCSF
  R= X2,F 
  R= X6,A 
  IFC NE,$L$$,2 
  MX1 1 
  BX6 X6+X1 
  SA6 F+6 
  SX7 21B 
  RJ =XLFM= 
  ENDM
 ACQUIRE  SPACE  4,10 
***       ACQUIRE - QUEUE ACCESS MACRO. 
* 
*         ACQUIRE ADDR,R
* 
*         ENTRY  ADDR = FWA OF PARAMETER BLOCK. 
*                R = RECALL. (OPTIONAL) 
* 
*         SEE *QAC* DOCUMENTATION FOR PARAMETER BLOCK DESCRIPTION.
  
  
          PURGMAC ACQUIRE 
  
 ACQUIRE  MACRO  A,R
  MACREF ACQUIRE
  SYSTEM QAC,R,A
  ENDM
 ARG      SPACE  4,20 
***       ARG - GENERATE ARGUMENT TABLE ENTRY.
* 
* OP      ARG    ASV,ADDR,ST,WC 
* 
*T        12/OP,18/ASV,9/ST,3/WC,18/ADDR
*         OR
*T        12/77B,18/ASV,9/ST,3/WC,18/ADDR 
*T,       42/OP,18/0
*         77B    TWO-WORD ENTRY TABLE FORMAT IS USED. 
*         OP     ONE TO SEVEN CHARACTER OPTION. 
*         ASV    ADDRESS OF ASSUMED VALUE.
*         ADDR   ADDRESS TO STORE ARGUMENT. 
*         ST     IF  *ST* = 400B, ALOW DISPLAY  *0*.
*         WC     WORD COUNT.  APPROPRIATE IF USING  *COMCARM*.
*                SEE  *COMCARM*  FOR FURTHER EXPLANATION. 
* 
*         IF *OP* IS NULL A ZERO WORD WILL BE GENERATED.
  
  
          PURGMAC ARG 
  
          MACRO  ARG,OP,AS,AD,ST,WC 
  MACREF ARG
 .1       MICRO 1,,*OP* 
 .2       MICCNT .1 
 .3       IFLE .2,2 
 +        VFD 12/0L_OP,18/AS,9/ST,3/WC,18/AD
 .3       ELSE
          IFGT .2,7,1 
          ERR                ARGUMENT TOO LONG
 +        VFD 12/77B,18/AS,9/ST,3/WC,18/AD
          VFD 42/0L_OP,18/0 
 .3       ENDIF 
  ENDM
 BEGINAB  SPACE  4,30 
***       BAB - BEGIN ACCOUNT BLOCK.
* 
*         BEGINAB  ADDR 
* 
*         ENTRY  (IR+3 - IR+4) = ADDRESS OF PARAMETER BLOCK.
* 
*T ADDR   12/M1,12/M2,12/M3,12/M4,12/AD 
*T,       6/ISF,1/PER,1/PPR,2/PCR,26/0,6/A,18/B 
*T,       60/ CHARGE NUMBER 
*T,       60/ PROJECT NUMBER
*T,       60/ PROJECT NUMBER
*T,       60/ ACCOUNT FILE MESSAGE
*T,       60/ ACCOUNT FILE MESSAGE
*T,       60/ ACCOUNT FILE MESSAGE
*T,       60/ ACCOUNT FILE MESSAGE
*T,       60/ ACCOUNT FILE MESSAGE
* 
*                WHERE
*                M1, M2, M3, M4, AD ARE SRU MULTIPLIERS.
*                ISV = INDEX OF SRU VALIDATION LIMIT. 
*                PER = PROJECT EPILOGUE REQUIRED FLAG.
*                PPR = PROJECT PROLOGUE REQUIRED FLAG.
*                PCR = PROLOGUE CHARGE REQUIRED OPTION. 
*                A = 0 IF PROJECT IS FIRST ENTRY IN LEVEL-3 BLOCK.
*                B = PROFILE LEVEL-3 BLOCK RANDOM INDEX.
* 
*         EXIT   .
* 
*         USES   X - 1, 2.
* 
*         CALLS  CPM=.
  
  
          PURGMAC BEGINAB 
  
 BEGINAB  MACRO  A
  MACREF BEGINAB
  R= X1,A 
  SX2 42B 
  RJ =XCPM= 
  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
 CATLIST  SPACE  4,25 
***       CATLIST - LIST PERMANENT FILE CATALOG.
* 
*         CATLIST  F,FN,UN,MO,PN,D,FO,SR
* 
*         ENTRY  F = ADDRESS IF FET (INPUT BUFFER). 
*                FN = SPECIFIC FILE NAME (X1).
*                UN = OPTIONAL USER NUMBER (X3).
*                PN = ADDRESS OF PACKNAME.
*                D = DEVICE TYPE. 
*                MO = REQUEST MODE. 
*                     M = PERMIT INFORMATION REQUEST. 
*                     P = PF CATALOG ADDRESS REQUEST. 
*                FO = FAMILY OPTION.
*                     IP = IGNORE PACKNAME AND USE CURRENT FAMILY.
*                     DF = USE SYSTEM DEFAULT FAMILY (*SSJ=* ONLY). 
*                SR = SPECIAL REQUEST.
*                     IE = IGNORE ERROR IDLE. 
*                     OTHERWISE, IF .NE. 0, CATLIST DEVICE
*                     SPECIFIED IN BITS 12 - 17 OF FET + 11B. 
* 
*         CALLS  PFM=.
  
  
          PURGMAC CATLIST 
  
 CATLIST  MACRO  F,FN,UN,MO,PN,D,FO,SR
  LOCAL AA,I
  MACREF CATLIST
A IFC NE,$FN$$
  IFC NE,$FN$X1$,1
  R= A1,FN
  BX6 X1
A1 IFC NE,$MO$$ 
I SET 0 
  ECHO 4,B=(M,P),C=(1,2)
AX IFC EQ,$B$MO$
  STOPDUP 
I SET C 
AX ENDIF
A2 IFEQ I,0 
  R= A1,MO
A2 ELSE 
  R= X1,I 
A2 ENDIF
  BX6 X6+X1 
A1 ENDIF
  SA6 F+10B 
A ENDIF 
  
.A IFC NE,$SR$$ 
I SET 20000B
.B IFC EQ,$SR$IE$ 
I SET 60000B
.B ENDIF
  SA3 F+10B 
  MX7 54
  LX7 12
  BX3 X7*X3 
  SX6 I 
  BX6 X6+X3 
  SA6 A3
.A ENDIF
  
  IFC NE,$PN$$,3
  R= A3,PN
  BX6 X3
  SA6 F+14B 
  
B IFC NE,$D$$ 
  MX7 12D 
  SA1 D 
  BX6 X7*X1 
  SA2 F+1 
  BX2 -X7*X2
  BX6 X2+X6 
  SA6 A2
  LX1 12D 
  BX6 X7*X1 
  LX6 6 
  SA2 F+14B 
  LX7 12D 
  ZR X6,AA
  SX6 X6-1R0
AA BX2 -X7*X2 
  BX6 X2+X6 
  SA6 A2
B ENDIF 
  
  IFC NE,$UN$$,4
  IFC NE,$UN$X3$,1
  R= A3,UN
  BX6 X3
  SA6 F+11B 
I SET 0 
L IFC NE,$FO$$
  ECHO 3,B=(DF,IP),C=(1000B,2000B)
  IFC EQ,$B$FO$,2 
  STOPDUP 
I SET C 
  IFEQ I,0,1
  ERR - INCORRECT FAMILY OPTION 
L ENDIF 
  SX7 I+4 
  R= X2,F 
  RJ =XPFM= 
  ENDM
 CFAT     SPACE  4,20 
***       CFAT - COUNT FAST ATTACH FILES. 
* 
*         CFAT   ADDR 
* 
*         MUST BE CALLED BY A SPECIAL SYSTEM JOB. 
* 
*         ENTRY  *ADDR* = FET FWA.
* 
*         EXIT   (FET+5) = 36/ 0, 24/ C 
*                     C = (DAF COUNT) - (FAST ATTACH FILE COUNT)
*                         WHERE DAF = DIRECT ACCESS FILE. 
* 
*         USES   X - 2, 7.
* 
*         CALLS  SFM. 
* 
*         XREF   COMSSFM. 
  
  
          PURGMAC  CFAT 
  
 CFAT     MACRO  F
  MACREF CFAT 
  R= X2,F 
  R= X7,CFFF
  RJ =XSFM
  ENDM
 CFORM    SPACE  4,15 
***       CFORM - GENERATE CHARACTER FORMAT DESCRIPTION.
* 
*         CFORM  CI,CL
* 
*T        12/WO,6/CO,6/CL,36/0
*         CI = CHARACTER INDEX RELATIVE TO PLACEMENT BUFFER.
*         CL = NUMBER OF CHARACTERS BEING PLACED (0-10D). 
*         CO = CHARACTER OFFSET FROM WORD POSITION. 
*         WO = WORD OFFSET INTO PLACEMENT BUFFER. 
  
  
          PURGMAC  CFORM
  
 CFORM    MACRO  CI,CL
   LOCAL CE,CO,WO 
CE SET CI 
WO SET CE/10D 
CO SET CE-WO*10D
  ERRPL CL-11D INVALID CHARACTER LENGTH.
  VFD 12D/WO,6/CO,6/CL,36D/0
 CFORM    ENDM
 CHECKPT  SPACE  4,10 
***       CHECKPT - CALL CKP TO CHECKPOINT A JOB. 
* 
*         CHECKPT ADDR,SP 
* 
*         ENTRY  *ADDR* = ADDRESS OF FILE LIST
*                *SP* = 0 IF ALL LOCAL FILES REQUIRED 
*                     " 0 IF ONLY FILES ON LIST REQUIRED
* 
*         CALLS  SYS=.
  
  
          PURGMAC CHECKPT 
  
 CHECKPT  MACRO  A,B
  MACREF CHECKPT
  SA1 A 
  MX2 -1
  BX6 X2*X1 
  SA6 A1
  SX1 A1
  IFC NE,$B$$,2 
  LX2 18D 
  BX1 -X2+X1
  SX2 4RCKPP/16D
  LX2 40D 
  BX6 X2+X1 
  RJ =XSYS= 
  ENDM
 CSET     SPACE  4,15 
***       CSET - SET TERMINAL CHARACTER SET MODE. 
* 
*         CSET   A,C
* 
*         ENTRY  *A* = *ASCII*,  SET EXTENDED CHARACTER SET MODE. 
*                    = *NORMAL*. SET 64 CHARACTER SET MODE. 
*                    = *RESTORE*. SET MODE TO THAT IN EFFECT AT 
*                      TIME OF PROGRAM INITIATION.
* 
*                *C* = CHANGE INITIAL TERMINAL MODE.
* 
*         CALLS  TLX. 
  
  
          PURGMAC CSET
  
 CSET    MACRO  A,C 
  NOREF .1,.2 
  MACREF CSET 
 .1 SET 0 
 .2 SET 0 
  IFC EQ,*A*NORMAL*,2 
 .1 SET 3 
 .2 SET 0 
  IFC EQ,*A*ASCII*,2
 .1 SET 3 
 .2 SET 1 
  IFC EQ,*A*RESTORE*,2
 .1 SET 3 
 .2 SET 2 
  IFC NE,*C**,1 
 .2 SET .2+10B
  IFEQ .1,3 
  IFNE .2,12B 
  TLX .1,.2 
  ELSE
  ERR - INVALID PARAMETER.
  ENDIF 
  ENDM
 DAYFILE  SPACE  4,15 
***       DAYFILE - ACCESS DAYFILE. 
* 
*         DAYFILE FILE,TYPE 
* 
*         ENTRY  *FILE* = ADDRESS OF FET FOR FILE.
*                *TYPE* = DAYFILE TYPE. 
*                TYPE MAY BE DAYFILE, ACCOUNT, ERRLOG, MAINLOG, USER. 
* 
*         CALLS  SFM. 
* 
*         XREF   COMSSFM. 
  
  
          PURGMAC DAYFILE 
  
 DAYFILE  MACRO  F,T
  LOCAL A 
  MACREF DAYFILE
  R= X2,F 
A SET 0 
  ECHO 3,B=(DAYFILE,ACCOUNT,ERRLOG,MAINLOG,USER),C=(AMDF,AAFF,AELF,AMLF,
,AUDF)
  IFC EQ,$B$T$,2
  STOPDUP 
A SET C 
  IFEQ A,,1 
  ERR ILLEGAL DAYFILE TYPE - T
  R= X7,A 
  RJ =XSFM
  ENDM
 DFAT     SPACE  4,10 
***       DFAT - DELETE FAST ATTACH FILE (*SSJ=* REQUIRED). 
* 
*         DFAT   FILE 
* 
*         ENTRY  *FILE* = ADDRESS OF FET FOR FILE.
* 
*         CALLS  SFM. 
* 
*         XREF   COMSSFM. 
  
  
          PURGMAC DFAT
  
 DFAT     MACRO  F
  MACREF DFAT 
  R= X2,F 
  R= X7,DFAF
  RJ =XSFM
  ENDM
 DISSJ    SPACE  4,20 
***       DISSJ - DISABLE SSJ= (SPECIAL SYSTEM JOB PRIVILEGES). 
*         SSJ= PARAMETER BLOCK ADDRESS MUST BE ZERO.
* 
*         DISSJ  P
* 
*         ENTRY  *P* = OPTION.
*                IF P=0, DISABLE SSJ= STATUS AND CLEAR ENABLE SSJ=
*                FLAG.
*                IF P=1, DISABLE SSJ= STATUS, CLEAR SECURE SYSTEM 
*                MEMORY FLAG, AND CLEAR ENABLE SSJ= FLAG. 
*                IF P=2, DISABLE SSJ= STATUS AND SET ENABLE SSJ=
*                FLAG.
*                IF P=3, ENABLE SSJ= STATUS AND CLEAR ENABLE SSJ= 
*                FLAG.
* 
*         CALLS  CPM=.
  
  
          PURGMAC DISSJ 
  
 DISSJ    MACRO  P
  MACREF DISSJ
  R= X1,P 
  SX2 43B 
  RJ =XCPM= 
  ENDM
 DISSR    SPACE  4,10 
***       DISSR - DISABLE SRU ACCUMULATION. 
* 
*         DISSR 
* 
*         CALLS  CPM=.
  
  
          PURGMAC DISSR 
  
 DISSR    MACRO  A
  MACREF DISSR
  SX2 53B 
  R= X1,A 
  RJ =XCPM= 
  ENDM
 DISTC    SPACE  4,30 
***       DISTC - CHANGE DISABLE TERMINAL CONTROL.
* 
*         DISTC ST,ADDR,INT 
* 
*         ISSUES A *TLX* PPU CALL TO SET OR CLEAR DISABLE 
*         TERMINAL CONTROL BIT IN *TELEX* TERMINAL TABLE. 
* 
*         ENTRY  *ST* = *ON* DISABLE TERMINAL CONTROL.
*                     = *OFF* REENABLE TERMINAL CONTROL.
* 
*                THE FOLLOWING TWO PARAMETERS APPLY WHEN
*                *ST* = *ON*. 
* 
*                *ADDR* = ADDRESS TO WHICH TERMINAL CONTROL 
*                         STATUS IS TO BE RETURNED. 
* 
*                *INT* = BLANK, SET BIT 0 OF ADDR IF TERMINAL 
*                        INTERRUPT ENTERED. 
*                      = NONBLANK, PROCESS INTERRUPT BY STORING 
*                        EXCHANGE PACKAGE IN (ADDR-ADDR+17B) AND
*                        STARTING EXECUTION AT ADDR+20B.
* 
*         EXIT   TERMINAL CONTROL DISABLED OR REENABLED.
* 
*         CALLS  SYS=.
  
  
          PURGMAC DISTC 
  
 DISTC    MACRO  S,A,I
  MACREF DISTC
D IFC EQ,$S$ON$ 
  IFC NE,$I$$,6 
  IFC EQ,$A$$,2 
  ERR - MISSING ADDRESS PARAMETER 
E SKIP
  SX1 A+400000B 
  MX6 -18D
  BX1 -X6*X1
  IFC EQ,$I$$,1 
  R= X1,A 
D ELSE
  IFC NE,$S$OFF$,2
  ERR - UNRECOGNIZABLE PARAMETER
E SKIP
  IFC NE,$A$$,2 
  ERR - ADDRESS PARAMETER INVALID 
E SKIP
  IFC NE,$I$$,2 
  ERR - INTERRUPT PARAMETER INVALID 
E SKIP
  R= X1,1 
  LX1 24D 
D ENDIF 
  SX6 3RTLX 
  PX6 X6,B0 
  LX6 42D 
  IX6 X6+X1 
  RJ =XSYS= 
E ENDIF 
  ENDM
 EESET    SPACE  4,10 
***       EESET - ENTER EVENT IN SYSTEM EVENT TABLE.
* 
*         EESET A 
* 
*         ENTRY  A = EVENT. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC EESET 
  
 EESET    MACRO  A
  MACREF EESET
  R= X1,A 
  SX2 34B 
  RJ =XCPM= 
  ENDM
 EDATE    SPACE  4,10 
***       EDATE - EDIT PACKED DATE. 
* 
*         EDATE  D,F
* 
*         ENTRY  *D* = PACKED DATE (LOWER 18 BITS). 
*                 F  = 4, RETURN ALTERNATE 4-DIGIT YEAR FORMAT. 
*                 F  = OTHER OR OMITTED, RETURN STANDARD FORMAT.
* 
*         EXIT   (X6) = EDITED DATE - * YY/MM/DD.*. 
*                (X6) = EDITED DATE - *YYYY/MM/DD*, IF F = 4. 
* 
*         CALLS  EDT. 
  
  
          PURGMAC EDATE 
  
 EDATE    MACRO  D,F
  LOCAL  A
  MACREF EDATE
.A IF REG,D 
  R= X1,D 
.A ELSE 
  R= A1,D 
.A ENDIF
  MX2 -18 
  BX1 -X2*X1
  SX2 70D 
  LX2 12D 
  IX1 X1+X2 
  SX2 1R/                    SET SEPARATOR
  RJ =XEDT
.B IFC EQ,*F*4* 
  LX6 6 
  MX1 48
  BX6 X1*X6 
  SX1 2R19
  NG  X6,A  IF YEAR .GE. 50 
  SX1 2R20
A BX6 X6+X1 
  LX6 48
.B ENDIF
  ENDM
 EDCAT    SPACE  4,15 
***       EDCAT - EDIT CATALOG ENTRY. 
* 
*         EDCAT  C,W,N,L,I,S,A
* 
*         ENTRY  *C* = ADDRESS OF CATALOG ENTRY.
*                *W* = ADDRESS OF WORKING STORAGE AREA(14D CM WORDS)
*                       TO RETURN EDITED CATALOG ENTRY TO.
*                *N* = LINE NUMBER TO BE ADDED TO BEGINNING OF
*                       FIRST LINE. 
*                *L* = LENGTH CODE(1=SECTORS,0=CHARACTERS). 
*                *I* = NONZERO IF INDEX FIELD IS TO BE LISTED.
*                *S* = NONZERO IF SYSTEM IN SECURED MODE. 
*                *A* = NONZERO IF ALTERNATE USER CATALOG. 
* 
*         CALLS  FCE. 
  
  
          PURGMAC EDCAT 
  
 EDCAT    MACRO  C,W,N,L,I,S,A
  MACREF EDCAT
  R= B6,C 
  R= B7,W 
  R= X7,N 
  R= X4,L 
  R= X6,I 
  R= X3,S 
  R= X2,A 
  RJ =XFCE
  ENDM
 EFFECT   SPACE  4,30 
***       EFFECT - SET USER OR SYSTEM FORMAT EFFECTOR MODE. 
* 
*         EFFECT A
* 
*         ENTRY  *A* = *SYSTEM*, SET SYSTEM SUPPLIED FORMAT EFFECTOR
*                                MODE.
*                    = *USER*,   SET USER SUPPLIED FORMAT EFFECTOR
*                                MODE.
*                    = (OMITTED) = *SYSTEM*.
* 
*         CALLS  TLX. 
  
  
          PURGMAC EFFECT
  
 EFFECT  MACRO  A 
  NOREF .1
  MACREF EFFECT 
 .1 SET 0 
  IFC EQ,*A**,1 
 .1 SET 21B 
  IFC EQ,*A*ON*,1 
 .1 SET 21B 
  IFC EQ,*A*SYSTEM*,1 
 .1 SET 21B 
  IFC EQ,*A*OFF*,1
 .1 SET 20B 
  IFC EQ,*A*USER*,1 
 .1 SET 20B 
  IFNE .1,0 
  TLX .1,0
  ELSE
  ERR - INCORRECT PARAMETER.
  ENDIF 
  ENDM
 ENCSF    SPACE  4,15 
***       ENCSF - ENTER NEW CONTROL STATEMENT FILE. 
* 
*         ENCSF  FILE,RESTORE 
* 
*         ENTRY  *FILE* = ADDRESS OF FET FOR FILE.
*                *RESTORE* = IF SPECIFIED IS ADDRESS OF WORD
*                CONTAINING POSITION INFORMATION. 
* 
*         CALLS  LFM=.
  
  
          PURGMAC ENCSF 
  
 ENCSF    MACRO  F,A
  MACREF ENCSF
  R= X2,F 
  R= X6,A 
  SA6 F+6 
  SX7 22B 
  RJ =XLFM= 
  ENDM
 ENFA     SPACE  4,15 
***       ENFA - ENTER FAST ATTACH FILE (*SSJ=* REQUIRED).
*         MUST BE DIRECT ACCESS FILE. 
* 
*         ENFA   FILE,OPT 
* 
*         ENTRY  *FILE* = ADDRESS OF FET FOR FILE.
*                OPT = NULL, ENTER LOCAL FAST ATTACH. 
*                      *GLOBAL*, ENTER GLOBAL FAST ATTACH.
*                      *LINK*, LINK TO EXISTING GLOBAL FAST ATTACH. 
* 
*         CALLS  SFM. 
* 
*         XREF   COMSSFM. 
  
  
          PURGMAC ENFA
  
 ENFA     MACRO  F,OPT
  MACREF ENFA 
  R= X2,F 
A IFC EQ,*OPT*GLOBAL* 
  R= X7,EGFF
A ELSE
B IFC EQ,*OPT*LINK* 
  R= X7,ELFF
B ELSE
C IFC EQ,*OPT** 
  R= X7,EFAF
C ELSE
  ERR - INVALID PARAMETER 
  ENDIF 
  RJ =XSFM
  ENDM
 ENFAM    SPACE  4,15 
***       ENFAM - ENTER FAMILY NAME.
*         *SYOT* REQUIRED (*SSJ=* REQUIRED ON SECURE SYSTEM). 
* 
*         ENFAM  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF FAMILY NAME. 
* 
*         EXIT   BYTE 4 OF ADDR = 0 IF DEFAULT NOT USED.
*                               < 0 IF ILLEGAL FAMILY NAME. 
*                IF FAMILY CHANGED BYTES 0 - 3 CONTAIN THE OLD
*                FAMILY NAME. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC ENFAM 
  
 ENFAM    MACRO  A
  MACREF ENFAM
  R= X1,A 
  SX2 41B 
  RJ =XCPM= 
  ENDM
 ETIME    SPACE  4,15 
***       ETIME - EDIT PACKED TIME. 
* 
*         ETIME  T
* 
*         ENTRY  *T* = PACKED TIME (LOWER 18 BITS). 
* 
*         EXIT   (X6) = EDITED TIME - * HH.MM.SS.*
* 
*         CALLS  EDT. 
* 
  
  
          PURGMAC ETIME 
  
 ETIME    MACRO  T
  MACREF ETIME
.A IF REG,T 
  R= X1,T 
.A ELSE 
  R= A1,T 
.A ENDIF
  MX2 -18 
  BX1 -X2*X1
  SX2 100D
  LX2 12D 
  IX1 X1+X2 
  SX2 1R.                    SET SEPARATOR
  RJ =XEDT
  ENDM
 EXCST    SPACE  4,10 
***       EXCST - EXECUTE CONTROL STATEMENT.
* 
*         EXCST  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF CONTROL STATEMENT WHICH IS IN -C-
*                FORMAT, I.E., LEFT JUSTIFIED CHARACTERS WITH ZERO FILL.
* 
*         CALLS  SYS=.
  
  
          PURGMAC EXCST 
  
 EXCST    MACRO  A
  MACREF EXCST
  R= X1,A 
  SX6 3RTCS 
  SX2 1LP+5 
  LX6 42D 
  LX2 24D 
  BX6 X6+X1 
  BX6 X6+X2 
  RJ =XSYS= 
  ENDM
 GETASL   SPACE  4,15 
***       GETASL - GET ACCOUNT BLOCK SRU LIMIT. 
* 
*         GETASL ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         EXIT
*T ADDR   48/0,12/ASL 
*         ASL    ACCOUNT BLOCK SRU LIMIT IN UNITS.
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETASL
  
 GETASL   MACRO  A
  MACREF GETASL 
  R= X2,2 
  R= X1,A 
  LX2 18
  BX1 X2+X1 
  SX2 17B 
  RJ =XCPM= 
  ENDM
 GETCN    SPACE  4,20 
***       GETCN - GET CHARGE NUMBER INFORMATION.
* 
*         GETCN ADDR
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER BLOCK. 
* 
*         EXIT
*T ADDR+0 60/CHARGE NUMBER
*T,ADDR+1 60/PROJECT NUMBER 
*T,ADDR+2 60/PROJECT NUMBER 
*T,ADDR+3 1/V,59/0
*         V = VALIDATED CHARGE FLAG.
*           = 0 IF CHARGE AND PROJECT NUMBER NOT VALIDATED. 
*           = 1 IF CHARGE AND PROJECT NUMBER VALIDATED. 
* 
*         CALLS  CPM=.
  
          PURGMAC GETCN 
  
 GETCN    MACRO  A
  MACREF GETCN
  R= X1,A 
  SX2 136B
  RJ =XCPM= 
  ENDM
 GETEAL   SPACE  4,20 
***       GETEAL - GET EQUIPMENT ACCESS LEVELS. 
* 
*         GETEAL ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER AND REPLY WORD.
*T ADDR   48/ , 12/ EST ORDINAL 
* 
*         EXIT
*T ADDR   36/ , 6/ LA, 6/ UA, 12/ EST ORDINAL 
*         LA = EQUIPMENT ACCESS LEVEL LOWER LIMIT.
*         UA = EQUIPMENT ACCESS LEVEL UPPER LIMIT.
* 
*         IF THE EQUIPMENT IS MASS STORAGE, THE DEVICE ACCESS LEVEL 
*         LIMITS FROM THE MST ARE RETURNED.  OTHERWISE, THE ACCESS
*         LEVEL LIMITS FROM THE EST ARE RETURNED. 
  
  
          PURGMAC  GETEAL 
  
 GETEAL   MACRO  A
  MACREF GETEAL 
  SYSTEM SFM,R,A,GEAF*100B
  ENDM
 GETEOJS  SPACE  4,15 
***       GETEOJS - GET END-OF-JOB TERMINATION STATUS.
* 
*         RETURNS THE JOB TERMINATION STATUS FROM CONTROL 
*         POINT AREA WORD *EOJW*. 
* 
*         GETEOJS  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         EXIT
*T ADDR   52/0, 2/E, 3/OP, 3/DS 
*                E  = JOB TERMINATION MODE (SEE *COMSJCE*). 
*                OP = JOB TERMINATION OPTION (SEE *COMSJCE*). 
*                DS = QUEUE DISPOSITION OPTION (SEE *COMSJCE*). 
  
  
          PURGMAC GETEOJS 
  
 GETEOJS  MACRO  A
  MACREF GETEOJS
  R=  X1,A
  SX2 63B 
  RJ =XCPM= 
  ENDM
 GETEP    SPACE  4,20 
***       GETEP - GET EPILOGUE PARAMETERS.
* 
*         GETEP ADDR
* 
*         ENTRY  ADDR = REPLY WORD ADDRESS. 
* 
*         EXIT
*T ADDR   25/,1/EI,24/RI
* 
*                EI = ENTRY INDEX IN LEVEL-3 BLOCK. 
*                RI = RANDOM INDEX OF LEVEL-3 BLOCK.
*                (ADDR) = 0 IF NO EPILOGUE REQUIRED.
* 
*         USES   X - 1, 2.
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETEP 
  
 GETEP    MACRO  A
  MACREF GETEP
  R= X1,A 
  SX2 131B
  RJ =XCPM= 
  ENDM
 GETFLC   SPACE  4,30 
***       GETFLC - READ FIELD LENGTH CONTROL WORD.
* 
*         GETFLC ADDRCM,ADDREC
* 
*         ENTRY  *ADDRCM* = ADDRESS FOR CM FL CONTROL WORD RESPONSE.
*                *ADDREC* = ADDRESS FOR ECS FL CONTROL WORD RESPONSE. 
*                EITHER OR BOTH *ADDRCM* AND *ADDREC* MAY BE PRESENT. 
* 
*         EXIT
*T ADDRCM 12/MFL,12/RFL,12/MAX,12/RI,12/IN
*         MFL = MAXIMUM CM FL FOR JOB STEP. 
*         RFL = RUNNING CM FL (NOMINAL CM FL).
*         MAX = MAXIMUM CM FL FOR ENTIRE JOB. 
*         RI = ROLLIN CM FL.
*         IN = CM FL INCREASE REQUEST.
* 
*T ADDREC 12/EMFL,12/ERFL,12/EMAX,12/ERI,12/EIN 
*         EMFL = MAXIMUM ECS FL FOR JOB STEP. 
*         ERFL = RUNNING ECS FL (NOMINAL ECS FL). 
*         EMAX = MAXIMUM ECS FL FOR ENTIRE JOB. 
*         ERI = ROLLIN ECS FL.
*         EIN = ECS FL INCREASE REQUEST.
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETFLC
  
 GETFLC   MACRO  A,B
  MACREF GETFLC 
  IFC NE,$A$$,3 
  R= X1,A 
  SX2 33B 
  RJ =XCPM= 
  IFC NE,$B$$,3 
  R= X1,B 
  SX2 55B 
  RJ =XCPM= 
  ENDM
 GETFNT   SPACE  4,50 
***       GETFNT - RETURN TABLE WITH FNT/FST ENTRIES (OPTIONALLY
*                  MODIFIED) FOR ALL WORKING FILES. 
* 
*         GETFNT ADDR 
* 
*         ENTRY  ADDR = ADDRESS OF FET FOR FILE.
*T ADDR+8        12/NF,6/,18/SB,2/,1/F,1/C,1/M,1/N,18/TA
*                NF = MAX NUMBER OF FILE FNT/FST ENTRIES TO RETURN
*                     IN TABLE. 
*                SB = SELECTIVITY BITS. 
*                F    SET INDICATES THE NEW FORMAT TWO-WORD ENTRY IS
*                     TO BE RETURNED. 
*                C  = SET IMPLIES TREAT CHECKPOINT FILES NORMALLY.
*                M  = SET IMPLIES MODIFY FST ENTRIES OF MASS
*                     STORAGE FILES.
*                N  = SET IMPLIES PERFORM NO MODIFICATION OF FST
*                     ENTRIES OF FILES. 
*                TA = STARTING CM TABLE ADDRESS.
* 
*         IF NEW FORMAT IS REQUESTED (*F* SET) -
*         (TA) = 48/ , 12/ADDR
*         WHERE - 
*                ADDR = 0, IF FIRST *GETFNT* CALL.
*                     = FWA OF THE LAST *GETFNT* ENTRY IN NFL 
*                       PROCESSED BY LAST *GETFNT* CALL.
* 
*         EXIT   IF *N* NOT SET - 
*                (FET+8) .LT. 0 IF AT 1 ERROR ENCOUNTERED.
*                IF *C* NOT SET - 
*                (FET+9) = CHECKPOINT FILE FNT. 
*                        = 0 IF NONE PRESENT (USER MUST PRESET).
*                        .LT. 0 IF MORE THAN TWO. 
*                (FET+10) = FST.
*                (FET+11) = ALTERNATE CHECKPOINT FILE FNT.
*                         = 0 IF NO ALTERNATE (USER MUST PRESET). 
*                (FET+12) = FST.
* 
*         IF NEW FORMAT IS SELECTED (*F* SET) - 
*         (TA) = 48/, 12/ADDR 
*         WHERE - 
*                ADDR = 0, IF SEARCH COMPLETE.
*                     = FWA OF THE LAST FNT ENTRY IN NFL PROCESSED
*                       BY THIS *GETFNT* CALL.
* 
*         USES   X - 2, 7.
* 
*         NOTE   SEE *LFM* DOCUMENTATION FOR MORE DETAILS ON ENTRY
*                AND EXIT CONDITIONS. 
* 
*         CALLS  LFM=.
  
  
          PURGMAC GETFNT
  
 GETFNT   MACRO  A
  MACREF GETFNT 
  R= X2,A 
  SX7 25B 
  RJ =XLFM= 
  ENDM
 GETFO    SPACE  4,15 
**        GETFO  - GET FAMILY ORDINAL AND FAMILY NAME.
* 
*         GETFO  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER WORD.
* 
*         EXIT
*T ADDR   42/ FAMN,6/ 0,12/ FAMO
*         FAMN   FAMILY NAME (0 IF NO FAMILY).
*         FAMO   FAMILY ORDINAL (0 IF NO FAMILY). 
* 
*         CALLS  CPM=.
  
  
          PURGMAC  GETFO
  
 GETFO    MACRO  A
  MACREF GETFO
  R= X1,A 
  SX2 147B
  RJ =XCPM= 
  ENDM
 GETGLS   SPACE  4,15 
**        GETGLS - GET GLOBAL LIBRARY SET.
* 
*         GETGLS ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER WORD.
*T ADDR   6/ ,18/ LIST ,36/0
*         LIST   LIST OF LIBRARY NAMES LEFT JUSTIFIED, ZERO FILLED, 
*                TERMINATED BY WORD OF ZEROS. 
* 
*         EXIT
*T ADDR   6/ ,18/ END ,36/0 
*         END    LWA OF LIST OF LIBRARY NAMES.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  GETGLS 
  
 GETGLS   MACRO  A
  MACREF GETGLS 
  R= X1,A 
  SX2 46B 
  RJ =XCPM= 
  ENDM
 GETJA    SPACE  4,30 
***       GETJA - READ JOB ACCOUNTING WORDS.
* 
*         GETJA  ADDR 
* 
*         ENTRY  ADDR = ADDRESS FOR RESPONSE. 
* 
*         EXIT
*T ADDR   18/0,42/SRU 
*T ADDR+1 60/CP 
*T ADDR+2 20/MS,20/MT,20/PF 
*T ADDR+3 20/0,20/MP,20/AA
*T ADDR+4 31/0,29/AC
*                SRU = SRU ACCUMULATOR (MICRO UNITS * 10).
*                CP = CP TIME ACCUMULATOR (QUARTER NANOUNITS).
*                MS  = MASS STORAGE USAGE ACCUMULATOR.
*                MT  = MAGNETIC TAPE USAGE ACCMULATOR.
*                PF  = PERMANENT FILE USAGE ACCUMULATOR.
*                AA  = ADDER ACCUMULATOR. 
*                MP = MAP ACCUMULATOR.
*                AC = AUC ACCUMULATOR.
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETJA 
  
 GETJA    MACRO  A
  MACREF GETJA
  R= X1,A 
  SX2 30B 
  RJ =XCPM= 
  ENDM
 GETJAL   SPACE  4,10 
***       GETJAL - GET JOB ACCESS LEVEL.
* 
*         GETJAL ADDR 
* 
*         ENTRY  ADDR = ADDRESS OF REPLY WORD.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  GETJAL 
  
 GETJAL   MACRO  A
  MACREF GETJAL 
  R= X1,A 
  SX2 116B
  RJ =XCPM= 
  ENDM
 GETJCR   SPACE  4,15 
***       GETJCR - READ JOB CONTROL REGISTERS.
* 
*         GETJCR ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE
* 
*         EXIT
*T ADDR   6/  EF,18/  R3,18/  R2,18/  R1
*         EF     PREVIOUS ERROR FLAG
*         R1 - R2 CONTROL REGISTERS 
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETJCR
  
 GETJCR   MACRO  A
  MACREF GETJCR 
  R= X1,A 
  SX2 24B 
  RJ =XCPM= 
  ENDM
 GETJN    SPACE  4,15 
***       GETJN - GET JOB SEQUENCE NUMBER.
* 
*         GETJN  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         EXIT
*T ADDR   24/ JOB SEQUENCE NUMBER,36/0
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETJN 
  
 GETJN    MACRO  A
  MACREF GETJN
  R= X1,A 
  SX2 13B 
  RJ =XCPM= 
  ENDM
 GETJO    SPACE  4,15 
***       GETJO - GET JOB ORIGIN CODE.
* 
*         GETJO  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         EXIT
*T ADDR   54/0, 6/JO
*         JO     JOB ORIGIN CODE. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETJO 
  
 GETJO    MACRO  A
  MACREF GETJO
  R= X1,A 
  SX2 27B 
  RJ =XCPM= 
  ENDM
 GETJOSC  SPACE  4,15 
***       GETJOSC - GET JOB ORIGIN AND SERVICE CLASS. 
* 
*         GETJOSC  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         EXIT   RESPONSE RETURNED IN FOLLOWING FORMAT -
*T ADDR   48/0, 6/SC, 6/OT
*         SC     JOB SERVICE CLASS
*         OT     JOB ORIGIN CODE
* 
*         CALLS  CPM=.
  
  
          PURGMAC  GETJOSC
  
 GETJOSC  MACRO  A
  MACREF GETJOSC
  R= X1,A 
  SX2 111B
  RJ =XCPM= 
  ENDM
 GETJSL   SPACE  4,15 
***       GETJSL - GET JOB STEP SRU LIMIT.
* 
*         GETJSL  ADDR
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         EXIT
*T ADDR   48/0,12/JSL 
*         JSL    JOB STEP SRU LIMIT IN UNITS. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETJSL
  
 GETJSL   MACRO  A
  MACREF GETJSL 
  R= X2,1 
  R= X1,A 
  LX2 18
  BX1 X2+X1 
  SX2 17B 
  RJ =XCPM= 
  ENDM
 GETLC    SPACE  4,10 
**        GETLC - GET FIRST LOADER CONTROL WORD.
* 
*         GETLC  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC  GETLC
  
 GETLC    MACRO  A
  MACREF GETLC
  R= X1,A 
  SX2 45B 
  RJ =XCPM= 
  ENDM
 GETMC    SPACE  4,30 
***       GETMC - READ MACHINE CHARACTERISTICS. 
* 
*         GETMC  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         EXIT
*T ADDR   11/0,1/M,12/EM,12/PP,12/MF,12/CM
* 
*         M      64 CHARACTER SET MODE
*         EM     EM SIZE/1000B
*         PP     NUMBER OF PP-S 
*         MF     MAINFRAME FLAGS -
*                2/,1/HE,1/CE,2/CT,1/PS,1/SC,1/MU,1/CJ,1/IS,1/C1
*                HE  SET IF IN HARDWARE ESM MODE
*                CE  SET IF 8X5 MAINFRAME (CM EXTENSION)
*                CT  7000 TYPE CPU -
*                    0 = NOT 7000 TYPE CPU
*                    1 = CYBER 76 MODEL A 
*                    2 = CYBER 76 MODEL B 
*                    3 = CYBER 176
*                PS  SET IF 2X PP SPEED 
*                SC  SET IF CYBER 170 TYPE MAINFRAME (S/C REGISTER) 
*                MU  SET IF CMU PRESENT 
*                CJ  SET IF CEJ/MEJ PRESENT 
*                IS  SET IF CPU 0 HAS INSTRUCTION STACK 
*                C1  SET IF CPU 1 PRESENT 
*         CM     MEMORY SIZE/100
* 
*         CALLS  CVL=.
  
  
          PURGMAC GETMC 
  
 GETMC    MACRO  A
  MACREF GETMC
  R= X1,A 
  SX2 2 
  RJ =XCVL= 
  ENDM
 GETPAGE  SPACE  4,25 
***       GETPAGE - READ PAGE SIZE PARAMETERS.
* 
*         GETPAGE  ADDR 
* 
*         ENTRY  ADDR = ADDRESS FOR RESPONSE. 
* 
*         EXIT   PARAMETER BLOCK RETURNED AS FOLLOWS. 
* 
*T,ADDR   28/RES,4/JPD,8/JPL,8/JPW,11/RES,1/C 
*T        28/RES,4/SPD,8/SPL,8/SPW,12/RES 
*                JPD  = JOB PRINT DENSITY (6 OR 8)
*                JPL  = JOB PAGE LENGTH 
*                JPW  = JOB PAGE WIDTH
*                C    = COMPLETE BIT
*                SPD  = SYSTEM PRINT DENSITY
*                SPL  = SYSTEM PAGE LENGTH
*                SPW  = SYSTEM PAGE WIDTH 
*                RES  = RESERVED FIELD
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETPAGE 
  
 GETPAGE  MACRO  A
  MACREF GETPAGE
  R= X1,A 
  SX2 127B
  RJ =XCPM= 
  ENDM
 GETPFP   SPACE  4,15 
***       GETPFP - GET PERMANENT FILE PARAMETERS. 
* 
*         GETPFP ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF 3 WORD BLOCK FOR RESPONSE. 
* 
*         EXIT   CURRENT CONTROL POINT PARAMETERS RETURNED IN FORMAT -
* 
*T ADDR   42/ FAMILY NAME,18/ 0 
*T,       42/ PACKNAME,18/ 0
*T,       42/ USER NUMBER,18/ USER INDEX
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETPFP
  
 GETPFP   MACRO  A
  MACREF GETPFP 
  R= X1,A 
  SX2 57B 
  RJ =XCPM= 
  ENDM
 GETPR    SPACE  4,15 
***       GETPR - READ CPU PRIORITY.
* 
*         GETPR  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE. 
* 
*         EXIT
*T ADDR   48/0,12/PR
*         PR     CPU PRIORITY 
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETPR 
  
 GETPR    MACRO  A
  MACREF GETPR
  R= X1,A 
  SX2 15B 
  RJ =XCPM= 
  ENDM
 GETQP    SPACE  4,10 
***       GETQP - READ JOB QUEUE PRIORITY.
* 
*         GETQP  ADDR 
* 
*         EXIT
*         MESSAGE *GETQP MACRO NOT SUPPORTED.* ISSUED.
* 
*         MACROS MESSAGE. 
  
  
          PURGMAC GETQP 
  
 GETQP    MACRO  A
  MACREF GETQP
  SX1 =C* GETQP MACRO NOT SUPPORTED.* 
  MESSAGE X1,3,R
  ENDM
 GETRI    SPACE  4,30 
***       GETRI - GET REPRIEVE INFORMATION. 
* 
*         GETRI  PARAM
* 
*         ENTRY  *PARAM* = ADDRESS FOR RESPONSE.
* 
*         EXIT   RESPONSE RETURNED IN FOLLOWING FORMAT -
* 
*T PARAM  5/FLAGS,19/0,12/MASK,6/0,18/ADDR
* 
*         FLAGS = ZERO, IF NO REPRIEVE CONDITION SET. 
*               = BIT 59 SET, IF *EREXIT* SET 
*                 (*EECW* BITS 58 AND 46-36 ZERO, BITS 17-0 NONZERO). 
*               = BIT 58 SET, IF NORMAL REPRIEVE CONDITIONS SET 
*                 (*EECW* BITS 58 AND 47 NOT SET, BITS 46-36 NONZERO).
*               = BIT 57 SET, IF EXTENDED REPRIEVE CONDITIONS SET 
*                 (*EECW* BIT 58 SET, BIT 57 NOT SET).
*               = BIT 56 SET, IF NORMAL REPRIEVE IN PROGRESS
*                 (*EECW* BIT 58 NOT SET, BIT 47 SET, AND BITS 46-36
*                 NONZERO). 
*               = BIT 55 SET, IF EXTENDED REPRIEVE IN PROGRESS
*                 (*EECW* BITS 58 AND 57 SET).
*         MASK  = NORMAL REPRIEVE MASK BITS (IF NORMAL REPRIEVE 
*                 CONDITION SET). 
*               = ZERO (OTHERWISE). 
*         ADDR  = ADDRESS OF EXTENDED REPRIEVE PARAMETER BLOCK
*                 (IF EXTENDED REPRIEVE CONDITION SET). 
*               = ERROR EXIT RETURN ADDRESS (IF NORMAL REPRIEVE 
*                 CONDITION SET OR *EREXIT* SET). 
*               = ZERO (OTHERWISE). 
  
  
          PURGMAC  GETRI
  
 GETRI    MACRO  A
  MACREF GETRI
  R= X1,A 
  SX2 134B
  RJ =XCPM= 
  ENDM
 GETSS    SPACE  4,10 
***       GETSS - GET SUBSYSTEM.
* 
*         GETSS  ADDR 
* 
*         ENTRY  ADDR = ADDRESS TO RETURN SUBSYSTEM CODE IN.
* 
*         EXIT   (ADDR) = SUBSYSTEM (RIGHT JUSTIFIED).
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETSS 
  
 GETSS    MACRO  A
  MACREF GETSS
  R= X1,A 
  SX2 37B 
  RJ =XCPM= 
  ENDM
 GETSSID  SPACE  4,15 
**        GETSSID - GET SUBSYSTEM IDENTIFICATION. 
* 
*         GETSSID  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS TO RETURN SUBSYSTEM IDENTIFICATION. 
* 
*         EXIT
*T ADDR   48/ 0, 12/ SSID 
*         SSID   SUBSYSTEM IDENTIFICATION VALUES (DEFINED IN
*                *COMSSSD*).
* 
*         CALLS  CPM=.
  
  
          PURGMAC  GETSSID
  
 GETSSID  MACRO  A
  MACREF GETSSID
  R= X1,A 
  SX2 110B
  RJ =XCPM= 
  ENDM
 GETSSL   SPACE  4,20 
***       GETSSL - GET SYSTEM SECURITY LIMITS.
* 
*         GETSSL ADDR 
* 
*         ENTRY  ADDR = REPLY WORD ADDRESS. 
* 
*         EXIT
*T ADDR   3/ ,3/OQSH,3/ ,3/OSSM,12/ SY ,12/ BC ,12/ RB ,12/ IA
*         OQSH = OUTPUT QUEUE SPECIAL HANDLING LEVEL. 
*         OSSM = OPERATING SYSTEM SECURITY MODE.
*         SY = 3/ ,3/SYOT LOWER ACCESS LEVEL LIMIT, 
*              3/ ,3/SYOT UPPER ACCESS LEVEL LIMIT. 
*         BC = 3/ ,3/BCOT LOWER ACCESS LEVEL LIMIT, 
*              3/ ,3/BCOT UPPER ACCESS LEVEL LIMIT. 
*         RB = 3/ ,3/RBOT LOWER ACCESS LEVEL LIMIT, 
*              3/ ,3/RBOT UPPER ACCESS LEVEL LIMIT. 
*         IA = 3/ ,3/IAOT LOWER ACCESS LEVEL LIMIT, 
*              3/ ,3/IAOT UPPER ACCESS LEVEL LIMIT. 
  
  
          PURGMAC  GETSSL 
  
 GETSSL   MACRO  A
  MACREF GETSSL 
  SYSTEM SFM,R,A,GSSF*100B
  ENDM
 GETSSM   SPACE  4,15 
***       GETSSM - GET SYSTEM SECURITY MODE.
* 
*         GETSSM ADDR 
* 
*         ENTRY  ADDR = REPLY WORD ADDRESS. 
* 
*         EXIT
*T ADDR   48/ 0,12/ SM
*         SM = 0 IF SYSTEM IN UNSECURED MODE. 
*         SM = 1 IF SYSTEM IN SECURED MODE. 
  
  
          PURGMAC  GETSSM 
  
 GETSSM   MACRO  A
  MACREF GETSSM 
  SYSTEM SFM,R,A,GSMF*100B
  ENDM
 GETTL    SPACE  4,15 
***       GETTL - READ TIME LIMIT.
* 
*         GETTL  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR RESPONSE
* 
*         EXIT
*T ADDR   48/0,12/TL
*         TL     CPU TIME LIMIT FOR JOB IN SECONDS. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETTL 
  
 GETTL    MACRO  A
  MACREF GETTL
  R= X1,A 
  SX2 17B 
  RJ =XCPM= 
  ENDM
 GETUSC   SPACE  4,50 
***       GETUSC - GET USER-S SERVICE CLASSES.
* 
*         GETUSC  ADDR
* 
*         ENTRY - ADDR+N+1 CONTIGOUS WORDS STARTING AT *ADDR*, WHERE
*                 N IS THE MAXIMUM NUMBER OF SERVICE CLASSES TO BE
*                 RETURNED.  THE *OT* AND *LEN* FIELDS MUST BE SET TO 
*                 THE ORIGIN OF INQUIRY AND THE NUMBER OF EXPECTED
*                 RETURNED SERVICE CLASSES RESPECTIVELY.  THE *STAT*
*                 AND *C* FIELDS MUST ZERO. 
* 
*         EXIT - ADDR+1 TO ADDR+M IS RETURNED BY *CPM*.  M WOULD BE 
*                THE NUMBER OF SERVICE CLASSES RETURNED.
* 
*T ADDR   24/0, 12/OT, 12/LEN, 11/STAT, 1/C 
*T,ADDR+1 12/SC, 12/0, 12/IN, 12/EX, 12/OUT 
*T,ADDR+2 12/SC, 12/0, 12/IN, 12/EX, 12/OUT 
*T,ADDR+3 12/SC, 12/0, 12/IN, 12/EX, 12/OUT 
*T,       60/            .
*T,       60/            .
*T,       60/            .
*T,ADDR+N 12/SC, 12/0, 12/IN, 12/EX, 12/OUT 
* 
*         OT - ORIGIN TYPE (VALUE).  THIS IS THE ORIGIN TYPE FOR
*              WHICH SERVICE CLASS INFORMATION WILL BE RETURNED.
*              THIS FIELD IS REQUIRED.
*         LEN - MAXIMUM NUMBER OF SERVICE CLASSES TO RETURN 
*               INFORMATION FOR.  THE MAXIMUM NUMBER THAT COULD BE
*               RETURNED IS 36D.  *CPM* WILL SET THE ACTUAL NUMBER
*               OF WORDS RETURNED IN THIS FIELD.  THIS FIELD IS 
*               REQUIRED. 
*         STAT - ERROR STATUS.  THIS FIELD MUST BE ZERO ON CALL.
*                *CPM* WILL RETURN ONE OF THE FOLLOWING STATUSES. 
*                0 = NO ERROR.
*                1 = INVALID LENGTH (LENGTH OF ZERO SPECIFIED). 
*                2 = INVALID ORIGIN TYPE. 
*                3 = COMPLETE BIT SET.
*         C - COMPLETE BIT.  MUST BE ZERO ON CALL.  *CPM* WILL SET
*             TO ONE ON COMPLETION OF PROCESSING. 
*         SC - TWO CHARACTER DISPLAY CODE MNEMONIC FOR SERVICE CLASS. 
*         IN - LOWER BOUND PRIORITY FOR INPUT FILES IN THIS SERVICE 
*              CLASS. 
*         EX - UPPER BOUND PRIORITY FOR EXECUTING JOBS IN THIS SERVICE
*              CLASS. 
*         OUT - LOWER BOUND PRIORITY FOR OUTPUT FILES IN THIS SERVICE 
*              CLASS. 
* 
*         USES   X - 1, 2.
* 
*         CALLS  CPM=.
  
  
          PURGMAC GETUSC
  
 GETUSC  MACRO  A 
  MACREF GETUSC 
  R= X1,A 
  SX2 123B
  RJ =XCPM= 
  ENDM
 GETUSV   SPACE  4,10 
***       GETUSV - GET USER SECURITY VALIDATION WORD. 
* 
*         GETUSV ADDR 
* 
*         ENTRY  ADDR = REPLY WORD ADDRESS. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC  GETUSV 
  
 GETUSV   MACRO  A
  MACREF GETUSV 
  R= X1,A 
  SX2 120B
  RJ =XCPM= 
  ENDM
 IVFD     SPACE  4,30 
***       IVFD - INDEXED FIELD DEFINITION.
* 
* 
*NAME     IVFD   CONST,(FDEF) 
* 
*         NAME = TABLE NAME.
*         SYM  = SYMBOLIC CONSTANT TO INDEX TABLE ENTRY.
*         FDEF = VFD PARAMETERS TO ASSEMBLE TABLE ENTRY.
* 
*         THIS MACRO IS INTENDED TO GENERATE TABLES WHICH ARE INDEXED 
*         BY SYMBOLIC CONSTANTS.
* 
*         IF *NAME* IS PRESENT, THE FWA OF THE TABLE IS SET TO *NAME*.
* 
*         IF *ADDRESS* IS NULL, 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 ASSEMBLED AT *NAME* + *CONST*.
  
  
          PURGMAC  IVFD 
  
          MACRO  IVFD,A,B,C 
  IFC NE,$A$$ 
A BSS 0 
.2 SET A
  ELSE 5
  ORG .2+B
  IFC NE,$C$$,2 
  LOC B 
  VFD C 
  BSS 0 
  ENDM
 LOADD    SPACE  4,10 
***       LOADD - LOAD FAST DYNAMIC LOAD CAPSULE DIRECTORIES. 
* 
*         LOADD  ADDR,P 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER LIST.
*                *P* = OPTIONAL RECALL PARAMETER. 
* 
*         CALLS  SYS=.
  
  
          PURGMAC LOADD 
  
 LOADD    MACRO  ADDR,P 
  MACREF LOADD
  SX6 3RLDD 
  R= X2,ADDR
  IFC NE,$P$$,1 
  PX6 X6,B0 
  LX6 42D 
  BX6 X2+X6 
  RJ =XSYS= 
  ENDM
 LOADQ    SPACE  4,10 
***       LOADQ - LOAD FAST DYNAMIC LOAD CAPSULES.
* 
*         LOADQ  ADDR,P 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER LIST.
*                *P* = OPTIONAL RECALL PARAMTER.
* 
*         CALLS  SYS=.
  
  
          PURGMAC LOADQ 
  
 LOADQ    MACRO  ADDR,P 
  MACREF LOADQ
  SX6 3RLDQ 
  R= X2,ADDR
  IFC NE,$P$$,1 
  PX6 X6,B0 
  LX6 42D 
  BX6 X2+X6 
  RJ =XSYS= 
  ENDM
 NORERUN  SPACE  4,10 
***       NORERUN - SET INPUT FILE INTO NORERUN STATUS. 
* 
*         NORERUN.
* 
*         EXIT   NORERUN BIT SET FOR INPUT FILE.
* 
*         CALLS  SYS. 
  
  
          PURGMAC NORERUN 
  
 NORERUN  MACRO 
  MACREF NORERUN
  SYSTEM QFM,R,0,1600B
  ENDM
 PARITY   SPACE  4,10 
***       PARITY - SET TERMINAL PARITY. 
* 
*         PARITY ARG
* 
*         ENTRY  *ARG* = *EVEN* OR *ODD*. 
* 
*         CALLS  TLX. 
  
  
          PURGMAC PARITY
  
 PARITY   MACRO  A
  NOREF .1,.2 
  MACREF PARITY 
 .1 SET 0 
  IFC EQ,$A$EVEN$,2 
 .1 SET 4 
 .2 SET 0 
  IFC EQ,$A$ODD$,2
 .1 SET 4 
 .2 SET 1 
  IFEQ .1,0 
  ERR - INVALID MACRO CALL. 
  ELSE
  TLX .1,.2 
  ENDIF 
  ENDM
 PRIMARY  SPACE  4,10 
***       PRIMARY - MAKE MASS STORAGE FILE PRIMARY. 
* 
*         PRIMARY ADDR
* 
*         ENTRY  ADDR =  STARTING FET ADDRESS FOR FILE. 
* 
*         CALLS  LFM=.
  
  
          PURGMAC PRIMARY 
  
 PRIMARY  MACRO  A
  MACREF PRIMARY
  R= X2,A 
  SX7 31B 
  RJ =XLFM= 
  ENDM
 PROMPT   SPACE  4,10 
***       PROMPT - SET/CLEAR PROMPT MODE. 
* 
*         PROMPT ST 
* 
*         ENTRY  *ST* = *ON* OR *OFF*.
*                IF *ST* = *ON*, TURN ON PROGRAM PROMPTS. 
*                IF *ST* = *OFF*, SUPPRESS PROGRAM PROMPTS. 
* 
*         CALLS  TLX. 
  
  
          PURGMAC PROMPT
  
 PROMPT  MACRO  ST
  MACREF PROMPT 
 .1 SET 0 
  IFC EQ,*ST*ON*,1
 .1 SET 7 
  IFC EQ,*ST*OFF*,1 
 .1 SET 6 
  IFNE .1,0,1 
  TLX .1,0
  ELSE
  ERR - INVALID PARAMETER.
  ENDIF 
 PROMPT ENDM
 PSCSF    SPACE  4,10 
***       PSCSF - POSITION CONTROL STATEMENT FILE.
* 
*         ENCSF  FILE 
* 
*         ENTRY  *FILE* = ADDRESS OF FET FOR FILE.
*T FET+6  12/,24/  CS,24/  WC 
*         CS     CONTROL STATEMENT NUMBER 
*         WC     WORD COUNT FROM BEGINNING OF FILE
* 
*         CALLS  LFM=.
  
  
          PURGMAC PSCSF 
  
 PSCSF    MACRO  F
  MACREF PSCSF
  R= X2,F 
  SX7 23B 
  RJ =XLFM= 
  ENDM
 RDVT     SPACE  4,20 
***       RDVT - RETURN DEVICE TYPE.
* 
*         RDVT   FILE,EQUIP 
* 
*         ENTRY  *FILE* = ADDRESS OF FET FOR FILE.
*                *EQUIP* = EST ORDINAL (LOWER 12 BITS). 
*                IF *EQUIP* IS ALREADY SET IN THE FET, *EQUIP* NEED 
*                  NOT BE PRESENT.
* 
*         EXIT
*T FILE+1 12/ ET,48/ (UNCHANGED)
*         ET     EQUIPMENT TYPE.
* 
*         CALLS  SFM. 
* 
*         XREF   COMSSFM. 
  
  
          PURGMAC RDVT
  
 RDVT     MACRO  F,E
  MACREF RDVT 
  IFC NE,$E$$ 
  R= X2,E 
  MX7 12D 
  R= A1,F+1 
  LX2 48D 
  BX1 -X7*X1
  BX7 X7*X2 
  BX7 X7+X1 
  SA7 A1
  ENDIF 
  R= X2,F 
  R= X7,RDTF
  RJ =XSFM
  ENDM
 RENSR    SPACE  4,10 
***       RENSR - RENABLE SRU ACCUMULATION. 
* 
*         RENSR  INC
* 
*         ENTRY  *INC* = VALUE OF UNIT CHARGE TO BE APPLIED.
* 
*         CALLS  CPM=.
  
  
          PURGMAC RENSR 
  
 RENSR    MACRO  A
  MACREF RENSR
  R= X2,1 
  R= X1,A 
  LX2 18
  BX1 X2+X1 
  SX2 53B 
  RJ =XCPM= 
  ENDM
 RERUN    SPACE  4,10 
***       RERUN - SET INPUT FILE INTO RERUN STATUS. 
* 
*         RERUN.
* 
*         EXIT   RERUN BIT SET ON INPUT FILE. 
* 
*         CALLS  SYS. 
  
  
          PURGMAC RERUN 
  
 RERUN    MACRO 
  MACREF RERUN
  SYSTEM QFM,R,0,1500B
  ENDM
 ROLLOUT  SPACE  4,80 
***       ROLLOUT - ROLLOUT JOB.
* 
* 
*         ROLLOUT ADDR
*         ENTRY - IF ADDR IS NOT SPECIFIED, ROLLOUT JOB.
*         IF ADDR IS PRESENT, ROLLOUT JOB FOR TIME/EVENT
*         DESCRIBED AT RA+ADDR. 
* 
*T ADDR   30/0,18/EVD,12/RTP
* 
*         WHERE - 
*         RTP = ROLLOUT TIME PERIOD IN JOB SCHEDULER DELAY INTERVALS
*         (0 .LE. RTP .LE. 7777B). IF RTP = 0, THE JOB ROLLS OUT FOR A
*         TIME DETERMINED BY THE SYSTEM TO INSURE THAT THE JOB WILL 
*         ROLL IN IF THE EVENT HE IS WAITING FOR IS LOST
*         OR NEVER OCCURS.
* 
*         EVD = EVENT DESCRIPTOR. 
*         IF EVD IS NON-ZERO, THE EVENT DESCRIPTOR AND ROLLOUT
*         TIME PERIOD, RTP, ARE PLACED IN THE CONTROL POINT 
*         AREA (TERW).  WHEN THE JOB ROLLS OUT IT WILL
*         WAIT FOR THE OCCURRENCE OF THE EVENT IN EVD 
*         OR THE SPECIFIED TIME PERIOD (RTP) TO ELAPSE
*         BEFORE BECOMING ELIGIBLE FOR ROLLIN.  THE UPPER 6 BITS OF 
*         EVD MUST BE NON-ZERO IN THIS CASE OR AN ERROR WILL BE 
*         FLAGGED.
* 
*         IF EVD = 0, EVENT IS TAKEN FROM CONTROL POINT AREA AND ONLY 
*         THE ROLLOUT TIME PERIOD IS TAKEN FROM RA + ADDR.
*         THIS OPTION ALLOWS THE USER TO ROLLOUT WAITING FOR
*         EVENTS THAT THE SYSTEM SPECIFIES. 
* 
*         IF EVD = EXTM+00XXB (0200XXB), EXTENDED TIMED ROLLOUT.
*         (ASSUME THE JOB SCHEDULER DELAY IS 1 SECOND). 
*         SINCE THE MAXIMUM TIME RTP CAN SPECIFY IS APPROXIMATELY 
*         1 HOUR AND 8 MINUTES, THE EXTENDED TIME ROLLOUT ALLOWS THE
*         USER TO ROLL OUT FOR ANY LENGTH OF TIME.
*         THIS IS A STRICT TIME ROLLOUT WITH NO EVENT DEPENDENCY. 
*         JOB ROLLS OUT FOR ( 7777*XX + RTP )B SECONDS. 
* 
*         PROGRAMMING NOTE: 
*         IT IS POSSIBLE FOR THE CENTRAL PROGRAM TO GET THE CPU BEFORE
*         THE ROLLOUT FLAG IS DETECTED BY THE SYSTEM. IN CASES
*         WHERE IT IS NECESSARY THAT THE CALLING PROGRAM KNOW 
*         THAT THE ROLLOUT HAS OCCURRED, HE SHOULD INTERROGATE
*         THE *TERW* WORD OF THE CONTROL POINT AREA.  THE LOWER 
*         THIRTY BITS OF *TERW* = 0 INDICATE THAT THE JOB HAS 
*         ROLLED OUT AND EITHER THE EVENT REQUIRED HAS OCCURRED 
*         OR THE TIME PERIOD HAS ELAPSED.  THE CALLING PROGRAM MUST 
*         HAVE AN *SSJ=* ENTRY POINT TO ALLOW USE OF AN *RSB* CALL
*         TO *CPUMTR* TO READ WORD *TERW*.
* 
*         EXAMPLES: 1) ATTEMPTED ATTACH RESULTS IN FILE BUSY. 
*         ASSUME ERROR PROCESSING IS SET. 
*         USE OF ROLLOUT MACRO WITH EVD = 0 WILL ROLLOUT FOR
*         TIME SPECIFIED BY *RTP* WAITING FOR THE EVENT - 
*         FILE READY TO BE ACCESSED. (*0RP* ENTERS THIS EVENT 
*         IN THE SYSTEM EVENT TABLE WHEN THE FILE BECOMES NOT BUSY).
*         *PFM* STORES THE DESCRIPTOR FOR THIS EVENT
*         IN THE CONTROL POINT AREA (TERW) WHEN HE
*         FINDS THE FILE BUSY BUT HE DOES NOT SET THE ROLLOUT 
*         FLAG, ALLOWING THE USER TO CHOOSE WHETHER TO ROLLOUT
*         IMMEDIATELY OR TO PROCESS SOME OTHER FUNCTION FIRST.
* 
*         2) JOB DEPENDENCY.
*         SUPPOSE THAT BEFORE JOB1 CONTINUES PROCESSING THAT
*         HE WANTS JOB2 (A SYSTEM ORIGIN TYPE JOB) TO EXECUTE 
*         A CERTAIN FUNCTION. 
*         ASSUME JOB1 USES THE ROLLOUT MACRO WITH 
*         EVD = 1300 AND RTP = 600. 
*         THE ROLLOUT FLAG WILL BE SET FOR JOB1 TO ROLLOUT
*         FOR 600 SECONDS OR UNTIL EVENT 1300 TAKES PLACE.
*         BEFORE THE 600 SECONDS HAS ELAPSED, SUPPOSE JOB2
*         MAKES THE MACRO CALL - EESET 1300, ENTERING 
*         THE EVENT 1300 IN THE SYSTEM EVENT TABLE. 
*         JOB1 WILL THEN BE SCHEDULED FOR ROLLIN TO 
*         RESUME PROCESSING.
* 
*         CALLS  CPM=.
  
  
          PURGMAC ROLLOUT 
  
 ROLLOUT MACRO A
  MACREF ROLLOUT
  IFC NE,$A$$,2 
  R= X1,A 
  ELSE 1
  SX1 B0
  SX2 6 
  RJ =XCPM= 
  ENDM
 SETFAL   SPACE  4,10 
***       SETFAL - SET LOCAL FILE ACCESS LEVEL. 
* 
*         SETFAL LFN,AL 
* 
*         ENTRY  LFN = FET ADDRESS OF LOCAL FILE. 
*                AL = NEW ACCESS LEVEL FOR FILE (SYMBOL OR ADDRESS).
* 
*         CALLS  LFM=.
  
  
          PURGMAC  SETFAL 
  
 SETFAL   MACRO  F,AL 
  LOCAL I 
  MACREF SETFAL 
.AL IFC NE,$AL$$
I SET 77B 
  ECHO 4,B=("ALM0","ALM1","ALM2","ALM3"),C=(0,1,2,3)
.AC IFC EQ,$B$AL$ 
  STOPDUP 
I SET C 
.AC ENDIF 
  ECHO 4,B=("ALM4","ALM5","ALM6","ALM7"),C=(4,5,6,7)
.AD IFC EQ,$B$AL$ 
  STOPDUP 
I SET C 
.AD ENDIF 
.AE IFEQ I,77B
  R= A3,AL
.AE ELSE
  R= X3,I 
.AE ENDIF 
.AL ELSE
  BX3  X3-X3
.AL ENDIF 
  SA1 F+4 
  MX0 -3
  BX3 -X0*X3
  LX0 36D 
  LX3 36D 
  BX1 X0*X1 
  BX6 X3+X1 
  SA6 A1
  SA1 F+1 
  MX6 1 
  LX6 39D-59D 
  BX6 X1+X6 
  SA6 A1
  R= X2,F 
  R= X7,7 
  RJ =XLFM= 
  ENDM
 SETGLS   SPACE  4,15 
**        SETGLS - SET GLOBAL LIBRARY SET.
* 
*         SETGLS ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER WORD.
*T ADDR   6/ ,18/ LIST ,36/0
*         LIST   LIST OF LIBRARY NAMES LEFT JUSTIFIED, ZERO FILLED, 
*                TERMINATED BY WORD OF ZEROS. 
* 
*         EXIT
*T ADDR   6/ ,18/ END ,35/0,1/1 
*         END    LWA OF LIST OF LIBRARY NAMES.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  SETGLS 
  
 SETGLS   MACRO  A
  MACREF SETGLS 
  R= X1,A 
  SX2 47B 
  RJ =XCPM= 
  ENDM
 SETICC   SPACE  4,30 
**        SETICC - SET INTER-CONTROL POINT COMMUNICATION CONTROLS.
* 
*         SETICC ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER BLOCK. 
* 
*T ADDR   1/T,11/ RES,6/ LEN0,18/ ADD0,6/ LEN1,18/ ADD1 
*T,ADDR+1 12/ RES,6/ LEN2,18/ ADD2,12/ LEN3,18/ ADD3
* 
*         T      *TDAM* FUNCTION WRITE CONTROL. 
*                  0 = DISABLE *TDAM* WRITES TO SUBSYSTEM.
*                  1 = ENABLE *TDAM* WRITES TO SUBSYSTEM. 
*         RES    RESERVED FOR CDC.
*         LEN0   LENGTH - 1 OF BUFFER 0.
*         ADD0   ADDRESS OF BUFER 0.
*         LEN1   LENGTH - 1 OF BUFFER 1.
*         ADD1   ADDRESS OF BUFER 1.
* 
*         RES    RESERVED FOR CDC.
*         LEN2   LENGTH - 1 OF BUFFER 2.
*         ADD2   ADDRESS OF BUFER 2.
*         LEN3   LENGTH - 1 OF BUFFER 3.
*         ADD3   ADDRESS OF BUFER 3.
* 
*         EXIT   INTER-CONTROL POINT COMMUNICATION CONTROLS UPDATED.
*                PARAMETER BLOCK SAME AS ENTRY. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC  SETICC 
  
 SETICC   MACRO  A
  MACREF SETICC 
  R= X1,A 
  SX2 144B
  RJ =XCPM= 
  ENDM
 GETTPD   SPACE  4,55 
**        GETTPD - GET TAPE DEFAULTS. 
* 
*         GETTPD ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER BLOCK TO WHICH TO
*                  INFORMATION. 
* 
*         EXIT   TAPE DEFAULT INFORMATION RETURNED TO PARAMETER BLOCK.
* 
*T ADDR   30/ RES,3/JCV,2/JD,1/R,3/JMD,3/JND,18/ RES
*T,       30/ RES,3/SCV,2/SD,1/R,3/SMD,3/SND,18/ RES
* 
*         RES    RESERVED FOR CDC.
*         JCV    JOB DEFAULT CONVERSION MODE FOR 9 TRACK AND CARTRIDGE
*                  TAPE.
*                  2 = ASCII. 
*                  3 = EBCDIC.
*         JD     JOB DEFAULT TAPE DEVICE TYPE.
*                  0 = MT.
*                  1 = CT.
*                  2 = NT.
*                  3 = AT.
*         JMD    JOB DEFAULT MT TAPE DENSITY. 
*                  1 = 556 BPI. 
*                  2 = 200 BPI. 
*                  3 = 800 BPI. 
*         RES    RESERVED FOR CDC.
* 
*         RES    RESERVED FOR CDC.
*         JND    JOB DEFAULT NT TAPE DENSITY. 
*                  3 = 800 BPI. 
*                  4 = 1600 BPI.
*                  5 = 6250 CPI.
*         SCV    SYSTEM DEFAULT CONVERSION MODE FOR 9 TRACK AND 
*                  CARTRIDGE TAPE.
*                  2 = ASCII. 
*                  3 = EBCDIC.
*         SD     SYSTEM DEFAULT TAPE DEVICE TYPE. 
*                  0 = 7 TRACK. 
*                  1 = CARTRIDGE. 
*                  2 = 9 TRACK. 
*                  3 = ACS CARTRIDGE. 
*         SMD    SYSTEM DEFAULT MT TAPE DENSITY.
*                  1 = 556 BPI. 
*                  2 = 200 BPI. 
*                  3 = 800 BPI. 
*         SND    SYSTEM DEFAULT NT TAPE DENSITY.
*                  3 = 800 BPI. 
*                  4 = 1600 BPI.
*                  5 = 6250 CPI.
*         RES    RESERVED FOR CDC.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  GETTPD 
  
 GETTPD   MACRO  A
  MACREF GETTPD 
  R= X1,A 
  SX2 145B
  RJ =XCPM= 
  ENDM
 SETJAL   SPACE  4,10 
***       SETJAL - SET JOB ACCESS LEVEL.
* 
*         SETJAL ADDR 
* 
*         ENTRY  ADDR = ADDRESS OF NEW JOB ACCESS LEVEL VALUE.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  SETJAL 
  
 SETJAL   MACRO  ADDR 
  MACREF SETJAL 
  R= X1,ADDR
  SX2 117B
  RJ =XCPM= 
  ENDM
 SETJCR   SPACE  4,15 
***       SETJCR - SET JOB CONTROL REGISTERS. 
* 
*         SETJCR ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF NEW JOB CONTROL REGISTERS
*T ADDR   6/  EF,18/  R3,18/  R2,18/  R1
*         EF     PREVIOUS ERROR FLAG
*         R1 - R2 CONTROL REGISTERS 
* 
*         CALLS  CPM=.
  
  
          PURGMAC SETJCR
  
 SETJCR   MACRO  A
  MACREF SETJCR 
  R= X1,A 
  SX2 25B 
  RJ =XCPM= 
  ENDM
 SETJOB   SPACE  4,25 
***       SETJOB - SET JOB CHARACTERISTICS. 
* 
*         SETJOB ADDR 
* 
*         ENTRY 
*T ADDR   42/ UJN,18/0
*T ADDR+1 36/0,12/ OP,12/ DC
*         UJN    USER JOB NAME, 1 TO 7 ALPHANUMERIC CHARACTERS, 
*                LEFT JUSTIFIED WITH BINARY ZERO FILL.
*                ZERO = NO CHANGE OF USER JOB NAME. 
*         OP     END OF JOB OPTIONS, SPECIFIED BY 2 DISPLAY 
*                CODE CHARACTERS. 
*                *SU* = SUSPEND JOB (VALID ONLY FOR TXOT JOBS). 
*                *TJ* = TERMINATE JOB.
*                ZERO = NO CHANGE TO END OF JOB OPTION. 
*         DC     DISPOSITION OF OUTPUT AT END OF JOB TIME, SPECIFIED
*                BY 2 DISPLAY CODE CHARACTERS.
*                *TO* = QUEUE OUTPUT TO TXOT QUEUE. 
*                *NO* = DO NOT QUEUE OUTPUT FILES.
*                *DF* = QUEUE OUTPUT TO JOB DEFAULT QUEUE.
*                ZERO = NO CHANGE TO OUTPUT DISPOSITION OPTION. 
  
  
          PURGMAC  SETJOB 
  
 SETJOB   MACRO  A
  MACREF SETJOB 
  R= X1,A 
  SX2 106B
  RJ =XCPM= 
  ENDM
 SETLC    SPACE  4,25 
***       SETLC - SET LOADER CONTROL WORD.
* 
*         SETLC  ADDR 
* 
*         ENTRY 
*T ADDR   1/DMO,1/GLF,4/LMO,1/RF,3/RL,1/LF,1/LLF,12/RL,12/DCB,24/0
*         DMO  USE DEFAULT MAP OPTIONS IF NOT SET 
*         GLF  GLOBAL LIBRARY FLAG
*         LMO  LOCAL MAP OPTIONS
*              10 = LOCAL MAP OPTION X
*               4 = LOCAL MAP OPTION E
*               2 = LOCAL MAP OPTION B
*               1 = LOCAL MAP OPTION S
*         RF   REDUCE FLAG
*         RL   RESERVED FOR LOADER
*         LF   RELOCATABLE LOAD FROM USER LIBRARY FLAG
*         LLF  USER LIBRARY LOAD FLAG 
*         DCB  INTERACTIVE DEBUG CONTROL BYTE 
* 
*         CALLS  CPM=.
  
  
          PURGMAC SETLC 
  
 SETLC    MACRO  A
  MACREF SETLC
  R= X1,A 
  SX2 22B 
  RJ =XCPM= 
  ENDM
 SETOV    SPACE  4,10 
***       SETOV - SET/CLEAR *OVERRIDE* REQUIRED TO DROP JOB FLAG. 
*         CALLER MUST HAVE *SSJ=* ENTRY POINT.
* 
*         SETOV  P
* 
*         ENTRY  *P* = OPTION (LOWER 12 BITS = 0, IF CLEAR *OVERRIDE* 
*                      FLAG, .NE. 0, IF SET *OVERRIDE* FLAG). 
* 
*         CALLS  CPM=.
  
  
          PURGMAC SETOV 
  
 SETOV    MACRO  P
  MACREF SETOV
  R= X1,P 
  SX2 76B 
  RJ =XCPM= 
  ENDM
 SETPAGE  SPACE  4,20 
***       SETPAGE - SET PAGE SIZE PARAMETERS. 
* 
*         SETPAGE  ADDR 
* 
*         ENTRY  ADDR = PARAMETER ADDRESS 
* 
*T,ADDR   28/RES,4/JPD,8/JPL,8/JPW,11/RES,1/C 
*                JPD  = JOB PRINT DENSITY (6 OR 8)
*                JPL  = JOB PAGE LENGTH 
*                JPW  = JOB PAGE WIDTH
*                C    = COMPLETE BIT
*                RES  = RESERVED FIELD
* 
*         CALLS  CPM=.
  
  
          PURGMAC SETPAGE 
  
 SETPAGE  MACRO  A
  MACREF SETPAGE
  R= X1,A 
  SX2 130B
  RJ =XCPM= 
  ENDM
 SETPFP   SPACE  4,30 
***       SETPFP - SET PERMANENT FILE PARAMETERS. 
* 
*         SETPFP ADDR 
*         MUST BE CALLED FROM SYSTEM ORIGIN JOB.
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER BLOCK WHICH HAS THE
*                         FOLLOWING FORMAT -
* 
*T ADDR   42/ FAMILY NAME,14/ ,4/ FG
*T,       42/ PACKNAME,18/
*T,       42/ USER NUMBER,18/ USER INDEX
*         FG = FLAG BITS DENOTING WHICH FIELDS TO SET.
*                BIT 3 - FAMILY NAME. 
*                BIT 2 - PACKNAME.
*                BIT 1 - USER NUMBER. 
*                BIT 0 - USER INDEX.
* 
*         EXIT   PARAMETERS SET IN CONTROL POINT AREA IF FLAGGED. 
*                STATUS OF SPECIFIED FAMILY RETURNED AS FOLLOWS - 
* 
*T ADDR   42/ FAMILY NAME,6/ ST,8/ 0,4/ FG
*         ST = 0 IF FAMILY NAME SET IN CONTROL POINT AREA.
*            = 1 IF SPECIFIED FAMILY WAS NOT FOUND (CURRENT FAMILY
*                REMAINS UNCHANGED).
* 
*         CALLS  CPM=.
  
  
          PURGMAC SETPFP
  
 SETPFP   MACRO  A
  MACREF SETPFP 
  R= X1,A 
  SX2 60B 
  RJ =XCPM= 
  ENDM
 SETPR    SPACE  4,10 
***       SETPR - SET JOB CPU PRIORITY. 
* 
*         SETPR  N
* 
*         ENTRY  *N* = JOB CPU PRIORITY.
* 
*         CALLS  CPM=.
  
  
          PURGMAC SETPR 
  
 SETPR    MACRO  N
  MACREF SETPR
  R= X1,N 
  R= X2,1 
  RJ =XCPM= 
  ENDM
 SETQP    SPACE  4,10 
***       SETQP - SET QUEUE PRIORITY. 
* 
*         SETQP  N
* 
*         EXIT
*         MESSAGE *SETQP MACRO NOT SUPPORTED.* ISSUED.
* 
*         MACROS MACREF, MESSAGE. 
  
  
          PURGMAC SETQP 
  
 SETQP    MACRO  N
  MACREF SETQP
  SX1 =C* SETQP MACRO NOT SUPPORTED.* 
  MESSAGE X1,3,R
  ENDM
 SETRNR   SPACE  4,10 
***       SETRNR - SET ROLL/NO ROLL (*SSJ=* REQUIRED).
* 
*         SETRNR A
* 
*         ENTRY  A = *ROLL* TO ALLOW JOB ROLLOUT. 
*                A = *NOROLL* TO INHIBIT JOB ROLOOUT. 
*                A = *OPROLL* TO ALLOW OPERATOR ROLLOUT.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  SETRNR 
  
 SETRNR   MACRO  A
  MACREF SETRNR 
 .1 IFC EQ,$A$ROLL$ 
  BX1 X1-X1 
 .1 ELSE
 .2 IFC EQ,$A$NOROLL$ 
  R= X1,1 
 .2 ELSE
 .3 IFC EQ,$A$OPROLL$ 
  R= X1,2 
 .3 ELSE
  ERR - INVALID PARAMETER.
  ENDIF 
  SX2 107B
  RJ =XCPM= 
  ENDM
 SETSC    SPACE  4,20 
***       SETSC - SET SERVICE CLASS OF EXECUTING JOB. 
* 
*         SETSC  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER WORD.
* 
*         PARAMETER WORD FORMAT - 
* 
*T        48/  0, 6/  ER, 6/  SC
* 
*         ER = ERROR CODE.
*         SC = VALUE FOR NEW SERVICE CLASS. 
* 
*         USES   X - 1, 2.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  SETSC
  
 SETSC    MACRO  A
  MACREF SETSC
  R= X1,A 
  SX2 124B
  RJ =XCPM= 
  ENDM
 SETSLM   SPACE  4,20 
***       SETSLM - SET NFL WORD *SLMN*. 
* 
*         SETSLM ADDR,W 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER WORD.
*                *W* IF PRESENT, WRITE WORD *SLMN*. 
*                    IF OMITTED, READ WORD *SLMN*.
* 
*         PARAMETER WORD FORMAT - 
* 
*T        53/ 0,1/ SM,6/ TM 
*         SM = SCREEN MODE FLAG.
*                0 = LINE MODE. 
*                1 = SCREEN MODE. 
*         TM = TERMINAL MODEL.  AN ORDINAL FROM 1 TO 63 DECIMAL.
*              ZERO MEANS TYPE UNKNOWN.  SEE TABLE OF CORRESPONDING 
*              TERMINAL ORDINALS, *TCTO*, IN *COMCGTO* FOR MORE 
*              INFORMATION. 
* 
*         CALLS  TLX. 
  
  
          PURGMAC  SETSLM 
  
 SETSLM   MACRO  A,W
  MACREF SETSLM 
  R= X2,A 
  IFC NE,$W$$ 
  R= X1,1 
  LX1 18
  BX2 X1+X2 
  ENDIF 
  SX1 15B 
  TLX X1,X2 
  ENDM
 SETSS    SPACE  4,10 
***       SETSS - SET INTERACTIVE SUBSYSTEM.
* 
*         SETSS  N
* 
*         ENTRY  (N) = SUBSYSTEM CODE.
* 
*         EXIT   NONE.
* 
*         CALLS  CPM= 
  
  
          PURGMAC SETSS 
  
 SETSS    MACRO  N
  MACREF SETSS
  R= X1,N 
  SX2 26B 
  RJ =XCPM= 
  ENDM
 SETSSM   SPACE  4,10 
***       SETSSM - SET SECURE SYSTEM MEMORY.
* 
*         SETSSM P
* 
*         ENTRY  *P* = OPTION.
*                IF P .NE. 0, SET SECURE SYSTEM MEMORY FLAG.
*                IF P=0, CLEAR SECURE SYSTEM MEMORY FLAG. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC SETSSM
  
 SETSSM   MACRO  P
  MACREF SETSSM 
  R= X1,P 
  SX2 10B 
  RJ =XCPM= 
  ENDM
 SETTPD   SPACE  4,35 
**        SETTPD - SET TAPE DEFAULTS FOR JOB. 
* 
*         SETTPD ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF PARAMETER WORD.
* 
*T ADDR   30/ RES,3/CVM,2/DT,1/R,3/MTD,3/NTD,18/ RES
* 
*         RES    RESERVED FOR CDC.
*         CVM    CONVERSION MODE FOR 9 TRACK AND CARTRIDGE TAPE.
*                  2 = ASCII. 
*                  3 = EBCDIC.
*         DT     TAPE DEVICE TYPE.
*                  0 = 7 TRACK. 
*                  1 = CARTRIDGE. 
*                  2 = 9 TRACK. 
*                  3 = ACS CARTRIDGE. 
*         MTD    MT TAPE DENSITY. 
*                  1 = 556 BPI. 
*                  2 = 200 BPI. 
*                  3 = 800 BPI. 
*         NTD    NT TAPE DENSITY. 
*                  3 = 800 BPI. 
*                  4 = 1600 BPI.
*                  5 = 6250 CPI.
*         RES    RESERVED FOR CDC.
* 
* 
* 
*         EXIT
*T ADDR 
* 
* 
*         CALLS  CPM=.
  
  
          PURGMAC  SETTPD 
  
 SETTPD   MACRO  A
  MACREF SETTPD 
  R= X1,A 
  SX2 146B
  RJ =XCPM= 
  ENDM
 SETUI    SPACE  4,10 
***       SETUI - SET USER INDEX. 
*         *SYOT* REQUIRED.  *SSJ=* REQUIRED ON SECURE SYSTEM. 
* 
*         SETUI  N
* 
*         ENTRY  *N* = USER INDEX.
* 
*         CALLS  CPM=.
  
  
          PURGMAC SETUI 
  
 SETUI    MACRO  N
  MACREF SETUI
  R= X1,N 
  SX2 21B 
  RJ =XCPM= 
  ENDM
 SUBR     SPACE  4,10 
***       SUBR - SUBROUTINE TAG MACRO 
* 
*         ENTRY = TAG 
* 
*         EXIT = TAGX 
* 
*         GENERATES 
* TAGX    CON    0
* TAG     EQU    *-1
  
  
          PURGMAC SUBR
  
          MACRO  SUBR,A 
 A_X CON 0
 A EQU *-1
  ENDM
 TLX      SPACE  4,10 
***       TLX - ENTER *TLX* REQUEST.
* 
*         TLX    F,A
* 
*         ENTRY  *F* = FUNCTION CODE. 
*                *A* = ARGUMENT.
* 
*         CALLS  SYS=.
  
  
          PURGMAC TLX 
  
 TLX      MACRO  F,A
  MACREF TLX
  R= X1,F 
  R= X2,A 
  SX6 3RTLX 
  LX1 24D 
  PX6 X6
  BX1 X1+X2 
  LX6 59D-17D 
  BX6 X6+X1 
  RJ =XSYS= 
  ENDM
 TSTATUS  SPACE  4,30 
***       TSTATUS - RETURN TERMINAL STATUS. 
* 
*         TSTATUS ADDR,L
* 
*         ENTRY  *ADDR* = ADDRESS OF TWO WORD STATUS RETURN BUFFER. 
*                *L* = LENGTH OF RETURN BUFFER (DEFAULT = 2). 
* 
*         EXIT -
* 
*T, ADDR  42/ TID,6/ SYS,12/ TN 
*T        3/ 0,3/ NT,6/ CS,4/ 0,8/ TC,18/ INT,6/ TRAN,12/ ST
*T        42/ NTN,18/0          (IF *L* .GT. 2) 
* 
*         TID    DISPLAY CODE TERMINAL TYPE IDENTIFICATION. 
*         SYS    SUBSYSTEM. 
*                0 = NULL 
*                1 = BASIC
*                2 = FORTRAN
*                3 = FTNTS
*                4 = EXECUTE
*                5 = BATCH
*                6 = ACCESS 
*         TN     OCTAL TERMINAL NUMBER. 
*         NT     NETWORK TYPE.
*                0 = JOB NOT CONNECTED TO A NETWORK TERMINAL
*                1 = JOB CONNECTED TO NAM/CCP 
*                2 = JOB CONNECTED TO NAM/CDCNET
*         CS     CONNECTION STATUS. 
*                0 = NOT INTERACTIVE
*                1 = DETACHED 
*                2 = ONLINE 
*         TC     TERMINAL CLASS.
*                1 = M33, M35, M37, OR M38 TTY
*                2 = CDC 713-10, 722, 751-1, 752, 756 
*                3 = CDC 721
*                4 = IBM 2741 
*                5 = M40 TTY
*                6 = HAZELTINE 2000 
*                7 = DEC VT100
*                10 = TEKTRONIC 4010, 4014
*                11 = HASP PROTOCOL (POSTPRINT FORMAT CONTROL)
*                12 = 200 USER TERMINAL 
*                13 = CDC 714-30
*                14 = CDC 711-10
*                15 = CDC 714-10/20 
*                16 = HASP PROTOCOL (PREPRINT FORMAT CONTROL) 
*                17 = CDC 731-12, 732-12
*                20 = IBM 2780
*                21 = IBM 3780
*         INT    CURRENT INTERRUPT ADDRESS IF SPECIFIED ON THE *DISTC*
*                MACRO IF *INT* IS ALSO SPECIFIED ON THE *DISTC*
*                MACRO, BIT 35 IS SET.
*         TRAN   TRANSMISSION CODE. 
*                0 = ASCII. 
*                1 = CORRESPONDENCE.
*                2 = NIXDORF. 
*                3 = NETWORK. 
*         ST     TERMINAL STATUS BITS.
*                BIT 0 = PARITY (ODD IF SET)
*                BIT 1 = INITIAL CHARACTER SET (EXTENDED IF SET)
*                BIT 2 = CURRENT CHARACTER SET
*                BIT 3 = FULL DUPLEX
*                BIT 4 = TAPE MODE
*                BIT 5 = BRIEF MODE 
*                BIT 6 = USER FORMAT EFFECTORS (ON IF SET)
*         NTN    NETWORK TERMINAL NAME  (DISPLAY CODE, SPACE FILLED). 
* 
*         IF THE CONNECTION STATUS IS NOT ONLINE, THE ONLY VALID FIELD
*         WILL BE *CS*.  ALL OTHER FIELDS WILL BE ZERO EXCEPT FOR 
*         THE *TID* FIELD WHICH WILL BE SET TO BLANKS.
* 
*         CALLS  TLX. 
  
  
          PURGMAC TSTATUS 
  
 TSTATUS  MACRO  A,L
  MACREF TSTATUS
  R= X2,A 
  R= X1,2 
  IFC NE,$L$$,1 
  R= X1,L 
  LX1 18
  BX2 X1+X2 
  SX1 5 
  TLX X1,X2 
  ENDM
 UTL      SPACE  4,10 
***       UTL - SET/CLEAR *UTL=* ENTRY POINT (*SSJ=* REQUIRED). 
* 
*         UTL    A
* 
*         ENTRY  A = *SET* TO SET *UTL=* IN WORD *SEPW*.
*                A = *CLEAR* TO CLEAR *UTL=* IN WORD *SEPW*.
* 
*         CALLS  CPM=.
  
  
          PURGMAC  UTL
 UTL      MACRO  A
  MACREF  UTL 
 .1 IFC EQ,$A$CLEAR$
  BX1 X1-X1 
 .1 ELSE
 .2 IFC EQ,$A$SET$
  R= X1,1 
 .2 ELSE
  ERR - INCORRECT PARAMETER.
  ENDIF 
  SX2 65B 
  RJ =XCPM= 
  ENDM
 VALID    SPACE  4,30 
***       VALID - VALIDATE USER NUMBER. 
*         MUST BE CALLED FROM SPECIAL SYSTEM JOB. 
* 
*         VALID  ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS OF 6 WORD BLOCK.
* 
*T WORD0  42/USER NUMBER,18/
*T,WORD1  42/PASSWORD,18/P
*T,WORD2  42/FAMILY NAME,18/0 
*T,WORD3  60/CURRENT ALMW 
*T,WORD4  60/CURRENT ACLW 
*T,WORD5  60/CURRENT AACW 
* 
*         P " 0 IF PASSWORD IS NOT TO BE CHECKED. 
* 
*         EXIT   PARAMETER BLOCK IS RETURNED AS FOLLOWS.
* 
*T WORD0  42/USER NUMBER,18/UI
*T,WORD1  42/PASSWORD,18/P
*T,WORD2  42/FAMILY NAME,17/,1/S
*T,WORD3  60/RETURNED ALMW
*T,WORD4  60/RETURNED ACLW
*T,WORD5  60/RETURNED AACW
* 
*                S = 1, IF SECONDARY USER STATEMENT.
*                UI = USER INDEX. 
*                JOB IS ABORTED IF USER IS NOT VALIDATED. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC VALID 
  
 VALID    MACRO  A
  MACREF VALID
  R= X1,A 
  SX2 40B 
  RJ =XCPM= 
  ENDM
 VERIFYJ  SPACE  4,10 
***       VERIFYJ - INITIATE INPUT FILE.
* 
*         VERIFYJ ADDR,R
* 
*         ENTRY  ADDR = FET ADDRESS.
*                R = RECALL. (OPTIONAL) 
* 
*         SEE *VEJ* DOCUMENTATION FOR FET FORMAT. 
  
  
          PURGMAC VERIFYJ 
  
 VERIFYJ  MACRO  A,R
  MACREF VERIFYJ
  SYSTEM VEJ,R,A
  ENDM
 XCHNGE   SPACE  4,15 
***       XCHNGE - INITIATE SUB-CONTROL POINT.
* 
*         XCHNGE ADDR,TIML
* 
*         ENTRY  ADDR= ADDRESS OF SUB-CONTROL POINT EXCHANGE PACKAGE. 
*                TIML= CPU TIME LIMIT FOR SUB-CONTROL POINT.
*                TIME LIMIT IS EXPRESSED IN MILLISECONDS AND MUST 
*                BE < 18 BITS.
* 
*         CALLS  SYS=.
  
  
          PURGMAC XCHNGE
  
  
 XCHNGE   MACRO  A,T
  MACREF XCHNGE 
  SYSTEM XJP,R,A,T
  ENDM
 XPAUSE   SPACE  4,25 
***       XPAUSE - PAUSE AT CONTROL POINT.
* 
*         XPAUSE MADD 
* 
*         *XPAUSE* FLASHES THE SPECIFIED MESSAGE AT THE CONTROL POINT,
*         AND WAITS FOR AN OPERATOR *GO* BEFORE RETURNING CONTROL TO
*         THE CALLER. 
* 
*         *XPAUSE* REQUIRES ONE OF THE FOLLOWING -
*                *SSJ=* ENTRY POINT,
*                SYSTEM ORIGIN, 
*                *CPAM* PRIVILEGES, 
*                *CSOJ* PRIVILEGES WITH *DEBUG* ON. 
* 
*         ENTRY  MADD = MESSAGE ADDRESS.
* 
*         USES   A - 1, 6.
*                X - 1, 6.
* 
*         MACROS FLASH, MESSAGE, RECALL.
* 
*         XREF   COMCCMD, COMCSYS.
  
  
          PURGMAC  XPAUSE 
  
 XPAUSE   MACRO  AD 
  LOCAL XP1 
  MACREF XPAUSE 
  MESSAGE AD,1
  FLASH 
  R= A1,0 
  R= X6,10000B
  BX6 X1+X6 
  R= A6,0 
 XP1 RECALL 
  R= A1,0 
  LX1 59-12 
  NG X1,XP1 
  ENDM
          TITLE  COMCMAC - PERMANENT FILE SPECIAL REQUEST MACROS. 
 =4       SPACE  4,10 
**        PERMANENT FILE SPECIAL REQUEST MACRO. 
* 
*         THE FOLLOWING PARAMETERS ARE DEFINED BY THIS MACRO FOR USE
*         BY THE PERMANENT FILE MANAGEMENT SPECIAL REQUEST MACROS.
*         CODE CAN BE OPTIMIZED BY PASSING ARGUMENTS VIA RIGISTERS
*         INDICATED ON THE FOLLOWING PARAMETERS.
*         AF   = ALTERNATE STORAGE FLAGS. 
*                ( CLEARED IF NOT SPECIFIED. )
*         AL   = ACCESS LEVEL FOR FILE. 
*         ASA  = ALTERNATE STORAGE ADDRESS. 
*         CC   = COMMAND CODE.
*         CDT  = CREATION DATE AND TIME.
*         FL   = FILE LENGTH. 
*         FM   = FAMILY NAME. 
*                ( IF PRESENT, *UI* MUST ALSO BE SPECIFIED. ) 
*         LFN  = FET ADDRESS. 
*         MO   = ACCESS MODE. 
*         PFC  = BUFFER FOR CATALOG ENTRY.
*         PFID = PERMANENT FILE CATALOG ADDRESS.
*         PFN  = PERMANENT FILE NAME. 
*         SRB  = SPECIAL REQUEST BLOCK. 
*                ( USE *X2* FOR OPTIMIZATION. ) 
*         UI   = USER INDEX.
*                ( IF PRESENT, *FM* MUST ALSO BE SPECIFIED. ) 
* 
*         NOTE - PARAMETERS CAN BE REGISTERS OR CONSTANTS AS FOLLOWS. 
* 
*         WHEN NOT PREFIXED BY THE EQUIVALENCE CHARACTER, #,
*                REGISTERS - SPECIFY THE VALUE TO BE PLACED IN THE
*                            FET. 
*                CONSTANTS - SPECIFY THE ADDRESS CONTAINING THE VALUE 
*                            TO BE PLACED IN THE FET. 
* 
*         WHEN PREFIXED BY THE EQUIVALENCE CHARACTER, 
*                REGISTERS - SPECIFY THE ADDRESS OF THE VALUE TO BE 
*                            PLACED IN THE FET. 
*                CONSTANTS - SPECIFY THE LOCATION CONTAINING THE
*                            ADDRESS OF THE VALUE TO BE PLACED IN THE 
*                            FET. 
* 
*         THE FOLLOWING PARAMETERS ARE USED TO DEFINE ADDRESSES, NOT
*         DATA VALUES, AND ARE NOT PROCESSED ACCORDING TO THE ABOVE 
*         PREFIX RULES. 
*         LFN, PFC, SRB.
* 
*         THE FET LENGTH IS ASSUMED TO BE 16D.
* 
*         USES   X - 2, 3, 4, 6, 7. 
*                A - 2, 3, 4, 6.
  
  
          PURGMAC =4
  
 =4       MACRO  LFN,PFN,MO,FL,SRB,UI,FM,PFID,PFC,ASA,CDT,AF,CC,AL
   LOCAL  I 
* 
*         SETUP PERMANENT FILE MODE.
* 
A IFC NE,$MO$$
I SET 77B 
  ECHO 4,B=(W,R,A,E,N,M,RM,RA),C=(0,1,2,3,4,5,6,7)
AX IFC EQ,$B$MO$
  STOPDUP 
I SET C+40B 
AX ENDIF
A1 IFEQ I,77B 
  X= X4,MO
A1 ELSE 1 
  R= X4,I 
A1 ENDIF
A ELSE
I SET 100B
A ENDIF 
* 
*         COMBINE PERMANENT FILE NAME AND MODE. 
* 
B IFC NE,$PFN$$ 
  X= X3,PFN 
B2 IFEQ I,100B
  SA4 LFN+10B 
  MX7 -6
  BX4 -X7*X4
B2 ENDIF
  BX6 X3+X4 
  SA6 LFN+10B 
B ELSE
B3 IFNE I,100B
  SA3 LFN+10B 
  MX7 54D 
  BX6 X7*X3 
  BX6 X6+X4 
  SA6 A3
B3 ENDIF
B ENDIF 
* 
*         SETUP *PFC* BUFFER POINTER. 
* 
C IFC NE,$PFC$$ 
  R= X3,PFC 
  R= A4,LFN+1 
  MX6 42D 
  BX6 X6*X4 
  BX6 X6+X3 
  SA6 A4
C ENDIF 
* 
*         SETUP FILE LENGTH SPECIFICATION.
* 
D IFC NE,$FL$$
  X= X4,FL
  BX6 X4
  SA6 LFN+11B 
D ENDIF 
* 
*         SETUP SPECIAL REQUEST BLOCK POINTER.
* 
I SET 0 
E IFC NE,$SRB$$ 
I SET 77B 
E1 IFC NE,$SRB$X2$
  R= X2,SRB 
E1 ENDIF
  BX6 X2
  SA6 LFN+17B 
E ELSE
  ECHO 5,B=(UI,FM,PFID,ASA,CDT,AF)
EX IFC NE,$B$$
  STOPDUP 
  SA2 LFN+17B 
I SET 77B 
EX ENDIF
E ENDIF 
* 
*         SETUP PERMANENT FILE CATALOG INDEX. 
* 
F IFNE I,0
F1 IFC NE,$PFID$$ 
  X= X4,PFID
  BX6 X4
  SA6 X2
F1 ENDIF
* 
*         SETUP ALTERNATE STORAGE ADDRESS AND FLAGS.
* 
FA IFC NE,$ASA$AF$
F2 IFC NE,$AF$$ 
.S MICRO 1,1, AF
F3 IFC EQ,$".S"$-$
.F MICRO 2,, AF 
  X= X4,".F"
F3 ELSE 
  X= X4,AF
  SX4 X4+4000B
F3 ENDIF
  LX4 59D-11D 
F2 ELSE 
  BX4 X4-X4 
F2 ENDIF
F4 IFC NE,$ASA$$
  X= X3,ASA 
  BX6 X4+X3 
F4 ELSE 
  SA3 X2+B1 
  MX6 -48D
  BX3 -X6*X3
  BX6 X4+X3 
F4 ENDIF
  SA6 X2+B1 
FA ENDIF
* 
*         SETUP CREATION DATE AND TIME. 
* 
FB IFC NE,$CDT$$
  X= X4,CDT 
  BX6 X4
  SA6 X2+2
FB ENDIF
* 
*         SETUP FAMILY AND USER INDEX.
* 
F5 IFC NE,$FM$$ 
  X= X4,FM
  IFC EQ,$UI$$,1
  ERR - MISSING USER INDEX. 
  X= X3,UI
  BX6 X4+X3 
  SA6 X2+3
F5 ELSE 
  IFC NE,$UI$$,1
  ERR - MISSING FAMILY. 
F5 ENDIF
F ENDIF 
* 
*         SETUP ACCESS LEVEL AND SECURITY PROCESSING BIT. 
* 
G IFC NE,$AL$$
  X= X4,AL
  R= A3,LFN+4 
  MX6 -3
  BX4 -X6*X4
  LX6 36
  LX4 36
  BX3 X6*X3 
  BX6 X3+X4 
  SA6 A3
  R= A3,LFN+1 
  MX6 1 
  LX6 39-59 
  BX6 X3+X6 
  SA6 A3
G ENDIF 
* 
*         ISSUE *PFM* REQUEST.
* 
  SX7 CC
  R= X2,LFN 
  RJ =XPFM= 
 =4       ENDM
 ASSIGNPF SPACE  4,10 
***       ASSIGNPF - ASSIGN PERMANENT FILE SPACE FOR DIRECT ACCESS FILE.
* 
*         ASSIGNPF  LFN,FL,SRB,UI,FM,AL 
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         FL = FILE LENGTH BEING REQUESTED. 
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         AL = ACCESS LEVEL.
  
  
          PURGMAC  ASSIGNPF 
  
 ASSIGNPF MACRO  LFN,FL,SRB,UI,FM,AL
  MACREF ASSIGNPF 
  =4 LFN,,,FL,SRB,UI,FM,,,,,,20B,AL 
 ASSIGNPF ENDM
 CLEARAF  SPACE  4,15 
***       CLEARAF - CLEAR ALTERNATE STORAGE FLAG. 
* 
*         CLEARAF  LFN,SRB,UI,FM,PFID,ASA,CDT,AF
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         ASA = ALTERNATE STORAGE ADDRESS.
*         CDT = CREATION DATE AND TIME. 
*         AF = ALTERNATE STORAGE FLAG.
  
  
          PURGMAC  CLEARAF
  
 CLEARAF  MACRO  LFN,SRB,UI,FM,PFID,ASA,CDT,AF
  MACREF CLEARAF
A IFC NE,$AF$$
  =4 LFN,,,,SRB,UI,FM,PFID,,ASA,CDT,-AF,15B 
A ELSE
  =4 LFN,,,,SRB,UI,FM,PFID,,ASA,CDT,,15B
A ENDIF 
 CLEARAF  ENDM
 DROPDS   SPACE  4,15 
***       DROPDS - DROP DIRECT ACCESS FILE DISK SPACE.
* 
*         DROPDS LFN,SRB,UI,FM,PFID,ASA,CDT 
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         ASA = ALTERNATE STORAGE ADDRESS.
*         CDT = CREATION DATE AND TIME. 
  
  
          PURGMAC  DROPDS 
  
 DROPDS   MACRO  LFN,SRB,UI,FM,PFID,ASA,CDT 
  MACREF DROPDS 
  =4 LFN,,,,SRB,UI,FM,PFID,,ASA,CDT,,17B
 DROPDS   ENDM
 DROPIDS  SPACE  4,15 
***       DROPIDS - DROP INDIRECT ACCESS FILE DISK SPACE. 
* 
*         DROPIDS  LFN,SRB,UI,FM,PFID,ASA,CDT 
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         ASA = ALTERNATE STORAGE ADDRESS.
*         CDT = CREATION DATE AND TIME. 
  
  
          PURGMAC  DROPIDS
  
 DROPIDS  MACRO  LFN,SRB,UI,FM,PFID,ASA,CDT 
  MACREF DROPIDS
  =4 LFN,,,,SRB,UI,FM,PFID,,ASA,CDT,,26B
 DROPIDS  ENDM
 SETAF    SPACE  4,15 
***       SETAF - SET ALTERNATE STORAGE FLAG. 
* 
*         SETAF  LFN,SRB,UI,FM,PFID,ASA,CDT,AF
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         ASA = ALTERNATE STORAGE ADDRESS.
*         CDT = CREATION DATE AND TIME. 
*         AF = ALTERNATE STORAGE FLAG.
  
  
          PURGMAC  SETAF
  
 SETAF    MACRO  LFN,SRB,UI,FM,PFID,ASA,CDT,AF
  MACREF SETAF
  =4 LFN,,,,SRB,UI,FM,PFID,,ASA,CDT,AF,15B
 SETAF    ENDM
 SETASA   SPACE  4,15 
***       SETASA - SET ALTERNATE STORAGE ADDRESS IN THE CATALOG.
* 
*         SETASA LFN,SRB,UI,FM,PFID,ASA,CDT 
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         ASA = ALTERNATE STORAGE ADDRESS.
  
  
          PURGMAC  SETASA 
  
 SETASA   MACRO  LFN,SRB,UI,FM,PFID,ASA,CDT 
  MACREF SETASA 
  =4 LFN,,,,SRB,UI,FM,PFID,,ASA,CDT,,14B
 SETASA   ENDM
 SETDA    SPACE  4,15 
***       SETDA - SET DISK ADDRESS. 
* 
*         SETDA  LFN,SRB,UI,FM,PFID,ASA,CDT 
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         ASA = ALTERNATE STORAGE ADDRESS.
*         CDT = CREATION DATE AND TIME. 
  
  
          PURGMAC  SETDA
  
 SETDA    MACRO  LFN,SRB,UI,FM,PFID,ASA,CDT 
  MACREF SETDA
  =4 LFN,,,,SRB,UI,FM,PFID,,ASA,CDT,,16B
 SETDA    ENDM
 STAGEPF  SPACE  4,15 
***       STAGEPF - STAGE PERMANENT FILE FROM ALTERNATE STORAGE.
* 
*         STAGEPF  LFN,SRB,UI,FM,PFID,ASA,CDT 
* 
*         LFN = ADDRESS OF FET. 
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         ASA = ALTERNATE STORAGE ADDRESS.
*         CDT = CREATION DATE AND TIME. 
  
  
          PURGMAC  STAGEPF
  
 STAGEPF  MACRO  LFN,SRB,UI,FM,PFID,ASA,CDT 
  MACREF STAGEPF
  =4 LFN,,,,SRB,UI,FM,PFID,,ASA,CDT,,31B
 STAGEPF  ENDM
 UATTACH  SPACE  4,15 
***       UATTACH - UTILITY ATTACH. 
* 
*         UATTACH  LFN,PFN,M,SRB,UI,FM,PFID,PFC,CDT 
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME. 
*         PFN = PERMANENT FILE NAME.
*         M = ACCESS MODE.
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         PFC = ADDRESS OF 16 WORD BUFFER FOR THE CATALOG IMAGE.
*         CDT = CREATION DATE AND TIME. 
  
  
          PURGMAC  UATTACH
  
 UATTACH  MACRO  LFN,PFN,M,SRB,UI,FM,PFID,PFC,CDT 
  MACREF UATTACH
  =4 LFN,PFN,M,,SRB,UI,FM,PFID,PFC,,CDT,,13B
 UATTACH  ENDM
 UGET     SPACE  4,15 
***       UGET - UTILITY GET. 
* 
*         UGET   LFN,PFN,SRB,UI,FM,PFID,PFC,CDT 
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         PFN = PERMANENT FILE NAME.
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         PFC = ADDRESS OF 16 WORD BUFFER FOR THE CATALOG IMAGE.
*         CDT = CREATION DATE AND TIME. 
  
  
          PURGMAC UGET
  
 UGET     MACRO  LFN,PFN,SRB,UI,FM,PFID,PFC,CDT 
  MACREF UGET 
  =4 LFN,PFN,,,SRB,UI,FM,PFID,PFC,,CDT,,24B 
 UGET     ENDM
 UREPLAC  SPACE  4,15 
***       UREPLAC - UTILITY REPLACE.
* 
*         UREPLAC  LFN,PFN,SRB,UI,FM,PFID,ASA,CDT 
* 
*         LFN = ADDRESS OF FET (CONTAINS LOCAL FILE NAME).
*         PFN = PERMANENT FILE NAME.
*         SRB = SPECIAL REQUEST BLOCK ADDRESS.
*         UI = USER INDEX.
*         FM = FAMILY NAME. 
*         PFID = PERMANENT FILE CATALOG INDEX.
*         ASA = ALTERNATE STORAGE ADDRESS.
*         CDT = CREATION DATE AND TIME. 
  
  
          PURGMAC  UREPLAC
  
 UREPLAC  MACRO  LFN,PFN,SRB,UI,FM,PFID,ASA,CDT 
  MACREF UREPLAC
  =4 LFN,PFN,,,SRB,UI,FM,PFID,,ASA,CDT,,25B 
 UREPLAC  ENDM
 X=       SPACE  4,40 
***       X= - SET X REGISTER VALUE DEPENDING ON PREFIX.
* 
*         X=     D,P
*         X=     D,#P 
* 
*         THE PREFIX IS THE EQUIVALENCE CHARACTER, #. 
*         PARAMETERS ARE AS FOLLOWS.
* 
*         D = X REGISTER TO RECEIVE THE VALUE SPECIFIED BY P. 
*         P = REGISTER OR LOCATION SYMBOL WITH OPTIONAL PREFIX. 
* 
*         EXIT   X REGISTER, D, CONTAINS A VALUE DEPENDING ON P.
* 
*                IF P IS A NON-PREFIXED REGISTER, IT CONTAINS 
*                THE VALUE. 
*                  FOR A AND B REGISTERS THE RESULT IS THE SAME AS FOR
*                    R= D,P.
*                  FOR X REGISTERS THE RESULT IS THE SAME AS FOR A
*                    BX INSTRUCTION.
* 
*                IF P IS A NON-PREFIXED LOCATION SYMBOL,
*                IT SPECIFIES THE ADDRESS CONTAINING THE VALUE. 
*                   (D) = (P),
*                   (CORRESPONDING A REGISTER) = P. 
* 
*                IF P IS A PREFIXED REGISTER, IT SPECIFIES THE
*                ADDRESS CONTAINING THE VALUE.
*                   (D) = ((P)),
*                   (CORRESPONDING A REGISTER) = (P). 
* 
*                IF P IS A PREFIXED LOCATION SYMBOL, OR COMPLEX 
*                REGISTER EXPRESSION, IT SPECIFIES THE LOCATION 
*                CONTAINING THE ADDRESS OF THE VALUE. 
*                   (D) = ((P)),
*                   (CORRESPONDING A REGISTER) = (P). 
* 
*         USES   THE A REGISTER CORRESPONDING TO THE X REGISTER 
*                SPECIFIED BY D MAY BE USED.
  
  
          PURGMAC  X= 
  
 X=       MACRO  D,P
  LOCAL LN
.X MICRO 1,1, D 
.I MICRO 2,1, D 
  IF -REG,D,1 
  ERR - D NOT AN X REGISTER.
  IFC NE,$".X"$X$,1 
  ERR - D NOT AN X REGISTER.
  IFGT ".I",5,1 
  ERR - USE X1 - X5 ONLY. 
  IFEQ ".I",0,1 
  ERR - USE X1 - X5 ONLY. 
* 
*         DETERMINE P SPECIFICATION.
* 
.1 MICRO 1,1, P 
A IFC NE,$".1"$#$ 
AA IF REG,P 
A1 IFC EQ,$".1"$X$
  IFC NE,$D$P$,1
  B_D P 
A1 ELSE 
  R= D,P
A1 ENDIF
AA ELSE 
  R= A_".I",P 
AA ENDIF
A ELSE
.D MICRO 2,, P
  R= A_".I",".D"
BB IF REG,".D"
LN MICCNT .D
  IFGT LN,2,1 
  R= A_".I",X_".I"
BB ELSE 
  R= A_".I",X_".I"
BB ENDIF
A ENDIF 
 X=       ENDM
          SPACE  4,10 
          ENDX
