*DECK,TURNON
      SUBROUTINE TURNON 
C 
C  THIS SUBROUTINE TRAVERSES AN OPTIONS LIST AND TURNS ON ALL LEGAL 
C  OPTIONS THAT IT FINDS.  IT ALSO SETS UP THE ERROR FIELD IN THE FIRST 
C  WORD OF THE ASSOCIATED B-CELL, IF NECESSARY. 
C  ENTRY: DFOPL = THE ADDRESS OF THE BEGINNING OF THE OPTIONS LIST TO BE
C                 TRAVERSED 
C         P ADD = 0 IF INTERSPERSED OR FROM BUGCON
C         P ADD = 1 IF IN PACKET
C         NEXT = THE ADDRESS OF THE -FROM- BOUND IN THE ASSOCIATED
C                B-CELL 
C 
*CALL LDBGCOM 
          IF(MISFLAG.LT.0 .OR. DFNOGO.LT.0) RETURN
      IF ((P ADD .EQ. 0).OR.(DEBUG(SAREA+NEXT+1).GE.0)) GO TO 100 
C 
C  HERE IF -T0- FIELD OCCURRED BEFORE -FROM- FIELD
C 
      DEBUG(SAREA+NEXT-1) =(DEBUG(SAREA+NEXT-1).AND.SHIFT(MASK(57),20)) 
     ,    .OR. SHIFT(3, 20) 
      DEBUG(SAREA+NEXT) = DEBUG(SAREA+NEXT) .OR. MASK(1)
      RETURN
C 
C  HERE TO DETERMINE WHICH OPTION TO TURN ON
  100 MULT = 5
   10 CALL GET OUT
      IF (OH .EQ. 0) RETURN 
      IF ( OH .EQ. MINZERO) GO TO 30
      GO TO (1000, 2000, 3000, 4000, 5000, 6000, 7000, 8000) OH 
C 
C  HERE IF THE ARRAYS OPTION IS TO BE TURNED ON 
C 
 1000 CALL GET OUT
      IF ( (OH .EQ. 0) .OR. (OH .EQ. MINZERO) ) GO TO 1020
C  HERE IF TURNING ON INDIVIDUAL ARRAYS 
 1080 SYMTABB = SSYMTAB - OH - 1
      IF ( (TYPE(DEBUG(SYMTAB B)) .EQ. DBGTYPE(1)) .AND.
     ,    BITOFF(DEBUG(SYMTAB B),IFBIT(1)) ) GO TO 1030 
      IF (BITON(DEBUG(SSYMTAB - OH),DIMBIT(1)) .AND.
     ,     (TYPE(DEBUG(SYMTAB B)) .LT. CONTYPE(1))    )     GO TO 1030
      IF (PHSFLAG .NE. 0) GO TO 1030
      TEMP = FSTRIP(DEBUG(SSYMTAB - OH))
      IF (DRLELT(TEMP) .EQ. DRLELT(VALUE) ) TEMP = DEBUG(DBGPROG) 
      WRITE(DBGOUT, 1040) TEMP
 1040 FORMAT( * AT THIS POINT THE ARRAYS OPTION IS ILLEGAL FOR *, A7) 
      GO TO 1050
 1030 ASHIFT = 8
      CALL SETARR,RETURNS(1050) 
      DEBUG(SYMTAB B) = DEBUG(SYMTAB B) .OR. PLACE(NOTBIT(1)) .OR.
     ,   PLACE(ACBIT(1)) .OR. SHIFT(AASI,19)
      DEBUG(SAASI+AASI) = DEBUG(SAASI+AASI) + 1 
 1050 CALL GET OUT
      IF ( (OH .NE. 0) .AND. (OH .NE. MINZERO) ) GO TO 1080 
      IF (OH.EQ.0) 10, 30 
C 
C  HERE IF ALL ARRAYS ARE TO BE TURNED ON 
C 
 1020 ALLARR = ALLARR + 1 
      IF (OH .EQ. 0) 10, 30 
C  HERE IF THE CALLS OPTION IS TO BE TURNED ON
C 
 2000 CALL GET OUT
      IF ( (OH .EQ. 0) .OR. (OH .EQ. MINZERO) ) GO TO 2010
