From bc9b856e4e8458ab90263f1c1c846dbbcb929e3f Mon Sep 17 00:00:00 2001 From: Karl Chen Date: Tue, 15 Jun 2004 09:11:08 +0000 Subject: [PATCH] *** empty log message *** svn path=/trunk/boinc/; revision=3577 --- api/boinc_api_fortran.C | 104 ++++++++++++++++++++++++++++++++++++++++ checkin_notes | 5 ++ 2 files changed, 109 insertions(+) create mode 100644 api/boinc_api_fortran.C diff --git a/api/boinc_api_fortran.C b/api/boinc_api_fortran.C new file mode 100644 index 0000000000..7555e4fc98 --- /dev/null +++ b/api/boinc_api_fortran.C @@ -0,0 +1,104 @@ +// The contents of this file are subject to the BOINC Public License +// Version 1.0 (the "License"); you may not use this file except in +// compliance with the License. You may obtain a copy of the License at +// http://boinc.berkeley.edu/license_1.0.txt +// +// Software distributed under the License is distributed on an "AS IS" +// basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the +// License for the specific language governing rights and limitations +// under the License. +// +// The Original Code is the Berkeley Open Infrastructure for Network Computing. +// +// The Initial Developer of the Original Code is the SETI@home project. +// Portions created by the SETI@home project are Copyright (C) 2002 +// University of California at Berkeley. All Rights Reserved. +// +// Contributor(s): +// + +// This file defines a Fortran wrapper to the BOINC API. + +#include "boinc_api.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 StringFromFortran { + char* p; +public: + StringFromFortran(const char* s, int s_len) { + p = new char[s_len + 1]; + memcpy(p, s, s_len); + p[s_len] = 0; + } + ~StringFromFortran() { delete [] p; } + operator char* () const { return p; } +}; + +extern "C" { + + int boinc_init_(int *standalone) { + boinc_init(*standalone); + } + + int boinc_finish_(int* status) { + boinc_finish(*status); + } + + int boinc_is_standalone_() { + return boinc_is_standalone(); + } + + int boinc_resolve_filename_(const char* s, int s_len, char* t, int t_len) + { + boinc_resolve_filename(StringFromFortran(s), t, t_len); + } + + int boinc_parse_init_data_file_() + { + return boinc_parse_init_data_file(); + } + + int boinc_write_init_data_file_() + { + return boinc_write_init_data_file_(); + } + +// TODO: structs? common? +// extern int boinc_get_init_data(APP_INIT_DATA&); + + int boinc_send_trickle_up_(char* s, int len) + { + return boinc_send_trickle_up(StringFromFortran(s,s_len)); + } + + int boinc_receive_trickle_down_(char* buf, int len) + { + return boinc_receive_trickle_down(buf, len); + } + + int boinc_time_to_checkpoint_() { + return boinc_time_to_checkpoint(); + } + + int boinc_checkpoint_completed_() { + return boinc_checkpoint_completed(); + } + + int boinc_fraction_done_(double* d) { + return boinc_fraction_done(* d); + } + + int boinc_wu_cpu_time_(double* d_out) { + return boinc_wu_cpu_time(*d_out); + } + + int boinc_thread_cpu_time_(double* d1_out, double* d2_out) + { + return boinc_thread_cpu_time(*d1_out, *d2_out); + } + +} + diff --git a/checkin_notes b/checkin_notes index a5a3b4cd2e..e5661ef6d4 100755 --- a/checkin_notes +++ b/checkin_notes @@ -13566,3 +13566,8 @@ Karl 2004-06-15 py/Boinc/ boincxml.py + + - created Fortran wrapper + + api/ + boinc_api_fortran.C