MOOCHO (Single Doxygen Collection) Version of the Day
FortranTypes_f_open_file.cpp
Go to the documentation of this file.
00001 // @HEADER
00002 // ***********************************************************************
00003 // 
00004 // Moocho: Multi-functional Object-Oriented arCHitecture for Optimization
00005 //                  Copyright (2003) Sandia Corporation
00006 // 
00007 // Under terms of Contract DE-AC04-94AL85000, there is a non-exclusive
00008 // license for use of this work by or on behalf of the U.S. Government.
00009 // 
00010 // Redistribution and use in source and binary forms, with or without
00011 // modification, are permitted provided that the following conditions are
00012 // met:
00013 //
00014 // 1. Redistributions of source code must retain the above copyright
00015 // notice, this list of conditions and the following disclaimer.
00016 //
00017 // 2. Redistributions in binary form must reproduce the above copyright
00018 // notice, this list of conditions and the following disclaimer in the
00019 // documentation and/or other materials provided with the distribution.
00020 //
00021 // 3. Neither the name of the Corporation nor the names of the
00022 // contributors may be used to endorse or promote products derived from
00023 // this software without specific prior written permission.
00024 //
00025 // THIS SOFTWARE IS PROVIDED BY SANDIA CORPORATION "AS IS" AND ANY
00026 // EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00027 // IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00028 // PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL SANDIA CORPORATION OR THE
00029 // CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
00030 // EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
00031 // PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
00032 // PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
00033 // LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
00034 // NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00035 // SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00036 //
00037 // Questions? Contact Roscoe A. Bartlett (rabartl@sandia.gov) 
00038 // 
00039 // ***********************************************************************
00040 // @HEADER
00041 
00042 
00043 #include "Moocho_Config.h"
00044 
00045 
00046 #ifdef HAVE_MOOCHO_FORTRAN
00047 
00048 
00049 #include "FortranTypes_f_open_file.hpp"
00050 #include "FortranTypes_CppFortranStrings.hpp"
00051 #include "Teuchos_Assert.hpp"
00052 
00053 
00054 typedef FortranTypes::f_int f_int;
00055 
00056 
00057 extern "C" {
00058 
00059 
00060 FORTRAN_FUNC_DECL_UL_(f_int,FOR_OPEN_FILE,for_open_file) ( const f_int& iunit
00061   , const f_int i_file[], const f_int& i_file_len, const f_int& istatus
00062   , const f_int& iform, const f_int& iblank, const f_int& iaccess
00063   , const f_int& irecl );
00064 
00065 
00066 FORTRAN_FUNC_DECL_UL_(void,FOR_CLOSE_FILE,for_close_file) (
00067   const f_int& iunit, const f_int& keep );
00068 
00069 
00070 } // end extern "C"
00071 
00072 
00073 void FortranTypes::f_open_file( const f_int iunit, const char file[]
00074   , EOpenStatus status, EOpenForm form, EOpenBlank blank
00075   , EOpenAccess access, f_int recl )
00076 {
00077   int result;
00078   // Convert the file name to an integer to pass to Fortran.
00079   FortranTypes::f_int int_file[100], int_file_len;
00080   result = convert_to_f_int_string( file, int_file, &int_file_len );
00081   TEUCHOS_TEST_FOR_EXCEPTION(
00082     result, InvalidFileNameException
00083     ,"f_open_file(...) : Error, the "
00084     << -result << " Character of the file name \""
00085     << file << "\" is not a valid ASCII character." );
00086 
00087   if(
00088     //result = FORTRAN_FUNC_CALL_UL_(F_OPEN_FILE,f_open_file)(
00089     result = FORTRAN_FUNC_CALL_UL_(FOR_OPEN_FILE,for_open_file)(
00090       iunit, int_file, int_file_len, status, form, blank, access, recl
00091       )
00092     )
00093   {
00094     TEUCHOS_TEST_FOR_EXCEPTION(
00095       result < 0, InvalidFileNameException
00096       ,"f_open_file(...) : Error, the "
00097       << -result << " Character of the file name \""
00098       << file << "\" is not a valid ASCII character." );
00099     TEUCHOS_TEST_FOR_EXCEPTION(
00100       result > 0, OpenException
00101       ,"f_open_file(...) : Error, the file named \""
00102       << file << "\" could not be opened and OPEN(...) "
00103       << "returned and IOSTAT = " << result );
00104   }
00105 }
00106 
00107 
00108 void FortranTypes::f_close_file( const f_int iunit, bool keep )
00109 {
00110   FORTRAN_FUNC_CALL_UL_(FOR_CLOSE_FILE,for_close_file)( iunit, keep ? 1 : 0 ); 
00111 }
00112 
00113 
00114 #endif // HAVE_MOOCHO_FORTRAN
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines