Version 4.2.6
 —  Statements  —

COMPOSE

Dieses Statement kann nur verwendet werden, wenn Con-nect/Con-form installiert ist.

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:

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


Funktion

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 Textformatierer wieder an das Natural-Programm übergeben werden.

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

Seitenanfang

Syntax-Beschreibung

RESETTING-clause Die RESETTING-Klausel dient dazu, Informationen aus dem Pufferbereich des Textformatierers zu löschen und Speicherplatz im COMPOSE-Puffer (der auf Großrechnern mit dem CSIZE-Parameter im Natural-Parametermodul zugewiesen wird) frei zu machen.

Siehe RESETTING-Klausel.

MOVING-clause Die MOVING-Klausel dient dazu, Textzeilen in den Pufferbereich des Textformatierers oder direkt an den Formatierer zu übertragen und formatierten Text aus dem Arbeitsbereich des Formatierers zu lesen.

Siehe MOVING-Klausel.

ASSIGNING-clause Die ASSIGNING-Klausel dient dazu, Textvariablen Werte von Natural-Variablen zuzuweisen.

Siehe ASSIGNING-Klausel.

FORMATTING-clause Die FORMATTING-Klausel dient dazu, aus Rohtext und Con-form-Befehlen einen fertig formatierten Text, mit korrektem Zeilen- und Seitenumbruch, zu erstellen.

Siehe FORMATTING-Klausel.

EXTRACTING-clause Die EXTRACTING-Klausel dient dazu, Natural-Variablen die Werte von Textvariablen zuzuweisen.

Siehe EXTRACTING-Klausel.

RESETTING-Klausel

RESETTING

DATAAREA

TEXTAREA
MACROAREA
ALL

 Mit dieser Klausel kann folgendes aus dem Textformatpufferbereich gelöscht werden:

Anmerkung:
Aus Kompatibilitätsgründen bezieht sich das Wort TEXTAREA auf die DATAAREA des Formatierers, so wie sie in der MOVING-Klausel verwendet wird.

MOVING-Klausel

Mit dieser Klausel können ein oder mehrere Textwerte in den Textformatierpufferbereich übertragen werden (Syntax 1). Dieser Bereich kann als Eingabequelle für Formatieroperationen verwendet werden. Wartet der Textformatierer gerade auf Eingaben (siehe Dialog-Modus), wird der Text direkt an ihn übergeben, ohne im Con-form-Textbereich zwischengespeichert zu werden (Syntax 1 und Syntax 2). Die Source-Eingabe wird mit der LAST-Option beendet. Wartet der formatierte Text gerade darauf, ausgegeben zu werden (siehe Dialog-Modus), dann dient Syntax 3 der MOVING-Klausel dazu, die Kontrolle vom Natural-Programm wieder an den Formatierer zu übergeben. Zur Beschreibung der Statusvariablen siehe FORMATTING-Klausel.

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

Syntax 1

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

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

Syntax 2

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

Der Ausführungskontext kann sich zwischen einer Reihe ausgeführter COMPOSE-Statements ändern. Daher müssen die Ausgabevariablen neu 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

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

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

operand2 muss mit Format/Länge A4 definiert sein. operand3, operand4 und operand5 müssen mit Format/Länge B4 definiert sein.

ASSIGNING-Klausel

Mit dieser Klausel werden Con-form-Textvariablen Werte zugewiesen. Anschließende Formatiervorgänge können sich auf diese Textvariablen beziehen.

Die Namen von Textvariablen sollten in Großbuchstaben angegeben werden.

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

FORMATTING-Klausel

Diese Klausel veranlasst Con-form dazu, eine formatierte Ausgabe zu erzeugen.

Die Formatier-Optionen werden in einer oder mehreren Subklauseln (subclauses) angegeben. Wenn keine Subklauseln angegeben werden, nimmt Con-form die gültigen Standard-Formatier-Optionen. 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:

OUTPUT-subclause Das Ausgabemedium. Dies kann ein Natural-Report, ein Con-nect-Büro, eine oder mehrere Natural-Variablen (oder ein Array von Natural-Variablen) oder ein Nicht-Natural-Programm sein.

