Revistas en papel
 Amiga World Nº21 - Mayo 1991
Anterior
Menú
Logotipo
Sí puedes leer esta frase, la página ha sido actualizada.

El Amiga Me Encanta ha conseguido el permiso por escrito de IDG Comunications España
para ofrecer los artículos de la revista Amiga World España.

Comunicación con AREXX

Por Tim Grantham

Mediante la creación de Scripts bajo el
Interface ARexx, usted podrá automatizar los
procesos de comunicación con su Módem


Debido a que los Scripts realizados con ARexx pueden comunicarse con diversidad de programas, estos pueden actuar como coordinadores del software, activando programas para que trabajen juntos en la realización de una misma tarea automatizada. Un ejemplo del proceso de comunicación ARexx es el siguiente ejemplo llamado fax.rexx.

Fax.rexx utiliza el emulador de terminal VT100/220 del programa Handsnake V2.20, así como las capacidades ofrecidas por CompuServe. Debido a que HandSnake posee un puerto de comunicaciones ARexx, fax,rexx aprovecha el modo de operación invisible que incluye este programa: cuando se invoca con la opción -n, HandSnake se carga y se ejecuta, sin embargo no se abre ninguna pantalla de trabajo del programa. En este modo, este permanece de fondo, actuando como servidor de comunicaciones con cualquier programa que soporte ARexx.

Arexx, así como programas compatibles, se comunican a través de mensajes. Cuando un programa desea invocar una función a través de lenguaje ARexx, este deberá especificar el estado del programa con el cual desea comunicarse; por ejemplo la siguiente línea:

   address 'HANDSHAKE1'

permite que el intérprete ARexx envíe todos los mensajes siguientes a la primera tarea que se esté ejecutando bajo el programa HandShake. Un mensaje que seleccione un comando de HandShake (o de un programa específico) no necesita un mensaje de respuesta, pero un mensaje llamando a una función de HandShake necesita una respuesta.

Cuando un programa ARexx llama a una función de HandShake, el intérprete ARexx envía un mensaje conteniendo la función solicitada por HandShake, más unos datos adicionales que contienen información para que HandShake ejecute la función. Por ejemplo en fax.rexx la línea:

   HS_STRING('+++ATZ'cr)

Provoca que el intérprete ARexx envíe el mensaje para que HandShake transmita el mensaje +++ATZ y un retorno de carro a través del puerto serie, exactamente como si este se hubiese escrito con el teclado.

La línea:

   r = HS_GETSTR('OK')

Provoca que HandShake busque, a través de la cadena de caracteres que proviene del MODEM, la palabra OK. El comando previo:

   RS_TIMEOUT 40

informa a HandShake para que espere dicha cadena sólo durante el período de 40 segundos. Mientras HandShake realiza esta operación, el intérprete ARexx suspende la ejecución del programa ARexx. Sin la variable de tiempo, el programa ARexx permanecería suspendido indefinidamente.

Si HandShake encuentra la cadena antes del tiempo de espera, este devuelve un mensaje que contiene la cadena al intérprete ARexx; una vez realizada esta operación se asigna la cadena a la variable 'r' reejecutandose el programa ARexx.

Por el contrario, si HandShake no encuentra la cadena antes del tiempo dado, la búsqueda se detiene, enviando un mensaje al intérprete ARexx que contiene la cadena HSERRTIMEOUT. El intérprete ARexx también asignará la cadena a la variable 'r' reejecutando el programa ARexx.

Fax.rexx utiliza
el emulador de terminal
VT100/220 del programa
Handshake V2.20,
así como las
capacidades ofrecidas
por CompuServe.

Las siguientes líneas contiene un ejemplo sobre el diálogo entre el interface ARexx y el programa HandShake, en el cual se pueden observar las anteriores descripciones:

   or = 'od'x
   HS_STRING('+++ATZ'cr)
   r = HS_GETSTR('OK')
   if r = 'OK' then
         HS_DIAL('CIS (2400)')
   else do
         say "Saliendo"
         exit 20
         end

