www.qtsoftware.de
FOR_C
Fortran nach C Quellcodeübersetzer für PC

FOR_C übersetzt Fortran 77 Quellprogramme automatisch in C Quellcode.

FOR_C berücksichtigt dabei auch einige der gängigen Fortran 77 Erweiterungen, wie sie bspw. in VAX oder IBM VS Fortran zu finden sind (z.B. DO WHILE ... ENDDO, DO ... ENDDO, IMPLICIT NONE, INCLUDE, DO ENDDO, BYTE, COMPLEX*16, VAX STRUCTURE, UNION, MAP, RECORD usw.). Der Übersetzungsprozeß kann mittels Optionen und einer Konfigurationsdatei spezifischen Anforderungen angepaßt werden. Möglich sind bspw.:

  • die Handhabung von INTEGER als short int oder long int,
  • lokale Variablen können statisch oder automatisch angelegt werden,
  • die Reihenfolge der Bytes in Konstanten kann umgedreht werden (wichtig bei Wechsel zu anderen Rechnersystemen, deren Prozessor Werte bspw. nicht in word = low byte/high byte order ablegt),
  • Berücksichtigung von Fortran-IV/66 Eigenheiten,
  • Umsetzung der I/O-Teile,
  • Code-Optimierung mit Löschen von unbenutzten Variablen,
  • Erzeugung von Funktions-Prototypen,
  • Code-Stil-Steuerung,
  • Umsetzung von Hollerith-Konstanten u.v.a.m..
Beispiel
Fortran 77 Programm

   PROGRAM For_CTst
C  Konstanten
   DOUBLE PRECISION PI
   DOUBLE COMPLEX kxI      ! Def. von “i”
   PARAMETER (PI = 3.141592653589793,
    &                kxI = (0.0D0, 1.0D0) )
C  COMMON Variablen
   CHARACTER*1 line(-29:30), pattern*2
   COMMON /Allg/ line, pattern
C  lokale Variablen
   DOUBLE COMPLEX kxZahl,kxWurzel
   REAL rlZahl,rlWurzel,vglRC(2)
   EQUIVALENCE (kxZahl,vglRC)
C
1000   FORMAT( /11X,F10.3,’+ i*’,F10.3,
    &              ‘ = ‘,F12.3,’ * EXP( i*’,F10.6,’)’)
1100   FORMAT(‘Wurzel ‘,I2,’: ‘,F10.3,’+ i*’,F10.3)
C
C  Statement Functions
C    einf. Berechnung d.n-ten Wurzel
C    über Logarithmus (nur für rlZahl & k > 0)
   rlWurzel(rlZahl,k)=EXP( LOG(rlZahl)/k )
C    Formel von Moivre
   kxWurzel(kxZahl,k,n)
    &   =rlWurzel(  REAL(ABS(kxZahl)), n )
    &       *EXP( kxI*( phi(kxZahl)+ 2*k*Pi )/Float(n) )
C
   DO 5 i=-29,30,2
      line(i)=pattern(1:1)
      line(i+1)=pattern(2:2)
5   CONTINUE
C
10   PRINT*,’Eingabe komplexe Zahl: ‘
   READ(5,*) kxZahl
   PRINT*,’Welche Wurzeln?  n = ‘
   READ(5,*) n
   IF (n.LE.0) STOP
C
   WRITE (*,1000) vglRC(1),vglRC(2),
    &                   ABS(kxZahl), phi(kxZahl)
C
   DO 100 k=0,n-1
      WRITE (*,1100) k, kxWurzel( kxZahl, k, n )
100   CONTINUE
   PRINT*,(line(i),i=-29,30)
   GOTO 10
C
   END




   DOUBLE PRECISION FUNCTION phi(kxZahl)
C  Bestimmung des komplexen Winkelarguments
   DOUBLE COMPLEX kxZahl
   DOUBLE PRECISION PI
   PARAMETER ( PI = 3.141592653589793 )
C
   IF ( REAL(kxZahl) .NE. 0.D0 )THEN
      phi=ATAN( DIMAG(kxZahl)/REAL(kxZahl)  )
      IF ( REAL(kxZahl) .LT. 0D0 ) phi=phi+PI
   ELSE
      IF (DIMAG(kxZahl).GT. 0.D0) THEN
         phi=PI/2.D0
      ELSE IF (DIMAG(kxZahl).EQ.0.D0) THEN
         phi=0
      ELSE
         phi=3.D0*PI/2.D0
      END IF
   END IF
C
   RETURN
   END


   BLOCK DATA
   CHARACTER*1 line(-29:30),pattern*2
   COMMON /Allg/ line, pattern
   DATA pattern/’- ‘/,line/60*’ ‘/
   END

 

