*COMDECK  CPCOM 
          TTL    CPCOM - CENTRAL PROGRAM SYSTEM COMMUNICATION MACROS. 
          TITLE 
 CPCOM    SPACE  4
*         COMMENT COPYRIGHT CONTROL DATA CORP. 1970.
 CPCOM    SPACE  4
***       CPCOM - CENTRAL PROGRAM SYSTEM COMMUNICATION MACROS.
*         G. R. MANSFIELD.  70/09/21. 
 CPCOM    SPACE  4
***              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
          BASE   DECIMAL
          TITLE  GENERAL MACROS.
 GENERAL  SPACE  4
***       SYSCOM - DEFINE SYSTEMS COMMUNICATION SYMBOLS.
* 
* 
*         SYSCOM B1 
*         IF *B1* IS PRESENT, USER DEFINES (B1) = 1.
  
  
          PURGMAC SYSCOM
  
 SYSCOM   MACRO  N
  IFC EQ,$N$B1$,1 
  B1=1
****      PROGRAM CONTROL AREA
* 
* 
*                            FIRST ARGUMENT 
ARGR = 2
*                            SPECIAL PROGRAM PARAMETER AREA (27B-47B) 
SPPR = 27B
*                            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
*                            FWA ASSIGNED PROGRAM SPACE (BITS 0 - 17) 
FWPR = 66B
*                            JOB ORIGIN TYPE(BITS 24 - 35)
JOPR = 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
***       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
***       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
  R= X1,C 
  R= X2,F 
  R= X3,T 
  RJ =XMVE= 
  ENDM
          TITLE  SYSTEM REQUESTS. 
 SYSTEM   SPACE  4
***              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
***       ABORT - ABORT JOB.
* 
* 
*         ABORT 
*         CALLS  SYS=.
  
  
          PURGMAC ABORT 
  
 ABORT    MACRO 
*                            FORM ABORT REQUEST 
  SX6 4RABTP/16D
  LX6 40D 
*                            PROCESS SYSTEM REQUEST 
  RJ =XSYS= 
  ENDM
 CLOCK    SPACE  4
***       CLOCK - RETURN TIME OF DAY. 
* 
* 
*         CLOCK  STATUS 
*         ENTRY  *STATUS* = ADDRESS FOR TIME OF DAY RESPONSE. 
*         EXIT -
*  STATUS 60/  * HH.MM.SS.* 
*         CALLS  SYS=.
  
  
          PURGMAC CLOCK 
  
 CLOCK    MACRO  S
*                            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
***       CONTROL - READ NEXT CONTROL CARD. 
* 
* 
*         CONTROL BUF,RSS,LF,SF 
*         ENTRY  *BUF* = ADDRESS TO WHICH CONTROL CARD WILL BE READ.
*                            (ALLOW 8 WORDS)
*                *RSS* IF PRESENT SUPPRESSES THE ADVANCEMENT OF THE 
*                            CONTROL CARDS.  THIS OPTION ALLOWS 
*                            THE NEXT CONTROL CARD TO BE CHECKED. 
*                *LF* IF PRESENT INDICATES TO RETURN CONTROL CARD 
*                IRREGARDLESS OF WHETHER IT POINTS AT A LOCAL FILE. 
*                NORMALLY NO CONTROL CARD 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 CARD IS FOR A LOCAL FILE.
*                *SF* IF PRESENT INDICATES PARAMETERS UNPACKED IN SCOPE 
*                FORMAT.
*         CALLS  SYS=.
  
  
          PURGMAC CONTROL 
  
 CONTROL  MACRO  A,B,C,D
  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
***       DATE - RETURN DATE. 
* 
* 
*         DATE   STATUS 
*         ENTRY  *STATUS* = ADDRESS FOR DATE RESPONSE.
*         EXIT -
*  STATUS 60/  * YY/MM/DD.* 
*         CALLS  SYS=.
  
  
          PURGMAC DATE
  
 DATE     MACRO  S
*                            FORM TIME (DATE) REQUEST 
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
  SX1 200001B 
  LX1 24D 
  BX6 X6+X1 
*                            PROCESS SYSTEM REQUEST 
  RJ =XSYS= 
  ENDM
 ENDRUN   SPACE  4
***       ENDRUN - END CENTRAL PROGRAM. 
* 
* 
*         ENDRUN
*         CALLS  SYS=.
  
  
          PURGMAC ENDRUN
  
 ENDRUN   MACRO 
*                            FORM END REQUEST 
  SX6 4RENDP/16D
  LX6 40D 
*                            PROCESS SYSTEM REQUEST 
  RJ =XSYS= 
  ENDM
 EREXIT   SPACE  4
***       EREXIT - SET ERROR RETURN ADDRESS.
*         THIS WILL SET CPU PROGRAM ADDRESS TO RESTART THE PROGRAM AT 
*         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 = 
*  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
  R= X1,A 
  SX2 4 
  RJ =XCPM= 
  ENDM
 JDATE    SPACE  4
***       JDATE - JULIAN DATE.
* 
* 
*         JDATE  STATUS 
*         ENTRY  *STATUS* = ADDRESS FOR JULIAN DATE.
*         EXIT -
*  STATUS 30/,30/ *YYDDD* 
*         CALLS  SYS=.
  
  
          PURGMAC JDATE 
  
 JDATE    MACRO  S
*                            FORM TIME (JDATE) REQUEST. 
  SX6 3RTIM 
  R= X1,S 
  LX6 42D 
  BX6 X6+X1 
  SX1 200003B 
  LX1 24D 
  BX6 X6+X1 
*                            PROCESS SYSTEM REQUEST.
  RJ =XSYS= 
  ENDM
 MEMORY   SPACE  4
***       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*.
*                *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*. 
* 
*  STATUS 30/  N,30/  0 
*         N      MEMORY REQUEST  (IF N .GT. 0 THEN THE FOLLOWING IS 
*                                RETURNED)
* 
*                                    N = 12/0,1/N,17/FL 
* 
*                                        N = 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 
 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 
  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)
  R= X6,W 
  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,50 
