日本-日本語
日本HPホーム 製品 & サービス OpenVMS製品情報
≫  お問い合わせ


OpenVMS マニュアル


 

OpenVMS ドキュメント
ライブラリ

タイトルページ
目次
まえがき
第 1 部:概論
第 1 章:日本語SMG (SMG$)の概要
第 2 章:日本語 SMG の出力操作
第 3 章:日本語 SMG 入力操作
第 4 章:日本語 SMG の高度な機能
第 5 章:フォーリン・ターミナルのサポート
第 6 章:日本語 SMG を使用したプログラム開発
第 7 章:日本語 SMG ルーチンの呼び出しの例
第 2 部:リファレンス・セクション
第 8 章:日本語 SMG リファレンス
コマンド一覧
索引
PDF
OpenVMS ホーム
日本語 OpenVMS

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


目次 索引




Draw a Character in a Virtual Display ルーチンは,仮想ディスプレイ内の指定された位置に文字を描きます。

形式

SMG$DRAW_CHAR display-id ,flags [,row] [,column] [,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 引数は,この識別子を格納した符号なしロングワードのアドレスです。

flags

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


描く文字を示すビット・マスク(省略可能)。Flags 引数は,フラグを格納した符号なしロングワードのアドレスです。Flags 引数には以下の値を指定できます。

  • SMG$M_UP

  • SMG$M_DOWN

  • SMG$M_LEFT

  • SMG$M_RIGHT

論理和演算を実行することにより,T文字,角を形成する文字,交差を形成する文字などを描くことができます。値が 0 の場合には,菱形文字(◇)が描かれます。

row

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


指定された文字を描く位置を指定する行番号(省略可能)。row 引数は,行番号を格納した符号付きロングワードのアドレスです。row 引数を省略した場合には,文字は現在の仮想カーソルの行位置に描かれます。

column

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


指定された文字を描く位置を指定するカラム番号(省略可能)。column 引数は,カラム番号を格納した符号付きロングワードのアドレスです。column 引数を省略した場合には,文字は現在の仮想カーソルのカラム位置に描かれます。 column 引数が全角文字の右半分の位置になる場合,その文字の左半分は未定義文字になります。また,column 引数が全角文字の左半分の位置になる場合,その文字の右半分は未定義文字になります。

rendition-set

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


属性指定子。rendition-set 引数は省略可能であり,ロングワード・ビット・マスクのアドレスです。このロングワード・ビック・マスクの各属性を設定すると,仮想ディスプレイ内の対応する属性が設定されます。rendition-set 引数を使用して以下の属性を指定できます。

SMG$M_BLINK 点滅する文字を表示します。
SMG$M_BOLD 通常の輝度より高い輝度で文字を表示します。
SMG$M_INVISIBLE 表示されない文字を指定します。つまり,仮想ディスプレイに存在していても,ペーストボードに表示されない文字を指定します。
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$DRAW_CHAR ルーチンは,指定された仮想ディスプレイの指定された位置に指定された文字を描きます。このルーチンは仮想カーソルの位置を変更しません。描かれる文字は漢字ターミナルのタイプに応じて異なります。たとえば,SMG$ は,可能な場合にはターミナルのライン描画文字集合を使用します。その文字集合を使用できない場合には, SMG$ はラインを描くために +,-,および | を使用します。 column 引数が全角文字の右半分の位置になる場合,その文字の左半分は未定義文字になります。また,column 引数が全角文字の左半分の位置になる場合,その文字の右半分は未定義文字になります。

戻される状態値

SS$_NORMAL 正常終了。
SMG$_INVCOL カラム番号に誤りがあります。
SMG$_INVROW 行番号に誤りがあります。
SMG$_WRONUMARG 引数の数が誤っています。


#1
C+ 
C This FORTRAN example demonstrates the use of 
C SMG$DRAW_CHAR to use the terminal line drawing 
C characters. 
C- 
 IMPLICIT INTEGER (A-Z) 
 INCLUDE '($SMGDEF)' 
 
 s = SMG$CREATE_PASTEBOARD(p_id) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$CREATE_VIRTUAL_DISPLAY(17,7,d_id,SMG$M_BORDER) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$PASTE_VIRTUAL_DISPLAY(d_id,p_id,4,30) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$SET_CURSOR_REL(d_id,1,3) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 
 s = SMG$DRAW_CHAR(d_id,SMG$M_UP,1,4,SMG$M_BOLD) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_DOWN,2,4,0,SMG$M_REVERSE) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_LEFT,3,4,SMG$M_BLINK) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_RIGHT,4,4,0,0) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_DOWN,5) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_LEFT,6) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_RIGHT,7) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_DOWN + SMG$M_LEFT,8) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_DOWN + SMG$M_RIGHT,9) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_LEFT + SMG$M_RIGHT,10) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_DOWN + SMG$M_LEFT,11) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_DOWN + SMG$M_RIGHT,12) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_DOWN + SMG$M_LEFT + SMG$M_RIGHT,13) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_LEFT + SMG$M_RIGHT,14) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,SMG$M_UP + SMG$M_DOWN + SMG$M_RIGHT + 
     1          SMG$M_LEFT, 15) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 s = SMG$DRAW_CHAR(d_id,0,16) 
 IF (.NOT. s) CALL LIB$SIGNAL(%VAL(s)) 
 
 END 
 

