*COMDECK  COMAFET - FILE ENVIRONMENT TABLE GENERATION MACROS. 
          CTEXT  COMAFET - FILE ENVIRONMENT TABLE GENERATION MACROS.
 COMAFET  SPACE  4
***       COMAFET - FILE ENVIRONMENT TABLE GENERATION MACROS. 
* 
*         P. N. BUTLER.      73/01/02.
* 
*         CONTROL DATA  PROPRIETARY PRODUCT.
*         COPYRIGHT CONTROL DATA SYSTEMS, INC. 1994.
 COMAFET  SPACE  4
***              COMAFET CONTAINS MACROS FOR DEFINING FILE
*         ENVIRONMENT TABLES AND LABEL INFORMATION. 
*         THE FOLLOWING MACROS ARE USED FOR FET GENERATION -
* 
*         FILEB   BINARY SEQUENTIAL.
*         FILEC   CODED  SEQUENTIAL.
*         RFILEB  BINARY RANDOM.
*         RFILEC  CODED  RANDOM.
* 
* 
* FILE    XFILEY FWA,LEN,OPTIONS
* 
*         ENTRY  *FILE*    = FILE NAME.  DEFINED AS LOCATION SYMBOL.
*                *XFILEY*  = MACRO NAME AS APPROPRIATE. 
*                *FWA*     = FIRST WORD ADDRESS OF BUFFER.  THE BUFFER
*                              MUST BE ALLOCATED SEPARATELY.
*                *LEN*     = LENGTH OF BUFFER.
*                *OPTIONS* = OPTIONAL KEYWORD PARAMETERS IN ANY ORDER 
*                              AS DESCRIBED BELOW.
* 
*  -OPTIONAL PARAMETERS-
*         THE FORMS THAT THESE PARAMETERS MAY TAKE ARE
*          1.  KEY
*          2.  (KEY=VAL)
*          3.  (KEY=VAL1,VAL2)
* 
*   KEY          COMMENT
*   ---          -------
*  (DSC=...)     GIVES WARNING IF USED. 
*  (DTY=...)     GIVES WARNING IF USED. 
*   EPR          SETS ERROR PROCESS BIT.  ALLOWS USER ACTION, NOT 
*                  DEFAULT SYSTEM ACTION ON ERROR CONDITIONS. 
*  (FET=N)       SET FET LENGTH TO N. 
*  (IND=ORG,LEN) SETS UP ORGIN AND LENGTH OF INDEX BUFFER.
*   LBL          SETS FET LENGTH FIELD TO INCLUDE LABEL INFO.  LABEL
*                  MACRO SHOULD FOLLOW TO GENERATE LABEL INFO.
*  (MLR=Y)       MAX LOGICAL RECORD FIELD SET TO Y. 
*                  (USED IN S-TAPE I/O) 
*   NRR          DO NOT ATTEMPT TO RECOVER TAPE PARITY ERRORS.
*  (OWN=EOI,ERR) SETS UP END OF INFO AND ERROR PROCESS ADDRESS. 
*  (UBC=X)       UNUSED BIT COUNT FIELD (6 BITS) IS SET TO X. 
*                  (USED IN S-TAPE I/O) 
*   UPR          SETS EP BIT.  ALLOWS USER ACTION AT END OF REEL. 
*  (WSA=ORG,LEN) SETS UP ORIGIN AND LENGTH OF WORKING STORAGE AREA. 
*  (XLR=ORG,LEN) SETS UP ORIGIN AND LENGTH OF EXTENDED LABEL BUFFER.
*  (XPR=LOC)     DEFINES LOCATION OF FET EXTENTION TO RECIEVE RESIDUAL
*                  SKIP COUNT.
* 
*         EXAMPLES--
* 
*  LGO    FILEB  LGOBUF,LGOLEN,(WSA=IMAGE,20B),(OWN=EOI,WOOPS)
*  SCRATCH RFILEC  SCRB,SCRLEN,(IND=INDEX,200B) 
*  TAPE   FILEC  TBUF,TBUFL,LBL,(MLR=15*8),XPR=TAG
  
  
          PURGMAC  FILEC,FILEB,RFILEC,RFILEB
  
          MACRO   FILEB,LFN,FWA,LEN,A,B,C,D,E,F,G,H,I,J,K,L,M,N 
  '?SCP#20 LFN,FWA,LEN,3,0,((A),(B),(C),(D),(E),(F),(G),(H),(I),(J),(K),
