COMPOSE

#### Search Results

Search

# COMPOSE

Dieses Statement kann nur verwendet werden, wenn das Bürosystem Con-nect und das Textformatierungssystem Con-form installiert sind.

`COMPOSE`
[RESETTING-clause]
[MOVING-clause]
[ASSIGNING-clause]
[FORMATTING-clause]
[EXTRACTING-clause]

Wenn Sie mehr als eine Klausel (clause) angeben, werden diese in der oben abgebildeten Reihenfolge verarbeitet.

Dieses Dokument behandelt folgende Themen:

- Funktion COMPOSE

- Syntax-Beschreibung COMPOSE

- Der Formatiervorgang

- Verarbeitung im Dialog-Modus

- Eingabe-/Ausgabe-Verarbeitung durch Nicht-Natural-Programme

- Beispiele COMPOSE

Eine Erläuterung der in dem Syntax-Diagramm verwendeten Symbole entnehmen Sie dem Abschnitt Syntax-Symbole.

## Funktion COMPOSE

Mit dem Statement `COMPOSE` können Sie die Textformatierung durch Con-form (das von Con-nect verwendete Textformatiersystem) direkt von einem Natural-Programm aus auslösen.

Der zu formatierende Text kann entweder mittels Variablen zur Verfügung gestellt werden oder aus einem Con-nect-Textblock (einem Dokument, das Con-form-Formatierbefehle enthält) abgerufen werden.

Die Inhalte von Natural-Variablen können als Variablen an Con-form übergeben werden und dynamisch in den formatierten Text eingefügt werden.

Die Werte einer Con-form-Variablen können auch vom Textformatiersystem wieder an das Natural-Programm übergeben werden.

Wenn die Con-form-Anweisungen ausgeführt worden sind (d.h. wenn ein formatiertes Dokument erstellt wurde), wird die Ausgabe an eines der folgenden Ziele geleitet:

- einen Natural-Report,

- ein Dokument in der Con-nect-Systemdatei,

- Variablen in dem Natural-Programm, welches das `COMPOSE`-Statement ausführt,

- ein Nicht-Natural-Programm.

## Syntax-Beschreibung COMPOSE

- RESETTING-Klausel

- MOVING-Klausel

- ASSIGNING-Klausel

- FORMATTING-Klausel

- EXTRACTING-Klausel

### RESETTING-Klausel

Mit dieser Klausel können Sie Informationen aus dem Textformatierbereich des Con-form-Buffer löschen und Speicherplatz im Con-form-Buffer freigeben, welcher mit dem Profilparameter `CSIZE` im Natural-Parametermodul zugewiesen wird.

`RESETTING` |  |  | `DATAAREA` `TEXTAREA` `MACROAREA` `ALL` |  |

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`DATAAREA` | Löscht alle aktiven Textvariablen.
`TEXTAREA` | Löscht alle Texteingabedaten. Anmerkung Aus Kompatibilitätsgründen bezieht sich das Wort `TEXTAREA` auf `DATAAREA`, so wie es in der `MOVING`-Klausel verwendet wird.
`MACROAREA` | Löscht alle Textmakros.
`ALL` | Löscht alle aktiven Textvariablen, Texteingabedaten und Textmakros.

Siehe auch Beispiel 1 und Beispiel 2.

### MOVING-Klausel

Mit dieser Klausel können Sie Textzeilen in den Textformatierbereich des Con-form-Buffer oder direkt in das Formatierungssystem übertragen und die formatierte Textausgabe vom Con-form-Buffer abrufen.

Mit dieser Klausel können ein oder mehrere Textwerte in den Textformatierbereich übertragen werden (siehe Syntax 1). Dieser Bereich kann als Eingabequelle für Formatieroperationen verwendet werden.

Wartet das Textformatierungssystem gerade auf Eingaben (siehe Verarbeitung im Dialog-Modus), wird der Text direkt an es übergeben, ohne im Con-form-Buffer zwischengespeichert zu werden (siehe Syntax 1 und Syntax 2). Die Source-Eingabe wird mit der `LAST`-Option beendet.

Wartet der formatierte Text gerade darauf, ausgegeben zu werden (siehe Verarbeitung im Dialog-Modus), dann dient Syntax 3 der `MOVING`-Klausel dazu, die Kontrolle vom Natural-Programm wieder an das Textformatierungssystem zu übergeben.

Zur Beschreibung der Statusvariablen siehe FORMATTING-Klausel.

Je nach Status der Dialog-Modus-Verarbeitung können Sie eine der folgenden Formen der `MOVING`-Klausel verwenden:

#### Syntax 1 - Dialogmodus für Eingabe

Syntax 1 der `MOVING`-Klausel gilt, wenn die Formatierung noch nicht begonnen hat oder das Textformatierungssystem im Dialog-Modus für Eingabe ist und auf Eingabedaten wartet (`TERM` in der Statusvariablen "State").

`MOVING` [operand1] 37 [`TO DATAAREA`] [`LAST`]
[`STATUS` [`TO`] operand2 [operand3 [operand4 [operand5]]]]

#### Syntax 2 - Dialogmodus für Ein- und Ausgabe

Syntax 2 der `MOVING`-Klausel gilt, wenn das Textformatierungssystem im Dialog-Modus für Ein- und Ausgabe ist und auf weitere Eingabedaten wartet (Status `TERM` in der Statusvariablen "State"). In diesem Modus akzeptiert der Formatierer jeweils nur eine Eingabezeile.

Der Ausführungskontext kann sich zwischen einer Reihe ausgeführter `COMPOSE`-Statements ändern. Daher müssen die Ausgabevariablen erneut angegeben werden, selbst wenn der Formatierer auf Eingabedaten wartet.

`MOVING` |  |  | operand1 [`TO DATAAREA`] |  |  | [`OUTPUT`] `TO` `VARIABLES` operand6 20
| `LAST`
[`STATUS` [`TO`] operand2 [operand3 [operand4 [operand5]]]]

#### Syntax 3 - Dialogmodus für Ausgabe

Syntax 3 der `MOVING`-Klausel gilt, wenn das Textformatierungssystem im Dialog-Modus für Ausgabe (und möglicherweise gleichzeitig für Eingabe) ist und die Ausgabe an das Natural-Programm übergibt (Status `STRG` in der Statusvariablen "State").

