REINPUT

REINPUT  [FULL]  [(statement-parameters)]

USING HELP

WITH-TEXT-option
  [MARK-option]      
  [ALARM-option]      

Dieses Dokument behandelt folgende Themen:

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

Verwandte Statements: DEFINE WINDOW | INPUT | SET WINDOW

Gehört zur Funktionsgruppe: Bildschirmgenerierung für interaktive Verarbeitung


Funktion

Das REINPUT-Statement dient dazu, zu einem INPUT-Statement zurückzukehren und dieses erneut auszuführen. Es wird in der Regel dazu benutzt, eine Fehlermeldung auszugeben, die dem Benutzer sagt, dass auf das INPUT-Statement hin ungültige Daten eingegeben wurden. Siehe Beispiel 1.

Zwischen einem INPUT-Statement und dem dazugehörigen REINPUT-Statement werden keine WRITE- oder DISPLAY-Statements ausgeführt. Im Batch-Betrieb ist das REINPUT-Statement nicht gültig.

Wenn das REINPUT-Statement ausgeführt wird, setzt es den Programmstatus, was die Verarbeitung von Unterprogrammen, besonderen Bedingungen und Verarbeitungsschleifen anbelangt, wieder auf den Stand zurück, der galt, als das INPUT-Statement ausgeführt wurde (vorausgesetzt das INPUT-Statement ist nach wie vor aktiv). Wurde nach der Ausführung des INPUT-Statements eine Verarbeitungsschleife gestartet und das REINPUT-Statement befindet sich innerhalb dieser Schleife, so wird die Schleife abgebrochen und erst dann neu gestartet, wenn das INPUT-Statement aufgrund des REINPUT-Statements erneut ausgeführt worden ist.

Wird nach der ersten Ausführung des INPUT-Statements eine Hierarchie von Unterprogrammen aufgerufen und das REINPUT-Statement steht in einem dieser Unterprogramme, so kehrt Natural automatisch zu dem Programm zurück, das bei der Ausführung des INPUT-Statements aktiv war.

Steht ein INPUT-Statement innerhalb einer Verarbeitungsschleife, eines Unterprogramms oder eines nur unter bestimmten Bedingungen verarbeiteten Statement-Blocks, so kann ein REINPUT-Statement nicht ausgeführt werden, wenn der Status, unter dem das INPUT-Statement ausgeführt wurde, bereits beendet ist. Eine derartige Situation würde einen Programmabbruch und eine entsprechende Fehlermeldung zur Folge haben.

Siehe auch Dialog-Gestaltung, Statements REINPUT/REINPUT FULL im Leitfaden zur Programmierung.

Anmerkung:

Wird ein Eingabe-/Ausgabefeld (Option (AD=M)) durch ein INPUT-Statement angezeigt, werden die am Schirm sichtbaren Daten nur dann in die Variable zurück übertragen, wenn das Feld als "verändert" (MODIFIED) angesehen wird. Ein Feld erhält den Status MODIFIED, wenn eine der folgenden Operationen erfolgt ist:

  • Der Inhalt des Feldes wurde verändert (d.h., es wurden andere Daten in das Feld eingegeben).

  • Die Taste EEOF (Erase to End of Field/Löschen bis Feldende) wird bei einem leeren Feld gedrückt.

  • Leerzeichen werden in ein leeres Feld oder nach dem letzten Nicht-Leerzeichen im Feld eingegeben.

  • Der Profilparameter CVMIN wurde auf ON gesetzt und die Daten im Feld werden durch Editiermaßnahmen verändert, die letzten Endes zur Wiederherstellung des Feldinhaltes führen (z.B. durch Überschreiben des ersten Zeichens mit dem vorhandenen Zeichen).

Der Inhalt eines Feldes, der letztendlich unverändert bleibt, wird nicht vom Bildschirmfeld in die Variable übertragen.

Die Ausführung eines REINPUT-Statements (ohne FULL-Option) hat keinen Einfluss auf den MODIFIED-Status eines Eingabe-/Ausgabefeldes. Ein Feld gilt weiterhin als nicht verändert, wenn es nicht über das INPUT-Statement mittels einer der oben aufgelisteten Operationen verändert wurde. Anders ausgedrückt wird ein Feld als verändert behandelt, wenn mindestens eine der erwähnten Operationen durchgeführt wurde, und zwar unabhängig davon, wie oft das INPUT-Statement durch REINPUT-Statements (ohne FULL-Option) neu gesendet wurde.

