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

前へ | 次へ | 目次 | 索引

# SMG$SCROLL_VIEWPORT

> Scroll a Display Under a Viewport ルーチンは，対応するビューポートで表示されている仮想ディスプレイをスクロールします。

## 形式

> SMG$SCROLL_VIEWPORT display-id [,direction] [,count]

## 戻り値

> ###

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

## 引数

> ### display-id

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

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

> ### direction

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

> 方向指定子(省略可能)。direction 引数は，スクロールの方向を指定する方向コードを格納したロングワード・ビット・マスクのアドレスです。 count 引数(省略可能)を組み合わせて使用することにより，指定した方向にスクロールする行数を指定できます。direction 引数に対して指定できる値は以下のとおりです。

> SMG$M_UP | count 行だけ上にスクロールします。
> SMG$M_DOWN | count 行だけ下にスクロールします。
> SMG$M_RIGHT | count カラムだけ右にスクロールします。
> SMG$M_LEFT | count カラムだけ左にスクロールします。

> 省略時の設定は SMG$M_UP です。

> ### count

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

> スクロールする行数またはカラム数(省略可能)。省略時の値は 1 です。

## 説明

> SMG$SCROLL_VIEWPORT ルーチンは，対応するビューポートで表示されている仮想ディスプレイをスクロールします。実際には，スクロールをシミュレートするために，仮想ディスプレイの上をビューポートが移動するように，ビューポートはその座標を変更します。しかし，画面上で物理的な位置が変化するわけではありません。ビューポートが仮想ディスプレイの外部に移動する場合には，ビューポートのサイズが変化する可能性があります。ビューポートのサイズを元に戻すには，SMG$CHANGE_VIEWPORT ルーチンを使用します。

> ビューポートの開始カラムが，全角文字の右半分であった場合には，そのカラムは表示されません。また，ビューポートが全角文字の左半分で終了した場合にも，そのカラムは表示されません。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INVARG | count 引数の値が 0 より小さい値です。
> SMG$_INVDIS_ID | display-id 引数に誤りがあります。
> SMG$_NO_WINASSOC | 指定された仮想ディスプレイにビューポートは対応づけられていません。
> SMG$_WRONUMARG | 引数の数が誤っています。
> SMG$_WINTRUFIT | 正常終了。ただし，仮想ディスプレイに対応づけられているビューポートはサイズが変更されました。

## 例