`MOVING` `OUTPUT` [`TO VARIABLES`] operand6 20
[`STATUS` [`TO`] operand2 [operand3 [operand4 [operand5]]]]

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` | C | S | A |  |  | A | N | P |  |  |  |  |  |  |  |  |  | ja | nein
`operand2` |  | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | ja
`operand3` |  | S |  |  |  |  |  |  |  |  | B |  |  |  |  |  |  | ja | ja
`operand4` |  | S |  |  |  |  |  |  |  |  | B |  |  |  |  |  |  | ja | ja
`operand5` |  | S |  |  |  |  |  |  |  |  | B |  |  |  |  |  |  | ja | ja
`operand6` |  | S | A |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`operand1` | Enthält die (unformatierten) Eingabe-Textzeilen. Format/Länge: (An), dabei ist n maximal 253; (Nn) oder (Pn), dabei ist n maximal 29
`operand2` | Enthält die Statusvariable "State" (Status der Formatierung). Format/Länge: (A4)
`operand3` | Enthält die Statusvariable "Position" (Seitenzahl). Format/Länge: (B4)
`operand4` | Enthält die Statusvariable "Position" (Zeilennummer). Format/Länge: (B4)
`operand5` | Enthält die Statusvariable "Amount of Output Data" (Menge der Ausgabedaten, d.h. Anzahl der Zeilen). Format/Länge: (B4)
`operand6` | Enthält die (formatierten) Ausgabe-Textzeilen. Format/Länge: (An), dabei ist n maximal 253

### ASSIGNING-Klausel

Mit dieser Klausel können Sie Werte von Natural-Variablen zu Con-form-Textvariablen zuweisen. Anschließende Formatiervorgänge können sich auf diese Textvariablen beziehen.

`ASSIGNING` [`TEXTVARIABLE`] {operand1=operand2}, 19

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`operand2` | C | S |  |  |  | A | N | P |  |  |  |  |  |  |  |  |  | ja | ja

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`operand1` | `operand1` ist der Name der Con-form-Textvariablen. Die Namen der Textvariablen müssen in Großbuchstaben angegeben werden. Format/Länge: (An), dabei ist n maximal 253
`operand2` | `operand2` ist der Name einer gegebenen Natural-Variablen. Format/Länge: (An), dabei ist n maximal 253; (Nn) oder (Pn), dabei ist n maximal 29

Siehe auch Beispiel 3 und Beispiel 4.

### FORMATTING-Klausel

Mit dieser Klausel können Sie Con-form dazu veranlassen, eine formatierte Ausgabe zu erzeugen. Diese Klausel dient dazu, Text in der endgültig formatierten Form zu erstellen, d.h. mit korrekten Zeilen- und Seitenumbrüchen, unter Verwendung von Eingabedaten, die aus einer Kombination von Text und Con-form-Statements bestehen können.

Die Formatier-Optionen werden in einer oder mehreren Subklauseln (subclauses) angegeben. Falls keine Subklauseln angegeben werden, nimmt Con-form die gültigen Standard-Formatieroptionen.

Die Statusvariable wird im Dialog-Modus verwendet.

`FORMATTING` |  |  | OUTPUT-subclause INPUT-subclause STATUS-subclause PROFILE-subclause MESSAGES-subclause ERRORS-subclause ENDING-subclause STARTING-subclause |  |  |

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`OUTPUT-subclause` | Das Ausgabemedium. Dies kann ein Natural-Report, ein Dokument in einem Con-nect-Büro, eine oder mehrere Natural-Variablen (oder ein Array von Natural-Variablen) oder ein Nicht-Natural-Programm sein. Siehe Output-Subklausel.
`INPUT-subclause` | Das Eingabemedium. Dies kann ein Con-nect-Dokument, sowie auch der Textformatierbereich des Con-form-Buffer (siehe `DATAAREA` in der MOVING-Klausel), die Umgebung des Natural-Programms (auch mehrere), welches die `COMPOSE`-Statements ausführt (siehe auch MOVING-Klausel), ein Nicht-Natural-Programm oder eine Kombination dieser vier Möglichkeiten sein.
`STATUS-subclause` | Der Status des Formatiervorgangs. Der Formatiervorgang kann die mehrfache Ausführung eines `COMPOSE`-Statements umfassen (bei Verarbeitung im Dialog-Modus). Zum Beispiel wird die Eingabe von einem Natural-Programm in den Textformatierbereich gestellt, und die Ausgabe wird vom Textformatierbereich an die Umgebung eines Natural-Programms (d.h. an eine oder mehrere Natural-Variablen) übergeben. Deshalb muss das Natural-Programm über den Status der Formatierung informiert werden. Folgende Variablen werden während der Formatierung an das Natural-Programm übergeben:
State | Status:
`TERM` − wenn der Dialog-Modus für die Eingabe bereit ist.
`STRG` − wenn der Dialog-Modus für die Ausgabe bereit ist.
`END` − wenn die Formatierung erfolgreich beendet wurde.
`ENDX` − wenn die Formatierung nicht erfolgreich beendet wurde.
Position | Seiten- und Zeilennummer des Dokuments, das gerade formatiert wird. Diese Angaben werden in zwei separaten Variablen (Seitenposition und Zeilenposition) gehalten.
Amount of Output Data | Die Anzahl formatierter Ausgabezeilen, die an das Natural- Programm übergeben werden. Der Formatierer benutzt diese Zahl als Zeiger auf die nächste zu füllende Ausgabevariable. Der Wert erhöht sich um 1, bevor die Ausgabezeile ausgegeben wird. Liegt der aktuelle Wert außerhalb des Bereichs, wird der Wert auf 1 gesetzt.
`PROFILE-subclause` | Der Textblock, der vor den Eingaben verarbeitet wird. Siehe PROFILE-Subklausel.
`MESSAGES-subclause` | Steuert die Ausgabe von Warnmeldungen und statistischen Informationen und die Fehlerverarbeitung. Siehe MESSAGES-Subklausel und ERRORS-Subklausel.
`ERRORS-subclause`
`ENDING-subclause` | Dient zur Festlegung der Seite, bis zu der die Ausgabe des formatierten Textes erfolgen soll. Siehe ENDING-Subklausel.
`STARTING-subclause` | Dient zur Festlegung der Seite, ab der die Ausgabe des formatierten Textes erfolgen soll. Siehe STARTING-Subklausel.

#### OUTPUT-Subklausel

Mit dieser Subklausel können Sie den formatierten Con-form-Text an eine bestimmte Ausgabestelle schicken.

Wird diese Subklausel weggelassen, dann wird die Ausgabe standardmäßig an den Natural-Hauptdrucker geschickt.

`OUTPUT` |  | (rep) `SUPPRESSED` `CALLING` operand1 `TO VARIABLES` [`CONTROL` operand2 operand3] operand4 20 DOCUMENT-option |

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`operand2` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`operand3` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`operand4` |  | S | A |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`OUTPUT (rep)` | Wenn die Ausgabe an einen Drucker geschickt wird (d.h. wenn die Reportnummer nicht 0 ist) und ein Con-nect-Druckerprofil (mit der Con-nect-API-Funktion `Z-DRIVER`) geladen wurde, werden die Optionen zur Hervorhebung von Teilen des formatierten Ausgabetexts über die Einstellungen in diesem Profil gesteuert. Wenn ein Druckerprofil aktiv ist und keine logische Seitenvorschubsteuerung angegeben wurde, werden Seitenvorschübe über die entsprechenden internen Natural-Nukleusfunktionen eingefügt. Weitere Texthervorhebungsoptionen, die im gerade aktiven Con-nect-Druckerprofil nicht definiert sind, werden ignoriert. Anmerkung Bei der Ausführung eines `COMPOSE RESETTING ALL`-Statements oder eines `COMPOSE FORMATTING`-Statements, bei dem die Ausgabe nicht an einen Report geschickt wird, wird ein Druckerprofil aus dem Textformatierbereich entladen. Wird die Ausgabe an Report 0 geschickt oder ist kein Druckerprofil aktiv, übergibt Con-nect die Verantwortung für die Ausgabeverarbeitung an die Natural-Nukleus-Routinen. In diesem Falle werden nur die Texthervorhebungsoptionen Fettdruck, Unterstreichung und Kursivschrift berücksichtigt. Anmerkung Ein Report, der in einem Statement `DEFINE PRINTER (n) OUTPUT 'CONNECT'` referenziert wird, darf nicht als Ausgabeziel in einem `COMPOSE FORMATTING`-Statement angegeben werden.
`OUTPUT SUPPRESSED` | Mit dieser Option können Sie die Ausgabe unterdrücken.
`OUTPUT CALLING operand1` | `operand1` ist der Name des Programms, das aufgerufen wird. Format/Länge: (An), dabei ist n maximal 8 Siehe Abschnitt Eingabe-/Ausgabe-Verarbeitung durch Nicht-Natural-Programme.
`OUTPUT TO VARIABLES [CONTROL operand2 operand3] operand4` | Normalerweise wird der formatierte Text in seiner endgültigen Form an ein Array von Natural-Variablen übergeben. Jede Zeile füllt eine Variable (wenn eine Zeile nicht ganz in eine Variable passt, wird sie abgeschnitten). Texthervorhebungsoptionen werden ignoriert, mit Ausnahme angegebener `CONTROL`-Variablen, die dazu dienen, Textteile hervorzuheben (d.h. fett oder unterstrichen auszugeben). Wenn die `CONTROL`-Variablen `I` und `N` angegeben werden, wird formatierter Text in einem Zwischenformat erzeugt (d.h. durchsetzt mit logischen Steuersequenzen). `operand2` ist das Anfang-Zeichen. Format/Länge: (A1). `operand3` ist das Ende-Zeichen. Format/Länge: (A1). Beispiel mit spitzen Klammern als Anfang- und Ende-Zeichen:
    <ABC...XYZ>
`operand4` ist das Ausgabefeld. Format/Länge: (An), dabei ist n maximal 253 Weitere Informationen siehe Abschnitt Verarbeitung im Dialog-Modus und speziell Abschnitt Dialog-Modus für Ausgabe.
`OUTPUT DOCUMENT-option` | Siehe DOCUMENT-Option.

#### DOCUMENT-Option

Mit der `DOCUMENT`-Option der `OUTPUT`-Subklausel können Sie den formatierten Text von Con-form in fertig formatierter Form (Txt) oder im Zwischenformat (Int) an ein Con-nect-Büro schicken. Der Text im Zwischenformat (Int) kann nicht verändert werden.

`DOCUMENT` |  | `INTO` |  |  | `FINAL` `INTERMEDIATE` |  |  | [`CABINET`] operand1 [`PASSW=`operand2] |
| [`GIVING`] |  | operand3 [operand4] operand4 [operand3] |  |

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`operand2` |  | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`operand3` |  | S |  |  |  |  |  |  |  |  | B |  |  |  |  |  |  | ja | ja
`operand4` |  | S |  |  |  |  |  |  |  |  | B |  |  |  |  |  |  | ja | ja

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`DOCUMENT INTO FINAL | INTERMEDIATE CABINET` | Wenn Sie das Schlüsselwort `FINAL` angeben, wird das Dokument in fertig formatierter Form erstellt. In diesem Fall werden spezifische Texthervorhebungsoptionen, z.B. Fettdruck oder Kursivschrift) ignoriert Wenn Sie das Schlüsselwort `INTERMEDIATE` angeben, wird das Dokument ohne Namen in das Fach `COMPOSE` gestellt. In der Beschreibungszeile steht der Name des Programms, welches das `COMPOSE FORMATTING`-Statement ausgeführt hat, sowie Datum und Uhrzeit der Ausführung.
`CABINET operand1` | Für `operand1` können Sie ein spezielles Büro angeben. Format/Länge: (An), dabei ist n maximal 8 Wenn Sie operand1 nicht benutzen, wird das Dokument in das aktuelle Benutzerbüro gestellt (d.h. das Büro, dessen ID der des gerade aktiven Natural-Benutzers entspricht). Con-form erzwingt, dass Con-nect-Zugriffsbeschränkungen eingehalten werden, und akzeptiert nur Büro-IDs, die in Con-nect definiert sind. Anmerkung Büro-IDs müssen in Großbuchstaben angegeben werden.
`PASSW=operand2` | Ein Passwort müssen Sie dann angeben, wenn Sie ein Dokument in einem Büro speichern wollen, auf das Sie als angenommener aktueller Benutzer keinen Zugriff haben. Format/Länge: (An), dabei ist n maximal 8
`operand3` | operand3 wird vom Textformatierungssystem verwendet, um einen eindeutigen Schlüssel vom Dokument an das Natural-Programm zurückzugeben. Er wird nur aus Kompatibilitätsgründen unterstützt. Format/Länge: (B10)
`operand4` | operand4 wird vom Textformatierungssystem verwendet, um eine ISN, die auf das formatierte Ausgabedokument zeigt, an das Natural-Programm zurückzugeben. Diese ISN kann bei der Referenzierung eines Dokuments in aufeinanderfolgenden Aufrufen von Con-nect-APIs nützlich sein. Format/Länge: (B4)

#### INPUT-Subklausel

Mit dieser Subklausel können Sie angeben, woher die Eingaben für das Textformatierungssystem kommen..

Anmerkungen:

1. Ohne diese Subklausel wird standardmäßig `DATAAREA` (Textformatierbereich von Con-form) verarbeitet.

`INPUT` |  | `DATAAREA` |  | `FROM` |  | `EXIT` operand2 | 9 |  |
`CABINET` operand2 [`PASSW=`operand3]
operand1 `FROM` |  | `EXIT` operand2 | 10 |
`CABINET` operand2 [`PASSW=`operand3]

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`operand2` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`operand3` |  | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`DATAAREA` | Die Eingaben können aus dem Textformatierbereich kommen (eine Kombination aus Text aus dem Textformatierbereich und aus dem Dialog-Modus ist ebenfalls möglich), der mit einer oder mehreren `MOVING`-Operationen gefüllt werden muss. SieheMOVING-Klausel.
`operand1` | Alternativ können die Eingaben auch von einem Textblock genommen werden. Der Name des Textblocks wird mit `operand1` angegeben. Anmerkung Textblock-IDs müssen in Großbuchstaben angegeben werden. Format/Länge: (An), dabei ist n maximal 253 Der Textblock kann in einem Con-nect-Büro enthalten sein oder über ein Nicht-Natural-Programm zur Verfügung gestellt werden. Beim Aufrufen eines solchen Programms gelten die für das `CALL`-Statement gültigen Konventionen. Es kann eine Hierarchie von Con-nect-Büros oder Nicht-Natural-Programmen angegeben werden, von denen jede nacheinander nach dem in operand1 benannten Textblock abgesucht wird.
`CABINET operand2` | Die Eingaben (ein mit `operand1` angegebener Textblock) können aus einem bestimmten Con-nect-Büro entmommen werden. `operand2` ist der Name des Con-nect-Büros. Anmerkung Büro-IDs müssen in Großbuchstaben angegeben werden. Format/Länge: (An), dabei ist n maximal 8
`EXIT operand2` | `operand2` ist der Name des Exit. Format/Länge: (An), dabei ist n maximal 8
`PASSW=operand3` | Ein Passwort muss angegeben werden, wenn ein Dokument in einem Büro gespeichert wird, auf das unter der aktuellen Benutzerkennung kein Zugriff erlaubt ist. Format/Länge: (An), dabei ist n maximal 8 Con-form erzwingt, dass Con-nect-Zugriffsbeschränkungen eingehalten werden, und akzeptiert nur Büro-IDs, die in Con-nect definiert sind.

Siehe auch Beispiel 4.

#### STATUS-Subklausel

Die in der `FORMATTING`-Klausel verwendete `STATUS`-Subklausel entspricht der `STATUS`-Subklausel, die in der `MOVING`-Klausel vorhanden ist. Sie sollten sie verwenden, um sicherzustellen, dass das der Formatierungsvorgang immer den passenden Status für den gegebenen Verarbeitungsschritt hat.

[`STATUS` operand1 [operand2 [operand3 [operand4]]]]

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`Operand1` |  | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein
`Operand2` |  | S |  |  |  |  |  |  |  |  | B |  |  |  |  |  |  | ja | nein
`Operand3` |  | S |  |  |  |  |  |  |  |  | B |  |  |  |  |  |  | ja | nein
`Operand4` |  | S |  |  |  |  |  |  |  |  | B |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`operand1` | Enthält die Statusvariable "State" (Status der Formatierung). Format/Länge: (A4)
`operand2` | Enthält die Statusvariable "Position" (Seitenzahl). Format/Länge: (B4)
`operand3` | Enthält die Statusvariable "Position" (Zeilennummer). Format/Länge: (B4)
`operand4` | Enthält die Statusvariable "Amount of Output Data" (Menge der Ausgabedaten, d.h. Anzahl der Zeilen). Format/Länge: (B4)

#### PROFILE-Subklausel

Diese Subklausel bewirkt, dass der Inhalt des angegebenen Textblocks verarbeitet wird, bevor in der `INPUT`-Subklausel angegebene Eingaben verarbeitet werden (standardmäßig wird ein Textblock nicht als Profil verarbeitet).

`PROFILE` operand1

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`operand1` | `operand1` ist der Name des Textblocks(z.B. `FPROFILE` - Formatierungsprofil). Format/Länge: (An), dabei ist n maximal 32

#### MESSAGES-Subklausel

Mit dieser Subklausel können Sie bestimmen, ob bei Beendigung der Formatierung die Ausgabe von Warnmeldungen und statistische Informationen erfolgt oder die Ausgabe unterdrückt wird (der Fehler wird ignoriert).

`MESSAGES` |  | [`LISTED`] [`ON`] (rep) `SUPPRESSED` |

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`(rep)` | Mit der `(rep)`-Notation geben Sie den Report an, für den die `MESSAGES`-Subklausel gültig ist. Sie können einen Wert im Bereich von `0 - 31` angeben. Der Wert für `(rep)` kann auch ein logischer Name sein, der mittels des `DEFINE PRINTER`-Statements zugewiesen wurde Wie Sie das Format eines mit Natural erstellten Report steuern können ist im Abschnitt Steuerung der Ausgabe von Daten im Leitfaden zur Programmierung beschrieben.
`SUPPRESSED` | Wenn Sie das Schlüsselwort `SUPPRESSED` angeben, werden keine Meldungen ausgegeben und Fehler werden ignoriert.

#### ERRORS-Subklausel

Mit dieser Subklausel können Sie bestimmen, was im Falle eines Formatierungsfehlers geschehen soll. Der Fehler kann von einer Natural-Standard-Fehlerroutine verarbeitet oder in einem bestimmten Natural-Report (rep) aufgelistet werden.

`ERRORS` |  | [`LISTED`] [`ON`] (rep) `INTERCEPTED` |

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`(rep)` | Mit der `(rep)`-Notation geben Sie den Report an, für den die `ERRORS`-Subklausel gültig ist. Sie können einen Wert im Bereich von `0 - 31` angeben. Der Wert für `(rep)` kann auch ein logischer Name sein, der mittels des `DEFINE PRINTER`-Statements zugewiesen wurde Wie Sie das Format eines mit Natural erstellten Report steuern können ist im Abschnitt Steuerung der Ausgabe von Daten im Leitfaden zur Programmierung beschrieben.
`INTERCEPTED` | Durch Angabe des Schlüsselwortes `INTERCEPTED` veranlassen Sie, dass Fehler durch die Standard-Fehlerroutine von Natural verarbeitet werden.

Anmerkung
Fehler und Meldungen schließen einander aus. Bei manchen Fehlern wird die Natural-Fehlerroutine aufgerufen, selbst wenn eine andere Option angegeben wurde. Fehler und Meldungen dürfen nicht an einen Report geschickt werden, der über das Statement `DEFINE PRINTER (n) OUTPUT 'CONNECT'` an Con-nect geleitet wird.

#### ENDING-Subklausel

Diese Subklausel bewirkt, dass die Ausgabe des formatierten Textes nach einer bestimmten Seite (Seitennummer) unterdrückt wird bzw. die Ausgabe sich auf eine festgelegte Anzahl von Seiten beschränken soll.

`ENDING` |  | [`AT`] [`PAGE`] operand1 `AFTER` operand1 [`PAGES`] |

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` | C | S |  |  |  |  | N | P |  |  |  |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`ENDING [AT] [PAGE] operand1` | Bewirkt, dass die Ausgabe des formatierten Textes nach einer bestimmten Seite unterdrückt wird. Die Angabe dieser Seite erfolgt in `operand1`. Format/Länge: (Nn) oder (Pn), dabei ist n maximal 5
`ENDING AFTER operand1 [PAGES]` | Gibt an, dass die Ausgabe sich auf eine in `operand1` festgelegte Anzahl von Seiten beschränken soll.

