#include "flang/Runtime/io-api.h"
#include "flang/Runtime/main.h"
#include "flang/Runtime/stop.h"
#include <cstring>
#include <limits>

using namespace Fortran::runtime::io;

void output1() {
  auto io{IONAME(BeginExternalListOutput)()};
  const char str[]{"Hello, world!"};
  IONAME(OutputAscii)(io, str, std::strlen(str));
  IONAME(OutputInteger64)(io, 678);
  IONAME(OutputReal64)(io, 0.0);
  IONAME(OutputReal64)(io, 2.0 / 3.0);
  IONAME(OutputReal64)(io, 1.0e99);
  IONAME(OutputReal64)(io, std::numeric_limits<double>::infinity());
  IONAME(OutputReal64)(io, -std::numeric_limits<double>::infinity());
  IONAME(OutputReal64)(io, std::numeric_limits<double>::quiet_NaN());
  IONAME(OutputComplex64)(io, 123.0, -234.0);
  IONAME(OutputLogical)(io, false);
  IONAME(OutputLogical)(io, true);
  IONAME(EndIoStatement)(io);
}

void input1() {
  auto io{IONAME(BeginExternalListOutput)()};
  const char prompt[]{"Enter an integer value:"};
  IONAME(OutputAscii)(io, prompt, std::strlen(prompt));
  IONAME(EndIoStatement)(io);

  io = IONAME(BeginExternalListInput)();
  std::int64_t n{-666};
  IONAME(InputInteger)(io, n);
  IONAME(EndIoStatement)(io);

  io = IONAME(BeginExternalListOutput)();
  const char str[]{"Result:"};
  IONAME(OutputAscii)(io, str, std::strlen(str));
  IONAME(OutputInteger64)(io, n);
  IONAME(EndIoStatement)(io);
}

int main(int argc, const char *argv[], const char *envp[]) {
  RTNAME(ProgramStart)(argc, argv, envp);
  output1();
  input1();
  RTNAME(PauseStatement)();
  RTNAME(ProgramEndStatement)();
  return 0;
}
