# 日本語 OpenVMS
日本語画面管理ライブラリ
利用者の手引き

前へ | 次へ | 目次 | 索引

# 第 7 章
日本語 SMG ルーチンの呼び出しの例

この章では，VMS Calling Standard に準拠したおもな言語で SMG$READ_KEYSTROKE ルーチンを呼び出す方法を示します。他の日本語 SMG ルーチン (たとえば，SMG$CREATE_VIRTUAL_DISPLAY，SMG$CREATE_PASTEBOARD， SMG$CREATE_VIRTUAL_KEYBOARD，SMG$PASTE_VIRTUAL_DISPLAY， SMG$PUT_LINE ) もこれらの例の中で使用しています。

例 7-1 の FORTRAN プログラムでは，SMG$READ_KEYSTROKE ルーチンの他，SMG$CREATE_VIRTUAL_DISPLAY，SMG$CREATE_PASTEBOARD，SMG$PASTE_VIRTUAL_DISPLAY， SMG$CREATE_VIRTUAL_KEYBOARD，SMG$PUT_LINE ルーチンも使用しています。

例 7-1 FORTRANでのSMG$ルーチンの使用
    C+
    C This routine creates a virtual display and writes ti to the PASTEBOARD.
    C Data is placed in the virtual display using the routine SMG$PUT_CHARS.
    C Include the SMG definitions.  In particular, we want SMG$M_BORDER,
    C-
            INCLUDE '($SMGDEF)'
            INTEGER SMG$CREATE_VIRTUAL_DISPLAY, SMG$CREATE_PASTEBOARD
            INTEGER SMG$PASTE_VIRTUAL_DISPLAY,
         1          SMG$CREATE_VIRTUAL_KEYBOARD
            INTEGER SMG$READ_KEYSTROKE, SMG$PUT_LINE
            INTEGER DISPLAY1, PASTE1, KEYBOARD1, ROWS, COLUMNS,
         1          TERM_CHAR
            CHARACTER*3 TEXT
            CHARACTER*27 TEXT_OUTPUT
    C+
    C Create the virtual display with a border.
    C-
            ROWS = 7
            COLUMNS = 60

            ISTATUS = SMG$CREATE_VIRTUAL_DISPLAY
         1          (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)
    C+
    C Create the pasteboard.
    C-
            ISTATUS = SMG$CREATE_PASTEBOARD (PASTE1)
    C+
    C Create a virtual keyboard
    C-
            ISTATUS = SMG$CREATE_VIRTUAL_KEYBOARD (KEYBOARD1)
    C+
    C Paste the virtual display at row 3, column 9.
    C-
            ISTATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 3, 9)
            ISTATUS = SMG$PUT_LINE (DISPLAY1,
         1          'Enter the character K after the >> prompt.')
            ISTATUS = SMG$PUT_LINE (DISPLAY1,
         1          'This character will not be echoed as you type it.')
            ISTATUS = SMG$PUT_LINE (DISPLAY1,
         1  'The terminal character equivalent of K is displayed.')
            ISTATUS = SMG$PUT_LINE (DISPLAY1, ' ')
    C+
    C Read a keystroke from the virtual pasteboard.
    C-
            ISTATUS = SMG$READ_KEYSTROKE ( KEYBOARD1, TERM_CHAR, '>>', ,
         1          DISPLAY1)
            ISTATUS = SMG$PUT_LINE (DISPLAY1, ' ')
    C+
    C Convert the decimal value of TERM_CHAR to a decimal ASCII text string.
    C-
            ISTATUS = OTS$CVT_L_TI( TERM_CHAR, TEXT)

            TEXT_OUTPUT = ' TERMINAL CHARACTER IS: ' // TEXT
    C+
    C Print the decimal ASCII text string.
    C-
            ISTATUS = SMG$PUT_LINE (DISPLAY1, TEXT_OUTPUT)
            ISTATUS = SMG$PUT_CHARS (DISPLAY1, TEXT, 7, 25)

            END

# 第 8 章
日本語 SMG リファレンス

# SMG$ADD_KEY_DEF

> Add Key Definition ルーチンは，キーパッド・キーの定義をキー定義テーブルに追加登録します。

## 形式

> SMG$ADD_KEY_DEF key-table-id ,key-name [,if-state] [,attributes] [,equivalence-string] [,state-string]

## 戻り値

> ###

