| パラダイム | 命令的 |
|---|---|
| デザイン: | IBM |
| 開発者 | IBM |
| 初登場 | 1978年 |
| OS | 制御プログラム機能、IBM i |
| ライセンス | 独自 |
| 影響を受けた | |
| ジョブ制御言語、PL/I | |
| 影響を受けた | |
| Windows PowerShell | |
制御言語( CL ) は、もともとIBMがSystem/38制御プログラム機能[1]用に作成したスクリプト言語で、後にOS/400 (現在の IBM i)でも使用されました。IBMジョブ制御言語に似ており、従来のプログラムを呼び出したり、プログラムの動作に関するヘルプを取得したりするために使用される一連のコマンド オブジェクト (*CMD) で構成されています。CL は、プログラムのような機能 (IF/ELSE、変数宣言、ファイル入力など) を提供する追加のコマンドがあるCL プログラム (シェル スクリプトに一致) の作成にも使用できます。
CLはシステム管理用のスクリプト言語ですが、主にコンパイルされたプログラムを作成するために使用されます。SBMDBJOBコマンド[2]を介して解釈されたCLスクリプトの使用は、実際には非常に限られています。
IBM 開発者は、プログラムのコンパイル、データのバックアップ、システム構成の変更、システム オブジェクトの詳細の表示、削除などのシステム レベルのタスクを実行するために何千ものコマンドを作成しましたが、コマンドはシステム レベルの問題に限定されず、ユーザー アプリケーション用に作成することもできます。
コマンドとプログラム
従来の System/38 および AS/400 プログラムのメイン プロシージャで定義されるパラメータ(コマンド ライン引数) は、数値、英数字、ブール値などのパラメータで構成されるハードコードされたリストであり、パラメータが渡される順序が重要です。これは、Unix シェル スクリプトおよびC プログラムのパラメータ リストが文字ポインタのセットまたは配列であり、多くの場合パラメータが位置に依存しない UnixおよびDOS の世界との大きな違いです。
この問題に対する開発者の解決策は、コマンド オブジェクト (*CMD) でした。コマンドのパラメータは任意の順序で指定できますが、各パラメータは特定の順序でプログラムに渡されるように定義されています。プログラマーは、パラメータのデータ型、一意のパラメータ名、説明テキスト (プロンプト用)、デフォルト値 (実行時にパラメータが指定されていない場合にのみ使用)、値が特定のセットまたは範囲に制限されているかどうか、プログラムを呼び出す前に入力されたデータを別の値に変更する必要があるかどうか、なども定義できます。
最も基本的なコマンドは、ユーザーがコマンドを入力またはプロンプトして Enter キーを押したときに呼び出す単一のプログラムを指定します。コマンドは、ユーザーが入力したすべてのパラメータとユーザーが入力しなかったパラメータを取得し、呼び出されたときにプログラムに渡すパラメータ リストを作成します。
構文
大幅に簡略化された CL コマンド構文のBNFは次のように定義されます。
< CL コマンド> ::=コマンド名 [ <位置パラメータリスト> ] [ <名前付きパラメータリスト> ]
<位置パラメータリスト> ::= <パラメータ値> [ <位置パラメータリスト> ]
<名前付きパラメータリスト> ::=パラメータ名 "(" <パラメータ要素リスト> ")" [ <名前付きパラメータリスト> ]
<パラメータ要素リスト> ::= <パラメータ値> [ <パラメータ要素リスト> ]
<パラメータ値> ::= CL 名 |
修飾CL名 |
"*"特別な値 |
汎用 CL 名 "*" |
"'"英数字の値"'" |
数値 |
「X'"16進数値"'」
上記の-nameで終わる項目は、オブジェクトの命名規則に従います。一般的に、名前は文字で始まり、最大 10 文字まで使用できます。(CL コマンドでは大文字と小文字も区別されません。)
一般的な CL コマンドの良い例としては、以下のプログラム変更(CHGPGM) コマンドが挙げられます。
CHGPGM MYPGM OPTIMIZE(*FULL) RMVOBS(*BLKORD *PRCORD) TEXT('私のプログラム。')
上記のコマンドは、プログラム変更処理を実行するプログラムに次の 4 つのパラメータを渡します。
- MYPGM: 位置パラメータ (PGM) であり、唯一の必須パラメータです。この場合、変更されるプログラムの名前です。位置パラメータは常に最初にあります。名前付きパラメータが出現すると、その後に続くすべてのパラメータは名前付きパラメータである必要があります。
- OPTIMIZE(*FULL): 特別な値である単一の要素を指定する名前付きパラメータ。この場合、プログラムは完全に最適化されるように変更されます。
- RMVOBS(*BLKORD *PRCORD): 複数の特殊な値を指定する名前付きパラメータ (Remove Observability)。この場合、プログラムから 2 種類のプロファイリング データを削除するように指示します。
- TEXT('My program.'): 単一の英数字値を指定する別の名前付きパラメータ。この場合は、プログラムの説明テキストを変更します。
実際には、システムは上記で指定した 4 つのパラメータよりも多くのパラメータを渡します。これは、CHGPGM コマンドの残りのパラメータが指定されていないため、代わりにデフォルト値が渡されるからです。PGM パラメータを除くすべてのパラメータのデフォルトは*SAMEであり、変更しないでください。
促す
すべての CL コマンドは、コマンド ラインから直接、または CL プログラムソース内でコマンドを入力して F4ファンクション キーを押すことによってプロンプト表示できます。OS/400 コマンドは、コマンドの前に ? を入力してプロンプト表示することもできます (これは、いくつかの値が既に入力されているコマンド文字列をキューする対話型プログラムで役立ちます)。
次に、システムは、プログラムが受け入れる/必要とするパラメータのセットを含む画面を表示します (必須パラメータは通常、強調表示されます)。
必須パラメータが最初にリストされ、システムが提供するデフォルト値を持つパラメータが最後にリストされます。すべてのパラメータを表示するには、F10 キーを押します。いずれかの選択肢でさらに選択が必要な場合は、そのパラメータの値を選択すると、画面にその選択内容が表示されます。
プロンプトがさらに強化され、プログラマーは各パラメータに有効な値を見つけられるようになりました。プロンプト中にこれを行うには、ユーザーはカーソルを問題のパラメータ フィールドに移動し、もう一度 F4 キーを押します。すると、必要な入力の種類と使用可能な値のリストを示す画面が表示されます。
より長い名前を入力する場合、またはリストを拡張して追加の値を入力できるようにするには、値の代わりにプラス記号を入力します。(保存または復元するオブジェクトの名前をリストする場合と同様)
コマンドヘルプ
コマンドにはカーソル感知ヘルプも用意されていますが、必須ではありません。ヘルプが用意されている場合は、カーソルを目的のパラメータ フィールドに移動して F1 (ヘルプ) を押すと、パラメータのヘルプを表示できます。コマンド全体 (およびそのすべてのパラメータ) のヘルプを表示するには、プロンプト表示の任意の場所で F1 を押してから、F2 (拡張ヘルプ) を押します。
新しいコマンドの作成
非システム プログラムを呼び出すための新しいコマンドを作成できます。これらのコマンドは、組み込みのコマンドとまったく同じように動作します。コマンド定義言語については、『CL プログラマーズ ガイド』で説明されています。
新しいコマンドとそのパラメータのヘルプ画面を作成することをお勧めします。すべてのヘルプ画面はパネル グループ オブジェクト (*PNLGRP) を使用し、これらは IBM AS/400 アプリケーション ディスプレイ プログラミング マニュアルに記載されている UIM 言語を使用して作成できます。
オペレーティングシステムのV5R3から、ヘルプを作成するための新しい、はるかに簡単な方法が追加されました。コマンドを実行します。
GENCMDDOC CMD(MYLIB/MYCMD) TODIR('/QSYS.LIB/MYLIB.LIB/QPNLSRC.FILE) GENOPT(*UIM)
コマンドで記述されたすべてのパラメータを含むスケルトン UIM パネル グループが自動的に生成されます。結果ファイルは編集 (seu、wdsc、rdi) でき、CRTPNLGRP コマンドでコンパイルし、最後に CHGCMD HLPPNLGRP() を介してコマンドに関連付けることができます。
適切なコマンドを見つける
V7R3には2,262個の組み込みIBMコマンドが含まれていますが[3] 、作業を容易にするいくつかのシステム設計のおかげで、それらを見つけるのはそれほど難しくありません。これらの労力を節約する設計は、標準化された略語、コマンドグループ化メニュー、およびコマンド選択です。
標準化された略語
IBM の開発者は、コマンド名の作成に使用する略語を標準化しました。change などの動詞は常にCHG、display はDSP 、 workはWRK 、 createはCRTなどと表示されます。program などの主題は常にPGM、userはUSR、moduleはMOD、serverはSVRなどです。システムで使用できるすべての動詞と主題は、 VERBメニューとSUBJECTメニューで確認できます。GO VERB コマンドまたは GO SUBJECT コマンドを入力するだけです。
同様に、「制御言語プログラミング」はCLPと略され、ソースタイプもそれに応じてCLPになりました。ILEプログラミングモデルの導入により、ソースタイプは「CLLE」に変更されました。[4]
コマンドグループ化メニュー
VERB メニューと SUBJECT メニューは、コマンド グループ化メニューと呼ばれるものの一部です。3 文字 (または 4 文字) の略語ごとに、CMDで始まる専用のメニューがあります。したがって、すべてのCHGコマンドを表示するには、ユーザーはコマンド GO CMDCHG を実行します。プログラムコマンドの場合、メニューは CMDPGM になります。
コマンド グループ化メニュー以外にもメニューがあります。メニュー システムの開始点にアクセスするには、空のコマンド ラインで F4 キーを押します。
コマンド選択
コマンドの一部しか知らない場合、またはコマンドが AS/400 の省略標準に準拠していないサードパーティ ソフトウェアを使用している場合は、コマンドのわかっている部分を入力し、アスタリスクを付けて (汎用にするため) Enter キーを押します。すると、システムは、ジョブのライブラリ リストにある、入力した汎用名に一致するコマンドのリストを表示します。次に、リストをページングして必要なコマンドを探し、オプション 1 を使用してそれを選択します。
バックグラウンドでは、システムは SLTCMD コマンドを使用してこの機能を実行します。ライブラリ内のすべてのコマンドを選択する場合は、このコマンドをプロンプトし、特殊値 *ALL を入力します。
サンプルコード
以下は CL プログラミングのサンプルです。このプログラムは、日付をユリウス暦から MDY に、またはその逆に対話的に変換します。結果は、端末の 24 行目に表示されます。このプログラムは 2 つのパラメータを受け入れます。&INパラメータは、変換する日付文字列です。ユリウス暦文字列の場合、形式は YYNNN で、YY は年番号、NNN は年間の日番号です。MDY 文字列の場合、形式は MMDDYY でなければなりません。2 番目のパラメータは、&TYP変換する日付のタイプです。これは 'J' (ユリウス暦) または 'M' (MDY) でなければなりません。たとえば、このコマンドは、CALL PGM(ICVTDATC) PARM('04180' 'M')ユリウス暦の日付 04180 を 062804 (2004 年 6 月 28 日) に変換します。
PGM (&IN &TYP)
DCL &IN *CHAR 6
DCL &OUT *CHAR 8
DCL &TYP *CHAR 1
IF (&TYP = J) +
する
CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*MDY) +
TOFMT(*7月) TOSEP(*なし)
ENDDO
それ以外の場合 (&TYP = M) +
する
CVTDAT DATE(&IN) TOVAR(&OUT) FROMFMT(*JUL) +
TOFMT(*MDY) TOSEP(*なし)
ENDDO
SNDPGMMSG MSG('IN=' || &IN || ' OUT=' || &OUT) +
メッセージタイプ(*COMP)
終了PGM
参照
参考文献
- ^ 「IBM System/38 制御言語リファレンス・マニュアル」(PDF) . IBM. 1982-09-10 . 2021-03-24閲覧。[永久リンク切れ ]
- ^ itjungle.com
- ^ IBM.com
- ^ マイヤーズ、ブライアン (1997)。AS /400 用制御言語プログラミング(第 2 版)。29th Street Press。ISBN 9781882419760。
