REINPUT

REINPUT  [FULL] [(statement-parameters)]

USING HELP

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

このドキュメントでは、次のトピックについて説明します。

構文図で使用されている記号については、「構文記号」を参照してください。

関連ステートメント:DEFINE WINDOW | INPUT | SET WINDOW

関連機能グループ:対話型処理用の画面生成


関数

REINPUT ステートメントは、INPUT ステートメントに戻って再実行するために使用します。これは通常、前の INPUT ステートメントの結果、データ入力が無効であったことを示すメッセージを表示するために使用します。「例 1」を参照してください。

INPUT ステートメントとそれに対応する REINPUT ステートメントの間に、WRITE または DISPLAY ステートメントを実行することはできません。REINPUT ステートメントをバッチモードで使用することはできません。

REINPUT ステートメントが実行されると、INPUT ステートメントが実行されたときに存在していたサブルーチン、特殊条件、およびループ処理を考慮してプログラムステータスが再位置づけされます(INPUT ステートメントのステータスがまだ有効な場合)。INPUT ステートメントの実行後にループが開始され、REINPUT ステートメントがそのループ内にある場合、ループは中断され、REINPUT の結果として再処理された INPUT ステートメントの後で再開されます。

INPUT ステートメントの実行後にサブルーチン階層が呼び出され、サブルーチン内で REINPUT が実行された場合、Natural は自動的に全サブルーチンをさかのぼり、INPUT ステートメントの位置にプログラムステータスを再位置づけします。

INPUT ステートメントが実行されたステータスがすでに終了してしまった時点では、INPUT ステートメントをループ、サブルーチン、または特殊条件ブロック内に位置づけ、REINPUT ステートメントを実行することはできません。このエラー条件が検出されると、エラーメッセージが生成され、プログラムの実行が終了します。

注意:
FULL オプションなしで REINPUT ステートメントを実行しても、対応する INPUT ステートメントで使用された属性制御変数の MODIFIED ステータスはリセットされません。属性制御変数にステータス MODIFIED が割り当てられているかどうかを確認するには、MODIFIED オプションを使用します。

構文説明

構文要素 説明
REINPUT FULL
FULL オプション:

REINPUT ステートメントで FULL オプションを使用すると、対応する INPUT ステートメントが完全に再実行されます。

  • FULL オプションを使用しない通常の REINPUT ステートメントでは、INPUT ステートメントと REINPUT ステートメントの間で変更された変数の内容は表示されません。つまり、画面上のすべての変数は、INPUT ステートメントが初めて実行されたときに保持していた内容を示します。

  • REINPUT FULL ステートメントでは、INPUT ステートメントの最初の実行後に行われたすべての変更が、INPUT ステートメントの再実行時に適用されます。つまり、画面上のすべての変数は、REINPUT ステートメントの実行時に保持していた値を含みます。

注意:
REINPUT FULL によって、入力専用フィールド(AD=A)の内容は再度削除されます。

REINPUT FULL ステートメントの別の特徴は、属性制御変数のステータスが NOT MODIFIED にリセットされることです。この処理は普通の REINPUT ステートメントでは行われません。属性制御変数にステータス MODIFIED が割り当てられているかどうかを確認するには、MODIFIED オプションを使用します。

例 3 - MARK POSITION を指定した REINPUT FULL」も参照してください。

statement-parameters
Parameters:

REINPUT ステートメントで指定されるパラメータは、ステートメントに指定した全フィールドに適用されます。

要素(フィールド)レベルで指定したパラメータ(MARK オプションを参照)は、ステートメントレベルの対応する各パラメータを上書きします。

REINPUT ステートメントで指定可能なパラメータ 指定(S = ステートメントレベル、E = 要素レベル)
AD - 属性定義 * SE
CD - カラー定義 S

* AD=P をステートメントパラメータとして指定した場合、すべてのフィールド(MARK オプションで使用されるフィールドを除く)が保護されます。

各セッションパラメータの詳細については、『パラメータリファレンス』を参照してください。

USING HELP
USING HELP オプション:

このオプションにより、INPUT マップに定義されているヘルプルーチンが呼び出されます。