La primera línea asigna el carácter de salto de línea a la variable cr, con lo cual podrá incluir dicho carácter en una cadena. La segunda línea informa a HandShake para que envíe la cadena +++ATZ, más el salto de línea. Esto provoca el reset en los Módems compatibles Hayes. La tercera línea provoca que HandShake busque la cadena OK, con lo cual se completará la secuencia de reset. Las dos siguientes líneas informan a HandShake para que marque el número de CompuServe, pero sólo si este ha recibido previamente la cadena OK antes del tiempo de espera. De lo contrario el programa ARexx asume que no se ha podido acabar la secuencia de inicialización correctamente y acaba la ejecución del mismo.

Otras de las funciones y comandos utilizados por Fax.rexx del programa HandShake son las siguientes:

Funciones:

-HS_DIAL marca un número de teléfono desde la lista telefónica de HandShake.

-HS_TRANSMIT comienza la transmisión de un fichero.

Comandos:

-HS_PROTOCOL define el tipo de transferencia de un fichero.

-HS_HANGUP informa al módem para que interrumpa la comunicación.

-HS_QUIT provoca la salida desde el programa HandShake.

Otros emuladores de terminal que soporten ARexx (como por ejemplo Online!, ATalk III, y VLT) contienen comandos similares. Usted podrá adaptar fax.rexx para que trabaje adecuadamente con su programa de comunicaciones.

Para ejecutar fax.rexx, usted deberá ejecutar el programa ARexx en modo residente, Rexxmast. Una vez realizada esta operación, introdúzcase en el CLI y teclee el siguiente comando:

   rx fax.rexx filename phone_number subject : name

Donde 'filename' es el nombre del fichero que contiene el texto de los mensajes, y Phone_number es el número de la máquina destino a la cual se enviará el mensaje. (Nota: CompuServe requiere el código de área) Subject : Name consiste en la cabecera de conexión así como la dirección del sujeto. Usted no puede utilizar espacios en la definición de filename o phone_number; sin embargo en estas dos variables, separadas siempre por dos puntos, podrá introducir varias palabras separadas por espacios.

Por ejemplo, si fax.rexx reside en el periférico lógico REXX: la invocación podría ser:

   rx fax myfax.txt 609-555-5555 project estimate : Ms. Paula Manning, Director

Si se olvida del formato, introduzca simplemente rx fax, y fax.rexx le interrogará por el resto de los parámetros. Este método, sin embargo, le previene de la ejecución por separado del programa mediante el comando RUN. Si HandShake no se encuentra ejecutándose, fax.rexx lo cargará y ejecutará en modo invisible. Si HandShake se encuentra ejecutándose, fax.rexx lo dejará ejecutándose cuando acabe su propia tarea.

Fax.rexx utiliza las definiciones de comunicación contenidas en el fichero s:handshake.parms para comunicarse con CompuServe (baudios, bits de parada, número de teléfono, y otros). Si desea ver como actúa fax.rexx, deberá arrancar primero el programa HandShake en modo visible, para a continuación realizar las operaciones anteriormente descritas.

LISTADO FAX.Rexx

/* fax.rexx - env�a un fichero de texto v�a CompuServe
* utilizando HandShake v2.20
*
* rx fax.rexx filename phone_number subject : name
*
*/
ctrlc = '03'x
ctrlo = '0f'x
cr    = '0d'x
running = 1
/* toma los argumentos desde la l�ena de comandos */
parse arg filename telephone sub_name
if filename = "" then do
  say "introduzca el nombre del fichero a enviar..."
  parse pull filename
  end
if telephone = "" then do
  say "introduzca n�mero de tel�fono, con c�digo de area(s)..."
  parse pull telephone
  end
if sub_name = "" then do
  say "Introduzca subject : nombre. As in..."
  say "Project estimate: Ms. Lois Lane, Director"
  parse pull sub_name
  end
