program kulmination_diff

      implicit none

      character(len=256) :: line
      character(len=10)  :: date_str, prev_date_str
      integer            :: hh, mm, ss
      integer            :: prev_sec, curr_sec, diff_sec
      integer            :: diff_m, diff_s
      integer            :: ios, input_unit, output_unit
      logical            :: first_entry

      input_unit = 10
      output_unit = 20

      open(unit=input_unit, file='betelgeuse_kulmination_2027.txt', status='old', action='read', iostat=ios)
      if (ios /= 0) then
        print *, 'Fehler: betelgeuse_kulmination_2027.txt konnte nicht geoeffnet werden.'
        stop
      end if

      open(unit=output_unit, file='ausgabe_diff_2027.txt', status='replace', action='write', iostat=ios)
      if (ios /= 0) then
        print *, "Fehler: 'ausgabe_diff_2027.txt' konnte nicht erstellt werden."
        close(input_unit)
        stop
      end if

      write(output_unit, '(A)') '# Differenz der Kulminationszeiten von Tag zu Tag'
      write(output_unit, '(A)') '# Zeitraum                 | Sek.   | Minuten:Sekunden'
      write(output_unit, '(A)') '# ===================================================='

      first_entry = .true.

      do
        read(input_unit, '(A)', iostat=ios) line
        if (ios /= 0) exit ! Dateiende erreicht

        if (len_trim(line) == 0 .or. line(1:1) == '#') cycle

        date_str = line(1:10)
        read(line(14:15), '(I2)') hh
        read(line(17:18), '(I2)') mm
        read(line(20:21), '(I2)') ss

        curr_sec = hh * 3600 + mm * 60 + ss

        if (.not. first_entry) then
            diff_sec = curr_sec - prev_sec

            if (diff_sec > 43200) then
                diff_sec = diff_sec - 86400
            end if

            diff_m = abs(diff_sec) / 60
            diff_s = mod(abs(diff_sec), 60)

            if (diff_sec < 0) then
                write(output_unit, '(A, A, A, I6, A, I0.2, A, I0.2, A)') &
                    prev_date_str, ' -> ', date_str, diff_sec, ' s  | -', diff_m, 'm ', diff_s, 's'
            else
                write(output_unit, '(A, A, A, I6, A, I0.2, A, I0.2, A)') &
                    prev_date_str, ' -> ', date_str, diff_sec, ' s  | +', diff_m, 'm ', diff_s, 's'
            end if
        end if

        prev_sec = curr_sec
        prev_date_str = date_str
        first_entry = .false.
      end do

      close(input_unit)
      close(output_unit)

      print *, "Datei 'ausgabe_diff_2027.txt' wurde erfolgreich erstellt."

end program kulmination_diff