Von FOR_C generierter C-Quellcode
*FOR_C Options SET: do=r ftn=l io=c op=i s=av str=l */
#include <stdio.h
#include <math.h
#include <fcrt.h
#include <fcio.h
#include <complx.h
/* PARAMETER translations */
#define PI 3.141592653589793
#define    KXI ftoc(0.0e0,1.0e0)
/* end of PARAMETER translations */

/* COMMON translations */
struct t_allg {
                  byte line[30-(-29)+1];
                  char pattern[3];
                 } allg;
/* end of COMMON translations */

main( int argc, char *argv[] )
{
   long int i, i_, n, k, k_;
   float rlzahl, *vglrc;
   double phi();
   complex *kxzahl, _dcx0;
   double _e0[2];
   /* EQUIVALENCE translations */
   kxzahl = (complex*)_e0;
   vglrc = (float*)_e0;
   /* end of EQUIVALENCE translations */

   f77_ini(argc,argv);
   /*  Konstanten */
   /*  Def. von “i” */
   /*  COMMON Variablen */
   /*  lokale Variablen */


   /*  Statement Functions
    *    einfache Berechnung der n-ten
    *    Wurzel über Logarithm. */
   #define RLWURZEL(rlzahl,k)  
   /*  nur für rlZahl & k > 0 */
   (float)(exp( log( (rlzahl) )/(k)))   
   /*    Formel von Moivre (n-te Wurzeln aus einer
    *    komplexen Zahl) */
   #define KXWURZEL(kxzahl,k,n)  (complex) (cmul (    ftoc(RLWURZEL(
   (float) ( cabs( (kxzahl) ) ), (n))    ,0.), \
   cexp( cdiv( cmul( KXI, ftoc( phi( \
   ADR(_dcx0,(kxzahl))) + 2*(k)*PI,0.))\
   ftoc((float)( (n) ),0.)) )))

   for( i = -29; i <= 30; i += 2 )
      {
       i_ = i - 1;
       allg.line[i-(-29)]=allg.pattern[0];
       allg.line[i+1-(-29)]=allg.pattern[1];
      }

L_10:
   fprintf( stdout, “Eingabe einer komplexen Zahl: \n”);
   fscanld( UFP(5), “%lz ”, kxzahl );
   fprintf( stdout, “Welche Wurzeln sind
             zu bestimmen?  n = \n” );
   fscanld( UFP(5), “%ld ”, &n );
   if( n <= 0 )
      {
       exit(0);
      }

   fprintf( stdout, “\n           %10.3f+
              i*%10.3f = %12.3f * EXP( i*%10.6f)\n”,
              vglrc[0], vglrc[1], cabs( *kxzahl ),
             phi( kxzahl ) );

   for( k = 0; k <= (n - 1); k++ )
      {
       k_ = k - 1;
       fprintf( stdout, “Wurzel %2ld:
                 %10.3f+ i*%10.3f\n”, k,
                 ZPAIR(KXWURZEL( *kxzahl, k, n )) );
      }
   for( i = -29; i <= 30; i++ )
      {
       fprintf( stdout, “%c”, allg.line[i-(-29)] );
      }
   fputc( ‘\n’, stdout );
   goto L_10;

#undef KXWURZEL
#undef RLWURZEL
}
/* end of function */

FOR_C beinhaltet eine C-Runtime Library im Quellcode, die gewisse in Fortran vorhandene Funktionen, die in C jedoch fehlen, ersetzt. Dies erlaubt eine von der Rechner-Plattform unabhängige Übersetzung. Es wird strukturierter, lesbarer C Code generiert (d.h. die Bezeichnungen der Variablen und Funktionen werden bei der Konvertierung, soweit möglich, beibehalten).

Dokumentation

Die Dokumentation ist umfangreich und sehr ausführlich (im Ringbuch mit ca. 320 Seiten).

 
Preislisten
·
Dienstleistungen
·
Links
·

Lieferumfang, Systemanforderungen etc.

   
Artikelstammkürzel FOR_C
Lieferumfang Software auf CD-ROM und Handbuch
Unterstützte
Betriebssystem(e)

PC: Windows 95/NT/98/2000/XP und kompatible

Systemanforderungen PC mit Pentium, Festplatte mit einigen MB frei
Hersteller COBALT BLUE, Inc.
Aktuelle Version 3.5
Lizensierungsvarianten Einzelplatzlizenz und Mehrplatzlizenzen
Lizenz- bzw. Laufzeitgebühren keine (für Quellcode, der mit FOR_C erstellt wurde)
Patches erhältlich nein
Updates erhältlich nein
Technischer Support durch den Hersteller
Datenblatt erhältlich nein
Testversion ja, hier
Produktinformationen des Herstellers http://www.cobalt-blue.com/fc/fcmain.htm
Informationsstand 26. Juni 2006
zum Anfang
   

Hinweise zu Haftung & Urheberrecht bzgl. der Information auf dieser WebSeite.
Copyright QT software GmbH 2006. Alle Rechte vorbehalten.