*DECK,BUGACT
      SUBROUTINE BUGACT 
C 
C  THIS SUBROUTINE IS CALLED BEFORE AND AFTER THE PROCESSING OF EACH
C  EXECUTABLE STATEMENT BY PS1CTL$.  IT IN TURN CALLS -PUT- AND 
C  -PUT UPDT- TO SEARCH FOR A LINE NUMBER, STATEMENT NUMBER, OR UPDATE
C  IDENTIFIER MATCH.  IF FOUND, EITHER -TURN ON- OR -TURN OFF- IS CALLED
C  TO PROCESS THE OPTIONS LIST OR LISTS ASSOCIATED WITH THE STATEMENT.
C 
C  ENTRY: DFON = 0 IF CALL IS BEFORE THE STATEMENT HAS BEEN PROCESSED 
C              = 1 AFTERWARDS 
C         DUKE1 = THE LINE NUMBER OF THE STATEMENT IN BINARY
C         CLABEL = THE STATEMENT NUMBER, IF ANY, OF THE STATEMENT,
C                  RIGHT JUSTIFIED IN DISPLAY CODE
C         CUR UP DT (1) = THE UPDATE IDENTIFIER NAME, IF ANY, OF THE
C                         STATEMENT, LEFT JUSTIFIED IN DISPLAY CODE 
C         CUR UP DT (2) = THE UPDATE IDENTIFIER NUMBER, IF ANY, OF THE
C                         STATEMENT, LEFT JUSTIFIED IN DISPLAY CODE 
C         TO LIST = THE WORD CONTAINING THE BEGINNING ADDRESSES OF THE
C                   -T0- BOUND LISTS
C         FM LIST = THE WORD CONTAINING THE BEGINNING ADDRESSES OF THE
C                     -FROM- BOUND LISTS
C 
*CALL LDBGCOM 
      P ADD = 1 
      IF (DFON.NE.0) GO TO 10 
      IF (FM LIST.EQ.0) GO TO 100 
      IF (ADDRESS(SHIFT(FM LIST, 20)).EQ.0) GO TO 20
      NEXT = ADDRESS(SHIFT(FM LIST, 20))
      TO FM = 1 
      ITEM = DUKE1
      BD ADD = 0
      CALL PUT
      IF (NEXT.EQ.0) GO TO 20 
   40 DFOPL = ADDRESS(DEBUG(SAREA+NEXT-1))
      CALL TURNON 
      NEXT = ADDRESS(SHIFT(DEBUG(SAREA+NEXT), -20)) 
      IF (NEXT.NE.0) GO TO 40 
C 
C  HERE IF STATEMENT NUMBER FROM LIST 
C 
   20 IF (ADDRESS(SHIFT(FM LIST, -20)).EQ.0) GO TO 70 
      NEXT = ADDRESS(SHIFT(FM LIST, -20)) 
      ITEM = CLABEL 
      TO FM = 1 
      BD ADD = 0
      CALL PUT
      IF (NEXT.EQ.0) GO TO 70 
   80 DFOPL = ADDRESS(DEBUG(SAREA+NEXT-1))
      CALL TURNON 
      NEXT = ADDRESS(SHIFT(DEBUG(SAREA+NEXT), -20)) 
      IF (NEXT.NE.0) GO TO 80 
C 
C  HERE IF UPDATE IDENTIFIER TO OR FROM LIST
C 
   70 NEXT = SHIFT(ADDRESS(FM LIST), 42)
      IF (NEXT.EQ.0) GO TO 100
      NXT ITEM = 0
      CALL PUT UPDT 
      IF (NEXT.EQ.0) GO TO 100
      IF (DFON.NE.0) GO TO 150
      IF ( N FIELD .NE. 0) GO TO 130
  120 DFOPL = ADDRESS(DEBUG(SAREA+NEXT-1))
      CALL TURNON 
  130 NEXT = SHIFT((SHIFT(DEBUG(SAREA+NEXT),20) .AND. 
     ,       SHIFT(MASK(18), 60-2) ), 2)
      IF (NEXT) 90, 100, 110
   90 NEXT = SHIFT(NEXT,18) 
      NEXT = SHIFT(MASK(18),18) - NEXT
      IF (DFON.EQ.0) 130, 160 
  110 NEXT = SHIFT(NEXT, 18)
      IF (DFON .EQ. 0) 120, 130 
  150 IF (N FIELD .EQ. 0) GO TO 130 
  160 DFOPL = ADDRESS(DEBUG(SAREA+NEXT-2))
      CALL TURNOFF
      GO TO 130 
  100 P ADD = 0 
      RETURN
C  HERE IF WE MAY HAVE TO TURN OFF SOME OPTIONS 
C 
   10 IF (TO LIST .EQ. 0) GO TO 70
      IF (ADDRESS(SHIFT(TO LIST, 20)).EQ.0) GO TO 300 
      NEXT = ADDRESS(SHIFT(TO LIST, 20))
      TO FM = 0 
      ITEM = DUKE1
      BD ADD = 0
      CALL PUT
      IF (NEXT.EQ.0) GO TO 300
  310 DFOPL = ADDRESS(DEBUG(SAREA+NEXT-2))
      CALL TURNOFF
      NEXT = ADDRESS(SHIFT(DEBUG(SAREA+NEXT), -20)) 
      IF (NEXT.NE.0) GO TO 310
  300 IF (ADDRESS(SHIFT(TO LIST, -20)).EQ.0) GO TO 70 
C 
C  HERE IF WE MAY HAVE TO TURN OFF OPTIONS FOR STATEMENT NUMBERS
C 
      NEXT = ADDRESS(SHIFT(TO LIST, -20)) 
      ITEM = CLABEL 
      TO FM = 0 
      BD ADD = 0
      CALL PUT
      IF (NEXT.EQ.0) GO TO 70 
  320 DFOPL = ADDRESS(DEBUG(SAREA+NEXT-2))
      CALL TURNOFF
      NEXT = ADDRESS(SHIFT(DEBUG(SAREA+NEXT), -20)) 
      IF (NEXT.NE.0) 320, 70
      END 