Siehe Output Subclause

INPUT-subclause Das Eingabemedium. Dies kann ein Con-nect-Dokument, sowie auch die COMPOSE DATAAREA (siehe MOVING-Klausel), die Umgebung der Natural-Programme, die die COMPOSE-Statements ausführen (siehe auch MOVING-Klausel), ein Nicht-Natural-Programm oder eine Kombination dieser vier sein.
STATUS-subclause

Der Status des Formatiervorgangs. Der Formatiervorgang kann die mehrfache Ausführung eines COMPOSE-Statements umfassen (im Dialog-Modus). Zum Beispiel wird die Eingabe von einem Natural-Programm in den Arbeitsbereich des Formatierers gestellt, und die Ausgabe wird vom Formatierer-Arbeitsbereich an die Umgebung eines Natural-Programms (d.h 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 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 gerade formatierten Dokuments. 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. Ist der aktuelle Wert außerhalb des Bereichs, wird der Wert auf 1 gesetzt.
PROFILE-subclause Der Textblock, der vor den Eingaben verarbeitet wird.
MESSAGES-subclause Steuert die Ausgabe von Warnmeldungen und statistischen Informationen und die Fehlerverarbeitung.
ERRORS-subclauses
ENDING-subclause Siehe ENDING-Subklausel.
STARTING-subclause 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, 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:

OUTPUT (rep)

Wenn die Ausgabe an einen Drucker geschickt wird (d.h. wenn die Reportnummer nicht 0 ist) und ein Con-nect-Druckerprofil geladen wurde (mit der Con-nect-API-Funktion Z-DRIVER), 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 Arbeitsbereich des Formatierers 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 in einem Statement DEFINE PRINTER (n) OUTPUT 'CONNECT' referenzierter Report darf nicht als Ausgabeziel in einem COMPOSE FORMATTING-Statement angegeben werden.

OUTPUT SUPPRESSED Mit dieser Option wird die Ausgabe unterdrückt.
OUTPUT CALLING Siehe Abschnitt Nicht-Natural-Programme.
OUTPUT TO VARIABLES

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 und operand3 müssen Format/Länge A1 haben.

Weitere Informationen, siehe Abschnitt Dialog-Modus.

OUTPUT DOCUMENT Siehe DOCUMENT-Option weiter unten.

DOCUMENT-Option

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

OUTPUT DOCUMENT

operand3 (Format/Länge B10) wird vom Formatierer verwendet, um einen eindeutigen Schlüssel vom Dokument an das Natural-Programm zurückzugeben. Er wird nur aus Kompatibilitätsgründen unterstützt.

operand4 (Format/Länge B4) wird vom Formatierer verwendet, um eine ISN, die auf ein formatiertes Ausgabedokument zeigt, an das Natural-Programm zurückzugeben. Diese ISN kann sinnvoll sein bei der Referenzierung eines Dokuments in aufeinanderfolgenden Aufrufen von Con-nect-APIs.

Wenn operand1 (der bis zu 8 Zeichen lang sein darf) nicht angegeben wird, wird das Dokument in das aktuelle Benutzerbüro gestellt (d.h. das Büro, dessen ID der des gerade aktiven Natural-Benutzers entspricht).

Ein Passwort (bis zu 8 Zeichen) muss angegeben werden, wenn ein Dokument in einem Büro gespeichert wird, auf das der aktuelle Benutzer keinen Zugriff hat.

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.

Das Dokument wird ohne Namen in das Fach COMPOSE gestellt. In der Beschreibungszeile steht der Name des Programms, das das COMPOSE FORMATTING-Statement ausgeführt hat, sowie Datum und Uhrzeit der Ausführung.

Wenn Sie das Schlüsselwort INTERMEDIATE weglassen, wird das Dokument fertig formatiert erstellt. In diesem Falle werden Texthervorhebungsoptionen wie etwa Fettdruck oder Kursivschrift ignoriert.

INPUT-Subklausel

INPUT

DATAAREA

FROM

EXIT operand2 9

CABINETS operand2 [PASSW=operand3]
operand1 FROM

EXIT operand2 10  
CABINETS 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

Mit dieser Subklausel wird angegeben, woher die Eingaben für den Textformatierer kommen. Die Eingaben können aus dem Con-form-Datenbereich kommen (eine Kombination aus Text aus dem Datenbereich und aus dem Dialog-Modus ist ebenfalls möglich), der mit einer oder mehreren MOVING-Operationen gefüllt worden sein muss, oder mit einem Textblock (durch operand1 angegeben). Der Textblock kann einem Con-nect-Büro entstammen 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.

Ein Passwort muss angegeben werden, wenn ein Dokument in einem Büro gespeichert wird, auf das der aktuelle Benutzer keinen Zugriff hat.

Con-form erzwingt, dass Con-nect-Zugriffsbeschränkungen eingehalten werden, und akzeptiert nur Büro-IDs, die in Con-nect definiert sind.

Ohne diese Subklausel wird standardmäßig der Con-form-Datenbereich verarbeitet.

Anmerkung:
Büro- und Textblock-IDs müssen in Großbuchstaben angegeben werden.

STATUS-Subklausel

[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:

operand 1 Enthält die Statusvariable "State".
operand 2 Enthält die Statusvariable "Position (Seitennummer)".
operand 3 Enthält die Statusvariable "Position (Zeilennummer)".
operand 4 Enthält die Statusvariable "Amount of Output Data" (Ausgabedatenmenge).

PROFILE-Subklausel

PROFILE   operand1 

Operanden-Definitionstabelle:

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

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).

MESSAGES-Subklausel

MESSAGES

[LISTED] [ON] (rep)

SUPPRESSED

Bei Beendigung der Formatierung werden Warnmeldungen und statistische Informationen ausgegeben. SUPPRESSED bewirkt, dass keine Meldungen ausgegeben und Fehler ignoriert werden.

ERRORS-Subklausel

ERRORS

[LISTED] [ON] (rep)

INTERCEPTED

Mit dieser Subklausel können Sie bestimmen, was im Falle eines Formatierungsfehlers geschehen soll. Der Fehler kann entweder ignoriert, von einer Natural-Standard-Fehlerroutine verarbeitet oder in einem bestimmten Natural-Report (rep) aufgelistet 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

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

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.

STARTING-Subklausel

STARTING [FROM] [PAGE] operand1

Operanden-Definitionstabelle:

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

Diese Subklausel bewirkt, dass die Ausgabe des formatierten Textes solange unterdrückt wird, bis eine bestimmte Seitennummer (operand1) erreicht ist.

EXTRACTING-Klausel

EXTRACTING [TEXTVARIABLE] {operand =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

Mit dieser Klausel können Sie Natural-Variablen die Werte von Textvariablen zuweisen. Die aktuellen Textvariablen-Werte können das Ergebnis eines vorhergehenden Formatiervorgangs sein.

Die Namen von Textvariablen müssen in Großbuchstaben angegeben werden.

Seitenanfang

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 in den Arbeitsbereich des Formatierers übertragen (und können in späteren Formatiervorgängen nicht wiederverwendet werden). Ist der Formatiervorgang nicht aktiv, werden Texteingaben im COMPOSE-Puffer (DATAAREA) zwischengespeichert. Dadurch ist es möglich, die Eingabe für mehrere Formatiervorgänge wiederzuverwenden.

Da der Formatierpuffer 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.

Seitenanfang

Dialog-Modus

Dialog-Modus-Verarbeitung ist eine Reihe von Interaktionen zwischen dem Benutzerprogramm und dem Formatierer, 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 Formatierer Rohtext als Eingabe zu liefern. Er akzeptiert auch formatierte Ausgaben direkt aus der aktuellen Programmumgebung.

Der Dialog entsteht dadurch, 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

In den Dialog-Modus für Eingabe gelangt man, wenn DATAAREA die Quelle des Eingabetextes ist oder der Formatierbefehl .TE ON auftaucht und wenn der Con-form-Datenbereich keinen weiteren zu verarbeitenden Text mehr enthält. Dialog-Modus für Eingabe wird durch das Wort TERM in der ersten STATUS-Variablen angezeigt.

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

Dialog-Modus für Ausgabe

In den Dialog-Modus für Ausgabe gelangt man, wenn das Ausgabeziel TO VARIABLES ist. Der Formatierer 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). Dialog-Modus für Ausgabe wird durch STRG in der ersten STATUS-Variablen angezeigt.

Das Benutzerprogramm sollte daraufhin die soeben in die Natural-Variablen gestellte formatierte Ausgabe nehmen 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) angezeigt.

