L'envoi de la commande se fait en deux temps. D'abord on l'écrit dans le bloc de communication puis on signifie au serveur qu'il peut l'exécuter.
Le bloc de communication est une structure qui contient plusieurs éléments, (nous les décrirons au fur et à mesure de leur emploi dans ce document) dont une table composée de couples <clé;contenu>. Le nombre de couples est limité dans la librairie (actuellement 100 dans ipcdef.h pour libipc.a).
Ces couples permettent le passage de paramètres nommés entre un client et un serveur.
Un de ces paramètres est le mot clé "COMMAND". C'est celui-ci que lit le serveur lorsqu'il débute une exécution de commande.
Remarque: si COMMAND="" ou si COMMAND n'est pas définit, le message "Pas de keyword COMMAND valide" apparaît sur le serveur et aucune erreur n'est générée.
L'écriture de ce mot-clé se fait avec la fonction shmput(). Cette fonction est destructive, car elle vide le bloc avant d'y placer le mot-clé et son contenu. Par exemple:
INTER > shmstat=shmput("COMMAND", "show i")On voit que la commande contient des arguments sur la ligne de commande (ici le "i"). Dans le cas du lancement d'une procédure, les neuf arguments standards se passent sur la ligne de commande, auxquels on peut ajouter des paramètres dans le bloc de communication.
Pour stocker ces paramètres, on utilise la fonction non-destructive shmadd(). Remarque: cette fonction remplace le contenu d'un mot-clé en cas de synonyme. Par exemple, si on veut donner la valeur de tout les NX et NY du client au serveur, on tape:
INTER > shmstat=shmput("COMMAND", "@dosomething") INTER > do i=1,dim(nx) INTER > shmstat=shmadd(lcat("NX(",itoa(i),")"),nx(i)) INTER > shmstat=shmadd(lcat("NY(",itoa(i),")"),ny(i)) INTER > enddoAttention, la longueur des noms des paramètres est limitée à 12 et la longueur des contenus et limitée à 128.
Maintenant que la commande et ses paramètres facultatifs sont inscrit dans le bloc de communication, le client doit signifier au serveur de démarrer la commande. Il peut le faire selon deux modes.