Plaçons nous encore à l'intérieur d'un sous-programme fortran. Après y avoir déclaré le segment par l'instruction SEGMENT...ENDSEGMENT il faut définir une variable qui référencera la structure instanciée : la connaissance de cette variable donnant accés à toute la structure. Pour cela un nouveau type de variable fortran est inventée : c'est la variable pointeur dont la déclaration est :
POINTEUR nompointeur.nomsegment
par exemple, pour permettre l'instanciation de la classe MONSEG, on déclare :
Dans cet exemple MONS1 et/ou MONS2 permettent de référencer une structure de la classe MONSEG. MONS1 et MONS2 deviennent des variables fortran de type Integer une fois la traduction Esope->Fortran faite.
POINTEUR MONS1.MONSEG,MONS2.MONSEG,....
La création d'une sructure de classe MONSEG est faite par l'appel à la fonction SEGINI en précisant la variable pointeur utilisée.
SEGINI MONS1
Dans notre exemple cela donne :
subroutine sp1 (......)
segment monseg
integer ijk,nomb(ll,lc),jlc
real x,xx(n)
real*8 y,yy(3,mm)
character*nbca icha(8,ik),chai
endsegment
POINTEUR MONS1.MONSEG,MONS2.MONSEG
.
.
SEGINI MONS1
.
.
return
end
Il faut, bien évidemment, que les variables dimensionnantes du segment soient définies préalablement à l'instruction SEGINI (sinon le résultat dépend du compilateur!). Nous aurions pu faire le jeu d'instructions :
subroutine sp1 (LL,LC......)
segment monseg
integer ijk,nomb(ll,lc),jlc
real x,xx(n)
real*8 y,yy(3,mm)
character*nbca icha(8,ik),chai
endsegment
pointeur mons1.monseg
.
.
N=5
MM=3
IK=12
NBCA=4
SEGINI MONS1
MONS1.XX(3)=...
MONS1.ICHA(5,2)='BIEN'
.
.
return
end
Dans lequel le tableau YY est dimensionné à 3 lignes et 3 colonnes, tandis que ICHA est un tableau de chaines de 4 caractères qui à 8 lignes et 12 colonnes.
Une fois l'instruction SEGINI éxécutée et tant que l'on reste dans le
sous-programme, tous les éléments du SEGMENT peuvent etre considérés
par le programmeur comme des variables fortran normales. Pour les
atteindres il faut rappeler qu'elles appartiennent à la structure
référencée par la variable pointeur MONS1.
Remarques :
ESOPE offre la possibilité de libérer la place mémoire occupée par le segment. on peut soit supprimer le segment, soit le désactiver.