Capítulo 3: El lenguaje del sistema

3. EL LENGUAJE DEL SISTEMA

3.1 INTRODUCCIÓN Como ya se ha mencionado, el sistema anterior monolínea tenía un lenguaje sencillo que escondía funciones de elevada complejidad. Cuando se planteó el paso al sistema multilínea, no parecía aconsejable realizar versiones multilínea de funciones muy complejas, por lo que se invirtieron los papeles y se ha preferido potenciar el lenguaje, dotándolo de más instrucciones, siempre sencillas, de forma que sea fácil desarrollar la versión multilínea de cada una de ellas. Para crear funciones complejas, gracias a las mayores posibilidades y flexibilidad del lenguaje, se ha optado por implementarlas como subrutinas, que se pueden incluir fácilmente cuando se desarrolla una aplicación. Es importante que se pueda describir la aplicación utilizando un lenguaje sencillo, de forma que la persona encargada de realizar la aplicación no deba tener conocimientos en el campo de las tecnologías del habla ni en el funcionamiento interno del sistema hardware, sino que sus conocimientos se centren en la estructura de los diálogos y en la aplicación concreta a desarrollar. En este capítulo se van a presentar las instrucciones que forman el lenguaje del sistema. El objetivo es familiarizarse con ellas y mostrar sus posibilidades para ayudar a entender los siguientes capítulos. No se entrará en detalles ni se describirá su sintaxis. En el Apéndice A Manual del Usuario se detalla la sintaxis de las instrucciones y se incluyen numerosos ejemplos que ilustran sus posibilidades.

Pág. 3-1

Capítulo 3: El lenguaje del sistema

3.2 SECCIONES DE UNA APLICACIÓN Una aplicación se compone de cuatro secciones, cada una de ellas con una funcionalidad y unas características específicas. Sólo dos de ellas son obligatorias (la sección ERRORES y la sección APLICACIÓN).

3.2.1 Sección de inicialización de variables internas Es opcional y se puede utilizar para inicializar las variables internas que sea necesario. Esta sección sólo se ejecuta cuando se carga la aplicación por primera vez. Tanto las variables internas como las variables generales (aquellas que define el usuario) deben comenzar con n_ o s_, según se trate de variables numéricas o alfanuméricas (strings), respectivamente. En ambos casos, se distinguen mayúsculas y minúsculas. Todas las variables son globales y se definen cuando se utilizan la primera vez, por lo que se debe tener cuidado al escribirlas, pues si nos equivocamos no obtendremos un error de compilación.

3.2.2 Sección de tratamiento de errores Describe las acciones a tomar cuando se producen situaciones especiales durante la fase de reconocimiento, tanto de voz como de tonos multifrecuencia. Estas acciones son de carácter global, es decir, se realizarán siempre que se produzca una de estas situaciones en cualquier operación de entrada de datos. Las situaciones especiales o errores contemplados son las siguientes: •

TIMEOUT: se produce cuando no se detecta una respuesta por parte del usuario durante cierto tiempo (configurable dinámicamente a través de la variable interna n_max_tiempo_reco_palabra). Esta situación puede producirse porque realmente el usuario no da una respuesta o porque el nivel de la señal telefónica que llega al sistema es demasiado bajo y se confunde con el ruido de fondo.



NO RECONOCIDO: se produce cuando, una vez detectada una respuesta por parte del usuario, ésta no se corresponde con ninguna de las opciones permitidas por el sistema en ese momento. Esto sólo puede ocurrir si se reconoce a través de tonos multifrecuencia, pues el reconocimiento de voz siempre devolverá una de las opciones permitidas (no hay rechazo).



LONGITUD CORTA: este error sólo puede producirse cuando el sistema pide al usuario que introduzca una cadena de dígitos de determinada longitud (fijado el número mínimo de dígitos y el número máximo). Si la cadena

Pág. 3-2