Anmerkung:
Wird Dialog-Modus verwendet (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 der Formatierer weitere Eingabedaten verlangt (angezeigt durch TERM) oder eine Ausgabe erzeugt hat (angezeigt durch STRG), muss das Natural-Programm daher entsprechend reagieren.

Wenn Sie im Dialog-Modus für kombinierte Ein- und Ausgabeverarbeitung sind, kann der Formatierer jeweils nur eine Eingabezeile auf einmal annehmen. Lediglich im reinen Eingabe-Modus kann er mehrere Zeilen annehmen.

Ausführung von COMPOSE-Statements im Dialog-Modus

Wie bereits erwähnt, gelangt man in den Dialog-Modus über ein COMPOSE FORMATTING-Statement, das eine Reihe von COMPOSE MOVING-Ausführungen umfasst. Beachten Sie dabei bitte folgendes:

Seitenanfang

Nicht-Natural-Programme

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

COMPOSE 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-/Ausgabe 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) 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)

Response Code wird von Nicht-Natural-Programmen an den Formatierer übergeben.

Mögliche Werte:

X'00' Funktion erfolgreich ausgeführt.
X'01' Bei Funktion O: Dokument nicht gefunden.
Bei Funktion R: Dokument-Ende erreicht.
X'FF' Funktion nicht beendet.
Parameter 3 (Format A1/256) Bei Funktionen O und W werden diese Parameter vom Formatierer an Nicht-Natural-Programme übergeben.