> OpenVMS 用法 | cond_value
> データ型 | longword (unsigned)
> アクセス | write only
> 受け渡し方 | by value

## 引数

> ### key-table-id

> OpenVMS 用法 | identifier
> データ型 | longword(unsigned)
> アクセス | read only
> 受け渡し方 | by reference

> キー定義を追加するキー・テーブルを指定します。 key-table-id 引数は，キー・テーブル識別子を格納した符号なしロングワードのアドレスです。

> この引数は SMG$CREATE_KEY_TABLE ルーチンによって与えられます。

> ### key-name

> OpenVMS 用法 | char_string
> データ型 | character string
> アクセス | read only
> 受け渡し方 | by descriptor

> 値を定義するキーを指定します。key-name 引数は，このキー名を示すディスクリプタのアドレスです。SMG$ADD_KEY_DEF ルーチンは，文字列を大文字に変更し，後続の空白を削除します。

> 使用できるキー名については， 第 3 章 の 表 3-1 を参照してください。

> ### if-state

> OpenVMS 用法 | char_string
> データ型 | character string
> アクセス | read only
> 受け渡し方 | by descriptor

> key-name 引数によって指定されるキーが押されたときに戻される値を条件指定します。 if-state 引数は，状態文字列を示すディスクリプタのアドレスです。

> if-state 引数を指定した場合には，key-name 引数の定義は，現在の状態が指定された if-state 文字列と一致する場合にだけ使用されます。 if-state 引数の長さは 1 〜 31 バイトでなければなりません。この引数を省略した場合には，if-state 引数の省略時の設定は "DEFAULT" になります。

> ### attributes

> OpenVMS 用法 | mask_longword
> データ型 | longword(unsigned)
> アクセス | read only
> 受け渡し方 | by reference

> キー定義の追加属性を指定するロングワード・ビット・マスク。 attributes 引数は，属性マスクを格納した符号なしロングワードのアドレスです。この引数を省略した場合には，マスクは 0 になります。

> attributes 引数に対して指定できる値は次のとおりです。

> SMG$M_KEY_NOECHO | このビットが設定されている場合には，このキーが押されたときに， equivalence-string 引数はエコー表示されません。 このビットがクリアされている場合には， equivalence-string 引数はエコー表示されます。SMG$M_KEY_TERMINATE が設定されていない場合には，SMG$M_KEY_NOECHO は無視されます。
> SMG$M_KEY_TERMINATE | このビットが設定されている場合には，このキーが押されたときに( if-state 引数の条件指定にしたがって)，入力行は終了し，追加文字を受け付けられないことを指定します。 このビットがクリアされている場合には，追加文字を受け付けることができます。つまり，このビットが設定されている場合は， equivalence-string 引数は終了文字として取り扱われます。
> SMG$M_KEY_LOCK | このビットが設定されており， state-string 引数が指定されている場合には， state-string 引数によって指定される状態名は，定義に state-string 引数を含む後続のキーストロークによって明示的に変更されるまで，現在の状態のまま変更されません。 このビットがクリアされている場合には， state-string 引数によって指定される状態名は，次の定義済みキーストロークに対してのみ有効になります。
> SMG$M_KEY_PROTECTED | このビットが設定されている場合には，このキー定義を変更または削除できないことを指定します。クリアされている場合には，キー定義を変更または削除できます。

> 他のビットは未定義であり，0 でなければなりません。一度に複数の属性を設定するために，これらの値の対して論理和操作を実行できます。

> ### equivalence-string

> OpenVMS 用法 | char_string
> データ型 | character string
> アクセス | read only
> 受け渡し方 | by descriptor

> 戻される行内のキーストロークに対して置換される文字列。 equivalence-string 引数は，この同値文字列を示すディスクリプタのアドレスです。

> SMG$M_KEY_NOECHO が設定されていない限り，equivalence-string 引数はエコー表示されます。equivalence-string 引数を省略した場合には，このキーに対して同値文字列は定義されません。

> ### state-string

> OpenVMS 用法 | char_string
> データ型 | character string
> アクセス | read only
> 受け渡し方 | by descriptor

> このキーが押されたときに現在の状態として設定される，新しい状態名を格納します。 state-string 引数は，新しい状態文字列を示すディスクリプタのアドレスです。