USING HELPMARK オプション付きで使用すると、MARK オプションに指定された最初のフィールドに対して定義されているヘルプルーチンが呼び出されます。フィールドにヘルプルーチンが定義されていない場合は、マップ用のヘルプルーチンが呼び出されます。

例:

REINPUT USING HELP MARK 3

結果として、INPUT マップの 3 番目のフィールドに対して定義されているヘルプルーチンが呼び出されます。

WITH-TEXT-option
WITH TEXT オプション:

WITH TEXT オプションは、メッセージ行に表示されるテキストを提供するために使用します。

下記の「WITH TEXT オプション」を参照してください。

MARK-option
MARK オプション

MARK オプションを使用して、特定のフィールドをマークすることができます。つまり、REINPUT ステートメントの実行時にカーソルが配置されるフィールドを指定できます。下記の「MARK オプション」を参照してください。

ALARM-option
ALARM オプション:

このオプションは、REINPUT ステートメントの実行時にアクティブ化される端末の音声アラーム機能を提供します。

下記の「ALARM オプション」を参照してください。

WITH TEXT オプション

WITH TEXT は、メッセージ行に表示されるテキストを提供するために使用します。これは通常、画面処理やエラー修正のために実行する必要がある操作を示すメッセージです。

[WITH] [TEXT]

*operand1
operand2

[(attributes)] [,operand3]7

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand1 C S           N P I   B *             ×
operand2 C S       A U                       ×
operand3 C S       A U N P I F B D T L       ×

* operand1 のフォーマット B は、4 以下の長さでのみ使用できます。

構文要素の説明:

構文要素 説明
operand1
Natural メッセージファイルからのメッセージテキスト:

operand1 は、Natural メッセージファイルから取得するメッセージテキストの番号を表します。

ユーザー定義メッセージまたは Natural システムメッセージのいずれかを取得できます。

  • 最大 4 桁までの正の値を指定した場合(例:954)、ユーザー定義のメッセージを取得します。

  • 4 桁までの負の値を指定した場合(例:-954)は、Natural システムメッセージを取得します。

例 4 - WITH TEXT オプション」も参照してください。

Natural メッセージファイルは、関連ドキュメントで説明しているように、SYSERR ユーティリティで作成およびメンテナンスします。
operand2
メッセージテキスト:

operand2 は、メッセージ行に配置されるメッセージを表します。

例 4 - WITH TEXT オプション」も参照してください。

attributes
出力属性:

operand1operand2 にさまざまな出力属性を割り当てることができます。これらの属性と構文については、以下の「出力属性」で説明します。

operand3
メッセージテキストのダイナミック置換:

operand3 は、英数字、テキスト定数、または変数名を表します。

提供された値は、operand1 または operand2 のいずれかで指定されるメッセージテキストの一部を置き換えるために使用されます。

表記 :n: は、operand3 の内容を参照するためにメッセージテキスト内に指定します。n には operand3 のオカレンス(1 ~ 7)を指定します。

例 4 - WITH TEXT オプション」も参照してください。

注意:
複数の operand3 を指定する場合は、それぞれをコンマで区切る必要があります。コンマを小数点文字として(セッションパラメータ DC で定義)使用し、数値定数を operand3 として指定している場合は、コンマの前後に空白を挿入して、コンマが小数点文字と解釈されないようにします。あるいは、operand3 の複数の指定を入力デリミタ文字(セッションパラメータ ID で定義)で区切ることができます。ただし、ID=/(スラッシュ)の場合は使用できません。

先頭のゼロまたは末尾の空白は、メッセージに表示される前にフィールド値から削除されます。

出力属性

attributes は、テキスト表示に使用される出力属性を示します。可能な属性:

../graphics/cbo3.gif

AD=ad-value
CD=cd-value
CV=variable

../graphics/cbc3.gif

 
 

../graphics/dot3.gif

指定可能なセッションパラメータ値については、『パラメータリファレンス』ドキュメントの該当するセクションを参照してください。

注意:
コンパイラは、実際には 1 つの出力フィールドに複数の属性値を受け入れます。例えば、「AD=BDIただし、この場合は最後の値のみが適用されます。示した例では、値 I のみが有効になり、出力フィールドは強調表示されます。