***       MESSAGE - DISPLAY MESSAGE.
* 
* 
*         MESSAGE MESSAGE,OPTION,RECALL 
* 
* 
*         ENTRY  *MESSAGE* = ADDRESS OF MESSAGE IN *C* FORMAT.
*                *OPTION* = DISPLAY OPTION AS FOLLOWS.
* 
*                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 
  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
***       ONSW - TURN ON SENSE SWITCHES.
* 
* 
*         ONSW   N
*         ENTRY  *N* = SENSE SWITCH BITS. (BIT 0 = SWITCH 1)
*                IF *N* = 0, ALL SWITCHES WILL BE TURNED ON.
*         CALLS  CPM=.
  
  
          PURGMAC ONSW
  
 ONSW     MACRO  N
  R= X1,N 
  SX2 11B 
  RJ =XCPM= 
  ENDM
 OFFSW    SPACE  4
***       OFFSW - TURN OFF SENSE SWITCHES.
* 
* 
*         OFFSW  N
*         ENTRY  *N* = SENSE SWITCH BITS. (BIT 0 = SWITCH 1)
*                IF *N* = 0, ALL SWITCHES WILL BE TURNED OFF. 
*         CALLS  CPM=.
  
  
          PURGMAC OFFSW 
  
 OFFSW    MACRO  N
  R= X1,N 
  SX2 12B 
  RJ =XCPM= 
  ENDM
 OVERLAY  SPACE  4
***       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 
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
***       PDATE - RETURN PACKED DATE. 
* 
* 
*         PDATE  STATUS 
*         ENTRY  *STATUS* = ADDRESS FOR PACKED DATE.
*         EXIT -
*  STATUS 24/,18/  YYMMDD,18/  HHMMSS 
*         CALLS  SYS=.
  
  
          PURGMAC PDATE 
  
 PDATE    MACRO  S
*                            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
***       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= OR WNB=.
  
  
          PURGMAC RECALL
  
 RECALL   MACRO  S
*                            RECALL 
  IFC EQ,$S$$ 
  RJ =XRCL= 
  ELSE 2
*                            WAIT NOT BUSY
  R= X2,S 
  RJ =XWNB= 
  ENDIF 
  ENDM
 RTIME    SPACE  4
***       RTIME - REQUEST REAL TIME CLOCK READING.
* 
* 
*         RTIME  STATUS 
*         ENTRY  *STATUS* = ADDRESS FOR CLOCK RESPONSE. 
*         EXIT -
*  STATUS 24/  SECONDS,36/  MILLISECONDS
*         CALLS  SYS=.
  
  
          PURGMAC RTIME 
  
 RTIME    MACRO  S
*                            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 
***       STIME - REQUEST ACCUMULATED SRUS. 
* 
* 
*         STIME  STATUS 
*         ENTRY  *STATUS* = ADDRESS FOR RESPONSE. 
*         EXIT   -
*  STATUS 12/  2000B,12/  0,36/  MILLI-UNITS
*         CALLS  SYS= 
  
  
          PURGMAC STIME 
  
 STIME    MACRO  S
*                            FORM TIME (STIME) REQUEST
  SX6 3RTIM 
  R=  X1,S
  LX6 42D 
  BX6 X6+X1 
  SX1 200007B 
  LX1 24D 
  BX6 X6+X1 
*                            PROCESS SYSTEM REQUEST 
  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
  QUAL
(C) SET 0 
  QUAL *
*                            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= 
  ENDM
 TIME     SPACE  4
***       TIME - REQUEST ACCUMULATED CPU TIME.
* 
* 
*         TIME   STATUS 
*         ENTRY  *STATUS* = ADDRESS FOR TIME RESPONSE.
*         EXIT -
*  STATUS 12/  2000B,12/0,24/  SEC,12/  MS
*         SEC    SECONDS
*         MS     MILLISECONDS 
*         CALLS  SYS=.
  
  
          PURGMAC TIME
  
 TIME     MACRO  S
*                            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
***       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
  R= X1,N 
  SX2 31B 
  RJ =XCPM= 
  ENDM
 USERNUM  SPACE  4
***       USERNUM - RETURN USER NUMBER. 
* 
* 
*         USERNUM STATUS
*         ENTRY  *STATUS* = ADDRESS FOR USER NUMBER RETURN. 
*         EXIT -
*  STATUS 42/ *USERNUM* ,18/0 
*         CALLS  CPM=.
  
  
          PURGMAC USERNUM 
  
 USERNUM  MACRO  A
  R= X1,A 
  SX2 32B 
  RJ =XCPM= 
  ENDM
          TITLE  FET CREATION MACROS. 
 FET      SPACE  4