C 
C  HERE IF TURNING ON INDIVIDUAL CALLS
C 
 2050 SYM TAB B = SSYMTAB-OH-1
      IF ( TYPE(DEBUG(SYMTAB B)) .EQ. DBGTYPE(1))           GO TO 2022
      IF (BITON(DEBUG(SYMTAB B),EXTBIT(1)) .AND.
     ,    BITOFF(DEBUG(SSYMTAB - OH),FUNCBIT(1)) .AND.
     ,    BITOFF(DEBUG(SYMTAB B),LASTBIT(1)) ) GO TO 2020 
 2024 TEMP = FSTRIP(DEBUG(SSYMTAB - OH))
      IF (DRLELT(TEMP) .EQ. DRLELT(VALUE) ) TEMP = DEBUG(DBGPROG) 
      WRITE(DBGOUT, 2030) TEMP
 2030 FORMAT( * AT THIS POINT THE CALLS OPTION IS ILLEGAL FOR *, A7)
      GO TO 2040
 2022 IF (BITOFF(DEBUG(SYMTAB B),NOTBIT(1))  ) GO TO 2020 
      IF (BITOFF(DEBUG(SYMTAB B),IFBIT(1)) .OR. 
     ,    BITON(DEBUG(SYMTAB B),SFBIT(1))  .OR. 
     ,    BITON(DEBUG(SYMTAB B),LASTBIT(1)) ) GO TO 2024
 2020 DEBUG(SYMTAB B) = DEBUG(SYMTAB B) .OR. PLACE(NOTBIT(1)) .OR.
     ,    PLACE(IFBIT(1)) .OR. PLACE(ACBIT(1)) + INC FCNT(1)
 2040 CALL GET OUT
      IF ( (OH .NE. 0) .AND. (OH .NE. MINZERO) ) GO TO 2050 
      IF (OH.EQ.0) 10, 30 
C 
C  HERE IF ALL CALLS ARE TO BE TURNED ON
C 
 2010 ALLCALL = ALLCALL + 1 
      IF (OH .EQ. 0) 10, 30 
C  HERE IF THE FUNCS OPTION IS TO BE TURNED ON
C 
 3000 CALL GET OUT
      IF ( ( OH .EQ. 0) .OR. (OH .EQ. MINZERO) ) GO TO 3010 
C 
C  HERE IF TURNING ON INDIVIDUAL FUNCS
 3050 SYMTAB B = SSYMTAB-OH-1 
      IF ( TYPE(DEBUG(SYMTAB B)) .EQ. DBGTYPE(1))      GO TO 3022 
      IF (BITON(DEBUG(SYMTAB B),EXTBIT(1)) .AND.
     ,    BITON(DEBUG(SSYMTAB - OH),FUNCBIT(1)) .AND. 
     ,    BITOFF(DEBUG(SYMTAB B),LASTBIT(1)) ) GO TO 3020 
      IF  (BITOFF(DEBUG(SSYMTAB-OH),DIMBIT(1)) .AND.
     ,    BITOFF(DEBUG(SSYMTAB-OH),COMBIT(1))  .AND.
     ,     BITOFF(DEBUG(SYMTAB B),ASFBIT(1))  .AND. 
     ,     BITOFF(DEBUG(SSYMTAB-OH),EQUBIT(1)))  GO TO 3020 
 3024 TEMP = FSTRIP(DEBUG(SSYMTAB - OH))
      IF (DRLELT(TEMP) .EQ. DRLELT(VALUE) ) TEMP = DEBUG(DBGPROG) 
      WRITE(DBGOUT, 3030) TEMP
 3030 FORMAT( * AT THIS POINT THE FUNCS OPTION IS ILLEGAL FOR *, A7)
      GO TO 3040
 3022 IF (BITOFF(DEBUG(SYMTAB B),NOTBIT(1)) ) GO TO 3020
      IF (BITOFF(DEBUG(SYMTAB B),IFBIT(1)) .OR. 
     ,        BITON(DEBUG(SYMTAB B),ACBIT(1)) .OR.
     ,        BITON(DEBUG(SYMTAB B),LASTBIT(1)) ) GO TO 3024
 3020 DEBUG(SYMTAB B) = DEBUG(SYMTAB B) .OR. PLACE(NOTBIT(1)) .OR.
     ,    PLACE(IFBIT(1)) .OR. PLACE(SFBIT(1)) + INC FCNT(1)
 3040 CALL GET OUT
      IF ( (OH .NE. 0) .AND. (OH .NE. MINZERO) ) GO TO 3050 
      IF (OH.EQ.0) 10, 30 
