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


前へ 次へ 目次 索引



SMG$COPY_VIRTUAL_DISPLAY
- Copy a Virtual Display

Copy a Virtual Display ルーチンは,既存の仮想ディスプレイのコピーを作成し,そのコピーに新しい仮想ディスプレイ識別子を割り当てます。

形式

SMG$COPY_VIRTUAL_DISPLAY current-display-id ,new-display-id


戻り値

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



引数

current-display-id

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


コピーされる仮想ディスプレイの識別子を表示します。 current-display-id 引数はディスプレイ識別子を格納した符号なしロングワードのアドレスです。

new-display-id

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


新しく生成される仮想ディスプレイのディスプレイ識別子が書き込まれます。 new-display-id 引数は,新しいディスプレイ識別子を格納する符号なしロングワードのアドレスです。


説明

SMG$COPY_VIRTUAL_DISPLAY ルーチンは既存の仮想ディスプレイのコピーを作成し,そのコピーに新しい仮想ディスプレイ番号を割り当てます。この新しく生成される仮想ディスプレイはどこにもペーストされません。新しく生成される仮想ディスプレイをペーストするには,SMG$PASTE_VIRTUAL_DISPLAY ルーチンと new-display-id 識別子を使用します。SMG$COPY_VIRTUAL_DISPLAY ルーチンを呼び出すときに,コピーされる既存のディスプレイをペーストする必要はありません。

戻される状態値

SS$_NORMAL 正常終了。
LIB$_INSVIRMEM 必要なバッファに割り当てるための仮想メモリが不足しています。


#1

C+ 
C This DEC FORTRAN example program demonstrates the use of 
C SMG$COPY_VIRTUAL_DISPLAY. 
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- 
 
        IMPLICIT INTEGER (A-Z) 
        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 Copy the first virtual display, the one that is partially occluded. 
C- 
 
 STATUS = SMG$COPY_VIRTUAL_DISPLAY ( DISPLAY1, NEW_DISPLAY) 
        IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) 
 
C+ 
C Now paste this new virtual display so that it occludes the other displays. 
C- 
 
        STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( NEW_DISPLAY, PASTE1, 4, 20) 
        IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) 
 
        END 
 

このFORTRANの例で生成される最初の仮想ディスプレイは 図 8-5 に示すとおりです。

図 8-5 この例で生成される最初の仮想ディスプレイ


このFORTRANの例で生成される 2 番目の仮想ディスプレイは 図 8-6 に示すとおりです。

図 8-6 この例で生成される 2 番目の仮想ディスプレイ


SMG$COPY_VIRTUAL_DISPLAY ルーチンを呼び出した後に生成される出力は 図 8-7 に示すとおりです。

図 8-7 SMG$COPY_VIRTUAL_DISPLAY ルーチンを呼び出した後で生成される出力



SMG$CREATE_KEY_TABLE
- Create Key Table

Create Key Table ルーチンは,キー定義を登録するためのテーブルを作成します。

形式

SMG$CREATE_KEY_TABLE key-table-id


戻り値

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



引数

key-table-id

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


新しく生成されるキー・テーブルの識別子が書き込まれます。 key-table-id 引数は,キー・テーブル識別子が書き込まれる符号なしロングワードのアドレスです。


説明

SMG$CREATE_KEY_TABLE ルーチンは,キー定義テーブルを作成します。この後,キー定義は SMG$ADD_KEY_DEF,SMG$LOAD_KEY_DEFS,SMG$DEFINE_KEY ルーチンを使用してこのテーブルに追加登録でき,また,SMG$READ_COMPOSED_LINE ルーチンによって使用されます。

戻される状態値

SS$_NORMAL 正常終了。
LIB$_INSVIRMEM 仮想メモリが不足しています。
SMG$_WRONUMARG 引数の数が誤っています。


SMG$CREATE_MENU
- Fill the Virtual Display with a Menu

Fill the Virtual Display with a Menu ルーチンは,指定された仮想ディスプレイに,指定された行から選択メニューを表示します。

形式

SMG$CREATE_MENU display-id ,choices [,menu-type] [,flags] [,row] [,rendition-set] [,rendition-complement]


戻り値

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



引数

display-id

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


メニューを作成する仮想ディスプレイを指定します。 display-id 引数はディスプレイ識別子を格納した符号なしロングワードのアドレスです。

choices

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


メニューに表示される各々の項目に対応する静的配列。 choices 引数は文字列の静的配列を示すディスクリプタのアドレスです。空白のメニュー項目は認識されないので,注意してください。

