Pourquoi cette question ?
D'abord je m'attendais a ce que la nouvelle version de PB (Fred tu peut encore la rajouté) permette de geré des gosubs interne a une procedure avec un accés aux variables locale. Hélas...

Ensuite un exemple etant plus parlant, voici ce que désirais faire :
Code : Tout sélectionner
;Procedure affichage() ; Si décommentaire, marche pas
;Protected a, b, c, d
;Static f, g, h, i
a=100:b=50:c=25:d=10
For nombre = 1 To 4
Select nombre
Case 1 : Gosub colonne1
Case 2 : Gosub colonne2
Case 3 : Gosub colonne1_3
Case 4 : Gosub colonne1_5:Gosub colonne2
EndSelect
Next
End
Colonne1:
f+1
Debug "Utilisation de Colonne1 = "+Str(f)
Debug a=a+c
Return
Colonne2:
g+1
Debug "Utilisation de Colonne2 = "+Str(g)
Debug b=d+c
Return
Colonne1_3:
h+1
Debug "Utilisation de Colonne1_3 = "+Str(h)
Debug a=a-b
Return
Colonne1_5:
i+1
Gosub colonne1
Gosub colonne1_3
Debug "Utilisation de Colonne1_5 = "+Str(g)
Return
;EndProcedure
;affichage()
On notera que les sous-programmes (labels) peut être appele de plusieurs endroits différents, qu'il peut être utilisé plusieurs fois, enfin qu'un sous-programme peut appeler un autre sous-programme.
Une fois le sous-programme fini, le programme reprend a l'instruction qui suit celle qui l'avait appelé.
Utilisation des gosub/return simplifie le code et le rend plus compacte.
Enfin l'accées aux variables locales permet de ne pas muiltiplié les procedures a l'excés et d'avoir une ribanbelle de données a passés comme arguments.
Bref, je leurs trouve que des avantages !

Puisque le "Gosub nouvelle version" n'est pas au rendez-vous, ma question est :
Est-il possible de simuler un Gosub avec une macro ?
Est-il possible lorsque l'on appelle un sous-programme :
- de mémorisé la position mémoire de l'instruction qui appele le sous-programme (j'espére que vous comprenez),
- d'aller au sous-programme (le label:)
- d'executer le sous-programme et une fois finie (donc le return)
- de se repositionné sur l'instruction suivant (position mémoire + 1 instruction).
Je suppose que l'on doit faire appelle a du code assembleur, mais est-il possible d'intégré cela dans une macro ?
Est-il possible de "lorsque l'on appelle un sous-programme, de mémorisé la position mémoire de l'instruction qui appele le sous-programme" ?
Il y a bien la posibilité de connaitre l'adresse d'une variable, la position mémoire : Pointeur = ?Variable, peut-on connaitre l'instruction courante ?
Y a t-il des exemples ?

Merci de votre patience et de m'avoir lu !