> この引数を省略した場合には，新しい状態は定義されません。現在の状態が一時的な状態の場合には(つまり，最後に押された定義済みキーに対して SMG$M_KEY_LOCK が指定されていない場合)，現在の state-string 引数は DEFAULT になります。

## 説明

> SMG$ADD_KEY_DEF ルーチンは，キー定義をキー定義テーブルに登録します。テーブルは SMG$CREATE_KEY_TABLE ルーチンを呼び出すことにより作成しておかなければなりません。SMG$ADD_KEY_DEF ルーチンを実行した後，SMG$READ_COMPOSED_LINE ルーチンに対する応答として，ユーザが指定されたキーを入力すると，指定された同値文字列が戻されます。

> VT100，VT200シリーズ，およびVT300シリーズのキーボードとキーパッドのすべてのキーを定義できます。ただし，次のキーは定義できません。

> - VT200シリーズとVT300シリーズ・キーボードのCompose Characterキー

> - ESCAPEキー

> - SHIFTキー

> - VT200シリーズおよびVT300シリーズ・キーボードの`[F1]`〜`[F5]`キー

> 一部のキーとキー定義はユーザが定義できますが，なるべくこのような定義は実行しないでください。ユーザがこのような定義をキー名として使用した場合，日本語 SMG ルーチンはエラーを戻すわけではありませんが，次に示すように，DCL レベルで次の特殊な方法で漢字ターミナルを設定しない限り，これらのキーの組み合せに対して割り当てた定義は実行されません。

> - `[Ctrl/C]`，`[Ctrl/O]`，`[Ctrl/X]`，および `[F6]`
>   これらのキーに対して割り当てた定義を使用するには，まず，DCL の SET TERMINAL/PASTHRU コマンドを入力しなければならない。

> - `[Ctrl/T]`，`[Ctrl/Y]`
>   これらのキーに割り当てた定義を使用するには，まず，DCL の SET TERMINAL/PASTHRU コマンドと SET NOCONTROL コマンドのどちらか一方または両方を入力しなければならない。

> - `[Ctrl/S]`，`[Ctrl/Q]`
>   これらのキーに対して割り当てた定義を使用するには，まず，DCL の SET TERMINAL/ NOTTSYNC コマンドを入力しなければならない。

> これらの特殊なターミナル設定はなるべく使用しないでください。ターミナル・ドライバに制御を渡すために，省略時の設定を変更した結果がどのようになるのかを十分理解していない限り，このような特殊なターミナル設定を使用すると，予測できない結果が発生することがあります。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INVDEFATT | キー定義属性に誤りがあります。
> SMG$_KEYDEFPRO | キー定義が変更または削除できないように保護されています。
> SMG$_INVKEYNAM | key-name 引数に誤りがあります。
> SMG$_INVKTB_ID | key-table-id 引数に誤りがあります。
> SMG$_PREDEFREP | 正常終了。前のキー定義は新しいキー定義に変更されました。
> SMG$_WRONUMARG | 引数の数が誤っています。
> その他 | LIB$SCOPY_DXDX から戻された状態値。

# SMG$BEGIN_DISPLAY_UPDATE

> Begin Batching of Display Updates ルーチンは，対応する SMG$END_DISPLAY_UPDATE の呼び出しを検出するまで，仮想ディスプレイに対するすべての出力を保存，つまりバッチ処理します。

## 形式

> SMG$BEGIN_DISPLAY_UPDATE display-id

## 戻り値

> VMS 用法: | cond_value
> データ型: | longword (unsigned)
> アクセス: | write only
> 受け渡し方: | by value

## 引数

> ### display-id

> OpenVMS 用法 | identifier
> データ型 | longword (unsigned)
> アクセス | read only
> 受け渡し方 | by reference

> 出力をバッチ処理する仮想ディスプレイを指定します。 display-id 引数はディスプレイ識別子を格納した符号なしロングワードのアドレスです。

> display-id 引数は SMG$CREATE_VIRTUAL_DISPLAYルーチンから戻されます。

## 説明

> SMG$BEGIN_DISPLAY_UPDATE は，ディスプレイに対して複数の変更処理を実行します。変更結果は，すべての変更処理が終了した後で一括して表示されます。したがって，ユーザから見ると，ディスプレイは初期状態から最終状態に直接変化し，途中の状態はまったく表示されません。

