CHGPTR
Modifier un pointeur
En bref
La commande CHGPTR (Modifier un pointeur) permet de changer la valeur d'une variable de pointeur dans un programme, de sorte que le pointeur désigne un nouvel objet système, une adresse de pointeur d'espace différente ou une autre position dans un objet espace.
CHGPTR se lit CHG
(Modifier) + PTR.
Sur IBM i, le nom d'une commande associe presque toujours un verbe et un objet.
Syntaxe minimale
CHGPTR PTR(…)
Paramètres
-
PTRPointeur à modifier obligatoire -
SYSOBJNom d'objet système -
OBJTYPEType d'objet -
ADRAdresse à pointer -
OFFSETNouvelle position -
PGMProgramme -
PTRTYPEType de pointeur -
RCRLVLNiveau de récursivité
Astuce : dans une session 5250, tapez CHGPTR puis F4 pour
l'invite de saisie, et F1 sur un paramètre pour son aide.
Aide IBM i de la commande
Texte du F1, IBM i 7.5 en français
(bibliothèque QSYS)
Où s'exécute : Tous les environnements (*ALL)
Compatible multitâche : Non
La commande CHGPTR (Modifier un pointeur) permet de changer la valeur d'une variable de pointeur dans un programme, de sorte que le pointeur désigne un nouvel objet système, une adresse de pointeur d'espace différente ou une autre position dans un objet espace. En règle générale, cette commande n'est pas utilisée pour les programmes en langage évolué.
Restrictions :
- Cette commande est fournie avec le droit public *EXCLUDE, et le profil utilisateur QSRV dispose du droit privé permettant de l'utiliser.
- Cette commande est admise uniquement en mode de débogage et pour la modification des variables de programme qui servent de pointeurs. Pour démarrer le mode de débogage, utilisez la commande STRDBG (Démarrer le débogage).
- Cette commande ne peut pas être utilisée si l'utilisateur fait la maintenance d'un autre travail qui se trouve dans une file d'attente de travaux, ou qui est suspendue ou arrêtée.
- Cette commande ne permet pas de modifier les variables d'un programme lié.
- Cette commande ne permet pas de modifier les variables qui sont protégées en écriture ou qui figurent dans le domaine système, sauf si l'utilisateur dispose du droit spécial *SERVICE.
Paramètres
| Mot-clé | Description | Valeurs possibles | Remarques |
|---|---|---|---|
| PTR | Pointeur à modifier | Liste d'éléments | Obligatoire, positionnel 1 |
| Élément 1: Variable programme | Valeur caractère | ||
| Élément 2: Variable de pointeur base | Values (jusqu'à 5 répétitions): Valeur caractère | ||
| SYSOBJ | Nom d'objet système | Valeurs uniques: *NULL Autres valeurs: Nom d'objet qualifié |
Facultatif, positionnel 2 |
| Qualificatif 1: Nom d'objet système | Nom | ||
| Qualificatif 2: Biblio | Nom, *LIBL, *CURLIB | ||
| OBJTYPE | Type d'objet | Valeur caractère | Facultatif, positionnel 3 |
| ADR | Adresse à pointer | Valeurs uniques: *NULL Autres valeurs: Liste d'éléments |
Facultatif |
| Élément 1: Variable programme | Valeur caractère | ||
| Élément 2: Variable de pointeur base | Values (jusqu'à 5 répétitions): Valeur caractère | ||
| OFFSET | Nouvelle position | Entier | Facultatif |
| PGM | Programme | Nom, *DFTPGM | Facultatif |
| PTRTYPE | Type de pointeur | *SAME, *SYP, *SPP | Facultatif |
| RCRLVL | Niveau de récursivité | Entier, *LAST | Facultatif |
Pointeur à modifier (PTR)
Indique la variable de pointeur dont la valeur doit être modifiée. La variable de pointeur peut ainsi pointer sur une adresse différente.
Ce paramètre est obligatoire.
Remarque :Si la variable de pointeur est un pointeur HLL (déclaré dans un programme source en langage évolué), une valeur d'espace ou une valeur indéfinie peut être attribué(e) au pointeur, ou la position du pointeur peut être modifiée, mais la variable ne peut en aucun cas prendre la valeur d'un pointeur système. Cette restriction ne s'applique cependant pas lorsque vous définissez un pointeur qui n'est pas un pointeur HLL, ou lorsque vous utilisez un numéro ODV pour un pointeur HLL. Pour plus de détails sur le test et le débogage au niveau de l'interface machine, reportez-vous au manuel Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/.
Elément 1 : Variable programme
- valeur-caractère
- Indiquez le nom de la variable de pointeur dont la valeur doit être modifiée. Tout nom contenant des caractères spéciaux doit figurer entre apostrophes.
Si le pointeur (variable de programme) est un tableau, les indices représentant l'élément de tableau à modifier doivent être précisés. Cette variable de programme ne doit pas dépasser 132 caractères. Ce nombre comprend les qualifiants, indices, blancs imbriqués, parenthèses et virgules, à l'exclusion des apostrophes lorsque des caractères spéciaux sont utilisés. Un indice peut être un entier, un numéro MI ODV ou encore un nom de variable numérique.
Pour plus d'informations, reportez-vous à la rubrique "Parameter values used for testing and debugging" de "CL concepts and reference" dans le manuel Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/.
Elément 2 : Variable de pointeur base
- valeur-caractère
- Indiquez le nom d'une variable de pointeur de base. Dans certains langages, le pointeur (variable de programme) est basé sur une variable de pointeur. Cette combinaison de valeurs vous permet de définir jusqu'à 5 pointeurs de base pour le pointeur à modifier. Tout nom de pointeur de base contenant des caractères spéciaux doit figurer entre apostrophes.
Si le pointeur de base est un tableau, les indices représentant un élément du tableau doivent être précisés. Le nom d'un pointeur de base ne doit pas dépasser 132 caractères. Ce nombre comprend les qualifiants, blancs imbriqués, parenthèses et virgules. Ce nombre comprend les qualifiants, indices, blancs, parenthèses et virgules, à l'exclusion des apostrophes lorsque des caractères spéciaux sont utilisés. Un indice peut être un entier, un numéro MI ODV ou encore un nom de variable numérique.
Pour plus d'informations, reportez-vous à la rubrique "Parameter values used for testing and debugging" de "CL concepts and reference" dans le manuel Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/.
Nom d'objet système (SYSOBJ)
Définit le pointeur en tant que pointeur système ou en tant que pointeur d'espace permettant d'accéder à un objet système particulier, ou lui attribue une valeur indéfinie. Ce paramètre ne peut être défini lorsqu'un pointeur HLL est indiqué au paramètre Pointeur à modifier ( PTR).
Valeurs uniques
- *NULL
- Le pointeur système prend une valeur indéfinie, c'est-à-dire qu'il ne désigne plus d'objet système et qu'il n'a plus de type. Le paramètre Type d'objet (OBJTYPE) ne peut être défini lorsque *NULL est spécifié ici.
Qualificatif 1 : Nom d'objet système
- nom
- Indiquez le nom de l'objet désigné par le pointeur. La variable de pointeur contient soit une valeur de pointeur système soit une valeur de pointeur d'espace.
Qualificatif 2 : Biblio
- *LIBL
- La recherche porte sur toutes les bibliothèques de la liste des bibliothèques de l'unité d'exécution en cours jusqu'à ce que la première occurrence soit trouvée.
- *CURLIB
- L'objet est recherché dans la bibliothèque en cours du travail. Si celle-ci n'est pas précisée, QGPL est prise par défaut.
- nom
- Indiquez la bibliothèque dans laquelle figure l'objet.
Type d'objet (OBJTYPE)
Indique le type de l'objet système défini au paramètre Nom d'objet système ( SYSOBJ) et désigné par le pointeur mentionné au paramètre Pointeur à modifier ( PTR).
Adresse à pointer (ADR)
Indique la variable de programme qui doit être désignée par le pointeur mémoire spécifié (à savoir l'adresse de la variable de programme).
Valeurs uniques
- *NULL
- Le pointeur d'espace prend la valeur indéfinie, c'est-à-dire qu'il ne désigne l'adresse d'aucun objet espace et qu'il n'a plus de type.
Elément 1 : Variable programme
- valeur-caractère
- Indiquez le nom de la variable de programme désignée par le pointeur d'espace. Tout nom contenant des caractères spéciaux doit figurer entre apostrophes.
Si un tableau est précisé sans indice, le pointeur désigne l'adresse du premier élément du tableau. Cette variable de programme ne doit pas dépasser 132 caractères. Ce nombre comprend les qualifiants, indices, blancs imbriqués, parenthèses et virgules. Ce nombre comprend les qualifiants, indices, blancs, parenthèses et virgules, à l'exclusion des apostrophes lorsque des caractères spéciaux sont utilisés. Un indice peut être un entier, un numéro MI ODV ou encore un nom de variable numérique.
Pour plus d'informations, reportez-vous à la rubrique "Parameter values used for testing and debugging" de "CL concepts and reference" dans le manuel Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/.
Elément 2 : Variable de pointeur base
- valeur-caractère
- Indiquez le nom d'une variable de pointeur de base. Dans certains langages, la variable de programme peut être basée sur une variable de pointeur. Cette combinaison de valeurs vous permet de définir jusqu'à 5 pointeurs de base pour la variable adressée. Tout nom de pointeur de base contenant des caractères spéciaux doit figurer entre apostrophes.
Si le pointeur de base est un tableau, les indices représentant un élément du tableau doivent être précisés. Le nom d'un pointeur de base ne doit pas dépasser 132 caractères. Ce nombre comprend les qualifiants, blancs imbriqués, parenthèses et virgules. Ce nombre comprend les qualifiants, indices, blancs, parenthèses et virgules, à l'exclusion des apostrophes lorsque des caractères spéciaux sont utilisés. Un indice peut être un entier, un numéro MI ODV ou encore un nom de variable numérique.
Pour plus d'informations, reportez-vous à la rubrique "Parameter values used for testing and debugging" de "CL concepts and reference" dans le manuel Rubriques CL de la catégorie Programmation de l'IBM i Information Center, à l'adresse http://www.ibm.com/systems/i/infocenter/.
Nouvelle position (OFFSET)
Définit le déplacement du pointeur d'espace indiqué. Précisez le nombre d'octets à partir de la position de début de l'objet mémoire désigné par le pointeur.
Programme (PGM)
Désigne le programme contenant le pointeur dont la valeur doit être modifiée.
- *DFTPGM
- Le programme préalablement défini comme programme par défaut contient le pointeur dont la valeur doit être modifiée.
- nom
- Indiquez le nom du programme contenant le pointeur dont la valeur doit être modifiée. Ce nom doit avoir été préalablement spécifié dans la commande STRDBG (Démarrer le débogage) ou ADDPGM (Ajouter un programme au débogage).
Type de pointeur (PTRTYPE)
Indique le type du pointeur désigné au paramètre Pointeur à modifier (PTR).
Remarque :Une valeur de pointeur système ne peut être attribuée à un pointeur HLL (langage évolué).
- *SAME
- Le type du pointeur n'est pas modifié.
- *SYP
- Désigne un pointeur système.
- *SPP
- Désigne un pointeur d'espace.
Niveau de récursivité (RCRLVL)
Indique le niveau de récursivité du programme qui contient la variable dont la valeur doit être modifiée. Les modifications apportées aux variables statiques s'appliquent systématiquement à tous les niveaux de récursivité. Le niveau de récursivité 1 correspond au premier appel du programme, le niveau de récursivité 2 au deuxième appel et ainsi de suite jusqu'au dernier appel, c'est-à-dire le plus récent. Par exemple, si le programme A appelle le programme B, le programme B appelle à son tour le programme A et un nouveau niveau de récursivité est créé pour le programme A. Si le programme A, lors de son premier appel, contient la variable à modifier, la valeur 1 doit être entrée au paramètre Niveau de récursivité (RCRLVL). Certains langages évolués permettent également d'employer des procédures de récursivité. A ce sujet, consultez le manuel correspondant au langage évolué utilisé.
- *LAST
- Le dernier appel du programme indiqué (c'est-à-dire le plus récent) contient la variable à modifier.
- entier
- Indiquez le niveau de récursivité du programme contenant la variable à modifier.
Exemples
CHGPTR PTR(DATAFILPTR) SYSOBJ(QGPL/MYFILE) OBJTYPE(*FILE)
Cette commande permet de modifier la valeur du pointeur DATAFILPTR utilisé dans le programme par défaut au mode débogage. La valeur du pointeur est modifiée pour pointer vers le fichier nommé MYFILE, stocké dans la bibliothèque QGPL.
© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.