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

前へ | 次へ | 目次 | 索引

この FORTRAN の例で生成される出力は以下の図に示すとおりです。 図 8-1 では，プログラムは初期仮想ディスプレイを， "Viewport" というラベルの付いた 2 番目の仮想ディスプレイにコピーしています。

図 8-1 仮想ディスプレイがペーストされた後に生成される出力

2 つの同じ仮想ディスプレイをペーストした後，プログラムは 2 番目の(コピーした) 仮想ディスプレイにビューポートを作成します。2 番目のディスプレイが "再ペースト" された後，ビューポート内の一部だけが表示される状態になります。この結果は 図 8-2 に示されています。

図 8-2 ビューポートを作成した後に生成される出力

SMG$CHANGE_VIEWPORT ルーチンを呼び出すことにより，仮想ディスプレイの中でビューポートを通じて表示される部分は変化します。これは 図 8-3 に示すとおりです。

図 8-3 SMG$CHANGE_VIEWPORT ルーチンを呼び出した後に生成される出力

# SMG$CHANGE_VIRTUAL_DISPLAY

> Change Virtual Display ルーチンは，仮想ディスプレイのサイズ，境界，ビデオ属性を変更します。

## 形式

> SMG$CHANGE_VIRTUAL_DISPLAY

> display-id [,number-of-rows] [,number-of-columns] [,display-attributes] [,video-attributes] [,character-set]

## 戻り値

> ###

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

## 引数

> ### display-id

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

> 属性を変更する仮想ディスプレイの識別子。 display-id 引数は，仮想ディスプレイの識別子を格納した符号なしロングワードのアドレスです。

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

> ### number-of-rows

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

> 仮想ディスプレイの新しい行数。 number-of-rows 引数は，仮想ディスプレイの行数を格納した符号付きロングワードのアドレスです。

> ### number-of-columns

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

> 仮想ディスプレイの新しいカラム数。 number-of-columns 引数は，仮想ディスプレイのカラム数を格納した符号付きロングワードのアドレスです。

> ### display-attributes

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

> 仮想ディスプレイの属性。 display-attributes 引数は，仮想ディスプレイの属性を格納したロングワード・ビット・マスクのアドレスです。この引数に対して指定できる値は次のとおりです。

> SMG$M_BORDER | 境界付き仮想ディスプレイを指定します。省略した場合は，仮想ディスプレイに境界は表示されません。
> SMG$M_BLOCK_BORDER | ブロック形の境界付き仮想ディスプレイを指定します。省略した場合は，仮想ディスプレイに境界は表示されません。
> SMG$M_DISPLAY_CONTROLS | 漢字ターミナルがグラフィック文字をサポートする場合は，キャリッジ・リターンやライン・フィードなどの制御文字をグラフィック文字として表示することを指定します。
> SMG$M_TRUNC_ICON | 仮想ディスプレイの幅をこえる行を切り捨てた際に，その場所にアイコン(通常は菱形)を表示することを指定します。

> ### video-attributes

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

> 仮想ディスプレイの出力に適用される属性のシステム設定値。
> video-attributes 引数は，ビデオ属性マスクを格納した符号なしロングワードの
> アドレスです。特定の出力ルーチンを呼び出さない限り，仮想ディスプレイのすべての出力に適用されます。

> たとえば，属性を指定して SMG$PUT_CHARS を呼び出した場合は，レンディションのシステム設定値は無効になります。

> この引数に対して指定できるビットは次のとおりです。

> SMG$M_BLINK | 点滅する文字を表示します。
> SMG$M_BOLD | 通常の輝度より高い輝度で文字を表示します。
> SMG$M_REVERSE | 文字を反転表示します。つまり，仮想ディスプレイの現在の省略時の属性とは逆の状態で表示します。
> SMG$M_UNDERLINE | 下線を付けた文字を表示します。
> SMG$M_INVISIBLE | 表示されない文字を指定します。つまり，仮想ディスプレイに存在していても，ペーストボードに表示されない文字を指定します。
> SMG$M_USER1 から SMG$M_USER8 | ユーザ定義属性を表示します。

> 1回の呼び出しで複数の属性の組み合わせを指定できます。他のビットはすべて HP が使用するために予約されており，0 でなければなりません。

> ### character-set

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

> 仮想ディスプレイに対する文字集合のシステム設定値。 character-set 引数は，文字集合指定子を格納した符号なしロングワードのアドレスです。

値 | 文字集合 (コードセット)
--- | ---
SMG$C_ASCII | ASCII文字集合
SMG$C_SPEC_GRAPHICS | DEC特殊文字集合
SMG$C_SUPPLEMENTAL | 補助文字集合 1
SMG$C_KANJI | DEC漢字文字集合
SMG$C_JIS_KANA | JISカタカナ文字集合
SMG$C_SDK | Super DEC 漢字コードセット

1DEC 補助文字集合または Latin-1 文字集合のいずれか。

## 説明

