• Aucun résultat trouvé

Indexation des modules

La commande pkg mkIndex vient compl´eter le m´ecanisme de gestion des mo- dules et des biblioth`eques de proc´edures au moyen des instructions package require et package provide qui vient d’ˆetre d´ecrit. Cette commande cr´ee dans chacun des

r´epertoires o`u elle est appliqu´ee un fichier qui indexe toutes les proc´edures dispo- nibles et permet le chargement automatique des modules d`es que la commande package require est invoqu´ee.

. pid 136

pid

La commande pid recherche le num´ero d’identification des processus en cours.

Syntaxe

pid?Identificateur?

Description

Si l’argument Identificateur est sp´ecifi´e, il fait r´ef´erence `a une s´equence chaˆın´ee de processus (process pipeline) cr´e´ee avec la commande open. Dans ce cas, la commande renvoie une liste de tous les num´eros d’identification des processus qui constituent la s´equence chaˆın´ee, dans l’ordre. Ces num´eros sont des valeurs d´ecimales. La liste sera vide si Identificateur se r´ef`ere `a un fichier ouvert qui n’est pas une s´equence chaˆın´ee.

Finalement, si aucun argument n’est sp´ecifi´e, c’est le num´ero d’identification du processus Tcl courant (attribu´e par le noyau) qui est renvoy´e.

proc

La commande proc permet de cr´eer des proc´edures Tcl.

Syntaxe

proc Nom Args Corps

Description

La commande proc cr´ee une nouvelle proc´edure Tcl appel´ee Nom et remplace toute commande ou proc´edure de ce nom qui pourrait exister d´ej`a. L’argument Corps contient la d´efinition de la proc´edure, c’est-`a-dire le script qui sera ex´ecut´e par l’interpr´eteur Tcl lorque la proc´edure sera invoqu´ee.

Habituellement le nom Nom n’est pas qualifi´e (n’est pas pr´ec´ed´e d’un espace de noms relatif ou absolu) mais si jamais il l’est alors la proc´edure Nom sera cr´e´ee dans l’espace de noms correspondant.

L’argument Args sp´ecifie les arguments formels de la proc´edure. C’est une liste ´eventuellement vide dont chaque terme peut servir d’argument formel dans la d´efinition de la proc´edure : ces termes peuvent se pr´esenter sous la forme d’un simple nom de variable ou bien d’une liste de deux termes dont le premier d´esigne une variable formelle et le deuxi`eme une valeur par d´efaut qui sera attribu´ee `a cette variable si jamais elle n’est pas sp´ecifi´ee dans une invocation de la proc´edure.

Lorsque la proc´edure Nom est appel´ee, une variable locale sera cr´e´ee pour cha- cun des arguments formels de la proc´edure : sa valeur sera la valeur qui lui est trans- mise par l’instruction appelante ou bien, si aucune valeur n’est sp´ecifi´ee, la valeur d´eclar´ee par d´efaut. Donc les arguments sans valeur par d´efaut sont obligatoires et les autres sont facultatifs. Il ne doit donc en principe pas y avoir d’arguments en plus de ceux qui sont d´eclar´es. Il y a toutefois une exception qui permet de cr´eer des proc´edures avec un nombre d’arguments variable et non connu d’avance : si le dernier des arguments Args d´eclar´es dans la commande proc est pr´ecis´ement nomm´e args, tous les arguments qui seront pass´es `a la proc´edure `a partir de celui-ci seront combin´es en une liste et c’est cette liste qui sera transmise comme valeur de l’argument formel args. Il appartiendra ensuite `a la proc´edure, dans sa d´efinition, de savoir quoi faire de la liste d’arguments qu’elle re¸coit ainsi.

Lorsque le script Corps d´efinissant la proc´edure est ex´ecut´e, les noms de va- riables se r´ef`erent en principe `a des variables locales : d’ailleurs ces variables ne sont cr´e´ees qu’au moment de l’ex´ecution mˆeme de la proc´edure et sont d´etruites une fois celle-ci achev´ee. Elles peuvent donc porter le mˆeme nom que des variables existant en-dehors de cette proc´edure : ces derni`eres sont en quelque sorte masqu´ees. Toutefois la d´efinition de la proc´edure peut aussi faire r´ef´erence, au besoin, `a des va- riables d´efinies en-dehors mais il faut pour cela qu’elle fasse appel aux commandes global ou bien upvar (cf. p. 90et 200). D’autre part des variables d´efinies dans un espace de noms particulier ne peuvent ˆetre utilis´ees `a l’int´erieur de la d´efinition

. proc 138 d’une proc´edure qu’au moyen des commandes variable (et non global) ou bien upvar.

La commande proc renvoie une chaine vide. Pour d´efinir la valeur de retour que doit transmettre une proc´edure d´efinie avec proc, on se sert de la commande return (cf. p. 153). En l’absence de commande return, la proc´edure renverra la valeur de retour de la derni`ere commande qu’elle aura ex´ecut´ee dans le corps de sa d´efinition. Si une erreur se produit au cours de son ex´ecution alors la proc´edure dans son ensemble renvoie cette erreur.

puts

La commande puts permet d’´ecrire sur un canal ouvert.

Syntaxe

puts?-nonewline??Canal? Chaˆıne

Description

La commande ´ecrit les caract`eres sp´ecifi´es par l’argument Chaˆıne sur le canal Canal. Canal doit ˆetre un identificateur de canal valide qui aura ´et´e obtenu au- paravant au moyen des commandes open ou socket. Il faut bien entendu qu’il ait ´et´e ouvert en ´ecriture. Si l’argument n’est pas sp´ecifi´e alors c’est la sortie standard stdout qui est utilis´ee.

Par d´efaut la commande puts ajoute un saut de ligne `a la fin de la chaˆıne copi´ee : l’option -nonewline permet d’annuler ce comportement. Les symboles de saut de ligne ins´er´es d´ependent de la plate-forme sur laquelle on travaille : sous MacOS il s’agit de retours-chariots (CR), sous Unix de sauts de ligne (LF) et sous Windows de la combinaison des deux (CRLF). Il s’agit en fait de la valeur courante sp´ecifi´ee au moyen de la commande fconfigure -translation.

Tcl utilise un tampon interne pour stocker provisoirement les donn´ees trans- mises par la commande puts. Tcl ne vide le tampon sur le canal de destination que lorsque celui-ci est plein ou bien si l’on cherche `a le fermer. Au besoin, on peut forcer Tcl `a vider ce tampon en utilisant la commande puts (cf. p. 79). Au moment de vider le tampon, la commande normalement bloque le canal jusqu’`a ce que l’op´eration de transfert soit termin´ee. Si le canal est en mode non-bloquant l’´ecriture se fait en arri`ere-plan d`es que le fichier ou le p´eriph´erique correspondant est en ´etat de l’accepter. Cela implique que l’application doit utiliser la boucle d’´ev´enements de Tcl car c’est seulement `a travers cette boucle que Tcl peut d´eceler si un fichier ou un p´eriph´erique est disponible pour recevoir des donn´ees. On utilise donc des entr´ees/sorties en mode non-bloquant dans un contexte d’´ev´enements en liaison avec la commande fileevent : c’est par un ´ev´enement de fichier (fileevent) que l’on peut ˆetre averti que le canal est prˆet.