par Emre Demiralp L´auteur: Je suis �tudiant au coll�ge am�ricain Robert d'Istanbul,et en m�me temps,un des administrateurs du d�partement informatique de la facult� des arts et sciences de l'Universit� des Techniques d'Istanbul. Le syst�me d'exploitation dominant dans ces d�partements est LINUX. Centres d'int�rets: PovRay et PostScript,animation,conception de CD,programmation,holographie etc... Utilisateur Linux depuis 1994. Sommaire: |
Résumé:
Goutte � goutte,il devient un lac-Proverbe Turc-.L'auteur d�crit la pile des op�randes du langage PostScript. Il pr�sente ici les manipulations de pile et les op�rateurs math�matiques. Cet article ne couvre pas toutes les propri�t�s de la pile; ce sera le sujet des articles suivants.
Voici le second article de la s�rie consacr�e � PostScript. Il sera d�di� aux op�rations sur la pile. La pile des op�randes est s�rement la partie la plus importante de PostScript. Assignation, op�rations math�matiques et arithm�tiques, boucles et op�rations logiques sont tous trait�s dans cet partie sp�cifique de la m�moire. Oui! la pile est une r�gion sp�ciale de m�moire qui est utilis�e par PostScript pour ex�cuter presque tout ce que nous voulons lui faire faire. La pile conserve l'information dans un ordre tel que les derni�res donn�es entr�es sont extraites en premier. Vous pouvez imaginer cela comme un tuyau dont une extr�mit� est ferm�e. Quand vous mettez quelque chose dans ce tuyau, il faut pousser ce qui y est d�j� vers le fond pour pouvoir y entrer le nouvel objet.. De la sorte, le dernier objet entr� sera toujours le plus proche de la sortie. Les �l�ments de la pile peuvent �tre des cha�nes, des constantes num�riques, des cl�s, des blocs...
Bien que les �l�ments soient rang�s dans la pile, il existe des op�rations qui permettent de la r�ordonner. Les manipulations sont appliqu�es � un ou plusieurs �l�ments de la pile. Les op�rateurs, par d�finition, manipulent les �l�ments de la pile. S'ils ont besoins de param�tres, ceux-ci doivent d'abord �tre pouss�s sur la pile. L'op�rateur agit alors en fonction de ces op�randes. On trouvera ici une liste de ces op�rateurs accompagn�s d'explications ainsi que des exemples destin�s � illustrer d'autres d�tails.
pop: Cet op�rateur �limine l'�l�ment sup�rieur de la pile (le dernier introduit).
exch: Cet op�rateur �change les deux �l�ments sup�rieurs de la pile.
dup: Cet op�rateur cr�e une copie du dernier �l�ment entr� sur la pile et le pousse dessus. En d'autres termes, il duplique l'�l�ment sup�rieur de la pile.
copy: Cet op�rateur n�cessite une op�rande enti�re (un param�tre) qui doit �tre pouss� sur la pile auparavant. Si nous choisissonsn comme entier, alors la commande sera n copy. A ce stade, la copie du jeux des n �l�ments sup�rieurs sera cr��e et ajout� au dessus de la pile. Autrement dit, copy est un op�rateur de duplication multiple.
index: Cet op�rateur n�cessite une op�rande enti�re (un param�tre) qui doit �tre pouss� sur la pile auparavant. Si nous choisissonsn comme entier, alors la commande sera n index. A ce stade, la copie du n-�me �l�ment depuis le haut de la pile sera cr��e et ajout� au dessus de la pile. Autrement dit, index peut s�lectionner un �l�ment interne et cr�er et rep�rer sa copie dans la pile. L'indexation des �l�ments commence par le plus �lev� avec le num�ro 0.
roll: Cet op�rateur n�cessite deux param�tres entiers qui doivent �tre pouss�s sur la pile auparavant. Si nous choisissons m et n comme entiers, alors la commande sera m n roll. Ici m d�finit combien d'�l�ments tournerons tandis que n caract�rise le nombre de rotations. Une rotation est d�finie de telle sorte que l'�l�ment sup�rieur de la pile devienne le m-�me �l�ment tandis que les autres m-1 �l�ments du dessous se d�calent d'une place vers le haut. Cette instruction est valide quand n est �gal � 1. S'il valait 2, alors deux rotations cons�cutives prendraient place. En d'autre termes, m 2 roll est �quivalent � m 1 roll m 1 roll. Le param�tre n peut prendre des valeurs n�gatives. Dans ce cas le mouvement est invers�. Cela signifie aussi que l'effet global de la commande m n roll m -n roll n'a aucun effet sur la pile. L'indexation des �l�ments commence par le plus �lev� avec le num�ro 0.
clear: Cet op�rateur �limine tous les �l�ments de la pile.
count: Cet op�rateur compte les �l�ments de la pile. Le r�sultat est pouss� sur la pile et en devient ainsi un nouvel �l�ment. Si vous ne voulez pas de ce nouvel �l�ment, vous pouvez utiliser la commande composite count pstack pop o� pop retire le nouvel �l�ment cr�� par count apr�s que le r�sultat ait �t� affich� par l'action de l'op�rateur de fichier pstack.
mark: Cet op�rateur met un �l�ment rep�re (-marktype-) sur la pile. Cet �l�ment peut �tre utilis� pour diviser un ensemble d'�l�ments dans la pile. Deux autres op�rateurs cleartomark et counttomark recherchent cet �l�ment pour leur propre compte. S'il n'est pas trouv�, alors une erreur est g�n�r�e.
cleartomark: Cet op�rateur supprime tous les �l�ments depuis le plus �lev� jusqu'au premier rep�re -marktype-. Cet objet -marktype- est aussi supprim�. S'il n'est pas trouv�, alors une erreur est g�n�r�e.
counttomark: Cet op�rateur compte tous les �l�ments depuis le plus �lev� jusqu'au premier rep�re -marktype-. Le r�sultat, qui est une valeur enti�re,est pouss� sur la pile et devient le dernier �l�ment. Si aucun rep�re n'est trouv�, alors une erreur est g�n�r�e.
Parlons maintenant de la pile. Pour faire fonctionner les op�rateurs ci-dessus, il faut d'abord activer l'interpr�teur PostScript. Comme indiqu� lors du premier article, la communaut� Linux utilise un interpr�teur public,ghostscript. Ghostscript peut �tre lanc� de plusieurs mani�res en choisissant des param�tres appropri�s sur la ligne de commande. Le plus courant consiste simplement � taper gs dans l'environnement X Window. Parfois, cela peut ne pas marcher � cause de probl�mes de configuration X. Un message d'erreur appara�t disant qu'il est impossible de cr�er une console graphique adapt�e. Ces probl�mes doivent �tre r�solus ou bien vous pouvez forcer ghostscript � utiliser le pilote x11. Pour cela entrez gs -sDEVICE=x11. Cela, ou simplement gs (si cela marche) cr�e une fen�tre � fond blanc qui est utilis�e pour les affichages � venir pendant la session. Puisque les affichages ne sont pas trait�s dans notre article, nous n'avons pas besoin de cette fen�tre et il est possible de l'enlever. Pour cela, l'interpr�teur ghostscript peut �tre appel� sans fen�tre en entrant le param�tre -dNODISPLAY sur la ligne de commande apr�s gs ou gs -sDEVICE=x11. Dans ce cas, un ent�te de copyright est affich�, suivi de l'invite ghostscript GS> au d�but d'une nouvelle ligne. Arriv� l�, ghostscript est pr�t � recevoir vos commandes. La pile des op�randes est vide.
Pour voir le contenu de la pile, vous pouvez utiliser l'op�rateur de fichier pstack. On l'appelle op�rateur de fichier parce qu'il envoie des informations sur le contenu de la pile vers le fichier de sortie standard qui est l'�cran par d�faut. Si vous entrez cette commande � l'invite, rien n'est affich� et une nouvelle invite GS> appara�t. Cela signifie que la pile est vide.
Pour entrer des �l�ments dans la pile, vous pouvez le faire depuis l'invite. Par exemple, si vous entrez 1 comme �l�ment, tapez juste 1 � l'invite. Une nouvelle invite appara�t sur la ligne suivante, mais cette fois ce n'est pas GS>. c'est GS<1>. Cette nouvelle forme de l'invite est le reflet du nombre d'�l�ments dans la pile. Ainsi si vous avez GS<123> � un moment de votre session ghostscript cela veut dire que vous avez 123 �l�ments dans la pile.
On peut entrer plus d'un �l�ment dans la pile � la fois. Pour cela, tapez tous les �l�ments � la suite et s�par�s par un espace. Par exemple, si vous entrez 1 2 3 4 5 6 � l'invite alors les �l�ments 1, 2, 3, 4, 5, 6, sont pouss�s sur la pile. Une commande pstack affichera alors les �l�ments en ordre vertical de telle sorte que le dernier entr� soit affich� en premier. Voici l'aspect de l'affichage apr�s ces deux commandes:
GS>1 2 3 4 5 6 GS<6>pstack 6 5 4 3 2 1 GS<6>Il est aussi possible d'entrer des donn�es dans la pile et d'en visualiser le contenu en une fois. Tout ce que vous avez � faire est de taper la commande pstack � la suite des �l�ments entr�s, soit:
GS>1 2 3 4 5 6 pstack 6 5 4 3 2 1 GS<6>Jusqu'� pr�sent, nous avons entr� des nombres en tant qu'�l�ment. Mais ce ne sont pas les seuls types d'�l�ments, il est aussi possible d'en entrer d'autres comme des variables ou des cl�s, des cha�nes, des blocs, etc... Nous les aborderons plus en d�tails un peu plus tard. Il faut toutefois dire maintenant une chose: si vous essayer d'entrer un seul caract�re a ou une cha�ne abc, cela g�n�rera un message d'erreur parce que PostScript ne comprend pas ces choses. Pour entrer un caract�re ou une cha�ne, il faut l'encadrer par des (). Nous avons parl� d'un �l�ment sp�cial appel� marktype. Voici un exemple qui traite ce cas:
GS>1 2 3 mark 4 5 6 pstack 6 5 4 -marktype- 3 2 1 GS<7>Nous allons maintenant voir des exemples d'op�rateurs afin de manipuler des op�randes sur la pile. Cet exemple montre comment agissent les op�rateurs et devrait se suffire � lui m�me pour clore cette section sans plus d'explications:
GS>1 2 3 mark 4 5 6 pstack 6 5 4 -marktype- 3 2 1 GS<7>pop pstack 5 4 -marktype 3 2 1 GS<6>exch pstack 4 5 -marktype 3 2 1 GS<6>dup pstack 4 4 5 -marktype- 3 2 1 GS<7>2 copy pstack 4 4 4 4 5 -marktype 3 2 1 GS<9>5 index pstack -marktype- 4 4 4 4 5 -marktype 3 2 1 GS<10>cleartomark cleartomark pstack 3 2 1 GS<3>3 1 roll pstack 2 1 3 GS<3>count pstack 3 2 1 3 GS<4>mark 7 8 pstack 8 7 -marktype- 3 2 1 3 GS<7>counttomark pstack 2 8 7 -marktype- 3 2 1 3 GS<8>clear pstack GS>
En plus des op�rateurs de manipulation de la pile de PostScript, il existe aussi des op�rateurs arithm�tiques et math�matiques. La liste en est donn�e ci-dessous. Nous ne donnerons pas d'exemples. Il est laiss� le soin de les exp�rimenter au lecteur qui devrait maintenant �tre capable de les cr�er en se basant sur l'exemple de la session ci-dessus.
add: Cette commande n�cessite deux param�tres num�riques dont les valeurs sont additionn�es. Si ces valeurs sont m et n, alors la commande est m n add. D'abord m puis n sont pouss�s sur la pile. L'action de l'op�rateur add sur les deux �l�ments sup�rieurs de la pile constitue l'�tape finale. Elle cr�e un nouvel �l�ment dont la valeur est �gale � la somme de m et n. Quand l'op�ration est termin�e, m et n ne sont pas conserv�s dans la pile. Au lieu de cela, c'est le r�sultat qui devient l'�l�ment sup�rieur de la pile.
div: Cette commande n�cessite deux param�tres num�riques dont les valeurs sont divis�es. Si ces valeurs sont m et n, alors la commande est m n div. Le m�canisme de l'op�ration est le m�me qu'avec add.L'op�ration de Division se fait arithm�tiquement en virgule flottante.Quand l'op�ration est termin�e, m et n ne sont pas conserv�s
idiv: Cette commande n�cessite deux param�tres num�riques dont les valeurs entre dans une op�ration de division enti�re. Si ces valeurs sont m et n, alors la commande est m n idiv. Le m�canisme de l'op�ration est le m�me qu'avec div hormis le type de division. C'est une division enti�re. Si les param�tres ne sont pas entiers, cela marche quand m�me.
mod: Cette commande n�cessite deux param�tres num�riques.Elle �value le reste de la division enti�re du premier param�tre par le second. Si un des deux param�tres n'est pas entier, alors cela ne marchera pas. Le r�sultat est la seule valeur conserv�e dans la pile apr�s l'op�ration.
mul: Tout comme add, div. C'est un op�rateur binaire qui n�cessite deux param�tres. Le r�sultat est la multiplication des deux param�tres et il est conserv�e dans la pile apr�s l'op�ration.
sub: Tout comme add, div, mul. La seule diff�rence r�side dans le type d'op�ration. Il soustrait la valeur du second param�tre du premier. Les param�tres et le r�sultat sont des valeurs num�riques et le r�sultat est conserv�e dans la pile apr�s l'op�ration.
exp: C'est un op�rateur math�matique binaire. Il n�cessite deux param�tres. Le premier est la base et le second l'exposant. Il �l�ve la base � la puissance de l'exposant. Les param�tres doivent �tre dans les limites de l'op�ration d'exponentiation. Le r�sultat est un nombre � virgule flottante dont la valeur est conserv�e dans la pile apr�s l'op�ration.
atan: C'est un autre op�rateur math�matique binaire pour l'�valuation d'un angle. L'angle est donn� en degr�s entre 0 et 360. Il n�cessite deux param�tres. Le rapport du premier sur le second est �gal � la tangente de l'angle � �valuer. Les deux param�tres peuvent valoir z�ro mais pas simultan�ment. Le signe des param�tres d�termine dans quel cadran est le r�sultat. Les valeurs positives du premier param�tre correspondent au plan y, tandis que les valeurs positives du second param�tre correspondent au plan x.
abs: C'est un op�rateur math�matique � un param�tre. Il n'a besoin que d'un op�rateur dont la valeur absolue est le r�sultat. Tous comme ci-dessus, le r�sultat est conserv� comme un nouvel �l�ment de la pile.
neg: Ceci change le signe de son seul argument.
ceiling: Cet op�rateur �value la valeur enti�re la plus proche de son argument par exc�s.
floor: Cet op�rateur �value la valeur enti�re la plus proche de son argument par d�faut.
round: Cet op�rateur �value la valeur enti�re la plus proche de son argument.
truncate: Cet op�rateur supprime la partie fractionnaire de son argument.
sqrt: Cet op�rateur �value la racine carr�e de son argument.
cos: Cet op�rateur �value le cosinus de son argument qui est donn� en degr�s.
sin: Cet op�rateur �value le sinus de son argument qui est donn� en degr�s.
ln: Cet op�rateur �value le logarithme N�perien de son argument.
log: Cet op�rateur �value le logarithme � base 10 de son argument.
Avant de terminer cet article, voici un dernier d�tail. Bien que nous l'ayons mentionn� ci-dessus, peut �tre implicitement,les param�tres (op�randes en terminologie PostScript) d'une commande peuvent cr�er des probl�mes d�plaisants. La commande (ou op�rateur en terminologie PostScript) recherche ses param�tres dans la pile. Ainsi, ex�cuter une commande, d�lib�r�ment, ou par erreur, sans lui fournir d'arguments sur la pile causera soit une plainte a propos d'un type erron�, soit la suppression d'�l�ments sup�rieurs de la pile. L'utilisateur doit rester tr�s attentif sur ce point.
Nous recommandons aussi aux utilisateurs qui veulent comprendre PostScript d'�crire des programmes plus compliqu�s et plus aboutis. Dans les futurs articles de cette s�rie, nous donnerons plus de d�tails sur le langage PostScript. Vos questions et commentaires sont les bienvenus � propos de nos pr�sentations.
Relu par Jorge M. Paulo et Jose Quesada
Site Web maintenu par l´équipe d´édition LinuxFocus
© Emre Demiralp LinuxFocus 1999 |
Translation information:
|
1999-11-24, generated by lfparser version 0.7