/* Chequea para comprobar que existe el fichero de texto */
if -open(fax-text, filename, 'R') then do
  say "No puedo acceder al fichero de texto."
  exit 40
  end
/* Extrae el Subjet y nombre */
length = index(sub_name,":")
subject = left(sub-name,length-1)
name = substr(sub_name,length+1)
name = strip(name,'B')
/* Comprueba si HandShake se encuentra ejecut�ndose, si no es
as�, lo ejecuta */
address command
do forever
  r = show(ports,'HANDSHAKE1')
  if r = 1 then break
  running = 0
  'handshake -n -p s:handshake.parms'
  end
/* Comienza a comunicar con HandShake */
address 'HANDSHAKE1'
HS_STRING('+++ATZ'cr)
r = HS_GETSTR('OK')
if r = 'OK' then
  HS_DIAL('CIS (2400)')
else do
  say "No puedo inicializar, saliendo..."
  if running = 0 then HS_QUIT
  exit 20
  end
HS_TIMEOUT 40
HS_STRING(ctrlc)
r = HS_GETSTR('ID:')
if r = 'ID:' then
  HS_STRING('12345,6789\my_password'cr)
else quit1("No puedo conectar apropiadamente.",)
r = HS_GETSTR('CompuServe')
if r = 'CompuServe' then
  HS_STRING(ctrlo'g mail'cr)
else quit1 ("Conexi�n realizada, pero no puedo entrar...")
r = HS_GETSTR('Mail')
if r = 'Mail!' then
  HS_STRING('upload'cr)
else quit2("No puedo entrar en area MAIL.")
r = HS_GETSTR('Procolol:')
if r = 'Protocol:' then
  HS_STRING('xmodem'cr)
else quit3("No puedo iniciar volcado en MAIL...")
r = HS_GETSTR('Type:')
if r = 'Type:' then
  HS_STRING('ascii'cr)
else quit3("Comenzando a volcar, no encuentro protocolo.")
r = HS_GETSTR('completed.')
if r = 'completed.' then do
  HS_PROTOCOL 'xmodem/crc'
  HS_TRANSMIT (filename)
  end
else quit3("Protocolo seleccionado. Error en transmisi�n de fichero.")
HS_STRING('send'cr)
r= HS_GETSTR('ID):')
if r = 'ID):' then
  HS_STRING('>fax 'telephone||cr)
else quit3("No puedo enviar el texto")
r = HS_GETSTR('Subject:')
if r = 'Subject:' then
  HS_STRING(subject ||cr)
else quit3("No puedo direccionar el texto.")
r = HS_GETSTR('Attention:')
if r = 'Attention:' then
  HS_STRING(name||cr)
else quit3("Comienzo a enviar, no Subject especificado.")
r = HS_GETSTR('(Y or N)!')
if r = '(Y or N)!' then
  HS_SRING('y'cr)
else quit3("Comienzo a enviar; Atenci�n: l�nea err�nea.")
r = HS_GETSTR('Mail!')
if r = 'Mail!' then do
  HS_STRING('bye'cr)
  HS_HANGUP
  say "Fax transmitido!"
  if running = 0 then HS_QUIT
  exit 0
  end
else quit2("Posible error, no ha aparecido el prompt final de 'MAIL.')
quit1:
  parse arg x
  say x
  HS_HANGUP
  if running = 0 then HS_QUIT
  exit 20
  end
quit2:
  parse arg x
  say x
  HS_STRING('bye'cr)
  HS_HANGUP
  if running = 0 then HS_QUIT
  exit 20
  end
quit3:
  parse arg x
  say x
  HS_STRING(crtlc'bye'cr)
  HS_HANGUP
  if running = 0 then HS_QUIT
  exit 20
  end

Envía esta página web a un amigo:
Esta opción está desactivada temporalmente, rogamos disculpen las molestias

Volver a la página anterior

Al menú principal