# FMSLogo

FMSLogo ist eine integrierte Entwicklungsumgebung und freie Implementierung der bildungsorientierten Programmiersprache Logo und wird hauptsächlich für schulische Zwecke eingesetzt. Ursprünglich wurde FMSLogo unter dem Namen MSWLogo von George Mills entwickelt, der eine Benutzeroberfläche und Erweiterungen zu Brian Harveys UCBLogo implementierte. Aufgrund des Wechsels des Entwicklers zu David Costanzo wurde die Software umbenannt und fortan von ihm erweitert und verbessert. Der Quellcode, geschrieben in Borland C++ und WxWidgets, ist lizenziert unter der GNU General Public License.

## Verbreitung

Über die offizielle Projektseite auf SourceForge wurde FMSLogo seit dessen Veröffentlichung 2005 über 300.000-mal heruntergeladen, darunter knapp 15.000 Downloads aus Deutschland (Stand: November 2018).
Der Vorgänger MSWLogo hat mit der Version 6.5b auf dem Softwareportal Softonic seit der dortigen Veröffentlichung 2008 über 1,1 Millionen Downloads und erzielt durchschnittlich 16.500 Downloads pro Monat.

## Geschichte
### Anfänge

Im Juli 1992 wurde die erste Version von George Mills für MS-DOS und Windows 3.X veröffentlicht. Es handelte sich hierbei um eine Portierung eines bereits vorhandenen Projekts namens DOSLOGO. Es unterstützte die grundlegendsten Logo-Befehle zum Steuern der Turtle, sowie einige Grafik-Befehle, wie das Festlegen einer Hintergrundfarbe.
Bereits einen Monat später veröffentlichte er Version 2.0. Die grafische Benutzeroberfläche wurde erweitert und erhielt die auch in der heutigen Version noch vorhandenen Schaltflächen zum Stoppen des Ausführens oder zum Wechseln zum Editor. Kurz darauf konnten erzeugte Grafiken auch als Bitmap-Bild abgespeichert und geladen werden.

### UCBLogo als Basis

Die am 7. Dezember 1992 veröffentlichte Version 3.0 basierte erstmals auf das von Brian Harvey entwickelte UCBLogo, wodurch z. B. Limitierungen bei Rekursionen aufgehoben werden konnten, es eine bessere Fehlerausgabe gab und der Logo-Syntax an den von UCBLogo vorgegebenen Standard angepasst wurde. Es handelt sich bei dieser Version um eine Kombination der Erweiterungen und der grafischen Benutzeroberfläche der vorherigen Versionen und der UCBLogo-Core.

### Steuerelemente, ereignisorientierte Programmierung und Steuerung externer Hardware

In Version 3.3 wurden Steuerelemente, wie Fenster, Dialogfelder, Kontrollkästchen und Kombinationsfelder implementiert. Außerdem wurde nun ereignisorientierte Programmierung über Maus und Tastatur möglich. Des Weiteren konnten nun Roboter über Ports gesteuert werden. Mit der nächsten Version konnten Töne erzeugt werden und MIDI-Geräte gesteuert werden.

### 32-Bit-Version und mehrere Turtles

Mit Version 4 wurde neben der 16-Bit-Version erstmals eine 32-Bit-Version für Windows 95 veröffentlicht. Es können fortan 1024 unabhängige Turtles erstellt werden, denen jetzt auch ein Bitmap-Bild zugeordnet werden können.

### Networking

Ab Version 5.0 wird Networking über TCP/IP unterstützt. Durch dieses Feature ist es möglich, andere MSWLogo-Instanzen über das Internet zu steuern.

### 3D-Modus

1997 erschien MSWLogo 6.0. Mit dieser Version erhielt die Entwicklungsumgebung einen 3D-Modus und wurde um die damit verbundenen Befehle erweitert.

### Wechsel des Entwicklers und Umbenennung

Am 19. Dezember 2002 wurde die letzte MSWLogo-Version 6.5b, entwickelt von Mills, herausgegeben. 2005 meldete sich der Entwickler und Betreuer eines Computer-Clubs David Costanzo über einen Forenbeitrag und kündigte an, neue Versionen unter dem Namen FMSLogo, da der Name MSWLogo urheberrechtlich geschützt ist, auf dem Softwareportal Sourceforge bereitzustellen. Am 11. Oktober veröffentlichte er dann FMSLogo 6.6.
Seit 2005 erschienen 42 Versionen von FMSLogo. Ab Version 7 werden Windows 9X und Bildschirme mit weniger als 16-Bit-Farben nicht mehr unterstützt; außerdem wurde das Logo ersetzt.

## Features

FMSLogo unterstützt verschiedene Funktionen:
* „Standard“ Logo-Parsing
* Turtle-Grafik
* Fehlermeldungen
* TCP/IP-Networking
* Text in allen verfügbaren Schriftarten
* 1024 unabhängige Turtles
* „Bitmap-Turtles“
* MIDI-Geräte
* direktes I/O zum Steuern externer Hardware
* Serielle und parallele Port-Kommunikation
* Speichern und Laden von Bildern
* Aufrufen von DLLs
* Erstellung von Dialogfeldern
* ereignisorientierte Programmierung (Maus, Tastatur, Timer)
* Steuern von Multimedia-Geräten (WAV-Dateien, CD-ROM etc.)
* 3D-perspektivisches Zeichnen
* Erstellung animierter GIF-Bilder