template "Fortran i C++ Core package" main;


@@main.cpp
#include <Core/Core.h>
using namespace Upp;

extern"C" {
	void fortfunc_( int *ii, float *ff );
}

class <:PACKAGE:> {
public:
	<:PACKAGE:>();
	void RunFortran();
	void WriteLog(String s);
};

<:PACKAGE:>* tfp;


<:PACKAGE:>::<:PACKAGE:>() {
}


void <:PACKAGE:>::WriteLog( String s ) {
	RLOG( String ("WriteLog::") + s );
	Cout() << "WriteLog::" << s << "\n" ;
}
extern"C" {
	void writelog_( char *cc, int ll ) {
		cc[ll--] = '\0';  // NULL terminate the string
		tfp->WriteLog(cc);
	}
}


void <:PACKAGE:>::RunFortran() {

	int ii = 5;
	float ff = 5.5;

	::fortfunc_( &ii, &ff );
	WriteLog( AsString( ii ) );
	WriteLog( AsString( ff ) );
}

CONSOLE_APP_MAIN {
	<:PACKAGE:>().RunFortran();
}



@@<:PACKAGE:>.f90
    subroutine fortfunc( ii, ff )

    integer ii
    real*4  ff

    character*80 cc
    write( 6, 100 ) ii, ff
100 format( 'ii=', i2, ' ff=',f6.3 )

    cc = 'Example of a character string ПРЮВЕТ'
    call WriteLog( cc )
    
    return
    end


@@<:PACKAGE:>.upp
uses
	Core;

library(POSIX) "gfortran";

library(POSIX) lapack;

library(POSIX) blas;

file
	main.cpp,
	<:PACKAGE:>.f90;

mainconfig
	"" = "";

custom() "f90",
	"gfortran -c $(PATH) -o  $(OUTDIR)/$(TITLE).o\n",
	"$(OUTDIR)/$(TITLE).o";