Capítulo 3: El lenguaje del sistema

introducida es inferior al mínimo fijado, se produce este error. De esta forma se evita que operaciones posteriores con la cadena introducida no operen correctamente. •

FIN INTENTOS: cada vez que se produce un error de reconocimiento puede indicarse al sistema que vuelva a intentar la operación. Cuando se produce cierto número de errores consecutivos se genera este error, indicando que se ha sobrepasado el número máximo de intentos posibles para una operación concreta.



COLGADO: se produce cuando el usuario decide colgar antes de que finalice la aplicación. Habitualmente se responde a esta situación colgando la línea telefónica y reiniciando la aplicación, de forma que puedan atenderse nuevas llamadas.

3.2.3 Sección de definición de subrutinas Las subrutinas son muy útiles para organizar la aplicación de forma que sea más legible y se facilite su mantenimiento. Todas las subrutinas que se utilicen deben definirse en esta sección, que es optativa. Si no se definen subrutinas no hay que especificar esta sección. A la hora de diseñar y usar subrutinas hay que tener en cuenta las siguientes características: • •

Una subrutina puede llamar a su vez a otras subrutinas, hasta una profundidad máxima de 20, tanto si se han definido antes o después que ella. A diferencia del sistema monolínea, las subrutinas no se tratan como macros, es decir, cada vez que se llama a una subrutina, no se copia ésta en el punto de llamada, sino que se realiza un salto al estado del autómata donde comienza la subrutina.

3.2.4 Sección de descripción de la aplicación En esta sección se describe el diálogo de la aplicación que se está generando. Cuando se ejecute una aplicación, ésta empezará partiendo de la primera instrucción que aparezca en esta sección.

Pág. 3-3

Capítulo 3: El lenguaje del sistema

3.3 INSTRUCCIONES DEL LENGUAJE A continuación se va a realizar una exposición de las instrucciones que posee este lenguaje, agrupadas según su funcionalidad. Las agruparemos en los siguientes grupos: • • • • • • • • • •

Instrucciones de control de la línea telefónica: su objetivo es el manejo de la línea telefónica y la detección de llamadas de los usuarios. Instrucciones de salida: las encargadas de enviar al usuario los mensajes necesarios para que éste pueda realizar una determinada acción o recibir la información deseada. Instrucciones de entrada: permiten al usuario interactuar con el sistema, bien modificando la secuencia del diálogo, bien introduciendo los datos necesarios para el funcionamiento de la aplicación. Instrucciones de asignación: permiten asignar valores a las variables. Instrucciones de control: permiten romper la ejecución secuencial del diálogo de la aplicación. Instrucciones de manejo de cadenas: funciones relacionadas con el manejo de cadenas de caracteres Instrucciones de manejo de ficheros: funciones relacionadas con el manejo de ficheros. Instrucciones de envío y recepción de correo electrónico (mail): permiten al sistema enviar y recibir mensajes vía correo electrónico. Instrucciones de acceso a bases de datos locales: funciones que permiten el acceso a bases de datos locales utilizando ODBC (Open DataBase Connectivity). Instrucciones de ampliación: permiten ampliar las posibilidades del sistema.

Pág. 3-4

Capítulo 3: El lenguaje del sistema

3.3.1 Instrucciones de control de la línea telefónica Se encargan del control de la interfaz entre el sistema y la línea telefónica. Las instrucciones que se engloban en este grupo son las siguientes: •

esperar_llamada: con esta instrucción, el sistema entra en un estado de espera hasta que se detecta una llamada a través de la línea telefónica, momento en que descolgará. Esta instrucción será una de las primeras que aparezca en las aplicaciones.



descolgar: descuelga la línea telefónica. No es necesario utilizarla después de la instrucción esperar_llamada (descuelga automáticamente al recibir una llamada).



colgar: cuelga la línea telefónica, siendo complementaria de la instrucción descolgar. Suele ser una de las últimas instrucciones del programa y su uso es necesario para que el sistema pueda atender otras llamadas.



marcar: permite al sistema generar llamadas, utilizando pulsos o tonos multifrecuencia. Para ello, antes se debe descolgar utilizando la instrucción descolgar.



flash: realiza un microcorte en la línea telefónica, concretamente de 100 msg. Util para redireccionar llamadas entre centralitas de tipo IBERCOM.



infolinea: obtiene información sobre la señalización de la línea telefónica. Se utiliza para redirigir llamadas. Retorna los siguientes valores: •

• • • • •

0 (time-out): se ha superado el tiempo fijado por la variable interna n_timeout_redirigir sin detectar que se haya descolgado. Asegura que la función ha detectado los correspondientes tonos de llamada mientras tanto. 1 (descolgado): se ha descolgado. 2 (error): se ha intentado configurar la función desde el PC con valores inadecuados. 3 (ningún tono): todavía no se ha detectado ningún tono en la línea. Es interesante para detectar que no se puede llamar debido a que exista algún problema en la centralita y no se está efectuando la llamada. 6 (tono de llamada): un tono ha durado mas de lo debido. Sirve para detectar que hay tono de permiso de llamada al descolgar. 7 (comunicando): hay un silencio más corto de lo debido. Sirve para detectar que la línea está comunicando.

Pág. 3-5

Capítulo 3: El lenguaje del sistema

3.3.2 Instrucciones de salida Están relacionadas con la reproducción de mensajes pregrabados y con la conversión texto-voz. Como directorio base utilizan el contenido en la variable interna s_DIR_ESPECIF. •

sintetizar: permite sintetizar el mensaje que se indica en la propia instrucción como una cadena de texto o una variable.



sintetizar_fichero: sintetiza el contenido del fichero que se indique como parámetro.



reproducir: manda mensajes pregrabados al usuario, los cuales deben estar guardados en ficheros como muestras de voz. La calidad de estos mensajes es mayor que la de los mensajes sintetizados, pero obliga a que los mensajes que se manden sean fijos. No es necesario indicar la extensión del fichero (se asume extensión MST si el hardware a utilizar son las tarjetas IFTEL+VISHA). Si se incluye la extensión, se utilizará, independientemente del hardware que utilice el sistema.



pitar: reproduce un pitido durante una décima de segundo, lo cual es muy útil para señalizar ciertas acciones que debe realizar el usuario, como la entrada de datos o el comienzo de la grabación de un mensaje.



hilo_musical: inicia la reproducción de un fichero pregrabado en segundo plano. Es decir, el sistema no se queda esperando que finalice la reproducción, por lo que es posible ejecutar otras instrucciones. Para detener la reproducción basta volver a ejecutar esta instrucción, con el parámetro adecuado. Sólo se debe tener la precaución de no utilizar instrucciones que hagan uso de la tarjeta VISHA mientras esté activada dicha reproducción en segundo plano. Útil cuando se accede a bases de datos, pues pueden ser tareas lentas (acceso a Host, ODBC, etc).

Pág. 3-6

Capítulo 3: El lenguaje del sistema

3.3.3 Instrucciones de entrada Dentro de este grupo se encuentran las siguientes instrucciones: •

grabar: graba en un fichero de muestras de voz lo que el usuario diga durante un cierto tiempo. El nombre del fichero, el tiempo de grabación y el tipo de detección del final de grabación son parámetros de la instrucción. Se pueden elegir dos métodos para dar por finalizada la grabación: • •

Por duración: la grabación finaliza cuando transcurra el tiempo indicado en el parámetro tiempo, en segundos. Por detección de silencio: la grabación finaliza bien porque se detecte un silencio prolongado (tres segundos consecutivos, aproximadamente), bien porque se alcanza la duración indicada, lo que antes ocurra.

