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


前へ 次へ 目次 索引



SMG$SCROLL_VIEWPORT
- Scroll a Display Under a 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 DEC 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 Selection from the 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 という値を設定しない場合(省略時設定)は,次のようになります。

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

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

読み込み操作を終了したコード SMG$R_TRM_key-name は, word-terminator-code 引数(省略可能)に戻されます。複数の文字で構成されたメニュー項目も許可されています。メニュー項目が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ルーチンから戻された状態値。


#1

C+ 
C This DEC FORTRAN example program illustrates the use of 
C SMG$CREATE_MENU, SMG$SELECT_FROM_MENU, and SMG$DELETE_MENU 
C to create an application that lets a user make multiple 
C selections from a horizontal menu. 
C- 
 
        IMPLICIT INTEGER (A-Z) 
        INCLUDE '($SMGDEF)' 
 
        CHARACTER*20 c 
        CHARACTER*20 a(20) /'One','Two','Three','This is Four','Five', 
     1                  'Six','Seven','Eight','Nine','I like ten', 
     2                  'Eleven','Twelve','Thirteen','Fourteen', 
     3                  'Fifteen','Sixteen','Seventeen','Eighteen', 
     4                  'Nineteen','Exit this menu.' / 
 
        s = SMG$CREATE_PASTEBOARD(p_id) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
        s = SMG$CREATE_VIRTUAL_KEYBOARD(k_id) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
        s = SMG$CREATE_VIRTUAL_DISPLAY(6,50, d_id2, SMG$M_BORDER) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
        s = SMG$CREATE_VIRTUAL_DISPLAY(6,50, d_id, SMG$M_BORDER) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
 
        s = SMG$PASTE_VIRTUAL_DISPLAY(d_id2, p_id, 2,2) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
        s = SMG$PASTE_VIRTUAL_DISPLAY(d_id, p_id, 10,2) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
 
        s = SMG$CREATE_MENU(d_id,a,SMG$K_HORIZONTAL,,2,SMG$M_REVERSE) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
 
  20    s = SMG$SELECT_FROM_MENU(k_id, d_id, n,6,,,,,C,SMG$M_BOLD,0) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
        s = SMG$PUT_LINE(d_id2,c) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
 
        if (n .ne. 20) goto 20 
 
        s = SMG$DELETE_MENU(d_id) 
        if (.not. s) call LIB$SIGNAL(%VAL(s)) 
 END 
 

以下の図は, この DEC FORTRAN プログラムによって生成される水平方向のメニューです。

図 8-46 では,プログラムは,省略時で選択されるものを除くすべてのメニュー項目を,反転表示します。この時点で,プログラムはユーザが選択をするのを待っています。

図 8-46 メニュー項目が選択される前に生成される出力


このメニューが作成されるときには,何も引数が指定されていなかったので,メニューの中の項目は再び選択されることができます。 図 8-47 は,ユーザが3つの項目(その中の 2つは同じ)を選択した後の画面イメージを表しています。

図 8-47 3つのメニュー選択をした後に生成された出力


図 8-48 では,ユーザは "Exit this menu"を選択し,プログラムは実行を終了しました。

図 8-48 プログラムが終了した後に生成される出力



前へ 次へ 目次 索引