***       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. 
* 
*         (LBL) 
*         SET FET LENGTH TO 13D.
* 
*         (UPR) 
*         SET USER PROCESSING BIT.
* 
*         (XL)
*         SET EXTENDED LABEL BIT AND FET LENGTH TO 13D. 
* 
*         THE FOLLOWING PARAMETERS ARE FOR COMUNICATION 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,FG 
*         FL = FET LENGTH.
*         FG = FLAG BITS IN FET+1.
F VFD 42D/0L(*F,16D/,1/M,1/1
*         SET INITIAL FET LENGTH BY RANDOM DETERMINATION. 
FG SET 4000B*R
FL SET 3*R+5
*         INITIALIZE VARIOUS MICROS.
  ECHO 1,X=(EOI,ERR,INF,INL,WSF,WSL)
=1(*X MICRO 1,, 0 
  ECHO 1,X=(EPR,UPR,XL,DSC,DTY,FET,IND,LBL,OWN,PFN,PKN,PWD,UCW,USN,WSA) 
=1(*X MICRO , 
*         PROCESS VALUE SPECIFICATIONS. 
  ECHO 4,P=(V)
  IFC NE,  P
  =1A FL,FG,P 
  ELSE 1
  STOPDUP 
*         GENERATE REMAINDER OF FET.
  VFD 12D/<>=1DTY<>,12D/FG,12D/,6/FL-5,18D/B
  CON B 
  CON B 
  CON B+L 
  IFGE FL,6,16D 
  VFD 30D/<>=1WSF<>,30D/<>=1WSF<>+<>=1WSL<> 
  IFGE FL,7,14D 
  CON 0 
  IFGE FL,8D,12D
  VFD 24D/0,18D/<>=1INL<>,18D/<>=1INF<> 
  IFGE FL,9D,10D
  CON <>=1EOI<>*1S30+<>=1ERR<>+0L<>=1PFN<>
  IFGE FL,10D,8D
  CON 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 EACH 
*         OF THE INDIVIDUAL PARAMETRIC MACROS TO GENERATE ALL 
*         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,FG,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,FG,<>)2<>,B 
  ENDM
  
  
          PURGMAC =1B 
  
 =1B      MACRO  FL,LEN,FG,FLG,M,S
FL MAX FL,LEN 
FG SET FG+FLG 
  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,FG,A
*                            SET DEVICE TYPE IN FET+1.
  =1B FL,,FG,,DTY,A 
  ENDM
  
  
          PURGMAC =1EPR 
  
 =1EPR    MACRO  FL,FG
*                            SET ERROR PROCESSING FLAG BIT. 
  =1B FL,,FG,400B 
  ENDM
  
  
          PURGMAC =1FET 
  
 =1FET    MACRO  FL,FG,A
*                            SET FET LENGTH AS SPECIFIED. 
  =1B FL,A,FG 
  ENDM
  
  
          PURGMAC =1IND 
  
 =1IND    MACRO  FL,FG,A,B
*                            SET INDEX ADDRESS AND LENGTH.
  =1B FL,8D,FG,,(INF,INL),(A,B) 
  ENDM
  
  
          PURGMAC =1LBL 
  
 =1LBL    MACRO  FL,FG
*                            SET FET LENGTH TO 11D. 
  =1B FL,11D,FG 
  ENDM
  
  
          PURGMAC =1OWN 
  
 =1OWN    MACRO  FL,FG,A,B
*                            SET OWN CODE PROCESSOR ADDRESSES.
  =1B FL,9D,FG,,(EOI,ERR),(A,B) 
  ENDM
  
  
          PURGMAC =1PFN 
  
 =1PFN    MACRO  FL,FG,A
*                            SET PERMANENT FILE NAME IN FET.
  =1B FL,9D,FG,,PFN,A 
  ENDM
  
  
          PURGMAC =1PKN 
  
 =1PKN    MACRO  FL,FG,A
*                            SET PERMANENT FILE PACK NAME.
  =1B FL,13D,FG,,PKN,A
  ENDM
  
  
          PURGMAC =1PWD 
  
 =1PWD    MACRO  FL,FG,A
*                            SET PERMANENT FILE PASSWORD. 
  =1B FL,11D,FG,,PWD,A
  ENDM
  
  
          PURGMAC =1UCW 
  
 =1UCW    MACRO  FL,FG,A
*                            SET PERMANENT FILE USER CONTROL WORD.
  =1B FL,12D,FG,,UCW,A
  ENDM
  
  
          PURGMAC =1UPR 
  
 =1UPR    MACRO  FL,FG
*                            SET *UP* BIT IN FET+1. 
  =1B FL,,FG,1000B
  ENDM
  
  
          PURGMAC =1USN 
  
 =1USN    MACRO  FL,FG,A
*                            SET PERMANENT FILE USER NUMBER IN FET. 
  =1B FL,10D,FG,,USN,A
  ENDM
  
  
          PURGMAC =1WSA 
  
 =1WSA    MACRO  FL,FG,A,B
*                            SET WORKING STORAGE BUFFER ADDRESSES.
  =1B FL,6D,FG,,(WSF,WSL),(A,B) 
  ENDM
  
  
          PURGMAC =1XL
  
 =1XL     MACRO  FL,FG
*                            SET FET LENGTH TO 13D AND *XL* FLAG BIT
  =1B FL,13D,FG,40B 
  ENDM
 FILEB    SPACE  4
***       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))
  ENDM
 FILEC    SPACE  4
***       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))
  ENDM
 RFILEB   SPACE  4
***       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))
  ENDM
 RFILEC   SPACE  4
***       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))
  ENDM
          TITLE  LOCAL FILE ACTION MACROS.
 FILE     SPACE  4
***              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
**        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
 ASSIGN   SPACE  4
***       ASSIGN - ASSIGN COMMON FILE TO JOB. 
* 
* 
*         ASSIGN FILE,LIBRARY 
*         ENTRY  *LIBRARY* IS PRESENT, FILE WILL BE ASSIGNED FROM 
*                SYSTEM LIBRARY IF AVAILABLE. 
*         CALLS  LFM=.
  
  
          PURGMAC ASSIGN
  
 ASSIGN   MACRO  F,L
  R= X2,F 
  IFC EQ,$L$$ 
  R= X7,1 
  ELSE 1
  SX7 20B 
  RJ =XLFM= 
  ENDM
 BKSP     SPACE  4
***       BKSP - BACKSPACE 1 LOGICAL RECORD.
* 
* 
*         BKSP   FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC BKSP
  
 BKSP     MACRO  F,L
  =2 F,L,40B
  ENDM
 BKSPRU   SPACE  4
***       BKSPRU - BACKSPACE PHYSICAL RECORDS.
* 
* 
*         BKSPRU FILE,N,RECALL
*         ENTRY  *N* = RECORD COUNT.
*         CALLS  CIO=.
  
  
          PURGMAC BKSPRU
  
 BKSPRU   MACRO  F,N,L
  R= X2,F 
  IFNE N,,3 
  R= X1,N 
  LX1 18D 
  BX2 X1+X2 
  IFC EQ,$L$$ 
  SX7 44B 
  ELSE 1
  SX7 -44B
  RJ =XCIO= 
  ENDM
 CLOSE    SPACE  4
***       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
  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
***       CLOSER - CLOSE MAGNETIC TAPE REEL.
* 
* 
*         CLOSER FILE,TYPE,RECALL 
*         ENTRY  *TYPE* AS FOLLOWS -
*                NR          DO NOT REWIND
*                UNLOAD      UNLOAD 
*                IF ABSENT   REWIND 
*         CALLS  CIO=.
  
  
          PURGMAC CLOSER
  
 CLOSER   MACRO  F,T,L
          LOCAL  A
  R= X2,F 
