*DECK,CONTROL 
          IDENT  CONTROL
          TITLE  CONTROL - SEQUENCE PHASES OF COMPILER
          COMMENT  CONTROL - SEQUENCE PHASES OF COMPILER
          SST 
          LIST   F
          SPACE  4
**        CONTROL - SEQUENCE PHASES OF COMPILER 
* 
*         CONTROL IS THE MAIN ENTRY POINT FOR "SYMPL".                   21FEB77
*         THE OVERLAY LOADING OF PRIMARY OVERLAYS IS HANDLED
*         BY CONTROL WHICH RESIDES IN THE ROOT SEGMENT OF THE COMPILER
* 
*         THE SECONDARY OVERLAYS TO A PRIMARY OVERLAY ARE 
*         LOADED BY THE PRIMARIES 
* 
*         NO INTERMEDIATE FILE MANAGING TAKES PLACE IN CONTROL
* 
*         COMPILE-TIME OPTIONS ARE EXAMINED WHERE NECESSARY 
*         TO EITHER BYPASS A PHASE OF THE COMPILER OR TO
*         TERMINATE COMPILATION DIRECTLY FOLLOWING A PHASE
* 
*         FOR FIELD LENGTH MANAGEMENT THE VARIABLES OF INTEREST ARE - 
*                                                                        21FEB77
*                IN TROLCOM...                                           21FEB77
*                VERY1FL     SCM FL BEFORE WE DID ANYTHING               CONTROL
*                VERY1LCF    CONTAINS LCM FL BEFORE WE ALTERED IT        21FEB77
*                STRTFLD     SYM-TBL FL WE BEGAN COMPILING AT (SCM OR LC 21FEB77
*                            DEPENDING ON THE ASSEMBLY)                  CONTROL
*                SYMTAB      CONTAINS HHA.                               CONTROL
*                SYSTART     CONTAINS SYM-TAB START LOCATION.  EQUATED   CONTROL
*                            TO SYMTAB ON SCM COMPILER, A SEPARATE CELL  CONTROL
*                            ON LCM COMPILER.                            CONTROL
*                FIELDLN     CURRENT FL OF SCM                           CONTROL
*                LCMFL       CURRENT FL OF LCM                           CONTROL
*                SYFL        EQUATED TO EITHER FIELDLN OR LCMFL          CONTROL
*                            FL WHERE SYM-TBL IS (SCM OR LCM)            CONTROL
*                MAXFIEL     MAX PERMISSIBLE SCM FL                      CONTROL
*                MAXLCM      MAX PERMISSIBLE LCM FL                      CONTROL
*                SYMAX       EQUATED TO MAXFIEL OR MAXLCM                CONTROL
*                SYMXTRA     CONTAINS HOW MUCH TO ADD TO FL PER INCREMNT CONTROL
*                                                                        21FEB77
*                WE USE THE FOLLOWING EQUATES FROM SYMTEXT. . .          CONTROL
*                                                                        CONTROL
*                SYMINCR     HOW MUCH TO INCREMENT FL DURING PASS 1      CONTROL
*                SYM2INCR    HOW MUCH TO INCR FL AFTER PASS 1 IS DONE    CONTROL
*                SCMPADD     WE RFL THIS MUCH ABOVE HHA TO FIT IN CPILER CONTROL
*                            IN SCM WHEN S.T. IN LCM.                    CONTROL
*                "SYMRES"    MICRO CONTAINS "CM" OR "LCM" DEPENDING ON   21FEB77
*                            SYMBOL TABLE RESIDENCE.                     21FEB77
* 
*         THE BASIC ROUTINE TO INCREASE FL IS HERE IN CONTROL, BUT       CONTROL
*         MANAGEMENT OF THE SYMBOL-TABLE LIMITS AND MOVING OF THE CODE   21FEB77
*         BUFFERS USED IN OVLY(1,6) IS DONE IN "SRCH".                   CONTROL
          SPACE  4
 THISOVL  MICRO  1,, 00      DECK RESIDENCE (FOR CCON MACRO)             21FEB77
                                                                         21FEB77
          ENTRY  SYMTAB      THIS CARD MUST NOT BE IN A COMDECK.         21FEB77
          ENTRY SYSTART      THIS CARD MUST NOT BE IN A COMDECK.
          ENTRY  LWA00       THIS CARD MUST NOT BE IN A COMDECK.         21FEB77
          ENTRY  FIELDLN     THIS CARD MUST NOT BE IN A COMDECK.         21FEB77
                                                                         21FEB77
*         COMDECKS
  
*CALL COMSTUF 
          EJECT 
          ENTRY  CONTROL
 CONTROL  BSS    0
                                                                         21FEB77
          RJ     =XCONCARD   INTERPRET CTL CARD PARAMETERS               21FEB77
  
 .T       IFNE   TEST,0      IF DEBUG COMPILER
 .C       IFEQ   CID,0       AND CID NOT ON;
 #OS      IFNE   SYSNAME,SCOPE2 
          RJ     LOADIDP           CONDITIONALLY LOAD IDP 
 #OS      ENDIF 
 .C       ENDIF 
 .T       ENDIF 
  
          RJ     =XNISH      COMPILER ONE-TIME INITIALIZATIONS           21FEB77
  
*         READ FIRST CARD FROM INPUT.  END OF DATA EXIT SET TO NOINPUT
*         TO PUT OUT ERROR MESSAGE AND END COMPILATION IF EMPTY INPUT 
*         FILE
  
          SA1    NOINB       APLIST FOR GTSRC 
          EQ     NOINA
  
 RECYCLE  BSS    0
          TIME   TSTART      GET STARTING TIME FOR COMPILATION OF MODULE
          CNVTSEC TSTART     CONVERT TIME TO BINARY VALUE (RESULT IN X6)
          SA6    TSTART      STORE CONVERTED TIME 
          SA6    BPOLDTIM    INITIALIZE BY PHASE TIME FOR NEW MODULE
          DATE   =XDATHED,RCL 
 .T       IFNE   TEST,0 
          TIME   TEMTIM 
          SA5    TEMTIM 
          BX6    X5 
          SA6    OLDCP
 .T       ENDIF 
          SPACE  4
          SX6    SYMINCR           HOW MUCH TO BUMP FL                   CONTROL
          SA6    SYMXTRA                                                 CONTROL
          SPACE  4
*         LOAD PRIMARY OVERLAY FOR INITIALIZER, SYNTAX ANALYZER, DIAG 
*         PROCESSOR AND ALLOCATOR PHASES
  
          LOAD   OV10 
  
          ENTRY  AFTPH10
 AFTPH10  BSSZ   0
                                                                         CONTROL
          SX6    SYM2INCR          USE SMALLER FL INCREMENT AFTER PASS 1 CONTROL
          SA6    SYMXTRA                                                 CONTROL
  
*         PUT OPTIONS COMPILED UNDER IN MESSAGE SKELETON.  THIS HAS TO
*         BE DONE HERE BECAUSE THE OPTIONS CAN BE CHANGED IN THE SOURCE 
*         PROGRAM.
  
          SA4    OPTION 
          MX7    59 
          BX4    X4*X7       TOP BIT OF OPTION IS NOT USEFUL
          MX7    33                                                      SMPA100
          BX7    -X7*X4      ONLY LAST 27 BITS OF OPTION ARE USEFUL      SMPA100
          SB1    1
          SX5    -1R, 
          SA1    BLNKS
          SB5    OPLST
          BX6    X1 
          SA6    B5+B1
          SA6    A6+B1
          SB6    60 
          SB7    6
          SX0    B1 
 LOOP     BSS    0
          ZR     X7,DONE
          BX2    X0*X7
          AX7    1
          IX5    X5+X0
          ZR     X2,LOOP
          SB6    B6-B7
          LX3    X5,B6
          IX6    X6+X3
          NZ     B6,LOOP
          SA6    B5 
          SB6    60 
          SB5    B5+B1
          BX6    X1 
          EQ     LOOP 
  
 DONE     BSS    0
          SA6    B5 
          MX7    0
          SA7    A6+B1
          LX4    59-1RT      ANALYSIS ONLY THIS COMPILATION 
          NG     X4,NAFTPH4  SKIP CODE GENERATION 
  