,(L),(M),(N)) 
          ENDM
  
          MACRO   FILEC,LFN,FWA,LEN,A,B,C,D,E,F,G,H,I,J,K,L,M,N 
  '?SCP#20 LFN,FWA,LEN,1,0,((A),(B),(C),(D),(E),(F),(G),(H),(I),(J),(K),
,(L),(M),(N)) 
          ENDM
  
          MACRO  RFILEB,LFN,FWA,LEN,A,B,C,D,E,F,G,H,I,J,K,L,M,N 
  '?SCP#20 LFN,FWA,LEN,3,1,((A),(B),(C),(D),(E),(F),(G),(H),(I),(J),(K),
,(L),(M),(N)) 
          ENDM
  
          MACRO  RFILEC,LFN,FWA,LEN,A,B,C,D,E,F,G,H,I,J,K,L,M,N 
  '?SCP#20 LFN,FWA,LEN,1,1,((A),(B),(C),(D),(E),(F),(G),(H),(I),(J),(K),
,(L),(M),(N)) 
          ENDM
 '?SCP#20 SPACE  4,8
**        '?SCP#20 - GENERATE FET.
* 
*         THIS MACRO PERFORMS MOST OF THE WORK FOR THE BASIC FET
*         GENERATION MACROS. THE '?SCP#20 MACRO IS CALLED WITH
*         PARAMETERS INDICATING THE CODED AND RANDOM BITS.  OTHER 
*         THAN THOSE TWO DIFFERENCES THE FETS GENERATED BY THE
*         FOUR BASIC MACROS ARE IDENTICAL.
* 
*         THE FIRST WORD OF THE FET IS GENERATED USING ONLY THE FILE
*         NAME AND THE CODED BIT. 
*         FOLLOWING THAT, A SMALL COLLECTION OF SET SYMBOLS AND MICROS
*         IS SET UP TO DEFAULT VALUES OF ZERO AND NULL RESPECTIVLY. 
* 
*         THE SUBFIELDS ARE EXAMINED CAUSING THE APPROIATE SYMBOLS AND
*         MICROS TO BE CHANGED. 
*         USING THE SYMBOLS AND MICROS THE BALANCE OF THE FET IS
*         NOW GENERATED.
  
  
          PURGMAC  '?SCP#20 
  
 '?SCP#20 MACRO  LFN,FWA,LEN,MODE,RAND,VAR
 LFN      VFD    42D/0L_LFN,18D/MODE
* 
*         SET UP DEFAULT SET SYMBOLS AND MICROS 
* 
 '?S=LFET SET    3*RAND 
 '?S=FLAG SET    4000B*RAND 
  ECHO 1,XXXX=(WSAF,WSAL,UBCT,MLRS,INXL,INXF,EOIX,ERRX,XPXF,XLBF,XLBL)
 '?M=XXXX MICRO  ,
* 
*         PLUG IN VALUES AS SPECIFIED 
* 
          IRP    VAR
          IFC    NE,  VAR ,1
          '?SCP#30  VAR 
          IRP 
* 
*         GENERATE BALANCE OF FET 
* 
          VFD    24D/'?S=FLAG,18D/'?S=LFET,18D/FWA
          CON    FWA,FWA,FWA+LEN
          IFGE   '?S=LFET,1,10D 
          VFD    30D/"'?M=WSAF",30D/"'?M=WSAF"+"'?M=WSAL" 
          IFGE   '?S=LFET,2,8D
          VFD    30D/"'?M=XPXF",6/"'?M=UBCT",24D/"'?M=MLRS" 
          IFGE   '?S=LFET,3,6 
          VFD    42D/"'?M=INXL",18D/"'?M=INXF"
          IFGE   '?S=LFET,4,4 
          VFD    30D/"'?M=EOIX",30D/"'?M=ERRX"
          IFGE   '?S=LFET,5,2 
          VFD    42D/"'?M=XLBL",18D/"'?M=XLBF"
          BSSZ   '?S=LFET-5 
          ENDM
 '?SCP#30 SPACE  4,8