> SMG$CHANGE_VIRTUAL_DISPLAY ルーチンは，既存の仮想ディスプレイのサイズまたはシステム設定値の属性を変更します。仮想ディスプレイのサイズを変更する場合は，日本語 SMG は新しいサイズ(1行目/1カラム目から始まる)に適合するように，仮想ディスプレイに関連するテキストを再マップします。

> 仮想ディスプレイの新しいサイズが前のサイズより小さい場合は，一部のテキストが切り捨てられる可能性があります。全角文字の右半分が切り捨てられた場合は，その文字の左半分は未定義文字になります。仮想ディスプレイの新しいサイズが前のサイズより大きい場合は，テキストの右側に空白が挿入されることがあります。

> 仮想ディスプレイのサイズを変更した場合は，仮想ディスプレイの仮想カーソルは， 1行目，1カラム目に移動されます。ラベル付き境界を仮想ディスプレイで使用する際に，サイズの変更された仮想ディスプレイ上にラベルを表示できない場合は，ラベルは削除されます。

> オリジナルの SMG ルーチンは，ASCII文字集合と DEC特殊文字集合のみをサポートします。日本語 SMG ではこの他に SMG$C_SUPPLEMENTAL，SMG$C_KANJI，SMG$C_JIS_KANA， SMG$C_SDK が指定できます。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> LIB$_INSVIRMEM | 要求されたバッファを再び割り当てるために必要な仮想メモリが不足しています。
> SMG$_INVARG | ビデオ属性または仮想ディスプレイの属性に誤りがあります。
> SMG$_INVDIS_ID | display-id 引数が誤っています。
> SMG$_WRONUMARG | 引数の数が誤っています。

# SMG$CHECK_FOR_OCCLUSION

> Check for Occlusion ルーチンは，仮想ディスプレイが別の仮想ディスプレイによって覆われているかどうかを確認します。

## 形式

> SMG$CHECK_FOR_OCCLUSION display-id ,pasteboard-id ,occlusion-state

## 戻り値

> ###

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

## 引数

> ### display-id

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

> 確認したい仮想ディスプレイを指定します。display-id 引数は，ディスプレイ識別子を格納した符号なしロングワードのアドレスです。

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

> ### pasteboard-id

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

> 確認したいペーストボードを指定します。pasteboard-id 引数は，ペーストボード識別子を格納した符号なしロングワードのアドレスです。この引数は SMG$CREATE_PASTEBOARD ルーチンによって与えられます。

> ### occlusion-state

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

> ディスプレイが重なっているかどうかを示す値が書き込まれます。
> occlusion-state 引数は，重なっているかどうかを示す状態が書き込まれる符号付きロングワードのアドレスです。ディスプレイが重なっている場合には， occlusion-state 引数は 1 に設定され，指定されたペーストボードでディスプレイが重なっていない場合には 0 に設定されます。プロシージャが SS$_NORMAL を戻さなかった場合には，occlusion-state 引数の内容は未定義です。

## 説明

> SMG$CHECK_FOR_OCCLUSION ルーチンは，指定された仮想ディスプレイを指定されたペーストボードにペーストしたときに，その仮想ディスプレイが別の仮想ディスプレイと重なり合っているかどうかを確認します。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INVDIS_ID | display-id 引数に誤りがあります。
> SMG$_INVPAS_ID | pasteboard-id 引数に誤りがあります。
> SMG$_NOTPASTED | 仮想ディスプレイが指定されたペーストボードにペーストされていません。
> SMG$_WRONUMARG | 引数の数が誤っています。

## 例

