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

前へ | 次へ | 目次 | 索引

# SMG$PUT_LINE

> 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 漢字コードセット

1DEC 補助文字集合または Latin-1 文字集合のいずれか。

### direction

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漢字または Super DEC 漢字文字集合を使用している際に，現在の仮想カーソルの位置が全角文字の右半分である場合は，その文字の左半分は未定義文字になります。また，あふれる文字が切り捨てられる際に，全角文字の右半分から切り捨てられる場合は，その文字の左半分は未定義文字になります。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> LIB$_INVSTRDES | 文字列ディスクリプタが誤っています。
> SMG$_INVDIS_ID | display-id 引数が誤っています。
> SMG$_WILUSERMS | ペーストボードがビデオ・ターミナルでありません。
> SMG$_WRONUMARG | 引数の数が誤っています。

## 例

#1
    C+
    C This 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 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

# SMG$PUT_LINE_HIGHWIDE

> 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 漢字コードセット

1DEC 補助文字集合または Latin-1 文字集合のいずれか。

## 説明

> SMG$PUT_LINE_HIGHWIDEルーチンは，仮想ディスプレイに，4 倍角文字のテキスト行を書き込むために使用されます。このルーチンは，現在の仮想カーソルの位置から行末まで書き込みます。テキストが1行よりも短い場合は，空白が埋め込まれます。

> 前へ | 次へ | 目次 | 索引