PhotoRemoteScript (PRS)

In diesem Beitrag beschreiben wir die grundlegenden Themen der Programmiersprache PhotoRemoteScript kurz PRS genannt. Sie basiert auf der weit verbreiteten Programmiersprache Pascal. Wir haben Pascal um Objekte, Funktionen und Variablen erweitert damit Sie PhotoRemote mit dieser Sprache steuern und anpassen können.

Allgemeines

Syntax

program Hallo(output);
 begin
  writeln('Hallo Welt');
 end.

Datentypen

Standarddatenypen

Jeder Variablen muss in einer Variablendeklaration ein Datentyp zugeordnet werden. Der Datentyp bestimmt, welche möglichen Werte die Variable während des Programmablaufs speichern kann. In Pascal gibt es vier einfache Standardtypen, nämlich integer, real, boolean und char.

Die Länge der verschiedenen Datentypen außer boolean sind abhängig vom Compiler. Weiterhin haben viele Implementation noch weitere vordefinierte einfache Datentypen.

Datentyp Werte
integer Ganze Zahlen, etwa 4, 0 oder -17
real Gleitkommazahlen, etwa 0.4 oder -17.74445
boolean die Werte true und false
char ein einzelnes Zeichen, etwa a oder f

Selbstdefinierte Datentypen

In Pascal ist es möglich neben den vier Standardtypen, eigene einfache Datentypen zu definieren. Dabei handelt es sich entweder um Aufzählungstypen oder Ausschnittstypen. Um einen neuen Aufzählungstyp zu definieren, schreibt man alle Werte, die eine Variable dieses Typs speichern können soll, der Reihe nach auf. Im folgenden Beispiel wird ein neuer Typ mit dem Namen tBesteck definiert, wobei das optionale t am Anfang für den weiteren Programmverlauf klarstellen soll, dass es sich um einen Namen eines Typs

handelt: tBesteck = (Gabel, Messer, Loeffel)

Strukturierte Datentypen

Pascal bietet Programmierern vier strukturierte Datentypen, die es ermöglichen, mehrere Werte in einer Variablen zu speichern. In einem Feld (array) kann eine feste, also während der Laufzeit unveränderbare Anzahl von Werten gespeichert werden, die alle vom selben Datentyp sein müssen. Im folgenden Beispiel wird ein Feld definiert, in welchem maximal 100 ganze Zahlen abgespeichert werden können:

tBeispielFeld = array [1..100] of integer;

In einem Verbund (record) kann eine feste Anzahl von Werten gespeichert werden, wobei die Werte von verschiedenem Datentyp sein dürfen. Ein Beispiel einer Definition:

tPerson = record
   Alter : 0..150;
   Haarfarbe : (braun, blond, schwarz);
   Groesse : real;
   kurzsichtig : boolean
end;

Eine beliebig lange Folge von Werten desselben Typs kann in Pascal mithilfe des Datentyps Datei (file) dargestellt werden. Beispiel einer Definition: tBeispielDatei = file of integer

Zeiger

Hauptzweck der Verwendung von Zeigern ist in Pascal das Erstellen von verschiedenen Datenstrukturen, je nach den Vorstellungen des Programmierers. So lassen sich mithilfe von Zeigern etwa Listen und Bäume erstellen, die bei der Speicherung von Daten Vorteile gegenüber Feldern, Mengen, Verbünden und Dateien bieten. Ein weiterer Vorteil von Zeigern ist, dass Zeigervariablen den von ihnen benötigten Speicherplatz während der Laufzeit anfordern können. Der Programmierer muss also nicht schon im Vorhinein definieren, wieviel Platz die Variablen seines Programms bei der Ausführung benötigen werden und kann grundsätzlich vom Minimum ausgehen, welches dann je nach Bedarfsfall überschritten wird.

Programmstrukturen

Charakteristisch für Pascal ist das Konzept der Verschachtelung von Prozeduren und Funktionen. Im Deklarationsteil einer Prozedur oder Funktion können andere Prozeduren und Funktionen definiert werden, die außerhalb nicht sichtbar sind. Beispiel:

program HalloWelt;
    procedure foo;
        procedure bar;
        begin
            writeln('Hallo Welt');
        end;
    begin
        bar
    end;
begin
    foo; //kein Compilerfehler
    bar //Compilerfehler, da bar nicht sichtbar
end.

Kontrollstrukturen

Bedingte Anweisung und Verzweigung

Als bedingte Anweisungen und Verzweigungen stehen in Pascal die if- und die case-Anweisung zur Verfügung. Ein Beispiel einer if-Verzweigung:

if (1 = 2) then
   writeln ('wird nicht ausgeführt')
else if (1 = 1) then
   writeln ('wird ausgeführt')
else
   writeln ('wird nicht ausgeführt');

Schleifen

Pascal bietet drei Arten von Schleifen. Soll vor jedem Schleifendurchlauf eine Abbruchbedingung geprüft werden, verwendet man die while-Anweisung, für eine Prüfung nach jedem Durchlauf die repeat-Anweisung. Für eine vorgegebene Anzahl von Durchläufen gibt es die for-Anweisung. Keine Schleife ist die zum Verarbeiten des record-Typs verwendbare with-Anweisung.

while wert < 100 do
   wert := wert + 1;

Compiler

Der erste Pascal-Compiler selbst entstand auf der CDC Cyber 6000 der ETH Zürich. Daraus entstand dann Pascal 6000, das als erste operative Version eines Compilers der Sprache gesehen werden kann.

PhotoRemote nutzt selber einen internen Pascal- Compiler um die Skripte in Echtzeit zu kompilieren und auszuführen.