TEMA 1.18
LLAMADA A PROGRAMAS EXTERNOS

Lo último que nos queda por ver en la sección de temas básicos del curso de introducción a la programación es cómo conseguir que nuestro programa sea capaz de iniciar otros programas externos, ya sean ejecutables .EXE u ordenes de MS-DOS internas o externas o bien otros programas de QBasic.

Para conseguir lo primero usaremos la instrucción SHELL seguida de la orden de MS-DOS o del programa ejecutable o programa BAT que queremos ejecutar. Vamos con unos cuantos ejemplos:

SHELL "dir"

Hace que en la pantalla de nuestro programa aparezca el listado del contenido del directorio activo.

SHELL "dir c:\basic\juegos"

Hace que en la pantalla de nuestro programa aparezca el listado del contenido del directorio c:\basic\juegos. Si este directorio no existe no se producirá ningún error en nuestro programa, simplemente la orden DIR nos sacará un mensaje diciendo que no se ha encontrado el achivo.

SHELL "lote.bat"

Ejecuta el archivo de proceso por lotes llamado lote.bat. Lo buscará en el directorio activo y si no lo encuentra lo buscará en los directorios que aparecen en la variable de entorno PATH del MS-DOS. Si no lo encuentra sacará el típico mensaje "Comando o nombre de archivo incorrecto", pero en nuestro programa no ocurrirá ningún error.

SHELL "winmine"

En la mayoría de los casos, iniciará el buscaminas de Windows, un programa ejecutable. Si no lo encuentra pasará lo mismo que en el ejemplo anterior, pero tampoco generará ningún error.

SHELL

Si no escribimos ningún argumento, se abrirá una instancia de MS-DOS dentro de nuestro programa de QBasic. Aquí el usuario podrá ejecutar órdenes como se hace normalmente. Para volver al programa tendrá que escribir EXIT y pulsar Enter. Habrá que advertir esto al usuario antes de entrar para que no se quede "encerrado" si no sabe como salir. También es peligroso ejecutar determinados programas ya que en estos entornos los recursos de memoria son muy limitados.

Esta instrucción SHELL nos puede servir para ejecutar ordenes de MS-DOS o pequeños programas que nos pueden hacer falta usar.
Si ejecutamos algo de MS-DOS, que no es un sistema multitarea, nuestro programa quedará detenido hasta que este programa termine. En el caso que llamemos a algún programa Windows, como el caso del buscaminas, nuestro programa lo iniciará y seguirá funcionando.

Normalmente no será necesario llamar a programas externos, salvo en situaciones muy específicas, y siempre deberán ser programas sencillos que consuman muy pocos recursos, si llamamos a algún programa muy grande como Windows desde QBasic y fallan los sistemas de seguridad puede que el ordenador se bloquee.

También nos puede interesar que nuestro programa termine y pase el control a otro programa de QBasic, por ejemplo en el caso de que sea un menú. Para hacerlo haríamos esto.

RUN "Programa.bas"

Al ejecutar esta orden nuestro programa termina inmediatamente y QBasic carga e inicia el otro programa basic. Esta orden equivale a que nosotros detengamos nuestro programa inmediatamente, en el editor abramos el otro programa y lo ejecutemos pulsando F5.
Si al usar la orden RUN todavía no habíamos guardado los cambios en el código fuente aparecerá un mensaje del editor pidiéndonos que lo hagamos, esto no es un error, cuando lo hagamos se continuará con el otro programa.
Si el programa no existe se producirá un error de tiempo de ejecución.
Si el programa no es un programa basic se producirá un error de compilación al intentar iniciarlo, nuestro programa anterior para entonces ya habrá terminado.

Al pasar de un programa a otro se cierran los ficheros que hubiera abiertos y desaparecen todas las variables. En algunos casos, todavía más rebuscados, nos puede interesar seguir trabajando con los ficheros abiertos y con las variables globales que fueron declaradas con la instrucción COMMON. Para conseguir esto en vez de usar la instrucción RUN usaremos la instrucción CHAIN, que trabaja de forma idéntica, excepto en que conserva los ficheros abiertos y reconoce las variables declaradas con COMMON en programas anteriores.

Normalmente una buena jerarquía de procedimientos SUB será más recomendable y más estructurada que usar la orden RUN o CHAIN. Estas ordenes solo las deberemos usar en casos muy sencillos como un pequeño menú que nos abra varios programas. La orden CHAIN no la deberemos usar casi nunca y sobre todo no encadenar varios programas ya que perderemos completamente la pista de dónde declaramos las variables y abrimos los archivos, cosa que puede dar lugar a errores muy difíciles de solucionar, como ocurre siempre que no estructuramos bien los programas.













CuRSo De iNTRoDuCCióN a La PRoGRaMaCióN CoN QBaSiC
© 2004 Juan M. González