Envelop
Envelop ist eine stark veraltete integrierte Entwicklungsumgebung für Rapid Application Development (RAD). Bei der bereitgestellten Programmiersprache handelt es sich um einen BASIC-Dialekt der sich sehr stark an Microsoft Visual Basic 3 orientiert. Auch die Gestaltung der grafischen Benutzeroberfläche von Envelop sowie die dort bereitgestellten Werkzeuge sind ebenfalls an Visual Basic angelehnt.
Envelop | |
---|---|
Envelop - Entwicklungsumgebung | |
Basisdaten | |
Entwickler | CIMLINC Inc. Janus Software |
Erscheinungsjahr | 1995[1] |
Aktuelle Version | Windows 1.4 Linux 1.5 Beta 6 |
Betriebssystem | Windows und Linux |
Programmiersprache | C++ |
Kategorie | Integrierte Entwicklungsumgebung (IDE) |
Lizenz | proprietär |
deutschsprachig | nein |
www.envelop.com (offline) www.janus-software.com |
Die Programmiersprache Envelop Basic ist objektorientiert und bildet nahezu alle Sprachelemente von Visual Basic 3 und Visual Basic 4 ab.
Das Projekt wurde von Mitarbeitern der Firma CIMLINC Inc. ins Leben gerufen[2] und die Wortmarke „Envelop“ im Mai 1995 in den USA registriert.[3] Die letzte Version (1.4) für Microsoft Windows erschien im Juli 1996.[2]
Nach dem Ende der Entwicklung von Envelop durch die Firma CIMLINC Inc., wurde das Projekt von der niederländischen Firma Janus Software übernommen und unter dem Namen Phoenix Object Basic fortgeführt. Dort wurde die Software für das Betriebssystem Linux übersetzt.
Beide Entwicklungsumgebungen können als Abandonware eingeordnet werden. Es handelt sich also um Programme, die nicht mehr gepflegt und weiterentwickelt werden. Derzeit können die Entwicklungsumgebungen nur noch aus dem Internet Archive bezogen werden (siehe unten). (Stand: 16. Dezember 2021)
Eigenschaften der Programmiersprache
Bei Envelop bzw. Phoenix Object Basic handelt es sich um eine imperative, objektorientierte Programmiersprache.[4][5]
Klassen und Objekte
Envelop ist eine objektorientierte Programmiersprache. Im Gegensatz zu den meisten objektorientierten Programmiersprachen, findet allerdings keine explizite Aufteilung in Klassen und Objekte statt. Allgemein stellen Objekte eine Instanz einer Klasse dar. Eine Klasse ist eine Menge aller Objekte mit gleichen Attributen und Operationen.[6]
In Envelop können bestehende Objekte kopiert und abstrahiert werden. Die Abstraktion eines Objekts bildet das Prinzip der Vererbung nach. Mehrfachvererbung ist mit Envelop nicht möglich. Zudem existieren in Envelop auch keine Sichtbarkeiten für Attribute und Methoden. Objekte können entweder zur Entwurfszeit über die Entwicklungsumgebung abstrahiert werden[7][8] oder dynamisch während der Laufzeit. Das globale Objekt ObjectTools
stellt eine Reihe von Methoden zur Verfügung, mit der Objekte dynamisch abstrahiert, verwaltet und untersucht werden können.[9] Es handelt sich dabei um grundlegende Funktionen von Reflexion.
Über das globale Objekt SystemTools
kann zur Laufzeit mit dem Betriebssystem interagiert werden.[10]
Datentypen und Variablen
Envelop stellt folgende Datentypen bereit:
Typ | Symbol | Größe | Beschreibung |
---|---|---|---|
Integer | % | 2 Byte | Vorzeichenbehaftete Ganzzahl[11] |
Long | & | 4 Byte | Vorzeichenbehaftete Ganzzahl[12] |
Single | ! | 4 Byte | Gleitkommazahl mit 1 Bit Vorzeichen, 8 Bit Exponent und 23 Bit Mantisse[13] |
Double | # | 8 Byte | Gleitkommazahl mit 1 Bit Vorzeichen, 11 Bit Exponent und 52 Bit Mantisse[14] |
Currency | @ | 8 Byte | Festkommazahl mit 15 Stellen vor und 4 Stellen nach dem Komma[15] |
String | $ | 1 Byte pro Zeichen | ANSI-Zeichenfolge[16] |
Einschränkungen der Datentypen:
- Es existieren für Ganzzahlen weder 1 Byte noch 8 Byte (64-Bit) große Datentypen.
- Zudem sind numerische Datentypen in Envelop stets mit einem Vorzeichen behaftet.
- Ähnlich wie in Visual Basic werden boolesche Ausdrücke als vorzeichenbehaftete 2 Byte Ganzzahl gespeichert, bei dem der Wert −1
True
und der Wert 0False
entspricht.[17] Im Gegensatz zu Visual Basic wird allerdings auf einen eigenen DatentypBoolean
verzichtet, sondern auf den DatentypInteger
zurückgegriffen.[11] - Es existiert im Gegensatz zu Visual Basic kein Datentyp für Datums- und Zeitangaben. Meistens werden diese Angaben als Zeichenfolge zurückgegeben, wobei es Unterschiede im Format gibt. An manchen Stellen werden numerische Angaben zur Repräsentation verwendet.
Subroutinen und Funktionen
In Envelop wird (wie in den meisten Dialekten der Programmiersprache BASIC) zwischen Funktionen (Function) und Subroutinen (Sub) unterschieden. Funktionen sind Methoden, welche einen Wert zurückgeben, während Subroutinen keinen Wert zurückgeben können.
Parameter können als Wert oder als Referenz übergeben werden. Soll ein Parameter als Wert übergeben werden, muss das Schlüsselwort ByVal
vor dessen Deklaration geschrieben werden. Fehlt dieses Schlüsselwort, so wird der Parameter implizit als Referenz übergeben.[18] Anders, als in Visual Basic, gibt es hier kein explizites Schlüsselwort ByRef
.
In Envelop können auch Methoden aus externen Dynamic Link Libraries (DLL) aufgerufen werden.[5][19] Die Syntax zur Deklaration externer Methoden ist dabei ähnlich zu der von Visual Basic.[20] Obwohl die Entwicklung von Envelop 1996 (also zu Zeiten von Windows 95) eingestellt wurde, können auf diese Art und Weise auch Funktionen aus neueren Windows-Versionen verwendet werden. Da Envelop nur 32 Bit Anwendungen erzeugen kann[21], können jedoch nur externe Funktionen aus 32 Bit DLLs genutzt werden.[22] Plattformabhängige Funktionen können allerdings nicht aus anderen Betriebssystemen heraus aufgerufen werden.
Declare Function FileEncryptionStatus Lib "Advapi32" Alias "FileEncryptionStatusA" (ByVal lpFileName As String, lpStatus As Long) As Integer
Das Beispiel zeigt die Deklaration der externen Funktion FileEncryptionStatus
, mit der man ab Windows 2000 ermitteln kann, ob eine angegebene Datei verschlüsselt ist oder nicht.[23] Diese Funktion steht erst seit Windows 2000 zur Verfügung. Der Dateiname wird über den Parameter lpFileName
als Wert übergeben. Der Status wird als Referenz über den Parameter lpStatus
zurückgegeben. Die Funktion selbst gibt einen booleschen Wert zurück, der angibt, ob der Funktionsaufruf selbst erfolgreich war oder nicht. Da es in Envelop keinen booleschen Datentyp gibt (siehe oben), wird der Rückgabewert ersatzweise als 2 Byte Integer deklariert.
Fehlerbehandlung
Im Gegensatz zu den meisten BASIC Programmiersprachen der damaligen Zeit, werden in Envelop keine numerischen Fehlercodes und Sprunganweisungen (Goto) zur Verarbeitung von Fehlern verwendet, sondern das Prinzip der strukturierten Ausnahmebehandlung (Try-Catch-Prinzip).[24]
Sub btnDiv_Click()
Dim m as New MessageBox
m.SetIconStop
Try
txtResult.Text = txtNum1.Text / txtNum2.Text
Catch ConvertFailed
m.Message("Fehler", "Bitte geben Sie zwei Zahlen ein!")
Catch FPException
m.Message("Fehler", "Division durch 0 ist nicht erlaubt!")
Catch
m.Message("Fehler", "Es ist ein unbekannter Fehler aufgetreten!")
End Try
End Sub
Das Beispiel zeigt einen Ausschnitt aus einem simplen Taschenrechner. Wenn der Benutzer die Schaltfläche „Dividieren“ (btnDiv
) anklickt, wird versucht, den Wert des ersten Eingabefelds (txtNum1
durch den Wert des zweiten Eingabefelds txtNum2
) zu teilen und das Ergebnis in das Textfeld txtResult
zu schreiben. Sollte dies nicht gelingen, wird eine Ausnahme ausgelöst. Im Fehlerfall werden zuerst Konvertierungsfehler (ConvertFailed
) abgefangen, danach numerische Fehler (FPException
) und abschließend alle anderen Fehler (z. B. bei zu wenig Speicherplatz). In jedem Fall wird dem Benutzer eine entsprechende Fehlermeldung in einem Dialogfenster angezeigt.
Formularentwurf
Envelop stellt einen grafischen Editor zur Erstellung von grafischen Benutzeroberflächen bereit.[4][21] Dieser ist nahezu identisch zum Formulareditor von Visual Basic. Diese Formularentwürfe werden in einer Objekt-Datei (*.ebo) gespeichert.
Für alle Elemente zur Gestaltung von grafischen Benutzeroberflächen, die über ein sogenanntes Handle verfügen, existiert das Basisobjekt Window
. Davon leiten sich Formulare (Form
) und Steuerelemente (Control
) ab.[25]
Basissteuerelemente
Die nachfolgenden Steuerelemente existieren sowohl für die Zielplattform Windows, als auch für Derivate des Betriebssystems Linux.
Typ | Beschreibung |
---|---|
Button | Eine einfache Schaltfläche.[26] |
Label | Ein einfaches Beschriftungsfeld.[27] |
TextBox | Ein- oder mehrzeiliges Eingabefeld für unformatierte Zeichenfolgen.[28] |
CheckBox | Ein Auswahlkästchen. Innerhalb eines Containers können mehrere Auswahlkästchen ausgewählt sein.[29] |
OptionButton | Ein Optionsfeld. Innerhalb eines Containers kann immer nur ein Optionsfeld ausgewählt sein.[30] |
ListBox | Ein einfaches Listenfeld mit textbasierten Einträgen.[31] |
ComboBox | Ein Kombinationsfeld mit textbasierten Einträgen.[32] |
Frame | Ein Rahmen, der eine Gruppe von zusammengehörigen Steuerelementen umgibt.[33] |
Image | Eine Zeichenflächen.[34] |
DataControl | Eine Gruppe von Navigationsschaltflächen für Datensätze.[35] |
HyperControl | Ein benutzerdefiniertes Steuerelement (siehe unten).[36] |
Darüber hinaus kann für jedes Formular eine Menüleiste mit Hilfe eines visuellen Editors angelegt und bearbeitet werden.
Erweiterte Steuerelemente
Neben den plattformunabhängigen Standardelementen, stehen unter Microsoft Windows noch einige zusätzliche Komponenten bereit:
Typ | Beschreibung |
---|---|
ObjectBox | Abhängig von der ausgewählten Darstellungsform, eine Symbolleiste oder eine Werkzeug-Palette.[37] |
RichTextBox | Mehrzeiliges Eingabefeld mit RTF-Formatierung.[38] |
ListView | Erweitertes Listenfeld mit Symbolen und ggf. mehreren Spalten.[39] |
TreeView | Darstellung einer hierarchischen Baum-Struktur.[40] |
TabStrip | Registerkarten zur kategorischen Zusammenfassung von Steuerelementen.[41] |
Gauge | Horizontaler oder vertikaler Fortschrittsbalken.[42] |
Darüber hinaus können unter Microsoft Windows auch noch 32 Bit ActiveX-Komponenten von Microsoft oder Drittanbietern eingebunden werden.[43]
Ebenso besteht dort die Möglichkeit, OLE-Objekte einzubinden.[44] Dabei handelt es sich beispielsweise um Verbunddokumente aus der Microsoft-Office-Familie (Word-Dokumente, PowerPoint-Folien, Excel-Tabellen und -Diagramme), digitale Medien, CAD-Zeichnungen oder beliebige andere Dateien. Unter Linux wird dieses Konzept nicht unterstützt.
Benutzerdefinierte Steuerelemente
Im Gegensatz zu Visual Basic gab es in der finalen Version von Envelop bereits im Jahr 1996 die Möglichkeit, benutzerdefinierte Steuerelemente zu erstellen. Diese werden in Envelop als Hyper-Control bezeichnet.[45] Ein benutzerdefiniertes Steuerelement ist eine Gruppierung mehrerer (primitiver) Steuerelemente zu einem neuen komplexen Steuerelement.[21] Diese kann man innerhalb eines Projekts oder auch in mehreren Projekten an mehreren Stellen wiederverwenden. Derartige Steuerelemente können auch eigene Eigenschaften, Methoden (z. B. Konsistenzprüfungen) und Ereignisse besitzen und an Datenquellen gebunden werden. Beispiele dafür sind unter anderem Eingabemasken für Postadressen, Produktdaten oder Daten in digitalen Patientenakten. Dieses Konzept hat sich in vielen Programmiersprachen durchgesetzt und findet auch heute noch Verwendung. Zur damaligen Zeit war die Bereitstellung derartiger Möglichkeiten zumindest für BASIC-Programmiersprachen nicht selbstverständlich und daher ein deutlicher Mehrwert dieser Programmiersprache.
Datenbindung
Ähnlich wie in Visual Basic und den meisten modernen RAD Entwicklungsumgebungen, können Steuerelemente an eine Datenquelle gebunden werden.[4][5] Dadurch können klassische formularbasierte Anwendungen zur Datenerfassung und -verarbeitung einfach und schnell entwickelt werden. Komplexe Eingabemasken können mit sogenannten Hyper Controls realisiert werden.
Bibliotheken
Formularentwürfe, Steuerelemente und Code-Dateien werden in Objektdateien (*.ebo) gespeichert. Diese sind intern nach dem Compound File Binary Format (CFBF) Format aufgebaut und können in beliebig vielen Projekten wiederverwendet werden. Allerdings lassen sich daraus keine DLL oder OCX Dateien generieren.
Modifikation der Entwicklungsumgebung
Eine Besonderheit von Envelop ist die Tatsache, dass die Entwicklungsumgebung teilweise selbst in Envelop-Basic programmiert ist und durch Entwickler angepasst und erweitert werden kann.[5] Auf diese Art und Weise kann man beispielsweise die Benutzeroberfläche in eine andere Sprache übersetzen, Makros entwickeln (Automatisierung) oder eigene Assistenten programmieren. Die Weiterentwicklung der Programmiersprache selbst bzw. des Compilers (Bootstrapping) ist allerdings nicht möglich.
Der Quellcode für die zentralen Elemente der Sprachverarbeitung ist nicht öffentlich verfügbar, da hier urheberrechtlich geschützte Elemente eingesetzt werden.
Distribution von Envelop Programmen
Envelop generiert ausschließlich 32 Bit Anwendungen für Windows. Bei den kompilierten Apps handelt es sich jedoch nicht um Stand-Alone-Anwendungen. Bei der Verteilung der Apps müssen einige Laufzeitkomponenten mit ausgeliefert werden. Um dies zu erleichtern, wird neben der IDE auch ein rudimentäres Programm zur Erstellung von Installationsprogrammen für Envelop Anwendungen mitgeliefert. Unter Microsoft Windows sind die erstellten Programme nur bis einschließlich Windows XP lauffähig. Bei Linux Betriebssystemen müssen einige alte Pakete installiert werden, um Envelop und die damit erstellten Programme lauffähig zu machen.
Verbreitung
Envelop bzw. Phoenix Object Basic sind stark veraltete Entwicklungsumgebungen, deren aktive Entwicklung bereits vor der Jahrtausendwende eingestellt wurde. Damit einhergehend findet man in namhaften Suchmaschinen kaum noch Artikel über die Verwendung dieser Programmiersprache.
Im Januar 2022 wurde diese Programmiersprache weder im TIOBE (The Importance of Being Earnest) – Index[46] der 100 populärsten Programmiersprachen, noch im PYPL (PopularitY of Programming Language) – Index[47] der 30 populärsten Programmiersprachen, aufgelistet. Beide Indizes dienen zur Messung der Popularität von Programmiersprachen.
Alternativen
Die Entwicklung von Envelop für Windows wurde bereits 1996 eingestellt. Die letzte Version für Linux erschien im Oktober 2004. Seitdem haben sich einige BASIC-Entwicklungsumgebungen und -Frameworks entwickelt, die den Anforderungen von modernen Endgeräten und Betriebssystemen, besser gerecht werden. Als Envelop auf den Markt kam, gab es nur wenige BASIC-Entwicklungsumgebungen mit einem komfortablen WYSIWYG-Editor für die Gestaltung grafischer Benutzeroberflächen. Microsoft Visual Basic war damals der bekannteste Vertreter dieser Gruppe. Im Gegensatz zu den anderen BASIC-Entwicklungsumgebungen war Envelop stets kostenlos.
Microsoft Visual Basic
Envelop bildet die Entwicklungsumgebung Microsoft Visual Basic 3 und 4 nahezu vollständig nach. Von daher kann man natürlich unter Microsoft Windows auch das kostenpflichtige Original erwerben und einsetzen. Allerdings war und ist Visual Basic nicht für Linux Betriebssysteme nutzbar. Diese Lücke wird durch das Linux-Pendant Phoenix Object Basic abgedeckt.
Gambas
Seit 1999 existiert mit der Entwicklungsumgebung Gambas eine exklusive Alternative für Varianten des Betriebssystems Linux. Über das Windows-Subsystem für Linux ist es allerdings auch möglich, Gambas unter dem Betriebssystem Windows auszuführen. Diese Programmiersprache wird immer noch gepflegt und aktiv weiterentwickelt. Die aktuelle Version 3.16.3 erschien am 15. September 2021.[48]
REALbasic
Eine weitere kostenpflichtige Entwicklungsumgebung aus der damaligen Zeit stellt REALbasic dar. Diese Software wird bis heute unter dem Namen XOJO gepflegt und weiterentwickelt.
Alternativen für moderne Betriebssysteme
Für sehr alte Betriebssysteme (z. B. Windows 95) kommen die nachfolgenden Alternativen nicht in Frage, da diese nur unter relativ modernen Betriebssystemen lauffähig sind. Folgende Entwicklungsumgebungen erlauben die Entwicklung von plattformübergreifenden Apps für Windows, Linux und macOS, wobei die ersten beiden auch noch die mobilen Plattformen Android und iOS abdecken.
Weblinks
- Englischsprachiger Wikipedia-Artikel zu Phoenix Object Basic
- Homepage (Memento vom 4. November 1996 im Internet Archive)
- Janus Software: Phoenix 1.4 for Windows (a.k.a. "Envelop") (Memento vom 13. August 2007 im Internet Archive; EXE; 7,4 MB)
- Janus Software: Phoenix 1.5 for Linux Beta 6 (Memento vom 13. August 2007 im Internet Archive; RPM; 4,0 MB)
- Janus Software: Phoenix 1.5 for Linux Beta 6 (Documentation) (Memento vom 13. August 2007 im Internet Archive; RPM; 1,7 MB)
Einzelnachweise
- Envelop Engine: Press Release (Memento vom 4. November 1996 im Internet Archive)
- CIMLINC, Inc. (Hrsg.): The Envelop Story. 1.4 Auflage. Itasca, Illinois (USA) 9. Juli 1996, Installationsordner > STORY.TXT (englisch).
- Trademarks August 27, 1996. In: Official Gazette of the United States Patent and Trademark Office. 1189, Nr. 4, 27. August 1996, S. 148. ISSN 0360-5132.
- Envelop Engine: Fact Sheet (Memento vom 4. November 1996 im Internet Archive)
- Phoenix Object Basic - Key Features (englisch) Abgerufen am 15. November 2021.
- Christian Herzog: Grundlagen der Programmierung - Kapitel 3: Klassen und Objekte (englisch, PDF) Technische Universität München. S. 7. 14. Oktober 2009. Abgerufen am 7. Dezember 2021.
- Phoenix Object Basic - Abstracting an object (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - Abstracting controls (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - ObjectTools (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - SystemTools (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - Integer Data Type (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - Long Data Type (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - Single Data Type (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - Double Data Type (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - Currency Data Type (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - String Data Type (englisch) Abgerufen am 15. November 2021.
- Boolean-Datentyp. In: Microsoft (Hrsg.): MSDN Library Visual Studio 6.0. 1998, Visual Basic-Dokumentation, VBENLR98.CHM.
- Phoenix Object Basic - Function Statement (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - Declare Statement (englisch) Abgerufen am 15. November 2021.
- Declare-Anweisung. In: Microsoft (Hrsg.): MSDN Library Visual Studio 6.0. 1998, Visual Basic-Dokumentation, VBENLR98.CHM.
- Envelop Engine: The Free, Object-Oriented, Familiar RAD tool for MS Windows 95 and NT (Memento vom 4. November 1996 im Internet Archive)
- Microsoft Docs - Process Interoperability (englisch) Abgerufen am 15. November 2021.
- Microsoft Docs - FileEncryptionStatusA function (winbase.h) (englisch) Abgerufen am 28. November 2021.
- Phoenix Object Basic - Try...Catch Loop (englisch) Abgerufen am 15. November 2021.
- Phoenix Object Basic - Window (englisch) Abgerufen am 16. Januar 2022.
- Phoenix Object Basic - Button (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - Label (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - TextBox (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - CheckBox (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - OptionButton (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - ListBox (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - ComboBox (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - Frame (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - Image (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - DataControl (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - HyperControl (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - ObjectBox (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - RichTextBox (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - ListView (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - TreeView (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - TabStrip (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - Gauge (englisch) Abgerufen am 8. Januar 2022.
- Phoenix Object Basic - Ocx (englisch) Abgerufen am 18. Dezember 2021.
- Phoenix Object Basic - Ole (englisch) Abgerufen am 18. Dezember 2021.
- Phoenix Object Basic - HyperControl (englisch) Abgerufen am 18. Dezember 2021.
- TIOBE Index for January 2022 (englisch) Abgerufen am 15. Januar 2022.
- PYPL PopularitY of Programming Language (englisch) Abgerufen am 15. Januar 2022.
- Gambas Almost Means BASIC! (englisch) Abgerufen am 24. Dezember 2021.