por Emre Demiralp Sobre el Author: Soy un estudiante en el Istanbul American Robert College, y a la vez, uno de los administradores del Computer Labs en la Faculty of Arts and Sciences en la Istanbul Technical University. El sistema operativo que domina sobre todos los demás en estos laboratorios es LINUX. Intereses: PovRay y PostScript, animación, diseño de CDs, programación, holografía, etc.. usuario de Linux desde 1994. Contenidos: |
Resumen:
Gota a gota, se hace un lago -Proverbio Turco-. El autor describe la pila de operandos del lenguaje PostScript. Se presentan aquí las manipulaciones de la pila y los operadores matemáticos. Este artículo no cubre todas las propiedades de la pila de operandos. Los artículos siguientes continuarán hablando acerca de ello.
Este es el segundo de una serie de artículos acerca de PostScript. El propósito principal de este artículo es comentar el manejo de la pila. La pila de operandos es quizás la parte más importante de PostScript. Asignaciones, operaciones aritméticas o matemáticas, bucles y operaciones lógicas son manejadas en esta porción de memoria específica. ¡Sí! La pila es una región especial de memoria que PostScript usa para ejecutar casi cualquier cosa que nosotros queramos que PostScript haga. La pila mantiene la información en orden de forma que el último dato introducido sale primero. Puedes visualizar esto como una tubería con uno de sus extremos cerrado. Cuando pones algo en esta tubería, empujará todos los elementos que ya estaban en ella hacia el extremo cerrado para hacer sitio para el mismo. Por lo tanto el último elemento en entrar será siempre el más cercano al extremo abierto de la tubería. Los elementos en la pila pueden ser cadenas de texto, constantes numéricas, claves, bloques, ...
A pesar de que los elementos se ordenan en la pila, hay algunas operaciones de pila que nos permiten reordenar los elementos. Las "manipulaciones" se aplican a uno o más de los elementos de la pila. Los operadores, por definición, manipulan elemento(s) en la pila. Los operadores pueden o no necesitar parámetros (operandos en la terminología PostScript) dependiendo del caracter de la manipulación. Si necesitan el(los) parámetro(s) entonces estos deben ser apilados en la pila primero. El operador toma acción entonces con respecto a estos operandos.. Aquí se da una lista de estos operadores con las explicaciones necesarias. Además se dan algunos ejemplos para ilustrarlo con más detalle.
Permitenos decir algo ahora acerca de la pila. Si quieres ver en acción a los operadores anteriores, debes activar primero el interprete Postscript. Como se mencionó en el primer artículo, en el mundo Linux se usa un interprete disponible publicamente, de nombre ghostscript. Ghostscript puede activarse de diferentes maneras mediante el paso de los parámetros apropiados en la linea de comandos. La forma habitual de hacerlo es teclear gs en el entorno X Window. A veces puede que no funcione debido a algún problema de configuración en X. Se visualizará un mensaje de error acerca de la incapacidad de crear un consola gráfica. Entonces o bien solucionas esos problemas o puedes forzar a ghostscript a usar el dispositivo x11. Para conseguirlo debes teclear gs -sDEVICE=x11. Tanto esto como un simple gs (si esto último funciona) crea un ventana vacía con el fondo blanco que se usará para los mensajes que se crearán durante la sesión. Dado que los mensajes (displays) no se tratan en este artículo no necesitamos esta ventana y es posible librarse de ella. Para ello, se puede activar el interprete ghostscript sin displays tecleando el parámetro -dNODISPLAY en la linea de comandos después de gs o de gs -sDEVICE=x11. Si se hace esto, se visualizará una cabecera de copyright seguida del prompt de ghostscript GS> al principio de una nueva linea. En este punto, ghostscript está preparado para tus comandos. La pila de operandos está vacía.
Para ver el contenido de la pila de operandos puedes usar el operador de fichero pstack. Se le llama operador de fichero porque envía información acerca del contenido de la pila al fichero de salida estandar que por defecto es la pantalla. Si introduces este comando en el prompt no se visualiza nada y un nuevo prompt GS> aparecerá al principio de una nueva linea. Esto significa que la pila de operandos está vacía.
Para introducir elementos en la pila de operandos puedes teclear los elementos en el prompt. Por ejemplo si quieres introducir 1 como un elemento, solo tienes que teclear 1 en el prompt. Después de esto se crea un nuevo prompt al principio de la linea siguiente. Pero, ahora, el prompt no es GS>. Es G<1>. Esta nueva forma de prompt refleja el número de elementos en la pila de operandos. De modo que, si tu tienes GS<123> en cualquier momento en tu sesión ghostscript esto significa que hay 123 elementos en la pila de operandos.
Puedes introducir más de un elemento en la pila de operandos de un solo paso. Para ello, debes teclear todos los elementos consecutivamente, pero separados por un espacio en blanco. Por ejemplo, si tu tecleas 1 2 3 4 5 6 en el prompt, los elementos 1, 2, 3, 4, 5, 6, se apilarán en la pila de operandos respectivamente. Si ejecutas pstack después de esto, entonces los elementos se visualizarán en orden vertical de forma que el último elemento introducido se visualiza primero. La visualización de esta sesión de dos comandos puede quedar como sigue:
GS>1 2 3 4 5 6 G<6>pstack 6 5 4 3 2 1 G<6>
También es posible introducir elementos en la pila de operandos y ver el contenido de la pila en un solo paso. Todo lo que tienes que hacer es añadir el comando pstack después de los elementos a ser introducidos. Por tanto:
GS>1 2 3 4 5 6 pstack6 5 4 3 2 1 G<6>
Hasta ahora hemos usado números para introducir elementos. Los números no son el único tipo de elementos, es posible introducir otros tipos de elementos como variables o claves, cadenas de texto, bloques, etc. Los trataremos más tarde en detalle. De todas maneras hay algo que debemos decir: si intentas introducir por ejemplo, un solo caracter a o una cadena abc se emitirá un mensaje de error. Esto es debido a que PostScript no puede entender estas cosas. Si quieres introducir un caracter o una cadena tienes que encerrarlo mediante los símbolos (). Aquí hemos hablado también acerca de un tipo especial de elemento que se llama marktype. Para ver todo esto podemos dar la siguiente sesión de ejemplo:
GS>1 2 3 mark 4 5 6 pstack6 5 4 -marktype- 3 2 1 G<7>
Ahora vamos a ver algunos ejemplos de las operadores que manipulan la pila de operandos. Daré una sesión para mostrar como actuan estos operadores y me gustaría cerrar esta sección sin más explicaciones.
GS>1 2 3 mark 4 5 6 pstack6 5 4 -marktype- 3 2 1 G<7>pop pstack 5 4 -marktype 3 2 1 G<6>exch pstack 4 5 -marktype 3 2 1 G<6>dup pstack 4 4 5 -marktype- 3 2 1 G<7>2 copy pstack 4 4 4 4 5 -marktype 3 2 1 G<9>5 index pstack -marktype- 4 4 4 4 5 -marktype 3 2 1 G<10>cleartomark cleartomark pstack 3 2 1 G<3>3 1 roll pstack 2 1 3 G<3>count pstack 3 2 1 3 G<4>mark 7 8 pstack 8 7 -marktype- 3 2 1 3 G<7>counttomark pstack 2 8 7 -marktype- 3 2 1 3 G<8>clear pstack GS>
Aparte de los operadores de manipulación de la pila de operandos de PostScript hay algunos operadores aritméticos y matemáticos. Más abajo se dan estos operadores. No habrá ejemplos. Esto se deja en manos del lector que debería ser capaz de crearlos, después de haber estudiado las sesiones de ejemplo de arriba.
Antes de terminar este artículo una nota más. Si bien se ha mencionado arriba, quizás de forma implícita, los parámetros (operandos en la terminología PostScript) de un comando pueden crear algunos problemas desagradables. El comando (u operador en la terminología PostScript) busca sus parámetros en la pila de operandos. Cuando se encuentran el comando los usa y son borrados de la pila de operandos. De manera que ejecutar, a propósito o por error, un comando que necesita parámetro(s) sobre una pila de operandos sin valores para ellos, puede provocar bien una notificación sobre los parámetros que están el cima de la pila si estos no son válidos para el tipo de parámetro requerido, o que alguno(s) de los elementos de la pila de operandos sean eliminados. Por tanto el usuario debe tener mucho cuidado con esto.
Antes de finalizar esta presentación recomendamos escribir programas más complicados y completos a los usuarios que quieran avanzar con el lenguaje PostScript. Todas las preguntas y comentarios son bienvenidos.
Contactar con el equipo de LinuFocus
© Emre Demiralp LinuxFocus 1999 |
Translation information:
|
1999-07-02, generated by lfparser version 0.6