*DECK CTEXT 
          IDENT  CTEXT
          TITLE  CTEXT -- COMPASS TEXT FOR SYMPL COMPILER 
          STEXT 
          LIST   F
          SPACE  4
*         CTEXT -- COMPASS TEXT FOR SYMPL COMPILER
* 
*         CONTAINS INSTALLATION OPTIONS AND MACROS
* 
* 
*         COPYRIGHT CONTROL DATA CORP. 1972,1973,1974,1975,1976,1977, 
*         1978,1979,1980,1981,1982. 
          SPACE  4
*         THE FOLLOWING MICRO ESTABLISHES THE SYMPL COMPILER VERSION
*         AND IS REFERENCED IN PTLST. 
  
 SYMVER   MICRO  1,,*1.4* 
  
*         EQUATES FOR CURRENT OPERATING SYSTEM
*         ( CURRENTLY NO EQUATES FOR SYSTEMS OTHER THAN SCOPE 2 ) 
 SCOPE2   EQU    2           SCOPE 2 ONLY 
  
************************************************************************* 
*                                                                      *
*       THE VALUE OF SYSNAME DETERMINES THE SYSTEM THE COMPILER WILL   *
*       RUN ON.  IT IS ONLY USED TO CONDITIONALLY COMPILE SYSTEM       * CYBER74
*         DEPENDENT CODE AND NOT INPUT/OUTPUT DEPENDENCIES.            *
*         VALUES ARE --                                                *
*                2 = SCOPE 2                                           *
*                4 = SCOPE 3.4, NOS/BE, KRONOS 2.1 AND NOS             *
*                                                                      * SMP0025
*         WE INTERPRET IPARAMS FOR THIS INFORMATION                    * IPARAM 
*                                                                      *
************************************************************************* 
  
          IPARAMS 
  
 SYSSET1  IFC    EQ,*"OS.NAME"*KRONOS*
 SYSSET6  IFC    NE,*"OS.VER"*2.1 * 
          ERR    ONLY        KRONOS 2.1 SUPPORTED 
 SYSSET6  ELSE
 SYSNAME  EQU    4           KRONOS 2.1, NOS
 SYSSET6  ENDIF 
 SYSSET1  ELSE
 SYSSET2  IFC    EQ,*"OS.NAME"*SCOPE *
 SYSSET3  IFC    EQ,*"OS.VER"*3.4 * 
 SYSNAME  EQU    4           SCOPE 3.4, NOS/BE
 SYSSET3  ELSE
 SYSSET7  IFC    EQ,*"OS.VER"*2.0 * 
 SYSNAME  EQU    SCOPE2      SCOPE 2.0
 SYSSET7  ELSE
 SYSSET4  IFC    EQ,*"OS.VER"*2.1 * 
 SYSNAME  EQU    SCOPE2      SCOPE 2.1
 SYSSET4  ELSE
          ERR    ONLY        SCOPE 3.4, 2.0 AND 2.1 SUPPORTED 
 SYSSET2  ELSE
          ERR    ONLY        SCOPE AND KRONOS SUPPORTED 
 SYSSET7  ENDIF 
 SYSSET4  ENDIF 
 SYSSET3  ENDIF 
 SYSSET2  ENDIF 
 SYSSET1  ENDIF 
          SPACE  4
************************************************************************
*                                                                      *
*         DEFINE ALL THE MICROS WHICH SPECIFY THE HARDWARE FEATURES    *
*         AVAILABLE ON THIS MAINFRAME.  THIS MACRO USES THE HF.LIST    *
*         MICRO TO DEFINE THE INDIVIDUAL FEATURE MICROS.               *
*                                                                      *
************************************************************************
  
          DEFINHF            DEFINE HARDWARE FEATURES 
          SPACE  4
************************************************************************ .NO.ID.
*                                                                      * .NO.ID.
*         SELECT INPUT/OUTPUT SYSTEM USED DURING COMPILATION.  VALUE   * .NO.ID.
*         CHOSEN MUST AGREE WITH OPERATING SYSTEM CAPABILITIES.        * .NO.ID.
*         VALUES ARE --                                                * .NO.ID.
*                0 = USE CIO.  (DEFAULT FOR LOWER CYBER)               * .NO.ID.
*                7 = USE CRM.  (DEFAULT FOR CYBER 76)                  * .NO.ID.
*                                                                      * .NO.ID.
************************************************************************ .NO.ID.
  
 #OS      IFEQ   SYSNAME,4
 CP#RM    EQU    0
 #OS      ELSE
 CP#RM    EQU    7
 #OS      ENDIF 
          SPACE  4
