Procesos

Es posible lanzar aplicaciones externas desde dentro de MetaCard con las órdenes shell, launch y open process, ya lo hemos visto en la sección de nombre Aplicaciones externas en Capítulo 5. Veamos ahora cómo se puede interactuar con estas aplicaciones.

Es posible además de lanzar (ejecutar) aplicaciones externas, comunicarse con ellas. Esto es, recoger su salida estándar o proporcionarle datos en su entrada estándar en cualquier sistema operativo. Sólo es necesario que la aplicación escogida esté preparada para ello.

Y, además, puede utilizar librerías de funciones desarrolladas en otros lenguajes de programación.

A modo de ejemplo, vamos a realizar un pequeño interfaz visual para las funciones de la librería NetPBM. Esta és un conjunto de funciones de procesado de imágenes construída sobre

Aviso

Falta ficar un esquema de la aplicació en els noms dels objectes ...

Figura 6-8. Contenido de la pila a desarrollar.

 pgmAccio
local nomProcess = "sh ", ordreAExecutar = "pgmcrater > /tmp/algo.pgm"

on menuPick novaOpcio anteriorOpcio
-- put anteriorOpcio && ">" && novaOpcio
# set the label of me to novaOpcio 
 -- No fa falta si esta activa l'opcio de "mostar el nom" (Show Name)
  set cursor to busy
  --  put "(" && nomProcess && ")" && ordreAExecutar
  set the contingut of field "eixida" to empty
  
  open process nomProcess
  write ordreAExecutar & return & "exit" & return \
      to process nomProcess
  read from process nomProcess until eof -- handshake in 5 seconds
  set the contingut of field "eixida" to it
  close process nomProcess
  
  set the fitxerAMostrar of image "resultat" to "/tmp/algo.pgm"
end menuPick

oritge
on mouseUp
  send "mouseUp" to button "Examinar ..."  
end mouseUp

fitxerOritge
on returnInField
  send "mouseUp" to button "Examinar ..."
end returnInField


 resultat
setprop fitxerAMostrar x
  set the fileName of me to empty
  set the fileName of me to x
--  put the fileName of me
end fitxerAMostrar

Examina
on  mouseUp
  answer file "Tria una imatge ..."
  if the result is not "Cancel"
     then
       put it into field "fitxerOritge"
      set the filename of image "oritge" to it
  end if
end mouseUp
           

Figura 6-9. Llegint des de i escribint a un mateix procés.

Procesos largos (en duración temporal) que deben ofrecer la oportunidad de ser interrumpidos.

Figura 6-10. Llegint des de i escribint a un mateix procés.

Figura 6-11. Detalle de la aplicación donde se muestran los controles que implementan la secuencia de pasos y el de parada del proceso.

Puede ser interesante que las tareas se realizen pero que se obtenga una realimentación visual del punto en que está el proceso global.

Esta es una segunda aproximación a la barra de menús de la que se habló en el apartado de "scrolls".

Figura 6-12. Llegint des de i escribint a un mateix procés.

Figura 6-13. Detalle de la aplicación donde se muestran los controles que implementan la secuencia de pasos y el de parada del proceso.