*         BYPASS CODE GENERATION IF A TEXT WAS GENERATED
  
          SA2    GENTXTF     IF SYMPL TEXT GENERATION HAS NOT OCCURRED, 
          ZR     X2,CONT1    SKIP TO CONT1 TO CONTINUE; 
          SA1    OPTION      ELSE 
          MX0    59          SET B OPTION = 0 TO PREVENT
          LX0    1RB         FURTHER WRITING ON THE B=FILE
          BX6    X1*X0       FOR THIS COMPILATION UNIT, 
          SA6    A1 
          EQ     NAFTPH4     AND BYPASS CODE GENERATION.
 CONT1    BSS    0
  
          SPACE  4
*         LOAD PRIMARY OVERLAY FOR PHASES CODGENI AND CODGENII
  
          LOAD   OV30 
  
          ENTRY  AFTPH30
 AFTPH30  BSSZ   0
          SPACE  4
*         LOAD PRIMARY OVERLAY FOR EDITOR 
  
          SA5    OPTION 
          BX6    X5 
          LX5    59-1RO 
          LX6    59-1RB 
          BX6    X6+X5
          PL     X6,NAFTPH4  NO OBJECT CODE OR BINARYS
 LOAD40   BSS    0
          LOAD   OV40,MES40 
  
          ENTRY  AFTPH40
 AFTPH40  BSSZ   0
          SA5    OPTION 
          SB5    59-1RX 
          LX6    B5,X5
          NG     X6,CONT4    LOAD MAP AND CRFLST OVERLAYS 
          LX5    59-1RR 
          PL     X5,CONT3    TERMINATE COMPILATION
 CONT4    BSSZ   0
          SPACE  4
*         LOAD PRIMARY OVERLAY FOR MAPCRF AND CRFLST
  
          LOAD   OV50 
  
          ENTRY  AFTPH50
 AFTPH50  BSSZ   0
          SPACE  4
*         POST PROCESSING AND CLEANUP AFTER ALL OVERLAYS HAVE FINISHED
  
 CONT3    BSS    0
 NORMEND  BSS    0
          RJ     FLREQD 
          SA0    BP.MAP 
          RJ     =XADDCTBP   ACCUMULATE TIME FOR EDITOR,MAP,CRF 
          RJ     =XEJ1       GET NAME FOR L=0 (AND L=1 DEBUG COMPILER)
          SA2    =XSHRTLST
          ZR     X2,SKIPLS2  JIF L=0 (DONT PRINT *COMPILED UNDER...*) 
  
 LONGLST  BSS    0
          SA1    OPTMSG      PRINT *COMPILED UNDER OPTIONS...*
          RJ     =XPTLSTV 
 SKIPLS2  BSS    0
          CLOSE  =XF.CRF,UNLOAD,R 
          TIME   TSTOP       GET STOPPING TIME FOR COMPILATION OF MODULE
          CNVTSEC TSTOP      CONVERT TIME TO BINARY VALUE (RESULT IN X6)
          SA2    TSTART      GET STARTING TIME OF MODULE
          IX6    X6-X2       AND SUBTRACT IT FROM THE STOP TIME 
          SA6    BININ       STORE RESULT FOR OUTPUT FORMATTING BY ECT
          SA3    TOTIMEA     ACCUMULATE TOTAL TIME
          IX6    X6+X3
          SA6    A3 
          RJ     ECT         EDIT COMPILATION TIME.                      SMPA103
          SA6    TMESS+2
          LX6    12          REPOSITION TO 8HSSSS.MMM                    SMPA103
*                           STORE  8HSSSS.MMM   . . .                    CONTROL
          SA6    CONMES+2    STORE TIME IN MESSAGE. 
*                                                                        CONTROL
          SA2    =XSHRTLST   ZERO MEANS L=0 (WHY SHOULD ZERO BE TRUE...) CONTROL
          ZR     X2,SKIPLST  JIF L=0
          SA1    TMESG       PRINT *COMPILATION ... SEC*
          RJ     =XPTLSTV 
          SA2    =XOPTION 
          LX2    59-1RL 
          NG     X2,SKIPLS8  JIF L-OPTION IS ON 
  
*         PRINT NAME OF PROGRAM IF DEBUG COMPILER AND L=1 
*         (OTHERWISE IT WILL NOT SHOW UP IN THE LISTING)
  
 .T       IFNE   TEST,0      IF DEBUG COMPILER
          SA1    =XNAMEID    PRINT NAME OF PROC IN LISTING IF L=1 
          BX6    X1 
          SA6    MESNAME+2   STUFF PROCNAME IN MESSAGE
          SA1    MSGVECT
          RJ     =XPTLSTV    PRINT MESSAGE WITH PROCNAME
 .T       ENDIF 
          SA1    BLKMSGA     PRINT 2 BLANK LINES IF L=1 LISTING 
          RJ     =XPTLSTV 
          SA1    BLKMSGA
          RJ     =XPTLSTV 
  
*         OUTPUT MESSAGE TO DAYFILE GIVING NAME OF PROGRAM JUST COMPILED
  
 SKIPLS8  BSS    0
 SKIPLST  BSS    0
          SA4    =XNAMEID 
          BX7    X4 
          SA7    CONMES 
          MESSAGE  CONMESA,,R 
          SPACE  4
*         SET UP FOR NEXT COMPILATION.....
*         READ FIRST CARD OF NEXT COMPILATION UNIT.  BECAUSE
*         AT LEAST ONE PROGRAM HAS ALREADY BEEN COMPILED THE
*         DATA EXIT CAN BE SET TO TERMINATE COMPILATION NORMALLY
*         IF THERE IS NO NEXT PROGRAM.
  
          SA1    GTSRCPL     APLIST FOR GTSRC 
 NOINA    BSS    0
          RJ     =XGSRC      READ FIRST CARD
  
*         SET FLAG SO NEXT CALL TO GTSRC WILL RETURN CARD JUST READ 
  
          MX7    59 
          SA7    =XPREREAD
          SPACE  4
*         RESET END OF SYMBOL TABLE TO STRTFLD, WHICH WAS 
*         THE ORIGINAL SYMBOL TABLE LENGTH FOR THE LAST 
*         COMPILATION.
  
          SA1    STRTFLD     GET ORIGINAL FL OF SYMBOL TABLE. 
          BX6    X1 
          SA6    SYFL        RESET CURRENT FL = ORIGINAL FL.
          LX6    30          RESTORE FL TO SYSTART PLUS 
          SA6    ANS         ORIGINAL SYMBOL TABLE LENGTH.
          MEMORY "SYMRES",ANS,R 
          SPACE  4
*         MISCELLANEOUS INITIALIZATION
  
          RJ     =XPTLSTIN   AND PTLST
          SA5    =10H       0.
          BX7    X5          COUNTER TO 
          SB1    1
          SA7    SORIMAG     ZERO 
          RJ     =XZCEXEC    ZERO OUT CEXEC 
          SX6    1
          SA6    CRDNO       INITIALIZE CRDNO = 1 (IN CEXEC). 
          SA1    SAVOPT 
          BX6    X1 
          SA6    OPTION      RESTORE CONTROL CARD OPTIONS 
          MX7    0
          SA7    GENTXTF     CLEAR TEXT GENERATION FLAG 
          SPACE  4
*         CHECK TO SEE IF FIRST CARD OF PROGRAM IS AN OVERLAY CARD.  IF 
*         IT IS WE HAVE TO PROCESS IT HERE SINCE IT IS NOT A PART OF THE
*         SYMPL SYNTAX
  
          SA1    SORCARD
          SA2    =7LOVERLAY 
          MX0    18 
          LX0    18 
          BX7    -X0*X1 
          IX2    X7-X2
          NZ     X2,RECYCLE  NOT OVERLAY CARD 
  
*         SAVE IMAGE OF CARD SO THAT INIT40 CAN OUTPUT OVERLAY DIRECTIVE
*         TO LGO
  
          SB6    6
          BX7    X1 
          SA7    OVCARD 
 OVLOOP   SA1    A1+1 
          SB6    B6-1 
          BX7    X1 
          SA7    A7+1 
          NZ     B6,OVLOOP
          SA1    A1+1 
          MX7    12 
          BX7    X7*X1
          SA7    A7+1 
  
*         SET FLAG SO NEXT CALL TO GTSRC WILL READ NEXT CARD AND NOT
*         JUST RETURN THIS ONE
  
          MX7    0
          SA7    =XPREREAD
          EQ     RECYCLE     GO START NEXT COMPILATION UNIT 
          SPACE  3
