Andreas Rozek  

FileInfo - ein External für Runtime Revolution

Möchte man unter Runtime Revolution [1] die Eigenschaften einer bestimmten Datei bestimmen, so muß man zunächst die Eigenschaften aller Dateien im übergeordneten Ordner erfassen und anschließend die gewünschte Datei ausfiltern - in großen Verzeichnissen und/oder auf Netzlaufwerken ist dies eine sehr ineffiziente Angelegenheit.

An dieser Stelle wird deshalb mit "FileInfo" ein kleines "External" vorgestellt, mit dem man die Eigenschaften einer bestimmten Datei direkt ermitteln kann.

Das External sowie eine kleine Beispielanwendung können für Windows, Linux und MacOS X heruntergeladen und nach Belieben in eigenen (kommerziellen wie nicht-kommerziellen) Projekten eingesetzt werden - beide stehen unter der "MIT License" [2] mit der zusätzlichen Einschränkung, daß jegliche Änderungen an dem vom Autor herausgegebenen Original deutlich gekennzeichnet werden müssen - dergestalt, daß der Autor nicht mit diesen Änderungen in Verbindung gebracht werden kann!

Inhaltsübersicht

Um direkt zu einem bestimmten Abschnitt zu gelangen, klicken Sie einfach auf die entsprechende Überschrift:

Installation - "FileInfo" in RunRev integrieren

Damit das External unter Runtime Revolution eingesetzt werden kann, muß Revolution erst darauf hingewiesen werden - der "FileInfo Demonstrator" zeigt beispielhaft, wie man dabei vorgehen sollte:

  1. laden Sie die Datei FileInfoDemonstrator.rev auf Ihren Rechner herunter und legen Sie sie in ein Verzeichnis Ihrer Wahl,
  2. laden Sie das zu Ihrer Plattform passende External herunter und legen Sie es in dasselbe Verzeichnis, in dem auch schon der FileInfo-Demonstrator liegt: für Windows ist dies die Bibliothek FileInfo.dll, für Linux die Datei FileInfo.so und für MacOS X das Paket FileInfo.bundle. Alternativ können Sie auch gleich alle Externals herunterladen...

Innerhalb des FileInfo-Demonstrators wird das External (im Rahmen der "preOpenStack"- Prozedur) wie folgt geladen:

  local ApplicationPath

# **** determine the folder containing this application ****

set the ItemDelimiter to "/"
put (item 1 to -2 of (the filename of this stack)) & "/" into ApplicationPath

# **** let RunRev find and load the associated external ****

switch (the platform)
case "Win32"
set the externals of this stack to ApplicationPath & "FileInfo.dll"
break
case "Linux"
set the externals of this stack to ApplicationPath & "FileInfo.so"
break
case "MacOS"
set the ItemDelimiter to "."
if (item 1 of the systemVersion >= 10) then
set the externals of this stack to ApplicationPath & "FileInfo.bundle"
break
end if # explicit fall-through in case of MacOS <= 9
default
go to card "UnsupportedSystem"
pass preOpenStack
end switch

Die ersten Zeilen ermitteln den Pfad zu dem Verzeichnis, in welchem sich der FileInfo-Demonstrator selbst befindet. Die folgenden Zeilen laden aus diesem Verzeichnis die zur aktuellen Plattform passende Datei - wird die betreffende Plattform nicht unterstützt, zeigt der FileInfo-Demonstrator eine entsprechende Fehlermeldung an.

Das zentrale Kommando für das Laden eines External lautet:

  set the externals of this stack to ...

wobei die Ellipse "..." durch eine "Liste" mit den Pfadnamen der zu ladenden Dateien zu ersetzen ist - mit je einer Datei pro Zeile.

Sobald das External erfolgreich geladen (und initialisiert) wurde, sollte der vom External gemeldete Paketname in der Liste der "externalPackages" auftauchen (da der Dateiname des External beliebig geändert werden kann, muß der Paketname nicht unbedingt etwas mit dem Dateinamen zu tun haben):

# **** check presence of the external as a whole ****

if ("FileInfo" is not among the lines of the externalPackages of this stack) then
go to card "XternalFailed"
pass preOpenStack
end if

Auch hier gilt: war der Ladevorgang nicht erfolgreich (aus welchem Grunde auch immer, genauere Hinweise auf den aufgetretenen Fehler liefert Revolution leider nicht), wird eine entsprechende Fehlermeldung angezeigt.

