コマンド

42. PARMパラメータ

 プログラムに渡される値がこのPARMパラメータである。

[例]


 0013.00              PARM       KWD(TEXT) TYPE(*CHAR) LEN(50) DFT(*BLANK) +
 0014.00                           PROMPT(' テキスト '' 記述 ''')           

[解説] PARMパラメータを構成するのは

  キー・ワード(KWD) ……………. パラメータの変数名(英字から始まる10文字以内の英数字)

タイプ(TYPE) ………………… 変数のタイプを表す。最もよく使用されるタイプだけを
説明すると

*CHAR : 文字
*DEC :PACK型式の数字。小数桁数も併せて定義する必要がある。
*PNAME: パス名。IFSのパス名を定義する。
*NAME :名前。必ず英字から始まる文字列。

 省略値(DFT) …………………. コマンドの初期値として表示される文字列。

プロンプト・テキスト(PROMPT)……. テキスト。20文字以内のテキストでありパラメータのテキストとして
コマンドの表示のときに表示される。
このプロンプトには・ッセージ・ファイルのMSGIDを記述することができる。
ここに MSGIDを記述したときはコマンドのコンパイルには
メッセージ・ファイルも指定しなければならない。
MSGIDを使う理由は

                     ・使用する用語をメッセージ・ファイルで統一したい
・MSGFを入れ替えて外国語環境でも使用できるようにしたい。
ただしMSGFを動的に入れ替えて複数の国際言語に対応することは
できない。各国際言語別のコマンドを用意する必要がある。

[ PARM パラメータを使うテクニック ]

PARMパラメータを使うときのテクニックをいくつか紹介する。


 

・入力必須にするには

許される最小値(MIN)キー・ワード は初期値は 0 である。(入力がなくても可という意味)
これを 1 に変更しておくとエンド・ユーザーによる入力が必須となり入力がなければ
「パラメータ xxx が必要である」とのエラー・メッセージが表示される。

・いくつかの候補の中から選択させるには 入力値をいくつかの候補の中から選ぶようにして候補以外の入力を認めないようにするには

RSTD(*YES) VALUE(XX XX …. XX) のように RSTD(*YES) にして候補として VALUESを
組み合わせて指定する。

[例]

0012.00 PARM KWD(OUTPUT) TYPE(*CHAR) LEN(8) RSTD(*YES) +
0013.00 DFT(*PRINT) VALUES(*PRINT * *BOTH) +
0014.00 PROMPT(‘ 出力 ‘)

   

[解説]

この例では候補として *PRINT, * または *BOTH を選択するように指定している。

・追加のパラメーターとして表示させるには

IBMユーティリティで「F10= 追加のパラメーター」という機能キー表示を見たことのある人も
多いだろう。
普段は必要のないパラメータとしてかくしておいいて必要なときだけに F10キーを押して
表示させたい場合がある。
このようにしたい場合は プロンプト制御(PMTCTL)を *PMTRQS に設定すればよい。

[例]

0019.00 PARM KWD(ONCE) TYPE(*CHAR) LEN(4) RSTD(*YES) +
0020.00 DFT(*YES) VALUES(*NO *YES) +
0021.00 PMTCTL(*PMTRQS) +
0022.00 PROMPT(‘ 一回のみ表示する ‘)

 

・英小文字の入力も可能にするには

通常ではコマンドのパラメータには英大文字しか入力することができないのだが
これを英小文字も入力可能にするには値のケース(CASE) を *MIXEDにすればよい。

[例]

0010.00 PARM KWD(STRING) TYPE(*CHAR) LEN(80) CASE(*MIXED) +
0011.00 PROMPT(‘ 探索文字列 ( 英小文字可 )’)

[解説]

通常は CASE の省略値は *MONO になっているため英大文字しか入力することができないが
*MIXED に変更すると英小文字も入力できるようになる。

・パスワードを入力させるには

パスワードを入力させるには入力中も入力文字を表示させないようにし、
ログにも残らないようにしなければならない。
それには

PARM KWD(PASSWRD) TYPE(*CHAR) LEN(32) +
CASE(*MIXED) DSPINPUT(*NO) +
CHOICE(WRT0003) PMTCTL(IPADDR) +
INLPMTLEN(*PWD) PROMPT(‘ パスワード ‘)

のようにして DSPINPUT(*NO) と INLPMTLEN(*PWD) の両方を指定しなければならない。

・*NAME のパラメータに文字「*」から始まる文字列を入力できるようにするには

*CHAR として定義したパラメータには *PRINT や *BOTH のような文字「*」から始まる
特殊な文字列を入力させることができるのだが *NAME として定義されているパラメータでは
文字 * からの入力は許されない。
しかし特殊値(SPCVAL) として宣言しておくと * 文字列の入力が許される。

[例]

0008.00 PARM KWD(SRCMBR) TYPE(*NAME) LEN(10) DFT(*ALL) +
0009.00 SPCVAL((*ALL)) PROMPT(‘ ソース・メンバー ‘)

パラメータ SRCMBR はタイプ *NAME であるので *ALL という文字列の入力は許されないが
SPCVAL((*ALL)) として宣言しているので *ALL の入力も許されている。
*CHAR とすればどのような文字列の入力も可能であるのだが
後で説明するコマンドの文法上でどうしても *NAME で定義しなければならない場合がある。
このようなときでも *文字列の入力をこの方法で叶えることができる。