source: PSPA/madxPSPA/src/mad_main.c @ 430

Last change on this file since 430 was 430, checked in by touze, 11 years ago

import madx-5.01.00

File size: 1.9 KB
Line 
1#include "mad_extrn_f.h"
2#include "mad_core.h"
3#include "mad_err.h"
4
5#define const // disable const for this module
6#include "mad_main.h"
7#undef  const
8
9// readonly global information about program's command line arguments and stack base
10int     mad_argc;
11char**  mad_argv;
12void*   mad_stck;
13
14#ifdef _GFORTRAN
15#define _POSIX_C_SOURCE 200112L
16#include <stdio.h>
17#include <stdlib.h>
18#include <unistd.h>
19
20void _gfortran_set_args    (int, char *[]);
21void _gfortran_set_options (int, int   []);
22#else
23#include <stdlib.h>
24#endif
25
26#ifdef _NAGFOR
27void f90_init   (int, char *[]);
28void f90_finish (int);
29#endif
30
31#ifdef _G95
32void g95_runtime_start (int, char *[]);
33void g95_runtime_stop  (void);
34#endif
35
36#ifdef _LF95
37// Lahey f95 specific (requires main to be MAIN__)
38int MAIN__(void);
39int MAIN__(void)
40{
41  mad_init(0, 0);
42
43#else
44
45int
46main(int argc, char *argv[])
47{
48  mad_init(argc, argv);
49
50#endif // _LF95
51
52  mad_run ();
53  mad_fini();
54
55  return geterrorflag() ? EXIT_FAILURE : EXIT_SUCCESS;
56}
57
58void
59mad_init(int argc, char *argv[])
60{
61  int a = 0;
62  mad_stck = &a;
63  mad_argc = argc;
64  mad_argv = argv;
65
66#ifdef _GFORTRAN
67  _gfortran_set_args(argc, argv);
68  _gfortran_set_options(0, 0);
69
70  // LD-2012: very ugly hack to make stdout unbuffered!!! any other idea?
71  if (argc && getenv("GFORTRAN_UNBUFFERED_PRECONNECTED") == 0) {
72#ifdef _WIN32
73    int putenv(char *string);
74    putenv("GFORTRAN_UNBUFFERED_PRECONNECTED=y");
75#else
76    setenv("GFORTRAN_UNBUFFERED_PRECONNECTED", "y", 0);
77#endif
78    execvp(argv[0], argv);
79    // should never be reached...
80    fprintf(stderr, "fatal error: unable to synchronize Fortran versus C I/O\n");
81    exit(EXIT_FAILURE);
82  }
83#endif
84
85#ifdef _NAGFOR
86  f90_init(argc, argv);
87#endif
88
89#ifdef _G95
90  g95_runtime_start(argc, argv);
91#endif
92
93  madx_start();
94}
95
96void
97mad_run(void)
98{
99  madx_input(CALL_LEVEL_ZERO);
100}
101
102void
103mad_fini(void)
104{
105  madx_finish();
106
107#ifdef _NAGFOR
108  f90_finish(EXIT_SUCCESS);
109#endif
110
111#ifdef _G95
112  g95_runtime_stop();
113#endif
114}
Note: See TracBrowser for help on using the repository browser.