************************************************************************ .NO.ID.
*                                                                      * .NO.ID.
*         DEFINE TEST (DEBUG) COMPILER MODE OR SYSTEM (NON-DEBUG)      * .NO.ID.
*         COMPILER MODE                                                * .NO.ID.
*                                                                      * .NO.ID.
*         TEST SET 1 MEANS DEBUG CODE GENERATED                        * .NO.ID.
*         TEST SET 0 MEANS DEBUG CODE NOT GENERATED                    * .NO.ID.
*                                                                      * .NO.ID.
************************************************************************ .NO.ID.
  
*IF -DEF,DEBUG,1
 TEST     =      0           NO DEBUG CODE
*IF DEF,DEBUG,1 
 TEST     =      1           GENERATE DEBUG CODE
          SPACE  4
************************************************************************
*                                                                      *
*         DEFINE CID TO CONTROL USE OF CYBER INTERACTIVE DEBUG WITH    *
*         DEBUG COMPILER.  HAS NO EFFECT ON COMPILATION OF CID USABLE  *
*         CODE.  GENERATES CALL TO DBUG.ON AFTER OVERLAY LOAD AND      *
*         TURNS OFF GENERATION OF CODE TO INTERFACE TO IDP             *
*         CID " 0 TO USE CID WHEN TEST " 0                             *
*         CID = 0 TO GENERATE CODE TO USE IDP WHEN TEST " 0            *
*                                                                      *
************************************************************************
  
*IF  DEF,DEBUG
*IF  DEF,CID,1
 CID      =      1
*IF  -DEF,CID,1 
 CID      =      0
*ENDIF
*IF -DEF,DEBUG
 CID      =      0
*ENDIF
          SPACE  4
************************************************************************
*                                                                      *
*         LCM -  THIS SYMBOL CONTROLS CONDITIONAL CODE IN THE OBJECT   *
*                TIME ROUTINES, SYMSM$ AND SYMSC$, WHICH ACCESSES LCM. *
*                IF LCM = 0 THEN THE ROUTINES DON"T WORRY ABOUT LCM    *
*                                                                      *
*                THE HF.LIST MICRO AND ITS COMPANION MACRO (DEFINHF)   *
*                ARE RELIED UPON TO TELL US IF LCM IS PRESENT.         *
*                                                                      *
*                                                                      *
*         --GENERAL LCM NOTES--                                        *
*                                                                      *
*         THERE ARE THREE DISTINCT AREAS WHICH CONTROL LCM HANDLING    *
*         SYMTAB-THE SYMBOL TABLE WILL BE IN LCM ONLY IF THERE IS A    *
*                *DEFINE,LCM IN EFFECT ON THE PL WHEN THE COMPILER IS  *
*                BUILT.  THIS OPTION IS STANDARD ON SCOPE 2 INSTALL-   *
*                ATION DECKS, AND IS NOT AVAILABLE ON ANY OTHER        *
*                INSTALLATION DECKS.  THIS OPTION CAN ONLY BE USED ON  *
*                A MACHINE WHICH CAN HANDLE LCM, OTHERWISE THE RESULT- *
*                ING COMPILER WILL NOT WORK.                           *
*         SYMLIB-SYMLIB WILL ASSEMBLE CODE TO HANDLE LCM MOVES IF      *
*                THE MACHINE SYMPL IS BUILT ON HAS LCM.  THIS IS       *
*                CONTROLLED BY THE COMPASS EQUATE SYMBOL -LCM- DEFINED *
*                ABOVE IN CTEXT.                                       *
*         LEVEL2-LEVEL 2 DATA WILL BE IN LCM ONLY IF THE MACHINE THAT  *
*                SYMPL IS RUNNING ON HAS LCM.  THE VARIABLE -SYSTEMN-  *
*                CONTROLS THIS: STATICALLY IS REFLECTS THE SYSTEM THAT *
*                SYMPL WAS BUILT ON, DYNAMICALLY IT IS CHANGED IN      *
*                INIT15 TO REFLECT THE PRESENCE OF LCM.                *
*                NOTE -- BINARIES ARE NOT COMPATIBLE ACCROSS DIFFERENT *
*                OPERATING SYSTEMS.  THUS A COMPILER BUILT ON NOS/BE   *
*                WILL NOT WORK ON SCOPE2 WITHOUT FIRST REASSEMBLING    *
*                THE COMPASS PORTION OF THE COMPILER.                  *
*                                                                      *
************************************************************************
  
 #MOD     IF     MIC,HF.L 
 LCM      EQU    1           THIS MACHINE HAS LCM (OR SOFT ECS) 
 #MOD     ELSE
 LCM      EQU    0           OTHERWISE NO LCM 
 #MOD     ENDIF 
          SPACE  4
