Pennington / Example

XTRAN Demonstration:  Translating Fortran COMMONs and EQUIVALENCEs to C

The following example used the standard set of XTRAN rules for parsing Fortran and translating it to C.  NOTE that the translation shown below was done with default conditions.  XTRAN provides many options for controlling the way it translates.



* Input to XTRAN:

	SUBROUTINE subr1
	    COMMON/abc/ i, j // y, z
	    DIMENSION j(2)
	    REAL j, k
	    EQUIVALENCE (j, x)
	    EQUIVALENCE (x, a)
	    EQUIVALENCE (m, n)
	    EQUIVALENCE (n, p)
	    i = 1
	    j(2) = i
	    k = 3.0
	    m = 1
	    p = 1.0
	    x = 1.0
	    y = 1.0
	END

	SUBROUTINE subr2
	    INTEGER arr1(3), arr2(5), arr3(8), arr4(6), arr5(3), arr6(4)
	    INTEGER var1, var2
	    EQUIVALENCE (arr1(2), arr2(3), arr3(4), arr4, var2, arr6(4))
	    EQUIVALENCE (arr2(2), var1, arr5(2))

	    arr1(1) = 1
	    arr2(1) = 1
	    arr3(1) = 1
	    arr4(1) = 1
	    arr5(1) = 1
	    arr6(1) = 1
	    var1 = 1
	    var2 = 1
	END


* Output from XTRAN:

	extern struct
	    {
	    long i;
	    union
		{
		float j[2];
		float x;
		float a;
		}
		u1;
	    }
	    abc;
	extern struct
	    {
	    float y;
	    float z;
	    }
	    blank_common;

void subr1(void)
{
	float k;
	union
	    {
	    long m;
	    long n;
	    float p;
	    }
	    u1;
	abc.i = 1;
	abc.u1.j[1] = abc.i;
	k = 3.0;
	u1.m = 1;
	u1.p = 1.0;
	u1.x = 1.0;
	blank_common.y = 1.0;
	return;
}

void subr2(void)
{
	union
	    {
	    struct
		{
		Bytes filler[8];
		union
		    {
		    long arr1[3];
		    long var1;
		    }
		    u1;
		}
		s1;
	    struct
		{
		Bytes filler[4];
		union
		    {
		    long arr2[5];
		    long arr5[3];
		    }
		    u1;
		}
		s2;
	    long arr3[8];
	    struct
		{
		Bytes filler[12];
		union
		    {
		    long arr4[6];
		    long var2;
		    }
		    u1;
		}
		s3;
	    long arr6[4];
	    }
	    u1;
	u1.s1.u1.arr1[0] = 1;
	u1.s2.u1.arr2[0] = 1;
	u1.arr3[0] = 1;
	u1.s3.u1.arr4[0] = 1;
	u1.s2.u1.arr5[0] = 1;
	u1.arr6[0] = 1;
	u1.s1.u1.var1 = 1;
	u1.s3.u1.var2 = 1;
	return;
}


COPYRIGHT 2008; reproduction prohibited without permission.  Revised 2006-11-27

XTRAN is a trademark of Pennington Systems Incorporated.

Pennington Systems Incorporated
8655 East Via de Ventura, Suite G200
Scottsdale, Arizona 85258-3321

Phone:  +1(480)626-5503
Fax:  +1(480)626-7618
Email:  Info@Pennington.com
Web:  http://WWW.Pennington.com

[home] Home