No es necesario indicar la extensión del fichero (se asume extensión MST si el hardware a utilizar son las tarjetas IFTEL+VISHA). Si se incluye la extensión, se utilizará, independientemente del hardware que utilice el sistema. •

elegir_opcion: permite al usuario realizar una elección entre varias posibilidades planteadas por el sistema. Es una instrucción compleja, que realiza la siguientes acciones: • Valida sólo ciertas palabras, o tonos multifrecuencia. • Manda un mensaje al usuario para que realice la elección. Puede utilizar tanto reproducción de mensajes pregrabados como síntesis de voz. Incluso es posible saltar a una subrutina para realizar una salida de mensajes más compleja, por ejemplo, realizar una síntesis múltiple o reproducir un conjunto de ficheros. • Dependiendo de la respuesta del usuario, ejecuta un conjunto determinado de instrucciones. Primero se envía el mensaje al usuario, después se realiza el reconocimiento y, por último, se ejecuta el conjunto de instrucciones adecuado dependiendo de la respuesta del usuario. No se comprueba la concordancia entre las opciones activas indicadas y los case que se indiquen en la instrucción.



reconocer_cadena: permite al usuario introducir una cadena numérica dígito a dígito, como podría ser el número del DNI. También es una instrucción compleja que controla los siguientes aspectos: • Activa los dígitos y la palabra Cancelar. En el caso de que se esté utilizando reconocimiento de tonos multifrecuencia se puede utilizar la almohadilla (#), que normalmente significa No, con el significado de Cancelar.

Pág. 3-7

Capítulo 3: El lenguaje del sistema

• •



Establece la longitud mínima y máxima de la cadena. Manda un mensaje al usuario para que realice la elección. Puede utilizar tanto reproducción de mensajes pregrabados como síntesis de voz. Incluso es posible saltar a una subrutina para realizar una salida de mensajes más compleja. Guarda la cadena numérica introducida en una variable que puede ser utilizada posteriormente. También guarda una segunda variable con el segundo candidato de cada dígito, lo que facilita una posterior verificación de la cadena, en caso de que esta sea incorrecta. Esto último sólo es útil en el caso de que se haya utilizado voz para introducir la cadena, pues si se han utilizado tonos multifrecuencia, todos los segundos candidatos serán nulos. Primero se envía el mensaje al usuario y después se realiza el reconocimiento.

3.3.4 Instrucciones de asignación Permiten asignar valores a las variables y realizar operaciones aritméticas. Al realizar operaciones aritméticas se utiliza la Notación Polaca Inversa, basada en la utilización de un acumulador para realizar todas las operaciones. No se permite el uso de paréntesis para realizar agrupaciones.

3.3.5 Instrucciones de control Permiten variar el flujo normal de diálogo para facilitar ciertas tareas. Son las siguientes: •

break: finaliza la ejecución de las instrucciones de un bloque ‘case’.



goto: hace que el control del diálogo pase a la instrucción que se encuentre inmediatamente después de la etiqueta especificada en la misma instrucción.



gosub: ejecuta la subrutina indicada, la cual debe haberse definido en la sección de subrutinas. Cuando acaba la ejecución de la subrutina de forma normal, el control pasa a la instrucción siguiente a ésta. Es posible utilizarla en la sección de tratamiento de errores.



retornar: sólo puede usarse en la sección de definición de subrutinas y provoca el fin de la subrutina, pasando el control del diálogo a la siguiente instrucción a la que hizo la llamada a la subrutina. Toda subrutina debe contener esta instrucción obligatoriamente.

Pág. 3-8

Capítulo 3: El lenguaje del sistema



reintentar: se usa exclusivamente en la sección de tratamiento de errores. Cuando se ejecuta una instrucción del tipo elegir_opcion o reconocer_cadena puede generarse una situación de error, pasándose el control a la rutina de tratamiento de error correspondiente. Si en esta rutina se ejecuta la instrucción reintentar se volverá a ejecutar otra vez la instrucción que generó dicho error, incluyendo la instrucción de salida que lleve asociada.



if/endif: si la condición que sigue al if es cierta ejecuta el conjunto de instrucciones contenidas entre if y endif. Sólo se admite una condición simple.



while/end_while: mientras la condición que sigue a while sea cierta, ejecuta el grupo de instrucciones contenidas entre while y end_while. De nuevo, sólo se admite una condición simple.



retardo: paraliza la ejecución de la aplicación los milisegundos que se indiquen como parámetro.

3.3.6 Instrucciones de manejo de cadenas Ya hemos visto que las variables pueden ser de dos tipos: numéricas y cadenas alfanuméricas. El manejo de estas últimas se ha enriquecido notablemente respecto al sistema anterior monolínea. Una de las nuevas posibilidades, y que ha demostrado ser muy útil, es que se pueden indexar. Las instrucciones relacionadas con cadenas son las siguientes: •

strlen: devuelve como parámetro de salida la longitud de la cadena que se le pasa como parámetro de entrada.



strcat: concatena las cadenas que se le pasan como parámetros de entrada.



sprintf: acepta una serie de parámetros, les aplica el formato especificado y las devuelve, adecuadamente formateadas, en una variable de salida. Aplica el primer formato especificado al primer argumento, el segundo al segundo y así sucesivamente. Debe haber el mismo número de especificadores de formato que argumentos.

Pág. 3-9

Capítulo 3: El lenguaje del sistema

3.3.7 Instrucciones de manejo de ficheros También constituyen una novedad en esta versión. Son las siguientes: •

delete: borra el fichero especificado.



copy: copia el fichero que se indique en su primer parámetro con el nombre que se indique en el segundo parámetro.



mkdir: crea el subdirectorio indicado.



rename: renombra el fichero con el nombre indicado como primer parámetro al nombre que se indique como segundo parámetro.



mktemp: devuelve un nombre de fichero único (que no exista ya) en el directorio que se le indique como primer parámetro.

3.3.8 Instrucciones de envío y recepción de correo electrónico Permiten al sistema tanto el envío como la recepción de mensajes vía correo electrónico. •

ENVIAR_MAIL: envía el contenido del fichero indicado como segundo parámetro a la dirección indicada como primer parámetro.



RECIBIR_MAIL: guarda en el fichero indicado como tercer parámetro el mail, si lo hay, del usuario indicado como primer parámetro. En el segundo parámetro debemos indicar la password del usuario. Retorna 1 si ha podido leer algún mail y 0 si no había ningún mail disponible.

3.3.9 Instrucciones de acceso a bases de datos locales Permiten el acceso a bases de datos locales utilizando ODBC (Open DataBase Connectivity), permitiendo realizar inserciones, modificaciones, actualizaciones, borrados, etc, utilizando sentencias SQL (Structured Query Language). En el Capítulo 7 se trata el acceso a bases de datos locales, y en el Apéndice D puede encontrar una introducción a SQL. •

ODBC_ABRE_BD: abre la base de datos solicitada. Requiere los siguientes parámetros de entrada: nombre de la base de datos que se quiere abrir, tipo de base de datos de que se trata (dBase, Access...), y la clave de acceso a la base de datos, si es necesaria. Retorna 0 si la función se desarrolló correctamente, y un valor negativo en caso de error. La clave debe coincidir con la clave de acceso de la base de datos que se esté utilizando. Si no se ha definido clave de acceso, puede escribirse cualquier cosa excepto un string nulo, pues no lo admite el lenguaje.

Pág. 3-10

Capítulo 3: El lenguaje del sistema



ODBC_CIERRA_BD: cierra una base de datos. Requiere los siguientes parámetros de entrada: nombre de la base de datos a cerrar y su tipo. Retorna 0 si la función se desarrollo correctamente y un valor negativo en caso de error.



ODBC_BUSCAR: ejecuta un query SQL (consulta, actualización, insercción, etc.) sobre la base de datos activa. Requiere los siguientes parámetros de entrada: nombre de la base de datos, tipo de la base de datos y el query a ser ejecutado. Retorna 0 si la función se desarrolló correctamente y un valor negativo en caso de error. Para saber si el query ejecutado contiene o no resultados se debe ejecutar a continuación la función ODBC_LEER_CAMPOS.



ODBC_LEER_CAMPOS: lee un registro de los datos resultado de una consulta a una base de datos. Dichos datos sólo estarán disponibles hasta que se vuelva a realizar otra consulta. No requiere ningún parámetro de entrada y los parámetros de salida serán los campos del registro resultado del query. Se debe tener la precaución de indicar tantos parámetros de salida como campos tenga el registro resultado. Retorna 0 si la función se desarrollo correctamente, 1 si era el último registro de datos disponible y un valor negativo en caso de error.

3.3.10

Instrucciones de ampliación

Gracias a ellas el sistema es un entorno abierto, que puede expandirse para acomodarse a cada necesidad particular. Las dos instrucciones que permiten hacerlo son: •

funcion_externa: ejecuta un programa externo independiente, pasándole una serie de parámetros. Retorna 1 si ha podido ejecutarse correctamente y –1 en caso de error. El programa debe ser para entorno Windows.



funcion_interna: llama a una determinada función que ha sido añadida al lenguaje del sistema sin necesidad de modificar la gramática del mismo. Dependiendo del valor devuelto se ejecutará posteriormente un conjunto de instrucciones u otro.

La diferencia entre una función externa y una función interna radica en el momento en que se añaden al sistema . Para poder añadir una función interna hay que generar un fichero fuente de dicha función y compilarla conjuntamente con los ficheros fuente del sistema. Una función externa se añade como un ejecutable externo independiente, por lo que no es necesario realizar ninguna modificación en el sistema. Una aplicación que llame a una función externa no puede considerarse multilínea, pues no podemos garantizar el tiempo que va a tardar la ejecución del ejecutable externo ni lo cooperativo que éste va a ser, y es posible que se produzcan efectos indeseados en el resto de las líneas. Pág. 3-11

Capítulo 3: El lenguaje del sistema

Se dispone de las siguientes funciones internas: •

EXISTE_FICH: retorna 1 si el fichero indicado como parámetro existe y 0 si no existe.



FICH_FIRST: devuelve el primer fichero que cumple el patrón indicado.



FICH_NEXT: una vez ejecutada la instrucción anterior, se pueden hacer sucesivas llamadas a esta instrucción para seguir obteniendo ficheros que cumplen el patrón indicado. No se puede utilizar si antes no se ha ejecutado la instrucción anterior.



CONVOCATORIA: devuelve el año y la convocatoria que corresponda según la fecha en que nos encontremos (‘F’, ‘J’ o ‘S’) como parámetros de salida. No admite parámetros de entrada. Retorna 0 si es la convocatoria de febrero, 1 si corresponde a junio y 2 si es septiembre.



HORA: calcula, según la hora actual, en qué momento del día se recibe la llamada. De esta forma, es posible cambiar el mensaje de bienvenida al servicio, dependiendo de la hora del día. No admite parámetros de entrada ni devuelve ninguno de salida. Retorna 0 si es por la mañana, 1 si es por la tarde y 2 si es por la noche.



STRING_HORA: devuelve la hora actual, formateada como hh:mm:ss. (hora:minutos:segundos), como parámetro de salida.



HORA_NUMERICA: devuelve la hora, los minutos y segundos como parámetros de salida.



STRING_FECHA: devuelve la fecha, formateada como dd:mm:aa (día:mes:año), como parámetro de salida.



STRING_LINEA: devuelve la línea telefónica en la que se está ejecutando la aplicación, como parámetro de salida (valores 1 ó 2).



DURACION_LLAMADA: devuelve la duración actual de la llamada que se está atendiendo, como parámetro de salida.



RESULTADO_ANTERIOR: imprescindible para conocer el código de retorno que devuelven las funciones predefinidas. Se la debe llamar inmediatamente después de ejecutar una función predefinida.



RESULTADO_SUBRUTINA: su uso es opcional, pero recomendable. Si una subrutina debe devolver un código de retorno, se sugiere asignarlo a la variable n_resultado_subrutina. De esta forma, es posible leerlo después usando esta función interna, que lo único que hace es retornar el valor de dicha variable.

Pág. 3-12

Capítulo 3: El lenguaje del sistema



RESULTADO: retorna el valor de la variable que se le pasa como parámetro. Permite utilizar el switch de la instrucción funcion_interna al evaluar el valor de una variable, en vez de tener que hacer múltiples if.



RESET_GOSUB: vacía la pila utilizada para guardar los retornos de subrutina (imprescindible para poder anidar saltos a subrutinas). Sólo es necesario utilizarla si utilizamos la instrucción goto desde dentro de una subrutina con destino a una etiqueta fuera de la subrutina, y no se va a ejecutar de inmediato la instrucción esperar_llamada, pues esta instrucción vacía dicha pila automáticamente.



DAT_ON_OFF: permite activar o desactivar la salida de control de la interfaz de la línea telefónica; salida que normalmente se utilizará para actuar sobre el encendido de algún sistema de grabación de llamadas



COMPRUEBA_ACENTOS: permite acentuar automáticamente nombres y apellidos. Suele ser útil cuando se extraen nombres o apellidos sin acentuar de bases de datos y es necesario leérselos al usuario utilizando síntesis de voz.



ESCRIBIR_EN_FICHERO: añade al fichero, cuyo nombre se indica como primer parámetro, el texto indicado como segundo parámetro, que puede ser una cadena o una variables de tipo string. Si en algún momento queremos vaciar el fichero, basta utilizar antes la instrucción DELETE para borrarlo.



BUSCAR_EN_FICHERO: busca en el fichero cuyo nombre se indica como primer parámetro el texto indicado como segundo parámetro, que puede ser una cadena o una variables de tipo string. El fichero se recorre línea a línea y sólo se busca en el primer campo de cada línea (hasta que se encuentra un espacio en blanco). Retorna 0 si encuentra el texto en el fichero y 1 si no lo encuentra.

Pág. 3-13

Capítulo 3: El lenguaje del sistema

3. EL LENGUAJE DEL SISTEMA....................................................................... 3-1 3.1

INTRODUCCIÓN .................................................................................................3-1

3.2

Secciones de una aplicación ...................................................................................3-2

3.2.1 3.2.2 3.2.3 3.2.4

3.3

Sección de inicialización de variables internas.............................................................. 3-2 Sección de tratamiento de errores ................................................................................. 3-2 Sección de definición de subrutinas .............................................................................. 3-3 Sección de descripción de la aplicación ........................................................................ 3-3

Instrucciones del lenguaje......................................................................................3-4

3.3.1 3.3.2 3.3.3 3.3.4 3.3.5 3.3.6 3.3.7 3.3.8 3.3.9 3.3.10

Instrucciones de control de la línea telefónica ............................................................... 3-5 Instrucciones de salida ................................................................................................. 3- 6 Instrucciones de entrada ............................................................................................... 3-7 Instrucciones de asignación .......................................................................................... 3-8 Instrucciones de control ............................................................................................... 3-8 Instrucciones de manejo de cadenas.............................................................................. 3-9 Instrucciones de manejo de ficheros ........................................................................... 3-10 Instrucciones de envío y recepción de correo electrónico ............................................ 3-10 Instrucciones de acceso a bases de datos locales ......................................................... 3-10 Instrucciones de ampliación ....................................................................................... 3-11

Pág. 3-14