**        '?SCP#30 - PROCESS ONE OPTION.
* 
*         THIS MACRO HAS THE RESPONSIBILITY OF HELPING '?SCP#20 EXAMINE 
*         THE VARIOUS SUBFIELDS.  IT IS CALLED ONE SUBFIELD AT A TIME 
*         AND CALLS AN ADDITIONAL MACRO OF THE NAME '?SC#KEY WHERE
*         KEY = EPR,WSA ETC.
  
  
          PURGMAC  '?SCP#30 
  
 '?SCP#30 MACRO  P1,P2
 '?M=MIC1 MICRO  1,3, P1
 '?M=MIC2 MICRO  5,, P1 
          '?SC#"'?M=MIC1"  "'?M=MIC2",P2
          ENDM
 '?SC#KEY SPACE  4,8
**        '?SC#KEY - PROCESS *KEY* OPTION.
*         WHERE KEY = DSC, DTY, EPR, FET, IND, LBL, MLR, NRR, 
*                     OWN, UBC, UPR, WSA, XLR OR XPR. 
* 
*         THESE MACROS SET THE SYMBOLS AND MICROS USED BY '?SCP#20 WHEN 
*         IT GENERATES THE BALANCE OF THE FET.
  
  
          PURGMAC  '?SC#DSC 
  
 '?SC#DSC MACRO 
 4        ERR    USE DISPOSE FUNCTION TO SET UP DISPOSITION CODE
          ENDM
  
          PURGMAC  '?SC#DTY 
  
 '?SC#DTY MACRO 
 4        ERR    USE REQUEST FUNCTION TO SET UP DEVICE TYPE 
          ENDM
  
          PURGMAC  '?SC#EPR 
  
 '?SC#EPR MACRO 
 '?S=FLAG SET    '?S=FLAG+400B
          ENDM
  
          PURGMAC  '?SC#FET 
  
 '?SC#FET MACRO  P1 
 '?S=LFET MAX    P1-5,'?S=LFET
          ENDM
  
          PURGMAC  '?SC#IND 
  
 '?SC#IND MACRO  P1,P2
 '?M=INXF MICRO  1,, P1 
 '?M=INXL MICRO  1,, P2 
 '?S=LFET MAX    3,'?S=LFET 
          ENDM
  
          PURGMAC  '?SC#LBL 
  
 '?SC#LBL MACRO 
 '?S=LFET MAX    8D,'?S=LFET
          ENDM
  
          PURGMAC  '?SC#MLR 
  
 '?SC#MLR MACRO  P1 
 '?M=MLRS MICRO  1,, P1 
 '?S=LFET MAX    2,'?S=LFET 
          ENDM
  
          PURGMAC  '?SC#NRR 
  
 '?SC#NRR MACRO 
 '?S=FLAG SET    '?S=FLAG+200B
          ENDM
  
          PURGMAC  '?SC#OWN 
  
 '?SC#OWN MACRO  P1,P2
 '?M=EOIX MICRO  1,, P1 
 '?M=ERRX MICRO  1,, P2 
 '?S=LFET MAX    4,'?S=LFET 
          ENDM
  
          PURGMAC  '?SC#UBC 
  
 '?SC#UBC MACRO  P1 
 '?M=UBCT MICRO  1,, P1 
 '?S=LFET MAX    2,'?S=LFET 
          ENDM
  
          PURGMAC  '?SC#UPR 
  
 '?SC#UPR MACRO 
 '?S=FLAG SET    '?S=FLAG+1000B 
          ENDM
  
          PURGMAC  '?SC#WSA 
  
 '?SC#WSA MACRO  P1,P2
 '?M=WSAF MICRO  1,, P1 
 '?M=WSAL MICRO  1,, P2 
 '?S=LFET MAX    1,'?S=LFET 
          ENDM
  
          PURGMAC  '?SC#XLR 
  
 '?SC#XLR MACRO  P1,P2
 '?M=XLBF MICRO  1,, P1 
 '?M=XLBL MICRO  1,, P2 
 '?S=FLAG SET    '?S=FLAG+40B 
 '?S=LFET MAX    5,'?S=LFET 
          ENDM
  
          PURGMAC  '?SC#XPR 
  
 '?SC#XPR MACRO  P1 
 '?M=XPXF MICRO  1,, P1 
 '?S=FLAG SET    '?S=FLAG+20B 
 '?S=LFET MAX    2,'?S=LFET 
          ENDM
 LABEL    SPACE  4,8
