CPCOM 
COMMON
          TTL    CPCOM - CENTRAL PROGRAM SYSTEM COMMUNICATION MACROS. 
          TITLE 
 CPCOM    SPACE  4,10 
*         COMMENT  COPYRIGHT CONTROL DATA SYSTEMS INC.  1992. 
 CPCOM    SPACE  4,10 
***       CPCOM - CENTRAL PROGRAM SYSTEM COMMUNICATION MACROS.
* 
*         G. R. MANSFIELD.  70/09/21. 
 CPCOM    SPACE  4,10 
***       THE SYSTEM MACROS PROVIDE THE USER WITH PREDEFINED CALLS FOR
*         COMMONLY USED SYSTEM REQUESTS.  WHERE A PARAMETER REFERS TO 
*         AN ADDRESS EXPRESSION, THE PARAMETER MAY BE A REGISTER NAME,
*         A RELOCATABLE ADDRESS, AN EXTERNAL SYMBOL NAME, OR AN 
*         ABSOLUTE ADDRESS.  WHERE A RECALL OPTION IS SPECIFIED, THE
*         PRESENCE OF THE OPTION CAUSES RECALL OPERATION TO TAKE PLACE. 
          SPACE  4,10 
          BASE   DECIMAL
          TITLE  GENERAL MACROS.
 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
 SYSCOM   SPACE  4,10 
***       SYSCOM - DEFINE SYSTEMS COMMUNICATION SYMBOLS.
* 
*         SYSCOM B1 
*         IF *B1* IS PRESENT, USER DEFINES (B1) = 1.
  
  
          PURGMAC SYSCOM
  
 SYSCOM   MACRO  N
  MACREF SYSCOM 
  IFC EQ,$N$B1$,1 
  B1=1
****      PROGRAM CONTROL AREA
* 
*                            RA+1 
RA.MTR = 1
*                            FIRST ARGUMENT 
ARGR = 2
*                            SPECIAL PROGRAM PARAMETER AREA (27B-47B) 
SPPR = 27B
*                            MEMORY LINK BUFFER POINTER (BITS 0 - 17) 
MLBR = 55B
*                            PROGRAM NAME (BITS 18 - 59)
PGNR = 64B
*                            ARGUMENT COUNT (BITS 0 - 17) 
ACTR = 64B
*                            CMU OPTION AVAILABLE (BIT 59)
CMUR = 65B
*                            LWA+1 ASSIGNED PROGRAM SPACE (BITS 0 - 17) 
LWPR = 65B
*                            CMU OPTION AVAILABLE (BIT 59)
RA.CMU = 65B
*                            FWA ASSIGNED PROGRAM SPACE (BITS 0 - 17) 
FWPR = 66B
*                            JOB ORIGIN TYPE(BITS 24 - 35)
JOPR = 66B
*                            CEJ OPTION AVAILABLE (BIT 59)
RA.CEJ = 66B
*                            CEJ OPTION AVAILABLE (BIT 59)
XJPR = 66B
*                            *LDR* COMPLETION (BIT 29)
LDRR = 67B
*                            SYSTEM CHARACTER SET MODE FLAG 
CSMR = 67B
*                            CONTROL CARD (8 LOCATIONS) 
CCDR = 70B
*                            LINES/PRINTER PAGE 
LINP = 60D
****
  ENDM
 IDIV     SPACE  4,10 
***       IXI XJ/XK - INTEGER DIVISION. 
* 
*         IXI    XJ/XK
*         DIVIDE XJ BY XK TO XI.
*         DESTROYS XJ, XK, B7.
  
  
          PURGDEF IXX/X 
  
 IXX/X    OPDEF  I,J,K
  PX.J X.J
  PX.K X.K
  NX.K X.K
  FX.I X.J/X.K
  UX.I B7,X.I 
  LX.I X.I,B7 
  ENDM
 MOVE     SPACE  4,10 
***       MOVE - MOVE DATA BLOCK. 
* 
*         MOVE   COUNT,FROM,TO
* 
*         ENTRY  *COUNT* = WORD COUNT OF BLOCK TO BE MOVED. 
*                *FROM* = ADDRESS OF FIRST WORD OF BLOCK. 
*                *TO* = ADDRESS OF FIRST WORD OF DESTINATION. 
* 
*         CALLS  MVE=  (COMCMVE). 
  
  
          PURGMAC MOVE
  
 MOVE     MACRO  C,F,T
  MACREF MOVE 
  R= X1,C 
  R= X2,F 
  R= X3,T 
  RJ =XMVE= 
  ENDM
          TITLE  SYSTEM REQUESTS. 
 SYSTEM   SPACE  4,15 
***       SYSTEM REQUEST MACROS FORMAT REQUESTS INTO X REGISTERS AND
*         RETURN JUMP TO THE SYSTEM COMMUNICATION SUBROUTINES.  THESE 
*         SUBROUTINES ARE AVAILABLE AS ENTRY POINTS FOR RELOCATABLE 
*         PROGRAMS OR AS COMMON DECKS FOR ABSOLUTE PROGRAMS.
* 
*         ENTRY  COMMON DECK
*                SYS=  *COMCSYS*
*                MSG=  *COMCSYS*
*                RCL=  *COMCSYS*
*                WNB=  *COMCSYS*
*                CPM=  *COMCCPM*
*                OVL=  *COMCOVL*
 ABORT    SPACE  4,10 
***       ABORT - ABORT JOB.
* 
*         ABORT 
* 
*         CALLS  SYS=.
  
  
          PURGMAC ABORT 
  
 ABORT    MACRO 
  MACREF ABORT
*         FORM ABORT REQUEST. 
  SX6 4RABTP/16D
  LX6 40D 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM
 CLOCK    SPACE  4,10 
***       CLOCK - RETURN TIME OF DAY. 
* 
*         CLOCK  STATUS 
* 
*         ENTRY  *STATUS* = ADDRESS FOR TIME OF DAY RESPONSE. 
* 
*         EXIT -
*T STATUS 60/  * HH.MM.SS.* 
* 
*         CALLS  SYS=.
  
  
          PURGMAC CLOCK 
  
 CLOCK    MACRO  S
  MACREF CLOCK
*         FORM TIME (CLOCK) REQUEST.
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
  SX1 200002B 
  LX1 24D 
  BX6 X6+X1 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM
 CONTROL  SPACE  4,20 
***       CONTROL - READ NEXT CONTROL CARD. 
* 
*         CONTROL BUF,RSS,LF,SF 
* 
*         ENTRY  *BUF* = ADDRESS TO WHICH CONTROL STATEMENT WILL BE 
*                        READ.  (ALLOW 8 WORDS) 
*                *RSS* IF PRESENT SUPPRESSES THE ADVANCEMENT OF THE 
*                        CONTROL STATEMENTS.  THIS OPTION ALLOWS THE
*                        NEXT CONTROL STATEMENT TO BE CHECKED.
*                *LF* IF PRESENT INDICATES TO RETURN CONTROL STATEMENT
*                        IRREGARDLESS OF WHETHER IT POINTS AT A LOCAL 
*                        FILE.  NORMALLY NO CONTROL STATEMENT WILL BE 
*                        RETURNED IF IT CALLS FOR EXECUTION OF A LOCAL
*                        FILE.  IF THIS OPTION IS SELECTED BIT 17 IN
*                        THE PARAMETER COUNT WORD WILL BE SET IF A
*                        CONTROL STATEMENT IS FOR A LOCAL FILE. 
*                *SF* IF PRESENT INDICATES PARAMETERS UNPACKED IN SCOPE 
*                        FORMAT.
* 
*         CALLS  SYS=.
  
  
          PURGMAC CONTROL 
  
 CONTROL  MACRO  A,B,C,D
  MACREF CONTROL
  R= X1,A 
.1 IFC EQ,$B$$
.2 IFC EQ,$D$$
  BX6 X6-X6 
.2 ELSE 
  SX6 40B 
.2 ENDIF
.1 ELSE 
.2 IFC EQ,$C$$
.3 IFC EQ,$D$$
  R= X6,1 
.3 ELSE 
  SX6 41B 
.3 ENDIF
.2 ELSE 
.3 IFC EQ,$D$$
  R= X6,2 
.3 ELSE 
  SX6 42B 
.3 ENDIF
.2 ENDIF
.1 ENDIF
  LX6 18D 
  BX6 X6+X1 
  SX2 1LP+4 
  SX1 3RTCS 
  LX2 24D 
  LX1 42D 
  BX6 X6+X2 
  BX6 X6+X1 
  RJ =XSYS= 
  ENDM
 DATE     SPACE  4,10 
***       DATE - RETURN DATE. 
* 
*         DATE   STATUS,FORMAT
* 
*         ENTRY  *STATUS* = ADDRESS FOR DATE RESPONSE.
*                *FORMAT* = *4*, RETURN 4-DIGIT YEAR FORMAT.
* 
*         EXIT -
*T STATUS 60/  * YY/MM/DD.*  (IF *FORMAT* OMITTED OR .NE. *4*)
*T STATUS 60/  *YYYY/MM/DD*  (IF *FORMAT* = *4*)
* 
*         CALLS  SYS=.
  
  
          PURGMAC DATE
  
 DATE     MACRO  S,F
  MACREF DATE 
*         FORM TIME (DATE) REQUEST. 
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
A IFC EQ,*F*4*
  SX1 200013B 
A ELSE
  SX1 200001B 
A ENDIF 
  LX1 24D 
  BX6 X6+X1 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM
 ENDRUN   SPACE  4,10 
***       ENDRUN - END CENTRAL PROGRAM. 
* 
*         ENDRUN
* 
*         CALLS  SYS=.
  
  
          PURGMAC ENDRUN
  
 ENDRUN   MACRO 
  MACREF ENDRUN 
*         FORM END REQUEST. 
  SX6 4RENDP/16D
  LX6 40D 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM
 EREXIT   SPACE  4,20 
***       EREXIT - SET ERROR RETURN ADDRESS.
* 
*         THIS WILL SET CPU PROGRAM ADDRESS TO RESTART THE PROGRAM
*         AFTER IT HAS BEEN ABORTED DUE TO EITHER AN ILLEGAL OPERATION
*         OR OPERATOR INTERVENTION.  IF THE ERROR WAS DUE TO TIME LIMIT 
*         BEING EXCEEDED, AN ADDITIONAL 8 SECONDS OF CPU TIME WILL BE 
*         ALLOWED.  ALL ERRORS EXCEPT CPU ABORT WILL BE PROCESSED.
* 
*         EREXIT ADDR 
* 
*         ENTRY  *ADDR* = ADDRESS FOR ERROR RETURN. 
* 
*         THE CPU WILL BE STARTED AT *ADDR* WITH RA = 
*T,RA     6/0,6/MO,18/EA,6/EF,24/0
*         MO = IF ARITHMETIC ERROR CONTAINS EXIT CONDTION 
*         EA = ADDRESS WHERE CPU WAS AT WHEN ERROR OCCURED
*         EF = ERROR FLAG 
* 
*         CALLS  CPM=.
  
  
          PURGMAC EREXIT
  
 EREXIT   MACRO  A
  MACREF EREXIT 
  R= X1,A 
  SX2 4 
  RJ =XCPM= 
  ENDM
 HTIME    SPACE  4,20 
***       HTIME - REQUEST ACCUMULATED CYBER 176 CPU CLOCK CYCLE COUNT.
* 
*         HTIME  STATUS,OPTION
* 
*         ENTRY  *STATUS* = ADDRESS FOR CLOCK CYCLE RESPONSE. 
*                *OPTION* = 0, CONTROL POINT ACCUMULATED CLOCK CYCLE
*                              COUNT. 
*                           1, ACCUMULATED CLOCK CYCLE COUNT SINCE
*                              DEADSTART. 
* 
*         EXIT -
*T STATUS 12/TYPE,48/CLOCK CYCLE COUNT
*                *TYPE* = 2000B, IF CYBER 176 CPU CLOCK CYCLE COUNT IS
*                                AVAILABLE. 
*                       = 6000B, IF CYBER 176 CPU CLOCK NOT AVAILABLE.
* 
*         CALLS  SYS=.
  
  
          PURGMAC  HTIME
  
 HTIME    MACRO  S,O
  MACREF HTIME
*         FORM TIME (HTIME) REQUEST.
  IFNE O,0,2
  IFNE O,1,1
  ERR ILLEGAL OPTION - O
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
  SX1 11B+O 
  LX1 24D 
  BX6 X6+X1 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM HTIME
 JDATE    SPACE  4,10 
***       JDATE - JULIAN DATE.
* 
*         JDATE  STATUS,FORMAT
* 
*         ENTRY  *STATUS* = ADDRESS FOR JULIAN DATE.
*                *FORMAT* OMITTED, RETURN NORMAL FORMAT *YYDDD*.
*                         = *I*, RETURN *ISO* FORMAT *CYYDDD* 
*                         = *4*, RETURN 4-DIGIT YEAR FORMAT *YYYYDDD*.
*                         = ANY OTHER, RETURN NORMAL FORMAT *YYDDD*.
* 
*         EXIT -
*T STATUS 30/,30/ *YYDDD*    (IF *FORMAT* OMITTED OR .NE. *I* AND *4*)
*T STATUS 24/,36/ *CYYDDD*   (IF *FORMAT* = *I*)
*T STATUS 18/,42/ *YYYYDDD*  (IF *FORMAT* = *4*)
* 
*         CALLS  SYS=.
  
  
          PURGMAC JDATE 
  
 JDATE    MACRO  S,F
  MACREF JDATE
*         FORM TIME (JDATE) REQUEST.
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
A IFC EQ,*F*4*
  SX1 200014B    RETURN *YYYYDDD* FORMAT
A ELSE
B IFC EQ,*F*I*
  SX1 200015B    RETURN *CYYDDD* FORMAT 
B ELSE
  SX1 200003B    RETURN *YYDDD* FORMAT
  ENDIF 
  LX1 24D 
  BX6 X6+X1 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM
 MEMORY   SPACE  4,35 