menu-type

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


表示されるメニューのタイプを指定するビット・マスク。 menu-type 引数は省略可能で,メニュー・タイプを指定するロングワード・ビット・マスクのアドレスです。この引数に対して指定できる値は次のとおりです。

SMG$K_BLOCK メニュー項目がマトリックス形式で表示されます (省略時設定)。
SMG$K_VERTICAL 各々のメニュー項目が各々の行に表示されます。
SMG$K_HORIZONTAL 複数のメニュー項目がすべてひとつの行に表示されます。

flags

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


メニューの属性を指定する省略可能なビット・マスク。 flags 引数は,フラグを格納した符号なしロングワードのアドレスです。この引数に対して指定できる値は次のとおりです。

SMG$M_DOUBLE_SPACE メニュー項目が,ダブル・スペースで表示されます。省略時設定はシングル・スペースです。
SMG$M_FIXED_FORMAT 各々のメニュー項目が一定の長さのフィールドで表示されます。フィールドとは,一番大きなメニュー項目のサイズです。省略時は,各々のメニュー項目のサイズによって表示されます。
SMG$M_WIDE_MENU メニュー項目に倍角文字が使用されます。省略時の設定値は標準サイズ文字です。

row

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


仮想ディスプレイで,最初のメニュー項目が表示される行番号(省略可能)。 row 引数は,行番号を格納した符号付きロングワードのアドレスです。 row 引数を省略した場合,仮想ディスプレイのスクロール領域の1行目を使用します。

rendition-set

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


属性指定子。rendition-set 引数は省略可能であり,ロングワード・ビット・マスクのアドレスです。このロングワード・ビック・マスクの各属性を設定すると,ディスプレイ内の対応する属性が設定されます。 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$CREATE_MENU ルーチンは,仮想ディスプレイのスクロール領域上の指定された行から,メニュー選択のリストを表示します。メニュー項目は,仮想ディスプレイの2カラム目から表示が開始されます。複数のメニュー項目が同じ行にある場合には,4カラム分の間隔をあけて分かれています。

選択は,以下のどれかの形式で,指定された属性で表示されます。

Vertical 各々のメニュー項目が各々の行に表示されます。
Horizontal 複数のメニュー項目がすべてひとつの行に表示されます。
Block メニュー項目がマトリックス形式で表示されます。

仮想ディスプレイの境界の中に入らないメニュー項目は,ディスプレイに表示されませんが,SMG$SELECT_FROM_MENUルーチンによって後からスクロールされるために保存されます。省略時設定では,メニュー項目はシングル・スペースで表示されますが,ダブル・スペースに変更することも可能です。各々の項目は,一列に4カラムずつスペースをあけて表示されます。また,最も大きい文字列のサイズに等しいカラムの幅に統一して表示することも可能です。

SMG$CREATE_MENUルーチンを呼び出したあとで,ユーザは,作成されたメニューを含む行を乱すような文字を,ディスプレイに出力してはいけません。メニューを乱すような文字が出力された場合には,予期しない結果になる場合があります。このメニューから項目を選択する場合には SMG$SELECT_FROM_MENU ルーチンを使用してください。

SMG$CREATE_MENU ルーチンは,1次元のNCA,VSA文字配列をサポートしています。 NCA,VSA 文字配列とは,VAX ada,VAX BASIC,VAX COBOL,
DEC Fortran,VAX Pascal と VAX PL/I で作成される文字配列を含みます (しかし,SMG$CREATE_MENU ルーチンを VAX BASIC から呼び出す場合は,配列宣言に MAP は必要です)。

メニュー項目の文字集合属性は,メニュー項目が表示される仮想ディスプレイの文字集合属性によって,決められます。


戻される状態値

SS$_NORMAL 正常終了。
SMG$_INVDIS_ID display-id 引数に誤りがあります。
LIB$_xxxx LIB$CREATE_VM_ZONE,LIB$GET_VM,LIB$FREE_VMから戻される状態値。
SMG$_xxxx SMG$PUT_CHARS,SMG$BEGIN_DISPLAY_UPDATE,
SMG$END_DISPLAY_UPDATEルーチンから戻される状態値。

注:SMG$BEGIN_DISPLAY_UPDATEルーチンと SMG$END_DISPLAY_UPDATEルーチンはサポートしていません。


#1


SMG$CREATE_MENUルーチンを使用した例については,SMG$SELECT_FROM_MENUルーチンを参照してください。


前へ 次へ 目次 索引