前へ | 次へ | 目次 | 索引 |
Write Line to Virtual Display ルーチンは,1 行のテキストを仮想ディスプレイに書き込みます。
SMG$PUT_LINE display-id ,text [,line-advance] [,rendition-set] [,rendition-complement] [,flags] [,character-set] [,direction]
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 ルーチンによって与えられます。
text
OpenVMS 用法 char_string データ型 character string アクセス read only 受け渡し方 by descriptor
書き込まれる文字。 text 引数は,文字列を示すディスクリプタのアドレスです。line-advance
OpenVMS 用法 longword_signed データ型 longword (signed) アクセス read only 受け渡し方 by reference
行書き込み後のスクロール行数。 line-advance 引数は,進める行数を格納した符号付きロングワードのアドレスです。この引数を省略した場合は,1 が設定されます。 0 を指定すると, SMG$PUT_LINE ルーチンは既存のテキストに上書きします。rendition-set
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
属性指定子。 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 属性を無効にする。
flags
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
動作指定ビット・マスク。 flags 引数は省略可能で,フラグを格納した符号なしロングワードのアドレスです。テキストが 1 行で格納できない場合に実行する動作を指定します。この引数に対して指定できる値は次のとおりです。
0 自動改行しないことを指定します
(省略時の設定値)。SMG$M_WRAP_CHAR 行の最後の文字で自動改行します。 SMG$M_WRAP_WORD 行の最後の空白で自動改行します。
character-set
OpenVMS 用法 longword_unsigned データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
出力されるテキストの文字集合。 character-set 引数は,文字集合コードを格納した符号なしロングワードのアドレスです。この引数を省略した場合は,SMG$CREATE_VIRTUAL_DISPLAY ルーチンまたは SMG$CHANGE_VIRTUAL_DISPLAY ルーチンで設定された値が使用されます。
値 文字集合 (コードセット) 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 漢字コードセット
OpenVMS 用法 | mask_longword |
データ型 | longword (unsigned) |
アクセス | read only |
受け渡し方 | by reference |
スクロール方向。 direction
引数は,方向コードを格納したロングワード・ビット・マスクのアドレスです。この引数に対して指定できる値は SMG$M_UP と SMG$M_DOWN です。この引数を省略した場合は,SMG$M_UP が設定されます。
SMG$PUT_LINE ルーチンは,現在の仮想カーソルの位置からテキストを仮想ディスプレイに書き込みます。テキストが 1 番下または 1 番上の行に到達した後(スクロールの方向に応じて異なる)このルーチンを呼び出すと,仮想ディスプレイはスクロールします。指定されたテキストが 1 行より短い場合は,必要に応じて空白が埋め込まれます。flags 引数で自動改行を指定した場合は,line-advance 引数で指定した行数だけスクロールされ,あふれた文字を次の行に挿入するための空間が作成されます。次の行はスクロールの方向( direction 引数)によって決定されます。flags 引数で自動改行を指定していない場合は,あふれた文字は切り捨てられます。
SMG$PUT_LINE ルーチンを呼び出した後,仮想カーソルの位置は出力の対象となる次の行の 1 カラム目に設定されます。出力の対象となる次の行は,line-advance 引数と direction 引数によって決定されます。SMG$PUT_LINE ルーチンを続けて呼び出しても,前の出力の上に新しい出力が重ならないように, line-advance 引数のシステム設定値は 1 になっています。仮想ディスプレイ上にテキスト行を書き込むための日本語 SMG ルーチンとしては,他に SMG$INSERT_LINE ルーチンがあります。
オリジナルの SMG ルーチンは,ASCII文字集合と DEC特殊文字集合のみをサポートします。日本語 SMG ではこの他に SMG$C_SUPPLEMENTAL,SMG$C_KANJI,SMG$C_JIS_KANA, SMG$C_SDK が指定できます。
DEC漢字文字集合を使用している際に,現在の仮想カーソルの位置が全角文字の右半分である場合は,その文字の左半分は未定義文字になります。また,あふれる文字が切り捨てられる際に,全角文字の右半分から切り捨てられる場合は,その文字の左半分は未定義文字になります。
SS$_NORMAL 正常終了。 LIB$_INVSTRDES 文字列ディスクリプタが誤っています。 SMG$_INVDIS_ID display-id 引数が誤っています。 SMG$_WILUSERMS ペーストボードがビデオ・ターミナルでありません。 SMG$_WRONUMARG 引数の数が誤っています。
#1 |
---|
C+ C This DEC FORTRAN example program demonstrates the use of SMG$PUT_LINE. C- C+ C Include the SMG definitions. In particular, we want SMG$M_BORDER and C SMG$M_UNDERLINE. C- IMPLICIT INTEGER (A-Z) INCLUDE '($SMGDEF)' CHARACTER*30 TEXT(3) C+ C Create a virtual display with a border. C- ROWS = 7 COLUMNS = 50 STATUS = SMG$CREATE_VIRTUAL_DISPLAY 1 (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Create the pasteboard. C- STATUS = SMG$CREATE_PASTEBOARD (PASTE1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Put data in the virtual display. C- TEXT(1) = 'This virtual display has 7' TEXT(2) = 'rows and 50 columns.' TEXT(3) = 'Text entered by SMG$PUT_LINE.' C+ C After the first line of text is printed, call SMG$PUT_LINE to C advance two lines. C- STATUS = SMG$PUT_LINE ( DISPLAY1, TEXT(1), 2 ) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Now, use SMG$PUT_LINE to underline the next line of text. C Notice that 30 characters are being underlined. Advance 1 C line of text after displaying the line. C- STATUS = SMG$PUT_LINE ( DISPLAY1, TEXT(2), 1, SMG$M_UNDERLINE ) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Display the third line of text. C- STATUS = SMG$PUT_LINE ( DISPLAY1, TEXT(3) ) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Paste the virtual display. C- STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 4, 15 ) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) END |
この FORTRAN プログラムによって生成される出力は 図 8-31 に示すとおりです。
図 8-31 SMG$PUT_LINE ルーチンを呼び出す FORTRAN プログラムによって生成される出力
次のプログラムは,SMG$PUT_LINE ルーチンの新しい direction 引数の使用を示しています。この引数を用いるため,SMG$PUT_WITH_SCROLL ルーチンは必要なくなりました。
#2 |
---|
C+ C This DEC FORTRAN example program demonstrates the use of DIRECTION C parameter in the SMG$M_UNDERLINE routine. C C The DIRECTION parameter in SMG$PUT_LINE makes SMG$PUT_WITH SCROLL C an obsolete routine. This example is the same as the SMG$PUT_WITH_SCROLL C routine, except that the calls to SMG$PUT_WITH_SCROLL have been C replaced by calls to SMG$PUT_LINE. C- INCLUDE '$SMGDEF' IMPLICIT INTEGER*4 (A-Z) C+ C Call SMG$CREATE_PASTEBOARD to establish the terminal screen C as a pasteboard. C- STATUS = SMG$CREATE_PASTEBOARD (NEW_PID) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) C+ C Using SMG$CREATE_VIRTUAL_DISPLAY, establish a virtual display region. C- STATUS = SMG$CREATE_VIRTUAL_DISPLAY (5,80,DISPLAY_ID) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) C+ C Paste the virtual display to the screen, starting at C row 10, column 15, by calling SMG$CREATE_VIRTUAL_DISPLAY. C- STATUS = SMG$CREATE_VIRTUAL_DISPLAY (DISPLAY_ID,NEW_PID,10,15) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) C+ C Define a scrolling region through a call to C SMG$SET_DISPLAY_SCROLL_REGION. C- STATUS = SMG$SET_DISPLAY_SCROLL_REGION (DISPLAY_ID,1,5) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) C+ C Call SMG$PUT_LINE and SMG$ERASE_LINE to write three C scrolling lines to the screen. The first line will be underlined. C the second blinking, and the third in reverse video. C- DO I = 1,10 IF ((I/2) + (I/2) .EQ. I) THEN DIR = SMG$M_UP ERASE DIR = SMG$M_DOWN ENDIF STATUS = SMG$PUT_LINE (DISPLAY_ID, 1 'This line is underlined',,SMG$M_UNDERLINE,,,,DIR) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) STATUS = SMG$ERASE_LINE(DISPLAY_ID) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) STATUS = SMG$PUT_LINE (DISPLAY_ID,'This line is blinking', , 1 SMG$M_BLINK,,,,DIR) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) STATUS = SMG$ERASE_LINE(DISPLAY_ID) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) STATUS = SMG$PUT_LINE (DISPLAY_ID,'This line is reverse 1 video',,SMG$M_REVERSE,,,,DIR) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) STATUS = SMG$ERASE_LINE(DISPLAY_ID) IF (.NOT. STATUS) CALL LIB$STOP(%VAL(STATUS)) ENDDO END |
The Write Double-Height and Double-Width Line ルーチンは1行のテキストを 4 倍角の文字で書き込みます。
SMG$PUT_LINE_HIGHWIDE display-id ,text [,line-advance] [,rendition-set] [,rendition-complement] [,flags] [,character-set]
OpenVMS 用法 cond_value データ型 longword (unsigned) アクセス write only 受け渡し方 by value
display-id
OpenVMS 用法 identifier データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
仮想ディスプレイ識別子。 display-id 引数は仮想ディスプレイ識別子を格納した符号なしロングワードのアドレスです。text
OpenVMS 用法 char_string データ型 character string アクセス read only 受け渡し方 by descriptor
仮想ディスプレイへ書き込まれる文字。 text 引数は,文字列を示すディスクリプタのアドレスです。line-advance
OpenVMS 用法 longword_signed データ型 longword (signed) アクセス read only 受け渡し方 by reference
行書き込み後のスクロール行数。 line-advance 引数は,進める行数を格納した符号付きロングワードのアドレスです。この引数は省略可能です。rendition-set
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
属性指定子。 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 属性を無効にする。
flags
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
動作指定ビット・マスク。 flags 引数は省略可能で,フラグを格納した符号なしロングワードのアドレスです。テキストが 1 行で格納できない場合に実行する動作を指定します。この引数に対して指定できる値は次のとおりです。
0 自動改行しないことを指定します
(省略時の設定値)。SMG$M_WRAP_CHAR 行の最後の文字で自動改行します。 SMG$M_WRAP_WORD 行の最後の空白で自動改行します。
character-set
OpenVMS 用法 longword_unsigned データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
挿入されるテキストの文字集合。 character-set 引数は,文字集合コードを格納した符号なしロングワードのアドレスです。この引数を省略した場合は,SMG$CREATE_VIRTUAL_DISPLAY ルーチンまたは SMG$CHANGE_VIRTUAL_DISPLAY ルーチンで設定された値が使用されます。
値 文字集合 (コードセット) 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 漢字コードセット
SMG$PUT_LINE_HIGHWIDEルーチンは,仮想ディスプレイに,4 倍角文字のテキスト行を書き込むために使用されます。このルーチンは,現在の仮想カーソルの位置から行末まで書き込みます。テキストが1行よりも短い場合は,空白が埋め込まれます。仮想ディスプレイの右側境界を越えたテキストは,flags 引数に制御されます。 flags 引数で自動改行を指定した場合は,line-advance 引数で指定した行数だけスクロールされ,あふれた文字を次の行に挿入するための空間が作成されます。flags 引数で自動改行を指定していない場合は,あふれた文字は切り捨てられます。
SMG$PUT_LINE_HIGHWIDEルーチンを呼び出した後で,仮想カーソルの位置は出力の対象となる,次の行の 1 カラム目に設定されます。出力の対象となる次の行は,line-advance 引数によって決定されます。 line-advance 引数のシステム設定値は2になっていますので,引き続きSMG$PUT_LINE_HIGHWIDEルーチンを呼び出しても,上書きされることはありません。
DEC漢字文字集合を使用する際に,全角文字の右半分から書き込み操作が始まる場合は,その文字の左半分は未定義文字になります。また,行の一部が切り捨てられる際に,全角文字の右半分から切り捨てられる場合は,その文字の左半分は未定義文字になります。
SS$_NORMAL 正常終了。 LIB$_INVSTRDES 文字列ディスクリプタが誤っています。 SMG$_INVARG 引数が誤っています。 SMG$_WILUSERMS ペーストボードがビデオ・ターミナルではありません。 SMG$_WRONUMARG 引数の数が誤っています。
前へ | 次へ | 目次 | 索引 |