Mit anderen Worten wird ein mittels INPUT-Statement angezeigter Feldwert, der von einem REINPUT-Statement (ohne FULL-Option) getriggert wurde, nur dann in die Variable übernommen, wenn der Feldinhalt durch eine der genannten Operationen verändert wurde.

Der MODIFIED-Status kann geprüft werden, wenn im Programmcode eine Attributkontrollvariable (Option CV) zu dem Feld zugeordnet wurde, das mit der MODIFIED-Option z.B. des IF-Statements nach dem INPUT-Statement geprüft wird.

Syntax-Beschreibung

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
REINPUT FULL
FULL-Option:

Wenn Sie die Option FULL in einem REINPUT-Statement angeben, wird das entsprechende INPUT-Statement vollständig neu ausgeführt:

  • Bei einem normalen REINPUT-Statement (ohne FULL-Option) werden Inhalte von Variablen, die zwischen INPUT- und REINPUT-Statement geändert wurden, nicht angezeigt; d.h. alle Variablen auf dem Schirm zeigen den Inhalt, den sie hatten, als das INPUT-Statement ursprünglich ausgeführt wurde.

  • Bei einem REINPUT FULL-Statement werden alle nach der ersten Ausführung des INPUT-Statements gemachten Änderungen sichtbar, wenn das INPUT-Statement erneut ausgeführt wird; d.h. alle Variablen auf dem Schirm haben den Inhalt, den sie zum Zeitpunkt der Ausführung des REINPUT-Statements hatten.

Anmerkung:
Der Inhalt reiner Eingabefelder (AD=A) wird durch REINPUT FULL wieder gelöscht.

Eine andere Eigenschaft des REINPUT FULL-Statements besteht darin, dass der Status der Kontrollvariable auf NOT MODIFIED (nicht geändert) zurückgesetzt wird. Dies erfolgt nicht mittels des normalen REINPUT-Statements. Um zu überprüfen, ob einer Attribut-Kontrollvariablen der Status MODIFIED (geändert) zugewiesen wurde, benutzen Sie die MODIFIED-Option.

Siehe auch Beispiel 3 - REINPUT FULL mit MARK POSITION.

statement-parameters
Parameter:

Bei einem REINPUT-Statement angegebene Parameter gelten für alle Felder, die im Statement angegeben sind.

Auf Element-Ebene (Feldebene) gesetzte Parameter (siehe MARK-Option) haben für das betreffende Feld Gültigkeit vor den auf Statement-Ebene gesetzten.

Parameter, die mit dem REINPUT-Statement angegeben werden können: Angabe (S = auf Statement-Ebene, E = auf Element-Ebene)
AD - Attributdefinition * SE
CD - Farbdefinition S

* Wenn Sie AD=P auf Statement-Ebene setzen, sind alle Felder geschützt, jedoch nicht die in der MARK-Option angegebenen.

Informationen zu den o.g. Session-Parametern finden Sie in der Parameter-Referenz-Dokumentation.

USING HELP
USING HELP-Option:

Diese Option bewirkt, dass die für die Eingabemaske (INPUT-Map) definierte Helproutine aufgerufen wird.

USING HELP in Verbindung mit der MARK-Option (siehe unten) bewirkt, dass die für das erste in der MARK-Option angegebene Feld definierte Helproutine aufgerufen wird. Ist für das Feld keine Helproutine definiert, wird die Helproutine für die Maske aufgerufen.

Beispiel:

REINPUT USING HELP MARK 3

In diesem Beispiel wird die für das dritte Feld der Eingabemaske definierte Helproutine aufgerufen.

WITH-TEXT-option
WITH TEXT-Option:

Mit dieser Option können Sie einen Text angeben, der in der Meldungszeile angezeigt werden soll.

Siehe WITH TEXT Option weiter unten.

MARK-option
MARK-Option

Mit dieser Option können Sie ein bestimmtes Feld markieren, d.h. bei der Ausführung des REINPUT-Statements wird der Cursor in dieses Feld plaziert.

Siehe MARK Option weiter unten.

ALARM-option
ALARM-Option:

Diese Option bewirkt, dass der Warnton des Terminals ausgelöst wird, wenn das REINPUT-Statement ausgeführt wird.

Siehe ALARM Option weiter unten.

WITH TEXT-Option

