[Lazarus] Converting Fortran to FPC?

Mark Morgan Lloyd markMLl.lazarus at telemetry.co.uk
Thu Oct 7 11:04:04 CEST 2010


Bo Berglund wrote:
> On Thu, 07 Oct 2010 02:22:55 +0000, Mark Morgan Lloyd
> <markMLl.lazarus at telemetry.co.uk> wrote:
> 
>> Bo Berglund wrote:
>>> On Wed, 06 Oct 2010 23:34:29 +0200, Bo Berglund
>>> <bo.berglund at gmail.com> wrote:
>>>
>>> I found this converter by googling (offered on several websites, but
>>> basically the same everywhere):
>>> http://sourceforge.net/projects/fortran2pascal/
>>> but unfortunately it only handles Fortran77 code, whereas our code is
>>> Fortran90 syntax.
>>> Tried it on one of the files but it created unusable pascal code.
>>>
>>> So is there something for Fortran90 or later?
>> What sort of unusable? Does it document what target compiler it expects, 
>> i.e. GNU Pascal?
>>
> 
> Well it produces syntactically illegal pascal code...
> Here a short example of the start of a subroutine (newsreader has
> wrapped the code, long lines are ending with &) :
> 
> ------ Fortran code -------
>   subroutine StiffnessFE(NodeX, NodeY, Conductivity, ReducedStiff,
> abscix,     &
>                          iElemX, iElemY, LocalNodes, CenterNodeX,
> CenterNodeY, &
>                          ElemArea)
> 
>   use GlobalForw
>   implicit none
> 
>   integer, intent(in) :: iElemX, iElemY
>   real(Rkind), intent(in), dimension(1:gNumNodes) :: NodeX, NodeY
>   real(Rkind), intent(in), dimension(1:gNumElem) :: Conductivity
> 
> -----  Translates to this ------------
> 
> procedure StiffnessFE(var NodeX, NodeY, Conductivity, ReducedStiff,
> abscix,     &;
> begin
> iElemX, iElemY, LocalNodes, CenterNodeX, CenterNodeY, &;
> ElemArea);
> use GlobalForw;
> 
> , intent: array[in] of .... iElemX integer;
> real(Rkind), intent(in), dimension(1:gNumNodes) :: NodeX, NodeY;
> real(Rkind), intent(in), dimension(1:gNumElem) :: Conductivity;
> 
> ------------------
> 
> You don't have to be an expert to see that this will not compile at
> all. The rest of the file looks much the same.

If I'm reading that correctly & is being used as a continuation flag, in 
much the same way that \ is used in C or shell script. You might find 
that if you filtered that out (I tend to use Perl for that sort of job) 
before trying to run it through the converter that the output will make 
more sense.

You also need to determine what dialect of Pascal the output is: you 
could find that you're being given something obscure like Pascal-SC.

A few seconds Googling comes up with 
http://community.freepascal.org:10000/bboards/message?message_id=145352&forum_id=24105 
which points at a Windows-based converter, still '77 though. There's 
also apparently a FORTRAN to Ada converter f2a which could be a useful 
intermediary, however I can't so far see a URL (and I'm not putting much 
time into this since /I/ don't have any FORTRAN to convert :-)

[Slightly later] http://archive.adaic.com/tools/for2ada95/f2a.pl but the 
description indicates that it's strictly line-by-line.

-- 
Mark Morgan Lloyd
markMLl .AT. telemetry.co .DOT. uk

[Opinions above are the author's, not those of his employers or colleagues]




More information about the Lazarus mailing list