Wer möchte, kann auch die Liste der von allen Externals bereitgestellten Funktionen und Kommandos nach den benötigten (nämlich den vom gerade betrachteten External gelieferten) Einträgen durchsuchen:

# **** check presence of every single foreseen function ****

local foreseenFunctions; put \
"extFileSize extFileCreationDate extFileModificationDate" && \
"extFileAccessDate extFileOwner extFileGroup extFileAttributes" && \
"extFileInfo" \
into foreseenFunctions

set the wholeMatches to true

repeat for each word foreseenFunction in foreseenFunctions
if (foreseenFunction is not among the lines of the externalFunctions of this stack) then
go to card "XternalFailed"
pass preOpenStack
end if
end repeat

Die ersten Zeilen legen eine (Leerzeichen-separierte) Liste aller erwarteten Funktionen des "FileInfo"-External an (Kommandos werden von "FileInfo" nicht bereitgestellt). Die folgenden Zeilen überprüfen jeden Eintrag dieser Liste auf dessen Präsenz in den "externalFunctions" des FileInfo-Demonstrators - sobald auch nur eine Funktion fehlt, wird eine entsprechende Fehlermeldung angezeigt.

Wurde auch dieser Test erfolgreich bestanden, kann man mit einiger Sicherheit davon ausgehen, daß das External funktionsbereit ist.

Befehlsreferenz - von "FileInfo" bereitgestellte Funktionen

Folgende Funktionen werden vom "FileInfo"-External bereitgestellt:

Kommandos stellt das "FileInfo"-External nicht bereit.

extFileAccessDate

Die Funktion "extFileAccessDate" liefert den Zeitpunkt des letzten Zugriffes auf eine Datei (bzw. ein Verzeichnis). Unter Windows wird die ursprüngliche, vom Betriebssystem gemeldete Zeit zuvor in die "koordinierte Weltzeit" (UTC) umgewandelt, um mit RunRev vergleichbare Zeiten zu liefern. Das Ergebnis ist aber stets eine vorzeichenlose ganze Zahl in demselben Format, wie es auch von "the detailed files" verwendet wird.

Aufruf

Der Aufruf lautet:

  extFileAccessDate (FileSystemEntry)

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird als Ergebnis eine leere Zeichenkette "" zurückgegeben.

Beispiel

Öffnen Sie die "Message Box" der Revolution Entwicklungsumgebung und geben Sie folgende Anweisung ein:

  put extFileAccessDate("Externals")

Sofern "the DefaultFolder" seit dem Start der Entwicklungsumgebung noch nicht verändert wurde, liefert diese Anweisung das Zugriffsdatum des "Externals"-Verzeichnisses innerhalb der Revolution-Installation. Sie finden das Ergebnis im Ausgabebereich der "Message Box".

extFileAttributes

Die Funktion "extFileAttributes" liefert die (Zugriffs-)Attribute einer Datei (bzw. eines Verzeichnisses). Die Funktion kennt zwei Modi:

  • einen (UNIX-)Kompatibilitätsmodus und
  • einen "readable"-Modus mit (Menschen-)lesbaren Ausgaben.

Im Kompatibilitätsmodus ist das Ergebnis eine dreistellige Oktalzahl, welche die unter UNIX üblichen Zugriffsrechte angibt - unter Windows werden diese Rechte nachgebildet, da diese Plattform andere Datei-Attribute als UNIX vorsieht. Der Kompatibilitätsmodus liefert somit dieselben Ergebnisse wie "the detailed files", und bestehende Programme können ohne große Anpassungen auch weiterhin verwendet werden.

Im "readable"-Modus ist das Ergebnis eine Komma-separierte Liste von Schlüsselworten, von denen jedes ein bestimmtes gesetztes Attribut markiert - fehlende Schlüsselworte stehen somit für nicht-gesetzte Attribute. Die verfügbaren Schlüsselworte sind Plattform-spezifisch, auf diese Weise können unter Windows die dort vorgesehenen Attribute ausgelesen werden.

Aufruf (Kompatibilitätsmodus)

Der Funktionsaufruf für den Kompatibilitätsmodus lautet:

  extFileAttributes (FileSystemEntry)

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird als Ergebnis eine leere Zeichenkette "" zurückgegeben.