Mit dieser Option können Sie einen Text angeben, der in der Meldungszeile angezeigt werden soll. Der Text ist in der Regel eine Meldung, die angibt, welche Maßnahme zum Abarbeiten des Bildschirms getroffen werden sollte, oder wie der Fehler korrigiert werden kann.

[WITH] [TEXT]

* operand1
operand2

[(attributes)] [,operand3]7

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand1 C S           N P I   B *             ja nein
operand2 C S       A U                       ja nein
operand3 C S       A U N P I F B D T L       ja nein

* Format B von operand1 kann nur mit einer Länge von kleiner gleich 4 benutzt werden.

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung
operand1
Meldungstext aus der Natural-Fehlermeldungsdatei:

Als operand1 geben Sie eine Natural-Fehlernummer an. Natural ruft dann die entsprechende Fehlermeldung aus der Natural- Fehlermeldungsdatei ab.

Es können entweder benutzerdefinierte Meldungen oder Natural- Systemmeldungen abgerufen werden.

  • Wenn Sie einen positiven Wert von bis zu vier Stellen (z.B.: 0954) angeben, werden benutzerdefinierte Meldungen gelesen.

  • Wenn Sie einen negativen Wert von bis zu vier Stellen (z.B.: −0954) angeben, werden Natural-Systemmeldungen abgerufen

Siehe auch Beispiel 4 - mit TEXT-Option .

Natural-Meldungsdateien werden mit der SYSERR-Utility erstellt und gepflegt.
operand2
Meldungstext:

Als operand2 geben Sie den Text an, der in der Meldungszeile ausgegeben werden soll.

Siehe auch Beispiel 4 - mit TEXT-Option .

attributes
Ausgabe-Attribute:

Als Attribute können Sie operand1 oder operand2 bestimmte Anzeige- und Farbattribute zuordnen. Diese Attribute und die Syntax, die benutzt werden kann, sind im Abschnitt Ausgabe-Attribute weiter unten beschrieben.

operand3
Dynamische Ergänzung im Meldungstext:

operand3 kann in Form einer numerischen Konstanten oder Textkonstanten oder als Name einer Variablen angegeben werden.

Der angegebene Wert dient dazu, einen Teil einer mit operand1 oder operand2 angegebenen Meldung dynamisch zu generieren. Innerhalb der Fehlermeldung dient die Notation :n: zur Referenzierung von operand3, wobei n die Ausprägung (1 − 7) von operand3 darstellt.

The values provided are used to replace parts of a message text that are either specified with operand1 or operand2.

Siehe auch Beispiel 4 - mit TEXT-Option .

Anmerkung:
Wird der operand3 mehrmals angegeben, müssen diese Operanden mit einem Komma voneinander getrennt werden. Falls das Komma als Dezimalzeichen verwendet wird (wie mit dem Session-Parameter DC definiert) und es sich bei operand3 um numerische Konstanten handelt, setzen Sie Leerzeichen vor und nach dem Komma, damit es nicht als Dezimalkomma missinterpretiert wird. Alternativ können mehrere Operanden operand3 auch mit dem Eingabebegrenzungszeichen (Input Delimiter Character, wie mit dem Session-Parameter ID definiert) voneinander getrennt werden; dies geht jedoch nicht im Falle von ID=/ (Schrägstrich).

Nicht signifikante Nullen oder Leerzeichen werden aus dem Feldwert entfernt, bevor er in einer Meldung angezeigt wird.

Ausgabeattribute

attributes sind zur Text-Anzeige verwendete Ausgabeattribute. Sie können folgende Attribute angeben:

AD=AD-value
CD=CD-value

Die möglichen Parameterwerte sind in der Parameter-Referenz-Dokumentation aufgeführt:

Anmerkung:
Der Compiler akzeptiert mehr als einen Attributwert für ein Ausgabefeld. Beispielsweise können Sie angeben: AD=BDI. In einem solchen Fall gilt allerdings nur der letzte Wert. In dem vorliegenden Beispiel greift nur der Wert I, und das Ausgabefeld wird intensiviert dargestellt.

MARK-Option

Mit dieser Option können Sie ein bestimmtes Feld markieren, so dass bei der Ausführung des REINPUT-Statements der Cursor in dieses Feld plaziert wird. Sie können auch eine bestimmte Stelle innerhalb eines Feldes markieren. Außerdem können Sie Felder gegen Eingabe schützen sowie ihre Anzeige- und Farbattribute ändern.

