UIL-Dateiformat
Zweck
Enthält Informationen zur Benutzerschnittstelle für eine widgetbasierte Anwendung.
Beschreibung
UIL (User Interface Language) wird verwendet, um den Anfangsstatus einer Benutzerschnittstelle für eine widgetbasierte Anwendung zu beschreiben. UIL beschreibt die in der Schnittstelle verwendeten Widgets, die Ressourcen dieser Widgets und die Callbacks dieser Widgets. Eine UIL-Datei wird mit dem Befehl uil oder der aufrufbaren Compilerfunktion Uil in eine UID-Datei kompiliert. Der Inhalt der kompilierten UID-Datei kann dann von den verschiedenen Motif-Funktionen Resource Manager (MRM) innerhalb eines Anwendungsprogramms aufgerufen werden.
Die Syntax für UIL lautet wie folgt:
MODUL ModuleName [ NAMEN = CASE_INSENSITIVE | CASE_SENSITIVE ] [ ZEICHENSATZ = CharacterSet ] [ OBJEKTE = { Widgetname = GADGET | WIDGET [...] } ] { [ [ Abschnitt 'Wert' ] | [ Prozedurabschnitt ] | [ Listenabschnitt ] | [ Objektabschnitt ] | [ Identifikationsabschnitt ] | [ ... ] ] } MODUL BEENDEN
Dateiformat
UIL ist eine Sprache mit freiem Format. Dies bedeutet, dass übergeordnete Konstrukte wie Objekt-und Wertdeklarationen nicht in einer bestimmten Spalte beginnen müssen und eine beliebige Anzahl von Zeilen umfassen können. Untergeordnete Konstrukte wie Schlüsselwörter und Interpunktionszeichen können auch in einer beliebigen Spalte beginnen. Mit Ausnahme von Zeichenfolgeliteralen und Kommentaren können sie sich jedoch nicht über mehrere Zeilen erstrecken.
Der UIL-Compiler akzeptiert Eingabezeilen mit einer Länge von bis zu 132 Zeichen.
| Element | Beschreibung |
|---|---|
| MODUL ModuleName | Der Name, unter dem das UIL-Modul in der UID-Datei bekannt ist Dieser Name wird in der UID-Datei zur späteren Verwendung beim Abrufen von Ressourcen durch den MRM gespeichert. Dieser Modulname ist immer in Großbuchstaben geschrieben. |
| NAMES = CASE_INSENSITIVE | CASE_SENSITIVE | Gibt an, ob bei Namen die Groß-/Kleinschreibung beachtet werden muss oder nicht. Standardmäßig muss die Groß-/Kleinschreibung beachtet werden. Die Klausel mit Beachtung der Groß-/Kleinschreibung sollte die erste Klausel im Modulheader sein und muss vor allen Anweisungen stehen, die einen Namen enthalten. Wenn bei Namen in einem UIL-Modul die Groß-/Kleinschreibung beachtet werden muss, müssen die UIL-Schlüsselwörter in diesem Modul in Kleinbuchstaben angegeben werden. Jeder Name wird in der UIL-Datei in derselben Groß-/Kleinschreibung wie im UIL-Modul gespeichert. Wenn bei Namen die Groß-/Kleinschreibung nicht beachtet werden muss, können Schlüsselwörter in Großbuchstaben, in Kleinbuchstaben oder in gemischter Groß-/Kleinschreibung angegeben werden, und die entsprechenden Namen in Großbuchstaben werden in der UID-Datei gespeichert. |
| ZEICHENSATZ = CharacterSet | Gibt den Standardzeichensatz für Zeichenfolgeliterale im Modul an, die ihren Zeichensatz nicht explizit festlegen. Wenn diese Klausel fehlt, ist der Standardzeichensatz die Codekomponente der Umgebungsvariablen LANG oder der Wert von XmFALLBACK_CHARSET, wenn LANG nicht gesetzt ist oder keine Codekomponente hat. Der Wert von XmFALLBACK_CHARSET wird vom UIL-Anbieter definiert, beträgt jedoch in der Regel ISO8859-1 (entspricht ISO_LATIN1 ). Die Verwendung dieser Klausel inaktiviert die Verarbeitung aller lokalisierten Zeichenfolgeliterale, die durch das Compiler-Flag -s oder das Datenstrukturelement Uil_command_type use_setlocale_flagaktiviert werden. |
| OBJECTS = { Widgetname = GADGET | WIDGET;} | Gibt an, ob das mit der Variablen WidgetName angegebene Widget-oder Gadgetformular des Steuerelements standardmäßig verwendet wird. Das Widgetformular wird standardmäßig verwendet. Die angegebene Steuerung sollte sowohl über eine Widget- als auch eine Gadget-Version verfügen, zum Beispiel: XmCascadeButton, XmLabel, XmPushButton, XmSeparator und XmToggleButton. Die Form von mehr als einem Steuerelement kann angegeben werden, indem sie durch;(Semikolon). Das Gadget oder das Widgetformular einer Instanz eines Steuerelements kann mit den Schlüsselwörtern GADGET und WIDGET in einer bestimmten Objektdeklaration angegeben werden. |
| ValueSection | Bietet eine Möglichkeit, einen Wertausdruck oder ein Literal zu benennen. Der Wertname kann dann von Deklarationen referenziert werden, die an anderer Stelle im UIL-Modul in jedem Kontext auftreten, in dem ein Wert verwendet werden kann. Werte können vorwärts referenziert werden. Weitere Informationen finden Sie unterWerteabschnitte. |
| ProcedureSection | Definiert die Callback-Funktionen, die von einem Widget verwendet werden, und die Erstellungsfunktionen für benutzerdefinierte Widgets. Diese Definitionen werden für die Fehlerprüfung verwendet. Weitere Informationen finden Sie unter "Prozedurabschnitte". |
| ListSection | Bietet eine Möglichkeit, eine Gruppe von Argumenten, Steuerelementen (untergeordnete Elemente), Callbacks oder Prozeduren für die spätere Verwendung im UIL-Modul zu gruppieren. Listen können andere Listen enthalten, sodass Sie eine Hierarchie einrichten können, um deutlich anzuzeigen, welche Argumente, Steuerelemente, Callbacks und Prozeduren für welche Widgets gelten. Weitere Details finden Sie unterAbschnitte auflisten. |
| ObjectSection | Definiert die Objekte, aus denen die Benutzerschnittstelle der Anwendung besteht. Sie können auf die Objektnamen in Deklarationen verweisen, die an anderer Stelle im UIL-Modul in jedem Kontext auftreten, in dem ein Objektname verwendet werden kann (z. B. in einer Steuerelementliste, als symbolische Referenz auf eine Widget-ID oder als Argument TagValue für eine Callback-Prozedur). Objekte können vorwärts referenziert werden. Weitere Informationen finden Sie unterObjektabschnitte. |
| IdentifierSection | Definiert eine Laufzeitbindung von Daten an Namen, die im UIL-Modul erscheinen. Weitere Informationen finden Sie unterKennungsabschnitte. |
Die UIL-Datei kann auch Kommentare und Anweisungen enthalten. Diese sowie die Hauptelemente des Dateiformats UIL werden in den folgenden Abschnitten beschrieben.
Kommentar
Kommentare können eines von zwei Formen annehmen, von denen keines verschachtelt werden kann:
- Der Kommentar wird mit der Sequenz/* gefolgt vom Text des Kommentars eingeführt und mit der Sequenz */ beendet. Diese Form von Kommentar kann mehrere Quellenzeilen umfassen.
- Der Kommentar wird mit einem! (Ausrufezeichen) gefolgt vom Text des Kommentars und endet am Ende der Quellenzeile.
Werteabschnitte
Ein Wertabschnitt besteht aus dem Schlüsselwort VALUE gefolgt von einer Folge von Wertdeklarationen. Die Syntax lautet wie folgt:
VALUE ValueName : [ EXPORTIERT | PRIVATE ] ValueExpression | IMPORTIERT ValueType ;
ValueExpression wird ValueName zugewiesen oder ein ValueType wird einem importierten Wertnamen zugewiesen. Eine Wertdeklaration bietet eine Möglichkeit, einen Wertausdruck oder ein Literal zu benennen. Der Wertname kann von Deklarationen referenziert werden, die später im UIL-Modul in jedem Kontext auftreten, in dem ein Wert verwendet werden kann. Werte können vorwärts referenziert werden.
| Element | Beschreibung |
|---|---|
| EXPORTIERT | Ein Wert, den Sie als exportiert definieren, wird in der UID-Datei als benannte Ressource gespeichert und kann über den Namen in anderen UID-Dateien referenziert werden. Wenn Sie einen Wert als exportiert definieren, sucht MRM außerhalb des Moduls, in dem der exportierte Wert deklariert ist, um seinen Wert zur Laufzeit abzurufen. |
| PRIVATE | Ein privater Wert ist ein Wert, der nicht importiert oder exportiert wird. Ein Wert, den Sie als privat definieren, wird nicht als eindeutige Ressource in der UID-Datei gespeichert. Sie können auf einen privaten Wert nur im UIL-Modul verweisen, das die Wertdeklaration enthält. Der Wert oder das Objekt wird direkt in alles im UIL-Modul integriert, das auf die Deklaration verweist. |
| Importiert | Ein Wert, den Sie als importiert definieren, ist ein Wert, der als benannte Ressource in einer UID-Datei definiert ist. MRM löst diese Deklaration mit der entsprechenden exportierten Deklaration zur Anwendungslaufzeit auf. |
Standardmäßig sind Werte und Objekte privat. Die folgende Liste enthält die unterstützten Werttypen in UIL:
- ANY
- Argument
- BOOLEAN
- COLOR
- KOLORTABELLE
- COMPOUND_STRING
- GLEITKOMMA
- SCHRI.
- FONT_TABELLE
- FONTSET
- Symbol
- INTEGER
- INTEGER_TABELLE
- keysym
- Grund
- EINFACHE_FLOAT
- string
- STRING_TABELLE
- ÜBERTRAGUNGSTABELLE
- BREITER_ZEICHEN
- Fensterobjekt
Prozedurabschnitte
Ein Prozedurabschnitt besteht aus dem Schlüsselwort PROCEDURE gefolgt von einer Folge von Prozedurdeklarationen. Die Syntax lautet wie folgt:
PROCEDURE ProcedureName [ ( [ ValueType ] ) ] ;
Verwenden Sie eine Prozedurdeklaration, um Folgendes zu deklarieren:
- Eine Funktion, die als Callback-Funktion für ein Widget verwendet werden kann
- Die Erstellungsfunktion für ein benutzerdefiniertes Widget.
Sie können auf einen Prozedurnamen in Deklarationen verweisen, die später im UIL-Modul in jedem Kontext auftreten, in dem eine Prozedur verwendet werden kann. Prozeduren können vorwärts referenziert werden. Sie können keinen Namen verwenden, den Sie in einem anderen Kontext als Prozedurnamen verwendet haben.
In einer Prozedurdeklaration können Sie angeben, dass ein Parameter zur Laufzeit an die entsprechende Callback-Funktion übergeben wird. Dieser Parameter wird als Callback-Tagbezeichnet. Sie können den Datentyp des Callback-Tags angeben, indem Sie den Datentyp nach dem Prozedurnamen in runde Klammern setzen. Wenn Sie das Modul kompilieren, prüft der UIL-Compiler, ob das Argument, das Sie in Referenzen auf die Prozedur angeben, diesen Typ hat. Beachten Sie, dass der Datentyp des Callback-Tags einer der gültigen UIL-Datentypen sein muss. Sie können ein Widget als Callback-Tag verwenden, solange das Widget in derselben Widgethierarchie wie der Callback definiert ist, d. h., sie müssen einen gemeinsamen Vorgänger haben, der sich in derselben UIL-Hierarchie befindet.
Die folgende Liste fasst zusammen, wie der UIL-Compiler den Argumenttyp und die Argumentanzahl abhängig von der Prozedurdeklaration überprüft:
| Element | Beschreibung |
|---|---|
| Keine Parameter | Es findet keine Prüfung des Argumenttyps oder der Argumentanzahl statt. Sie können 0 oder 1 Argumente in der Prozedurreferenz angeben. |
| ( ) | Prüft, ob die Argumentanzahl 0 ist. |
| (BELIEBIG) | Prüft, ob die Argumentanzahl 1 ist. Überprüft den Argumenttyp nicht. Verwenden Sie den Datentyp ANY, um die Typüberprüfung von Prozedurtags zu verhindern. |
| (Typ) | Sucht nach einem Argument des angegebenen Typs. |
| (ClassName) | Sucht nach einem Widgetargument der angegebenen Widgetklasse. |
Es ist zwar möglich, einen beliebigen UIL-Datentyp zu verwenden, um den Typ eines Tags in einer Prozedurdeklaration anzugeben, aber Sie müssen diesen Datentyp in der Programmiersprache darstellen können, die Sie verwenden. Einige Datentypen (z. B. Integer, Boolean und String) sind gängige Datentypen, die von den meisten Programmiersprachen erkannt werden. Andere UIL-Datentypen (z. B. Zeichenfolgetabellen) sind komplizierter und erfordern möglicherweise die Einrichtung einer entsprechenden Datenstruktur in der Anwendung, um einen Tag dieses Typs an eine Callback-Funktion zu übergeben.
Sie können auch eine Prozedurdeklaration verwenden, um die Erstellungsfunktion für ein benutzerdefiniertes Widget anzugeben. In diesem Fall geben Sie keine formalen Parameter an. Die Prozedur wird mit den drei Standardargumenten aufgerufen, die an alle Widgeterstellungsfunktionen übergeben werden.
Abschnitte auflisten
Ein Listenabschnitt besteht aus dem Schlüsselwort LIST gefolgt von einer Folge von Listendeklarationen. Die Syntax lautet wie folgt:
LISTE ListName : { Listenelement; [...] } [...]
Sie können auch Listenabschnitte verwenden, um eine Gruppe von Argumenten, Steuerelementen (untergeordnete Elemente), Callbacks oder Prozeduren für die spätere Verwendung im UIL-Modul zu gruppieren. Listen können andere Listen enthalten, sodass Sie eine Hierarchie einrichten können, um deutlich anzuzeigen, welche Argumente, Steuerelemente, Callbacks und Prozeduren für welche Widgets gelten. Sie können die verschiedenen Listentypen nicht mischen. Eine Liste eines bestimmten Typs darf keine Einträge eines anderen Listentyps enthalten oder auf den Namen eines anderen Listentyps verweisen. Ein Listenname ist immer privat für das UIL-Modul, in dem Sie die Liste deklarieren, und kann nicht als benannte Ressource in einer UID-Datei gespeichert werden.
Die zusätzlichen Listentypen werden in den folgenden Abschnitten beschrieben.
Argumentlistenstruktur
Eine Argumentenliste definiert, welche Argumente im Parameter arguments-list angegeben werden, wenn die Erstellungsfunktion für ein bestimmtes Objekt zur Laufzeit aufgerufen wird. Eine Argumentliste gibt auch die Werte für diese Argumente an. Argumentlisten haben die folgende Syntax:
LIST ListName : ARGUMENTS { Argumentname = Wertausdruck; [...] } [...]
Der Argumentname (ArgumentName) muss entweder ein integrierter Argumentname oder ein benutzerdefinierter Argumentname sein, der mit der Funktion ARGUMENTS angegeben wird.
Wenn Sie einen integrierten Argumentnamen als Argumentlisteneintrag in einer Objektdefinition verwenden, überprüft der UIL-Compiler den Argumentnamen, um sicherzustellen, dass er vom Typ des zu definierenden Objekts unterstützt wird. Wird derselbe Argumentname mehrmals in einer angegebenen Argumentliste angezeigt, ersetzt der letzte Eintrag, der diesen Argumentnamen verwendet, alle vorherigen Einträge mit diesem Namen und der Compiler gibt eine Nachricht aus.
Einige Argumente, wie XmNitems und XmNitemCount, werden vom UIL-Compiler gekoppelt. Wenn Sie eines der gekoppelten Argumente angeben, setzt der Compiler auch das andere. Das gekoppelte Argument ist nicht verfügbar.
AIXwindows und das X Toolkit (Intrinsics) unterstützen Integritätsbedingungsargumente. Ein Integritätsbedingungsargument ist ein Argument, das über die normalerweise verfügbaren Argumente hinaus an untergeordnete Elemente eines Objekts übergeben wird. Beispielsweise erteilt das Widget Formular seinen untergeordneten Elementen eine Gruppe von Bedingungsargumenten. Diese Argumente steuern die Position der untergeordneten Elemente im Widget Formular .
Im Gegensatz zu den Argumenten, die zum Definieren der Attribute eines bestimmten Widgets verwendet werden, werden Integritätsbedingungsargumente ausschließlich zum Definieren zusätzlicher Attribute der untergeordneten Elemente eines bestimmten Widgets verwendet. Diese Attribute wirken sich auf das Verhalten der untergeordneten Elemente innerhalb ihres übergeordneten Elements aus. Um den untergeordneten Elementen Integritätsbedingungsargumente bereitzustellen, schließen Sie die Argumente in die Argumentliste für das untergeordnete Element ein.
Rückruflistenstruktur
Verwenden Sie eine Callback-Liste, um zu definieren, welche Callback-Gründe von einem bestimmten Widget zur Laufzeit verarbeitet werden sollen. Callback-Listen haben die folgenden Syntax:
LIST ListName : CALLBACKS { ReasonName = PROCEDURE Prozedurname [ ( [ Wertausdruck ] ) ]; | Ursachenname = Prozedurliste ; [...] } [...]
Für AIXwindows -Widgets muss der Ursachenname ein integrierter Ursachenname sein. Für ein benutzerdefiniertes Widget können Sie einen Ursachennamen verwenden, den Sie zuvor mit der Funktion REASON angegeben haben. Wenn Sie eine integrierte Ursache in einer Objektdefinition verwenden, stellt der UIL-Compiler sicher, dass die Ursache vom Typ des zu definierenden Objekts unterstützt wird.
Wenn derselbe Grund mehr als einmal in einer Rückrufliste angezeigt wird, ersetzt der letzte Eintrag, der auf diesen Namen verweist, alle vorherigen Einträge mit demselben Grund. Der UIL-Compiler gibt dann eine Diagnosenachricht aus.
Wenn Sie einen benannten Wert für das Prozedurargument (Callback-Tag) angeben, muss der Datentyp des Werts mit dem Typ übereinstimmen, der für den Callback-Tag in der entsprechenden Prozedurdeklaration angegeben wurde. Wenn Sie einen Widgetnamen als Prozedurwertausdruck angeben, müssen Sie auch den Typ des Widgets und ein Leerzeichen vor dem Namen des Widgets angeben.
Da der UIL-Compiler eher eine UID-Datei als ein Objektmodul (.o) erzeugt, erfolgt die Bindung des UIL-Namens an die Adresse des Eingangspunkts und dann an die Prozedur nicht durch den Loader. Stattdessen wird diese Bindung zur Laufzeit mit der MrmRegisterNames MRM-Funktion hergestellt. Sie rufen diese Funktion auf, bevor Sie Objekte abrufen, und geben ihr sowohl die UIL-Namen als auch die Prozeduradressen jedes Rückrufs. Der Name, den Sie bei MRM im Anwendungsprogramm registrieren, muss mit dem Namen übereinstimmen, den Sie für die Prozedur im UIL-Modul angegeben haben.
Jede Callback-Prozedur hat drei Argumente empfangen. Die ersten beiden Argumente haben für jeden Callback dasselbe Format. Die Form des dritten Arguments variiert von Objekt zu Objekt.
Das erste Argument ist die Adresse der Datenstruktur, die von AIXwindows für diese Objektinstanz verwaltet wird. Diese Adresse wird als Widget-ID für dieses Objekt bezeichnet.
Das zweite Argument ist die Adresse des Werts, den Sie in der Callbackliste für diese Prozedur angegeben haben. Wenn Sie kein Argument angeben, ist die Adresse null.
Das dritte Argument ist der Ursachenname, den Sie in der Callbackliste angegeben haben.
Struktur der Steuerelementliste
Eine Steuerelementliste definiert, welche Objekte untergeordnete Elemente eines bestimmten Objekts sind oder von einem bestimmten Objekt gesteuert werden. Jeder Eintrag in einer Steuerelementliste hat folgende Syntax:
LISTE ListName : KONTROLLEN { [ ChildName ] [ VERWALTET | UNVERWALTET ] Objektdefinition; [...] } [...]
Wenn Sie das Schlüsselwort MANAGED zur Laufzeit angeben, wird das Objekt erstellt und verwaltet. Wenn Sie das Schlüsselwort UNMANAGED zur Laufzeit angeben, wird das Objekt nur erstellt. Objekte werden standardmäßig verwaltet.
Mit dem Parameter ChildName können Sie Ressourcen für die automatisch erstellten untergeordneten Elemente eines bestimmten Steuerelements angeben. Namen für automatisch erstellte untergeordnete Elemente werden gebildet, indem Xm_ an den Namen des untergeordneten Widgets angehängt wird. Dieser Name wird in der Dokumentation für das übergeordnete Widget angegeben.
Anders als die Argumentliste und die Rückrufliste ersetzt ein Steuerelementlisteneintrag, der mit einem vorherigen Eintrag identisch ist, nicht den vorherigen Eintrag. Zur Laufzeit bewirkt jeder Steuerelementlisteneintrag, dass ein untergeordnetes Element erstellt wird, wenn das übergeordnete Element erstellt wird. Wenn dieselbe Objektdefinition für mehrere untergeordnete Elemente verwendet wird, werden zur Laufzeit mehrere Instanzen des untergeordneten Elements erstellt.
Prozedurlistenstruktur
Sie können mehrere Prozeduren für einen Callback-Grund in UIL angeben, indem Sie eine Prozedurliste definieren. Wie bei anderen Listentypen können Prozedurlisten inline oder in einem Listenabschnitt definiert und nach Namen referenziert werden.
Wenn Sie einen Grund mehrmals definieren (z. B. wenn der Grund sowohl in einer referenzierten Prozedurliste als auch in der Callback-Liste für das Objekt definiert ist), werden frühere Definitionen durch die neueste Definition überschrieben. Die Syntax für eine Prozedurliste lautet wie folgt:
LIST ListName : PROCEDURES { Prozedurname [ ( [ Wertausdruck ] ) ]]; [...] } [...]
Wenn Sie einen Widgetnamen als Prozedurwertausdruck angeben, müssen Sie auch den Typ des Widgets und ein Leerzeichen vor dem Namen des Widgets angeben.
Objektabschnitte
Ein Objektabschnitt besteht aus dem Schlüsselwort OBJECT gefolgt von einer Folge von Objektdeklarationen. Die Syntax lautet wie folgt:
OBJECT ObjectName : [ EXPORTIERT | PRIVAT | IMPORTIERT ] ObjectType [ PROCEDURE CreationFunction ] [ ObjectName [ WIDGET | GADGET ] | { Listendefinitionen } ]
Verwenden Sie eine Objektdeklaration, um die Objekte zu definieren, die in der UID-Datei gespeichert werden. Sie können den Objektnamen in Deklarationen referenzieren, die an anderer Stelle im UIL-Modul in jedem Kontext vorkommen, in dem ein Objektname verwendet werden kann (z. B. in einer Steuerelementliste, als symbolische Referenz auf eine Widget-ID oder als Argument TagValue für eine Callback-Prozedur). Objekte können vorwärts referenziertwerden, d. h., Sie können einen Objektnamen deklarieren, nachdem Sie darauf verwiesen haben. Alle Verweise auf einen Objektnamen müssen mit dem in der Objektdeklaration angegebenen Typ des Objekts konsistent sein. Sie können ein Objekt als exportiert, importiert oder privat angeben.
Die Objektdefinition kann eine Folge von Listen enthalten, die die Argumente, die Hierarchie und die Callbacks für das Widget definieren. Sie können nur eine Liste jedes Typs für ein Objekt angeben. Wenn Sie ein benutzerdefiniertes Widget deklarieren, müssen Sie einen Verweis auf die Widgeterstellungsfunktion für das benutzerdefinierte Widget einschließen.
Verwenden Sie das Schlüsselwort GADGET oder WIDGET , um den Objekttyp anzugeben oder die Standardvariante für diesen Objekttyp zu überschreiben. Sie können den AIXwindows -Namen eines Objekttyps, der über eine Gadget-Variante verfügt (z. B. XmLabelGadget ), als Attribut einer Objektdeklaration verwenden. Der ObjectType kann ein beliebiger Objekttyp, einschließlich Gadgets, sein. Sie müssen das Schlüsselwort GADGET oder WIDGET nur in der Deklaration eines Objekts angeben, nicht, wenn Sie auf das Objekt verweisen. Sie können für ein benutzerdefiniertes Objekt nicht das Schlüsselwort GADGET oder WIDGET angeben. Benutzerdefinierte Objekte sind immer Widgets.
ID-Abschnitte
Im Kennungsabschnitt können Sie eine Kennungdefinieren, einen Mechanismus, mit dem die Laufzeitbindung von Daten an Namen, die in einem UIL-Modul angezeigt werden, erreicht wird. Der Kennungsabschnitt besteht aus dem reservierten Schlüsselwort IDENTIFIER gefolgt von einer Liste von Namen. Auf jeden Namen folgt ein Semikolon (;). Die Syntax lautet wie folgt:
IDENTIFIER IdentifierName; [...; ]
Sie können diese Namen später im UIL-Modul als Wert eines Arguments für ein Widget oder als Tagwert für eine Callback-Prozedur verwenden. Verwenden Sie zur Laufzeit die Funktionen MrmRegisterNames und MrmRegisterNamesInHierarchy MRM, um den Bezeichnernamen mit den Daten (oder im Falle von Callbacks mit der Adresse der Daten) zu verknüpfen, die mit dem Bezeichner verbunden sind.
Jedes UIL-Modul hat einen einzigen Namensbereich. Daher können Sie den Namen, den Sie für einen Wert, ein Objekt oder eine Prozedur verwendet haben, nicht als Kennungsnamen in demselben Modul verwenden.
Der UIL-Compiler führt keine Typenprüfung für die Verwendung von Kennungen in einem UIL-Modul durch. Im Gegensatz zu einem UIL-Wert ist einer Kennung kein UIL-Typ zugeordnet. Unabhängig davon, für welchen bestimmten Typ ein Widget-Argument oder Callback-Prozedur-Tag definiert ist, können Sie eine Kennung in diesem Kontext anstelle eines Werts des entsprechenden Typs verwenden.
Um auf diese Kennungsnamen in einem UIL-Modul zu verweisen, verwenden Sie den Namen der Kennung an einer beliebigen Stelle, an der ihr Wert verwendet werden soll.
Include-Anweisungen
Die Include-Anweisung integriert den Inhalt einer angegebenen Datei in ein UIL-Modul. Dieser Mechanismus ermöglicht mehreren UIL-Modulen die gemeinsame Nutzung allgemeiner Definitionen. Die Syntax für die Anweisung include lautet wie folgt:
DATEI FileName EINBINDEN ;
Der UIL-Compiler ersetzt die Include-Anweisung durch den Inhalt der Include-Datei und verarbeitet sie so, als wären diese Inhalte in der aktuellen UIL-Quellendatei angezeigt worden.
Sie können Include-Dateien verschachteln, d. h., eine Include-Datei kann Include-Anweisungen enthalten. Der UIL Compiler kann bis zu 100 Referenzen verarbeiten (einschließlich der Datei, die das UIL Modul enthält). Daher können Sie bis zu 99 Dateien in ein einzelnes UIL-Modul einschließen, einschließlich verschachtelter Dateien. Jedes Mal, wenn eine Datei geöffnet wird, wird als Referenz gezählt. Daher wird dieselbe Datei zweimal als zwei Referenzen gezählt.
Der Zeichenausdruck ist eine Dateispezifikation, die die einzuschließenden Datei identifiziert. Die Regeln für die Suche nach der angegebenen Datei ähneln den Regeln für die Suche nach Headerdateien ( .h), die die Include-Anweisung #includemit einer Zeichenfolge in Anführungszeichen in der Programmiersprache C verwenden. Der Befehl uil verwendet die Option -I zum Angeben eines Suchverzeichnisses für Include-Dateien. Es gibt folgende Suchregeln:
- Wenn Sie ein Verzeichnis angeben, durchsucht der UIL-Compiler nur dieses Verzeichnis nach der Include-Datei.
- Wenn Sie kein Verzeichnis angeben, sucht der UIL-Compiler die Include-Datei im Verzeichnis der Hauptquellendatei.
- Wenn die Include-Datei nicht im Hauptquellendateiverzeichnis gefunden wird, sucht der Compiler in demselben Verzeichnis wie die Quellendatei.
Sprachsyntax
Dieser Abschnitt enthält Informationen zu folgenden Themen:
- Namen und Zeichenfolgen
- Datentypen
- Zeichenfolgeliterale
- Ganzzahlige Literale
- Boolesche Literale
- Gleitkommaliterale
- Datentyp ANY
- Ausdrücke
- Funktionen.
Namen und Zeichenfolgen
Namen können aus den Zeichen A bis Z, a bis z, 0 bis 9, $(Dollarzeichen) und _ (Unterstreichungszeichen) bestehen. Namen dürfen nicht mit einer Ziffer (0 bis 9) beginnen. Die maximale Länge eines Namens beträgt 31 Zeichen.
UIL bietet Ihnen über eine Klausel im MODULE -Header die Möglichkeit, Namen mit Beachtung der Groß-/Kleinschreibung oder ohne Beachtung der Groß-/Kleinschreibung zu verwenden. Wenn bei Namen beispielsweise die Groß-/Kleinschreibung beachtet werden muss, unterscheiden sich die Namen "sample" und "Sample" voneinander. Wenn Namen von der Groß-/Kleinschreibung unabhängig sind, werden diese Namen als derselbe Name behandelt und können austauschbar verwendet werden. Standardmäßig geht UIL davon aus, dass bei Namen die Groß-/Kleinschreibung beachtet werden muss.
Im Modus ohne Beachtung der Groß-/Kleinschreibung gibt der Compiler alle Namen in der UID-Datei in Großbuchstaben aus. Im Modus mit Beachtung der Groß-/Kleinschreibung werden Namen in der UIL-Datei genauso wie in der Quellendatei angezeigt.
Im Folgenden sind die reservierten Schlüsselwörter aufgelistet, die nicht für vom Programmierer definierte Namen verwendet werden können.
| Element | Beschreibung | Beschreibung |
|---|---|---|
| Argumente | Callbacks | Steuerelemente |
| ENDE | EXPORTIERT | FALSCH |
| GADGET | Kennung | Include |
| LIST | Modul | Aus |
| on | Objekt | PRIVATE |
| Prozedur | Prozeduren | true |
| Wert | Fensterobjekt |
Im Folgenden werden nicht reservierte UIL-Schlüsselwörter aufgelistet. Diese Schlüsselwörter können als programmiererdefinierte Namen verwendet werden. Wenn Sie jedoch eines dieser Schlüsselwörter als Namen verwenden, können Sie die von UIL bereitgestellte Form dieses Schlüsselworts nicht verwenden.
Integrierte Argumentnamen (z. B. XmNx, XmNheight ) Integrierte Grundnamen (z. B. XmNactivateCallback, XmNhelpCallback ) Zeichensatznamen (z. B. ISO_LATIN1, ISO_HEBREW_LR ) Konstante Wertnamen (z. B. XmMENU_OPTION, XmBROWSE_SELECT ) Objekttypen (z. B. XmPushButton, XmBulletinBoard )
| Element | Beschreibung | Beschreibung |
|---|---|---|
| ANY | Datei | Importiert |
| Argument | GLEITKOMMA | Grund |
| ASCIZ_STRING_TABELLE | SCHRI. | RGB |
| ASCIZ_TABELLE | FONTSET | EINFACHE_FLOAT |
| HINTERGRUND | FONT_TABELLE | string |
| BOOLEAN | VORDERGRUND | STRING_TABELLE |
| CASE_INSENSITIVE | Symbol | ÜBERTRAGUNGSTABELLE |
| Groß-/Kleinschreibung beachten | INTEGER | NICHT VERWALTET |
| Zeichensatz | INTEGER_TABELLE | BENUTZERDEFINIERT |
| COLOR | keysym | Version |
| KOLORTABELLE | Verwaltet | BREITER_ZEICHEN |
| COMPOUND_STRING | NAMES | Fensterobjekt |
| COMPOUND_STRING_TABELLE | Objekte | XBITMAPDATEI |
| RECHTS NACH LINKS |
Zeichenfolgeliterale können aus Groß-und Kleinbuchstaben, Ziffern und Interpunktionszeichen bestehen. Leerzeichen, Tabulatoren und Kommentare sind spezielle Elemente in der Sprache. Sie sind ein Mittel zur Begrenzung anderer Elemente, wie z. B. zwei Namen. Eines oder mehrere dieser Elemente können vor oder nach einem anderen Element in der Sprache angezeigt werden. Leerzeichen, Tabulatoren und Kommentare, die in Zeichenfolgeliteralen angezeigt werden, werden jedoch als Zeichenfolgen und nicht als Begrenzer behandelt.
Datentypen
UIL stellt Literale für mehrere der unterstützten Werttypen bereit. Einige Werttypen werden nicht als Literale unterstützt (z. B. Pixmaps und Zeichenfolgetabellen). Sie können Werte für diese Typen angeben, indem Sie Funktionen verwenden, die im AbschnittFunktionenbeschrieben sind. UIL unterstützt direkt die folgenden Literaltypen:
- Zeichenfolgeliteral
- Ganzzahliges Literal
- boolesches Literal
- Gleitkommaliteral
UIL enthält auch den Datentyp ANY , der verwendet wird, um die Kompilierzeitprüfung von Datentypen zu inaktivieren.
Zeichenfolgeliterale
Ein Zeichenfolgeliteral ist eine Folge von 0 oder mehr 8-Bit-oder 16-Bit-Zeichen oder eine Kombination, die durch ' (einfache Anführungszeichen) oder " (Anführungszeichen). Zeichenfolgeliterale können auch Mehrbytezeichen mit doppelten Anführungszeichen als Begrenzer enthalten. Zeichenfolgeliterale dürfen nicht länger als 2.000 Zeichen sein.
Ein Zeichenfolgeliteral in einfachen Anführungszeichen kann mehrere Quellenzeilen umfassen. Um ein Zeichenfolgeliteral in einfachen Anführungszeichen fortzusetzen, beenden Sie die fortgesetzte Zeile mit einem Backslash (\). Das Literal wird mit dem ersten Zeichen in der nächsten Zeile fortgesetzt.
Zeichenfolgeliterale mit doppelten Anführungszeichen können nicht mehrere Quellenzeilen umfassen. (Da Zeichenfolgen in doppelten Anführungszeichen Escapezeichenfolgen und andere Sonderzeichen enthalten können, können Sie den umgekehrten Schrägstrich nicht verwenden, um die Fortsetzung der Zeichenfolge anzugeben.) Um einen Zeichenfolgewert zu erstellen, der mehrere Quellenzeilen umfassen muss, verwenden Sie die Verkettungsoperation, die weiter unten in diesem Abschnitt beschrieben wird.
Die Syntax eines Zeichenfolgeliterals kann eine der folgenden sein:
'[CharacterString]'
[#CharSet]"[CharacterString]"Beide Zeichenfolgeformen ordnen einen Zeichensatz einem Zeichenfolgewert zu. UIL verwendet die folgenden Regeln, um den Zeichensatz und das Speicherformat für Zeichenfolgeliterale zu ermitteln:
- Eine als „ String ” deklarierte Zeichenfolge entspricht # Cur Char Set „String”, wobei der Zeichensatzteil des Werts CurCharSet der Umgebungsvariablen LANG ist. Wenn die Umgebungsvariable LANG nicht gesetzt ist oder keine Codekomponente enthält, CurCharSet ist der Wert von XmFALLBACK_CHARSET. Standardmäßig ist ISO8859-1 (entspricht XmFALLBACK_CHARSET ISO_LATIN1 ), aber Anbieter können einen anderen Standardwert festlegen.
- Eine als „ String ” deklarierte Zeichenfolge entspricht # Char Set „String”, wenn Sie als Standardzeichensatz CharSet für das Modul angegeben haben. Wenn kein Standardzeichensatz für das Modul angegeben wurde und die Option -s für den Befehl uil angegeben wird oder der Wert use_setlocale_flag für den aufrufbaren Compiler der Funktion Uil festgelegt ist, Die Zeichenfolge wird als Zeichenfolge in der aktuellen Ländereinstellung interpretiert. Das bedeutet, dass die Zeichenkette in der Locale des Benutzers durch Aufruf von setlocale geparst wird und ihr Zeichensatz auf den Wert gesetzt XmFONTLIST_DEFAULT_TAG wird. Wenn die Zeichenfolge in eine zusammengesetzte Zeichenfolge konvertiert wird, wird sie als ländereinstellungscodiertes Textsegment gespeichert. Andernfalls entspricht „ String “ # Cur Char Set „String“, wobei wie für Strings in einfachen CurCharSet Anführungszeichen beschrieben interpretiert wird.
- Eine Zeichenfolge der Form „ String “ oder „ #CharSet " String " wird als null-terminierte Zeichenfolge gespeichert.
Im Folgenden werden die Zeichensätze aufgelistet, die vom UIL-Compiler für Zeichenfolgeliterale unterstützt werden. Beachten Sie, dass mehrere UIL-Namen demselben Zeichensatz zugeordnet sind. In einigen Fällen beeinflusst der UIL-Name, wie Zeichenfolgeliterale gelesen werden. Zeichenfolgen, die durch einen UIL-Zeichensatznamen identifiziert werden, der auf _LR endet, werden beispielsweise von links nach rechts gelesen. Namen, die mit einer anderen Zahl enden, spiegeln unterschiedliche Schriftarten wider (z. B. ISO_LATIN1 oder ISO_LATIN6). Alle Zeichensätze in dieser Liste werden durch 8 Bit dargestellt.
| UIL-Name | Beschreibung |
|---|---|
| ISO_LATIN1 | GL: ASCII, GR: Latin-1 -Ergänzung |
| ISO_LATIN2 | GL: ASCII, GR: Latin-2 -Ergänzung |
| ISO_ARABISCH | GL: ASCII, GR: Lateinisch-Arabisch-Ergänzung |
| ISO_LATIN6 | GL: ASCII, GR: Lateinisch-Arabisch-Ergänzung |
| ISO_GRIECHISCH | GL: ASCII, GR: Lateinisch-Griechische Ergänzung |
| ISO_LATIN7 | GL: ASCII, GR: Lateinisch-Griechische Ergänzung |
| ISO_HEBREW | GL: ASCII, GR: Lateinisch-Hebräische Ergänzung |
| ISO_LATIN8 | GL: ASCII, GR: Lateinisch-Hebräische Ergänzung |
| ISO_HEBREW_LR | GL: ASCII, GR: Lateinisch-Hebräische Ergänzung |
| ISO_LATIN8_LR | GL: ASCII, GR: Lateinisch-Hebräische Ergänzung |
| JIS_KATAKANA | GL: JIS Roman, GR: JIS Katakana |
Im Folgenden sind die Parserregeln für jeden Zeichensatz aufgeführt:
| Zeichensatz | Parserregel |
|---|---|
| Alle Zeichensätze | Zeichencodes im Bereich von 00 bis 1F, 7Fund 80 bis 9F sind Steuerzeichen, einschließlich beider Byte von 16-Bit-Zeichen. Der Compiler markiert diese als ungültige Zeichen. |
| ISO_LATIN1, ISO_LATIN2, ISO_ARABIC, ISO_LATIN6, ISO_GREEK, ISO_LATIN7 | Diese Sätze werden von links nach rechts geparst. Die Escapezeichenfolgen für auf null endende Zeichenfolgen werden auch von diesen Zeichensätzen unterstützt. |
| ISO_HEBREW, ISO_LATIN8 | Diese Gruppen werden von rechts nach links geparst. Beispiel: Die Zeichenfolge#ISO_HEBREW"012345"Generiert eine primitive Zeichenfolge"543210"mit dem Zeichensatz ISO_HEBREW. Ein DDIS-Deskriptor für eine solche Zeichenfolge hat dieses Segment als von rechts nach links markiert. Die Escapezeichenfolgen für auf null endende Zeichenfolgen werden auch von diesen Zeichensätzen unterstützt und die Zeichen, aus denen die Escapezeichenfolgen bestehen, sind von links nach rechts angeordnet. Geben Sie beispielsweise Folgendes ein:\n, nichtn\. |
| ISO_HEBREW_LR, ISO_LATIN8_LR | Diese Sätze werden von links nach rechts geparst. Beispiel: Die Zeichenfolge#ISO_HEBREW"012345"Generiert eine primitive Zeichenfolge"012345"mit dem Zeichensatz ISO_HEBREW. Ein DDIS-Deskriptor für eine solche Zeichenfolge markiert dieses Segment als von links nach rechts. Die Escapezeichenfolgen für auf null endende Zeichenfolgen werden auch von diesen Zeichensätzen unterstützt. |
| JIS_KATAKANA | Diese Gruppe wird von links nach rechts geparst. Die Escapezeichenfolgen für auf null endende Zeichenfolgen werden auch von diesen Zeichensätzen unterstützt. Beachten Sie, dass der Backslash (\) als Yensymbol angezeigt werden kann. |
Neben der Angabe von Parserregeln für Zeichenfolgen bleiben Zeichensatzinformationen ein Attribut einer zusammengesetzten Zeichenfolge. Wenn die Zeichenfolge in einer Zeichenfolge enthalten ist, die aus mehreren verketteten Segmenten besteht, werden die Zeichensatzinformationen in dieses Zeichenfolgesegment eingeschlossen. Dadurch erhält AIXwindows die Informationen, die es benötigt, um die zusammengesetzte Zeichenfolge zu entschlüsseln und eine Schriftart zum Anzeigen der Zeichenfolge auszuwählen.
Für eine Anwendungsschnittstelle, die nur in Englisch angezeigt wird, können Sie mit UIL die Unterschiede zwischen den beiden Verwendungen von Zeichenfolgen ignorieren. Der Compiler erkennt anhand des Kontexts, wenn eine Zeichenfolge als auf null endende Zeichenfolge oder als zusammengesetzte Zeichenfolge übergeben werden muss.
Der UIL-Compiler erkennt genügend Informationen zu den verschiedenen Zeichensätzen, um Zeichenfolgeliterale korrekt syntaktisch zu analysieren. Der Compiler gibt auch Fehler aus, wenn eine zusammengesetzte Zeichenfolge in einem Kontext verwendet wird, der nur auf null endende Zeichenfolgen unterstützt.
Da es sich bei den Zeichensatznamen um Schlüsselwörter handelt, müssen Sie sie in Kleinbuchstaben angeben, wenn die Groß-/Kleinschreibung beachtet werden muss. Wenn bei Namen die Groß-/Kleinschreibung nicht beachtet werden muss, können Zeichensatznamen in Großbuchstaben, in Kleinbuchstaben oder in Groß-/Kleinschreibung angegeben werden.
Zusätzlich zu den integrierten Zeichensätzen, die von UIL erkannt werden, können Sie eigene Zeichensätze mit der Funktion CHARACTER_SET definieren. Sie können die Funktion CHARACTER_SET überall dort verwenden, wo ein Zeichensatz angegeben werden kann.
Zeichenfolgeliterale können Zeichen mit dem achten (höchstwertigen) Bit enthalten. Sie können keine Steuerzeichen (00 bis 1F, 7Fund 80 bis 9F) direkt in einem Zeichenfolgeliteral in einfachen Anführungszeichen eingeben. Sie können diese Zeichen jedoch mit Escapezeichenfolgen darstellen. Die folgende Liste enthält die Escapezeichenfolgen für Sonderzeichen:
| Element | Beschreibung |
|---|---|
| \b | Rückschritt |
| \f | Formularvorschub |
| \n | Zeilenumbruch |
| \r | Rücklauf |
| \t | Horizontaltabulator |
| \v | Vertikaltabulator |
| \' | Einfaches Anführungszeichen |
| \" | Doppeltes Anführungszeichen |
| \\ | Backslash |
| \Ganzzahl\ | Zeichen, dessen interne Darstellung durch Integer angegeben wird (im Bereich von 0 bis 255 Dezimalzahlen) |
Der UIL-Compiler verarbeitet keine Zeilenvorschubzeichen in zusammengesetzten Zeichenfolgen. Die Auswirkung eines Zeilenvorschubzeichens in einer zusammengesetzten Zeichenfolge hängt nur vom Zeichensatz der Zeichenfolge ab. Das Ergebnis ist nicht garantiert eine mehrzeilige Zeichenfolge.
Verbundzeichenfolgeliterale
Eine zusammengesetzte Zeichenfolge besteht aus einer Zeichenfolge aus 8 -Bit-, 16 -Bit-oder Mehrbytezeichen, einem benannten Zeichensatz und einer Schreibrichtung. Sein UIL-Datentyp ist compound_string.
Die Schreibrichtung einer zusammengesetzten Zeichenfolge wird durch den für die Zeichenfolge angegebenen Zeichensatz impliziert. Mit der Funktion COMPOUND_STRING können Sie die Schreibrichtung für eine zusammengesetzte Zeichenfolge explizit festlegen.
Eine Verbundzeichenfolge kann aus einer Folge verketteter Verbundzeichenfolgen, auf null endenden Zeichenfolgen oder aus einer Kombination beider Zeichenfolgen bestehen, von denen jede eine andere Zeichensatzeigenschaft und Schreibrichtung haben kann. Verwenden Sie den Verkettungsoperator & (Et-Zeichen), um eine Folge von zusammengesetzten Zeichenfolgen zu erstellen.
Jede Zeichenfolge in der Sequenz wird gespeichert, einschließlich des Zeichensatzes und der Schreibrichtungsinformationen.
Im Allgemeinen wird ein Zeichenfolgeliteral in der UID-Datei als zusammengesetzte Zeichenfolge gespeichert, wenn das Literal aus verketteten Zeichenfolgen mit unterschiedlichen Zeichensätzen oder Schreibrichtungen besteht oder wenn Sie die Zeichenfolge verwenden, um einen Wert für ein Argument anzugeben, das einen zusammengesetzten Zeichenfolgewert erfordert. Wenn Sie sicherstellen möchten, dass ein Zeichenfolgeliteral als zusammengesetzte Zeichenfolge gespeichert wird, müssen Sie die Funktion COMPOUND_STRING verwenden.
Datenspeicherbelegung für Zeichenfolgeliterale
Wie ein Zeichenfolgeliteral in der UID-Datei gespeichert wird, hängt davon ab, wie Sie die Zeichenfolge deklarieren und verwenden. Der UIL-Compiler konvertiert automatisch eine auf null endende Zeichenfolge in eine zusammengesetzte Zeichenfolge, wenn Sie die Zeichenfolge verwenden, um den Wert eines Arguments anzugeben, das eine zusammengesetzte Zeichenfolge erfordert. Diese Umwandlung ist jedoch in Bezug auf den Speicherbedarf kostenintensiv.
PRIVATE, EXPORTEDund IMPORTED Zeichenfolgeliterale erfordern Speicher für eine einzelne Zuordnung, wenn das Literal deklariert wird. Danach ist Speicher für jede Referenz auf das Literal erforderlich. Literale, die in der Zeile deklariert werden, erfordern Speicher sowohl für eine Zuordnung als auch für eine Referenz.
In der folgenden Liste wird die Datenspeicherbelegung für Zeichenfolgeliterale zusammengefasst. Der Speicherbedarf für eine Zuordnung besteht aus einem festen Teil und einem variablen Teil. Der feste Teil einer Zuordnung entspricht ungefähr dem Speicherbedarf für eine Referenz (einige Byte). Der vom variablen Teil belegte Speicher hängt von der Größe des Literalwerts (Länge der Zeichenfolge) ab. Um Speicherplatz zu sparen, vermeiden Sie die Erstellung von Zeichenfolgeliteraldeklarationen, die zu einer Zuordnung pro Verwendung führen.
| Deklaration (und Datentyp) | Verwendet als | Speicherbedarf pro Nutzung |
|---|---|---|
| Inline (Null-beendet) | Auf Null endend | Zuordnung und Referenz (innerhalb des Moduls) |
| Privat (Null-beendet) | Auf Null endend | Referenz (innerhalb des Moduls) |
| Exportiert (Null-beendet) | Auf Null endend | Referenz (innerhalb der UID-Hierarchie) |
| Importiert (Null-beendet) | Auf Null endend | Referenz (innerhalb der UID-Hierarchie) |
| Inline (Null-beendet) | Verbindung | Zuordnung und Referenz (innerhalb des Moduls) |
| Privat (Null-beendet) | Verbindung | Zuordnung und Referenz (innerhalb des Moduls) |
| Exportiert (Null-beendet) | Verbindung | Referenz (innerhalb der UID-Hierarchie) |
| Importiert (Null-beendet) | Verbindung | Eine Referenz (innerhalb der UID-Hierarchie) |
| Inline (Verbund) | Verbindung | Zuordnung und Referenz (innerhalb des Moduls) |
| Privat (Verbund) | Verbindung | Referenz (innerhalb des Moduls) |
| Exportiert (Verbund) | Verbindung | Referenz (innerhalb der UID-Hierarchie) |
| Importiert (Verbund) | Verbindung | Referenz (innerhalb der UID-Hierarchie) |
Ganzzahlige Literale
Ein ganzzahliges Literal stellt den Wert einer ganzen Zahl dar. Ganzzahlige Literale haben die Form eines optionalen Vorzeichens, auf das eine oder mehrere Dezimalstellen folgen. Ein ganzzahliges Literal darf keine eingebetteten Leerzeichen oder Kommas enthalten.
Ganzzahlige Literale werden in der UID-Datei als lange ganze Zahlen gespeichert. Exportierte und importierte ganzzahlige Literale erfordern eine einzelne Zuordnung, wenn das Literal deklariert wird; danach werden für jeden Verweis auf das Literal einige Byte Speicher benötigt. Private ganzzahlige Literale und die deklarierten Inline-Literale erfordern Zuordnung und Referenzspeicher pro Verwendung. Um Speicherplatz zu sparen, vermeiden Sie ganzzahlige Literaldeklarationen, die zu einer Zuordnung pro Verwendung führen.
Die folgende Liste zeigt die Datenspeicherbelegung für ganzzahlige Literale:
| Deklaration | Speicherbedarf pro Nutzung |
|---|---|
| Inline | Eine Zuordnung und eine Referenz (innerhalb des Moduls) |
| Nicht öffentlich | Eine Zuordnung und eine Referenz (innerhalb des Moduls) |
| Exported | Eine Referenz (innerhalb der UID-Hierarchie) |
| Importiert | Eine Referenz (innerhalb der UID-Hierarchie) |
Boolesche Literale
Ein boolesches Literal stellt den Wert "True" (reserviertes Schlüsselwort TRUE oder On) oder den Wert "False" (reserviertes Schlüsselwort FALSE oder Off) dar. Diese Schlüsselwörter unterliegen Regeln zur Beachtung der Groß-/Kleinschreibung.
In einer UID-Datei wird TRUE durch den ganzzahligen Wert 1 und FALSE durch den ganzzahligen Wert 0 dargestellt.
Die Datenspeicherbelegung für boolesche Literale entspricht der für ganzzahlige Literale.
Gleitkommaliterale
Ein Gleitkommaliteral stellt den Wert einer reellen (oder Gleitkommazahl) dar. Gleitkommaliterale haben das folgende Format:
[+|-][Integer].Integer[E|e[+|-]Exponent]Für maximale Portierbarkeit kann ein Gleitkommaliteral Werte im Bereich 1.0E-37 bis 1.0E+37 mit mindestens sechs signifikanten Ziffern darstellen. Auf vielen Maschinen ist dieser Bereich breiter, mit signifikanteren Ziffern. Ein Gleitkommaliteral darf keine eingebetteten Leerzeichen oder Kommas enthalten.
Gleitkommaliterale werden in der UID-Datei als Gleitkommazahlen mit doppelter Genauigkeit gespeichert. Im Folgenden finden Sie Beispiele für eine gültige und ungültige Gleitkommanotation für den UIL-Compiler:
| Gültige Gleitkommaliterale | Ungültige Gleitkommaliterale |
|---|---|
| 1.0 | 1e1 (kein Dezimalzeichen) |
| .1 | E-1 (kein Dezimalzeichen oder Ziffern) |
| 3.1415E-2 (entspricht .031415) | 2.87 e6 (eingebettete Leerzeichen) |
| -6.29e7 (entspricht -62900.000) | 2.0e100 (außerhalb des gültigen Bereichs) |
Die Datenspeicherbelegung für Gleitkommaliterale ist mit der für ganzzahlige Literale identisch.
Datentyp ANY
Der Zweck des Datentyps ANY besteht darin, die Datentypprüffunktion des UIL-Compilers abzuschalten. Sie können den Datentyp ANY für Folgendes verwenden:
- Angabe des Typs eines Callback-Prozedur-Tags.
- Angabe des Typs eines benutzerdefinierten Arguments.
Sie können den Datentyp ANY verwenden, wenn Sie einen Typ verwenden müssen, der nicht vom UIL-Compiler unterstützt wird, oder wenn Sie möchten, dass die vom Compiler auferlegten Datentypeinschränkungen gelockert werden. Sie können beispielsweise ein Widget mit einem Argument definieren, das abhängig von den Laufzeitbedingungen unterschiedliche Typen von Werten akzeptieren kann.
Wenn Sie angeben, dass ein Argument einen ANY -Wert annimmt, überprüft der Compiler den Typ des für dieses Argument angegebenen Werts nicht. Daher müssen Sie vorsichtig sein, wenn Sie einen Wert für ein Argument des Datentyps ANY angeben. Sie erhalten möglicherweise unerwartete Ergebnisse zur Laufzeit, wenn Sie einen Wert mit einem Datentyp übergeben, den das Widget für dieses Argument nicht unterstützt.
Ausdrücke
UIL enthält Kompilierzeitwertausdrücke. Diese Ausdrücke können Verweise auf andere UIL-Werte enthalten, aber nicht vorwärts referenziert werden.
Im Folgenden wird die Gruppe der Operatoren in UIL aufgelistet, mit denen Sie ganzzahlige, reelle und boolesche Werte auf der Basis anderer Werte erstellen können, die mit dem Modul UIL definiert wurden. In der Liste ist die Rangfolge 1 die höchste.
| Operator (und seine Bedeutung) | Operandentypen | Rangfolge |
|---|---|---|
| ~ (NICHT) | Boolean | 1 |
| (Einerkomplement) | Integer | |
| - (Negieren) | Gleitkomma | 1 |
| (Negieren) | Integer | |
| + (NOP) | Gleitkomma | 1 |
| (NOP) | Integer | |
| * (Multiplizieren) | Float, Gleitkomma | 2 |
| (Multiplizieren) | Ganzzahl, Ganzzahl | |
| / (Teilen) | Float, Gleitkomma | 2 |
| (Division) | Ganzzahl, Ganzzahl | |
| + (Hinzufügen) | Float, Gleitkomma | 3 |
| (Hinzufügen) | Ganzzahl, Ganzzahl | |
| - (Subtrahieren) | Float, Gleitkomma | 3 |
| (Subtrahieren) | Ganzzahl, Ganzzahl | |
| > > (Umschalttaste) | Ganzzahl, Ganzzahl | 4 |
| < < (Nach links) | Ganzzahl, Ganzzahl | 4 |
| & (NICHT) | Boolesch, Boolesch | 5 |
| (Bitweises UND) | Ganzzahl, Ganzzahl | |
| (Verketten) | Zeichenfolge, Zeichenfolge | |
| | (ODER) | Boolesch, Boolesch | 6 |
| (Bitweises ODER) | Ganzzahl, Ganzzahl | |
| ^ (XOR) | Boolesch, Boolesch | 6 |
| (Bitweises XOR) | Ganzzahl, Ganzzahl |
Eine Zeichenfolge kann entweder eine einzelne zusammengesetzte Zeichenfolge oder eine Folge von zusammengesetzten Zeichenfolgen sein. Wenn die beiden verketteten Zeichenfolgen unterschiedliche Eigenschaften haben (z. B. Schreibrichtung oder Zeichensatz), ist das Ergebnis der Verkettung eine zusammengesetzte Zeichenfolge mit mehreren Segmenten.
Die aus der Verkettung resultierende Zeichenfolge ist eine auf null endende Zeichenfolge, es sei denn, eine oder mehrere der folgenden Bedingungen sind vorhanden:
- Einer der Operanden ist eine zusammengesetzte Zeichenfolge.
- Die Operanden haben unterschiedliche Zeichensatzeigenschaften.
- Die Operanden haben unterschiedliche Schreibrichtungen.
Wenn eine oder mehrere der vorherigen Bedingungen erfüllt sind, ist die resultierende Zeichenfolge eine zusammengesetzte Zeichenfolge. Importierte oder exportierte Werte können nicht als Operanden des Verknüpfungsoperators verwendet werden.
Das Ergebnis jedes Operators hat denselben Typ wie seine Operanden. Sie können Typen in einem Ausdruck nicht mischen, ohne Konvertierungsfunktionen zu verwenden.
Sie können runde Klammern verwenden, um die normale Vorrangstellung von Operatoren zu überschreiben. In einer Folge von monadischen Operatoren werden die Operationen von rechts nach links ausgeführt. Beispiel:- + -Aist äquivalent zu-(+(-A)). In einer Folge von Binäroperatoren derselben Vorrangstellung werden die Operationen von links nach rechts ausgeführt. Beispiel:A*B/C*Dist äquivalent zu((A*B)/c)*D.
Eine Wertdeklaration gibt einem Wert einen Namen. Sie können den Wert dieses Namens in einer nachfolgenden Wertdeklaration nicht neu definieren. Sie können einen Wert mit Operatoren und Funktionen überall dort verwenden, wo Sie einen Wert in einem UIL-Modul verwenden können. Sie können importierte Werte nicht als Operanden in Ausdrücken verwenden.
Mehrere der binären Operatoren sind für mehrere Datentypen definiert. Der Operator für Multiplikation (*) ist beispielsweise sowohl für Gleitkommaoperanden als auch für ganzzahlige Operanden definiert.
Damit der UIL-Compiler diese binären Operationen ausführen kann, müssen beide Operanden denselben Typ haben. Wenn Sie Operanden mit unterschiedlichen Datentypen bereitstellen, konvertiert der UIL-Compiler automatisch einen der Operanden in den Typ des anderen Operanden gemäß den folgenden Konvertierungsregeln:
- Wenn die Operanden eine ganze Zahl und ein boolescher Wert sind, wird der boolesche Wert in eine ganze Zahl konvertiert.
- Wenn die Operanden eine ganze Zahl und eine Gleitkommazahl sind, wird die ganze Zahl in eine Gleitkommazahl konvertiert.
- Wenn die Operanden ein Gleitkommawert und ein boolescher Wert sind, wird der boolesche Wert in einen Gleitkommawert konvertiert.
Sie können den Datentyp eines Werts auch explizit konvertieren, indem Sie eine der Konvertierungsfunktionen INTEGER, FLOAToder SINGLE_FLOAT verwenden.
Funktionen
UIL stellt Funktionen zum Generieren der folgenden Typen von Werten bereit:
- Zeichensätze
- Schlüsselsyms
- Farben
- Pixelabbilder
- Gleitkommazahlen mit einfacher Genauigkeit
- Gleitkommazahlen mit doppelter Genauigkeit
- Fonts
- Schriftartenangebot
- Schriftartentabellen
- Zusammengesetzte Zeichenfolgen
- Zusammengesetzte Zeichenfolgetabellen
- ASCIZ (nullterminiert), Zeichenfolgetabellen
- Zeichenfolgen mit breiten Zeichen
- Widgetklassennamen
- Ganzzahlige Tabellen
- Argumente
- Ursachen
- Umsetzungstabellen.
Für alle Beispiele in den folgenden Abschnitten wird der Modus ohne Beachtung der Groß-/Kleinschreibung vorausgesetzt. Schlüsselwörter werden in Großbuchstaben angezeigt, um sie von benutzerdefinierten Namen zu unterscheiden, die in Groß-/Kleinschreibung in Kursivschrift angezeigt werden. Diese Verwendung von Großbuchstaben ist im Modus ohne Beachtung der Groß-/Kleinschreibung nicht erforderlich. Im Modus mit Beachtung der Groß-/Kleinschreibung müssen Schlüsselwörter in Kleinbuchstaben angegeben werden.
- CHARACTER_SET( Zeichenfolgenausdruck [, Eigenschaft [,...]])
- Mit der Funktion CHARACTER_SET können Sie eigene Zeichensätze definieren. Sie können die Funktion CHARACTER_SET überall dort verwenden, wo ein Zeichensatz angegeben werden kann.
Das Ergebnis der Funktion CHARACTER_SET ist ein Zeichensatz mit dem Namen StringExpression und den von Ihnen angegebenen Eigenschaften. StringExpression muss eine auf null endende Zeichenfolge sein. Sie können optional eine oder beide der folgenden Klauseln einschließen, um Eigenschaften für den resultierenden Zeichensatz anzugeben:
RIGHT_TO_LEFT = BooleanExpression SIXTEEN_BIT = BooleanExpressionDie Klausel RIGHT_TO_LEFT legt die Standardschreibrichtung der Zeichenfolge von rechts nach links fest, wenn BooleanExpression auf 'True' und andernfalls von links nach rechts ist.
Die Klausel SIXTEEN_BIT ermöglicht, dass die Zeichenfolgen, die diesem Zeichensatz zugeordnet sind, als 16-Bit-Zeichen interpretiert werden, wenn BooleanExpression wahr ist, und andernfalls 8-Bit-Zeichen.
- KEYSYM (StringLiteral)
- Die Funktion KEYSYM wird verwendet, um ein Keysym für eine mnemonische Ressource anzugeben. Das StringLiteral muss genau ein Zeichen enthalten. Wenn das Compiler-Flag -s verwendet wird, muss StringLiteral , das Anführungszeichen verwendet, einen Zeichensatz angeben.
- COLOR( StringExpression [,FOREGROUND|BACKGROUND])
- Die Funktion COLOR unterstützt die Definition von Farben. Mit der Funktion COLOR können Sie einen Wert festlegen, um eine Farbe anzugeben, und diesen Wert für Argumente verwenden, die einen Farbwert erfordern. Der Zeichenfolgeausdruck gibt die zu definierende Farbe an. Die optionalen Schlüsselwörter FOREGROUND und BACKGROUND geben an, wie die Farbe auf einer Schwarzweißeinheit angezeigt werden soll, wenn die Farbe in der Definition einer Farbtabelle verwendet wird.
Der UIL-Compiler hat keine integrierten Farbnamen. Farben sind ein serverabhängiges Attribut eines Objekts. Farben werden auf jedem Server definiert und können auf jedem Server unterschiedliche RGB-Werte (Rot-Grün-Blau) aufweisen. Die Zeichenfolge, die Sie als Farbargument angeben, muss von dem Server erkannt werden, auf dem Ihre Anwendung ausgeführt wird.
In einer UID-Datei stellt UIL eine Farbe als Zeichenfolge dar. MRM ruft X Übersetzungsfunktionen auf, die eine Farbzeichenfolge in den gerätespezifischen Pixelwert konvertieren. Wenn Sie auf einem Monochromserver arbeiten, werden alle Farben in Schwarz oder Weiß umgesetzt. Wenn Sie auf einem Farbserver arbeiten, werden die Farbnamen in die richtigen Farben umgesetzt, wenn die folgenden Bedingungen erfüllt sind:
- Die Farbe ist definiert.
- Die Farbzuordnung ist noch nicht voll.
Wenn die Farbzuordnung voll ist, werden sogar gültige Farben in Schwarz oder Weiß (Vordergrund oder Hintergrund) umgesetzt.
Im Allgemeinen geben Schnittstellen keine Farben für Widgets an. Dies ermöglicht die Auswahl von Farben, die vom Benutzer über gesteuert werden.Xdefaults -Datei.
Um eine Anwendung zu schreiben, die sowohl auf Monochrom-als auch auf Farbeinheiten ausgeführt wird, müssen Sie angeben, welche Farben in einer Farbtabelle (mit der Funktion COLOR_TABLE definiert) dem Hintergrund und welche Farben dem Vordergrund zugeordnet werden. UIL ermöglicht die Verwendung der Funktion COLOR , um die Farbe Rot der Hintergrundfarbe auf einem Monochromgerät wie folgt zuzuordnen:
VALUE c: COLOR ( 'red',BACKGROUND );Die Zuordnung ist nur erforderlich, wenn dem MRM eine Farbe zugeordnet ist und die Anwendung auf einem Monochromgerät angezeigt werden soll. In diesem Fall wird jede Farbe als in einer der folgenden drei Kategorien betrachtet:
- Die Farbe wird der Hintergrundfarbe auf dem Monochromgerät zugeordnet.
- Die Farbe wird der Vordergrundfarbe auf dem Monochromgerät zugeordnet.
- Monochrome Zuordnung ist für diese Farbe nicht definiert.
Wenn die Farbe der Vorder-oder Hintergrundfarbe zugeordnet ist, ersetzt MRM die Vordergrund-oder Hintergrundfarbe. Wenn Sie die Monochromzuordnung für eine Farbe nicht angeben, übergibt MRM die Farbzeichenfolge an AIXwindows für die Zuordnung zur Vordergrund-oder Hintergrundfarbe.
- RGB( RotGanzzahl, GrünGanzzahl, BlueInteger )
- Die drei Ganzzahlen definieren die Werte für die Rot-, Grün-und Blaukomponenten der Farbe in dieser Reihenfolge. Die Werte dieser Komponenten können von 0 bis einschließlich 65.535 reichen.
In einer UID-Datei stellt UIL einen RGB-Wert als drei ganze Zahlen dar. MRM ruft X-Umsetzungsfunktionen auf, die die Ganzzahlen in den einheitenspezifischen Pixelwert konvertieren. Wenn Sie auf einem Monochromserver arbeiten, werden alle Farben in Schwarz oder Weiß umgesetzt. Wenn Sie auf einem Farbserver arbeiten, werden RGB-Werte in die richtigen Farben umgesetzt, wenn die Farbzuordnung noch nicht voll ist. Wenn die Farbzuordnung voll ist, werden die Werte in Schwarz oder Weiß (Vordergrund oder Hintergrund) umgesetzt.
- COLOR_TABLE( Color Ex pression='Zeichen'[,...])
- Der Farbausdruck ist eine zuvor definierte Farbe, eine Farbe, die inline mit der Funktion COLOR definiert wurde, oder der Ausdruck BACKGROUND COLOR oder FOREGROUND COLOR. Das Zeichen kann ein beliebiges gültiges UIL-Zeichen sein.
Die Funktion COLOR_TABLE stellt eine einheitenunabhängige Methode zur Angabe einer Gruppe von Farben bereit. Die Funktion COLOR_TABLE akzeptiert entweder zuvor definierte UIL-Farbnamen oder Inline-Farbdefinitionen (mithilfe der Funktion COLOR ). Eine Farbtabelle muss privat sein, da der UIL-Compiler seinen Inhalt kennen muss, um ein Symbol zu erstellen. Die Farben in einer Farbtabelle können jedoch importiert, exportiert oder privat sein.
Der einzelne Buchstabe, der jeder Farbe zugeordnet ist, ist das Zeichen, das Sie verwenden, um diese Farbe beim Erstellen eines Symbols darzustellen. Jeder Buchstabe zur Darstellung einer Farbe muss innerhalb der Farbtabelle eindeutig sein.
- ICON([ COL OR_TABLE=Farbtafelname,] Zeile [,...])
- Der Farbtabellenname muss auf eine zuvor definierte Farbtabelle verweisen. Die Zeile ist ein Zeichenausdruck, der eine Zeile des Symbols ergibt.
Die Funktion ICON beschreibt ein rechteckiges Symbol, das x Pixel breit und y Pixel hoch ist. Die in einfache Anführungszeichen eingeschlossenen Zeichenfolgen beschreiben das Symbol. Jede Zeichenfolge stellt eine Zeile im Symbol dar; jedes Zeichen in der Zeichenfolge stellt ein Pixel dar.
Die erste Zeile in einer Symboldefinition bestimmt die Breite des Symbols. Alle Zeilen müssen dieselbe Anzahl von Zeichen wie die erste Zeile enthalten. Die Höhe des Symbols wird durch die Anzahl der Zeilen bestimmt.
Das erste Argument der Funktion ICON (die Farbtabellenspezifikation) ist optional und gibt die Farben an, die in diesem Symbol verfügbar sind. Wenn Sie den einzelnen Buchstaben verwenden, der jeder Farbe zugeordnet ist, können Sie die Farbe jedes Pixels im Symbol angeben. Das Symbol muss aus Zeichen bestehen, die in der angegebenen Farbtabelle definiert sind.
Eine Standardfarbtabelle wird verwendet, wenn Sie das Argument, das die Farbtabelle angibt, nicht angeben. Um die Standardfarbtabelle zu nutzen, dürfen die Zeilen Ihres Symbols nur Leerzeichen und Sterne enthalten. Die Standardfarbtabelle ist wie folgt definiert:
COLOR_TABLE( BACKGROUND COLOR = ' ', FOREGROUND COLOR = '*' )Sie können weitere Zeichen definieren, um die Hintergrundfarbe und die Vordergrundfarbe darzustellen, indem Sie das Leerzeichen und den Stern in den Klauseln BACKGROUND COLOR und FOREGROUND COLOR in der Beispielanweisung ersetzen. Sie können Symbole als privat, importiert oder exportiert angeben. Verwenden Sie die MrmFetchIconLiteral MRM-Funktion, um ein exportiertes Symbol zur Laufzeit abzurufen.
- XBITMAPFILE (StringExpression)
- Die Funktion XBITMAPFILE ähnelt der Funktion ICON , da beide ein rechteckiges Symbol beschreiben, das x Pixel breit und y Pixel hoch ist. Mit der Funktion XBITMAPFILE können Sie jedoch eine externe Datei angeben, die die Definition einer X-Bitmap enthält, während alle ICON -Funktionsdefinitionen direkt innerhalb von UIL codiert werden müssen. X Bitmapdateien können von vielen verschiedenen X-Anwendungen generiert werden. UIL liest diese Dateien über die Funktion XBITMAPFILE , unterstützt jedoch nicht die Erstellung dieser Datei. Die als Argument für die Funktion XBITMAPFILE angegebene X-Bitmapdatei wird von MRM zur Laufzeit der Anwendung gelesen.
Die Funktion XBITMAPFILE gibt einen Wert des Typs pixmap zurück und kann überall dort verwendet werden, wo ein Pixmap-Datentyp erwartet wird.
- SINGLE_FLOAT( RealNumberLiteral )
- Mit der Funktion SINGLE_FLOAT können Sie Gleitkommaliterale in UIL-Dateien als Gleitkommazahlen mit einfacher Genauigkeit speichern. Gleitkommazahlen mit einfacher Genauigkeit können häufig mit weniger Speicher als Gleitkommazahlen mit doppelter Genauigkeit gespeichert werden. Das RealNumberLiteral kann entweder ein ganzzahliges Literal oder ein Gleitkomma-Literal sein. Ein mit dieser Funktion definierter Wert kann nicht in einem arithmetischen Ausdruck verwendet werden.
- FLOAT( RealNumberLiteral )
- Mit der Funktion FLOAT können Sie Gleitkommaliterale in UIL-Dateien als Gleitkommazahlen mit doppelter Genauigkeit speichern. Das RealNumberLiteral kann entweder ein ganzzahliges Literal oder ein Gleitkomma-Literal sein.
- FONT( StringExpression [, CHAR ACTER_SET=Zeichensatz])
- Sie definieren Schriftarten mit der Funktion FONT . Mit der Funktion FONT bestimmen Sie einen Wert, um eine Schriftart anzugeben, und verwenden diesen Wert für Argumente, die einen Schriftartwert erfordern. Der UIL-Compiler verfügt über keine integrierten Schriftarten.
Jede Schriftart ist nur im Kontext eines Zeichensatzes sinnvoll. Die Funktion FONT verfügt über einen zusätzlichen Parameter, mit dem Sie den Zeichensatz für die Schriftart angeben können. Dieser Parameter ist optional; wenn Sie ihn weglassen, hängt der Standardzeichensatz vom Wert der Umgebungsvariablen LANG ab. Wenn LANG nicht gesetzt ist, wird der Standardzeichensatz auf gesetzt XmFALLBACK_CHARSET.
Der String-Ausdruck gibt den Namen der Schriftart an, und die Klausel CHAR AC TER_SET=CharSet gibt den Zeichensatz für die Schriftart an. Der in der Funktion FONT verwendete Zeichenfolgeausdruck darf keine zusammengesetzte Zeichenfolge sein.
- FONTSET( StringExpression [,...][, CHAR ACTER_SET=CharSet])
- Sie definieren Schriftartengruppen mit der Funktion FONTSET . Mit der FONTSET -Funktion bestimmen Sie eine Gruppe von Werten, um eine Schriftart anzugeben, und verwenden diese Werte für Argumente, für die ein Schriftartenwert erforderlich ist. Der UIL-Compiler verfügt über keine integrierten Schriftarten.
Jede Schriftart ist nur im Kontext eines Zeichensatzes sinnvoll. Die Funktion FONTSET verfügt über einen zusätzlichen Parameter, mit dem Sie den Zeichensatz für die Schriftart angeben können. Dieser Parameter ist optional; wenn Sie ihn weglassen, hängt der Standardzeichensatz vom Wert der Umgebungsvariablen LANG ab. Wenn LANG nicht gesetzt ist, wird der Standardzeichensatz auf gesetzt XmFALLBACK_CHARSET.
Der String-Ausdruck gibt den Namen der Schriftart an, und die Klausel CHAR ACTER_SET=CharSet gibt den Zeichensatz für die Schriftart an. Der in der Funktion FONTSET verwendete Zeichenfolgeausdruck darf keine zusammengesetzte Zeichenfolge sein.
- FONT_TABLE( FontExpression [,...])
- Eine Schriftartentabelle ist eine Folge von Schriftartpaaren und Zeichensätzen. Wenn ein Objekt zur Laufzeit eine Zeichenfolge anzeigen muss, durchsucht das Objekt die Schriftartentabelle nach dem Zeichensatz, der dem Zeichensatz der anzuzeigenden Zeichenfolge entspricht. UIL stellt die Funktion FONT_TABLE bereit, mit der Sie ein solches Argument angeben können. Der Schriftartausdruck wird mit den Funktionen FONT und FONTSET erstellt.
Wenn Sie einen einzelnen Schriftartwert angeben, um ein Argument anzugeben, das eine Schriftartentabelle erfordert, konvertiert der UIL-Compiler automatisch einen Schriftartwert in eine Schriftartentabelle.
- COMPOUND_STRING( Zeichenfolgenausdruck [, Eigenschaft [,...]])
- Verwenden Sie die Funktion COMPOUND_STRING , um Eigenschaften einer auf null endenden Zeichenfolge festzulegen und in eine zusammengesetzte Zeichenfolge zu konvertieren. Die Eigenschaften, die Sie festlegen können, sind Zeichensatz, Schreibrichtung und Trennzeichen.
Das Ergebnis der Funktion COMPOUND_STRING ist eine zusammengesetzte Zeichenfolge mit dem Zeichenfolgeausdruck als Wert. Sie können optional eine oder mehrere der folgenden Klauseln einschließen, um Eigenschaften für die resultierende zusammengesetzte Zeichenfolge anzugeben:
CHAR ACTER_SET=Zeichensatz RIGHT _TO_LEFT=Boolesche_Ausdruck SEP ARATE=Boolesche_Ausdruck
Die Klausel CHARACTER_SET gibt den Zeichensatz für die Zeichenfolge an. Wenn Sie die Klausel CHARACTER_SET weglassen, hat die resultierende Zeichenfolge denselben Zeichensatz wie StringExpression.
Die Klausel RIGHT_TO_LEFT legt die Schreibrichtung der Zeichenfolge von rechts nach links fest, wenn BooleanExpression auf 'True' gesetzt ist. Andernfalls erfolgt die Schreibrichtung von links nach rechts. Wenn Sie dieses Argument angeben, ändert sich der Wert des Zeichenfolgeausdrucks nicht. Wenn Sie das Argument RIGHT_TO_LEFT weglassen, hat die resultierende Zeichenfolge dieselbe Schreibrichtung wie StringExpression.
Die Klausel SEPARATE hängt ein Trennzeichen an das Ende der zusammengesetzten Zeichenfolge an, wenn BooleanExpression auf 'True' gesetzt ist. Wenn Sie die Klausel SEPARATE weglassen, hat die resultierende Zeichenfolge kein Trennzeichen.
Sie können importierte oder exportierte Werte nicht als Operanden der Funktion COMPOUND_STRING verwenden.
- COMPOUND_STRING_TABLE( StringExpression [,...])
- Eine zusammengesetzte Zeichenfolgetabelle ist ein Array von zusammengesetzten Zeichenfolgen. Objekte, die eine Liste von Zeichenfolgenwerten erfordern, wie beispielsweise die Argumente XmNitemsXmNselectedItems und für das Listen -Widget, verwenden Zeichenfolgen-Tabellenwerte. Die Funktion COMPOUND_STRING_TABLE erstellt die Werte für diese beiden Argumente des Widgets Liste . Die Funktion COMPOUND_STRING_TABLE generiert einen Wert des Typs 'string_table'. Der Name STRING_TABLE ist ein Synonym für COMPOUND_STRING_TABLE.
Die Zeichenfolgen in der Zeichenfolgetabelle können einfache Zeichenfolgen sein, die der UIL-Compiler automatisch in zusammengesetzte Zeichenfolgen konvertiert.
- ASCIZ_STRING_TABLE( StringExpression [,...])
- Eine ASCIZ-Zeichenfolgetabelle ist ein durch Kommas getrennter Array von ASCIZ-Zeichenfolgewerten (auf null endend). Mit dieser Funktion können Sie mehr als eine ASCIZ-Zeichenfolge als Callback-Tag-Wert übergeben. Die Funktion ASCIZ_STRING_TABLE generiert einen Wert des Typs asciz_table. Der Name ASCIZ_TABLE ist ein Synonym für ASCIZ_STRING_TABLE.
- WIDE_CHARACTER (StringExpression)
- Verwenden Sie die Funktion WIDE_CHARACTER , um eine breite Zeichenfolge aus einer auf null endenden Zeichenfolge in der aktuellen Ländereinstellung zu generieren.
- CLASS_REC_NAME (StringExpression)
- Verwenden Sie die Funktion CLASS_REC_NAME , um einen Widgetklassennamen zu generieren. Für eine durch das Toolkit definierte Widgetklasse ist das Zeichenfolgeargument der Name der Klasse. Bei einem benutzerdefinierten Widget ist das Zeichenfolgeargument der Name der Erstellungsfunktion für das Widget.
- INTEGER_TABLE( Ganzzahlausdruck [,...])
- Eine ganzzahlige Tabelle ist ein Array von ganzzahligen Werten, die durch Kommas voneinander getrennt werden. Diese Funktion ermöglicht Ihnen, mehr als eine Ganzzahl pro Callback-Tag-Wert zu übergeben. Die Funktion INTEGER_TABLE generiert einen Wert des Typs Ganzzahltabelle.
- ARGUMENTS( StringExpression [, ArgumentType ])
- Die Funktion ARGUMENTS definiert die Argumente für ein benutzerdefiniertes Widget. Jedes der Objekte, die von UIL beschrieben werden können, lässt eine Gruppe von Argumenten zu. Beispiel: XmNheight ist ein Argument für die meisten Objekte und hat den ganzzahligen Datentyp. Zum Angeben der Höhe für ein benutzerdefiniertes Widget können Sie den integrierten Argumentnamen XmNheight verwenden und einen ganzzahligen Wert angeben, wenn Sie das benutzerdefinierte Widget deklarieren. Verwenden Sie nicht die Funktion ARGUMENTS , um Argumente anzugeben, die in den UIL-Compiler integriert sind.
Der Name StringExpression ist der Name, den der UIL-Compiler für das Argument in der UID-Datei verwendet. Der ArgumentType ist der Typ des Werts, der dem Argument zugeordnet werden kann. Wenn Sie das zweite Argument weglassen, ist der Standardtyp ANY und es findet keine Werttypprüfung statt. Verwenden Sie eines der folgenden Schlüsselwörter, um den Argumenttyp anzugeben:
- Beliebig
- Asciz_Tabelle
- Boolean
- Farbe
- Farbtabelle
- Verbundzeichenfolge
- Variabel
- Schriftart
- Schriftartentabelle
- Schriftartenangebot
- Symbol
- Integer
- Ganzzahl_Tabelle
- Grund
- Single_Gleitkomma
- string
- Zeichenfolge_Tabelle
- Umsetzungstabelle
- Breites_Zeichen
- Fensterobjekt
Sie können die Funktion ARGUMENTS verwenden, damit der UIL-Compiler Erweiterungen für AIXwindowserkennen kann. Ein vorhandenes Widget kann beispielsweise ein neues Argument akzeptieren. Mit der Funktion ARGUMENTS kann dieses neue Argument dem UIL-Compiler zur Verfügung gestellt werden, bevor die aktualisierte Version des Compilers freigegeben wird.
- REASON (StringExpression)
- Die Funktion REASON ist nützlich, um neue Gründe für benutzerdefinierte Widgets zu definieren.
Jedes Objekt in AIXwindows definiert eine Gruppe von Bedingungen, unter denen es eine benutzerdefinierte Funktion aufruft. Diese Bedingungen werden als Callback-Gründebezeichnet. Die benutzerdefinierten Funktionen werden als Callback-Prozedurenbezeichnet. In einem UIL-Modul verwenden Sie eine Rückrufliste, um festzulegen, welche benutzerdefinierten Funktionen aus welchen Gründen aufgerufen werden.
Wenn Sie ein benutzerdefiniertes Widget deklarieren, können Sie Callback-Gründe für dieses Widget mit der Funktion REASON definieren. Der Zeichenfolgeausdruck gibt den Argumentnamen an, der aus dem Grund in der UID-Datei gespeichert wird. Dieser Ursachenname wird zur Laufzeit an die Funktion zur Widgeterstellung übergeben.
- TRANSLATION_TABLE( StringExpression [,...])
- Jedes AIXwindows -Widget verfügt über eine Umsetztabelle, die X-Ereignisse (z. B. das Drücken der Maustaste 1) einer Folge von Aktionen zuordnet. Über Widgetargumente, wie z. B. das allgemeine Übersetzungsargument, können Sie eine alternative Gruppe von Ereignissen oder Aktionen für ein bestimmtes Widget angeben. Die Funktion TRANSLATION_TABLE erstellt eine Umsetzungstabelle, die als Wert eines Arguments des Datentyps 'translation_table' verwendet werden kann.
Mit der Funktion TRANSLATION_TABLE können Sie eine der folgenden Umsetztabellenanweisungen verwenden: #override, #augmentoder #replace. Der Standardwert ist #replace. Wenn Sie eine dieser Anweisungen angeben, muss dies der erste Eintrag in der Umsetztabelle sein.
Die Anweisung #override bewirkt, dass doppelte Übersetzungen ignoriert werden. Wenn beispielsweise eine Übersetzung für < Btn1Down > bereits in den aktuellen Übersetzungen für definiert ist, überschreibt NewTranslations die PushButton, durch definierte Übersetzung die aktuelle Definition. Wenn die Anweisung #augment angegeben wird, hat die aktuelle Definition Vorrang. Die Anweisung #replace ersetzt alle aktuellen Übersetzungen durch die in der Ressource XmNtranslations angegebenen Übersetzungen.
Dateien
- /usr/include/uil/Uil.h
- /usr/include/uil/UilDBDef.h
- /usr/include/uil/UilDef.h
- /usr/include/uil/UilSymDef.h
- /usr/include/uil/UilSymGl.h