#include "../../runtime/io-api.h"
#include "../../runtime/main.h"
#include "../../runtime/stop.h"
#include <cstring>

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, 1.0 / 0.0);
  IONAME(OutputReal64)(io, -1.0 / 0.0);
  IONAME(OutputReal64)(io, 0.0 / 0.0);
  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;
}
