Manual de

¿Qué es GeoScript?

GeoScript es un lenguaje de programación que crea demostraciones geométricas para fines educativos. Permite programar construcciones geométricas estáticas y animadas, con o sin interacción del usuario. Los programas GeoScript no son compilados en ejecutables, sino son interpretados a través del programa intérprete "GeoScript.exe".
La meta de GeoScript no es profesionalismo, sino sencillez. Existen programas de geometría más sofisticados, pero son también más difíciles de aprender. GeoScript desea simplemente simular construcciones que se pueden realizar con regla y compás (y ocasionalmente un transportador), de una manera que su uso esté al alcance aun de profesores y estudiantes con poca o ninguna experiencia previa en programación.
(Sin embargo, me gustaría añadir algunas capacidades más al programa, si alguna vez tengo tiempo para una actualización...)

GeoScript es gratis y puede distribuirse libremente; pero es prohibido cobrar alguna forma de pago por su distribución o uso..

¿Qué es un archivo de programa GeoScript?

Los programas GeoScript son simples archivos de texto sin formato, y pueden tener cualquier extensión. Por tanto, se pueden escribir programas GeoScript con cualquier editor de texto que guarda los documentos como texto sin formato (como p.ej. "Bloc de notas" en Windows). Documentos formateados (tales como *.rtf, *.doc, *.htm, etc.) no serán reconocidos por el intérprete GeoScript.

Ejecutar GeoScript (para Windows)

Al abrir "GeoScript.exe" directamente, se mostrará un diálogo "Abrir archivo" donde se puede seleccionar un programa a ejecutar.
Desde la línea de comando, se puede ejecutar "GeoScript [nombre de archivo]", y el programa especificado en [nombre de archivo] se ejecutará. Nota que es NECESARIO incluir la extensión del nombre (p.ej. ".txt" si el programa fue guardado como archivo de texto), puesto que no existe ninguna extensión predefinida para programas de GeoScript.
Se puede también arrastrar un archivo de programa sobre el icono de "GeoScript", y GeoScript ejecutará el programa.
También es posible configurar el sistema operativo de manera que una extensión especial de archivo (p.ej. .geo) sea asociada con "GeoScript.exe".

Aprender GeoScript

Si recibiste el paquete completo de GeoScript, encontrarás allí un curso tutorial (tutorial.htm) con programas de ejemplo (tutorial*.geo), y también varios programas adicionales de ejemplo, que te ayudarán a comenzar.

Sitio web de GeoScript


Referencia del lenguaje GeoScript:
Tipos de datos - Disposición de la pantalla e interfaz del usuario - Asuntos de síntaxis - Mensajes de error

Indice de instrucciones:

Instrucciones de inicialización:
POINT
LINE
LINEPOLAR
CIRCLE

Instrucciones de construcción:
MIDDLE
ADVANCETO, ADVANCEON
LINE
LINEPOLAR
STARTLINE
MIDLINE
BISECTOR
TANGENT
CROSS
CIRCLEND
CIRCLE
ARC
COPY
MOVECIRCLE
REVERT
ORDERLINES

Instrucciones de marcar elementos:
MARKPOINT
MARKLINE
MARKANGLE
MARKNUMBERLINE
MARKNUMBERANGLE
FILL(TRIANGLE, CIRCLE)

Procedimientos e instrucciones del flujo del programa:
CONSTRUCTION
ANIMATION
INTERACTION
REPEAT
CALL / CONSTRUCT / ANIMATE / INTERACT
Modos: FAST, PACE, SLOW / TOOLS
MENU / MENUITEM / ENDMENU / REPEATMENU
STEP (ALONG)
TRACE
CLICKABLE (ALONG)
WAIT(ALWAYS)

Instrucciones de pantalla:
SCREEN
WINDOW
TITLE
TEXTWINDOW, TWINDOW
TEXT
CLS

Otras instrucciones:
(FRAME)SPEED
(TOOL)DEFAULTS


Tipos de datos:

Puesto que GeoScript es un programa de geometría, las variables que usa son objetos geométricos. Existen tres tipos de datos: puntos, rectas y círculos. Estos objetos tienen dos clases de propiedades: propiedades de posición y propiedades gráficas. Las propiedades de posición indican dónde un objeto está ubicado en el sistema de coordenadas. Estas propiedades son obligatorias. Las propiedades gráficas indican cómo un objeto aparece en la pantalla. Estas propiedades son opcionales. Si no asignas propiedades gráficas a un objeto, simplemente recibirá las propiedades predefinidas.

La tabla siguiente muestra las propiedades disponibles de los objetos:

Tipo de datos Propiedades de posición Propiedades gráficas
Puntos (gPoint) x, y Color, grosor, estilo
Recta vectorial
(LineVectorial)
x, y (origen)
dx, dy (dirección del vector)
Color, grosor, patrón
Círculos (gCircle) x, y (centro), radio
inicio, fin (ángulos de inicio y fin del arco)
Color, grosor

Los círculos pueden también ser circulos parciales (arcos), de los que puedes indicar los ángulos de su inicio y fin. Si inicio y fin son ambos cero, se trata de un círculo completo. (Este es el valor predefinido.)

Estilo (para puntos) puede tener los siguientes valores:

0 = una cruz delgada del ancho grosor. Este es el estilo predeterminado.
1 = un solo píxel.
2 = un círculo lleno del diámetro grosor.
3 = un círculo vacío del diámetro grosor.
4 = un cuadrado lleno del diámetro grosor.
5 = un cuadrado vacío del diámetro grosor.
8 = una punta de flecha hacia la izquierda.
9 = una punta de flecha hacia la derecha.
10 = una punta de flecha hacia arriba.
11 = una punta de flecha hacia abajo.