Unter Windows werden die (eigentlich nur unter UNIX verwendeten) Dateiattribute wie folgt nachgebildet:

  • jede Datei gilt als lesbar (was evtl. nicht stimmt),
  • sofern die (Windows-)Dateiattribute die Datei nicht als "nur lesbar" kennzeichen, gilt die Datei als schreibbar,
  • sofern dem Dateityp (präziser: der Dateiendung) in der Windows-Registry ein "PersistentHandler", aber kein "OpenWithProgId" zugeordnet ist, gilt die Datei als ausführbar,
  • diese Attribute werden einmal ermittelt und dann für alle unter UNIX üblichen Zielgruppen (d.h. "user", "group" und "all") verwendet.

Runtime Revolution scheint intern einen ganz ähnlichen Mechanimus zu verwenden, wenn es darum geht, für "the detailed files" passende Dateiattribute auszugeben.

Unter UNIX (d.h. MacOS X und Linux) werden die vom Betriebssystem gelieferten Dateiattribute direkt ausgegeben.

Aufruf ("readable"-Modus)

Der Aufruf für den "readable"-Modus lautet:

  extFileAttributes (FileSystemEntry, "readable")

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird als Ergebnis eine leere Zeichenkette "" zurückgegeben.

Unter Windows werden die dort üblichen Dateiattribute angezeigt, nämlich:

  • hidden,
  • archived,
  • compressed,
  • normal,
  • readonly und
  • system

Anders als unter UNIX liefern die beiden Varianten unter Windows also unterschiedliche Ergebnisse - dieses Verhalten ist der Rückwärtskompatibilitätmit der Revolution-Funktion "the detailed files" geschuldet.

Unter UNIX (d.h. MacOS X und Linux) gibt die Funktion eine Liste der folgenden Schlüsselworte aus:

  • usercanread,
  • usercanwrite,
  • usercanexec,
  • link
  • groupcanread,
  • groupcanwrite,
  • groupcanexec,
  • allcanread,
  • allcanwrite,
  • allcanexec,

Beispiel

Öffnen Sie die "Message Box" der Revolution Entwicklungsumgebung und geben Sie folgende Anweisung ein:

  put extFileAttributes("Externals")

Sofern "the DefaultFolder" seit dem Start der Entwicklungsumgebung noch nicht verändert wurde, liefert diese Anweisung die Attribute des "Externals"-Verzeichnisses innerhalb der Revolution-Installation - und zwar als dreistellige Oktalzahl. Sie finden das Ergebnis im Ausgabebereich der "Message Box".

Geben Sie stattdessen

  put extFileAttributes("Externals","readable")

ein, so gibt die Funktion eine "lesbare" Liste aller gesetzten Verzeichnisattribute aus.

extFileCreationDate

Die Funktion "extFileCreationDate" liefert den Erstellungszeitpunkt einer Datei (bzw. eines Verzeichnisses). Unter Windows wird die ursprüngliche, vom Betriebssystem gemeldete Zeit zuvor in die "koordinierte Weltzeit" (UTC) umgewandelt, um mit RunRev vergleichbare Zeiten zu liefern. Das Ergebnis ist aber stets eine vorzeichenlose ganze Zahl in demselben Format, wie es auch von "the detailed files" verwendet wird.

Aufruf

Der Aufruf lautet:

  extFileCreationDate (FileSystemEntry)

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird als Ergebnis eine leere Zeichenkette "" zurückgegeben.

Beispiel

Öffnen Sie die "Message Box" der Revolution Entwicklungsumgebung und geben Sie folgende Anweisung ein:

  put extFileCreationDate("Externals")

Sofern "the DefaultFolder" seit dem Start der Entwicklungsumgebung noch nicht verändert wurde, liefert diese Anweisung das Erstellungsdatum des "Externals"-Verzeichnisses innerhalb der Revolution-Installation. Sie finden das Ergebnis im Ausgabebereich der "Message Box".

extFileGroup

Die Funktion "extFileGroup" liefert die numerische Kennung der Benutzergruppe, der der Besitzer der im Aufruf angegebenen Datei (bzw. des angegebenen Verzeichnisses) angehört. Unter Windows wird grundsätzlich eine leere Zeichenkette ("") zurückgegeben.

Aufruf

Der Aufruf lautet:

  extFileGroup (FileSystemEntry)

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird als Ergebnis eine leere Zeichenkette "" zurückgegeben.

Beispiel