*         NO OBJECT CODE OR BINARIES
*         ...BUT MAY HAVE TO LOAD EDITOR ANYWAY 
          SPACE  2
 NAFTPH4  SA5    OPTION      MUST LOAD EDITOR IF X OR R NEEDED
          SB5    59-1RX 
          LX6    B5,X5
          NG     X6,LOAD40   LOAD MAP AND CRFLST
          LX5    59-1RR 
          NG     X5,LOAD40
          EQ     AFTPH40     NEITHER R NOR X - SKIP EDITOR
          SPACE  4
          TITLE  NOINPUT - PROCESS EMPTY INPUT FILE 
**        NOINPUT - PROCESS EMPTY INPUT FILE
* 
*         THIS ROUTINE PUTS OUT A MESSAGE IN THE DAYFILE SPECIFING AN 
*         EMPTY INPUT FILE AND ENDS COMPILATION 
* 
  
 NOINPUT  BSS    0
          MESSAGE (=C* -SYMPL-  EMPTY INPUT FILE*),,R 
          SPACE  4
**        INPTEOF - PROCESS NORMAL END OF INPUT 
* 
*         THIS IS THE END OF DATA EXIT USED IN CALLING GTSRC WHEN AN EOF
*         ON INPUT IS OK. 
* 
  
          ENTRY  INPTEOF
 INPTEOF  BSS    0
          RJ   FINNUP              FINISH UP.                            CONTROL
          SA1    ET                ERROR TERMINATION PARAMETER           CONTROL
          ZR     X1,ABTENDB                                              CONTROL
          SA2    HMEL              IF HIGHEST MAX ERROR LEVEL 
          IX4    X2-X1             IS GQ ERROR TERMINATION PARAMETER, 
          PL     X4,ABTENDA        ABORT TO AN EXIT(S). 
 ABTENDB  BSS    0
          RJ     CYF               CLOSE Y=FILES. 
          SA1    =XOUTBUF    IF *OUTPUT* BUFFER IS EMPTY
          ZR     X1,ENDRUN   ...DONT CLOSE *OUTPUT* 
          CLOSE  =XF.OUT,NR,R 
 ENDRUN   BSS    0
          ENDRUN
 ABTENDA  MESSAGE (=C* -SYMPL-  SOURCE ERRORS--ABORT REQUESTED*),,R 
          ABORT  ,NODUMP
          SPACE  5                                                       CONTROL
**        ABT -  ABORT OR ENDRUN DEPENDING ON ET PARAMETER               CONTROL
*                                                                        CONTROL
 ABT      ENTRY. **                                                      CONTROL
 RH       READH  =XF.IN,SORCARD,10 KEEP READING INPUT UNTIL EOR          CONTROL
          ZR     X1,RH             .                                     CONTROL
          SA2    ET                ERROR TERMINATION PARAMETER           CONTROL
          NZ     X2,ABTENDC                                              CONTROL
          RJ     FLREQD            FIELD LENGTH REQD MESSAGE             CONTROL
          RJ     FINNUP            FINISH UP                             CONTROL
          JP     ABTENDB           ENDRUN                                CONTROL
          SPACE  4
**        ABTEND - ABORT COMPILATION
* 
*         THIS ROUTINE PUTS A MESSAGE ON THE OUTPUT FILE DENOTING FIELD 
*         LENGTH USED, WRITES A MESSAGE TO THE DAYFILE AND ABORTS 
* 
  
 ABTEND   ENTRY. ** 
 ABTENDC  BSS    0                                                       CONTROL
          TIME   TSTOP       GET TIME AT THE TIME OF THE ABORT
          CNVTSEC TSTOP      CONVERT IT TO BINARY (RESULTS IN X6) 
          SA2    TSTART      GET STARTING TIME OF THIS MODULE 
          SA3    TOTIMEA
          IX6    X6-X2       NO NEED TO STORE TIME OF LAST MODULE 
          IX6    X6+X3       ...JUST ADD IT IN TO THE TOTAL TIME
          SA6    A3 
          RJ     FLREQD 
          RJ   FINNUP              FINISH UP.                            CONTROL
          MESSAGE (=C* -SYMPL-  COMPILER ABORT*),,R 
          ABORT  ,NODUMP
          SPACE  4,10 
**        SYSERR. - PROCESS ERROR RETURN FROM FTN LIBRARY ROUTINE 
* 
  
 SYSERR.  ENTRY. ** 
 EXP.MSG  EQENT  SYSERR.
 #OS      IFEQ   SYSNAME,2,1
 SYSTEM=  EQENT  SYSERR.
  
          MESSAGE (=C* -SYMPL-  BAD EXP CALL TO FTN*),,R
          RJ     ABTEND 
          TITLE  CYF - CLOSE Y=FILES
**        CYF - CLOSE Y=FILES 
* 
*         CYF IS CALLED FROM WITHIN CONTROL JUST PRIOR TO THE END OF
*         THE COMPILER RUN TO CLOSE ANY Y=FILES THAT ARE OPEN.
* 
  
 CYF      ENTRY. *
          MX6    0           INITIALIZE YAT POINTER.
          SA1    X6+YAT      GET FIRST YAT ENTRY. 
          ZR     X1,CYF      IF YAT IS NULL, RETURN.
 CYF1     MX0    59 
          BX2    X1-X0       IF LAST YAT ENTRY, RETURN. 
          ZR     X2,CYF      (-1 INDICATES END OF YAT.) 
          SA6    YAT.ER      STORE YAT POINTER. 
          MX0    42          STORE LFN IN FET/FIT.
          LX0    42 
          BX2    X1*X0
          LX2    18 
 #RM      IFEQ   CP#RM,0
          SX0    3
          BX7    X2+X0       SET MODE AND COMPLETE BITS.
          SA7    =XF.YFI
 #RM      ELSE
          STORE  =XFI.YFI,LFN=X2
 #RM      ENDIF 
          CLOSE  =XF.YFI,,R  CLOSE Y=FILE.
          SA5    YAT.ER 
          BX6    X5          FETCH YAT POINTER. 
 CYF2     SX6    X6+1        INCREMENT YAT POINTER. 
          SA1    X6+YAT      GET NEXT YAT ENTRY.
          MX0    18 
          BX2    X1*X0
          BX3    X2-X0       IF LEFTMOST 18 BITS ARE ONES,
          ZR     X3,CYF1     SKIP TO CYF1;
          EQ     CYF2        ELSE SKIP TO CYF2. 
          TITLE  FLREQD - PRINT FL REQUIRED 
**        FLREQD - PRINT FL REQUIRED
* 
*         FLREQD PRINTS THE LCM OR SCM FL REQUIRED FOR THE
*         COMPILATION JUST COMPLETED IN THE SYSTEM RESOURCES MESSAGE
*         GROUP OF THE LISTABLE OUTPUT FILE.  AN IMMEDIATE EXIT 
*         IS TAKEN IF L=0 ON THE SYMPL CONTROL CARD.
* 
  
 FLREQD   ENTRY. *
          SA2    =XSHRTLST
          ZR     X2,FLREQD   EXIT FLREQD IF L=0.
  
 #LEV     IFEQ   SYMTBLV,0
          SA1    FIELDLN     GET SCM FL.
          RJ     CONVTFL     CONVERT FL (X1) TO OCTAL DISPLAY CODE (X7).
          LX7    6
          SX5    53B         APPEND $B$ TO ODC SCM FL.
          IX7    X7-X5
          SA7    SCMUSED
          SA1    SCMOUT      PTLSTV CALLING SEQUENCE. 
          RJ     =XPTLSTV    PRINT SCM FL REQUIRED. 
  
 #LEV     ELSE
          SA1    LCMFL       GET LCM FL.
          RJ     CONVTFL     CONVERT FL (X1) TO OCTAL DISPLAY CODE (X7).
          LX7    6
          SX5    53B         APPEND $B$ TO ODC LCM FL.
          IX7    X7-X5
          SA7    LCMUSED
          SA1    LCMOUT      PTLSTV CALLING SEQUENCE. 
          RJ     =XPTLSTV    PRINT LCM FL REQUIRED. 
 #LEV     ENDIF 
  
          EQ     FLREQD      EXIT FLREQD. 
          SPACE  4
          TITLE  CONVTFL - CONVERT FIELD LENGTH TO DISPLAY CODE 