C 
C  HERE IF ALL FUNCS ARE TO BE TURNED ON
C 
 3010 ALLFUNC = ALLFUNC + 1 
      IF (OH .EQ. 0) 10, 30 
C 
C  HERE IF THE GOTOS OPTION IS TO BE TURNED ON
C 
 4000 CALL GET OUT
      GO TOS FL = GO TOS FL + 1 
      IF (OH.EQ.0) 10, 30 
C 
C  HERE IF THE NO GO OPTION IS TO BE TURNED ON
C 
 5000 NOGOFLG = -1
      CALL GET OUT
      IF (OH.EQ.0) 10, 30 
C 
C  HERE IF THE STORES OPTION IS TO BE TURNED ON 
C 
 6000 CALL GET OUT
      IF (OH.EQ.0) GO TO 10 
      IF (OH .EQ. MINZERO) GO TO 30 
      SYMTAB B = SSYMTAB-OH-1 
      IF ( (TYPE(DEBUG(SYMTAB B)) .EQ. DBGTYPE(1)) . AND. 
     ,    BITOFF(DEBUG(SYMTAB B),IFBIT(1)) ) GO TO 6010 
      IF ( ( TYPE(DEBUG(SYMTAB B)) .LT. CONTYPE(1)) .AND. 
     ,    BITOFF(DEBUG(SYMTAB B),EXTBIT(1)) .AND. 
     ,    BITOFF(DEBUG(SYMTAB B),ASFBIT(1)) ) GO TO 6010
      TEMP = FSTRIP(DEBUG(SSYMTAB - OH))
      IF (DRLELT(TEMP) .EQ. DRLELT(VALUE) ) TEMP = DEBUG(DBGPROG) 
      WRITE(DBGOUT, 6020) TEMP
 6020 FORMAT( * AT THIS POINT THE STORES OPTION IS ILLEGAL FOR *, A7) 
      GO TO 6000
 6010 ASHIFT = 38 
      CALL SETARR, RETURNS(6000)
      DEBUG(SYMTAB B) = DEBUG(SYMTAB B) .OR. PLACE(NOTBIT(1)) .OR.
     ,   PLACE(SFBIT(1))
     ,    .OR. SHIFT(AASI, 19)
      DEBUG(SAASI+AASI) = DEBUG(SAASI+AASI)+SHIFT(1,30) 
      GO TO 6000