A SET 0 
  ECHO 3,B=(,NR,UNLOAD),C=(350B,330B,370B)
  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
***       EVICT - RELEASE FILE SPACE. 
* 
* 
*         EVICT  FILE,RECALL
*         CALLS CIO=. 
  
  
          PURGMAC EVICT 
  
 EVICT    MACRO  F,L
  =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
  R= X2,F 
  SX7 32B 
  RJ =XLFM= 
  ENDM
 LABEL    SPACE  4
***       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 -
* 
*   FET+10B 1/R,1/L,1/N,1/T,2/ ,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      KRONOS LABELED IF SET
*         N      NON-STANDARD LABELS IF SET 
*         T      NINE TRACK IF SET, OTHERWISE SEVEN TRACK 
*         D      DENSITY
*                0 = INSTALLATION DEFAULT 
*                1 = 556 BPI
*                2 = 200 BPI
*                3 = 800 BPI/CPI
*                4 = 1600 CPI 
*         CV     CONVERSION MODE
*                0 = INSTALLATION DEFAULT 
*                1 = USASI/ASCII 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
*                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 = SCOPE INTERNAL 
*                2 = EXTERNAL BINARY
*                3 = SCOPE STRANGER OR LONG STRANGER
*                4 = CODED
*                5 = BLOCKED CODED
*                6 = MIXED
*         NS     NOISE SIZE IN FRAMES 
*         FC     BLOCK SIZE IN FRAMES 
* 
*   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)
* 
*   FET+12B 60/FI 
*         FI     FIRST 10 CHARACTERS OF FILE IDENTIFIER 
* 
*   FET+13B 42/FI,3/0,15/QN 
*         FI     LAST 7 CHARACTERS OF FILE IDENTIFIER  (SPACE FILLED) 
*         QN     FILE SEQUENCE NUMBER  (DEFAULT = 0001) 
* 
*   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)
* 
*   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 CARD OR BY THE VSN
*         FIELD IN FET+11B.  IF THE VSN FIELD IS ZERO AND NO
*         VSN HAS BEEN SPECIFIED BY A VSN CARD, THE OPERATOR
*         WILL BE REQUESTED TO ASSIGN THE APPROPRIATE EQUIPMENT.
* 
*         CALLS  LFM=.
  
  
          PURGMAC LABEL 
  
 LABEL    MACRO  F
  R= X2,F 
  SX7 24B 
  RJ =XLFM= 
  ENDM
 LOCK     SPACE  4
***       LOCK - SET WRITE LOCK OUT.
* 
* 
*         LOCK   FILE 
*         FILE MUST BE LOCAL. 
*         CALLS  LFM=.
  
  
          PURGMAC LOCK
  
 LOCK     MACRO  F
  R= X2,F 
  SX7 10B 
  RJ =XLFM= 
  ENDM
 OPEN     SPACE  4
***       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
  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
 POSMF    SPACE  4
***       POSMF - POSITION MULTI-FILE SET.
*         MAGNETIC TAPE ONLY. 
* 
* 
*         POSMF  FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC POSMF 
  
 POSMF    MACRO  F,L
  =2 F,L,110B 
  ENDM
 READ     SPACE  4
***       READ - READ FILE TO CIO BUFFER. 
* 
* 
*         READ   FILE,RECALL
*         CALLS CIO=. 
  
  
          PURGMAC READ
  
 READ     MACRO  F,L
  =2 F,L,10B
  ENDM
 READCW   SPACE  4
***       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
  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
***       READEI - READ FILE TO END OF INFORMATION. 
* 
* 
*         READEI FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC READEI
  
 READEI   MACRO  F,L
  =2 F,L,600B 
  ENDM
 READLS   SPACE  4
***       READLS - READ FILE WITH LIST. 
* 
* 
*         READLS FILE,RECALL
*         MASS STORAGE FILES ONLY.
*         CALLS  CIO=.
  
  
          PURGMAC READLS
  
 READLS   MACRO  F,L
  =2 F,L,210B 
  ENDM
 READN    SPACE  4
***       READN - READ *S* OR *L* FORMAT TAPE NON-STOP. 
*         MAGNETIC TAPE ONLY. 
* 
* 
*         READN  FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC READN 
  
 READN    MACRO  F,L
  =2 F,L,260B 
  ENDM
 READNS   SPACE  4
***       READNS - READ FILE NON-STOP. (READ TO EOF)
* 
* 
*         READNS FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC READNS
  
 READNS   MACRO  F,L
  =2 F,L,250B 
  ENDM
 READSKP  SPACE  4
***       READSKP - READ SKIP.
*         READSKP PERFORMS A READ FUNCTION UNTIL THE CIO BUFFER IS
*         FULL, OR AN END OF RECORD, 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
  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
 RELEASE  SPACE  4
***       RELEASE - RELEASE FILE. 
* 
* 
*         RELEASE FILE,TYPE,ORIG,USER 
*         ENTRY  *TYPE* AS FOLLOWS -
*                PRINT  RELEASE FILE TO PRINT QUEUE.
*                PUNCH  RELEASE FILE TO PUNCH QUEUE (O26).
*                PUNCH9 RELEASE FILE TO PUNCH QUEUE (O29).
*                PUNCHB RELEASE FILE TO PUNCHB QUEUE. 
*                P8     RELEASE FILE TO P8 QUEUE. 
*                *ORIG* AS FOLLOWS -
*                BC     RELEASE FILE TO BATCH SUBSYSTEM.
*                EI     RELEASE FILE TO EXPORT SUBSYSTEM (REMOTE BATCH).
*                *USER* = ADDRESS OF USER NUMBER TO RELEASE TO AT 
*                  THAT ORIGIN. 
*         CALLS  LFM=.
  
  
          PURGMAC RELEASE 
  
 RELEASE  MACRO  F,T,O,U
          LOCAL  A,D,H,PHFR,PBFR,P8FR,P9FR
          LOCAL  PRFT,PHFT
  
