1 //===-- runtime/environment.cpp ---------------------------------*- C++ -*-===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "environment.h"
10 #include <cstdio>
11 #include <cstdlib>
12 #include <limits>
13 
14 namespace Fortran::runtime {
15 ExecutionEnvironment executionEnvironment;
16 
17 void ExecutionEnvironment::Configure(
18     int ac, const char *av[], const char *env[]) {
19   argc = ac;
20   argv = av;
21   envp = env;
22   listDirectedOutputLineLengthLimit = 79; // PGI default
23   defaultOutputRoundingMode =
24       decimal::FortranRounding::RoundNearest; // RP(==RN)
25 
26   if (auto *x{std::getenv("FORT_FMT_RECL")}) {
27     char *end;
28     auto n{std::strtol(x, &end, 10)};
29     if (n > 0 && n < std::numeric_limits<int>::max() && *end == '\0') {
30       listDirectedOutputLineLengthLimit = n;
31     } else {
32       std::fprintf(
33           stderr, "Fortran runtime: FORT_FMT_RECL=%s is invalid; ignored\n", x);
34     }
35   }
36 
37   // TODO: Set RP/ROUND='PROCESSOR_DEFINED' from environment
38 }
39 } // namespace Fortran::runtime
40