MARK [POSITION operand4 [IN]] [FIELD]

operand5

[(attributes)]

*fieldname

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand4 C S           N P I                 ja nein
operand5 C S A         N P I                 ja nein

Syntax-Element-Beschreibung:

Syntax-Element Beschreibung

operand5
*fieldname

Zu markierendes Feld:

Jedes mit einem INPUT-Statement angegebene Eingabefeld (AD=A oder AD=M) wird durchnumeriert (beginnend mit 1). Sie können als operand5 die Nummer des Feldes angeben, in das der Cursor plaziert werden soll.

Die Notation *fieldname wird verwendet, um den Cursor in ein Feld zu positionieren, und zwar mittels des (im INPUT-Statement verwendeten) Namens des Feldes.

Ist das betreffende INPUT-Feld ein Array, kann zur Markierung einer oder mehrerer Ausprägungen des Arrays ein eindeutiger Index oder ein Indexbereich angegeben werden.

INPUT #ARRAY (A1/1:5)
...
REINPUT (AD=P) 'TEXT' MARK *#ARRAY (2:3)

Ist operand5 ebenfalls ein Array, so werden die Werte von operand5 als Feldnummern für das INPUT-Array benutzt.

RESET #X(N2/1:2)
INPUT #ARRAY ...
...
REINPUT (AD=P) 'TEXT' MARK #X (1:2)
MARK POSITION
MARK POSITION-Option:

Mit dieser Option können Sie den Cursor an eine bestimmte Stelle, die Sie mit operand4 angeben, innerhalb eines Feldes plazieren.

Siehe auch Beispiel 3 — REINPUT FULL mit MARK POSITION .

operand4
Cursor-Position:

operand4 gibt die Cursor-Position an.

operand4 darf keine Dezimalziffern enthalten.

attributes
Attribut-Zuweisungen:

Siehe Attribut-Zuweisungen weiter unten.

Attribut-Zuweisungen

Sie können explizite Attribute verwenden, um die Darstellung und Farbe der Anzeige der WITH TEXT-Meldung und das Layout des MARK (welches durch das REINPUT-Statement positioniert wird) festzulegen.

 

B

 

 

BL

 
  C     GR  
  D     NE  
AD=[P] I   CD= PI [CV=operand6]
  N     RE  
  U     TU  
  V     YE  

Operanden-Definitionstabelle:

Operand Mögliche Struktur Mögliche Formate Referenzierung erlaubt Dynam. Definition
operand6   S                            C     nein nein

Mit dem Attribut AD=P können Sie ein Eingabefeld (AD=A oder AD=M) gegen Eingaben schützen.

Anmerkung:
Reine Ausgabefelder (AD=O) können nicht durch ein entsprechendes Attribut zu Eingabefeldern gemacht werden.

Informationen zu den Attributen AD, CD und CV finden Sie in der Parameter-Referenz-Dokumentation.

Die Attribute für die Felder WITH TEXT und MARK brauchen Sie nicht fest anzugeben, sondern Sie können sie dynamisch mittels einer Attributkontrollvariablen zuweisen, die in einer (CV=operand6)-Klausel referenziert wird. See Example 5 - REINPUT with Attribute Assignment Using a Control Variable.

Wenn sowohl eine AD- als auch eine CV-Option bei demselben Feld angegeben werden, dann werden die Attribute aus der AD-Option vollständig ignoriert, mit Ausnahme von der Option (AD=P), die wirksam bleibt.

Wird für dasselbe Feld eine CD- und eine CV-Option angegeben, dann wird die Farbe von der CV-Option übernommen. Falls die CV-Variable keine Farbangabe enthält, wird für dieses Feld die Farbe aus der CD-Option übernommen.

Wird AD=P auf Statement-Ebene gesetzt, so sind alle Felder geschützt außer den in der MARK-Option angegebenen. Siehe auch Beispiel 2 — REINPUT mit Attribut-Zuweisung .

ALARM-Option

[AND] [SOUND] ALARM

Diese Option bewirkt, dass der Warnton des Terminals ausgelöst wird, wenn das REINPUT-Statement ausgeführt wird. Voraussetzung ist, dass die verwendete Terminal-Hardware dies ermöglicht.

Beispiele

Beispiel 1 - REINPUT-Statement