#1
    C This FORTRAN example demonstrates SMG$SCROLL_VIEWPORT.
    C Include the SMG definitions. In particular, we want SMG$M_BORDER.

            IMPLICIT INTEGER (A-Z)
            INCLUDE '($SMGDEF)'

    C Create the Virtual Displays. Give them borders.

            ROWS = 10
            COLUMNS = 22

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

    C Create viewport

            STATUS = SMG$CREATE_VIEWPORT (DISPLAY1, 2, 2, 3, 10)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

    C Create the Pasteboard

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

    C Put data into the Virtual Displays

            STATUS = SMG$PUT_CHARS ( DISPLAY1,'11111111111111', 1, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 2.', 2, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            STATUS = SMG$PUT_CHARS ( DISPLAY1,'33333333333333', 3, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 4.', 4, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

            STATUS = SMG$PUT_CHARS ( DISPLAY1,'55555555555555', 5, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 6.', 6, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            STATUS = SMG$PUT_CHARS ( DISPLAY1,'77777777777777', 7, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 8.', 8, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            STATUS = SMG$PUT_CHARS ( DISPLAY1,'99999999999999', 9, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            STATUS = SMG$PUT_CHARS ( DISPLAY1,'This is row 10.', 10, 1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

    C Paste the Virtual Display

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

            STATUS = LIB$WAIT (2.0)

            DO 1 I = 1, 3
            STATUS = SMG$SCROLL_VIEWPORT(DISPLAY1,SMG$M_UP,1)
            IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))
            CALL LIB$WAIT (2.0)
    1       CONTINUE

            STATUS = LIB$WAIT (2.0)

     END

> この例では，1 つの仮想ディスプレイが作成され，ビューポートが対応づけられています。仮想ディスプレイはビューポートに対応づけられた後，ペーストボードにペーストされたため，仮想ディスプレイの中でビューポートの内部だけが表示されます。この状態は 図 8-42 に示すとおりです。

> 図 8-42 仮想ディスプレイをペーストすることにより生成される出力

SMG$SCROLL_VIEWPORT ルーチンを全部で 3 回呼び出しています。 図 8-43 は，SMG$SCROLL_VIEWPORT ルーチンを最初に呼び出した後のビューポートを示しています。

図 8-43 SMG$SCROLL_VIEWPORT ルーチンを最初に呼び出した後に生成される出力

図 8-44 は，SMG$SCROLL_VIEWPORT ルーチンを 2 回目に呼び出した後のビューポートの内容を示しています。

図 8-44 SMG$SCROLL_VIEWPORT ルーチンを 2 回目に呼び出した後生成される出力

図 8-45 は，SMG$SCROLL_VIEWPORT ルーチンを最後に呼び出した後のビューポートの内容を示しています。

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

# SMG$SELECT_FROM_MENU

> Make a Selection from the Menu ルーチンは，矢印キーを使って選択メニュー間の移動をしたり，`[Return]`キーを使ってメニューの選択を確定することを可能にします。

## 形式

> SMG$SELECT_FROM_MENU keyboard-id ,display-id ,selected-choice-number [,default-choice-number] [,flags] [,help-library] [,timeout] [,word-terminator-code] [,selected-choice-string] [,rendition-set] [,rendition-complement]

## 戻り値

> ###

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

## 引数

> ### keyboard-id

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

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

> ### display-id

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

> 選択した項目が表示される仮想ディスプレイを指定します。 display-id 引数は，ディスプレイ識別子を格納した符号なしロングワードのアドレスです。仮想ディスプレイは，ペーストボードにペーストされ，バッチ処理されたり重ね書きされたりすることはできません。

> ### selected-choice-number

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

> 選択されるメニュー項目の指定番号。 selected-choice-number 引数はこの番号を受け付ける符号なしワードのアドレスです。 selected-choice-number 引数は，SMG$CREATE_MENU ルーチン内の 静的配列内のメニュー項目の索引に対応します。

> ### default-choice-number

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

> 省略時のメニュー項目の指定番号(省略可能)。 default-choice-number 引数は省略時のメニュー項目の番号を格納する符号なしワードのアドレスです。 default-choice-number 引数は，SMG$CREATE_MENU ルーチン内の静的配列内のメニュー項目の索引に対応します。この引数が省略された場合の選択は，すでに選択された項目中の最後のメニュー項目になります。何も選択されていなかった場合には，メニューの中の最初の項目が選択されます。

> ### flags

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

> 選択された時の動作を指示するビットマスク(省略可能)。 flags 引数は，フラグを格納した符号なしロングワードのアドレスです。この引数に対して指定できる値は次のとおりです。

> SMG$M_RETURN_IMMED | 矢印キー以外のキーが入力されたときに，コントロールをユーザに戻します。
> SMG$M_REMOVE_ITEM | SMG$SELECT_FROM_MENUルーチンによって各々のメニュー項目が一度のみ選択されるようにします。

> ### help-library

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

> `[PF2]` / `[HELP]`が入力された場合のヘルプ・ライブラリ(省略可能)。 help-library 引数は，このヘルプ・ライブラリを示すディスクリプタのアドレスです。この引数は，flags 引数がSMG$M_RETURN_IMMED を指定した場合には，無視されるので注意してください。省略時の設定値は，SYS$HELP:HELPLIB.HLB です。

> ### timeout

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

> 時間切れの値(省略可能)。 timeout 引数は，選択が決定されるまでにかかる秒数を指定する符号付きロングワードのアドレスです。

> ### word-terminator-code

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

> word-terminator-code 引数は，どの文字またはどのキーが読み込み操作を終了したかを示すコードが書き込まれる符号なしワードのアドレスです(省略可能)。

> ### selected-choice-string

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

> 選択されたメニュー項目のテキストを受け取る文字列(省略可能)。 selected-choice-string 引数は，この文字列を示すディスクリプタのアドレスです。

> ### rendition-set

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

> 属性指定子。rendition-set 引数は省略可能で，ロングワード・ビット・マスクのアドレスです。この引数で指定する属性が，仮想ディスプレイ上に設定されます。この引数に対して指定できる値は次のとおりです。

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

> ### rendition-complement

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

> 属性補足指定子。rendition-complement 引数は省略可能で，ロングワード・ビット・マスクのアドレスです。この引数で指定する補足的な属性が，仮想ディスプレイ上に設定されます。rendition-set 引数で指定できる引数はすべて，rendition-complement 引数で補足指定することができます。

> rendition-set 引数と rendition-complement 引数はどちらも省略可能な引数であり，これらの引数を組み合わせて使用すれば，ユーザは仮想ディスプレイの属性を制御できます。rendition-set 引数は特定の仮想ディスプレイ属性を設定します。それに対し，rendition-complement 引数はこれらの属性を補足します。rendition-set 引数と rendition-complement 引数の両方に同じビットが指定されている場合には，最初に rendition-set 引数が評価され，その後， rendition-complement 引数が評価されます。これらの 2 つの引数を組み合わせて使用すれば，1 回のプロシージャ呼び出しで複数の仮想ディスプレイ属性を制御できます。各属性に対して，ユーザは次の組み合わせを指定できます。

> 設定 | 補足 | 動作
> --- | --- | ---
> 0 | 0 | 属性を省略時の状態に設定する。
> 1 | 0 | 属性をオンに設定する。
> 0 | 1 | 属性を省略時の状態の逆の状態に設定する。
> 1 | 1 | 属性をオフに設定する。

## 説明

> SMG$SELECT_FROM_MENU ルーチンによって，メニューの中の項目を選択することができます。SMG$CREATE_MENU ルーチンは，SMG$SELECT_FROM_MENUルーチンの前に 呼び出されなければなりません。

> 矢印キーを使って，メニュー項目内を移動し，`[Return]`キーを押すことによって選択を確定することができます。`[Ctrl/Z]`を入力すると，現在の選択を確定し， SMG$_EOFという値が戻されます。

> 選択メニュー数が1画面で表示しきれない場合は，適切な矢印キーが入力されると，仮想ディスプレイがスクロールされ，表示できなかった選択メニューが見えるようになります。

> 現在選択されているメニューは, 反転表示され(または，指定された属性で) 物理カーソルで示されます。選択されたメニューは，selected-choice-number 引数に戻されます。さらに，flag 引数に SMG$M_REMOVE_ITEM が指定されている場合には，選択された項目は，もう一度選択することはできません。

> SMG$SELECT_FROM_MENUルーチンには，flags 引数によって指定される 2つの操作モードがあります。SMG$M_RETURN_IMMED という値を設定しない場合(省略時設定)は，次のようになります。

> - ユーザは，矢印キーを使って選択メニュー間を移動できます。

> - 現在の項目を選択するのに使われるキーは，次のとおりです。

>   > `[RETURN]`キー
>   > `[DO]`キー
>   > `[SELECT]`キー
>   > `[ENTER]`キー

> - `[HELP]`キーまたは`[PF2]`キーは現在選択した項目のヘルプを出力します。

> - `[CTRL/W]`は, SMG$REPAINT_SCREEN を呼び出して画面をリフレッシュします。

> - `[CTRL/Z]`は現在の項目を選択し，SMG$_EOFの値を戻します。

> - `[PF1/↑]`はメニューの中の最初の項目を選択します。

> - `[PF1/↓]`はメニューの中の最後の項目を選択します。

> - `[PF1/←]`は現在カーソルがある行の最初の項目を選択します。

> - `[PF1/→]`は現在カーソルがある行の最後の項目を選択します。

> - 他のすべてのキーは無視されます。

> SMG$M_RETURN_IMMED の値を設定した場合は，次のようになります。

> - ユーザは，矢印キーを使って選択メニュー間を移動できます。

> - `[CTRL/Z]`は現在の項目を選択し，SMG$_EOFの値を戻します。

> - その他のキーが入力された場合は，現在の項目を選択します。

> (上記の)どちらの場合でも，次のキーで代用が可能です。

> - `[LF]`キーは，`[↓]`キーの代わりに使用されます。

> - `[BACKSPACE]`キーは, `[←]`キーの代わりに使用されます。

> - `[TAB]`キーは，`[→]`キーの代わりに使用されます。

> 読み込み操作を終了したコード SMG$R_TRM_key-name は， word-terminator-code 引数(省略可能)に戻されます。複数の文字で構成されたメニュー項目も許可されています。メニュー項目がSuper DEC 漢字， DEC漢字文字またはJISカタカナ文字の場合，ヘルプ機能は起動されますが，メニュー項目は情報検索に使用されません。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_EOF | ファイルの最後。
> SMG$_ILLBATFNC | 仮想ディスプレイまたはペーストボードがバッチ処理されています。
> SMG$_INVARG | 引数に誤りがあります。選択できるメニュー項目がありません。
> SMG$_INVDIS_ID | display-id 引数に誤りがあります。メニューが含まれていません。または，ビューポートが含まれています。
> SMG$_NOTPASTED | 仮想ディスプレイがペーストされていません。
> LIB$_xxx | LIB$SCOPY から戻された状態値。
> SMG$_xxxx | SMG$CHANGE_RENDITION, SMG$SET_CURSOR_ABS, SMG$READ_KEYSTROKE, SMG$PUT_HELP_TEXT, SMG$SAVE_PHYSICAL_SCREEN, SMG$RESTORE_PHYSICAL_SCREENルーチンから戻された状態値。

前へ | 次へ | 目次 | 索引