Patrón (para rectas) es un valor de 16 bits que indica los píxeles que deben dibujarse, resp. no dibujarse, en un patrón repetido de 16 píxeles. Lo puedes indicar como un valor hexadecimal al estilo de BASIC (con el prefijo &H), o como un valor binario (con el prefijo &B). Así por ejemplo, &HFFFF (&B1111111111111111) es una línea llena. &HFF00 (&B1111111100000000) dibuja una línea interrumpida a espacios iguales (- - - - -). Un valor de 1 dibuja una línea punteada de puntos bastante espaciados; un valor de 0 no dibuja nada en absoluto.

Los colores pueden indicarse de una de las formas siguientes:
- Un valor hexadecimal de RGB (componentes de rojo, verde y azul) de la forma &HRRGGBB. (Para colores se admiten también las formas 0xRRGGBB y 0RRGGBBh.)
- Un grupo de tres valores (rojo, verde y azul) de 0 a 255, encerrado en paréntesis: (RR, GG, BB).
Así por ejemplo, un rojo intenso se representaría como &HFF0000 o como (255, 0, 0).

- Podrías preguntar por qué no hay otros elementos geométricos como elipses, parábolas, curvas de seno, curvar Bézier, etc. Pero éstos no son objetos de la geometría clásica propiamente dicho, porque no se pueden construir directamente con solo compás y regla. Por tanto decidí no incluirlos en el programa. Sin embargo, puedes construir tales curvas punto por punto, usando un procedimiento ANIMATION con la instrucción TRACE. (Vea los ejemplos de programas incluidos.)

Datos inválidos:

Puede suceder que ciertas instrucciones no rindan un resultado válido. (Por ejemplo, si intentas crear la intersección de dos rectas paralelas.) En este caso no se genera ningún error; pero el objeto correspondiente recibirá como valor la constante predefinida INVALIDO, y cualquier operación subsiguiente con este objeto como parámetro producirá a su vez resultados INVALIDOs (hasta que la variable sea nuevamente inicializada a un valor válido).


Disposición de la pantalla e interfaz del usuario:

De manera predefinida, la construcción geométrica ocupa la ventana completa de la aplicación, excepto 20 píxeles al borde inferior donde se muestran tres botones: "Pausa/Continuar", "Repetir", y "Salir". Estos botones hacen simplemente lo que dicen: Al hacer clic sobre el botón "Pausa", se detiene una animación o construcción en curso, y el botón cambia su rótulo a "Continuar". Al hacer clic sobre "Continuar", el programa continúa. - El botón "Repetir" reinicia el procedimiento actual desde el inicio. - El botón "Salir" sale del procedimiento actual. Si presionas "Salir" repetidamente, al final saldrás del programa entero.
Las siguientes teclas efectúan operaciones equivalentes a los botones:
"Pausa/Continuar" = Tecla [Enter].
"Repetir" = "R" o [RePág].
"Salir" = [Esc].

Presionando cualquier otra tecla aparte de estas teclas reservadas, o hacer clic con el ratón en cualquier lugar de la ventana que no sean los botones, tiene un efecto de "adelanto rápido": los tiempos de espera se pasarán por alto en los modos PACE y SLOW.

Tu programa puede limitar el área de construcción geométrica con la instrucción WINDOW, y puede definir áreas de salida de texto con la instrucción TEXTWINDOW. También puedes cambiar el título de la ventana con la instrucción TITLE.


Asuntos de síntaxis:

Sensibilidad a mayúsculas y minúsculas

Las palabras claves (instrucciones) de GeoScript pueden escribirse tanto en mayúsculas o en minúsculas; así por ejemplo puedes escribir POINT, point, Point, o pOiNt, etc, como deseas.

Los nombres de variables, por el otro lado, distinguen entre mayúsculas y minúsculas: la variable a no es lo mismo como la variable A. Esto es para permitir la costumbre de rotular puntos con mayúsculas y rectas con minúsculas.

Parámetros por defecto:

Muchas instrucciones tienen parámetros opcionales. Si los omites, GeoScript les asignará automáticamente ciertos valores predefinidos. (Algunos de estos valores predefinidos pueden cambiarse con la instrucción DEFAULTS.) También puedes poner un valor de -1, o la palabra clave DEFAULT, para indicar el valor predefinido. Así por ejemplo, POINT A, 300, 250, -1, DEFAULT, 20 inicializa un punto con el estilo predefinido, el color predefinido, y un grosor de 20.
Nota que NO puedes indicar parámetros omitidos con comas vacías como en el lenguaje BASIC. En el ejemplo anterior, si escribes POINT A, 300, 250, , , 20, el número 20 será interpretado como el cuarto parámetro, no el sexto. TIENES QUE escribir explícitamente -1 ó DEFAULT si deseas tener parámetros predefinidos entre otros asignados por ti mismo.

Separadores de expresiones:

Será apropiada aquí una pequeña nota acerca de la manera de GeoScript de interpretar los programas. El intérprete trata los espacios en blanco, las comas y los signos de "=" (y cualquier combinación de ellos) indistintamente como separadores. Por tanto no hace ninguna diferencia si escribes a = LINE B, C o a LINE B C o incluso a,=LINE,= =, B =,,C .
Por el otro lado, no puedes encerrar parámetros en paréntesis. Una instrucción como a = LINE (B, C) producirá un error. Las paréntesis son reservadas exclusivamente para expresiones de color e la forma (R, G, B).

Cadenas de texto (textos para mostrar en la pantalla) tienen que ser encerradas entre comillas dobles "", como en la mayoría de los lenguajes de programación.

Comentarios:
Cada expresión que comienza con un carácter de un valor ASCII menor a 65, y que no es un número ni un separador, será descartada como inválida (resp. considerada como un comentario). Así también toda expresión que sigue a la expresión inválida en la misma línea. Esto significa que puedes incluir comentarios en tu programa, empezando con cualquiera de estos carácteres: ! # $ % ' * + . / : ; < > ? @. Como ejemplo, todas las líneas siguientes serán interpretadas como comentarios:

