      PROGRAM MBA
C
C  THIS PROGRAM WILL ADJUST THE ADDRESSES IN AN AP
C  COMPILED LISTING OF AN MLCP PROGRAM.  THE ADDRESSES
C  ARE TURNED INTO BYTE ADDRESSES AS USED IN THE MLCP.
C
      EXTERNAL EJECT,
     +         HEADER,
     +         TITLE
      IMPLICIT INTEGER (A-Z)
      CHARACTER*60 HEADING
      CHARACTER*140 LINE
      INTEGER BYTE
      INTEGER COUNT
      INTEGER END
      INTEGER I
      INTEGER OFFSET
      INTEGER START
      INTEGER WORD
      LOGICAL SKIP
C
C  OPEN THE OUTPUT DCB AND SET UP THE PAGE
C
      OPEN (108)
      CALL HEADER
C
C  LOOP HERE UNTIL ALL THE RECORDS HAVE BEEN READ
C
 1000 CONTINUE
      READ (1,10,END=9999) LINE
   10 FORMAT (A140)
C
C  CHECK FOR AN ADDRESS TO MUNGE
C
      IF ((LINE(14:14) .EQ. '0') .AND.
     +    (LINE(16:17) .EQ. ' 0')) GO TO 3000
C
C  IT IS NOT AN ADDRESS, SEE IF IT IS A TITLE
C
      DO 2000 I=1,100,1
        IF (LINE(I:I+6) .EQ. ' TITLE ') GO TO 4000
 2000   CONTINUE
C
C  IT IS NOT A TITLE, SEE IF IT IS A FORM FEED
C
      IF (LINE(1:1) .NE. '1') GO TO 2500
C
C  FORM FEED
C
      CALL EJECT
      GO TO 1000
 2500 CONTINUE
C
C  NOT A FORM FEED EITHER, WRITE IT OUT AS IS
C
      WRITE (108,10) LINE
      GO TO 1000
 3000 CONTINUE
C
C  MUNGE THE ADDRESS, GET THE WORD ADDRESS AND THE OFFSET
C
      DECODE (140,20,LINE) WORD,OFFSET
   20 FORMAT (16X,Z5,1X,I1)
C
C  CONVERT THE WORD ADDRESS AND OFFSET TO A BYTE ADDRESS
C
      BYTE = WORD * 4 + OFFSET
C
C  WRITE OUT THE MUNGED ADDRESS IN THE LISTING LINE
C
      WRITE (108,30) LINE(1:16),BYTE,LINE(24:140)
   30 FORMAT (A16,Z5,'  ',A117)
      GO TO 1000
 4000 CONTINUE
C
C  EXTRACT THE TITLE
C
      SKIP = .FALSE.
      COUNT = 0
      DO 5000 START=I+7,I+47,1
        IF (LINE(START:START) .EQ. '''') GO TO 6000
 5000   CONTINUE
C
C  NO TITLE, TREAT IT LIKE A REGULAR LINE
C
      GO TO 2000
 6000 CONTINUE
C
C  WE FOUND THE START, FIND THE END
C
      DO 8000 END=START+1,132,1
        IF (SKIP) SKIP = .FALSE. ; GO TO 7500
        IF (LINE(END:END) .NE. '''') GO TO 7000
C
C  A "'", IS IT THE END?
C
        IF (LINE(END+1:END+1) .EQ. '''') SKIP = .TRUE. ; GO TO 7000
            GO TO 9000
 7000   CONTINUE
C
C  MOVE THE CHARACTER INTO THE HEADING BUFFER
C
        COUNT = COUNT + 1
        HEADING(COUNT:COUNT) = LINE(END:END)
 7500   CONTINUE
 8000   CONTINUE
 9000 CONTINUE
C
C  DO A NEW TITLE AND WRITE OUT THE LINE
C
      CALL TITLE (COUNT,HEADING)
      WRITE (108,10) LINE
C
C  BURN THE EXTRA FORM FEED
C
      READ (1,10,END=9999) LINE
      GO TO 1000
 9999 CONTINUE
      END