MARK オプション

MARK オプションを使用して、特定のフィールドをマークすることができます。つまり、REINPUT ステートメントの実行時にカーソルが配置されるフィールドを指定できます。また、フィールド内の特定の位置をマークすることもできます。さらに、入力保護フィールドにしたり、表示属性やカラー属性を変更できます。

MARK [POSITION operand4 [IN]] [FIELD]

operand5
*fieldname

[(attributes)]

 

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand4 C S           N P I                 ×
operand5 C S A         N P I                 ×

構文要素の説明:

構文要素 説明

operand5
*fieldname

マークするフィールド:

INPUT ステートメントに指定された AD=A または AD=M のフィールド(非保護フィールド)にはすべて、1 から始まるフィールド順番号が Natural によって割り当てられます。operand5 には、カーソルを位置づけるフィールド番号を指定します。

*fieldname の表記は、フィールド名を参照として用いて、(INPUT ステートメントで使用した)フィールドに位置づけるために使用します。

該当する INPUT フィールドが配列の場合、配列の 1 つ以上のオカレンスを参照するために一意のインデックスまたはインデックス範囲を指定できます。

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

operand5 も配列の場合、operand5 の値は INPUT 配列に対するフィールド番号として使用されます。

RESET #X(N2/1:2)
INPUT #ARRAY ...
...
REINPUT (AD=P) 'TEXT' MARK #X (1:2)
MARK POSITION
MARK POSITION オプション:

このオプションでは、フィールド内の特定の位置(operand4 で指定)にカーソルを置くことができます。

例 3 - MARK POSITION を指定した REINPUT FULL」も参照してください。

operand4
カーソル位置:

operand4 ではカーソル位置を指定します。

operand4 に小数桁を含めることはできません。

attributes
属性割り当て:

下記の「属性割り当て」を参照してください。

属性割り当て

明示的な属性を使用して、WITH TEXT メッセージのディスプレイ表示と色、および(REINPUT ステートメントによって配置される)MARK フィールドのレイアウトを定義できます。

 

B

 

 

BL

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

オペランド定義テーブル:

オペランド 構文要素 フォーマット オペランド参照 ダイナミック定義
operand6   S                            C     × ×

入力フィールド(AD=A または AD=M)に対しては、入力保護属性(AD=P)を指定できます。

注意:
入力に使用できる出力専用フィールド(AD=O)を作成するために属性を使用することはできません。

属性 ADCD および CV の詳細については、『パラメータリファレンス』を参照してください。

WITH TEXT フィールドと MARK フィールドの属性を固定された方法で指定する必要はありませんが、(CV=operand6) 節で参照される、制御変数を使用してダイナミックに割り当てることもできます。「例 5 - 制御変数を使用した属性の割り当てによる REINPUT」を参照してください。

ADCV オプションの両方が同じフィールドに指定されている場合、AD オプションの属性は完全に無視されますが、(AD=P) は引き続き有効です。

CDCV オプションが同じフィールドに指定されている場合、CV オプションの色が使用されます。CV 変数に色の仕様が含まれていない場合は、CD オプションの色がそのフィールドに適用されます。

AD=P をステートメントレベルで指定した場合、MARK オプションで指定されたフィールドを除く全フィールドが入力保護フィールドになります。「例 2 - 属性を割り当てた REINPUT」も参照してください。

ALARM オプション

[AND] [SOUND] ALARM

このオプションは、REINPUT ステートメントの実行時にアクティブ化される端末の音声アラーム機能を提供します。この機能を使用するには、対応するハードウェアが使用可能である必要があります。

例 1 - REINPUT ステートメント

** 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

プログラム REIEX1 の出力:

#FUNCTION A #PARM Y

Enter キーを押した後:

PLEASE ENTER A VALID FUNCTION
#FUNCTION A #PARM Y

例 2 - 属性を割り当てた REINPUT

** 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 colors    
END-IF                                                                  
*                                                                       
END

例 3 - MARK POSITION を指定した REINPUT FULL

** 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

プログラム REIEX3 の出力:

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

例 4 - WITH TEXT オプション

** 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

例 5 - 制御変数を使用した属性の割り当てによる REINPUT

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