C 
C  HERE IF THE STORES OPTION WITH RELATIONAL OPERATORS IS TO BE TURNED
C                                 ON
C 
 7000 MULT = 0
      CALL GET OUT
      IF (OH.EQ.0) GO TO 10 
      IF (OH .EQ. MINZERO) GO TO 30 
      SYMTAB B = SSYMTAB-OH-1 
      IF ( (TYPE(DEBUG(SYMTAB B)) .EQ. DBGTYPE(1)) .AND.
     ,    BITOFF(DEBUG(SYMTAB B),IFBIT(1)) .AND.
     ,    BITOFF(DEBUG(DFOPL),LST S BIT(1)) ) GO TO 7010
      IF ( (TYPE(DEBUG(SYMTAB B)) .LT. CONTYPE(1)) .AND.
     ,    BITOFF(DEBUG(SYMTAB B),ASFBIT(1)) .AND. 
     ,    BITOFF(DEBUG(SYMTAB B),EXTBIT(1)) .AND. 
     ,    BITOFF(DEBUG(DFOPL),LST S BIT(1)) ) GO TO 7010
 7025 TEMP = FSTRIP(DEBUG(SSYMTAB - OH))
      IF (DRLELT(TEMP) .EQ. DRLELT(VALUE) ) TEMP = DEBUG(DBGPROG) 
      WRITE(DBGOUT, 7020) TEMP
 7020 FORMAT( * AT THIS POINT THE STORES OPTION WITH RELATIONAL OPERATOR
     ,S IS ILLEGAL FOR *, A7) 
      GO TO 7000
 7010 ASHIFT = 10 
      CALL SETARR, RETURNS(7000)
      IF (P ADD .EQ. 0) GO TO 7060
      IF (SHIFT(DEBUG(DFOPL   ),59-26).LT.0) GO TO 7025 
      DEBUG(DFOPL   ) = DEBUG(DFOPL   ) + SHIFT(1,18) 
      IF ((SHIFT(DEBUG(DFOPL),-18) .AND. 777B) .NE. 1) GO TO 7000 
      DFOPL2 = ADDRESS(SHIFT(DEBUG(SAASI+AASI),18)) 
      IF (DFOPL2.NE.0) GO TO 7040 
      DEBUG(SAASI+AASI) = DEBUG(SAASI+AASI).OR.SHIFT(DFOPL,42)
      GO TO 7050
 7040 DFOPL1 = DFOPL2 
      DFOPL2 = ADDRESS(DEBUG(DFOPL2)) 
      IF (DFOPL2.NE.0) GO TO 7040 
      DEBUG(DFOPL1) = DEBUG(DFOPL1).OR.DFOPL
 7050 DEBUG(SYMTAB B) = DEBUG(SYMTAB B) .OR. PLACE(NOTBIT(1)) .OR.
     ,    PLACE(SFBIT(1)) 
     ,    .OR. SHIFT(AASI, 19)
      DEBUG(DFOPL   ) = DEBUG(DFOPL   ) + SHIFT(1,18) 
      GO TO 7000
 7060 TEMP = DEBUG(DFOPL) .AND. MASK(33)
      SASI = ADDRESS(SHIFT(DEBUG(SAASI+AASI),-12))
      IF ( SASI.EQ.0) 7100, 7110
 7070 NXT STR = SASI
      SASI = ADDRESS(DEBUG(SAASI+SASI)) 
      IF(SASI.EQ.0) GO TO 7120
      SASI = SASI-SAASI 
      IF (SASI.EQ.0) GO TO 7120 
 7110 IF (TEMP .NE. (DEBUG(SAASI+SASI) .AND. MASK(33)) ) GO TO 7070 
      IF (SHIFT(DEBUG(SAASI+SASI),59-26).LT.0) GO TO 7025 
      DEBUG(SAASI+SASI) = DEBUG(SAASI+SASI)+SHIFT(1,18) 
      GO TO 7050
 7120 ASHIFT = 0
      SASI = AASI 
      CALL SETARR, RETURNS(7025)
      DEBUG(SAASI + NXT STR) = DEBUG(SAASI + NXT STR).OR.AASI 
      DEBUG(SAASI + AASI) = DEBUG(DFOPL) + SHIFT(1,18)
      AASI = SASI 
      GO TO 7050
 7100 ASHIFT = 0
      SASI = AASI 
      CALL SETARR, RETURNS(7025)
      DEBUG(SAASI + SASI) = DEBUG(SAASI+SASI).OR.SHIFT(AASI,12) 
      DEBUG(SAASI+AASI) = DEBUG(DFOPL).OR.SHIFT(1,18) 
      AASI = SASI 
      GO TO 7050