'  Este es un comentario al estilo de BASIC.
// Este es un comentario al estilo de C.
/* Esto es también un comentario, pero NO será interpretado como comentario multilínea.
;  Este es un comentario al estilo de Assembler.
a = LINE A, B  !Este es un comentario que sigue a una instrucción válida.

Mensajes de error:

Si tu programa contiene errores, puedes recibir uno de los siguientes mensajes de error cuando intentas ejecutarlo:

Error 10 = Tipos no coinciden: Primero definido como ..., ahora usado como ...
Usaste una variable como cierto tipo de datos (punto, recta o círculo), y después la usaste en un contexto que requiere otro tipo de datos. - Si el mensaje indica un tipo "ninguno", esto significa que usaste un nombre de variable que nunca usaste en un contexto que permitiría definir claramente su tipo.

11 = Demasiados argumentos / 12 = Demasiado pocos argumentos
Tienes más, o menos, argumentos que los requeridos para una instrucción.

13 = Error de síntaxis: no hay palabra clave en la línea.
Cada instrucción válida en GeoScript contiene por lo menos una palabra clave. Si no hay ninguna (y tampoco se trata de un comentario), entonces la línea no es válida y genera este error.

14 = Error de síntaxis: palabra clave como nombre de argumento.
Intentaste usar una palabra clave como nombre de variable, o en lugar de un número.

16 = Otro error de síntaxis.
Cualquier otra forma de usar una instrucción, que no es conforme a la síntaxis correcta de esta instrucción.

20 = Procedimientos anidados.
Intentaste definir un procedimiento nuevo dentro de otro procedimiento (o sea, no había ninguna instrucción REPEAT antes del comienzo del procedimiento nuevo).

21 = Error interno del intérprete: Paso 2 encontró una instrucción/índice diferente del Paso 1.
23 = Error interno del intérprete: Paso 2 encontró otro número de parámetros para CONSTRUCTION.
24 = Error interno del intérprete: (otro)

No deberías recibir ninguno de estos errores. Si recibes uno de estos, se trata de un error del intérprete. Por favor envía un reporte detallado de cómo ocurrió el error, junto con el archivo de programa que produció el error.

22 = No se encontró el nombre de procedimiento usado en CALL.
Intentaste llamar un procedimiento con un nombre que no existe.

26 = Nombre de procedimiento duplicado
Ya existe otro procedimiento con el mismo nombre.

27 = Tipo equivocado de procedimiento después de CONSTRUCT / ANIMATE / INTERACT.
Llamaste un procedimiento con una palabra clave que no corresponde a su tipo (p.ej. intentaste llamar una ANIMATION con CONSTRUCT).

28 = Número equivocado de parámetros en CALL.
Al llamar una CONSTRUCTION, el número de parámetros en CALL no coincide con el número de parámetros en la definición de la CONSTRUCTION.

29 = Tipos no coinciden en CALL.
Pasaste un parámetro de un tipo equivocado.

30 = Demasiados parámetros para CONSTRUCTION (>12), CLICKABLE (>14) o TRACE (>14)
Una CONSTRUCTION puede tener un máximo de 12 parámetros. Las instrucciones CLICKABLE y TRACE pueden tener un máximo de 14 argumentos. Excediste este máximo.

31 = Expresión ilegal en este tipo de procedimiento.
Ciertas instrucciones se permiten solamente en ciertos tipos de procedimientos. (Por ejemplo, CLICKABLE se puede usar solamente en una INTERACTION.) Usaste una instrucción en el tipo equivocado de procedimiento.

32 = MENU sin ENDMENU / REPEATMENU
Hay una lista de MENU que no termina con ENDMENU ni con REPEATMENU.

33 = Demasiados MENUITEMs
Hay un máximo interno de 126 entradas por lista de menú. Pero en la práctica nunca puedes tener tantas, porque aun 40 entradas serían demasiado para la mayoría de las resoluciones de pantalla, puesto que cada entrada ocupa 20 píxeles verticalmente, de manera que las últimas entradas ya no aparecerían en la pantalla.

34 = MENUITEM / EXITMENU / ENDMENU / REPEATMENU sin MENU
El intérprete encontró una de las instrucciones mencionadas afuera de una lista de MENU.

- Los mensajes de error no solamente se muestran en la pantalla. Adicionalmente se escriben en un archivo "geoerror.txt" en la misma carpeta como el archivo de programa que produjo los errores.


Instrucciones de inicialización:

Estas instrucciones inicializan variables a ciertos valores numéricos. Esta es la única manera de pasar valores numéricos a tu programa, puesto que no existe ningún tipo de variables para números puros.
Estas instrucciones se pueden prefijar con una "I" para indicar invisibilidad: un punto inicializado con POINT aparecerá en la pantalla, pero un punto inicializado con IPOINT no. Igualmente existe ILINE e ICIRCLE.

POINT nombre, x, y [, estilo, color, grosor]

Inicializa un punto a las coordenadas x,y. Los otros parámetros son opcionales. (Vea aquí acerca de estilos y colores.)
Nota que el valor de y se da en coordenadas de pantalla, que aumentan desde arriba hacia abajo (contrario al sistema de coordenadas normal). El origen del sistema de coordenadas es la esquina superior izquierda del área cliente de la ventana.

LINE nombre, x1, y1, x2, y2 [, patrón, color, grosor]

Inicializa una recta al origen x1, y1 y su vector apuntando hacia x2, y2. Los otros parámetros son opcionales.
Rectas inicializadas por dos puntos serán dibujadas entre estos dos puntos, mientras rectas polares serán dibujadas por el tramo entero que es visible en la pantalla.

LINEPOLAR nombre, x1, y1, ángulo [, patrón, color, grosor]

Inicializa una recta al origen x1, y1 y su vector apuntando en la dirección de ángulo (en grados).
Los valores de ángulo empiezan con 0º = hacia la derecha, y aumentan en sentido contrario al reloj. De manera que 90º es hacia arriba, 180º hacia la izquierda, y 270º es hacia abajo.
Rectas inicializadas por dos puntos serán dibujadas entre estos dos puntos, mientras rectas polares serán dibujadas por el tramo entero que es visible en la pantalla.

CIRCLE nombre, x, y, radio [, color, grosor, inicio, fin]

Inicializa un círculo al centro x1, y1 y con el radio radio.


Instrucciones de construcción:

Estas instrucciones son el corazón de GeoScript. Ellas ejecutas construcciones geométricas.
Como las instrucciones de inicialización, estas también pueden prefijarse con una "I" para indicar invisibilidad (con las excepciones de COPY, REVERT y ORDERLINES).

punto = MIDDLE punto1, punto2 [, estilo, color, grosor]

Coloca punto en el medio entre punto1 y punto2. Los otros parámetros son opcionales. (Vea aquí acerca de estilos y colores.)

punto = ADVANCETO punto1, punto2, distancia [, estilo, color, grosor]

Avanza desde punto1 en línea recta hacia punto2 por distancia píxeles, y coloca punto allí.

punto = ADVANCEON punto1, recta, distancia [, estilo, color, grosor]

Avanza desde punto1 a lo largo de recta (en la dirección de su vector) por distancia píxeles, y coloca punto allí.
Esta instrucción asume (sin comprobarlo) que punto1 se encuentra en recta. Si este no es el caso, el movimiento será simplemente paralelo a recta.

recta = LINE punto1, punto2 [, patrón, color, grosor]

Crea una recta, uniendo punto1 con punto2. Su vector apuntará desde punto1 hacia punto2.
Rectas inicializadas por dos puntos serán dibujadas entre estos dos puntos, mientras rectas polares serán dibujadas por el tramo entero que es visible en la pantalla.

recta = LINEPOLAR punto, recta2, ángulo [, patrón, color, grosor]

Crea una recta que empieza en punto y forma el ángulo ángulo con recta2.
Rectas inicializadas por dos puntos serán dibujadas entre estos dos puntos, mientras rectas polares serán dibujadas por el tramo entero que es visible en la pantalla.

recta, punto2 = STARTLINE punto, ángulo, distancia [, patrón, color, grosor]

Crea una recta que empieza en punto y en la dirección del ángulo absoluto ángulo (0º = hacia la derecha, 90º = hacia arriba, etc.) Termina la línea a una distancia de distancia píxeles desde punto, y devuelve el punto final en punto2.
Los parámetros opcionales especifican las propiedades de recta. Punto2 recibe las propiedades gráficas de punto.
- Esta instrucción tiene el propósito de inicializar un segmento de recta de longitud conocida, exactamente de la manera como uno lo haría en una construcción geométrica: empezando desde un punto, dibujando una recta y colocando el segundo punto a la distancia dada del primero.

recta = MIDLINE punto1, punto2 [, patrón, color, grosor]

Crea la mediatriz entre punto1 y punto2. Su vector girará hacia la derecha (o sea, en el sentido del reloj) desde el vector de punto1 hacia punto2.

recta = BISECTOR recta1, recta2 [, patrón, color, grosor]

Crea una bisectriz del ángulo entre recta1 y recta2. El origen de recta será en la intersección entre recta1 y recta2.

recta1, recta2 = TANGENT punto, círculo [, patrón, color, grosor]

Devuelve en recta1 y recta2 las dos tangentes a círculo que pasan por punto. Si punto está en el interior del círculo, ambas rectas resultantes serán INVALIDO. Si punto está en la circunferencia del círculo, recta2 será INVALIDO.

punto = CROSS recta1, recta2 [, estilo, color, grosor]

Devuelve la intersección de recta1 con recta2. Si las dos rectas son paralelas, punto será INVALIDO.

punto1, punto2 = CROSS recta, círculo [, estilo, color, grosor]
punto1, punto2 = CROSS
círculo, recta [, estilo, color, grosor]

Devuelve las dos intersecciones de recta con círculo. Punto1 será el primer punto y punto2 el segundo, avanzando en la dirección del vector de recta. - Si recta y círculo no se intersectan, los resultados serán INVALIDOs.
No importa si pones recta o círculo primero, con tal que el tipo de cada uno esté claramente definido por alguna otra instrucción en alguna parte del programa.

punto1, punto2 = CROSS círculo1, círculo2 [, estilo, color, grosor]

Devuelve las dos intersecciones de círculo1 con círculo2. Punto1 será el punto a la derecha y punto2 el punto a la izquierda, mirando en la dirección desde el centro de círculo1 hacia el centro de círculo2. - Si círculo1 y círculo2 no se intersectan, los resultados serán INVALIDOs.

punto1, punto2 = CIRCLEND círculo [, estilo, color, grosor]

Devuelve los dos puntos finales del arco definido por las propiedades inicio y fin de círculo.
En vez de CIRCLEND, también se permiten CIRCLEEND y ENDCIRCLE.

círculo = CIRCLE centro, punto [, color, grosor, inicio, fin]

Devuelve un círculo con el centro centro, cuya circunferencia pasa por punto.

círculo = CIRCLE centro, recta [, color, grosor, inicio, fin]

Devuelve un círculo con el centro centro y tangencial a recta.

círculo = ARC centro, punto [, ancho , color, grosor]
círculo = ARC recta1, recta2, radio [, color, grosor]

La primera forma devuelve un arco con el centro centro, cuya circunferencia pasa por punto, y de un ancho angular de ancho (en grados). - Esta instrucción tiene su uso mayormente en demostraciones detalladas de construcciones con un compás, donde necesitas solamente la intersección de dos arcos, de manera que puedes dibujar con precisión los dos arcos necesarios y no necesitas dibujar los círculos enteros. (Vea el programa ejemplo "Triangulos.geo".)
La segunda forma devuelve un arco con el centro en la intersección de recta1 y recta2, con radio radio, que empieza en la dirección del vector de recta1 y gira en sentido contrario al reloj hasta el vector de recta2.

nombre1 = COPY nombre2

Produce una copia exacta de un elemento existente. Nombre1 y nombre2 tienen que ser del mismo tipo.
Esta instrucción no se puede prefijar con "I" (invisibilidad), y no produce ninguna salida en la pantalla.

MOVECIRCLE círculo, point [, color, grosor]

Cambia el centro de círculo a punto, mientras su radio se preserva.

REVERT recta

Invierte el vector de recta a la dirección opuesta, mientras su aparencia queda igual.
Esta instrucción no se puede prefijar con "I" (invisibilidad), y no produce ninguna salida en la pantalla.

ORDERLINES recta1, recta2

Devuelve recta1 y recta2 en tal orden que el ángulo entre sus vectores, girando en sentido contrario al reloj desde recta1 hacia recta2, es menor (o igual) que 180º. Si este ángulo es inicialmente mayor a 180º, se intercambian recta1 y recta2.


Instrucciones de marcar elementos:

MARKPOINT punto [, tamaño, posición]

Marca punto en la pantalla con su nombre.
- El parámetro opcional tamaño indica el tamaño del texto en píxeles. (Vea
nota.)
- El parámetro opcional posición indica la posición del texto relativo al punto:
1 = arriba, 2 = debajo, 4 = a la izquierda, 8 = a la derecha, 5 = superior izquierda, 9 = superior derecha, 6 = inferior izquierda, 10 = inferior derecha.

MARKLINE recta [, punto1, punto2, tamaño, posición]
MARKLINE recta [, tamaño , posición]

Marca recta en la pantalla con su nombre, en el medio entre punto1 y punto2.
Esta instrucción asume (sin comprobarlo) que punto1 y punto2 se encuentran en la recta.
- El parámetro opcional tamaño indica el tamaño del texto en píxeles. (Vea
nota.)
- El parámetro opcional posición indica la posición del texto relativo a la recta:
0 = encima resp. a la izquierda (dependiendo de la inclinación de la línea), 1 = debajo resp. a la derecha.

MARKANGLE recta1, recta2, "texto" [, tamaño, posición, radio]

Marca en la pantalla el ángulo entre recta1 y recta2 con texto, en letras griegas.
- El parámetro opcional tamaño indica el tamaño del texto en píxeles. (Vea
nota.)
- El parámetro opcional posición indica la posición del ángulo a marcar:
0 = En sentido contrario al reloj desde recta1 hasta recta2 de acuerdo a sus vectores, pero marcando el ángulo menor (<180º).
1, 2, 3 = El segundo, tercero, resp. cuarto de los cuatro ángulos, en sentido contrario al reloj.
4 = Exactamente desde el vector de recta1 hasta el vector de recta2, aun si este ángulo es mayor a 180º.
- El parámetro opcional radio indica el radio, en píxeles, del arco que marcará el ángulo.

MARKANGLE punto1, punto2, punto3, "texto" [, tamaño, radio]

Marca en la pantalla el ángulo punto1-punto2-punto3 con texto, en letras griegas.
- El parámetro opcional tamaño indica el tamaño del texto en píxeles. (Vea
nota.)
- El parámetro opcional radio indica el radio, en píxeles, del arco que marcará el ángulo.

MARKNUMBERLINE recta [, punto1, punto2, factor, tamaño, posición]

Marca recta en la pantalla con su nombre y longitud, entre punto1 y punto2.
Esta instrucción asume (sin comprobarlo) que punto1 y punto2 se encuentran en la recta.
- El parámetro opcional factor indica un valor entre el cual se dividirá la longitud (en píxeles). Si no se especifica, se marcará la longitud en píxeles.
- El parámetro opcional tamaño indica el tamaño del texto en píxeles. (Vea
nota.)
- El parámetro opcional posición indica la posición del texto relativo a la recta:
0 = encima resp. a la izquierda (dependiendo de la inclinación de la línea), 1 = debajo resp. a la derecha.

MARKNUMBERANGLE recta1, recta2, "text" [, tamaño, posición, radio]

Marca en la pantalla el ángulo entre recta1 y recta2 con texto, en letras griegas, e indica su tamaño en grados.
- El parámetro opcional tamaño indica el tamaño del texto en píxeles. (Vea
nota.)
- El parámetro opcional posición indica la posición del ángulo a marcar:
0 = En sentido contrario al reloj desde recta1 hasta recta2 de acuerdo a sus vectores, pero marcando el ángulo menor (<180º).
1, 2, 3 = El segundo, tercero, resp. cuarto de los cuatro ángulos, en sentido contrario al reloj.
4 = Exactamente desde el vector de recta1 hasta el vector de recta2, aun si este ángulo es mayor a 180º.
- El parámetro opcional radio indica el radio, en píxeles, del arco que marcará el ángulo.

MARKNUMBERANGLE punto1, punto2, punto3, "text" [, tamaño, radio]

Marca en la pantalla el ángulo punto1-punto2-punto3 con texto, en letras griegas, e indica su tamaño en grados.
- El parámetro opcional tamaño indica el tamaño del texto en píxeles. (Vea
nota.)
- El parámetro opcional radio indica el radio, en píxeles, del arco que marcará el ángulo.

FILLTRIANGLE punto1, punto2, punto3, color, opacidad

Rellena el triángulo punto1-punto2-punto3 con color.
Opacidad es un valor de 0 a 255, que indica la intensidad del relleno de color (0 = completamente transparente, 255 = máxima intensidad).
Si color es omitido, el color de punto1 es usado.
Si opacidad es omitido, se usa la máxima intensidad.
- Se puede usar simplemente FILL en lugar de FILLTRIANGLE, si el tipo de los parámetros es claramente definido como POINT en alguna otra parte del programa.

FILLCIRCLE círculo, color, opacidad

Rellena círculo con color.
Opacidad es un valor de 0 a 255, que indica la intensidad del relleno de color (0 = completamente transparente, 255 = máxima intensidad).
Si color es omitido, el color de círculo es usado.
Si opacidad es omitido, se usa la máxima intensidad.
- Se puede usar simplemente FILL en lugar de FILLCIRCLE, si el tipo del parámetro es claramente definido como CIRCLE en alguna otra parte del programa.


Procedimientos e instrucciones del flujo del programa:

Un programa de GeoScript consiste en el módulo principal (donde comienza la ejecución del programa), seguido por cualquier número de procedimientos o subrutinas.
GeoScript provee tres tipos de procedimientos (subrutinas):

CONSTRUCTION nombre [, parámetros]

Esta clase de procedimiento efectúa construcciones geométricas. Puede contener instrucciones de inicialización, de construcción, y de marcar elementos; y también instrucciones de texto, WAIT, SPEED y FRAMESPEED.
Los procedimientos CONSTRUCTION son las únicas subrutinas que aceptan parámetros. El número máximo de parámetros es 12. - Nota que todas las variables que no son declaradas como parámetros, son globales. Entonces, si una CONSTRUCTION cambia una variable que no es un parámetro, el valor de esta variable seguirá cambiado aun después de regresar de la subrutina. - Los parámetros se pasan por referencia; o sea, si una CONSTRUCTION cambia el valor de un parámetro, la variable correspondiente será cambiada después de regresar de la subrutina.
Una CONSTRUCTION no puede llamar ninguna otra subrutina. (Esto tiene que ver con la manera como GeoScript pasa parámetros, y esto sería bastante difícil de cambiar, lo siento...)
(Nota: Esto ha sido ligeramente mejorado. En la versión actual, una CONSTRUCTION que no recibe parámetros puede llamar a otra CONSTRUCTION (con o sin parámetros)).
El resultado de una CONSTRUCTION permanecerá en la pantalla después de regresar de la subrutina.

Construcciones predefinidas

Algunas de las instrucciones de construccion de GeoScript son en realidad enteras construcciones predefinidas. Por ejemplo la instrucción BISECTOR, cuando es llamada en modo PACE o SLOW (vea abajo), dibuja primero un arco en el ángulo que debe dividirse, después dibuja dos arcos desde los puntos finales del primero arco, y finalmente une la intersección de estos dos arcos con el origen del ángulo. De manera similar, cuando llamas TANGENT en modo PACE o SLOW, unirá primero el punto con el centro del círculo, marcará el medio entre estos dos puntos y dibujará un círculo sobre ellos (o los arcos significativos de él), para conseguir los puntos donde las tangentes tocan el círculo; y finalmente unirá el punto de inicio con estas intersecciones de los dos círculos.

ANIMATION nombre

Una ANIMATION puede repetir construcciones geométricas para diferentes valores iniciales, moviendo los puntos iniciales gradualmente y trazando los puntos resultantes.
Puede contener cualquier clase de instrucciones, excepto MENU, CLICKABLE, SCREEN y WINDOW.
Dos instrucciones son específicas para ANIMATION: STEP indica como los puntos iniciales se mueven de una repetición a otra, y TRACE indica cuáles puntos serán trazados en la pantalla. Cada repetición borra la construcción de la repetición previa - con excepción de los puntos indicados en TRACE. Esto permite la construcción punto por punto de curvas complicadas.
Cuando un procedimiento ANIMATION regresa, restaurará la pantalla a su estado anterior (antes de iniciar la ANIMATION).

INTERACTION nombre

Una INTERACTION permite al usuario arrastrar ciertos puntos en la pantalla (usando el ratón), para así cambiar los resultados de una construcción. Una INTERACTION termina solamente cuando el usuario hace clic en el botón "Salir", o presiona la tecla [Esc].
Puede contener cualquier clase de instrucciones, excepto MENU, STEP, TRACE, SCREEN y WINDOW.
Cuando un procedimiento INTERACTION regresa, restaurará la pantalla a su estado anterior (antes de iniciar la INTERACTION).

REPEAT [veces]

Cada procedimiento termina con REPEAT. El parámetro opcional veces indica cuántas veces se debe repetir el procedimiento antes de regresar. (Para una INTERACTION, este parámetro no tiene significado.) Entonces, mientras el número de repeticiones no esté completado, la ejecución del programa continúa nuevamente al inicio del procedimiento.
Cuando se omite veces, el procedimiento no se repite.

CALL / CONSTRUCT / ANIMATE / INTERACT nombre [, modo] [, parámetros]

Esta instrucción ejecuta un procedimiento. Las cuatro palabras claves CALL, CONSTRUCT, ANIMATE y INTERACT son intercambiables. La única diferencia es que con CALL se puede llamar cualquier tipo de procedimiento, mientras con las otras tres el intérprete GeoScript comprueba si el procedimiento llamado es del tipo correcto. (O sea, no se puede llamar una ANIMATION con CONSTRUCT, por ejemplo.)
El parámetro opcional modo es una de las siguientes palabras claves:
FAST = Efectúa todas las construcciones inmediatamente; se detiene solamente en instrucciones WAITALWAYS (o si el usuario hace clic en "Pausa", si siquiera le queda tiempo para hacerlo...)
PACE = Efectúa las construcciones paso por paso, y se detiene por dos segundos cada vez que un nuevo objeto aparece en la pantalla. (La instrucción SPEED puede cambiar este tiempo de espera.)
SLOW (o TOOLS) = Anima el proceso de construcción como si alguien estuviera realmente dibujando los objetos en papel, mostrando herramientas que se mueven, como lápiz, regla, compás, etc. Este modo fue pensado mayormente para programas educativos para principiantes, para enseñar detalladamente la práctica de dibujos geométricos.

En los modos PACE y SLOW, el usuario puede saltar sobre los tiempos de espera y las animaciones de herramientas, presionando cualquier tecla aparte de las reservadas ([Enter], [Esc], [RePág] y "R"), o haciendo clic con el ratón en cualquier parte de la ventana excepto en los botones.
Dentro de una CONSTRUCTION, hacer clic en el botón "Salir" o presionar [Esc] hará que la construcción termine inmediatamente en modo FAST antes que salga.

Si se omite modo, los procedimientos ANIMATION e INTERACTION serán llamados en modo FAST. Los procedimientos CONSTRUCTION serán llamados con el modo del procedimiento que lo llama; si son llamados desde el módulo principal, en modo PACE.

Una INTERACTION en modo FAST mostrará inmediatamente los resultados de las construcciones, mientras el usuario todavía arrastra un punto (dando así la impresión de arrastrar la figura entera que se construye) - por lo menos tan rápido como el rendimiento de tu sistema permite actualizar los gráficos. En los modos PACE y SLOW, una INTERACTION esperará hasta que el usuario suelte el botón del ratón después de arrastrar un punto, antes que empiece a mostrar la construcción.

MENU [textoResaltado, fondoResaltado]

Comienza un bloque de MENU que contiene varias opciones de menú. Esta instrucción se permite solamente en el módulo principal.
Los parámetros opcionales textoResaltado y fondoResaltado indican los colores para el texto, resp. para el fondo, de la opción actualmente resaltada en el menú. (El color de las opciones no resaltadas no se puede cambiar ... por ahora...)
La estructura de un bloque de MENU es como sigue:

MENU [textoResaltado, fondoResaltado]
  MENUITEM "texto1"
    ...
    (instrucciones)
    ...
    [EXITMENU]
  MENUITEM "texto2"
    ...
    (instrucciones)
    ...
    [EXITMENU]
  MENUITEM "texto3"
    ...
  (etc.)
    ...
ENDMENU / REPEATMENU

Esto mostrará una lista de menú con las entradas "texto1", "texto2", "texto3", etc. Si el usuario selecciona "texto1", se ejecutarán las instrucciones entre MENUITEM "text1" y MENUITEM "text2", etc. (Instrucciones entre MENU y el primer MENUITEM serán ignoradas.)
ENDMENU significa que después de ejecutar las instrucciones de la opción seleccionada, la ejecución del programa continuará después del bloque de MENU. REPEATMENU significa que después de ejecutar las instrucciones de la opción seleccionada, el mismo menú se mostrará otra vez - excepto si se encontró una instrucción EXITMENU. EXITMENU hará que el programa continúe después de la instrucción REPEATMENU.
Si el usuario presiona la tecla [Esc] en un menú, o hace clic afuera de la lista del menú, ninguna de las opciones será seleccionada, y la ejecución del programa continuará después del bloque de menú (incluso si el bloque termina con REPEATMENU).
Se pueden encajar bloques de menú uno dentro de otro; o sea, un MENUITEM puede contener otro bloque de MENU.

Nota que la lista de menú no se puede desplazar verticalmente. Esto significa que si especificas más opciones de menú de las que pueden entrar verticalmente en la ventana, las últimas no aparecerán en la pantalla y podrán causar errores.

STEP punto, dx, dy

La instrucción STEP se permite solamente en procedimientos ANIMATION. Especifica la distancia que un punto se moverá entre una repetición de la ANIMATION a la siguiente.

STEP círculo, dx, dy, dr

Lo mismo como arriba, pero para un círculo. Dx y dy son el movimiento del centro del círculo. Adicionalmente, el círculo puede cambiar su radio; este valor se indica en dr.

STEP punto/círculo ALONG recta/círculo, d [, dr]

Lo mismo como arriba, pero hace que el punto resp. el círculo se mueva a lo largo de una recta o de un círculo. d es la distancia del movimiento de una repetición a la siguiente. dr (para un círculo) indica cuánto cambia el radio del círculo.

TRACE punto1 [, punto2, ...]

La instrucción TRACE se permite solamente en procedimientos ANIMATION. Especifica cuáles puntos dejarán un trazo por detrás, mostrando su movimiento durante la ANIMATION entera.
Puedes especificar hasta 14 puntos con una sola instrucción TRACE.

CLICKABLE punto1 [, punto2, ...]

La instrucción CLICKABLE se permite solamente en procedimientos INTERACTION. Especifica en cuáles puntos el usuario puede hacer clic para arrastrarlos.
Nota que estos puntos no serán marcados de ninguna manera especial en la pantalla; entonces harás bien en mostrar algún texto para instruir al usuario cuáles puntos puede mover.

Puedes especificar hasta 14 puntos con una sola instrucción CLICKABLE.

CLICKABLE punto ALONG recta / círculo

Lo mismo como arriba, pero el movimiento del punto será restringido a moverse a lo largo de una recta resp. de un círculo.
Esta instrucción asume (sin comprobarlo) que el punto se encuentra inicialmente sobre la línea resp. el círculo. Si esto no es el caso, al arrastrar el punto "saltará" a la línea resp. el círculo.

WAIT [milisegundos]

En modo PACE o SLOW, esta instrucción detiene la ejecución del programa por el número indicado de milisegundos, o hasta que el usuario apriete una tecla o un botón del ratón.
Si se omite milisegundos, el programa se detendrá hasta que el usuario hace clic en el botón "Resumir" o presiona la tecla [Enter].

WAITALWAYS [milisegundos]

Esta instrucción detiene la ejecución del programa (sin importar el modo actual) por el número indicado de milisegundos, o hasta que el usuario apriete una tecla o un botón del ratón.
Si se omite milisegundos, el programa se detendrá hasta que el usuario hace clic en el botón "Resumir" o presiona la tecla [Enter].

END

Termina la ejecución del programa inmediatamente. Esta instrucción pertenece normalmente al módulo principal; pero GeoScript permite también terminar el programa desde adentro de un procedimiento.


Instrucciones de pantalla:

SCREEN ancho, alto [, profundidad, color]

Inicializa el tamaño y la profundidad de color de la ventana de la aplicación.
Profundidad (de color) todavía no está implementado; actualmente siempre es 16 bits.
El parámetro opcional color especifica el color del fondo. (El valor predefinido es blanco.)
Si no hay ninguna instrucción SCREEN antes de la primera instrucción gráfica, la ventana se inicializará al valor predeterminado de 640x480 píxeles.
Esta instrucción es permitida solamente en el módulo principal.

WINDOW ancho, alto

Determina el tamaño de la salida de gráficos en la ventana. Los gráficos serán restringidos al ancho y alto especificados.
Esta instrucción es permitida solamente en el módulo principal.

TITLE "texto"

Especifica el título de la ventana de la aplicación. El título predeterminado es el nombre del archivo del programa.
Ten en cuenta que este título no será visible si tu programa se ejecuta en el modo de pantalla completa.

TEXTWINDOW x, y, ancho, alto

Define la ubicación y el tamaño del marco para la(s) instrucción(es) siguientes de TEXT. La salida de texto será restringida a este marco.
En vez de TEXTWINDOW, se permite también TWINDOW.

TEXT "texto" [, colorTexto, colorFondo, tamaño]

Muestra texto en el marco especificado anteriormente con TEXTWINDOW.
colorTexto = Color del texto.
colorFondo = Color del fondo del marco de texto.
tamaño = Tamaño de la letra en píxeles.

Nota: En realidad hay muy pocos diferentes tamaños de letra disponibles, porque GeoScript no utiliza las rutinas de fuentes de Windows. El tamaño de letra será redondeado al más cercano de estos que están disponibles: 12, 16, 24, 32, 40 ó 64.

CLS [color]

Limpia la pantalla: borra la ventana entera. - El parámetro opcional color especifica un color para rellenar la ventana.


Otras instrucciones:

SPEED milisegundos

Define el tiempo de espera (en milisegundos) después de mostrar un nuevo elemento o una herramienta en los modos PACE resp. SLOW. El valor predeterminado es 2000 (dos segundos).

FRAMESPEED milisegundos

Define la suavidad de la animación, como tiempo de espera (en milisegundos) entre actualizaciones sucesivas de los gráficos durante una animación. (Es relevante solamente para las animaciones de herramientas en el modo SLOW, y para el tiempo de espera entre repeticiones de una ANIMATION en modo FAST.) El valor predeterminado es 50 milisegundos (20 imágenes por segundo). Podrías querer aumentar este valor en una máquina lenta si el rendimiento es insuficiente; o disminuirlo en una máquina rápida para una animación más suave.

DEFAULTS colorFondo [, colorDibujo, colorTexto, colorAuxiliar, grosorLinea, patrón, grosorPunto, estilo, posicionAngulo, anchoArco]

Si los valores predefinidos de GeoScript acerca de los colores etc. te aburren, puedes cambiarlos con esta instrucción. Establece los valores predefinidos para las propiedades gráficas que se aplicarán en cada instrucción donde omites los parámetros opcionales correspondientes.
Nota que esta instrucción no cambiará el aspecto de la pantalla de una vez. Los valores definidos se aplicarán solamente a las operaciones de dibujo que se realizarán DESPUÉS de esta instrucción.
Los parámetros se explican por sí mismos, excepto quizás los siguientes:
colorAuxiliar es el color para dibujar las líneas auxiliares que aparecen en las construcciones de bisectrices, tangentes, etc, en los modos PACE y SLOW.
posicionAngulo es la posición predefinida para marcar ángulos con MARK(NUMBER)ANGLE.
anchoArco es el ancho (en grados) para arcos que se generan con la instrucción ARC (cuando se omite el parámetro ancho), y para los arcos auxiliares que aparecen en las construcciones predefinidas de MIDLINE, BISECTOR, etc, en los modos PACE y SLOW.

TOOLDEFAULTS tamañoLápiz [, tamañoEscuadra, anchoRegla, colorLápiz, colorCompás, colorEscuadra, colorTransportador, colorRegla]

Esta instrucción cambia los valores predefinidos para la apariencia de las herramientas en modo SLOW.
tamañoLápiz es el largo del lápiz y también del compás, en píxeles.
tamañoEscuadra es el tamaño de la escuadra y también del transportador, en píxeles.
Para los parámetros de colores, si pasas -1 o DEFAULT, esto significa que la herramienta correspondiente asumirá el color del objeto que dibuja. Entonces, pasar -1 en estos parámetros NO significa "no cambiar su valor": esto cambiará efectivamente su valor si antes estaba un color especificado allí. Si no deseas cambiar estos parámetros de colores, tienes que omitirlos completamente.


Límites de tamaño de GeoScript:

Existen ciertos límites en cuanto al tamaño de un programa de GeoScript; pero dudo de que escribas alguna vez un programa tan gigante que estos límites te incomodarían. Estas son:
Puedes tener un máximo de 65535 procedimientos en un programa, y un máximo de 65535 líneas por procedimiento.
También puedes tener un máximo de 65535 variables de cada tipo (puntos, rectas, círculos), y un máximo de 65535 cadenas de texto diferentes.
Si ejecutas GeoScript en un sistema con memoria muy limitada, podrías también experimentar unos problemas de memoria si estás sucesivamente llamando procedimientos desde otros procedimientos que a su vez son llamados por otro procedimiento, etc. Es que cada nueva llamada a un procedimiento, mientras no regresas desde el anterior, necesitará dos nuevos búferes gráficos del tamaño de la ventana entera. Esto significa que, si por ejemplo usas una ventana de 1024x768 píxeles, cada nuevo nivel de llamada de procedimiento requerirá tres megabytes de memoria adicional.


Sitio web de GeoScript