**        CONVTFL - CONVERT FIELD LENGTH TO DISPLAY CODE
* 
*         THIS ROUTINE CONVERTS A FIELD LENGTH (MAXIMUM 6 OCTAL DIGITS) 
*         IN X1 TO ITS DISPLAY CODE EQUIVALENT IN X7 (RIGHT-JUSTIFIED 
*         WITH BLANK FILL)
* 
  
 CONVTFL  BSS    1
          MX5    54 
          MX7    57 
          SB2    33B
          SA3    BLNKS
          SB3    7
          LX1    42 
          ZR     X1,SPNCC    DOUBLE CHECK THAT FL IS VALID
 SPNBB    BSS    0
          BX1    X7*X1
          SB3    B3-1 
          LX1    3
          SX4    X1 
          ZR     X4,SPNBB 
 SPNCC    BSS    0
          LX3    6
          SB3    B3-1 
          BX3    X5*X3
          SX2    X1+B2
          BX3    X3+X2
          BX1    X7*X1
          LX1    3
          NZ     B3,SPNCC 
          BX7    X3 
          EQ     CONVTFL
          TITLE  FINNUP  - FINAL MESSAGES AND CLEANUP (ABORT OR NOT)     21FEB77
**        FINNUP - FINISH UP (WHETHER ABORT OR NOT)                      CONTROL
* 
*         FINNUP WRITES A MESSAGE TO THE DAYFILE GIVING 
*         TOTAL SYSTEM SECONDS USED IN COMPILATION. 
*         AN EOR IS WRITTEN ON *OUTPUT* TO FLUSH THE BUFFER              SMPA105
*         UNLESS THE BUFFER IS EMPTY.                                    SMPA105
* 
  
 FINNUP   ENTRY. *                                                       CONTROL
          SX6    B0 
          RJ     EDITCTBP    EDIT COMPILE TIME BY PHASE AND PRINT MSG 
          SA6    TIMEUSE                                                 CONTROL
          SA1    TOTIMEA     GET TOTAL COMPILATION TIME.
          BX6    X1 
          SA6    BININ       ECT CALLING SEQUENCE 
          RJ     ECT         EDIT TOTAL COMPILATION TIME.                SMPA103
          LX6    12          REPOSITION TO 8HSSSS.MMM                    SMPA103
          SA6    TIMEUSE     STORE TIME INTO TOTIM MESSAGE. 
          MESSAGE TOTIM,,R   SEND TOTAL TIME MESSAGE TO DAYFILE.
                                                                         CONTROL
          SA1    =XOUTBUF    IF *OUTPUT* BUFFER IS EMPTY,                SMPA105
          ZR     X1,FINNUP   RETURN;                                     SMPA105
          WRITER =XF.OUT,,R  ELSE FLUSH *OUTPUT* BUFFER.                 SMPA105
  
          EQ   FINNUP        EXIT.                                       CONTROL
          TITLE  ADDCTBP -- ADD COMPILE TIME BY PHASE 
**        ADDCTBP -- ADD COMPILE TIME BY PHASE
* 
*         GET CURRENT TIME, COMPUTE ELAPSED TIME FROM THE PREVIOUS CALL,
*         AND ADD IT IN TO THE TIMES BEING ACCUMULATED FOR EACH PASS. 
* 
*         INPUT  -- A0 CONTAINS OFFSET INTO ACCUMULATED TIME TABLE
*                -- GLOBAL CELLS BPOLDTIM AND BPNEWTIM
*         OUTPUT -- UPDATED BPOLDTIM AND ACCUMULATED TIME TABLE 
  
 ADDCTBP  ENTRY. **          EXTERNAL ENTRY POINT 
          TIME   BPNEWTIM    GET THE CURRENT TIME 
          CNVTSEC BPNEWTIM   CONVERT IT TO BINARY TIME (RESULT IN X6) 
          SA1    BPOLDTIM    GET PREVIOUS TIME
          SA2    BPTIMES+A0  GET PREVIOUS ACCUMULATED TIME FOR PHASE
          SA6    A1          STORE CURRENT TIME 
          IX3    X6-X1       COMPUTE ELAPSED TIME FROM LAST CALL
          IX7    X2+X3       ADD ELAPSED TIME TO TABLE
          SA7    A2          STORE NEW ACCUMULATED TIME 
          EQ     ADDCTBP     **RETURN** 
          TITLE  EDITCTBP -- EDIT COMPILE TIME BY PHASES
**        EDITCTBP -- EDIT COMPILE TIME BY PHASES 
* 
*         FORMAT AND PRINT DAYFILE MESSAGES FOR COMPILATION TIME
*         SUMMARY MESSAGES BY PHASES. 
* 
*         INPUT  -- GLOBAL ACCUMULATED TIME TABLE 
*         OUTPUT -- TWO MESSAGES WRITTEN TO THE DAYFILE 
  
  
 EDITCTBP ENTRY. *           (LOCAL) ENTRY POINT
          SX6    BPTIMES     LOOP INDEX (ADDR) OVER TIME TABLE
          SX7    BPMSG1+1    LOOP INDEX (ADDR) OVER POSITION IN MESSAGE 
          SA6    TEMP1
          SA7    TEMP2
  
*         TOP OF LOOP TO FORMAT TIME IN MESSAGE 
* 
*         NOTE BECAUSE OF CALL TO ECT IT CANNOT BE AN IN REGISTER LOOP
 EBP1     BSS    0
          SA1    TEMP1
          SX6    X1+1        INCR TABLE POINTER 
          SA2    X1          GET ACCUMULATED TIME FOR THIS PHASE
          SA6    A1          UPDATE POINTER INTO TABLE
          BX7    X2 
          SA7    BININ       SET ACCUMULATED TIME IN APLIST FOR ECT 
          RJ     ECT         CONVERT TIME TO DISPLAY CODE (RESULT IN X6)
  
          LX6    18          FORMAT TIME INTO DAYFILE MESSAGE 
          SA1    TEMP2
          SX7    X1+1        INCR POINTER INTO MESSAGE
          SA2    X1          GET SINK WORD IN MESSAGE 
          MX0    42 
          BX6    X0*X6
          BX2    -X0*X2 
          BX6    X2+X6
          SA6    A2          STORE FORMATTED TIME IN MESSAGE
  
          SX5    X1-BPMSG1-3 CHECK MESSAGE BOUNDARY 
          NZ     X5,EBP2     JIF NOT ON BOUNDARY
          SX7    BPMSG2+1    INCREMENT PAST *-SYMPL-* WORD IN MSG2
  
 EBP2     BSS    0
          SA7    TEMP2       UPDATE POINTER INTO MESSAGE
          SX5    X7-BPMSG2-3 CHECK FOR END OF MESSAGES
          NG     X5,EBP1     JIF STILL HAVE TIMES TO FORMAT 
  
  
  
*         NOW CHECK FOR TEXT USAGE AND PUT CORRECT TEXT STATUS IN MSG 
  
          SA1    OPTION 
          BX2    X1 
          SA5    =10H   NO TEXT  ASSUME NO TEXT USAGE 
          LX2    59-1RZ      SHIFT TO Z-OPTION BIT
          NG     X2,EBP3     JIF Z-OPTION SET (SHOW TEXT USED)
          LX2    1           SHIFT TO Y-OPTION BIT
          PL     X2,EBP4     JIF Y-OPTION NOT SET 
 EBP3     BSS    0
          SA5    =10H   USETEXT  SHOW TEXT OPTION USED
  
 EBP4     BSS    0
          SA1    =XGENTXTF   FIND OUT IF IN TEXT GENERATION MODE
          ZR     X1,EBP5     JIF NOT IN TEXT GENERATION 
          SA5    =10H  TEXT GEN  SHOW IN TEXT GENERATION MODE 
  
 EBP5     BSS    0
          BX6    X5 
          SA6    BPMSG2+3    STORE TEXT STATUS IN MESSAGE 
  
          MESSAGE BPMSG1,,R 
          MESSAGE BPMSG2,,R 
  
          EQ     EDITCTBP    **RETURN** 
          TITLE  ECT - EDIT COMPILATION TIME                             SMPA103
