Bezeichnung
IF -- prüft die Bedingung (V7.0)
Übersicht
@IF val
Beschreibung
Diese Präprozessor-Anweisung prüft für die in val angegebene Bedingung. Wenn sie True ist, wird der Präprozessor das Abarbeiten des Skripts in diesem Block fortsetzen. Wenn val hingegen False ist, wird @IF zum nächsten @ELSEIF, @ELSE, oder @ENDIF-Anweisung verzweigen, um bestimmte Zeilen des Skripts zu überspringen, wenn Bedingungen nicht erfüllt sind.

Beachten Sie, dass die Bedingung ein konstanter Ausdruck sein muss, da @IF auf Präprozessor-Ebene arbeitet, womit Skriptvariablen zu diesem Zeitpunkt nicht verfügbar sind. Sie können numerische Konstanten oder Hollywood-Konstanten verwenden, die entweder mit der Anweisung Const oder dem Konsolenargument -setconstants definiert wurden. Es gibt auch einige integierte Konstanten, die es Ihnen erlauben, die Plattform (und Hollywood-Version) zu ermitteln, auf welcher Hollywood/Ihr Programm gerade läuft. Bitte siehe Liste unten.

Beachten Sie auch, dass die Präprozessor-Anweisung @IF und @ELSEIF nicht melden, wenn Sie eine Konstante verwenden, die überhaupt nicht deklariert wurde. Sie erhalten in diesem Fall keine "Konstante nicht gefunden!" Fehlermeldung. Stattdessen werden die nicht deklarierten Konstanten einfach auf 0 ausgewertet. Der Grund für diesen Entwurf ist, dass die plattformspezifischen Konstanten (siehe unten) nur bei der Ausführung eines Hollywood-Skripts auf der jeweiligen Plattform oder beim Kompilieren definiert werden. Wenn Sie also auf einer bestimmten Plattform auf eine andere Plattform testen, erhalten Sie keinen Fehler, wenn die Plattformkonstante nicht definiert wurde. Stattdessen wird die nicht existierende Konstante einfach auf 0 ausgewertet.

Im Gegensatz zur normalen If-Anweisung arbeitet @IF auf Präprozessor-Ebene. Somit können Sie @IF verwenden, um den Präprozessor zu zwingen, bestimmte Routen zu nehmen oder bestimmte Teile Ihres Codes zu ignorieren. Dies ist bei der normalen If-Anweisung überhaupt nicht möglich, denn sobald diese If-Anweisung ausgeführt wird, hat der Präprozessor seinen Job bereits beendet.

Zum Beispiel könnten Sie den Präprozessor zwingen, verschiedenen Code zu analysieren, je nachdem, auf welcher Plattform Hollywood läuft. Sie können dem Präprozessor auch sagen, dass er bestimmte Teile des Codes ignoriert. Diese Teile werden nicht einmal auf syntaktische Korrektheit geprüft. Sie werden völlig übersprungen, genau wie Kommentare, so könnte alles Mögliche in diesen Blöcken sein.

Hier ist ein Beispiel, das ein anderes Hintergrundbild und einen amderen Fenstertitel für die einzelnen Plattformen verwendet, die von Hollywood unterstützt werden:

 
@IF #HW_AMIGA
   @BGPIC 1, "bg_amiga.png"
   @DISPLAY {Title = "My project (Amiga)"}
@ELSEIF #HW_MACOS
   @BGPIC 1, "bg_macos.png"
   @DISPLAY {Title = "My project (macOS)"}
@ELSEIF #HW_LINUX
   @BGPIC 1, "bg_linux.png"
   @DISPLAY {Title = "My project (Linux)"}
@ELSEIF #HW_WINDOWS
   @BGPIC 1, "bg_windows.png"
   @DISPLAY {Title = "My project (Windows)"}
@ELSE
   @BGPIC 1, "bg_default.png"
   @DISPLAY {Title = "My project (Default)"}
@ENDIF

Für diesen Zweck könnten Sie die normale If-Anweisung nicht verwenden, weil, wie der Name schon sagt, der Präprozessor das Skript analysiert, bevor es ausgeführt wird. Wenn Sie also die normale If-Anweisung verwendet haben, werden alle Präprozessor-Anweisung im obigen Code analysiert und ausgeführt, weil die Präprozessor-Anweisungen die Laufzeitanweisungen wie die normale If-Anweisung ignorieren würde.

Wie Sie oben sehen können, gibt es einige integrierte Konstanten, die es Ihnen erlauben, die Plattform zu überprüfen, auf der Hollywood gerade läuft oder kompiliert. Folgende integrierte Konstanten stehen zur Verfügung:

#HW_AMIGA
Definiert AmigaOS oder kompatible Plattformen, z.B. AmigaOS, MorphOS, AROS, WarpOS.

#HW_AMIGAOS3
Definiert AmigaOS 3.

#HW_AMIGAOS4
Definiert AmigaOS 4.

#HW_ANDROID
Definiert Android.

#HW_AROS
Definiert AROS.

#HW_IOS
Definiert iOS.

#HW_LINUX
Definiert Linux.

#HW_MACOS
Definiert macOS.

#HW_MORPHOS
Definiert MorphOS.

#HW_WARPOS
Definiert WarpOS.

#HW_WINDOWS
Definiert Windows.

#HW_LITTLE_ENDIAN
Definiert alle Little-Endian-Systeme.

#HW_64BIT
Definiert 64-Bit Systeme.

#HW_VERSION
Enthält den Ganzzahlenteil der Hollywood-Versionsnummer.

#HW_REVISION
Enthält die Nachkommazahl der Hollywood-Versionsnummer.

Beachten Sie, dass Hollywood bei der Kompilierung Ihres Skripts in eine ausführbare Datei automatisch die Konstanten der Zielarchitektur festlegt. Zum Beispiel wenn Sie Ihr Skript unter Windows für AmigaOS 3 kompilieren, wird Hollywood die Konstanten #HW_AMIGA und #HW_AMIGAOS3 setzen. Die Konstanten #HW_WINDOWS und #HW_LITTLE_ENDIAN werden nicht gesetzt. Sie werden nur gesetzt, wenn Sie für Windows kompilieren oder Ihr Skript auf einem Windows-Rechner ausführen.

Beachten Sie auch, dass bei der Erstellung von Applets keine der oben genannten architektonischen Konstanten gesetzt werden. Applets sind vollplattform-agnostisch, also wenn man ein Applet kompiliert, wird keine der architektonischen Konstanten gesetzt. Eine Ausnahme ist, wenn Sie ein Applet explizit für Android oder iOS kompilieren, indem Sie "android" oder "ios" an das Konsolenargument -exetype übergeben. In diesem Fall werden #HW_ANDROID bzw. #HW_IOS gesetzt. Wenn Sie ein plattformunabhängiges Applet kompilieren, indem Sie "applet" an das Argument -exetype übergeben, wird keine der architektonischen Konstanten gesetzt.

Eingaben
val
Bedingung, welche geprüft wird; muss ein konstanter Ausdruck sein
Beispiel
@IF #HW_VERSION >= 7
   ...
@ENDIF
Der oben genannte Code teilt dem Präprozessor nur den folgenden Code zu, wenn wir mindestens Version 7 von Hollywood haben.

Navigation zeigen