*         NOTE - IF THE VALUES FOR *PBFR/P8FR/PHFR/P9FR* ARE CHANGED
*         IN *COMSJIO*, THE APPROPRIATE CHANGES MUST BE MADE BELOW. 
  
 PBFR     SET    1
 P8FR     SET    2
 PHFR     SET    4
 P9FR     SET    5
  
*         NOTE - IF THE VALUES FOR *PRFT/PHFT* ARE CHANGED
*         IN *PPCOM*, THE APPROPRIATE VALUE MUST BE CHANGED BELOW.
  
 PRFT     SET    2
 PHFT     SET    3
A SET 0 
  ECHO 3,B=(PRINT,PUNCH,PUNCHB,P8,PUNCH9),C=(2,3,4,5,6) 
  IFC EQ,$B$T$,2
  STOPDUP 
A SET C 
  IFEQ A,,1 
  ERR ILLEGAL RELEASE TYPE - T
D SET 7 
  ECHO 3,E=(,BC,EI),G=(0,1,2) 
  IFC EQ,$E$O$,2
  STOPDUP 
D SET G 
  IFEQ D,7,1
  ERR ILLEGAL RELEASE ORIGIN - O
  IFC EQ,$O$BC$,2 
  BX1 X1-X1 
J SKIP
M IFC EQ,$U$$ 
  SX1 B0
M ELSE
  IFC NE,$U$X1$,1 
  SA1 U 
M ENDIF 
J ENDIF 
  SX7 D 
  LX7 12D 
  BX7 X1+X7 
  IFEQ A,2,1
  SX1 PRFT*100B 
  IFEQ A,3,1
  SX1 PHFT*100B+PHFR
  IFEQ A,4,1
  SX1 PHFT*100B+PBFR
  IFEQ A,5,1
  SX1 PHFT*100B+P8FR
  IFEQ A,6,1
  SX1 PHFT*100B+P9FR
  BX7 X7+X1 
  SA7 F+6 
  R= X2,F 
  SX7 16B 
  RJ =XLFM= 
  ENDM
 RENAME   SPACE  4
***       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
  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
***       REQUEST - REQUEST OPERATOR ASSIGNMENT OF EQUIPMENT. 
* 
* 
*         REQUEST FILE,UNIT 
*         ENTRY  *UNIT* IF USED ASSIGNS THE EQUIPMENT DESIGNATED
*                IN THE *DTY* POSITION IN (FILE+1). 
*         CALLS  LFM=.
  
  
          PURGMAC REQUEST 
  
 REQUEST  MACRO  F,U
  R= X2,F 
  IFC EQ,$U$$ 
  SX7 14B 
  ELSE 1
  SX7 15B 
  RJ =XLFM= 
  ENDM
 RETURN   SPACE  4
***       RETURN - RETURN FILE TO SYSTEM. 
* 
* 
*         RETURN FILE,RECALL
*         CALLS CIO=. 
  
  
          PURGMAC RETURN
  
 RETURN   MACRO  F,L
  =2 F,L,70B
  ENDM
 REWIND   SPACE  4
***       REWIND - REWIND FILE. 
* 
* 
*         REWIND FILE,RECALL
*         CALLS CIO=. 
  
  
          PURGMAC REWIND
  
 REWIND   MACRO  F,L
  =2 F,L,50B
  ENDM
 REWRITE  SPACE  4
***       REWRITE - REWRITE DATA FROM CIO BUFFER. 
* 
* 
*         REWRITE FILE,RECALL 
*         ENTRY  RECALL= *, SET CIO FUNCTION CODE IN FET, DONT CALL CIO.
*                ALSO, USER MUST INSURE THAT PREVIOUS FUNCTION
*                HAS COMPLETED. 
*         MASS STORAGE FILES ONLY.
*         CALLS  CIO=.
  
  
          PURGMAC REWRITE 
  
 REWRITE  MACRO  F,L
  IFC EQ,$L$*$
  R= X7,2 
  SA2 F 
  MX6 42D 
  BX7 X6+X7 
  SX6 215B
  BX7 X7*X2 
  BX6 X7+X6 
  SA6 A2
  ELSE 1
  =2 F,L,214B 
  ENDM
 REWRITEF SPACE  4
***       REWRITEF - REWRITE END OF FILE. 
* 
* 
*         REWRITEF FILE,RECALL
*         MASS STORAGE FILES ONLY.
*         CALLS  CIO=.
  
  
          PURGMAC REWRITEF
  
 REWRITEF MACRO  F,L
  =2 F,L,234B 
  ENDM
 REWRITER SPACE  4
***       REWRITER - REWRITE END OF RECORD. 
* 
* 
*         REWRITER FILE,RECALL
*         MASS STORAGE FILES ONLY.
*         CALLS  CIO=.
  
  
          PURGMAC REWRITER
  
 REWRITER MACRO  F,L
  =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
  SYSTEM DSP,R,A
  ENDM
 RPHR     SPACE  4
***       RPHR - READ PHYSICAL RECORD TO CIO BUFFER.
* 
* 
*         RPHR   FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC RPHR
  
 RPHR     MACRO  F,L
  IFC EQ,$L$$ 
  R= X7,0 
  ELSE 1
  MX7 60D 
  R= X2,F 
  RJ =XCIO= 
  ENDM
 RPHRLS   SPACE  4
***       RPHRLS - READ PRUS WITH LIST. 
* 
* 
*         RPHRLS FILE,RECALL
*         MASS STORAGE FILES ONLY.
*         CALLS  CIO=.
  
  
          PURGMAC RPHRLS
  
 RPHRLS   MACRO  F,L
  =2 F,L,230B 
  ENDM
 SETID    SPACE  4
***       SETID - SET FILE ID CODE. 
* 
* 
*         SETID  FILE,N 
*         ENTRY  *N* = FILE ID CODE.
*         CALLS  LFM=.
  
  
          PURGMAC SETID 
  
 SETID    MACRO  F,N
  R= X1,N 
  R= X2,F 
  LX1 18D 
  BX2 X1+X2 
  SX7 17B 
  RJ =XLFM= 
  ENDM
 SKIPB    SPACE  4