Parameter von Funktion R werden von Nicht-Natural-Programmen an den Formatierer übergeben.

Bytes 1 - 2 Geben die Länge n dieses Parameters an.
Bytes 3 - 4 Leer.
Bytes 5 - n Funktion O: Dokumentname.
Funktion R: Vom Nicht-Natural-Programm gelesene Zeile.
Funktion W: Ausgabezeile vom Formatierer.

Ist ein Seitenvorschub erforderlich, steht vor der Ausgabe ein N, ansonsten eine 1.

Angaben zur Hervorhebung von Text (z.B. Fettdruck oder Kursivschrift) werden ignoriert, wenn die Ausgabe an ein Nicht-Natural-Programm übergeben wird.

Seitenanfang

Beispiele

Beispiel 1

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

Ergebnis des obigen COMPOSE-Statements: der formatierte Text des im Con-nect-Büro TLIB gespeicherten Textblocks TEXT wird auf Report 1 ausgegeben. Fehler und statistische Angaben werden auf Report 0 (dem Standarddrucker) ausgegeben.

Beispiel 2

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

Obige COMPOSE-Statements bewirken eine formatierte Textausgabe an Report 0 (Standarddrucker).

Beispiel 3

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

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

Beispiel 4

Text Block XYZ in 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 Natural 4.2

Erzeugte Ausgabe:

  Dear Mr Davenport,
  
  I am pleased to invite you to a presentation of our new product Natural 4.2.

Beispiel 5

Dies ist ein Beispiel für 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 formatierte Ausgabezeile 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)          /* actual page-number
 02 #LINE     (B4)          /* actual 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 out 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 "<>"'
   /   09X '(only, if CMF-Zap 2056 applied =>) 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 con-form buffers
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 1Formatierung 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 Ende Seite #//;.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 'Wert' = '1-20' /* Assign value to variable &Wert
*
FOR #CNTR 1 40                      /* Loop some time
   IF #STATUS NE 'TERM' /* nein 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 'Wert' = '21-40' /* Assign a variable-value
   END-IF
   COMPOSE ASSIGNING 'CNTR' = #CNTR /* Again assignment
   COMPOSE MOVING
        '.BP;&Wert *Durchlauf &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 nein wait on out
         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

Seitenanfang