^%IS の使用
^%IS は、文字ベース・アプリケーションの汎用的なデバイス選択ユーティリティです。組み込みの ^%IS ユーティリティを使用すると、入出力処理の対象となるデバイスをユーザが選択できます。デバイスを選択すると常に、アプリケーション・プログラムは ^%IS ユーティリティを呼び出す必要があります。このユーティリティにより、ユーザは使用するデバイスと、適切な OPEN コマンド・パラメータを指定できます。また、選択済みデバイスを開いて、呼び出しプログラムにデバイス固有の情報を返します。ユーザは、^%IS グローバルで定義されたニーモニックを入力します。^%IS は、管理ポータルで設定された IO 構成の既定値に依存します。
^%IS の動作
デバイス・プロンプト
^%IS ユーティリティを呼び出すと、InterSystems IRIS はデバイス名を要求します。以下のいずれかの方法で入力します。
-
デバイス名あるいは ID 番号を入力します。
-
デバイスのニーモニックを入力します。
-
現在のデバイスを選択するには、Enter キーを押します。
^%IS は以下のように応答します。
-
デバイスのニーモニックを入力すると、^%IS は、^%IS グローバル内で対応するデバイスを見つけて開きます。
-
デバイス名を入力した場合、^%IS は、そのデバイスに OPEN コマンドを発行します。
-
デバイスが InterSystems IRIS デバイス ID の場合、^%IS は、番号が実際のデバイス番号に再度マップされたかどうか、デバイス・テーブルをチェックします。^%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>
^%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 など)。 |
POP | 0 | 0 以外の場合、デバイスが未選択であることを示します。つまり、ユーザが Device: プロンプトで「STOP」と入力します。 |
RMSDF | RW | Read/Write 権限。 |
OPEN パラメータ
OPEN コマンドは、既定として ^%IS グローバルに定義されたデバイス指定を使用します。^%IS を使用するとき、他の設定を指定して、現在の設定をオーバーライドできます。
USE コマンドの発行
^%IS の実行後、アプリケーションは、^%IS で開いたデバイスに USE コマンドを発行する必要があります。^%IS を呼び出すたびに値が変更されますが、IO 変数を使用できます。その後、READ や WRITE など、後続の InterSystems IRIS 入出力コマンドは、そのデバイスを参照します。
CLOSE コマンドの発行
ユーザまたはアプリケーション開発者は、^%IS ユーティリティで開いたデバイスを閉じる必要があります。
^%IS ニーモニック
^%IS には、簡単に使用するための機能がいくつかあります。例えば、入出力を自身のターミナルに送信する場合は、“Device” プロンプトで Enter キーを押すだけで済みます。また、既定で組み込まれているニーモニックや、独自に定義した新しいニーモニックも使用できます。
デバイス・ニーモニック
さまざまなデバイスに、ニーモニックを設定すると大変便利です。1 つのデバイスに複数のニーモニックを設定することもあります。複数のニーモニックにより、デバイスごとに異なるデバイスの特性を指定し、使用方法に応じて特性を変更できます。例えば、通常データ入力に使用するターミナルには、ターミナルとしての特性がありますが、補助プリンタ機能が備わっている場合があります。同じデバイスを異なった特性で開くさまざまなニーモニックを割り当てることにより、ハード・コピーが必要なときに、ターミナル/プリンタの組み合わせをプリンタとして使用できます。
デバイスのニーモニックと特性は管理ポータルを使用して構成できます。ニーモニック空間を定義して、アクティブにする方法については、"既定のニーモニック空間の定義" を参照してください。
既定ニーモニック
^%IS グローバルは、インストール時にいくつかの既定ニーモニックで初期化されています。例えば、InterSystems IRIS スプーラには、SPOOL と 2 の既定ニーモニックがあります。“2” または “SPOOL” を入力すると、InterSystems IRIS スプーラへの出力を送信します。
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 の内部エントリ・ポイントです。これは、デバイスから出力のみを行うルーチンで呼び出されます。
スプーリング
InterSystems IRIS スプーリングは、ユーザのオペレーティング・システムで実行されるスプーリングから独立しています。InterSystems IRIS のスプーリングは、プログラムの出力を直ちに印刷するのではなく、グローバルに自動的に保存する技術です。プリンタにグローバルのコンテンツを送信することで、後で出力を印刷できます。
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
ノード 1 のコンテンツ
ノード 1 は、キャレット (^) で区切られた、デバイス・パネルの他のフィールド値を含みます。
^%IS(mnemonic,1) = Device #^Type^Subtype^Prompt code^not used
^Other Open parameters^Alternate device
以下の例では、ニーモニック名 2 のデバイス (InterSystems IRIS スプーラの既定名) は、デバイス番号が 2、デバイス・タイプが SPL (スプール)、デバイス・サブタイプが PK-DEC です。他の値は、スプール・タイプのデバイスには定義されません。
^%IS(2,1) = 2^SPL^PK-DEC^^^^^