この例では,1 つのカラム位置にライン描画文字を生成しています。




Draw a Line ルーチンは,水平線または垂直線を描きます。

形式

SMG$DRAW_LINE display-id ,start-row ,start-column ,end-row ,end-column [,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 引数は,仮想ディスプレイ識別子を格納した符号なしロングワードのアドレスです。

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

start-row

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


ライン描画を開始する行を指定します。start-row 引数は,ライン描画を開始する行番号を格納した符号付きロングワードのアドレスです。

start-column

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


ライン描画を開始するカラムを指定します。start-column 引数は,ライン描画を開始するカラム番号を格納した符号付きロングワードのアドレスです。

水平線の描画時に,start-column 引数が全角文字の右半分から始まった場合,左半分は,未定義文字になります。垂直線描画時に, start-column 引数が全角文字の右半分あるいは左半分のバイト上にあった場合には,残りの部分は未定義文字になります。

end-row

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


ライン描画を終了する行を指定します。end-row 引数は,ライン描画を終了する行番号を格納した符号付きロングワードのアドレスです。

end-column

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


ライン描画を終了するカラムを指定します。end-column 引数は,ライン描画を終了するカラム番号を格納した符号付きロングワードのアドレスです。

水平線の描画時に,end-column 引数が全角文字の左半分で終わった場合,右半分は,未定義文字になります。垂直線描画時に,end-column 引数が全角文字の右半分あるいは左半分にあった場合には,残りの部分は未定義文字になります。

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_INVISIBLE 表示されない文字を指定します。つまり,仮想ディスプレイに存在していても,ペーストボードに表示されない文字を指定します。
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$DRAW_LINE ルーチンは,指定された開始行/カラムから指定された終了行/カラムまでラインを描きます。このルーチンは仮想カーソルの位置を変更しません。このルーチンでは,水平線または垂直線だけを描くことができます。ラインを描くために使用される文字はターミナルのタイプに応じて異なります。可能な場合には,日本語 SMG ルーチンは漢字ターミナルのライン描画文字集合を使用します。その文字集合を使用できない場合には,日本語 SMG ルーチンはラインを描くために +,-,および | を使用します。

DEC漢字文字集合が使用されていた場合,描画される線が全角文字の左半分あるいは右半分にあった場合には残りの部分は未定義文字になります。


戻される状態値

SS$_NORMAL 正常終了。
SMG$_DIALINNOT 斜めのラインを描くことはできません。
SMG$_INVCOL カラム番号が誤っています。指定されたカラムは仮想ディスプレイの外部です。
SMG$_INVDIS_ID display-id 引数に誤りがあります。
SMG$_INVROW 行番号が誤っています。指定された行は仮想ディスプレイの外部です。
SMG$_WRONUMARG 引数の数が誤っています。


#1
C+ 
C This FORTRAN example program demonstrates the use of SMG$DRAW_LINE. 
C- 
 
        INTEGER SMG$CREATE_VIRTUAL_DISPLAY, SMG$CREATE_PASTEBOARD 
        INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$DRAW_LINE 
        INTEGER DISPLAY1, PASTE1, ROWS, COLUMNS, BORDER, STATUS 
C+ 
C First, create the virtual display using SMG$CREATE_VIRTUAL_DISPLAY. 
C To give it a border, set BORDER = 1. No border would be BORDER = 0. 
C- 
 
        ROWS = 7 
        COLUMNS = 50 
        BORDER = 1 
 
        STATUS = SMG$CREATE_VIRTUAL_DISPLAY 
     1                                (ROWS, COLUMNS, DISPLAY1, BORDER) 
        IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) 
 
C+ 
C Call SMG$CREATE_PASTEBOARD to create the pasteboard. 
C- 
 
        STATUS = SMG$CREATE_PASTEBOARD (PASTE1) 
        IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) 
 
C+ 
C Draw a vertical line using SMG$DRAW_LINE. 
C Start at row 2, column 20. End at row 6. 
C- 
 
        STATUS = SMG$DRAW_LINE (DISPLAY1, 2, 20, 6, 20) 
        IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) 
 
C+ 
C Now, use SMG$DRAW_LINE to draw a vertical line. 
C Start at row 6, column 40. End at row 2. 
C This is similar to the line drawn above, but we are drawing the 
C line in the reverse direction. 
C- 
 
        STATUS = SMG$DRAW_LINE (DISPLAY1, 6, 40, 2, 40) 
        IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) 
C+ 
C Draw a horizontal line now, again calling SMG$DRAW_LINE. 
C Start at row 4, column 8. End at column 50. 
C- 
 
        STATUS = SMG$DRAW_LINE (DISPLAY1, 4, 8, 4, 50) 
        IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) 
 
C+ 
C Paste the virtual display using SMG$PASTE_VIRTUAL_DISPLAY. 
C- 
 
        STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 4, 15) 
        IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) 
 
        END 
 

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

図 8-14 SMG$DRAW_LINE ルーチンを呼び出す FORTRAN プログラムによって生成される出力



目次 索引

© 2012 Hewlett-Packard Development Company, L.P.