Logo Computer Systems Inc, más conocidos como LCSI, fue fundada en el año 1981 por Seymour Papert, el inventor en 1968 del lenguaje Logo.

No es de extrañar en programaran Apple Logo, y el IBM Personal Logo de 1983, que al final acabaría siendo LogoWriter.

Aunque empecé con Sinclair Logo, y después pasaría a Logo SB de los españoles Software de base, admito que LogoWriter fue el intérprete de más avanzado de lenguaje Logo en aquella época.

Estaba disponible en 4 idiomas: inglés, francés, portugués y castellano; lo que debido a las particularidades del lenguaje no incluía solamente el entorno de programa, sino también las primitivas del lenguaje usando por ejemplo adelante en vez de forward. Se hicieron variantes que aprovechaban el adaptador gráfico del que dispusiéramos, ya fuera CGA (4 colores), EGA (16 colores), o VGA (256 colores).

Hasta 1988 con la versión 2.01 para DOS, siguieron en franca superioridad tecnológica, y una loable eficiencia, pues pese a la cantidad de primitivas disponibles, el ejecutable del programa eran solamente 57 Kb.

A partir de ahí, irían estancándose hasta que por fin en 1993 lanzarían MicroMundos (MicroWorlds, una versión con intefaz gráfica para DOS y MacOS, y que posteriormente añadiría una versión Windows. En la actualidad, MicroMundos Ex, ofrece por ejemplo un entorno basado en Logo con multitarea y ejecución paralela.

La siguiente lista que encontré en mi ordenador, es un inventario de las primitivas que soportaba el LogoWriter 2 de 1987, y que en gran medida nos dan una idea de la gran potencia que ya tenía.

Comando Descripción
* Operador de multiplicación
+ Operador de suma
Operador de resta
.dentro  
.deposita  
.examina  
.fuera  
.primitivas Responde la lista de primitivas
.version Responde la versión de Logo Writer actual
/ Operador “dividir”
< Operador “menor que”
= Operador “igual a”
> Operador “mayor que”
activa ([lista de procedimientos]) Ejecuta el o los procedimientos, ordenes ó cálculos indicados en su argumento
adelante, ad (número) La tortuga adelanta los pasos indicados en el argumento
alto Detiene un procedimiento
altotodo Detiene un procedimiento y todos los procedimientos que lo contienen
anotador Reporta una lista con el texto “cortado” o “copiado” almacenado en el “buffer” de memoria
arctan (a/b) Responde el ángulo correspondiente a un triángulo rectángulo de catetos a, b
ascii (“carácter) Responde el número ASCII del carácter indicado en su argumento
atras, at (número) La o las tortugas activas retroceden el número de pasos indicado en el argumento
azar (número) Responde un número al azar entre 0 y el número indicado menos 1
beventos Borra los eventos definidos
bg Borra los gráficos
bm Borra los mandos
bnombre (“nom) Borra la variable del nombre indicado
bnombres Borra todas las variables
borra Suprime el caracter debajo del cursor
boton? Responde cierto si el botón del Joystick ha sido pulsado
bpag (“pag) Borra una página
bt Borra el texto
busca (“pal) Busca la palabra indicada
butiles Borra los útiles cargados
cada ([lista de acciones]) Cada una de las tortugas ejecuta las acciones indicadas.
Por ejemplo: CADA [FCOLOR QUIEN * 2]
cambiadir (“dir)  
car (número) Reporta el caracter correspondiente al código ASCII indicado en el argumento
cardebajo Reporta el caracter “texto” debajo de la tortuga
cardebajocursor Reporta el caracter “texto” debajo del cursor
carga (“página) Carga en el revés de la página actual los programas de la página indicada en su argumento
cargadib (“dib) Carga el gráfico del nombre indicado guardado con GUARDADIB
cargatexto (“texto) Carga el texto del nombre indicado guardado con GUARDATEXTO o con cualquier formato ASCII de otros programas
cierra Cierra una página para impedir que sea borrada
color Responde el color de la o las tortugas activas
colordebajo Responde el color debajo de la tortuga activa
colorf Responde el color del fondo
colortexto Responde el color del texto
contenido Abandona la página
coorx Reporta el valor de la coordenada X de la tortuga activa. En caso de haber más de una tortuga activa, responde la coordenada de la de menor número
coory Idem coorx, con la coordenada Y
copia Copia un texto seleccionado
copiaarch (“discoorigen\dir\nomarchivo) (“discodestino\dir\nomarchivo)  
corta Corta un texto seleccionado
cos (angulo) Responde el coseno del ángulo indicado
cosa (“nombre.de.una.variable) Responde el valor de la variable indicada, si esta existiese
cp Con pluma
creadir (“nombre.directorio) Crea un directorio con el nombre indicado dentro del directorio activo
cuab Cursor abajo. El cursor del texto baja una línea
cuad Cursor adelante. El cursor del texto adelanta un espacio
cuando (“letra) ([lista de acciones]) Permite definir un “macro”, de manera que al pulsarse CTRL y la letra indicada se ejecuta la lista de acciones.
cuar Cursor arriba. El cursor del texto sube una línea
cuat Cursor atrás. El cursor del texto retrocede un espacio
cuenta (“palabra o [lista]) Responde el número de caracteres de la palabra indicada o el número de palabras de una lista
da (“nom.var) (valor) Define una variable con el nombre indicado en el primer argumento con el valor del segundo argumento
davuelta Da vuelta la página
derecha, de (número) La tortuga gira a la derecha el número de grados indicado
dejapag Abandona la página sin definir los cambios efectuados
descierra Anula el efecto del comando CIERRA
desmarca Desmarca un texto seleccionado
dile (número [lista de números]) Activa a la o las tortugas indicadas
diractual Responde el directorio actual
directorios Responde los directorios incluídos en el directorio actual
disco Responde el disco activo
distancia ([x y]) Responde la distancia entre la tortuga activa y el punto indicado
dos Sale al DOS
elarch, eliminara (“nomarch.ext) Elimina el archivo indicado. Debe especificarse la extensión del mismo)
eliminadir (“nomdirectorio) Elimina el directorio indicado
eliminapag, elpag (“nompag) Elimina la página indicada
encontrado? Responde cierto si el comando busca encuentra la palabra indicada en su argumento y falso si no lo hace
entero (“número) Reporta la parte entera del número
escribe, es (“palabra o [lista]) Escribe el argumento y el cursor pasa a la línea siguiente
esnombres Escribe los nombres de las variables existentes
espacio Reporta el espacio libre de la página
espaciod  
espera (número) Detiene la acción durante un lapso de tiempo determinado por su argumento. 100 es aproximadamente 5 segundos.
estampa Estampa la figura de la tortuga activa
et Esconde la tortuga
fcolor (número) Fija el color de la tortuga
fcolorf (número) Fija el color del fondo
fcolortexto (número) Fija el color de un texto cuando éste está seleccionado con F1 o dentro de un programa lo que se escriba con el comando ES
fcoma En los decimales reemplaza el punto decimal por la coma
fdisco (“letra) Activa el drive indicado
fdl Fin de línea. Lleva el cursor de texto al final de la línea
ffig (“número) Fija en la o las tortugas activas, el número de figura indicado
fig Reporta el número de la figura de la tortuga activa
figuras Trae la página de figuras
finpag Fin de página. Lleva el cursor de texto al final de la página
fpos ([x y]) Lleva a la tortuga activa al punto indicado por las coordenadas
fpostexto (número) Lleva el cursor del texto a la posición indicada por número
fpunto En los decimales reemplaza la coma decimal por el punto
frase, fr (argu1 argu2) Reporta una frase formada por los argumentos indicados dentro de los corchetes. Estos pueden obviarse si sólo hay dos argumentos
frente? Responde cierto si se está en el frente de la página
frumbo (número) Fija el rumbo de la tortuga activa
fx (coorx) Fija la tortuga activa en la coordenada X indicada
fy (número) Fija la tortuga activa en la coordenada Y indicada
guardadib (“nomdib) Guarda el dibujo de la pantalla con el nombre indicado
guardapag (“nompag) Guarda la página con el nombre indicado
guardatexto (“nomtexto) Guarda el texto de la página (frente o revés) con el nombre indicado
hacia ([x y]) Reporta el rumbo a colocar a la tortuga para que mire el punto indicado. Se usa con el mando FRUMBO.
Por ejemplo: FRUMBO HACIA [90 54]
hazlista (argu1) (argu2)
identico? (argu1) (argu2) Reporta cierto si el argumento 1 es igual al argumento 2
igual? (argu1) (argu2) Reporta cierto si el argumento 1 es igual al argumento 2
imppant Imprime la pantalla en el modo gráfico
imptexto Imprime la pantalla en el modo texto
imptexto80 Idem imptexto pero en 80 columnas
incm,
insertacm (“texto)
Inserta centro mandos. Inserta el texto indicado en la zona de mandos
inserta (“texto) Escribe el texto indicado pero el cursor no baja a la línea siguiente
item (número) (palabra ó lista) Reporta el elemento de orden, número de la palabra o lista indicada
izquierda, iz (número) Gira el ángulo indicado en el número a la izquierda
leecar Lee y reporta un caracter del teclado
leelista Lee y reporta una lista de caracteres o palabras del teclado
leelistacm Lee y reporta una lista de caracteres o palabras del teclado desde la zona de mandos
limpia Limpia la pantalla gráfica pero sin modificar la posición y el rumbo de la tortuga
lista (argu1) (argu2) Forma y reporta una lista formada por los argumentos
lista? (“argu1) Reporta cierto si el argumento es una lista
listaarch Reporta la lista de todos los archivos del directorio activo
listapag Reporta la lista de páginas del directorio activo
listautiles Reporta la lista de útiles cargados
ll Leelista. Lee y reporta una lista del teclado
llcm Leelista centro mandos. Lee y reporta una lista del teclado pero desde el centro de mandos
longtexto Reporta la longitud del texto desde el principio hasta el final
marca Indica el comienzo de selección de un texto
marcado Reporta el texto marcado
menos (número) Reporta el número indicado con el signo cambiado.
menosprimero, mpr (argumento) Reporta el argumento indicado sin el primer elemento
menosultimo, mul (argumento) Reporta el argumento indicado sin el último elemento
miembro? (argu1) (argu2) Reporta cierto si el argumento 1 pertenece al argumento 2
mt Muestra tortuga
muestra (texto) Escribe el texto indicado en la zona de mandos
muestranombres, mn Escribe los nombres y los valores de las variables definidas en la zona de mandos
no (comparación) Responde falso si la comparación es cierta y cierto si ésta es falsa
nombra (valor) (nombre de la variable) Define una variable con el valor indicado en el primer argumento. Es similar a DA
nombrapag, np (“nompag) Nombra a la página actual
nombre? (“palabra) Responde cierto si la palabra indicada es una variable
nuevapag Abandona la página actual y trae una nueva página
número? (argu) Responde cierto si el argumento es un número
(o comparación1 comparación2 …) Disyuntivo lógico. Responde cierto si al menos una de las comparaciones es cierta
origen Lleva la tortuga al centro con rumbo 0
palabra (“pal1 “pal2 …) Forma una palabra “pegando” sus argumentos)
palabra? (“pal) Reporta cierto si su argumento es una palabra
paleta (n) Responde el valor del joystick indicado en n
pantprev  
pantsig  
para (nombre) Indica que comienza un programa con el nombre indicado
pb Pluma de borrar
pdl Principio de línea. lleva el cursor del texto al principio de la línea
pega Pega un texto copiado o “cortado”
pi Pluma inversa
pide (num.tortuga) [lista de acciones] Fuerza a la tortuga o a las tortugas indicadas que realicen las acciones especificadas en el segundo argumento
pinta Rellena una superficie cerrada con el color activo
ponprimero, ppr (argu1) ([lista]) Forma y reporta una lista con argu1 en primer lugar.
Ejemplo:
ESCRIBE PONPRIMERO 12 [30 56]
[12 30 56]
ponultimo, pul (argu1) ([lista]) Forma y reporta una lista con argu1 en último lugar.
Ejemplo:
ESCRIBE PONULTIMO 12 [30 56]
[30 56 12]
pos Reporta la lista de coordenadas X Y de la tortuga activa
poscursor Reporta la posición del cursor de texto en el sistema cartesiano
postexto Reporta la posición del cursor de texto tomando como 0 el principio de la página
primero, pr (argumento) Primero. Reporta el primer elemento del argumento
prinpag Lleva el cursor de texto al principio de la página
quien Reporta el número de la tortuga activa
rc (número) Reporta la raíz cuadrada del número
reporta, re Dentro de un programa permite que éste reporte un valor.
Ejemplo:
PARA duplo :num
RE :num * 2
FIN
recicla Recupera la memoria ocupada
recobra Recobra la página en su estado anterior, perdiéndose los cambios
redondeo (número) Si el argumento numérico es un número decimal, y la parte decimal es menor que 0,5 redondea hacia “abajo”. En caso contrario redondea hacia arriba
reemplaza (argu1) (argu2) Reemplaza el argumento 1 por el argumento 2
renombra (nom1) (nom2) Permite renombrar un archivo
repite (número) [lista de acciones]  
resto (número 1) (número 2) Reporta el resto del cociente entre el número 1 y el número 2
rg Restaura gráficos. Borra la pantalla y la tortuga adopta su forma y color inicial
rotulo (texto) El texto indicado se escribe en la pantalla en modo “gráfico” a partir de la posición de la tortuga
rumbo Reporta el rumbo de la tortuga activa
sen (ángulo) Reporta el seno del ángulo indicado
si (comparación) [lista de acciones] Condicional simple. Si la comparación es cierta se ejecuta la lista de acciones
siotro (comparación) [lista 1 de acciones][lista 2 de acciones] Condicional doble. Si la comparación es cierta se ejecuta la lista 1 de acciones y si es falsa la lista 2 de acciones
sombrea Rellena una superficie cerrada con la “figura” de la tortuga activa
sp Sin pluma
tab Desplaza al cursor de texto hasta la próxima estación de tabulación. Estas están ubicadas cada 10 caracteres
tecla? Reporta cierto si una tecla es pulsada
todas Reporta una lista con los números de las cuatro tortugas
tono (número 1) (número 2) Toca un sonido con la frecuencia indicada en su primer argumento y con la duración especificada por el segundo.
tortugalenta Fuerza a la tortuga a trabajar “lentamente”.
tortugarapida Devuelve a la tortuga su velocidad “normal”.
traepag, tp (“nombre) Trae la página del nombre indicado
traefigs Carga las figuras del directorio y disco activos
traeutiles (“nompag) Instala los programas de la página indicada en la página activa pero en forma “oculta”
ultimo, ul (argu) Reporta el último elemento del argumento
unespacio  
vacia? (argu) Reporta cierto si el argumento está vacío
(y comparación1 comparación2 …) Conjuntivo lógico. Responde cierto si todas las comparaciones son ciertas