next up previous
suivant: Ajustement d'un SEGMENT monter: Manipulation des structures de précédent: Désactivation d'un SEGMENT

Activation d'un SEGMENT

Supposons que le segment MONS1 ait été défini puis désactivé dans le sous-programme fortran sp1 qui appelle sp2 et que l'on désire se servir de MONS1 dans ce dernier sous-programme. Sp2 devra contenir l'ordre déclaratif de la classe du segment et de plus il devra connaitre la valeur de la variable pointeur instanciant MONSEG. On peut la lui fournir soit par COMMON soit par argument (soit par un autre segment) puisqu'elle est avant tout de type Integer. Pour activer le segment if faut utiliser l'instruction :


		    

SEGACT nom-variable-pointeur
Cette activation se fait en lecture seule, pour pouvoir modifier les valeurs contenues dans le segment, c'est à dire avoir accés en lecture/écriture, il faut terminer l'instruction par *MOD. L'instruction devient :

		    

SEGACT nom-variable-pointeur*MOD

Par exemple on peut envisager la séquence suivante :


		   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
.
.
segini mons1
INTER=MONS1
SEGDES MONS1
call sp2(INTER,... )
return
end


		    

subroutine sp2(INTER,....)
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
.
.
MONS1=INTER
SEGACT MONS1
AZ=MONS1.XX(2)
SEGDES MONS1
.
.
SEGACT MONS1*MOD
MONS1.XX(1)=MONS1.XX(1)*2
SEGDES MONS1
return
end

Une fois un segment activé, toutes les variables qu'il contient sont accessibles en lecture au meme titre que les autres variables fortran, par contre il n'est pas possible de les modifier. En effet ,il n'est pas normal de vouloir modifier un objet qui existe déjà et les structures de mémoires servant transitoirement dans un opérateur doivent etre crées en début d'opérateur et détruites en fin d'opérateur. Il est malgré tout possible de modifier un segment desactivé puis activé en faisant suivre le nom du pointeur à activer de *MOD (SEGACT MONS1*MOD).

Rappelons que LL,LC... ne sont pas des variables contenues dans le segment, l'instruction particulière suivante sert à connaitre les dimensions des tableaux


		    

LHJ=NOMS1.NOMB(/i)

dans LHJ se trouve la valeur de la ième dimension du tableau NOMB.Les tableaux de chaines de caractères sont traités différemment. NOMS1.ICHA(/1) contient la longueur des chaines du tableau ICHA soit 4 dans notre exemple. NOMS1.ICHA(/i) contient la i-1 ème dimension du tableau ICHA.

Dans un sous-programme, il est possible de connaitre la dimension d'un tableau et Esope permet de changer sa dimension.


next up previous
suivant: Ajustement d'un SEGMENT monter: Manipulation des structures de précédent: Désactivation d'un SEGMENT
traduction LAMS 2004-04-21