C 
C  HERE IF THE TRACE OPTION IS TO BE TURNED ON
C 
 8020 WRITE (DBGOUT, 8021)
 8021 FORMAT (* AT THIS POINT THE TRACE OPTION IS ILLEGAL *)
 8001 MULT = 0
      CALL GET OUT
      IF(OH .EQ. 0) 10, 30
 8000 MULT = 0
      CALL GET OUT
      IF ( (OH .EQ. 0) .AND. (SHIFT(DEBUG(DFOPL), 30) .GE. 0) ) GO TO 10
      IF (OH .EQ. MINZERO) GO TO 30 
      IF (P ADD .NE. 0) GO TO 8010
      ASHIFT = 0
      CALL SETARR, RETURNS(8020)
      TEMP = DEBUG(DFOPL) .AND. MASK(6) 
      SASI = ADDRESS(TRCADD)
      IF (SASI.EQ.0) 8100, 8110 
 8070 NXT STR = SASI
      SASI = ADDRESS(DEBUG(SAASI+SASI)) 
      IF (SASI.EQ.0) GO TO 8120 
 8110 IF(TEMP.NE.(DEBUG(SAASI+SASI).AND.MASK(6))  )         GO TO 8070
      IF (SHIFT(DEBUG(SAASI+SASI),59-26).LT.0) GO TO 8020 
      DEBUG(SAASI+SASI) = DEBUG(SAASI+SASI) + SHIFT(1,18) 
      GO TO 8200
 8120 CALL SETARR, RETURNS(8020)
      DEBUG(SAASI + NXT STR) = DEBUG(SAASI + NXT STR).OR.AASI 
      DEBUG(SAASI + AASI) = DEBUG(DFOPL) + SHIFT(1, 18) 
      GO TO 8200
 8100 CALL SETARR, RETURNS(8020)
      TRCADD = TRCADD .OR. AASI 
      DEBUG(SAASI + AASI) = DEBUG(DFOPL) + SHIFT(1,18)
      GO TO 8200
 8010 IF (SHIFT(DEBUG(DFOPL),59-26).LT.0) GO TO 8020
      DFOPL2= ADDRESS(SHIFT(TRCADD,30)) 
      IF(DFOPL2.EQ.DFOPL) GO TO 8050
      IF(DFOPL2.NE.0) GO TO 8040
      TRCADD = TRCADD.OR.SHIFT(DFOPL, 30) 
      GO TO 8050
 8040 DFOPL1 = DFOPL2 
      DFOPL2 = ADDRESS(DEBUG(DFOPL2)) 
      IF(DFOPL2.EQ.DFOPL) GO TO 8050
      IF(DFOPL2.NE.0) GO TO 8040
      DEBUG(DFOPL1) = DEBUG(DFOPL1).OR.DFOPL
 8050 DEBUG(DFOPL) = DEBUG(DFOPL) + SHIFT(1,18) 
 8200 IF (SHIFT(OH,-6).GT.TRACEL) TRACEL = SHIFT(OH,-6) 
      GO TO 8001
C 
C  HERE IF DONE TURNING ON OPTIONS.  SET ERROR TO NO -T0- AND PUT -TO-
C  BOUND IN -TO- LIST IF LINE OR STATEMENT NUMBER.
C 
   30 IF (P ADD .EQ. 0) RETURN
      DEBUG(SAREA+NEXT-1) =(DEBUG(SAREA+NEXT-1) .AND. 
     ,   SHIFT(MASK(57),20)) .OR. SHIFT(1,20) 
      TO FM = 0 
      BD ADD = NEXT + 1 
      NEXT1 = NEXT
      IF ((SHIFT(DEBUG(SAREA+NEXT-1),4).AND.3) - 1) 40, 50, 20
   40 NEXT = ADDRESS(SHIFT(TO LIST, 20))
      IF (NEXT.NE.0) GO TO 60 
      TO LIST = TO LIST .OR. SHIFT(BD ADD, 40)
      GO TO 20
   50 NEXT = ADDRESS(SHIFT(TO LIST, -20)) 
      IF (NEXT.NE.0) GO TO 60 
      TO LIST = TO LIST .OR. SHIFT(BD ADD, 20)
      GO TO 20
   60 TEMP = 2
      IF ((SHIFT(DEBUG(SAREA+NEXT1-1),2).AND.3).EQ.2) TEMP = 3
      ITEMSAV = ITEM
      ITEM = DEBUG(SAREA+NEXT1+TEMP) .AND. SHIFT(MASK(30),30) 
      CALL PUT
      ITEM = ITEMSAV
   20 DEBUG(SAREA+NEXT1) = DEBUG(SAREA+NEXT1) .OR. MASK(1)
      NEXT = NEXT1
      RETURN
      END 