*         INTERNAL FILE NAMES                                            SYMTEXT
                                                                         SYMTEXT
 IN       MICRO  1,, INPUT
 OUT      MICRO  1,, OUTPUT 
 LGO      MICRO  1,, LGO
 CFL      MICRO  1,, ZZZZZCF
 CNS      MICRO  1,, ZZZZZCN
 CRF      MICRO  1,, ZZZZZCR
 ICF      MICRO  1,, ZZZZZIC
 PST      MICRO  1,, ZZZZZPS
 GNL      MICRO  1,, ZZZZZGN
 ILN      MICRO  1,, ZZZZZIL
 YFI      MICRO  1,, YFI
 YFIL     MICRO  1,, YFIL 
          SPACE  4
*         DEFINE CIO/HOLDING BUFFER LENGTHS                              SYMTEXT
                                                                         SYMTEXT
 #RM      IFEQ   CP#RM,0
                                                                         SYMTEXT
 BUFL     SET    1002B       NOMINAL CIO BUFFER LENGTH
                                                                         SYMTEXT
 LC.LGO   =      BUFL 
 LC.CFL   =      BUFL 
 LC.CRF   =      BUFL 
 LC.ICF   =      LC.CRF 
 LC.PST   =      302B 
 LC.CNS   =      BUFL 
 LC.OUT   =      BUFL 
 LC.ILN   =      BUFL 
 LC.IN    =      BUFL 
 LC.YFI   =      LC.ICF 
 LC.YFIL  =      BUFL 
                                                                         SYMTEXT
 #RM      ELSE
                                                                         SYMTEXT
  
 BUFL     SET    400B 
  
 LC.LGO   =      BUFL 
 LC.CFL   =      BUFL 
 LC.CRF   =      BUFL 
 LC.ICF   =      LC.CRF 
 LC.PST   =      BUFL 
 LC.CNS   =      BUFL 
 LC.OUT   =      0
 LC.ILN   =      BUFL 
 LC.IN    =      0
 LC.YFI   =      LC.ICF 
 LC.YFIL  =      BUFL 
                                                                         SYMTEXT
 #RM      ENDIF 
 ERLEVS   SPACE  5
  
*         DEFINE THE ERROR LEVEL VALUES FOR THE COMPASS ROUTINES
  
 EL.NULL  EQU    0           EL=0 
 EL.D     EQU    1           MACHINE DEPENDENT
 EL.T     EQU    2           TRIVIAL
 EL.W     EQU    3           WARNING
 EL.F     EQU    4           FATAL
 EL.C     EQU    5           CATASTROPHIC  (ABORT)
          SPACE  4
*         EQUATES FOR COMPILE TIME BY PHASE BREAKOUT
  
 BP.INT   EQU    0           INITS  (OFFSET INTO BYPHASE TIMING TABLE)
 BP.PS1   EQU    1           PASS 1 
 BP.CG1   EQU    2           CG1
 BP.CG2   EQU    3           CG2
 BP.MAP   EQU    4           MAP,CRF,EDITOR 
 BP.MAX   EQU    5           NUMBER OF CATEGORIES 
          SPACE  4
*         MISCELLANEOUS EQUATES 
  
 LINLIM   EQU    IP.PS-1     NUMBER OF LINES PER PAGE 
 N.PROCS  =      100         NUMBER OF PROCS ALLOWED IN A COMPILATION 
 ILSIZ    =      2*N.PROCS   SIZE OF ILNFAT 
  
*         EQUATES FOR FL CONTROL . . .                                   SYMTEXT
                                                                         SYMTEXT
 SYMBAS   EQU    1000B       MINIMUM SYMBOL TABLE SIZE. 
 SYMINCR  EQU    2000B       AMT TO BUMP FL IN PASS 1                    SYMTEXT
 SYM2INCR EQU    1000B       HOW MUCH TO BUMP FL AFTER PASS 1            SYMTEXT
 ZTXTFL   EQU    20000B      MEM REQUIRED TO LOAD SYMPL TEXT FROM LIB.
                                                                         21FEB77
#OS       IFEQ   SYSNAME,2                                               21FEB77
          IFEQ   SYMBAS/1000B*1000B,SYMBAS,2                             21FEB77
          IFEQ   SYMINCR/1000B*1000B,SYMINCR,1                           21FEB77
          IFNE   SYM2INCR/1000B*1000B,SYM2INCR,1                         21FEB77
          ERR    , 7000 FL INCREMENTS MUST BE EVEN MULTIPLES OF 1000B    21FEB77