***       LABEL - GENERATE LABEL INFORMATION AT END OF FET. 
* 
* 
*  LFN    LABEL  LAB,ED,RET,CREATE,REEL,MFN,POS 
* 
*                                             FIELD   ALPHABETIC OR 
*                                              SIZE   NUMERIC TYPE
*         ENTRY  *LFN*     = FILE NAME.           7   A/N 
*                *ED*      = EDITION NUMBER.      2     N 
*                *LAB*     = LABEL.              17   A/N 
*                *RET*     = RETENTION CYCLE.     3     N   DAYS 999=INF
*                *CREATE*  = CREATION DATE.       5     N   (YYDDD) 
*                *REEL*    = REEL NUMBER.         4     N 
*                *MFN*     = MULTI FILE NAME.     6   A/N 
*                *POS*     = POSITION NUMBER.     3     N 
* 
*         LFN IS ONLY USED TO VERIFY THE CORRECT PLACEMENT OF THE 
*           LABEL MACRO.
*         LAB AND MFN ARE LEFT JUSTIFIED WITH BINARY ZERO FILL. 
*         OTHER FIELDS ARE RIGHT JUSTIFIFD WITH BINARY ZERO FILL. 
* 
*         WHEN THE LABEL INFO IS USED ON AN INPUT TAPE LABEL CHECKING 
*           OCCURS.  FIELDS OMITTED FROM THE MACRO ARE NOT CHECKED -
*           INSTEAD THEY WILL BE FILLED IN FROM THE TAPE. 
*         WHEN WRITING LABELS, OMITTED FIELDS ARE SET TO INSTALLATION 
*           DEFAULT VALUES. 
*         IN EITHER EVENT, THE BINARY ZEROS GENERATED BY THIS MACRO ARE 
*         CHANGED TO DISPLAY CODE ZEROS OR BLANKS.  MFN IS NOT CHANGED. 
  
  
          PURGMAC  LABEL
  
          MACRO  LABEL,LFN,LAB,ED,RET,CREATE,REEL,MFN,POS 
          IFNE   *,LFN+13D,1
          ERR    MISPLACED LABEL MACRO
          ORG    *-4
 '?M=MIC1 MICRO  1,17D,$LAB$
 '?S=MIC1 MICCNT '?M=MIC1 
          IFEQ   '?S=MIC1,0,2 
          CON    0
          SKIP   3
 '?M=MIC1 MICRO  1,10D,$LAB$
          DATA   L$"'?M=MIC1"$
          IFLE   '?S=MIC1,10D,2 
          VFD    42D/0,18D/0R_POS 
          SKIP   3
 '?M=MIC1 MICRO  11D,7,$LAB$
 '?S=MIC1 DECMIC '?S=MIC1-10D 
          VFD    42D/"'?S=MIC1"L"'?M=MIC1",18D/0R_POS 
          VFD    12D/0R_ED,18D/0R_RET,30D/0R_CREATE 
          VFD    36D/0L_MFN,24D/0R_REEL 
          USE    *
          ENDM
  
  
 COMAFET  ENDX