** Example 'REIEX1': REINPUT                                            
************************************************************************
DEFINE DATA LOCAL                                                       
1 #FUNCTION (A1)                                                        
1 #PARM     (A1)                                                        
END-DEFINE                                                              
*                                                                       
INPUT #FUNCTION #PARM                                                   
*                                                                       
DECIDE FOR FIRST CONDITION                                              
  WHEN #FUNCTION = 'A' AND #PARM = 'X'                                  
    REINPUT 'Function A with parameter X selected.'                     
            MARK *#PARM                                                 
  WHEN #FUNCTION = 'C' THRU 'D'                                         
    REINPUT 'Function C or D selected.'                                 
  WHEN #FUNCTION = 'X'                                                  
    STOP                                                                
  WHEN NONE                                                                 
    REINPUT 'Please enter a valid function.'                            
            MARK *#FUNCTION
END-DECIDE                 
*                          
END                       

Ausgabe des Programms REIEX1:

#FUNCTION A #PARM Y

Nach Drücken von EINGABE:

PLEASE ENTER A VALID FUNCTION
#FUNCTION A #PARM Y

Beispiel 2 - REINPUT mit Attribut-Zuweisung

** Example 'REIEX2': REINPUT  (with attributes)                         
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (A20)                                                              
1 #B (N7.2)                                                             
1 #C (A5)                                                               
1 #D (N3)                                                               
END-DEFINE                                                              
*                                                                       
INPUT (AD=A) #A  #B  #C  #D                                             
*                                                                       
IF #A = ' ' OR #B = 0                                                   
  REINPUT (AD=P) 'RETYPE VALUES'                                        
                 MARK *#A (AD=I CD=RE)    /* put cursor on first field  
                      *#B (AD=U CD=PI)    /* and change colours    
END-IF                                                                  
*                                                                       
END                                                                     

Beispiel 3 - REINPUT FULL mit MARK POSITION

** Example 'REIEX3': REINPUT  (with FULL and POSITION option)           
************************************************************************
DEFINE DATA LOCAL                                                       
1 #A (A20)                                                              
1 #B (N7.2)                                                             
1 #C (A5)                                                               
1 #D (N3)                                                               
END-DEFINE                                                              
*                                                                       
INPUT (AD=M) #A  #B  #C  #D                                             
*                                                                       
IF #A = ' '                                                             
  COMPUTE #B = #B + #D                                                  
  RESET #D                                                              
END-IF                                                                  
*                                                                       
IF #A = SCAN 'TEST' OR = ' '                                            
REINPUT FULL 'RETYPE VALUES' MARK POSITION 5 IN *#A             
END-IF                                                                  
*   
END

Ausgabe des Programms REIEX3:

RETYPE VALUES 
#A                      #B        0.00 #C       #D    0

Beispiel 4 - mit TEXT-Optionen

** Example 'REIEX4': REINPUT (with TEXT option)                         
************************************************************************
DEFINE DATA LOCAL                                                       
01 #NAME   (A8)                                                         
01 #TEXT   (A20)                                                        
END-DEFINE                                                              
*                                                                       
*                                                                       
INPUT WITH TEXT 'Enter a program name.' 'Program name:' #NAME           
*                                                                       
IF #NAME = ' '                                                          
  REINPUT WITH TEXT 'Input missing. Enter a name.'                    
END-IF                                                                  
*                                                                       
IF #NAME NE MASK (A)                                                    
  MOVE 'Invalid input.' TO #TEXT                                        
  REINPUT WITH TEXT ':1: Name must start with a letter.',#TEXT      
ELSE                                                                    
  /* Using Natural error message 7600 for demonstration                 
  COMPRESS *INIT-USER 'on' *DAT4I INTO #TEXT                            
  INPUT WITH TEXT *-7600,#NAME,#TEXT 'Input accepted.'
END-IF                                                
END                                                  

Beispiel 5 - REINPUT mit Attribut-Zuweisung mittels Kontrollvariable

DEFINE DATA LOCAL
1 #HELLO (A5)  INIT <'HELO'>
1 #VAR   (A20) INIT <'Enter "HELLO"'>
1 #CV (C)
END-DEFINE
*
INPUT (IP=OFF) #HELLO (AD=M)
*
IF #HELLO NE 'HELLO' THEN
  MOVE (AD=U CD=RE) TO #CV
  REINPUT FULL WITH TEXT #VAR (CD=YE)
               MARK *#HELLO   (CV=#CV)
END-IF
END