#OS       ENDIF                                                          21FEB77
                                                                         21FEB77
                                                                         SYMTEXT
*         COMPUTE "SYMTABS" - THE GUESS AT ASSEMBLY TIME OF THE COMPILER 21FEB77
*         HHA.  THIS VALUE WILL BE USED IF THERE IS NO 54-TABLE I.E. WE  21FEB77
*         ARE ON AN OLD SYSTEM FROM BEFORE THE 54-TABLE DAYS.            21FEB77
*         SYMTABS MUST BE HIGHER THAN THE COMPILER REALLY IS.            21FEB77
                                                                         21FEB77
          IFEQ   SYSNAME,2,2   SCOPE 2                                   21FEB77
.A        SET    37400B      CHANGE THIS IF LENGTH CHANGES               21FEB77
          SKIP   1                                                       21FEB77
 .A       SET    51400B      3.4/NOS                                     21FEB77
                                                                         21FEB77
          IFNE   TEST,0,1                                                21FEB77
 .A       SET    .A+12000B   DEBUG                                       21FEB77
SYMTABS   EQU    .A                                                      21FEB77
                                                                         21FEB77
                                                                         SYMTEXT
  
 SCMPADD  EQU    100B              PADDING ABOVE HHA WHEN WE MEM DOWN 
 HASHSIZ1 =      201B        SIZE OF HASH TABLE PLUS 1
          SPACE  4
**        LOAD - LOAD AND EXECUTE OVERLAY                                .NO.ID.
*                                                                        .NO.ID.
*         THIS MACRO GENERATES CODE TO SETUP FOR AND CALL SYMLOAD TO     .NO.ID.
*         LOAD AND EXECUTE AN OVERLAY                                    .NO.ID.
*                                                                        .NO.ID.
*         CALL- 
*                LOAD   OVPS,MESS 
*                WHERE- 
*                P = PRIMARY LEVEL NUMBER OF OVERLAY
*                S = SECONDARY LEVEL NUMBER OF OVERLAY
*                MESS = OPTIONAL MESSAGE PRINTED IN TEST MODE 
*         PARAMETERS-                                                    .NO.ID.
*                PA = OVERLAY NAME IN FORMAT OV_P_S 
*                PB = MESSAGE TO BE PRINTED IF TEST COMPILER
*                                                                        .NO.ID.
*         ON ENTRY LWA00 CONTAINS LWA OF (0,0) OVERLAY AND LWAX0
*         CONTAINS LWA OF (P,0) OVERLAY 
* 
                                                                         .NO.ID.
          PURGMAC   LOAD
  
 LOAD     MACRO  PA,PB
          LOCAL  N,P,S
 P        MICRO  3,1,*PA* 
 S        MICRO  4,1,*PA* 
 .T       IFNE   TEST,0 
          IFC    NE,.PB..,2      SKIP MESSAGE IF NO ARG.
          SX4    PB 
          RJ     =XDIVMESG
 .T       ENDIF 
          SA1    N
          IFC    NE,."S".0. 
          SA2    LWAX0
          ELSE
          SA2    LWA00
          ENDIF 
          SX3    "P"*64+"S" 
          LX3    60-12
          EQ     =XSYMLOAD
 N        DATA   6LSYMP_"P"_"S" 
 #OS      IFNE   SYSNAME,4,1
          DATA   "P"_"S"_S54
 LOAD     ENDM
          SPACE  4
**        SAVELWA - SAVE LWA OF PRIMARY OVERLAY                          .NO.ID.
*                                                                        .NO.ID.
*         THIS MACRO IS USED BY EACH OF THE PRIMARY OVERLAYS TO STORE    .NO.ID.
*         THEIR LWA INTO LWAX0.  LWAX0 IS THEN USED IN LOADING THEIR     .NO.ID.
*         SECONDARY OVERLAYS.                                            .NO.ID.
*                                                                        .NO.ID.
*         PARAMETERS-                                                    .NO.ID.
*                NONE                                                    .NO.ID.
*                                                                        .NO.ID.
                                                                         .NO.ID.
          PURGMAC   SAVELWA 
  
 SAVELWA  MACRO 
          LOCAL  BYPASS 
          SA3    100B 
          SX2    777754B
          SA1    65B
          AX3    54 
          IX2    X2-X3
          NZ     X2,BYPASS
          SA1    101B 
          SA1    X1+1        MINFL OF PRIMARY 
 BYPASS   BSS    0
          SX7    X1 
          SA7    =XLWAX0
 SAVELWA  ENDM
          SPACE  4