***       MEMORY - REQUEST MEMORY.
* 
*         MEMORY TYPE,STATUS,RECALL,WORDS,NABORT
*                *TYPE* = *CM*, REQUEST CENTRAL MEMORY. 
*                         BLANK, REQUEST CENTRAL MEMORY.
*                         *SCM*, REQUEST CENTRAL MEMORY.
*                         *ECS*, REQUEST EXTENDED CORE STORAGE. 
*                         *LCM*, REQUEST EXTENDED CORE STORAGE. 
*                *STATUS* = ADDRESS OF STATUS WORD, IF DESIRED.  THIS 
*                         IS REQUIRED IF NOT CENTRAL MEMORY AND/OR
*                         *NABORT* IS SELECTED. 
*                *WORDS* = MEMORY ASSIGNMENT REQUEST.  THIS IS NOT
*                         REQUIRED IF NUMBER OF WORDS HAS BEEN PLACED 
*                         INTO *STATUS*.  IF THE VALUE OF *WORDS* IS
*                         GREATER THAN 377777B THE VALUE MUST BE PASSED 
*                         TO THE *MEMORY* MACRO IN AN X REGISTER. 
*                *NABORT* = BLANK IF PROGRAM IS TO BE ABORTED IF THE
*                         REQUESTED MEMORY IS NOT AVAILABLE.  IF NON- 
*                         BLANK AND THE MEMORY IS UNAVAILABLE, THE
*                         CURRENT FIELD LENGTH IS RETURNED IN BITS
*                         30-59 OF *STATUS*.
* 
*T STATUS 30/  N,30/  0 
*         N      MEMORY REQUEST  (IF N .GT. 0 THEN THE FOLLOWING IS 
*                         RETURNED) 
*                         N = 12/0,1/R,17/FL
*                             R = NO REDUCE OVERRIDE. 
*                             FL = CM FIELD LENGTH. 
*                         (IF N = -1 MAX FL IS RETURNED)
* 
*         CALLS  SYS=.
  
  
          PURGMAC MEMORY
  
 MEMORY   MACRO  T,S,L,W,N
  LOCAL A,B,C,D 
  MACREF MEMORY 
 C SET 2
  ECHO 3,A=(,CM,SCM,ECS,LCM),B=(0,0,0,1,1)
  IFC EQ,$T$_A$,2 
 C SET B
  STOPDUP 
 D SET C
  IFEQ C,2,1
  ERR ILLEGAL MEMORY REQUEST - (T)
  IFC NE,$N$$,3 
  IFC EQ,$S$$,1 
  ERR ILLEGAL MEMORY REQUEST - (S)
 C SET C+2
.1 IFC NE,$W$$
.2 IFNE C,0 
  IFC EQ,$S$$,1 
  ERR ILLEGAL MEMORY REQUEST - (S)
.5 IFNE D,0 
.5 IF REG,W 
.3 MICRO 1,, W
.4 MICCNT .3
.5 IFEQ .4,2
.3 MICRO 1,1, W 
.5 IFC EQ,*X*".3"*
  BX6 W 
  MX1 -30 
  BX6 -X1*X6
.5 ELSE 
  R= X6,W 
.5 ENDIF
  LX6 30D 
  R= A6,S 
  SYSTEM MEM,L,S,C
.2 ELSE 
  SYSTEM RFL,L,W,S
.2 ENDIF
.1 ELSE 
  SYSTEM MEM,L,S,C
.1 ENDIF
  ENDM
 MESSAGE  SPACE  4,40 