> バッチ処理が終了するのは，特定のディスプレイに対して SMG$BEGIN_DISPLAY_UPDATE と同じ回数だけ，SMG$END_DISPLAY_UPDATE が呼び出されたときです。日本語 SMG は，指定されたディスプレイに対するバッチ処理の状況を追跡し，管理します。したがって，SMG$BEGIN_DISPLAY_UPDATE と SMG$END_DISPLAY_UPDATE を同じモジュール内で呼び出す必要はありません。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_BATWAS_ON | 正常終了。バッチ処理はすでに開始されています。
> SMG$_WRONUMARG | 引数の数が誤っています。
> SMG$_INVDIS_ID | display-id 引数に誤りがあります。

# SMG$BEGIN_PASTEBOARD_UPDATE

> Begin Batching of Pasteboard Updates ルーチンは，対応する SMG$END_PASTEBOARD_UPDATE ルーチンの呼び出しが検出されるまで，ペーストボードに対するすべての出力を保存，つまりバッチ処理します。

## 形式

> SMG$BEGIN_PASTEBOARD_UPDATE pasteboard-id

## 戻り値

> ###

> OpenVMS 用法 | cond_value
> データ型 | longword (unsigned)
> アクセス | write only
> 受け渡し方 | by value

## 引数

> ### pasteboard-id

> OpenVMS 用法 | identifier
> データ型 | longword (unsigned)
> アクセス | read only
> 受け渡し方 | by reference

> 出力がバッチ処理されるペーストボードを指定します。 pasteboard-id 引数は，ペーストボード識別子を格納した符号なしロングワードのアドレスです。

> この引数は SMG$CREATE_PASTEBOARD ルーチンによって与えられます。

## 説明

> SMG$BEGIN_PASTEBOARD_UPDATE ルーチンを使用すれば，ペーストボードに対して複数の変更処理を実行し，すべての変更処理が終了した後で変更結果を表示することができます。したがって，ユーザから見ると，ペーストボードは初期状態から最終状態に直接変化し，途中の状態は表示されません。

> バッチ処理が終了するのは，特定のペーストボードに対して SMG$BEGIN_PASTEBOARD_UPDATE ルーチンと同じ回数だけ，SMG$END_PASTEBOARD_UPDATE ルーチンを呼び出したときです。日本語 SMG は，指定されたペーストボードに対するバッチ処理の状況を追跡し，管理します。したがって，SMG$BEGIN_PASTEBOARD_UPDATE ルーチンと SMG$END_PASTEBOARD_UPDATE ルーチンを同じモジュール内で呼び出す必要はありません。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_BATWAS_ON | 正常終了。バッチ処理はすでに開始されています。
> SMG$_WRONUMARG | 引数の数が誤っています。
> SMG$_INVPAS_ID | pasteboard-id 引数に誤りがあります。

# SMG$CANCEL_INPUT

> Cancel Input Request ルーチンは，SMG$READ_COMPOSED_LINE，SMG$READ_KEYSTROKE， SMG$READ_STRING，SMG$READ_VERIFY の各ルーチンが要求した読み込み操作をただちに取り消します。

## 形式

> SMG$CANCEL_INPUT keyboard-id

## 戻り値

> ###

> OpenVMS 用法 | cond_value
> データ型 | longword (unsigned)
> アクセス | write only
> 受け渡し方 | by value

## 引数

> ### keyboard-id

> OpenVMS 用法 | identifier
> データ型 | longword (unsigned)
> アクセス | read only
> 受け渡し方 | by reference

> 入力操作を取り消す対象となる仮想キーボードを指定します。 keyboard-id 引数は，キーボード識別子を格納した符号なしロングワードのアドレスです。

> この引数は SMG$CREATE_VIRTUAL_KEYBOARD ルーチンによって与えられます。

## 説明

> SMG$CANCEL_INPUT ルーチンを実行すると，漢字ターミナルからの SMG$READ_COMPOSED_LINE，SMG$READ_KEYSTROKE，SMG$READ_STRING，SMG$READ_VERIFY の各ルーチンによる入力操作はただちに終了します。SMG$CANCEL_INPUT ルーチンを使用した場合には，これらのルーチンに対して，SS$_CANCEL または SS$_ABORT が状態コードとして戻されます。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INVKBD_ID | keyboard-id 引数に誤りがあります。
> SMG$_WRONUMARG | 引数の数が誤っています。

前へ | 次へ | 目次 | 索引