***       SKIPB - SKIP RECORDS BACKWARDS. 
* 
* 
*         SKIPB  FILE,N,RECALL
*         ENTRY  *N* = RECORD COUNT.
*         CALLS  CIO=.
  
  
          PURGMAC SKIPB 
  
 SKIPB    MACRO  F,N,L
  R= X2,F 
  IFNE N,,3 
  R= X1,N 
  LX1 18D 
  BX2 X1+X2 
  IFC EQ,$L$$ 
  SX7 640B
  ELSE 1
  SX7 -640B 
  RJ =XCIO= 
  ENDM
 SKIPEI   SPACE  4
***       SKIPEI - SKIP TO END OF INFORMATION.
* 
* 
*         SKIPEI FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC SKIPEI
  
 SKIPEI   MACRO  F,L
  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
***       SKIPFB - SKIP FILES BACKWARD. 
* 
* 
*         SKIPFB FILE,N,RECALL
*         ENTRY  *N* = RECORD COUNT.
*         CALLS  CIO=.
  
  
          PURGMAC SKIPFB
  
 SKIPFB   MACRO  F,N,L
  R= X2,F 
  IFNE N,,3 
  R= X1,N 
  LX1 18D 
  BX2 X1+X2 
  IFC EQ,$L$$ 
  SX7 740640BS-3
  ELSE 1
  SX7 -740640BS-3 
  LX7 3 
  RJ =XCIO= 
  ENDM
 SKIPF    SPACE  4
***       SKIPF - SKIP RECORDS FORWARD. 
* 
* 
*         SKIPF  FILE,N,RECALL
*         *N* = RECORD COUNT. 
*         CALLS  CIO=.
  
  
          PURGMAC SKIPF 
  
 SKIPF    MACRO  F,N,L
  R= X2,F 
  IFNE N,,3 
  R= X1,N 
  LX1 18D 
  BX2 X1+X2 
  IFC EQ,$L$$ 
  SX7 240B
  ELSE 1
  SX7 -240B 
  RJ =XCIO= 
  ENDM
 SKIPFF   SPACE  4
***       SKIPFF - SKIP FILES FORWARD.
* 
* 
*         SKIPFF FILE,N,RECALL
*         *N* = COUNT COUNT.
*         CALLS  CIO=.
  
  
          PURGMAC SKIPFF
  
 SKIPFF   MACRO  F,N,L
  R= X2,F 
  IFNE N,,3 
  R= X1,N 
  LX1 18D 
  BX2 X1+X2 
  IFC EQ,$L$$ 
  SX7 740240BS-3
  ELSE 1
  SX7 -740240BS-3 
  LX7 3 
  RJ =XCIO= 
  ENDM
 STATUS   SPACE  4
***       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
  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
***       UNLOAD - UNLOAD FILE. 
* 
* 
*         UNLOAD FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC UNLOAD
  
 UNLOAD   MACRO  F,L
  =2 F,L,60B
  ENDM
 UNLOCK   SPACE  4
***       UNLOCK - CLEAR WRITE LOCK OUT.
* 
* 
*         UNLOCK FILE 
*         FILE MUST BE LOCAL. 
*         CALLS  LFM=.
  
  
          PURGMAC UNLOCK
  
 UNLOCK   MACRO  F
  R= X2,F 
  SX7 11B 
  RJ =XLFM= 
  ENDM
 WPHR     SPACE  4
***       WPHR - WRITE 1 PHYSICAL RECORD FROM CIO BUFFER. 
* 
* 
*         WPHR   FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC WPHR
  
 WPHR     MACRO  F,L
  =2 F,L,4
  ENDM
 WRITE    SPACE  4
***       WRITE - WRITE DATA FROM CIO BUFFER. 
* 
* 
*         WRITE  FILE,RECALL
*         ENTRY  RECALL= *, SET CIO FUNCTION CODE IN FET, DONT CALL CIO.
*                ALSO, USER MUST INSURE THAT PREVIOUS FUNCTION
*                HAS COMPLETED. 
*         CALLS  CIO=.
  
  
          PURGMAC WRITE 
  
 WRITE    MACRO  F,L
  IFC EQ,$L$*$
  R= X7,2 
  SA2 F 
  MX6 42D 
  BX7 X6+X7 
  SX6 15B 
  BX7 X7*X2 
  BX6 X7+X6 
  SA6 A2
  ELSE 1
  =2 F,L,14B
  ENDM
 WRITECW  SPACE  4
***       WRITECW - WRITE NON-STOP WITH CONTROL WORDS.
* 
* 
*         WRITECW FILE,RECALL 
*         ENTRY  RECALL= *, SET CIO FUNCTION CODE IN FET, DONT CALL CIO.
*                ALSO, USER MUST INSURE THAT PREVIOUS FUNCTION
*                HAS COMPLETED. 
*         CALLS  CIO=.
  
  
          PURGMAC WRITECW 
  
 WRITECW  MACRO  F,L
  IFC EQ,$L$*$
  R= X7,2 
  SA2 F 
  MX6 42D 
  BX7 X6+X7 
  SX6 205B
  BX7 X7*X2 
  BX6 X7+X6 
  SA6 A2
  ELSE 1
  =2 F,L,204B 
  ENDM
 WRITEF   SPACE  4
***       WRITEF - WRITE END OF FILE. 
* 
* 
*         WRITEF FILE,RECALL
*         CALLS  CIO=.
  
  
          PURGMAC WRITEF
  
 WRITEF   MACRO  F,L
  =2 F,L,34B
  ENDM
 WRITEN   SPACE  4
***       WRITEN - WRITE *S* OR *L* FORMAT TAPE NON-STOP. 
*         MAGNETIC TAPE ONLY. 
* 
* 
*         WRITEN FILE,RECALL
*         ENTRY  RECALL= *, SET CIO FUNCTION CODE IN FET, DONT CALL CIO.
*                ALSO, USER MUST INSURE THAT PREVIOUS FUNCTION
*                HAS COMPLETED. 
*         CALLS  CIO=.
  
  
          PURGMAC WRITEN
  
 WRITEN   MACRO  F,L
  IFC EQ,$L$*$
  R= X7,2 
  SA2 F 
  MX6 42D 
  BX7 X6+X7 
  SX6 265B
  BX7 X7*X2 
  BX6 X7+X6 
  SA6 A2
  ELSE 1
  =2 F,L,264B 
  ENDM
 WRITER   SPACE  4
