[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference turris::fortran

Title:Digital Fortran
Notice:Read notes 1.* for important information
Moderator:QUARK::LIONEL
Created:Thu Jun 01 1995
Last Modified:Fri Jun 06 1997
Last Successful Update:Fri Jun 06 1997
Number of topics:1333
Total number of notes:6734

1212.0. "Fortran and alignement if include CDD" by SOS6::GUALINA () Thu Mar 06 1997 08:26

        Hi,

I need to find an information about include cdd record in program
fortran and how the data are padded/aligned .

With the little code below everything is ok

       structure /item/
         character*3       elem1
         character*3       elem2
         integer*4         elem3
         character*5       elem4
       end structure
       record /item/item_list(2)

When compiling as

        fort/noop/deb/show=all/lis/align=record=natural/cross

In the lis file we see

        FIELD SCALARS

            Offset    Field  Structure  Type            Bytes References

            00000000  ELEM1  ITEM        CHAR               3     4
            00000003  ELEM2  ITEM        CHAR               3     5
            00000008  ELEM3  ITEM        I*4                4     6
            0000000C  ELEM4  ITEM        CHAR               5     7

This seem to be normal for ELEM3 offset 8


But if the program include cdd record ,the padding is not there and the
offset is at 6 using sqlpreprocessor or fortran v7.1-107.

        program envoi
 exec sql include from dictionnary 'cdd_record.reffins0'
 C
        record /reffins0/ essai

        essai.cdev = 'BOF'
        essai.njour = 60
        call lit(%ref(essai))

        END

        program lit
 #dictionary "cdd$top.bip.record.reffins0";

 struct essai {
        char chaine[3];
        int valeur;
 };
 lit(struct reffins0 *val)
 {
        int b;
        b = val->njour;
 }

And definition for dictionnary and compil/link

$ set verify
$ define cdd$default SYS$COMMON:[CDDPLUS]BIP
$ define cdd_record SYS$COMMON:[CDDPLUS]BIP.record
$ goto suite
$ repos opera
define directory field_c.
define directory field_n.
define directory field_l.
define directory field_d.
define directory field_h.
define field field_c.cdev datatype text size 3.
define field field_c.cinstr datatype text size 3.
define field field_n.njour  datatype signed longword.
define field field_l.linstr datatype text size 30.
define field field_d.dstk  datatype date .
define field field_h.hstk datatype signed longword .
define directory record.
define record record.reffins0 .
field_c.cdev.
field_c.cinstr.
field_n.njour.
field_d.dstk.
field_h.hstk.
end record.
exit
$ suite:
$ sqlpre/fortran/debug/noopt/show=all/lis envoi.sfo
$ sqlpre/cc/debug/noopt/show=all/lis lit.sc
$ show logical sql$user
$ link envoi,lit,sql$user/library
$ set noverify

In the lis file

        FIELD SCALARS

            Offset    Field   Structure  Type            Bytes References

            00000000  CDEV    REFFINS0    CHAR               3     9        32
            00000003  CINSTR  REFFINS0    CHAR               3    10
            00000028  DSTK    REFFINS0    STRC               8    13
            00000030  HSTK    REFFINS0    I*4                4    16
            0000000A  LINSTR  REFFINS0    CHAR              30    12
            00000006  NJOUR   REFFINS0    I*4                4    11        33

NJOUR is at offset 6 and not 8

The result is the same if compiled directly with fortran/decc and using /pad

Normaly it will be correct because the datas are issued from a database and
can't be aligned without changing theirs contents .But I need a confirmation..

Thank for any input.
Patrice
T.RTitleUserPersonal
Name
DateLines
1212.1Alignment is picked when you *insert* definition into CDDWIBBIN::NOYCEPulling weeds, pickin' stonesThu Mar 06 1997 10:096
> Normaly it will be correct because the datas are issued from a database and
> can't be aligned without changing theirs contents .But I need a confirmation..

Exactly.  The CDD records the actual offset for each member of the structure,
so the definition you get in FORTRAN will match the database (or whatever)
that the definition is intended to describe.
1212.2QUARK::LIONELFree advice is worth every centThu Mar 06 1997 10:444
Right - in fact we had to teach the compiler to specifically NOT apply its own
alignment rules to CDD records.

					Steve