入出力デバイスとコマンド
この章では、Caché アプリケーションと Caché プロンプトにおける、入出力デバイスの使用方法を説明します。入出力デバイスの章では、ユーザのデバイスは適切にセットアップが完了しているものとして説明します。特定のデバイスに関する追加情報には、このドキュメントの他の章を参照してください。
入出力コマンドの概要
入出力コマンドにより、デバイスの所有、使用、読み取り、書き込み、クローズができます。入出力処理をデバイスに指示するには、以下のコマンドを最初に発行します。
-
デバイスが主デバイスではない場合、OPEN コマンドを発行し、所有権を構築します。
-
USE コマンドを発行して、デバイスを現在のデバイスにします。
-
次に、READ と WRITE コマンドを発行して、そのデバイスからの読み取り、デバイスへの書き込みを行います。
-
CLOSE コマンドを発行してデバイスの所有権を解放し、他のプロセスがそのデバイスを使用できるようにします。
以下のセクションでは、Caché 入出力コマンドの概要を説明します。
一般的な入出力構文
以下の一般構文は、ObjectScript で入出力コマンド・キーワードをサポートする入出力コマンドを適用しています。
OPEN device:paramlist:timeout:"mnespace" USE device:paramlist:"mnespace" CLOSE device:paramlist
paramlist は、単一のパラメータ、または括弧で囲まれコロンで区切られたパラメータのリストのいずれかです。
parameter (parameter:parameter[:...])
parameter は、位置パラメータあるいはキーワード・パラメータのいずれかです。キーワード・パラメータは以下の構文になります。
/keyword[=value]
最初にスラッシュがあるものがキーワード・パラメータで、そのスラッシュの有無により位置パラメータ値と区別します。位置パラメータ値は、コロンで区切られたリストからその位置を取得します。キーワード・パラメータ値は、指定したキーワードから取得します。
位置パラメータとキーワード・パラメータのどちらも、同じ paramlist で指定できます。例えば、以下の例は位置パラメータとキーワード・パラメータを混在して使用し、JIS の入出力変換による書き込みモードあるいはシーケンシャル・モードで test.dat というファイルを新規に開きます。
OPEN "test.dat":("NWS":/IOTABLE="JIS")
OPEN コマンド
OPEN コマンドは、指定されたデバイスの所有権を構築し、入出力チャネルを開きます。この所有権は、CLOSE コマンドを発行するか、プロセスが終了するか、物理的処理がデバイスを閉じるまで保持されます。磁気テープ・ドライブなどの物理入出力デバイスや TCP 接続などのプロセス間通信では、この所有権により、他のプロセスがデバイスにアクセスできないようにしています。シーケンシャル・ファイルなどの論理入出力デバイスでは、この所有権が設定されていても、共有アクセスの形式で他のプロセスからデバイスにアクセスできることがあります。同じシーケンシャル・ファイルを複数のプロセスで開けるかどうかは、プラットフォームに依存しています。LOCK コマンドを使用してシーケンシャル・ファイルへのアクセスを制限してください。
構文
OPEN device{:{(parameters)}{:{timeout}{:"mnespace"}}}
引数 | 説明 |
---|---|
device | デバイス名、ID 番号、またはニーモニックです。device の最大長は 256 文字です。 |
parameters | オプション — デバイスに必要な追加情報を指定する 1 つまたは複数のパラメータです。このパラメータのリストは括弧で囲まれ、リスト内のパラメータはコロンで区切られます。個別のパラメータは、"プロセス間通信"、"磁気テープ入出力"、"シーケンシャル・ファイルの入出力"、"ターミナル入出力" の章のテーブルにリストされています。 |
timeout | オプション — 要求の成功を待機する時間を指定します。先頭のコロンは必須です。timeout は、必ず整数値または式で指定します。timeout がゼロ (0) の場合、OPEN はファイルを 1 回だけ開こうとします。実行が失敗した場合、OPEN も即座に失敗します。試行に成功した場合は、ファイルが無事に開きます。timeout を設定していない場合、Caché は OPEN が成功するまで、またはプロセスが手動で終了されるまで、デバイスを開く操作を繰り返します。 |
mnespace | オプション — 引用符付き文字列として指定された、このデバイスで使用する制御ニーモニックを含むニーモニック・スペース名です。このデバイスへ入出力を指示するときに、これらの制御ニーモニックを WRITE /mnemonic コマンドで使用できます。 |
詳細は、"Caché ObjectScript リファレンス" の "OPEN" コマンドを参照してください。
例
以下の例は、さまざまなプラットフォームで OPEN コマンドを使用する方法を示しています。このコマンドは、コマンド行での入力やルーチンでの使用が可能です。ルーチンで使用する場合、プラットフォーム固有のアイテムを変数で置き換える必要があることもあります。
Windows システムでの OPEN の使用例
以下のコマンドは、Windows システムからターミナル・サーバに、外部の Telnet を接続します。
OPEN "|TNT|node:port"
node はノード名、port はサーバ上の IP ポートです。
以下のコマンドは、既存の Windows ファイルとの間に入出力チャネルを開きます。
OPEN "c:\abc\test.out":"WS"
UNIX® システムでの OPEN の使用例
以下のコマンドは、UNIX® ターミナル・デバイス /dev/tty06 への入出力チャネルを開きます。
OPEN "/dev/tty06/"
USE コマンド
このコマンドは、特定のデバイスを現在のデバイスにし、そのデバイスに特殊変数 $IO を設定します。主デバイス以外のデバイスに USE を使用するには、最初に OPEN コマンドを発行する必要があります。このコマンドを発行しない場合、<NOTOPEN> エラーが返されます。引数は、OPEN コマンドと同じ意味を持ちます。
構文
USE device:(args):"mnespace"
引数 | 説明 |
---|---|
device | デバイス名、ID 番号、またはエイリアスです。device の最大長は 256 文字です。 |
args | オプション — 一部のデバイスに必要な追加情報です。これは、"プロセス間通信"、"シーケンシャル・ファイルの入出力"、"ターミナル入出力" の章のコマンド・キーワードのテーブルにリストされています。 |
mnespace | オプション — このデバイスへ入出力を指示するときに、WRITE /mnemonic コマンドで使用できる制御ニーモニックの定義を含む Caché ルーチン名です。 |
詳細は、"Caché ObjectScript リファレンス" の "USE" コマンドを参照してください。
例
以下の例は、さまざまなプラットフォームで USE コマンドを使用する方法を示しています。このコマンドは、コマンド行での入力やルーチンでの使用が可能です。ルーチンで使用する場合、プラットフォーム固有のアイテムを変数と置換することもできます。
Windows システムでの USE の使用例
次の Windows の例では、TCP 経由でリモート・ホスト “larry” 上の時刻サーバに接続するために使用するコマンドを示しています。このコマンドではサービス名 daytime を使用しますが、これはローカル・システムでポート番号に解決されます。USE コマンドは、OPEN C モードを PSTE モードに置き換え、すべてのユーザ・ターミネータをオフにします。
OPEN "|TCP|4":("larry":"daytime":"C")
USE "|TCP|4":(::"PSTE")
UNIX® システムでの USE の使用例
以下の UNIX® コマンドの例では、“/dev/tty06” デバイスとの間に入出力チャネルを開き、X364 ターミナル・ニーモニックで WRITE/mnemonic を使用するオプションを指定して、このデバイスを現在のデバイスに設定します。
OPEN "/dev/tty06"
USE "/dev/tty06"::"^%x364"
READ コマンド
このコマンドは、現在のデバイスからデータを読み取ります。デバイスによっては、アスタリスクで始まる引数に ASCII の数値情報を返すものがあります。その他のデバイスでは、この引数は制御関数を示します。
構文
READ variable:timeout
詳細は、"Caché ObjectScript リファレンス" の "READ" コマンドを参照してください。
WRITE コマンド
このコマンドは、現在のデバイスにデータを書き込みます。デバイスによっては、最初にアスタリスクが付いた引数を指定すると、ASCII の数値を使用して ASCII 文字を書き込むことができるものがあります。その他のデバイスには、この引数は制御関数を示します。デバイスによっては、先頭に # 文字が付いた引数で、指定された文字を書き込む回数を示すものもあります。
WRITE /mnemonic 構文により、ニーモニック空間の Caché コードに定義されたニーモニック・デバイスを制御できます。ニーモニック空間は、Caché ルーチンであり、OPEN コマンドまたは USE コマンドでアクティブにするか、管理ポータルを使用してデバイスの既定として構成する必要があります。ニーモニック空間を定義して、アクティブにする方法については、"既定のニーモニック空間の定義" を参照してください。
構文
WRITE variable
詳細は、"Caché ObjectScript リファレンス" の "WRITE" コマンドを参照してください。
例
以下のコマンドを発行し、事前定義された ^%X364 ニーモニック空間を使用して、ターミナル画面の 2 行目の 1 列目にカーソルを移動します。
WRITE /CUP(1,2)
CLOSE コマンド
CLOSE コマンドは、指定されたデバイスの所有権を解放します。CLOSE は、OPEN コマンドと逆の動作を実行します。
構文
CLOSE device[:params]
引数 | 説明 |
---|---|
device | デバイス名、ID 番号、またはニーモニックです。 |
params |
パラメータ “K” は、オペレーティング・システム・レベルではデバイスを閉じず、Caché レベルで閉じます。 K パラメータは、Windows システムでは何も動作しません。ファイルは、オペレーティング・システム・レベルで閉じます。 |
CLOSE コマンドを主デバイスに発行すると、主デバイスは、ユーザがログオフするまでプロセスに割り当てられたままになります。
他のいくつかの条件は、CLOSE の振る舞いに影響します。
-
何らかの原因によりデバイスへの出力が停止した場合、Caché は、そのデバイスへの出力を完了できないことがあります。この場合、デバイスを閉じたり、停止したりできないことがあります。例えば、ターミナルがオペレーティング・システムに Ctrl-S を送信し、ターミナルへの出力を停止するよう命令した場合、Ctrl-Q を押して、ターミナルへの出力を再開する必要があります。
-
現在のデバイスを閉じると、CLOSE は、システム変数 $IO の値を主デバイスの値に変更します。CLOSE コマンドは、デバイスへのすべての出力が完了した後にのみ、現在のデバイスの所有権を解放します。
-
プロセスが停止すると、Caché で作業中にそのプロセスが開いたすべてのデバイスが自動的に閉じます。
何らかの原因によりデバイスへの出力が停止した場合、Caché がそのデバイスへの出力を完了できないことがあります。この場合、デバイスを閉じたり、停止したりできないことがあります。
詳細は、"Caché ObjectScript リファレンス" の "CLOSE" コマンドを参照してください。
入出力デバイスの指定
Caché アプリケーションを開発したり、Caché プログラマ・プロンプトで入出力デバイスを動かすときに、入出力デバイスを指定するには以下の 2 つの方法があります。
-
%IS ユーティリティを呼び出すと、%IS グローバルで定義されたニーモニックを使用して、デバイスを指定できます。
-
Caché デバイス番号、あるいはデバイスのオペレーティング・システムのファイル指定を使用して、入出力コマンドの OPEN、USE、CLOSE を発行します。
ユーザによるデバイスの指定
%IS は、文字ベース・アプリケーションの汎用的なデバイス選択ユーティリティです。組み込みの %IS ユーティリティを使用すると、入出力処理の対象となるデバイスをユーザが選択できます。デバイスを選択すると常に、アプリケーション・プログラムは %IS ユーティリティを呼び出す必要があります。このユーティリティにより、ユーザは使用するデバイスと、適切な OPEN コマンド・パラメータを指定できます。また、選択済みデバイスを開いて、呼び出しプログラムにデバイス固有の情報を返します。ユーザは、^%IS グローバルで定義されたニーモニックを入力します。%IS は、管理ポータルで設定された IO 構成の既定値に依存します。
この章では、以下の項目について説明します。
%IS の動作
デバイス・プロンプト
%IS ユーティリティを呼び出すと、Caché はデバイス名を要求します。以下のいずれかの方法で入力します。
-
デバイス名あるいは ID 番号を入力します。
-
デバイスのニーモニックを入力します。
-
現在のデバイスを選択するには、Enter キーを押します。
%IS は以下のように応答します。
-
デバイスのニーモニックを入力すると、%IS は、^%IS グローバル内で対応するデバイスを見つけて開きます。
-
デバイス名を入力した場合、%IS は、そのデバイスに OPEN コマンドを発行します。
-
デバイスが Caché デバイス ID の場合、%IS は、番号が実際のデバイス番号に再度マップされたかどうか、デバイス・テーブルをチェックします。その後、デバイスに OPEN を発行します。
代替デバイスの使用についての情報は、"%IS ニーモニック" のセクションの “代替デバイス” を参照してください。
その他の質問
ターミナルをデバイスとして指定すると、ユーティリティは、既定の right margin を表示します。Enter キーを押してそのマージンを選択するか、異なる値を入力します。指定された right margin を超えてプログラムを記述しようとすると、オペレーティング・システムは、マージンに到達したときに “CR LF” (キャリッジ・リターンと改行) を挿入します。ターミナル以外のデバイスを選択すると、ユーティリティは、別の種類の質問を表示します。
例
以下の例では、Enter を押して、ターミナルを指定します。ユーティリティは、right margin というプロンプトに、既定値の 80 を表示しますが、ユーザは => プロンプトに新規マージン設定として 132 と入力します。
%SYS>DO ^%IS
Device: <RETURN>
Right margin: 80 => 132
%SYS>
以下の例では、ユーザは磁気テープ・ユニット 57 を指定します。ユーティリティは、既定のパラメータ値を提供し、ユーザは、Return キーを押して、それを受け入れます。次に、ユーティリティは、巻き戻しの既定値を提供し、ユーザは、Return キーを押して、テープの終わりでテープを巻き戻さない既定値を受け入れます。
%SYS>DO ^%IS
Device: 57
Parameters? ("auv":0:2048) => <RETURN>
Rewind? No => <RETURN>
%SYS>
%IS は IO 変数を設定し、他の変数値を返す
デバイスを選択すると、%IS は、OPEN コマンドで使用するデバイス名あるいは番号を IO 変数に設定します。%IS は、以下のテーブルの変数値も返します。
変数 | 例 | 説明 |
---|---|---|
%ANS | あり | 一般的なダイアログの応答。 |
IO | 64 | 選択したデバイスのデバイス番号またはデバイス・ニーモニック。 |
IOF | # | 改ページ。WRITE # は、改ページ発行し、$Y を変更します。改ページには WRITE @IOF を使用する必要があります。 |
IOBS | *8 | バックスペース。WRITE $CHAR(8) は、バックスペースを発行し、$X を変更します。WRITE *8 は、バックスペースを発行しますが、$X を変更しません。バックスペースには、WRITE @IOBS を使用する必要があります。 |
IOM | 80 | 右マージン。 |
IOSL | 66 | 画面/ページの長さ。 |
IOT | TRM | デバイス・タイプ。 |
IOST | C-VT220 | デバイス・サブタイプ (この例では VT220)。 |
IOPAR | (auv:0:2048) | 他の OPEN パラメータ。 |
MSYS | M/WNT | システム・タイプ (UNIX®、Windows NT など)。 |
POP | 0 | 0 以外の場合、デバイスが未選択であることを示します。つまり、ユーザが Device: プロンプトで「STOP」と入力します。 |
RMSDF | RW | Read/Write 権限。 |
OPEN パラメータ
OPEN コマンドは、既定として ^%IS グローバルに定義されたデバイス指定を使用します。%IS を使用するとき、他の設定を指定して、現在の設定をオーバーライドできます。
USE コマンドの発行
%IS の実行後、アプリケーションは、%IS で開いたデバイスに USE コマンドを発行する必要があります。%IS を呼び出すたびに値が変更されますが、IO 変数を使用できます。その後、READ や WRITE など、後続の Caché 入出力コマンドは、そのデバイスを参照します。
CLOSE コマンドの発行
ユーザまたはアプリケーション開発者は、%IS ユーティリティで開いたデバイスを閉じる必要があります。
%IS ニーモニック
%IS には、簡単に使用するための機能がいくつかあります。例えば、入出力を自身のターミナルに送信する場合は、“Device” プロンプトで Enter キーを押すだけで済みます。また、既定で組み込まれているニーモニックや、独自に定義した新しいニーモニックも使用できます。
デバイス・ニーモニック
さまざまなデバイスに、ニーモニックを設定すると大変便利です。1 つのデバイスに複数のニーモニックを設定することもあります。複数のニーモニックにより、デバイスごとに異なるデバイスの特性を指定し、使用方法に応じて特性を変更できます。例えば、通常データ入力に使用するターミナルには、ターミナルとしての特性がありますが、補助プリンタ機能が備わっている場合があります。同じデバイスを異なった特性で開くさまざまなニーモニックを割り当てることにより、ハード・コピーが必要なときに、ターミナル/プリンタの組み合わせをプリンタとして使用できます。
デバイスのニーモニックと特性は管理ポータルを使用して構成できます。ニーモニック空間を定義して、アクティブにする方法については、"既定のニーモニック空間の定義" を参照してください。
既定ニーモニック
^%IS グローバルは、インストール時にいくつかの既定ニーモニックで初期化されています。例えば、Caché スプーラには、SPOOL と 2 の既定ニーモニックがあります。「“2”」または「“SPOOL”」を入力すると、Caché スプーラへの出力を送信します。
RT:、LT:、または VT: のいずれかのタイプのデバイスにログインしていて、ユーザのターミナルが現在のデバイスである場合、%IS は “Device” プロンプトへの応答として、0、“”、または IO の値を受け入れます。ターミナル・タイプに適切なテンプレート (RT0:、LT0:、または VT0:) を使用し、ターミナル情報を生成します。
代替デバイス
Device プロンプトに “A” を入力すると、現在のデバイスで定義された代替デバイスに出力されます。代替デバイスは、通常プリンタです。システムで、各デバイスごとに代替デバイスを定義する代わりに、ニーモニック “A” を使用して、プリンタを示すデバイスを生成することができます。その後、ユーザが %IS の “Device” プロンプトに「“A”」を入力すると、そのデバイスに出力されます。
CURRENT^%IS エントリ・ポイント
CURRENT は、%IS ユーティリティの内部的なエントリ・ポイントで、現在のデバイスのデバイス・パラメータの取得に使用できます。この %IS への呼び出しは、さまざまな変数値を返すため、主デバイス用に 1 セットのパラメータ設定と、異なる特性を持つデバイス用に別のパラメータ設定を保持できます。通常、ログイン時にこの内部エントリ・ポイントへの呼び出しを実行します。これによりアプリケーションは、主デバイスのデバイス特性にアクセスできます。CURRENT^%IS は、以下の一覧表示された変数値を返します。
変数 | 例 | 説明 |
---|---|---|
FF | 3 | WRITE @FF は、このデバイスで改ページに使用 |
BS | *8 | WRITE @BS は、バックスペースに使用 |
RM | 80 | 右マージン |
SL | 24 | 画面/ページの長さ |
SUB | C-VT100 | デバイス・サブタイプ |
XY | (以下の例を参照) | カーソル位置を変更するために、$X に DX、$Y に DY を設定 |
例
CURRENT^%IS を呼び出した後、$X および $Y を DX および DY に設定し、カーソル位置を決定します。
DO CURRENT^%IS
WRITE *27,*61,*DY+32,*DX+32
SET $X=DX,$Y=DY
IN^%IS エントリ・ポイント
IN は、%IS の内部エントリ・ポイントです。これは、デバイスから入力のみを行うルーチンで呼び出されます。プリンタなどの出力専用のデバイスを選択できないようにするために、このエントリ・ポイントを使用します。
%SYS> Do IN^%IS
Device: 3
Right margin: 132= <RETURN>
[you can't read from this device]
Device: <RETURN>
Right margin: 80= <RETURN>
%SYS>
OUT^%IS エントリ・ポイント
OUT は、%IS の内部エントリ・ポイントです。これは、デバイスから出力のみを行うルーチンで呼び出されます。磁気テープが書き込み可能かどうかといった条件をチェックするために、このエントリを使用します。
%SYS>DO OUT^%IS
Device: 47
Parameters: ("AUS":0:2048)
Rewind? No= Y
[Tape is write locked]
Device:
%SYS>
スプーリング
Caché のスプーリングは、ユーザのオペレーティング・システムで実行されるスプーリングから独立しています。Caché のスプーリングは、プログラムの出力を直ちに印刷するのではなく、グローバルに自動的に保存する技術です。プリンタにグローバルのコンテンツを送信することで、後で出力を印刷できます。
SPOOL は既定のニーモニックです。スプーリングを指定するには、Device プロンプトで「“SPOOL”」と入力します。その後システムは、スプール・ファイル名とその詳細の入力を要求します。^SPOOL グローバルで使用する名前を指定します (オペレーティング・システム・レベルで設定された個別のファイル名ではありません)。
指定した名前で始まるファイル名が複数存在する場合や同じ名前が存在する場合は、それらがプロンプトに表示され、いずれかを選択するように要求されます。既存ファイルからファイルを選択しない場合、システムでは、指定された名前と詳細を使用して新規ファイルを生成できます。以下はその例です。
Device: SPOOL
Name:TEST
1. 1 TEST 02 Nov 1999 10:17 am First test
2. 2 TEST 02 Nov 1999 10:18 am Second Test
Select one: <Return> not found
Create new document 'TEST'? Yes => yes
Description: Third Test
既存のファイルに続けて追加するために既存のドキュメントを再度選択すると、システムは以下のオプションを提供します。
-
ファイルの最後に追加します。
-
最終ページの最初で再開します。この場合、削除される行が画面に表示されます。
-
1 ページ目 (最初) で再開します。
スプーリングに %IS を呼び出すと、以下のテーブルの変数を %IS に渡すことができます。
変数 | 機能 |
---|---|
IODOC | ドキュメント名 (この変数が存在し、すべての質問を禁止する NULL 文字列以外の場合、この名前の新規ドキュメントが自動的に生成されます)。 |
IODES | フリー・テキストの記述 |
IOPGM | 適切な書式設定でプリンタを調整できるよう、印刷時に呼び出されるルーチン名 |
その他の %IS の特徴
%IS を使用して、以下のタスクも実行できます。
-
Right margin 禁止 — デバイスを選択しても、Right margin を要求しないようにターミナル行を設定できます。既定値は、自動的に設定されます。
-
デバイスの自動選択 — %IS ユーティリティが呼び出されたときに IOP 変数が存在する場合、ユーティリティはデバイスについて問い合わせず、自動的にデバイスを開きます。%IS が正常に動作しない場合、POP 変数に 1 を設定します。
-
事前設定ターミナル — 管理ポータルを使用すると、ユーザにデバイス情報を要求しないデバイスを構成できます。
^%IS グローバルの構造
%IS グローバルは %SYS ネームスペースに保存されます。これには、2 つのサブスクリプトが含まれています。最初のサブスクリプトは、管理ポータルでデバイスに対して設定されたニーモニック名です。システム, 構成, デバイス設定, IO 設定 を選択すると、さまざまなデバイス・タイプの既定のニーモニックを表示できます。2 番目のサブスクリプトは 0 または 1 です。
ノード 0 のコンテンツ
ノード 0 は、デバイス・パネルの位置情報を含みます。
^%IS(mnemonic,0) = Location
以下の例では、ニーモニック名 47 のデバイスは、“磁気テープ” のデバイス・パネル位置を与えられます。
^%IS(47,0) = Magnetic tape
ノード 1 のコンテンツ
ノード 1 は、キャレット (^) で区切られた、デバイス・パネルの他のフィールド値を含みます。
^%IS(mnemonic,1) = Device #^Type^Subtype^Prompt code^not used
^Other Open parameters^Alternate device
以下の例では、ニーモニック名 2 のデバイス (Caché スプーラの既定名) は、デバイス番号が 2、デバイス・タイプが SPL (スプール)、デバイス・サブタイプが PK-DEC です。他の値は、スプール・タイプのデバイスには定義されません。
^%IS(2,1) = 2^SPL^PK-DEC^^^^^
入出力コマンドでのデバイスの指定
入出力コマンド OPEN、USE、CLOSE を使用して、作業中以外のデバイスで入出力操作を実行する場合、入出力デバイスを指定する必要があります。デバイス・タイプにより、以下の 3 つの方法でデバイスを指定できます。
指定する種類 | デバイスの用途 |
---|---|
Caché デバイス名 | ターミナルとプリンタ |
Caché デバイス ID またはデバイス・エイリアス | シーケンシャル・ファイル以外のすべてのデバイス |
ファイル名 | シーケンシャル・ファイル |
Windows および UNIX® では、プリンタ入出力の扱いがそれぞれ異なっています。詳細は、このドキュメントの "プリンタ" の章を参照してください。
デバイス名によるターミナルとプリンタの指定
ターミナル (あるいは、いくつかのプラットフォームではプリンタ) に対して入出力操作を行う場合、オペレーティング・システム (UNIX® または Windows) が提供するデバイス名を使用してデバイスを指定できます。形式は以下のとおりです。
OPEN "device" USE "device" CLOSE "device"
パラメータ | 説明 |
---|---|
device | 引用符で囲んだ、オペレーティング・システムでのデバイス名device の最大長は 256 文字です。 |
Windows システムでのターミナルの指定
シリアル通信ポートに接続された入出力デバイスを開くには、以下の構文で OPEN コマンドを指定します。
OPEN "comn:"
n は、デバイスに接続されたポート番号です。
パラメータ | 説明 |
---|---|
n | デバイスが接続されたポート番号 |
OPEN "com1:"
UNIX® でのターミナルとプリンタの指定
UNIX® デバイス名 /dev/tty06 を持つターミナルで入出力デバイスを開くには、以下のコマンドを入力します。
OPEN "/dev/tty06"
UNIX® システムでは、プリンタは、OPEN コマンドで指定した名前で識別され、tty デバイスの “character special” ファイルとして処理されます。したがって、サポートされる OPEN と USE のコマンド引数は、ターミナル入出力のコマンド引数と同じであり、シーケンシャル・ファイル入出力のコマンド引数とは異なります。Windows システムでは、プリンタ入出力は、シーケンシャル・ファイル入出力と同じように処理されます。
Caché ID によるデバイスの指定
インターシステムズ社の他の製品との互換性と利便性のため、デバイス番号を使用してデバイスを参照できます (デバイス・テーブルに格納されています)。システム管理者は、管理ポータルを使用して、これらの番号をデバイスにリンクできます。システム, 構成, デバイス設定, デバイス を選択すると、新規デバイスの作成や既存デバイスの編集が可能です。
システム管理者は、特定のデバイス番号を別の番号へ変換できます。例えば、ユーザが発行した OPEN 47 を、Caché は OPEN 49 に変換できます。
磁気テープ・デバイスを参照する場合、Caché デバイス番号を使用する必要があります。
以下のテーブルはデバイス番号を示します。
デバイス番号 | デバイス |
---|---|
0 | 主デバイス (ログインしたデバイス) |
2 | Caché スプーラ。UNIX® : このデバイスにはニーモニック SPOOL が適用されます。 |
3 | 無効なデバイス番号。無効な番号のデバイスをオープンしようとすると、timeout の期限切れを待たずに <NOTOPEN> エラーが返されます。 |
47-60 | 磁気テープ・デバイス |
63 | 表示バッファ |
20-46, 200-223 | ルーチン・インタロック・デバイス |
224-255 | インタジョブ・コミュニケーション・デバイス |
例
磁気テープ・デバイスを開くには、以下のコマンドを発行します。
OPEN 47
スプーラを開くには、以下のコマンドを発行します。
OPEN 2
ディスクでファイルの指定
二重引用符で囲まれた、オペレーティング・システムのファイル指定を使用して、ディスク・ファイルを開くことができます。
Windows のファイル指定は以下の形式です。
device:\directory\file.type
UNIX® のファイル指定は以下の形式です。
/directory/name
UNIX® システムでのファイル指定
UNIX® ファイル・パス名には、あらゆる種類の文字を 255 個まで使用できます。ファイル名に含まれるピリオド (“.”) とアンダースコア (“_”) はどの位置でも使用できますが、通常、その名前を意味的に区切るために使用します。例えば、ファイル・タイプとして .dat を使用して、ファイル名 pat_rec.dat を定義します。
現在の UNIX® 既定ディレクトリのファイルにアクセスする場合、通常その名前のみ指定するだけで済みます。システムは、ディレクトリに既定値を埋め込みます。
例
UNIX® システムまたは Windows システムの現在の既定ディレクトリが /usr/user の場合、そのディレクトリに格納されている pat_rec.dat というファイルを次のように開くことができます。
OPEN "pat_rec.dat"
システムは、自動的にこのファイルを開きます。新規ファイルの場合は、パラメータ文字列 “WN” を追加して、システムが停止しないようにします。
別のディレクトリに格納された、pat_rec.dat と同じ名前を持つファイルを開くには、以下のようにディレクトリを指定する必要があります。
OPEN "/usr/elsewhere/pat_rec.dat"
プロセスとデバイス
主デバイスと現在のデバイス
主デバイスを持つ各プロセス
Caché プロセスは、主入力デバイスと主出力デバイスを 1 つずつ持ちます。既定では、これらは同じデバイスです。ターミナルからログインし Caché を起動すると、そのターミナルが主デバイスになります。Caché は、暗黙の OPEN コマンドと USE コマンドをターミナルに発行するので、そのターミナルに直ちに READ コマンドと WRITE コマンドを発行できます。Caché の主デバイスとは、オペレーティング・システムによって主入力デバイスとして割り当てられたデバイスです。$PRINCIPAL 特殊変数は、主デバイスのデバイス ID を含みます。
Caché による現在のデバイスへの入出力コマンド
Caché は、READ、WRITE、PRINT、ZLOAD コマンドを含む入出力処理を、現在のデバイスに命令します。プロセスの $IO 特殊変数は、現在のデバイスのデバイス ID を含みます。ターミナルで Caché にログインする際、$IO は、ターミナルのデバイス名を最初に含みます。つまり、主デバイスと現在のデバイスは、ログイン直後は同じになります。USE コマンドの実行後、現在のデバイス ($IO に保持されています) は通常、最後に実行した USE コマンドで指定したデバイスになっています。
プログラマ・モードで、主デバイス以外のデバイスに対して OPEN および USE を発行することはできますが、Caché は “>” プロンプトに戻るたびに、暗黙的に USE 0 を発行します。0 以外のデバイスの使用を続けるためには、“>” プロンプトで入力する行ごとに USE コマンドを発行する必要があります。
主デバイスを現在のデバイスに設定
以下のいずれかの場合に、自動的に主デバイスが現在のデバイスに設定されます。
-
初めてサインオンしたとき。
-
USE 0 コマンドを発行したとき。
-
%Library.DeviceOpens in a new tab クラスの ChangePrincipal()Opens in a new tab メソッドの呼び出しを発行したとき。
-
エラー・トラップが設定されていない状態でエラーが発生したとき。
-
現在のデバイスを閉じたとき。
-
プログラマ・モードに戻ったとき。
-
HALT コマンドを実行して Caché を終了したとき。
USE 0 による主デバイスのオープン
USE 0 は、主デバイスに対する OPEN コマンドを意味します。他のプロセスがそのデバイスを所有している場合、このプロセスは OPEN コマンドが発生した場合と同じように、暗黙の OPEN で停止します。
(以前の OPEN コマンドによって) プロセスが所有しない他のデバイスに USE コマンドを発行すると、<NOTOPEN> エラーが生成されます。
timeout を設定していない OPEN コマンドは、プロセスがデバイスを取得した場合にのみ、プロセスに制御を返します。キーボードから Ctrl-C などの割り込みコマンドを入力することで、OPEN コマンドの実行に割り込むことができます。保護問題や無効なデバイス名が原因で OPEN コマンドが失敗すると、停止した状態が続きます。OPEN コマンドで timeout を指定すると、OPEN は、timeout の期限が切れたときにプロセスに制御を戻します。
NULL デバイス
入出力を転送する NULL デバイスの使用
画面に表示しない無関係の出力がアプリケーションで生成された場合、NULL デバイスにその出力を転送できます。適切な引数を持つ Caché OPEN コマンドを発行して、NULL デバイスを指定します (以下のテーブルを参照してください)。Caché は、そのデバイスをダミー・デバイスとして扱います。
プラットフォーム | NULL デバイス引数 |
---|---|
UNIX® | /dev/null/ |
Windows | //./nul |
この後の READ コマンドは、即座に空の文字列を返します。また、WRITE コマンドの場合は、直ちに成功を返します。いずれも、実データは、読み取りまたは書き込みされていません。NULL デバイスは、UNIX® のシステム呼び出し open、write、read を無視します。
Caché の外部から NULL デバイスを開く場合、(例えば Caché の出力を UNIX® シェルから /dev/null に転送する場合)、他のデバイスに行われるのと同じように、UNIX® システム・コールが発生します。
NULL デバイスを使用するジョブ起動プロセス
あるプロセスが JOB コマンドで別のプロセスを開始すると、ジョブ起動プロセスの既定の主入出力デバイスは、NULL デバイスになります。
プロセスによるデバイスの所有
シーケンシャル・ファイルを除き、1 つのプロセスが一度に所有できるデバイスは 1 つだけです。
つまり、プロセスがデバイスに OPEN コマンドを正常に発行した後、他のプロセスは、最初のプロセスが解放されるまで、そのデバイスを開くことはできません。以下の方法で、プロセスはデバイスを解放します。
-
CLOSE コマンドを明示的に発行
-
プロセスの停止
アプリケーション開発に関する入出力コマンド
Caché ルーチンをロード、編集、印刷、保存するには、入出力コマンドの特別なセットがあります。これらのコマンドは、ルーチンを現在のデバイスからロードし、保存します。以下はその概要です。
コマンド | 説明 |
---|---|
ZLOAD [ routine ] | 引数なしの ZLOAD コマンドは、現在のデバイスから Caché ルーチンをロードします。OPEN と USE コマンドと併せて ZLOAD を使用して、異なるデバイスからルーチンを入力あるいは出力できます。ZLOAD は、ターミナル入力から NULL 行を受け取った場合、あるいはファイルの最後に達した場合に終了します。 |
PRINT [args] または ZPRINT [args] |
現在のデバイスに、メモリのルーチンを出力します。ルーチンの最後の行の後に、空の行を書き込みます。オプションの引数により、出力する行数を制御できます。 |
ZSAVE [routine] | ZSAVE は、メモリ内のルーチンにユーザが指定した名前を付けて、ディスクに書き込みます。名前を指定しない場合、ZLOAD でロードされたルーチン名を使用します。 |
デバイス特殊変数
入出力コマンドには、特定のシステム変数値に影響を与えるものもあります。このセクションでは、これらの変数を定義し、その使用目的について説明します。特殊変数は、入出力コマンドが現在のデバイスに発行されたときにのみ、変更されます。以下のテーブルは、デバイス特殊変数の概要です。
変数 | 目的 |
---|---|
$IO | すべての出力処理が対象となる現在のデバイスのデバイス ID を示します。Caché は、ログイン時に $IO の値を主出力デバイスに設定します。この値は、USE コマンドと CLOSE コマンド、BREAK コマンドによって、またはプログラマ・モードに制御が戻ったときにのみ、変更できます。 |
$X | 現在のデバイスで最後のキャリッジ・リターン以降に記述された、実行中の出力可能文字の総数です。この範囲は、0 からデバイスの幅までです。 |
$Y | 現在のデバイスで最後の改ページ以降に記述された、実行中の改行の総数です。この範囲は、0 からデバイスの長さまでです。 |
$ZA | ターミナル・デバイスへ READ コマンドを発行した後の READ の状態情報です。 |
$ZB | 現在のデバイスで最後の READ 操作を終了させた文字シーケンスあるいはイベントです。 |
$ZMODE | 現在のデバイスに対し、OPEN コマンド、あるいは USE コマンドと併用したパラメータを示します。 |
$X と $Y は、出力表示をフォーマットするのに役立ちます。詳細は、“ターミナル入出力” の章を参照してください。$ZA および $ZB に関するデバイス固有情報については、このドキュメントのそれぞれの章を参照してください。
ニーモニック空間によるデバイス制御
ニーモニック空間は、カーソルの動作やデバイスの属性など、デバイスの制御を実行する Caché ルーチンです。各動作はラベルに対応します。これらのラベルは、WRITE /mnemonic コマンドで使用するニーモニックです。WRITE /mnemonic 構文についての詳細は、このドキュメントの他の章にある、各デバイス・タイプでの WRITE コマンドの説明を参照してください。
事前定義のニーモニック空間
Caché には、以下のテーブルで示されているような事前定義のニーモニック空間があります。
ルーチン名 | 既定のデバイス・タイプ | 説明 |
---|---|---|
^%MAGTAPE | 磁気テープ | 磁気テープ用ニーモニック空間です。詳細は、“WRITE /mnemonic 用磁気テープ・ニーモニック空間” を参照してください。 |
^%X364 | ターミナル、シーケンシャル・ファイル、他のデバイス | X3.64 (ANSI) ターミナル用ニーモニック空間です。詳細は、“X3.64 用ニーモニック空間” を参照してください。 |
^%XDTM | DTM PC コンソール | DTM PC コンソール用ニーモニック空間です。詳細は、“DTM PC コンソール用ニーモニック空間” を参照してください。 |
既定のニーモニック空間の設定
管理ポータルで、以下のデバイス・タイプの既定のニーモニック空間を変更できます。システム, 構成, デバイス設定, IO設定 を選択します。次のニーモニックが表示されます。
-
ターミナル
-
磁気テープ
-
シーケンシャル・ファイル
-
その他
既定のニーモニック空間を定義した後は、現在のデバイスについて OPEN コマンドまたは USE コマンドでニーモニック引数を指定して既定のニーモニック空間をオーバーライドしない限り、WRITE /mnemonic コマンドが発行された場合に、現在のデバイスでは既定のニーモニック空間にある制御ニーモニックが使用されます。
ニーモニック空間の生成
独自のニーモニック空間ルーチンを生成できます。例えば、事前定義ニーモニック空間を磁気テープ用に使用する一方で、ターミナル入出力用にも専用のニーモニック空間が必要な場合があります。
-
必要な制御ニーモニックを含む Caché ルーチンを生成します。このルーチンでは、以下の点に注意してください。
-
このルーチンのエントリ・ポイントは必ず大文字です。これらのエントリ・ポイントは、WRITE /mnemonic コマンドで参照するニーモニックです。
-
エントリ・ポイントには、引数が必要なものもあります。ニーモニック空間のコードは、エントリ・ポイントで現在のデバイスに対して実行します。
-
カーソル移動ルーチンは、画面を超えてカーソルを動かしたり、カーソルを折り返すことはできません。
-
-
このニーモニック空間をすべてのユーザから使用できるようにするには、“%” で始まる Caché ルーチン名を付け、システム・マネージャのネームスペース (%SYS) に置きます。
ニーモニック空間の選択
デバイスに WRITE /mnemonic コマンドを発行する前に、そのデバイス・タイプに対して管理ポータルの構成設定で指定されている既定のニーモニック空間を使用するかどうかを決定します。
-
既定のニーモニック空間を使用する場合、デバイスに対して OPEN や USE コマンドを発行するときに、mnespace パラメータを組み込まないようにする必要があります。
-
別のニーモニック空間を使用するには、デバイスに発行する OPEN や USE コマンドの mnespace パラメータにその名前を指定します。
USE "device"::"^%X364"
mnespace パラメータの使用方法についての詳細は、OPEN コマンドと USE コマンドと、個々のデバイス・タイプに関する章を参照してください。