Waba
Waba ist eine kostenlose Laufzeit- und Entwicklungsumgebung für "kleine
Systeme", vorrangig "Personal Digital Assistants" (PDAs) unter PalmOS und
WindowsCE. Der Befehlsumfang von Waba ist eine Untermenge von Java, und die
zugehörige "Virtuelle Maschine" kann Java-Klassendateien ausführen,
sofern nur Waba-eigene bzw. Plattform-unabhängige Klassen verwendet
werden.
Die vorliegenden Seiten beschreiben die (wenigen) Arbeiten des Autors mit
Waba. Seit mit der KVM eine vollständige Java-VM und mit PersonalJava
eine "professionellere" Laufzeitumgebung für PDAs und ähnliche
Geräte mit geringen Speicher- und Rechenkapazitäten zur Verfügung
steht, lohnt der Umgang mit diesem System nur noch für Plattformen ohne
eine solche Java-Implementierung.
Bitte beachten Sie auch die
Betrachtungshinweise sowie die
Liste der letzten Änderungen!
Themenübersicht
Die folgende Themenübersicht führt Sie unmittelbar zu der von Ihnen
gewünschten Information - klicken Sie dazu einfach auf das Thema Ihrer
Wahl:
Kurzbeschreibung
Waba [1] ist eine kostenlose Laufzeit- und Entwicklungsumgebung für
"kleine Systeme", vorrangig "Personal Digital Assistants" (PDAs) unter PalmOS
und WindowsCE. Da alle Komponenten im Quelltext vorliegen, existieren inzwischen
jedoch auch Portierungen für andere Plattformen (z.B. MS/DOS oder das
Newton MessagePad von Apple) [2].
Laufzeitumgebung
Der Befehlsumfang von Waba ist eine Untermenge von Java; die zugehörige
"Virtuelle Maschine" kann Java-Klassendateien ohne vorherige Modifikation
laden und ausführen, sofern nur Waba-eigene bzw. Plattform-unabhängige
Klassen verwendet werden.
Nicht unterstützt werden insbesondere
-
die Datentypen long und double,
-
das Werfen von Ausnahmen (exceptions) sowie deren Behandlung und
-
Multithreading.
Entwicklungsumgebung
Waba wird mit einem Satz eigener Laufzeitbibliotheken ausgeliefert, welche
die wichtigsten Laufzeitfunktionen, rudimentäre Funktionen für
den Zugriff auf Dateien und Dateisysteme, PDA-spezifische "Datenbanken",
serielle Schnittstellen und Internet-Verbindungen, sowie grafische Ausgaben
und einfache Komponenten für grafische Benutzeroberflächen zur
Verfügung stellen. Die folgende Liste gibt einen (nicht-hierarchischen)
Überblick über die unter Waba 1.0 verfügbaren Bibliotheken
und Klassen bzw. Schnittstellen:
-
waba.fx - 2D-Grafik, Rastergrafiken, Audio
-
ISurface - Schnittstelle für grafikfähige Objekte
-
Color - repräsentiert ein Farbobjekt (ähnlich java.awt.Color)
-
Font - repräsentiert einen Zeichensatz (ähnlich java.awt.Font)
-
FontMetrics - beschreibt die Metrik eines "Font" (ähnlich
java.awt.FontMetrics)
-
Graphics - repräsentiert einen Grafik-Kontext (ähnlich
java.awt.Graphics)
-
Image - repräsentiert eine Rastergrafik (ähnlich java.awt.Image)
-
Rect - ein (reguläres) Rechteck (ähnlich java.awt.Rectangle)
-
Sound - ermöglicht die Ausgabe einzelner Töne
-
SoundClip - repräsentiert eine Audio-Aufnahme
-
waba.io - Dateien & Dateisysteme, Kommunikation
-
Catalog - repräsentiert eine einfache (PDA-spezifische) "Datenbank"
-
File - repräsentiert eine Datei oder ein Verzeichnis
-
SerialPort - repräsentiert eine serielle Schnittstelle
-
Socket - repräsentiert einen TCP/IP-Socket
-
Stream - enthält fundamentale Ein-Ausgabe-Methoden
-
waba.lang - fundamentale Klassen
-
Object - Basisklasse aller Objekte
-
String - repräsentiert eine einzelne Zeichenkette
-
StringBuffer - eine Folge von Zeichenketten (anders als
java.lang.StringBuffer!)
-
waba.sys
-
Convert - dient der Konvertierung zwischen Datentypen
-
Time - repräsentiert Datum und Uhrzeit
-
Vm - enthält eine Reihe fundamentaler Dienste (ähnlich
java.lang.System)
-
waba.ui - grafische Benutzeroberfläche
-
IKeys - Konstanten für eine Reihe von Eingabetasten
-
Button - eine einfache Schaltfläche (mit Aufschrift)
-
Check - quadratische Ankreuzfläche
-
Container - Basisklasse für "umgebende" Komponenten (ohne
LayoutManager)
-
Control - Basisklasse aller Komponenten
-
ControlEvent - von einer Komponente ausgelöstes Ereignis
-
Edit - Texteingabe-Komponente
-
Event - Basisklasse aller Ereignisse
-
KeyEvent - von einer Taste ausgelöstes Ereignis
-
Label - einfache (statische) Textanzeige
-
MainWindow - Hauptfenster einer Applikation (ähnlich java.awt.Frame)
-
PenEvent - vom Stift ausgelöstes Ereignis
-
Radio - kreisförmige Ankreuzfläche (ohne java.awt.CheckboxGroup)
-
Tab - einzelnes Register einer "TabBar"
-
TabBar - eine Registerzeile mit mehreren "Tab"s
-
Timer - repräsentiert einen einer Komponente zugeordneten Zeitgeber
-
Welcome - die "Welcome"-Anwendung der Waba-VM
-
Window - generisches Applikationsfenster (ohne sonderliche
Funktionalität)
-
waba.util
-
Vector - dynamisches Feld von Objekten (ähnlich java.lang.Vector)
Außerdem gehören Werkzeuge zum Bündeln von Klassendateien
und anderen Ressourcen (wie z.B. Rastergrafiken) für die gewünschte
Zielplattform sowie eine Art WabaVM-Emulator (als Java-Applikation, die das
Austesten von Waba-Programmen auf einem "richtigen" Rechner ermöglicht)
zum Lieferumfang.
Einschränkungen
Neben den bereits genannten Einschränkungen unterliegen Waba-Programme
zusätzlich den folgenden Randbedingungen:
-
es ist keine "native code"-Schnittstelle vorhanden, ohne Veränderung
des Laufzeitsystems können also nur reine Java-Programme ausgeführt
werden;
-
es sind keine Java-Klassen erlaubt, die direkt oder indirekt
Plattform-spezifischen (nativen) Code verwenden, wie z.B.
-
das Abstract Windows Toolkit (AWT, verwendet Plattform-spezifische
"Peer"-Objekte)
-
Swing-Komponenten (beruhen auf einigen AWT-Klassen) sowie
-
etliche Klassen aus den Paketen java.io und java.net
-
System-bedingt steht meist nur vergleichsweise wenig Arbeitsspeicher zur
Verfügung
Java-Klassen und -Klassenbibliotheken, die den genannten Beschränkungen
genügen, können prinzipiell auch unter Waba eingesetzt werden.
JAR-Archive müssen vorher jedoch entpackt und Klasse für Klasse
in das "Paket" mit der gewünschten Waba-Anwendung übernommen werden.
Automatische Erstellung von Waba-Distributionen
Bis ein Waba-Programm auf einen PDA übertragen werden kann, müssen
hintereinander mehrere Kommandos mit passenden Aufrufparametern abgesetzt
werden. Um diese immer wiederkehrende Arbeit zu vereinfachen, hat sich der
Autor eine kleine Windows-Kommandoprozedur geschrieben,
welche die meisten der erforderlichen Aufgaben übernimmt:
|