Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • fix_Makefile.mingw#2
  • update_Makefile.mingw
  • fix_Makefile.mingw
  • fix_API_for_C_apps
  • fix_procinfo_mac
  • boinccmd_gpu_mode_always_until_sigterm
  • fgrp_osx_hotfix
  • fix_boinc_master@f8250782
  • eah_wrapper_improvements
  • diagnostics_win-hotfix
  • diagnostics_win-hotfix-old
  • current_fgrp_apps
  • testing_gw_apps
  • gw_app_darwin_15
  • current_brp_apps
  • current_brp_apps_android10
  • current_gfx_apps
  • current_server
  • current_gw_apps
  • previous_fgrp_apps
  • previous_gw_apps
  • testing_brp_apps
  • apps_FGRP3_1.07
  • apps_FGRP3_1.08
25 results

boinc_api_fortran.cpp

Blame
  • boinc_api_fortran.cpp 3.32 KiB
    // This file is part of BOINC.
    // http://boinc.berkeley.edu
    // Copyright (C) 2008 University of California
    //
    // BOINC is free software; you can redistribute it and/or modify it
    // under the terms of the GNU Lesser General Public License
    // as published by the Free Software Foundation,
    // either version 3 of the License, or (at your option) any later version.
    //
    // BOINC 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 Lesser General Public License for more details.
    //
    // You should have received a copy of the GNU Lesser General Public License
    // along with BOINC.  If not, see <http://www.gnu.org/licenses/>.
    
    // This file defines a Fortran wrapper to the BOINC API.
    
    // Define this symbol (here or in Makefile) if you want graphics functions
    //#define GRAPHICS
    
    #include "config.h"
    #include "util.h"
    #include "boinc_api.h"
    #ifdef GRAPHICS
    #include "graphics_api.h"
    #endif
    #include "boinc_zip.h"
    
    // helper class that makes a C-string from a character array and length,
    // automatically deleted on destruction.
    // Fortran strings are passed as character array plus length
    //
    class STRING_FROM_FORTRAN {
        char* p;
    public:
        STRING_FROM_FORTRAN(const char* s, int s_len) {
            p = new char[s_len + 1];
            memcpy(p, s, s_len);
            p[s_len] = 0;
        }
        ~STRING_FROM_FORTRAN() { delete [] p; }
        void strip_whitespace() {
            ::strip_whitespace(p);
        }
        const char* c_str() { return p; }
    };
    
    // remove terminating null and pad with blanks a la FORTRAN
    //
    static void string_to_fortran(char* p, int len) {
        for (int i=strlen(p); i<len; i++) {
            p[i] = ' ';
        }
    }
    
    extern "C" {
    
    void boinc_init_() {
        boinc_init();
    }
    
    void boinc_finish_(int* status) {
        boinc_finish(*status);
    }
    
    #ifdef GRAPHICS
    void boinc_init_graphics_(){
        boinc_init_graphics();
    }
    
    void boinc_finish_graphics_(){
        boinc_finish_graphics();
    }
    #endif
    
    void boinc_is_standalone_(int* result) {
        *result = boinc_is_standalone();
    }
    
    void boincrf_(const char* s, char* t, int s_len, int t_len) {
        STRING_FROM_FORTRAN sff(s, s_len);
        sff.strip_whitespace();
        boinc_resolve_filename(sff.c_str(), t, t_len);
        string_to_fortran(t, t_len);
    }
    
    void boinc_parse_init_data_file_() {
        boinc_parse_init_data_file();
    }
    
    void boinc_write_init_data_file_() {
        boinc_write_init_data_file();
    }
    
    void boinc_time_to_checkpoint_(int* result) {
        *result = boinc_time_to_checkpoint();
    }
    
    void boinc_checkpoint_completed_() {
        boinc_checkpoint_completed();
    }
    
    void boinc_fraction_done_(double* d) {
        boinc_fraction_done(*d);
    }
    
    void boinc_wu_cpu_time_(double* d_out) {
        boinc_wu_cpu_time(*d_out);
    }
    
    void boinc_calling_thread_cpu_time_(double* d) {
        boinc_calling_thread_cpu_time(*d);
    }
    
    void boinc_zip_(int* zipmode, const char* zipfile,
        const char* path, int zipfile_len, int path_len
    ) {
        //zipmode = 0 to unzip or 1 to zip. FORTRAN variable of type INTEGER.
        //zipfile, path = FORTRAN variables of type CHARACTER.
        STRING_FROM_FORTRAN zipfileff(zipfile, zipfile_len);
        STRING_FROM_FORTRAN pathff(path, path_len);
        zipfileff.strip_whitespace();
        pathff.strip_whitespace();
        boinc_zip(*zipmode,zipfileff.c_str(),pathff.c_str());
    } 
    
    }   // extern "C"
    
    const char *BOINC_RCSID_4f5153609c = "$Id$";