@IF val
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
#HW_AMIGAOS3
#HW_AMIGAOS4
#HW_ANDROID
#HW_AROS
#HW_IOS
#HW_LINUX
#HW_MACOS
#HW_MORPHOS
#HW_WARPOS
#HW_WINDOWS
#HW_LITTLE_ENDIAN
#HW_64BIT
#HW_VERSION
#HW_REVISION
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.
@IF #HW_VERSION >= 7 ... @ENDIFDer oben genannte Code teilt dem Präprozessor nur den folgenden Code zu, wenn wir mindestens Version 7 von Hollywood haben.