9.26.コマンド定義のリスト項目 |
ユーザーコマンドを作る場合、面倒なのは、データの繰り返し指定。「リスト」と呼ばれるものです。マニュアルは、説明だけで、画面で表示されるコマンドの形態を見せてくれません。 リストには、
の3種類があります。 下の図で、キーワードSTRINGは混合リストを使った「リスト中リスト(List within List)」、となり、キーワードSPCTYPEは、単純リスト(Simple List)となります。 CMD PROMPT('ソースデータ置き換え') PARM KWD(STRING) TYPE(SCNDTA) MIN(1) MAX(30) + PROMPT('検索指定') PARM KWD(SRCFILE) TYPE(SRCFILE) MIN(1) + PROMPT('原始ファイル') PARM KWD(BACKUP) TYPE(BACKUP) + PROMPT('バックアップ原始ファイル') PARM KWD(SRCMBR) TYPE(*GENERIC) LEN(10) + SPCVAL((*ALL)) PROMPT('原始メンバー ') PARM KWD(TOMBR) TYPE(*NAME) LEN(10) DFT(*GEN) + SPCVAL((*GEN) (*SRCMBR)) + PROMPT('バックアップ原始メンバー') PARM KWD(COLUMN) TYPE(*CHAR) LEN(1) RSTD(*YES) + DFT(*YES) SPCVAL((*YES 1) (*NO 0)) + PROMPT('カラム単位の置き換え') PARM KWD(SPCTYPE) TYPE(*CHAR) LEN(5) RSTD(*YES) + DFT(*ALL) SPCVAL((*ALL) (*FSPC) (*ESPC) + (*ISPC) (*CSPC) (*OSPC)) MAX(5) + PROMPT('変換対象となる仕様書') SRCFILE: QUAL TYPE(*NAME) LEN(10) QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL)) PROMPT('ライブラリー') BACKUP: QUAL TYPE(*NAME) LEN(10) DFT(*NONE) SPCVAL((*NONE)) QUAL TYPE(*NAME) LEN(10) DFT(*LIBL) + SPCVAL((*LIBL)) PROMPT('ライブラリー') SCNDTA: ELEM TYPE(*CHAR) LEN(30) EXPR(*YES) + PROMPT('検索文字') ELEM TYPE(*CHAR) LEN(30) EXPR(*YES) + PROMPT('置換文字') 単純リストの場合キーワードSRCTYPEに指定された内容は、下のようにプログラムに渡されます。
これは、簡単です。最初の2バイトのバイナリを数字にして、その数分、5バイトごとに切り出せばいいのです。CLPでも可能でしょう。 E SPC 5 5 ; I****************************************************** I* D E F I N E D A T A - S T R U C T U R E * I****************************************************** IDSSPC DS I B 1 20SPCCNT I 3 27 SPC C****************************************************** C* DEFINITION MODULE ( PLIST FIELD KLIST ) * C****************************************************** C *ENTRY PLIST : C PARM DSSPC : C****************************************************** C* M A I N - R O U T I N E C****************************************************** C* : C* : C****************************************************** C* S U B - R O U T I N E C****************************************************** C*----------------------------------------------------* C *INZSR BEGSR : C*----------------------------------------------------* B001 C 1 DO SPCCNT II 30 : B002 C SELEC : 002 C SPC,II WHEQ '*ALL' : 002 C MOVE *ON FSPC 1 : 002 C MOVE *ON ESPC 1 : 002 C MOVE *ON ISPC 1 : 002 C MOVE *ON CSPC 1 : 002 C MOVE *ON OSPC 1 : 002 C SPC,II WHEQ '*FSPC' : 002 C MOVE *ON FSPC : 002 C SPC,II WHEQ '*ESPC' : 002 C MOVE *ON ESPC : 002 C SPC,II WHEQ '*ISPC' : 002 C MOVE *ON ISPC : 002 C SPC,II WHEQ '*CSPC' : 002 C MOVE *ON CSPC : 002 C SPC,II WHEQ '*OSPC' : 002 C MOVE *ON OSPC : E002 C END : E001 C END : C* : C ENDSR : リスト中リストマニュアル中の「変位」はDisplacementの翻訳ですが、オフセットと考えてもいいようです。仮に、(aaaaa bbbb) (cccc dddd) (eeee ffff)という値が入力されると、受け取るパラメータは以下のようになります。尚、最下段の数字は、実際には-1された数字で、戻されます。0から開始しているようです。従って、実際の桁数を取りだすためには、 実際の桁位置=変位+1 となります。また、リスト内の値は「最後の組」から、入るため、リスト1への変位は、いきなり大きな数字から始まります。
尚、上記の値は、必ず2組入ることを前提としています。コマンドで検査はしていません。(本当はするべきですが) 上の表からも分かるように、最大パラメータ長(バイト)は
となります。 E SCN 1922 1 ; I****************************************************** I* D E F I N E D A T A - S T R U C T U R E * I****************************************************** IDSSCN DS I B 1 20SCNCNT I 11922 SCN I DS I I 0 B 1 20OFFSET I 1 2 OFFSEC C****************************************************** C* DEFINITION MODULE ( PLIST FIELD KLIST ) * C****************************************************** C *ENTRY PLIST : C PARM DSSCN : C****************************************************** C* M A I N - R O U T I N E C****************************************************** C* : C* : C****************************************************** C* S U B - R O U T I N E C****************************************************** C*----------------------------------------------------* C *INZSR BEGSR : C*----------------------------------------------------* C Z-ADD3 STR : C Z-ADD0 ST2 30 : C Z-ADD0 ST3 30 : C* : B001 C 1 DO SCNCNT II : 001 C 2 SUBSTDSSCN:STR OFFSEC :リストへの変位取出 001 C OFFSET ADD 3 ST2 :1番目の値を取りだす。 001 C OFFSET ADD 33 ST3 :2番目の値を取りだす。 001 C 30 SUBSTDSSCN:ST2 SC,II : 001 C 30 SUBSTDSSCN:ST3 RP,II : 001 C ADD 2 STR : E001 C END : C* : C ENDSR : |
You are at K's tips-n-kicks of AS/400
|
SEO | [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送 | ||