**        ECT - EDIT COMPILATION TIME                                    SMPA103
*                                                                        SMPA103
*         ECT FORMATS THE COMPILATION TIME REQUIRED FOR EACH             SMPA103
*         COMPILATION UNIT AND FOR THE COMPILER RUN.  ECT INPUT IS       SMPA103
*         BINARY ELAPSED TIME IN APLIST CALSEQ.  ECT OUTPUT IS DISPLAY   SMPA103
*         CODE ELAPSED TIME IN THE FORMAT 10H  SSSS.MMM (SECONDS AND     SMPA103
*         MILLISECONDS) IN REGISTER X6.                                  SMPA103
*                                                                        SMPA103
*         CALLS BINDEC       (IN EDITSB)                                 SMPA103
*                                                                        SMPA103
                                                                         SMPA103
 ECT      ENTRY. *                                                       SMPA103
          SA1    CALSEQ      APLIST FOR BINDEC.                          SMPA103
          RJ     =XBINDEC    CONVERT BINARY TO DISPLAY CODE.             SMPA103
          SA1    BINOUT      GET RESULT FROM BINDEC 
          MX0    36          INSERT A DECIMAL POINT.                     SMPA103
          LX1    24                                                      SMPA103
          BX0    -X0*X1                                                  SMPA103
          LX0    6                                                       SMPA103
          SX7    1R.                                                     SMPA103
          BX0    X0+X7                                                   SMPA103
          LX0    18                                                      SMPA103
          LX1    18                                                      SMPA103
          MX7    42                                                      SMPA103
          BX7    -X7*X1                                                  SMPA103
          BX6    X7+X0                                                   SMPA103
                                                                         SMPA103
          SX3    2R          APPEND TWO LEADING BLANKS.                  SMPA103
          LX3    48                                                      SMPA103
          BX6    X3+X6                                                   SMPA103
                                                                         SMPA103
          LX6    42          REPLACE BLANKS IN THE MILLISECONDS FIELD    SMPA103
          MX0    12          WITH ZEROES.                                SMPA103
          BX1    X6*X0                                                   SMPA103
          BX1    X1-X3                                                   SMPA103
          SX2    2R00                                                    SMPA103
          LX2    48                                                      SMPA103
          NZ     X1,ECT1                                                 SMPA103
          BX6    -X0*X6                                                  SMPA103
          BX6    X6+X2                                                   SMPA103
          EQ     ECT2                                                    SMPA103
 ECT1     MX0    6                                                       SMPA103
          BX1    X1*X0                                                   SMPA103
          NZ     X1,ECT2                                                 SMPA103
          BX2    X2*X0                                                   SMPA103
          BX6    -X0*X6                                                  SMPA103
          BX6    X6+X2                                                   SMPA103
 ECT2     LX6    18                                                      SMPA103
          EQ     ECT         RETURN.                                     SMPA103
          TITLE  LOADIDP -- LOAD IDP CONDITIONALLY FROM LOCAL FILE
