Open M 言語との互換性
Caché は、以下の言語との互換モードを提供しています。
-
DSM -11
-
Open M [DSM]
-
Open M [DTM]
-
Open M [MSM]
これらのモードにより、多数の共通 M プログラミング言語コマンドと関数の構文を ObjectScript に適合させ、上記言語のアプリケーションを Caché に移植できます。ObjectScript は、ISO 11756-1999 標準の M プログラミング言語の上位集合です。ISO 11756-1999 標準は、以前の ANSI 標準の M 言語と同一です。
この章では、互換モードに関連する以下の項目について説明します。
言語モードの表示と切り替え
Caché には、言語モードを表示および設定するための、%SYSTEM.ProcessOpens in a new tab クラスの LanguageMode()Opens in a new tab メソッドが用意されています。LanguageMode(n) は、言語をモード n に設定し、以前の値を返します。引数のない LanguageMode() は、現在の値を返します。
異なる言語のパーティションにルーチンが存在する場合、LanguageMode() を使用して現在の言語を変更しないでください。
このセクションに記述されている DSM モード・ルーチンの移植、管理、および変換の手順を実行すると、LanguageMode() メソッドの呼び出しを使用せずに言語モードを設定できます。LanguageMode() を使用して現在の言語モードを確認したい場合は、以下のコマンドを発行してください。
WRITE ##class(%SYSTEM.Process).LanguageMode()
ルーチンのロードに作用するコマンドを使用して、言語モードの設定もできます。現在の言語モードが、ルーチンの言語モードになります。DO コマンドの場合、ルーチンの終了時に直前の言語モードに戻ります。これは、コマンド間接指定 (XECUTE) で処理される ZLOAD や GOTO でも同様です。
以下は、Caché で使用される汎用的な言語モードです。
LanguageMode() の値 | 言語モード |
---|---|
0 | Caché |
1 | DSM-11 |
2 | DTM |
5 | DSM |
6 | DSM-J (日本語版) |
7 | DTM-J (日本語版) |
8 | MSM |
DSM-11言語互換性
Caché は、移植された DSM-11 ルーチンを実行する場合、DSM モードで動作します。Caché に移植された DSM-11 ルーチンを実行するために大幅な変更をする必要はありません。このセクションでは、DSM-11 モードでさまざまなコマンドと関数を処理する方法について説明します。
DSM-11 言語モードは、%SYSTEM.ProcessOpens in a new tab クラスの LanguageMode(1)Opens in a new tab メソッドを使用して設定します。
特に、Lock、ZAllocate、ZDeallocate について記述しています。
ルーチン・インタロック・デバイスの使用法
ルーチン・インタロック・デバイスは、標準 M の Lock コマンドの代わりとして提供されています。これは、DSM-11 アプリケーションでロック・テーブル領域が不足しないように開発されました。
この機能は、特にDSM-11 から移植されたアプリケーションの DSM-11 互換モード用に設計されています。ただし、Caché 言語モードでも同様に動作します。
グローバルをロックする特殊デバイスを開く
デバイス番号 20 ~ 46 および 200 ~ 223 は、ルーチン・インタロック・デバイス用に使用します。これらは、プロセスと共に使用する擬似デバイスであるため、同じデータに対する変更を制限できます。ルーチン・インタロック・デバイス番号は、すべての Open M と Caché システムに存在します。
複数のプロセスでは、特定の目的に対して同じデバイス番号を使用する必要があります。あるプロセスが Open コマンドをデバイスに発行し、そのデバイスに関連するデータに対して必要な処理を実行します。2 番目のプロセスがそのデバイスを開こうとする場合、最初のプロセスがそのデバイスを閉じるまで待機する必要があります。その結果 2 番目のプロセスは、デバイスを開くまで、あるいはタイムアウトになるまで処理を実行しません。デバイスを開くプロセス数には制限がなく、各デバイスは Close コマンドでデバイスを解放するまで待機します。
このように、ルーチン・インタロック・デバイスへの Open コマンドは、デバイスに関連するデータへの排他的アクセスを保証します。しかしこれは、アプリケーションが以下の場合に限ります。
-
一貫してこの方法を使用する場合 (Lock コマンドを使用)
-
それぞれのルーチン・インタロック・デバイスに関連するデータに適合する場合
プロセスがそのデバイス番号に対して Close コマンドを発行すると、別のプロセスがそのデバイスを開き、データに排他的にアクセスします。
ルーチン・インタロック・デバイスへの入出力の発行
Open と Close は、ルーチン・インタロック・デバイスで使用できる唯一の入出力コマンドです。ルーチン・インタロック・デバイスは、デバイスやメモリ領域内外のデータを転送しないため、Read と Write コマンドは使用しません。
Open コマンド
Open コマンドは、ルーチン・インタロック・デバイスを開き、他のプロセスが同じデバイス番号に Open コマンドを発行するのを防ぎます。
構文
Open device[::timeout]
Parameter (パラメータ) | 概要 |
---|---|
device | 20 ~ 46 または 200 ~ 223 のデバイス番号です。所定のデバイス番号を使用するすべてのルーチンで、その番号の意味が一致していることを確認する必要があります。通常その意味とは、ロックされていて他のプロセスが使用できないのはどのグローバルかを示しています。 |
timeout | Caché が Open の終了を待機する最大秒です。正の整数で指定します。0 を指定する場合、Open は即座に制御をプロセスに戻します。 |
Close コマンド
Close コマンドは、ルーチン・インタロック・デバイスを閉じ、そのデバイスを他のプロセスに解放します。
構文
Close device
DSM-11 モード・ルーチンの実行
Caché システムで DSM-11 モードのルーチンを実行する場合、以下の点を考慮する必要があります。
-
DSM-11 とインターシステムズのルーチンは、同じネームスペースに置くことができます。
-
Caché と DSM-11 モードのルーチンは、必要に応じて別々に呼び出すことができます。Caché は、ルーチンごとに、実行ルーチンで保存された言語モードに対応します。
-
DSM-11 モードのルーチンは、中間ソース・コード (.INT) ルーチンとしてのみ保存されます。マクロ・ソース・コード・レベル (.MAC) で操作できません。
-
Caché は、DSM-11 言語の実行時サポートのみを提供します。DSM-11 開発環境、DSM-11 ライブラリ・ユーティリティや MACRO-11 ルーチンの呼び出しはサポートしません。
-
Caché 開発環境では、DSM-11 ルーチンへの追加の開発のみ実行できます。
-
フルスクリーン・エディタや ZLoad コマンドでルーチンをロードすると、Caché は、言語モードをそのルーチンのモードに合うように設定します。
-
LanguageMode()Opens in a new tab メソッドで言語モードを変更し、ロードしたルーチンと言語モードが一致しないまま ZInsert を実行しようとすると、<LANGUAGE MISMATCH> エラー・メッセージが表示されます。
DSM-11 モードから Caché モードに変換するルーチン
Caché に適合するよう DSM-11 ルーチンを編集し、言語モードを Caché モードにいつでも変更できます。スタジオ・エディタは、DSM-11 モード・ルーチンの Caché モードへの変換に役立ちます。
ルーチン操作
ルーチンの保存とリストア
Caché システムに DSM-11 モードのルーチンを置くと、%RO と %RI ユーティリティあるいはスタジオと共に使用できます。これらのユーティリティは、ルーチンの DSM-11 モードを維持します。これにより、Caché %RO と %RI ユーティリティを使用して、DSM-11 ホストから Caché ホストにコピーしたルーチンを、追加の Caché ネームスペースとホストまたはそのいずれかにコピーできます。
現在のネームスペースのルーチン・リスト
現在の Caché ネームスペース内のルーチンをリストする %RD ユーティリティは、各ルーチンに保存された言語モードを反映する、長い形式で表示された “LANG” 列を含んでいます。“LANG” 列は、Caché モードのルーチンでは空で、DSM-11 モードのルーチンでは “DSM11” を含みます。また、管理ポータルを使用して、ルーチンをリストできます。
%RCOPY と %RCOMPIL
%RCOPY と %RCOMPIL ルーチン・ユーティリティは、各ルーチンの言語モードを認識し、保存します。%RCOPY はルーチンをコピーし、バックアップ・バージョンを生成します。%RCOMPIL は、マクロ・ソースと中間コード・ルーチンをコンパイルします。
%RCOPY を使用して、DSM-11 モードのルーチン名を Caché モードに変換せずに変更します。スタジオを使用することもできます。
スタジオとルーチン行エディタ
スタジオとルーチン行エディタ (X ^%) は、SAVE あるいは COMPILE を実行すると、各ルーチンの言語モードを認識し、保存します。スタジオの [ルーチン属性] ダイアログは、現在のルーチンの言語モードを表示します。
DSM-11 システムからのグローバルの転送
ANSI 照合グローバル
ANSI 照合グローバルを DSM-11 システムから Caché システムに転送するには、最初に、スタジオを使用して、DSM-11 ファイル形式で DSM-11 システムからグローバルを読み取ります。
文字列照合グローバル
文字列照合グローバルを DSM-11 システムから Caché に転送するには、最初に、DSM-11 %GTO ユーティリティを使用して、DSM-11 システムからグローバルを読み取ります。その後、インターシステムズのホストにある %GCREATE ユーティリティを使用して各グローバルを生成し、純文字列照合文字を割り当てます。最後に、%GIGEN ユーティリティを使用して、グローバルをロードします。
DSM-11 互換モードでの入出力プログラミング
以降のセクションでは、Caché DSM-11 互換モードの入出力プログラミングの特徴について説明しています。
DSM-11 互換モードのターミナル入出力
Caché では、ターミナルの OPEN コマンドで、5 個のパラメータ、margin、protocol、terminators、portstate、baud を使用できます。また、ターミナルの USE コマンドでは、3 個のパラメータ、margin、protocol、terminators のみを使用できます (詳細は、"Caché 入出力デバイス・ガイド" の "ターミナル入出力" の章にある "OPEN コマンドと USE コマンド" を参照)。
一方、DSM-11 の Open と Use コマンドは、11 個のパラメータに対応します。パラメータの大半は、DSM-11 が独自のオペレーティング・システムとして動作するためのものです。DSM-11 互換モードでは、Caché は DSM-11 構文をシミュレートし、オペレーティング・システムに関連するパラメータを受け取りますが無視します。
以下の 2 つのテーブルは、11 個の DSM-11 Open と Use コマンド・パラメータの Caché DSM-11 互換モード変換を示しています。
Parameter (パラメータ) | DSM-11 の意味 | DSM-11 互換モード変換 |
---|---|---|
p1 : マージン | デバイスに右マージンを設定します。 | DSM-11 と同じです。機能とパラメータ位置の両方で、Caché モード・マージン・パラメータと同一です。 |
p2 : 出力リング・バッファ・サイズ | 出力リング・バッファ・サイズを設定します。 | 受け取っても無視します。 |
p3 : 入力フィールド長 | フィールドの長さを指定します。このパラメータは、DSM-11 後方互換性のためにのみ提供されます。現在の Read コマンドは、フィールドの長さを指定するための優先手法です。 | 受け取っても無視します。 |
p4 : 入力リング・バッファ・サイズ | 入力リング・バッファ・サイズを設定します。 | 受け取っても無視します。 |
p5 : 状態設定 | デバイスの特性を変更します。 | インターシステムズ・モード・プロトコル・パラメータに関連するビット・マスクです。詳細は、次のテーブルを参照してください。 |
p6 : 状態クリア | デバイスの特性を変更します。 | Caché モード・プロトコル・パラメータに関連するビット・マスクです。 |
p7 : $X 設定および $Y 設定 | ターミナルの $X 設定と $Y 設定を変更します。 | 詳細は、次のテーブルを参照してください。 |
p8 : 行パラメータ・レジスタ | コントローラのタイプを元に割り当てられた値です。 | 受け取っても無視します。 |
p9 : ターミネータ | デバイスに、行ターミネータ一式を構築します。 | DSM-11 と同じです。異なるパラメータ位置を占有しますが、Caché モード・ターミネータ・パラメータと機能的に同一です。 |
p10 : アプリケーションの割り込みキー設定 | デバイスに、アプリケーションの割り込みキー一式を構築します。 | 受け取っても無視します。 |
timeout | 要求したデバイスが使用中の場合、実行を延期する時間を指定します。 | DSM-11 と同じです。 機能とパラメータ位置の両方で、Caché モード・タイムアウト・パラメータと同一です。 |
Caché モードのプロトコル・パラメータは、以下のうちいくつかの組み合わせを含む文字列です。
-
B (有効な Ctrl-C)
-
C (CRT)
-
F (フラッシュ)
-
I (イメージ)
-
P (プリンタ)
-
S (機密事項、エコーなし)
-
T (ターミネータ)
同様に、DSM-11 には状況設定パラメータと、状況クリア・パラメータがあり、その両方がビット・マスクです。
プロトコルを有効にするには、状況設定パラメータにそのビットを割り当てる必要があります。プロトコルを無効にするには、状況クリア・パラメータにそのビットを割り当てる必要があります。DSM-11 互換モードの場合、Caché はオペレーティング・システム指定のビットを受け取りますが、無視します。以下のテーブルは、サポート対象のビット・リストです。
ビット | 値 | 概要 |
---|---|---|
0 (1) | 0 - エコーあり 1 - エコーなし | Caché“S” プロトコルと同一です。 |
2 (4) | 0 - ハードコピー 1 - CRT | Caché“S” プロトコルと同一です。 |
6 (64) | 0 - エスケープ処理無効 1 - エスケープ処理有効 | エスケープ・シーケンスを Read で処理する方法を指定します。Caché モードの場合、エスケープ・シーケンスは常に非イメージ・モードの Read を終了し、$ZB の文字列として表示されます。DSM 11 モードの場合、エスケープ・シーケンスは常に通常の Read を終了します。 しかし、エスケープ処理が有効の場合にのみ処理されます。エスケープ処理が有効になっている場合、2 番目の ASCII 10 進数コードが $ZB の上位バイトで表示され、エスケープ文字自身の ASCII 10 進数コードは、下位バイトで表示されます。エスケープ処理が無効になっている場合、エスケープ文字はターミネータとして処理され、残りのエスケープ・シーケンス文字は処理されません。後続の Read コマンドでアクセスできるように、入力バッファに残されたままになります。 |
7 (128) | 0 - カーソル制御シーケンスを転送しない 1 - カーソル制御シーケンスを転送する | パラメータ 7 (set $X and $Y) の処理方法を指定します。パラメータ 7 の値が、DSM-11 言語互換モードの Open/Use コマンドで提供されると、$X と $Y は更新され、ビット 7 が ON の場合、適切なカーソル制御シーケンス (ビット 16 に依存する VT52 や ANSI) がターミナルに転送されます。 |
14 (16384) | 0 - 変換なし 1 - 大文字変換 | 文字を入力時に変換するかどうかを指定します。 |
16 (65536) | 0 - VT52 1 - ANSI | 適切なカーソル制御シーケンスを指定します。 |
19 (524288) | 0 - 削除文字を無視 1 - 削除文字を認識 | 入力バッファに削除するものがない場合に Delete キーを押したときの処理を指定します。ビットが ON の場合、削除文字を無視します。ビットが OFF の場合、Read は終了し、削除文字が $ZB の下位バイトで 127 として表示されます。 |
20 (1048576) | 0 - プログラムされていないコントロール・キーを受け入れる 1 - プログラムされていないコントロール・キーを無視する | プログラムされていないコントロール・キーを押したときの動作を指定します。ビットが OFF の場合、プログラムされていないすべてのコントロール・キーは通常の文字として扱われます。ビットが ON の場合、プログラムされていないコントロール・キーは無視されます。入力バッファにエコーされたり、格納されることはありません。 |
23 (8388608) | 0 - すべてを渡すを無効化 1 - すべてを渡すを有効化 | Caché IMAGE モード・プロトコルと同一です。ビットが ON の場合、すべての制御文字はフィルタリングまたは解釈されずに、プログラムに直接渡されます。 |
25 (33554432) | 0 - 先行入力を有効化 1 - 先行入力を無効化 | 先行入力の処理方法を指定します。ビット 25 が ON の場合、先行入力は無効です。入力バッファは、Read の前にフラッシュされます。ビット 25 が OFF の場合、先行入力は有効です。入力バッファは、Read の前にフラッシュされません。 |
26 (68108864) | 0 - ビット 25 の既定で、先行入力を制御 1 - 先行入力バッファをフラッシュしない | ビット 26 が OFF の場合、ビット 25 によって提供される以上の先行入力制御はありません。ビット 26 が ON の場合、ビット 25 で明示的に指示されない限り、先行入力バッファはフラッシュされません。例えば、プロンプトを持つ Read コマンドは、先行入力をフラッシュしません。 |
Windows 上で、ObjectScript は各プロセスに対し、データベース・ファイル数と Open で開くファイル数の間で、開くファイル数を割り当てます。Open で開くファイルが多すぎて Open コマンドへの割り当てができない場合、<TOOMANYFILES> エラーを生じます。Caché では、開くことができるファイルの数に制限はありません。プロセスごとに開くことができるファイルの最大数は、プラットフォーム固有の設定です。詳細は、オペレーティング・システムのマニュアルを参照してください。
DSM-11 互換モードに対し一意の Open/Use パラメータは、デバイスの最後の Open/Use が DSM-11 モードである場合にのみ、Read/Write を受け取ります。DSM-11 モードに対する一意のパラメータは、p5/p6 (ビット 6、7、19、20、25、26) と p7 です。
READ の終了
ターミネータが Read を終了すると、特殊変数 $ZB は、Caché モードの文字列としてターミネータ文字を組み込みます。また、DSM-11 モードの場合、ターミネータの ASCII 10 進数値は、$ZB の下位バイトで返されます。
エスケープ・シーケンスが Read を終了すると、Caché モードは、$ZB 内の文字列として ASCII エスケープ・シーケンスを返します。一方で DSM-11 モードは、$ZB 内の下位バイトにエスケープ文字 (27) 付きの整数、および 2 番目の文字 に 16 を加算した数、および上位バイトにモジュロ 64 を返します。
磁気テープの入出力
Caché と DSM-11 で、磁気テープの入出力コマンドは非常に類似しています。どちらも位置パラメータを使用しており、それぞれ指定するパラメータの位置と値も類似しています。しかし、形式コードは異なっています。これが、DSM-11 互換モードの磁気テープ入出力の固有の特徴です。
-
Caché は、DSM-11 “B” 形式をサポートしません。
-
DSM-11 は、連続型 (非保留型) 入出力を指定する “C” 形式を提供します。これにより、テープの入出力処理の実行中に、プログラムが他の動作を実行できるようになります。Write *10 コマンドを発行して $ZA を更新すると、常に入出力の状態を確認できます。Caché では、このような動作を UNIX® または Windows のオペレーティング・システムで実行できませんが、ソースを変更しなくても “C” 形式でエンコードされた DSM-11 アプリケーションを実行できるように、DSM-11 互換モードで C 形式を使用できるようになっています。代わりに、Caché は以下のステップを実行します。
-
入出力を実行します。
-
プログラムの完了を待機し、次に進みます。
-
プログラムが Write *10 を発行したとき、完了の状態で $ZA を更新します。
-
DSM-11 “T” 形式は、DSM-11 互換モードで禁止しているテープ・マーク・トラップを指定します。
-
DSM-11 と Caché にテープ密度を指定する形式文字列は、以下のとおりです。
DSM-11 モード Caché モード テープ密度 (BPI) 3 1 800 4 2 1600 5 3 6250 -
Caché モードでは、磁気テープ制御関数は、Write * -n (負の値) を使用して完了します。一方、DSM-11 互換モードは Write * n (正の値) を使用します。制御関数への絶対値の割り当ては両方のモードで同じですが、DSM-11 では Write *10 を発行して $ZA を更新する点は異なります。これは上述のように、DSM-11 “C” 形式オプションを使用して、非同期入出力処理の状態を確認する際に役立ちます。
ジョブ間通信デバイス (JOBCOM)
Caché では、両方の言語モードによるジョブ間通信にデバイス 224 から 255 までを使用できます。これらのデバイス使用の詳細は、“プロセス間通信” の章を参照してください。
VIEW コマンドと $VIEW 関数
Caché は、DSM-11 互換モードで VIEW コマンドや $VIEW 関数をサポートしていません。
ZAllocate と ZDeallocate
ZAllocate と ZDeallocate コマンドの振る舞いは、Caché と DSM-11 で異なります。
-
DSM-11 モードでは、ZAllocate は ZDeallocate でのみ取り消すことができ、また LOCK+ は、Lock でのみ取り消すことができます。さらに、特定の位置にある任意の数の ZAllocate コマンドは、一回の ZDeallocate コマンドで取り消すことができます。
-
Caché モードでは、ZAllocate と ZDeallocate は Lock+ と Lock と同一の機能になります。
Config.MiscellaneousOpens in a new tab クラスの ZaModeOpens in a new tab プロパティを使用すると、ZAllocate と ZDeallocate が Caché モードと DSM-11 モードのいずれか選択したモードで動作するように設定できます。
使用するモードの決定
DSM-11 互換モードでの ZAllocate と ZDeallocate の既定の動作は、DSM-11 と同様です。これらのモードには違いがあるため、DSM-11 システムから移植するコードについては必ず検証をして、Lock と ZAllocate が持つ入れ子属性を変更しても、アプリケーションの整合性に影響しないことを確認してください。
ZSTU でのモード設定
ZA コマンドと ZD コマンドを Caché モードに移植した後も、DSM-11 モードでコンパイルを続けている場合、ZaMode を ZSTU スタートアップ・ルーチンに設定し、ZA と ZD が確実に Caché モードに変換されるようにします。
DSM-11 モードの拡張関数
Caché は、両方の言語モードで以下の関数をサポートします。
-
$ZNext
-
$ZOrder
-
$ZPrevious
-
$ZSort
上記の従来の関数は、Caché では廃止されています。
サポート対象外の DSM-11 関数
Caché は、以下の DSM-11 関数をサポートしません。
-
$ZCall
-
$ZUCI
$ZUCI 関数は $ZU のように省略できます。したがって、Caché に移植する DSM-11 アプリケーションからこの関数へのすべての参照を削除し、Caché が Caché$ZU(n) ($ZUTIL(n)) 関数への呼び出しと見なさないようにする必要があります。
DSM-11 モードの拡張特殊変数
Caché は、両方の言語モードで以下の特殊変数をサポートします。
Caché は、DSM-11 モードでのみ以下の特殊変数をサポートします。
$ZA と $ZB は両方とも DSM-11 値を返します。
DSM-11 互換モードの拡張コマンド
Caché は、両方の言語モードで以下の DSM-11 コマンドをサポートします。
Caché は、DSM-11 互換モードで以下のコマンドをサポートします。
-
ZPrint
-
ZWrite
-
ZBreak
ZPrint は、Caché モードの PRINT コマンドと同一です。
ZWrite は、引数のない WRITE コマンドと同一です。
DSM-11 モードでは、ZBreak ON と ZBreak OFF コマンドは、引数なしの Break コマンド処理を制御します。%SYSTEM.ProcessOpens in a new tab クラスの BreakMode()Opens in a new tab メソッドは、DSM-11 の動作をシミュレートし、両方の言語モードで機能します。
BreakMode(0) を発行すると、引数なしの Break コマンド処理が無効になります (ZBreak OFF と類似しています)。BreakMode(1) を発行すると、引数なしの Break コマンド処理が有効になります (ZBreak ON と類似しています)。引数のない BreakMode() を発行すると、スイッチの現在の状態が変更されずに返されます。
DSM-11 互換モードのエラー処理
エラー・メッセージ
DSM-11 モードでは、$ZERROR 特殊変数で返されるエラー・メッセージに、対応する DSM-11 と同じ綴りが使用されます。
BREAK 2 エラー処理
DSM-11 モードでは、Caché は DSM-11 バージョン 2 のエラー処理をサポートします。DSM-11 バージョン 2 のエラー処理では、M エラーの発生時は常に、フレーム・スタック全体がクリアされ、エラー処理ルーチンに GoTo コマンドが実行されます。
このエラー処理スタイルを保存するには、BREAK 2 コマンドを使用して、DSM-11 バージョン 2 エラー処理を有効にします。通常の DSM-11 エラー処理に戻すには、BREAK -2 コマンドを発行します。これらのコマンドは、DSM-11 互換モードでのみ実行できます。
DSM-11 互換モードで実行するルーチンが、システム・ユーティリティのような通常の言語モード・ルーチンを呼び出すと、Caché 標準エラー処理がそのルーチンの実行中ずっと適用されます。
$TEXT コメント行
Caché は、コンパイル後の結果に特定のコメント行を挿入できる、二重セミコロンをサポートします。この機能は、$TEXT 関数によってコメント行が参照され、ソース・コードなしにルーチンが配信される場合に必要です。DSM-11 には同様の機能がないため、DSM-11 モードの $TEXT は、ソース・コードを常に使用できる必要があります。
DSM 言語互換性
Caché は、移植された DSM ルーチンを実行する場合、DSM モードで動作します。Caché に移植された DSM ルーチンを実行するために大幅な変更をする必要はありません。このセクションでは、さまざまなコマンドと関数を DSM モードで処理する方法について説明します。DSM 言語モードは、%SYSTEM.ProcessOpens in a new tab クラスの LanguageMode(5)Opens in a new tab メソッドを使用して設定します。
DSM から Caché へのルーチンの移植
Caché は、移植された DSM ルーチンを実行する場合、DSM モードで動作します。DSM から Caché にルーチンを移植するには、DSM %RS ユーティリティを使用して、ネイティブ DSM アプリケーションをテープあるいはディスクに保存します。その後、スタジオ・エディタや %RI ユーティリティを使用して、Caché システムのアプリケーションをリストアします。
%RI ユーティリティと DSM 形式の Restore ユーティリティは、ネイティブ DSM %RS ファイルを認識し、DSM モードのルーチンとしてロード (コンパイルおよび保存) します。
Caché システムで DSM モードのルーチンを実行する場合、以下の点を考慮する必要があります。
-
DSM と Caché ルーチンは、ネームスペース内で共存できます。
-
Caché と DSM ルーチンは、必要に応じてお互いを呼び出すことができます。Caché は、ルーチンごとに、実行ルーチンで保存された言語モードに対応します。
-
Caché は、DSM-11 言語の実行時サポートのみを提供します。DSM 開発環境はサポートしません。DSM ライブラリ・ユーティリティや OpenVMS に関連する外部ルーチン ($ZCALL) への呼び出しもサポートしません。
-
ZLoad コマンドでルーチンをロードすると、Caché は、言語モードをそのルーチンのモードに合うように設定します。
-
LanguageMode()Opens in a new tab メソッドで言語モードを変更し、ロードしたルーチンと言語モードが一致しないまま ZInsert を実行しようとすると、<LANGUAGE MISMATCH> エラー・メッセージが表示されます。
現在の %RI と ^%rde は、DSM モードのルーチン内の一部の DSM 言語機能で <SYNTAX> エラーを報告します。つまり、その構文は、有効な ObjectScript 構文ではありません。しかし、DSM 互換モードで正しく認識された DSM 言語機能の場合、そのコードは正しく解釈されます。
DSM 言語モードでのプログラミング
Caché では、Close、Open、Use、Job コマンドは、コロン (:) で区切られた位置ベースのパラメータ値を持ちます。次に例を示します。
Use terminal:[([margin]:[protocols]:[terminators])]:"mnespace"
一方、DSM モードの Close、Open、Use、ZUse、Job コマンドはキーワード構文を持っており、パラメータ値の意味が位置ではなくキーワードで決まります。次に例を示します。
Use terminal:[keylist]:"mnespace"
keylist は以下のいずれかになります。
keyword [=value](keyword[=value][,...])
このいずれも、指定されたデバイスに処理情報を伝えます。例えば、Read コマンドの入力文字を大文字に変換する場合、Caché のネイティブ言語モードでは、以下の構文を使用します。
Use 0pen:(:"+U")
DSM モードでは、以下の構文を使用します。
Use 0pen:CONVERT
現在の DSM 言語モードは、ターミナルのデバイス・タイプごとに特定のキーワードをサポートします。以下のキーワードは認識されますが、Open コマンドの空命令として処理されます。
BLOCKSIZE=n
Open コマンドでシーケンシャル・ファイルに適用される場合 (Windows プラットフォームのみ)、以下のキーワードは認識され、機能します。
-
DELETE
-
NEWVERSION
-
READONLY
-
RECORDSIZE
DISCONNECT キーワードは、Use コマンドによりシーケンシャル・ファイルに適用されるときに、認識され機能します。
以下のキーワードは、Close コマンドによりシーケンシャル・ファイルに適用されるときに、認識され機能します。
-
DELETE
-
NODELETE
-
RENAME
前述のキーワード使用の詳細は、DSM ドキュメントを参照してください。
以下の例外は、DSM 言語モードの Caché に適用されます。
-
新規作成したファイルを閉じる場合、そこに何も書き込まれていなければ、DSM はファイルを削除します。しかし、DSM 言語モードの CachéClose コマンドは、ファイルを削除しません。
-
シーケンシャル・ファイルの Open コマンドで指定した RECORDSIZE キーワードは、現在 Read 処理のみに影響します。
-
Close コマンドで RENAME キーワードが指定されたときに、閉じるファイルが削除の対象としてマーキングされている場合、DSM はファイルを削除してから、%DSM-E-RENAMERR エラーを生成します。しかし、DSM 言語モードの CachéClose コマンドは、ファイル名を変更し、そのファイルを削除しません。
-
RENAME と DELETE キーワードを Close コマンドで指定すると、DSM はファイルを削除してから、%DSM-E-RENAMERR エラーを生成します。しかし、DSM 言語モードの CachéClose コマンドは、ファイルを削除します。
以下のキーワードは、Use コマンドで認識され、機能します。
-
CENABLE
-
CLEARSRCR
-
CONVERT
-
CURSOR
-
DEVTYPE=s
-
DOWNSCRO
-
ECHO
-
ERASELIN
-
LINE
-
NOCENABL
-
NOCONVERT
-
NOCURSOR
-
NOECHO
-
NOLINE
-
NOREADPFLU
-
NOTYPE
-
READPFLU
-
TERMINATOR=s
-
TYPE
-
UPSCROLL
-
WIDTH=n
-
X=n
-
Y=n
BREAK 0 は、CENABLE と NOCENABL が意図する動作を実行できるようにアクティブにする必要があります。BREAK 0 は、アプリケーション・モードで既定です。しかし、BREAK 1 はプログラマ・モードで既定です。プログラマ・モード・プロンプトが表示されるたびに暗黙に宣言されます。したがって、BREAK 0 をプログラマ・モード・プロンプトが表示されるたびに再入力し、CENABLE と NOCENABL キーワードをインタラクティブにテストする必要があります。
CLEARSCR、DOWNSCRO、ERASELIN、UPSCROLL、X=n、Y=n キーワードを使用すると、VT100 エスケープ・シーケンスを指定したデバイスに記述できます。また、そのシーケンスを認識するデバイスでのみ機能します。指定したデバイスがコンソール・ウィンドウの場合、システムは、エスケープ・シーケンスを、必要な結果を実行するウィンドウ操作に自動的に変換します。
LINE と NOLINE キーワードは、Caché の行呼び出しモードを有効または無効にします。行呼び出しモードは、最初既定で無効になっています。%SYSTEM.ProcessOpens in a new tab クラスの LineRecall()Opens in a new tab メソッドを使用して、プロセスの行呼び出しモードを既定で有効にします。
DSM では、TYPE と NOTYPE キーワードは、/TYPEAHEAD コマンド行修飾子が DSM プロセスで有効になっていない限り作用しません。
DEC OSF/1 AXP の DSM も同様ですが、NOREADPFLU キーワードは、/TYPEAHEAD コマンド修飾子と同じ動作を動的に実現するために使用できます。また、READPFLU は /TYPEAHEAD の振る舞いを無効にします。
したがって、アプリケーション起動時にNOREADPFLU を主デバイスに指定して、DSM /TYPEAHEAD 修飾子と同様の振る舞いを実現できるように、NOREADPFLU と READPFLU は DSM 互換モードで提供されます。
DSM 互換モードは、以下のキーワードを認識しますが、これらを Use の空命令として扱います。
-
ESCAPE (既定で有効)
-
FLUSH
-
NOPACK
-
PACK
DSM 言語モードは、Job コマンドのいくつかのキーワードもサポートします。以下のキーワードは、認識され機能します。
-
DATA
-
INPUT
-
OUTPUT
以下のキーワードは認識されますが、Job コマンドの空命令として処理されます。
-
DETACHED (DSM システムでも空命令)
-
ERROR
-
NAME
-
PRIORITY
-
OPTIONS
現時点の DSM 互換モードでは、(標準に従って) 実装者固有の引数を取る BREAK および VIEW コマンドを除くすべての標準 M コマンドが処理されます。
デバイス制御ニーモニック・スペースとデバイス制御ニーモニック
Caché の DSM 互換モードは、ニーモニック・スペースとデバイス制御ニーモニックを使用する大半の DSM アプリケーションへの移行パスを提供します。
移行できるアプリケーションで、そのアプリケーションのコード自体を変更する必要はありません。多くの場合、ルーチン名の変更は必要ですが、ルーチン・エントリ・ポイントのブリッジのみ必要な場合もあります。
デバイス制御ニーモニックは、デバイス制御を実行する WRITE / 形式文字と READ / 形式文字で使用されるキーワードです。例えば、X3.64 対応のニーモニック・スペースは、コマンドはカーソル位置を指定します。
Write /CUP(1,1)
これは、カーソル位置を指定します。DSM では、ユーザ定義のニーモニック・スペース・テーブルは、実行時に呼び出して処理するルーチン・エントリ・ポイントにニーモニック・スペースのキーワードを関連付けます。DSM アプリケーションは、Open や Use コマンドのニーモニック・スペース名を指定して、ニーモニック・スペース・テーブルとそこで定義したキーワードをデバイスに関連付けます。
Caché は、ニーモニック・スペースのデバイス制御ニーモニックを M ルーチン・エントリ・ポイントにマップするために、テーブルを使用しません。その代わりに、エントリ・ポイント・ラベル名を制御ニーモニックから推測し (制御ニーモニックをラベル名にするために、大文字に変換します)、エントリ・ポイント・ルーチン名としてデバイスに指定された現在のニーモニック・スペース名を使用します。
例えば以下のシーケンスでは、WRITE / コマンドの結果、Caché は M ルーチン・エントリ・ポイント CUP^%X364 にコールバックします。
Set DevZero=0
Use DevZero::"^%X364" Write /CUP(1,1)
ユーザ定義のニーモニック・スペース・テーブルが、制御ニーモニックに対し文字変換を指定している場合、アプリケーションを更新し、Caché の DSM 互換モードで実行できます。
さらに、すべての制御ニーモニックが既に、ObjectScript ルーチン・エントリ・ポイントに関連するすべてのラベル名と一致する場合、必要なすべてのラベルが、1 つのルーチン内に存在する必要があります。制御ニーモニックが ObjectScript ルーチン・エントリ・ポイントに関連するラベル名と一致しない場合、ラベル名が制御ニーモニックに一致するエントリ・ポイントの “ブリッジ” を追加できます。エントリ・ポイント・ブリッジは、任意の予測されるパラメータを渡して、元のターゲットの ObjectScript ルーチン・エントリ・ポイントを呼び出す必要があるだけです。
元のエントリ・ポイントのラベル名を変更することでも、同じ効果が得られます。ブリッジ・エントリ・ポイント・ラベルあるいは元のエントリ・ポイント・ラベルのいずれも、1 つの ObjectScript ルーチン内に存在する必要があります。
DSM 互換モードでは、Caché は以下のいずれかの方法で、制御ニーモニック・コールバック・ラベルを含む ObjectScript ルーチン名を決定します。指定のニーモニック・スペース名が “^” 文字で始まる場合、Caché は、ニーモニック・スペース名が ObjectScript ルーチン名であると想定します。それ以外の場合、ニーモニック・スペース名の先頭に “^%Z” を追加して、ObjectScript ルーチン名とします。DMS アプリケーション・コードを更新する (通常、これはお勧めしません) 場合を除き、後者の方法を使用してください。
以下のシーケンスは後者の例です。
Set DevZero=0
Use DevZero::"ZTERM" Write /CUP(1,1)
このシーケンスでは、Caché は Write / コマンドの結果、ObjectScript ルーチン・エントリ・ポイント CUP^%ZZTERM にコールバックを実行します。
制御ニーモニック・コールバック・エントリ・ポイントを含む ObjectScript ルーチン名は、この規則に従うために変更できます。
互換モードで実行される他の DSM 言語機能
以下の DSM Z コマンドは、認識され機能します。
-
ZAllocate
-
ZDeallocate
-
ZInsert
-
ZLoad
-
ZPrint
-
ZRemove
-
ZSave
-
ZTrap (エラーを生成しますが、DSM 型のエラー処理とエラー・メッセージは、現在実装されていません)
-
ZWrite (引数なしの形式のみ実装されています)
DSM ZUse コマンドは認識されますが、空命令として処理されます。ZUse キーワードは現在実装されていません。
以下の DSM Z 関数は、認識され機能します。
-
$ZDate
-
$ZNext
-
$ZOrder
-
$ZPrevious
-
$ZSearch (Windows の Caché でのみ機能します)
-
$ZSort (添え字のないグローバル $ZSORT 引数は、現在実装されていません)
Z 特殊変数に関連する以下の DSM 入出力は、ターミナル・デバイスに認識され機能します。
以下の DSM Z 特殊変数は、認識され機能します。
-
$ECODE
-
$ESTACK
-
$ETRAP
-
$QUIT
-
$STACK
-
$ZDEVTYPE
-
$ZERROR (エラー情報を含みますが、DSM 型のエラー処理とエラー・メッセージは、現在実装されていません)
-
$ZJOB
-
$ZNAME
-
$ZREFERENCE
-
$ZTRAP
-
$ZVERSION
以下の DSM ライブラリ外部関数 ($ZCALLs) は、認識され機能します。
数学関数:
-
%ARCCOS
-
%ARCSIN
-
%ARCCTAN
-
%BOOLEAN
-
%COS
-
%EXP
-
%LOG
-
%LOG10
-
%MAX
-
%MIN
-
%POWER
-
%SIN
-
%SQRT
-
%TAN
これらの関数に返される値の精度は、DSM システムと異なる場合があります。
テキスト操作:
-
%TRANSLATE
-
%UPCASE
-
%UPCASEQ
日時:
-
%CDATASC
-
%CDATNUM
-
%CTIMASC
-
%CTIMNUM
その他:
-
%LPC
VIEW コマンドと $VIEW 関数
VIEW コマンドと $VIEW 関数では、実装によって異なるディスクやメモリ構造への知識が必要となるので、Caché は DSM 互換モードで VIEW コマンドと $VIEW 関数をサポートしていません。
データベース変換
ユーティリティ %dsmcvt は、DSM データベースを Caché データベースに変換します。これを実行すると、%dsmcvt は、変換する DSM データベースを含むディレクトリを指定するよう要求します。データベースは、現在のネームスペースにある Caché データベースに変換されます。
DSM-J 言語互換性
DSM-J 言語モードは、%SYSTEM.ProcessOpens in a new tab クラスの LanguageMode(6)Opens in a new tab メソッドを使用して設定します。
DSM-J 言語モードを使用する Caché は、Use コマンドでシーケンシャル・ファイルが適用される場合に、以下のキーワードをサポートします。
-
KAN[JIDEVICE]
-
NOKAN[JIDEVICE]
-
KCODE=conversion_specification
-
KON[ESCAPE]=escape_sequence
-
KOFF[ESCAPE]=escape_sequence
-
KPITCH=pitch_value
-
KDIR[INPUT]
-
NOKDIR[INPUT]
-
KIN=switch (switch= “ON” あるいは “OFF”)
上述のコマンド・キーワードの詳細は、DSM-J ドキュメントを参照してください。
DTM 言語互換性
Caché は、移植された DTM ルーチンを実行する場合、DTM モードで動作します。このセクションは、DTM モードで動作するコマンドと関数について、また、その動作方法についても説明しています。DTM 言語モードは、%SYSTEM.ProcessOpens in a new tab クラスの LanguageMode(2)Opens in a new tab メソッドを使用して設定します。
DTM 互換モードのプログラミング
通常、DTM 互換モードでプログラミングする場合、ObjectScript は、ネイティブ Open M [DTM] システムであるかのように動作します。ルーチン行構造は DTM 規則に従うため、ルーチンは DTM 固有の言語要素を使用できます。
しかし、DTM モードを使用する際に特に注意を必要とする点がいくつかあります。
演算子
DTM 互換モードでは、DTM 固有の演算子を使用できます。以下はその演算子です。
<> | レコード形成演算子です。レコード形成演算子は、角括弧内の文字を含む文字列を生成します。例:$ZPIECE が “^” と同等で、Set x = <a,b> を発行した場合、x は “a_"^"_b” と同等になります。 |
.n | フィールド演算子です。フィールド演算子は、別の文字列の n 番目に一致する文字列を設定します。例:s が “s12^ab” の場合、s.2 は “ab” と等しくなります。 |
JOB コマンド
Open M [DTM] 互換モードの JOB コマンドは、ネイティブ Caché システム上で実行する JOB コマンドのように動作します。つまり、JOB コマンド・パラメータの扱いが大きく異なっています。Caché のプロセス・パラメータはサポートされますが、DTM のプロセス・パラメータはサポートされません。
Caché では、JOB コマンドの 4 つのプロセス・パラメータが位置の値を示します。これらのパラメータには以下のものがあります。
(default:switch:principal-input:principal-output)
default | ジョブ起動プロセスの既定ネームスペース |
switch | Caché が現在のシンボル・テーブルを新規プロセスに渡すかどうかを指定する整数ビット・マスク値、およびその他の情報 |
principal-input | プロセスの主入力デバイス |
principal-output | プロセスの主出力デバイス |
パラメータは位置を示すため、この順番で指定する必要があります。指定するパラメータに先行するパラメータを省略する場合、その代わりとしてコロンを置く必要があります。詳細は、"ObjectScript ランゲージ・リファレンス" の JOB コマンドを参照してください。
DTM のプロセス・パラメータは、値を 10 個まで設定できます。形式は以下のとおりです。
keyword=value
keyword | 特定のプロセス・パラメータ名 |
value | プロセス・パラメータに割り当てる値 |
使用できるキーワードは以下のとおりです。
lvmem | ジョブ起動プロセスのシンボル・テーブルに割り当てるメモリ量 (バイト単位) |
lvmin | シンボル・テーブルに割り当てる最小メモリ量 (バイト単位) |
lvmax | シンボル・テーブルに割り当てる最大メモリ量 (バイト単位) |
name | ジョブに割り当てる名前 |
node | ジョブを実行するネットワーク・ノード名 |
nspace | ジョブを実行するネームスペース |
pdev | ジョブの主デバイス |
priority | ジョブの優先順位 (0 から 9) |
strstk | バイト単位の文字列スタック・サイズ |
sysstk | バイト単位のシステム・スタック・サイズ |
キーワードであるため、パラメータは位置を示しません。複数のプロセス・パラメータを指定するには、以下のようにコロンで区切られたリストを使用します。
(keyword=value[:keyword=value]...)
指定しないパラメータには、コロンを使用する必要はありません。
入出力コマンド
DTM 互換モードの場合、入出力コマンド (Open、Use、Close) は、DTM 引数構文を使用します。通常、Caché 互換モードの場合、以下のガイドラインを使用してください。
-
開くデバイス、使用するデバイス、閉じるデバイスを正の整数値として指定できます。値は、DTM .DEV ファイルに割り当てる必要があります。デバイス・ニーモニックは使用できません。
-
Open と Use で使用するパラメータはデバイス固有です。keyword=value 形式で、それぞれのパラメータを指定します。いくつかのパラメータのみ指定し、残りは既定を割り当てるには、それぞれの既定の位置にコロンを置きます。最後に指定されたパラメータの後ろのコロンは省略できます。先頭のコロンは必要です。パラメータがない場合の後続のコロンは不要です。この例では、Open は、開いているデバイスで 5 番目以外のすべてのパラメータに、既定デバイス・パラメータを割り当てます。
Open DEV(::::param5)
-
入出力コマンドで timeout を使用できます。整数、10 進数値、または整数や 10 進数に評価される式で、タイムアウトを指定できます。
-
DTM デバイスで制御ニーモニックは使用できません。
-
Close コマンドでデバイス・パラメータを使用できません。DTM は、Close デバイス・パラメータを認識しません。
View と $View
DTM 互換モードでは、View と $View は DTM システムと同様に動作します。
DSM-11 互換モード
プロセスが DTM 互換モードで処理されている場合、DTM の DSM-11 互換モードにプロセスを設定できます。その後、DSM-11 ルーチンをロードし、実行できます。ZZCOMPAT コマンドを使用して、DSM-11 モードと Open M [DTM] 互換モードの切り替えができます。$ZZCOMPAT 特殊変数を使用して、プロセスが設定されているモードを識別できます。
構造化システム変数
Open M [DTM] 互換モードでは、構造化システム変数を使用できません。
コマンド、関数、および特殊変数
以下のセクションでは、DTM 互換モードで使用可能なコマンド、関数、特殊変数を一覧します。
コマンド
以下の標準 M コマンドは、Caché モードと DTM 互換性モードでまったく同様に動作します。
-
Do
-
Else
-
For
-
Halt
-
If
-
Kill
-
Lock
-
Merge
-
New
-
Print
-
Quit
-
Write
-
Xecute
以下の標準 M コマンドは、DTM 互換モードでは使用できません。
-
TCommit
-
TRollback
-
TStart
以下の拡張 M コマンドは、Caché モードと DTM 互換モードで、まったく同様に動作します。
-
ZInsert
-
ZNSpace
-
ZRemove
-
ZSync
-
ZZDump
以下の拡張 M コマンドは、Open M [DTM] 互換モードでは使用できません。
-
ZTrap
関数
以下の標準 M 関数は、Caché モードや DTM 互換モードと同様に動作します。
-
$ASCII
-
$Char
-
$Data
-
$Find
-
$FNumber
-
$Get
-
$Justify
-
$Length
-
$Name
-
$Next
-
$Order
-
$Piece
-
$QLength
-
$QSubscript
-
$Query
-
$Random
-
$Reverse
-
$Select
-
$Translate
以下の拡張 M 関数は、Caché モードや DTM 互換モードと同様に動作します。
-
$ZBitAnd
-
$ZBitCount
-
$ZBitFind
-
$ZBitLen
-
$ZBitNot
-
$ZBitOr
-
$ZBitSet
-
$ZBitStr
-
$ZBitXOr
以下の 拡張関数は、DTM 互換モードでは使用できません。
-
$ZBoolean
-
$ZF
-
$ZHex
-
$ZIncr
-
$ZNext
-
$ZSearch
-
$ZSort
-
$ZTime
-
$ZU
以下の DTM モードの数学関数は、Caché モードと DTM 互換モードでまったく同様に動作します。
-
$ZAbs
-
$ZArcCos
-
$ZArcSin
-
$ZArcTan
-
$ZCos
-
$ZCot
-
$ZCSC
-
$ZExp
-
$ZLn
-
$ZLog
-
$ZPower
-
$ZSec
-
$ZSin
-
$ZSqr
-
$ZTan
これらは、通常のエラー・ハンドラを設定し、%math ユーティリティ・エントリ・ポイントを呼び出します。通常のエラー・ハンドラは、レポートされたエラーを <ILLEGAL VALUE> エラーにし、呼び出すルーチンに返します。
特殊変数
以下の標準 M 特殊変数は、DTM 互換モードでは使用できません。
-
$ECODE
-
$ESTACK
-
$ETRAP
-
$QUIT
-
$STACK
以下の拡張 M 特殊変数は、Caché モードと DTM 互換モードでまったく同様に動作します。
データベース変換
ユーティリティ %DTMCVT は、DTM データベースを Caché データベースに変換します。これを実行すると、%DTMCVT は、変換する DTM データベースを含むディレクトリを指定するように要求します。データベースは、現在のネームスペースで Caché データベースに変換されます。
MSM 言語互換性
Caché は、移植された MSM ルーチンを実行する場合、MSM モードで動作します。このセクションは、MSM モードで動作するコマンドと関数について、また、その動作方法についても説明しています。MSM 言語モードは、%SYSTEM.ProcessOpens in a new tab クラスの LanguageMode(8)Opens in a new tab メソッドを使用して設定します。
言語モードは、各ルーチンごとに個別に設定されます。ある言語モードでコンパイルされたルーチンは、別のモードでコンパイルされたルーチンを呼び出したり、呼び出されたりします。したがって、例えば MSM モードのルーチンが DTM モードのルーチンを呼び出し、この DTM ルーチンが別の MSM モードのルーチンを呼び出すことができます。
MSM アプリケーションを正しい言語モードでコンパイルすると、システムで使用するアプリケーションや言語モードに関係なく、任意の Caché システムにインストールして、実行できます。
言語モード処理の大半は、実行時ではなくコンパイル時に行います。その結果、MSM のような言語モードを使用しても、通常は Caché のネイティブ言語モードと同様の高性能が実現されます。
コマンド、関数、および特殊変数
以下のセクションは、MSM 互換モードで使用可能なコマンド、関数、特殊変数を一覧します。
コマンド
以下の標準 M コマンドは、Caché モードと MSM 互換性モードでまったく同様に動作します。
-
Close
-
Job
-
Open
-
Use
以下の拡張 M コマンドは、Caché モードと MSM 互換モードでまったく同様に動作します。
-
ZAllocate
-
ZBreak
-
ZDeallocate
-
ZPrint
-
ZTrap
-
ZWrite
関数
以下の拡張 M 関数は、Caché モードと MSM 互換モードでまったく同様に動作します。
-
$ZNext
-
$ZOrder
-
$ZPrevious
-
$ZSort
上記の従来の関数は、Caché では廃止されています。
特殊変数
以下の拡張 M 特殊変数は、Caché モードと MSM 互換モードでまったく同様に動作します。
MSM の $ZC 特殊変数と Caché の $ZC ($ZCHILD の省略形) とでは意味がまったく異なります。
データベース変換
ユーティリティ %MSMCVT は、MSM データベースを Caché データベースに変換します。これを実行すると、%MSMCVT は、変換する MSM データベースを含むディレクトリを指定するよう要求します。データベースは、現在のネームスペースで Caché データベースに変換されます。