//===-- runtime/iostat.h ----------------------------------------*- C++ -*-===//
//
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
//
//===----------------------------------------------------------------------===//

// Defines the values returned by the runtime for IOSTAT= specifiers
// on I/O statements.

#ifndef FORTRAN_RUNTIME_IOSTAT_H_
#define FORTRAN_RUNTIME_IOSTAT_H_
#include "magic-numbers.h"
namespace Fortran::runtime::io {

// The value of IOSTAT= is zero when no error, end-of-record,
// or end-of-file condition has arisen; errors are positive values.
// (See 12.11.5 in Fortran 2018 for the complete requirements;
// these constants must match the values of their corresponding
// named constants in the predefined module ISO_FORTRAN_ENV, so
// they're actually defined in another magic-numbers.h header file
// so that they can be included both here and there.)
enum Iostat {
  IostatOk = 0, // no error, EOF, or EOR condition

  // These error codes are required by Fortran (see 12.10.2.16-17) to be
  // negative integer values
  IostatEnd = FORTRAN_RUNTIME_IOSTAT_END, // end-of-file on input & no error
  // End-of-record on non-advancing input, no EOF or error
  IostatEor = FORTRAN_RUNTIME_IOSTAT_EOR,

  // This value is also required to be negative (12.11.5 bullet 6).
  // It signifies a FLUSH statement on an unflushable unit.
  IostatUnflushable = FORTRAN_RUNTIME_IOSTAT_FLUSH,

  // Other errors are positive.  We use "errno" values unchanged.
  // This error is exported in ISO_Fortran_env.
  IostatInquireInternalUnit = FORTRAN_RUNTIME_IOSTAT_INQUIRE_INTERNAL_UNIT,

  // The remaining error codes are not exported.
  IostatGenericError = 1001, // see IOMSG= for details
  IostatRecordWriteOverrun,
  IostatRecordReadOverrun,
  IostatInternalWriteOverrun,
  IostatErrorInFormat,
  IostatErrorInKeyword,
  IostatEndfileNonSequential,
  IostatEndfileUnwritable,
  IostatOpenBadRecl,
  IostatOpenUnknownSize,
  IostatOpenBadAppend,
  IostatWriteToReadOnly,
  IostatReadFromWriteOnly,
  IostatBackspaceNonSequential,
  IostatBackspaceAtFirstRecord,
  IostatRewindNonSequential,
};

const char *IostatErrorString(int);

} // namespace Fortran::runtime::io
#endif // FORTRAN_RUNTIME_IOSTAT_H_