*** 
*         L O A D I D P            LOADS THE FTN IDP MODULE FOR 
*                                  PURPOSES OF INTERACTIVE DEBUGGING. 
* 
*         ENTRY  --  ENTRY IS MADE AFTER -CONCARD- AND BEFORE SYMPL 
*                DOES ANY OF ITS FL MANAGEMENT OR SYMTAB INITIALIZATION.
* 
*         EXIT   --  LFN -IDP- IS LOADED AND IF -IDP- IS A KNOWN ENTRY
*                POINT, IT ISSUES AN RJ TO IT TO START THINGS OUT.
*                ALL CONDITIONS ARE THE SAME AS BEFORE LOADING IDP, 
*                THAT IS, SYMPL IS NOT AWARE THAT ANYTHING HAS HAPPENED.
* 
*         CALLING SEQUENCE   --  LOADIDP
* 
*         THIS ROUTINE IS CALLED BEFORE SYMPL DOES ANY OF ITS OWN FL
*         MANAGEMENT STUFF.  HENCE, IT CAN DO ITS OWN FL MANAGEMENT.
* 
*         LOADIDP FIRST MEMS UP TO A FL LARGE ENOUGH TO LOAD IDP THEN 
*         MEMS DOWN TO THE ORIGINAL FL + THE LENGTH OF IDP. 
* 
*         BECAUSE THINGS CAN BE APPROXIMATE, EQUATES ARE USED TO SPECIFY
*         THE LENGTH OF IDP AND THE FL NEEDED TO LOAD.
* 
*         MEMORY MANAGEMENT IS A COMPLETE KLUDGE
*         -PLUG HHA IN LOADER BEGIN TBL IN ORDER TO GET IDP LOADED
*                ABOVE HHA. 
*         -RESTORE RA+65 AFTER THE LOAD IN ORDER TO GET THE SYMPL 
*                OVERLAYS LOADED IN THE PROPER PLACES 
*         -PUT LWA+1 OF IDP IN HHA IN ORDER TO FOOL THE SYMPL FL
*                MANAGEMENT ALGORITHM INTO THINKING EVERYTHING IS NORMAL
  
 .T       IFNE   TEST,0      IF DEBUG COMPILER
 #OS      IFNE   SYSNAME,SCOPE2 
 .C       IFEQ   CID,0       AND CID OFF;  ASSEMBLE LOADIDP 
  
          ENTRY  LOADIDP
  
 LOADIDP1 JP     *+1S17            WILL LATER CONTAIN A -RJ- TO -IDP- 
  
 LOADIDP  JP     *+1S17 
          SA1    =XINTOPS          SEE IF LOAD OF IDP REQUESTED 
          LX1    1R8-1             LOAD IDP OPTION IF *=8 
          PL     X1,LOADIDP        RETURN IF IDP NOT WANTED 
  
          RETURN ZZZZZ17,RECALL    RTN LDR FILE TO AVOID POSSIBLE LDR ER
          RJ     MEMUP             DO DETAILS OF GETTING MORE FL
          LOADER LOADIDPB          LOADIDPB IS REQUEST BLOCK
          RJ     MEMDOWN           HANDLE DETAILS OF REDUCING FL
          RETURN ZZZZZ17,RCL       RETURN LOADER"S FILE 
  
          SA1    LOADIDPC+1        IDP WORD IN LDREQ ENTRY MACRO
          MX0    42 
          BX2    X0*X1             UPPER 7 CHAR OF IDP WORD 
          NZ     X2,LOADIDP2       EXIT IF -IDP- ENTRY NOT FOUND
          LX1    30 
          SX6    1B                BUILD RJ TO -IDP-
          LX6    60-6 
          BX6    X1+X6             (X6) = RJ IDP
          SA6    LOADIDP1          SAVE FOR INITIAL CALL
          JP     LOADIDP1          NOW CALL IDP...GOOD HUNTING
  
 LOADIDP2 MESSAGE LOADIDPA,LOCAL,RCL  DIAGNOSE IDP NOT FOUND
          EQ      LOADIDP             RETURN AFTER ISSUING THE MSG
  
 LOADIDPA DATA   C* IDP NOT FOUND ON LFN -IDP-* 
 LOADIDPB LDREQ  BEGIN
          LDREQ  MAP,N             MAP,OFF
          LDREQ  PASSLOC,((LDOVL1,,,=XLDOVL1))
          LDREQ  PASSLOC,((LDOVL2,,,=XLDOVL2))
          LDREQ  PASSLOC,((OVLNAME,,,=XOVLNAME) 
          LDREQ  LOAD,(IDP/R) 
 LOADIDPC LDREQ  ENTRY,(IDP)
          LDREQ  END
  
 ZZZZZ17  FILEB  *-100,100         DUMMY FET FOR RETURNING LOADER FILE
          EJECT 
          ENTRY  OVLNAME           OVERLAY NAME FOR IDP 
          ENTRY  LDOVL1            RJ TO BRKPT TABLE CLEANUP IF IDP PRES
          ENTRY  LDOVL2            PERMANENT BRKPT IF IDP LOADED
  
 LENIDP   EQU    5000B             APPROX LENGTH OF IDP 
 FLINCR   EQU    24000B            FL INCR NEEDED TO LOAD IDP 
  
 OVLNAME  DATA   5LSYMPL           OVERLAY NAME USED BY IDP 
  
 OLDRA64  BSSZ   1                 RA+64 PRIOR TO LOADING IDP 
 OLDRA65  BSSZ   1                 RA+65 PRIOR TO LOADING IDP 
  
 FWAIDP   BSSZ   1                 FWA(IDP) USED TO CLEAR BRKPT TABLE 
 ORIGFL   BSSZ   1                 ORIGINAL FL BEFORE LOADING IDP 
 MEMUPA   BSSZ   1                 MEM REQUEST WORD FOR MEM UP
 MEMDOWNA BSSZ   1                 MEM REQUEST WORD FOR MEM DOWN
  
  
**
*         -PLUG HHA IN LOADER BEGIN BLOCK 
*         -SET THE FWA TO BE OF IDP IN -FWAIDP- 
*         -MEM UP TO GET ENOUGH FL TO LOAD IDP
*         -SAVE THE RA+65 FROM BEFORE LOADING IDP 
  
 MEMUP    EQ     *+1S17            MEM UP TO LOAD IDP 
          MEMORY CM,ORIGFL,R,0     GET ORIG FL
          SA1    104B              GET HHA
          SX7    X1                GET COPY OF HHA ALONE
          SX6    X1+FLINCR         BUMP FL UP TO HHA+FLINCR 
          SA7    FWAIDP            SAVE HHA AS FWA(IDP) TO CLEAR BRKPTS 
          LX6    30                POSITION FOR MEM REQUEST 
          SA6    MEMUPA 
          LX7    30                PLUG FWA OF LOAD (=CURRENT HHA)
          SA1    LOADIDPB          IN LOADER BEGIN BLOCK
          BX7    X7+X1
          SA7    A1 
          SA1    65B               PRESERVE RA+65 BEFORE THE LOAD 
          SA2    64B               ALSO PRESERVE RA+64
          BX6    X1 
          BX7    X2 
          SA6    OLDRA65
          SA7    OLDRA64
          MEMORY CM,MEMUPA,R
          EQ     MEMUP
  
  
**
*         -RESTORE RA+65 TO CONDITION FROM PRIOR TO LOAD OF IDP 
*         -MEM DOWN TO ORIG FL + LENGTH OF IDP
*         -PLACE LWA+1 OF IDP IN HHA
  
 MEMDOWN  EQ     *+1S17            RESTORE FL TO ORIGFL+LENGTH(IDP) 
          SA1    ORIGFL 
          AX1    30                SHIFT TO DO COMPUTATION/CLEAR CMPLT
          SX6    X1+LENIDP
          LX6    30                POSITION FOR MEM REQUEST 
          SA6    MEMDOWNA 
          MEMORY CM,MEMDOWNA,R
          SA1    65B               GET LWA+1 OF LOAD
          SX6    X1 
          SA6    104B              AND STUFF IT IN HHA
          SA1    OLDRA65           RESTORE OLD RA+65 (WHOLE WORD) 
          SA2    OLDRA64           AND RESTORE OLD RA+64
          BX6    X1 
          BX7    X2 
          SA6    65B
          SA7    64B
          EQ     MEMDOWN
 .C       ENDIF 
 #OS      ENDIF 
 .T       ENDIF 
          TITLE  SYMLOAD - LOAD AND EXECUTE OVERLAY 
**        SYMLOAD - LOAD AND EXECUTE OVERLAY
* 
*         THIS ROUTINE MAKES AN LDV CALL TO LOAD AN OVERLAY THEN
*         EXECUTES IT 
* 
*         CALLING SEQUENCE IS ALWAYS THROUGH LOAD MACRO 
* 
*         INPUT-
*                X1= NAME OF OVERLAY TO LOAD
*                X2= ADDRESS AT WHICH TO LOAD OVERLAY 
*                X3= OVERLAY LEVEL NUMBERS LEFT-JUSTIFIED AND ZERO- 
*                    FILLED 
* 
  
          ENTRY  SYMLOAD
 SYMLOAD  BSS    0
          SB1    1
  
*         SET UP SECOND WORD OF PARAMETER AREA
  
          SA4    LDMASK      N, U, V, E AND LWA FIELDS
          IX6    X4+X2       INSERT FWA 
          IX6    X6+X3       INSERT OVERLAY LEVEL NUMBERS (L1, L2)
          SA6    LOAD2
          BX7    X1 
          SA7    A6+B1       PUT OVLNAME IN 3RD WORD OF PARAMETER AREA
          SA7    77B         SAVE OVLNAME IN LOW CORE FOR DUMPS.
          LOADREQ LOAD,RCL
  
*         IF NO ERRORS- GO EXECUTE OVERLAY, ELSE PUT OUT MESSAGE AND
*         ABORT 
  
          SA2    LOAD 
          MX6    42 
          BX6    X6*X2       MASK OFF STATUS BITS 
          SA3    A2+B1
          SB7    X3          ADDRESS OF ENTRY POINT 
          MX7    2
          LX7    36+2 
          BX5    X3*X7       CHECK FOR ERRORS 
          NZ     X5,LDERR 
          SA6    A2          RESTORE FIRST WORD OF LOADER CALL
 .T       IFNE   TEST,0            IF DEBUG COMPILER
 #OS      IFNE   SYSNAME,SCOPE2 
          SX7    B7                PRESERVE ENTRY PT ACCROSS IDP CALLS
          SA7    SAVEPT 
 .C       IFNE   CID,0       ENTRY PT NEEDED SAVED FOR CID TOO
          SA1    DBVECT      TELL CID THAT NEW OVERLAY LOADED 
          RJ     =XDBUG.OM
 .C       ELSE
  
*         CALL IDP FOR CLEARING BREAK TABLE BEFORE UNLOADING THE OVERLAY
* 
*         ALWAYS CLEAR THE BREAK TABLE EXCEPT FOR (0,0) 
*         --WIPE OUT ANY BREAKPOINTS SET IN NON-(0,0) OVERLAYS. 
* 
*         THEN CALL IDP TO CHECK IF WE SHOULD BREAK IN THIS OVERLAY 
* 
*         LDOVL1/LDOVL2 CANNOT BE RELIED UPON TO PRESERVE REGS, SO
*         B7 IS SAVED THEN RESTORED 
  
          SA4    LWA00             CLEAR BREAK TABLE FROM LWA(0,0)
          SA5    FWAIDP            TO FWA(IDP)
 LDOVL1   NO                       RJ TO BRKPT TBL CLEANUP ROUTINE
 +        BSS    0                 FORCE FULL WORD OF NOP-S 
  
          SA1    77B               COPY OVERLAY NAME TO CELL FOR IDP
          BX6    X1 
          SA6    OVLNAME
 LDOVL2   NO                       HARD BREAKPOINT PLUGGED BY IDP 
 +        BSS    0                 FORCE FULL WORD OF NOP-S 
  
  
*         RESTORE THE ENTRY POINT IF IN DEBUG MODE THEN BRANCH TO IT. 
  
 .C       ENDIF 
          SA1    SAVEPT            RESTORE B7 WITH ENTRY POINT
          SB7    X1 
 #OS      ENDIF 
 .T       ENDIF 
          JP     B7          GO EXECUTE OVERLAY 
          SPACE  4
*         LDMASK HAS BITS SET FOR THE N, U, V AND E FIELDS OF PARAMETER 
*         AREA.  THESE BITS ARE CHANGED BY CONTROL PRIOR TO THE FIRST 
*         LOAD TO REFLECT THIS COMPILATION.  THE LWA FIELD IS ALSO SET
*         (BY CONCARD)
  
          ENTRY  LDMASK 
 LDMASK   BSS    0
          ECHO   2,P=(46,42,41) 
          POS    P+1
          VFD    1/1
          VFD    *P/0 
          SPACE  4
*         ERROR IN LOADING OVERLAY- PUT OUT ERROR MESSAGE AND ABORT 
  
 LDERR    BSS    0
          MESSAGE (=C* -SYMPL-  BAD LOADER CALL*),,R
          RJ     ABTEND 
          TITLE  DIVMESG - OUTPUT SEQUENCING MESSAGES 
 .T       IFNE   TEST,0 
**        DIVMESG - OUTPUT SEQUENCING MESSAGES FOR TEST COMPILER
* 
*         THIS ROUTINE OUTPUTS A MESSAGE DENOTING THE PASS OF THE 
*         COMPILER THAT IS ABOUT TO BE EXECUTED.  CALLS ARE GENERALLY 
*         MADE FROM THE LOAD MACRO. 
* 
*         CALLING SEQUENCE
*                SX4   FWA OF MESSAGE 
*                RJ   =XDIVMESG 
*         MESSAGES ARE 3 WORDS LONG 
* 
  
 DIVMESG  ENTRY. ** 
          SX7    X4 
          SA7    PARMMES     STORE ADDRESS OF MSG IN PARM VECT FOR PTLST
          SA2    X4+1        (GET SECOND WORD OF MESSAGE) 
          SA3    ETMSG
          MX6    42 
          BX6    X6*X2
          BX6    X6+X3       INSERT *ET=* IN MESSAGE
          SA6    A2 
          TIME   TEMTIM      GET CURRENT ELAPSED TIME 
          CNVTSEC TEMTIM     CONVERT TIME TO BINARY VALUE (RESULT IN X6)
          SA6    BININ       STORE RESULT IN APLIST TO BINDEC 
          RJ     ECT         CONVERT TIME TO DISPLAY CODE 
          SA1    PARMMES     SET UP CALL TO PTLST 
          SA6    X1+2        ...BUT FIRST STORE DISPLAY CODE TIME IN MSG
          RJ     =XPTLSTV    NOW PRINT THE MESSAGE
          EQ     DIVMESG     RETURN 
          SPACE  4
*         PARM VECTOR FOR CALL TO PTLST 
  
 PARMMES  VFD    60/0        ADDR OF MESSAGE (PLUGGED DYNAMICALLY)
          VFD    60/CNTMES   LENTGH OF MESSAGE
 CNTMES   DATA   4
 BUFINIT  DATA   0
          EQ     BUFINIT
          TITLE  CONVERT - CONVERT BINARY TO DISPLAY-CODED OCTAL
**        CONVERT - CONVERT BINARY TO DISPLAY CODED OCTAL 
* 
*         CONVERTS BINARY NUMBER IN X1 TO DISPLAY CODED OCTAL STORING 
*         RESULT IN TWO WORDS BEGINNING AT ADDRESS SPECIFIED BY A0. 
* 
  
 CONVERT  ENTRY. ** 
          SB1    1
          SA4    X1 
          SB7    B1 
          SB4    10 
          SB5    33B
 CONX1    BSSZ   0
          MX1    57 
          SB6    B4 
          MX7    0
 CONX2    BSSZ   0
          BX2    -X1*X4      NEXT 3 BITS
          AX4    3
          SX3    X2+B5
          SB6    B6-B1
          BX7    X7+X3       OR INTO ACCUMULATOR
          LX7    54          RIGHT SHIFT 6 BITS 
          NE     B6,B0,CONX2
          SA7    A0+B7       10 DISPLAY DIGITS
          SB7    B7-B1
          GE     B7,B0,CONX1
          EQ     CONVERT
 .T       ENDIF 
          TITLE  MORESPC - INCREASE FIELD LENGTH
**        MORESPC - INCREASE FIELD LENGTH 
* 
*         GET SCM OR LCM DEPENDING ON TEXT PARAM SYMTBLV WHICH CONTROLS 
*         MICRO "SYMRES" IN COMSTUF.
*         ENTRY - X1=0 TO SET FL TO INITIAL VALUE FOR THE FIRST COMPILE. CONTROL
*                  PROVIDES CORE FOR A MINIMAL COMPILE.                  CONTROL
*                - X1 NONZERO (I.E. ANY CALL FROM SYMPL WITH ONE PARM)   CONTROL
*                  (EXCEPT PASSING A BASED ARRAY BASED AT ZERO).         CONTROL
*                  TO INCREASE THE FL . . .                              CONTROL
*                SYMXTRA (IN TROLCOM) CONTAINS THE AMT TO INCREASE FL BY CONTROL
*         EXIT - X6 (FUNCTION VALUE) = NEW FL-1.                         CONTROL
* 
  
MORESPC   ENTRY. **                                                      CONTROL
          SA2    SYFL        CURRENT FL.
          SA3    SYMXTRA     FL INCREMENT.
          IX6    X2+X3       SYFL PLUS SYMXTRA = NEW FL.
          NZ     X1,MOR2     JUMP IF NOT INITIALIZATION CALL. 
          SA4    SYSTART     SYMBOL TABLE ORIGIN. 
          SX6    X4+SYMBAS   TENTATIVE INITIAL SYMBOL TABLE SIZE. 
          IX5    X2-X6       SYFL MINUS TENTATIVE.
          NG     X5,MOR1     IF SYFL GQ TENTATIVE 
          SX6    X2          USE SYFL INSTEAD OF TENTATIVE. 
 #LEV     IFEQ   SYMTBLV,0   FOR SCM..... 
 MOR1     SX6    X6+77B      ROUND FL UP TO MULTIPLE OF 100B. 
          AX6    6
          LX6    6           NEW FL (FOR INITIALIZATION). 
 #LEV     ELSE               FOR LCM..... 
 MOR1     SX6    X6+777B     ROUND FL UP TO MULTIPLE OF 1000B.
          AX6    9
          LX6    9           NEW FL (FOR INITIALIZATION). 
 #LEV     ENDIF 
  
 MOR2     SA3    SYMAX       MAX FL.
          ZR     X1,MOR3     JUMP IF INITIALIZATION CALL. 
          IX4    X2-X3       CURRENT FL MINUS MAX FL. 
          ZR     X4,ABORTFL  MAX FL ALREADY ACQUIRED -- ABORT.
 MOR3     IX7    X3-X6       MAX FL MINUS NEW FL. 
          PL     X7,MOR4     IF NEW LQ MAX REQUEST NEW FL 
          SX6    X3          ELSE REQUEST MAX FL UNLESS INITIALIZATION
          ZR     X1,ABORTFL  THEN MAX FL INSUFFICIENT -- ABORT. 
 MOR4     SA6    SYFL        UPDATE CURRENT FL. 
          NZ     X1,MOR5     JUMP IF NOT INITIALIZATION CALL
          SA6    STRTFLD     ELSE SAVE ORIGINAL SYMBOL TABLE FL.
  
 MOR5     LX6    30          REQUEST FL FOR SYMBOL TABLE. 
          SA6    ANS                                                     CONTROL
          MEMORY  "SYMRES",ANS,R                                         CONTROL
          SA1    SYFL                                                    CONTROL
          SX6    X1-1        RETURN CURRENT FL-1. 
          EQ     MORESPC                                                 CONTROL
  
 ABORTFL  SA1    BLNKS
          BX6    X1 
 #LEV     IFEQ   SYMTBLV,0
          SA6    SCMLN       SET $REQUIRED$ TO BLANKS IN SCMLN. 
          MESSAGE (=C* -SYMPL-  INSUFFICIENT FL*),,R
 #LEV     ELSE
          SA6    LCMLN       SET $REQUIRED$ TO BLANKS IN LCMLN. 
          MESSAGE (=C* -SYMPL-  INSUFFICIENT LCM FL*),,R
 #LEV     ENDIF 
          SA1    ABORTCL
          RJ     =XSYMABT                                                CONTROL
  
*         JOVABT WILL CALL ABTEND TO ABORT THE COMPILER RUN UNLESS
*         $BEGIN-$END CODE IN JOVABT IS COMPILED, IN WHICH CASE.....
  
          RJ     ABTEND      CALL ABTEND FROM HERE. 
                                                                         21FEB77
 J800     EQU    800         SYMABT DIAGNOSTIC 800                       CONTROL
 ABORTCL  VFD    60/J800                                                 CONTROL
          VFD    60/=C*INSUFFICIENT FIELD LENGTH(MORESPC IN CONTROL)*    CONTROL
          VFD    60/=45                                                  CONTROL
          TITLE DECLARATIONS                                             CONTROL
*                                                                        CONTROL
          ENTRY  OPTION 
 OPTION   BSS    0           OPTIONS FOR CURRENT COMPILATION
          ECHO   2,P=(19,2) 
          POS    P+1         S,B AND L OPTIONS DEFAULT
          VFD    1/1
          VFD    *P/0 
 INTOPS   ENTRY. 0                   INTERNAL COMPILER OPTIONS
*                                                                        CONTROL
 .T       IFNE   TEST,0 
 TEMTIM   DATA   0
 OLDCP    DATA   0              UPDATED WITH NEW CP TIME
 CPTIME   DATA   20H
 ETMSG    DATA   3RET=
 MES40    DIS    0,+*CALL EDITOR             CLOCK+ 
 MESNAME  DIS    0,+ PROGRAM NAME       XXXXXXX + 
 MSGVECT  VFD    60/MESNAME  PARAMETER VECTOR FOR CALLING *PTLSTV*
          VFD    60/=3       WORD 2 -- NUMBER OF WORDS IN MESSAGE 
 .T       ENDIF 
*                                                                        CONTROL
 NDECKS   CON    0           HOW MANY DECKS (MODULES).
 LWAX0    ENTRY. 0           LWA OF (X,0) OVERLAY 
*         SKELETON FOR PROGRAM COMPILED MESSAGE 
  
 CONMESA  DATA   10H -SYMPL-
 CONMES   DATA   10H
          DATA   10L COMPILED 
          DATA   10HSSSS.MMM                                             CONTROL
          CON    0           LINE TERMINATOR                             CONTROL
                                                                         CONTROL
  
*         APLIST FOR BINDEC CALL
*         BINDEC INPUT VALUE MUST BE PLUGGED IN *BININT* BEFORE CALL
  
 CALSEQ   VFD    60/BINOUT   BINDEC OUTPUT (CHARACTER)
          VFD    60/=0       FBYT OF RESULT 
          VFD    60/BININ    BINDEC INPUT (BINARY)
          VFD    60/=7       NUMBER OF CHARACTERS IN RESULT 
 BININ    BSSZ   1           BINDEC INPUT PARAMETER (BINARY)
 BINOUT   BSSZ   1           BINDEC OUTPUT PARAMETER (CHARACTER)
  
 TMESS    DATA   H* COMPILATION TIME               SECONDS* 
 TMESG    VFD    60/TMESS 
          VFD    60/=4
  
 PGNAIM   ENTRY. 6LMAINPG            DEFAULT OBJECT MODULE NAME 
  
*         SYSTEMN IS USED BY PF12 TO DETERMINE THE LOCATION (SCM OR LCM)
*         OF LEVEL 2 DATA.  CURRENTLY THIS IS DONE AT COMPILER
*         GENERATION TIME (BASED ON OPERATING SYSTEM USED TO BUILD
*         COMPILER) FOR ALL OPERATING SYSTEMS AND MODIFIED AT EXECUTION 
*         TIME (TO REFLECT MACHINE ACTUALLY EXECUTING ON) ON NOS/BE 
* 
*         NOTE THAT SYSTMN WILL BE SET TO 2 (SCOPE 2) DYNAMICALLY TO   *
*         DEFINE LEVEL 2 DATA IN LCM.  THIS CASE DOES NOT MEAN SCOPE 2 *
*         SYSTEM SINCE IT IS SET TO INDICATE THE PRESENCE OF DIRECTLY  *
*         ADDRESSABLE LCM, FOR INSTANCE, ON A CY176.                   *
  
 SYSTEMN  ENTRY. SYSNAME
  
  
*         SKELETON FOR OPTIONS COMPILED UNDER MESSAGE 
  
 OPLSTA   DATA   30H COMPILED UNDER OPTIONS 
          ENTRY  OPLST
 OPLST    DATA   30H
 OPTMSG   VFD    60/OPLSTA
          VFD    60/=6
  
          ENTRY  OVCARD 
 OVCARD   BSSZ   8           IMAGE OF OVERLAY DIRECTIVE (IF ONE)
  
*         APLIST FOR FIRST CALL TO GTSRC OF NEW (NOT FIRST) PROGRAM 
  
 GTSRCPL  VFD    60/SORCARD 
          VFD    60/INPTEOF 
  
*         APLIST FOR FIRST CALL TO GTSRC (FIRST CALL OF COMPILATION)
  
 NOINB    VFD    60/SORCARD 
          VFD    60/NOINPUT 
  
          USE    /CRDCOM/ 
  
*         /CRDCOM/ IS DEFINED AND INITIALIZED HERE. 
*         /CRDCOM/ IS USED BY INIT15 AND INIT16.
*         /CRDCOM/ IS USED BY SYMPL ROUTINES VIA *COMDECK CRDCOM. 
  
 SORIMAG  BSS    1           LINE NUMBER INITIALIZED BY CONTROL.
          DATA   10H
 SORCARD  BSS    8           SOURCE CARD IMAGE. 
          DATA   10H
          DATA   C+        + ZERO-BYTE LINE TERMINATOR. 
  
          USE    *
  
 DCNTTOT  ENTRY. 0           COUNT OF UNSUPP+SUPP DIAG PER MODULE        CONTROL
 EL       ENTRY. 3           1ST DEFAULT FOR ERROR LEVEL PARAMETER IS W  CONTROL
 ET       ENTRY. 5           1ST DEFAULT FOR ERROR TERM PARAMETER IS C   CONTROL
 HMEL     ENTRY. 0           HIGHEST MAX ERROR LEVEL ISSUED BY PASS 1 
                             FOR THE COMPILER RUN.
*         ERRCNTS IS XREFED IN DIAG, DIAGIV, AND ZCEXEC                  CONTROL
          ENTRY  ERRCNTS                                                 CONTROL
 ERRCNTS  BSSZ   4                 ERROR COUNTS                          CONTROL
 BLNKS    DATA   10H
 SCMLN    DATA   10H REQUIRED 
 SCMUSED  DATA   10H
          DATA   H$ WORDS SCM$                                           21FEB77
 TOTIM    DATA   10H -SYMPL-           DAYFILE MESSAGE -- TOTAL CP TIME 
          DATA   10HTOTAL CP S         FOR COMPILER RUN.
          DATA   10HECONDS  = 
 TIMEUSE  DATA   10H
          CON    0           (LINE TERMINATOR)                           21FEB77
                                                                         21FEB77
  
  
*         DATA FOR TIME BREAKOUT BY PHASES DAYFILE MESSAGES 
  
 BPTIMES  BSSZ   BP.MAX      ACCUMULATED TIME BY PHASE TABLE
 BPOLDTIM BSS    1           PREVIOUS TIME (IE, OLD TIME) 
 BPNEWTIM BSS    1           RETURN WORD FOR TIME CALL (IE, NEWEST TIME)
 TEMP1    BSS    1           TEMP (PRIMARILY FOR EDITCTBP)
 TEMP2    BSS    1           TEMP (PRIMARILY FOR EDITCTBP)
 BPMSG1   DATA   C* -SYMPL-  XXX.XXXUSEXXX.XXXPS1XXX.XXXCG1*
 BPMSG2   DATA   C* -SYMPL-  XXX.XXXCG2XXX.XXXMAP  TEXT MSG*
  
  
 TSTART   BSSZ   1           STARTING TIME OF COMPILATION 
 TSTOP    BSSZ   1           ENDING/TOTAL TIME OF COMPILATION 
 TOTIMEA  BSSZ   1           TOTAL TIME OF STACKED COMPILATIONS 
  
 SCMOUT   VFD    60/SCMLN 
          VFD    60/=3
  
 #LEV     IFEQ   SYMTBLV,2
 LCMLN    DATA   10H REQUIRED 
 LCMUSED  DATA   10H
          DATA   10H WORDS LCM
 LCMOUT   VFD    60/LCMLN 
          VFD    60/=3
 #LEV     ENDIF 
  
 BLKMSGA  VFD    60/BLKMM 
          VFD    60/=1
 BLKMM    DATA   10H
          BSSZ   1
  
 GENTXTF  ENTRY. 0           SYMPL TEXT GENERATION ACTIVATION FLAG. 
                             (SET BY PF12 IF *CONTROL STEXT;* OCCURS) 
 YAT.ER   BSS    1           YTEXT ACCESS TABLE POINTER.
          ENTRY  YAT
 YAT      DATA   -1          YTEXT ACCESS TABLE.
          BSS    135         TABLE LENGTH = 136 WORDS WITH ALL
          REPI   S/YAT,C/135,B/1    ENTRIES INITIALIZED TO -1.
          ENTRY  ZNT
 ZNT      DATA   -1          Z=LIB NAME TABLE.
 SAFREE   ENTRY. 677777B
 .T       IFNE   TEST,0      IF DEBUG COMPILER
 .C       IFNE   CID,0       AND IF CID;
 DBVECT   VFD    60/=0       PARAM FOR CID ENTRY DBUG.OM
 .C       ENDIF 
 SAVEPT   BSSZ     1
 .T       ENDIF 
          END    CONTROL