***       WRITER - WRITE END OF RECORD. 
* 
* 
*         WRITER FILE,,RECALL 
*         CALLS  CIO=.
  
  
          PURGMAC WRITER
  
 WRITER   MACRO  F,L
  =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 15B WORDS IF ANY SPECIAL OTPIONS ARE REQUIRED
* 
*         IF *PF* IS NOT SPECIFIED. (F+8) CONTAINS PERMANENT
*         FILE NAME.(X1)
*         IF *UN* IS NOT SPECIFIED, (F+9) CONTAINS NAME OF
*         ALTERNATE CATALOG.(X3)
*         IF *PW* IS NOT SPECIFIED, (F+10) CONTAINS THE 
*         FILE PASSWORD.(X2)
*         IF *UC* IS NOT SPECIFIED, (F+11) CONTAINS USER
*         CONTROL INFORMATION.  BIT 59 MUST BE SET IF THIS WORD 
*         CONTAINS DATA FOR *PFM* TO PROCESS. 
*         IF *PN* IS NOT SPECIFIED, (F+12) CONTAINS ALTERNATE PACKNAME
*         TO SATISFY PF REQUESTS FROM.
*         IF *NF* IS NOT SPECIFIED, (F+13 ) CONTAINS NEW
*         FILE NAME FOR CHANGE COMMAND. 
* 
*         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=* TYPE JOBS. 
* 
*         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. 
* 
*         USES   X - 1,2,3,4,6,7. 
*                B - 2. 
*                A - 1,2,3,4,6,7. 
          SPACE  4
          SPACE  4
          PURGMAC =3
  
 =3  MACRO  F,PF,U,PW,UC,PN,T,FM,DT,FO,O,SR.
  
*                            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,$FM$$,1
  SB2 X4
J ENDIF 
*                            FILE MODE. 
Q IFC NE,$FM$$
I SET 77B 
  ECHO 3,B=(W,R,A,E,N,M,RM,RA),C=(0,1,2,3,4,5,6,7)
  IFC EQ,$B$FM$,2 
  STOPDUP 
I  SET C+40B
* 
Q1 IFEQ I,77B 
  R= A4,FM
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),C=(1) 
  IFC EQ,$B$SR$,2 
  STOPDUP 
I SET C 
  IFEQ I,0,1
  ERR - ILLEGAL SPECIAL REQUEST OPTION
R1 IFEQ FC,77B
  SX4 X4+I*10000B 
R1 ELSE 1 
  SX4 I*10000B
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,$U$$,4 
  IFC NE,$U$X3$,1 
  R= A3,U 
  BX6 X3
  SA6 F+11B 
*                            PASSWORD.
  IFC NE,$PW$$,8
  IFC NE,$PW$X2$,1
  R= A2,PW
  MX4 42D 
  SA1 F+12B 
  BX6 -X4*X1
  BX7 X4*X2 
  BX6 X6+X7 
  SA6 A1
*                            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=(DA,DB,DC,DE,DF,DH) 
  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,DI,DJ,MD)
  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 
  BX6    X4+X1
  SA6    A4 
K 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
 APPEND   SPACE  4
***       APPEND (F,PF,UN,PW,PN,D,FO) 
* 
*                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.
  
  
          PURGMAC APPEND
  
 APPEND   MACRO     F,PF,UN,PW,PN,D,FO
  =3   F,PF,UN,PW,,PN,,,D,FO,7
  ENDM
 ATTACH   SPACE  4
***       ATTACH (F,PF,UN,PW,M,PN,D,FO,SR)
* 
*                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. 
  
  
          PURGMAC ATTACH
  
 ATTACH   MACRO  F,PF,UN,PW,M,PN,D,FO,SR
  =3   F,PF,UN,PW,,PN,,M,D,FO,11B,SR
   ENDM 
 CHG      SPACE  4
***       CHANGE (F,PF,NF,PW,UC,CT,M,PN,F,FO) 
* 
*                F = ADDRESS OF FET.
*                NF = NEW PERMANENT FILE NAME.
*                PF = OLD PERMANENT FILE NAME.
*                CT = FILE CATEGORY.
*                M = MODE OF ACCESS ALLOWED TO FILE.
*                PN = PACKNAME. 
*                UC = USER CONTROL INFORMATION. 
*                PW = FILE PASSWORD.
*                D = DEVICE TYPE. 
*                FO = FORCE FAMILY OPTION.
*                NOTE - IF M OR CT IS NOT SPECIFIED AS MNEMONIC,
*                THEN CONTENTS OF M OR CT MUST BE 40B + MODE
*                OR CATEGORY. 
  
  
          PURGMAC CHANGE
  
 CHANGE   MACRO  F,PF,NF,PW,UC,CT,M,PN,D,FO 
  IFC  NE,$NF$$,3 
  R= A4,NF
  BX6 X4
  SA6 F+15B 
  =3   F,PF,,PW,UC,PN,CT,M,D,FO,12B 
   ENDM 
 DEFINE   SPACE  4
***       DEFINE (F,PF,PW,UC,D,CT,M,PN,S,FO)
* 
*                F = ADDRESS OF FET (WORKING FILE NAME).
*                PF = PERMANENT FILE NAME.
*                PW = FILE PASSWORD.
*                UC = USER CONTROL WORD.
*                CT = FILE CATEGORY.
*                M = MODE OF ACCESS ALLOWED TO FILE.
*                D = DEVICE TYPE. 
*                PN = PACKNAME. 
*                S = SPACE IN PRUS DESIRED FOR FILE ( THIS IS ADDRESS 
*                OF RIGHT JUSTIFIED OCTAL QUANTITY).
*                FO = FORCE FAMILY OPTION.
* 
*         USES   X - 1,2,3,4,5,6,7. 
*                B - 2. 
*                A - 1,2,3,4,5,6,7. 
  
  
          PURGMAC DEFINE
  
 DEFINE   MACRO  F,PF,PW,UC,D,CT,M,PN,S,FO
  IFC  NE,$S$$,3
  R= A5,S 
  BX6 X5
  SA6 F+11B 
  =3   F,PF,,PW,UC,PN,CT,M,D,FO,10B 
    ENDM
 GET      SPACE  4
