Manual de AMOS François Lionet 1. INTRODUCCIÓN Bienvenidos al excitante mundo de AMOS -El Creador-. Como ya sabes, el Amiga es realmente un potente ordenador. Por fin, todo este poder se encuentra en la punta de tus dedos. En Septiembre de 1.988, Mandarin Software desarrolló el BASIC STOS para el ST. Se trataba del primer lenguaje que alcanzó el número uno en las listas de ventas. Ahora STOS ha sido reescrito convirtiendose en el BASIC AMOS para Amiga. AMOS incluye un gran número de comandos (más de 500), muchos de ellos de un enorme poder, con los que podrás, por ejemplo, hacer botar una pantalla o animar un sprite, utilizando para ello una simple instrucción en Basic. AMOS no se trata de otro tipo de Basic, sino que se dedica a la creación de programas mediante un lenguaje de animación (AMAL). Los programas AMAL se ejecutan 50 veces por segundo usando un potente sistema de interrupciones. 2. COMIENZO COPIA DE SEGURIDAD AMOS. Antes de comenzar es importante asegurarse una copia de seguridad que salvaguardará el programa original en caso de errores accidentales. Para ello, si ya dispones de estas instrucciones, muy seguramente dispondrás de programas de copia como son el X-Copy, D-Copy u otros. Guarda los originales en lugar seguro. CARGA DE AMOS BASIC. Como te imaginas, AMOS puede cargarse de diversas maneras: por ejemplo, puedes cargarlo directamente desde el Workbench seleccionando su icono y apretando el botón izquierdo del ratón. En la práctica, el Workbench consume un espacio de memoria que bien podría ser necesario para tus programas Basic, en tal caso preferirás cargar directamente AMOS como parte de un Star-Up-Sequence normal: * Apaga tu Amiga y espera 10 segundos, aproximadamente. * Coloca AMOS, disco 1, en df0. * Enciende tu Amiga. AMOS se cargará en automáticamente. * Pulsa una tecla para acceder al programa. TUTORIAL AMOS. Lo primero que observarás al acceder a AMOS es la ventana de edición. Esta es muy fácil de usar si ya tienes alguna experiencia previa con ordenadores. Una vez que hayas examinado la ventana de edición, es tiempo de explorar algunas de las características que hacen que AMOS se destaque de otros programas. 1- Carga de un programa: Para empezar te mostraremos como se puede cargar un programa del disco de Datas: * Insertar el disco de DATAS en df0. * Pulsar la tecla AMIGA y L. Aparecerá un selector en pantalla. * Pulsa sobre la etiqueta df0 (para informar a AMOS que has cambiado el disco). * En el centro aparecerá un listado de programas que pueden ser cargados. * Selecciona el programa elegido con el puntero del ratón. * Elegido el programa, podrás cargarlo pulsando 2 veces el botón izquierdo y regresarás a la pantalla original de edición. * Ejecuta dicho programa seleccionando el botón RUN en el área de menú principal (o pulsando F1 si lo prefieres). La pantalla de edición desaparecerá y el programa se ejecutará. Una vez visto el mismo, puedes volver a AMOS BASIC pulsando CTRL y C simultáneamente. CTRL+C permite un efectivo método de salida para la gran mayoría de programas AMOS, pero puede eliminarse mediante el uso del comando de seguridad BREAK OFF. 2- Borrar un programa: Para borrar un programa de memoria se utiliza el comando NEW. No encontrarás este comando en el Menú Principal sino en el Menú System, al que puedes acceder con el puntero del ratón sobre la ventana de menús y manteniendo pulsado el botón derecho. Para borrar un programa: * Asegurate que el puntero está en el área de menú. * Mantén el botón derecho pulsado y visualiza el Menú System. * Muevete hacia la opción New y seleccionala con el botón izquierdo. También puedes ejecutar esta opción desde el teclado pulsando SHIFT + F9. * Pulsa Y para confirmar la operación o N para cancelarla. * Si el programa no ha sido grabado, se te preguntará si deseas almacenarlo en disco. Si seleccionas la opción Y aparecerá el fichero AMOS de selección. De otro modo tu programa se borrará. 3- Modo Directo: Te permite experimentar tus rutinas y observar inmediatamente sus efectos. Es importante asegurarse que todas las pantallas, sprites y sonidos que hayan sido definidos estén completamente separados de la ventana de edición para que no haya problemas a regresar sólo pulsando una tecla. Para entrar en Modo Directo pulsa ESC. La ventana de edición desaparecerá y aparecera el programa principal. Hacia la parte inferior de este área verás una pequeña ventana en donde podrás introducir tus comandos en Modo Directo. Prueba a introducir la siguiente línea, pulsando RETURN para ejecutarla: PRINT "your name" Ahora aprieta las flechas del cursor para mover la ventana alrededor del área mostrada. Como podrás ver la ventana de Modo Directo es totalmente independiente de la pantalla del programa principal. 4- Animación: Ahora experimentaremos con las instrucciones de AMOS para el manejo de sprites. Antes de poder usar los comandos necesitamos cargar algunos sprites en memoria. Quedate en Modo Directo e introduce las líneas entrecomilladas según llegues a ellas. - Listado de ficheros de sprites: Empezaremos por listar todos los sprites disponibles: * Asegurate que el disco AMOS DATA permanece en df0. * Visualiza el fichero directorio con la instruccion: DIR "AMOS_DATA:Sprites/" Entonces aparecerán los sprites existentes en ese disco. Ese fichero contiene todas las imagenes usadas en los varios programas de ejemplo. También puedes crear tus propias imagenes usando el Editor de Sprites, accesorio que hallarás en el disco de programa AMOS. El Editor de Sprites incluye un poderoso programa de dibujo que hará extremádamente fácil la edición de secuencias de animación con calidad profesional para tus juegos. - Carga de fichero de sprites: Ahora podemos cargar esos sprites, utilizando el comando LOAD. Entonces el sprite se almacenará en un banco especial de memoria: LOAD "AMOS_DATA:Sprites/Frog_Sprites.abk" Si cometes un error, pulsa F1 para acceder a la línea previa. Edítala de nuevo y reejecútala. A continuación, cargarás un fichero de música mediante un comando de carga parecido: LOAD "AMOS_DATA_Sprites/Funkey.abk" Al objeto de saber si el sprite y la música han sido cargados de forma sucesiva en memoria, podemos utilizar la instrucción LISTBANK. Hecho esto aparecerá en pantalla:
No te apures si los números no se corresponden, ya que pueden cambiarse según la memoria disponible. El número de sprites que acabamos de cargar se puede saber mediante el comando de función LENGTH: PRINT LENGTH (1) ............... (resultado: 64) - Selección de los colores del sprite: Cada conjunto de imagenes de sprites tiene su propio set de colores almacenados en el disco, de forma que pueden ser diferentes de la actual pantalla de colores, por ello es útil poder obtener los colores del banco de sprites y copiarlos en la pantalla existente. Esto se consigue con el comando GET SPRITE PALETTE. Introduce: GET SPRITE PALETTE Todos los colores de la pantalla del programa principal cambiarán inmediatamente, sin embargo la ventana de Modo Directo no se vera afectada puesto que se le asigna su propia y separada lista de colores por el sistema AMOS. - Visualización de un sprite: Los sprites pueden ser ejecutados en cualquier lugar de la pantalla usando un simple comando basic del AMOS: SPRITE 8,129,50,62 - Animacion de un sprite: Comienza a animar este objeto utilizando el AMos Animation Language o AMAL. AMAL es un sistema de animación único que puede ser usado para mover o animar tus objetos a una increible velocidad. Introduce las siguientes líneas:
SPRITE 8,129,150,62 El programa anterior anima un pequeño pato por la pantalla. Mientras es manipulado, el sprite puede ser movido alrededor usando el comando SPRITE: SPRITE 8,300,50, - Moviendo un sprite: Ahora para algún movimiento, introduce:
SPRITE 8,129,150,62 : A$="Anim 0,(62,5)(63,5)(64,5);" Este programa anima al pato y lo mueve adelante y atras por la pantalla, usando sólo 3 líneas. A pesar de que las instrucciones entrecomilladas puedan parecer como Basic, en realidad están escritas en AMAL. Todos los programas AMAL se ejecutan 50 veces por segundo y pueden ser utilizados para producir suaves efectos de animación independientemente del programa Basic. Comprueba lo divertido de AMAL y pulsa ESC para regresar al editor de Basic. Tras unos breves instantes, regresa al Modo Directo. ¡Tu sprite aún permanece botando por la pantalla como si nada hubiera ocurrido! - ¡Música maestro!: Para terminar, oigamos la música. Asegurate que estas en Modo Directo. Eleva el volumen de tu monitor y comienza la sesión gracias al comando MUSIC: MUSIC 1 Puedes detener la música con: MUSIC OFF 5- La jornada continua: Por fin, ya tienes una idea de lo que es AMOS BASIC. Pero realmente sólo hemos examinado una pequeñísima parte de lo que puede hacer AMOS. Cuando empieces a experimentar con AMOS, pronto descubrirás un mundo lleno de excitantes posibilidades. AMOS BASIC puede, de hecho, transformarte en un experto programador. Como cualquier otro lenguaje, te llevará algún tiempo en familiarizarte con todo el repertorio de comandos. Terminaremos este capítulo con una serie de consejos y pistas que te ayurán en tu trabajo. 6- Consejos y pistas: * El mejor modo de aprender con AMOS es crear pequeños progra mas para animar sprites, hacer scroll de pantallas o generar tablas de records. Una vez que hayas aprendido esto serás capaz de incorporar esas rutinas a tus programas. * No te dejes impresionar por la complejidad del lenguaje AMOS. En la práctica, serás capaz de realizar sorprendentes efectos con sólo algunos de los más de 500 comandos de AMOS. * Para empezar basta con que aprendas a manejar un par de funciones como SPRITE y BOB, y lentamente irás progresando en diversas secciones, que te permitirá un mayor conocimiento del programa AMOS. * Pese a que intentamos que este manual fuese lo mas fácil posible, es necesario que dispongas de algunos conocimientos esenciales sobre programación Basic. Te será de ayuda el texto "Alcock`s Illustrating Basic". * Planea tus programas cuidadósamente en papel. Es sorprendente como la gran mayoría de los problemas se evitarían si se realizara un cuidadoso diseño primero en el papel. Nunca intentes grandes proyectos sin un buen diseño previo. Es el camino más fácil para perderse. * Cuando escribas un programa, intenta esmerarte en la calidad del mismo, más que en los efectos especiales. Los gráficos y sonidos pueden ser añadidos más tarde si la idea es lo suficientemente buena. 3. EDICION El Editor AMOS te permite una enorme variedad de posibilidades de edición. No sólo es excepcionalmente poderoso, sino que además es increíblemente fácil de usar. Todos los comandos pueden ser ejecutados diréctamente desde la pantalla, o por una vía alternativa, desde el teclado. Una de las características más excitantes de este programa, es que el listado es visualizado en una pantalla aparte a la del programa, de forma que puedes saltar desde la pantalla del programa hasta la de edición con solo pulsar ESC. Si tienes suficiente memoria, también podrás cargar varios programas Basic a la vez. Cada programa podrá ser editado de forma independiente. Lo primero que verás después de cargar AMOS es una pantalla standard. Pulsa una tecla para entrar en la ventana de edición. LA VENTANA DEL MENU. En la parte superior de la pantalla está la Ventana del Menú conteniendo la lista de los comandos disponibles. Es el modo en el que aparecerán las sucesivas formas de edición de AMOS. Los comandos podrán ser rápidamente ejecutados colocando el puntero del ratón sobre ellos y pulsando el botón izquierdo. Cada comando también será designado con una tecla de función en particular. Además del Menú Principal, existen también otros menús. El más importante de ellos es el System Menu, que se visualiza manteniendo pulsado el botón derecho del ratón o mediante la tecla SHIFT. El System Menu contiene una variedad de ordenes como LOAD, SAVE, NEW, etc. Comandos que se activan de igual forma a como se hacía con el Main Menu o Menú Principal. LA LINEA DE INFORMACION. I L=1 C=1 Text=40000 Chip=91000 Fast=0 Edit: example Los marcadores más a la izquierda son "I" (insert) y "O" (over write). Existen otros indicadores de línea y columna (L y C) que aparecen durante la edición. A continuación de esos indicadores o marcadores aparece una lista de 3 números:
LA VENTANA DE EDICION. La Ventana de Edición es en realidad el corazón del sistema AMOS y te permitirá teclear tus programas en Basic directamente desde el teclado. Todo el texto aparecerá en la actual posición del cursor, que se identificará como una línea horizontal destelleante. Al comienzo de toda sesión, el cursor se ubicará siempre en el borde superior izquierdo de la ventana de edición y podrá ser movido a lo largo de la pantalla usando las teclas del cursor. Tus líneas pueden ser escritas teclando letra a letra, y con la ayuda de las teclas DEL y G. Teclea la línea: print "AMOS" Cuando pulses RETURN, la línea entrará en el AMOS Basic. AMOS reconocerá inmediatamente el comando y será convertido a un especial formato. Todos los comandos AMOS comienzan con mayúscula y siguen con minúsculas. De modo que la línea anterior quedará en: Print "AMOS" De forma similar, todas las variables y procedimientos se muestran en mayúsculas. Esto te permitirá chequear rápidamente si has cometido algún error en alguna línea del programa. Supongamos por ejemplo, que has introducido la siguiente línea: inpit "¿Cómo te llamas?"; name$ Esto se mostrará como: inpit "¿Cómo te llamas?"; NAME$ Al no aparecer INPIT es obvio que se ha cometido algún error. Vamos a observar algo más divertido. Mueve el cursor debajo del comando PRINT que acabas de introducir y teclea las siguientes líneas:
centre "< Touch `n` Type Demo>" No olvides pulsar RETURN después de cada línea. Ahora mueve el cursor a través de todo el programa utilizando las teclas del cursor. Finalmente pulsa F1 para ejecutar el programa. La Ventana de Edición desaparecerá y se mostrará un programa nuevo en su lugar. El programa ahora espera a tu introduzcas algún texto desde el teclado. Como puedes ver la pantalla del programa tiene su propio cursor, totalmente separado del usado en la ventana de edición, por lo que podrás manejarlo tranquilamente sin que se altere la posición actual de edición. Después de que hayas terminado, pulsa CTRL + C para salir del programa. Una línea delgada aparecerá ahora en la pantalla, que podrá moverse utilizando las teclas h y i.
Program Interrupted at Line 4 Pulsando la BARRA ESPACIADORA en este punto, regresarás a la Ventana de Edición. Pero antes, echemos un vistazo al Modo Directo. Pulsa ESC y accederás al mismo. UNA INTRODUCCION AL MODO DIRECTO. El Modo Directo te permite fácilmente probar tus programas. Hasta ahora sólo hemos examinado un par de sus características más interesantes. Todos los comandos en Modo Directo se introducen desde una pantalla totalmente independiente de la ejecución del programa. Podrás mover esta pantalla con las teclas del cursor. En la parte superior de la ventana, existe una lista de 20 teclas de función. Representan una serie de comandos que han sido ya previamente asignados a una tecla determinada. Se pueden usar pulsando cualquiera de las teclas AMIGA en combinación con otra. Mientras estes en modo directo, puedes ejecutar instrucciones en Basic, con la única excepción de loops o procedimientos. He aquí algunos ejemplos:
Print 42 Es necesario advertir que ningún error en Modo Directo va a afectar al programa, de modo que puedes introducir lo que quieras sin riesgo de afectar el contenido del programa. Ya es hora de regresar al Editor; pulsa ESC. CARGANDO UN PROGRAMA. A continuación veremos las diferentes formas de cargar y grabar un programa del disco. Como de costumbre, esas funciones se ejecutarán desde la Ventana de Menú o usando comandos desde el teclado. La forma más rápida para cargar un programa consiste en pulsar alguna de las teclas AMIGA + L. Entonces aparecerá la ventana de selección de ficheros AMOS, que tan corriente es de encontrar en la mayoría de los últimos programas para Amiga. Si ya has usado alguno, el sistema AMOS no te será difícil. Sin embargo, y dado que el selector de ficheros forma parte integral del AMOS Basic, será mejor entrar en algunos detalles. EL SELECTOR DE FICHEROS AMOS. La selección de un fichero del disco no puede ser más fácil. Símplemente mueve el cursor hasta el fichero deseado hasta que se sobreilumine. Para cargar ese fichero, pulsa dos veces el botón izquierdo del ratón. También puedes entrar directamente el nombre del fichero desde el teclado. Si cometes un error y deseas dejar el selector sin cargar programa alguno, mueve el ratón hasta la opción QUIT y seleccionalo con el botón izquierdo. AMOS abortará la operación mostrando un rótulo "NOT DONE" en la línea de información. Como ejemplo, coloca tu copia del programa AMOS en df0 y presiona AMIGA + L para cargar un fichero. Si has venido ejecutando los ejeplos de este Manual, AMOS te solicitará permiso para grabar el programa existente. A menos que hayas introducido algún cambio interesante, pulsa N para acceder al selector de ficheros; de otro modo verás "SAVING A PROGRAM". Cuando aparece el selector, busca el fichero con el nombre "Hi there.AMOS". Cuando lo encuentres, cárgalo. Aparecerá entonces el siguiente listado:
Rem Hi there AMOS users Mueve el cursor de texto hasta la frase "Hi there" e inserta tus propios mensajes. Presiona F1 para ejecutar el programa. El mismo mostrará rápidamente docenas de copias de tu texto. Pulsa CTRL + C para salir de esta rutina. GRABANDO UN PROGRAMA BASIC. Regresa al Editor, pulsa ALT + S para grabar tu actual programa al disco. Si quieres realizar un cambio, pulsa el botón derecho del ratón y selecciona "SAVE AS" en el Menú System. Otra salida es seleccionar el selector de fichero. Introducirás el nombre de tu nuevo fichero desde teclado. Conforme vayas tecleando irán apareciendo las letras en la parte inferior. Como en el Editor, existe un cursor que se posiciona según vayas tecleando. Este cursor también podrá ser desplazado usando las teclas de edición. Finalmente pulsa RETURN. SCROLLING A TRAVES DE TUS FICHEROS. Si tu disco está bastante lleno, la ventana de selección habitual no será capaz de mostrar todos los ficheros existentes en el disco. Por lo que tendrás que desplazar el listado utilizando la barra de scroll a la izquierda de la ventana de selección. CAMBIO DEL DRIVE ACTUAL. A la derecha de la ventana de ficheros, existe una lista de los drives disponibles. El contenido de la ventana dependerá, naturalmente, de los periféricos que tengas conectados al ordenador. Si posees varios drives, podrás seleccionar entre ellos simplemente pulsando sobre el nombre apropiado; entonces, se mostrará el directorio del disco elegido en la ventana de selección. CAMBIO DEL DIRECTORIO. Cuando busques en un directorio, descubrirás varios nombres marcados con un asterisco. No son ficheros, sino que se trata de subdirectorios. Podrás acceder a uno de ellos seleccionándolo con el botón izquierdo del ratón, con lo que podrás tener acceso a los ficheros que contenga, pero ten en cuenta que sólo aquellos ficheros con la extensión ".AMOS" se podrán cargar. Una vez abierto un directorio, podrás asignarlo como directorio por defecto con SETDIR. Así, la próxima vez que accedas al selector de ficheros o solicites un directorio con el comando DIR, el directorio elegido (SETDIR) será el que se cargue automáticamente. De forma parecida, puedes recobrar el directorio previo pulsando sobre PARENT. SELECCION DE LA FORMA DE BUSQUEDA (SEARCH PATH) Normalmente, AMOS buscará todos aquellos ficheros con la extensión ".AMOS". Pero si deseas cargar un fichero con otra extensión como ".BAK", necesitarás editar un modelo de búsqueda. Esto se consigue de la siguiente forma: Mueve el cursor de texto hacia la ventana PATH pulsando la tecla h. Ahora introduce el nuevo Path o forma de búsqueda y pulsa RETURN. Una completa descripción de la sintaxis requerida la encontrarás en la sección del comando DIR.
USANDO EL SELECTOR DE FICHEROS. También es interesante la posibilidad de acceder al selector de fichero directamente desde tus programas. Por ejemplo, introducete en Modo Directo y teclea la siguiente línea: Print Fsel$(*.*) Después de que hayas elegido un fichero, su nombre aparecerá en pantalla. Mira en la sección de comandos para más información sobre FSEL$. TUTORIAL DE EDICION. A continuación veremos técnicas más sofisticadas de edición. Comenzaremos cargando un programa de ejemplo. Inserta el disco de trabajo de AMOS. Scrolling a través de un listado. Al lado de la ventana del editor existen dos barras de scroll, que te permitirán paginar tus listados. Para ello mueve el puntero del ratón sobre la barra vertical y pulsa el botón izquierdo. Ahora arrastra la barra hacia abajo. La ventana de edición desplazará el listado suavemente hacia abajo. También puedes realizar el listado usando los iconos de flechas en la parte superior e inferior de esta barra. En la parte más inferior de la ventana de edición, existe una barra para el scroll horizontal, que puede ser usada de derecha a izquierda de la misma forma. Si prefieres el teclado, existen varias formas equivalentes:
CTRL + h = página anterior. Todas las opciones desde el teclado obedecen a los mismos principios, de forma que una vez que te familiarices con un comando, el resto es muy facil. Encontrarás un listado completo con todos los comandos final de este capítulo. Ahora echemos un vistazo al programa. Es hora de cambiar algo. Lista el programa hasta encontrar la siguiente línea: ALERT¡50,"Alert box","","Ok","Cancel",1,2¿ Esta línea llama a una rutina de Basic que ejecuta un aviso en la pantalla. El formato de esta rutina es: ALERT¡Y coord,Title 1$,Title 2$,Button 1$,Button 2$,Paper,Ink¿ Mueve el cursor a la linea anterior y cámbiala a: ALERT¡50,"Exterminate¡","Securitate","Yep¡","Yep¡",1,3¿ Ejecuta el programa pulsando F1 o seleccionando RUN desde el Menú Principal. En la práctica, puedes cambiar el título y los botones cada vez que lo desees. Con el objeto de permitirte más y más poder de programacion hemos incluido un monton de características en el editor AMOS: Label/Procedure Searches. Si tu programa es muy largo, puede ser muy difícil encontrar el punto de arranque de las diversas rutinas. Pon el cursor al comienzo del listado y pulsa ALT y i. Inmediatamente el cursor se desplazará al inicio de la primera definición de una rutina de tu actual programa (ALERT). Este sistema también puede trabajar de igual forma con etiquetas o líneas numéricas, de forma que si no utilizas rutinas, no te será difícil encontrar alguna utilidad para esta característica. Resumen de un Procedimiento. Si realizas un gran programa necesitarás un listado de los procedimientos más utilizados. Afortunadamente HELP esta a mano. Con una simple llamada al comando FOLD evitarás algunos de los procedimientos de definicion de tus listados. Esas rutinas pueden ser normalmente usadas en tus programas pero sus definiciones seran reemplazadas por una linea de procedimiento. Ejemplo: Coloca el cursor en algun lugar de la definicion de ALERT y pulsa la opcion FOLD/UNFOLD en la ventana del menu. Pluff¡ el contenido de tu rutina se ha desvanecido en el aire. Pese a esto, puedes ejecutar el programa sin anomalias. Lo unico que ha variado es el listado de la ventana del editor. Ahora, pulsa de nuevo FOLD/UNFOLD y tu rutina o procedimiento volvera a tomar su forma anterior. Tambien es posible hacer un FOLD de todas las rutinas y procedimientos de tus programas al mismo tiempo. Para ello usa una opcion del menu SEARCH denominada CLOSE ALL. Para acceder al menu Search pulsa el boton sobre el mismo nombre o presiona F5 en el teclado. Ahora selecciona el boton de CLOSE ALL y elimina los procedimientos del programa actual El efecto sobre algunos de los ejemplos es dramático. En ciertos casos desaparece el programa completo que se puede representar en una sola pantalla. De esta forma cada procedimiento puede editarse de forma individualizada expandiendolo con el comando UNFOLD, o bien podrás expandir todo el programa se usas la opcion OPEN ALL desde el menu SEARCH. Search/Replace. A estos comandos contenidos en el editor de Basic AMOS se puede acceder a traves del menú especial SEARCH que bien puede ser llamado desde la ventana del menú o pulsando F4. Encontrando un item. Continuaremos nuestro repaso a las instrucciones contenidas en Search/Replace. Comenzaremos con el comando FIND. Este comando puede ser ejecutado diréctamente desde el menú SEARCH o usando las teclas CTRL+F. Cuando lo ejecutes se te demandará la introducción de la cadena a buscar. Por ejemplo, pulsa CTRL+F y teclea Rem en el prompt. AMOS ahora buscará por la siguiente línea Rem de tu programa, comenzando en la posición del cursor. Una vez la localice, el cursor se ubicará en la línea en cuestión. La busqueda puede volver a repetir se en este momento mediante la opcion FIND NEXT (CTRL+N). Replace. Supongamos que queramos cambiar todas las lineas Rem de un determinado programa con el caracter equivalente ",". Esto se podrá conseguir con el comando REPLACE. Para usar esta opcion, es necesario definir la cadena que va a reemplazar. La primera vez que uses REPLACE, se te demandara por parte de AMOS el contenido de la nueva cadena a sustituir que introducirás desde el teclado. Pulsa CTRL+R, pulsa ' (apostrofe) en el prompt y pulsa RETURN. Ahora define la cadena con la opcion FIND como sigue: * Pulsa CTRL+F para seleccionar la opcion FIND * Teclea "Rem" en la línea de información * El cursor se posicionará en la próxima línea Rem de tu programa actual Para cambiar esta línea por la cadena ya definida y saltar a la siguiente, selecciona REPLACE (CTRL+R) una vez más. De forma alternativa, si el comando REM se encuentra en medio de la línea, tendrás que saltar con el cursor, puesto que AMOS sólo te permite sustituir una palabra sita al principio de línea. Cut & paste. Los comandos de AMOS te permiten recortar parte de tus programas y grabarla para un uso posterior. Una vez que hayas creado un BLOCK o bloque, lo podrás grabar o copiar en cualquier parte del listado actual. He aqui un ejemplo de esta característica. Toma el programa ALERT previo, y recorta una definicion simple. Coloca el puntero del ratón sobre primera línea del procedimiento inverso (INVERT), y suelta el botón derecho. Ahora podemos introducir este procedimiento en un bloque usando el ratón. Conforme mueves el ratón, el área seleccionada se sobreimpresionará. Ahora podemos grabar esta área en memoria con el comando CUT. Cuando presionas CTRL+C desde el teclado, el procedimiento será sacado desde el listado y almacenado en memoria. También es posible incluir (PASTE) este procedimiento en otras parte del listado del programa actual. Para ello, mueve el cursor hacia la parte final del listado y llama la opción PASTE mediante CTRL+P. Asi el procedimiento INVERT será copiado en la actual posicion del cursor. PROGRAMAS MULTIPLES Y ACCESORIOS: Programas multiples. Pese a que AMOS sólo te permite editar un solo programa a un mismo tiempo. No existe límites para el número de programas que pueden ser instalados en memoria, mas que el nivel de almacenaje disponible. Una vez que hayas almacenado un programa, lo puedes ejecutar desde la ventana de edicion usando la opcion RUN OTHER. Supongamos, por ejemplo, que encuentras un problema en alguno de tus programas. AMOS cambiará el programa de memoria para que sin dificultad puedas seguir experimentando hasta hallar la solución. Una vez hayas acabado, podrás grabar la nueva rutina en memoria con la opción CUT, y regresar a tu programa original sólo pulsando dos teclas. La nueva rutina ha sido incluída en su sitio y podrás seguir con tu programa como antes. La posibilidad de detener lo que estes haciendo y ejecutar tus ideas inmediatamente es muy importante en la practica. Otra posibilidad es el permanente acceso a las utilidades más usadas como el Diseñador de sprites o el editor de mapas en memoria. Podrás acceder a esas utilidades instantáneamente siempre que tu quieras. De hecho, AMOS incluye un sistema accesorio especial (ACCESSORY) que hace esto cada vez más fácil. Los programas de utilidades ofrecen un total acceso a todos los bancos de memoria de tus principales programas. Asi el diseñador de sprites puede grabar las imagenes diréctamente de tu programa actual, y modificarlas directamente. Esta tecnica acelará el proceso general de diseño de una forma divertida. Echemos un rápido vistazo a una demostración de estas facultades. Introduce este pequeño programa en el editor:
Print "Este es el programa Uno" Ahora podemos introducir este programa en memoria mediante el comando PUSH, al que se accede pulsando AMIGA+P. Se te solicitará entonces el nombre del programa desde la línea de información. Introduce como nombre "Programa Uno". La pantalla de edición se limpiará complétamente. La nueva ventana estará totalmente separada de tu programa original. Como demostración introduce ahora una segunda rutina, como sigue:
Print "Este es el programa Dos" Este programa podrá ser ahora ejecutado desde la ventana de edición mediante RUN (F1). Cuando termines, podrás regresar al primero mediante la opcion FLICK. Pulsa AMIGA+F. Como antes serás preguntado por el nombre del programa. Usa como nombre "Programa Dos". El editor saltará como por arte de magia a tu programa original. Es posible repetir este proceso saltando adelante y atras entre los dos programas. Cada programa es complétamente independiente y pueden tener sus listados, bancos y pantallas propias. Acabamos de ver como se pueden usar dos programas al mismo tiempo. Sin embargo, puedes tener muchos programas más en memoria. Cada uno de esos programas pueden seleccionados individualmente usando el comando RUN OTHER y EDIT OTHER desde la ventana del mení. Cuando uses esos comandos, un selector de programas especial aparecerá en pantalla. El selector de programas es casi idéntico al ya familiar selector de ficheros AMOS. La única diferencia consiste en que este te permite elegir un programa desde la memoria más rápidamente que desde el disco. Puedes seleccionar un programa símplemente sobre iluminándolo con el cursor del ratón y pulsando una vez el botón izquierdo del ratón. Accesorios. Al objeto de distinguir entre los accesorios y los programas normales Basic, existe una coletilla añadida (".ACC"). Los accesorios pueden ser cargados en memoria como un programa normal usando el comando LOAD OTHER. LOAD OTHER es un selector de ficheros normal que puede ser usado para cargar un accesorio desde el disco. Una vez el accesorio haya sido instalado en memoria, puedes regresar a tu programa y podrás ejecutar este accesorio siempre que quieras usando la opción RUN OTHER desde la ventana de menú. Simplemente mueve el puntero del ratón sobre el accesorio deseado y pulsa el boton izquierdo del ratón. Alteranatívamente, puedes cargar todos los accesorios desde el disco actual mediante la utilidad ACCNEW/LOAD. Esta opción puede ser encontrada en el menú del sistema que aparece cuando presionas el botón derecho. ACCNEW/LOAD elimina todos los accesorios ya existentes y carga un nuevo set desde el disco. Para demostración, coloca el disco AMOS y pulsa el boton ACCNEW/LOAD desde el menú de sistema. El accesorio HELP se cargará rápidamente en memoria. HELP es un accesorio muy especial porque puede ser llamado diréctamente al presionar la tecla 'HELP'. Hemos equipado esta ayuda con toda la información necesaria que puedas requerir para tus programas en Basic. Todo lo que tienes que hacer es seguir los prompts que apareceran en pantalla. 14- Modo Directo A la ventana de Modo Directo se puede acceder pulsando la tecla ESC en cualquier momento. Por defecto, la ventana aparecerá en la mitad inferior de la pantalla, con la pantalla del programa al fondo. Si ejecutas un programa que altere el formato de pantalla (como diseño de ventanas, animacion de sprites, etc), entonces todos estos datos de pantalla permaneceran intactos. Asi puedes desplazar la ventana DIRECTA a lo largo de la pantalla, o bien regresar al editor para realizar cambios en el programa sin alterar la actual pantalla del programa. Esta ventana de Modo Directo es totalmente independiente y es ejecutada en su propia pantalla. Mientras te encuentres en modo directo, podrás teclar cualquier línea Basic que desees. Los unicos comandos que no podrás utilizar son las instrucciones de bucles (LOOPS y BRANCH), además sólo tendrás acceso a ciertas variables diferentes de aquellas ya definidas en un procedimiento. Teclas del editor en MODO DIRECTO:
15- La ventana del Menú A continuación una detallada explicación de todas las opciones disponibles en la ventana del Menu Principal: DEFAULT MENU. Te ofrece varios comandos que te permiten operar con el editor a la vez que puedes acceder a los menús BLOCK y al SEARCH.
Normalmente, es posible reabrir un procedimiento resumido por FOLD, mediante la repetición del proceso. Coloca el cursor sobre el procedimiento resumido y pulsa sobre FOLD/UNFOLD. Si tienes la necesidad de seguridad extra, también podrás usar un accesorio especial del disco AMOS, el LOCK. Este te solicitará una contraseña, con lo que podrás asegurarte de que tus procedimientos no van a ser examinados desde Basic. Basta con resumir el procedimiento deseado y cargar el FOLD.ACC usando para ello LOAD OTHERS. Encontrarás más informacion con la utilidad. La verdadera belleza de este sistema es que te permite crear grandes librerías de tus rutinas en disco, que podrán ser cargadas en memoria como un programa separado (Ver LOAD OTHERS). Ahora podras entonces cortar la rutina que necesites y copiarla directamente en tu programa principal. Asi que una vez que hayas escrito una rutina, podrás grabarla y recuperarla para tus procedimientos una y otra vez. Cada vez que realizas un FOLD o UNFOLD se produce un chequeo de sintaxis de todo el programa. Si existiera algún error, no se podrá ejecutar la operación. Asi que es vital que tengas a buen recaudo (Backups) tus rutinas antes de realizar estas operaciones: SYSTEM MENU:
BLOCKS MENU:
SEARCH MENU:
16- Keyboard MACROS =KEY$= (define un MACRO)
KEY$(n)=command$ KEY$ asigna el contenido de command$ a la función numérica n (1-20). Las teclas del 1 al 10 tienen acceso si se aprietan conjuntamente con la tecla AMIGA izquierda. De forma similar, los números 11 en adelante se llaman mediante una combinación Fn mas tecla AMIGA derecha. Command$ puede ser cualquier cadena de texto que desees, hasta un máximo de 20 caracteres. Existen 2 caracteres especiales que son directamente interpretados por esta funcion:
Ejemplos:
? Key$(1) Key$(3)="'Comment print" En la practica, este sistema de MACROS puede ser increíblemente útil. No sólo puedes aumentar la velocidad de procesamiento de todos tus programas en Basic, sino que ademas puedes definir una lista de las entradas (Inputs) más habituales de tus programas en Basic. Serian extremádamente efectivas en un juego tipo conversacional. Si deseas generar una función de tecla que no posea un equivalente ASCII como ocurre con la flecha arriba, podras opcionalmente incluir un codigo de SCAN (exploracion) en ese MACRO. Esto se logra usando la funcion SCAN$. =SCAN$ (ofrece un código de SCAN para usar con KEY$) x$=SCAN$(n,i,m¿) En donde n es el codigo SCAN de una tecla que se utiliza en uno de tus MACROS; m es una mascara opcional que establece una tecla especial como CTRL o ALT, con el siguiente formato:
Si un bit esta puesto en 1, entonces el botón asociado esta pulsado en tu MACRO. Ejemplos:
KEY$(4)="Wheee!"+SCAN$($4C) 17- Conservando memoria CLOSE WORKBENCH Cerrando la pantalla del WORKBENCH se ahorran alrededor de 40 K de memoria para tus programas. Ejemplo:
Print Chip Free,Fast Free El comando CLOSE WORKBENCH puede ejecutarse desde el modo directo, o desde el interior de tus propios programas. Una típica línea de programa puede ser: If Fast Free=0 then Close Workbench Con lo que chequeas la expansión de memoria, cerrando el WB en caso de que no dispongas de memoria extra. CLOSE EDITOR Cerrar la ventana de edición mientras ejecutas tus programas, puede ahorrar más de 28K de memoria. Además, esto no produce absolutamente ningún efecto sobre tus listados. Si no dispones de suficiente memoria para reabrir la ventana después de que tu programa haya terminado, AMOS sólamente borrará la pantalla actual y regresará a la pantalla habitual por defecto en tal caso, sin dificultad podrás regresar al editor pulsando la tecla ESC. 18- Accesorios internos Ahora exploraremos las técnicas generales necesarias para que escribas tus propios programas, como ya supondrás ahora apareceran todas las instrucciones standards del Basic. Los accesorios se pueden ejecutar directamente junto con tus programas. Previamente hay que chequear el tipo y tamaño de la pantalla usando los comandos SCREEN HEIGHT, SCREEN WIDTH y SCREEN COLOUR, durante la fase de inicialización. Si la pantalla actual no es aceptable, estarás obligado a abrir una nueva pantalla para la ventana del accesorio o borrar completamente la pantalla existente con la instrucción DEFAULT. Cualquier banco de memoria usado por el accesorio es totalmente independiente de tu programa. Si fuera preciso cambiar el banco de tu programa actual, lo puedes hacer con el comando especial: BGRAB. BGRAB b (toma un banco reservado para el programa principal) BGRAB toma prestado un banco del programa actual copiando en el mismo banco del accesorio. Si existe ya un banco del accesorio el banco que acabas de tomar regresará automáticamente al programa principal sin cambios. b es el número del banco (1 al 16). Ten en cuenta que esta instrucción sólo puede ser ejecutada como parte de un accesorio, ya que si la intentas incluir en un programa normal, obtendrás el correspondiente mensaje de error. PRUN (ejecuta un programa desde memoria) PRUN "name" Ejecuta un programa Basic que ha sido previamente instalado en la memoria del AMIGA. Este comando puede ser usado desde el Modo Directo, o dentro de un programa. En efecto!! PRUN es muy parecido al procedimiento standard de ejecución, solo que bobs, sprites y música quedan totalmente abolidos. Advierte que no es posible llamar dos veces al mismo programa en la misma sesión. Una vez que lo hayas llamado, cualquier otro intento sera ignorado completamente. =PRG FIRST$ (lee el primer programa cargado en memoria) p$=PRG FIRST$ Con esta orden obtenemos el nombre el primer programa basic que ha sido instalado en la memoria. Se utiliza con conjunción con el comando PRG NEXT$ para crear un listado completo de todos los programas disponibles. =PRG NEXT$ (Salta al próximo programa instalado en memoria) p$=PRG NEXT$ Este comando se usa después del anterior para ir avanzando a traves de todos los programas instalados en la memoria del AMIGA. Cuando alcanzamos el final de la lista, sabremos el número de programas con la siguiente funcion:
N$=PRG First$ =PSEL$ (llama al selector de programas) n$=PSEL$("filter"¡default$;title1$;title2$¿ PSEL$ llama al selector de programas que es del todo identico al usado para los comandos RUN OTHER, EDIT OTHER, LOAD OTHERS y NEW OTHERS. Se utiliza para la seleccion de un programa de la forma ya usual. El nombre del programa seleccionado vendrá en la función n$. En caso de que el usuario aborte la selección n$ tomará el valor "". "Filter" establece el tipo de programas que será listado por esta instrucción. Los valores habituales son:
Para más detalles del sistema ver el comando DIR. Default$, establece el nombre del programa usado por defecto Title1$,title2$, contiene unas líneas de texto que seran mostradas en la parte superior del selector. 19- El accesorio HELP Cada vez que la tecla HELP es pulsada desde la ventana de edición, AMOS automáticamente ejecuta un accesorio con el nombre de HELP.ACC si esta disponible. A diferencia de los otros accesorios este se ejecuta diréctamente sobre la ventana de edición. Tiene un acceso especial a la palabra que estes editando en ese momento. La dirección de esta palabra se coloca en un registro y puede ser leida usando la funcion AREG. 20- Las teclas de control del Editor Finalmente he aqui un listado completo de las teclas de control y sus efectos: Teclas especiales:
Teclas de edicion:
Flechas del cursor:
Control del programa:
Cut & Paste:
Marcas:
Search/replace:
Tabuladores:
4: PRINCIPIOS BASICOS En este capítulo se analizaran las reglas usadas para la realización de programas en Basic AMOS, y te informará como mejorar la técnica de programación con la ayuda de las rutinas en Basic de AMOS. 1- Variables Es la forma como se denominan los lugares de almacenamiento en el ordenador. Esos lugares contienen el resultado de una serie de cálculos realizados en tus programas. La elección del nombre de cada variable es libre, y puede ser una cadena de caracteres o de números. Existe sólo un par de restricciones. Todos los nombres de variables deben comenzar con una letra, y además no debe comenzar de forma igual a algún tipo de instrucción basic de AMOS. Sin embargo, es perféctamente lícito usar esas instrucciones basic precedidas de otra letra, asi es posible usar variables como VPRINT, pero NO seria válido PRINTV. Los nombres de las variables no deben ser entrecortados, por lo que no deben contener espacios. Si fuera necesario introducir un espacio, es posible sustituirlo por el caracter "_". A continuación algunos ejemplos de nombres ilegales. Cuando se introduce un nombre ilegal, este aparecerá sobreimpresionado para facilitar las cosas:
2- Tipos de variables Existen 3 tipos de variables usados en AMOS:A) NUMERO ENTERO A diferencia de otros Basics, AMOS inicialmente presume que todas las variables son de números enteros. Número entero es todo aquel número como el 1, 3 o el 8 (sin decimales), y son ideales para ser usados en tus programas. El manejo en operaciones aritméticas de estos números enteros es mucho más rápido que aquellas operaciones realizadas con decimales, también llamadas de coma flotante (point floating). Cada número entero se almacena en 4 bytes que pueden oscilar desde más/menos 147.483.648. Algunos ejemplos de este tipo de variables: A, NUMBER, SCORE, LIVES B) NUMERO REAL En el Basic AMOS, este tipo de variables siempre iran seguidas por el símbolo (#). Los números reales pueden ser fraccionarios como 3.1 o 1.5. Cada variable real es almacenada en 4 bytes que estan entre 1E-14 y 1E-15. Todos los valores se almacenan con una precisión de 7 decimales. Son ejemplos de este tipo de variables: P#, NUMER#, TEST# C) VARIABLES DE CADENA Contienen texto en lugar de números. Se distinguen de las variables normales por el caracter "$" que se añade al final. La longitud de texto puede ir desde 0 hasta 65.000 caracteres. Son ejemplos: NAMES$, PATH$, ALIEN$ 3- Dando un valor a una variable Asignar un valor a una variable es fácil. Simplemente elige un nombre apropiado y asignale el valor usando el simbolo "=". MES= 10 Esto permite almacenar el valor 10 en la variable entera MES. A$="Hola" Esto asigna la cadena "Hola" a la variable de cadena A$ 4- Matrices (Arrays) Una lista de variables puede ser combinada conjuntamente formando lo que denominamos una MATRIZ. Para la creación de matrices se usa el comando DIM (dimensionado de matrices). DIM VAR (z,x,y) DIM define una tabla de variables en tus programas AMOS. Esas tablas pueden contener tantas dimensiones como desees, pero cada dimensión esta limitada a un máximo de 65.000 elementos. Ejemplo: DIM A$ (10), B(10, 10), C# (10,10,10) Al objeto de acceder a un elemento de la matriz, símplemente teclea el nombre de la matriz, seguido por el número indice. Esos números se separan por comas y se encierran entre paréntesis. Ten en cuenta que el número de elementos de una matriz siempre empieza desde cero. Ejemplo: DIM ARRAY (10)
ARRAY (0)=10:ARRAY (1)=15 5- Constantes Las constantes son simplemente números o cadenas asignados a una variable o usados en alguno de tus cálculos. Se llaman constantes porque no cambian de valor durante el curso de tu programa. Los siguientes valores son todos constantes: 1, 42, 3.141, "Hola" Por defecto, todas las constantes numéricas se tratan como si fueran enteros. Cualquier asignación de número decimal a una variable de número entero será convertida automáticamente a un número entero de la forma siguiente:
Ten en cuenta que cualquier número tecleado en AMOS será automáticamente convertido a un formato interno especial. Cuando listes tus programas esos números seran reexpandidos a su formato original. Una vez que AMOS Basic imprime todos los números en la forma estandard, no existiran diferencias entre el número que tu habías introducido y el que aparece en pantalla. El valor del número permanece exáctamente igual. Las constantes de coma flotante se distinguen de los números enteros por el punto decimal. Si el punto no se usa, el número se asume que es entero, incluso si aparece dentro de una formula de coma flotante. Mira el siguiente ejemplo:
For X = 1 TO 10000 Cada vez que la expresión es calculada en tu programa, el "2" será convertido en un número real. Asi esta rutina sera mucho más lenta que la siguiente:
For X = 1 TO 10000 Esta última formula se ejecuta un 25% más rápidamente que la original debido a que la constante se almacena ahora de forma directa en formato coma flotante. Siempre recordarás este truco y colocarás un punto decimal después de una constante, incluso si esta va a ser un número entero. Si de forma accidental mezclas números enteros y de coma flotante, el resultado será transforma do en un numero real. Ejemplo:
Print 19.0/2
Print 3.141 + 10 6- Operaciones aritméticas Las siguientes operaciones aritméticas pueden ser usadas en cualquier expresión numérica:
Hemos listados estas operaciones en orden descendiente de prioridad. Esta prioridad se refiere a la secuencia en la que las varias secuencias de operaciones o expresiones aritméticas seran realizadas. Asi que las operaciones con mayor prioridad seran calculadas en primer lugar. INC (añade o incrementa 1 a una variable entera). INC VAR añade 1 a la variable de numero entero VAR usando para ello una simple instrucción. Es el equivalente lógico de la expresión VAR = VAR +1, pero mucho más rápida. Ejemplo:
A=10:Inc A:Print A DEC (resta 1 de una variable de nÚmero entero) DEC VAR resta 1 a la variable VAR. Ejemplo:
A=2:Dec A:Print A ADD (suma rapida de número entero) ADD V,Exp La instrucción estandard inmediatamente añade el resultado de la expresión a la variable entera V. Es el equivalente de la línea de Basic V = V + EXP La única diferencia significativa entre las dos es que ADD realiza la función un 40% más rápido. Ten presente que la variable V ha de ser de número entero. Ejemplo:
Timer = 0 La segunda versión de ADD es un poco más complicada. Es efectívamente idéntica al siguiente programa, (pero mucho más rápida)
V=V+A Ejemplo:
DIM A(10) Como puedes ver ADD es ideal para bucles circulares o repetítivos en tus programas. 7- Operaciones de cadena Como la mayoria de las versiones Basic, AMOS felizmente también podrá unir dos cadenas.
A$="AMOS"+" Basic" (Resultado: AMOS Basic) También es posible establecer comparaciones entre dos cadenas caracter a caracter usando los valores ASCII de cada una de las letras.
"AA"<"BB" 8- Parámetros Los valores que introduces en una instrucción AMOS son conocidos como PARAMETROS. Ej.:
Inc N En las instrucciones anteriores, los parámetros son N, A, 10, 1, 2 y 3 respectívamente. De forma ocasional, alguno de los parámetros de un comando puede ser omitido en una instrucción. En este caso, un valor no usado será automáticamente asignado como número por defecto. Ejemplo: Ink 5,, Esta instrucción cambia el color de la tinta sin afectar el color del papel y los margenes. 9- Numeros de linea y etiquetas Las etiquetas son una aconsejable forma de remarcar un punto dentro de tu programa AMOS. Consiste en una cadena de caracteres que se rigen por las mismas reglas que las variables. Una etiqueta podrá ser siempre situada al comienzo de la línea, y debe ser seguida inmediatamente por un caracter ":", sin que existan espacios entre la etiquetas y los dos puntos. Ejemplo:
TESTLABEL: Este programa puede ser abortado pulsando CTRL + C 10- Procedimientos Los procedimientos te permiten concentrar tus esfuerzos justo en un problema sin que el resto del programa te distraiga para nada. Una vez que hayas escrito tus procedimientos podrás rápidamente combinarlos con una infinidad de tus propios programas. Los procedimientos AMOS son programas totalmente independientes que pueden contener sus propias líneas de programa, variables e incluso lineas de Data. PROCEDURE (esta instruccion te permite crear un procedimiento de AMOS Basic)
PROCEDURE NAME ¡parameter list¿ Esto define un procedimiento AMOS llamado NAME. NAME es una cadena de caracteres que identifica dicho procedimiento. Se construye de igual forma a las variables básicas de cadena, pero ten presente que es perfectamente lícito usar nombres idénticos para procedimientos, variables y etiquetas. AMOS sabe de forma automática a que clase de objeto te refieres en el contexto de una línea. Los procedimientos son parecidos a los comandos GOSUB, tipicos de las primeras versiones Basic. He aquí un ejemplo de un simple procedimiento:
Procedure ANSWER Observa como el procedimiento ha terminado con el comando END PROC. También comprobarás como PROCEDURE y END PROC se situan en sus propias líneas. Esto es obligatorio. Si tecleas el procedimiento anterior en AMOS Basic tal y como aparece, e intentas ejecutarlo, nada ocurrirá. Esto es debido a que no has llamado a tu nuevo procedimiento desde tu programa Basic. Esto puede solucionarse símplemente con teclear el nombre del procedimiento en el punto adecuado del programa. Como ejemplo introduce la siguiente línea al comienzo del programa y ejecutalo y podrás observar el resultado de tu procedimiento: ANSWER Es importante, que cuando estes usando varios procedimientos en la misma línea, es aconsejable añadir un espacio extra al final de cada orden. Esto evitará el riesgo de que el procedimiento sea confundido con una etiqueta. Por ejemplo: TEST : TEST : TEST (Ejecuta el TEST en 3 ocasiones) TEST:TEST:TEST (Define la etiqueta TEST y ejecuta el TEST en 2 ocasiones) Otra posibilidad es preceder tus procedimientos con el apartado PROC, de la forma siguiente: Proc ANSWER Ejemplo:
Proc ANSWER Si ejecutas este programa de nuevo, el procedimiento sera ejecutado y la respuesta imprimida en pantalla. Aunque la definición del procedimiento sea posicionada al final del programa, es posible localizarla en cualquier sitio. Donde sea, AMOS podrá encontrar las ordenes contenidas en el procedimiento, ejecutándolas y regresando cuando encuentre End Proc. Esto significa que no hay peligro de que se autoejecuten tus procedimientos por error. Una vez que hayas creado un procedimiento, y lo ensayes con satisfacción, podrás eliminarlo de tus listados usando la opcion FOLD del menú principal. Realizando un FOLD de tus procedimientos reducirás la complejidad de tus listados mientras estes programando, con lo que evitarás distracciones. Más tarde podrás recuperar tus procedimientos seleccionando la opción UNFOLD del menú. A) VARIABLES LOCALES Y GLOBALES Todas las variables que definas dentro de tus procedimientos son independientes de cualquier otra usada en tu programa. Esas variables se denominan "LOCALES" porque pertenecen a un procedimiento en particular. He aquí un ejemplo que ilustra todo esto:
A=1000:B=42 Ejecutalo y verás como A y B son variables completamente distintas según se usen dentro o fuera de un procedimiento. Las variables que se usan fuera de un procedimiento se denominan "GLOBALES" y no se pueden acceder a ellas desde un procedimiento. He aqui otro ejemplo:
Dim A(100) Este programa puede parecer bastante inocente, pero contiene dos errores garrafales. Primeramente, el valor de TEST_FLAG dentro del procedimiento siempre tendrá el valor de 0, de modo que el bucle IF-ENDIF nunca será ejecutado; esto se debe a que la variable TEST_FLAG dentro del procedimiento es totalmente distinta a aquella otra usada fuera del mismo, y todas las variables toman inicialmente el valor 0. Por otro lado, el programa nunca se ejecutara dado que la matriz A ha sido definida fuera del procedimiento, por lo que el procedimiento APRINT al llegar a la linea PRINT A(P), se interrumpirá dando un mensaje de error de matriz no dimensionada: Array not dimensioned. Error at the line : PRINT A(P) Esta clase de errores son muy fáciles de cometer. Asi que es vital que trates tus procedimientos como si fueran programas independientes y contengan sus propias variables e instrucciones. Pero existe la posibilidad de transferir datos desde tus procedimientos hasta el programa principal. Una vez que te familiarices con los nuevos comandos no tendrás problemas en utilizar los procedimientos dentro de tus programas. B) PARAMETROS Y PROCEDIMIENTOS Existe la posibilidad de introducir una lista de definiciones de parámetros en tu procedimiento. Este crea un grupo de variables locales que pueden grabarse diréctamente del programa principal. He aqui un ejemplo:
Procedure HELLO¡NAME$¿ El valor que sera grabado en NAME$ se introduce entre comillas como parte de la llamada del procedimiento. Asi el procedimiento HELLO quedaría de la forma siguiente:
Rem Load N$ en NAME$ e introduce el procedimiento Como veras, el sistema de parámetros trabaja de igual forma con variables o constantes. Sólo es importante el tipo de variable. Este proceso puede ser usado para la transferencia de variables de números enteros, reales o de cadena. Sin embargo, no puedes transferir matrices enteras con esta función. Si deseas introducir varios parámetros, tendras que separar las variables mediante comas. Por ejemplo:
Procedure POWER ¡A,B¿ Esos procedimientos deben ser llamados usando lineas como:
POWER¡10,3¿ C) VARIABLES COMPARTIDAS (SHARED VARIABLES) Otro modo de transferir datos entre un procedimiento y el programa principal es usar la funcion SHARED. SHARED (Define un listado de variables globales) SHARED variable list. SHARED se situa dentro de la definición de un procedimiento y se le asigna un listado de variables separadas por comas. Esas variables se tratan ahora como si fueran globales, y a ellas se podrá acceder diréctamente desde el programa principal. Una matriz que transfieras de esta forma ha de ser previamente dimensionada dentro del programa principal. Ejemplo:
A=1000:B=42 De esta forma TEST puede ahora ser leer y escribir información dentro de las variables globales A y B. Si deseas compartir una matriz, la definirás como sigue: SHARED A(),B#(),C$() :Rem SHARE matrices A, B# y C$ GLOBAL (define una lista de variables globales del programa principal) GLOBAL variable list. Cuando este escribiendo un gran programa es habitual que algunos de los procedimientos compartan ciertas variables globales. Esto permite un simple método de transferencia de gran cantidad de información entre varios procedimientos. Al objeto de simplificar este proceso, hemos incluido un comando simple que puede ser usado diréctamente en el programa principal. Se trata de GLOBAL, que define un listado de variables a las que podemos acceder en cualquier momento desde el programa Basic, sin necesidad de una orden SHARED dentro de un procedimiento. D) VALORES RETENIDOS TRAS UN PROCEDIMIENTO Si un procedimiento necesita retener un valor como variable local, entonces se precisa el siguiente comando, que solo requiere donde encontrar la variable local. PARAM (retiene un parámetro dentro de un procedimiento) La orden PARAM te permite retener un resultado dentro de un procedimiento, tomándolo de una expresión opcional en el momento de hallar la orden End Proc, reteniendolo en una de las siguientes variables: PARAM, PARAM#, PARAM$, segun el tipo de dato. Ej:
MERGE_STRINGS¡"AMOS"," ","Basic"¿ Advierte que End Proc sólo retiene un simple parámetro con este método. Las funciones PARAM siempre contendran el resultado de la última operación ejecutada en el procedimiento. He aquí otro ejemplo, que esta vez muestra el uso de la funcion PARAM#.
CUBE¡3,0¿ E) DEJANDO UN PROCEDIMIENTO POP PROC (deja un procedimiento de forma inmediata) Normalmente, los procedimientos regresan al programa principal cuando se llega a una instruccion End Proc. Pero a veces, sin embargo, puedes necesitar salir urgéntemente de un procedimiento. Es en este caso cuando debes usar este comando (POP PROC) para salir inmediatamente. F) ALMACENAMIENTO LOCAL DE DATAS Cualquier almacenamiento de DATAS definidas dentro de tus procedimientos se almacenan de forma complétamente separada del resto de DATAS del programa principal. Esto significa que cada procedimiento puede contener sus propias áreas de almacenamiento de DATAS. G) PISTAS Y CONSEJOS He aqui un par de consejos que te ayudaran para sacar el máximo de provecho a tus procedimientos: * Es perfectamente lícito que un procedimiento se autollame, pero este recurso esta limitado por la cantidad de espacio usado para el almacenamiento de variables locales. Si tu programa excede la memoria disponible, aparecerá el oportuno mensaje de error * Todas las variables locales se anulan automáticamente una vez que se ha ejecutado el procedimiento. 11- Bancos de memoria AMOS Basic incluye un cierto número de poderosos métodos de manipulación de sprites, bobs y música. Los datos necesarios para estas funciones deben ser almacenados dentro del programa Basic. AMOS Basic utiliza un juego especial de 15 secciones de memoria para este propósito que se denominan BANKS. Cada banco se identifica por un numero de 1 a 15. Muchos de esos bancos pueden ser usados para cualquier tipo de datos, pero otros se dedican exclusívamente para cierto tipo de información como las definiciones de sprites. Todas las imagenes de sprites se almacenan en el banco 1 y se podran cargar en memoria usando la siguiente linea: LOAD "AMOS_DATA:Sprites/Octopus.abk" Hay dos formas diferentes de bancos de memoria: Permanente y temporal. Los bancos Permanentes sólo necesitan ser definidos en una sola ocasión, y son automáticamente salvados con tus programas. Los bancos Temporales son muchos más efímeros y se reinicializan cada vez que se ejecuta el programa. Además, a diferencia de los permanentes, los bancos temporales pueden ser borrados de memoria usando el comando CLEAR. A) TIPOS DE BANCOS DE MEMORIA AMOS Basic dispone de los siguientes bancos de memoria:
RESERVE (Reserva un banco) RESERVE AS type,bank,length. Los bancos usados por tus sprites o bobs se localizan automáticamente por AMOS. El comando RESERVE te permite crean otros bancos que puedas necesitar. Cada tipo diferente de banco tiene su propia y única versión por la instrucción RESERVE. RESERVE AS work bank,length. Esta orden va a reservar cierta cantidad (length) de bytes para el uso de espacio de trabajo temporal. También es posible localizar este área en memoria rapida, con lo que tendrás que añadir otros datos: RESERVE AS CHIP WORK bank, length. Pero préviamente debes conocer si dispones de memoria chip suficiente mediante el comando CHIP FREE. RESERVE AS CHIP DATA, bank,length. Reserva X bytes de memoria chip ram en el banco número "bank", dicho banco se grabará automáticamente con tus programas AMOS. El banco podrá ser cualquiera entre 1-15. Dado que los 5 primeros son normalmente reservados por el sistema, es más lógico reservar algún otro. Ten siempre presente que el único impedimento para estas RESERVAS es la cantidad de memoria disponible. LISTBANK (Lista los bancos en uso) LISTBANK hace un listado del número de los bancos actualmente reservados por el programa, asi como su localización y tamaño. El listado se realiza según el siguiente formato:
Normalmente, la longitud de un banco se muestra en bytes, pero en caso de sprites e iconos el valor representa el número total de imagenes instaladas en el banco. La razón de esto es que el almacenamiento de cada imagen puede tener lugar en cualquier lugar de la memoria del AMIGA, por lo que el banco no es un bloque continuo de memoria. Por tanto no utilices la orden BSAVE para grabar un banco de sprites, sino simplemente SAVE "nombre.abk". B) BORRANDO BANCOS Durante el curso de un programa puedes necesitar borrar algun banco de memoria, asi como cargar datos adicionales. Los sprites pueden necesitar un cambio en cierta parte del programa, también una música distinta puede ser necesario incluir. El comando ERASE te permite un rápido control de borrado de datos. ERASE b (borra un banco) ERASE borra el contenido de memoria de un banco. El numero de banco (b) puede oscilar entre 1-15. Advierte que toda la memoria contenida en ese banco podra ser líbremente usada en tus programas. C) FUNCIONES DE PARAMETROS DE BANCO Si deseas tener acceso directo a los datos de un banco número b, como con la vieja función "POKE", lo podrás realizar con los nuevos comandos de direccionamiento de bancos en memoria y de tamaño de banco: = START (situa la dirección de inicio de un banco) = START (b). Esta función situa la dirección de inicio del banco b. Una vez haya sido ubicada, la localización del banco no sufrirá más cambios. Asi el resultado de esta función permanecerá fijo durante todo el tiempo. Ejemplo:
Reserve As Work 3,2000 = LENGTH (establece la longitud de un banco) l=length (b). La funcion LENGTH situa la longitud en bytes del banco número b. Si el banco contiene los sprites entonces el número de sprites o iconos será mostrado inmediatamente. Un valor 0 indica que el banco b no existe. Ejemplo:
Reserve as work 6,1000 D) GRABANDO Y CARGANDO BANCOS Algunos programas requeriran muchos bancos de información, un buen ejemplo es una aventura. Este tipo de programas necesita la carga de varios gráficos y sonidos para las diferentes localizaciones dentro del programa. Un A-500 tendría gran dificultad en almacenar todos estos datos a la vez, asi que lo mejor que hace es cargar aquellos datos necesarios en un determinado momento. LOAD (carga uno o mas bancos) LOAD "filename"¡,n¿. El efecto de este comando varía dependiendo del tipo de fichero que estes cargando. Si el fichero contiene varios bancos, entonces todos los actuales bancos de memoria se borraran antes de que los nuevos bancos sean cargados desde el disco. Sin embargo, si sólo estas cargando un banco, solo este banco será reemplazado. El punto opcional de destino especifica el banco en donde se cargaran tus datas. Si este fuera omitido, entonces las datas seran cargadas en el banco donde originalmente estaban grabadas. Los bancos de sprites son tratados de forma algo distinta. En este caso el parametro "n" da lugar a dos formas de carga diferentes. Si "n" se omite o si le asigna el valor 0, el actual banco será complétamente sobreimpresionado por los nuevos sprites. Cualquier otro nuevo valor de "n" obliga a que los nuevos sprites se adjunten a este banco. Esto te permite combinar varios ficheros de sprites en el mismo programa. Ejemplo: LOAD "AMOS_DATA:sprites/octopus.abk" SAVE (graba uno o mas bancos en disco) SAVE "filename"¡n¿. El comando SAVE graba tus bancos de memoria en disco. Existen dos posibles formatos:
1) SAVE "Filename.ABK"
2) SAVE "Filename.ABK",n BSAVE (graba un bloque no formateado en formato binario) BSAVE file$, start TO end. La memoria almacenada entre START y END se graba en disco en el fichero FILE$. Estas datas se graban sin un formato especial. Ejemplo: BSAVE "test",Start(7)toStart(7)+Length(7) El ejemplo anterior graba las datas del banco de memoria 7 en disco. La diferencia entre este fichero y un fichero grabado normalmente es que SAVE especifica y escribe un cabecero especial que contiene información concerniente al banco. Este cabecero no se imprime en el caso de BSAVE, asi que no podrá ser cargado mediante LOAD. ATENCION: Los bancos de sprites e iconos no son almacenados como trozo de memoria. Cada objeto puede residir en algun lugar de la memoria. Gracias a que AMOS usa este sistema tan flexible de almacenamiento de datas, tú símplemente puedes grabarlos en memoria mediante la orden BSAVE. BLOAD (carga información binaria en una direccion o banco previamente especificado) BLOAD file$, addr. Esta orden carga un fichero de datos binarios en memoria, sin que se altere esta información. Existen dos formas de realizacion:
1) BLOAD file$, addr
2) BLOAD file$, bank 12- Fragmentación de memoria A veces, después de una aburrida sesión de edición, obtienes un error tipo "OUT OF MEMORY", por lo que debes asegurarte espacio. 13- Encontrando espacio para tus variables Por defecto, todas las variables se almacenan en una zona de la memoria de 8k de longitud. Aunque esto pueda parecer increiblemente pequeño, es capaz de albergar hasta 2 paginas de texto normal, o bien 2000 números. Lo hemos puesto intecionadamente pequeño para asi aumentar el espacio disponible para tus pantallas y bancos de memoria. SET BUFFER (situa el tamaño del area de variables) SET BUFFER n. Establece el tamaño del area de variables en tu programa actual en "n" Kilobytes. Esta debe ser la primera instrucción en tu programa (excluidos los rem). De otro modo, obtendrás un mensaje de error. SET BUFFER será usado en tus programas cuando obtengas un mensaje de error del tipo "OUT OF STRING SPACE ERROR". Aumenta en 5K el valor hasta que el error desaparezca. Si quedas fuera de memoria durante este procedimiento, necesitarás reducir el tamaño de tu programa por algún sitio. Observa el comando CLOSE WORKBENCH o CLOSE EDITOR para más detalles. FREE (Indica la cantidad de memoria disponible en el área de variables) f=FREE. Free indica el número de bytes que estan actualmente disponibles para almacenaje de tus variables. Este valor puede ser aumentado si fuera preciso utilizando el comando SET BUFFER. Cuando FREE es llamado, el área de variables se reorganiza para proveer el máximo espacio posible para tus variables. Este proceso se denomina "Garbage Collection" o recolección de basura y habitualmente se realiza de forma automática. Debido al poder de AMOS Basic, todo el procedimiento se realiza habitualmente de forma instantanea. Pero si tu área de variables es muy grande y tu estas utilizando gran cantidad de cadenas la rutina de recolección de basura llevará varios segundos hasta que se complete. Consecuentemente, esto podrá ocasionar un pequeño retraso en la ejecución de tu programa. |