#### STARTING-Subklausel

Die Subklausel bewirkt, dass die Ausgabe des formatierten Textes solange unterdrückt wird, bis die angegebene Seite erreicht ist.

`STARTING` [`FROM`] [`PAGE`] operand1

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` | C | S |  |  |  |  | N | P |  |  |  |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`operand1` | Die Ausgabe des formatierten Textes wird solange unterdrückt wird, bis die in operand1 angegebene Seite erreicht ist. Format/Länge: (Nn) oder (Pn), dabei ist n maximal 5

### EXTRACTING-Klausel

Mit dieser Klausel können Sie Natural-Variablen die Werte von Con-form-Textvariablen zuweisen. Die aktuellen Textvariablenwerte können das Ergebnis von vorhergehenden Formatiervorgängen sein.

`EXTRACTING` [`TEXTVARIABLE`] {operand1=operand2}, 19

Operanden-Definitionstabelle:

Operand | Mögliche Struktur | Mögliche Formate | Referenzierung erlaubt | Dynam. Definition
--- | --- | --- | --- | ---
`operand1` |  | S |  |  |  | A | N | P |  |  |  |  |  |  |  |  |  | ja | ja
`operand2` | C | S |  |  |  | A |  |  |  |  |  |  |  |  |  |  |  | ja | nein

Syntax-Element-Beschreibung:

Syntax-Element | Beschreibung
--- | ---
`operand1` | `operand1` ist der Name einer gegebenen Natural-Variablen. Format/Länge: (An), dabei ist n maximal 253; (N) oder (Pn), dabei ist n maximal 29
`operand2` | `operand2` ist der Name einer Con-form-Textvariablen. Der Name muss in Großbuchstaben angegeben werden. Format/Länge: (An), dabei ist n maximal 253

Siehe auch Beispiel 6.

## Der Formatiervorgang

Der Formatiervorgang beginnt, wenn die `FORMATTING`-Klausel des `COMPOSE`-Statements ausgeführt wird (unter Umständen auch dann, wenn bei beabsichtigter Texteingabe durch die `MOVING`-Klausel noch keine solche Eingabe vorliegt). Solange der Formatiervorgang aktiv ist, werden Texteingaben, die aus der Ausführung des `COMPOSE MOVING`-Statements resultieren, direkt zur Formatierung übertragen (und können in späteren Formatiervorgängen nicht wiederverwendet werden). Ist der Formatiervorgang nicht aktiv, werden Texteingaben im Textformatierbereich des Con-form-Buffer zwischengespeichert. Dadurch ist es möglich, die Eingabe für mehrere Formatiervorgänge wiederzuverwenden.

Da der Con-form-Buffer am Ende des Natural-Programms nicht gelöscht wird, brauchen die betreffenden `COMPOSE`-Statements nicht alle in demselben Natural-Programm zu stehen; sie können auch in mehreren nacheinander aufgerufenen Programmen stehen.

Die Ausführung einer `RESETTING`- oder `FORMATTING`-Klausel oder das Auftreten eines schwerwiegenden Formatierfehlers beenden den aktiven Formatierdurchlauf.

Das Ende der Eingabedaten wird durch die `LAST`-Subklausel der `MOVING`-Klausel bestimmt.

Wenn ein Con-nect-Dokument als Eingabequelle verwendet wird, wird davon ausgegangen, dass das Ende der Eingabedaten am Ende des Dokuments erreicht ist.

Anmerkung
Es empfiehlt sich, die `STATUS`-Subklausel der `FORMATTING`- bzw. `MOVING`-Klausel zu verwenden, um sicherzustellen, dass sich der Formatiervorgang jeweils im richtigen Status für den betreffenden Verarbeitungsschritt befindet.

## Verarbeitung im Dialog-Modus

Bei der Verarbeitung im Dialog-Modus erfolgt eine Reihe von Interaktionen zwischen dem Benutzerprogramm und dem Textformatierungssystem, die während der Formatierung der Eingabe und der Erzeugung der Ausgabe stattfinden.

Der Dialog-Modus erlaubt es dem Benutzerprogramm, auf jeder Stufe der Eingabehierarchie dem Textformatierungssystem Rohtext als Eingabe zu liefern. In diesem Modus werden auch formatierte Ausgaben direkt aus der aktuellen Programmumgebung angenommen.

Der Dialog kommt dadurch zustande, dass der Formatiervorgang in eine Reihe von Schritten unterteilt wird, von denen jeder einzelne durch ein eigenes `COMPOSE`-Statement aufgerufen wird:

- Dialog-Modus für Eingabe

- Dialog-Modus für Ausgabe

- Dialog-Modus für Ein- und Ausgabe

- Ausführung von COMPOSE-Statements im Dialog-Modus

### Dialog-Modus für Eingabe

Der Dialog-Modus für Eingabe wird aktiviert, wenn `DATAAREA` (Textformatierbereich) die Quelle des Eingabetextes ist, oder wenn die Con-form-Anweisung `.TE ON` auftaucht, und der Textformatierbereich keinen weiteren zu verarbeitenden Text mehr enthält. Der Dialog-Modus für Eingabe wird durch das Wort `TERM` in der Statusvariablen "State" angezeigt.

Das Benutzerprogramm sollte daraufhin die erforderlichen Eingaben liefern, indem es die `MOVING`-Klausel eines anschließend verarbeiteten `COMPOSE`-Statements aufruft. Das Benutzerprogramm kann die Terminaleingaben beenden, indem es die `LAST`-Option der `MOVING`-Klausel oder die Formatieranweisung `.TE OFF` verwendet, falls der Dialog-Modus durch `.TE ON` begonnen wurde, und zwar als Text mittels der `MOVING`-Klausel. Das Ende der Formatierung wird durch `END` (bzw. `ENDX` im Falle eines Fehlers) in der Statusvariablen "State" angezeigt.

Siehe auch Beispiel 7.

### Dialog-Modus für Ausgabe

Der Dialog-Modus für Ausgabe wird aktiviert, wenn das Ausgabeziel `TO VARIABLES` ist. Das Textformatierungssystem gibt die Kontrolle an das Natural-Programm zurück, sobald die angegebenen Natural-Variablen gefüllt sind oder ein Seitenende erreicht ist (je nachdem, was zuerst der Fall ist). Der Dialog-Modus für Ausgabe wird durch `STRG` in der `STATUS`-Variablen "State" angezeigt.

Das Benutzerprogramm sollte daraufhin die soeben in die Natural-Variablen gestellte formatierte Ausgabe übernehmen und einen weiteren Satz Natural-Variablen als Ausgabeziel in einem anschließend verarbeiteten `COMPOSE MOVING`-Statement bereitstellen. Das Ende der Formatierung wird durch `END` (bzw. `ENDX` im Falle eines Fehlers) in der Statusvariablen "State" angezeigt.

Anmerkung
Bei Verwendung des Dialog-Modus (siehe `INPUT`- und `OUTPUT`-Subklauseln) erstreckt sich der Formatiervorgang in der Regel über mehrere Ausführungen eines `COMPOSE`-Statements.

### Dialog-Modus für Ein- und Ausgabe

Der Dialog-Modus kann auch für kombinierte Ein- und Ausgabeverarbeitung verwendet werden. Wenn das Textformatierungssystem weitere Eingabedaten anfordert (angezeigt durch den Status `TERM` in der Statusvariablen "State") oder eine Ausgabe erzeugt hat (angezeigt durch den Status `STRG`), muss das Natural-Programm entsprechend reagieren.

Im Dialog-Modus für kombinierte Ein- und Ausgabeverarbeitung kann das Textformatierungssystem jeweils nur eine Eingabezeile annehmen. Lediglich im reinen Eingabe-Modus kann es mehrere Zeilen gleichzeitig annehmen.

### Ausführung von COMPOSE-Statements im Dialog-Modus

Wie bereits erwähnt, wird der Dialog-Modus über ein `COMPOSE FORMATTING`-Statement aktiviert, welches eine Reihe von `COMPOSE MOVING`-Ausführungen umfasst. Beachten Sie dabei bitte folgendes:

- `COMPOSE ASSIGNING`- und `COMPOSE EXTRACTING`-Statements sind nur bei aktivem Dialog-Modus gültig.

- `COMPOSE RESETTING`- und `COMPOSE FORMATTING`-Statements erzwingen die sofortige Beendigung aller Formatierungsarbeiten.

## Eingabe-/Ausgabe-Verarbeitung durch Nicht-Natural-Programme

In Abhängigkeit von den in der `FORMATTING`-Klausel angegebenen Parametern ist es möglich, Ein- und Ausgaben mit Nicht-Natural-Programmen zu verarbeiten. Solche Programme werden über den gleichen Mechanismus wie beim Natural-`CALL`-Statement aufgerufen.

Das `COMPOSE`-Statement tauscht mit diesen Programmen Parameter aus, und zwar unter Verwendung von Standard-Linkage-Konventionen (dynamisches Laden ist in einer CICS-Umgebung nicht möglich).

Anmerkung
Verarbeitung der Ein-/Ausgaben durch Nicht-Natural-Programme ist nur auf Großrechnern möglich; auf anderen Plattformen werden die entsprechenden Teile des `COMPOSE`-Statements ignoriert.

In Abhängigkeit vom Status des Formatiervorgangs werden zwei oder drei Parameter zwischen dem Formatierer und den Nicht-Natural-Programmen übergeben.

Parameter 1 (Format/Länge A1) | Der Funktionscode wird vom Formatierer an Nicht-Natural-Programme übergeben. Mögliche Werte:
`I` | Initiieren (Eingabe, Ausgabe)
`O` | Dokument öffnen (Eingabe)
`R` | Eine Zeile des Dokuments lesen (Eingabe)
`W` | Eine Ausgabezeile schreiben (Ausgabe)
`C` | Dokument schließen (Eingabe)
`T` | Beenden (Eingabe, Ausgabe).
Parameter 2 (Format/Länge B1) | Der Response Code wird von Nicht-Natural-Programmen an das Formatierungssystem übergeben. Mögliche Werte:
`X'00'` | Funktion erfolgreich ausgeführt.
`X'01'` | Bei Funktion `O`: Dokument nicht gefunden.
Bei Funktion `R`: Ende des Dokuments erreicht.
`X'FF'` | Funktion nicht beendet.
Parameter 3 (Format A1/256) | Bei den Funktionen `O` und `W` werden diese Parameter vom Formatierungssystem an Nicht-Natural-Programme übergeben. Dagegen werden Parameter von der Funktion `R` von Nicht-Natural-Programmen an das Formatierungssystem übergeben.
Bytes 1 - 2 | Geben die Länge n dieses Parameters an.
Bytes 3 - 4 | Leer.
Bytes 5 - n | Funktion `O`: Name des Dokuments.
Funktion `R`: Vom Nicht-Natural-Programm gelesene Zeile.
Funktion `W`: Ausgabezeile vom Formatierer.
Ist ein Seitenvorschub erforderlich, steht vor der Ausgabe ein `N`, andernfalls eine `1`. Angaben zur Hervorhebung von Text (z.B. Fettdruck oder Kursivschrift) werden ignoriert, wenn die Ausgabe an ein Nicht-Natural-Programm übergeben wird.

## Beispiele COMPOSE

- Beispiel 1

- Beispiel 2

- Beispiel 3

- Beispiel 4

- Beispiel 5

- Beispiel 6

- Beispiel 7

### Beispiel 1

Das folgende `COMPOSE`-Statement bewirkt, dass der formatierte Text des im Con-nect-Büro `TLIB` gespeicherten Textblocks `TEXT` auf Report 1 ausgegeben wird. Fehler und statistische Angaben werden auf Report 0 (dem Standarddrucker) ausgegeben.

    COMPOSE RESETTING ALL
            FORMATTING INPUT 'TEXT' FROM CABINET 'TLIB'
            OUTPUT (1)
            MESSAGES LISTED ON (0)

### Beispiel 2

Die folgenden `COMPOSE`-Statements bewirken eine formatierte Textausgabe an Report 0 (Standarddrucker).

    COMPOSE RESETTING ALL
    COMPOSE MOVING '.FI ON' 'This is an example'
    COMPOSE MOVING 'for use of Con-form from'
                   'within Natural applications' LAST
    COMPOSE FORMATTING

### Beispiel 3

Das folgende `COMPOSE`-Statement bewirkt die Zuordnung von Werten zu den Con-form-Textvariablen `&VAR1` und `&VAR2` in einer Con-nect-Prozedur.

    COMPOSE ASSIGNING 'VAR1' = 'Text1', 'VAR2' = 540

### Beispiel 4

Textblock `XYZ` in Büro `XYLIB`:

    .FI ON
    Dear Mr &name.,
    .IL
    I am pleased to invite you to a presentation of our new product &prod..

Natural-Programm:

    ...
    INPUT #NAME (A32) #PROD (A32)
    COMPOSE ASSIGNING 'NAME' = #NAME, 'PROD' = #PROD
            FORMATTING INPUT 'XYZ' FROM CABINET 'XYLIB'
            OUTPUT (1) MESSAGES SUPPRESSED
    ...

Vom Programm erzeugte Eingabe-Map:

      #NAME Davenport
      #PROD NaturalONE

Erzeugte Ausgabe:

      Dear Mr Davenport,

      I am pleased to invite you to a presentation of our new product NaturalONE.

### Beispiel 5

Dies ist ein Beispiel für die Formatierung im Dialog-Modus mit kombinierter Eingabe-/Ausgabe-Verarbeitung. Das Beispielprogramm initiiert Con-forms zeilenorientierten Formatiermodus, übergibt einige Kommandos/Variablen an Con-form und führt eine Subroutine aus, die Statusinformationen und die formatierten Ausgabezeilen auf dem Schirm anzeigt.

    DEFINE DATA LOCAL
    01 #LINES_PER_PERFORM(P5)   /* counts repeat-loops per PERFORM CNF_OUT
    01 #TRACE(A1) INIT<'N'>     /* if 'Y' displays additional trace-infos
    01 #OUT_FORM(A1) INIT<'F'>  /* output format
    01 #START_PAGE (P3) INIT<1> /* beginning of display
    01 #CNTR (P5)               /* Loop counter
    01 #STATI                   /* Status information
     02 #STATUS   (A4)          /* can be STRG TERM END or ENDX
     02 #PAGE     (B4)          /* current page number
     02 #LINE     (B4)          /* current line number on page (not .tt/.bt)
     02 #NO_LINES (B4)          /* number of lines returned
     02 REDEFINE #NO_LINES
      03 #NO_LINES_I (I4)
    01 #OUTPUT(A30/4)           /* output of formatted line
    01 #INDEX (P3)              /* index as pointer to output line
    END-DEFINE
    *
    SET KEY ALL
    SET CONTROL 'M9'
    INPUT
       008/008 'Demonstration of formatted output to variable'(I)
       /   08X 'Enter page to start display    :' #START_PAGE(AD=MIL)
       /   08X 'Display additional trace data ?:' #TRACE(AD=MIT)
       /   08X 'Please select the output format:' #OUT_FORM(AD=MIT)
               '(F=Final without BP/US-marks'
       /   44X 'M=Final with BP/US marks "<>"'
       /   44X 'I=Intermediate)'
       /   50X 'PF3=Exit'(I)
    *
    IF *PF-KEY EQ 'PF3'
       SET CONTROL 'MB'
       STOP
    END-IF
    *
    IF NOT (#OUT_FORM EQ 'F' OR EQ 'M' OR EQ 'I')
       REINPUT ' Please enter valid code!' MARK *#OUT_FORM ALARM
    END-IF
    *
    WRITE TITLE LEFT
         'Stat * Page     * Line     * No.Lines >> Formatted Output'(I)
       / '-'(79)(I)
    *
    SET CONTROL 'MB'
    COMPOSE RESETTING ALL /* clear all text format area of Con-form buffer
    RESET #NO_LINES
    *
    * start line-oriented formatting-mode here
    * starting from 0
    DECIDE ON FIRST VALUE OF #OUT_FORM
       VALUE 'F'
          COMPOSE FORMATTING
               OUTPUT TO VARIABLES #OUTPUT (1:4)      /* to Output
               STATUS #STATUS #PAGE #LINE #NO_LINES   /* get Status
       VALUE 'M'
          COMPOSE FORMATTING
               OUTPUT TO VARIABLES CONTROL '<' '>'
                                   #OUTPUT (1:4)      /* to output
               STATUS #STATUS #PAGE #LINE #NO_LINES   /* get Status
       VALUE 'I'
          COMPOSE FORMATTING
               OUTPUT TO VARIABLES CONTROL 'I' 'N'
                                   #OUTPUT (1:4)      /* to output
               STATUS #STATUS #PAGE #LINE #NO_LINES   /* get Status
       NONE
          STOP
    END-DECIDE
    *
    RESET #NO_LINES
    *
    * Put some commands to Con-form to see something
    *
    COMPOSE MOVING
         '.pl 16;.hs 2;.tt 1Formatting in Variable//;.tt 2//' /* Cmd
         OUTPUT TO VARIABLES #OUTPUT (1:4)           /* to Output
         STATUS #STATUS #PAGE #LINE #NO_LINES        /* get Status
    *
    COMPOSE MOVING
         '.fs 1;.bt Page End #//;.fi on;.tb *=15' /* Commands
         OUTPUT TO VARIABLES #OUTPUT (1:4)           /* to Output
         STATUS #STATUS #PAGE #LINE #NO_LINES        /* get Status
    *
    *
    * loop 40-times, send commands to con-form and display output
    *
    COMPOSE ASSIGNING 'Value' = '1-20' /* Assign value to variable &Value
    *
    FOR #CNTR 1 40                      /* Loop some time
       IF #STATUS NE 'TERM' /* no wait-for-input => error!!!!
          IF #STATUS EQ 'STRG'
             IGNORE
          ELSE
             WRITE 'Unexpected Status-code' #STATUS(AD=OI) 'found!'
                 / 'Execution has stopped....'
             STOP
          END-IF
       END-IF
    *
       IF #CNTR EQ 21
          COMPOSE ASSIGNING 'Value' = '21-40' /* Assign a variable-value
       END-IF
       COMPOSE ASSIGNING 'CNTR' = #CNTR /* Again assignment
       COMPOSE MOVING
            '.BP;&Value *Pass &CNTR;.BR'      /* Commands
            OUTPUT TO VARIABLES #OUTPUT (1:4)     /* to output
            STATUS #STATUS #PAGE #LINE #NO_LINES  /* get status
       PERFORM CNF-OUT                            /* show result
    END-FOR
    COMPOSE MOVING
         LAST                                  /* End of processing
         OUTPUT TO VARIABLES #OUTPUT (1:4)     /* to output
         STATUS #STATUS #PAGE #LINE #NO_LINES  /* get status
    *
    IF #TRACE EQ 'Y'
       WRITE 'End of processing...'(I)
    END-IF
    *
    * Subroutines
    *
    PERFORM CNF-OUT
    *
    * Subroutine to display any waiting output from Con-form
    *
    DEFINE SUBROUTINE CNF-OUT
       RESET #LINES_PER_PERFORM
       REPEAT UNTIL #STATUS EQ 'TERM' /* TERM = input waiting
          PERFORM BREAK               /* do some break processing
          AT BREAK OF #PAGE
             IF #PAGE GT #START_PAGE
                WRITE '-'(79)(I)
             END-IF
             IF #TRACE EQ 'Y'
                WRITE 'End of this page...'(I)
             END-IF
             NEWPAGE
          END-BREAK
          IF #PAGE GE #START_PAGE     /* show line of output
             IF #NO_LINES_I GT 0
                FOR #INDEX 1 #NO_LINES_I
                   ADD 1 TO #LINES_PER_PERFORM /* count loops
                   WRITE NOTIT NOHDR #STATUS '*' #PAGE '*' #LINE
                                             '*' #NO_LINES
                                             '>>' #OUTPUT (#INDEX)
                END-FOR
             END-IF
          END-IF
          IF #STATUS NE 'STRG'         /* if no wait on output
             ESCAPE BOTTOM
          END-IF
          RESET #NO_LINES
          COMPOSE MOVING
               OUTPUT TO VARIABLES #OUTPUT (1:4)    /* get output
               STATUS #STATUS #PAGE #LINE #NO_LINES /* Status
       END-REPEAT
    *
       IF #TRACE EQ 'Y'
        WRITE 'Count of lines per PERFORM was'(I) #LINES_PER_PERFORM(AD=OI)
       END-IF
    *
     END-SUBROUTINE
     SET CONTROL 'MB'
    END

### Beispiel 6

Textblock `'ABC'` in Büro `'ZLIB'`:

    .op das=6
    .CV c=(&A+&B+&D)*&A/12345678901234567.89

Natural-Programm:

    DEFINE DATA LOCAL
     . . .
    01 NA       (P14.1) INIT <-12345678.1>
    01 NB       (N15.1) INIT <1234567890.1>
    01 ND       (P15.1) INIT <1122334455.1>
    01 NC       (N03.6)
    01 NCOMP    (N03.6)
    . . .
    END-DEFINE
    COMPOSE RESETTING ALL
    COMPOSE ASSIGNING 'A'=NA,'B'=NB,'D'=ND
    COMPOSE FORMATTING INPUT 'ABC' FROM CABINET 'ZLIB'
    COMPOSE EXTRACTING NC='C'
    COMPUTE ROUNDED NCOMP=(NA+NB+ND) * NA /12345678901234567.89
    WRITE (0) 'CONFORM C =' NC / 'NATURAL C =' NCOMP
    END

Erzeugte Ausgabe:

    CONFORM C =   -2.344557
    NATURAL C =   -2.344557

### Beispiel 7

Dieses Beispiel erläutert die Benutzung der Formatieranweisung `.TE ON/OFF` im Dialogmodus für Eingabe. Ein Natural-Programm ruft das Con-form-Dokument `LETTER`, das diese Anweisung enthält, aus dem Büro `XYLIB`.

Natural-Programm:

Anmerkung
Dieses etwas vereinfachte Natural-Programm dient lediglich zur Demonstration; z.B. erfolgt keine Überprüfung der Pflichtfelder `SALUTATION`, `LASTNAME`, `STREET`, `CITY`.

    DEFINE DATA LOCAL
    01 #ENTER (A15) INIT <'Special offer:'>
    01 SLINE  (A15) INIT <'.SL 1'>
    01 #TEXT   (A60/1:4)
    01 SALUTATION (A30)
    01 LASTNAME   (A30)
    01 STREET     (A30)
    01 CITY       (A30)
    01 #STATUS (A4)
    01 #PAGE   (B4)
    01 #LINE   (B4)
    01 #NUMBER (B4)
    END-DEFINE
    COMPOSE RESETTING ALL
    INPUT 25X 'Advertising letter'
            /  '-' (75)
            /  'Salutation: ' SALUTATION (AD='_')
            /  'Lastname  : ' LASTNAME (AD='_')
            /  'Street    : ' STREET (AD='_')
            /  'City      : ' CITY (AD='_')
            /  '-' (75)
           //  '-' #ENTER (AD=OI)
            /  '-' #TEXT(1) (AD='_')
            /  '-' #TEXT(2) (AD='_')
            /  '-' #TEXT(3) (AD='_')
            /  '-' #TEXT(4) (AD='_')
    COMPOSE ASSIGNING   'SALUT' = SALUTATION,
                        'NAME'  = LASTNAME,
                        'STREET'= STREET,
                        'TOWN'  = CITY
    COMPOSE FORMATTING INPUT 'LETTER' FROM CABINET 'XYLIB   '
    DECIDE FOR FIRST CONDITION
      WHEN #TEXT(4) NE ' '
           COMPOSE MOVING SLINE #TEXT(1) #TEXT(2) #TEXT(3) #TEXT(4)
                   '.TE OFF' STATUS #STATUS #PAGE  #LINE  #NUMBER
      WHEN #TEXT(3) NE ' '
           COMPOSE MOVING SLINE #TEXT(1) #TEXT(2) #TEXT(3)
                   '.TE OFF' STATUS #STATUS #PAGE  #LINE  #NUMBER
      WHEN #TEXT(2) NE ' '
           COMPOSE MOVING SLINE #TEXT(1) #TEXT(2)
                   '.TE OFF' STATUS #STATUS #PAGE  #LINE  #NUMBER
      WHEN #TEXT(1) NE ' '
           COMPOSE MOVING SLINE #TEXT(1)
                   '.TE OFF' STATUS #STATUS #PAGE  #LINE  #NUMBER
      WHEN NONE
           COMPOSE MOVING
                   '.TE OFF' STATUS #STATUS #PAGE  #LINE  #NUMBER
    END-DECIDE
    END

Con-form-Dokument `LETTER`:

    .PL 22;.LM 0;.RM 60;.HS 0;.HM 0;.FM 0;.FS 0
    &salut &name
    &street
    &town
    .SL 2
    Dear &salut &name.,
    .SL
    .LM 0;.JU OFF;.FI ON
    Your subscription with MAGNIFICENT WILDLIFE magazine will soon expire.
    If you act now and renew your subscription for one full year, you will
    receive a 40% discount - a savings of $25.00 off the newsstand price!$
    .TE ON
    .SL 2
    Sincerely,$
    J. Baker$
    Vice President of Sales

Bildschirm vor Eingabe:

                             Advertising letter
    ---------------------------------------------------------------------------
    Salutation:  ______________________________
    Lastname  :  ______________________________
    Street    :  ______________________________
    City      :  ______________________________
    ---------------------------------------------------------------------------

    Special offer:
    ____________________________________________________________
    ____________________________________________________________
    ____________________________________________________________
    ____________________________________________________________

Bildschirm nach Eingabe:

                             Advertising letter
    ---------------------------------------------------------------------------
    Salutation:  Mister________________________
    Lastname  :  Poe___________________________
    Street    :  203 North Amity Street________
    City      :  Baltimore, Maryland___________
    ---------------------------------------------------------------------------

    Special offer:
    Take $500 off a trip to one of the world's premier wildlife-
    viewing destinations through our travel partner.____________
    ____________________________________________________________
    ____________________________________________________________

Resultierender Brief nach erfolgter Formatierung:

    MISTER POE
    203 NORTH AMITY STREET
    BALTIMORE, MARYLAND

    Dear MISTER POE,

    Your subscription with MAGNIFICENT WILDLIFE magazine will
    soon expire. If you act now and renew your subscription for
    one full year, you will receive a 40% discount - a savings
    of $25.00 off the newsstand price!

    TAKE $500 OFF A TRIP TO ONE OF THE WORLD'S PREMIER WILDLIFE-
    VIEWING DESTINATIONS THROUGH OUR TRAVEL PARTNER.

    Sincerely,
    J. Baker
    Vice President of Sales

### On this page

- Funktion COMPOSE
- Syntax-Beschreibung COMPOSE
- Der Formatiervorgang
- Verarbeitung im Dialog-Modus
- Eingabe-/Ausgabe-Verarbeitung durch Nicht-Natural-Programme
- Beispiele COMPOSE