/* Copyright (C) 2002-2003 Free Software Foundation, Inc. Contributed by Andy Vaught and Paul Brook This file is part of the GNU Fortran 95 runtime library (libgfor). Libgfor is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. Libgfor is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with libgfor; see the file COPYING. If not, write to the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include #include #include #include #include #include "libgfortran.h" /* This is the offset (in bytes) required to cast from logical(8)* to logical(4)*. and still get the same result. Will be 0 for little-endian machines and 4 for big-endian machines. */ int l8_to_l4_offset; /* Figure out endianness for this machine. */ #define detetmine_endianness prefix(determine_endianness) static void determine_endianness (void) { union { GFC_LOGICAL_8 l8; GFC_LOGICAL_4 l4[2]; } u; u.l8 = 1; if (u.l4[0]) l8_to_l4_offset = 0; else if (u.l4[1]) l8_to_l4_offset = 1; else runtime_error ("Unable to determine machine endianness"); } static int argc_save; static char **argv_save; /* Set the saved values of the command line arguments. */ void set_args (int argc, char **argv) { argc_save = argc; argv_save = argv; } /* Retrieve the saved values of the command line arguments. */ void get_args (int *argc, char ***argv) { *argc = argc_save; *argv = argv_save; } /* Initialize the runtime library. */ static void __attribute__((constructor)) init (void) { /* Figure out the machine endianness. */ determine_endianness (); /* Must be first */ init_variables (); init_units (); #ifdef DEBUG /* Check for special command lines. */ if (argc > 1 && strcmp (argv[1], "--help") == 0) show_variables (); /* if (argc > 1 && strcmp(argv[1], "--resume") == 0) resume(); */ #endif memory_init (); random_seed(NULL,NULL,NULL); } /* Cleanup the runtime library. */ static void __attribute__((destructor)) cleanup () { close_units (); }