Öffnen Sie die "Message Box" der Revolution Entwicklungsumgebung und geben Sie folgende Anweisung ein:

  put extFileGroup("Externals")

Sofern "the DefaultFolder" seit dem Start der Entwicklungsumgebung noch nicht verändert wurde, liefert diese Anweisung die Gruppenkennung des "Externals"-Verzeichnisses innerhalb der Revolution-Installation. Sie finden das Ergebnis im Ausgabebereich der "Message Box".

extFileInfo

Die Funktion "extFileInfo" ist das direkte Pendant zu "the detailed files" bzw. "the detailed folders": sie ermittelt dieselben Datei-/Ordner-Eigenschaften und liefert diese (in einer einzigen Zeile) in demselben Format aus, wie es schon von "the detailed files/folders" bekannt ist.

Aufruf

  extFileInfo (FileSystemEntry)

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird eine leere Zeichenkette zurückgegeben (so, als ob Sie die Ausgabe von "the detailed files" nach einer nicht vorhandenen Datei gefiltert hätten).

Ansonsten wird eine Komma-separierte Liste mit den folgenden Werten ausgegeben:

  • dem Namen des angegebenen "FileSystemEntry" (ohne den Verzeichnispfad zu diesem Eintrag, in URL-enkodierter Form).
  • der Dateigröße in Bytes (bzw. "0" im Falle eines Verzeichnisses).
  • "" (der MacOS-typische Resource-Zweig einer Datei wird nicht untersucht).
  • dem Erstellungsdatum des Dateisystem-Eintrages,
  • dem Datum der letzten Änderung,
  • dem Datum des letzten Zugriffes,
  • "" (die MacOS-typische Sicherungszeit wird nicht untersucht),
  • der Benutzer-Kennung des Dateisystem-Eintrages (unter Windows stets leer),
  • der Gruppen-Kennung des Dateisystem-Eintrages (unter Windows stets leer),
  • den (UNIX-spezifischen) Dateiattributen (unter Windows entsprechend nachgebildet),
  • "" (die MacOS-typischen Erzeuger- und Typ-Kennungen werden nicht untersucht)

Beispiel

Öffnen Sie die "Message Box" der Revolution Entwicklungsumgebung und geben Sie folgende Anweisung ein:

  put extFileInfo("Externals")

Sofern "the DefaultFolder" seit dem Start der Entwicklungsumgebung noch nicht verändert wurde, liefert diese Anweisung die Eigenschaften des "Externals"-Verzeichnisses aus der Revolution-Installation in dem oben erläuterten Format. Sie finden das Ergebnis im Ausgabebereich der "Message Box".

extFileModificationDate

Die Funktion "extFileModificationDate" liefert den Zeitpunkt der letzten Änderung an einer Datei (bzw. einem Verzeichnis). Unter Windows wird die ursprüngliche, vom Betriebssystem gemeldete Zeit zuvor in die "koordinierte Weltzeit" (UTC) umgewandelt, um mit RunRev vergleichbare Zeiten zu liefern. Das Ergebnis ist aber stets eine vorzeichenlose ganze Zahl in demselben Format, wie es auch von "the detailed files" verwendet wird.

Aufruf

Der Aufruf lautet:

  extFileModificationDate (FileSystemEntry)

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird als Ergebnis eine leere Zeichenkette "" zurückgegeben.

Beispiel

Öffnen Sie die "Message Box" der Revolution Entwicklungsumgebung und geben Sie folgende Anweisung ein:

  put extFileModificationDate("Externals")

Sofern "the DefaultFolder" seit dem Start der Entwicklungsumgebung noch nicht verändert wurde, liefert diese Anweisung das Änderungsdatum des "Externals"-Verzeichnisses innerhalb der Revolution-Installation. Sie finden das Ergebnis im Ausgabebereich der "Message Box".

extFileOwner

Die Funktion "extFileOwner" liefert die numerische Kennung des Besitzers einer Datei (bzw. eines Verzeichnisses). Unter Windows wird grundsätzlich eine leere Zeichenkette ("") zurückgegeben.

Aufruf

Der Aufruf lautet:

  extFileOwner (FileSystemEntry)

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird als Ergebnis eine leere Zeichenkette "" zurückgegeben.

Beispiel

Öffnen Sie die "Message Box" der Revolution Entwicklungsumgebung und geben Sie folgende Anweisung ein:

  put extFileOwner("Externals")