#1
    C+
    C This FORTRAN example program demonstrates the use of
    C SMG$CHECK_FOR_OCCLUSION.
    C
    C This routine creates a virtual display and writes it to the
    C pasteboard.  Data is placed in the virtual display using SMG$PUT_CHARS.
    C-

            INTEGER SMG$CREATE_VIRTUAL_DISPLAY, SMG$CREATE_PASTEBOARD
            INTEGER SMG$PASTE_VIRTUAL_DISPLAY,  SMG$PUT_CHARS
            INTEGER SMG$CHECK_FOR_OCCLUSION
            INTEGER DISPLAY1, DISPLAY2, PASTE1, PASTE2, ROWS, COLUMNS, BORDER
            INTEGER OCCLUSION, STATUS
            CHARACTER*29 TEXT

    C+
    C Include the SMG definitions. In particular, we want SMG$M_BORDER.
    C-

            INCLUDE '($SMGDEF)'

    C+
    C Create two virtual displays using SMG$CREATE_VIRTUAL_DISPLAY.
    C Give them borders.
    C-

            ROWS = 6
            COLUMNS = 50

            STATUS = SMG$CREATE_VIRTUAL_DISPLAY
         1          (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            ROWS = 5
            COLUMNS = 30

            STATUS = SMG$CREATE_VIRTUAL_DISPLAY
         1          (ROWS, COLUMNS, DISPLAY2, SMG$M_BORDER)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

    C+
    C Create the pasteboard using SMG$CREATE_PASTEBOARD.
    C-

            STATUS = SMG$CREATE_PASTEBOARD (PASTE1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

    C+
    C Use SMG$PUT_CHARS to put data into the virtual displays.
    C-

            STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1         ' This virtual display has 6 rows and 50 columns.', 2, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1         ' This is a bordered virtual display.', 3, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1         ' SMG$PUT_CHARS puts data in this virtual display.', 4,
         1          1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1         ' This text should be partially occluded.', 5, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1         ' So should part of this row.', 6, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PUT_CHARS ( DISPLAY2, ' This is virtual', 3, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PUT_CHARS ( DISPLAY2,
         1         ' display #2.', 4, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PUT_CHARS ( DISPLAY2,
         1         ' This is just some more text.', 5, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

    C+
    C Use SMG$PASTE_VIRTUAL_DISPLAY to paste the virtual display.
    C-

            STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 4, 15)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY2, PASTE1, 8, 15)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

    C+
    C Check the two virtual displays for occlusion by calling
    C SMG$CHECK_FOR_OCCLUSION.
    C-

            TEXT = 'This display is not occluded.'

            STATUS = SMG$CHECK_FOR_OCCLUSION (DISPLAY1, PASTE1, OCCLUSION)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            IF (OCCLUSION .EQ. 0) THEN
                    STATUS = SMG$PUT_CHARS (DISPLAY1, TEXT, 1, 1)
                    IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            ELSE
                    STATUS = SMG$PUT_CHARS (DISPLAY1, 'Occluded.', 1 , 1)
                    IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            END IF

            STATUS = SMG$CHECK_FOR_OCCLUSION (DISPLAY2, PASTE1, OCCLUSION)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            IF (OCCLUSION .EQ. 0) THEN
                    STATUS = SMG$PUT_CHARS (DISPLAY2, TEXT, 1, 1)
                    IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            ELSE
                    STATUS = SMG$PUT_CHARS (DISPLAY2, 'Occluded.', 1 , 1)
                    IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            END IF

            END

> この FORTRAN プログラムから生成される出力は 図 8-4 に示すとおりです。

図 8-4 SMG$CHECK_FOR_OCCLUSION ルーチンを呼び出す FORTRAN プログラムが生成する出力

# SMG$CONTROL_MODE

> Control Mode ルーチンはペーストボードのモードを制御します。これには，バッファ操作，画面更新，ペーストボード削除時のターミナル画面の消去，ターミナル画面管理のためのタブの使用が含まれます。

## 形式

> SMG$CONTROL_MODE pasteboard-id [,new-mode] [,old-mode] [,buffer-size]

## 戻り値

> ###

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

## 引数

> ### pasteboard-id

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

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

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

> ### new-mode

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

> 制御モードの新設定。 new-mode 引数は省略可能で，設定モードを格納した符号なしロングワード・ビット・マスクのアドレスです。ビットを 1 に設定すると各モードが設定され，0 に設定すると解除されます。この引数に対して指定できる値は次のとおりです。

> SMG$M_BUF_ENABLED | バッファリングを行います。
> SMG$M_CLEAR_SCREEN | ペーストボードが消去されずにプログラムが終了した際にターミナル画面を消去します。
> SMG$M_MINUPD | 更新を最小限にします(省略時の設定値)。
> SMG$M_NOTABS | 日本語 SMG がターミナル画面管理を行う際にタブを使わないようにします。
> SMG$M_PROTECT | ペーストボード操作を AST 割り込みから保護します(省略時の設定値)。

> 他のビットはすべて HP が使用するために予約されており，0 でなければなりません。

> ### old-mode

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

> 制御モードの旧設定。 old-mode 引数は省略可能で，旧設定モードが書き込まれる符号なしロングワード・ビット・マスクのアドレスです。このプロシージャが呼ばれる前に使われていた設定モードです。ビットが 1 の場合は各モードが設定されており，0 の場合は設定されていません。

> ### buffer-size

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

> バッファ・サイズ(バイト長)。 buffer-size 引数は省略可能で，バッファ・サイズを格納した符号なしワードのアドレスです。buffer-size 引数はバッファリング可能 (SMG$M_BUF_ENABLEDの指定がある)な場合に適用されます。システム設定値である最小バッファ・サイズは 256 バイトです。最大バッファ・サイズは 65535 バイトです。buffer-size 引数の値は UAF 値に依存し，その最大値は SYSGEN パラメータ(MAXBUF)によって決まります。

## 説明

> SMG$CONTROL_MODE ルーチンを使用することにより，指定したペーストボード・モードに対する日本語 SMG 操作の設定モードを得たり，その設定値を変更することができます。また，new-mode 引数と old-mode 引数を組み合わせて，次のような場合に使用することができます。

> - 現在の設定モードに関する情報を得る場合

>   前へ | 次へ | 目次 | 索引