**        MULT - MULTIPLY VALUE IN REGISTER P1 BY 10 - RESULT IN REG P2  .NO.ID.
*                                                                        .NO.ID.
  
          PURGMAC   MULT
  
 MULT     MACRO  P1,P2
          I_P2   P1+P1
          L_P1   3
          I_P2   P2+P1
 MULT     ENDM
                                                                         21FEB77
          SPACE  3                                                       21FEB77
**        CCON MACRO AND CDATA MACRO - CONDITIONAL ASSEMBLY OF "CON"     21FEB77
*         AND "DATA" FOR COMDECKS.  USED SO THAT DATA IS PRESET IN THE   21FEB77
*         COMDECK ONLY IN DECKS IN THE SAME OVERLAY AS THE COMMON BLOCK. 21FEB77
*                                                                        21FEB77
*         IF MICRO "THISOVL" (THIS DECK"S OVERLAY) IS THE SAME AS MICRO  21FEB77
*         "COMRES" (RESIDENCE OF THE CURRENT COMMON BLOCK), GENERATE     21FEB77
*         THE CONSTANT INFO, ELSE GEN A BSS 1.                           21FEB77
*                                                                        21FEB77
*         EVERY DECK MUST DEFINE ITS "THISOVL" MICRO.                    21FEB77
*         EVERY COMDECK MUST DEFINE ITS "COMRES" MICRO.                  21FEB77
*         THE VALUES ARE TO BE "00", "X0", OR "XX".                      21FEB77
*                                                                        21FEB77
*                * W A R N I N G *                                       21FEB77
*         DONT USE MULTI-WORD CONSTANTS, AND ENCLOSE OPERAND IN PARENS   21FEB77
*         IF IT HAS COMMAS OR BLANKS IN IT.                              21FEB77
*         E.G. FOR (3R ,X) THE PARENS ARE REQUIRED BECAUSE OF THE BLANK  21FEB77
*         AND THE COMMA.                                                 21FEB77
                                                                         21FEB77
          PURGMAC   CCON
  
CCON      MACRO  RAND                                                    21FEB77
          IFC    EQ, "COMRES" "THISOVL" ,2                               21FEB77
          CON    RAND                                                    21FEB77
          SKIP   1                                                       21FEB77
          BSS    1                                                       21FEB77
          ENDM                                                           21FEB77
                                                                         21FEB77
          PURGMAC   CDATA 
  
 CDATA    MACRO  RAND                                                    21FEB77
          IFC    EQ, "COMRES" "THISOVL" ,2                               21FEB77
          DATA   RAND                                                    21FEB77
          SKIP   1                                                       21FEB77
          BSS    1                                                       21FEB77
          ENDM                                                           21FEB77
          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 
* 
*         USES   X - 1, 2, 3
*                A - NONE 
*                B - 1
* 
*         CALLS  MVE= (COMCMVE) 
* 
  
          PURGMAC   MOVE
  
 MOVE     MACRO  C,F,T
          R=     X1,C 
          R=     X2,F 
          R=     X3,T 
          IF     -DEF,B1=1,1
          SB1    1
          RJ     =XMVE= 
 MOVE     ENDM
          SPACE  4
**        PUTSQ - DEFINE PTXXX INTERFACE ROUTINE TO WRITE TO SEQUENTIAL  .NO.ID.
*                 FILE XXX                                               .NO.ID.
*                                                                        .NO.ID.
*         PARAMETERS-                                                    .NO.ID.
*                PA = NAME OF FILE (=XXX)                                .NO.ID.
*                                                                        .NO.ID.
*         THIS MACRO DEFINES THE INTERFACE ROUTINE THROUGH WHICH A SYMPL .NO.ID.
*         PROGRAM WRITES FROM A WORKING STORAGE BUFFER TO THE FILE XXX.  .NO.ID.
*         THE SYMPL CALLING SEQUENCE TO PTXXX IS- 
*                XREF PTXXX;                                             .NO.ID.
*                PTXXX (BUF,NWDS);                                       .NO.ID.
*                WHERE                                                   .NO.ID.
*                BUF = FWA OF WORKING STORAGE BUFFER                     .NO.ID.
*                NWDS = LENGTH OF RECORD IN WORDS                        .NO.ID.
*                                                                        .NO.ID.
*         ACCORDINGLY THE REGISTER SETUP ON ENTRY IS                     .NO.ID.
*                A1 = POINTER TO APLIST                                  .NO.ID.
*                X1 = FIRST WORD OF APLIST = ADDRESS OF BUF              .NO.ID.
*                                                                        .NO.ID.
*         ROUTINE FIRST WRITES THE NUMBER OF WORDS IN THE RECORD ON THE 
*         FILE AND THEN WRITES OUT THE RECORD 
*                                                                        .NO.ID.
                                                                         .NO.ID.
          PURGMAC   PUTSQ 
  
 PUTSQ    MACRO  PA 
 PT_PA    ENTRY. ** 
          SB1    1
          SX0    X1          SAVE WORKING STORAGE ADDRESS AROUND READW
          SA5    A1+B1
          WRITEW =XF.PA,X5,B1 
          SA3    X5 
          WRITEW =XF.PA,X0,X3 
          EQ     PT_PA
 PUTSQ    ENDM
          SPACE  4
**        GETSQ - DEFINE GTXXX INTERFACE ROUTINE TO READ FROM SEQUENTIAL .NO.ID.
*         FILE XXX                                                       .NO.ID.
*                                                                        .NO.ID.
*         PARAMETERS-                                                    .NO.ID.
*                PA = FILE NAME (=XXX)                                   .NO.ID.
*                                                                        .NO.ID.
*         THIS MACRO DEFINES THE INTERFACE ROUTINE THROUGH WHICH A SYMPL .NO.ID.
*         PROGRAM READS FROM FILE XXX INTO A WORKING STORAGE BUFFER.     .NO.ID.
*         THE SYMPL CALLING SEQUENCE TO GTXXX IS- 
*                XREF GTXXX;
*                GTXXX (BUF,WDS,EOF);                                    .NO.ID.
*                WHERE                                                   .NO.ID.
*                BUF = FIRST WORD ADDRESS OF WORKING STORAGE BUFFER      .NO.ID.
*                WDS = NUMBER OF WORDS READ INTO BUF BY THIS ROUTINE     .NO.ID.
*                EOF = END OF DATA EXIT                                  .NO.ID.
*                                                                        .NO.ID.
*         ACCORDINGLY THE REGISTER SETUP ON ENTRY IS-                    .NO.ID.
*                A1 = POINTER TO APLIST                                  .NO.ID.
*                X1 = FIRST WORD OF APLIST= ADDRESS OF BUF               .NO.ID.
*                                                                        .NO.ID.
*         THIS ROUTINE SETS A0 TO THE FET OF FILE XXX, SETS B1=1, PLUGS  .NO.ID.
*         A JUMP INSTRUCTION INTO THE LAST WORD OF GETSQ AND EXITS TO    .NO.ID.
*         GETSQ TO DO THE ACTUAL READ                                    .NO.ID.
*                                                                        .NO.ID.
                                                                         .NO.ID.
          PURGMAC   GETSQ 
  
 GETSQ    MACRO  PA 
 GT_PA    ENTRY. ** 
          SA3    GT_PA
          SB1    1
          BX6    X3 
          SA0    =XF._PA
          SA6    =XGETSQB 
          EQ     =XGETSQA 
 GETSQ    ENDM
          SPACE  4
**        ENTRY. - DEFINE ENTRY POINT AND ITS CONTENTS
* 
*         CALL- 
*                NAME   ENTRY. VALUE
*                WHERE- 
*                NAME = ENTRY POINT NAME
*                VALUE =
*                        * (FOR LOCAL SUBROUTINES)         EXPANDS TO --
*                            NAME   EQ    *+1S17
*                        ** (FOR GLOBAL SUBROUTINES)       EXPANDS TO --
*                                   ENTRY NAME
*                            NAME   EQ    *+1S17
*                        ELSE (FOR GLOBAL STORAGE LOCN)    EXPANDS TO --
*                                   ENTRY NAME
*                            NAME   CON   VALUE 
* 
  
          PURGMAC  ENTRY. 
  
          MACRO  ENTRY.,NAME,VALUE
          IFC    NE,$VALUE$*$,2 
          ENTRY  NAME 
          IFC    EQ,$VALUE$**$,2
 NAME     EQ     *+1S17 
          SKIP   1
 NAME     CON    VALUE
 ENTRY.   ENDM
          SPACE  4
**        EQENT - EQUATE SYMBOL, DECLARE ENTRY POINT. 
* 
*         CALL- 
*                SYM   EQENT   LAB
* 
*         GENERATES-
*                      ENTRY   SYM
*                SYM   EQU     LAB
* 
  
  
          PURGMAC  EQENT
  
          MACRO  EQENT,SYM,LAB
          ENTRY  SYM
 SYM      EQU    LAB
 EQENT    ENDM
          SPACE  4
**        SETRAB - SET RANDOM ACCESS BIT
* 
*         FOR NON-CRM I/O-
*                SETS RANDOM ACCESS BIT IN FET.  CALLED AFTER A FILE
*                IS ALREADY OPEN SINCE WE PROVIDE NO INDEX BUFFER.
* 
*         FOR CRM I/O-
*                DOES NOTHING 
* 
  
          PURGMAC   SETRAB
  
 SETRAB   MACRO  NAME 
 #RM      IFEQ   CP#RM,0
          SX0    1
          SA3    NAME+I.FIRST 
          LX0    47 
          BX6    X0+X3
          SA6    A3 
 #RM      ENDIF 
 SETRAB   ENDM
          SPACE  4
**        CLEARAB - CLEAR RANDOM ACCESS BIT 
* 
*         FOR NON-CRM I/O-
*                CLEARS RANDOM ACCESS BIT IN FET.  CALLED BEFORE
*                CLOSING A FILE SINCE WE HAVE PROVIDED NO INDEX BUFFER
* 
*         FOR CRM I/O-
*                DOES NOTHING 
* 
  
          PURGMAC   CLEARAB 
  
 CLEARAB  MACRO  NAME 
 #RM      IFEQ   CP#RM,0
          MX0    59 
          SA3    NAME+I.FIRST 
          LX0    47 
          BX6    X0*X3       CLEAR BIT
          SA6    A3 
 #RM      ENDIF 
 CLEARAB  ENDM
          SPACE  4
**        WFILE - DEFINE FET/FIT FOR SEQUENTIAL FILE                     .NO.ID.
*                                                                        .NO.ID.
*         PARAMETERS-                                                    .NO.ID.
*                FN = FILE NAME 
*                                                                        .NO.ID.
                                                                         .NO.ID.
          PURGMAC   WFILE 
  
 WFILE    MACRO  FN 
          FET    FN,FN_BUF,BINARY 
 #RM      IFNE   CP#RM,0
 FI.FN    FILE   LFN="FN",PD=IO,RT=U,MRL=(LC.FN*10),EO=A,CF=U 
 #RM      ENDIF 
 WFILE    ENDM
          SPACE  4
**        FET - DEFINE FET/PSEUDO-FET                                    SYMTEXT
*                                                                        SYMTEXT
                                                                         SYMTEXT
          PURGMAC   FET 
  
 FET      MACRO  NAME,FIRST,MODE,TABLE
 #RM      IFEQ   CP#RM,0
 F.NAME   BSS    0
          VFD    42/0L"NAME",18/MODE+1
          VFD    36/0,6/3,18/FIRST
          CON    FIRST
          CON    FIRST
          CON    FIRST+LC.NAME
          VFD    24/0,18/LC.NAME,18/FIRST 
          BSSZ   2           RANDOM FILE INFO 
 #RM      ELSE
*         DEFINE PSEUDO-FET BASE ADDRESS                                 SYMTEXT
 F.NAME   BSS    0
*         (I.FIT)            FLAGS AND FIT POINTER.                      SYMTEXT
*                            1/HOLD BUF FLAG, 1/SPILL FLAG, 58/FIT ADDR  SYMTEXT
*                -HOLDING BUFFER EXISTS- FLAG  ( 1=YES, 0=NO )           SYMTEXT
          VFD    1/1*LC.NAME/LC.NAME
*                -FILE SPILLED- FLAG           ( 1=YES, 0=NO )           SYMTEXT
          VFD    1/0
*                            -UNCONDIT BUF FLUSH- FLAG  ( 1=YES, 0=NO )  SYMTEXT
          IFC    NE, TABLE  ,2
          VFD    1/0
          SKIP   1
          VFD    1/1
*                RESERVED FOR CDC.                                       SYMTEXT
          VFD    39/0 
*                FIT ADDRESS.                                            SYMTEXT
          VFD    18/FI.NAME 
*                            HOLDING BUFFER CONTROL PARAMETERS.          SYMTEXT
 .HB      IFNE   LC.NAME,0
*         (I.FIRST), (I.IN), (I.OUT), (I.LIMIT)                          SYMTEXT
          DUP    4,1
          VFD    42/0,18/** 
*         (I.HBSET)          HOLDING BUFFER RESET VALUES.                SYMTEXT
          VFD    24/0,18/LC.NAME,18/**
 .HB      ENDIF 
 #RM      ENDIF 
          ENTRY  F.NAME 
 FET      ENDM
          SPACE  4
**        CNVTSEC -- CONVERT *TIME* MACRO RESPONSE TO BINARY VALUE
* 
*         CALL   CNVTSEC     TIMEREQ
* 
*         ENTRY  TIMEREQ     IS THE ADDRESS OF THE REQUEST WORD WHICH 
*                            CONTAINS THE TIME IN THE FORMAT -- 
*                            24/TIMELIMIT, 24/SEC, 12/MILLISEC
* 
*         EXIT   THE TIME IS COMPUTED (1000*SEC + MILLI) AND
*                PLACED IN X6.
* 
*         USES   X -- 0,1,6 
*                A -- 1 
*                B -- 2 
* 
  
          PURGMAC   CNVTSEC 
  
 CNVTSEC  MACRO  TIMEREQ
          SA1    TIMEREQ     GET WORD CONTAINING THE TIME 
          MX0    48 
          MX6    36 
          BX0    -X0*X1      ISOLATE MILLISEC 
          AX1    12 
          BX6    -X6*X1      ISOLATE SECONDS
          SA1    =1000. 
          PX6    X6 
          NX6    X6 
          FX6    X6*X1       MULTIPLY SEC BY 1000 
          UX6    B2,X6
          LX6    B2,X6
          IX6    X6+X0       ADD MILLISEC TO SEC*1000 
          ENDM
 FETS     SPACE  4
                                                                         SYMTEXT
***       CIO CODE VALUES FOR FILE MODES.                                SYMTEXT
                                                                         SYMTEXT
 BINARY   EQU    2
 CODED    EQU    0
          TITLE  I/O MACRO CODING CONVENTIONS 
*CALL FA=DEFS 
          TITLE  COMMON SYMPL-COMPASS SYMBOLS 
*         THE FOLLOWING SYMBOLS ARE REFERENCED IN BOTH THE SYMPL AND
*         COMPASS PARTS OF THE COMPILER.  THE METHOD USED IS AS FOLLOWS-
*         A SYMBOL S1 IS DEFINED EQUAL TO N BY THE SYNTAX 
*         DEF   #S1#
*                S1   #N#;
*         IN THE SYMPL PARTS OF THE COMPILER THIS SETS S1=N 
*         IN THE COMPASS PARTS OF THE COMPILER THE DEF MACRO IS USED TO 
*         ALSO SET S1=N.
* 
          SPACE  4
*CALL DEF 
 COMMON   SPACE  5                                                       NOV04
**        COMMON MACRO - ALLOW COMPASS TO PROCESS A SYMPL COMMON         NOV04
*                            STATEMENT                                   NOV04
*                                                                        NOV04
*                THE COMMON DECLARATION MUST BE FOLLOWED BY A            NOV04
*                BEGIN-ENDC BLOCK                                        NOV04
*                                                                        NOV04
  
          PURGMAC   COMMON
  
 COMMON   MACRO  NAME                                                    NOV04
          USE    /_NAME_/                                                NOV04
          ENDM                                                           NOV04
                                                                         NOV04
                                                                         NOV04
**        BEGIN MACRO - PROCESS SYMPL BEGINS                             NOV04
*                WE JUST IGNORE THEM...                                  NOV04
*                                                                        NOV04
  
          PURGMAC   BEGIN 
  
 BEGIN    MACRO                                                          NOV04
          ENDM                                                           NOV04
                                                                         NOV04
                                                                         NOV04
**        ENDC MACRO - PROCESS SYMPL END WHEN DEF"D AS *ENDC*            NOV04
*                THIS ALLOWS TERMINATION OF THE COMMON BLOCK             NOV04
*                THE COMMON DECK MUST DEF ENDC = END                     NOV04
*                                                                        NOV04
  
          PURGMAC   ENDC
  
 ENDC     MACRO         * * * ENDC MUST TERMINATE A COMMON STATEMENT * * NOV04
          USE    *                                                       NOV04
          ENDM                                                           NOV04
                                                                         NOV04
 ITEM     SPACE  5                                                       NOV04
**        ITEM MACRO - PROCESS SYMPL ITEMS                               NOV04
*                                                                        NOV04
*                EACH ITEM MUST HAVE THE FOLLOWING FORMAT:               NOV04
*                                                                        NOV04
*                11      18        30                                    NOV04
*                ITEM    NAME      TYPE;                                 NOV04
*                                                                        NOV04
*         ANY PRESETS MUST BE DONE IN SYMPL                              NOV04
*                                                                        NOV04
  
          PURGMAC   ITEM
  
 ITEM     MACRO  NAME                                                    NOV04
 NAME     BSS    1                                                       NOV04
          ENDM                                                           NOV04
          SPACE  4
************************************************************************
*                                                                      *
*         DEFINE RESIDENCY OF SYMBOL TABLE                             *
*                                                                      *
*         SYMTBLV = 0 MEANS SYMBOL TABLE IS SCM RESIDENT (DEFAULT)     *
*         SYMTBLV " 0 MEANS SYMBOL TABLE IS LCM RESIDENT               *
*                                                                      *
************************************************************************
  
*CALL SYMTBLV 
          END 
