179 15: G R A F I C O S D E F O N D O Habitualmente no es frecuente que un programa arcade contenga cientos de diferentes pantallas. Pero con la compactacion, es po- sible meter una simple pantalla de 32 colores en unos 30K de memo ria. De este modo, 100 pantallas serian el equivalente de 3 Mega bytes de datos. Imagina lo dificil que seria meter todo esto en un Amiga-500!! La forma clasica de evitar esta limitacion, consiste en cons- truir los fondos de pantalla con un juego de simples bloques de ladrillos. Una vez creados esos "azulejos", podran ser colocados en pantalla en el orden que desees. Asi, el mismo juego de "azule jos" puede ser reutilizado para generar un gran numero de panta- llas. Cada pantalla sera almacenada ahora por una simple lista de sus componentes, y requiere una minima parte de la memoria origi- nal. Para sacar producto a este sistema, necesitaras obviamente algun modo de definicion de mapas de pantallas. Y como eres un distinguido invitado, ya hemos previsto un util y poderoso acceso rio definidor de mapas en el disco de AMOS. Encontraras mas deta- lles en el fichero acompañante de documentacion. AMOS Basic tambien incluye varias instrucciones especiales pa ra representar tus "azulejos" en pantalla. Con esos comandos sera facil generar los scrolling de fondo rapidos que constituyen la clave de los modernos juegos de arcade. Iconos ====== Los iconos son imagenes separadas que han sido especialmente diseñadas para producir tus pantalla de fondo. Una vez que hayas dibujado un icono, quedara fijado permanentemente en su lugar, de forma que no podras moverlo a una nueva posicion usando el siste- ma de animacion AMAL. Todos los iconos se almacenan en sus propios bancos AMOS de memoria (#2). Este banco se crea mediante el accesorio definidor de sprites (en el disco del programa AMOS), y sera automaticamen- te grabado conjuntamente con tus programas Basic. Como los bobs, los iconos se visualizan a traves del chip BLI TTER del Amiga. Y como diferencia, los iconos son esencialmente objetos estaticos, y son habitualmente dibujados en modo REPLACE. Tus iconos se borraran totalmente si existiera cualquier grafico en dicha posicion. 180 PASTE ICON (dibuja un icono) PASTE ICON x,y,n Dibuja el icono numero N en la pantalla con las coordenadas grafi cas X,Y. "N" es el numero del icono que va a ser visualizado. Es- te debera haber sido previamente almacenado en el banco de iconos Los iconos pueden posicionarse libremente en cualquier parte de la pantalla, de acuerdo a las reglas habituales. Ejemplo: Load "AMOS_DATA:Icons/Map_icons.abk" Screen Open 0,320,256,32,lowres: CLS: Get Icon Palette For X=1 TO 11: Paste Icon X*32,0,1: Next X For Y=1 TO 6 : Paste Icon 0,Y*32+11:Paste Icon 288,Y*32,1 Next Y For X=1 To 11: Paste Icon X*32,223,1: Next X Ten presente que si estas usando el doble buffer, se dibujara una copia de tus iconos en ambas pantallas (fisica y logica). Con lo que la ejecucion sera mas lenta, es una practica habitual aña- dir una llamada al AUTOBACK 0 anates de dibujar tus iconos en la pantalla. Esto limita la copia a la pantalla fisica, evitando par te del tiempo perdido. Para ejemplo sirva el programa MAPVIEW del disco de datas de AMOS. Este ejecuta un fondo de pantalla creado con el editor de mapas. GET ICON (crea un icono) GET ICON ¡s,¿ i,tx,ty to bx,by Captura una imagen de pantalla y la carga como icono "I". Si este icono no existiera, sera creado por tu banco 2. Este banco sera automaticamente reservado por el sistema si hiciera falta. "I" es el numero de tu icono, comenzando en 1. Tx,Ty TO Bx,By definen la zona rectangular de donde se tomara el icono. "S" determina el numero de la pantalla que sera utilizada como fuente de la imagen. Si se omite, la imagen sera tomada de la pan talla actual. Ejemplo: Erase 2 F$=Fsel$("*.*","","Load a screen"): If F$="" then direct If Exist(f$) then Load IFF F$,0 else direct SH=Screen Height:H=SH/32-1:SW=Screen width:W=SW/32-1 For Y=0 to H For X=0 to W Get Icon X+Y*W+1,X*32,Y*32 to X*32+31,Y*32+31 Next X Next Y Cls 0 Do Paste Icon Rnd(SW-1),Rnd(SH-1),RND/(H*W)+1 Loop 181 GET ICON PALETTE (obtiene los colores del icono) GET ICON PALETTE Graba los colores de la imagen del icono en el banco 2, y las carga en la actual paleta de pantalla. Este comando se usa habi- tualmente para inicializar la pantalla despues de que hayas car- gado algunos iconos desde el disco. Ejemplo: Load "AMOS_DATA:Icons/Map_icons.abk" Get Icon Palette Paste Icon 100,100,1 DEL ICON (borra un icono) DEL ICON n¡ TO m¿ Borra uno o mas iconos del banco de iconos. "N" es el numero del primer icono a eliminar. "M" es opcional e indica el ultimo icono a eliminar de la lista. Cuando el ultimo icono de un banco ha si- do eliminado, entonces todo el banco sera borrado de memoria. MAKE ICON MASK (establece color 0 para transparencia) MAKE ICON MASK ¡n¿ Normalmente, cualquier icono que dibujes en pantalla borrara por completo el fondo de la misma. El icono aparecera en una caja rec tangular de color 0. Si deseas evitar este efecto de sobreposicion de tus iconos so bre los graficos actuales, necesitaras crear una "mascara" para tus iconos. Esto informa a AMOS que el color 0 debe ser considera do como transparente. "N" es el numero del icono que sera afectado. Si fuera omitido se definira una mascara para todos los iconos del banco. Bloques de pantalla =================== AMOS Basic te facilita un juego de potentes comandos de blo- ques que te permitiran grabar parte de una imagen en memoria y colocarla luego en cualquier lugar de la pantalla. Esas instrucciones se usan principalmente para el almacenamien to temporal de datos, puesto que tus bloques no pueden grabarse conjuntamente con tu programa Basic. Los bloques son especialmente utiles para la construccion de cajas de dialogos, al igual que para graber areas de fondo antes de visualizar nuevos graficos. Tambien pueden ser explotados en juegos de Puzzles como el fa- moso Split Personalities. Cada bloque puede ser cargado con una simple seccion de tu imagen. Luego se mezclan y reordenan los blo ques en pantalla con el comando PUT BLOCK. 182 GET BLOCK (graba un bloque de pantalla en memoria) GET BLOCK n,tx,ty,w,h ¡,mask¿ Este comando graba un area rectangular en el bloque numero N, que comienza en las coordenadas Tx,Ty. "N" es el numero del bloque, que oscila desde 1 a 65535. "Tx,Ty" establece las coordenadas de la esquina superior-izquierda de tu bloque. "W,Y" contienen la an chura y altura respectivamente del bloque. "MASK" es un parametro que permite optar por la creacion de una mascara para el nuevo bloque: Mask = 0 Modo REPLACE. Cuando el bloque se dibuja en panta- lla, destrozara por completo cualquier grafico en esa posicion. Mask = 1 Calcula una mascara para el bloque. El color 0 se tratara ahora como transparente. PUT BLOCK (Copia un bloque previamente creado en pantalla) PUT BLOCK n¡,x,y¿ PUT BLOCK n,x,y,planes ¡,minterms¿ Este comando copia el bloque numero "N" en la pantalla actual. "X,Y" especifican la posicion de tu nuevo bloque en pantalla. Si se omiten, el bloque sera redibujado en sus originales coordena- das de pantalla Ten en cuenta que las operaciones de dibujo seran interrumpi- das mientras se dibujan en pantalla, comenzando por el pixel mul- tiplo de 16 mas cercano. Para una demostracion de los comandos de bloques vease la ruti na del ejemplo 15.2. Tambien disponemos para los programadores ex perimentados un par de opciones extras. Dichos extras no son nece sarios para la gran mayoria de aplicaciones, y solo se necesitan cuando desees conseguir magnificos efectos de pantalla. "PLANES" contiene un mapa-BIT que establece el rango de colo- res que seran dibujados en tu bloque. La pantalla del Amiga se divide en segmentos conocidos como planos-BIT. Cada plano contie- ne un simple BIT para cada punto de la pantalla del Amiga. Cuando el Hardware del Amiga visualiza este punto, se combinan los BITS de cada plano para calcular el definitivo numero de color. Cada BIT en "planes" representa el status de un simple plano-BIT. Si se pone a 1, el plano seleccionado sera dibujado por la instruc- cion, de otro modo sera completamente ignorado. El primer plano se representa por el bit 0, el segundo por el 1, etc. Normalmente, el bloque sera visualizado en todos los planos- BIT disponibles, correspondiendo a un modelo de bit % 111111 "MINTERM" selecciona el modo Blitter usado para copiar tu blo- que en la pantalla. Una completa descripcion de los modos grafi- cos posibles se puede encontrar en la seccion de SCREEN COPY. La mejor forma de aprender con estas opciones es experimentarlas!! 183 DEL BLOCK (borra un bloque de pantalla) DEL BLOCK n Borra uno o mas bloques y habilita la memoria usada para AMOS Ba- sic: DEL BLOCK Borra todos los bloques DEL BLOCK n Borra el bloque N GET CBLOCK (graba y compacta una imagen de pantalla) GET BLOCK n,x,y,sx,sy Este comando graba y compacta un area rectangular de la pantalla. El sistema de compactacion usado por este comando ha sido espe- cialmente optimizado para la velocidad. Asi que es como una tan eficiente como delicada rutina de AMOS que se apoya en las ins- trucciones PACK y SPACK. Este comando es usado a menudo para grabar el area subyacente a tus cajas de dialogo. Despues de que el dialogo sea completado, la pantalla rapidamente recupera sus graficos a su estado origi- nal. "N" especifica el numero de tu bloque y puede oscilar entre 1 y 65535. "X,Y" son las coordenadas de la esquina superior-izquier da. La coordenada X se redondea al proximo multiplo de 8. "W,H" contienen las dimensiones del area que va a ser grabada. La anchu ra tambien sera siempre redondeada a multiplo de 8. PUT CBLOCK (visualiza un bloque creado por CBLOCK) PUT CBLOCK n¡,x,y¿ Coloca el bloque N en las actuales coordenadas de pantalla X,Y. Si las coordenadas fueran omitidas, el bloque sera redibujado en sus originales posiciones de pantalla. Tambien observa que X es redondeado automaticamente al mas proximo pixel multiplo de 8. DEL CBLOCK (borra un bloque de pantalla creado por CBLOCK) DEL CBLOCK ¡n¿ Borra todos los bloques de memoria. Si se incluye "N" solo este bloque sera afectado. ================================================================= 184 16: M E N U S Si has usado el Amiga durante algun tiempo ya te habras fami- liarizado con la idea de los menus. Aunque parezca imposible, AMOS ha tomado el sistema existente, mejorandolo hasta hacerlo irreconocible. Los MENUS pueden crearse hasta con 8 separados niveles, y cada menu individual puede colocarse en pantalla a voluntad. Los titu- los de los menus pueden ser imprimidos con diferentes colores o estilos. Puedes incluir tambien bobs o iconos directamente en tus menus usando un divertido lenguaje de definicion. AMOS Basic es igualmente impresionante cuando va a leer un me- nu. Existe un comando que saltara automaticamente a cualquier ra- mal del programa principal en funcion de la opcion elegida, se trata del comando ON MENU. Ademas, se puede acceder a cualquier opcion del menu directamente desde el teclado gracias a la ins- truccion MENU KEY. Para una demostracion de los impresionantes efectos que pueden lograrse con este sistema, carga el programa ejemplo 16.1. Usando un menu ============== Todos los menus se llaman apretando el boton derecho del raton (en su formato estandard). Una vez que el menu ha sido activado, podras seleccionar una opcion directamente con el cursor del ra- ton. Cuando liberas el boton, el numero de opcion que has elegido sera devuelto a tu programa. Los menus pueden reposicionarse colocando el cursor del raton sobre la esquina superior-izquierda de un item y pulsando el bo- ton izquierdo. Entonces aparecera una pequeña caja en la barra de menu que puede desplazarse a lo largo de la pantalla con la ayuda del raton. Por añadidura, pulsando la tecla SHIFT se congelara un menu en su posicion. Esto te permite explorar un menu sin tener que selec cionar ninguna de sus opciones. Puedes tambien usar cualquiera de las posibilidades del raton (como la seleccion de tamaños) en con juncion con tus menus. 185 Creando un menu simple Los menus AMOS pueden crearse bien directamente dentro de tus programas o usando un accesorio definidor de menus que se encuen- tra en el disco AMOS. Si no has usado nunca los menus, la gran variedad de comandos disponibles puede parecerte abrumadora. He aqui una breve descrip cion de las posibilidades que el Basic te ofrece para la introduc cion a los menus de AMOS: 1- Situando la linea del titulo El primer paso en la creacion de un menu consiste en definir la linea de titulo. La linea de titulo de un menu puede crearse con el comando MENU$, que en su formato mas simple tiene el si- guiente aspecto: MENU$ (establece una linea de titulo) MENU$(n)=Title$ MENU$ crea una linea de titulo para menu. A cada encabezamiento se le asigna su propio numero individual, comenzando por 1, y aumentando de izquierda a derecha. Asi el titulo mas a la izquier da se representa por 1, el siguiente por 2, etc. El texto contenido en "title$" contiene el nombre de la opcion que sera visualizada en tu nuevo menu. He aqui un simple ejemplo que construye una linea de menu consistente en 2 titulos: Accion y Raton Menu$(1)=" Accion " Menu$(2)=" Raton " No olvides dejar un espacio despues de "Accion" para que quede separado de "raton" en el menu siguiente. A continuacion deberas especificar un listado de opciones asociada a cada nuevo encabeza miento. Esas forman una barra vertical que ocupara su lugar cuan- do un titulo es seleccionado con el raton. MENU$(t,o)= option$ Esta segunda forma del comando MENU$ define un juego de opciones que se visualizaran en la barra de menu. "T" es el numero del me- nu de encabezamiento que tu opcion mostrara debajo. "O" es el nu- mero de opcion que has instalado en la barra. Todas las opciones se numeran hacia abajo, comenzando desde 1. El unico limite fisico en el tamaño de tu menu es la cantidad de memoria, pero es aconsejable limitar a menos de 10 opciones en cada titulo de menu. Esto disminuira al minimo la complejidad de tu menu. "OPTION$" contiene el nombre de tu nueva opcion. Y puede con- sistir en cualquier seccion de texto que desees. Por ejemplo, pru eba a añadir las siguientes lineas al programa anterior: 186 Rem Menu ACTION Menu$(1,1)=" Quit " Rem Menu MOUSE Menu$(2,1)=" Arrow " Menu$(2,2)=" Pointer " Menu$(2,3)=" Clock " Wait Key Este ejemplo especifica un listado de alternativas para los me nus ACTION y MOUSE. Si intentas ejecutar este programa tal y como aparece, nada ocurrira. Debido a que un menu necesita ser inicia- lizado con una llamada al comando MENU ON. Introduce esta orden antes de la instruccion WAIT KEY. Ahora ejecuta el ejemplo y se- lecciona el item del menu que desees con el cursor del raton. No olvides que tienes que pulsar primero el boton derecho del raton! MENU ON (activa un menu) MENU ON Activa un menu definido por el comando anterior. La linea de menu aparecera ahora automaticamente cuando el boton derecho del raton sea pulsado por el usuario. Para comenzar el menu previo, inserta la siguiente linea despues de la ultima instruccion Menu$: MENU On 2- Lectura de un menu simple Una vez creado el menu y activado con el sistema de menus de AMOS, descubriras las opciones seleccionadas por el usuario. Esto se conseguira mediante un simple comando de eleccion: = CHOICE (lee un menu) selected= CHOICE Este comando devuelve un valor de -1(cierto) si el menu ha sido sobreimpresionado por el usuario, de otra forma sera 0. Despues de cada comprobacion se resetea a 0 de forma automatica. Tambien es posible encontrar el numero de titulo que ha sido seleccionado usando un segundo formato de esta instruccion: Heading= CHOICE(1) "HEADING" ahora contiene el numero del "titulo" que ha sido sobre impresionado por el usuario. De forma parecida podras obtener el numero de opcion actual que ha sido elegido con el parametro 2. Item= CHOICE(2) 187 Prueba a añadir las siguientes lineas al ejemplo anterior: Do If Choice and choice(1)=1 then exit If Choice(1)=2 and choice(2)<>0 then change mouse choice(2) Loop Esto cambia la figura del cursor del raton dependiendo de que opcion haya sido elegida del menu. Encontraras una completa demos tracion de esos menus en el fichero ejemplo 16.2. Menus avanzados =============== Ahora analizaremos algunas de las caracteristicas mas avanza- das de los menus disponibles en AMOS Basic. Un uso correcto de estos menus puede dar una nueva dimension a tus programas. MENU$(,,)=normal$¡,selected$¿¡,inactive$¿¡,background$¿ Este formato del comando MENU$ define la apariencia de cada item individual de uno de tus menus. A diferencia de los menus estan- dards del Amiga, esos items no se limitan al texto estandard, sino que tambien pueden incluir comandos internos que te permiti ran dibujar bobs, iconos o graficos en un punto de la linea del menu. Cualquiera de los parametros de esta instruccion puede ser op cionalmente omitido, asi que puedes cambiar partes independiente mente de la descripcion del menu. Un valor de "" en la cadena de tu menu, borrara el formato existente. De forma similar, puedes retener el valor original, incluyendo una coma en el punto adecua do. Por ejemplo: Menu$(1)=" Action ","" : rem borra la segunda opcion Menu$(2)=" Mouse 2 ", ,: rem cambia el titulo sin alterar nada mas La posicion del item de un menu dentro del menu actual se indi ca mediante un listado de hasta 8 parametros separados por comas. El formato general es: (item)/(item,opcion)/(item,opcion,subopcion)... "NORMAL$" es una cadena que establece la apariencia normal de un item cuando se visualiza en el menu. "SELECTED$" cambia el efecto de sobreimpresion de la opcion del menu con el raton. Por defecto los items seleccionado son visualizados en texto inverso. "INACTIVE$" cambia la apariencia de un item que ha sido desac- tivado usando el comando MENU INACTIVE. Si esta cadena fuera omi- tida, todos los items inactivos seran mostrados en italica. 188 "BACKGROUND$" crea un fondo para los items de tu menu donde seran inicialmente dibujados. Generalmente se crean mediante co- mandos de linea o Barra interna. Por ahora, los abreviaremos usan do una codificacion estandard: Setting$ = ¡,selected$¿¡, inactive$¿¡, background$¿ 1- Jerarquia del menu El nivel de un item dentro del menu se determina por su posi- cion dentro de la jerarquia del menu: Menu$(1) = "Title" Menu$(1,1) = "Opcion 1" Menu$(1,2) = "Opcion 2" Menu$(1,2,1) = "Item 1" Estas ordenes definen un menu simple. La estructura del menu es parecida a la de una matriz. Cada nivel del menu se representa por su propia dimension de matriz, y se controla utilizando una version separada del comando MENU$. El primer nivel representa la linea de titulo que aparece en la parte mas alta del menu. Se puede usar un comando como este: Menu$(n)= title$¡ setting$¿ En donde "N" corresponde a la posicion del titulo a la izquierda de la pantalla, y "Setting$" se refiere a 3 cadenas opcionales que definiran la apariencia general del menu. Es importante defi- nir el titulo de tus menus en primer lugar y como las dimensiones de una matriz. Todos los demas items pueden crearse en el orden que desees. Cada titulo se asocia con una lista de opciones de menu que se hacen visibles cuando el menu es seleccionado. Estas opciones con forman el segundo nivel de la estructura del menu y se definen siguiendo un segundo formato del comando MENU$: Menu$(n,option) = item$¡ setting$¿ "OPTION" contiene el numero del item, contabilizado desde la iz- quierda de la barra del menu. No existe limitacion al numero de opciones que pueden incluirse en un solo titulo, nada mas que la memoria disponible. Cada opcion individual puede a su vez asociar se con sus propias sub-opciones y asi hasta un total de 8 niveles Menu$(n,option,sub option) = item$¡ setting$¿ Una vez que hayas creado un menu, este puede aumentarse o bien trasladarse a otro punto de tu programa. No debes cambiar de pan- talla actual mientras estes creando un menu, so pena de conseguir un mensaje de error. Vease ejemplo 16.3. 189 item=CHOICE¡(dimension)¿ La funcion CHOICE comprueba si una opcion ha sido sobreimpresiona da en el menu actual. Si un item ha sido seleccionado, CHOICE de- dolvera un valor -1, en caso contrario sera 0. Despues de que hayas llamado a esta funcion, el status del menu se reseteara a 0 automaticamente. Esto impide que el acceso a un menu determinado sea detectado por error en varias ocasiones. Un segundo formato de este comando, devuelve la opcion seleccio nada en el nivel requerido: item= CHOICE(dimension) "DIMENSION" indica el nivel del menu que ha sido leido. Y como ya podras imaginarte, un nivel numero 1 corresponde a la linea del titulo, mientras que un resultado del 2 al 8, indica el numero de opcion elegida. Si un item no ha sido seleccionado, dicho item se cargara con el valor 0. Por ejemplo: Menu$(1) = "Title" Menu$(1,1) = "Opcion 1" Menu$(1,2) = "Opcion 2" Menu$(1,2,1) = "Opcion 2.1" Menu On Do If Choice then print choice(1), choice(2), choice(3) Loop Si deseas aumentar los menus con este sistema, tu programa ne cesitara una gran cantidad de instrucciones IF...THEN para aten- der a cada una de las posibilidades. Esto causara un pequeño pero significativo retraso en tu programa mientras que el menu esta siendo leido. Ademas, esto haria muy dificultoso la correccion posterior de tu programa. Por suerte, AMOS Basic te facilita un metodo comodo de tratamiento de grandes menus: ON MENU PROC (seleccion automatica de menus) ON MENU PROC proc1 ¡,proc2,....¿ A cada titulo de tu menu le asignaremos su propio numero de proce dimiento que se ejecutara automaticamente cuando una opcion sea seleccionada por el usuario. La accion de este comando es pareci da al programa siguiente: If choice If choice(1)=1 Proc 1 Endif If choice(1)=2 Proc 2 Endif : : : : Endif 190 Existe una importante diferencia entre el comando ON MENU y las instrucciones anteriores. Asi, ON MENU se ejecuta 50 veces por segundo mediante interrupciones y sin afectar el funcionamien to general de tu programa. Esto significa que tu programa puede estar dedicandose a otras tareas totalmente distintas mientras los menus estan siendo comprobados por este sistema. Siempre que el usuario seleccione un item, el procedimiento oportuno se ejecutara inmediatamente sin necesidad de otra orden por parte del programa principal. Tu procedimiento puede utilizar el comando CHOICE para encontrar que opcion ha sido elegida y res ponder con la consiguiente actuacion. Despues de que el procedimiento haya concluido, tu programa re gresara a la siguiente instruccion tras la llamada al comando ON MENU. He aqui un ejemplo: Menu$(1)="Action" : Menu$(1,1)="Count" : Menu$(1,2)="Quit" Menu On : Rem activa menu On Menu Proc Action On Menu On: Rem activa comando On MENU Do X$=INKEY$ : If X$ <> "" then print X$;: Inc W Loop Procedure ACTION Shared W If Choice(2)=1 Locate 0,0 : Print "Has tecleado ";W;" letras" :W=0 On menu on: Rem inicializa el menu Endif If choice(2)=2 then Edit End proc Existe un par de cuestiones importantes en el ejemplo anterior Primeramente, observa como la secuencia On Menu se activa usando el comando On Menu On. Este debe ser llamado despues de que el proceso de manipulacion de menus haya terminado, ya que necesita reiniciar el sistema de menus. Tambien observa el uso de Inkey$ mejor que Input. El comando INPUT dentendra la comprobacion de los menus mientras estes introduciendo la linea. Todos los demas comandos pueden usarse sin problemas, incluidos Wait, Wait VBL y Wait Key. Para mas detalles mira el ejemplo 16.4. ON MENU GOSUB (seleccion automatica de menus) ON MENU GOSUB label1 ¡, label2,...¿ Accede a una lista de subrutinas dependiendo de la opcion que ha- ya sido seleccionada por el usuario. Una vez que hayas llamado a este comando y creado las subrutinas, los menus se comprobaran de forma automatica 50 veces por segundo. Recuerda que cada titulo de la linea de menu se manipula con su propia subrutina. Esto se diferencia del equivalente del Amiga Basic que controla todo el menu con una sola rutina. 191 Despues de usar este comando deberas activar el sistema de me- nus con el comando ON MENU. Los menus seran reinicializados de este modo antes de regresar al programa principal con RETURN. Tam bien ten presente que la etiqueta NO DEBE ser reemplazada por una expresion, ya que la etiqueta solo sera evaluada una vez el pro- grama este ejecutandose. ON MENU GOTO (seleccion automatica de menus) ON MENU GOTO label1 ¡,label 2,...¿ Este comando ha sido superado por los mas potentes ON MENU PROC y ON MENU GOSUB. Se incluye para permitir una compatibilidad con aquellos programas escritos con STOS Basic. Siempre que un menu sea seleccionado, el programa saltara a la etiqueta apropiada. ON MENU ON/OFF (activa/desactiva la seleccion automatica) ON MENU ON Activa el sistema automatico de menus creado por los comandos ON MENU PROC/GOSUB/GOTO. Despues de acceder a una subrutina de esta forma, el sistema se desactiva. Asi que es vital reactivarlo con un nuevo ON MENU ON antes de volver al programa principal. ON MENU OFF Temporalmente congela el sistema automatico de menus. Es util cuando tu programa esta ejecutando un procedimiento que necesita realizarse sin interrupciones --como los procesos de carga y gra- bacion de datos al disco--. El sistema podra volver a reactivarse mediante ON MENU ON. ON MENU DEL (borra etiquetas usadas por ON MENU) ON MENU DEL Este comando borra la lista interna de etiquetas o procedimientos creados por el comando ON MENU. Ahora podras redirigir tus menus hacia otra parte del programa realizando una nueva llamada al co- mando ON MENU. ATENCION: solo debes usar este comando despues de que hayas desac tivado los menus con el comando ON MENU OFF. 2- Utilizacion del teclado Pese al indudable atractivo de los menus, algunos usuarios aun siguen prefiriendo elegir entre las opciones de un programa direc tamente desde el teclado. Pese a que los menus son ciertamente faciles para los principiantes, una vez que te hayas familiariza do con un programa, es mucho mas rapido elegir las opciones desde el teclado.