LOGONコマンドのカストマイズ機能を利用する場合に定義します。LOGONコマンド定義には、scmddef定義文、indata定義文、incmd定義文、lgnseq定義文およびecmddef定義文があります。
LOGONコマンド定義におけるscmddef定義文、indata定義文、incmd定義文、lgnseq定義文およびecmddef定義文の関係を図4.6に示します。
図4.6 LOGONコマンド定義
注意
incmd定義文は、scmddefごとに1回のみ定義できますが、indata定義文と併用する場合には、indata定義文の後に定義してください。
LOGONコマンド定義の開始を宣言します。
同時にこのLOGONコマンド定義で採用する共通項目を指定します。
共通項目として以下の項目を設定できます。
端末から受信した連続するNULLコードの扱い
端末から受信した連続するスペースコードの扱い
端末から受信したデータ内の英大文字/小文字の扱い
scmddef LOGONコマンド用識別子 [un] [us] [ { cn | cl | cu } ]
本LOGONコマンド定義が有効となる端末情報定義の開始(stermdef定義文)で指定したLOGONコマンド用の識別子を指定します。
識別子は以下の形式です。
cidnnnnn
↑ ↑
| 5桁以内の数字(10進数、左詰め)
cid固定
端末から受信したデータ中の連続するNULL(ASCIIコードなら0x00)を一つのNULLとして扱う場合に指定します。
以下にASCIIコードの場合の例を示します。
(△はNULLを示します。)
0x6162630000000060206 → 0x61626300602065
abcd△△ef△△△ghij → abcd△ef△ghi
端末から受信したデータ中の連続するスペース(ASCIIコードなら0x20)を一つのスペースとして扱う場合に指定します。
以下にASCIIコードの場合の例を示します。
0x6162632020202060206 → 0x61626320602065
abcd ef ghij → abcd ef ghi
端末から受信したデータをそのままLOGON先通信プログラムに渡す場合に指定します。以下に定義と変換の例を示します。
LOGONコマンド定義: incmd %cmd:start %0 %k%data lgnseq 'LOGON APPLID(' %p0 ') DATA(' %data ')' 端末からの入力: START TSS DATA(Abcd) 通信プログラムに渡すデータ: Abcd
LOGON先通信プログラムに渡すデータ中の英大文字を英小文字に変換する場合に指定します。以下に定義と変換の例を示します。
LOGONコマンド定義: incmd %cmd:start %0 %k%data lgnseq 'LOGON APPLID(' %p0 ') DATA(' %data ')' 端末からの入力: START TSS DATA(Abcd) 通信プログラムに渡すデータ: abcd
LOGON先通信プログラムに渡すデータ中の英小文字を英大文字に変換する場合に指定します。以下に定義と変換の例を示します。
LOGONコマンド定義: incmd %cmd:start %0 %k%data lgnseq 'LOGON APPLID(' %p0 ') DATA(' %data ')' 端末からの入力: START TSS DATA(Abcd) 通信プログラムに渡すデータ: ABCD
LOGONコマンド定義の識別子を“cid1”として宣言を開始します.
連続するNULLとスペースはそれぞれ1文字として扱います.
scmddef cid1 un us
端末より受信するデータ列を定義します。この定義したデータ列を、実際に受信するデータと比較します。一致すればlgnseq定義文で指定したLOGONコマンドを作成します。
indata 受信データ [ [ 受信データ ] ・・・ ]
端末より受信するデータを指定します。また、以下のLOGONサービス変数を指定することにより、作成するLOGONシーケンスの可変情報として使用することができます。
一つのindata定義文内に同一のLOGONサービス変数を複数指定することはできません。
以下にLOGONサービス変数、およびその意味を示します。
LOGONサービス変数 | 意味 |
---|---|
%skip(n) | nByteの無視するデータ長(最大256Byte)(注1) |
%format={ std | hdr } |
|
%cmd | コマンド(最大10Byte) |
%job | 業務名(最大31Byte) |
%user | { 利用者識別子 | 利用者識別子/パスワード(最大20Byte) } |
%passwd | パスワード(最大10Byte) |
%inf1 | 業務情報1(最大20Byte) |
%inf2 | 業務情報2(最大20Byte) |
%inf3 | 業務情報3(最大20Byte) |
%inf4 | 業務情報4(最大20Byte) |
%inf5 | 業務情報5(最大20Byte) |
%inf6 | 業務情報6(最大20Byte) |
%inf7 | 業務情報7(最大20Byte) |
%inf8 | 業務情報8(最大20Byte) |
%inf9 | 業務情報9(最大20Byte) |
%infset | ブランクで区切られた業務情報群(注3)(最大50Byte) |
(注1)受信データパラメタの先頭位置にのみ指定可能です。
(注2)%format=hdrを指定した場合に指定可能なLOGONサービス変数は、%skipおよび%infsetのみです。
(注3)受信データパラメタの末尾位置にのみ指定可能です。
注意
%skip(n)を指定した場合、文字列中のNL(ニューライン:0x15)は削除されます。
一つのLOGONコマンド識別子内に複数のindata定義文とlgnseq定義文を指定した場合、最初に一致したものが有効となります。端末から受信したデータと定義したデータが区別できない場合は、定義する順序に注意してください。以下に区別できない例を示します。
LOGONサービス変数だけの組み合わせを複数指定した場合。
同一の固定値を複数指定した場合。
indata定義文の定義に基づいてコマンドを解釈する場合、英大文字と英小文字を別の文字と認識します。したがって、英大文字と英小文字の入力を可能とするためには、両方のパターンの定義が必要です。
以下に例を示します。
indata 'START' %user lgnseq 'LOGON TSS' %user indata 'start' %user lgnseq 'LOGON TSS' %user
制御情報(6Byte)を無視する場合
入力データ:制御情報(6Byte)、“tss a0001 s(4096) non nom”
indata skip(6) 'tss' %user %infset
pfキーを定義する場合
入力データ:pf1キー
indata 0xf1
pfキーと受信する文字を定義する場合
入力データ:pf1キー、“a0001”
indata 0xf1 %user
端末より受信するコマンドの構文を定義します。コマンドの構文として、コマンド名、位置パラメタ、キーワードパラメタおよびその他の受信データの扱いを定義します。incmd定義文を定義した場合、端末からの受信データを位置パラメタおよびキーワードパラメタにより比較/解析します。
incmd定義文を複数指定したい場合には、同じLOGONコマンド用識別子を指定したLOGONコマンド定義を複数作成します。
incmd [%skip(n)]
[%format = { std | pl1 } ]
%cmd: コマンド名
[ [ %p* [ = 省略値 ] ] ・・・ ]
[ [ %k%キーワード名 [ : キーワードタイプ] [ = 省略値 ] ]・・・ ]
[ %unminf ]
端末から送信されるデータの先頭から無視するnバイト数を指定します。これは、端末から送信されるデータの先頭に制御文字等が付加される場合に、その付加される情報を無視するために指定します。本オペランドはincmd定義文のパラメタの先頭に指定してください。
本オペランドを省略した場合、文字列中のNL(ニューライン:0x15)は削除されます。
区切り文字の種類を定義します。
stdを指定した場合、区切り文字は空白、またはカンマです。
pl1を指定した場合、区切り文字は空白、カンマ、左括弧、右括弧、セミコロン、またはタブです。左右の括弧は位置パラメタを括る場合やキーワードパラメタのパラメタ値を区切る場合に使用します。セミコロンは、1文の終わりを示す区切りとして使用できます。
本オペランドを省略した場合、“std”が設定されます。
入力コマンドを定義します。“:”に続けてコマンド名を指定します。コマンド名は最大16文字までの英数字、#、@で定義できます。
位置パラメタを定義します。“*”には位置パラメタの位置を示す識別番号(位置番号)を0~9の範囲で指定します。位置パラメタは、一つのincmd定義文で最大10個まで定義できます。位置番号は0から順に欠番なしで指定してください。
端末から送信されたデータのうち位置パラメタとして認識するのは、以下の受信データです。
空白またはカンマで区切られた一連の文字列
引用符で囲まれた文字列の並び(引用符で囲まれた中の空白やカンマは単純に文字として扱います)
位置パラメタの省略値を定義する場合、“=”に続けて省略値を指定します。省略値は最大128文字までの英数字、#、@で定義できます。また、省略値に複数の文字列や特殊文字(空白、括弧、カンマ等)を指定したい場合には、全体を引用符( ' )で囲みます。
また、端末利用者が位置パラメタの値として指定可能な文字数も各々の位置パラメタに関して128文字までです。
キーワードパラメタを定義します。“%k%”に続けてキーワード名を指定します。キーワードパラメタは、一つのincmd定義で最大20個まで定義できます。キーワード名は最大16文字までの文字列です。
キーワードタイプには、以下の3種類があります。
キーワードパラメタに値を指定させる独立したキーワードパラメタとして使用するタイプ
キーワードのみを指定し、キーワードパラメタに値を指定しないタイプ
lgnseq定義文に定義された位置パラメタ%p0~%p9と対応させるタイプ
1のタイプの場合、キーワードタイプを省略します。
2のタイプの場合、キーワードタイプに“n”を指定します。このタイプは以下の場合に指定します。
キーワード名のみを入力させたい場合
キーワードパラメタに省略値が定義され、キーワード名のみの入力時にその省略値を採用したい場合
3のタイプの場合、対応する位置パラメタの識別番号(0~9の番号のどれか)を指定します。対応させる位置パラメタは、lgnseq定義文で指定する位置パラメタです。このタイプのキーワードパラメタでは、以下のように使用できます。
位置パラメタの指定値をキーワードパラメタで置き換える場合の例を以下に示します。
incmd %skip(6) %cmd:START %p0 %p1 %k%PARM1:0 %k%DATA lgnseq 'LOGON APPLID(' %p0 ') LOGMODE(' %p1 ') DATA( '%DATA ')'
この例では最初の位置パラメタ(%p0)をキーワードパラメタPARM1で置き換えることができ、端末からの入力コマンドの形式は以下のようになります。
ただし、最初の位置パラメタ(%p0)に対する入力とキーワードパラメタPARM1のパラメタ値の両方が入力された場合は、キーワードパラメタPARM1に指定されたパラメタ値の方が有効になります。%skip(6)は端末から送信されるデータの先頭から無視されるバイト数を示します。
START[ 通信プログラム名 [ ログオンモード名 ]] [PARM1{(通信プログラム名)|=通信プログラム名] [DATA{(データ)|=データ}]]
2つ以上のキーワードを1つのパラメタに意味づける場合の例を以下に示します。
incmd %cmd:START %p0 %k%TE:1 %k%TERM:1 %k%DATA lgnseq 'LOGON APPLID(' %p0 ') LOGMODE(' %p1 ') DATA( '%DATA ')'
この例では、LOGMODEパラメタの指定値(%p1)をキーワードパラメタTEおよびTERMで指定することができます。端末からの入力コマンドの形式は以下のようになります。
START 通信プログラム名 [{TE|TERM}{(ログオンモード名)|=ログオンモード名}] [DATA{(データ)|=データ}]
端末から受信するコマンドで、同一のキーワードパラメタが複数回数指定された場合、いずれの場合も最後に指定された値が有効になります。
キーワードパラメタの省略値を定義する場合、“=”に続けてその値を指定します。省略値の指定方法は、位置パラメタの省略値の指定方法を参照してください。
位置パラメタとキーワードパラメタの省略値の採用方法は以下のようになります。
対応するキーワードパラメタが指定されていない場合
端末利用者が位置パラメタに対応するデータを指定しなかった場合です。
対応するキーワードパラメタが指定され、そのキーワードパラメタにも省略値が指定されている場合
端末利用者が位置パラメタに対応するデータおよびキーワード名のいずれも指定しなかった場合です。
キーワードタイプを省略した場合
端末利用者がキーワード名のみを指定した場合です。
キーワード名も省略した場合は、省略値は採用されません。
キーワードタイプとして“n”を定義した場合
端末利用者がキーワード名のみを指定した場合です。
キーワード名も省略した場合は、省略値は採用されません。
キーワードタイプとして0~9を定義した場合
端末利用者がキーワード名のみを指定した場合です。
対応する位置パラメタの指定の有無に関係なく、キーワードパラメタの省略値が採用されます。
キーワード名も省略した場合は、省略値は採用されません。
位置パラメタおよびキーワードパラメタとして定義したデータ以外の受信データをひとまとめにして入力可能する定義です。
incmd定義文中に%unminfが定義されていた場合、受信データ中にコマンド名、位置パラメタまたはキーワードパラメタとして認識できないパラメタが存在すると、それを順次%unminfに該当させます。indata定義文の%infsetとは異なり、各パラメタ値は非連続であっても構いません。
注意
位置パラメタを括る左右の括弧は、対となるように指定してください。
コマンド名 [ ( ] [ 位置パラメタ ][△|,] 位置パラメタ ] [ ・・・ ] [) ] [ [△|,] キーワードパラメタ [( 値 )|= [ 値 ]] ] [ ・・・ ] [ [△|,]その他の情報 ] [ ・・・ ] [ ; ]
注)△は空白を示します。
indata文の定義に基づいてコマンドを解釈する場合、英大文字と英小文字を同一の文字と見なして、コマンドを解釈します。以下の例では、端末からの入力[1]、[2]、[3]は、すべて同じ意味となります。
LOGONコマンド定義 :incmd %cmd:start %k%data 端末からの入力 :START DATA( abcd ) ・・・[1] 端末からの入力 :start data( abcd ) ・・・[2] 端末からの入力 :Start Data( abcd ) ・・・[3]
位置パラメタ、位置パラメタに対応しないキーワードパラメタおよびunminfオペランドを使用して定義する場合
LOGONコマンド定義:
scmddef cid02 un us cu incmd %skip(6) %cmd:LOGON %p0 %k%mode %unminf lgnseq 'LOGON APPLID(' %p0 ') LOGMODE(' %mode ') DATA(''' %unminf ''')' ecmddef
カストマイズ例:
端末からの入力 LOGON TSS MODE(MODE1) A1234 S(4096) カストマイズ後 LOGON APPLID(TSS) LOGMODE(MODE1) DATA('A1234 S(4096)')
位置パラメタに対応するキーワードパラメタを使用して定義する場合
LOGONコマンド定義:
scmddef cid3 un us cu incmd %cmd:LOGON %p0 %k%applid:0 %k%mod:1 %k%lmode:1 %k%data:2 lgnseq 'LOGON APPLID(' %p0 ') LOGMODE(' %p1 ') DATA(' %p2 ')' ecmddef
カストマイズ例1:
端末からの入力 LOGON APPLID(TSS) MOD(MODE1) DATA(A1234) カストマイズ後 LOGON APPLID(TSS) LOGMODE(MODE1) DATA(A1234)
カストマイズ例2:
端末からの入力 LOGON TSS LMODE(MODE1) DATA(A1234) カストマイズ後 LOGON APPLID(TSS) LOGMODE(MODE1) DATA(A1234)
indata定義文と混在して定義する場合
LOGONコマンド定義:
scmddef cid04 un us cu indata 'TSS' %user ・・・[1] lgnseq 'LOGON TSS' %user indata 'AIM' %user ・・・[2] lgnseq 'LOGON AIM' %user incmd %cmd:LOGON %p0 %k%applid:0 %k%data:1 ・・・[3] lgnseq 'LOGON APPLID(' %p0 ') DATA(' %p1 ')' ecmddef
カストマイズ例1(定義データの[1]と照合):
端末からの入力 TSS A1234 カストマイズ後 LOGON TSS A1234
カストマイズ例2(定義データの[2]と照合):
端末からの入力 AIM A1234 カストマイズ後 LOGON AIM A1234
カストマイズ例3(定義データの[3]と照合):
端末からの入力 LOGON TSS DATA(A1234) カストマイズ後 LOGON APPLID(TSS) DATA(A1234)
位置パラメタおよびキーワードパラメタに省略値を定義する場合
LOGONコマンド定義:
scmddef cid06 un us cu incmd %cmd:LOGON %p0 %p1=A1234 %k%data:1='B5678 S(4000)' lgnseq 'LOGON APPLID(' %p0 ') DATA(''' %p1 ''')' ecmddef
カストマイズ例1:
端末からの入力 LOGON TSS DATA カストマイズ後 LOGON APPLID(TSS) DATA('B5678 S(4000)')
カストマイズ例2:
端末からの入力 LOGON TSS カストマイズ後 LOGON APPLID(TSS) DATA('A1234')
同一コマンド識別子でincmd定義文を複数定義する場合
LOGONコマンド定義:
scmddef cid07 un us cu incmd %cmd:LOGON %p0 %k%applid:0 %k%data:1 ・・・[1] lgnseq 'LOGON APPLID(' %p0 ') DATA(' %p1 ')' ecmddef scmddef cid07 un us cu incmd %cmd:LOGON %p0 %k%applid:0 %k%te:1 %k%term:1 %k%data:2 ・・・[2] lgnseq 'LOGON APPLID(' %p0 ') LOGMODE(' %p1 ') DATA(' %p2 ') ' ecmddef
カストマイズ例1(定義データ[1]と照合):
端末からの入力 LOGON TSS DATA(A1234) カストマイズ後 LOGON APPLID(TSS) DATA(A1234)
カストマイズ例2(定義データ[2]と照合):
端末からの入力 LOGON TSS TE(MODE1) DATA(A1234) カストマイズ後 LOGON APPLID(TSS) LOGMODE(MODE1) DATA(A1234)
キーワードタイプに“n”を指定して定義する場合
LOGONコマンド定義:
scmddef cid09 un us cu incmd %cmd:LOGON %p0 %k%applid:n=TSS lgnseq 'LOGON APPLID(' %p0 ') DATA(' %p1 ')' ecmddef
カストマイズ例:
端末からの入力 LOGON A1234 APPLID カストマイズ後 LOGON APPLID(TSS) DATA(A1234)
文字形式を指定して定義する場合
LOGONコマンド定義:
scmddef cid07 un us cu incmd %format=pl1 %cmd:LOGON %p0 %p1=A1234 %k%data:1 lgnseq 'LOGON APPLID(' %p0 ') DATA(''' %p1 ''')' ecmddef
カストマイズ例1:
端末からの入力 LOGON(TSS) DATA(B5678) カストマイズ後 LOGON APPLID(TSS) DATA('B5678')
カストマイズ例2:
端末からの入力 LOGON(TSS,B5678) カストマイズ後 LOGON APPLID(TSS) DATA('B5678')
indata定義文またはincmd定義文で定義したデータと端末から受信したデータが一致した場合に作成するLOGONシーケンスを定義します。
scmddef定義文を指定した場合、本定義文は省略できません。
lgnseq LOGONシーケンス
作成するLOGONシーケンスの文字列を固定文字列と可変情報の並びで指定します。個々の固定文字列や可変情報は1つ以上の空白で区切ります。
1つの固定文字列は、連続した範囲で引用符で囲んで表現します。可変情報は、indata定義文で指定したLOGONサービス変数、またはincmd定義文で指定した位置パラメタ、キーワードパラメタなどを指定します。incmd定義文で指定したLOGONサービス変数を使用する場合、以下のような意味になります。
%p*
位置パラメタ、または複数のキーワードパラメタに対応する値を表す変数です。*には0~9が指定できます。*で指定する値は、incmd定義文の位置パラメタの位置番号、またはキーワードパラメタのキーワードタイプに同じ値が定義済みでなければなりません。
%キーワード名
incmd定義文でキーワードパラメタとして定義されたパラメタの指定値を表す変数です。キーワードタイプがn以外のキーワードパラメタに適用します。
%k%キーワード名
incmd定義文でキーワードパラメタとして定義されたキーワード名そのものを表す変数です。キーワードタイプがnのキーワードパラメタに適用します。
注意
LOGONシーケンスを構成する固定文字列は、LOGONコマンドとして端末から入力可能な文字列(英数字)を指定することができます。バイナリデータ、多バイトコードを指定することはできません。
LOGONシーケンスを構成する固定文字列や可変情報は、1つ以上の空白で区切られていなければなりません。また、固定文字列として空白を指定する場合には引用符で囲んでください。
引用符で囲まれた固定文字列中に引用符を記述する場合には、引用符を2つ続けて定義してください。incmd定義文に対応するlgnseq定義文では、固定文字列は最大128文字まで指定できます。また、固定文字列とLOGONサービス変数合わせて31個まで指定できます。
indata定義文で可変情報(%user、%infset)が指定された場合
lgnseq 'logon tss' %user %infset
indata定義文で可変情報(%user)が指定された場合
lgnseq 'logon tss' %user 's(4096) non nom'
可変情報がない場合
lgnseq 'logon tss a0001 s(4096) non nom'
固定文字列中に引用符を指定する場合
lgnseq 'logon APPLID(' %p0 ') DATA(''' %p1 %unminf ''')'
コマンド定義の終了を宣言します。
scmddef定義文を指定した場合、本定義文は省略できません。
ecmddef
ecmddef