# OWBasic

OWBasic ist ein Compiler/Interpreter für die PocketViewer von CASIO.
Ursprünglich wurde OWBasic als einfacher BASIC-Dialekt entwickelt, wurde aber schnell umfangreicher. Mittlerweile stellt OWBasic eine vollwertige Alternative zur Programmierung des PV mit dem SDK und der Programmiersprache C dar; in der aktuellen Version sind auch viele Funktionalitäten aus höheren Programmiersprachen wie z. B. Zeiger, und systemnahe Programmierung möglich. Die aktuelle Version ist v5.25.
OWBasic wurde von Wolfgang Ortmann ab 2000 entwickelt. Nachdem Wolfgang Ortmann die Weiterentwicklung 2004 eingestellt hatte, setzte AUDACIA Software die Arbeit an OWBasic fort.
OWBasic ist ein Open-Source-Projekt unter der GPL.

## Vor- und Nachteile

Wenn man ein OWBasic-Programm schreibt und ausführt, so wird nicht direkt vom Prozessor ausführbarer Code erzeugt. Vielmehr erzeugt der OWBasic-Compiler einen Zwischencode, der vom Interpreter ausgeführt wird. Daraus ergeben sich verschiedene Vor- und Nachteile:

### Nachteile

* Performance. OWBasic-Programme laufen etwas langsamer als direkt vom Prozessor ausführbare Programme. Im Normalfall stellt das allerdings kein Problem dar, da der PV für die normalen Aufgaben einer Anwendung mehr als genug Performance bietet. Nur für rechenintensive Anwendungen wie etwa 3D-Spiele eignet sich OWBasic deshalb nicht.
* Eingeschränkte Kontrolle. In einem Add-In können sämtliche PV-systemspezifische Funktionen verwendet werden, die das SDK bietet. In OWBasic hingegen können nur solche Funktionen verwendet werden, die als OWBasic-Funktionen implementiert sind. Auch können Eingriffe ins System, wie z. B. das Abfangen von Interrupten oder das Hooken von Systemprozeduren, nur in Add-Ins vorgenommen werden. Jedoch sind die meisten Systembefehle sowie die durch diverse Systemeingriffe entstandenen Möglichkeiten (Timer, asynchrone Touch-Abfrage, gepackte Add-Ins etc.) mittlerweile auch in OWBasic verfügbar.

### Vorteile

* Mobilität. Während Add-Ins für den PV am PC entwickelt, debuggt und kompiliert werden müssen, lässt sich das für OWBasic-Programme auch direkt auf dem PV erledigen.
* Geringe Größe. Ein Add-In belegt wegen der Speicherstruktur des PV mindestens 64 KB (diese Grenze lässt sich mittels PVAddInManager auf 16 KB heruntersetzen), außerdem kann der PV nur eine begrenzte Anzahl von Add-Ins speichern. Da OWBasic-Programme als Memo-Einträge gespeichert sind, belegen sie nicht den knappen Add-In-, sondern den Datenspeicher des PV. Normalerweise benötigt ein OWBasic-Programm wesentlich weniger Speicherplatz als ein entsprechendes Add-In, überdies fällt auch die 64 KB- bzw. 16 KB-Grenze weg, so dass man sehr viele OWBasic-Programme auf dem PV speichern kann. Die Anzahl wird nur durch den Datenspeicher begrenzt.
* Sicherheit. Wenn in einem Add-In ein Laufzeitfehler, wie etwa eine Division durch Null, auftritt, stürzt unter Umständen der PV ab und muss durch Herausnehmen der Batterien oder durch Betätigen des Reset-Knopfes aufwendig neugestartet werden. Tritt in einem OWBasic-Programm ein solcher Fehler auf, so zeigt OWBasic eine Fehlermeldung und kehrt ins PV-Menu zurück. Auch Fehler wie der Zugriff auf ein Arrayelement mit einem falschen Index, Dateioperationen mit falschen Dateizeigern etc. werden bei OWBasic nicht mit undefiniertem Verhalten und ggf. Programmabsturz, sondern mit einer Fehlermeldung quittiert.
* Portabilität. Seit 2003 gibt es mit dem PV-S1600 einen PV mit einem völlig neuen Innenleben; im Gegensatz zu den vorhergehenden Modellen besitzt er einen Hitachi SH-3 32-Bit-Prozessor (alte Modelle: NEC V30MZ, 16-Bit, 80186-kompatibel). Der SH-3-Prozessor hat eine andere Architektur als der NEC V30MZ, weshalb Add-Ins für die alten Modelle nicht auf dem PV-S1600 ausführbar sind. Will man ein Programm für beide PV-Serien schreiben, so muss man schon bei der Programmierung sämtliche Unterschiede im Speichermodell, der Bit-Anordnung etc. beachten, außerdem muss das Programm zweimal kompiliert und ggf. auch für beide PVs einzeln debuggt werden. Da OWBasic-Programme zu Bytecode kompiliert werden und somit nicht auf einen speziellen Prozessortyp zugeschnitten sind, können sie auf beiden PV-Serien ohne eine Abänderung des Quellcodes ausgeführt werden.

## Dokumentation

Das Erlernen von OWBasic ist wie bei den meisten BASIC-Dialekten recht einfach. Auf www.audacia-software.de gibt es eine deutsch- und englischsprachige Befehlsreferenz im HTML-Format sowie im PocketReferencer-Format zur Übertragung auf den PV.