Sofern "the DefaultFolder" seit dem Start der Entwicklungsumgebung noch nicht verändert wurde, liefert diese Anweisung die Besitzerkennung des "Externals"-Verzeichnisses innerhalb der Revolution-Installation. Sie finden das Ergebnis im Ausgabebereich der "Message Box".

extFileSize

Die Funktion "extFileSize" liefert die Größe einer Datei (d.h. die genaue Anzahl der darin enthaltenen Bytes). Für ein Verzeichnis wird stattdessen "-1" zurückgegeben.

Aufruf

Der Aufruf lautet:

  extFileSize (FileSystemEntry)

Darin ist "FileSystemEntry" der (absolute oder relative) Pfadname des zu untersuchenden Dateisystem-Eintrages (d.h. einer Datei, eines Verzeichnisses, eines symbolischen Links usw.). Relative Pfadnamen werden relativ zu "the DefaultFolder" ausgewertet.

Wird beim Aufruf kein (oder ein leeres) Argument angegeben, so wirft die Funktion eine Ausnahme. Kann der gegebene Dateisystem-Eintrag nicht untersucht werden (z.B. weil er keinen gültigen Pfadnamen darstellt oder weil der betreffende Eintrag nicht existiert), wird als Ergebnis eine leere Zeichenkette "" zurückgegeben. Bezieht sich der angegebene Eintrag nicht auf eine Datei (sondern insbesondere auf ein Verzeichnis), so lautet das Ergebnis "-1".

Die Funktion "extFileSize" kann also gleichzeitig auch dazu benutzt werden, die Existenz einer Datei (oder eines Verzeichnisses) zu überprüfen.

Beispiel

Öffnen Sie die "Message Box" der Revolution Entwicklungsumgebung und geben Sie folgende Anweisung ein:

  put extFileSize("Read_Me_First.txt")

Sofern "the DefaultFolder" seit dem Start der Entwicklungsumgebung noch nicht verändert wurde, liefert diese Anweisung die Größe der Datei "Read_Me_First.txt" innerhalb der Revolution-Installation. Sie finden das Ergebnis im Ausgabebereich der "Message Box".

Verfügbare Dateien

Folgende Dateien können von hier aus auf den eigenen Rechner heruntergeladen werden (bitte achten Sie beim External auf die passende Plattform: zwar können Sie gerne alle Externals "installieren", dadurch belegen Sie aber mehr Plattenplatz als erforderlich):

Bekannte Probleme

Bislang sind dem Autor folgende Probleme bekannt:

External kann partout nicht geladen werden

Bisweilen weigern sich Stacks innerhalb der Runtime Revolution Entwicklungsumgebung (aus unbekannten Gründen) beharrlich, ein External zu laden, obwohl alle Voraussetzungen dafür erfüllt sind. Abhilfe bietet meist, den betroffenen Stack einfach noch einmal zu speichern (auch wenn daran keine Änderungen vorgenommen wurden) und die Entwicklungsumgebung neu zu starten. Das Problem tritt vor allem unmittelbar nach dem Herunterladen eines Stacks bzw. nach dem Übertragen von einer Plattform auf eine andere auf.

MacOS X: CreationDate und ModificationDate sind identisch

Unter MacOS X sind CreationDate und ModificationDate (derzeit) identisch.

Literaturhinweise

[1]
RunRev - the World's Easiest Programming Language
(siehe http://www.runrev.com)

Runtime Revolution (oder kurz "RunRev") ist eine kombinierte Laufzeit- und Entwicklungsumgebung für Windows, Linux, MacOS X (und weitere Plattformen) mit einer dem Englischen nachempfundenen Skriptsprache. Ähnlich wie bei dem berühmten Vorgänger "HyperCard" können Änderungen im laufenden Programm vorgenommen und ausprobiert werden - die klassische Unterscheidung zwischen Entwicklungsumgebung und fertigem Programm existiert in dieser Strenge nicht mehr.

[2]
Open Source Initiative OSI - The MIT License
(siehe http://www.opensource.org/licenses/mit-license.php)

Die (manchmal auch "X11-Lizenz" genannte) "MIT-Lizenz" ist eine äußerst einfach gehaltene Lizenz, die die freie Verwendung von Software sicherstellt und den Autor gleichzeitig von jeglicher Haftung freistellt.


http://www.Rozek.de/RunRev/FileInfo/index_de.html Stand: 06.10.2009