***       GET    (F,PF,UN,PW,PN,D,FO) 
* 
*                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.
  
  
          PURGMAC GET 
  
 GET      MACRO  F,PF,UN,PW,PN,D,FO 
  =3   F,PF,UN,PW,,PN,,,D,FO,2
    ENDM
 PERMIT   SPACE  4
***       PERMIT (F,PF,UN,M,PN,D,FO)
* 
*                F = ADDRESS OF FET.
*                PF = PERMANENT FILE NAME.
*                UN = USER NUMBER TO PERMIT.
*                M = MODE OF ACCESS PERMITTED.
*                D = DEVICE TYPE. 
*                PN = PACK NAME.
*                FO = FORCE FAMILY OPTION.
  
  
          PURGMAC PERMIT
  
 PERMIT   MACRO  F,PF,UN,M,PN,D,FO
  =3   F,PF,UN,,,PN,,M,D,FO,5 
  ENDM
 PUR      SPACE  4
***       PURGE  (F,UN,PW,PN,D,FO)
* 
*                F = ADDRESS OF FET (PERMANENT FILE NAME).
*                UN = OPTIONAL USER NUMBER. 
*                PW = FILE PASSWORD.
*                PN = PACKNAME. 
*                D = DEVICE TYPE. 
*                FO = FORCE FAMILY OPTION.
  
  
          PURGMAC PURGE 
  
 PURGE    MACRO  F,UN,PW,PN,D,FO
  =3   F,,UN,PW,,PN,,,D,FO,3
    ENDM
 REPLACE  SPACE  4
***       REPLACE(F,PF,UN,PW,UC,PN,D,FO)
* 
*                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.
  
  
          PURGMAC REPLACE 
  
 REPLACE  MACRO  F,PF,UN,PW,UC,PN,D,FO
  =3   F,PF,UN,PW,UC,PN,,,D,FO,6
    ENDM
 SAVE     SPACE  4
***       SAVE   (F,PF,PW,UC,CT,M,PN,D,FO)
* 
*                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.
  
  
          PURGMAC SAVE
  
 SAVE     MACRO  F,PF,PW,UC,T,M,PN,D,FO 
  =3   F,PF,,PW,UC,PN,T,M,D,FO,1
    ENDM
          TITLE  DATA TRANSFER MACROS.
 DATA     SPACE  4
***              DATA TRANSFER MACROS FORMAT REQUESTS INTO X REGISTERS
*         AND RETURN JUMP TO PROCESSING SUBROUTINES.
          SPACE  4
***       MACROS WHICH READ DATA FROM A FILE RETURN STATUS INFORMATION
*         AS FOLLOWS -
*         (X1) = 0 FOR TRANSFER COMPLETE. 
*         (X1) = -1 FOR EOF DETECTED ON FILE. 
*         (X1) = +NON-ZERO IF EOR DETECTED ON FILE BEFORE TRANSFER
*                WAS COMPLETED.  (X1) = ADDRESS OF LAST WORD
*                TRANSFERRED INTO WORKING BUFFER. 
*         DATA WILL NOT BE TRANSFERRED AFTER AN EOR/EOF IS SENSED.
 READC    SPACE  4
***       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 (X7) = (B6) =
*         LAST WORD OF DATA TRANSFERRED.
* 
*         ENTRY  *BUF* = ADDRESS OF WORKING BUFFER. 
*                *N* = WORD COUNT OF WORKING BUFFER.
          SPACE  4
***       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
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XRDC= 
  ENDM
 WRITEC   SPACE  4
***       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
  R= B6,S 
  R= X2,F 
  RJ =XWTC= 
  ENDM
 READH    SPACE  4
***       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
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XRDH= 
  ENDM
 WRITEH   SPACE  4
***       WRITEH - WRITE CODED LINE IN *H* FORMAT.
* 
* 
*         WRITEH FILE,BUF,N 
*         TRAILING SPACES ARE DELETED.
*         CALLS  WTH=.
  
  
          PURGMAC WRITEH
  
 WRITEH   MACRO  F,S,N
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XWTH= 
  ENDM
 READO    SPACE  4
***       READO - READ ONE WORD.
* 
* 
*         READO  FILE 
*         ENTRY  NONE.
*         EXIT   (X6) = WORD READ.
*         CALLS  RDO=.
  
  
          PURGMAC READO 
  
 READO    MACRO  F
  SA1 F+2 
  RJ =XRDO= 
  ENDM
 WRITEO   SPACE  4
***       WRITEO - WRITE ONE WORD.
* 
* 
*         WRITEO FILE 
*         ENTRY  (X6) = WORD TO WRITE.
*         CALLS  WTO=.
  
  
          PURGMAC WRITEO     (1051) 
  
 WRITEO   MACRO  F
  SA1 F+2 
  RJ =XWTO= 
  ENDM
 READS    SPACE  4
***       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
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XRDS= 
  ENDM
 WRITES   SPACE  4
***       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
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XWTS= 
  ENDM
 READW    SPACE  4
***       READW - READ DATA TO WORKING BUFFER.
* 
* 
*         READW  FILE,BUF,N 
*         CALLS  RDW=.
  
  
          PURGMAC READW 
  
 READW    MACRO  F,S,N
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XRDW= 
  ENDM
 WRITEW   SPACE  4
***       WRITEW - WRITE DATA FROM WORKING BUFFER.
* 
* 
*         WRITEW FILE,BUF,N 
*         CALLS  WTW=.
  
  
          PURGMAC WRITEW
  
 WRITEW   MACRO  F,S,N
  R= B6,S 
  R= B7,N 
  R= X2,F 
  RJ =XWTW= 
  ENDM
  
  