***       MESSAGE - DISPLAY MESSAGE.
* 
*         MESSAGE  MESSAGE,OPTION,RECALL
* 
*         ENTRY  *MESSAGE* = ADDRESS OF MESSAGE IN *C* FORMAT.
*                    0 = PLACE MESSAGE IN SYSTEM DAYFILE, JOB DAYFILE,
*                        AND DISPLAY AT LINE 1 OF CONTROL POINT.
*                    1 = DISPLAY AT LINE 1 OF CONTROL POINT ONLY. 
*                    2 = DISPLAY AT LINE 2 OF CONTROL POINT ONLY. 
*                    3 = PLACE MESSAGE IN JOB DAYFILE ONLY. 
*                    4 = PLACE MESSAGE IN ERROR LOG (SYOT OR *SSJ=* 
*                        ONLY). 
*                    5 = PLACE MESSAGE IN ACCOUNT LOG (SYOT OR *SSJ=* 
*                        ONLY). 
* 
*                THE FOLLOWING ARE INCLUDED FOR NOS/BE COMPATIBILITY. 
*                (CONVERTED BY *CPUMTR*/*1MA*)
*                    6 = PROCESS AS OPTION *0*. 
*                    7 = PROCESS AS OPTION *3*. 
* 
*                FOR *OPTION* THE FOLLOWING RULES APPLY - 
*                    IF *OPTION* IF NOT DEFINED (COMPASS *DEF*), FORCE
*                        A VALUE OF 1.
*                    IF *OPTION* IS DEFINED (COMPASS *DEF*), PASS TO
*                        THE SYSTEM.
*                    IF *OPTION* IS EMPTY, FORCE A VALUE OF 0.
*                    IF *OPTION* IS STRING *LOCAL*, FORCE A VALUE OF 3. 
*                ILLEGAL *OPTION* VALUES ARE RESET TO 1 BY THE SYSTEM.
* 
*                *RECALL* = OPTIONAL RECALL PARAMETER 
* 
*         CALLS  MSG=.
  
  
          PURGMAC MESSAGE 
  
 MESSAGE  MACRO  M,O,L
  LOCAL A 
  MACREF MESSAGE
  R= X1,M 
A SET 200000B 
  IFC EQ,$L$$,1 
A SET 0 
.1 IFC EQ,$O$LOCAL$ 
  R= X6,3+A 
.1 ELSE 4 
.2 IF DEF,O 
  R= X6,O+A 
.2 ELSE 1 
  R= X6,1+A 
*                            PROCESS MESSAGE REQUEST
  RJ =XMSG= 
  ENDM
 ONSW     SPACE  4,10 
***       ONSW - TURN ON SENSE SWITCHES.
* 
*         ONSW   N
* 
*         ENTRY  *N* = SENSE SWITCH BITS. (BIT 0 = SWITCH 1)
*                IF A BIT IS SET, THE CORRESPONDING SWITCH IS SET.
*                IF N=0, ALL SWITCHES REMAIN UNCHANGED. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC ONSW
  
 ONSW     MACRO  N
  MACREF ONSW 
  R= X1,N 
  SX2 11B 
  RJ =XCPM= 
  ENDM
 OFFSW    SPACE  4,10 
***       OFFSW - TURN OFF SENSE SWITCHES.
* 
*         OFFSW  N
* 
*         ENTRY  *N* = SENSE SWITCH BITS. (BIT 0 = SWITCH 1)
*                IF A BIT IS SET, THE CORRESPONDING SWITCH IS CLEARED.
*                IF N=0, ALL SWITCHES REMAIN UNCHANGED. 
* 
*         CALLS  CPM=.
  
  
          PURGMAC OFFSW 
  
 OFFSW    MACRO  N
  MACREF OFFSW
  R= X1,N 
  SX2 12B 
  RJ =XCPM= 
  ENDM
 OVERLAY  SPACE  4,15 
***       OVERLAY - LOAD OVERLAY. 
* 
*         OVERLAY NAME,LEVEL,SYSTEM,FWA 
* 
*         ENTRY  *NAME* = ADDRESS OF FILE NAME IN *L* FORMAT. 
*                *LEVEL* = OVERLAY LEVEL. 
*                *SYSTEM* IF SPECIFIED, OVERLAY WILL BE LOADED FROM 
*                         SYSTEM LIBRARY, AND (NAME) = NAME OF OVERLAY. 
*                *FWA* IF SPECIFIED = ADDRESS AT WHICH OVERLAY WILL 
*                         BE LOADED.
* 
*         EXIT   (X1) = OVERLAY ENTRY ADDRESS.
* 
*         CALLS  OVL=.
  
  
          PURGMAC OVERLAY 
  
 OVERLAY  MACRO  N,L,S,F
  LOCAL A 
  MACREF OVERLAY
A SET 0 
  IFC NE,$S$$,1 
A SET 1 
  IFC NE,$L$$ 
  SX6 L*100B+A
  ELSE 1
  SX6 A 
  R= X2,F 
  IFC NE,$N$X1$,1 
  SA1 N 
  RJ =XOVL= 
  ENDM
 PDATE    SPACE  4,10 
***       PDATE - RETURN PACKED DATE. 
* 
*         PDATE  STATUS 
* 
*         ENTRY  *STATUS* = ADDRESS FOR PACKED DATE.
* 
*         EXIT -
*T STATUS 24/,18/  YYMMDD,18/  HHMMSS 
* 
*         CALLS  SYS=.
  
  
          PURGMAC PDATE 
  
 PDATE    MACRO  S
  MACREF PDATE
*         FORM TIME (PDATE) REQUEST.
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
  SX1 200006B 
  LX1 24D 
  BX6 X6+X1 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM
 RECALL   SPACE  4,10 
***       RECALL - PLACE PROGRAM IN RECALL STATUS.
* 
*         RECALL STATUS 
* 
*         ENTRY  *STATUS* IF PRESENT, PROGRAM WILL BE RECALLED WHEN 
*                            BIT 0 OF (STATUS) IS SET.  UNLESS
*                            (STATUS) = 0.
* 
*         CALLS  RCL=, WNB=.
  
  
          PURGMAC RECALL
  
 RECALL   MACRO  S
  MACREF RECALL 
*         RECALL. 
  IFC EQ,$S$$ 
  RJ =XRCL= 
  ELSE 2
*         WAIT NOT BUSY.
  R= X2,S 
  RJ =XWNB= 
  ENDIF 
  ENDM
 RTIME    SPACE  4,10 
***       RTIME - REQUEST REAL TIME CLOCK READING.
* 
*         RTIME  STATUS 
* 
*         ENTRY  *STATUS* = ADDRESS FOR CLOCK RESPONSE. 
* 
*         EXIT -
*T STATUS 24/  SECONDS,36/  MILLISECONDS
* 
*         CALLS  SYS=.
  
  
          PURGMAC RTIME 
  
 RTIME    MACRO  S
  MACREF RTIME
*         FORM TIME (REAL TIME CLOCK) REQUEST.
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
  SX1 200005B 
  LX1 24D 
  BX6 X6+X1 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM
 STIME    SPACE  4,10 
***       STIME - REQUEST ACCUMULATED SRUS. 
* 
*         STIME  STATUS 
* 
*         ENTRY  *STATUS* = ADDRESS FOR RESPONSE. 
* 
*         EXIT   -
*T STATUS 12/  2000B,12/  0,36/  MILLI-UNITS
* 
*         CALLS  SYS= 
  
  
          PURGMAC STIME 
  
 STIME    MACRO  S
  MACREF STIME
*         FORM TIME (STIME) REQUEST.
  SX6 3RTIM 
  R=  X1,S
  LX6 42D 
  BX6 X6+X1 
  SX1 200007B 
  LX1 24D 
  BX6 X6+X1 
*         PROCESS SYSTEM REQUEST. 
 SYSTEM   SPACE  4,15 
  RJ  =XSYS=
  ENDM
 SYSTEM   SPACE  4
***       SYSTEM - REQUEST SYSTEM FUNCTION. 
* 
*         SYSTEM REQUEST,RECALL,P1,P2 
* 
*         ENTRY  *REQUEST* = 3 CHARACTER SYSTEM REQUEST.
*                *P1* = PARAMETER FOR BITS  0 - 17 OF REQUEST.
*                *P2* = PARAMETER FOR BITS 18 - 35 OF REQUEST.
*         USES   X2.
* 
*         CALLS  SYS=.
  
  
          PURGMAC SYSTEM
  
 SYSTEM   MACRO  C,L,P1,P2
  MACREF SYSTEM 
  QUAL
(C) SET 0 
  QUAL *
 .1 IFC NE,/L/=/
*         FORM REQUEST. 
  IFC  NE,$C$$,2
  SX6 3R;A
  LX6 42D 
*         PROCESS *P2*. 
  IFC NE,$P2$$,3
  R= X2,P2
  LX2 18D 
  IX6 X6+X2 
*         PROCESS *P1*. 
  IFC NE,$P1$$,2
  R= X1,P1
  BX6 X6+X1 
*         PROCESS RECALL REQUEST. 
  IFC NE,$L$$,3 
  MX1 1 
  LX1 41D 
  IX6 X6+X1 
  RJ =XSYS= 
 .1 ENDIF 
  ENDM
 TIME     SPACE  4,15 
***       TIME - REQUEST ACCUMULATED CPU TIME.
* 
*         TIME   STATUS 
* 
*         ENTRY  *STATUS* = ADDRESS FOR TIME RESPONSE.
* 
*         EXIT -
*T STATUS 12/  2000B,12/0,24/  SEC,12/  MS
*         SEC    SECONDS
*         MS     MILLISECONDS 
* 
*         CALLS  SYS=.
  
  
          PURGMAC TIME
  
 TIME     MACRO  S
  MACREF TIME 
*         FORM TIME (CPU TIME) REQUEST. 
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
  SX1 200000B 
  LX1 24D 
  BX6 X6+X1 
*         PROCESS SYSTEM REQUEST. 
  RJ =XSYS= 
  ENDM
 USECPU   SPACE  4,10 
***       USECPU - SET CPU TO BE USED.
* 
*         USECPU N
* 
*         *N* =  0, USE ANY CPU.
*             =  1, USE CPU - 0.
*             =  2, USE CPU - 1.
  
  
          PURGMAC USECPU
  
 USECPU   MACRO  N
  MACREF USECPU 
  R= X1,N 
  SX2 31B 
  RJ =XCPM= 
  ENDM
 USERNUM  SPACE  4,10 
***       USERNUM - RETURN USER NUMBER. 
* 
*         USERNUM STATUS
* 
*         ENTRY  *STATUS* = ADDRESS FOR USER NUMBER RETURN. 
* 
*         EXIT -
*T STATUS 42/ *USERNUM* ,18/0 
* 
*         CALLS  CPM=.
  
  
          PURGMAC USERNUM 
  
 USERNUM  MACRO  A
  MACREF USERNUM
  R= X1,A 
  SX2 32B 
  RJ =XCPM= 
  ENDM
 WAIT     SPACE  4,10 
***       WAIT - PLACE PROGRAM IN RECALL STATUS FOR SPECIFIC TIME.
* 
* 
*         WAIT   DELAY
*         ENTRY  *DELAY* = TIME IN MILLESECONDS FOR JOB TO REMAIN 
*                IN RECALL (10D .LE. *DELAY* .LE. 4095D).  A VALUE
*                .LT. 10D DEFAULTS TO 10D AND A VALUE .GT. 4095D
*                DEFAULTS TO 4095D. 
*         CALLS  SYS=.
  
  
          PURGMAC WAIT
  
 WAIT     MACRO  S
  MACREF WAIT 
  SX6 3RWCL 
  R= X2,S 
  LX6 42D 
  BX6 X6+X2 
  RJ =XSYS= 
  ENDM
          TITLE  FET CREATION MACROS. 
 FET      SPACE  4,60 
***       THE FOLLOWING MACROS INITIALIZE FETS FOR FILES. 
*         PARAMETERS ARE AS FOLLOWS - 
*                FILE = FILE NAME.
*                FWA = FIRST WORD ADDRESS OF *CIO* BUFFER.
*                LENGTH = LENGTH OF *CIO* BUFFER. 
*                PN = PARAMETERS FOR FIELDS IN FET. 
* 
*         P1 - P5 MAY BE IN ANY ORDER AND ONE OF THE FOLLOWING -
* 
*                (WSA=I,L)
*                SET WORKING STORAGE FIELD TO FWA = I, LENGTH = L.
* 
*                (IND=I,L)
*                SET INDEX FIELD TO FWA = I, LENGTH = L.
* 
*                (OWN = I,J)
*                SET OWNCODE EOI ADDRESS = I. 
*                SET OWNCODE ERROR EXIT ADDRESS = J.
*                IF J PRESENT, ERROR PROCESSING BIT IS SET. 
* 
*                (FET=L)
*                SET LENGTH OF FET = L. 
* 
*                (DTY=N)
*                SET DEVICE TYPE = N. 
* 
*                (DSC = X)
*                VALID PARAMETER BUT IGNORED. 
* 
*                (EPR)
*                SET ERROR PROCESSING BIT.
* 
*                (IPR)
*                SET INTERLOCK PROCESSING BIT.
* 
*                (LBL)
*                SET FET LENGTH TO 13D. 
* 
*                (RTP)
*                SET REAL-TIME BIT. 
* 
*                (SAD)
*                SET *SUPPRESS ADDRESS ON ERROR MESSAGE* BIT. 
* 
*                (UPR)
*                SET USER PROCESSING BIT. 
* 
*                (XL) 
*                SET EXTENDED LABEL BIT AND FET LENGTH TO 13D.
* 
*         THE FOLLOWING PARAMETERS ARE FOR COMMUNICATION WITH THE 
*         PERMANENT FILE MANAGER.  REQUIRES *COMSPFM*.
* 
*                (PFN=PNAME)
*                SET PERMANENT FILE NAME *PNAME*. 
* 
*                (USN=UNAME)
*                SET USER NAME *UNAME*. 
* 
*                (PWD=PASWORD)
*                SET PERMANENT FILE PASSWORD. 
* 
*                (UCW=USERCON)
*                SET USER CONTROL BITS (BIT 59 MUST BE SET TO INDICATE
*                WORD CONTAINS USER CONTROL INFORMATION). 
* 
*                (PKN = PACKNAM)
*                SET PERMANENT FILE PACKNAME TO *PACKNAM*.
  
  
*         BASIC FET CREATION MACRO. 
  
          PURGMAC =1
  
 =1       MACRO  M,R,S,F,B,L,V
  LOCAL FL,SA,UP,EP,RT,IP,XX
*         FL = FET LENGTH.
*         SA = *SUPPRESS ADDRESS* BIT IN FET+1. 
*         UP = USER PROCESSING BIT IN FET+1.
*         EP = ERROR PROCESSING BIT IN FET+1. 
*         RT = REAL-TIME BIT IN FET+1.
*         IP = INTERLOCK PROCESSING BIT IN FET+1. 
*         XX = EXTENDED LABEL PROCESSING BIT IN FET+1.
 F VFD 42D/0L_F,16D/,1/M,1/1
*         SET INITIAL FET LENGTH BY RANDOM DETERMINATION. 
FL SET 3*R+5
SA SET 0
UP SET 0
EP SET 0
RT SET 0
IP SET 0
XX SET 0
*         INITIALIZE VARIOUS MICROS.
  ECHO 1,X=(EOI,ERR,INF,INL,WSF,WSL)
=1_X MICRO 1,, 0
  ECHO 1,X=(EPR,UPR,RTP,XL,DSC,DTY,FET,IND,LBL,OWN,PFN,PFO,PKN,PWD,UCW,U
,SN,WSA,IPR,SAD)
=1_X MICRO ,
*         PROCESS VALUE SPECIFICATIONS. 
  ECHO 4,P=(V)
  IFC NE,  P
  =1A FL,SA,UP,EP,RT,IP,XX,P
  ELSE 1
  STOPDUP 
*         GENERATE REMAINDER OF FET.
  VFD 12D/"=1DTY",1/R,1/SA,1/UP,1/EP,1/RT,1/IP,1/XX,17D/,6/FL-5,18D/B 
  VFD 42D/0,18D/B 
  VFD 42D/0,18D/B 
  VFD 42D/0,18D/B+L 
  IFGE FL,6D,19D
  VFD 30D/"=1WSF",30D/"=1WSF"+"=1WSL" 
  IFGE FL,7D,17D
  CON 0 
  IFGE FL,8D,15D
  VFD 24D/0,18D/"=1INL",18D/"=1INF" 
  IFGE FL,9D,13D
  VFD 30D/"=1EOI"+0L"=1PFN",30D/"=1ERR"+0L"=1PFO" 
  IFGE FL,10D,11D 
  IFC EQ,$"=1USN"$$ 
  CON 0 
  ELSE 1
  DATA 0L"=1USN"
  IFGE FL,11D,6 
  CON 0L"=1PWD" 
  IFGE FL,12D,4 
  CON 0L"=1UCW" 
  IFGE FL,13D,2 
  CON 0L"=1PKN" 
  BSSZ FL-13D 
  ENDM
          SPACE  4,10 
**        FET CREATION MACRO SUPPORT MACROS.
* 
*         THE FOLLOWING MACROS ARE USED BY THE *=1* MACRO 
*         TO ASSIST IN GENERATION OF VALUES FOR EACH INDIVIDUAL 
*         PARAMETER.  THE *=1A* MACRO IS USED TO CALL EACH OF 
*         THE INDIVIDUAL MACROS THAT GENERATE EACH INDIVIDUAL 
*         PARAMETER.  THE *=1B* MACRO IS A STENCIL USED BY MOST 
*         OF THE INDIVIDUAL PARAMETRIC MACROS TO GENERATE VALUES
*         REQUIRED BY THE PARAMETER.
* 
*         THE INDIVIDUAL PARAMETRIC MACROS GENERATE MICROS WHICH
*         ARE THEN USED BY THE *=1* MACRO FOR GENERATION OF THE 
*         RESULTANT FET.
  
  
          PURGMAC =1A 
  
 =1A      MACRO  FL,SA,UP,EP,RT,IP,XX,A,B 
)1 MICRO 1,3, A 
)2 MICRO 5,, A
  IF -MIC,=1")1"
  ERR - ILLEGAL FET PARAMETER (")1"). 
  ELSE 1
  =1")1" FL,")2",B,UP,EP,RT,XX,IP,SA
  ENDM
  
  
          PURGMAC =1B 
  
 =1B      MACRO  FL,LEN,M,S 
FL MAX FL,LEN 
  ECHO 1,A=(M),B=(S)
=1_A MICRO 1,, B
  ENDM
          SPACE  4,10 
**        PARAMETER PROCESSING MACROS.
  
          PURGMAC =1DSC 
  
 =1DSC    MACRO 
*         VALID PARAMETER BUT A NO-OP.
  ENDM
  
  
          PURGMAC =1DTY 
  
 =1DTY    MACRO  FL,A 
*         SET DEVICE TYPE IN FET+1. 
  =1B FL,,DTY,A 
  ENDM
  
  
          PURGMAC =1EPR 
  
 =1EPR    MACRO  FL,A,B,UP,EP 
*         SET ERROR PROCESSING FLAG BIT.
EP SET 1
  ENDM
  
  
          PURGMAC =1FET 
  
 =1FET    MACRO  FL,A 
*         SET FET LENGTH AS SPECIFIED.
  =1B FL,A
  ENDM
  
  
          PURGMAC =1IND 
  
 =1IND    MACRO  FL,A,B 
*         SET INDEX ADDRESS AND LENGTH. 
  =1B FL,8D,(INF,INL),(A,B) 
  ENDM
  
  
          PURGMAC =1IPR 
  
 =1IPR    MACRO  FL,A,B,UP,EP,RT,XX,IP
*         SET INTERLOCK PROCESSING FLAG BIT.
IP SET 1
  ENDM
  
  
          PURGMAC =1LBL 
  
 =1LBL    MACRO  FL 
*         SET FET LENGTH TO 13D.
  =1B FL,13D
  ENDM
  
  
          PURGMAC =1OWN 
  
 =1OWN    MACRO  FL,A,B,UP,EP 
*         SET OWN CODE PROCESSOR ADDRESSES. 
  =1B FL,9D,(EOI,ERR),(A,B) 
  IFC NE,  B ,2 
  IFC NE, 0 B ,1
EP SET 1
  ENDIF 
  ENDM
  
  
          PURGMAC =1PFN 
  
 =1PFN    MACRO  FL,A 
*         SET PERMANENT FILE NAME IN FET. 
.1 MICRO 1,5, A 
.2 MICRO 6,, A
  =1B FL,9D,(PFN,PFO),(".1",".2") 
  ENDM
  
  
          PURGMAC =1PKN 
  
 =1PKN    MACRO  FL,A 
*         SET PERMANENT FILE PACK NAME. 
  =1B FL,13D,PKN,A
  ENDM
  
  
          PURGMAC =1PWD 
  
 =1PWD    MACRO  FL,A 
*         SET PERMANENT FILE PASSWORD.
  =1B FL,11D,PWD,A
  ENDM
  
  
          PURGMAC  =1RTP
  
 =1RTP    MACRO  FL,A,B,UP,EP,RT
*         SET REAL-TIME BIT.
RT SET 1
  ENDM
  
  
          PURGMAC =1SAD 
  
 =1SAD    MACRO  FL,A,B,UP,EP,RT,XX,IP,SA 
*         SET *SUPPRESS ADDRESS* FLAG BIT.
SA SET 1
  ENDM
  
  
          PURGMAC =1UCW 
  
 =1UCW    MACRO  FL,A 
*         SET PERMANENT FILE USER CONTROL WORD. 
  =1B FL,12D,UCW,A
  ENDM
  
  
          PURGMAC =1UPR 
  
 =1UPR    MACRO  FL,A,B,UP
*         SET *UP* BIT IN FET+1.
UP SET 1
  ENDM
  
  
          PURGMAC =1USN 
  
 =1USN    MACRO  FL,A 
*         SET PERMANENT FILE USER NUMBER IN FET.
  =1B FL,10D,USN,A
  ENDM
  
  
          PURGMAC =1WSA 
  
 =1WSA    MACRO  FL,A,B 
*         SET WORKING STORAGE BUFFER ADDRESSES. 
  =1B FL,6D,(WSF,WSL),(A,B) 
  ENDM
  
  
          PURGMAC =1XL
  
 =1XL     MACRO  FL,A,B,UP,EP,RT,XX 
*         SET FET LENGTH TO 13D AND *XL* FLAG BIT.
  =1B FL,13D
XX SET 1
  ENDM
 FILEB    SPACE  4,10 
***       FILEB - CREATE FET FOR BINARY SEQUENTIAL FILE.
* 
*LFN      FILEB  FWA,LENGTH,A,B,C,...,P 
  
  
          PURGMAC FILEB 
  
          MACRO  FILEB,LFN,FWA,LEN,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
  =1 1,0,5D,LFN,FWA,LEN,((A),(B),(C),(D),(E),(F),(G),(H),(I),(J),(K),(L)
,,(M),(N),(O),(P))
  MACREF FILEB
  ENDM
 FILEC    SPACE  4,10 
***       FILEC - CREATE FET FOR CODED SEQUENTIAL FILE. 
* 
*LFN      FILEC  FWA,LENGTH,A,B,C,...,P 
  
  
          PURGMAC FILEC 
  
          MACRO  FILEC,LFN,FWA,LEN,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P
  =1 0,0,5D,LFN,FWA,LEN,((A),(B),(C),(D),(E),(F),(G),(H),(I),(J),(K),(L)
,,(M),(N),(O),(P))
  MACREF FILEC
  ENDM
 RFILEB   SPACE  4,10 
***       RFILEB - CREATE FET FOR BINARY RANDOM FILE. 
* 
*LFN      RFILEB FWA,LENGTH,A,B,C,...,P 
  
  
          PURGMAC RFILEB
  
          MACRO  RFILEB,LFN,FWA,LEN,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P 
  =1 1,1,8D,LFN,FWA,LEN,((A),(B),(C),(D),(E),(F),(G),(H),(I),(J),(K),(L)
,,(M),(N),(O),(P))
  MACREF RFILEB 
  ENDM
 RFILEC   SPACE  4,10 
***       RFILEC - CREATE FET FOR CODED RANDOM FILE.
* 
*LFN      RFILEC FWA,LENGTH,A,B,C,...,P 
  
  
          PURGMAC RFILEC
  
          MACRO  RFILEC,LFN,FWA,LEN,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P 
  =1 0,1,8D,LFN,FWA,LEN,((A),(B),(C),(D),(E),(F),(G),(H),(I),(J),(K),(L)
,,(M),(N),(O),(P))
  MACREF RFILEC 
  ENDM
          TITLE  LOCAL FILE ACTION MACROS.
 FILE     SPACE  4,20 
***       FILE ACTION REQUESTS FORMAT REQUESTS INTO X REGISTERS AND 
*         RETURN JUMP TO SUBROUTINES FOR PROCESSING.
* 
*         THE FOLLOWING INFORMATION APPLIES TO ALL I/O FUNCTION 
*         REQUESTS -
* 
*                THE PARAMETER *FILE* IS THE ADDRESS OF THE FET 
*                IS USED TO CONTROL THE FILE FOR WHICH THE OPERATION
*                IS REQUESTED.
* 
*                IF THE PARAMETER *RECALL* IS PRESENT IN THE MACRO
*                CALL, CONTROL WILL BE RETURNED TO THE USER PROGRAM 
*                WHEN THE REQUESTED FUNCTION IS COMPLETE.  IF 
*                *RECALL* IS NOT SPECIFIED, CONTROL WILL BE RETURNED
*                WHEN THE OPERATION IS REQUESTED. 
* 
*         ENTRY  COMMON DECK
*                CIO=  *COMCCIO*
*                LFM=  *COMCLFM*
          SPACE  4,10 
**        BASIC I/O FUNCTION REQUEST MACROS.
  
  
          PURGMAC =2
  
 =2       MACRO  F,L,O
  R= X2,F 
*         (X7) = OPCODE.
*         (X7) = -OPCODE IF RECALL REQUESTED. 
  IFC EQ,$L$$ 
  SX7 O 
  ELSE 1
  SX7 -O
*         PROCESS REQUEST.
  RJ =XCIO= 
  ENDM
          SPACE  4,10 
          PURGMAC =2A 
  
 =2A      MACRO  F,C
  R= X2,F 
  RECALL X2 
  MX7 1 
  BX2 X7+X2 
  SX7 C 
  RJ =XCIO= 
  ENDM
 ASSIGN   SPACE  4,15 
***       ASSIGN - ASSIGN SYSTEM OR LIBRARY FILE TO JOB.
* 
*         ASSIGN FILE,LIBRARY 
* 
*         ENTRY  *LIBRARY* IS PRESENT, FILE WILL BE ASSIGNED FROM 
*                SYSTEM LIBRARY IF AVAILABLE. 
*                *LIBRARY* NOT PRESENT, *SYSTEM* FILE WILL
*                BE ASSIGNED IF SYSTEM ORIGIN JOB OR USER 
*                IS ALLOWED TO ACCESS *SYSTEM* FILE.
* 
*         CALLS  LFM=.
  
  
          PURGMAC ASSIGN
  
 ASSIGN   MACRO  F,L
  MACREF ASSIGN 
  R= X2,F 
  IFC EQ,$L$$ 
  MX6 1 
  LX6 1+18D 
  BX2 X2+X6 
  ENDIF 
  SX7 20B 
  RJ =XLFM= 
  ENDM
 BKSP     SPACE  4,10 
***       BKSP - BACKSPACE 1 LOGICAL RECORD.
* 
*         BKSP   FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC BKSP
  
 BKSP     MACRO  F,L
  MACREF BKSP 
  =2 F,L,40B
  ENDM
 BKSPRU   SPACE  4,10 
***       BKSPRU - BACKSPACE PHYSICAL RECORDS.
* 
*         BKSPRU FILE,N,RECALL
* 
*         ENTRY  *N* = RECORD COUNT.
* 
*         CALLS  CIO=.
  
  
          PURGMAC BKSPRU
  
 BKSPRU   MACRO  F,N,L
  MACREF BKSPRU 
  R= X2,F 
.A IFNE N,0 
  R= X1,N 
  MX7 -18 
  BX1 -X7*X1
  LX1 18D 
  BX2 X1+X2 
.A ENDIF
  IFC EQ,$L$$ 
  SX7 44B 
  ELSE 1
  SX7 -44B
  RJ =XCIO= 
  ENDM
 CLOSE    SPACE  4,15 
***       CLOSE - CLOSE FILE. 
* 
*         CLOSE  FILE,TYPE,RECALL 
* 
*         ENTRY  *TYPE* AS FOLLOWS -
*                NR          DO NOT REWIND FILE 
*                UNLOAD      UNLOAD FILE
*                RETURN      RETURN FILE
*                REWIND      REWIND FILE
* 
*         CALLS  CIO=.
  
  
          PURGMAC CLOSE 
  
 CLOSE    MACRO  F,T,L
          LOCAL  A
  MACREF CLOSE
  R= X2,F 
A SET 0 
  ECHO 3,B=(,NR,UNLOAD,RETURN,REWIND),C=(150B,130B,170B,174B,150B)
  IFC EQ,$B$T$,2
  STOPDUP 
A SET C 
  IFEQ A,,1 
  ERR ILLEGAL CLOSE TYPE - T
  IFC EQ,$L$$ 
  SX7 A 
  ELSE 1
  SX7 -A
  RJ =XCIO= 
  ENDM
 CLOSER   SPACE  4,10 
***       CLOSER - CLOSE MAGNETIC TAPE REEL.
* 
*         CLOSER FILE,TYPE,RECALL 
* 
*         ENTRY  *TYPE* AS FOLLOWS -
*                NR          DO NOT REWIND
*                UNLOAD      UNLOAD 
*                IF ABSENT   REWIND 
*                RETURN      RETURN 
* 
*         CALLS  CIO=.
  
  
          PURGMAC CLOSER
  
 CLOSER   MACRO  F,T,L
          LOCAL  A
  MACREF CLOSER 
  R= X2,F 
A SET 0 
  ECHO 3,B=(,NR,UNLOAD,RETURN),C=(350B,330B,370B,374B)
  IFC EQ,$B$T$,2
  STOPDUP 
A SET C 
  IFEQ A,,1 
  ERR ILLEGAL CLOSER TYPE - T 
  IFC EQ,$L$$ 
  SX7 A 
  ELSE 1
  SX7 -A
  RJ =XCIO= 
  ENDM
 EVICT    SPACE  4,10 
***       EVICT - RELEASE FILE SPACE. 
* 
*         EVICT  FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC EVICT 
  
 EVICT    MACRO  F,L
  MACREF EVICT
  =2 F,L,114B 
  ENDM
 FILINFO  SPACE  4,10 
***       FILINFO - RETURN SYSTEM INFORMATION ABOUT SPECIFIED FILE. 
* 
*         FILINFO ADDR
* 
*         ENTRY  *ADDR* - ADDRESS OF PARAMETER BLOCK TO RECEIVE 
*                         INFORMATION.
* 
*         CALLS  LFM=.
  
  
          PURGMAC FILINFO 
  
 FILINFO  MACRO  F
  MACREF FILINFO
  R= X2,F 
  SX7 32B 
  RJ =XLFM= 
  ENDM
 LABEL    SPACE  4,80 
***       LABEL - REQUEST AUTOMATIC MAGNETIC TAPE ASSIGNMENT. 
* 
*         LABEL  F
* 
*         ENTRY  *F* = FET ADDRESS
*                FET+10B - FET+15B CONTAIN TAPE DESCRIPTORS AND 
*                LABEL INFORMATION IN THE FORMAT -
* 
*T  FET+10B 1/R,1/L,1/N,2/T,1/ ,3/D,3/CV,12/PO,6/F,6/NS,24/FC 
*         R      LABEL PROCESSING 
*                0 = READ LABEL   FILE OPENED BY OPEN/ALTER 
*                1 = WRITE LABEL  FILE OPENED BY OPEN/WRITE 
*         L      NOS LABELED IF SET 
*         N      NON-STANDARD LABELS IF SET 
*         T      TAPE DEVICE TYPE 
*                0 = 7-TRACK             (MT) 
*                1 = CARTRIDGE, NON-ACS  (CT) 
*                2 = 9-TRACK             (NT) 
*                3 = ACS CARTRIDGE       (AT) 
*         D      DENSITY
*                0 = INSTALLATION DEFAULT 
*                1 = 556 BPI
*                2 = 200 BPI
*                3 = 800 BPI/CPI
*                4 = 1600 CPI 
*                5 = 6250 CPI 
*                6 = 38000 CPI
*         CV     CONVERSION MODE
*                0 = INSTALLATION DEFAULT 
*                1 = ASCII/USCII CONVERSION 9 TRACK 
*                2 = EBCDIC CONVERSION 9 TRACK
*         PO     PROCESSING OPTIONS 
*                XXX0 = ABORT ON P.E. UNLESS E.P. SET 
*                XXX1 = ABORT ON P.E. REGARDLESS OF E.P.
*                XXX2 = NO ABORT ON P.E.
*                XXX4 = INHIBIT ERROR PROCESSING
*                XX1X = ENFORCE RING OUT
*                XX2X = ENFORCE RING IN 
*                XX4X = INHIBIT UNLOAD
*                X1XX = DISABLE 6250 CPI WRITE ERROR CORRECTION 
*                X2XX = TOGGLE TAPE MESSAGES TO USER DAYFILE FLAG 
*                0XXX = DEFAULT EOT OPTION SELECTED ACCORDING TO
*                       LABEL AND FORMAT SPECIFICATION
*                1XXX = STOP ON TAPE MARK AFTER EOT (UNLABELED) 
*                1XXX = STOP ON TAPE MARK PLUS LABELS (LABELED) 
*                2XXX = ACCEPT BLOCK IN PROGRESS ON EOT 
*                4XXX = INGORE BLOCK IN PROGRESS ON EOT 
*         F      DATA FORMAT
*                0 = INTERNAL BINARY
*                1 = SYSTEM INTERNAL (NOS/BE COMPATIBLE)
*                2 = FOREIGN
*                3 = STRANGER 
*                4 = LONG RECORD STRANGER 
*                5 = LONG RECORD INTERNAL BINARY
*         NS     NOISE SIZE IN FRAMES 
*         FC     BLOCK SIZE IN FRAMES 
* 
*T  FET+11B 36/VSN,6/A,3/0,15/SN
*         VSN    6 CHARACTER VOLUME SERIAL NUMBER  (SPACE FILLED) 
*         A      1 CHARACTER ACCESSIBILITY  (DEFAULT = * *) 
*         SN     FILE SECTION NUMBER  (DEFAULT = 0001)
* 
*T  FET+12B 60/FI 
*         FI     FIRST 10 CHARACTERS OF FILE IDENTIFIER 
* 
*T  FET+13B 42/FI,3/0,15/QN 
*         FI     LAST 7 CHARACTERS OF FILE IDENTIFIER  (SPACE FILLED) 
*         QN     FILE SEQUENCE NUMBER  (DEFAULT = 0001) 
* 
*T  FET+14B 36/SI,9/E,15/G
*         SI     6 CHARACTER MULTI-SET IDENTIFIER  (SPACE FILLED) 
*         E      GENERATION VERSION NUMBER  (DEFAULT = 00)
*         G      GENERATION NUMBER  (DEFAULT = 0001)
* 
*T  FET+15B 30/RTD,30/CRD 
*         RTD    RETENTION DATE (JULIAN)  (DEFAULT = TODAY) 
*         CRD    CREATION DATE (JULIAN)  (DEFAULT = TODAY)
* 
*         FOR AUTOMATIC ASSIGNMENT, A VOLUME SERIAL NUMBER MUST BE
*         SUPPLIED EITHER THROUGH A *VSN* CONTROL STATEMENT OR BY THE 
*         VSN FIELD IN FET+11B.  IF THE VSN FIELD IS ZERO AND NO
*         VSN HAS BEEN SPECIFIED BY A VSN STATEMENT, THE OPERATOR 
*         WILL BE REQUESTED TO ASSIGN THE APPROPRIATE EQUIPMENT.
* 
*         CALLS  LFM=.
  
  
          PURGMAC LABEL 
  
 LABEL    MACRO  F
  MACREF LABEL
  R= X2,F 
  SX7 24B 
  RJ =XLFM= 
  ENDM
 LOCK     SPACE  4,10 
***       LOCK - SET WRITE LOCK OUT.
* 
*         LOCK   FILE 
* 
*         FILE MUST BE LOCAL OR PRIMARY.
* 
*         CALLS  LFM=.
  
  
          PURGMAC LOCK
  
 LOCK     MACRO  F
  MACREF LOCK 
  R= X2,F 
  SX7 10B 
  RJ =XLFM= 
  ENDM
 OPEN     SPACE  4,20 
***       OPEN - OPEN FILE FOR PROCESSING.
* 
*         OPEN   FILE,TYPE,RECALL 
* 
*         ENTRY  *TYPE* AS FOLLOWS. 
*                READ 
*                READNR 
*                WRITE
*                WRITENR
*                ALTER
*                ALTERNR
*                REEL 
*                NR 
*                REELNR 
*                IF ABSENT, REWIND
* 
*         CALLS  CIO=.
  
  
          PURGMAC OPEN
  
 OPEN     MACRO  F,T,L
          LOCAL  A
  MACREF OPEN 
  R= X2,F 
A SET 0 
  ECHO 3,B=(,READ,REEL,ALTER,WRITE,NR,READNR,REELNR,ALTERNR,WRITENR),C=(
,160B,140B,340B,160B,144B,120B,100B,300B,120B,104B) 
  IFC EQ,$B$T$,2
  STOPDUP 
A SET C 
  IFEQ A,,1 
  ERR ILLEGAL OPEN TYPE - T 
  IFC EQ,$L$$ 
  SX7 A 
  ELSE 1
  SX7 -A
  RJ =XCIO= 
  ENDM
 OVWRITE  SPACE  4,15 
***       OVWRITE - OVERWRITE FILE. 
* 
*         OVWRITE  FILE,OPTION,RETURN,RECALL
* 
*         ENTRY  *OPTION* = *X*, OVERWRITE THE FILE FIRST WITH BINARY 
*                            ZEROES, THEN BINARY ONES, THEN A PATTERN 
*                            OF ALTERNATING ZEROES AND ONES.
*                         = ANYTHING ELSE, OVERWRITE THE FILE ONLY WITH 
*                            BINARY ZEROES. 
* 
*                *RETURN* = IF SPECIFIED, RETURN FILE AFTER PROCESSING. 
* 
*         CALLS  CIO=.
  
  
          PURGMAC  OVWRITE
  
 OVWRITE  MACRO  F,O,T,L
  MACREF OVWRITE
  R= X2,F 
 .A IFC EQ,$O$X$
  SX1 3 
  LX1 18D 
  BX2 X1+X2 
 .A ENDIF 
 .B IFC EQ,$T$$ 
  SX7 244B
 .B ELSE
  SX7 254B
 .B ENDIF 
 .C IFC NE,$L$$ 
  BX7 -X7 
 .C ENDIF 
  RJ =XCIO= 
  ENDM
 POSMF    SPACE  4,10 
***       POSMF - POSITION MULTI-FILE SET.
*         MAGNETIC TAPE ONLY. 
* 
*         POSMF  FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC POSMF 
  
 POSMF    MACRO  F,L
  MACREF POSMF
  =2 F,L,110B 
  ENDM
 READ     SPACE  4,10 
***       READ - READ FILE TO *CIO* BUFFER. 
* 
*         READ   FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC READ
  
 READ     MACRO  F,L
  MACREF READ 
  =2 F,L,10B
  ENDM
 READCW   SPACE  4,10 
***       READCW - READ NON-STOP WITH CONTROL WORDS.
* 
*         READCW FILE,LEVEL,RECALL
* 
*         ENTRY  LEVEL= 0 OR ABSENT, STOP AT END OF INFORMATION.
*                     = 17B, STOP AT END OF FILE. 
* 
*         CALLS  CIO=.
  
  
          PURGMAC READCW
  
 READCW   MACRO  F,T,L
  MACREF READCW 
  R= X2,F 
  SX7 200B
  IFC NE,$T$$,3 
  R= X6,T 
  LX6 14D 
  BX7 X6+X7 
  IFC NE,$L$$,1 
  BX7 -X7 
  RJ =XCIO= 
  ENDM
 READEI   SPACE  4,10 
***       READEI - READ FILE TO END OF INFORMATION. 
* 
*         READEI FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC READEI
  
 READEI   MACRO  F,L
  MACREF READEI 
  =2 F,L,600B 
  ENDM
 READLS   SPACE  4,10 
***       READLS - READ FILE WITH LIST. 
*         MASS STORAGE FILES ONLY.
* 
*         READLS FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC READLS
  
 READLS   MACRO  F,L
  MACREF READLS 
  =2 F,L,210B 
  ENDM
 READN    SPACE  4,10 
***       READN - READ *S* OR *L* FORMAT TAPE NON-STOP. 
*         MAGNETIC TAPE ONLY. 
* 
*         READN  FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC READN 
  
 READN    MACRO  F,L
  MACREF READN
  =2 F,L,260B 
  ENDM
 READNS   SPACE  4,10 
***       READNS - READ FILE NON-STOP. (READ TO EOF)
* 
*         READNS FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC READNS
  
 READNS   MACRO  F,L
  MACREF READNS 
  =2 F,L,250B 
  ENDM
 READSKP  SPACE  4,15 
***       READSKP - READ SKIP.
* 
*         *READSKP* PERFORMS A READ FUNCTION UNTIL THE *CIO* BUFFER IS
*         FULL, OR AN END OF RECORD, OR END OF FILE IS SENSED.  IF
*         THE BUFFER IS FILLED BEFORE EOR IS REACHED, THE FILE IS 
*         POSITIONED TO END OF RECORD. IF *LEVEL* IS GIVEN AS 17B, THE
*         FILE IS POSITIONED TO END OF FILE INSTEAD OF END OF RECORD. 
* 
*         READSKP FILE,LEVEL,RECALL 
* 
*         ENTRY  LEVEL= 0 OR ABSENT, SKIP TO END OF RECORD. 
*                     = 17B, SKIP TO END OF FILE. 
* 
*         CALLS  CIO=.
  
  
          PURGMAC READSKP 
  
 READSKP  MACRO  F,T,L
  MACREF READSKP
  R= X2,F 
  SX7 20B 
  IFC NE,$T$$,3 
  R= X6,T 
  LX6 14D 
  BX7 X6+X7 
  IFC NE,$L$$,1 
  BX7 -X7 
  RJ =XCIO= 
  ENDM
 RENAME   SPACE  4,10 
***       RENAME - RENAME FILE. 
* 
*         RENAME FILE,NAME
* 
*         ENTRY  *NAME* = ADDRESS OF NEW FILE NAME. 
*                IF *NAME* = *X1*, (X1) = NEW FILE NAME.
*                IF *NAME* IS NOT PRESENT, (FET+6) = NEW FILE NAME. 
* 
*         CALLS  LFM=.
  
  
          PURGMAC RENAME
  
 RENAME   MACRO  F,N
  MACREF RENAME 
  R= X2,F 
  IFC NE,$N$$,4 
  IFC NE,$N$X1$,1 
  SA1 N 
  BX6 X1
  SA6 F+6 
  SX7 B0
  RJ =XLFM= 
  ENDM
 REQUEST  SPACE  4,20 
***       REQUEST - REQUEST OPERATOR ASSIGNMENT OF EQUIPMENT. 
* 
*         THE *REQUEST* MACRO CANNOT BE USED TO ASSIGN TAPE OR VSN
*         EQUIPMENT.
* 
*         REQUEST  FILE,UNIT,NMSG 
* 
*         ENTRY  *FILE* IS THE ADDRESS OF THE FET.
*                *UNIT* IF USED ASSIGNS THE EQUIPMENT DESIGNATED IN 
*                       THE *DTY* POSITION IN *FILE*+1. 
*                *NMSG* IF PRESENT SPECIFIES THAT NO DAYFILE MESSAGE IS 
*                       TO BE ISSUED INDICATING THE EQUIPMENT TO WHICH
*                       THE FILE WAS ASSIGNED.
* 
*         EXIT   (X2) = FUNCTION PARAMETER AND ADDRESS OF THE FET.
*                (X7) = FUNCTION CODE.
* 
*         USES   X - 2, 7.
* 
*         CALLS  LFM=.
  
  
          PURGMAC REQUEST 
  
 REQUEST  MACRO  F,U,N
  MACREF REQUEST
  R= X2,F 
  IFC NE,$N$$ 
  MX7 1 
  LX7 19-59 
  BX2 X2+X7 
  ENDIF 
  IFC EQ,$U$$ 
  SX7 14B 
  ELSE
  SX7 15B 
  ENDIF 
  RJ =XLFM= 
  ENDM
 RETURN   SPACE  4,10 
***       RETURN - RETURN FILE TO SYSTEM. 
* 
*         RETURN FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC RETURN
  
 RETURN   MACRO  F,L
  MACREF RETURN 
  =2 F,L,70B
  ENDM
 REWIND   SPACE  4,10 
***       REWIND - REWIND FILE. 
* 
*         REWIND FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC REWIND
  
 REWIND   MACRO  F,L
  MACREF REWIND 
  =2 F,L,50B
  ENDM
 REWRITE  SPACE  4,15 
***       REWRITE - REWRITE DATA FROM *CIO* BUFFER. 
*         MASS STORAGE FILES ONLY.
* 
*         REWRITE FILE,RECALL 
* 
*         ENTRY  RECALL = *, SET *CIO* FUNCTION CODE IN FET, DO NOT 
*                         CALL *CIO*. 
* 
*         CALLS  CIO=.
  
  
          PURGMAC REWRITE 
  
 REWRITE  MACRO  F,L
  MACREF REWRITE
  IFC EQ,$L$*$
  =2A F,215B
  ELSE 1
  =2 F,L,214B 
  ENDM
 REWRITEF SPACE  4,10 
***       REWRITEF - REWRITE END OF FILE. 
*         MASS STORAGE FILES ONLY.
* 
*         REWRITEF FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC REWRITEF
  
 REWRITEF MACRO  F,L
  MACREF REWRITEF 
  =2 F,L,234B 
  ENDM
 REWRITER SPACE  4,10 
***       REWRITER - REWRITE END OF RECORD. 
*         MASS STORAGE FILES ONLY.
* 
*         REWRITER FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC REWRITER
  
 REWRITER MACRO  F,L
  MACREF REWRITER 
  =2 F,L,224B 
  ENDM
 ROUTE    SPACE  4,10 
**        ROUTE - ROUTE FILE TO INPUT/OUTPUT QUEUE. 
* 
*         ROUTE  ADDR,R 
* 
*                ADDR = FWA OF CALL BLOCK.
*                       (SEE *DSP* DOCUMENTATION FOR FORMAT)
*                R = RECALL (OPTIONAL)
  
  
          PURGMAC ROUTE 
  
  
 ROUTE    MACRO  A,R
  MACREF ROUTE
  SYSTEM DSP,R,A
  ENDM
 RPHR     SPACE  4,10 
***       RPHR - READ PHYSICAL RECORD TO *CIO* BUFFER.
* 
*         RPHR   FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC RPHR
  
 RPHR     MACRO  F,L
  MACREF RPHR 
  IFC EQ,$L$$ 
  R= X7,0 
  ELSE 1
  MX7 60D 
  R= X2,F 
  RJ =XCIO= 
  ENDM
 RPHRLS   SPACE  4,10 
***       RPHRLS - READ PRUS WITH LIST. 
*         MASS STORAGE FILES ONLY.
* 
*         RPHRLS FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC RPHRLS
  
 RPHRLS   MACRO  F,L
  MACREF RPHRLS 
  =2 F,L,230B 
  ENDM
 SETFS    SPACE  4,10 
***       SETFS - SET FILE STATUS.
* 
*         SETFS  FILE,N 
* 
*         CERTAIN STATUSES MAY ONLY BE SET AND CLEARED BY *SSJ=*
*         PROGRAMS.  ATTEMPTS BY OTHER PROGRAMS TO SET OR CHANGE
*         THESE STATUSES WILL BE IGNORED. 
* 
*         ENTRY  *FILE* = FWA OF FET. 
*                *N* = FILE STATUS. 
*                      *AD* = *AUTO-DROP* (0).
*                      *NAD* = *NO-AUTO-DROP* (NDST). 
*                      (SYMBOLS FOR OTHER STATUSES ARE DEFINED
*                      IN *COMSLFD*). 
* 
*         USES   X - 1, 2, 7. 
* 
*         CALLS  LFM=.
  
  
          PURGMAC  SETFS
  
 SETFS    MACRO  F,N
  MACREF SETFS
.FS SET 777B
  ECHO 4,B=(AD,NAD),C=(0,7) 
.A IFC EQ,$B$N$ 
  STOPDUP 
.FS SET C 
.A ENDIF
.B IFEQ .FS,777B
  R= X1,N 
.B ELSE 
  R= X1,.FS 
.B ENDIF
  R=  X2,F
  LX1 18D 
  BX2 X1+X2 
  SX7 3 
  RJ  =XLFM=
  ENDM
 SKIPB    SPACE  4,10 
***       SKIPB - SKIP RECORDS BACKWARDS. 
* 
*         SKIPB  FILE,N,RECALL
* 
*         ENTRY  *N* = RECORD COUNT.
* 
*         CALLS  CIO=.
  
  
          PURGMAC SKIPB 
  
 SKIPB    MACRO  F,N,L
  MACREF SKIPB
  R= X2,F 
.A IFNE N,0 
  R= X1,N 
  MX7 -18 
  BX1 -X7*X1
  LX1 18D 
  BX2 X1+X2 
.A ENDIF
  IFC EQ,$L$$ 
  SX7 640B
  ELSE 1
  SX7 -640B 
  RJ =XCIO= 
  ENDM
 SKIPEI   SPACE  4,10 
***       SKIPEI - SKIP TO END OF INFORMATION.
* 
*         SKIPEI FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC SKIPEI
  
 SKIPEI   MACRO  F,L
  MACREF SKIPEI 
  R= X2,F 
  MX1 -18D
  LX1 18D 
  BX2 -X1+X2
  IFC EQ,$L$$ 
  SX7 240B
  ELSE 1
  SX7 -240B 
  RJ =XCIO= 
  ENDM
 SKIPFB   SPACE  4,10 
***       SKIPFB - SKIP FILES BACKWARD. 
* 
*         SKIPFB FILE,N,RECALL
* 
*         ENTRY  *N* = RECORD COUNT.
* 
*         CALLS  CIO=.
  
  
          PURGMAC SKIPFB
  
 SKIPFB   MACRO  F,N,L
  MACREF SKIPFB 
  R= X2,F 
.A IFNE N,0 
  R= X1,N 
  MX7 -18 
  BX1 -X7*X1
  LX1 18D 
  BX2 X1+X2 
.A ENDIF
  IFC EQ,$L$$ 
  SX7 740640BS-3
  ELSE 1
  SX7 -740640BS-3 
  LX7 3 
  RJ =XCIO= 
  ENDM
 SKIPF    SPACE  4,10 
***       SKIPF - SKIP RECORDS FORWARD. 
* 
*         SKIPF  FILE,N,RECALL
* 
*         ENTRY  *N* = RECORD COUNT.
* 
*         CALLS  CIO=.
  
  
          PURGMAC SKIPF 
  
 SKIPF    MACRO  F,N,L
  MACREF SKIPF
  R= X2,F 
.A IFNE N,0 
  R= X1,N 
  MX7 -18 
  BX1 -X7*X1
  LX1 18D 
  BX2 X1+X2 
.A ENDIF
  IFC EQ,$L$$ 
  SX7 240B
  ELSE 1
  SX7 -240B 
  RJ =XCIO= 
  ENDM
 SKIPFF   SPACE  4,10 
***       SKIPFF - SKIP FILES FORWARD.
* 
*         SKIPFF FILE,N,RECALL
* 
*         ENTRY  *N* = COUNT COUNT. 
* 
*         CALLS  CIO=.
  
  
          PURGMAC SKIPFF
  
 SKIPFF   MACRO  F,N,L
  MACREF SKIPFF 
  R= X2,F 
.A IFNE N,0 
  R= X1,N 
  MX7 -18 
  BX1 -X7*X1
  LX1 18D 
  BX2 X1+X2 
.A ENDIF
  IFC EQ,$L$$ 
  SX7 740240BS-3
  ELSE 1
  SX7 -740240BS-3 
  LX7 3 
  RJ =XCIO= 
  ENDM
 STATUS   SPACE  4,20 
***       STATUS - RETURN CURRENT FILE STATUS.
* 
*         STATUS FILE,POSITION,TAPEINFO 
* 
*         ENTRY  *POSITION* IF PRESENT CURRENT FILE POSITION WILL BE
*                           RETURNED TO (FET+6).
*                *TAPEINFO* IF SPECIFIED, IN ADDITION TO *POSITION*,
*                           AND FILE IS A MAGNETIC TAPE FILE, 
*                           ADDITIONAL TAPE INFORMATION IS RETURNED TO
*                           FET+8 IN LABEL MACRO FORMAT, INCLUDING
*                           LABEL BIT, NONSTANDARD LABEL BIT, TRACK 
*                           BIT, DENSITY, CONVERSION MODE, PROCESSING 
*                           OPTIONS, FORMAT, NOISE SIZE IN FRAMES, AND
*                           BLOCK SIZE IN CM WORDS. 
* 
*         CALLS  LFM=.
  
  
          PURGMAC STATUS
  
 STATUS   MACRO  F,N,T
  MACREF STATUS 
  R= X2,F 
  IFC EQ,$N$$ 
  SX7 12B 
  ELSE
  SX7 13B 
  IFC NE,$T$$,3 
  MX6 1 
  LX6 1+18D 
  BX2 X2+X6 
  ENDIF 
  RJ =XLFM= 
  ENDM
 UNLOAD   SPACE  4,10 
***       UNLOAD - UNLOAD FILE. 
* 
*         UNLOAD FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC UNLOAD
  
 UNLOAD   MACRO  F,L
  MACREF UNLOAD 
  =2 F,L,60B
  ENDM
 UNLOCK   SPACE  4,10 
***       UNLOCK - CLEAR WRITE LOCK OUT.
*         FILE MUST BE LOCAL OR PRIMARY.
* 
*         UNLOCK FILE 
* 
*         CALLS  LFM=.
  
  
          PURGMAC UNLOCK
  
 UNLOCK   MACRO  F
  MACREF UNLOCK 
  R= X2,F 
  SX7 11B 
  RJ =XLFM= 
  ENDM
 WPHR     SPACE  4,10 
***       WPHR - WRITE 1 PHYSICAL RECORD FROM *CIO* BUFFER. 
* 
*         WPHR   FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC WPHR
  
 WPHR     MACRO  F,L
  MACREF WPHR 
  =2 F,L,4
  ENDM
 WRITE    SPACE  4,10 
***       WRITE - WRITE DATA FROM *CIO* BUFFER. 
* 
*         WRITE  FILE,RECALL
* 
*         ENTRY  RECALL= *, SET *CIO* FUNCTION CODE IN FET, DO NOT
*                        CALL *CIO*.
* 
*         CALLS  CIO=.
  
  
          PURGMAC WRITE 
  
 WRITE    MACRO  F,L
  MACREF WRITE
  IFC EQ,$L$*$
  =2A F,15B 
  ELSE 1
  =2 F,L,14B
  ENDM
 WRITECW  SPACE  4,10 
***       WRITECW - WRITE NON-STOP WITH CONTROL WORDS.
* 
*         WRITECW FILE,RECALL 
* 
*         ENTRY  RECALL = *, WILL SET *CIO* FUNCTION CODE IN FET BUT
*                         WILL NOT ISSUE *CIO* FUNCTION.
* 
*         CALLS  CIO=.
  
  
          PURGMAC WRITECW 
  
 WRITECW  MACRO  F,L
          LOCAL  A
  MACREF WRITECW
  IFC EQ,$L$*$
  =2A F,205B
  ELSE 9
  R= X2,F 
  RECALL X2 
  SA1 X2+2
  BX7 X1
  SA1 A1+B1 
  BX7 X1-X7 
  ZR X7,A 
  =2 X2,L,204B
 A BSS 0
  ENDM
 WRITEF   SPACE  4,10 
***       WRITEF - WRITE END OF FILE. 
* 
*         WRITEF FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC WRITEF
  
 WRITEF   MACRO  F,L
  MACREF WRITEF 
  =2 F,L,34B
  ENDM
 WRITEN   SPACE  4,10 
***       WRITEN - WRITE *S* OR *L* FORMAT TAPE NON-STOP. 
*         MAGNETIC TAPE ONLY. 
* 
*         WRITEN FILE,RECALL
* 
*         ENTRY  RECALL= *, SET *CIO* FUNCTION CODE IN FET, DO NOT
*                        CALL *CIO*.
* 
*         CALLS  CIO=.
  
  
          PURGMAC WRITEN
  
 WRITEN   MACRO  F,L
  MACREF WRITEN 
  IFC EQ,$L$*$
  =2A F,265B
  ELSE 1
  =2 F,L,264B 
  ENDM
 WRITER   SPACE  4,10 
***       WRITER - WRITE END OF RECORD. 
* 
*         WRITER FILE,RECALL
* 
*         CALLS  CIO=.
  
  
          PURGMAC WRITER
  
 WRITER   MACRO  F,L
  MACREF WRITER 
  =2 F,L,24B
  ENDM
          TITLE  PERMANENT FILE REQUEST MACROS. 
***       PERMANENT FILE ACTION MACROS. 
* 
*         THE FOLLOWING INFORMATION APPLIES TO ALL PERMANENT
*         FILE ACTION MACROS. 
* 
*         CODE CAN BE OPTIMIZED BY PASSING ARGUMENTS VIA REGISTERS
*         INDICATED ON THE FOLLOWING PARAMETERS.
*         THE FET LENGTH MAY BE-
*                A) 5 WORDS IF NO SPECIAL OPTIONS ARE REQUIRED. 
*                B) UP TO 20B WORDS IF ANY SPECIAL OPTIONS REQUIRED.
* 
*         IF *PF* IS NOT SPECIFIED, (F+10B) (BITS 18-59) CONTAINS THE 
*                PERMANENT FILE NAME. (X1)
*         IF *UN* IS NOT SPECIFIED, (F+11B) (BITS 18-59) CONTAINS THE 
*                NAME OF ALTERNATE CATALOG. (X3)
*         IF *PW* IS NOT SPECIFIED, (F+12B) (BITS 18-59) CONTAINS THE 
*                FILE PASSWORD. (X2)
*         IF *UC* IS NOT SPECIFIED, (F+13B) (BITS 0-59) CONTAINS THE
*                USER CONTROL INFORMATION.  BIT 59 MUST BE SET IF THIS
*                WORD CONTAINS DATA FOR *PFM* TO PROCESS. 
*         IF *PN* IS NOT SPECIFIED, (F+14B) (BITS 18-59) CONTAINS THE 
*                ALTERNATE PACKNAME TO SATISFY PF REQUESTS FROM.
*         IF *NF* IS NOT SPECIFIED, (F+15B) (BITS 18-59) CONTAINS THE 
*                NEW FILE NAME FOR CHANGE COMMAND.
*         IF *T* IS NOT SPECIFIED, (F+10B) (BITS 6-11) CONTAINS THE 
*                FILE CATEGORY. 
*         IF *MO* IS NOT SPECIFIED, (F+10B) (BITS 0-5) CONTAINS THE 
*                PERMISSION MODE. 
* 
*         IF *FO* IS SET TO *IP* THE PACKNAME IS IGNORED AND THE
*                CURRENT FAMILY IS USED FOR PF ACCESS.
*         IF *FO* IS SET TO *DF* THE PACKNAME AND FAMILY ARE IGNORED
*                AND THE DEFAULT SYSTEM FAMILY IS ACCESSED. 
*                THE *DF* OPTION MAY ONLY BE USED BY *SSJ=* JOBS. 
* 
*         IF *SR* IS NOT SPECIFIED, (F+10B) (BITS 12-17) CONTAINS THE 
*                SPECIAL REQUEST. 
*                IF *SR* IS SET TO *FA* ON AN *ATTACH*, FORCE A FAST
*                ATTACH OF THE FILE (*SSJ=* ONLY).
*                IF *SR* IS SET TO *NF* ON AN *ATTACH*, PREVENT A FAST
*                ATTACH OF THE FILE.
*                IF *SR* IS SET TO *CE* ON A *CHANGE*, CLEAR THE ERROR
*                STATUS ON THE FILE.
*                IF *SR* IS SET TO *MR* ON A *DEFINE*, FORCE THE FILE 
*                TO RESIDE ON THE MASTER DEVICE (*SSJ=* ONLY).
*                IF *SR* IS SET TO *IE*, PROCESS THE REQUEST EVEN IF
*                ERROR IDLE IS SET (*SSJ=* ONLY). 
*                IF *SR* IS SET TO *CP* ON A *CHANGE*, REPLACE THE
*                CURRENT CHARGE AND PROJECT NUMBERS WITH THE CALLERS
*                EXECUTING CHARGE AND PROJECT NUMBERS.
*                IF *SR* IS SET TO *MA* ON AN *ATTACH* (A MIXED FAST
*                ATTACH), ATTEMPT A FAST ATTACH AND IF THE FAST ATTACH
*                FAILS ATTEMPT A NON FAST ATTACH (*SSJ=* ONLY). 
* 
*         FOR *SS*, *BR* AND *PR*, IF ANY ARE SPECIFIED, THOSE NOT
*                SPECIFIED ARE CLEARED.  THIS RESULTS IN A SYSTEM 
*                DEFAULT VALUE BEING USED FOR ALL RELEVANT COMMANDS 
*                EXCEPT THE *CHANGE* COMMAND. 
*         IF *PR* IS NOT SPECIFIED, (F+17B) (BITS 57-59) CONTAINS THE 
*                PREFERRED RESIDENCE. 
*         IF *BR* IS NOT SPECIFIED, (F+17B) (BITS 54-56) CONTAINS THE 
*                BACKUP REQUIREMENT.
*         IF *SS* IS NOT SPECIFIED, (F+17B) (BITS 48-53) CONTAINS THE 
*                FILE SUBSYSTEM.
* 
*         IF *XT* IS NOT SPECIFIED, (F+15B) (BITS 0-17) CONTAINS THE
*                PASSWORD/PERMIT EXPIRATION DATE OR TERM. 
* 
*         IF *RT* IS  NOT SPECIFIED, (FET+1) (BIT 43) CONTAINS THE
*                REAL-TIME PROCESSING BIT.
* 
*         IF *AC* IS NOT SPECIFIED, (F+17B) (BITS 46-47) CONTAIN THE
*                ALTERNATE CATLIST PERMISSION VALUE.
* 
*         THE ADDRESS OF THE FET MUST BE SUPPLIED VIA *F* PARAMETER.
*         THE USER MUST INSURE THAT ALL ACTIVITY HAS COMPLETED ON 
*         THIS FET PRIOR TO EXECUTING A PERMANENT FILE ACTION MACRO.
*         THE CALL MADE TO *PFM* WILL RECALL THE CPU WHEN THE REQUEST 
*         IS COMPLETE.  IF THE USER DESIRES TO PROCESS *PFM* ERRORS 
*         THE ERROR PROCESSING BIT MUST BE SET IN THE FET.
*         THE ERROR CODES WILL BE RETURNED IN THE CODE AND STATUS 
*         POSITION OF THE FET (WORD 0, BITS 10-17).  SEE *PFM*
*         DOCUMENTATION FOR ERROR CODES AND DESCRIPTIONS. 
* 
*                X - 1, 2, 3, 4, 6, 7.
*                A - 1, 2, 3, 4, 6, 7.
*                B - 2. 
          SPACE  4,10 
          PURGMAC =3
  
 =3       MACRO  F,PF,UN,PW,UC,PN,T,MO,DT,FO,O,SR,SS,BR,PR,XT,CS,AL,AC,R
,T
  
*         FILE CATEGORY.
  
   LOCAL FC,I,J,N1,Q,Q1,Z,Z1,K,KK,K1,K2,V,VV,WW,AA
FC SET 0
J IFC NE,$T$$ 
FC SET 77B
I SET 77B 
  ECHO 3,B=(P,S,L,PU),C=(0,1,2,2) 
  IFC EQ,$B$T$,2
  STOPDUP 
I  SET C+40B
* 
N1 IFEQ I,77B 
  R= A4,T 
N1 ELSE 1 
  R= X4,I 
  LX4 6 
  IFC NE,$MO$$,1
  SB2 X4
J ENDIF 
*         FILE MODE.
Q IFC NE,$MO$$
I SET 77B 
  ECHO 4,B=(W,R,A,E,N,M,RM,RA,U,RU),C=(0,1,2,3,4,5,6,7,10B,11B) 
QX IFC EQ,$B$MO$
  STOPDUP 
I  SET C+40B
QX ENDIF
* 
Q1 IFEQ I,77B 
  R= A4,MO
Q1  ELSE 1
  R= X4,I 
  IFEQ FC,77B,1 
  SX4 B2+X4 
FC SET  77B 
Q ENDIF 
*         MERGE IN SPECIAL REQUEST OPTION.
R IFC NE,$SR$$
I SET 0 
  ECHO 3,B=(FA,CE,NF,MR,IE,CP,MA),C=(1,3,4,5,6,10B,12B) 
  IFC EQ,$B$SR$,2 
  STOPDUP 
I SET C 
  IFEQ FC,77B,1 
  SB2 X4
R2 IFEQ I,0 
  R= A4,SR
  LX4 12D 
  IFEQ FC,77B,1 
  SX4 X4+B2 
R2 ELSE 
R1 IFEQ FC,77B
  SX4 X4+I*10000B 
R1 ELSE 1 
  SX4 I*10000B
R2 ENDIF
FC SET 77B
R ENDIF 
*         PF NAME.
Z IFC NE,$PF$$
  IFC EQ,$PF$0$,2 
  SX1 B0
Z2 ELSE 2 
  IFC NE,$PF$X1$,1
  R= A1,PF
*         MERGE IN FILE CATEGORY + MODE.
Z1 IFEQ FC,77B
  BX6 X1+X4 
Z1  ELSE 1
  BX6 X1
  SA6 F+10B 
Z ELSE
  IFEQ FC,77B 
  MX6 42D 
  SA1 F+10B 
  BX6 X6*X1 
  BX6 X6+X4 
  SA6 A1
Z ENDIF 
*         OPTIONAL USER NUMBER. 
  IFC NE,$UN$$,4
  IFC NE,$UN$X3$,1
  R= A3,UN
  BX6 X3
  SA6 F+11B 
*         PASSWORD. 
P1 IFC NE,$PW$$ 
P2 IFC EQ,$PW$X2$ 
  BX3 X2
P2 ELSE 
  R= A3,PW
P2 ENDIF
  MX4 42D 
  SA1 F+12B 
  BX6 -X4*X1
  BX7 X4*X3 
  BX6 X6+X7 
  SA6 A1
P1 ENDIF
*         USER CONTROL WORD.
  IFC NE,$UC$$,3
  R= A4,UC
  BX6 X4
  SA6 F+13B 
*         PACKNAME. 
  IFC NE,$PN$$,3
  R= A4,PN
  BX6 X4
  SA6 F+14B 
*         DEVICE TYPE.
K IFC NE,$DT$$
  MX7 12D 
  SX1 B0
VV MICRO 1,2, DT
WW MICRO 3,, DT 
V SET 77B 
K1 MICCNT WW
K2 IFLE K1,2
  ECHO  3,B=(DE,DP,DV,DW) 
  IFC EQ,$B$"VV"$,2 
  STOPDUP 
V SET 2R_"VV" 
* 
  IFNE V,77B,2
  IFC NE,$"WW"$$,1
  ERR - ILLEGAL PARAMETER 
  IFEQ V,77B,6
  ECHO  5,B=(DD,DG,DI,DJ,DK,DL,DM,DQ,DX,DY,DZ,DA,DB,DC,DF,DH) 
  IFC EQ,$B$"VV"$,4 
  STOPDUP 
V SET 2R_"VV" 
  IFC NE,$"WW"$$,1
  SX1 1R_"WW" 
K2 ENDIF
* 
KK IFEQ V,77B 
  R= A4,DT
  BX6 X7*X4 
  LX4 12D 
  BX1 X7*X4 
  LX1 6 
KK ELSE 3 
  R= X4,V 
  LX4 48D 
  BX6 X7*X4 
* 
  SA4 F+1 
  BX4 -X7*X4
  BX6 X4+X6 
  SA6 A4
* 
  ZR X1,AA
  SX1 X1-1R0
AA SA4 F+14B
  LX7 12D 
  BX4    -X7*X4 
  BX1    X7*X1
  BX6    X4+X1
  SA6    A4 
K ENDIF 
*         SET ACCESS CATEGORY SET.
AB IFC NE,$CS$$ 
  SA4 CS
  MX1 -32D
  BX6 -X1*X4
  SA4 F+5 
  BX4 X1*X4 
  BX6 X6+X4 
  SA6 A4
AB ENDIF
*         SET ACCESS LEVEL. 
AG IFC NE,$AL$$ 
I SET 77B 
  ECHO 4,B=("ALM0","ALM1","ALM2","ALM3"),C=(0,1,2,3)
AD IFC EQ,$B$AL$
  STOPDUP 
I SET C 
AD ENDIF
  ECHO 4,B=("ALM4","ALM5","ALM6","ALM7"),C=(4,5,6,7)
AE IFC EQ,$B$AL$
  STOPDUP 
I SET C 
AE ENDIF
* 
AF IFEQ I,77B 
  R= A4,AL
AF ELSE 
  R= X4,I 
AF ENDIF
  MX1 -3
  BX6 -X1*X4
  LX1 36D 
  LX6 36D 
  SA4 F+4 
  BX4 X1*X4 
  BX6 X6+X4 
  SA6 A4
AG ENDIF
*         SET SUBSYSTEM,PREFERRED RESIDENCE AND BACKUP REQUIREMENT. 
  ECHO 4,B=(PR,BR,SS) 
SX IFC NE,$B$$
  STOPDUP 
  =3SS F,PR,BR,SS 
SX ENDIF
*         SET ALTERNATE CATLIST PERMISSION. 
CP IFC NE,$AC$$ 
I SET 77B 
  ECHO 3,B=(N,Y),C=(1,2)
  IFC EQ,$B$AC$,2 
  STOPDUP 
I SET C 
M1 IFEQ I,77B 
  R= A3,AC
M1 ELSE 
  R= X3,I 
M1 ENDIF
  MX1 -2
  BX6 -X1*X3
  LX1 46D 
  SA4 F+17B 
  LX6 46D 
  BX4 X1*X4 
  BX6 X6+X4 
  SA6 A4
CP ENDIF
*         SET PERMIT/PASSWORD EXPIRATION TERM OR DATE.
PX IFC NE,$XT$$ 
  SA4 XT
  MX1 -18 
  BX6 -X1*X4
  SA4 F+15B 
  BX4 X1*X4 
  BX6 X6+X4 
  SA6 A4
PX ENDIF
*         SET REAL-TIME OPTION. 
AG IFC NE,$RT$$ 
  SA4 F+1 
  R= X6,1 
  LX6 43D-0 
  BX6 X6+X4 
  SA6 A4
AG ENDIF
*         SET FUNCTION. 
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 - ILLEGAL FORCE FAMILY OPTION 
L ENDIF 
  SX7 O+I 
* 
  R= X2,F 
  RJ =XPFM= 
  ENDM
          SPACE  4,10 
**        PARAMETER PROCESSING MACROS FOR THE =3 MACRO. 
 =3SS     SPACE  4,10 
**        =3SS - SET SUBSYSTEM FIELD IN FET.
  
          PURGMAC  =3SS 
  
 =3SS     MACRO  F,PR,BR,SS 
  LOCAL I 
A IFC EQ,$SS$$
  =3BR F,PR,BR,SS 
A ELSE
I SET 100D
  ECHO 4,B=(NULL,BASIC,FORT,FTNTS,EXEC,BATCH),C=(0,1,2,3,4,5) 
AX IFC EQ,$B$SS$
  STOPDUP 
I SET C 
AX ENDIF
AA IFEQ I,100D
  R= A4,SS
AA ELSE 
  R= X4,I 
AA ENDIF
  =3BR F,PR,BR,X4 
A ENDIF 
 =3SS     ENDM
 =3BR     SPACE  4,10 
**        =3BR - SET BACKUP REQUIREMENT IN FET. 
  
          PURGMAC  =3BR 
  
 =3BR     MACRO  F,PR,BR,SS 
  LOCAL I 
A IFC EQ,$BR$$
  =3PR F,PR,SS
A ELSE
I SET 10D 
  ECHO 4,B=(N,Y,MD),C=(1,2,3) 
AX IFC EQ,$B$BR$
  STOPDUP 
I SET C 
AX ENDIF
AA IFEQ I,10D 
  R= A3,BR
AA ELSE 
  R= X3,I 
AA ENDIF
  LX3 6 
  IFC NE,$SS$$,1
  BX3 SS+X3 
  =3PR F,PR,X3
A ENDIF 
 =3BR     ENDM
 =3PR     SPACE  4,10 
**        =3PR - SET PREFERRED RESIDENCE PARAMETER IN FET.
  
          PURGMAC  =3PR 
  
 =3PR     MACRO  F,PR,PX
  LOCAL I 
A IFC EQ,$PR$$
  BX6 PX
A ELSE
I SET 10D 
  ECHO 4,B=(L,D,M,N,T),C=(1,2,3,4,5)
AX IFC EQ,$B$PR$
  STOPDUP 
I SET C 
AX ENDIF
AA IFEQ I,10D 
  R= A4,PR
AA ELSE 
  R= X4,I 
AA ENDIF
  LX4 9D
AB IFC NE,$PX$$ 
  BX6 X4+PX 
AB ELSE 
  BX6 X4
  ENDIF 
  LX6 48D 
  SA6 F+17B 
 =3PR     ENDM
 APPEND   SPACE  4,10 
***       APPEND (F,PF,UN,PW,PN,D,FO,SR)
* 
*                F  = ADDRESS OF FET (CONTAINS FILE TO BE APPENDED).
*                PF = PERMANENT FILE TO BE APPENDED TO. 
*                UN = OPTIONAL USER NUMBER. 
*                PW = FILE PASSWORD.
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SR = SPECIAL REQUEST OPTION. 
  
  
          PURGMAC APPEND
  
 APPEND   MACRO  F,PF,UN,PW,PN,D,FO,SR
  =3 F,PF,UN,PW,,PN,,,D,FO,7,SR 
  MACREF APPEND 
  ENDM
 ATTACH   SPACE  4,15 
***       ATTACH (F,PF,UN,PW,M,PN,D,FO,SR,RT) 
* 
*                F  = ADDRESS OF FET (WORKING FILE NAME). 
*                PF = PERMANENT FILE NAME.
*                UN = OPTIONAL USER NUMBER. 
*                PW = FILE PASSWORD.
*                M  = MODE OF ACCESS DESIRED. 
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SR = SPECIAL REQUEST OPTION. 
*                RT = REAL TIME OPTION. 
  
  
          PURGMAC ATTACH
  
 ATTACH   MACRO  F,PF,UN,PW,M,PN,D,FO,SR,RT 
  MACREF ATTACH 
  =3 F,PF,UN,PW,,PN,,M,D,FO,11B,SR,,,,,,,,RT
   ENDM 
 CHG      SPACE  4,25 
***       CHANGE (F,PF,NF,PW,UC,CT,M,PN,D,FO,SR,SS,BR,PR,XT,AC) 
* 
*                F  = ADDRESS OF FET. 
*                PF = OLD PERMANENT FILE NAME.
*                NF = NEW PERMANENT FILE NAME.
*                PW = FILE PASSWORD.
*                UC = USER CONTROL INFORMATION. 
*                CT = FILE CATEGORY.
*                M  = MODE OF ACCESS ALLOWED TO FILE. 
*                NOTE - IF *M* OR *CT* IS NOT SPECIFIED AS MNEMONIC,
*                THEN CONTENTS OF *M* OR *CT* MUST BE 40B + MODE OR 
*                CATEGORY.
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SR = SPECIAL REQUEST OPTION. 
*                SS = SUBSYSTEM.
*                BR = BACKUP REQUIREMENT. 
*                PR = PREFERRED RESIDENCE.
*                XT = PASSWORD EXPIRATION DATE. 
*                AC = ALTERNATE CATLIST PERMISSION. 
  
  
          PURGMAC CHANGE
  
 CHANGE   MACRO  F,PF,NF,PW,UC,CT,M,PN,D,FO,SR,SS,BR,PR,XT,AC 
A IFC NE,$NF$$
  R= A4,NF
  MX7 42D 
  BX6 X7*X4 
  SA4 F+15B 
  BX4 -X7*X4
  BX6 X6+X4 
  SA6 A4
A ENDIF 
  MACREF CHANGE 
  =3 F,PF,,PW,UC,PN,CT,M,D,FO,12B,SR,SS,BR,PR,XT,,,AC 
   ENDM 
 DEFINE   SPACE  4,20 
***       DEFINE (F,PF,PW,UC,D,CT,M,PN,S,FO,BR,PR,SR,XT,AL,AC)
* 
*                F  = ADDRESS OF FET (WORKING FILE NAME). 
*                PF = PERMANENT FILE NAME.
*                PW = FILE PASSWORD.
*                UC = USER CONTROL WORD.
*                D  = DEVICE TYPE.
*                CT = FILE CATEGORY.
*                M  = MODE OF ACCESS ALLOWED TO FILE. 
*                PN = PACKNAME. 
*                S  = SPACE IN PRUS DESIRED FOR FILE (THIS IS ADDRESS 
*                     OF RIGHT JUSTIFIED OCTAL QUANTITY). 
*                FO = FORCE FAMILY OPTION.
*                BR = BACKUP REQUIREMENT. 
*                PR = PREFERRED RESIDENCE.
*                SR = SPECIAL REQUEST OPTION. 
*                XT = PASSWORD EXPIRATION DATE. 
*                AL = FILE ACCESS LEVEL.
*                AC = ALTERNATE CATLIST PERMISSION. 
  
  
          PURGMAC DEFINE
  
 DEFINE   MACRO  F,PF,PW,UC,D,CT,M,PN,S,FO,BR,PR,SR,XT,AL,AC
  MACREF DEFINE 
  IFC  NE,$S$$,3
  R= A5,S 
  BX6 X5
  SA6 F+11B 
  =3 F,PF,,PW,UC,PN,CT,M,D,FO,10B,SR,,BR,PR,XT,,AL,AC 
    ENDM
 GET      SPACE  4,10 
***       GET    (F,PF,UN,PW,PN,D,FO,SR,RT) 
* 
*                F  = ADDRESS OF FET (WORKING FILE NAME). 
*                PF = PERMANENT FILE NAME.
*                UN = OPTIONAL USER NUMBER. 
*                PW = FILE PASSWORD.
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SR = SPECIAL REQUEST OPTION. 
*                RT = REAL TIME OPTION. 
  
  
          PURGMAC GET 
  
 GET      MACRO  F,PF,UN,PW,PN,D,FO,SR,RT 
  MACREF GET
  =3 F,PF,UN,PW,,PN,,,D,FO,2,SR,,,,,,,,RT 
    ENDM
 OLD      SPACE  4,10 
***       OLD    (F,PF,UN,PW,PN,D,FO,SR,RT) 
* 
*                F  = ADDRESS OF FET (WORKING FILE NAME). 
*                PF = PERMANENT FILE NAME.
*                UN = OPTIONAL USER NUMBER. 
*                PW = FILE PASSWORD.
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SR = SPECIAL REQUEST OPTION. 
*                RT = REAL TIME OPTION. 
  
  
          PURGMAC OLD 
  
 OLD      MACRO  F,PF,UN,PW,PN,D,FO,SR,RT 
  MACREF OLD
  =3 F,PF,UN,PW,,PN,,,D,FO,21B,SR,,,,,,,,RT 
  ENDM
 PERMIT   SPACE  4,10 
***       PERMIT (F,PF,UN,M,PN,D,FO,SR,XT)
* 
*                F  = ADDRESS OF FET. 
*                PF = PERMANENT FILE NAME.
*                UN = USER NUMBER TO PERMIT.
*                M  = MODE OF ACCESS PERMITTED. 
*                PN = PACK NAME.
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SR = SPECIAL REQUEST OPTION. 
*                XT = PERMIT EXPIRATION DATE. 
  
  
          PURGMAC PERMIT
  
 PERMIT   MACRO  F,PF,UN,M,PN,D,FO,SR,XT
  MACREF PERMIT 
  =3 F,PF,UN,,,PN,,M,D,FO,5,SR,,,,XT
  ENDM
 PUR      SPACE  4,10 
***       PURGE  (F,UN,PW,PN,D,FO,SR) 
* 
*                F  = ADDRESS OF FET (PERMANENT FILE NAME). 
*                UN = OPTIONAL USER NUMBER. 
*                PW = FILE PASSWORD.
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SR = SPECIAL REQUEST OPTION. 
  
  
          PURGMAC PURGE 
  
 PURGE    MACRO  F,UN,PW,PN,D,FO,SR 
  MACREF PURGE
  =3 F,,UN,PW,,PN,,,D,FO,3,SR 
    ENDM
 REPLACE  SPACE  4,15 
***       REPLACE(F,PF,UN,PW,UC,PN,D,FO,SR,M) 
* 
*                F  = ADDRESS OF FET (WORKING FILE NAME). 
*                PF = PERMANENT FILE NAME.
*                UN = OPTIONAL USER NUMBER. 
*                PW = FILE PASSWORD.
*                UC = USER CONTROL WORD.
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SR = SPECIAL REQUEST OPTION. 
*                M  = FILE MODE (IF FILE DOES NOT ALREADY EXIST). 
  
  
          PURGMAC REPLACE 
  
 REPLACE  MACRO  F,PF,UN,PW,UC,PN,D,FO,SR,M 
  MACREF REPLACE
  =3 F,PF,UN,PW,UC,PN,,M,D,FO,6,SR
    ENDM
 SAVE     SPACE  4,15 
***       SAVE   (F,PF,PW,UC,CT,M,PN,D,FO,SS,BR,PR,ST,XT,AL,AC) 
* 
*                F  = ADDRESS OF FET (WORKING FILE NAME). 
*                PF = PERMANENT FILE NAME.
*                PW = FILE PASSWORD.
*                UC = USER CONTROL WORD.
*                CT = FILE CATEGORY.
*                M  = FILE MODE.
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                FO = FORCE FAMILY OPTION.
*                SS = SUBSYSTEM.
*                BR = BACKUP REQUIREMENT. 
*                PR = PREFERRED RESIDENCE.
*                SR = SPECIAL REQUEST OPTION. 
*                XT = PASSWORD EXPIRATION DATE. 
*                AL = FILE ACCESS LEVEL.
*                AC = ALTERNATE CATLIST PERMISSION. 
  
  
          PURGMAC SAVE
  
 SAVE     MACRO  F,PF,PW,UC,T,M,PN,D,FO,SS,BR,PR,SR,XT,AL,AC
  MACREF SAVE 
  =3 F,PF,,PW,UC,PN,T,M,D,FO,1,SR,SS,BR,PR,XT,,AL,AC
    ENDM
 SETPFAC  SPACE  4,10 
***       SETPFAC(F,PF,AC,PN,D,SR)
* 
*                F  = ADDRESS OF FET. 
*                PF = PERMANENT FILE NAME.
*                AC = ADDRESS OF NEW CATEGORY SET FOR THE FILE. 
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                SR = SPECIAL REQUEST OPTION. 
  
  
          PURGMAC SETPFAC 
 SETPFAC  MACRO  F,PF,AC,PN,D,SR
  MACREF SETPFAC
  =3 F,PF,,,,PN,,,D,,22B,SR,,,,,AC
    ENDM
 SETPFAL  SPACE  4,10 
***       SETPFAL(F,PF,AL,PN,D,SR)
* 
*                F  = ADDRESS OF FET. 
*                PF = PERMANENT FILE NAME.
*                AL = NEW ACCESS LEVEL FOR FILE (ADDRESS OR MNEMONIC).
*                PN = PACKNAME. 
*                D  = DEVICE TYPE.
*                SR = SPECIAL REQUEST OPTION. 
  
  
          PURGMAC SETPFAL 
 SETPFAL  MACRO  F,PF,AL,PN,D,SR
  MACREF SETPFAL
  =3 F,PF,,,,PN,,,D,,23B,SR,,,,,,AL 
    ENDM
          TITLE  DATA TRANSFER MACROS.
 DATA     SPACE  4,10 
***       DATA TRANSFER MACROS FORMAT REQUESTS INTO X REGISTERS AND 
*         RETURN JUMP TO PROCESSING SUBROUTINES.
          SPACE  4,10 
***       MACROS WHICH READ DATA FROM A FILE RETURN STATUS INFORMATION
*         AS FOLLOWS -
*                (X1) = 0 FOR TRANSFER COMPLETE.
*                (X1) = ADDRESS OF LAST WORD TRANSFERRED INTO WORKING 
*                       BUFFER, IF EOR DETECTED ON FILE BEFORE TRANSFER 
*                       COMPLETED.
*                (X1) = -1 IF EOF DETECTED ON FILE. 
*                (X1) = -2 IF EOI DETECTED ON FILE. 
* 
*         DATA WILL NOT BE TRANSFERRED AFTER AN EOR/EOF IS SENSED.
 READC    SPACE  4,10 
***       THE FOLLOWING MACROS TRANSFER DATA TO OR FROM WORKING BUFFERS 
*         AND THE SELECTED FILE IN FORMATS SPECIFIED.  MACROS WHICH 
*         READ DATA FROM A FILE RETURN WITH (B6) = LWA + 1 OF DATA
*         TRANSFERRED.
* 
*         ENTRY  *BUF* = ADDRESS OF WORKING BUFFER. 
*                *N* = WORD COUNT OF WORKING BUFFER.
 READC    SPACE  4,10 
***       READC - READ CODED LINE IN *C* FORMAT.
* 
*         READC  FILE,BUF,N 
* 
*         READ 1 CODED LINE FROM *FILE* TO *BUF*. 
*         DATA IS TRANSFERRED UNTIL THE END OF LINE 0000 IS SENSED. 
* 
*         CALLS  RDC=.
  
  
          PURGMAC READC 
  
 READC    MACRO  F,S,N
  MACREF READC
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XRDC= 
  ENDM
 WRITEC   SPACE  4,10 
***       WRITEC - WRITE CODED LINE IN *C* FORMAT.
* 
*         WRITEC FILE,BUF 
* 
*         DATA IS TRANSFERRED UNTIL THE END OF LINE 0000 IS SENSED. 
* 
*         CALLS  WTC=.
  
  
          PURGMAC WRITEC
  
 WRITEC   MACRO  F,S
  MACREF WRITEC 
  R= B6,S 
  R= X2,F 
  RJ =XWTC= 
  ENDM
 READH    SPACE  4,10 
***       READH - READ CODED LINE IN *H* FORMAT.
* 
*         READH  FILE,BUF,N 
* 
*         DATA IS TRANSFERRED UNTIL THE END OF LINE 0000 IS SENSED. 
*         TRAILING SPACES ARE FILLED INTO THE WORKING BUFFER. 
* 
*         CALLS  RDH=.
  
  
          PURGMAC READH 
  
 READH    MACRO  F,S,N
  MACREF READH
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XRDH= 
  ENDM
 WRITEH   SPACE  4,10 
***       WRITEH - WRITE CODED LINE IN *H* FORMAT.
* 
*         WRITEH FILE,BUF,N 
* 
*         TRAILING SPACES ARE DELETED.
* 
*         CALLS  WTH=.
  
  
          PURGMAC WRITEH
  
 WRITEH   MACRO  F,S,N
  MACREF WRITEH 
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XWTH= 
  ENDM
 READO    SPACE  4,10 
***       READO - READ ONE WORD.
* 
*         READO  FILE 
* 
*         ENTRY  NONE.
* 
*         EXIT   (X6) = WORD READ.
* 
*         CALLS  RDO=.
  
  
          PURGMAC READO 
  
 READO    MACRO  F
  MACREF READO
  SA1 F+2 
  RJ =XRDO= 
  ENDM
 WRITEO   SPACE  4,10 
***       WRITEO - WRITE ONE WORD.
* 
*         WRITEO FILE 
* 
*         ENTRY  (X6) = WORD TO WRITE.
* 
*         CALLS  WTO=.
  
  
          PURGMAC WRITEO     (1051) 
  
 WRITEO   MACRO  F
  MACREF WRITEO 
  SA1 F+2 
  RJ =XWTO= 
  ENDM
 READS    SPACE  4,15 
***       READS - READ CODED LINE TO CHARACTER BUFFER.
* 
*         READS  FILE,BUF,N 
* 
*         WORDS ARE UNPACKED AND STORED IN THE WORKING BUFFER 1 
*         CHARACTER/WORD UNTIL THE END OF LINE (0000) BYTE IS SENSED. 
*         00 CHARACTERS ARE STORED AS SPACE (55) CODES. 
*         IF THE CODED LINE TERMINATES BEFORE *N* CHARACTERS ARE
*         STORED, THE WORKING BUFFER IS FILLED WITH SPACE CODES.
* 
*         CALLS  RDS=.
  
  
          PURGMAC READS 
  
 READS    MACRO  F,S,N
  MACREF READS
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XRDS= 
  ENDM
 WRITES   SPACE  4,10 
***       WRITES - WRITE CODED LINE FROM CHARACTER BUFFER.
* 
*         WRITES FILE,BUF,N 
* 
*         CHARACTERS ARE PACKED FROM THE WORKING BUFFER 10 CHARACTERS 
*         PER WORD. 
*         TRAILING CODES ARE DELETED BEFORE CHARACTERS ARE PACKED.
* 
*         CALLS  WTS=.
  
  
          PURGMAC WRITES
  
 WRITES   MACRO  F,S,N
  MACREF WRITES 
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XWTS= 
  ENDM
 READW    SPACE  4,10 
***       READW - READ DATA TO WORKING BUFFER.
* 
*         READW  FILE,BUF,N 
* 
*         CALLS  RDW=.
  
  
          PURGMAC READW 
  
 READW    MACRO  F,S,N
  MACREF READW
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XRDW= 
  ENDM
 SKIPW    SPACE  4,10 
***       SKIPW - SKIP WORDS IN CIRCULAR BUFFER.
* 
*         SKIPW  FILE,N 
* 
*         CALLS  SKW=.
  
  
          PURGMAC SKIPW 
  
 SKIPW    MACRO  F,N
  MACREF SKIPW
  R= B7,N 
  R= X2,F 
  RJ =XSKW= 
  ENDM
 WRITEW   SPACE  4,10 
***       WRITEW - WRITE DATA FROM WORKING BUFFER.
* 
*         WRITEW FILE,BUF,N 
* 
*         CALLS  WTW=.
  
  
          PURGMAC WRITEW
  
 WRITEW   MACRO  F,S,N
  MACREF WRITEW 
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XWTW= 
  ENDM
  
          TITLE  COMPASS/SYMPL DECLARATION MACROS.
          SPACE  4,10 
***       COMPASS/SYMPL DECLARATION MACROS. 
* 
*         THE #DEF# MACRO PERMITS SOURCE LINES TO CONTAIN BOTH A
*         *COMPASS* AND *SYMPL* DECLARATION OF A VARIABLE.  COMMENTS
*         ARE USED TO HIDE INSTRUCTIONS FOR ONE LANGUAGE FROM THE 
*         OTHER LANGUAGE.  IN *SYMPL*, COMMENTS ARE DELIMITED BY THE
*         (#) CHARACTER.  PERSONS MODIFYING LINES WITH BOTH *COMPASS* 
*         AND *SYMPL* DECLARATIONS SHOULD ENSURE THAT THE VARIABLE IS 
*         DEFINED TO HAVE THE SAME VALUE IN BOTH LANGUAGES. 
 #DEF#    SPACE  4,10 
***       #DEF# - DEFINE *SYMPL*/*COMPASS* VARIABLE.
* 
* #NAMEC  #DEF#  VALUE       # NAMES #VALUE#; 
*         NAMEC = THE *COMPASS* NAME OF A VARIABLE. 
*         NAMES = THE *SYMPL* NAME OF THE SAME VARIABLE.
*         VALUE = THE VALUE TO BE ASSIGNED TO THE VARIABLE.  BOTH 
*                 INSTANCES MUST HAVE THE SAME NUMERIC VALUE, ALTHOUGH
*                 THEIR REPRESENTATIONS MAY DIFFER (E.G. 16D VS. 16,
*                 OR 32B VS. O"32").
  
  
          PURGMAC #DEF# 
  
          MACRO  #DEF#,N,V
 .1 MICRO 2,, N 
 ".1" EQU V 
 #DEF#    ENDM
  
