Copyright: MswLogo (traducido por Rosario Ruiz)


Welcome
MSWLogo

Derechos de propiedad literaria (C) 1989 Los Regentes de la Universidad de California.  Puede copiar y distribuir este Software con fines educativos,  de investigación, y con fines comerciales, con tal de que la declaración de estos derechos de propiedad literaria se incluya en total en las copias.

 Derechos de propiedad literaria (C) 19931997 George Mills.   Puede copiar y distribuir este Software con fines educativos,  de investigación, y con fines comerciales, con tal de que la declaración de estos derechos de propiedad literaria se incluya en total en las copias.

Traducción: Rosario Ruiz

INTRODUCCIÓN

OPCIONES DE LA LÍNEA DE COMANDOS

EDITOR

MODO DIRECTO

MENÚ

ENTRAR Y SALIR DE LOGO

TOKENIZACIÓN

ESTRUCTURAS DE DATOS

COMUNICACIONES

ARITMÉTICA

OPERACIONES LÓGICAS

GRÁFICOS

MANEJO DE LA MEMORIA

ESTRUCTURAS DE CONTROL

MACROS

PROCESO DE ERRORES

ÓRDENES DE AYUDA

DIRECTORIOS

FUNCIONES DE WINDOWS

FUNCIONES DE BITMAP

MULTIMEDIA/MIDI/SONIDO

GESTIÓN DE REDES


 INTRODUCCIÓN

¿Por qué  LOGO?

¿Cómo empezar?


Por qué LOGO
¿Por qué Logo?

Esta introducción  no lo  explica todo sobre LOGO, pero es un comienzo.  LOGO es un lenguaje de  programación, puro y simple.  Hay dos modelos de lenguaje, compilado e interpretado.

¿Qué es un lenguaje compilado?

 En un lenguaje compilado se escribe el programa que llegará a un compilador.  El compilador lee todo el código y lo convierte en código ejecutable que entiende la computadora.

 ¿Qué es un lenguaje interpretado?

 Un lenguaje interpretado no compila, en cambio, el intérprete lee y procesa cada línea.  Este proceso  es lento, pero tiene la ventaja de que no requiere una nueva compilación en cada cambio.  Este sistema es ideal en un ambiente del aprendizaje.

 ¿Qué tipo de lenguaje es  LOGO?

 Cierto, es un lenguaje interpretado; por lo menos este LOGO; sin embargo:

 LOGO  también tiene otro rasgo único que no ofrecen otros lenguajes. Es el conocido como "Gráficos de la Tortuga."

 ¿Qué son los gráficos  de la tortuga?

Los gráficos de la tortuga son un juego de primitivas, simple y poderoso, para manipular una tortuga.

 ¿Por qué una tortuga?

 La primera versión de LOGO usó un robot electrónico que se parecía a una tortuga.  En el caso de una pantalla de vídeo (como la de LOGO) es  simplemente un cursor (o indicador) de donde está la tortuga.

¿Qué hace la tortuga?

 Dibuja, líneas principalmente, en la pantalla.

 Los lenguajes tradicionales no incorporan  gráficos de la tortuga.  Estos gráficos se generan de forma inmediata, lo que hace fácil y divertido aprender programación.  El propósito de LOGO es enseñar  a jóvenes y mayores cómo programar.  Se diseñó después de un lenguaje muy popular  y  potente llamado LISP.  Es tan poderoso como cualquier otro lenguaje de  programación.


Cómo empezar
¿Cómo empezar?

Los que nunca han programado podrán comenzar a dar órdenes  LOGO a la tortuga.  Los Gráficos de la tortuga descubrirán al usuario aspectos de geometría que no conocían. Asombra cómo pronto se puede introducir en el concepto de programación una vez que se aprende a manejar  la tortuga.  Algunos ejemplos:

 Dibujar  un cuadrado usando la tortuga

 AVANZA 100

 GIRADERECHA  90

 AVANZA 100

 GIRADERECHA  90

 AVANZA 100

 GIRADERECHA  90

 AVANZA 100

 GIRADERECHA  90

 Es fácil,  pero tiene demasiado texto, probemos  de nuevo.

 REPITE 4[ AV 100 GD 90]

 ¿Es lo mismo? Sí, es el mismo cuadrado.  Hicimos dos cosas. Nos dimos cuenta de que en nuestro primer ejemplo hay demasiado código redundante, ¿para qué repetir la misma sucesión 4 veces?.  También usamos abreviaturas de las mismas órdenes.  Pero podemos mejorarlo todavía.  ¿No sería más útil dar sólo la orden cuadrado cuando queremos un cuadrado?

 EDITA "cuadrado

 < Se entra en el Editor>

 PARA CUADRADO

 REPITE 4[ AV 100 GD 90]

 FIN

 < Guardar y salir del Editor>

 CUADRADO

 CUADRADO

 ¿Qué son PARA y  FIN?  Sirven para definir un procedimiento (un programa pequeño) para el cuadrado.  PARA es como "hacer algo".  FIN termina PARA.  Una vez que cuadrado está "definido" entonces lo llamamos dos veces.  Eso es todo lo que se necesita para hacer un cuadrado… pero sólo un cuadrado del mismo tipo.  Sólo dibuja cuadrados de 100 por 100.  ¿No sería mejor dibujar un cuadrado de cualquier tamaño?  Pues es  fácil.

 EDITA "cuadrado

 PARA CUADRADO : longitud

 REPITE 4[ AV: longitud GD 90]

 FIN

<Guardar y salir del Editor>

 CUADRADO 100

 CUADRADO 200

Lo que hacemos es reemplazar 100 por una variable llamada: longitud.  Ahora cuando llamemos cuadrado, debemos  especificar su longitud,  100 o  200.  Nota  ":"  delante de la palabra longitud indica a Logo que es una variable.  De cualquier modo, podemos conseguir otras mejoras; pues, ¿no sería mejor si pudiéramos dibujar además de un cuadrado otras figuras  como, triángulo, pentágono, etc.?

 PARA TRIANGULO :longitud

 REPITE 3[ AV  :longitud GD 120]

FIN

 PARA PENTAGONO :longitud

 REPITE 5[ AV :longitud GD 72]

 FIN

 TRIANGULO 100

 CUADRADO 100

 PENTAGONO 100

 ¿Demasiada texto? (Los programadores odian teclear). ¿Por qué?  Porque cuando hay errores que rectificar y cuando se necesita hacer un cambio habría que hacerlo en muchos lugares.  No siempre lo más corto es lo mejor, pero generalmente, facilita los cambios. Probemos de nuevo.

 PARA POLIGONO :longitud :lados

 REPITE :lados[ AV: longitud GD 360.0/ :lados]

 FIN

 POLIGONO  100 3

 POLIGONO  100 4

 POLIGONO 100 5

 ¿Qué pasó con TRIANGULO, CUADRADO y PENTAGONO?   POLIGONO ahora sirve para dibujar cualquier  polígono  y con una sola línea de codificación!  Esto es un PROGRAMA.

 Ahora que tenemos un programa, es una buena idea guardarlo en el disco.  El Editor ha hecho hasta ahora el trabajo dentro de la memoria de Logo y  no en el disco.  Guardar el trabajo es fácil.

 GUARDA "FIGURAS.LGO

 ADIOS

 Si alguna vez quiere usar de nuevo estas definiciones, tendrá que cargarlas.  ¿Cómo cargar el trabajo del disco?

 CARGA "FIGURAS.LGO

 ¿Dónde puede aprender  más?

Generalmente, hay un ejemplo para cada primitiva  en este fichero de ayuda.

Comprobar los ejemplos (vea Menú de la Ayuda).

Con MSWLogo en modo directo y la guía didáctica  del Vídeo (equipo separado).

Jim Muller's Great Logo Adventure Book,  principalmente basado en MSWLogo.

Brian Harvey MIT  Press Books,  para programación más avanzada.

 Que se divierta.


OPCIONES DE LA LÍNEA DE ÓRDENES
OPCIONES DE LA LINEA DE ÓRDENES

Las opciones de la línea de órdenes pueden fijarse como propiedades del funcionamiento de MSWLogo.  Sólo hay que agregar estos interruptores después de teclear LOGO.EXE.

-w

-h

-p

-e

-l


-w
-width

-w width

Pone la anchura del espacio de trabajo como anchura virtual de dibujo.  Mientras mayor sea el espacio más memoria se requiere.  Por omisión se establece en  1000.

Ejemplo:

LOGO.EXE- w 2000 - h 2000


-h

-h height

Fija el tamaño del  espacio de dibujo virtual para la altura.  Mientras mayor sea más memoria requiere.  Por omisión es 1000.

Ejemplo:

LOGO.EXE - w 2000 - h 2000


-p

-p

Habilita el modo PERSPECTIVA como modo estándar.

Ejemplo:

LOGO.EXE- p


-e

- e

Habilita el modo "Experto".

En el  modo "Experto"  ocurre lo siguiente:

POS y POS3D no "redondean" los datos  y se verían posiciones tal como[ 0- 1.0e-12]. Es  debido a errores "normales" de punto flotante.  El Redondeo de POS sirve  para un buen funcionamiento de  POS.  Pero en algunas aplicaciones este redondeo puede introducir error si guarda y restaura la posición.  En otras  palabras que PONPOS POS no redondeará en  el modo "Experto".

MSWLogo permite Múltiples Sesiones de Editor. Estas Múltiples sesiones pueden conducir a situaciones inesperadas  si no entiende cómo MSWLogo maneja el espacio de trabajo.  Si se pierden procedimientos o tienen un inesperado cambio entonces no debe usar el modo experto.

En el modo experto, MSWLogo guardará directamente el espacio de trabajo, lo que puede llevar a resultados inesperados si no entiende cómo MSWLogo trabaja.  Si se pierden procedimientos o se producen cambios inesperados entonces no debe usar el modo experto.

Ejemplo:

LOGO.EXE- e


-l

-l file1 file2

MSWLogo puede CARGAR uno o más FICHEROS desde la línea de comandos cuando se carga MSWLogo.  Se cargarán estos archivos antes de que el intérprete comience la lectura de las órdenes.  Si carga un archivo que procesa un programa  que incluye la orden  ADIOS,  MSWLogo ejecutará ese programa y saldrá del entorno.  Puede escribir por eso programas en Logo y ejecutarlos desde sus propios iconos.  Nota, el  interruptor " -l"  debe seguir a los demás interruptores.

Ejemplo:

LOGO.EXE - l myprog.lgo


EDITOR

Cuando termina el Editor, Logo carga  las definiciones y modifica el espacio de trabajo.  Soporta múltiples sesiones de Editor.  Pero hay que llevar cuidado de no tener procedimientos con  la misma definición.  Cuando el último Editor termina,  guarda las definiciones.  Tenga en cuenta que si anula procedimientos, listas de propiedades  o nombres,  se borrarán (ver Borrar) del entorno y cuando se ejecute Guardar  no se guardará lo borrado.

Menú Editor

Edición de errores

Editando con el  Portapapeles

Ayuda Sensible al Contexto


Menú Editor

Fichero

Editar

Configurar

Probar

Ayuda


Edición de errores

Si se produce un error cuando Logo "carga" su Editor, le ofrece volver a entrar en el Editor.  Esta situación normalmente ocurre cuando se espera una continuación a "~" o se espera "]." Cuando el Editor recarga, el cursor se sitúa  tras la última definición correcta.


Editando con el Portapapeles

El Editor de Logo soporta el Portapapeles.  El Portapapeles es una aplicación donde Windows guarda los datos para las operaciones de cortar y pegar.  Esto significa que si cortó texto de una aplicación, tal como Notepad, lo puede pegar en el Editor de Logo (a la inversa,  también). Igualmente  los Help de Windows soportan el Portapapeles.  Esto significa que puede copiar ejemplos de este documento directamente al Editor (vea  Ayuda).

La Caja de Entrada también soportan el Portapapeles.  Sólo soporta una línea de texto entre la Caja de Entrada y el Portapapeles.  Observe  que la Caja de Entrada no tiene un Menú Editar.  Debe usar las teclas "Short-Cut" para las acciones (CTRL-X Cortar, CTRL-C Copiar, CTRL-V Pegar).

La Caja de Lista también soporta el Portapapeles.  Esto significa que puede copiar el código en el Portapapeles y pegarlo en el Editor; así como copiar el texto generado por el programa y pegarlo en otra aplicación.


Ayuda Sensible al Contexto

El Editor, la Caja de Entrada y la Caja de Lista disponen de Ayuda Sensible al Contexto.  Si selecciona con el teclado, por ejemplo, AVANZA, y pulsa el botón derecho del ratón o la tecla F1, o simplemente hace un  doble clic,  Logo buscará  AVANZA.


Menú Editor Fichero

Imprimir

Salir


Imprimir Editor
Imprimir

Imprime el contenido del Editor.


Salir del editor
Salir

Sale del Editor y pregunta si desea guardar el trabajo en la memoria de trabajo.  Cuando termina el Editor, Logo carga las definiciones editadas y modifica el espacio de trabajo. Soporta  Múltiples sesiones de Editor, pero  cuide de no tener más de un procedimiento con la misma definición.  Cuando termina el último Editor guarda la última definición.  También dése cuenta de que si,  cuando estaba en el Editor,  anula procedimientos, propiedades, listas o nombres  se borrarán (vea BORRAR ) del disco cuando termine y guarde el trabajo.  Vea también Edición de errores.


Menú Editar

Deshacer

Cortar

Copiar

Pegar

Borrar

Borrar todo


Editor: deshacer
Deshacer

Borra la última operación del Editor.


Editor: Cortar
Cortar

Corta y  guarda el texto seleccionado en el Portapapeles. Vea también Editando con el Portapapeles.


Editor: Copiar
Copiar

Copia el texto seleccionado en el Portapapeles. Vea también Editando con el Portapapeles.


Editor: Pegar
Pegar

Pega el texto del Portapapeles en la posición actual del cursor. Si hay texto seleccionado será reemplazado. Vea también Editando con el Portapapeles.


Editor: Borrar
Borrar

Borra el texto seleccionado.


Borrar todo

Borra todo el texto.


Editor: Configurar
Configurar

Tipo de letra


Tipo de letra

Puede cambiar las fuentes en esta opción del Editor, seleccionando la fuente deseada.  La nueva fuente afecta al Editor entero,  no solo al texto seleccionado.  La fuente escogida quedará seleccionada igualmente después de reiniciar MSWLogo.


Probar
Probar!

Puede probar su código seleccionando una parte del mismo y pulsando en Probar! en el Menú del Editor.  Cada línea  será ejecutada.  Tenga esto presente  si  selecciona código con variables que se deben definir en la selección o que ya están definidas en la memoria de trabajo.  Usar esta opción es como si tecleara en la ventana de trabajo.


Menú Ayuda Editor

Índice

Editor

Búsqueda por tema


Índice Ayuda Editor
Índice

Ayuda de MSWLogo.  Vea también  Ayuda Sensible al Contexto.


Ayuda Editor
Ayuda

Ayuda del Editor. Vea también Ayuda Sensible al Contexto.


Búsqueda por temas

Busca el tema seleccionado con el ratón.  Vea también  Ayuda Sensible al Contexto.


MODO DIRECTO

El modo directo es donde desarrollará su sesión de LOGO,  en la ventana Trabajo.  Es el medio donde instruye a  LOGO sobre lo que quiere hacer.  El control más importante  es la  CAJA DE ENTRADA.  Se localiza en la parte izquierda.  Para más información sobre los diferentes controles (cajas y botones):

Caja de Entrada

Caja de lista

Botón ejecutar

Botón  de estado

Botón trazar

Botón parada

Botón reiniciar

Botón paso

Botón pausa


Caja de Entrada

La Caja de Entrada  está junto a la  Caja de Lista  y el Botón ejecutar.  En ella puede modificar también el texto.  Si su texto rebasa el espacio, se deslizarán las líneas automáticamente (scroll).  Una vez que ha escrito su instrucción en la Caja de Entrada, podrá ejecutarla.  Para ello pulse ENTER o el Botón ejecutar.  Usando las teclas de flecha Arriba/ Abajo saltará automáticamente a la Caja de Lista.  Dispone también de  Ayuda Sensible al Contexto y Editando con el Portapapeles.


Caja de Lista

En la  Caja de Listas aparece todo lo que escribe en la Caja de Entrada. Puede ejecutar otra vez una línea de instrucciones  mediante doble clic en la misma; también puede utilizar las teclas de flecha para situarse en la línea y luego pulsar ENTER.  Si la línea permanece oculta, use la barra de deslizamiento para hacer scroll.  Una vez que haya pulsado con el ratón en una línea, se copiará automáticamente en la  Caja de Entrada.  La Caja de Lista dispone también de la Ayuda Sensible al Contexto y Editando con el Portapapeles.


Botón Ejecutar

El  botón EJECUTAR  ejecuta las órdenes de la Caja de Entrada , igual que si se pulsara la tecla ENTER.


Botón de Estado

Este botón abre una ventana con el contenido de lo qué LOGO está haciendo.  Pulse el botón de nuevo para cerrar la ventana. Vea también  Estado y No Estado.


Botón Trazar

Escribe en la ventana de texto las instrucciones que se están ejecutando para facilitar la depuración de errores.  Pulse el botón de nuevo para desactivar TRAZAR.  Puede volver a  TRAZAR  mientras Logo está ejecutando.  TRAZAR  hace su trabajo independientemente de que la primitiva PASO  ejecute el programa instrucción por instrucción.  Vea también Traza y Notraza .


Botón Alto

Detiene inmediatamente el proceso mientras  espera una nueva orden. Vea también la primitiva PARADA.


Botón Reiniciar

El botón Reiniciar es semejante a la orden BORRAPANTALLA .


Botón Paso

Ejecuta el programa paso a paso, de instrucción en instrucción.  Pulse el botón de nuevo para desactivarlo. Trabaja independientemente de que se ejecute la primitiva PASO.  Vea también Paso y Nopaso


Botón Pausa

Detiene LOGO para que pueda examinar variables, hacer cambios u otra tarea.  Una vez pulsado el botón PAUSA,  Logo mostrará en qué procedimiento se produjo la pausa. Para continuar hay que escribir la orden CONTINUA  en una ventana de diálogo y pulsar OK.  Puede utilizar también la primitiva PAUSA dentro del código para que actúe como un "Punto del Ruptura."


MENÚ

El MENÚ gestiona diferentes tareas  en LOGO como, cargar un programa LOGO, cargar un BITMAP, instalar una impresora o quizás  leer este fichero de ayuda.  Vea el  Menú específico para más información.

Fichero

Bitmap

Configurar

Zoom

Ayuda


Menú Fichero
Fichero

El Menú Fichero incluye órdenes para trabajar con ficheros con procedimientos Logo.  Hay que tener en cuenta que cualquier selección en este Menú que lleve un directorio en su ventana de diálogo hará que ese directorio sea el directorio de trabajo.  Para más información seleccione en el Menú la opción específica.

Nuevo

Cargar

Guardar

Guardar como

Editar

Borrar

Salir


Fichero: Nuevo
Nuevo

Borra todos los procedimientos actualmente cargados en memoria.  Es como comenzar  con  una "Nueva" sesión.


Fichero: Cargar
Cargar

Carga del disco un fichero con procedimientos para que se pueda ejecutar o modificar un programa. Vea también la primitiva Cargar.


Fichero: Guardar
Guardar

Guarda en el disco todos los procedimientos que están en la memoria.  Vea también  la primitiva Guardar


Fichero: Guardar como
Guardar como

Es lo mismo que Guardar, pero se utiliza para dar un nuevo nombre al fichero, de forma que no se borre el anterior.


Fichero: Editar
Editar

Para modificar procedimientos cargados en memoria.  Puede editar todos los procedimientos (cargados en memoria) y  también uno nuevo. Vea también la primitiva  EDITA.


Fichero: Borrar
Borrar

Borra los procedimientos cargados en memoria. Vea también la primitiva Borrar.


Fichero: Salir
Salir

Termina la sesión con MSWLogo. Vea también la primitiva  ADIOS.


Menu Bitmap
Bitmap

El Menú Bitmap incluye órdenes para trabajar con ficheros de mapas de bits (bitmap).  Para más información vea la opción específica en el Menú Bitmap.

Nuevo

Cargar

Guardar

Guardar como

Área activa

Configurar impresora

Imprimir


Bitmap: Nuevo
Nuevo

Borra el trabajo hecho en pantalla y crea un nuevo ambiente.


Bitmap: Cargar
 Cargar

Carga una imagen guardada en el disco.  El formato del fichero guardado se conoce como *.BMP (Microsoft Windows Bitmap). Puede intercambiar estos archivos con otras aplicaciones, como Paint.  Estos archivos pueden ser de gran tamaño, de lectura o escritura. Vea  también la primitiva CARGADIB.

Vea también la sección USANDO COLOR.


Bitmap: Guardar
 Guardar

Guarda una imagen del bitmap en el disco del ordenador que más tarde se podrá recuperar.  También puede guardar un bitmap reformado.  RECUERDE que si generó su imagen con LOGO,  no necesita guardarlo como imagen a menos que quiera usar la imagen en otra aplicación, como Paint.

Vea también GUARDADIB

El formato del fichero guardado es del tipo Microsoft Windows Bitmap (*.BMP). Puede intercambiar estos ficheros con otras aplicaciones, como  Paint.  Estos archivos pueden ser de gran tamaño y puede tardar un tiempo mientras se guardan o cargan.

Vea también Área activa.


Bitmap: Salvar como
Salvar como

Similar a GUARDAR, pero con la posibilidad de dar un nombre nuevo al fichero.


Bitmap: Área Activa
Área activa

Selecciona el área de impresión y grabación de bitmap, de forma que comprenda la imagen completa o una parte de la misma. Si selecciona una parte de la imagen, lógicamente ahorrará memoria y tiempo. Puede pulsar el Botón reiniciar  para volver a las magnitudes de la imagen completa.  MSWLogo recordará la configuración.

Puede establecer también  los puntos por pulgada.  La presunción por omisión es 125 Puntos por pulgada.  La memoria de trabajo por defecto de MSWLogo es de 1000x1000 puntos por pulgada, equivalente aproximadamente a 8x8 pulgadas (1000/ 125x1000/ 125). Puede aumentar este número para tener una resolución más alta pero su imagen sería más pequeña. Puede compensarlo aumentando su espacio de trabajo (y tamaño del dibujo).

Puede también  fijar el área activa con la primitiva PONAREAACTIVA y obtenerla con AREAACTIVA.


Bitmap: Configurar impresora
Configurar impresora

Configura la impresora antes de imprimir.


Bitmap: Imprimir
Imprimir

Imprime su trabajo en la impresora.


Menú Configurar
Configurar

Establece algunas características del dibujo en LOGO.

Tamaño del lápiz

Tipo de letra rotulador

Tipo de letra órdenes

Color del lápiz

Color del relleno

Color del fondo


Tamaño del lápiz

Esta orden selecciona el grosor del lápiz con que dibujará la tortuga. El mismo resultado se obtiene con la primitiva PONGROSOR ; para saber que grosor está en uso se utilizará la primitiva GROSOR.


Tipo de letra rotulador

Con esta opción selecciona el tipo de letra que se utilizará con la primitiva  ROTULA . Puede seleccionar también el tipo de letra con la primitiva  PONTAMAÑOTIPO  y obtener el tipo actual con TIPO.


Tipo de letra órdenes

Con esta opción selecciona el tipo de letra que permanecerá fijo tras reiniciar MSWLogo.


Color del lápiz

Con esta opción selecciona el color del lápiz.  Puede seleccionar el color del lápiz también con la primitiva PONCOLORLAPIZ y obtener el color actual con  COLORLAPIZ.


Color de relleno

Con esta opción selecciona el color con que la tortuga rellenará un área cerrada mediante la primitiva RELLENA.  Puede seleccionar también el color de relleno con la primitiva PONCOLORRELLENO y obtenerlo con  COLORRELLENO.


Color de fondo

Con esta opción selecciona el color de fondo de la pantalla.  También puede seleccionar el color con la primitiva PONCOLORPAPEL y obtenerlo con  COLORPAPEL.


Zoom

Permite seleccionar el modo ZOOM.

Acercar

Alejar

Normal


Acercar

Permite seleccionar el modo ZOOM a doble tamaño.  El mismo efecto se consigue con la primitiva  PONLUPA.


Alejar

Permite seleccionar el modo ZOOM a la mitad de tamaño.  El mismo efecto se consigue con la primitiva PONLUPA.


Normal

Restablece el modo ZOOM al tamaño 1.0. El mismo efecto se consigue con la primitiva PONLUPA.


Menú Ayuda
Ayuda

Ayuda para aprender más sobre LOGO.  Para más información, seleccione la opción deseada.  Vea también la primitiva AYUDA .

Índice

MCI

Demo

Tutorial

Ejemplos

Notas de la versión

Acerca de


Ayuda: Índice
Índice

Muestra  la Ayuda de Microsoft Windows para LOGO.


Ayuda: MCI
MCI

Muestra ayuda sobre los ficheros MCI.  Explica la sintaxis de los argumentos de la primitiva MCI.


Demo

Ejecuta el programa DEMO contenido en la librería.


Tutorial

Le lleva al tema “Cómo empezar” de este fichero de ayuda.


Ejemplos

Presenta los ejemplos en el Bloc de Notas.


Notas de la versión

Muestra en el Bloc de Notas un fichero que contiene notas sobre la versión.


Acerca de

Muestra información sobre la versión de MSWLogo.


Entrar y salir de Logo
ENTRAR Y SALIR DE  MSWLOGO

Para ejecutar MSWLogo, pulse el icono de  MSWLogo.  Para salir de Logo, escriba la primitiva ADIOS o seleccione Fichero Salir.

Si llama a un procedimiento no definido, Logo primero busca un fichero del directorio actual con el nombre proc.lgo, siendo "proc" el nombre del procedimiento en minúsculas.  Si el fichero existe, Logo lo carga.  Si no lo encuentra, Logo busca en el directorio de la librería un fichero llamado “proc”  y, si existe, lo carga.  Si no encuentra un fichero que contenga el procedimiento, entonces Logo envía un mensaje de error.  Algunos procedimientos  están incluidos en la librería; así;  si usa una librería diferente podrá incluir algunos  procedimientos o toda la librería estándar.


TOKENIZACIÓN

Las palabras son los nombres de los procedimientos, de las variables, y de las propiedades de las  listas.  Son palabras especiales  FIN, VERDADERO, y FALSO.

Los signos que separan las palabras son delimitadores. Una palabra no puede contener delimitadores.

Dentro de corchetes,  las palabras están delimitadas sólo por espacios y corchetes.  Así,  [2+3] es una lista que contiene una palabra.

Después de unas comillas, una palabra está delimitada por un espacio, corchetes, o paréntesis.

Una palabra  que no está después de comillas o entre corchetes  se delimita con un espacio,  corchetes,  paréntesis, o un operador +-*/=<>.  Observe que las comillas y comas no son delimitadores.

Una interrogación seguida por un número (p.e., ?3), cuando se ejecuta (p.e., cuando se espera un procedimiento ), se trata:

( ? 3 )

como si fuera el número una entrada del procedimiento ?.   Este tratamiento especial  no se aplica a palabras leídas como datos, a palabras en las que al signo de interrogación no le sigue un carácter numérico, o si el signo de interrogación es “¿”.

Una línea (línea de instrucciones o una línea  leída con LEELISTA o LEEPALABRA) puede continuar en la línea siguiente si su último  carácter es (~).  LEEPALABRA guarda el carácter y  la nueva línea; LEELISTA no.

Un punto y como inicia un  comentario en una  línea de instrucciones.  Logo ignora todos los caracteres que siguen al punto y coma hasta el final de la línea.  Un carácter (~) como último carácter de la línea indica una continuación de la línea, pero no del comentario.

Ejemplo:

escribe "abc;comentario ~

def

abcdef

El  punto y coma no tiene un significado especial en las líneas de datos leídos con LEEPALABRA o LEELISTA, pero la línea puede restablecerse usando EJECUTAANALIZA y entonces se reconocerá el comentario.

Si se quiere incluir un delimitador (punto y coma o (~)) en una palabra, debe estar precedido por una  (\).  Si el último carácter de una línea es una barra, entonces la palabra que sigue a la barra pertenece a la línea siguiente.  Para incluir una barra en una palabra, use \\.   Esto se aplica a las líneas de datos leídas con data  LEEPALABRA o LEELISTA como a una línea de instrucciones.

MSWLogo no presenta "el carácter prompt " ni <CR>.   MSWLogo ha añadido  "\n", carácter de control que se traduce como <CR>.

Ejemplo:

escribe "Hola\ncómo\está\nusted

Hola

cómo

cómo

está

usted

Funciona de esta manera tanto en un  procedimiento como en el modo directo.

Un carácter con \ y el mismo sin el signo son IGUALES? ; es decir el resultado es VERDADERO, pero puede distinguirse con el predicado TIENEBARRA? .

Una notación alternativa para delimitar caracteres en palabras es incluir el grupo de caracteres entre barras verticales  (|).  Todos los caracteres entre barras verticales son tratados como letras.  En datos leídos con LEEPALABRA las barras verticales se guardan en la palabra resultante.  En datos leídos con LEELISTA (o en el resultado de un ANALIZA o EJECUTAANALIZA de una palabra) las barras verticales no aparecen explícitamente; todos los caracteres delimitadores (espacios, corchetes, paréntesis, y operadores infijos) aparecen como si se hubieran entrado con \.  Dentro de las barras verticales se puede usar  \.

Los caracteres entrados entre barras verticales son siempre especiales, aun cuando la palabra o lista que los contiene sea analizada con  ANALIZA o EJECUTAANALIZA.  Igualmente sucede con un carácter escrito después de una barra invertida, excepto cuando una palabra que contiene caracteres entre barras invertidas es ejecutada y analizada, los caracteres entre barras inversas pierden su cualidad, como si se hubieran escrito normalmente.  Esta distinción es importante sólo si se construye una expresión Logo que se ejecutará después, y se quiere usar paréntesis.  Por ejemplo,

ESCRIBE EJECUTA (FRASE "\( 2 "+ 3 "\))

5, Pero…

EJECUTA (FRASE "HAZ ""|(| 2)

ESCRIBE  :|(|

2

Crea una variable cuyo nombre es |(|.  (Los ejemplos fallarían si se intercambiaran  las barras verticales y las invertidas.)


 ESTRUCTURAS DE DATOS

CONSTRUCTORES

SELECTORES

MUTADORES

PREDICADOS (Datos)

CONSULTAS


CONSTRUCTORES

PALABRA

LISTA

FRASE

PONPRIMERO

PONULTIMO

MATRIZ

CREAMATRIZ

LISTAAAMATRIZ

MATRIZALISTA

COMBINA

INVERSO

GENSYM


PALABRA

palabra PALABRA palabra1 palabra2

palabra (PALABRA palabra1 palabra2 palabra3 ...)

Devuelve una palabra formada por la unión de las entradas.

palabra:(PALABRA) Concatenación de entradas.

palabra1:(PALABRA) Primera palabra para unir.

palabra2:(PALABRA) Segunda palabra para unir.

Ejemplo:

muestra palabra "o "k

ok

muestra (palabra "a "o "k "to)

aokto


LISTA

lista LISTA cosa1 cosa2

lista (LISTA cosa1 cosa2 cosa3 ...)

Devuelve  una lista cuyos miembros son las entradas, que pueden ser cualquier objeto de Logo (palabra, lista, o matriz).

lista:(LISTA) Lista formada con entradas.

cosa1:(COSA) El primer miembro de la lista.

cosa2:(COSA) El segundo  miembro de la lista.

Ejemplo:

muestra (lista "Esto "es "una "Lista)

[Esto es una Lista]

muestra lista [1 2 3] [a b c]

[[1 2 3] [a b c]]

Ejemplo2:

haz "rojo 100

haz "verde 100

haz "azul 100

muestra (lista :rojo :verde :azul)

[100 100 100]


FRASE

lista FRASE  objeto1 objeto2

lista FR objeto1 objeto2

lista (FRASE objeto1 objeto2 objeto3 ...)

lista (FR objeto1 objeto2 objeto3 ...)

Devuelve  una lista cuyos miembros son sus entradas. Si las entradas son listas o más de dos objetos,  se debe utilizar la segunda forma (entre paréntesis).

lista:(LISTA) Frase formada por entradas.

objeto1:(OBJETO) Objeto que será el primer miembro de la frase resultante.

Objeto2:(OBJETO) Objeto que será el segundo miembro de la frase resultante.

Ejemplo:

muestra (fr "Una "frase "es "simplemente "una "lista "de "palabras)

[Una frase es simplemente una lista de palabras]


PONPRIMERO

nuevalista PONPRIMERO objeto lista

nuevalista PP objeto lista

Toma como argumento un objeto y una lista y devuelve otra lista (nuevalista) igual, pero con un nuevo miembro, el primer argumento, que será el primer miembro de la nueva lista.

nuevalista:(LISTA) Nueva lista formada con los dos argumentos.

objeto:(OBJETO) Objeto que será añadido como primer miembro de la nueva lista.

lista:(LISTA) Lista a partir de la que se formará la nueva.

Ejemplo:

muestra ponprimero 1 [2 3 4]

[1 2 3 4]


PONULTIMO

nuevalista PONULTIMO objeto lista

nuevalista PU objeto lista

Toma como argumento un objeto y una lista y devuelve otra lista (nuevalista) igual, pero con un nuevo miembro, el primer argumento, que será el último miembro de la nueva lista.

nuevalista:(LISTA) Nueva lista formada con los dos argumentos.

objeto:(OBJETO) Objeto que será añadido al final de la nueva  lista.

lista:(LISTA) Lista existente con la que se formará la nueva.

Ejemplo:

muestra ponultimo 5 [1 2 3 4]

[1 2 3 4 5]


MATRIZ

matriz MATRIZ tamaño

matriz (MATRIZ tamaño origen)

Devuelve  una matriz con tantos elementos  enteros positivos como indique tamaño. Cada elemento es inicialmente una lista vacía.  Los elementos de la matriz pueden seleccionarse con  ELEMENTO y cambiarse con  PONELEMENTO.  El  primer elemento de la matriz es el elemento número 1, a menos que la entrada origen (un número entero) indique que el primer  elemento de la matriz tenga otro  índice (a veces se usa el  0 como origen.)  Las matrices se escriben con  ESCRIBE, y pueden teclearse, dentro de llaves; indicando  un origen con {a b c}@0.

Matriz :(ARRAY) Nueva matriz.

Tamaño :(ENTERO) Tamaño de la nueva matriz.

origen:(ENTERO) Donde comienza el primer índice.

Ejemplo:

haz "mi_matriz (matriz 3 0)

ponelemento 2 :mi_matriz 1

ponelemento 1 :mi_matriz 2

ponelemento 0 :mi_matriz 3

muestra :mi_matriz

{3 2 1}


CREAMATRIZ

matriz CREAMATRIZ tamañolista	(Procedimiento de la librería)

matriz (CREAMATRIZ tamañolista origen)             (Procedimiento de la librería)

Devuelve una matriz  multi-dimensional.  La primera entrada debe ser una lista con uno o más  enteros.  La  segunda entrada, si la hay, debe ser un único entero que se aplica a cada dimensión de la matriz.

matriz:(CREAMATRIZ) Matriz multi-dimensional.

tamañolista:(LISTA) Lista con varias dimensiones (cada una representada por un entero).

origen:(ENTERO) Donde comienza el primer índice.

(Vea MDPONELEMENTO)

Ejemplo:

haz "mi_matriz (creamatriz [2 3] 0)

mdponelemento [0 0] :mi_matriz 1

mdponelemento [0 1] :mi_matriz 2

mdponelemento [0 2] :mi_matriz 3

mdponelemento [1 0] :mi_matriz 4

mdponelemento [1 1] :mi_matriz 5

mdponelemento [1 2] :mi_matriz 6

muestra :mi_matriz

{{1 2 3} {4 5 6}}


LISTAAMATRIZ

matriz LISTAAMATRIZ lista	(Procedimiento de la librería)

matriz (LISTAAMATRIZ lista origen) 	(Procedimiento de la librería)

Convierte una lista en matriz, ya que devuelve una matriz del mismo tamaño que la entrada lista, cuyos elementos son los miembros de la entrada lista.

matriz:(MATRIZ) Lista convertido en matriz.

lista:(LISTA) Lista que será convertida en matriz.

origen:(ENTERO) Donde comienza el índice de la nueva  matriz.

Ejemplo:

muestra listaamatriz [1 2 3]

{1 2 3}


MATRIZALISTA

lista MATRIZALISTA matriz	(Procedimiento de la librería)

Convierte una matriz en lista, ya que devuelve una lista cuyos miembros son los elementos de la matriz de entrada.  El  primer miembro de la lista es el primer elemento de la matriz, independientemente del origen de la matriz.

lista:(LISTA) Recientemente convertida en lista.

matriz:(MATRIZ) Matriz existente  que será convertida en una lista.

Ejemplo:

muestra matrizalista {1 2 3}

[1 2 3]

No funciona, ya que no se encuentra una primitiva que requiere el procedimiento. En su lugar, puede incluirse en la librería.

PARA Matrizalista :m

LOCAL "ele

SI NO MATRIZ? :m [ALTO]

HAZ "num CUENTA :m

HAZ "nl []

HAZ "ele PRIMERO :m

MATRIZALISTA1 :m :ele 1

DEVUELVE :nl

FIN

PARA Matrizalista1 :m :ele :vez

SI :vez > :num [ALTO]

HAZ "nl PONULTIMO ELEMENTO :ele :m :nl

Matrizalista1 :m :ele + 1 :vez + 1

FIN


COMBINA

objeto COMBINA objeto1 objeto2	(Procedimiento de la librería)

Si objeto2 es una palabra, devuelve PALABRA objeto1 objeto2.

Si objeto2 es una lista, devuelve  PONPRIMERO objeto1 objeto2.

objeto:(LISTA) Objeto recientemente formado por la combinación de las entradas.

objeto1:(OBJETO) Primer objeto a combinar.

objeto2:(OBJETO) Segundo objeto a combinar.

Ejemplo:

muestra combina "a "b

ab

muestra combina "a [b]

[a b]


INVERSO

nuevalista INVERSO lista	(Procedimiento de la librería)

Toma como entrada una lista  y devuelve otra con los mismos miembros, pero en orden inverso.

nuevalista:(LISTA) Lista recientemente formada.

lista:(LISTA) Lista existente que tendrá un orden inverso.

Ejemplo:

muestra inverso [1 2 3]

[3 2 1]


GENSYM

palabra GENSYM	(Procedimiento de la librería)

Devuelve  una única palabra.  Las palabras tienen la forma G1, G2, etc.

palabra:(PALABRA) Símbolo recientemente formado.

Ejemplo:

haz gensym 1

muestra :g1

1

haz gensym "Hola

muestra :g2

Hola


SELECTORES

PRIMERO

PRIMEROS

ULTIMO

MENOSPRIMERO

MENOSPRIMEROS

MENOSULTIMO

ELEMENTO

MDELEMENTO

SACAALAZAR

QUITA

QUITAREPETIDOS

ENTRECOMILLAS


PRIMERO

primerobjeto PRIMERO objeto

primerobjeto PRI objeto

Si la entrada es una palabra, devuelve el primer carácter de la palabra.

Si la entrada es una lista, devuelve el primer miembro de la lista.

Si la entrada es una matriz, devuelve el origen de la matriz (esto es, el ÍNDICE del primer elemento de la matriz).

primerobjeto:(OBJETO) Primer objeto de entrada.

objeto:(OBJETO) Objeto existente del que se extraerá el primer elemento.

Ejemplo:

escribe primero [1 2 3]

1

escribe primero "Hola

H

escribe primero {4 2 3}

1


PRIMEROS

primeroslista PRIMEROS lista

Devuelve una lista que contiene los primeros elementos ( PRIMERO )de cada una de las listas de entrada.  Se produce un error si algún miembro de la lista de entrada está vacío.

primeroslista:(LISTA) Nueva lista con cada uno de los primeros elementos.

lista:(LISTA) Lista a partir de la cual se hará la extracción.

Ejemplo:

muestra primeros [[1 2 3] [a b c]]

[1 a]

Ejemplo:

para transponer :array

si vacio? primero :array [devuelve []]

devuelve ponprimero primeros :array transponer menosprimeros :array

fin

MUESTRA transponer [[1 2 3] [a b c]

[[1 a] [2 b] [3 c]]


ULTIMO

ultimoobjeto ULTIMO objeto

ultimoobjeto UL objeto

Si la entrada es una palabra,  devuelve el último carácter de la palabra.

Si la entrada es una lista, devuelve el último miembro de la lista.

ultimoobjeto:(OBJETO) El último objeto de una entrada.

objeto:(OBJETO) Objeto existente, a partir del cual se hará la extracción.

Ejemplo:

escribe ultimo [1 2 3]

3

escribe ultimo "Hola

o


MENOSPRIMERO

nuevoobjeto MENOSPRIMERO objeto

nuevoobjeto MP objeto

Si la entrada es una palabra, devuelve  una palabra que contiene todos los caracteres de la palabra, menos el primero.

Si la entrada es una lista, devuelve una lista que contiene todos los miembros de la lista de entrada, menos el primero.

nuevoobjeto:(OBJETO)

objeto:(OBJETO)

Ejemplo:

muestra menosprimero [1 2 3]

[2 3]

muestra menosprimero "Hola

ola


MENOSPRIMEROS

nuevalista MENOSPRIMEROS lista

nuevalista MPS lista

Toma como entrada una lista formada por varias sublistas y la devuelve  con todos los elementos menos los primeros elementos de cada sublista. Vea  MENOSPRIMERO.  Produce un error si algún miembro  de la lista está vacío  o es una matriz.

nuevalista:(LISTA).

lista:(LISTA).

Ejemplo:

muestra menosprimeros [[1 2 3] [a b c]]

[[2 3] [b c]]


MENOSULTIMO

nuevoobjeto MENOSULTIMO objeto

nuevoobjeto MU objeto

Si la entrada es una palabra, devuelve una palabra que contiene todos los caracteres de la entrada, menos el último.

Si la entrada es una lista, devuelve una lista que contiene todos los miembros de la entrada, menos el último.

nuevoobjeto:(OBJETO).

objeto:(OBJETO).

Ejemplo:

muestra menosultimo [1 2 3]

[1 2]

muestra menosultimo "Hola

Hol


ELEMENTO

elemento ELEMENTO índice objeto

Si  el segundo argumento (objeto) es una palabra, devuelve el carácter número índice de la palabra;  si es una lista,  devuelve el miembro número índice de la lista y si  es una matriz, devuelve el elemento número índice de la  matriz.  Un índice comienza en 1 para palabras y listas y para las matrices se especifica el inicio cuando se crean.

elemento:(OBJETO).

índice:(ENTERO).

objeto:(OBJETO).

Ejemplo:

muestra elemento 2 [a b c]

b

muestra elemento 3 "ABC

C


MDELEMENTO

elemento MDELEMENTO índicelista mdmatriz	(Procedimiento de la librería)

Toma una matriz multidimensional como entrada y devuelve el elemento indicado por su  primer argumento.

elemento:(OBJETO) El elemento extraído.

índicelista:(LISTA) Los índices (ENTEROS) que indican el elemento extraído.

mdmatriz:(MDMATRIZ) Matriz multidimensional.

Ejemplo:

muestra mdelemento [2 2] {{0 1} {2 3}}

3


SACAALAZAR

elemento SACAALAZAR objeto	(Procedimiento de la librería)

Devuelve un  elemento escogido al azar de un objeto de entrada.

elemento:(OBJETO) El elemento extraído.

objeto:(OBJETO) Objeto del que se extraerá el elemento.

Ejemplo:

Muestra sacaalazar [1 2 3]

2

muestra sacaalazar [1 2 3]

2

muestra sacaalazar [1 2 3]

3

muestra sacaalazar "Hola

o


QUITA

nuevosobjetos QUITA objeto objetos	(Procedimiento de la librería)

Toma como argumentos dos objetos y devuelve un nuevo objeto igual al que se corresponde con el  segundo argumento, pero sin los miembros iguales al primer argumento.

nuevosobjetos:(OBJETO) Todos los objetos que  no son iguales a objeto.

objeto:(OBJETO) El objeto que será  eliminado.

objetos:(OBJETO).Objeto del que se extraerán elementos.

Ejemplo:

muestra quita "b [a b c b]

[a c]

muestra quita "o "Hola

Hla

No funciona, ya que no se encuentra una  primitiva necesaria en el procedemiento. En su lugar, puede incluirse en la librería:

PARA quita :objeto :l

SI NO MIEMBRO? :objeto :l [ALTO]

(SI LISTA? :l [HAZ "nl []] [HAZ "nl "])

quitar1 :objeto :l

DEVUELVE  :nl

FIN

PARA quitar1 :objeto :l

SI VACIO? :l [ALTO]

SI LISTA? :l [SI NO (PRIMERO :l) = :objeto [HAZ "nl PONULTIMO PRIMERO :l :nl ]]

SI PALABRA? :l [SI NO (PRIMERO :l) = :objeto [HAZ "nl PALABRA :nl PRIMERO :l ]]

quitar1 :objeto MENOSPRIMERO :l

FIN


QUITAREPETIDOS

nuevosobjetos QUITAREPETIDOS objetos	(Procedimiento de la librería)

Devuelve una copia de  objetos, pero sin los miembros repetidos.  Si dos o más miembros de la entrada son iguales, sólo permanece uno.

nuevosobjetos:(OBJETO) Todos los objetos, sin los duplicados.

objetos:(OBJETO).

Ejemplo:

muestra quitarepetidos [a b c b]

[a c b]

muestra quitarepetidos "Hello

Helo

No funciona, ya que no se encuentra una  primitiva necesaria en el procedemiento. En su lugar, puede incluirse en la librería:

PARA quitarepetidos :l

(SI LISTA? :l [HAZ "nl []] [HAZ "nl "])

quitarepetidos1 :l

DEVUELVE :nl

FIN

PARA quitarepetidos1 :l

SI VACIO? :l [ ALTO]

SI NO MIEMBRO? PRIMERO :l MENOSPRIMERO :l [(SI LISTA? :l [HAZ "nl PONULTIMO PRIMERO :l :nl][HAZ "nl PALABRA :nl PRIMERO :l ])]

quitarepetidos1 MENOSPRIMERO :l

FIN


ENTRECOMILLAS

comillasobjeto ENTRECOMILLAS objeto	(Procedimiento de la librería)

Devuelve la entrada, si es una lista.

Devuelve la entrada con comillas, si es una palabra.

comillasobjeto:(OBJETO) Objeto con comillas.

objeto:(OBJETO).

Ejemplo:

muestra "Hola

Hola

muestra entrecomillas "Hola

"Hola


MUTADORES

PONELEMENTO

MDPONELEMENTO

.PONPRIMERO

.PONMP

.PONELEMENTO

AÑADE

POP

COLA

DECOLA


PONELEMENTO

PONELEMENTO índice matriz valor

Cambia el valor del elemento número índice de una matriz  por un nuevo valor.

matriz:(MATRIZ) Matriz en la que se pondrá un elemento.

índice:(ENTERO) Índice del elemento que se pondrá en la matriz.

valor:(OBJETO) Valor del elemento.

Ejemplo:

haz "mi_matriz (matriz 3 0)

ponelemento 2 :mi_matriz 1

ponelemento 1 :mi_matriz [2]

ponelemento 0 :mi_matriz 3

muestra :mi_matriz

{3 [2] 1}


MDPONELEMENTO

MDPONELEMENTO índicelista mdmatriz valor	(Procedimiento de la librería)

Cambia el valor de un elemento de una matriz multidimensional (mdmatriz), por un nuevo valor.  El  elemento se selecciona con el argumento índicelista

mdmatriz:(MATRIZ) Matriz en la que se pondrá un elemento.

índicelista:(LISTA) Lista de índices (ENTEROS) que especifica el lugar donde se pondrá el elemento.

valor:(OBJETO) Valor del elemento.

(No se encuentra en la librería. Se puede incluir:)

PARA Mdponelemento :indice :array :val

PONELEMENTO ULTIMO  :indice (MDELEMENTO MENOSULTIMO  :indice :array) :val

FIN

TAPA  "Mdponelemento

Ejemplo:

haz "mimatriz (creamatriz [2 3] 0)

mdponelemento [0 0] :mimatriz 1

mdponelemento [0 1] :mimatriz 2

mdponelemento [0 2] :mimatriz 3

mdponelemento [1 0] :mimatriz 4

mdponelemento [1 1] :mimatriz 5

mdponelemento [1 2] :mimatriz 6

muestra :mimatriz

{{1 2 3} {4 5 6}}


.PONPRIMERO

.PONPRIMERO lista  valor

Esta primitiva cambia el valor del primer elemento de una  lista  por un nuevo  valor.  PRECAUCIÓN: No se recomienda su uso a los no expertos.  El uso de .PONPRIMERO puede llevar a listas de estructura cerradas, bucles infinitos; cambios inesperados de los datos de otras estructuras que comparten los datos modificados; y pérdida permanente de la memoria si se libera una estructura cerrada.

lista:(LISTA).

valor:(OBJETO).

Ejemplo:

haz "milista [1 2 3]

.ponprimero :milista 0

muestra :milista

[0 2 3]


.PONMP

.PONMP lista  valor

Esta primitiva cambia el valor de los elementos de una  lista –menos el del primero- por un nuevo  valor.  PRECAUCIÓN: No se recomienda su uso a los no expertos.  El uso de .PONMP puede llevar a listas de estructura cerrada, bucles infinitos; cambios inesperados de los datos de otras estructuras que comparten los datos modificados; y pérdida permanente de la memoria si se libera una estructura cerrada.

lista:(LISTA).

valor:(OBJETO).

Ejemplo:

haz "milista [1 2 3]

.ponmp :milista [a b]

muestra :milista

[1 a b]


.PONELEMENTO

.PONELEMENTO índice matriz valor

Cambia el elemento número índice de una matriz  por un nuevo valor. PRECAUCIÓN: No se recomienda su uso a los no expertos.  El uso de .PONELEMENTO puede llevar a listas de estructura cerrada, bucles infinitos; cambios inesperados de los datos de otras estructuras que comparten los datos modificados; y pérdida permanente de la memoria si se libera una estructura cerrada.

matriz:(MATRIZ) Matriz en la que se pondrá un elemento.

índice:(ENTERO) Índice del elemento que se pondrá en la matriz.

valor:(OBJETO) Valor del elemento.

Ejemplo:

haz "mimatriz (matriz 3 0)

.ponelemento 2 :mimatriz 1

.ponelemento 1 :mimatriz 2

.ponelemento 0 :mimatriz 3

muestra :mimatriz

{3 2 1}


AÑADE

AÑADE nombrestack objeto	(Procedimiento de la librería)

Este procedimiento añade un objeto a la pila (nombrestack).  El primer argumento es una lista, inicialmente vacía.  Los nuevos miembros se añaden al principio de la lista.  Después, con  POP se pueden sacar los objetos de la pila nombrestack.

nombrestack:(PALABRA) Palabra que indica el nombre de la pila.

objeto:(OBJETO) Objeto colocado en la pila.

Ejemplo:

haz "mipila []

añade "mipila 1

añade "mipila 2

muestra :mipila

[2 1]

muestra pop "mipila

2

muestra pop "mipila

1


POP

objeto POP nombrestack	(Procedimiento de la librería)

Devuelve el último  objeto que entró en la pila, usando AÑADE, y que sale fuera de la pila.

objeto:(OBJETO) Objeto que saldrá de la pila.

nombrestack:(PALABRA) Palabra que indica el nombre de la pila.

Ejemplo:

haz "mipila []

añade "mipila 1

añade "mipila 2

muestra :mipila

[2 1]

muestra pop "mipila

2

muestra pop "mipila

1


COLA

COLA nombrecola objeto	(Procedimiento de la librería)

Añade un objeto a una cola.  Una cola es una  lista  inicialmente vacía, en la que los nuevos miembros se añaden al final de la lista. Después, con DECOLA  el primer objeto sale de la cola.

nombrecola:(PALABRA) Palabra con el nombre de una cola.

objeto:(OBJETO) Objeto que saldrá de la cola.

Ejemplo:

haz "micola []

cola "micola 1

cola "micola 2

muestra :micola

[1 2]

muestra decola "micola

1

muestra decola "micola

2


DECOLA

objeto DECOLA nombrecola	(Procedimiento de la librería)

Devuelve el objeto que entró primero en la cola, usando  COLA,  y que saldrá de la cola .

objeto:(OBJETO) Objeto que saldrá de la cola.

nombre:(PALABRA) Palabra que indica el nombre de la cola.

Ejemplo:

haz "micola []

cola "micola 1

cola "micola 2

muestra :micola

[1 2]

muestra decola "micola

1

muestra decola "micola

2


PREDICADOS (Datos)

PALABRA?

LISTA?

MATRIZ?

VACIO?

IGUALES?

ANTERIOR?

.IG

MIEMBRO?

ENCADENA?

NUMERO?

TIENEBARRA?


PALABRA?

verdad PALABRA? objeto

Devuelve  VERDADERO si la entrada  objeto es una palabra, FALSO si no lo es.

verdad:(BOOLEANO) Prueba de verdad sobre si se trata de una palabra.

objeto:(OBJETO) Objeto del que se comprobará si es una palabra.

Ejemplo:

muestra palabra? "Hola

verdadero

muestra palabra? [Hola]

falso

muestra palabra? {Hola}

falso


LISTA?

verdad LISTA? objeto

Devuelve VERDADERO si la entrada es una lista; FALSO, si no lo es.

verdad:(BOOLEAN) Prueba de verdad sobre si se trata de una lista.

objeto:(OBJETO) Objeto del que se comprobará si es una lista.

Ejemplo:

muestra lista? "Hola

falso

muestra lista? [Hola]

verdadero

muestra lista? {Hola}

falso


MATRIZ?

verdad MATRIZ? objeto

Devuelve VERDADERO  si la entrada es una matriz, FALSO si no lo es.

verdad:(BOOLEANO) Prueba de verdad sobre si se trata de una matriz.

objeto:(OBJETO) Objeto del que se comprobará si es una matriz.

Ejemplo:

muestra matriz? "Hola

falso

muestra matriz? [Hola]

falso

muestra matriz? {Hola}

verdadero


VACIO?

verdad VACIO? objeto

Devuelve  VERDADERO  si la entrada es una palabra o lista vacía, FALSO si no lo es.

verdad:(BOOLEANO) Prueba de verdad sobre si la entrada es una palabra o lista vacía.

objeto:(OBJETO) Objeto del que se comprobará si está vacío.

Ejemplo:

muestra vacio? [1 2 3]

falso

muestra vacio? []

verdadero


IGUALES?

verdad IGUALES? objeto1 objeto2

Devuelve  VERDADERO  si las entradas objeto1 y objeto2 son iguales, FALSO  si no lo son.  Dos números son iguales  si  tienen el mismo valor  numérico.  Dos palabras  son iguales si contienen los mismos caracteres en el mismo orden. Dos listas son iguales si sus  miembros son iguales.  Una matriz sólo es igual a sí misma; dos matrices creadas separadamente nunca son iguales, aunque sus elementos sean iguales.

verdad:(BOOLEANO).

objeto1:(OBJETO).

objeto2:(OBJETO).

Ejemplo:

muestra iguales? 1 1

verdadero

muestra iguales? 1 2

falso

muestra iguales? [1 2 3] [1 2 3]

verdadero

muestra iguales? [1 2 3] [3 2 1]

falso


ANTERIOR?

verdad ANTERIOR? palabra1 palabra2

Devuelve  VERDADERO si  palabra1 es anterior  en orden alfabético a palabra2,  según la secuencia  ASCII.  Observación : si las entradas son  números, el resultado no sería igual que con  MENOR?; por ejemplo, ANTERIOR? 3 12 es FALSO porque 3 no es anterior a  1.

verdad:(BOOLEANO).

palabra1:(PALABRA).

palabra2:(PALABRA).

Ejemplo:

muestra anterior? "ABC "abd

verdadero

muestra anterior? "abd "ABC

falso


.IG

verdad .IG objeto1 objeto2

Devuelve  VERDADERO si las dos entradas objeto1 y objeto2 son el mismo objeto.  En otro caso, devuelve  FALSO  aunque las entradas tengan el mismo valor.  PRECAUCIÓN:  Todas las Primitivas precedidas por un punto son  PELIGROSAS y no se recomienda su uso a los inexpertos porque el uso de mutadores puede dar lugar a estructuras de datos cerradas, bucles sin fin o bloqueo de Logo.

verdad:(BOOLEANO).

objeto1:(OBJETO).

objeto2:(OBJETO).

Ejemplo:

haz "x 1

haz "y 1

muestra .ig :x :y

falso

muestra .ig :x :x

verdadero


MIEMBRO?

verdad MIEMBRO? objeto1 objeto2

Permite conocer si un objeto es miembro de otro.

Si objeto2 es una lista o una matriz, devuelve  VERDADERO si objeto1 y un miembro o elemento de objeto2 son  IGUALES?, FALSO si no lo son.

Si objeto2 es una palabra, devuelve VERDADERO si objeto1 y una parte de objeto2 son  IGUALES?, FALSO si no lo son.

Observación: Este comportamiento es diferente de otros dialectos en que objeto1 debe ser un sólo carácter del que se comprobará si está incluido en la palabra objeto2.

verdad:(BOOLEANO).

objeto1:(OBJETO).

objeto2:(OBJETO).

Ejemplo:

muestra miembro? 1 [1 2 3]

verdadero

muestra miembro? 4 [1 2 3]

falso


ENCADENA?

verdad ENCADENA? objeto1 objeto2

Permite conocer si  un objeto forma parte de una lista o matriz.

Si objeto2 es una lista o una matriz, devuelve VERDADERO si objeto1 y un miembro o elemento de objeto2 son  IGUALES?, FALSO si no lo son.

Si objeto2 es una palabra, devuelve VERDADERO si objeto1 y una parte de objeto2 son  IGUALES, FALSO si no lo son.

verdad:(BOOLEANO).

objeto1:(OBJETO).

objeto2:(OBJETO).

Ejemplo:

muestra encadena? "ab "abc

verdadero

muestra encadena? "ac "abc

falso


NUMERO?

verdad NUMERO? objeto

Devuelve VERDADERO si la entrada es un número, FALSO si no lo es.

verdad:(BOOLEANO)

objeto:(OBJETO).

Ejemplo:

muestra numero? 1

verdadero

muestra numero? [1]

falso


TIENEBARRA?

verdad TIENEBARRA? carácter

Devuelve  VERDADERO si la entrada tiene una barra a la izquierda  (\), en otro caso, FALSO.  (En Europa, devuelve VERDADERO  sólo si el carácter es la barra, o los correspondientes a espacio, TAB, nueva línea o uno de los siguientes: ()[]+-*/=<>":;\~? )

verdad:(BOOLEANO)

carácter:(PALABRA).

Ejemplo:

muestra tienebarra? "a

falso


CONSULTAS

CUENTA

ASCII

CARACTER

MIEMBRO

MINUSCULAS

MAYUSCULAS

STANDOUT

ANALIZA

EJECUTAANALIZA

HORA

HORAMILI


CUENTA

número CUENTA objeto

Si la entrada (objeto) es una palabra, devuelve  el número de caracteres.

Si la entrada (objeto) es una lista o una matriz, devuelve el  número de miembros o elementos.  (Para una matriz puede ser el índice del último elemento, depende del índice del primer elemento.)

número:(NÚMERO) Cuenta los elementos de un objeto.

objeto:(OBJETO). Palabra, lista o matriz.

Ejemplo:

muestra cuenta [1 2 3]

3

muestra cuenta "ab

2


ASCII

número ASCII carácter

Devuelve un  número (en EEUU, entre 0 y 127) que representa la entrada de un carácter en  código ASCII.

número:(NÚMERO) código ASCII de la entrada.

carácter:(PALABRA) Carácter del que se quiere conocer su código ASCII.

Ejemplo:

muestra ascii "a

97

muestra ascii "A

65

muestra ascii "b

98


CARACTER

carácter CARACTER número

carácter CAR número

Devuelve el carácter que corresponde a un código ASCII (número), entre 0 y 127.

carácter:(PALABRA).

número:(NÚMERO).

Ejemplo:

muestra car 97

a

muestra car 65

A

muestra car 98

b


MIEMBRO

objeto MIEMBRO objeto1 objeto2

Devuelve  parte de una palabra o lista (objeto2) desde la primera aparición de objeto1 hasta el fin. Vea  MIEMBRO?.

Devuelve la palabra o lista vacía, si objeto1 no es una parte de objeto2.

 Se produce un  error si objeto2 es una matriz.

objeto:(OBJETO).

objeto1:(OBJETO).

objeto2:(OBJETO).

Ejemplo:

muestra miembro "b [a b c d]

[b c d]

muestra miembro "c [a b c d]

[c d]


MINUSCULAS

nuevapalabra MINUSCULAS palabra

Devuelve una palabra, copia de la palabra de entrada, pero en la que se han cambiado las mayúsculas por las correspondientes minúsculas   (En EEU, las letras que van precedidas de una barra a la izquierda no sufren la conversión.)

nuevapalabra:(PALABRA).

palabra:(PALABRA).

Ejemplo:

muestra minusculas "Hola

hola


MAYUSCULAS

palabra MAYUSCULAS palabra

Devuelve una palabra, copia de la  palabra de entrada, pero en la que se han cambiado las minúsculas por las correspondientes mayúsculas.  (En EEU, las letras que van precedidas de una barra a la izquierda no sufren la conversión.)

nuevapalabra:(PALABRA).

palabra:(PALABRA).

Ejemplo:

muestra mayusculas "Hola

HOLA


STANDOUT

palabra STANDOUT objeto

(No soportada en MSWLogo aun)


ANALIZA

lista ANALIZA palabra

Toma una palabra como entrada y la devuelve como lista,  como si hubiese sido leída mediante LEELISTA.  Esto es, ANALIZA LEEPALABRA tiene el mismo valor que LEELISTA para la misma entrada.

lista:(LISTA).

palabra:(PALABRA).

Ejemplo:

muestra analiza "Hola

[Hola]


EJECUTAANALIZA

lista EJECUTAANALIZA objeto

Devuelve la lista que resultaría si la entrada (palabra o lista)  hubiera sido una línea de instrucciones.

lista:(PALABRA).

objeto:(OBJETO).

Ejemplo:

muestra ejecutaanaliza "a<b

[a < b]


HORA

lista HORA

Devuelve en una lista la hora actual del sistema.

lista:(lista) Una lista que contiene la hora actual del sistema.

Ejemplo:

muestra hora

[Wed Jul 14 23:34:08 1993]


HORAMILI

número HORAMILI

Devuelve el tiempo transcurrido desde que se inició Windows, con una precisión de milisegundos.

número:(ENTERO).

Ejemplo:

haz "comienzo horamili

repite 36 [elipse 100 200 gd 5];elipse es un procedimiento de la librería

muestra horamili - :comienzo

8189


COMUNICACIONES

TRANSMISORES

RECEPTORES

COMUNICACIONES

ACCESSO al TECLADO y al RATÓN


TRANSMISORES

ESCRIBE

MUESTRAT

MUESTRA


ESCRIBE

ESCRIBE objeto

ES objeto

(ESCRIBE objeto1 objeto2 ...)

(ES objeto1 objeto2 ...)

Esta primitiva escribe la entrada o entradas actuales.  Todas las entradas se escriben en una sola línea, separadas por espacios y terminando en una nueva  línea.  Si la entrada es una lista, no escribe los corchetes, sí  se escriben corchetes en las sublistas.  Las matrices se escriben entre llaves. La segunda forma (con paréntesis) se emplea cuando ESCRIBE lleva más de un argumento.

Ejemplo:

escribe "Hola

Hola

escribe [Hola, cómo estás]

Hola, cómo estás


MUESTRAT

MUESTRAT objeto

(MUESTRAT objeto1 objeto2 ...)

Esta orden escribe la entrada o entradas igual que ESCRIBE, pero no produce un retorno de carro y las entradas no se escribirán separadas por espacios.

Nota: Generalmente escribe la "línea que está en el buffer"; esto es, no aparecen los caracteres hasta que se escribe un carácter de nueva línea  (por ejemplo, por  ESCRIBE o MUESTRA) o Logo lea del teclado (por mandato del programa).  De esta manera,  el programa es  más rápido que si escribiera carácter a carácter.

Ejemplo:

muestrat "Hola

muestrat "How

muestrat "Are

escribe "You

HolaHowAreYou


MUESTRA

MUESTRA objeto

(MUESTRA objeto1 objeto2 ...)

Esta primitiva escribe la entrada o entradas, al igual que ESCRIBE, pero si la entrada es una lista, la escribe entre corchetes.

objeto:(objeto).

objeto1:(objeto).

objeto2:(objeto).

Ejemplo:

muestra [1 2 3]

[1 2 3]

escribe [1 2 3]

1 2 3


RECEPTORES

LEELISTA

LEEPALABRA

LEECARAC

LEECARCS

SHELL


LEELISTA

lista LEELISTA

lista LL

Lee una línea desde el lector de cadenas (inicialmente el terminal) y devuelve la línea como una lista.  La línea se compone de sus elementos como si se hubiera tecleado entre corchetes.  Si el lector de cadenas es un fichero, y se lee el final del fichero, LEELISTA devuelve la palabra vacía (no la lista vacía).  LEELISTA procesa las barras a la izquierda, barras verticales, y caracteres tipo tildes del lector de cadenas; la lista de salida no contiene esos caracteres pero realizarán su efecto usual.  LEELISTA no trata el punto y coma como un carácter de comentario.

lista:(LISTA).

Ejemplo:

muestra leelista

<Entrada por teclado (Hola, ¿cómo estás? <CR>) en la ventana de diálogo>

[Hola, ¿cómo estás?]


LEEPALABRA

palabra LEEPALABRA

palabra LP

Lee una línea desde el lector de cadenas y devuelve esa línea como una palabra.  Devuelve una palabra aunque la línea tenga espacios, corchetes, etc.  si se lee de un fichero y se llega al final, LEEPALABRA devuelve una lista vacía (no una palabra vacía).  LEEPALABRA procesa barras a la izquierda, barras verticales, y caracteres  tipo tilde.  En caso de una tilde usada  para la continuación de una línea, la palabra de salida incluye  la tilde y los caracteres de nueva línea, así  el usuario del  programa puede saber exactamente lo que escribió.  La salida respeta también las barras verticales. Los programas pueden usar TIENEBARRA? para chequear el código.

palabra:(PALABRA).

Ejemplo:

muestra leepalabra

<Entrada (Hola<CR>) en la ventana de diálogo>

Hola


LEECARC

carácter LEECARC

Lee un sólo carácter de una cadena y lo devuelve como una palabra (carácter).  Si la cadena se lee desde un fichero, y se lee el final del fichero, LEECARC devuelve una lista  vacía.  Si la cadena se lee desde un terminal, y se llama a LEECARC no devuelve la palabra carácter hasta que se llame a LEELISTA o LEEPALABRA. Las barras a la izquierda y verticales, y los caracteres tipo tilde no tienen un tratamiento especial.

carácter:(PALABRA)

 Ejemplo:

muestra leecarc

<Entre (H<CR>) en la ventana de diálogo>

H


LEECARCS

palabra LEECARCS número

palabra LCS número

(No soportado por MSWLogo cuando la lectura es desde el teclado), Ver PONTECLADO)

Lee  un número de caracteres desde el lector de cadenas  y devuelve esos caracteres como una palabra.  Si se lee de un fichero y se llega al final, LEECARCS devuelve una lista vacía (no una palabra vacía). Las barras a la izquierda y verticales, y los caracteres tipo tilde no tienen un tratamiento especial.

palabra:(PALABRA).

número:(ENTERO).

Ejemplo:

abre "dummy.fil

ponescritura "dummy.fil

escribe "Hola

ponescritura []

cierra "dummy.fil

ponescritura "dummy.fil

ponlectura "dummy.fil

muestra lcs 4

Hola

ponlectura []

cierra "dummy.fil


SHELL

verdad SHELL orden

Devuelve el resultado de la orden que se ejecuta tras la orden shell.  Si la orden está en una lista en la línea de instrucciones, y si se quiere enviar un carácter  backslash, se debe usar  \\.  Devuelve VERDADERO o FALSO, según el éxito de la operación.

verdad:(BOOLEANO).

orden:(OBJETO).

Ejemplo:

muestra shell [notepad c:\\test.txt]

verdadero


Comunicaciones

Todas las órdenes tipo xxxxxPORT se refieren al puerto serie (RS-232) y paralelo.  Todas las órdenes  LEEx o ESCRIBEx se refieren al "hardware" del puerto de comunicaciones..

ABREPUERTO

CIERRAPUERTO

LIMPIAPUERTO

MODOPUERTO

LEECADENAPUERTO

LEECARACTERPUERTO

ESCRIBECADENAPUERTO

ESCRIBECARACTERPUERTO

LEEPUERTO2

ESCRIBEPUERTO2

LEEPUERTO

ESCRIBEPUERTO

CARGADLL

LLAMADLL

QUITADLL


ABREPUERTO

ABREPUERTO puerto

Esta orden se usa para acceder a los puertos series y paralelo.  El  puerto deseado se abre para lectura con  (LEECARACTERPUERTO o LEECADENAPUERTO) y para escritura con  (ESCRIBECARACTERPUERTO o ESCRIBECADENAPUERTO).  Las características del puerto se fijan con MODOPUERTO.  En todo momento sólo puede abrirse un  puerto que se cierra con CIERRAPUERTO.  No se debe confundir esta orden con  LEEPUERTO2 y ESCRIBEPUERTO2  referentes al "hardware" del puerto de comunicaciones.

puerto:(PALABRA) El nombre del puerto que se quiere abrir (p.e. COM1-COM4 y LPT1-LPT3)

Ejemplo:

abrepuerto "com1

cierrapuerto


CIERRAPUERTO

CIERRAPUERTO

Cierra el puerto  abierto con  ABREPUERTO.

Ejemplo:

abrepuerto "com1

cierrapuerto


LIMPIAPUERTO

LIMPIAPUERTO cola

Esta orden se usa para limpiar la cola del puerto de lectura o escritura.

cola:(ENTERO) La cola a limpiar 0 (escritura) y 1 (lectura).

Ejemplo:

limpiapuerto 1


MODOPUERTO

MODOPUERTO modo

Se usa para  fijar el  modo (velocidad, paridad, bits de datos, y bits de parada) del puerto.

Observe que estas características  (tanto velocidad como flujo de control) pueden fijarse también a través del icono PUERTOS del Panel  de Control.

modo:(PALABRA): ("COMn:VELOCIDAD, PARIDAD, DATOS, PARADA).  Igual forma en modo DOS.

Ejemplo:

modopuerto "com1:9600,n,8,1


LEECADENAPUERTO

actual LEECADENAPUERTO contador buffer

Lee el puerto abierto y escribe los datos en el  buffer.  Intentará leer todos los  caracteres que indique  contador y que estén disponibles.  Devuelve el número de bytes leídos.

actual:(ENTERO).

contador:(ENTERO)

buffer:(ARRAY)

Ejemplo:

(El procedimiento map1 de la librería no funciona)

abrepuerto "com1

escribe frase [Enviando...] escribecadenapuerto 3 listaamatriz map1 [ascii ?] matrizalista listaamatriz "at

Enviando... 2

muestra escribecaracterpuerto 13

1

espera 60

haz "buff {0 0 0 0 0 0 0 0 0 0}

escribe frase [Recibiendo...] leecadenapuerto 10 :buff

Recibiendo... 9

escribe frase [Datos Rx...] map1 [car ?] quita [] matrizaalista :buff

Datos Rx... at | |

O K |

cierrapuerto


LEECARACTERPUERTO

datos LEECARACTERPUERTO

Esta orden leerá un byte del puerto abierto y devolverá un entero.  Un resultado  "-1" indica que el carácter no está disponible.

datos:(ENTERO).

Ejemplo:

abrepuerto "com1

muestra escribecaracterpuerto ascii "a

1

muestra escribecaracterpuerto ascii "t

1

muestra escribecaracterpuerto 13

1

espera 60

escribe "Leyendo...

Leyendo...

repite 10 [haz "x leecaracterpuerto si no :x = -1 [muestrat car :x]]

escribe ".

at||

OK|

.

cierrapuerto


ESCRIBECADENAPUERTO

actual ESCRIBECADENAPUERTO contador buffer

Esa primitiva escribirá en el puerto, previamente abierto, los datos que se encuentran en el  buffer de cadenas.  Intentará escribir el mayor número posible de caracteres (contador).  Devuelve el número actual de bytes escritos.

actual:(ENTERO) Es el  número actual de bytes escritos en el puerto.

contador:(ENTERO) Es el número de caracteres que se quiere escribir en el  puerto.  Se puede usar un número mayor que el tamaño de la cadena  si quiere descargar la cadena completa.

buffer:(CADENA) Es un buffer en el que se lee los datos de salida.

Ejemplo:

(El procedimiento map1 de la librería no funciona)

abrepuerto "com1

escribe frase [Enviando...] escribecadenapuerto 3 listaamatriz map1 [ascii ?] matrizalista listaamatriz "at

Enviando... 2

muestra escribecaracterpuerto 13

1

espera 60

haz "buff {0 0 0 0 0 0 0 0 0 0}

escribe frase [Recibiendo...] leecadenapuerto 10 :buff

Recibiendo... 9

escribe frase [Datos Rx...] map1 [car ?] quita [] matrizalista :buff

Datos Rx... at | |

O K |

cierrapuerto


ESCRIBECARACTERPUERTO

actual ESCRIBECARACTERPUERTO datos

Esta orden escribirá  un byte de datos en el puerto previamente abierto y devolverá el actual número de bytes escritos (0 o 1).

actual:(ENTERO) Es el número de bytes escritos (0 o 1).

datos:(ENTERO) Es el byte de datos que se escribe en el puerto.

Ejemplo:

abrepuerto "com1

muestra escribecaracterpuerto ascii "a

1

muestra "y escribecaracterpuerto ascii "t

1

muestra "y escribecaracterpuerto 13

1

espera 60

escribe "Leyendo...

LEYENDO...

repite 10 [haz "x leecaracterpuerto so no :x = -1 [muestrat car :x]]

escribe ".

at||

OK|

.

cierrapuerto


LEEPUERTO2

datos LEEPUERTO2  identificador_de_puerto

Esta orden leerá 2 bytes (16 bits) del especificado  identificador_de_puerto y devolverá los datos como un  entero.

El  identificador_de_puerto especifica un puerto del "Hardware".  No debe confundirse esta orden con  ABREPUERTO y LEECARACTERPUERTO que sirven para las comunicaciones a través de los puertos Serie y Paralelo.  Vea también LEEPUERTO y ESCRIBEPUERTO2.

datos:(ENTERO).

Identificador_de_puerto:(ENTERO).

Ejemplo:

muestra leepuerto2 198

25730


ESCRIBEPUERTO2

ESCRIBEPUERTO2 identificador_de_puerto  datos

Esta orden escribirá  2 bytes de datos en el especificado identificador_de_puerto.  El  identificador_de_puerto  se refiere a un Puerto "Hardware".  No se debe confundir esta orden con  ABREPUERTO y ESCRIBECARACTERPUERTO que sirven para las comunicaciones a través de los puertos Serie y Paralelo.  Vea también ESCRIBEPUERTO y LEEPUERTO2.

Identificador_de_puerto:(ENTERO) Especifica en qué  puerto hardware se escribirá.

datos:(ENTERO) Los 2 bytes de datos.

Ejemplo:

Escribepuerto2 198 0


LEEPUERTO

datos LEEPUERTO identificador_de_puerto

Esta primitiva leerá 1 byte (carácter) desde el  especificado  identificador_de_puerto y devolverá los datos como un entero. El  identificador_de_puerto  especifica un Puerto "Hardware".  No se debe confundir esta orden con ABREPUERTO y LEECARACTERPUERTO que sirven para las comunicaciones a través de los puertos Serie y Paralelo.  Vea también LEEPUERTO2 y ESCRIBEPUERTO.

datos:(ENTERO).

Identificador_de_puerto:(ENTERO).

Ejemplo:

muestra leepuerto 198

130


ESCRIBEPUERTO

ESCRIBEPUERTO identificador_de_puerto datos

Esta primitiva escribirá los datos como 1 byte en  el identificador_de_puerto  especificado. El  identificador_de_puerto  especifica un Puerto "Hardware".  No se debe confundir esta orden con ABREPUERTO y ESCRIBECARACTERPUERTO que sirven para las comunicaciones a través de los puertos Serie y Paralelo.  Vea también ESCRIBEPUERTO2 y LEEPUERTO.

Identificador_de_puerto:(ENTERO).

datos:(ENTERO).

Ejemplo:

escribepuerto 198 0


CARGADLL

CARGADLL nombre_librería

Esta orden carga la DLL (Dynamic Linked Library) de nombre nombre_libreria en MSWLogo.  Una vez cargada,  se puede llamar a las funciones con  LLAMADLL y una vez haya concluido el trabajo con la  DLL o necesite utilizar otra  DLL, debe cerrar la DLL con  QUITADLL.

Nombre_librería:(PALABRA).

Ejemplo:

cargadll "user.exe

quitadll


LLAMADLL

estado LLAMADLL función

Esta primitiva llama a una determinada función y devuelve el tipo.  Pasará los argumentos arg1 como type1 y arg2 como type2 y así sucesivamente.  La función debe estar en la DLL previamente cargada con  CARGADLL.  Debe contener  4 apartados (tipo función tipo1 arg1) aunque no se use arg1.  Esta primitiva es conocida por los usuarios experimentados que debe conocer las convenciones de uso porque si no está de acuerdo la lista de argumentos con el modo de llamada, Windows responderá de forma imprevisible (incluyendo la caída de Windows).  Con esta primitiva se puede manejar un n  variado de funciones, aunque no todas.  Observe que si la lista de argumentos es   "void" debe usar  [... "v 0].

Observe que en Win32 los argumentos tienen un orden inverso.

status:(Tipo) Valor devuelto por la función de un determinado tipo especificado en la entrada.

función:(LISTA) Con el formato [tipo función tipo1 arg1 tipo2 arg2 tipo3 arg3 ...] donde:

tipo:(PALABRA) Especifica el tipo de función o de argumento.  Donde:

v	void

w	PALABRA

l	DPALABRA

f	DOUBLE

s	LPSTR.

función:(PALABRA) Es el nombre de la función.

arg:(OBJETO): Casi todos los objetos LOGO tienen un tipo apropiado.

Ejemplo:

cargadll "user.exe

llamadll [w messagebox w 0 s MyMessage s [Hola How are you] w 0]

<ver ventana pop up>

quitadll


QUITADLL

QUITADLL

Esta orden cierra la DLL  previamente cargada con  CARGADLL.

Ejemplo:

CARGADLL "user.exe

QUITADLL


TECLADO y RATÓN
ACCESO al TECLADO y al  RATÓN

TECLA

PONTECLADO

QUITATECLADO

LEECAR

PONRATON

QUITARRATON

POSRATON

BORRATEXTO

PONCURSOR

CURSOR

PONMARGENES


TECLA

TECLA

(No soportada en MSWLogo, vea PONTECLADO)

Devuelve  VERDADERO si se ha pulsado una tecla.


PONTECLADO

PONTECLADO tecla_pulsada

(PONTECLADO tecla_bajada  tecla_liberada)

Esta orden captura los eventos del teclado.  Para obtener el carácter pulsado se llama a  LEECAR en modo directo o desde un procedimiento.  Observe que la  ventana “Pantalla de MSWLogo” debe tener el foco  (NO  la ventana de trabajo), lo que se logra  con  PONFOCO [Pantalla de MSWLogo ].  La segunda forma detecta independientemente los sucesos de tecla  bajada y liberada.  Observe que todos los "callbacks" por teclado se ejecutan en modo  EXCLUSIVO.

Tecla_bajada:(LISTA) Lista de órdenes LOGO que se ejecuta cuando se presiona una tecla.

Tecla_liberada:(LISTA) Lista de órdenes LOGO que se ejecuta cuando se deja de presionar una tecla.

Ejemplo:

ponteclado [es car leecar]

ponfoco [Pantalla de MSWLogo]

<a>

a

<b>

b

quitateclado


QUITATECLADO

QUITATECLADO

Esta orden desactiva la captura de los eventos del teclado.

Ejemplo:

ponteclado [es car leecar]

ponfoco [Pantalla de MSWLogo]

<a>

a

<b>

b

quitateclado


LEECAR

tecla LEECAR

tecla LC

Esta primitiva devuelve el valor de la tecla presionada o liberada.

tecla:(ENTERO) El valor ASCII correspondiente a la última tecla pulsada..

ponteclado [es car leecar]

ponfoco [Pantalla de MSWLogo]

<a>

a

<b>

b

quitateclado

Recuerde que "Pantalla de MSWLogo " debe tener el foco cuando se pulse una tecla.


PONRATON

PONRATON boton_izquierdo_abajo boton_izquierdo_arriba boton_derecho_abajo boton_derecho_arriba mover

PONRATON boton_izq_abajo boton_izq_arriba boton_der_abajo boton_der_arriba mover

Esta orden captura los eventos del ratón. Para obtener la posición del ratón  usar  POSRATON.  Observe que la ventana "Pantalla de MSWLogo" debe tener el foco (NO la ventana de trabajo) para poder capturar los eventos del ratón .  Observe que todas las "callbacks" del ratón se ejecutan en modo EXCLUSIVO .

boton_izq_abajo:(LISTA) Lista de órdenes LOGO que se ejecutan cuando se presiona el botón izquierdo del ratón.

boton_izq_arriba:(LISTA) Lista de órdenes LOGO que se ejecutan cuando se libera el botón izquierdo del ratón.

boton_der_abajo:(LISTA) Lista de órdenes LOGO  que se ejecutan cuando se presiona el botón derecho del ratón.

boton_der_arriba:(LISTA) Lista de órdenes LOGO  que se ejecutan cuando se libera el botón derecho del ratón.

mover:(LISTA) Lista de órdenes LOGO (o de nombres de procedimientos) que se ejecutan cuando se mueve el puntero del ratón.

Ejemplo:

subelapiz

ponraton [ponpos posraton bajalapiz] [subelapiz] [] [] [ponpos posraton]

quitarraton


QUITARRATON

QUITARRATON

Desactiva la captura de los eventos del ratón.

Ejemplo:

subelapiz

ponraton [ponpos posraton bajalapiz] [subelapiz] [] [] [ponpos posraton]

quitarraton


POSRATON

posición POSRATON

Devuelve la posición del puntero del ratón, tras el último evento.  Previamente se utilizó  PONRATON.

posición:(LISTA) Con la posición ([x y]) del puntero del ratón, tras su último evento.

Ejemplo:

subelapiz

ponraton [ponpos posraton bajalapiz] [subelapiz] [] [] [ponpos posraton]

quitarraton


BORRATEXTO

BORRATEXTO

BT

Borra el texto. En MSWLogo borra las salidas/órdenes de la caja de listas  de la ventana  Trabajo.

Ejemplo:

escribe "Hola

Hola

borratexto


SETCURSOR

(No soportado en MSWLogo)


CURSOR

CURSOR

(No soportado en MSWLogo)


PONMARGENES

PONMARGENES vector

(No soportado en MSWLogo)


ARITMÉTICA

OPERACIONES Numéricas

PREDICADOS (Aritmética)

NÚMEROS ALEATORIOS

ESCRIBIR CON FORMATO

OPERACIONES CON BITS


OPERACIONES NUMÉRICAS

SUMA

DIFERENCIA

CAMBIASIGNO

PRODUCTO

DIVISION

RESTO

ENTERO

REDONDEA

ABS

SIGNO

RAIZCUADRADA

POTENCIA

EXP

LOG

LN

PI

TAN

RADTAN

SEN

RADSEN

COS

RADCOS

ARCTAN

RADARCTAN

ARCSEN

RADARCSIN

ARCCOS

RADARCCOS


SUMA

número SUMA número1 número2

número (SUMA número1 número2 número3 ...)

número1 + número2

Devuelve la suma del valor numérico de las entradas.La segunda forma (con paréntesis) se utiliza cuando suma lleva más de dos entradas.

número:(NÚMERO) Resultado de la suma.

número1:(NÚMERO) Primer sumando.

número2:(NÚMERO) Segundo sumando.

Ejemplo

muestra 2 + 3

5

muestra (suma 4 6 8 9)

27


DIFERENCIA

número DIFERENCIA número1 número2

número1 - número2

Devuelve la diferencia del valor numérico de las entradas.  En la segunda forma debe utilizarse con cuidado para no obtener resultados inesperados.

número:(NÚMERO) Resultado de la diferencia.

número1:(NÚMERO) Minuendo.

número2:(NÚMERO) Sustraendo.

Ejemplo:

muestra 3 - 2

1

muestra 7-5

2

muestra 7 -5

7

No me has dicho qué hacer con  -5

muestra  7- 5

2


CAMBIASIGNO

negativo CAMBIASIGNO número

- número

En la primera forma (CAMBIASIGNO) devuelve el opuesto del valor numérico de la entrada. En la segunda forma devuelve también el opuesto de la entrada cuando está inmediatamente seguido por la entrada y precedido  por un espacio, aunque también se emplea como operador de la substracción. Hay que llevar cuidado con la utilización de “-“ para no obtener resultados inesperados.

Cambiasigno 3 + 4 =    -(3 + 4)	= -3 – 4 	= -7

- 3 + 4	= (-3)+4= 1

Ejemplo:

muestra 2 - -3; 2 + 3

5


PRODUCTO

número PRODUCTO número1 número2

número (PRODUCTO número1 número2 número3 ...)

número1 * número2

Devuelve el producto de  los valores numéricos de las entradas.

número:(NÚMERO) Resultado del producto.

número1:(NÚMERO) Primer factor.

número2:(NÚMERO) Segundo factor.

Ejemplo:

muestra 2 * 3

6

muestra producto 4 5

20


DIVISION

número DIVISION número1 número2

número (DIVISION número2)

número1 / número2

Devuelve el cociente de la división de los valores numéricos de las entradas.  El resultado únicamente es un entero si el dividendo es múltiplo del divisor.  (En otras palabras, DIVISION 5 2 es 2.5, no 2, pero DIVISION 4 2 es 2, no 2.0 ). En la segunda forma, entre paréntesis, se supone que el dividendo es 1.

número:(NÚMERO) Resultado de la división.

número1:(NÚMERO) Dividendo.

número2:(NÚMERO) Divisor.

Ejemplo:

muestra 6 / 3

2

muestra 3 / 2

1.5

muestra division 12 2

6

muestra (division 4)

0.25


RESTO

número RESTO número1 número2

Devuelve el resto de la división entre número1 y número2; ambos números deben ser enteros y el resultado es un entero con el mismo signo que número2.

número:(ENTERO) Resto.

número1:(ENTERO) Dividendo.

número2:(ENTERO) Divisor.

Ejemplo:

muestra resto 6 4

2

muestra resto 6 2

0


ENTERO

entero ENTERO número

Devuelve la entrada, sin la parte decimal, es decir, un entero con el mismo signo que la entrada, cuyo valor absoluto es  menor o igual al valor absoluto de la entrada.

entero:(ENTERO).

número:(NÚMERO).

Nota:  La computadora representa los números en  dos formatos diferentes, enteros y números con parte decimal.  En la mayoría de las computadoras el número mayor que se puede representar como entero es menor que el número mayor que se puede representar en coma flotante.  ENTERO devuelve siempre un número entero, pero si su valor  es mayor del admitido para los enteros, la salida no podrá estar en ese formato.  En ese caso no podrá utilizarse con el valor devuelto RESTO ya que requiere un entero como entrada.

Ejemplo:

muestra entero 8.2

8

muestra entero 8.7

8


REDONDEA

entero REDONDEA número

Devuelve el entero más cercano al valor numérico de la entrada.

entero:(ENTERO) Resultado del redondeo.

número:(NÚMERO).

Ejemplo:

muestra redondea 8.2

8

muestra redondea 8.7

9


ABS

número ABS número1	(Procedimiento de la librería)

Devuelve el valor  absoluto de la entrada.

número:(NÚMERO) Valor absoluto.

número1:(NÚMERO).

Ejemplo:

muestra abs 5

5

muestra abs -5

5


SIGNO

entero SIGNO número	(Procedimiento de la librería)

Devuelve el signo  de la entrada (-1 si es negativo,  0 si es cero, 1 si es positivo).

entero:(ENTERO) Resultado que indica el signo de la entrada.

número:(NÚMERO).

Ejemplo:

muestra signo 5

1

muestra signo 0

0

muestra signo -98.6

-1


RAIZCUADRADA

número RAIZCUADRADA número1

número RC número1

Devuelve la raíz cuadrada del valor numérico de la entrada que, como es sabido, no puede ser un número   negativo.

número:(NÚMERO).

número1:(NÚMERO)

Ejemplo:

muestra raizcuadrada 4

2

muestra raizcuadrada 9

3


POTENCIA

número POTENCIA número1 número2

Devuelve número1 elevado a la potencia número2.  Si número1 es negativo, número2 debe ser un entero.

número:(NÚMERO).

número1:(NÚMERO). Base de la potencia

número2:(NÚMERO) Exponente.

Ejemplo:

muestra potencia 2 3

8


EXP

número EXP número1

Devuelve el número e (2.718281828+) elevado a la potencia  número1.

número:(NÚMERO) Resultado de elevar e a la potencia número1

número1:(NÚMERO) Exponente al que se eleva e.

Ejemplo:

muestra exp 2

7.38905609893065


LOG

número LOG1 número1

Devuelve el logaritmo común de número1. Esto es, 10 elevado a un número = número1, donde número es el valor devuelto.

número:(NÚMERO) Resultado del logaritmo de número1.

número1:(NÚMERO).

Ejemplo:

log 1

0

log 10

1

log 100

2


LN

número LN número1

Devuelve el logaritmo natural de número1. Esto es, el número e (2.718281828+) elevado a número = número1, donde número es el valor devuelto.

número:(NÚMERO).

número1:(NÚMERO).

Ejemplo:

muestra ln 1

0

muestra ln exp 1

1


PI

número PI	(Procedimiento de la librería)

Devuelve el valor del número pi (3.141592653589793227020265931059839203954)

número:(NÚMERO).

Ejemplo:

muestra radsen pi/2

1


TAN

num TAN ángulo

Devuelve la tangente de ángulo en grados.  Vea también RADTAN.

num:(NÚMERO) El valor de la tangente.

ángulo:(NÚMERO) Ángulo del que se va a obtener la tangente.

Ejemplo:

muestra tan 0

0

muestra tan 90

Error

muestra tan 45

1


RADTAN

número RADTAN ángulo

Devuelve la tangente de ángulo,  en radianes.  Vea también TAN.

número:(NÚMERO) La tangente de la entrada.

ángulo:(NÚMERO).

Ejemplo:

muestra radtan 0

0

muestra radtan pi/2

ERROR

muestra radtan pi/4

1


SEN

número SEN ángulo

Devuelve el seno de ángulo, en grados.  Vea también RADSEN.

número:(NÚMERO) El seno de la entrada.

ángulo:(NÚMERO).

Ejemplo:

muestra sen 0

0

muestra sen 90

1

muestra sen 180

0


RADSEN

número RADSEN ángulo

Devuelve el  seno de ángulo en radianes.  Vea también SIN.

número:( NÚMERO) el seno de la entrada.

ángulo:( NÚMERO) Ángulo en radianes.

Ejemplo:

muestra radsen 0

0

muestra radsen pi/2

1

muestra radsen pi

0


COS

número COS ángulo

Devuelve el coseno de ángulo en grados.  Vea también RADCOS.

número:( NÚMERO) El coseno de la entrada.

ángulo:( NÚMERO) Ángulo en grados .

Ejemplo:

muestra cos 0

1

muestra cos 90

0

muestra cos 180

-1


RADCOS

número RADCOS ángulo

Devuelve el coseno de ángulo  en radianes.  Vea también COS.

número:( NÚMERO) El coseno de la entrada.

ángulo:( NÚMERO) El ángulo en radianes.

Ejemplo:

muestra radcos 0

1

muestra radcos pi/2

0

muestra radcos pi

-1


ARCTAN

ángulo ARCTAN número

ángulo (ARCTAN x y)

Con  una entrada, devuelve el arco tangente de la entrada, en grados.

Con dos entradas, devuelve el arco tangente en grados  de y/x.

Vea también RADARCTAN.

ángulo:(NÚMERO).

número:(NÚMERO).

x:(NÚMERO).

y:(NÚMERO).

Ejemplo:

muestra arctan 1

45


RADARCTAN

ángulo RADARCTAN número

ángulo (RADARCTAN x y)

Con una entrada, devuelve el arco tangente en radianes  de la entrada.

Con dos entradas, devuelve el arco tangente en radianes de y/x.

Vea también ARCTAN.

ángulo:(NÚMERO).

número:(NÚMERO).

x:(NÚMERO).

y:(NÚMERO).

Ejemplo:

muestra (radarctan 1) = pi/4

verdadero


ARCSEN

ángulo ARCSEN número

Devuelve el arco seno en grados de la entrada.  Vea también RADARCSEN.

ángulo:(NÚMERO).

número:(NÚMERO).

Ejemplo:

muestra arcsen 0.5

30

muestra arcsen sen 45

45


RADARCSEN

ángulo RADARCSEN número

Devuelve el  arco seno en radianes de la entrada.  Vea  también  ARCSEN.

ángulo:(NÚMERO).

número:(NÚMERO).

Ejemplo:

muestra (radarcsen 1) = pi/2

verdadero


ARCCOS

ángulo ARCCOS número

Devuelve el arco seno  en grados de la entrada.  Vea también RADARCCOS.

Ejemplo:

muestra arccos 0.5

60

muestra arccos cos 45

45


RADARCCOS

ángulo RADARCCOS número

Devuelve el arco seno en radianes de la entrada.  Vea también ARCCOS.

ángulo:(NÚMERO).

número:(NÚMERO).

Ejemplo:

muestra (radarccos (raizcuadrada 2)/2) = pi/4

verdadero


PREDICADOS (Arítmetica)
PREDICADOS (Aritméticos)

MENOR?

MAYOR?


MENOR?

verdad MENOR? número1 número2

número1 < número2

Devuelve VERDADERO si la primera entrada es menor que la segunda.

verdad:(BOOLEANO) Prueba de verdad.

número1:(NÚMERO).

número2:(NÚMERO).

Ejemplo:

muestra 1 < 2

verdadero

muestra 2 < 1

falso


MAYOR?

verdad MAYOR? número1 número2

número1 > número2

Devuelve VERDADERO si el primer número es mayor que el segundo.

verdad:(BOOLEANO) Prueba de verdad.

número1:(NÚMERO).

número2:(NÚMERO).

Ejemplo:

muestra 2 > 1

verdadero

muestra 1 > 2

falso


NÚMEROS ALEATORIOS

AZAR

REAZAR


AZAR

número AZAR número1

Devuelve un número aleatorio, entero positivo menor que la entrada que debe ser un  número  entero.

número:(ENTERO) Número aleatorio.

número1:(ENTERO).

Ejemplo:

repite 5 [muestra azar 10]

6

8

3

0

9


REAZAR

REAZAR

(REAZAR semilla)

Esta primitiva reproduce los resultados de AZAR .  Generalmente la secuencia de números aleatorios es distinta cada vez que se usa.  Si necesita repetidamente la misma secuencia de números pseudo-aleatorios, debe llamar a REAZAR antes de llamar a AZAR.  Si necesita más de una secuencia repetida, puede llamar a REAZAR con una entrada de número entero; cada posible entrada selecciona una a única secuencia de números.

semilla:(ENTERO) Semilla generadora de números aleatorios.

Ejemplo:

reazar 1234

repite 2 [muestra azar 10]

6

2

reazar 1234

repite 2 [muestra azar 10]

6

2


ESCRIBIR CON FORMATO

FORMATONUMERO


FORMATONUMERO

palabra FORMATONUMERO número ancho precisión

Devuelve una palabra  que representa un número, posiblemente precedido por espacios (y por ello no es un número con el que se pueda efectuar operaciones aritméticas), con tantos caracteres como indique  ancho,  y con los dígitos después del punto decimal que indique  precisión.  (Si "precisión" es 0, la salida no tendrá punto decimal.)

palabra:(Palabra) Número con formato.

número:(NÚMERO).

ancho:(ENTERO) Anchura mínima, incluyendo el punto decimal.

precisión:(ENTERO) Número de dígitos tras el punto decimal.

Ejemplo:

muestra formatonúmero 123.1 10 10

123.1000000000

Para comprobar el funcionamiento, (FORMATONUMERO número -1) :

para hex :numero

devuelve formatonumero :numero -1 "|%08X %08X|

fin

Ejemplo:

muestra formatonumero 99.99 -1 "|%08X %08X|

0000C28F 000028F5


OPERACIONES CON BITS

BITY

BITO

BITXOR

BITINVERSO

DESPLAZA

DESPLAZAIZQUIERDA


BITY

número BITY número1 número2

número (BITY número1 número2 número3 ...)

Devuelve el resultado de la operación Y tomando como datos los valores enteros de las entradas.

número:(ENTERO) Resultado de la operación Y.

número1:(ENTERO).

número2:(ENTERO).

Ejemplo:

muestra bity 5 2; 101 y 010 = 0

0

muestra bity 5 1; 101 y 1 = 1

1


BITO

número BITO número1 número2

número (BITO número1 número2 número3 ...)

Devuelve el resultado de la operación O con los valores enteros de las entradas.

número:(ENTERO) Resultado de la operación O.

número1:(ENTERO).

número2:(ENTERO).

Ejemplo:

muestra bito 5 2; 101 O 10 = 111 = 7

7

muestra bito 5 1; 101 O  1=  101 = 5

5


BITXOR

número BITXOR número1 número2

número (BITXOR número1 número2 número3 ...)

Devuelve el resultado de la operación O EXCLUSIVO con los valores enteros de las entradas.

número:(ENTERO) resultado de la operación XOR.

número1:(ENTERO).

número2:(ENTERO).

Ejemplo:

muestra bitxor 5 2; 101 XOR 10 = 111= 7

7

muestra bitxor 5 1; 101 XOR 1 = 100 = 4

4


BITINVERSO

número BITINVERSO número1

Devuelve el resultado de la operación NO tomando como dato el valor entero de la entrada..

número:(ENTERO) Resultado de la operación NO.

número1:(ENTERO).

Ejemplo:

muestra bitinverso 1

-2

muestra bitinverso 5

-6


DESPLAZA

número DESPLAZA número1 número2

Devuelve número1 con un desplazamiento aritmético a la izquierda de tantos bits como indique número2.  Si número2 es negativo, el desplazamiento es a la derecha.  Las entradas deben ser números enteros.

número:(ENTERO) Resultado del desplazamiento.

número1:(ENTERO).

número2:(ENTERO).

Ejemplo:

muestra desplaza 5 2; 101 DESPLAZA 2 = 10100 = 20

20

muestra desplaza 20 –1; 10100 DESPLAZA –1 = 1010 = 10

10


DESPLAZAIZQUIERDA

número DESPLAZAIZQUIERDA número1 número2

Devuelve número1 con un desplazamiento lógico a la izquierda de tantos bits como indique número2.  Si número2 es negativo, el desplazamiento es a la derecha.  Las entradas deben ser números enteros.

número:(ENTERO) Resultado del desplazamiento.

número1:(ENTERO).

número2:(ENTERO).

Ejemplo:

muestra desplazaizquierda 5 2; 101 DESPLAZAIZQUIERDA 2= 10100 = 20

20

muestra desplazaizquierda 20 -1

10


OPERACIONES LÓGICAS

Y

O

NO


Y

verdad Y tf1 tf2

verdad (Y tf1 tf2 tf3 ...)

Devuelve VERDADERO si las entradas tienen el valor VERDADERO, en otro caso, FALSO.  Todas las entradas  tienen un valor VERDADERO o FALSO

verdad:(BOOLEANO).

tf1:(BOOLEANO) Expresión VERDADERO o FALSO.

tf2:(BOOLEANO) Expresión VERDADERO o FALSO.

Ejemplo:

muestra y "verdadero "falso

falso

muestra y "verdadero "verdadero

verdadero


O

verdad O tf1 tf2

verdad (O tf1 tf2 tf3 ...)

Devuelve VERDADERO si una de las entradas es VERDADERO, en otro caso,  FALSO.  Todas las entradas deben tener un valor VERDADERO o FALSO.

verdad:(BOOLEANO).

tf1:(BOOLEANO) Expresión VERDADERO o FALSO.

tf2:(BOOLEANO) Expresión VERDADERO o FALSO.

Ejemplo:

muestra o "verdadero "falso

verdadero

muestra o "falso "falso

falso


NO

verdad NO tf

Devuelve VERDADERO si la entrada tiene el valor FALSO,  y viceversa.

verdad:(BOOLEANO).

tf1:(BOOLEANO) Expresión VERDADERO o FALSO.

Ejemplo:

muestra no "verdadero

falso


GRÁFICOS

El lenguaje Logo MSWLogo (Berkeley) proporciona los gráficos de la tortuga, tradicionales y extendidos.  Soporta múltiples tortugas pero no así las tortugas dinámicas como tampoco detecta las colisiones.

El centro de la ventana de gráficos es la posición  [0 0] de la tortuga.  Las posiciones  X  positivas están a la derecha; Las posiciones Y positivas están hacia arriba Y.  El rumbo (ángulos) se mide en grados en el sentido de las agujas del reloj desde el eje Y positivo (12:00), lo que es distinto  que la convención matemática de medir los ángulos  desde el eje X positivo (3:00).  La tortuga se representa como un triángulo isósceles; la posición  actual de la tortuga está indicada por el punto medio de la base (el lado mayor.)

MSWLogo  no es totalmente compatible con otros Logos (Berkeley Logo).

MÚLTIPLES TORTUGAS

MOVIMIENTO DE LA TORTUGA

PREGUNTAS SOBRE EL MOVIMIENTO DE LA TORTUGA

LA TORTUGA Y EL CONTROL DE LA VENTANA

USO DEL COLOR

PREGUNTAS SOBRE LA TORTUGA Y LA VENTANA

CONTROL DEL LÁPIZ

PREGUNTAS SOBRE EL LÁPIZ


MÚLTIPLES TORTUGAS

ACTIVA

TORTUGA

PONFORMATORTUGA

QUITADIBUJOTORTUGA


ACTIVA

ACTIVA tortuga

AC tortuga

Selecciona una tortuga.  Cada tortuga mantiene su rumbo propio (orientación en 3D), posición, y lápiz,  pero no el color del lápiz.  Cada tortuga puede representarse con  PONFORMATORTUGA.  Observe que el número  de tortugas comienza con  0 (tortuga por defecto).  Logo admite hasta 1024 tortugas, desde la 0 hasta la 1023 (ya que la primera tortuga es la 0 y no la 1).  Todas las tortugas entre 0 y la correspondiente al número  de tortuga seleccionado, permanecerán.  Así no escoja tortuga 100 y 200 si sólo necesita dos tortugas.  La primitiva  BORRAPANTALLA seleccionará automáticamente la tortuga 0 y desactivará  todas las otras tortugas.

tortuga:(ENTERO) Tortuga seleccionada.

Ejemplo:

repite 8 [activa cuentarepite-1 av 10*cuentarepite]

Hay 3 tortugas especiales que se usan en el modo  PERSPECTIVA.

Tortuga -1: Su posición representa la de sus ojos cuando mira una escena en 3D  (por defecto [400 400 600]).  Su orientación representa la dirección hacia arriba de la pantalla  (por defecto,  0).

Tortuga -2: Su posición representa donde parece que están los ojos cuando miran una escena en 3D (por defecto [0 0 0]).  No importa su orientación.

Tortuga -3: Su posición representa el lugar donde se encuentra la fuente de luz (por defecto [0 0 1000]).  No importa su orientación.  Esta tortuga sólo importa cuando se usa  EMPIEZAPOLIGONO y  TERMINAPOLIGONO.

Nunca se muestran estas tortugas especiales.  Cada vez que se usa  el modo PERSPECTIVA  se restablecen todas las tortugas especiales a su posición  y orientación por defecto.

Ejemplo 2 (3D):

perspectiva

bp

;Dibuja un cubo a cubo en el punto por defecto

repite 4 [repite 4 [av 100 gd 90] av 100 bajanariz 90]

bp

activa -1

ponxyz 500 500 500

activa 0

;Dibuja un cubo desde un nuevo punto

repite 4 [repite 4 [av 100 gd 90] av 100 bajanariz 90]


TORTUGA

tortuga TORTUGA

Devuelve el número correspondiente a la tortuga actual.  Para cambiar  a otra tortuga ver ACTIVA.

Ejemplo:

activa 8

muestra tortuga

8


PONFORMATORTUGA

PONFORMATORTUGA

PFT

La tortuga adquiere la forma del Bitmap que se encuentra en el Portapapeles. El Bitmap de la tortuga actual (Vea ACTIVA) se encuentra en el buffer (Vea CORTAAREA).  Desde el buffer pasa al Portapapeles.  Esto es, si  selecciona la tortuga 0 y se usa PONFORMATORTUGA la forma de la tortuga pasa al Portapapeles.  Observe que el Portapapeles sólo puede contener un bitmap.

Realice un dibujo en Paint y copie una parte en el Portapapeles.  Luego pase a  MSWLogo y seleccione la  tortuga 0 (por defecto) y pruebe con PONFORMATORTUGA.

 QUITADIBUJOTORTUGA y BORRAPANTALLA restauran la forma normal de la tortuga, pero no borran el bitmap que, mientras permanezca en el Portapapeles, puede volver a utilizar.

Ejemplo:

bp

sl

rotula 1

re 20

bl

cortaarea 20 20

ponformatortuga

av 100


QUITADIBUJOTORTUGA

QUITADIBUJOTORTUGA

Es la primitiva opuesta a  PONFORMATORTUGA.  Restaura la forma normal de la tortuga.

Ejemplo:

bp

sl

rotula 1

re 20

bl

cortaarea 20 20

ponformatortuga

av 100

quitadibujotortuga


MOVIMIENTO DE LA TORTUGA

AVANZA

RETROCEDE

GIRAIZQUIERDA

GIRADERECHA

BALANCEAIZQUIERDA

BALANCEA

BAJANARIZ

CABECEA

PONPOS

POSICIONATE

PONXY

PONXYZ

PONX

PONY

PONZ

CENTRO

PONRUMBO

PONBALANCEO

PONCABECEO

PONORIENTACION

ARCODEELIPSE

ELIPSE

ARCO

CIRCULO


AVANZA

AVANZA distancia

AV distancia

Mueve la tortuga hacia adelante, en la dirección de su rumbo, a la distancia especificada (medida en pasos de la tortuga).

distancia:(NÚMERO).

Ejemplo:

repite 4 [avanza 100 gd 90]


RETROCEDE

RETROCEDE distancia

RE distancia

Mueve la tortuga hacia atrás, esto es, en la dirección opuesta a su rumbo, a la distancia especificada.  (El rumbo de la tortuga no cambia.)

distancia:(NÚMERO).

Ejemplo:

repite 4 [re 100 gd 90]


GIRAIZQUIERDA

GIRAIZQUIERDA ángulo

GI ángulo

La tortuga gira en sentido contrario a las agujas del reloj en el ángulo especificado, medido en grados (1/360 de la circunferencia).

ángulo:(NÚMERO).

Ejemplo:

repite 3 [av 100 gi 120]


GIRADERECHA

GIRADERECHA ángulo

GD ángulo

La tortuga gira en el mismo sentido que las agujas del reloj en el ángulo especificado, medido en grados (1/360 de la circunferencia).

ángulo:(NÚMERO).

Ejemplo:

repite 3 [av 100 gd 120]


BALANCEAIZQUIERDA

BALANCEAIZQUIERDA ángulo

CAI ángulo

La tortuga gira a la izquierda en el  ángulo especificado, medido en grados (1/360 de la circunferencia).

Esta primitiva trabaja en modo PERSPECTIVA.

ángulo:(NÚMERO).

Ejemplo:

perspectiva

balanceaizquierda 45

repite 3 [av 100 gi 120]


BALANCEA

BALANCEA ángulo

BAL ángulo

La tortuga gira a la izquierda en el  ángulo especificado, medido en grados (1/360 de la circunferencia).

Esta primitiva  trabaja en modo PERSPECTIVA.

ángulo:(NÚMERO).

Ejemplo:

perspectiva

balancea 45

repite 3 [av 100 gd 120]


BAJANARIZ

BAJANARIZ ángulo

BAJAN ángulo

La tortuga inclina la nariz hacia abajo en el ángulo especificado, medido en grados (1/360 de la circunferencia). Esta primitiva trabaja en modo PERSPECTIVA.

ángulo:(NÚMERO).

Ejemplo:

perspectiva

bajanariz 45

repite 3 [av 100 gd 120]


CABECEA

CABECEA ángulo

La tortuga inclina la nariz hacia abajo en el ángulo especificado, medido en grados (1/360 de la circunferencia). Esta primitiva trabaja en modo PERSPECTIVA.

ángulo:(NÚMERO).

Ejemplo:

perspectiva

cabecea 45

repite 3 [av 100 gd 120]


PONPOS

PONPOS posición

Mueve la tortuga a las coordenadas absolutas X, Y.  El argumento es una lista de dos números, las coordenadas X e Y.  Vea también POS.

posición:(LISTA).

Ejemplo 1:(dibuja un cuadrado)

bp

ponpos [0 100]

ponpos [100 100]

ponpos [100 0]

ponpos [0 0]

Ejemplo 2: (Con un error frecuente)

haz "x 0

haz "y 100

ponpos [:x :y]

ponpos no me gusta [:x :y] como entrada

ponpos (lista :x :y)

¿Por qué?,  [:x :y] es una lista con dos palabras  :x e :y. En cambio(lista :x :y) CONSTRUYE una lista con los dos valores contenidos en  :x e :y.  Se puede ver con más claridad usando MUESTRA.

muestra [:x :y]

[:x :y]

muestra (lista :x :y)

[0 100]


POSICIONATE

POSICIONATE posición

Mueve la tortuga a las coordenadas absolutas X, Y, Z.  El argumento es una lista de tres  números, las coordenadas X, Y y Z. Esta primitiva trabaja en modo PERSPECTIVA.  Vea también POS3D.

posición:(LISTA).

Ejemplo:(dibuja un cubo)

perspectiva

posicionate [0 100 0]

posicionate [100 100 0]

posicionate [100 0 0]

posicionate [0 0 0]

posicionate [0 0 100]

posicionate [100 0 100]

posicionate [100 100 100]

posicionate [0 100 100]

posicionate [0 0 100]

posicionate [0 100 100]

posicionate [0 100 0]

posicionate [100 100 0]

posicionate [100 100 100]

posicionate [100 0 100]

posicionate [100 0 0]


PONXY

PONXY xcor ycor

Mueve la tortuga a las coordenadas absolutas X, Y.  Requiere dos argumentos  numéricos, las coordenadas X , Y.  Vea también  POS.

xcor:(NÚMERO) coordenada X.

ycor:(NÚMERO) coordenada Y.

Ejemplo (dibuja una curva seno):

repite 360 [ponxy cuentarepite 100*sen cuentarepite]


PONXYZ

PONXYZ xcor ycor zcor

Mueve la tortuga a las coordenadas absolutas X, Y, Z.  Los  argumentos son  tres  números, las coordenadas X, Y y Z. Esta primitiva  trabaja en modo PERSPECTIVA. Vea también POSICIONATE.

xcor:(NÚMERO) coordenada X.

ycor:(NÚMERO) coordenada Y.

zcor:(NÚMERO) coordenada Z.

Ejemplo: (dibuja la misma curva seno en 3D)

perspectiva

desde [i 0 360 10] ~

   [

   desde [j 0 360] [PONXYZ :j :i*sen :j -:i]

   sl

   PONXYZ 0 0 -:i

   bl

   ]


PONX

PONX xcor

Mueve la tortuga a lo largo del eje  X desde la posición actual a una nueva coordenada absoluta X.  El argumento es la nueva coordenada X.  Vea  PONY y PONZ.

xcor:(NÚMERO) La nueva coordenada X.

Ejemplo:

ponx 100

pony 100

ponx 0

pony 0


PONY

PONY ycor

Mueve la tortuga a lo largo del eje Y, desde la posición actual a la nueva coordenada absoluta Y.  El argumento es la nueva coordenada Y.  Ver  PONX y PONZ.

ycor:(NÚMERO) La nueva coordenada Y.

Ejemplo:

ponx 100

pony 100

ponx 0

pony 0


PONZ

PONZ zcor

Mueve la tortuga a lo largo del eje Z, desde la posición actual a una nueva coordenada absoluta Z.  El argumento es la nueva coordenada Z. Esta primitiva trabaja en modo PERSPECTIVA.. Vea  PONX y PONY.

zcor:(NÚMERO) La coordenada Z.

Ejemplo:

perspectiva

sl ponx 100 bl

ponz 100

pony 100

ponz 0

pony 0


CENTRO

CENTRO

Sitúa la tortuga en el centro de la pantalla.  Equivale a PONPOS [0 0].

Ejemplo:

ponxy 100 100

centro


PONRUMBO

PONRUMBO ángulo

PONR ángulo

Cambia el rumbo de la tortuga por un nuevo rumbo absoluto.  El argumento es un ángulo, el rumbo se mide en grados según el movimiento de las agujas del reloj desde el eje X.  Ver  RUMBO.  Si se está en modo PERSPECTIVA, el rumbo en grados es positivo desde el eje positivo X hasta el eje positivo Y rotando alrededor del eje Z.

ángulo:(NÚMERO) Ángulo en grados que fija el rumbo.

Ejemplo:

ponrumbo 45

muestra rumbo

45


PONBALANCEO

PONBALANCEO ángulo

La tortuga realiza un nuevo giro positivo, desde el eje positivo X  hasta el eje negativo, rotando alrededor del eje Y.  Vea Orientación en 3D.  Esta primitiva se utiliza en modo  PERSPECTIVA.  Vea también  BALANCEO?.

ángulo:(NÚMERO) Ángulo en grados del giro.

Ejemplo:

perspectiva

ponbalanceo 45

muestra balanceo?

45


PONCABECEO

PONCABECEO ángulo

Produce una nueva inclinación positiva desde el eje negativo Z hasta el eje,  rotando alrededor del eje X. Vea Orientación en 3D.  Esta primitiva  trabaja en modo  PERSPECTIVA.  Vea también CABECEO?.

ángulo:(NÚMERO) : Inclinación, medida en grados.

Ejemplo:

perspectiva

poncabeceo 45

muestra cabeceo?

45


PONORIENTACION

PONORIENTACION lista 	(Procedimiento de la librería)

Cambia la orientación de la tortuga por una nueva orientación absoluta.  El argumento es una lista.  Vea Orientación in 3D.  Esta orden está diseñada para trabajar en modo PERSPECTIVA.  Vea también  ORIENTACION.

lista:(LISTA) Lista con  3 ángulos, [giro, inclinación, rumbo] en grados, que fijan la orientación.

Ejemplo:

ponorientacion [180 45 90]

muestra orientacion

[180 45 90]


ARCODEELIPSE

ARCODEELIPSE ángulo menor mayor principioángulo  (Procedimiento de la librería)

ELIPSA2 ángulo menor mayor principioángulo 	(Procedimiento de la librería)

ARCODEELIPSE no mueve la tortuga.  Dibuja una parte o la totalidad de una elipse,  según el  rumbo, posición de la tortuga y los argumentos.  El tamaño depende de los valores  menor y mayor. La posición de la tortuga quedará en el centro de la elipse.  Menor es la distancia más corta desde la elipse hasta el centro.  Mayor es la distancia más larga desde la elipse hasta el centro.  ELIPSA2 dibuja la elipse desde el borde donde queda  finalmente posicionada.

ángulo:(NÚMERO).

menor:(NÚMERO).

mayor:(NÚMERO).

principioángulo:(NÚMERO).

Ejemplo:

arcodeelipse 360 100 200 0

bp

arcodeelipse 90 50 50 0

bp

arcodeelipse 90 50 50 90

Ejemplo:

perspectiva

repite 72 [arcodeelipse 90 100 150 45 bal 5]


ELIPSE

ELIPSE menor mayor	(Procedimiento de la librería)

ELIPSE2 menor mayor	(Procedimiento de la librería)

ELIPSE no mueve la tortuga.  Dibuja una elipse, según el  rumbo, posición de la tortuga y  argumentos.  El tamaño viene determinado por los valores menor y mayor. Al finalizar, la tortuga queda posicionada en el centro de la elipse. Menor es la distancia más corta desde la elipse hasta el centro.  Mayor es la distancia más larga desde la elipse hasta el centro.  ELIPSE2 dibuja la elipse desde el borde donde queda  finalmente posicionada.

menor:(NÚMERO).

mayor:(NÚMERO).

Ejemplo:

elipse 100 200

bp

elipse 50 50

bp

elipse 50 50

Ejemplo (en 3D):

perspectiva

bp

repite 72 [elipse 200 100 bal 5 av 5]


ARC

ARC ángulo radio	(Procedimiento de la librería)

ARC2 ángulo radio	(Procedimiento de la librería)

ARC no mueve la tortuga.  Dibuja un arco (parte de la circunferencia), según el rumbo, posición de la tortuga y argumentos.  El tamaño depende del radio.  Al finalizar, la tortuga queda posicionada en el centro del arco.  ARC 360 dibuja una circunferencia.  ARC2 dibuja el arco desde el borde donde queda  finalmente posicionada.

ángulo:(NÚMERO).

radio:(NÚMERO).

Ejemplo:

arc 360 100

arc 90 50

Ejemplo (en 3D):

perspectiva

repite 36 [bal 10 arc2 180 100 arc2 -180 100]


CIRCULO

CIRCULO radio	(Procedimiento de la librería)

CIRCULO2 radio	(Procedimiento de la librería)

CIRCULO no mueve la tortuga.  Dibuja un círculo, según el rumbo,  posición de la tortuga y  argumentos.  El tamaño depende del radio. Al finalizar, la tortuga queda posicionada en el centro del círculo.  CIRCULO2 dibuja el círculo desde el borde donde queda  finalmente posicionada.

Ejemplo:

circulo 100

circulo 50

Ejemplo (una esfera en 3D):

perspectiva

repite 72 [circulo 100 bal 5]


PREGUNTAS SOBRE EL MOVIMIENTO DE LA TORTUGA

POS

POS3D

COORX

COORY

COORZ

RUMBO

BALANCEO?

CABECEO?

ORIENTACION

HACIA

HACIAXYZ

DISTANCIA

DISTANCIAXYZ

PIXEL

RONZAL


POS

pos POS

Devuelve la posición actual de la tortuga, como una lista de dos números, las coordenadas X e Y.

pos:(LISTA).

Ejemplo:

ponpos [100 100]

muestra pos

[100 100]


POS3D

pos POS3D

Devuelve la posición actual de la tortuga, como una lista de tres números, las coordenadas X, Y y Z.  Esta orden está diseñada para trabajar en modo PERSPECTIVA.

pos:(LISTA).

Ejemplo:

perspectiva

ponxyz 100 100 50

muestra pos3d

[100 100 50]


COORX

xcor COORX	(Procedimiento de la librería)

Devuelve un número, la coordenada X de la tortuga.

xcor:(NÚMERO) coordenada actual X.

Ejemplo:

ponx 100

muestra coorx

100


COORY

COORY	(Procedimiento de la librería)

Devuelve un número, la coordenada Y de la tortuga.

ycor:(NÚMERO) coordenada actual Y.

Ejemplo:

pony 100

muestra coory

100


COORZ

COORZ	(Procedimiento de la librería)

Devuelve un número, la coordenada Z de la tortuga.. Está orden está diseñada para trabajar en modo PERSPECTIVA.

coorz:(NÚMERO) Actual coordenada Z.

Ejemplo:

perspectiva

ponz 100

muestra coorz

100


RUMBO

ángulo RUMBO

Devuelve un ángulo que indica el rumbo de la tortuga en grados. VEA también PONRUMBO.

ángulo:(NÚMERO) Ángulo en grados, que indica el actual rumbo de la tortuga.

Ejemplo:

ponrumbo 90

muestra rumbo

90


BALANCEO?

ángulo BALANCEO?

Devuelve un ángulo, que indica el balanceo de la tortuga.  Vea Orientación in 3D.  Vea también  PONBALANCEO.  Esta orden está diseñada para trabajar en modo PERSPECTIVA.

ángulo:(NÚMERO) Ángulo, en grados, que indica el balanceo actual.

Ejemplo:

ponbalanceo 90

muestra balanceo?

90


CABECEO?

ángulo CABECEO?

Devuelve un ángulo que indica el cabeceo de la tortuga en grados.  Ver  Orientación en 3D.  Vea también PONCABECEO.  Esta primitiva sólo trabaja en modo PERSPECTIVA.

ángulo:(NÚMERO).

Ejemplo:

poncabeceo 90

muestra cabeceo?

90


ORIENTACION

lista ORIENTACION    (Procedimiento de la librería)

Devuelve una lista  con el balanceo, cabeceo y rumbo de la tortuga en grados.  Vea  Orientación en 3D.  Vea también  PONORIENTACION.  Esta orden trabaja sólo en modo PERSPECTIVA.

lista:(LISTA).

Ejemplo:

ponorientacion [180 45 90]

muestra orientacion

[180 45 90]


HACIA

ángulo HACIA  pos

Devuelve un ángulo que indica el rumbo en grados que debe tomar la tortuga para moverse desde su posición actual  hasta otra que se indica en el argumento pos.

ángulo:(NÚMERO) .

pos:(LISTA) Lista con dos números que representan las coordenada X,Y hacia donde se desplazará la tortuga.

Ejemplo:

muestra rumbo [100 100]

45

ponrumbo hacia [300 400] av distancia [300 400]


HACIAXYZ

lista HACIAXYZ pos

Devuelve un ángulo que indica el rumbo en grados que debe tomar la tortuga para moverse desde su posición actual  hasta otra que se indica en el argumento pos.  Esta primitiva sólo trabaja en modo PERSPECTIVA.

lista:(LISTA) Una lista con 3 ángulos (orientación), balanceo, cabeceo y rumbo en grados.

pos:(LISTA) Lista con tres números que representan las coordenadas deseadas: X,Y,Z.

Ejemplo:

muestra haciaxyz [100 100 0]

[0 0 45]

ponorientacion haciaxyz [100 100 100] av distanciaxyz [100 100 100]


DISTANCIA

dist DISTANCIA pos	(Procedimiento de la librería)

Devuelve un número que indica la distancia que la tortuga tiene que recorrer en línea recta hasta llegar a la posición que se indica en el argumento pos.

dist:(NÚMERO) .

pos:(LISTA) Lista con dos números  que representan las coordenadas deseadas X, Y.

Ejemplo:

muestra hacia [0 100]

100

muestra hacia [300 400]

500

ponrumbo hacia [300 400] av distancia [300 400]


DISTANCIAXYZ

dist DISTANCIAXYZ pos	(Procedimiento de la librería)

Devuelve un número que indica la distancia que la tortuga tiene que recorrer en línea recta hasta llegar a la posición que se indica en el argumento pos, con las coordenadas X, Y y Z.  Esta orden sólo se utiliza en modo  PERSPECTIVA.

dist:(NÚMERO).

pos:(LISTA) Lista con tres números,  las coordenada  X,Y,Z.

Ejemplo:

muestra haciaxyz [0 100 0]

100

muestra haciaxyz [100 100 100]

173.205080756888

ponorientacion haciaxyz [100 100 100] av distanciaxyz [100 100 100]


PIXEL

colorvector PIXEL

Devuelve una lista con los números que representan la intensidad de los colores Rojo, Verde y Azul del pixel que se encuentra bajo la tortuga.  Para más detalles sobre colorvector,  vea  USO DEL COLOR.  Vea también PONPIXEL.

colorvector:(LISTA) Lista con tres enteros que indican la intensidad de los colores ROJO, Verde y Azul en un rango 0-255.

Ejemplo:

muestra pixel

[255 255 255]

av 1

muestra pixel

[255 255 255]

re 1

muestra pixel

[0 0 0]

Pixel puede usarse en modo PERSPECTIVA pero se verá siempre en 2D.


RONZAL

radio RONZAL

Devuelve una lista con dos números,  X e Y , que se utilizan con PONRONZAL,  (aunque PONRONZAL toma dos  números como entrada, no una lista  de números.)

radio:(LISTA).

Ejemplo:

ponronzal 2.0 1.0

repite 4 [av 100 gd 90]

muestra ronzal

[2 1]


LA TORTUGA Y EL CONTROL DE LA VENTANA

MUESTRATORTUGA

OCULTATORTUGA

LIMPIA

BORRAPANTALLA

ENVOLVER

MODOVENTANA

CERCA

RELLENA

ROTULA

PONPIXEL

PONTAMAÑOTIPO

TIPO

TAMAÑOTIPO

TEXTSCREEN

FULLSCREEN

SPLITSCREEN

PONRONZAL

REFRESH

NOREFRESH

PONLUPA

DESPLAZAX

DESPLAZAY

PONFOCO

LEEFOCO

ICONO

NOICONO

ACTIVAVENTANA

PERSPECTIVA

ORIENTACIÓN EN 3D

CUERPOS SÓLIDOS EN  3D


MUESTRATORTUGA

MUESTRATORTUGA

MT

Hace  visible la tortuga.

Ejemplo:

ocultatortuga

muestratortuga


OCULTATORTUGA

OCULTATORTUGA

OT

La tortuga es invisible.  Es una buena idea emplear esta primitiva cuando la tortuga realiza un dibujo complicado, porque cuando está oculta aumenta la velocidad.

Ejemplo:

ocultatortuga

muestratortuga


LIMPIA

LIMPIA

Borra todas las líneas que la tortuga dibujó en la ventana de gráficos. El estado de la tortuga  (posición,  rumbo, modo del lápiz, etc.) no cambia.

Ejemplo:

ponxy 100 100

limpia


BORRAPANTALLA

BORRAPATALLA

BP

Borra los gráficos de la ventana y envía la tortuga a su posición y rumbo inicial.  Equivale a CENTRO y LIMPIA.

Ejemplo:

ponxy 100 100

borrapantalla


ENVOLVER

ENVOLVER

La tortuga se encuentra en modo ENVOLVER :  cuando la tortuga sobrepasa los límites de la pantalla por uno de sus bordes, aparece por el borde opuesto.  Es el modo inicial de la tortuga.  Existen otros dos modos: MODOVENTANA y CERCA.

Ejemplo:

modoventana

av 950

bp

envolver

av 950


MODOVENTANA

MODOVENTANA

La tortuga se encuentra en el modo MODOVENTANA:  si se pide que la tortuga se mueva fuera de los límites de la pantalla,  se alejará de ella.  La ventana visible de gráficos se considera como una parte de un plano gráfico infinito; la tortuga puede estar en cualquier parte del plano.  (Si pierde la tortuga, CENTRO la devolverá al centro de la pantalla.)  Existen otros dos modos ENVOLVER y CERCA.

Ejemplo:

modoventana

av 950

bp

envolver

av 950


CERCA

CERCA

La tortuga se encuentra en modo CERCA: si se pide que la tortuga se mueva fuera de los límites de la pantalla,   se moverá hasta el límite de la pantalla,  donde se detendrá, al tiempo que aparece un mensaje de error "fuera de límites".  Existen otros dos modos ENVOLVER y MODOVENTANA.

Ejemplo:

modoventana

av 950

bp

cerca

av 950

tortuga fuera de límites


PERSPECTIVA

PERSPECTIVA

La tortuga se encuentra en modo perspectiva, con una tercera dimensión (eje Z).  Perspectiva es un término que describe cómo se representa una realidad en 3 dimensiones en una superficie de 2 dimensiones.  Debe conocer como trabaja MSWLogo en 2D antes de pasar  al modo 3D.

Todo lo referente a 2D puede aplicarse a 3D (modo perspectiva).  Por ejemplo, si tiene un procedimiento que dibuja una estrella en  2D, con el mismo código puede colocar una estrella sobre las seis caras de un cubo, colocando a la tortuga en la orientación y en las coordenadas correctas en  3D,  antes del código 2D que dibujaría una estrella. Podrá manejar la tortuga como si fuese un avión.

Los aviones tienen 3 controles para moverse en un espacio en 3D.  Elevadores de la cola,  un timón en la aleta y alerones en las alas.  MSWLogo tiene siempre una especie de timón para mover la tortuga hacia la derecha e izquierda.  Ahora cuenta con mandos adicionales, como alerones para balancear a la izquierda y derecha y elevadores hacia arriba y abajo para manejar un espacio en 3D.  Ahora cuenta con un infinito número de aviones (geométricos, claro)  para volar en cada uno con cualquier orientación.  Una vez que la tortuga se encuentra en el avión deseado, se puede usar las conocidas primitivas de 2D  (AVANZA, RETROCEDE, GIRAIZQUIERDA, GIRADERECHA).

Cuando comience en (X=0,Y=0,Z=0), el eje +Y todavía permanece en la pantalla y el eje +X está a la derecha de la pantalla. Pero ahora puede introducirse en la pantalla (lejos de usted) o “salirse” de la pantalla ( cerca de usted).  ¿Cómo? De la misma forma en que  vuela un avión. Cuando un avión gira a la derecha no cambia su trayectoria, y tampoco lo hace el MSWLogo. Pero si usted girase 90 grados a la derecha y entonces tomase un giro a la derecha, imagínese lo que pasaría. Usted bajaría en picado muy, muy rápido. Piense en una tortuga de verdad en el suelo. Ahora hágala girar hacia su derecha . Ahora, si toma un giro hacia la derecha hacia su pata delantera derecha ( como siempre lo hacen) querrá bajar al suelo. Déjela que gire y dese cuenta cómo su nariz estará apuntando hacia el suelo. Avanzará ahora hacia abajo en el eje Z (lejos de usted).

Vea ORIENTACIÓN EN 3D.

Aquí tiene un resumen de la relación entre los comandos en modo 2D y modo 3D. Muchos comandos se repiten en ambas columnas porque les ha afectado estar en el modo 3D.

2D	3D
Ponxy	ponxy (z actual)
	Ponxyz
ponx (y actual)	ponx (y z actuales)
pony (x actual)	pony (x  z actuales)
	Ponz
Coorx	Coorx
Coory	Coory
	Coorz
Pos	pos (z dropped)
	Pos3d
Ponpos	ponpos (z  actual)
	Posicionate
Hacia	Hacia
	Haciaxyz
Distancia	Distancia
	Distanciaxyz
Rumbo	Rumbo
	Balanceo?
	Cabeceo?
	Orientacion
Ponrumbo	Ponrumbo
	Ponbalanceo
	Poncabeceo
	Ponorientacion
Giraderecha (gd)	giraderecha (gd) (avión actual)
	balancea (bal)
	cabecea
Giraizquierda (gi)	giraizquierda (gi) (avión actual)
	balanceaizquierda (cai)
	bajanariz (bajan)
Modoventana	Perspectiva
Envolver
Cerca
activa 0-1023	activa 0-1023
	activa -1
	activa -2
Arcodeelipse	arcodeelipse

Limitaciones:

Hay varios comandos que trabajarán en 3D pero que aun así se comportarán como  2D. Su acción tendrá lugar en la correcta coordenada X, Y, Z. Pero la orientación será limitada a un plano 2D. Por ejemplo, no puede dibujar texto con ROTULA en los 6 lados de un cubo. Pero si en los 8 vértices del cubo, cada etiqueta puede ser correctamente situada en cada “vértice” utilizando maniobras 3D. No hay nada que le impida construir una galería alfabeto de “3D block letter” mediante vectores 3D.

ROTULA

CORTAAREA

PEGA

COPIAAREA

RECTANGULORRELLENO

RELLENA

PIXEL

PONPIXEL

El modo perspectiva  no realiza eliminaciones de líneas ocultas. La eliminación de líneas ocultas requiere que los objetos se compongan de polígonos.

El modo perspectiva no le permite mover dinámicamente la perspectiva visual (de una mosca…etc.) Esto es debido a que MSWLogo no almacena su objeto (sus vectores) en  3D por razones de funcionamiento. Los almacena en un mapa 2D de bits, como siempre lo ha hecho. Sin embargo, usted puede hacer manipulaciones dinámicas “rápidas” de otras 2 maneras.

Una manera sencilla es mantener su escena muy simple (en lo que concierne a la actuación de su ordenador). Simplemente despeje la pantalla y cambie la perspectiva  visual (tortuga-1) o el emplazamiento de los objetos y dibuje de nuevo. Fíjese en que los objetos curvados (como aquellos basados en ARCODEELIPSE) generan muchos vectores. La otra opción es grabar cada “escena” en un mapa de bits y reproducirlos de nuevo a la velocidad  que usted desee. No importa que esté usted “grabando” escenas 2D o 3D, da lo mismo. Esto vendrá delimitado por la cantidad de memoria de la que disponga su ordenador.


RELLENA

RELLENA

Rellena de color una región de la ventana de gráficos, en la que se encuentra la tortuga y que está limitada por líneas previamente dibujadas. No trabaja de la misma manera en máquinas diferentes.

Ejemplos:

repite 4 [av 100 gd 90]

gd 45

sl

av 20

rellena

Rellena puede usarse en modo PERSPECTIVA para rellenar de un determinado color las caras visibles de un objeto.  Por ejemplo, de un cubo no dibuja las 6 caras, sólo 3 como máximo permanecen visibles.

Ejemplo (3D):

para cuadrado :color

repite 4 [av 100 gd 90]

sl

gd 45

av 50

poncolorrelleno :color

rellena

re 50

gi 45

bl

fin

para cubo

perspectiva

balancea 45

bajan 45

cuadrado [255 0 0]

balancea 90

cuadrado [0 255 0]

cabecea 90

cuadrado [0 0 255]

fin


ROTULA

ROTULA texto

RO texto

Escribe en la pantalla de gráficos la entrada, que debe ser una palabra o una lista; si es una lista, cualquier sub-lista estará delimitada por corchetes, pero la totalidad del objeto no estará entre corchetes.  Puede escribir cualquier objeto de Logo  (números, listas y cadenas).  Observe que el origen de la cadena es  el principio de la esquina derecha de la cadena.  Las cualidades del texto dependen del dispositivo (pantalla o impresora), del tamaño, rumbo de la tortuga (dirección) y de la fuente.  En otras palabras, a veces se puede dibujar el texto cerca del rumbo de la tortuga y a veces no.  A veces no se imprimirá exactamente como aparece en pantalla.

texto:(OBJETO).

El color del  texto se fija con  PONCOLORLAPIZ.

La posición del texto se fija mediante  PONPOS .

La fuente del  texto se fija con  PONTAMAÑOTIPO o desde el Menú con TIPO DE LETRA.

El ángulo del  texto se fija con  GIRAIZQUIERDA, GIRADERECHA, PONRUMBO.

El tamaño del  texto se obtiene con TAMAÑOTIPO.

Ejemplo:

rotula "Hola

Rotula puede usarse en modo PERSPECTIVA pero el texto no estará en el mismo plano que la tortuga aunque estará en la posición correcta.  Atenderá al rumbo de la tortuga para orientar el texto.

Ejemplo (rotula en un eje 3D)

para ejes

pontamañotipo[[Courier New] -19 0 0 700 0 0 0 0 3 2 1 49]

gd 90

pony 200

rotula "+Y

pony -200

rotula "-Y

pony 0

ponx 200

rotula "+X

ponx -200

rotula "-X

ponx 0

ponz 200

rotula "+Z

ponz -200

rotula "-Z

ponz 0

gi 90

fin

perspectiva

bp

activa –1

posicionate [600 600 800]

activa 0

ejes


PONPIXEL

PONPIXEL colorvector

Pone el pixel que está debajo de la tortuga con el color colorvector.  Colorvector es una lista con las intensidades de los colores [Rojo Verde Azul]. Para una explicación de colorvector  vea USO DEL COLOR.  PONPIXEL funciona como PONCOLORLAPIZ colorvector AV 1 SL RE 1 BL, pero mucho más rápido.  Combinando PONPIXEL con la primitiva PIXEL , puede "examinar" y redibujar una imagen con una nueva orientación (por ejemplo, la rotación de un bitmap).

colorvector:(LISTA) Lista de tres enteros representando la intensidad de Rojo, Verde, azul en el rango 0-255.

Ejemplo:

sl

ponxy -128 -128

desde [rojo 0 255] [desde [verde 0 255] [ponpixel (lista :rojo :verde 0) av 1] re 256 gd 90 av 1 gi 90]

Ponpixel puede usarse en modo PERSPECTIVA pero sólo se verá el "último" pixel.

Ejemplo (Rotación de una imagen en 2D en un espacio de 3D):

VER Ejemplos\3D\3DBITMAP.LGO ejemplo.


PONTAMAÑOTIPO

PONTAMAÑOTIPO font

PTT font

La entrada es una lista con la estructura de la fuente.  Una fuente determina qué caracteres aparecerán en pantalla cuando se utilice la primitiva ROTULA.  Las fuentes disponibles dependen de su computadora.  MSWLogo tiene dos formas de especificar la fuente deseada.  La primitiva PONTAMAÑOTIPO puede usarse en los programas.  En modo interactivo puede utilizar la opción del Menú  TIPO DE LETRA .

Fuente:(LISTA) que contiene la siguiente información: [[NombreFuente] Altura Anchura Orientación Peso Itálica Subrayado Tachada PonCarácter PrecisiónSalida ClipPrecisión Cualidad InclinaciónyFamilia].

NombreFuente:(LISTA) Nombre de la fuente.

Altura:(ENTERO) Altura deseada en unidades lógicas. Si este valor es mayor que cero, especifica la altura de la celda de la fuente. Si es menor que cero, especifica la altura del carácter de la fuente.

Anchura:(ENTERO) Anchura de la fuente en unidades lógicas.

Orientación:(ENTERO) Orientación deseada de la fuente, en grados.

Peso:(ENTERO) Peso de la fuente. Este miembro tiene un rango entre 0 y 900 con incrementos de 100.  Un valor  0 significa que se usa el peso por defecto.

Itálica:(ENTERO) Una fuente cursiva si no es cero.

Subrayado:(ENTERO) Especifica subrayado si no es cero.

Tachada:(ENTERO) Especifica tachado si no es cero.

PonCarácter:(ENTERO) Especifica el carácter.

PrecisiónSalida:(ENTERO) Especifica la precisión de salida.

ClipPrecisión:(ENTERO) Especifica la precisión de corte.

Cualidad:(ENTERO) Especifica la cualidad.

InclinaciónyFamilia:(ENTERO) Especifica la inclinación y familia de la fuente.

Ejemplo:

pontamañotipo [[Times New Roman] -24 0 0 400 0 0 0 0 3 2 1 18]

rotula "Hola


TIPO

fuente TIPO

Devuelve una lista que describe la fuente actual.

Fuente:(LISTA) que contiene la siguiente información: [[NombreFuente] Altura Anchura Orientación Peso Itálica Subrayado Tachada PonCarácter PrecisiónSalida ClipPrecisión Cualidad InclinaciónyFamilia].

Vea en PONTAMAÑOTIPO la definición de los miembros de LISTA.

Ejemplo:

pontamañotipo [[Times New Roman] -24 0 0 400 0 0 0 0 3 2 1 18]

muestra tipo

[[Times New Roman] -24 0 0 400 0 0 0 0 3 2 1 18]


TAMAÑOTIPO

tamaño TAMAÑOTIPO texto

Esta primitiva devuelve el tamaño de un texto.  La entrada,  una palabra o lista será la misma que se emplearía en ROTULA.  Puede utilizar esta información  para  "preparar" una localización del texto.

tamaño:(LISTA) Lista de 2 enteros [anchura altura] del texto de la fuente actual.

texto:(OBJETO) Cualquier objeto a escribir.

Ejemplo:

muestra tamañotipo "Hola

[44 24]


TEXTSCREEN

TEXTSCREEN

TS

(No soportado en MSWLogo de momento)


FULLSCREEN

FULLSCREEN

FS

(No soportado en MSWLogo de momento)


SPLITSCREEN

SPLITSCREEN

SS

(No soportado en MSWLogo de momento)


PONRONZAL

PONRONZAL xescala yescala

(No se necesita esta primitiva en MSWLogo, pero está disponible para quienes prefieren  ("deliberadamente ajustar el aspecto de la proporción").

Ajusta el aspecto de la proporción y la escala de las imágenes gráficas.  Después de usar esta primitiva, todos   los movimientos de la tortuga se ajustarán multiplicando  la extensión horizontal y vertical del movimiento por los dos números indicados en la entrada.  Por ejemplo, después de la primitiva "PONRONZAL 2 1" con un rumbo de 45 grados, cualquier movimiento será el doble en sentido horizontal y el vertical a la medida indicada.  Si sus cuadrados no parecen cuadrados, pruebe esta primitiva.  (Alternativamente, puede ajustar el aspecto de la proporción en el dibujo de una elipse.)

En máquinas UNIX y Macintosh, ambos factores son inicialmente 1.  En máquinas DOS, los factores son inicialmente fijos, de acuerdo con lo indicado por el hardware, pero a veces el hardware miente.

xescala:(NÚMERO) componente X.

yescala:(NÚMERO) componente Y.

Ejemplo:

ponrumbo 45

ponronzal 2.0 1.0

repite 4 [av 100 gd 90]

muestra ronzal

[2 1]


REFRESH

REFRESH

(No soportado en MSWLogo de momento)


NOREFRESH

NOREFRESH

(No soportado en MSWLogo de momento)


PONLUPA

PONLUPA escala

Este primitiva deja que LOGO controle la escala de la ventana "Pantalla".  El argumento es el valor   de la ampliación (escala).  Un número mayor que 1,0 aumenta más  (p.e. 2,0 le hace el doble), un número menor que 1,0 dibuja a tamaño más reducido. Si una imagen existente está en la pantalla cuando se hace zoom se estirará o empequeñecerá, según el zoom.  Vea también  Menu ZOOM.

escala:(NÚMERO).

El zoom normal es 1.0 y así dibuja con un aspecto normal. Cualquier dibujo hecho con un zoom  de 0.5 o 2.0 aparece como "dentado” pero recobra su aspecto normal con un zoom de 1.0.

NOTA: Ponlupa trabaja mejor si escoge un factor múltiplo de 2 o un número dividido entre 2.  Por ejemplo 2, 4, 8, 1/2 (0.5), 1/4 (0.25), 1/8 (0.125) etc.

Ejemplo:

repite 4 [av 100 gd 90]

ponlupa 0.5

ponlupa 2.0

ponlupa 1.0


DESPLAZAX

DESPLAZAX  deltax

Esta primitiva deja que LOGO controle el desplazamiento horizontal de la ventana "Pantalla".  El argumento es el valor del desplazamiento (delta). Un número positivo desplaza a la derecha y un número negativo a la izquierda.  Si (delta) está  a 0 el desplazamiento restablecerá a cuando estaba en la posición central.

deltax:(ENTERO).

Ejemplo:

repite 10 [desplazax 10]


DESPLAZAY

DESPLAZAY deltay

Esta primitiva deja que LOGO controle el desplazamiento vertical de la ventana "Pantalla".  El argumento es el valor del desplazamiento (delta). Un número positivo desplaza hacia arriba y un número negativo hacia abajo.  Si (delta) está  a 0 el desplazamiento restablecerá a cuando estaba en la posición central.

deltay:(ENTERO).

Ejemplo:

repite 10 [desplazay 10]


PONFOCO

PONFOCO caption

Esta primitiva deja que LOGO controle que ventana tiene el foco. La ventana deseada se especifica por su título.  Vea también LEEFOCO.

caption:(LISTA) Es el título de la ventana que va a recibir el foco.

Ejemplo:

ponfoco [Pantalla de MSWLogo]


LEEFOCO

caption LEEFOCO

Esta primitiva devuelve el título de la ventana que tiene el foco (ventana activa). Vea también  PONFOCO.

caption:(PALABRA).

Ejemplo:

ponfoco [Pantalla de MSWLogo]

muestra leefoco

[Pantalla de MSWLogo]


ICONO

ICONO caption	(Procedimiento de la librería)

Este procedimiento deja que LOGO minimice la ventana especificada en  caption (título), en forma de un icono. Vea también NOICONO.

caption:(LISTA).

Ejemplo:

icono "Trabajo

noicono "Trabajo


NOICONO

NOICONO caption	(Procedimiento de la librería)

Esta primitiva deja que LOGO restaure la ventana especificada en caption (título). Vea también ICONO.

caption:(LISTA).

Ejemplo:

icono "Trabajo

noicono "Trabajo


ACTIVAVENTANA

ACTIVAVENTANA caption modo

Esta primitiva deja que LOGO controle el modo de la ventana especificada por el título (caption) (p.e. Oculta, Visible etc.). Es una primitiva para expertos.  Con esta primitiva  puede perder el control de MSWLogo, si no lleva cuidado, por lo que debe guardar su trabajo frecuentemente.

caption:(LISTA).

modo:(ENTERO).

modo 0: Oculta la ventana y activa otra ventana.

modo 1: Activa y despliega una ventana. Si la ventana está minimizada o maximizada, restaura la ventana a su tamaño y posición original.

modo 2: Activa una ventana y la despliega minimizada.

modo 3: Activa una ventana y la despliega maximizada.

modo 4: Despliega una ventana como minimizada. La ventana activa permanece activa.

modo 5: Activa una ventana y la despliega en su tamaño y posición actual.

modo 6: Minimiza la ventana especificada y activa la siguiente  ventana superior en el orden Z.

modo 7: Despliega una ventana con su tamaño  y posición más recientes. La ventana activa permanece activa.

modo 8: Despliega una ventana en su estado actual. La ventana activa permanece activa.

modo 9: Activa y despliega una ventana. Si la ventana está minimizada o maximizada,  restaura la ventana a su tamaño y posición original.

modo 10: Reservado.

Ejemplo:

para maximizar

activaventana "Trabajo 0

activaventana [Pantalla de MSWLogo] 3

rotula [atrás en 2 segundos]

espera 120

activaventana [Pantalla de MSWLogo] 1

activaventana "Trabajo 1

fin

maximizar


USO DEL COLOR

Algunas primitivas (PONCOLORLAPIZ, PONCOLORRELLENO, PONCOLORPAPEL) especifican la intensidad de los colores Rojo, Verde Azul. Cada entrada representa qué cantidad de Rojo, Verde y Azul requiere el color. Cada entrada tiene un rango de 0-255.  Al mezclar  cantidades diferentes de colores puede crear 16,7  millones de colores diferentes.

Si su monitor trabaja con un controlador de Windows de 256 colores tendrá  colores "reales".  Se guardan los colores en una tabla llamada  paleta.  La paleta tiene  256 colores (escogidos entre los 16,7 millones de posibilidades). Puede saber si trabaja en modo 256 colores (si tiene una paleta) viendo en la ventana ESTADO "paleta usada".  Si muestra "N/ A" (No aplicable) no tiene un controlador de Windows 256 (o más).  Vea la primitiva BORRAPALETA para más detalles acerca del manejo de la paleta.

Si su monitor trabaja con un controlador de 16 colores (o menos) de Windows simulará todo los colores mezclando los 16 (o menos) colores.  Si PONGROSOR es demasiado reducido (1) Windows no puede mezclar los colores.  Windows no mezcla los colores en ninguna fuente.  La documentación de su tarjeta gráfica explica las capacidades y cómo cargar nuevos controladores.  MSWLogo es divertido en cualquier modo pero es igual o más divertido en el modo 256 colores.

Ejemplos:

poncolorlapiz [000 000 000]	negro

poncolorlapiz [255 255 255]	blanco

poncolorlapiz [128 128 128]	gris

poncolorlapiz [255 000 000]	rojo

poncolorlapiz [000 255 000]	verde

poncolorlapiz [000 000 255]	azul

Observe que el trabajo con una paleta en modo 256 colores ofrece varias ventajas y desventajas:

La impresión de una imagen en 256 colores en una impresora en blanco y negro será menos agradable que impresión en modo 16 colores, porque no mezcla puntos cuando se usa el modo 256 colores.

El trabajo en modo 256 colores es más lento y consume más memoria y no es posible en algunas máquinas más pequeñas o máquinas con capacidades limitadas de vídeo.

El trabajo en 256 colores produce colores mucho más agradables y permite la manipulación de 256 ficheros .BMP en color.

Para los propósitos de compatibilidad con otras implementaciones de Logo y simplicidad para los nuevos programadores en Logo, MSWLogo soportará también colores de un sólo índice.

Ejemplo:

muestra colorlapiz

[0 0 0]

poncolorlapiz 5

muestra colorlapiz

5

poncolorlapiz [255 0 0]

muestra colorlapiz

[255 0 0]

El mapa de los índices de colores es el siguiente:

 0 -> [  0   0   0]

 1 -> [  0   0 255]

 2 -> [  0 255   0]

 3 -> [  0 255 255]

 4 -> [255   0   0]

 5 -> [255   0 255]

 6 -> [255 255   0]

 7 -> [255 255 255]

 8 -> [155  96  59]

 9 -> [197 136  18]

10 -> [100 162  64]

11 -> [120 187 187]

12 -> [255 149 119]

13 -> [144 113 208]

14 -> [255 163   0]

15 -> [183 183 183]


Orientación en 3D

El trabajo en 2D es simple:

RUMBO cambia con GIRAIZQUIERDA, GIRADERECHA, PONRUMBO.

Pero en modo 3D (PERSPECTIVA) las cosas son más complicadas:

RUMBO cambia  con GIRAIZQUIERDA, GIRADERECHA, PONRUMBO.

BALANCEO? cambia con BALANCEAIZQUIERDA, BALANCEA, PONBALANCEO.

CABECEO? cambia  con CABECEA, BAJANARIZ, PONCABECEO.

De cualquier modo, hay más.  BALANCEO?  Puede cambiar también RUMBO.  CABECEO? Puede también cambiar BALANCEO? Y así sucesivamente.  Todos actúan interactivamente unos con  otros.  La manera más fácil de entenderlo es con un ejemplo:

perspectiva

giraderecha 90

(muestra redondea balanceo? redondea cabeceo? redondea rumbo)

0 0 90

borrapantalla

bajanariz 90

balancea 90

cabecea 90

(muestra redondea balanceo? redondea cabeceo? redondea rumbo)

0 0 90

Sólo usó balanceos y cabeceos pero el rumbo cambió.

Pero no se inquiete porque MSWLogo lo hace fácil, sólo necesita entender algunas reglas básicas para no sentirse perdido en un espacio 3D.  La tortuga controla BALANCEO?, CABECEO?, y RUMBO cambia con uno y otro pero en una manera segura.  Lo más importante es que un cambio en RUMBO (con GIRADERECHA, GIRAIZQUIERDA o PONRUMBO) no cambiará BALANCEO? o CABECEO?. Esto es; podrá usar mucho su código 2D para  3D.

Tiene que entender otra  cosa.  No puede decir simplemente:

perspectiva

ponbalaceo 45

poncabeceo 45

ponrumbo 45

(muestra redondea balanceo? redondea cabeceo? redondea rumbo)

45 45 45

Y esperar estar con una orientación absoluta de 45, 45, 45.

bp

giraderecha 45

balancea 30

cabecea 30

; Ahora trata de ponerse a 45,45,45 de nuevo

ponbalanceo 45

poncabeceo 45

ponrumbo 45

(muestra redondea balanceo? redondea cabeceo? redondea rumbo)

248 29 45

Pero no se inquiete; hay una solución, llamada PONORIENTACION.

bp

giraderecha 45

balancea 30

cabecea 30

; Ahora trate de ponerse a 45,45,45 de nuevo

ponorientacion [45 45 45]

(muestra redondea balanceo? redondea cabeceo? redondea rumbo)

45 45 45

PONORIENTACION entiende las interacciones entre BALANCEO?, CABECEO? y  RUMBO. Puede informarse sobre la ORIENTACION presente o guardada usando la primitiva ORIENTACION.

bp

giraderecha 45

muestra orientacion

[0 0 45]

haz "saveit orientacion

giraderecha 90

cabecea 180

ponorientacion :saveit

muestra orientacion

[0 0 45]

Otra primitiva que debe conocer acerca de ORIENTACION es  HACIAXYZ.  HACIAXYZ devolverá una orientación compatible con PONORIENTACION.

ponorientacion haciaxyz [100 100 0]

muestra orientacion

[0 0 45]

avanza distanciaxyz [100 100 0]

muestra pos3d

[100 100 0]

No necesita pensar en una ORIENTACION absoluta.  Se usará ORIENTACION y PONORIENTACION principalmente para guardar, informar y restaurar su ORIENTACION (como hacía en 2D con RUMBO y PONRUMBO). Y, como se explicó antes, los cambios en su rumbo con GIRADERECHA, GIRAIZQUIERDA y PONRUMBO sólo tienen efecto en 2D.

Debe pensar también de la misma manera que en 2D.  No se preocupa por su RUMBO absoluto en 2D, es más frecuente poner un RUMBO relativo.  Piense que está en un avión y que la tortuga  está en la cabina del piloto.  Entonces decida donde quiere ir.


CUERPOS SÓLIDOS EN 3D

Los sólidos en 3D en MSWLogo usan todas las primitivas habituales en  3D y unas primitivas adicionales que ayudan a que MSWLogo entienda qué dibuja.  Para quitar las líneas ocultas o quitar las superficies ocultas  tiene que definir superficies (no vectores). Se rellenan simplemente las caras de los polígonos.  Sólo necesita decirle a MSWLogo cuando comienza una superficie y cuando termina.  Si usó  sólo vectores para dibujar una caja, MSWLogo no sabría si tiene 6 caras cerradas (un cubo sólido) o tiene 4 caras y las bases abiertas.

Los programadores de Logo están acostumbrados al relleno de polígonos, así que no debe ser un concepto extraño.  Pero MSWLogo en modo 3D cuidará del relleno correcto de ese polígono, con respecto al color sobre la base de lo que sus ojos ven, la fuente luminosa, obstrucciones, y el color de la superficie.

 Las nuevas primitivas:

Empiezapoligono: Comienza un polígono nuevo.

Terminapoligono: Fin  de la definición del polígono.

Muestrapoligono: Da sombra y muestra todos los polígonos definidos.

Activa -3: Usa esta tortuga para posicionar la fuente luminosa.

Ponluz: Se usa para establecer cómo se deben iluminar los objetos.

El color del lápiz cuando dibuja superficies en 3D es el color de la superficie.

El modelo de iluminación en 3D en MSWLogo es muy poderoso y usa algunas de las técnicas más modernas.  No hará sombras y reflexiones etc.

EMPIEZAPOLIGONO

TERMINAPOLIGONO

MUESTRAPOLIGONO

PONLUZ

LUZ


EMPIEZAPOLIGONO

EMPIEZAPOLIGONO

EMPIEZAPOLIGONO le dice MSWLogo que se va a definir un polígono.  Cada movimiento siguiente dará como resultado la coordenada de un vértice del polígono.  Se completa la definición con la primitiva TERMINAPOLIGONO.  Para ver sombreados todos los polígonos definidos  se emplea la primitiva  MUESTRAPOLIGONO.  Vea también RESTRICCIONES DE LOS POLÍGONOS.

Ejemplo:

para cuadrado

empiezapoligono

repite 4 [av 100 gd 90]

terminapoligono

fin

perspectiva

repite 72 [cuadrado bal 5]

muestrapoligono


TERMINAPOLIGONO

TERMINAPOLIGONO

TERMINAPOLIGONO le dice a MSWLogo que se ha completado la definición del polígono, comenzada con la primitiva  EMPIEZAPOLIGONO.  Observe que la coordenada actual no se añade a un vértice cuando se usa  TERMINAPOLIGONO.  Vea también RESTRICCIONES DE LOS POLÍGONOS.

Ejemplo:

Para cuadrado

empiezapoligono

repite 4 [av 100 gd 90]

terminapoligono

fin

perspectiva

repite 72 [cuadrado bal 5]

muestrapoligono


MUESTRAPOLIGONO

MUESTRAPOLIGONO

MUESTRAPOLIGONO pide a MSWLogo que borre la pantalla y muestre todos los polígonos definidos con EMPIEZAPOLIGONO y TERMINAPOLIGONO .   Mostrará los polígonos sombreados.  Los polígonos serán iluminados de acuerdo con la posición de la fuente luminosa, usando ACTIVA -3 y para establecer los parámetros de iluminación se utiliza  PONLUZ.  Vea también Restricciones de los polígonos.

Observe que si necesita agregar otros objetos a su dibujo, como textos o bitmaps etc. debe hacerlo después del último MUESTRAPOLIGONO.

Observe que puede usar MUESTRAPOLIGONO inmediatamente después de cualquier TERMINAPOLIGONO para ver los polígonos sombreados.  Pero tenga en cuenta que MUESTRAPOLIGONO aminorará el programa considerablemente si lo llama con cada TERMINAPOLIGONO.

Ejemplo:

para cuadrado

empiezapoligono

repite 4 [av 100 gd 90]

terminapoligono

fin

perspectiva

repite 72 [cuadrado bal 5]

muestrapoligono


PONLUZ

PONLUZ tipo

Establece cómo se iluminarán los objetos.  El argumento es una lista de dos números en un rango de 0,0 a 1.0, la cantidad de ambiente y luz difusa.  Ambiente define cómo se ilumina la escena, mientras mayor sea, más luminosa será la luz.  Luz difusa no es una propiedad de la fuente luminosa, indica si la superficie es más o menos lisa (esparce la luz). Un valor  alto significa que los objetos son más lisos y reflectores (como un mármol) un valor bajo significa que los objetos son ásperos (como la tiza).  Para posicionar la luz se utiliza A ACTIVA -3.  Vea también LUZ.

tipo:(LISTA) Lista de dos números que representan   Ambiente y  luz  difusa (cada uno en un rango de 0.0 a 1.0).

Ejemplo 1:

ponluz [0.3 0.6]

muestra luz

[0.3 0.6]

Ejemplo 2:

para cuadrado

empiezapoligono

repite 4 [av 100 gd 90]

terminapoligono

fin

bp

perspectiva

borrapaleta

poncolorlapiz [255 0 0]

poncp [0 0 0]

repite 72 [cuadrado bal 5]

muestrapoligono

repite 50 [ponluz (lista (azar 100)/100 (azar 100)/100) escribe luz espera 60]


LUZ

tipo LUZ

Devuelve los atributos de iluminación en una lista de dos números con los valores de Ambiente y  Difusión. Vea también  PONLUZ.

tipo:(LISTA) Lista de dos números que representan los valores actuales de Ambiente y Difusión.

Ejemplo:

ponluz [0.3 0.6]

muestra luz

[0.3 0.6]


Restricciones de los polígonos

1: El primer polígono tiene 3 vértices y la forma de un triángulo.

2: Un polígono debe ser convexo.

3: Un polígono debe estar dibujado en 2D (sin cabecea, bajanariz, balancea, balanceaizquierda) entre empiezapoligono y terminapoligono.

Nota en 1. El triángulo puede ser poco profundo.

Está permitido:

empiezapoligono

haz "savepos pos3d

av 100

gd 0.00000001

av 100

posicionate :savepos

terminapoligono

No está permitido (aunque produce un polígono convexo)

empiezapoligono

haz "savepos pos3d

av 50

av 50

gd 90

av 100

posicionate :savepos

terminapoligono

Nota en 2: ¿Qué significa convexo?

Si al unir dos vértices de un polígono con una línea recta, la línea está fuera del polígono, éste no es convexo.

Los triángulos, cuadrados, círculos etc. son convexos.

La letra "E" no es un polígono convexo.

Está permitido:

repite 4 [av 100 gd 90]

No está permitido:

repite 4 [av 50 gd 90 repite 3 [av 25 gi 90] gd 180 av 50 gd 90]

Nota en 3: ¿Qué significa  en 2D?

El polígono debe ser plano

Está permitido:

repite 4 [av 100 gd 90]

No esta permitido

repite 4 [av 50 bal 90 gd 90 repite 3 [av 25 gi 90] gd 180 balanceaizquierda 90 av 50 gd 90]

Nota en 2 y 3:

Puede utilizar CIRCULO, ELIPSE y ARC.

Ejemplo (usando CIRCULO):

perspectiva

repite 36 ~

   [

   empiezapoligono

   circulo 100

   terminapoligono

   bal 10

   ]

muestrapoligono

Ejemplo (usando arc):

perspectiva

repite 36 ~

   [

   empiezapoligono

   arc2 180 100

   GD 90

   AV 200

   GD 90

   terminapoligono

   bal 10

   ]

muestrapoligono


PREGUNTAS SOBRE LA TORTUGA Y LA VENTANA

VISIBLE?


VISIBLE?

verdad VISIBLE?

Devuelve VERDADERO si la tortuga está en pantalla (visible), FALSO, si está oculta.  Vea  MUESTRATORTUGA y  OCULTATORTUGA.

verdad:(BOOLEANO).

Ejemplo:

muestratortuga

muestra visible?

verdadero

ocultatortuga

muestra visible?

falso


CONTROL DEL LÁPIZ

La tortuga tiene un lápiz para dibujar.  En cualquier momento el lápiz puede estar alzado (con lo que si se mueve la tortuga, no dibuja) o bajado (en que caso de que la tortuga se mueva, deja un rastro). Si el lápiz está bajado, puede dibujar en uno de tres modos: PONLAPIZ (para que dibuje cuando se mueve la tortuga), GOMA (para que borre lo que se había dibujado en su camino), o INVERSOLAPIZ (para que invierta el estado de cada punto a lo largo del camino de la tortuga).

BAJALAPIZ

SUBELAPIZ

PONLAPIZ

GOMA

INVERSOLAPIZ

LAPIZNORMAL

PONCOLORLAPIZ

PONCOLORRELLENO

PONCOLORPAPEL

PONGROSOR

PONPATRONLAPIZ

PONTIPOLAPIZ

BORRAPALETA


BAJALAPIZ

BAJALAPIZ

BL

Pone la posición del lápiz hacia abajo, sin cambiar el modo.

Ejemplo:

repite 10 [av 10 sl av 10 bl]


SUBELAPIZ

SUBELAPIZ

SL

Pone la posición del lápiz hacia arriba, sin cambiar el modo.

Ejemplo:

repite 10 [av 10 sl av 10 bl]


PONLAPIZ

PONLAPIZ

PLA

Pone la posición de lápiz hacia abajo ( BALALAPIZ), en el  modo  PONLAPIZ que es el modo habitual en que dibuja la tortuga.

Ejemplo:

inversolapiz

av 100

re 100

ponlapiz

av 100

re 100


GOMA

GOMA

Pone la posición de lápiz hacia abajo ( BALALAPIZ), en el  modo GOMA.  Para volver al modo normal use PONLAPIZ.

Ejemplo:

av 100

goma

re 100


INVERSOLAPIZ

INVERSOLAPIZ

ILA

Pone la posición de lápiz hacia abajo ( BALALAPIZ), en el  modo  INVERSOLAPIZ. Para volver al modo normal use PONLAPIZ.

Ejemplo:

inversolapiz

av 100

re 100

ponlapiz

av 100

re 100


LAPIZNORMAL

LAPIZNORMAL	(Procedimiento de la librería)

Pone el estado del lápiz como si se usaran las primitivas BAJALAPIZ y PONLAPIZ.

Ejemplo:

inversolapiz

av 100

lapiznormal

re 100


PONCOLORLAPIZ

PONCOLORLAPIZ colorvector

PONCL colorvector

Pone el color del lápiz  colorvector.  Colorvector es una lista con las intensidades de [Rojo Verde Azul], en un rango 0-255.  El color del lápiz se emplea tanto en textos (ROTULA) como en los dibujos de la tortuga (p. e. con AVANZA).  Para una explicación de los argumentos, vea USO DEL COLOR.

colorvector:(LISTA).

Ejemplo:

repite 255 [poncolorlapiz (lista cuentarepite 0 0) av 100 re 100]

Ejemplo 2: (un error frecuente en Logo)

haz "rojo 100

haz "verde 100

haz "azul 100

poncolorlapiz [:rojo :verde :azul]

<dará un error>

poncolorlapiz (lista :rojo :verde :azul)

<funcionará correctamente>


PONCOLORRELLENO

PONCOLORRELLENO colorvector

POCCR colorvector

Pone como color de relleno colorvector.  Colorvector es una lista con las intensidades de [Rojo Verde Azul].  El  rellenado con color se consigue con las primitivas RELLENA y RECTANGULORELLENO.  Para una explicación de los argumentos, vea  USO DEL COLOR.

colorvector:(LISTA).

Ejemplo:

bp

repite 4 [av 100 gd 90]

gd 45

sl

av 20

poncolorrelleno [0 255 0]

rellena

bp

repite 4 [av 100 gd 90]

gd 45

sl

av 20

poncolorrelleno [125 125 125]

rellena


PONCOLORPAPEL

PONCOLORPAPEL colorvector

PONCP colorvector

Pone como color de la pantalla colorvector. Colorvector es una lista con las intensidades de [Rojo Verde Azul]. Para una explicación de los argumentos, vea  USO DEL COLOR.

colorvector:(LISTA)

Ejemplo:

poncolorpapel [0 0 0]

poncolorlapiz [255 255 255]

repite 4 [av 100 gd 90]


PONGROSOR

PONGROSOR tamaño

PONG tamaño

Pone las características del lápiz dependientes del “hardware”.  Es posible que esta primitiva no sea  compatible con diferentes maquinas. El "tamaño" es una lista de dos miembros, anchura y altura.  MSWLogo sólo usa la anchura.  Por ello los dos miembros tienen el mismo valor.

tamaño:(LISTA) Lista de 2 enteros, anchura y altura del lápiz.

Ejemplo:

pongrosor [5 5]


PONPATRONLAPIZ

PONPATRONLAPIZ pattern

(No soportado aun en MSWLogo)


PONTIPOLAPIZ

PONTIPOLAPIZ lista	(Procedimiento de la librería)

Pone la posición del lápiz, el modo, y las características dependientes del hardware de acuerdo con la información de la entrada que debe ser una lista.

lista:(LISTA) Una lista con los valores [bajalapiz? lapiz grosor colorlapiz ponlapiz].

Ejemplo:

bp repite 4 [av 100 gd 90]

haz "savepen lapiz?

pongrosor [20 20]

bp repite 4 [av 100 gd 90]

pontipolapiz :savepen

bp repite 4 [av 100 gd 90]


BORRAPALETA

BORRAPALETA

Esta primitiva borra la paleta de colores. La paleta de colores se llena con el uso de las primitivas PONCOLORLAPIZ, PONCOLORPAPEL, y PONCOLORRELLENO .  Se puede usar la paleta sólo cuando Windows está en el modo 256 colores  (vea USO DEL COLOR).  Por ejemplo:

repite 256 [poncolorlapiz (lista cuentarepite 0 0)]

Llena la paleta con 256 matices de rojo.  Si ahora quiere 256 matices de verde tiene que “borrar la paleta”.

Si quiere una gama amplia de colores, tendrá que seleccionar la paleta. Vea el  ejemplo:

repite 6~

   [~

   haz "rojo cuentarepite*40~

   repite 6~

      [~

      haz "verde cuentarepite*40~

      repite 6~

         [~

         haz "azul cuentarepite*40~

         poncolorlapiz (lista :rojo :verde :azul)~

         ]~

      ]~

   ]

Observe que cuando se carga un .BMP (CARGADIB) se utiliza una paleta de colores.  La paleta se borra con BORRAPALETA.  Cuando se borra la pantalla, no se borra la paleta.

Ejemplo:

repite 256 [poncolorlapiz (lista cuentarepite 0 0)]

estado

quitaestado

borrapaleta

estado

quitaestado


Preguntas sobre el lápiz

BAJALAPIZ?

LAPIZ

COLORLAPIZ

COLORRELLENO

COLORPAPEL

GROSOR

PENPATTERN

LAPIZ?


BAJALAPIZ?

verdad BAJALAPIZ?

Devuelve VERDADERO si el lápiz está bajado y FALSO, si no lo está.

verdad:(BOOLEANO).

Ejemplo:

sl

sisino bajalapiz? [escribe [El lápiz está bajado]] [escribe [El lápiz está subido]

El lápiz está subido

bl

sisino bajalapiz? [escribe [El lápiz está bajado]] [escribe [El lápiz está subido]

El lápiz está bajado


LAPIZ

modo LAPIZ

Devuelve una de las palabras  PAINT, GOMA, o REVERSE, según el modo actual del lápiz..

modo:(PALABRA).

Ejemplo:

ponlapiz

muestra lapiz

paint

goma

muestra lapiz

goma

inversolapiz

muestra lapiz

reverse


COLORLAPIZ

colorvector COLORLAPIZ

colorvector CL

Devuelve información sobre el color del lápiz en una lista con las intensidades de los colores [Rojo Verde Azul] en un rango 0-255.

colorvector:(LISTA).

Ejemplo:

poncolorlapiz [100 200 50]

muestra colorlapiz

[100 200 50]

poncolorlapiz [0 0 0]

muestra colorlapiz

[0 0 0]


COLORRELLENO

colorvector COLORRELLENO

Devuelve información sobre el color de relleno en una lista que contiene las intensidades de los colores  [Rojo Verde Azul] en un rango 0-255.

colorvector:(LISTA).

Ejemplo:

poncolorrelleno [100 200 50]

muestra colorrelleno

[100 200 50]

poncolorrelleno [0 0 0]

muestra colorrelleno

[0 0 0]


COLORPAPEL

colorvector COLORPAPEL

Devuelve información sobre el color de la pantalla en una lista que contiene las intensidades de los colores  [Rojo Verde Azul] en un rango 0-255.

colorvector:(LISTA).

Ejemplo:

poncolorpapel [100 200 50]

muestra colorpapel

[100 200 50]

poncolorpapel [0 0 0]

muestra colorpapel

[0 0 0]


GROSOR

tamaño GROSOR

Devuelve información sobre el grosor del lápiz en una lista que contiene dos enteros [Ancho Alto]. Ancho no se usa en MSWLogo.

tamaño:(LISTA).

Ejemplo:

pongrosor [20 20]

muestra grosor

[20 20]

pongrosor [1 1]

muestra grosor

[1 1]


PENPATTERN

pattern PENPATTERN

(No está soportado aun en MSWLogo)


LAPIZ?

lista LAPIZ?	(Procedimiento de la librería)

Devuelve una lista con información sobre el lápiz:  posición, modo, y características específicas  del hardware, que se puede usar con PONTIPOLAPIZ.

lista:(LISTA).

Ejemplo:

bp repite 4 [av 100 gd 90]

haz "savepen lapiz?

pongrosor [20 20]

bp repite 4 [av 100 gd 90]

pontipolapiz :savepen

bp repite 4 [av 100 gd 90]


MANEJO DE LA MEMORIA

DEFINICIÓN DE PROCEDIMIENTOS

DEFINICIÓN DE VARIABLES

PROPIEDADES DE LAS LISTAS

PREDICADOS (espacio de trabajo)

PREGUNTAS

INSPECCIÓN

CONTROL DE  LA MEMORIA


DEFINICIÓN DE PROCEDIMIENTOS

PARA

FIN

DEFINE

TEXTO

FULLTEXT

COPIADEF


PARA

PARA nombreproc :entrada1 :entrada2 ...	(Forma especial)

Esta primitiva le dice a Logo que acepte una definición de procedimiento.  El  procedimiento se llamará nombreproc y no debe existir otro procedimiento con el mismo nombre.  Las  entradas o argumentos se llamarán entrada1, entrada2, etc.  Un procedimiento puede tener varias entradas o ninguna.  Los nombres de procedimientos y de entradas se pueden escribir indistintamente en mayúsculas o minúsculas.

nombreproc:(PALABRA) Nombre del procedimiento que se va a definir (no debe estar precedido por  ["]).

entrada1:(PALABRA) Primer argumento del procedimiento que se va a definir (precedido por [:]).

entrada2:(PALABRA) Segundo argumento del procedimiento que se va a definir (precedido por [:]).

Diferente de las otras primitivas, PARA toma como entradas las palabras que se teclean en una línea de instrucciones, como si todas estuvieran entrecomilladas.  (Por ello es  "una forma especial".)

Esta versión de Logo admite un número variable de entradas en los procedimientos.  Todos los procedimientos tienen un  número MÍNIMO,  por DEFECTO, y MÁXIMO de entradas.

El  número MÍNIMO de entradas es el número de entradas requeridas.  Una entrada se indica con:

:nombreentrada

Notación.

Además de las entradas requeridas puede haber cero o más entradas opcionales, que se representan con la siguiente notación:

[:inputname valor.expresion]

Cuando se invoca el procedimiento,  si no se proporcionan entradas reales para las entradas optativas, se pone como valor de las correspondientes entradas “valor.expresion”.  Estas entradas se procesan de izquierda a derecha, así valor.expresion se puede basar en la última entrada. Ejemplo:

para proc :inlista [:startvalor primero :inlista]

Si se invoca el procedimiento como:

proc [a b c]

Entonces la variable INLISTA tendrá el valor [A B C] y la variable STARTVALOR  tendrá el valor  A.  Si se invoca el procedimiento como:

(proc [a b c] "x)

Entonces INLISTA tendrá el valor [A B C] y  STARTVALOR el valor X.

Después de todas las entradas requeridas y de las optativas,  puede venir una entrada "restante", con la siguiente notación:

[:inputname]

Sólo puede haber una entrada de este tipo.  Cuando se invoca el procedimiento, el valor de esta entrada será una lista que contiene todas las entradas reales con tal que no se incluya un nombre de una de las entradas requeridas u optativas. Ejemplo:

para proc :in1 [:in2 "foo] [:in3]

Si este procedimiento se invoca como:

proc "x

Entonces IN1 tiene el valor  X, IN2 tiene el valor  FOO, e IN3 tiene el valor [] (lista vacía).  Si se invoca como:

(proc "a "b "c "d)

Entonces IN1 tiene el valor A, IN2  tiene el valor  B, e IN3 tiene el valor [C D].

El número MÁXIMO de entradas para un  procedimiento es infinito si tiene una entrada “restante”; de lo contrario,  sería el número de entradas requiridas más el número de entradas optativas.

El número de entradas por DEFECTO  para un  procedimiento, que es el número de entradas que aceptará si no se invoca entre paréntesis, es generalmente igual a MÍNIMO.  Si se quiere un número diferente por DEFECTO debe indicarse poniéndolo después del último objeto de la línea PARA. Ejemplo:

para proc :in1 [:in2 "foo] [:in3] 3

Este procedimiento tiene un MÍNIMO de una entrada,  tres entradas por DEFECTO, y un MÁXIMO  infinito.

Logo responde a la primitiva PARA  entrando en el modo de definición de procedimientos.  El carácter prompt cambia de "?" a ">"  y cualquier instrucción que teclee forma parte de la definición hasta que teclee en una sola línea  la palabra FIN.

Ejemplo:

para eco :times :objeto

repite :times [escribe :objeto]

fin

eco 2 "Hola

Hola

Hola

eco 3 "Adiós

Adiós

Adiós

Adiós


FIN

FIN	(Forma especial)

Permite que termine un procedimiento.  Vea también PARA.

Ejemplo:

para eco :times :objeto

repite :times [escribe :objeto]

fin

eco 2 "Hola

Hola

Hola

eco 3 "Adiós

Adiós

Adiós

Adiós


DEFINE

DEFINE nombreproc texto

Define un procedimiento de nombre nombreproc y texto texto.  Si existe un procedimiento con el mismo  nombre, la nueva definición sustituye a la antigua.  El texto de la entrada debe ser una lista cuyos miembros serán sublistas.  La primera sublista contiene las entradas y se parece a la línea PARA,  pero sin la palabra  PARA y sin el nombre del procedimiento, y sin los dos puntos delante de los nombres de las entradas.  En otras palabras, los miembros de la primera sublista son palabras que indican los nombres de las entradas requeridas y listas con los nombres de las entradas opcionales o restante.  Las demás sublistas de la entrada  texto forman el cuerpo del procedimiento, con una sublista  por cada línea de instrucciones.  (No hay una línea FIN  en la entrada texto.) No se puede redefinir  un procedimiento, a no ser que la variable REDEF? tenga el valor VERDADERO.

nombreproc:(PALABRA) Nombre del procedimiento que se va a definir.

texto:(LISTA) Definición del procedimiento como una lista.

Ejemplo:

define "abc [[a b] [escribe :a] [escribe :b]]

abc "Hola "Adiós

Hola

Adiós


TEXTO

texto TEXTO nombreproc

Devuelve el texto de un procedimiento llamado "nombreproc" en la forma que se requiere para un  DEFINE: una lista con sublistas, la primera describe las entradas del procedimiento y las demás las líneas del cuerpo.  TEXTO no refleja el formato en que se editó el procedimiento, como líneas y espacios extras.

texto:(LISTA) Definición del procedimiento como una lista.

nombreproc:(PALABRA) Nombre del procedimiento.

Ejemplo:

define "abc [[a b] [escribe :a] [escribe :b]]

abc "Hola "Adiós

Hola

Adiós

muestra texto "abc

[[a b] [escribe :a] [escribe :b]]


FULLTEXT

texto FULLTEXT nombreproc

(No tiene equivalencia)


COPIADEF

COPIADEF nuevonom  viejonom

Crea un procedimiento de nombre "nuevonom",  idéntico a otro llamado "viejonom".  El más reciente puede ser una primitiva.  Si "nuevonom" estaba definido, se pierde  la definición anterior.  Si "nuevonom" es una  primitiva, no se permite su redefinición a no ser que la variable REDEF? tenga el valor VERDADERO.  Las definiciones creadas con COPIADEF no se guardan con  GUARDA; las primitivas no  se guardan nunca, y los procedimientos creados con COPIADEF se ocultan.  ( cuando ejecuta  IM o IMTS aparece el nombre antiguo porque se oculta el nuevo.)

Nota: dialectos de Logo se diferencian en el orden de las entradas.  Estos dialectos usan "el orden  HAZ", y no "el orden NOMBRE."

nuevonom:(PALABRA) Nombre del nuevo procedimiento.

viejonom:(PALABRA) Nombre del antiguo procedimiento.

Ejemplo:

para bienvenida

escribe "Hola

fin

bienvenida

Hola

copiadef "decirHola "bienvenida

decirHola

Hola


DEFINICIÓN DE VARIABLES

HAZ

NOMBRE

LOCAL

HAZLOCAL

VALOR


HAZ

HAZ nombrevar valor

Asigna el valor indicado en valor a la variable nombrevar, que debe ser una palabra sin que importe si está en mayúsculas o minúsculas. Si la variable ya existe, cambia su valor.  Si no, se crea una nueva variable global.

nombrevar:(PALABRA) Nombre de la variable.

valor:(OBJETO) Objeto que será asignado a la variable.

Ejemplo:

haz "foo [Hola, cómo estás]

muestra :foo

[Hola, cómo estás]


NOMBRE

NOMBRE valor nombrevar 	(Procedimiento de la librería)

Asigna el valor indicado en  el argumento valor a la variable  nombrevar, que debe ser una palabra,  sin que importe si está en mayúsculas o minúsculas.  Si la variable ya existe, cambia su valor.  Si no, se crea una nueva variable global.  Esta orden es parecida a HAZ pero con la entrada en orden inverso.

valor:(OBJETO) Objeto que será asignado a la variable.

nombrevar:(PALABRA) Nombre de la variable.

Ejemplo:

nombre [Hola, cómo estás] "foo

muestra :foo

[Hola, cómo estás]


LOCAL

LOCAL nombrevar

LOCAL nombrevarlista

(LOCAL nombrevar1 nombrevar2 ...)

Acepta como entradas una o más palabras, o una lista de palabras.  Se crea una variable por cada una de las entradas, con el nombre de esa palabra.  Las variables son locales en el  procedimiento en que se encuentran.  Las variables en Logo tienen un alcance dinámico;  una variable local en un procedimiento no está disponible en los subprocedimientos invocados por ese procedimiento.  Las variables creadas con LOCAL no tienen valor  inicial; se les debe asignar un valor (p.e.con  HAZ) antes de que el  procedimiento intente leer su valor.

nombrevar:(PALABRA) Nombre de una variable local.

nombrevarlista:(LISTA) Lista de nombres (palabras) que serán variables locales.

nombrevar1:(PALABRA).

nombrevar2:(PALABRA).

Ejemplo:

para foo

haz "bar 1

escribe :bar

fin

foo

1

muestra :bar

1

para abc

local "xyz

haz "xyz 1

escribe :xyz

fin

abc

1

muestra :xyz

xyz no tiene valor


HAZLOCAL

HAZLOCAL nombrevar valor	(Procedimiento de la librería)

Es la abreviatura de:

LOCAL nombrevar HAZ nombrevar valor

(No funciona correctamente)


VALOR

valor VALOR  nombrevar

valor : nombrevar

Devuelve el valor de una variable cuyo nombre es la entrada. Tiene como abreviatura (:)

valor "foo equivale a :foo

valor:(OBJETO).

nombrevar:(PALABRA).

Ejemplo:

haz "foo [Hola, cómo estás]

muestra valor "foo

[Hola, cómo estás]

muestra :foo

[Hola, cómo estás]


PROPIEDADES DE LAS LISTAS

PONPROP

PROPIEDAD

BOPROP

LPROP


PONPROP

PONPROP lpropnombre propnombre valor

Añade una propiedad de nombre propnombre y con el  valor valor a la lista  lpropnombre.

lpropnombre:(PALABRA) Nombre de una lista.

propnombre:(PALABRA) Nombre de la propiedad.

valor:(OBJETO) Objeto asignado a la propiedad.

Ejemplo:

ponprop "lprop1 "p1 1

ponprop "lprop1 "p2 2

ponprop "lprop2 "p1 10

ponprop "lprop2 "p2 20

muestra propiedad "lprop1 "p1

1

muestra propiedad "lprop1 "p2

2

muestra propiedad "lprop2 "p1

10

muestra propiedad "lprop2 "p2

20


PROPIEDAD

valor PROPIEDAD lpropnombre propnombre

valor PROP lpropnombre propnombre

Devuelve el valor de una propiedad (propnombre) de una lista de propiedades (lpropnombre), o una lista vacía si no existe tal propiedad.

valor:(OBJETO) Valor de la propiedad.

lpropnombre:(PALABRA) Nombre de una lista  de propiedades a la que se quiere acceder.

propnombre:(PALABRA) Nombre de la propiedad que se quiere obtener.

Ejemplo:

ponprop "lprop1 "p1 1

ponprop "lprop1 "p2 2

ponprop "lprop2 "p1 10

ponprop "lprop2 "p2 20

muestra propiedad "lprop1 "p1

1

muestra propiedad "lprop1 "p2

2

muestra propiedad "lprop2 "p1

10

muestra propiedad "lprop2 "p2

20


BOPROP

BOPROP lpropnombre propnombre

Elimina la propiedad  "propnombre" de la lista de propiedades  "lpropnombre".

lpropnombre:(PALABRA) Nombre de una lista de propiedades.

propnombre:(PALABRA) Nombre de una propiedad.

Ejemplo:

ponprop "lprop1 "p1 1

ponprop "lprop1 "p2 2

muestra lprop "lprop1

[p2 2 p1 1]

boprop "lprop1 "p1

muestra lprop "lprop1

[p2 2]


LPROP

lista LPROP lpropnombre

Devuelve una lista en la que los elementos impares son los nombres  y los elementos pares los valores de  las propiedades de la lista indicada en el argumento.  Devuelve una copia de la  actual lista de propiedades.

lista:(LISTA) Lista de propiedades y valores.

lpropnombre:(PALABRA) Nombre de una lista de propiedades.

Ejemplo:

ponprop "lprop1 "p1 1

ponprop "lprop1 "p2 2

muestra lprop "lprop1

[p2 2 p1 1]


PREDICADOS (espacio de trabajo)

DEFINIDO?

PRIMITIVA?

DEFINIDO?(OTRO USO)

VAR?

MACRO?


DEFINIDO?

verdad DEFINIDO? nombre

Devuelve VERDADERO si su entrada o argumento es el nombre de un procedimiento.

verdad:(BOOLEANO).

nombre:(PALABRA).

Ejemplo:

haz "foo 1

para bar

fin

muestra definido? "foo

falso

muestra definido? "bar

verdadero


PRIMITIVA?

verdad PRIMITIVA? nombre

Devuelve VERDADERO si la entrada es el nombre de una primitiva.  Observe que algunos de los  procedimientos descritos en este documento son procedimientos  de la librería, no primitivas.

verdad:(BOOLEAN).

nombre:(PALABRA).

Ejemplo:

para avanzad :arg

avanza :arg

fin

muestra primitiva? "avanzad

falso

muestra primitiva? "avanza

verdadero


DEFINIDO? (otro uso)

verdad DEFINIDO? nombre

Devuelve VERDADERO si la entrada es el nombre de un procedimiento definido por el usuario, incluido en una librería de procedimiento.  (Sin embargo, Logo no conoce los procedimientos de una librería hasta que se llaman.)

verdad:(BOOLEANO).

nombre:(PALABRA).

Ejemplo:

define "abc [[a b] [escribe :a] [escribe :b]]

muestra definido? "avanza

verdadero

muestra definido? "abc

verdadero


VAR?

verdad VAR? nombre

Devuelve VERDADERO si la entrada es el nombre de una variable.

verdad:(BOOLEANO).

nombre:(PALABRA).

Ejemplo:

define "abc [[a b] [escribe :a] [escribe :b]]

haz "xyz 1

muestra var? "abc

falso

muestra var? "xyz

verdadero


MACRO?

verdad MACRO? nombre

Devuelve VERDADERO si la entrada es el nombre de una macro definida por el usuario, incluso de una macro de librería.  (Sin embargo, Logo no conoce las macros de una librería si no se han invocado previamente.)

verdad:(BOOLEANO).

nombre:(PALABRA).

Ejemplo:

muestra macro? "abc

falso

.definemacro "abc [[a b] [escribe :a] [escribe :b]]

muestra macro? "abc

verdadero


PREGUNTAS

CONTENIDO

TAPADO

IMTS

LVARS

IMPROP

LISTANOMBRES

PLLIST


CONTENIDO

contenidolista CONTENIDO

Devuelve una lista, formada por tres listas que contiene los nombres de los procedimientos definidos, las variables  y  propiedades.  Esta lista incluye todos los elementos no tapados del espacio de trabajo.

contenidolista:(LISTA).

Ejemplo:

para proc1

fin

haz "nombre1 1

ponprop "prop1 "p1 1

muestra contenido

[[proc1] [nombre1] [prop1]]


TAPADO

contenidolista TAPADO

Devuelve todos los elementos que se encuentran el espacio de trabajo.

contenidolista:(LISTA) Lista formada por tres sublistas que contiene los procedimientos tapados, las variables y propiedades.

Ejemplo:

;pots no funciona. En su lugar: muestra imts

muestra tapado

[[] [] []]

pots

muestra tapado

[[pots] [] []]


IMTS

proclista IMTS

Devuelve una lista con los nombres de todos los procedimientos definidos por el usuario y no tapados del espacio de trabajo.  Observe que es una lista de nombres, no de contenidos.

proclista:(LISTA) Lista con los nombres del procedimiento no tapados.

Ejemplo:

para foo

fin

para bar

fin

muestra imts

[bar foo]


LVARS

contenidolista LVARS

Devuelve una lista vacía  (lo que indica que no son nombres de procedimiento), seguida de una lista con los nombres  de las variable no tapadas del espacio de trabajo.

contenidolista:(LISTA).

Ejemplo:

haz "foo 1

haz "bar 2

muestra lvars

[[] [bar foo]]


IMPROP

contenidolista IMPROP

Devuelve una lista formada por dos listas vacías (para indicar que no son listas de procedimientos o variables) seguidas por una lista con todas las listas de propiedades no tapadas que se encuentran en memoria.

contenidolista:(LISTA) Lista de 3 listas que contiene una lista de procedimientos vacía, una lista de nombre vacía, seguidas por una lista con los nombres de las listas de propiedades.

Ejemplo:

ponprop "prop1 "p1 1

muestra improp

[[] [] [prop1]]


LISTANOMBRES

contenidolista LISTANOMBRES varnombre	(procedimiento de la librería)

contenidolista LISTANOMBRES varnombrelista	(Procedimiento de la librería)

Devuelve una lista formada por una lista vacía seguida de otra lista con el nombre o nombres de los argumentos.

contenidolista:(LISTA) Lista formada por 2 sublistas;  la primera es una lista de procedimientos vacía y la segunda, una lista con los nombres de variables.

varnombre:(PALABRA) Nombre que se quiere poner en contenidolista.

varnombrelista:(LISTA) Lista de nombres que se quiere poner en contenidolista.

Muestra listanombres [foo bar]

[[] [foo bar]]


PLLIST

contenidolista PLLIST  plnombre	(Procedimiento de la librería)

contenidolista PLLIST plnombrelista 	(Procedimiento de la librería)

Devuelve una lista,  formada por dos listas vacías a las que sigue una lista de nombres o los nombres de las entradas.

contenidolista:(LISTA).

plnombre:(PALABRA).

plnombrelista:(LISTA).

Muestra pllist [foo bar]

[[] [] [foo bar]]


INSPECCIÓN

IM

IMTODO

IMPROPS

IMVARIABLES

POPLS

PON

IMNOMPROP

POT

POTS


IM

IM contenidolista

Escribe las definiciones de todos los procedimientos, variables, y listas  de propiedades, según la entrada contenidolista.

contenidolista:(LISTA) Lista de tres listas que contienen procedimientos, variables y propiedades.

Ejemplo:

para xxx

escribe "Hola

fin

im contenido

para xxx

escribe "Hola

fin


IMTODO

IMTODO	(Procedimiento de la librería)

Escribe todas las definiciones no tapadas del espacio de trabajo.  Es la abreviatura de  IM CONTENIDO.

Ejemplo:

para xxx

escribe "Hola

fin

imtodo

para xxx

escribe "Hola

fin


IMPROPS

IMPROPS	(Procedimiento de la librería)

Escribe todas las definiciones no tapadas del espacio de trabajo.  Es la abreviatura de  IM IMTS.

Ejemplo:

para xxx

escribe "Hola

fin

improps

para xxx

escribe "Hola

fin


IMVARIABLES

IMVARIABLES	(Procedimiento de la librería)

Escribe todas las variables no tapadas del espacio de trabajo.  Es la abreviatura de IM LVARS.

Ejemplo:

haz "foo 1

imvariables

Haz "foo 1


POPLS

POPLS	(Procedimiento de la librería)

Escribe todas las propiedades de las listas del espacio de trabajo.  Es la abreviatura de IM IMPROP.

Ejemplo:

ponprop "plista1 "p1 1

POPLS

Ponprop "plista1 "p1 1


PON

PON varnombre	 	(Procedimiento de la librería)

PON varnombrelista

Escribe los nombres de las variables y su valor.  Es la abreviatura de IM LISTANOMBRES .

varnombre:(PALABRA) Nombre de una variable.

varlistanombres:(LISTA) Lista de nombres de variables.

Ejemplo:

haz "foo 1

haz "bar 2

pon [foo bar]

Haz "foo 1

Haz "bar 2


IMNOMPROP

IMNOMPROP plnombre	(Procedimiento de la librería)

IMNOMPROP pllistanombres	(Procedimiento de la librería)

Escribe la definición de las propiedades de una lista.  Es la abreviatura de IM PLLIST .

plnombre:(PALABRA) Nombre de una propiedad de una lista.

pllistanombres:(LISTA) Lista de los nombres de listas de propiedades.

Ejemplo:

ponprop "plista1 "p1 1

imnomprop [plista1]

Ponprop "plista1 "p1 1


POT

POT contenidolista

(No se encuentra)


POTS

POTS	(Procedimiento de la librería)

(No funciona correctamente, al no encontrarse POT)


CONTROL DE LA MEMORIA

BORRA

BORRATODO

BOPROCEDIMIENTOS

BORRANOMBRES

BORRALISTAS

BON

BOPL

TAPA

TAPATODO

TAPANOMBRE

DESTAPA

DESTAPATODO

DESTAPANOMBRE

TRAZA

NOTRAZA

PASO

NOPASO

EDITA

EDITATODO

EDPS

EDNS

EDPLS

EDN

EDPL

GUARDA

GUARDAL

CARGA

QUITAESTADO

ESTADO


BORRA

BORRA contenidolista

BO contenidolista

Borra de la memoria los procedimientos, variables  y listas de propiedades de la entrada.  Los procedimientos no se borrarán a no ser que la variable REDEF? tenga el valor VERDADERO.

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

Ejemplo:

;pots no funciona. En su lugar: muestra imts

para foo

fin

para bar

fin

pots

para foo

para bar

borra [foo]

pots

para bar


BORRATODO

BORRATODO	(Procedimiento de la librería)

Borra todos los procedimientos, variables, y listas de propiedades de memoria.  Es la abreviatura de BORRA CONTENIDO.

Ejemplo:

;pots no funciona. En su lugar:muestra imts

para foo

fin

para bar

fin

pots

para foo

para bar

borratodo

pots


BOPROCEDIMIENTOS

BOPROCEDIMIENTOS	(Procedimiento de la librería)

Borra todos los procedimientos no tapados de la memoria.  Es la abreviatura de BORRA IMTS.

Ejemplo:

;pots no funciona. En su lugar:muestra imts

para foo

fin

para bar

fin

pots

para foo

para bar

boprocedimientos

pots


BORRANOMBRES

BORRANOMBRES	(Procedimiento de la librería)

Borra todas las variables no tapadas de la memoria.  Es la abreviatura de BORRA LVARS.

Ejemplo:

haz "foo 1

haz "bar 2

imvariables

Haz "bar 2

Haz "foo 1

borranombres

imvariables


BORRALISTAS

BORRALISTAS	(Procedimiento de la librería)

Borra todas las listas no tapadas de la memoria.  Es la abreviatura de BORRA IMPROP.

Ejemplo:

ponprop "plista1 "p1 1

popls

Ponprop "plista1 "p1 1

borralistas

popls


BON

BON nombrevariable	(Procedimiento de la librería)

BON varlistanombres	(Procedimiento de la librería)

Borra de la memoria la variable(s).  Es la abreviatura de BORRA LISTANOMBRES nombrevariable (lista).

nombrevariable:(PALABRA) Nombre de la variable a borrar.

varlistanombres:(LISTA) Lista de nombres de variables para borrar.

Ejemplo:

haz "foo 1

haz "bar 2

imvariables

Haz "bar 2

Haz "foo 1

bon [foo]

imvariables

Haz "bar 2


BOPL

BOPL plnombre	(Procedimiento de la librería)

BOPL pllistanombres	(Procedimiento de la librería)

Borra de la memoria la lista(s) de propiedades.  Es la abreviatura de BORRA PLLIST plnombre (lista).

plnombre:(PALABRA).

pllistanombres:(LISTA).

Ejemplo:

ponprop "plista1 "p1 1

ponprop "plista2 "p1 2

popls

Ponprop "plista1 "p1 1

Ponprop "plista2 "p1 2

bopl [plista2]

popls

Ponprop "plista1 "p1 1


TAPA

TAPA contenidolista

Oculta los procedimientos, variables  y listas de propiedades contenidos que aparecen en su entrada.  Un elemento tapado no se incluye en las listas de salida de  CONTENIDO, IMTS, LVARS, y IMPROP, pero se incluye en la lista de salida de TAPADO.  Por implicación,  IMTODO  no escribirá los objetos tapados, ni los guardará GUARDA.

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

Ejemplo:

;pots no funciona. En su lugar:muestra imts

para foo

Escribe [Estoy aquí]

fin

para bar

Escribe [Allí estoy]

fin

pots

para bar

para foo

tapa [[foo] [] []]

pots

para bar

foo

Allí estoy


TAPATODO

TAPATODO	(Procedimiento de la librería)

Es la abreviatura de TAPA CONTENIDO.

Ejemplo:

;pots no funciona. En su lugar: muestra imts

para foo

Escribe [Estoy aquí]

fin

para bar

Escribe [Allí estoy]

fin

pots

para bar

para foo

tapatodo

pots

foo

Estoy aquí

bar

Allí estoy


TAPANOMBRE

TAPANAME nombrevariable	(Procedimiento de la librería)

TAPANAME varlistanombres	(Procedimiento de la librería)

Es la abreviatura de TAPA LISTANOMBRES nombrevariable (lista).

nombrevariable:(PALABRA) Nombre de variable que será tapada.

varlistanombres:(LISTA) Lista de nombres de variables que serán tapadas.

Ejemplo:

haz "foo 1

haz "bar 2

imvariables

Haz "bar 2

Haz "foo 1

tapanombre [foo]

imvariables

Haz "bar 2

muestra :foo

1

muestra :bar

2


DESTAPA

DESTAPA contenidolista

Destapa los procedimientos, variables  y listas de propiedades que aparecen en la entrada contenidolista.  Esto  es, estos elementos se mostrarán con  CONTENIDO, etc.

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

Ejemplo:

haz "foo 1

haz "bar 2

imvariables

Haz "bar 2

Haz "foo 1

tapanombre [foo]

imvariables

Haz "bar 2

destapa [[] [foo] []]

imvariables

Haz "bar 2

Haz "foo 1


DESTAPATODO

DESTAPATODO	(Procedimiento de la librería)

Es la abreviatura de DESTAPA TAPADO.

Ejemplo:

haz "foo 1

haz "bar 2

imvariables

Haz "bar 2

Haz "foo 1

tapanombre [foo]

imvariables

Haz "bar 2

destapatodo

imvariables

Haz "bar 2

Haz "foo 1


DESTAPANOMBRE

DESTAPANOMBRE nombrevariable	(Procedimiento de la librería)

DESTAPANOMBRE varlistanombres	(Procedimiento de la librería)

Es la abreviatura de DESTAPA LISTANOMBRES nombrevariable (lista).

nombrevariable:(PALABRA) Nombre a destapar.

varlistanombres:(LISTA) Lista de nombres a destapar.

Ejemplo:

haz "foo 1

haz "bar 2

imvariables

Haz "bar 2

Haz "foo 1

tapanombre [foo]

imvariables

Haz "bar 2

destapa [foo]

imvariables

Haz "bar 2

Haz "foo 1


TRAZA

TRAZA contenidolista

Marca un elemento para ser ejecutado en modo trazar.  En este modo y cuando se ejecuta un procedimiento, Logo envía un mensaje con los valores actuales de las entradas,  siempre que el  procedimiento se ejecute en modo trazado y con las primitivas ALTO o DEVUELVE.  Envía un mensaje siempre que se asigna un nuevo valor  a una variable  usando HAZ,  o se incluye una nueva propiedad en una lista usando PONPROP, (marcada para trazar).  Vea también NOTRAZA y Botón TRAZAR.

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

Ejemplo:

para myprog :a

escribe :a

fin

myprog "Hola

Hola

traza "myprog

myprog "Hola

(myprog "Hola)

Hola

notraza "myprog

myprog "Hola

Hola


NOTRAZA

NOTRAZA contenidolista

Desactiva el modo traza. Vea también TRAZA y Botón TRAZAR.

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

Ejemplo:

para myprog :a

escribe :a

fin

myprog "Hola

Hola

traza "myprog

myprog "Hola

(myprog "Hola)

Hola

notraza "myprog

myprog "Hola

Hola


PASO

PASO contenidolista

Marca un elemento para su ejecución en modo PASO.  Siempre que se invoca un procedimiento en este modo, Logo escribe cada línea de  instrucción  del cuerpo del procedimiento  antes de ejecutarla y  espera una pulsación del usuario para continuar con una nueva línea; también envía  un mensaje siempre que el nombre de una variable “hace sombra a otra” porque se crea una variable local con el mismo nombre con LOCAL  o se utiliza una entrada de un  procedimiento con el mismo nombre. Vea también PASO y el Botón PASO.

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

Ejemplo:

para myprog

av 10

gd 90

av 20

gi 90

fin

myprog

paso "myprog

<Cada línea de myprog esperará OK para continuar con la siguiente línea>

myprog

nopaso "myprog

myprog


NOPASO

NOPASO contenidolista

Suprime la ejecución en modo PASO. Vea también PASO y Botón PASO.

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

Ejemplo:

para myprog

av 10

gd 90

av 20

gi 90

fin

myprog

paso "myprog

<Cada línea de myprog esperará OK para continuar con la siguiente línea>

myprog

nopaso "myprog

myprog


EDITA

EDITA contenidolista

ED contenidolista

(EDITA)

(ED)

Edita las definiciones de elemento(s), usando el Editor de Logo.  Vea también en Editor detalles sobre el trabajo con el editor.

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

Ejemplo:

para "myprog

escribe "Horla

fin

myprog

Horla

edita "myprog

<Cambie Horla por Hola y salga del Editor>

myprog

Hola


EDITATODO

EDITATODO	(Procedimiento de la librería)

Es la abreviatura de EDITA CONTENIDO.

Ejemplo:

para myprog

escribe :myarg

fin

haz "myarg "Horla

myprog

Horla

editatodo

<Cambie Horla por Hola y salga del Editor>

myprog

Hola


EDPS

EDPS	(Procedimiento de la librería)

Es la abreviatura de EDITA IMTS.

Ejemplo:

para "myprog1

escribe "Horla

fin

para "myprog2

escribe "Adior

fin

myprog1

Horla

myprog2

Adior

edps

<cambie Horla por Hola, Adior por adios y salga del Editor>

myprog1

Hola

myprog2

Adios


EDNS

EDNS	(Procedimiento de la librería)

Es la abreviatura de EDITA LVARS.

Ejemplo:

para myprog

escribe :myarg

fin

haz "myarg "Horla

myprog

Horla

edns

<cambie Horla por Hola y salga del Editor>

myprog

Hola


EDPLS

EDPLS	(Procedimiento de la librería)

Es la abreviatura de EDITA IMPROP.

Ejemplo:

ponprop "plista1 "p1 1

popls

Ponprop "plista1 "p1 1

edpls

<cambie 1 por 2 y salga del Editor>

popls

Ponprop "plista1 "p1 2


EDN

EDN nombrevariable	(Procedimiento de la librería)

EDN varlistanombres	(Procedimiento de la librería)

Es la abreviatura de EDITA LISTANOMBRES nombrevariable (lista).

nombrevariable:(PALABRA).

varlistanombres:(LISTA).

Ejemplo:

para myprog

escribe :myarg

fin

haz "myarg "Horla

myprog

Horla

edn "myarg

<cambie Horla por Hola y salga del Editor>

myprog

Hola


EDPL

EDPL plnombre	(Procedimiento de la librería)

EDPL pllistanombres	(Procedimiento de la librería)

Es la abreviatura de EDITA PLLIST plnombre(lista).

plnombre:(PALABRA).

pllistanombres:(LISTA).

Ejemplo:

ponprop "plista1 "p1 1

popls

Ponprop "plista1 "p1 1

edpl "plista1

<cambie 1 por 2 y salga del Editor>

popls

Ponprop "plista1 "p1 2


GUARDA

GUARDA nombrefichero

Guarda las definiciones de todos los procedimientos, variables  y  listas de propiedades, si no están tapados.

nombrefichero:(PALABRA).

Ejemplo:

;pots no funciona. En su lugar: muestra imts

para myprog1

escribe "Hola1

fin

para myprog2

escribe "Hola2

fin

pots

para myprog1

para myprog2

guarda "myprogs.lgo

borratodo

pots

carga "myprogs.lgo

pots

para myprog1

para myprog2


GUARDAL

GUARDAL contenidolista nombrefichero	 (Procedimiento de la librería)

Guarda las definiciones de los procedimientos, variables  y listas de propiedades que se especifican en "contenidolista" en el fichero "nombrefichero".

contenidolista:(LISTA) Lista de tres listas con procedimientos, variables y propiedades.

nombrefichero:(PALABRA) Nombre del fichero.

Ejemplo:

;pots no funciona. En su lugar: muestra imts

para myprog1

escribe "Hola1

fin

para myprog2

escribe "Hola2

fin

pots

para myprog1

para myprog2

guardal [[myprog1] [] []] "myprogs.lgo

borratodo

pots

carga "myprogs.lgo

pots

para myprog1


CARGA

CARGA nombrefichero

Carga un fichero.  El fichero puede incluir definiciones de procedimiento con PARA, que serán aceptados aunque esos procedimientos existan.

Si Logo ve un PARA definirá ese procedimiento.

Si Logo ve un HAZ creará la variable.

Si Logo ve código fuera de la definición de un procedimiento, lo ejecutará en el orden en que aparezca.

nombrefichero:(PALABRA).

Ejemplo:

;pots no funciona. En su lugar: muestra imts

para myprog1

escribe "Hola1

fin

para myprog2

escribe "Hola2

fin

pots

para myprog1

para myprog2

guarda "myprogs.lgo

borratodo

pots

carga "myprogs.lgo

pots

para myprog1

para myprog2


QUITAESTADO

QUITAESTADO

Tiene el mismo efecto  que pulsar NO BOTÓN ESTADO.  Vea también ESTADO .

Ejemplo:

estado

quitaestado


ESTADO

ESTADO

Tiene el mismo efecto que pulsar  BOTÓN ESTADO.  Vea también QUITAESTADO .

Ejemplo:

estado

quitaestado


ESTRUCTURAS DE CONTROL

ÓRDENES DE CONTROL


ÓRDENES DE CONTROL

EJECUTA

RESULTADOEJECUTA

REPITE

CUENTAREPITE

SI

SISINO

PRUEBA

SICIERTO

SIFALSO

VERDADERO

FALSO

ALTO

DEVUELVE

COGE

ENVIA

ERROR

PAUSA

CONTINUA

NOEXCLUSIVO

EXCLUSIVO

SIEVENTO

PONCURSORESPERA

PARADA

ESPERA

PONCONTADOR

CONTADORACERO

ADIOS

.MAYBEDEVUELVE

IGNORA

`

DESDE

HAZ.MIENTRAS

MIENTRAS

HAZ.HASTA

HASTA

GOTO

TAG


EJECUTA

EJECUTA listainstrucción

Ejecuta las instrucciones Logo que contiene la entrada  (listainstrucción).

Listainstrucción:(LISTA) Lista de instrucciones Logo a ejecutar.

Ejemplo:

haz "thingstodo [escribe]

haz "thingstodo ponultimo "\"Hola :thingstodo

ejecuta :thingstodo

Hola


RESULTADOEJECUTA

RESULTADOEJECUTA listainstrucción

Ejecuta las instrucciones de la entrada. Devuelve una lista vacía si las instrucciones no tienen salida, o una lista con un solo miembro si hay una salida. Útil para crear órdenes u operaciones de estructuras de control:

local "result

haz "result resultadoejecuta [algo]

si vacio? :result [alto]

devuelve primero :result

Listainstrucción:(LISTA) Lista de Logo con instrucciones a ejecutar.

Ejemplo:

haz "thingstodo [primero [1 2 3]]

haz "answer resultadoejecuta :thingstodo

muestra :answer

[1]


REPITE

REPITE número listainstrucción

Ejecuta una lista de instrucciones  (listainstrucción) tantas veces como indique la primera entrada (número).  Vea también CUENTAREPITE.

número:(ENTERO) Número de veces que se ejecuta una lista de instrucciones.

Listainstrucción:(LISTA) Lista de instrucciones Logo a ejecutar repetidamente.

Ejemplo:

repite 3 [escribe (lista "Es "la "vuelta cuentarepite)]

Es la vuelta 1

Es la vuelta 2

Es la vuelta 3


CUENTAREPITE

contador CUENTAREPITE

Sólo puede usarse dentro de un REPITE.  Devuelve el número de repeticiones finalizadas, incluyendo la actual.  Esto es, devuelve la primera vez 1; 2, la segunda vez, y así sucesivamente.

contador:(ENTERO) Valor actual del contador de REPITE.

Ejemplo:

repite 3 [escribe (lista "Es "la "vuelta cuentarepite)]

Es la vuelta 1

Es la vuelta 2

Es la vuelta 3


SI

objeto SI prueba listainstrucción

objeto (SI prueba listainstrucción1 listainstrucción2)

Primitiva condicional con dos formas:

Primera forma:

Si la condición (prueba) tiene el valor VERDADERO, entonces SI ejecuta una lista de instrucciones (listainstrucción).

Si prueba tiene como valor FALSO, entonces SI no ejecuta nada. Vea también  SISINO.

Se produce un error si la  condición no tiene un valor VERDADERO o FALSO.

Segunda forma:

Funciona igual que SISINO. Si se cumple la condición se ejecuta la primera lista; si no se cumple, se ejecuta la segunda. Observe que la sintaxis requiere el uso de los paréntesis y que si se omiten, por compatibilidad con anteriores versiones de Logo, si una instrucción SI no está entre paréntesis, se trata  SI como si fuera SISINO, pero se envía un mensaje de advertencia.

objeto:(OBJETO)

prueba:(BOOLEAN) Expresión a  probar.

listainstrucción:(LISTA) Lista de instrucciones Logo a ejecutar si prueba es VERDADERO.

listainstrucción1:(LISTA) Lista de instrucciones Logo a ejecutar si prueba es VERDADERO.

listainstrucción2:(LISTA) Lista de instrucciones Logo a ejecutar si prueba es FALSO.

Ejemplo:

si 1=1 [escribe [Si, es verdadero]]

Si, es verdadero

Ejemplo (donde funciona igual que SISINO):

para max :a :b

devuelve (si :a > :b [:a] [:b])

fin

muestra max 1 2

2


SISINO

objeto SISINO prueba listainstrucción1 listainstrucción2

Primitiva condicional.  Si la condición prueba tiene el valor VERDADERO, entonces SISINO ejecuta istaainstrucción1.

Si la condición prueba tiene como valor FALSO, entonces SISINO ejecuta listainstrucción2.

SISINO puede devolver un valor.

objeto:(OBJETO)

prueba:(BOOLEAN) Expresión que es una prueba de verdad.

listainstrucción:(LISTA) Lista de instrucciones Logo a ejecutar si prueba es VERDADERO.

listainstrucción1:(LISTA) Lista de instrucciones Logo a ejecutar si prueba es VERDADERO.

listainstrucción2:(LISTA) Lista de instrucciones Logo a ejecutar si prueba es FALSO.

Ejemplo:

sisino 1=1 [escribe [Si, es verdadero]] [escribe [No, es falso]]

Si, es verdadero

sisino 1=0 [escribe [Si, es verdadero]] [escribe [No, es falso]]

No, es falso

Ejemplo (donde sisino devuelve un valor)

para max :a :b

devuelve sisino :a > :b [:a] [:b]

fin

muestra max 1 2

2


PRUEBA

PRUEBA prueba

Recuerda su entrada, que debe tener el valor VERDADERO o FALSO, que se usará después con las primitivas  SICIERTO o SIFALSO.  El efecto de PRUEBA es local dentro del procedimiento en que se usa.

prueba:(BOOLEANO) Expresión que es una prueba de verdad.

Ejemplo:

para miprueba :arg

prueba 1=:arg

escribe [Haga esto]

escribe [Haga eso]

sicierto [escribe [arg es el número uno]]

sifalso [escribe [arg no es el número uno]]

fin

miprueba 1

Haga esto

Haga eso

arg es el número uno


SICIERTO

SICIERTO listainstrucción

SIC listainstrucción

Ejecuta su entrada, listainstrucción,  si la última instrucción PRUEBA tiene el valor VERDADERO. PRUEBA debe usarse en el mismo procedimiento o superprocedimiento.

listainstrucción:(LISTA) Lista de instrucciones Logo a ejecutar si la última PRUEBA tiene el valor VERDADERO.

Ejemplo:

para miprueba :arg

prueba 1=:arg

escribe [Haga esto]

escribe [Haga eso]

sicierto [escribe [arg es el número uno]]

sifalso [escribe [arg no es el número uno]]

fin

miprueba 1

Haga esto

Haga eso

arg es el número uno


SIFALSO

SIFALSO listainstrucción

SIF listainstrucción

Ejecuta su entrada, listainstrucción,  si la última instrucción PRUEBA tiene el valor FALSO. PRUEBA debe usarse en el mismo procedimiento o superprocedimiento.

listainstrucción:(LISTA) Lista de instrucciones Logo a ejecutar si la última PRUEBA tiene el valor FALSO.

.

Ejemplo:

para miprueba :arg

prueba 1=:arg

escribe [Haga esto]

escribe [Haga eso]

sicierto [escribe [arg es el número uno]]

sifalso [escribe [arg no es el número uno]]

fin

miprueba 0

Haga esto

Haga eso

arg no es el número uno


VERDADERO

VERDADERO	(Forma especial)

Es una palabra especial que indica el resultado positivo de una condición.

Ejemplo:

muestra 1=1

verdadero

si "verdadero [escribe [Verdadero es siempre verdadero]]

Verdadero es siempre verdadero


FALSO

FALSO	(Forma especial)

Es una palabra especial que indica el resultado negativo de una condición.

Ejemplo:

muestra 1=0

falso

sisino "falso [escribe [No puede entrar aquí]] [escribe [Falso es siempre falso]]

Falso es siempre falso


ALTO

ALTO

Termina la ejecución del procedimiento en que aparece. Devuelve el control al contexto en el que se llamó el procedimiento.  El procedimiento no devuelve ningún valor.

Ejemplo:

para myprog :arg

escribe [Antes de Alto]

si 1=:arg [alto]

escribe [Después de Alto]

fin

myprog 1

Antes de Alto

myprog 2

Antes de Alto

Después de Alto


DEVUELVE

DEVUELVE valor

DEV valor

Termina la ejecución del procedimiento en  que aparece y devuelve un valor.

valor:(OBJETO).

Ejemplo:

para miprograma

devuelve [Lo que devuelve es esto]

fin

muestra miprograma

[Lo que devuelve es esto]


COGE

COGE tag listainstrucción

valor COGE tag listainstrucción

Ejecuta una lista de instrucciones y devuelve una salida de, si la tiene.  Si, mientras se ejecutan las instrucciones, se ejecuta un ENVIA con una entrada igual a tag, entonces termina la ejecución. Tag debe ser una palabra.

Si la palabra tag es ERROR, entonces cualquier condición de error que surja durante la ejecución de la lista de instrucciones tiene el efecto de ENVIA "ERROR en lugar de escribir un mensaje de error y volver al nivel superior.

valor:(OBJETO).

tag:(PALABRA).

listainstrucción:(LISTA) Ejemplo:

para miprograma2

escribe [Antes de enviar]

envia "tag1

escribe [Nunca entra aquí porque ENVIA retrocede]

fin

para miprograma1

coge "tag1 [miprograma2]

escribe [Estoy de vuelta]

fin

miprograma1

Antes de envia

Estoy de vuelta


ENVIA

ENVIA etiqueta

(ENVIA etiqueta valor)

Debe usarse con una etiqueta con el mismo alcance que COGE.  Termina la ejecución de la lista de instrucciones de  COGE.  Si ENVIA se usa con solo una entrada, el correspondiente COGE no devuelve ningún valor.  Si ENVIA se usa con dos entradas, la segunda proporciona la salida de COGE.

valor:(OBJETO) Valor de ENVIA que COGE devolverá.

etiqueta:(PALABRA) Nombre de la etiqueta.

ENVIA "ERROR puede usarse para generar una condición  de error.  Si no detecta error, escribe un mensaje (ENVIA "ERROR) con la usual indicación sobre dónde ocurrió el error (en este caso el ENVIA).  Si se usa una segunda entrada  tras la etiqueta  ERROR, esta segunda entrada se usa como texto del mensaje de error en lugar del mensaje habitual.  También, en este caso, la locación del error estará, no en la de ENVIA, sino en el procedimiento que llama ENVIA.  Permite definir  procedimientos para generar mensajes de error.

Ejemplo:

para miprograma2

escribe [Antes de envia]

(envia "etiqueta1 [Necesitamos volver])

escribe [Nunca entra aquí porque ENVIA retrocede]

fin

para miprograma1

muestra coge "etiqueta1 [miprograma2]

escribe [Estoy de vuelta]

fin

miprograma1

Antes de envia

[Necesitamos volver]

Estoy de vuelta


ERROR

errorlista ERROR

Devuelve una lista que describe el error.  Si no hay error después del último uso de ERROR, devuelve una lista vacía.  La lista con el error contiene cuatro miembros: un entero que indica el código del tipo de error, el texto del mensaje de error, el nombre del procedimiento en donde se produce el error, y la línea de instrucciones en que ocurre el error. (Vea también la lista de CÓDIGOS DE ERRORES).

errorlista:(LISTA).

Ejemplo:

para miprograma

av 1000

fin

cerca

coge "error [miprograma]

muestra error

[3 [La tortuga está fuera de límites] miprograma [av 1000]


PAUSA

valor PAUSA

PAUSA

Introduce una pausa interactiva. El usuario recibe  instrucciones en las que aparece el nombre del procedimiento en que se invocó  PAUSA.  Las variables locales de este procedimiento están disponibles durante la pausa.  Cuando termina PAUSA devuelve  CONTINUA con una entrada.

valor:(OBJETO) Ejemplo:

para miprograma

repite 180 [gd 2 si 90=cuentarepite [pausa]]

escribe "Hecho

fin

miprograma

Poniendo pausa...miprograma

Hecho


CONTINUA

CONTINUA valor

CO valor

(CONTINUA)

(CO)

Termina la pausa interactiva, volviendo al contexto desde el que se llamó a PAUSA.  Si  CONTINUA se produce en una entrada,  PAUSA devuelve ese valor.  Si no,  PAUSA no devuelve nada.

valor:(OBJETO) Valor que retrocede hasta  PAUSA que lo devuelve.

Excepcionalmente, CONTINUA se puede usar sin su entrada y sin paréntesis con tal que esté en una línea de instrucciones.

Ejemplo:

para miprograma

repite 180 [gd 2 si 90=cuentarepite [pausa]]

escribe "Hecho

fin

miprograma

Poniendo pausa...miprograma

<Entre MUESTRA RUMBO en la ventana Pausa-Box y pulse OK>

180

<Entre CONTINUA en la ventana Pausa Box y pulse OK>

Hecho


NOEXCLUSIVO

NOEXCLUSIVO

NOEXCLUSIVO permite que otros programas usen la computadora mientras LOGO trabaja; en cambio,   EXCLUSIVO  no lo permite.  El modo por defecto es NOEXCLUSIVO.  Observe que la ventana Trabajo es otro programa.  Esto es, si se ha usado un EXCLUSIVO, la ventana Trabajo pierde el control (el Botón Parada no trabajará) hasta que se use un NOEXCLUSIVO o LOGO esté inactivo. LOGO trabaja más rápido si dispone de la computadora para él sólo. Vea también EXLUSIVO.

Ejemplo:

 3 casos:

Caso 1 (El usuario tiene el control de 10,000 operaciones):

noexclusivo

repite 100 ~

   [~

   repite 100 ~

      [~

      escribe "hecho~

      ]~

   ]

Caso 2 (El usuario pierde el control de 10,000 operaciones, ejecución rápida):

exclusivo

repite 100 ~

   [~

   repite 100 ~

      [~

      escribe "hecho~

      ]~

   ]

Caso 3 (El usuario pierde el control de 100 operaciones, ejecución aun más rápida):

repite 100~

   [~

   exclusivo~

   repite 100 ~

      [~

      escribe "hecho~

      ]~

   noexclusivo~

   ]

   ]


EXCLUSIVO

EXCLUSIVO

No permite que otros programas usen la computadora mientras LOGO trabaja.  El modo por defecto es NOEXCLUSIVO.  Vea también NOEXCLUSIVO.

Ejemplo:

Vea el ejemplo de NOEXCLUSIVO.


SIEVENTO

SIEVENTO

SIEVENTO es similar a llamar a NOEXCLUSIVO seguido de EXCLUSIVO .  Chequea si hay eventos en espera de ser procesados.  Las órdenes que producen "interrupciones" se ejecutan en modo EXCLUSIVO.  Si el código de la interrupción es corto y rápido no presentará problemas.  Pero si es largo el usuario perderá el control durante ese tiempo.

Ejemplo:

ponraton [repite 72 [repite 4 [av 100 gd 90] gd 5]] [] [] [] []

<Haga clic en la pantalla de MSWLogo>

<observe que mientras se dibuja no puede utilizar PARADA, porque la interrupción  trabaja en modo  exclusivo>

ponraton [repite 72 [repite 4 [av 100 gd 90] gd 5 sievento]] [] [] [] []

<Haga clic en la pantalla de MSWLogo>

<observe que mientras se dibuja puede utilizar PARADA.


PONCURSORESPERA

PONCURSORESPERA

Pondrá el cursor en la forma de reloj de arena para indicar dos cosas.  Una es que la  operación tardará algún tiempo;  la otra es que durante ese tiempo el usuario no tiene el control de Windows (EXCLUSIVO).  Esta función sólo trabaja en modo EXCLUSIVO. Una vez que se vuelva al modo NOEXCLUSIVO se usará el cursor apropiado al siguiente evento.  Esto significa que debe usar EXCLUSIVO antes de cada PONCURSORESPERA.  Si decide utilizar momentáneamente NOEXCLUSIVO debe utilizar  PONCURSORESPERA de nuevo.  En otras palabras si quiere usar PONCURSORESPERA, lo deberá  hacer antes de EXCLUSIVO.

Existe otra primitiva: PONCURSORNOESPERA, aunque no está documentada en el fichero de ayuda. Esta primitiva restaura la forma anterior del cursor.

Ejemplo:

repite 100~

   [~

   exclusivo~

   poncursorespera~

   repite 100 ~

      [~

      (trabajo hecho)~

      ]~

   poncursornoespera~

   noexclusivo~

   ]


PARADA

PARADA

Equivale a pulsar  Botón ALTO pero bajo el control de Logo.

Ejemplo:

repite 1000 [av 100 re 100 gd 1]

<Pulse el botón PARADA mientras dibuja>

Parando...


ESPERA

ESPERA tiempo

Retrasa la ejecución durante un tiempo 1/60 de segundo

tiempo:(ENTERO).

Ejemplo:

espera 60


PONCONTADOR

PONCONTADOR id delay callback

Instala un cronómetro identificado por id (1-31) que produce una interrupción durante milisegundos hasta que se llame a  CONTADORACERO .

id:(ENTERO)  (1-31).

delay:(ENTERO) Intervalo en que se produce la interrupción.

callback:(LISTA) Lista de instrucciones a ejecutar durante la interrupción.

Ejemplo:

poncontador 1 200 [poncolorlapiz (lista azar 256 azar 256 azar 256)]

<Observe que MSWLogo vuelve a esta línea y cambia el color del lápiz)>

repite 72 [repite 4 [av 100 gd 90] gd 5]

contadoracero 1


CONTADORACERO

CONTADORACERO id

Borra el  tiempo puesto por PONCONTADOR e identificado por  id (1-31).

id:(ENTERO) Identificador (1-31).

Ejemplo:

poncontador 1 200 [poncolorlapiz (lista azar 256 azar 256 azar 256)]

repite 72 [repite 4 [av 100 gd 90] gd 5]

contadoracero 1


ADIOS

ADIOS

Sale de Logo y vuelve al sistema operativo.

Ejemplo:

adios


.MAYBEOUTPUT
.MAYBEDEVUELVE

valor	(Forma especial)

(No se encuentra).


IGNORA

IGNORA valor	(Procedimiento de la librería)

Ignora un efecto que no se considera importante.

valor:(OBJETO).

Ejemplo:

para miprograma :arg

escribe :arg

devuelve cuenta :arg

fin

miprograma "Hello

Hello

No me has dicho qué hacer con  5

ignora miprograma "Hello

Hello


`

newlista ` lista	(Procedimiento de la librería)

Devuelve una lista igual a su entrada pero con ciertas substituciones.  Si un miembro de la lista es la palabra "," (coma) entonces el siguiente miembro debe ser una  lista que produce una salida cuando se ejecuta.  Esa salida reemplaza a la coma y a la lista.  Si un miembro de la lista es la palabra ",@"  entonces el siguiente miembro debe ser una lista que devuelve una lista cuando se ejecuta.  Los miembros de esa lista reemplazan  a @ y a la lista.

newlista:(LISTA).

lista:(LISTA).

Ejemplo:

muestra `[foo baz ,[menosprimero [a b c]] garply ,@[menosprimero [a b c]]]

[foo baz [b c] garply b c]


DESDE

DESDE desdecontrol listainstrucción	(Procedimiento de la librería)

Tiene como primera entrada una lista con tres o cuatro miembros: (1) una palabra que es el nombre de una variable local; (2) una palabra o lista que contiene el valor inicial de la variable; (3) una palabra o lista que indica el valor límite de la variable; (4) y una palabra o lista que determina el incremento opcional.  Si falta el cuarto miembro tendrá el valor 1 o –1, dependiendo de que el valor límite sea mayor o menor que el inicial.

La segunda entrada es una lista de instrucciones.  DESDE ejecuta repetidamente las instrucciones contenidas en listainstrucción, y asigna un nuevo valor a la variable de control.  Primero asigna  el valor a la variable de control y compara ese valor con el valor límite. Si la variable es mayor que el valor límite, la ejecución continua en la línea siguiente; en otro caso, se ejecutan las instrucciones contenidas en listainstrucción y se incrementa la variable en el valor del incremento.

desdecontrol:(LISTA).

listainstrucción:(LISTA).

Ejemplo:

desde [i 2 7 1.5] [escribe :i]

2

3.5

5

6.5


HAZ.MIENTRAS

HAZ.MIENTRAS listainstrucción pruebalista	(Procedimiento de la librería)

Ejecuta una lista de instrucciones (listainstrucción)  mientras se cumpla la condición pruebalista. Observe que la condición es el  segundo argumento.

listainstrucción:(LISTA) Lista de instrucciones Logo a ejecutar mientras la cumpla la condición.

pruebalista:(BOOLEAN) Condición dentro de una lista.

Ejemplo:

haz "i 0

haz.mientras [haz "i :i+1 escribe :i] [:i<3]

1

2

3


MIENTRAS

MIENTRAS pruebalista listainstrucción	(Procedimiento de la librería)

Ejecuta una lista de instrucciones (listainstrucción)  mientras se cumpla la condición pruebalista. Observe que la condición es el primer argumento.

.

pruebalista:(BOOLEAN): La condición dentro de una lista.

listainstrucción:(LISTA): Lista con las instrucciones a ejecutar.

 Ejemplo:

haz "i 0

mientras [:i<3] [haz "i :i+1 escribe :i]

1

2

3


HAZ.HASTA

HAZ.HASTA listainstrucción pruebalista	(Procedimiento de la librería)

Ejecuta una lista de instrucciones hasta que una condición tenga el valor FALSO. La condición es el segundo argumento.

listainstrucción:(LISTA) Lista de instrucciones a ejecutar.

pruebalista:(BOOLEAN) Condición dentro de una lista .

Ejemplo:

haz "i 0

haz.hasta [haz "i :i+1 escribe :i] [:i>3]

1

2

3

4


HASTA

HASTA pruebalista  listainstrucción	 (Procedimiento de la librería)

Ejecuta una lista de instrucciones hasta que una condición tenga el valor FALSO. La condición es el primer argumento.

listainstrucción:(LISTA) Lista de instrucciones a ejecutar.

pruebalista :(BOOLEAN) Condición dentro de una lista.

Ejemplo:

haz "i 0

hasta [:i>3] [haz "i :i+1 escribe :i]

1

2

3

4


GOTO

GOTO etiqueta

(No se encuentra)


TAG

TAG etiqueta

(No se encuentra)


MACRO
MACROS

.MACRO


.MACRO

Una macroinstrucción es un tipo especial de procedimiento cuya salida se evalúa como una instrucción Logo.  .MACRO es semejante a  PARA excepto que el nuevo procedimiento es una macroinstrucción.

nombreproc:(PALABRA) Nombre del procedimiento macroinstrucción a definir.

entrada1:(PALABRA) Primer argumento.

entrada2:(PALABRA) Segundo argumento.

Las macros se usan para crear nuevas estructuras de control comparables a  REPITE, SI.  Por ejemplo, una versión de  REPITE:

para mi.repite :num :instructions

si :num=0 [alto]

ejecuta :instructions

mi.repite :num-1 :instructions

fin

mi.repite 5 [escribe "hola]

Esta versión de Repite no funciona bien si se incluyen instrucciones como  DEVUELVE, ALTO o LOCAL.  Por ejemplo, considere este procedimiento:

para ejemplo

escribe [Averigüe mi palabra secreta en tres intentos.]

repite 3 [muestrat "|?? | ~

si leepalabra = "secreta [escribe "Exacto! alto]]

escribe [Lo siento, la palabra es "secreta"!]

fin

Si utiliza MI.REPITE en este procedimiento en lugar de REPITE, no funcionará  porque ALTO detiene MI.REPITE en lugar de EJEMPLO.

La solución para MI.REPITE es una macro.  Una macro que es una versión de REPITE:

.macro mi.repite :num :instructions

si :num=0 [devuelve []]

devuelve frase :instructions ~

(lista "mi.repite :num-1 :instructions)

fin

mi.repite 5 [escribe "hola]

escribe "hola mi.repite 4 [escribe "hola]


PROCESO DE ERRORES

CÓDIGOS DE ERRORES


CÓDIGOS DE ERRORES

  0	Fatal internal error (can't be caught)

  1	Out of memory (can't be caught)

  2	PROC doesn't like DATUM as input (not recoverable)

  3	PROC didn't output to PROC

  4	Not enough inputs to PROC

  5	PROC doesn't like DATUM as input (recoverable)

  6	Too much inside ( )'s

  7	I don't know what to do with DATUM

  8	')' not found

  9	VAR has no value

 10	Unexpected ')'

 11	I don't know how to PROC (recoverable)

 12	Can't find catch tag for THROWTAG

 13	PROC is already defined

 14	Stopped

 15	Already dribbling

 16	File system error

 17	Assuming you mean SISINO, not Si (warning only)

 18	VAR shadowed by local in procedure call (warning only)

 19	Throw "Error

 20	PROC is a primitive

 21	Can't use PARA inside a procedure

 22	I don't know how to PROC (not recoverable)

 23	SICIERTO/SIFALSO without PRUEBA

 24	Unexpected ']'

 25	Unexpected '}'

 26	Couldn't initialize graphics

 27	Macro returned VALUE instead of a list

 28	I don't know what to do with VALUE

 29	Can only use ALTO or DEVUELVE inside a procedure


ÓRDENES DE AYUDA

AYUDA

AYUDADEWINDOW


AYUDA

AYUDA

(AYUDA keypalabra)

Tiene dos  formas (con y sin argumento por teclado).  Sin argumento,  Logo entra en el nivel superior del fichero de ayuda de Logo.  Con argumento, Logo buscará en el fichero de ayuda el tema o temas indicados por el argumento.  El argumento puede ser el nombre completo del tema o una parte del mismo.

keypalabra:(PALABRA).

Ejemplo:

ayuda "introducción ;(Entra en el tema introducción de la ayuda)

ayuda "intro ;(Entra en el motor de búsqueda de la ayuda)

Para Ayuda Sensible al Contexto, vea EDITA.

Observe que la Ayuda permite copiar en el Portapapeles el texto seleccionado (los ejemplos, en especial) que podrá pasar al Editor o a la ventana Trabajo de Logo para que sean ejecutados:

Haga clic en EDICIÓN del Menú de la Ayuda.

Seleccione Copiar (Con ello se copia en el Portapapeles la página en la que se encuentra.

Puede también seleccionar con el ratón el texto deseado (el código de un ejemplo).

Clic en Copiar del Menú EDICIÓN o CONTROL-C (El texto pasa al Portapapeles).

Entre en el Editor de Logo.

Coloque el cursor donde desee insertar el ejemplo.

Seleccione  EDITAR.

Seleccione pegar.


AYUDADEWINDOWS

AYUDADEWINDOWS nombrefichero

(AYUDADEWINDOWS nombrefichero keypalabra)

Tiene dos  formas (con y sin segundo argumento por teclado).  Sin un segundo argumento,  Logo entra en el nivel superior del fichero de ayuda especificado.  Con argumento,  Logo buscará en el fichero de ayuda seleccionado el tema o temas indicados por el argumento.  Debe entrar la palabra completa.

 nombrefichero:(PALABRA) Ruta del fichero de ayuda que quiere abrir.

keypalabra:(PALABRA) Palabra a introducir en el motor de búsqueda de la ayuda.

Ejemplo:

(ayudadewindows "c:\\miayuda "introducción)


PRIMITIVAS  DE DIRECTORIOS

DIR

DIRECTORIO

DIRECTORIOS

CAMBIADIRECTORIO

POPDIR

CREADIRECTORIO


DIR

DIR	(Procedimiento de la librería)

Escribe una lista de ficheros y directorios comprendidos en el directorio actual.

Ejemplo:

dir

File LOGO.EXE

File LOGO.HLP

File MYPROG.LG

Directory .

Directory ..

Directory LOGOLIB

Directory EJEMPLOS


DIRECTORIO

listaficheros DIRECTORIO

Devuelve la lista de ficheros del directorio actual.

listaficheros:(LISTA) Lista de ficheros.

Ejemplo:

muestra directorio

[logo.doc logo.exe LOGICEX.BMP LICENSE.TXT MSWLOGO.TXT mcistrwh.hlp LOGO.CNT]]


DIRECTORIOS

listadirectorios directorios

Devuelve  la lista de directorios comprendidos en el directorio actual.

listadirectorios:(LIST) Lista de directorios.

Ejemplo:

muestra directorios

[EJEMPLOS LOGOLIB .. .]


CAMBIADIRECTORIO

CAMBIADIRECTORIO directorio

CD directorio

Es exactamente igual que  la orden CHDIR (CD) del DOS.  El argumento debe ser una palabra (el  nombre del directorio  al que se quiere llegar).

directorio:(PALABRA) Ruta del directorio.

Ejemplo:

cambiadirectoio "examples

Pushed to C:\LOGO\EXAMPLES

directoriopadre

Entrando en C:\LOGO


DIRECTORIOPADRE

DIRECTORIOPADRE

Le lleva al  nivel superior  de un directorio.  Vea también CREADIRECTORIO

Ejemplo:

cambiadirectorio "ejemplos

Pushed to C:\LOGO\EJEMPLOS

directoriopadre

Entrando en C:\LOGO


CREADIRECTORIO

CREADIRECTORIO directorio

Crea un directorio y le lleva a él.  El parámetro debe ser una palabra (el nombre del directorio que se quiere crear).

 directorio:(PALABRA) Ruta del directorio que se quiere crear.

Ejemplo:

creadirectorio "junk

En el directorio recién creado junk

directoriopadre

Entrado en C:\LOGO


FUNCIONES DE WINDOWS

Esta sección describe cómo el programador de LOGO puede crear una Interfaz Gráfica de Usuario (GUI).  Todo GUI tiene una “Application Programming Interface” (API), que se documenta en esta sección.  Ambos, GUI y API tienen una relación madre/hijo.  Esto es, Windows y sus controles aparecen (gráficamente) de forma anidada.  La apariencia anidada se mantiene en el código que se desarrolle.

Debe especificar una  ventana “madre” para cada ventana que cree.  Cuando borra una “madre” de cualquier género, se borran todos sus hijos.  Cada función de ventana se identifica por un nombre.  Para identificar cualquier objeto Windows (ventanas, cursores, etc.) se emplea un “manipulador” (handle) que se pasa como parámetro en una función.

Cuando los controles están en una ventana,  las coordenadas usadas en todas las funciones son las coordenadas del sistema Windows (no las coordenadas de la tortuga). Esto es, el punto (0,0) no está en el centro de la pantalla, sino en la esquina superior izquierda.

Cuando los controles están en la ventana de gráficos, el sistema de coordenadas es el de la tortuga.

VENTANA

DIÁLOGO

LISTBOX

COMBOBOX

BARRA DE DESPLAZAMIENTO

BOTÓN

ESTÁTICO

GROUPBOX

CHECKBOX

RADIOBUTTON

DEPURACIÓN

Modal vs. Modeless

Ventanas predefinidas

Ejemplos


VENTANA

CREAVENTANA

BORRAVENTANA


CREAVENTANA

CREAVENTANA madre nombre título xpos ypos anchura altura setup

Crea una ventana.  Una ventana se usa como marco de trabajo al que se puede añadir otros objetos o controles de Windows, como botones, barras de desplazamiento, cajas de lista, etc. (Vea Modal vs. Modeless Windows)

madre:(PALABRA) Es el nombre de la ventana de la que depende la nueva ventana.  Si es la primera ventana que se crea se debe usar "root como nombre de la ventana madre.

nombre:(PALABRA) Se usa para identificar la ventana  (que puede ser la ventana madre de otras ventanas y controles) y debe tratarse de un nombre diferente al de otras ventanas.

título:(LISTA) Es el título (caption) que aparece en la ventana.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda de la nueva ventana.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda de la nueva ventana.

anchura:(ENTERO) Anchura de la nueva ventana.

altura:(ENTERO) Altura de la nueva ventana.

setup:(LISTA) Es una lista de órdenes, primitivas (o nombres de procedimientos) a ejecutar cuando se crea la ventana.  Estas órdenes deben ejecutarse cuando se crean funciones o se añaden controles a la ventana.  Se puede emplear una lista vacía como argumento y añadir los controles más tarde.

Ejemplo:

creaventana "main "miventana "mitítulo 0 0 100 100 []

borraventana "miventana


BORRAVENTANA

BORRAVENTANA nombre

Borra (cierra) la ventana, identificada por  nombre.  Cierra también las ventanas y controles dependientes de esa ventana.

nombre:(PALABRA) Se usa para identificar  la ventana que se quiere cerrar.

Ejemplo:

creaventana "main "miventana "mytítulo 0 0 100 100 []

borraventana "miventana


DIÁLOGO

CREADIALOGO

BORRADIALOGO


CREADIALOGO

CREADIALOGO madre nombre título xpos ypos anchura altura setup

Crea una ventana de diálogo.  Una ventana de diálogo se usa como marco de trabajo en el que se puede añadir otros objetos o controles, como botones, barras de desplazamiento, cajas de lista, etc.  Esta función es parecida a CREAVENTANA.

madre:(PALABRA) Es el nombre de la ventana madre de la ventana de diálogo.  Si es la primera ventana, debe usar como nombre de la ventana madre  "root.

nombre:(PALABRA) Es el nombre que identifica la ventana de diálogo (que puede ser madre de otras ventanas o controles) y que debe ser un nombre distinto al de otras ventanas.

título:(LISTA) Título (caption) de la ventana de diálogo.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda de la nueva ventana de diálogo.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda de la nueva ventana de diálogo.

anchura:(ENTERO) Anchura de la nueva ventana de diálogo.

altura:(ENTERO) Altura de la nueva ventana de diálogo.

setup:(LISTA) Es una lista de órdenes de Logo, primitivas o procedimientos a ejecutar cuando se crea la ventana de diálogo. Estas órdenes deben ejecutarse cuando se crean funciones o se añaden controles a la ventana.  Asegúrese de añadir los botones (OK, FIN, CERRAR, CANCELAR ) antes de llamar a BORRADIALOGO.

Ejemplo:

para mysetup

creaboton "mydialog "myok "OK 25 25 50 50 [borradialogo "mydialog]

fin

creadialogo "main "mydialog "mytitle 0 0 100 100 [mysetup]


BORRADIALOGO

BORRADIALOGO nombre

Borra (cierra) la ventana de diálogo de nombre nombre.  Observe que las ventanas hijas y controles se cerrarán también.

nombre:(PALABRA) Nombre que identifica la ventana de diálogo que se quiere cerrar.

Ejemplo:

para misetup

creaboton "midialogo "myok "OK 25 25 50 50 [borradialogo "midialogo]

fin

creadialogo "main "midialogo "mititulo 0 0 100 100 [misetup]


LISTBOX

CREALISTBOX

BORRALISTBOX

LEESELECCIONLISTBOX

AÑADECADENALISTBOX

BORRACADENALISTBOX


CREALISTBOX

CREALISTBOX madre nombre xpos ypos anchura altura

Crea un control LISTBOX (lista de datos).  El control LISTBOX se usa para que el usuario pueda seleccionar un elemento.

madre:(PALABRA) Nombre de la ventana que posee el nuevo control LISTBOX.

nombre:(PALABRA) Identifica el control LISTBOX.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda del nuevo control LISTBOX.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda del nuevo control LISTBOX.

anchura:(ENTERO) Anchura del nuevo control LISTBOX.

altura:(ENTERO) Altura del nuevo control LISTBOX.

Ejemplo (en una nueva ventana):

creaventana "main "miventana "mititulo 0 0 100 100 []

crealistbox "miventana "milista 25 25 50 50

borraventana "miventana

Ejemplo (en la ventana de gráficos):

crealistbox "main "milista 25 25 100 100

borraventana "main


BORRALISTBOX

BORRALISTBOX nombre

Borra (cierra) el control LISTBOX identificado por nombre.

nombre:(PALABRA) Identifica el control LISTBOX que se quiere cerrar.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

crealistbox "miventana "milista 25 25 50 50

borralistbox "milista

borraventana "miventana


LEESELECCIONLISTBOX

texto LEESELECCIONLISTBOX nombre

Devuelve una copia del elemento seleccionado en el control LISTBOX.

texto:(LISTA) Representa el elemento seleccionado del control LISTBOX.

nombre:(PALABRA) Identifica el control LISTBOX.

Ejemplo:

para dodraw

bp

si iguales? [TRIANGULO] leeseleccionlistbox "milista [repite 3 [av 100 gd 120]]

si iguales? [CUADRADO] leeseleccionlistbox "milista [repite 4 [av 100 gd 90]]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

crealistbox "miventana "milista 25 0 50 50

añadecadenalistbox "milista [TRIANGULO]

añadecadenalistbox "milista [CUADRADO]

creaboton "miventana "midibujo "Dibujar 25 50 50 25 [dodraw]

<seleccione una figura de listbox y haga clic en el botón Dibujar>

borraventana "miventana


AÑADECADENALISTBOX

AÑADECADENALISTBOX nombre elemento

Añade un  elemento al control LISTBOX identificado por nombre.

nombre:(PALABRA) Se usa para identificar el control LISTBOX al que se quiere añadir una cadena.

elemento:(PALABRA) Es el elemento que se quiere insertar en el control LISTBOX.

Ejemplo:

para dodraw

bp

si iguales? [TRIANGULO] leeseleccionlistbox "milista [repite 3 [av 100 gd 120]]

si iguales? [CUADRADO] leeseleccionlistbox "milista [repite 4 [av 100 gd 90]]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

crealistbox "miventana "milista 25 0 50 50

añadecadenalistbox "milista [TRIANGULO]

añadecadenalistbox "milista [CUADRADO]

creaboton "miventana "midibujo "Dibujar 25 50 50 25 [dodraw]

<seleccione una figura de listbox y haga clic en el botón Dibujar>

borraventana "miventana


BORRACADENALISTBOX

BORRACADENALISTBOX nombre índice

Borra el elemento número "índice" de un control LISTBOX.

nombre:(PALABRA) Identifica el control LISTBOX del que se quiere borrar una cadena.

índice:(ENTERO) Índice del elemento que se quiere borrar (empiezan desde 0).

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

crealistbox "miventana "milista 25 0 50 50

añadecadenalistbox "milista [TRIANGULO]

añadecadenalistbox "milista [CUADRADO]

añadecadenalistbox "milista [HEXAGONO]

borracadenalistbox "milista 1

borraventana "miventana


COMBOBOX

CREACOMBOBOX

BORRACOMBOBOX

LEETEXTOCOMBOBOX

PONTEXTOCOMBOBOX

AÑADELINEACOMBOBOX

BORRALINEACOMBOBOX


CREACOMBOBOX

CREACOMBOBOX madre nombre xpos ypos anchura altura

Crea un control COMBOBOX.  El control COMBOBOX se usa para ofrecer al usuario una serie de elementos y permitir que introduzca un elemento que no está listado.  El control COMBOBOX es la unión de dos controles en uno sólo (el control LISTBOX y el control EDIT).  Si quiere crear un control EDIT ( COMBOBOX sin LISTBOX) sólo tiene que fijar la altura a un tamaño en el que no encaje el tamaño del control LISTBOX.

madre:(PALABRA) Nombre de la ventana que posee el nuevo control COMBOBOX.

nombre:(PALABRA) Identifica el control COMBOBOX.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda del nuevo control COMBOBOX.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda del nuevo control COMBOBOX.

anchura:(ENTERO) Anchura del nuevo control COMBOBOX.

altura:(ENTERO) Altura del nuevo control COMBOBOX.

Ejemplo (en una nueva ventana):

creaventana "main "miventana "mititulo 0 0 100 100 []

creacombobox "miventana "mycombo 25 25 50 50

borraventana "miventana

Ejemplo (en la ventana de gráficos):

creacombobox "main "micombo 25 25 100 100

borraventana "main


BORRACOMBOBOX

BORRACOMBOBOX nombre

Borra (cierra) el control COMBOBOX identificado por nombre.

nombre:(PALABRA) Se usa para identificar el control COMBOBOX que se quiere borrar.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creacombobox "miventana "micombo 25 25 50 50

borracombobox "micombo

borraventana "miventana


LEETEXTOCOMBOBOX

texto LEETEXTOCOMBOBOX nombre

Lee el contenido del control EDIT que forma parte del control  COMBOBOX (puede ser o no ser un elemento seleccionado).

texto:(LISTA) Representa el contenido del control EDIT, dentro del actual control COMBOBOX.

nombre:(PALABRA) Identifica al control COMBOBOX.

Ejemplo:

para dodraw

bp

haz "sides primero leetextocombobox "micombo

repite :sides [av 50 gd 360.0/:sides]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

creacombobox "miventana "micombo 25 0 50 50

añadelineacombobox "micombo [3]

añadelineacombobox "micombo [4]

añadelineacombobox "micombo [5]

añadelineacombobox "micombo [6]

creaboton "miventana "midibujo "Dibujar 25 50 50 25 [dodraw]

<seleccione o entre el número de caras en combobox y haga clic en el botón Dibujar>

borraventana "miventana


PONTEXTOCOMBOBOX

PONTEXTOCOMBOBOX nombre texto

Pone texto en el control EDIT que es un componente de COMBOBOX.

nombre:(PALABRA) Identifica el control COMBOBOX en el que quiere colocar texto.

texto:(PALABRA) Es el elemento que se quiere insertar en el control COMBOBOX.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creacombobox "miventana "micombo 25 0 50 50

añadelineacombobox "micombo [3]

añadelineacombobox "micombo [4]

añadelineacombobox "micombo [5]

añadelineacombobox "micombo [6]

pontextocombobox "micombo [3]

borraventana "miventana


AÑADELINEACOMBOBOX

AÑADELINEACOMBOBOX nombre elemento

Añadirá un "elemento" en el control COMBOBOX identificado con "nombre".  Observe que los elementos que se insertan se ordenan automáticamente en el control  COMBOBOX.

nombre:(PALABRA) Identifica el COMBOBOX.

elemento:(LISTA) Elemento que se insertará en el control LISTBOX, que es un componente de COMBOBOX.

Ejemplo:

para dodraw

bp

haz "caras primero leetextocombobox "micombo

repite :caras [av 50 gd 360.0/:caras]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

creacombobox "miventana "micombo 25 0 50 50

añadelineacombobox "micombo [3]

añadelineacombobox "micombo [4]

añadelineacombobox "micombo [5]

añadelineacombobox "micombo [6]

creaboton "miventana "midibujo "Dibujar 25 50 50 25 [dodraw]

<seleccione o entre el número de caras en el combobox y haga clic en el botón Dibujar>

borraventana "miventana


BORRALINEACOMBOBOX

BORRALINEACOMBOBOX nombre índice

Borra el elemento número "índice" del COMBOBOX identificado como "nombre".

nombre:(PALABRA) Identifica el COMBOBOX.

índice:(ENTERO) Índice del elemento que se quiere borrar (los índices empiezan en 0).

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creacombobox "miventana "micombo 25 0 50 50

añadelineacombobox "micombo [3]

añadelineacombobox "micombo [4]

añadelineacombobox "micombo [5]

añadelineacombobox "micombo [6]

borralineacombobox "micombo 1

borraventana "miventana


SCROLLBAR
BARRA DE DESPLAZAMIENTO (SCROLLBAR)

CREABARRADESPLAZAMIENTO

BORRABARRADESPLAZAMIENTO

PONBARRADESPLAZAMIENTO

LEEBARRADESPLAZAMIENTO


CREABARRADESPLAZAMIENTO

CREABARRADESPLAZAMIENTO madre nombre xpos ypos anchura altura callback

Crea un control SCROLLBAR. El control SCROLLBAR se usa para pedir al usuario el valor de una variable (aunque puede diseñar una función con otro motivo).  Es frecuente su utilización junto con el control ESTATICO para informar al usuario de una situación.  No olvide que  SCROLLBAR debe tener un valor máximo y un valor inicial que debe fijar con  PONBARRADESPLAZAMIENTO.

La orientación (vertical o horizontal) del control SCROLLBAR se determina según la dimensión mayor.  Esto es,  si X > Y, se escoge la horizontal; en otro caso, la vertical.

madre:(PALABRA) Nombre de la Ventana que posee el nuevo control SCROLLBAR.

nombre:(PALABRA) Identifica el control  SCROLLBAR y debe ser único.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda del nuevo control SCROLLBAR.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda del nuevo control SCROLLBAR.

anchura:(ENTERO) Anchura del nuevo control SCROLLBAR.

altura:(ENTERO) Altura del nuevo control SCROLLBAR.

callback:(LISTA) Es una lista de órdenes  (nombres de primitivas o de procedimientos) a ejecutar cuando el usuario ajuste el SCROLLBAR.  Es frecuente la llamada a  procedimientos que informen al usuario sobre el estado del SCROLLBAR.

Ejemplo (en una nueva ventana):

creaventana "main "miventana "mititulo 0 0 100 100 []

creabarradesplazamiento "miventana "miscroll 25 25 50 25 [ponrumbo leebarradesplazamiento "miscroll]

ponbarradesplazamiento "miscroll 0 360 0

<mueva el scrollbar y observe qué pasa con la tortuga>

borraventana "miventana

Ejemplo (en la ventana de gráficos):

creabarradesplazamiento "main "miscroll 25 25 100 25 [ponrumbo leebarradesplazamiento "miscroll]

ponbarradesplazamiento "miscroll 0 360 0

<mueva el scrollbar y observe qué pasa con la tortuga>

borraventana "main


BORRABARRADESPLAZAMIENTO

BORRABARRADESPLAZAMIENTO nombre

Borra (cierra) el control SCROLLBAR identificado por nombre.

nombre:(PALABRA) Identifica el control SCROLLBAR que se quiere cerrar.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

borrabarradesplazamiento "miventana "miscroll 25 25 50 25 []

borrabarradesplazamiento "miscroll

borraventana "miventana


PONBARRADESPLAZAMIENTO

PONBARRADESPLAZAMIENTO nombre mínimo máximo posición

Fija el rango (entre mínimo y máximo) y la posición actual del control SCROLLBAR.

nombre:(PALABRA) Identifica el control SCROLLBAR.

mínimo:(ENTERO) Fija el valor mínimo del control  SCROLLBAR.

máximo:(ENTERO) Fija el valor máximo del control SCROLLBAR.

posición:(ENTERO) Fija y devuelve el valor de la posición actual del control SCROLLBAR.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creabarrasdesplazamiento "miventana "miscroll 25 25 50 25 [ponrumbo leebarradesplazamiento "miscroll]

ponbarradesplazamiento "miscroll 0 360 0

<mueva el scrollbar y observe qué sucede con la tortuga>

borraventana "miventana


LEEBARRADESPLAZAMIENTO

pos LEEBARRADESPLAZAMIENTO nombre

Devuelve la posición del control SCROLLBAR identificado por nombre.

pos:(ENTERO) Posición del scrollbar (dentro de su rango).

nombre:(PALABRA) Identifica el control SCROLLBAR.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creabarradesplazamiento "miventana "miscroll 25 25 50 25 [ponrumbo leebarradesplazamiento "miscroll]

ponbarradesplazamiento "miscroll 0 360 0

< mueva el scrollbar y observe qué sucede con la tortuga >

borraventana "miventana


BOTÓN

CREABOTON

BORRABOTON

ACTUALIZABOTON


CREABOTON

CREABOTON madre nombre etiqueta xpos ypos anchura altura callback

Crea un control BUTTON.  El control BUTTON se usa para que el usuario provoque  eventos.

madre:(PALABRA) Nombre de la ventana que posee el nuevo control BUTTON.

nombre:(PALABRA) Identifica el control BUTTON y debe ser único.

etiqueta:(LISTA) Etiqueta del control BUTTON.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda del nuevo control  BUTTON.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda del nuevo control BUTTON.

anchura:(ENTERO) Anchura del nuevo control  BUTTON.

altura:(ENTERO) Altura del nuevo control BUTTON.

callback:(LISTA) Es una lista de órdenes de Logo (nombres de primitivas o de procedimientos) a ejecutar cuando el usuario pulsa el control BUTTON.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creaboton "miventana "miizquierda "Izquierda 25 25 25 25 [av 2 gi 1]

creaboton "miventana "miizquierda "Derecha 50 25 25 25 [av 2 gd 1]

<clics repetidos en Izquierda o Derecha y observe la tortuga>

borraventana "miventana

Ejemplo (en la ventana de gráficos):

creaboton "main "miizquierda "Izquierda 50 50 50 25 [av 2 gi 1]

creaboton "main "miderecha "Derecha 100 50 50 25 [av 2 gd 1]

< clics repetidos en Izquierda o Derecha y observe la tortuga >

borraventana "main


BORRABOTON

BORRABOTON nombre

Borra (cierra) el control BUTTON identificado por nombre.

nombre:(PALABRA) Identifica el control BUTTON que se quiere cerrar.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creaboton "miventana "miboton "PULSA 25 25 25 25 [escribe "pulsa]

borraboton "miboton

borraventana "miventana


ACTUALIZABOTON

ACTUALIZABOTON nombre texto

Cambia el contenido del control BUTTON por un nuevo "texto".

nombre:(PALABRA) Identifica  el control BUTTON que se quiere actualizar.

texto:(LISTA) Nuevo contenido del control BUTTON.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

;aparece la ventana

haz "Pushed 0

creaboton "miventana "miboton :Pushed 25 25 25 25 [haz "Pushed :Pushed +1 Actualizaboton "miboton :Pushed]

borraboton "miboton

borraventana "miventana


ESTATICO

CREAESTATICO

BORRAESTATICO

ACTUALIZAESTATICO


CREAESTATICO

CREAESTATICO madre nombre texto xpos ypos anchura altura

Crea un control STATIC.  El control STATIC se usa sólo para mostrar un texto.  Su nombre puede inducir a error, ya que el control STATIC  puede ser  dinámico si se utiliza la primitiva  ACTUALIZAESTATICO.

madre:(PALABRA) Nombre de la ventana que posee el nuevo control STATIC.

nombre:(PALABRA) Identifica el control  STATIC y debe ser único.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda del nuevo control  STATIC.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda del nuevo control  STATIC.

anchura:(ENTERO) Anchura del nuevo control  STATIC.

altura:(ENTERO) Altura del nuevo control STATIC.

Ejemplo (en una nueva ventana):

creaventana "main "miventana "mititulo 0 0 100 100 []

creaestatico "miventana "miestatico [Rumbo=0] 25 25 50 25

repite 72 [gd 5 actualizaestatico "miestatico frase [Rumbo=] rumbo espera 60]

borraventana "miventana

Ejemplo (en la ventana de gráficos):

creaestatico "main "miestatico [Rumbo=0] 25 25 100 50

repite 72 [gd 5 actualizaestatico "miestatico frase [Rumbo=] rumbo espera 60]

borraventana "main


BORRAESTATICO

BORRAESTATICO nombre

Borra (cierra) el control STATIC identificado por nombre.

nombre:(PALABRA) Identifica el control STATIC que se quiere cerrar.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creaestatico "miventana "miestatico [Control Static] 25 25 50 25

creaestatico "miestatico

borraventana "miventana


ACTUALIZAESTATICO

ACTUALIZAESTATICO nombre texto

Cambiará el contenido del control  STATIC  por "texto".

nombre:(PALABRA) Identifica el control STATIC que se quiere actualizar.

texto:(LISTA) El nuevo contenido del control STATIC.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creaestatico "miventana "miestatico [Rumbo=0] 25 25 50 25

repite 72 [gd 5 actualizaestatico "miestatico frase [Rumbo=] rumbo espera 60]

borraventana "miventana


GROUPBOX
MARCO (GROUPBOX)

CREAGROUPBOX

BORRAGROUPBOX


CREAGROUPBOX

CREAGROUPBOX madre nombre xpos ypos anchura altura

Crea un control GROUPBOX.  Un control GROUPBOX es diferente de los otros controles de Windows porque agrupa de forma gráfica  y lógica los grupos “RadioButtons” (CREABOTONRADIO) y “CheckBoxs” (CREACHECKBOX).  RadioButtons y CheckBoxs deben pertenecer a un  GROUPBOX. Para complicar las cosas,  los RadioButtons y CheckBoxs colocados en un GROUPBOX tienen una “madre” distinta a la de GROUPBOX.

madre:(PALABRA) Nombre de la ventana que posee el nuevo control GROUPBOX.

nombre:(PALABRA) Identifica el control GROUPBOX.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda del nuevo control GROUPBOX.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda del nuevo control GROUPBOX.

anchura:(ENTERO) Anchura del nuevo control GROUPBOX.

altura:(ENTERO) Altura del nuevo control GROUPBOX.

Ejemplo:

para Chequear

sisino estadocheckbox "miocultatortuga [ot] [mt]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 40

creacheckbox "miventana "migroupbox "miocultatortuga [Tortuga oculta] 20 20 60 20

creaboton "miventana "miboton "GO 40 50 25 25 [Chequear]

borraventana "miventana


BORRAGROUPBOX

BORRAGROUPBOX nombre

Borra (cierra) el control GROUPBOX identificado por nombre.

nombre:(PALABRA) Identifica el control GROUPBOX que se quiere cerrar.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 40

borragroupbox "migroupbox

borraventana "miventana


CHECKBOX

CREACHECKBOX

BORRACHECKBOX

ESTADOCHECKBOX

PONCHECKBOX


CREACHECKBOX

CREACHECKBOX madre grupo nombre etiqueta xpos ypos anchura altura

Crea un control CHECKBOX .  El control CHECKBOX  se usa para que el usuario seleccione entre dos estados  de un elemento (Verdadero o Falso).  El control CHECKBOX puede incluirse dentro del control GROUPBOX (CREAGROUPBOX).

madre:(PALABRA) Nombre de la ventana que posee el nuevo control CHECKBOX.

grupo:(PALABRA) Nombre del control GROUPBOX asociado con el nuevo control CHECKBOX.

nombre:(PALABRA) Identifica el control CHECKBOX y debe ser único.

etiqueta:(LISTA) Etiqueta del control CHECKBOX.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda del nuevo control CHECKBOX.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda del nuevo control CHECKBOX.

anchura:(ENTERO) Anchura del nuevo control CHECKBOX.

altura:(ENTERO) Altura del nuevo control CHECKBOX.

Ejemplo (en una nueva ventana):

para chequear

sisino estadocheckbox "miocultatortuga [ot] [mt]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 40

creacheckbox "miventana "migroupbox " miocultatortuga [Tortuga Oculta] 20 20 60 20

creaboton "miventana "miboton "GO 40 50 25 25 [chequear]

borraventana "miventana

Ejemplo (en la ventana gráfica):

para chequear

sisino estadocheckbox "miocultatortuga [ot] [mt]

fin

creagroupbox "main "migroupbox 110 90 140 60

creacheckbox "main "migroupbox "miocultatortuga [Tortuga oculta] 120 80 120 40

creaboton "main "miboton "GO 160 20 50 50 [chequear]

borraventana "main


BORRACHECKBOX

BORRACHECKBOX nombre

Borra (cierra) el control CHECKBOX identificado por nombre.

nombre:(PALABRA) Se usa para identificar el control CHECKBOX que se quiere cerrar.

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 40

creacheckbox "miventana "migroupbox "micheckbox [Check Me] 20 20 60 20

borracheckbox "micheckbox

borraventana "miventana


ESTADOCHECKBOX

verdad ESTADOCHECKBOX nombre

Pregunta al control  CHECKBOX por su estado  (Verdadero o Falso).

verdad:(BOOLEANO) Estado (Verdadero o Falso) del control CHECKBOX.

nombre:(PALABRA) Se usa para identificar el control COMBOBOX.

Ejemplo:

para chequear

sisino estadocheckbox "miocultatortuga [ot] [mt]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 40

creacheckbox "miventana "migroupbox "miocultatortuga [Tortuga oculta] 20 20 60 20

creaboton "miventana "miboton "GO 40 50 25 25 [chequear]

borraventana "miventana


PONCHECKBOX

PONCHECKBOX nombre estado

Fija el valor del estado del CHECKBOX  como Verdadero o Falso.

nombre:(PALABRA) Se usa para identificar el control CHECKBOX.

estado:(PALABRA) Estado (Verdadero o Falso).

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 40

creacheckbox "miventana "migroupbox "micheckbox [Check Me] 20 20 60 20

poncheckbox "micheckbox "verdadero

poncheckbox "micheckbox "falso

borraventana "miventana


RADIOBUTTON

CREABOTONRADIO

BORRABOTONRADIO

LEEBOTONRADIO

ESCRIBEBOTONRADIO


CREABOTONRADIO

CREABOTONRADIO madre grupo nombre etiqueta xpos ypos anchura altura

Crea un control RADIOBUTTON.  El control RADIOBUTTON se usa para ofrecer al usuario la selección entre dos estados de un elemento  (Verdadero o Falso; activado o desactivado). De existir varios controles, sólo uno de ellos puede tener el valor Verdadero (activado) dentro de un GROUPBOX.  Se deben asociar los controles  RADIOBUTTON a un control GROUPBOX (CREAGROUPBOX).

madre:(PALABRA) Nombre del control GROUPBOX que está asociado el nuevo control RADIOBUTTON.

nombre:(PALABRA) Identifica el control RADIOBUTTON y debe ser único.

etiqueta:(LISTA) Etiqueta del control RADIOBUTTON.

xpos:(ENTERO) Es la posición X de la esquina superior izquierda del nuevo control RADIOBUTTON.

ypos:(ENTERO) Es la posición Y de la esquina superior izquierda del nuevo control RADIOBUTTON.

anchura:(ENTERO) Anchura del nuevo control RADIOBUTTON.

altura:(ENTERO) Altura del nuevo control RADIOBUTTON.

Ejemplo (en una nueva ventana):

para chequear

sisino leebotonradio "miocultatortuga [ot] [mt]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 60

creabotonradio "miventana "migroupbox "miocultatortuga [Tortuga oculta] 20 20 60 20

creabotonradio "miventana "migroupbox "mimuestratortuga [Tortuga visible] 20 40 60 20

escribebotonradio "miocultatortuga "verdadero

escribebotonradio "mimuestratortuga "falso

creaboton "miventana "miboton "GO 40 70 25 20 [chequear]

borraventana "miventana

Ejemplo (en la ventana gráfica):

para chequear

sisino leebotonradio "miocultatortuga [ot] [mt]

fin

creagroupbox "main "migroupbox 110 130 140 100

creabotonradio "main "migroupbox "miocultatortuga [Tortuga oculta] 120 120 120 40

creabotonradio "main "migroupbox "mimuestratortuga [Tortuga visible] 120 80 120 40

escribebotonradio "miocultatortuga "verdadero

escribebotonradio "mimuestratortuga "falso

creaboton "main "miboton "GO 160 20 50 50 [chequear]

;borraventana "main


BORRABOTONRADIO

BORRABOTONRADIO nombre

Borra (cierra) el control RADIOBUTTON  identificado por nombre.

nombre:(PALABRA) Se usa para identificar el control RADIOBUTTON que se quiere cerrar.

Ejemplo:

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 60

creabotonradio "miventana "migroupbox "miradiobotton [Switch Me] 20 20 60 20

borrabotonradio "miradiobotton

borraventana "miventana


LEEBOTONRADIO

verdad LEEBOTONRADIO nombre

Pregunta a RADIOBUTTON por su estado (Verdadero o Falso).

verdad:(BOOLEANO) Estado (Verdadero o Falso) del control RADIOBUTTON.

nombre:(PALABRA) Se usa para identificar el control RADIOBUTTON.

Ejemplo:

para chequear

sisino leebotonradio "miocultatortuga [ot] [mt]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 60

creabotonradio "miventana "migroupbox "miocultatortuga [Tortuga oculta] 20 20 60 20

creabotonradio "miventana "migroupbox "mimuestratortuga [Tortuga visible] 20 40 60 20

escribebotonradio "miocultatortuga "verdadero

escribebotonradio "mimuestratortuga "falso

creaboton "miventana "miboton "GO 40 70 25 20 [chequear]

borraventana "miventana


ESCRIBEBOTONRADIO

ESCRIBEBOTONRADIO nombre estado

Fija el estado de RADIOBUTTON comoVerdadero o Falso.  Si fija el valor de un RADIOBUTTON como Verdadero, asegúrese de que los otros RADIOBUTTONs  dentro de un GROUPBOX tienen el valor Falso.

nombre:(PALABRA) Se usa para identificar el control RADIOBUTTON.

estado:(BOOLEANO) Estado, Verdadero o Falso del control RADIOBUTTON.

Ejemplo:

para chequear

sisino leebotonradio "miocultatortuga [ot] [mt]

fin

creaventana "main "miventana "mititulo 0 0 100 100 []

creagroupbox "miventana "migroupbox 10 10 80 60

creabotonradio "miventana "migroupbox "miocultatortuga [Tortuga oculta] 20 20 60 20

creabotonradio "miventana "migroupbox "mimuestratortuga [Tortuga visible] 20 40 60 20

escribebotonradio "miocultatortuga "verdadero

escribebotonradio "mimuestratortuga "falso

creaboton "miventana "miboton "GO 40 70 25 20 [chequear]

borraventana "miventana


DEPURACIÓN

VENTANADEPURADOR


VENTANADEPURADOR

VENTANADEPURADOR

(VENTANADEPURADOR nombre)

Escribe el árbol (jerarquía de ventanas) comenzando con la ventana especificada con nombre y, por otra parte, listará todas las ventanas y controles.

nombre:(PALABRA) Se usa para identificar la ventana raíz.

creaventana "main "miventana "mititulo 0 0 100 100 []

crealistbox "miventana "milista 25 0 50 50

creaboton "miventana "midibujo "Dibujar 25 50 50 25 [Escribe "Clic]

ventanadepurador

Window miventana

  Button midibujo

  ListBox milista

borraventana "miventana


Modal vs. Modeless Windows

La programación  Windows soporta dos modos, Modal y Modeless.  El modo Modal  (CREADIALOGO) es similar a un modelo de programación sin ventanas (la aplicación tiene el control). Suele emplearse el modo Modal en situaciones parecidas a cuando, en medio de un proceso, el programador, decide pedir información   al usuario (p.e., con LEELISTA). En ese caso,  se detiene el proceso hasta que se adquiere la información y el usuario no puede acceder a los otros componentes de la aplicación.  Por ejemplo, desde una ventana Modal se pide al usuario el nombre de un fichero.

En el modo Modeless  (CREAVENTANA) por el contrario, el usuario tiene el control.  Por ejemplo la ventana Trabajo en LOGO es Modeless.  MWSLogo mientras tanto está ocioso.  La aplicación procesa un programa cuando el usuario activa un evento (tal como pulsar un botón).

Todos los objetos Windows están disponibles en los modos Modeless y Modal.


Ventanas predefinidas

MENSAJE

SINOBOX

SELECCIONBOX

PREGUNTABOX

ABREDIALOGO

GUARDADIALOGO

EDITAFICHERO


MENSAJE

MENSAJE bandera cuerpo

Detiene el proceso y despliega una ventana con un mensaje (cuerpo). En la barra de título aparece una etiqueta (bandera).  El proceso anterior continua cuando el usuario pulsa  el botón ACEPTAR o CANCELAR.

bandera:(LISTA) Se usa como etiqueta de la ventana.

cuerpo:(LISTA) Texto del mensaje.  La ventana se adapta al tamaño del mensaje.

Ejemplo:

mensaje [La bandera] [El cuerpo]


SELECCIONBOX

elección SELECCIONBOX bandera listaopciones

Detiene el proceso y despliega una ventana de mensaje en la que en la barra de título aparece bandera y  con las opciones listaopciones.  El proceso anterior continua cuando el usuario pulsa  botón OK o CANCELAR.

Observe que la ventana Trabajo permanece desactivada  hasta que se pulse un botón. Una vez que se pulse el botón OK, devuelve el índice elección correspondiente al elemento  seleccionado (1 para la opción 1, 2 para la opción 2) y si el usuario pulsa el botón  CANCELAR, 0.

elección:(ENTERO) Es 0 si el usuario pulsa CANCELAR y 1, 2… para las correspondientes opciones, si pulsa OK.

bandera:(LISTA) Se usa como etiqueta de la ventana.

listaopciones:(LISTA) Es una lista de opciones.

Ejemplo:

muestra seleccionbox [Escoja Color] [Rojo Verde Azul]

<seleccione verde y pulse OK>

2

muestra seleccionbox [Colores] [[Rojo Verde Azul] [Uno de los tres] Ninguno]

<seleccione Rojo Verde Azul y pulse OK>

1


SINOBOX

siono SINOBOX bandera cuerpo

Detiene el proceso y despliega una ventana con un mensaje (cuerpo).  En la barra de título aparece bandera.  El proceso anterior continua cuando el usuario pulsa  uno de los botones SI, NO o CANCELAR.

Observe que la ventana Trabajo permanece desactivada  hasta que se pulse un botón. Una vez que se pulse un botón, devuelve  VERDADERO (SI) o FALSO (NO).

siono:(BOOLEANO) Es VERDADERO si se pulsa SI;  FALSO, si se pulsa NO.

bandera:(LISTA) Se usa como etiqueta de la ventana.

cuerpo:(LISTA) Texto del mensaje.  La ventana se adapta al tamaño del mensaje.

Ejemplo:

muestra sinobox [Pregunta] [¿Te gusta Logo?]

verdadero


PREGUNTABOX

datos PREGUNTABOX bandera cuerpo

Detiene el proceso y despliega una ventana con un mensaje (cuerpo).  En la barra de título aparece bandera.  El proceso anterior continua cuando el usuario pulsa  uno de los botones SI o CANCELAR.

Observe que la ventana Trabajo permanece desactivada  hasta que se pulse un botón. Una vez que se pulse el botón OK, devuelve en datos la respuesta del usuario.

datos:(LISTA) Es una lista que contiene la respuesta del usuario.  Devuelve una lista vacía si el usuario pulsó CANCELAR.

bandera:(LISTA) Se usa como etiqueta de la ventana.

cuerpo:(LISTA) Texto del mensaje.  La ventana se adapta al tamaño del mensaje.

Ejemplo:

muestra preguntabox [Pregunta] [ ¿Te gusta Logo?]

[Sí, me gusta.]


ABREDIALOGO

ruta ABREDIALOGO nombrefichero

Despliega la ventana de diálogo "Abrir". No abre un archivo sino que deja que el usuario seleccione el fichero deseado usando la Interfaz Gráfica de Usuario (GUI). El argumento nombrefichero se usa como opción por omisión del nombre, directorio y extensión del fichero.  Devuelve el nombre de fichero seleccionado por el usuario. En  caso que el usuario cancele la selección, devuelve una lista vacía ([]).

ruta:(LISTA) Ruta del fichero (incluyendo drive y directorio).

nombrefichero:(PALABRA) Especifica el directorio por omisión, nombre de fichero y/o extensión. (Se permite "*" como nombre de fichero o extensión).

Ejemplo:

muestra abredialogo "c:\\mwslogo\\examples\\*.me

<Lista todos los ficheros con extensión ".me" del directorio especificado>

[c:\logo\examples\read.me]


GUARDADIALOGO

ruta GUARDADIALOGO nombrefichero

Despliega la ventana de diálogo "Guardar como". No guarda un fichero sino que deja que el usuario seleccione el fichero deseado usando la Interfaz Gráfica de Usuario (GUI). El argumento nombrefichero se usa como opción por omisión del nombre, directorio y extensión del fichero.  Devuelve el nombre de fichero seleccionado por el usuario. En  caso que el usuario cancele la selección, devuelve una lista vacía ([]).

ruta:(LISTA) Ruta del fichero (incluyendo drive y directorio).

nombrefichero:(PALABRA) Especifica el directorio por omisión, nombre de fichero y/o extensión . (Se permite "*" como nombre de fichero o extensión).

Ejemplo:

muestra guardadialogo "c:\\mswlogo\\examples\\*.me

<Lista todos los ficheros con extensión ".me" del directorio especificado>

 [c:\logo\examples\read.me]


EDITAFICHERO

EDITAFICHERO nombrefichero callback

Edita el fichero especificado por nombrefichero en el Editor por defecto. Cuando el usuario sale del Editor se ejecuta el contenido de callback.

nombrefichero:(PALABRA) Especifica qué fichero se quiere editar.

callback:(LISTA) Es una lista de órdenes  ( nombres de primitivas o procedimientos ) que se ejecutarán cuando el usuario salga del Editor.

Ejemplo:

editafichero abredialogo "c:\\mwslogo\\examples\\*.me [Escribe "Hecho]


Ejemplos:  Windows
Ejemplos

para win

; Un ejemplo de ventana modeless

creaventana "root "d1 [Dibujar Pictures] 0 0 150 110 [] configurar

;Crea main window

; Un ejemplo de ventana modal

; creadialogo "root "d1 [Dibujar Pictures] 0 0 150 110 [configurar]

;Crea main window

fin

para configurar

creaestatico "d1 "st4 [Seleccione figura] 5 10 50 10

crealistbox "d1 "l1 5 25 80 40

añadecadenalistbox "l1 "CUADRADO

añadecadenalistbox "l1 "TRIÁNGULO

añadecadenalistbox "l1 "HEXÁGONO

creaestatico "d1 "st11 [Rojo] 100 10 40 10

creabarradesplazamiento "d1 "s1 100 25 10 50 [mirojo]

ponbarradesplazamiento "s1 1 255 125 mirojo

creaboton "d1 "b1 "FIN 5 80 40 10 [mifin]

creaboton "d1 "b3 "BORRAR 55 80 35 10 [bp]

creaboton "d1 "b2 "DIBUJAR 100 80 35 10 [dibujando]

fin

; ejecuta esta rutina cuando se pulsa el botón DIBUJAR.

para dibujando

poncolorlapiz (lista leebarradesplazamiento "s1 0 0)

; Dibuja la figura elegida en el control listbox

si iguales? [HEXÁGONO] leeseleccionlistbox "l1 [repite 6 [av 100 gd 60]]

si iguales? [CUADRADO] leeseleccionlistbox "l1 [repite 4 [av 100 gd 90]]

si iguales? [TRIÁNGULO] leeseleccionlistbox "l1 [repite 3 [av 100 gd 120]]

fin

; ejecuta la rutina cuando se pulsa el botón FIN

para mifin

; Para un ejemplo modeless use:

borraventana "d1

; Para un ejemplo modal use:

; borradialogo "d1

fin

; ejecuta esta rutina cuando se ajusta la barra de desplazamiento ROJO

para mirojo

actualizaestatico "st11 frase [Rojo] leebarradesplazamiento "s1

fin


FUNCIONES DE BITMAP

PRIMITIVAS DE BITMAP


PRIMITIVAS DE BITMAP

CORTAAREA

COPIAAREA

PEGA

PEGAENINDICE

AJUSTA

PONINDICEBIT

INDICEIMAGEN

PONMODOBIT

MODOBITMAP?

RECTANGULORRELLENO

CARGADIB

GUARDADIB

TAMAÑODIBUJO

CARGAGIF

GUARDAGIF

TAMAÑOGIF

PONAREAACTIVA

AREAACTIVA


CORTAAREA

CORTAAREA anchura altura

"Corta" una porción de la imagen y la guarda en la memoria de Logo  (en el Portapapeles,  si el índice de INDICEIMAGEN es 0).  Luego puede "pegar" esa porción en cualquier parte con PEGA.  LOGO cortará desde la posición de la tortuga el tamaño indicado por los argumentos anchura y altura.  Vea también PONINDICEBIT.

anchura:(ENTERO) Especifica la anchura del bitmap a cortar.

altura:(ENTERO) Especifica la altura del bitmap a cortar.

Nota: Se puede pensar que estas funciones  parten de una anchura y altura de un pixel, pero no es  así.   Si dibuja un cuadrado con  "repite 4[ av 2 gd 90]"  ¿cuántos pixeles tiene de altura? No tiene 2 pixeles,  sino 3. La razón de ello es complicada, pero para abreviar, el modo de dibujar de Logo  es como si tuviera una línea imaginaria bajo el centro de cada pixel.  Si se corta un pixel, entonces se ilumina.  La distancia del centro de los pixeles hacia el lado izquierdo o el derecho del cuadrado es la distancia correcta (2 pixeles). Pero tenemos que volver al pixel del que se parte. Logo vuelve a ello cuando muestra la línea y añade 1/ 2 pixel a cada lado y dibuja un cuadrado de 3x3 pixeles.

Ejemplo:

pongrosor [2 2]

repite 72 [repite 4 [av 100 gd 90] poncolorlapiz (lista cuentarepite*3 0 0) gd 5]

sl

ponxy -50 -50

cortaarea 100 100

bp

bl

repite 36 [av 150 pega re 150 gd 10]


COPIAAREA

COPIAAREA anchura altura

"Copia" una porción de la imagen y la guarda en la memoria Logo (en el Portapapeles,  si INDICEIMAGEN es 0).  Luego puede "pegar" la imagen con PEGA en cualquier lugar. LOGO copiará  desde la posición de la tortuga el tamaño indicado por los argumentos anchura y altura.

anchura:(ENTERO) Especifica la anchura del bitmap a copiar.

altura:(ENTERO) Especifica la altura del bitmap a copiar.

Ejemplo:

pongrosor [2 2]

repite 72 [repite 4 [av 100 gd 90] poncolorlapiz (lista cuentarepite*3 0 0) gd 5]

sl

ponxy -50 -50

copiaarea 100 100

bp

bl

repite 36 [av 150 pega re 150 gd 10]


PEGAENINDICE

PEGAENINDICE índice x y

"Pega" a partir de las coordenadas x, y del bitmap identificado con el argumento índice, la imagen que se "cortó" con CORTAAREA dentro del índice actual (o que está en el Portapapeles si el índice es 0).  Vea también PONINDICEBIT y PONMODOBIT.

Esta primitiva se utiliza en las animaciones.  Por ejemplo, para una pelota rodando,  si borra la pelota y  vuelve a dibujarla en la nueva posición, el problema es que el usuario verá ambos pasos, lo que produce un parpadeo. Con esta primitiva se evita ese parpadeo, ya que aumenta considerablemente la velocidad,  al estar las imágenes en memoria.

índice:(ENTERO) Especifica el  bitmap que quiere pegar.

x:(ENTERO) Especifica la coordenada  x.

y:(ENTERO) Especifica la coordenada  y.

Ejemplo:

; Dibuja un bloque rojo de 100x100 en el Buffer 1 de Bitmaps

ponindicebit 1

poncolorrelleno [255 0 0]

rectangulorrelleno 100 100

copiaarea 100 100

; Dibuja un bloque verde de 50x50 en el Buffer 2 de Bitmaps

bp

ponindicebit 2

poncolorrelleno [0 255 0]

rectangulorrelleno 50 50

copiaarea 50 50

; Reserva un espacio de 100x100 en el Buffer 3 de Bitmaps

bp

ponindicebit 3

copiaarea 100 100

; Copia 1 en 3

ponindicebit 1

pegaenindice 3 0 0

; Copia 2 en 3

ponindicebit 2

pegaenindice 3 25 25

; Pega 3 en la Pantalla

ponindicebit 3

pega


PEGA

PEGA

"Pega" la imagen que se “cortó” "con  CORTAAREA (o que está en el Portapapeles si INDICEIMAGEN es 0).  LOGO siempre "pega" en la posición de la tortuga,  la esquina inferior izquierda de la imagen.  Vea también PONINDICEBIT y PONMODOBIT.

Ejemplo:

pongrosor [2 2]

repite 72 [repite 4 [av 100 gd 90] poncolorlapiz (lista cuentarepite*3 0 0) gd 5]

sl

ponxy -50 -50

cortaarea 100 100

bp

bl

repite 36 [av 150 pega re 150 gd 10]


AJUSTA

AJUSTA anchura altura

"Ajusta" la actual imagen  "cortada" (CORTAAREA) o “copiada” (COPIAAREA) a las dimensiones especificadas.  Más tarde  puede pegar (PEGA)  la imagen.  LOGO ajustará la imagen cortada con la anchura del primer argumento y la altura del segundo.  La imagen original se reemplaza por esta imagen ajustada.

anchura:(ENTERO) Especifica la anchura del  bitmap a ajustar.

altura:(ENTERO) Especifica la altura del  bitmap a ajustar.

Ejemplo:

pongrosor [2 2]

repite 72 [repite 4 [av 100 gd 90] poncolorlapiz (lista cuentarepite*3 0 0) gd 5]

sl

ponxy -50 -50

cortaarea 100 100

bp

pega

bp

AJUSTA 200 100

Pega


PONINDICEBIT

PONINDICEBIT índice

Pone el área cortada de un bitmap en el buffer que indica índice (rango entre 0 y 1023).  Su propósito es guardar en memoria múltiples imágenes preparadas para ser pegadas con rapidez en animaciones.  El índice 0 es el índice por defecto  y  usa el PORTAPAPELES como buffer.  Esto es;  puede "cortar" o copiar una imagen de PAINT y pegarla directamente en MSWLogo y  también "cortar" una imagen en MSWLogo que estará disponible en PAINT.  Use INDICEIMAGEN para obtener el índice actual.

índice:(ENTERO) Especifica el bitmap seleccionado.

Ejemplo:

ponindicebit 0

repite 3 [av 50 gd 120]

cortaarea 100 100

bp

ponindicebit 1

repite 4 [av 50 gd 90]

cortaarea 100 100

bp

ponmodobit 3

ot

repite 72 [av 50 pega re 50 gd 5]

ponindicebit 0

repite 72 [av 100 pega re 100 gd 5]


INDICEIMAGEN

índice INDICEIMAGEN

Devuelve el índice actual del bitmap fijado con PONINDICEBIT.

índice:(ENTERO) El índice actual seleccionado.

Ejemplo:

ponindicebit 99

muestra indiceimagen

99


PONMODOBIT

PONMODOBIT modo

Pone el modo de un  bitmap según su argumento.  El modo tiene un rango entre 1 y 9.  Su propósito es  pegar imágenes usando diferentes métodos.  Algunas veces se quiere borrar el fondo y otras, no;  o invertir la imagen antes de pegarla , o no hacerlo.  Use MODOBITMAP? para obtener el modo actual.  Hay  9 métodos:

modo 1: Copia de la memoria a la pantalla.

modo 2: Operación O entre la copia en memoria y el fondo de la pantalla.

modo 3: Operación Y entre la copia en memoria y el fondo de la pantalla.

modo 4: Operación XOR entre la copia en memoria y el fondo de la pantalla.

modo 5: Operación Y entre la copia en memoria y el INVERSO del fondo de la pantalla.

modo 6: Copia  el INVERSO de la imagen en memoria en el fondo de la pantalla.

modo 7: Operación O entre la copia en memoria y el INVERSO del fondo de la pantalla.

modo 8: Operación O entre el INVERSO de la copia en memoria y el fondo de la pantalla.

modo 9: Copia el INVERSO del fondo de la pantalla

modo:(ENTERO) Especifica el modo seleccionado.

Ejemplo:

; Pone la pantalla en blanco

poncolorpapel [255 255 255]

bp

bl

; Dibuja un círculo relleno en rojo

circulo 50

poncolorrelleno [255 0 0]

rellena

sl

; Posición inferior izquierda del rectángulo

ponxy -50 -50

copiaarea 101 101

; Pone la pantalla en amarillo

poncolorpapel [255 255 0]

bp

; Pone el modo 1 para pegar

ponmodobit 1

pega

; Observe que todavía existe el fondo blanco

bp

; Pone el modo 1 para pegar(Y)

ponmodobit 3

pega

; Observe que desaparece el fondo blanco


MODOBITMAP?

modo MODOBITMAP?

Devuelve el modo del  bitmap puesto con PONMODOBIT.

modo:(ENTERO) El modo seleccionado.

Ejemplo (guardar y restaurar con modobitmap?):

ponmodobit 1

haz "guardamodo modobitmap?

ponmodobit 8

muestra modobitmap?

8

ponmodobit :guardamodo

muestra modobitmap?

1


RECTANGULORRELLENO

RECTANGULORRELLENO anchura altura

Dibuja un  rectángulo relleno de las dimensiones indicadas en las entradas.  El color se selecciona con PONCOLORRELLENO.

anchura:(ENTERO) Especifica la anchura del rectángulo.

altura:(ENTERO) Especifica la altura del rectángulo.

Ejemplo:

rectangulorrelleno 200 100

rectangulorrelleno 100 200


CARGADIB

CARGADIB nombrebitmap

Carga el bitmap que se indica en la entrada que debe ser una palabra.  Esta primitiva es  similar a la opción Cargar del Menú.  Vea también la primitiva GUARDADIB .

nombrebitmap:(PALABRA) Nombre del fichero que contiene el bitmap.

Ejemplo:

muestra cargadib "c:\\windows\\forest.bmp


TAMAÑODIBUJO

tamaño TAMAÑODIBUJO nombrebitmap

Devuelve el tamaño del bitmap que se especifica en la entrada que debe ser una palabra.

tamaño:(LISTA) de 2 enteros [Anchura Altura].

nombrebitmap:(PALABRA) Nombre del fichero que contiene el bitmap del que se quiere conocer su tamaño.

Ejemplo:

muestra tamañodibujo "c:\\windows\\forest.bmp

[256 256]


GUARDADIB

GUARDADIB nombrebitmap

(GUARDADIB nombrebitmap maxcolordepth)

Guarda como un bitmap su trabajo en el disco de la computadora.  RECUERDE que si generó su imagen con  LOGO,  no necesita guardarla como una imagen a menos que quiere usar la imagen en otra aplicación,  como Paint u otra aplicación.

Su única entrada debe ser una palabra que indica el nombre del fichero que quiere guardar.  Vea también las primitivas CARGADIB y AREAACTIVA.

El formato del fichero guardado es .BMP (Microsoft Windows Bitmap), compatible con aplicaciones de dibujo, como PAINT.  Observe que estos ficheros  pueden ser de gran tamaño y, por tanto, puede llevar un tiempo su lectura o escritura.

nombrebitmap:(PALABRA) Nombre del fichero a guardar.

maxcolordepth:(ENTERO) Máximo de colores: Bits por Pixel (1 = 2 colores, 4 = 16 colores, 8 = 256 colores, 24 = 16.7 millones de colores). Por defecto,  24.

Ejemplo:

repite 72 [repite 4 [av 100 gd 90] gd 5]

guardadib "mifichero.bmp

bp

cargadib "mifichero.bmp


CARGAGIF

CARGAGIF nombrebitmap

Carga un fichero que contiene una imagen GIF. La entrada que debe ser una palabra especifica el nombre del fichero.  Vea también GUARDAGIF.

nombrebitmap:(PALABRA) Nombre del fichero .GIF que se quiere cargar.

(No funciona en la versión de 16 bits)

Ejemplo:

muestra cargagif "mifichero.gif


TAMAÑOGIF

tamaño TAMAÑOGIF nombrebitmap

Devuelve el tamaño de la imagen GIF (compressed  bitmap image). La entrada,  que debe ser una palabra, especifica el nombre del fichero.

tamaño:(LISTA) de 2 enteros [Anchura Altura].

nombrebitmap:(PALABRA) Nombre del fichero GIF.

(No funciona en la versión de 16 bits)

Ejemplo:

;Envía un mensaje de error

muestra tamañogif "mifichero.gif

[256 256]


GUARDAGIF

GUARDAGIF nombrebitmap

(GUARDAGIF nombrebitmap delay append loop maxcolor transcolorvector)

(No funciona en la versión de 16 bits)

Guarda su trabajo como una imagen GIF (compressed bitmap image) en el disco de la computadora para que se pueda usar en páginas Web  o Email.  En la primera forma, la entrada es una palabra que especifica el nombre del fichero. La segunda forma tiene múltiples opciones:

Puede guardar como GIF una animación (serie de bitmaps comprimidos). El argumento  delay  especifica el retardo en milisegundos.  El argumento append especifica si se comienza una animación nueva o se añade el nuevo trabajo a una animación existente.  El argumento loop especifica cuánto tiempo debe repetirse la animación (por omisión  - 1= ninguna vuelta, 0= bucle sin fin,  n= número de vueltas).

El argumento maxcolor especifica el número  máximo de colores; las opciones son 1 (2 colores), 4 (16 colores), o 8 (256 colores) bits por pixel (8, por defecto). Si su imagen no usa muchos colores puede reducir el tamaño del fichero GIF si utiliza de forma adecuada la opción.

Puede especificar que color será transparente [ VERDE ROJO AZUL] en el modo de vídeo 256 colores.

Vea también CARGAGIF y AREAACTIVA.

Esta primitiva guarda la imagen en un formato conocido como GIF (Graphics Interchange Format) que se creó en CompuServe. El formato es popular en el WWW (World Wide Web) por varias razones.  Una razón es que es un formato comprimido y consume poco tiempo en la transmisión.  Una  segunda razón es que soporta "Entrelazado"  (la imagen se muestra parcialmente al tiempo que se carga ). Otra razón es que puede crearse  GIFs animados con múltiples imágenes  en un fichero en el que se especifica el retardo en mostrarse las diferentes imágenes.

nombrebitmap:(PALABRA) Nombre del fichero GIF.

delay:(ENTERO) Retraso en milisegundos.

append:(BOOLEAN) Verdadero o Falso según se trate o no de una nueva animación.

loop:(ENTERO)  (-1 = ninguna vuelta (por defecto) , 0 = bucle sin fin, n = número de vueltas).

maxcolor:(ENTERO) Máximo de colores en bits por pixel (1 (2 colores), 4 (16 colores), 8 (256 colores, por defecto)).

transcolorvector:(LISTA) Lista de tres enteros con las intensidades de Rojo, Verde y Azul,  cada uno en un rango 0-255 para el color transparente.

Notas:

GUARDAGIF trabaja mejor en el modo 256 colores.

Puede llamar a BORRAPALETA entre cada marco porque cada marco tiene  su propia "Paleta de colores".

Ejemplo: (GIF simple)

; Envía un mensaje Esto es para la versión Logo de 32 bits

repite 72 [repite 4 [av 100 gd 90] gd 5]

guardagif "mifichero.gif

bp

cargagif "mifichero.gif

Ejemplo (GIF animado):

; Envía un mensaje Esto es para la versión Logo de 32 bits

bp

ponareaactiva [-150 -150 150 150]

; Indica que no se añade el primer marco

haz "append "Falso

repite 36 ~

   [

   repite 4 [av 100 gd 90]

   gd 10

   ; Guarda el marco (sin retardo y bucle sin fin)

   (guardagif "mifichero.gif 0 :append 0)

   haz "append "Verdadero

   ]

<Ahora abra el fichero mifichero.gif en su Navegador de Internet (p.e. Netscape o Internet Explorer)


PONAREAACTIVA

PONAREAACTIVA área

Es similar a ÁREA ACTIVA del Menú.  Pone el área activa para imprimir y guardar Bitmaps. Vea también AREAACTIVA.

área:(LISTA) de 4 enteros  [XBajo YBajo XAlto YAlto].

Ejemplo:

rectangulorrelleno 100 100

ponareaactiva [0 0 50 50]

guardadib "mifichero.bmp

bp

cargadib "mifichero.bmp


AREAACTIVA

área AREAACTIVA

Devuelve el área activa que se puso con PONAREAACTIVA.

área:(LISTA) de 4 enteros  [XBajo YBajo XAlto YAlto].

Ejemplo:

ponareaactiva [-10 -10 10 10]

muestra areaactiva

[-10 -10 10 10]


GESTIÓN DE REDES

La gestión de redes permite a MSWLogo comunicarse con el resto del mundo. MSWLogo  tan sólo utiliza una forma, conocida como “sockets” TCP/IP (lo que primordialmente se utiliza para construir en Internet). MSWLogo puede recibir información de otros ordenadores o mandarla a otros tantos. El otro ordenador no necesita tener abierto el MSWLogo, aunque esto será posible. Cuando usted desee que MSWLogo inicie una conexión, use los comandos NETCONNECTxxx. Cuando desee que MSWLogo acepte una conexión use los NETACCEPTxxx. Puede enviar y recibir información con cualquiera de las 2 conexiones. Como máximo, puede tener 2  conexiones, una que usted inició y otra que aceptó.

MSWLogo  sobreentiende que el protocolo TCP/IP está disponible,  a través de lo que se conoce como WINSOCK.DLL (16 bit MSWLogo) o WSOCK32.DLL (32 bit MSWLogo). Microsoft le ofrece gratis el protocolo TCP/IP para  Windows 3.11. Microsoft incluye el protocolo TCP/IP en el Windows 95 y Windows NT.  Pero tiene que ser explícitamente instalado y configurado en todas las plataformas. Hay además un dominio público TCP/IP conocido como TRUMPET que puede ser utilizado para el Windows 3.1.

TCP/IP  puede trabajar con una amplia variedad de recursos como modems (PPP),  cables LapLink…etc. CompuServe, Microsoft Network, America Online y proveedores de servicio de internet privados (ISP)  ofrecen acceso TCP/IP al resto del  mundo. Esto quiere decir que su amigo puede estar en la  costa oeste y  usted en la costa este y ambos activar el MSWLogo y  dibujar en la pantalla del otro, o construir juegos en los que los dos pueden participar. Siempre y cuando usted y su amigo logren encontrarse.

INICIARED

FINRED

SIRED

NORED

LEERED

ESCRIBERED

PONRED

QUITARED

ENVIAVALORRED

LEEVALORRED

Herramientas (fuera de MSWLogo):

DNS (Domain Name Service ): DNS es una parte integral de la utilización de los protocolos TCP/IP. TCP/IP en si mismo sólo entiende  direcciones de máquinas, que  suelen tener este aspecto más o menos:  21.100.200.5 (fíjese que cada campo de números debe ser inferior a 255). Pero los números no tienen significado y son difíciles de memorizar para nosotros los  humanos, así es que a las máquinas se les asigna nombres. DNS son básicamente máquinas que mantienen ficheros de datos de estos mapas de  nombres a números. Las máquinas DNS hablan entre si para intercambiar información. MSWLogo usa nombres DNS cuando intenta hacer una conexión.

PING: se utiliza como un sencillo test de conectividad . La mayoría de las implementaciones TCP/IP incluyen un programa PING. Para utilizarlo, simplemente introduzca un “PING remotenode” donde “remotenode” es la maquina cuya conectividad usted desea comprobar. PING le dirá si puede alcanzar a esa máquina, y si es así, cuanto tiempo tardará. Hasta que PING funcione no se moleste en probar otro software basado en TCP/IP (incluyendo los comandos MSWlogo Network). PING aceptará ambas formas  de dirección (el número o el nombre). Si PING falla con el nombre, entonces pruebe con el número (si lo sabe). Si el número funciona pero no lo hace el nombre, normalmente indica un problema con el DNS. No DNS: si no hay servidor DNS, puede utilizar lo que se conoce como ficheros HOSTS ; normalmente ubicado en C:\Windows). Microsoft frecuentemente instala una muestra del fichero HOST  llamada HOSTS.SAM (copie HOSTS.SAM a  HOSTS. y edítelo). Es simplemente una base de datos para mapear las direcciones de nombres a números. Si está utilizando un fichero HOSTS, entonces cada  máquina de la red debería utilizar una copia del mismo fichero HOSTS con el nombre para “mapear” todas las máquinas de la red. Usted puede tener ambos ficheros DNS y HOSTS, normalmente el fichero HOSTS se comprueba antes de intentar el DNS.

Sockets y Servicios:  Los Servicios son a los Sockets lo que DNS a las direcciones de la red. Los Servicios mapean “Nombres de servicio” como (TELNET, FTP, POPMAIL). Puede encontrar un fichero SERVICES en C:\Windows y puede examinarlo si desea. MSWLogo no acepta  el nombre del servicio a número de puerto de Socket, sólo usa el número de puertos Socket. Pero si desea conectarse a un servicio como TELNET o actuar como servidor TELNET, entonces simplemente búsquelo en el fichero Services. Por lo general, los números Socket por debajo de 5000 se reservan para cosas como TELNET y FTP. Es mejor usar números Socket por encima del 5000.

Redes: si tiene una red privada bajo su control total, puede hacer lo que quiera. Si todo son PC’s Windows, entonces probablemente tendrá que pasar sin un servidor DNS (y utilizar un fichero HOSTS). Generalmente los servidores DNS son máquinas UNIX.  Si parte de una red más grande, debería contactar con su administrador de red. Si ya  está utilizando Netware es normalmente posible activar ambos TCP/IP y Netware al mismo tiempo (en efecto, es fácil con el Windows95)

Proveedores de Servicio: algunos proveedores de servicio no le dan un nombre y asignan su número de dirección de golpe. No estoy seguro de cómo trabajar con estos sistemas. Algunos proveedores de servicio “envuelven” completamente nuestro acceso a la red con una aplicación que proporciona todos los servicios que necesitamos. Y puede que no ofrezcan acceso al Winsock. Cuando pida ayuda a un proveedor de servicios, dígale que quiere poner en marcha algo como el Netscape. Si Netscape funciona, entonces MSWLogo también debería funcionar. El que te permita recibir información es ya más complicado, la otra aplicación necesita ser capaz de encontrarle a usted por su nombre o, al menos, por una número dirección si están utilizando un fichero HOSTS. Si sabe su nombre de máquina pero no sabe su dirección,   puede usar el PING para conseguirla, simplemente PING el nombre de su máquina y  le dará su dirección


INICIARED

INICIARED

(INICIARED synchronous_dns)

Permite la gestión de redes en MSWLogo. Puede llamar a esta primitiva con la bandera SYNCHRONOUS_DNS a 0 (Asincrónico por defecto) o 1 (síncrono). Es más seguro usar  DNS asíncrono (es menos probable que se cuelgue MSWLogo), pero existen otros problemas con esa bandera.  Si surge un error "Host not Found" pruebe a poner la bandera a 1, si estaba a cero.

synchronous_dns:(ENTERO) 1 para Síncrono, 0 para Asíncrono (por defecto).

Ejemplo:

INICIARED

FINRED


FINRED

Finaliza la gestión de redes en  MSWLogo.

Ejemplo:

INICIARED

FINRED


SIRED

SIRED

status SIRED socket sendready receiveready

Acepta una conexión. Para obtener los datos recibidos llame a ESCRIBERED en el código a incluir en receiveready.  Para desconectar llame a NORED.  Cuando los datos están disponibles se ejecutará el código receiveready.  Cuando  envíe datos con  ENVIAVALORRED  puede que no sea posible enviar. Si esto sucede, debe esperar hasta que se ejecute el código sendready antes de tratar de enviar los datos de nuevo.

status:(BOOLEANO): Indica si la operación  ha tenido éxito.

socket:(ENTERO) Es un número que identifica el socket.

sendready:(LISTA) Es una lista de ordenes de Logo (primitivas o procedimientos) a ejecutar cuando los datos están listos para ser enviados de nuevo.

receiveready:(LISTA) Es una lista de órdenes de Logo (primitivas o procedimientos) a ejecutar cuando los datos están  disponibles.

Se llamará a SENDREADY en el siguiente orden por:

1: Successfully Issued Accept

2: Accepted Connection

3: Listo para enviar

4: Listo para enviar (después de enviar un error)

5: Listo para enviar (después de enviar un error)

.

.

.

n: Listo para enviar (después de enviar un error)

Se llamará a RECEIVEREADY en el siguiente orden por:

1: Datos actuales recibidos

2: Datos actuales recibidos

.

.

.

n: Datos actuales recibidos

Ejemplo:

iniciared

muestra sired 5124 [escribe [listo para enviar]] [escribe [listo para recibir]]

verdadero

nored

finred


NORED

NORED

Desactiva la aceptación a conexiones entrantes.

Ejemplo:

iniciared

muestra sired 5124 [escribe [listo para enviar]] [escribe [listo para recibir]]

verdadero

nored

finred


LEERED

sent LEERED datos

Envía los datos. Cuando envíe los datos,  esta primitiva puede devolver Falso (significa que no están listo para enviar).  Si sucede esto debe esperar hasta que se ejecute el código  sendready  de  SIRED  y entonces envíe los datos de nuevo.

sent:(BOOLEANO): Indica si la operación tuvo éxito.

datos:(LISTA) Es el valor de los datos que quiere enviar a la red.

Ejemplo:(el emisor envía datos al receptor)

iniciared

muestra sired 5124 [escribe [Ok to Send Again]] []

verdadero

muestra ponred "MyMachineName 5124 [] [escribe leered]

verdadero

espera 100

Ok to Send Again

Ok to Send Again

Ok to Send Again

muestra enviavalorred [¿Quién me llama?] ; Envía algunos datos

verdadero

espera 100

 ¿Quién me llama?

quitared

nored

finred


ESCRIBERED

datos ESCRIBERED

Devuelve el valor de los datos recibidos. Es mejor llamar a este procedimiento en el código incluido en la primitiva  SIRED.

datos:(LISTA) Es el valor de los datos recibidos en la red.

Ejemplo:(El emisor envía datos al receptor)

iniciared ; comienza una sesión en la red

muestra sired 5124 [] [escribe leered]

verdadero

muestra ponred "MyMachineName 5124 [escribe [Ok to Send Again]] []

verdadero

espera 100

Ok to Send Again

Ok to Send Again

Ok to Send Again

muestra leered [Hola, gracias por recibir mi llamada] ; Envía algunos datos

verdadero

espera 100

Hola, gracias por recibir mi llamada

quitared

nored

finred


PONRED

status PONRED machinename socket sendready receiveready

Comienza una conexión.  Para terminar la conexión llame a QUITARED . Para obtener los datos recibidos llame a LEEVALORRED en el código de receiveready.  Cuando envíe los datos con  ENVIAVALORRED puede devolver falso (significa que no está preparado para enviar).  Si sucede esto, debe esperar hasta que se ejecute el código incluido en sendready antes de tratar de enviar de nuevo.

status:(BOOLEAN): Indica si la operación se realizó con éxito.

machinename:(LISTA) Es un host TCP/IP o un fichero Hosts.

socket:(ENTERO) Es un número usado para identificar el socket.

sendready:(LISTA) Es una lista de primitivas o procedimientos Logo a ejecutar cuando los datos están listos para ser enviados de nuevo.

receiveready:(LISTA) Es una lista de primitivas o procedimientos a ejecutar  cuando los datos están disponibles.

Se llamará a SENDREADY en el siguiente orden por:

 1:Conexión emitida con éxito

2: Conexión hecha

3: Listo para enviar

4: Listo para enviar (después de enviar un error)

5: Listo para enviar (después de enviar un error)

.

.

.

n: Listo para enviar (después de enviar un error)

Se llamará a RECEIVEREADY en el siguiente orden por:

 1: Datos actuales recibidos

2: Datos actuales recibidos

.

.

.

n: Datos actuales recibidos

Ejemplo:

iniciared ; Inicia una sesión en la red

muestra ponred "remotemachinename 5124 [escribe [listo para enviar de nuevo]] [escribe [I have something]]

verdadero

quitared

finred


QUITARED

QUITARED

Desactiva el envío de datos.

Ejemplo:

iniciared ; Inicia una sesión en la red

muestra ponred "remotemachinename 5124 [escribe [listo para enviar ahora]] [escribe [I have something]]

verdadero

quitared

finred


QUITARED
ENVIAVALORRED

sent QUITARED datos

Envía los DATOS. Cuando envía los datos, esta primitiva puede devolver Falso (significa que no está listo para enviar).  Si sucede esto debe esperar hasta que se ejecute el código sendready de  PONRED y entonces enviar los datos de nuevo.

sent:(BOOLEAN): Indica si la operación tuvo éxito.

datos:(LISTA) Es el valor de los datos que quiere enviar a la red.

Ejemplo:(El emisor envía datos al receptor )

iniciared ; Inicia una sesión en la red

muestra sired 5124 [] [escribe leered]

verdadero

muestra ponred "MyMachineName 5124 [escribe [Ok to Send Again]] []

verdadero

espera 100

Ok to Send Again

Ok to Send Again

Ok to Send Again

muestra enviavalorred [Hola, gracias por recibir mi llamada] ; Envía algunos datos

verdadero

espera 100

Hola, gracias por recibir mi llamada

Quitared

nored

finred


LEEVALORRED

datos LEEVALORRED

Devuelve el valor de los últimos  datos recibidos.  Es mejor llamar a este procedimiento en el código incluido en  receiveready de SIRED.

datos:(LISTA) Es el valor de los datos recibidos.

Ejemplo:( El emisor envía datos al receptor )

iniciared ; Inicia una sesión en la red

muestra sired 5124 [escribe [Ok to Send Again]] []

verdadero

muestra ponred "MyMachineName 5124 [] [escribe leevalorred]

verdadero

espera 100

Ok to Send Again

Ok to Send Again

Ok to Send Again

muestra enviavalorred [¿Quién me llama?] ; Envía algunos datos

verdadero

espera 100

 ¿Quién me llama?

quitared

nored

finred


MULTIMEDIA/MIDI/SONIDO

PRIMITIVAS MIDI

PRIMITIVAS SONIDO WAVE

PRIMITIVAS SONIDO

PRIMITIVAS MULTIMEDIA


PRIMITIVAS MIDI

ABREMIDI

CIERRAMIDI

MENSAJEMIDI

TABLA MIDI

CONTROL MIDI

GLOSARIO MIDI

INSTRUMENTOS MIDI


ABREMIDI

device ABREMIDI

device (ABREMIDI id)

Abre el dispositivo MIDI mediante un controlador.  Con la primera forma (sin argumentos) se intenta usar el  MIDI-MAPPER.  La segunda forma  (con el argumento id) permite elegir cualquier controlador disponible en su sistema.  ABREMIDI devuelve el nombre del controlador.

device:(LISTA) El nombre del controlador, si la operación tuvo éxito.

id:(ENTERO) Es un índice que especifica qué controlador del dispositivo MIDI quiere abrir.  Cuando no se selecciona ninguno, el controlador será MIDI MAPPER.

El dispositivo MIDI genera sonido en su tarjeta de sonido.  Debe tener instalados los controladores apropiados para que la tarjeta de sonido pueda funcionar.

Las PRIMITIVAS MIDI en MSWLogo no utilizan ficheros MIDI  (.MID o .MDI);  en cambio, directamente  envían una serie mensajes al dispositivo MIDI.  Puede  manipular (play)  ficheros MIDI usando MCI.  MSWLogo no es un secuenciador  MIDI.

Sólo está disponible en Windows 3.1 y compatibles.  Vea también MENSAJEMIDI y CIERRAMIDI.

Ejemplo:

ESCRIBE ABREMIDI

[MIDI Mapper]

CIERRAMIDI


CIERRAMIDI

CIERRAMIDI

Cierra el dispositivo MIDI.  Vea también ABREMIDI.

Ejemplo:

ESCRIBE ABREMIDI

[MIDI Mapper]

CIERRAMIDI


MENSAJEMIDI

MENSAJEMIDI mensaje

La entrada debe ser una lista.  Requiere que previamente haya llamado a ABREMIDI

mensaje:(LISTA) Un mensaje MIDI con una de las 3 formas: larga, corta y  sistema exclusivo.

Forma corta:

[estado datos1 datos2]

La forma corta es la común, con una lista con 3 enteros. El primer entero es el byte de estado que está seguido por dos bytes de datos.

estado:(ENTERO) En la terminología MIDI es el " byte de estado " pero en la tabla siguiente aparece como  "código de orden".

datos1:(ENTERO) Byte de datos 1 del "código de orden" MIDI.

datos2:(ENTERO) Byte de datos 2 del "código de orden" MIDI.

Forma larga:

 [estado datos1 datos2 estado datos1 datos2 ...]

La forma larga es similar a la corta, pero la lista de enteros contiene mensajes cortos

Sistema exclusivo:

[240 datos1 datos2 datos3 datos4 ...]

El SISTEMA EXCLUSIVO lleva como byte de estado 240 (F0 hexadecimal) al que puede seguir  cualquier cantidad de bytes  de datos.

datos1:(ENTERO) El primer byte de datos especifica el dispositivo Midi.

datos2:(ENTERO) El primer byte de datos especifica el dispositivo Midi y así sucesivamente.

Vea la  TABLA MIDI.

Para más información:

MIDI BASICS por Akira Otsuka y Akihiko Nakajima.

Ejemplo:

ESCRIBE ABREMIDI

[MIDI Mapper]

MENSAJEMIDI (LISTA 192+13 56 0 192+13 56 0)

<listen to tone>

MENSAJEMIDI (LISTA 144+13 100 100)

CIERRAMIDI


TABLA MIDI

NOMBRE ORDEN	CÓDIGO DE ORDEN	BYTE DE DATOS 1	BYTE DE DATOS 2
Note Off	128 + Canal	0-127 Pitch	0-127 Velocity
Note On	144 + Canal	0-127 Pitch	0-127 Velocity
Poly Presión	160 + Canal	0-127 Pitch	0-127 Presión
Control Change	176 + Canal	0-127 Control midi	0-127 MSB
Programa Change	192 + Canal	0-127 Programa	No usado
Canal Presión	208 + Canal	0-127 Presión	No usado
Pitch Wheel	224 + Canal	0-127 LSB	0-127 MSB
System Exclusive	240	0-127 Id Code	Cualquier n  de bytes
Undefined	241	No usado	No usado
Song Position	242	0-127 LSB	0-127 MSB
Song Select	243	0-127 Song	No usado
Undefined	244	No usado	No usado
Undefined	245	No usado	No usado
Tune Request	246	No usado	No usado
End of Exclusive	247	No usado	No usado
Timing Clock	248	No usado	No usado
Undefined	249	No usado	No usado
Start	250	No usado	No usado
Continue	251	No usado	No usado
Stop	252	No usado	No usado
Undefined	253	No usado	No usado
Active Sensing	254	No usado	No usado
System Reset	255	No usado	No usado

Vea también el GLOSARIO MIDI


CONTROL MIDI

NOMBRE ORDEN	CÓDIGO DE ORDEN	DATA BYTE 1	DATA BYTE 2
Control Change	176 + Canal	0 Undefined	0-127 MSB
Control Change	176 + Canal	1 Modulation Wheel	0-127 MSB
Control Change	176 + Canal	2 Breath Controller	0-127 MSB
Control Change	176 + Canal	3 After Touch	0-127 MSB
Control Change	176 + Canal	4 Foot Controller	0-127 MSB
Control Change	176 + Canal	5 Portamento Time	0-127 MSB
Control Change	176 + Canal	6 Data Entry	0-127 MSB
Control Change	176 + Canal	7 Main Volume	0-127 MSB
Control Change	176 + Canal	8-31 Undefined	0-127 MSB
Control Change	176 + Canal	32-63 LSB of 0-31	0-127 LSB
Control Change	176 + Canal	64 Damper Pedal	0:Off 127:On
Control Change	176 + Canal	65 Portamento	0:Off 127:On
Control Change	176 + Canal	66 Sostenuto	0:Off 127:On
Control Change	176 + Canal	67 Soft Pedal	0:Off 127:On
Control Change	176 + Canal	68-92 Undefined	0:Off 127:On
Control Change	176 + Canal	93 Chorus	0:Off 127:On
Control Change	176 + Canal	94 Celeste	0:Off 127:On
Control Change	176 + Canal	95 Phaser	0:Off 127:On
Control Change	176 + Canal	96 Data Entry + 1	0:Off 127:On
Control Change	176 + Canal	97 Data Entry - 1	0:Off 127:On
Control Change	176 + Canal	98-121 Undefined	0:Off 127:On
Control Change	176 + Canal	122 Local Control	0-127
Control Change	176 + Canal	123 All Notes Off	0
Control Change	176 + Canal	124 Omni Mode off	0-15
Control Change	176 + Canal	125 Omni Mode on	0
Control Change	176 + Canal	126 Mono on/Poly off	0
Control Change	176 + Canal	127 Poly on/Mono off	0

Vea también el GLOSARIO MIDI


GLOSARIO MIDI

Canal:  Un canal es un número, entre 0-15, que corresponde a los canales 1-16.

Pitch:  Un pitch es un número, entre 0-127,  que corresponde a una nota en el instrumento.

Velocidad:  Es un número, entre 0-127, que indica la rapidez con que se pulsan y liberan  las teclas o cuerdas.

Presión:  Es un número entre 0-127 y corresponde con las características de pulsación de las teclas.

Programa:  Es un número, entre 0-127, que se corresponde con el instrumento.  Vea la tabla INSTRUMENTOS MIDI.


INSTRUMENTOS MIDI

Piano

0 -	Acoustic Grand Piano

1 -	Bright Acoustic Piano

2 -	Electric Grand Piano

3 -	Honky-tonk Piano

4 -	Rhodes Piano

5 -	Chorused Piano

6 -	Harpsichord

7 -	Clavinet

Percusión cromática

8 -	Celesta

9 -	Glockenspiel

10 -	Music box

11 -	Vibraphone

12 -	Marimba

13 -	Xylophone

14 -	Tubular Bells

15 -	Dulcimer

Órgano

16 -	Hammond Organ

17 -	Percussive Organ

18 -	Rock Organ

19 -	Church Organ

20 -	Reed Organ

21 -	Accordian

22 -	Harmonica

23 -	Tango Accordian

Guitarra

24 -	Acoustic Guitar (nylon)

25 -	Acoustic Guitar (steel)

26 -	Electric Guitar (jazz)

27 -	Electric Guitar (clean)

28 -	Electric Guitar (muted)

29 -	Overdriven Guitar

30 -	Distortion Guitar

31 -	Guitar Harmonics

Bajo

32 -	Acoustic Bass

33 -	Electric Bass (finger)

34 -	Electric Bass (pick)

35 -	Fretless Bass

36 -	Slap Bass 1

37 -	Slap Bass 2

38 -	Synth Bass 1

39 -	Synth Bass 2

Cuerda

40 -	Violin

41 -	Viola

42 -	Cello

43 -	Contrabass

44 -	Tremolo Strings

45 -	Pizzicato Strings

46 -	Orchestral Harp

47 -	Timpani

Conjunto

48 -	String Ensemble 1

49 -	String Ensemble 2

50 -	Synth Strings 1

51 -	Synth Strings 2

52 -	Choir Aahs

53 -	Voice Oohs

54 -	Synth Voice

55 -	Orchestra Hit

Cobre

56 -	Trumpet

57 -	Trombone

58 -	Tuba

59 -	Muted Trumpet

60 -	French Horn

61 -	Brass Section

62 -	Synth Brass 1

63 -	Synth Brass 2

Reed

64 -	Soprano Sax

65 -	Alto Sax

66 -	Tenor Sax

67 -	Baritone Sax

68 -	Oboe

69 -	English Horn

70 -	Bassoon

71 -	Clarinet

Pipe

72 -	Piccolo

73 -	Flute

74 -	Recorder

75 -	Pan Flute

76 -	Bottle Blow

77 -	Shakuhachi

78 -	Whistle

79 -	Ocarina

Synth Lead

80 -	Lead 1 (square)

81 -	Lead 2 (sawtooth)

82 -	Lead 3 (caliope lead)

83 -	Lead 4 (chiff lead)

84 -	Lead 5 (charang)

85 -	Lead 6 (voice)

86 -	Lead 7 (fifths)

87 -	Lead 8 (brass + lead)

Synth Pad

88 -	Pad 1 (new age)

89 -	Pad 2 (warm)

90 -	Pad 3 (polysynth)

91 -	Pad 4 (choir)

92 -	Pad 5 (bowed)

93 -	Pad 6 (metallic)

94 -	Pad 7 (halo)

95 -	Pad 8 (sweep)

Efectos sintéticos

96 -	FX 1 (rain)

97 -	FX 2 (soundtrack)

98 -	FX 3 (crystal)

99 -	FX 4 (atmosphere)

100 -	FX 5 (brightness)

101 -	FX 6 (goblins)

102 -	FX 7 (echoes)

103 -	FX 8 (sci-fi)

Étnicos

104 -	Sitar

105 -	Banjo

106 -	Shamisen

107 -	Koto

108 -	Kalimba

109 -	Bagpipe

110 -	Fiddle

111 -	Shanai

Percusión

112 -	Tinkle Bell

113 -	Agogo

114 -	Steel Drums

115 -	Woodblock

116 -	Taiko Drum

117 -	Melodic Tom

118 -	Synth Drum

119 -	Reverse Cymbal

Efectos de sonidos

120 -	Guitar Fret Noise

121 -	Breath Noise

122 -	Seashore

123 -	Bird Tweet

124 -	Telephone Ring

125 -	Helicopter

126 -	Applause

127 -	Gunshot


PRIMITIVAS SONIDO WAVE

SUENAWAVE


SUENAWAVE

SUENAWAVE wavfile banderas

Wavfile debe ser un fichero .WAV.  Banderas describe cómo quiere oír el sonido.  Estas posibilidades también existen con  MCI pero con un control más fino.  Esta primitiva no requiere una tarjeta de sonido.  Está  disponible un controlador público de Microsoft,  SPEAKER(.EXE, .DRV, .ZIP ?) que emula las capacidades de los ficheros.

wavefile(LISTA): Nombre del fichero .WAV.

banderas(ENTERO):

0= Síncrono; vuelve cuando termina.

1= Asíncronos; vuelve inmediatamente mientras continua el sonido.

2= No usa el sonido por defecto,  si el especificado no se puede hallar.

4= Sonido en memoria  (no soportado).

8= Continúa el sonido hasta que se llame a otra orden de sonido.

16= No detiene un sonido existente.

Nota: se puede combinar las banderas

Ejemplo:

suenawave "c:\\windows\\tada.wav 1+8

suenawave [] 0


PRIMITIVAS SONIDO

SONIDOON

APAGASONIDO

TONO


SONIDOON

SONIDOON frecuencia	(Procedimiento de la librería)

La entrada es la frecuencia del sonido que quiere oír.  El sonido permanece hasta que se llame a APAGASONIDO.


APAGASONIDO

APAGASONIDO	(Procedimiento de la librería)

Apaga el sonido emitido con SONIDOON.

Precaución: No trabaja en NT.

Ejemplo:

sonidoon 1000

apagasonido


TONO

TONO tonostream

La entrada debe ser una lista de pares.  Cada par especifica la frecuencia (en hertzios) y la duración.

tonostream:(LISTA) Una lista con los pares frecuencia y duración  (enteros) [frecuencia duración frecuencia duración ...].

Ejemplo:

tono [1000 200]

Ejemplo:

haz "zing []

repite 50 [haz "zing pu cuentarepite*10 :zing haz "zing pu 100 :zing]

tono :zing


PRIMITIVAS MULTIMEDIA

MCI


MCI

estado MCI mci-orden-lista

estado (MCI mci-orden-lista callback)

La entrada mci-orden-lista debe ser una lista. La primitiva MCI  puede o no devolver una lista, dependiendo de la forma MCI que emplee.  La interfaz MCI es muy potente.  Permite que Logo controle cualquier dispositivo Windows MultiMEDIA que incluya tarjetas de sonido, CD-ROM, VIDEOS y más.  En la segunda forma si mci-orden-lista  "notifica" la opción entonces se ejecutará un programa cuando se complete la orden.

La primitiva MCI permite al programador de Logo, escribe procedimientos para manipular el dispositivo MultiMedia.  Ahora puede unir sonidos a los pasos de un dibujo.  Puede preguntar al  usuario con su voz propia.

estado:(LISTA).

mci-orden-lista:(LISTA)

callback:(LISTA) Es una lista de primitivas o procedimientos Logo a ejecutar  cuando se complete la primitiva MCI,  si usa "notifica" en lugar de "espera".

Ejemplo:

para tonoit

escribe mci [open c:\\windows\\tada.wav type waveaudio alias wa1]

escribe mci [open c:\\windows\\ding.wav type waveaudio alias wa2]

mci [seek wa1 to start]

mci [play wa1 wait]

repite 2~

  [~

  mci [seek wa2 to start]~

  mci [play wa2 wait]~

  ]

mci [close wa1]

mci [close wa2]

fin


REDEF?

REDEF?

Si su valor es VERDADERO, podrán borrarse las primitivas  (BORRA) o volver a definirse (COPIADEF).

Ejemplo:

haz "redef? "falso

borra "av

av es una primitiva

haz "redef? "verdadero

borra "av

av

No se cómo  av