Aller au contenu

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

  • PTR Pointeur à modifier obligatoire
  • SYSOBJ Nom d'objet système
  • OBJTYPE Type d'objet
  • ADR Adresse à pointer
  • OFFSET Nouvelle position
  • PGM Programme
  • PTRTYPE Type de pointeur
  • RCRLVL Niveau 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 :

  1. Cette commande est fournie avec le droit public *EXCLUDE, et le profil utilisateur QSRV dispose du droit privé permettant de l'utiliser.
  2. 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).
  3. 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.
  4. Cette commande ne permet pas de modifier les variables d'un programme lié.
  5. 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.

Messages d'erreur

Messages *ESCAPE

CPF1999
Erreurs dans la commande.

© Copyright IBM Corp. Texte d'aide reproduit à des fins de formation.