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

前へ | 次へ | 目次 | 索引

SMG$MOVE_VIRTUAL_DISPLAY ルーチンを呼び出す前に，この FORTRAN プログラムが生成する出力は， 図 8-39 に示すとおりです。

図 8-39 SMG$MOVE_VIRTUAL_DISPLAY ルーチンを呼び出す前の出力

SMG$MOVE_VIRTUAL_DISPLAY ルーチンを呼び出した後の出力は， 図 8-40 に示すとおりです。

図 8-40 SMG$MOVE_VIRTUAL_DISPLAY ルーチンを呼び出した後に表示される出力

図 8-41 は，SMG$REPASTE_VIRTUAL_DISPLAY ルーチンを呼び出した後に表示される最終的な出力を示しています。

図 8-41 SMG$REPASTE_VIRTUAL_DISPLAY ルーチンを呼び出した後に表示される出力

# SMG$REPLACE_INPUT_LINE

> Replace Input Line ルーチンは，再呼び出しバッファ内の指定された行を指定された文字列に置き換えます。

## 形式

> SMG$REPLACE_INPUT_LINE keyboard-id [,replace-string] [,line-count] [,flags] [,character-set]

## 戻り値

> ###

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

## 引数

> ### keyboard-id

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

> キーボード識別子。keyboard-id 引数は，読み取る対象となる仮想キーボードの識別子を格納した符号なしロングワードのアドレスです。

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

> ### replace-string

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

> 再呼び出しバッファに入力される行を格納した文字列。 replace-string 引数は，この文字列を指すディスクリプタのアドレスです。省略時の設定は空文字列であり，最後に入力された行を削除します。

> ### line-count

> OpenVMS 用法 | byte_unsigned
> データ型 | byte (unsigned)
> アクセス | read only
> 受け渡し方 | by reference

> 置換する行数。line-count 引数は，replace-string 引数に置換する行数を格納した符号なしバイトのアドレスです。 line-count 引数の省略時の値は 1 (最後に入力した行)です。

> ### flags

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

> 任意に実行できる動作を指定します。flags 引数は，フラグを格納した符号なしロングワードのアドレスです。指定できる値は以下のとおりです。

> SMG$M_KEEP_CONTENTS | replace-string 引数によって指定された文字列は， line-count 引数によって指定された既存の文字列と置き換えられます。このフラグをループ内で使用すれば，アプリケーションから再呼び出しバッファに情報をプリロードすることができます。

> ### character-set

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

> 文字集合指定子。再呼び出しバッファに入力される行，replace-string 引数の文字集合。character-set 引数は，文字集合コードを格納した符号なしロングワードのアドレスです。この引数を省略した場合のシステム設定値は，UNKNOWNです。

> 値 | 文字集合 (コードセット)
> --- | ---
> 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$REPLACE_INPUT_LINE ルーチンは，再呼び出しバッファ内の要求された行を指定された文字列に置き換えます。残りの行(line-count-1)は削除されます。このルーチンは行継続の処理を補助するためのものです。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> LIB$_INSVIRMEM | 仮想メモリが不足しています。
> SMG$_INVKBD_ID | keyboard-id 引数に誤りがあります。
> SMG$_WRONUMARG | 引数の数が誤っています。

## 例

#1
    !+
    ! This FORTRAN example uses the routine
    ! SMG$REPLACE_INPUT_LINE to concatenate
    ! the last 2 lines in the recall buffer.
    !-

     IMPLICIT INTEGER (A-Z)
     INCLUDE '($SMGDEF)'
     INCLUDE '($SMGMSG)'
     CHARACTER*20 TEXT, TEXT1

     WRITE (5,*) 'Enter number of lines to save.'
     READ  (5,*) R

     S = SMG$CREATE_PASTEBOARD(PBID)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$CREATE_VIRTUAL_DISPLAY(22,70,DID,SMG$M_BORDER)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$CREATE_VIRTUAL_KEYBOARD(KBID,,,,R)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$PUT_LINE(DID,'Enter lines of text:')
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$PASTE_VIRTUAL_DISPLAY(DID,PBID,2,2)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))

    !+
    ! Read in lines of text.
    !-
     DO 10 I = 1,R
         S = SMG$READ_COMPOSED_LINE(KBID,,TEXT,'Example>',,DID)
         IF (.NOT. S) CALL LIB$STOP(%VAL(S))
      10 CONTINUE

    !+
    ! Recall last 2 lines in the buffer.
    !-

     S = SMG$RETURN_INPUT_LINE(KBID,TEXT,,1,LEN)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$RETURN_INPUT_LINE(KBID,TEXT1,,2,LEN1)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     TEXT(LEN:20) = TEXT1(1:LEN1)

    !+
    ! Concatenate them and replace the last 2
    ! lines in the buffer with the new line.
    !-

     S = SMG$REPLACE_INPUT_LINE(KBID,TEXT,2)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))

    !+
    ! Recall the last line which is now the
    ! concatenated line.
    !-

     S = SMG$RETURN_INPUT_LINE(KBID,TEXT,,1)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))

     S = SMG$PUT_LINE(DID,'**** The last line of text is:')
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$PUT_LINE(DID,TEXT)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))

     END

> 以下の例はこの FORTRAN プログラムによって生成される出力を示しています。

>     $ RUN REPLACE
>     Enter number of lines to save.
>       3
>     Enter lines of text:
>     Example> PASTEBOARD
>     Example> DISPLAY
>     Example> KEYBOARD
>     ****The last line of text is:
>     KEYBOARDDISPLAY

# SMG$RESTORE_PHYSICAL_SCREEN

> Restore Physical Pasteboard ルーチンは，SMG$SAVE_PHYSICAL_SCREENルーチンを呼び出したときの状態にペーストボード・イメージを復元します。

## 形式

> SMG$RESTORE_PHYSICAL_SCREEN pasteboard-id ,display-id

## 戻り値

> ###

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

## 引数

> ### pasteboard-id

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

> 復元するペーストボードを指定します。pasteboard-id 引数は，ペーストボード識別子を格納した符号なしロングワードのアドレスです。

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

> ### display-id

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

> SMG$SAVE_PHYSICAL_SCREENルーチンによって作成された仮想ディスプレイを指定します。 display-id 引数は，この仮想ディスプレイ識別子を格納した符号なしロングワードのアドレスです。

## 説明

> SMG$RESTORE_PHYSICAL_SCREENルーチンは，SMG$SAVE_PHYSICAL_SCREENルーチンによって保存されたペーストボード・イメージを再作成します。SMG$SAVE_PHYSICAL_SCREENルーチンから戻された display-id 引数をSMG$RESTORE_PHYSICAL_SCREENルーチンに渡さなければなりません。SMG$SAVE_PHYSICAL_SCREENルーチンと SMG$RESTORE_PHYSICAL_SCREENルーチンを2回以上呼び出す場合には，呼び出しはネスティング方式で実行しなければなりません。つまり，最後に保存したペーストボードは最初に復元しなければなりません。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INVDIS_ID | display-id 引数に誤りがあります。
> SMG$_INVPAS_ID | pasteboard-id 引数に誤りがあります。

# SMG$RETURN_CURSOR_POS

> Return Cursor Position ルーチンは，指定された仮想ディスプレイの仮想カーソルの現在の位置を戻します。

## 形式

> SMG$RETURN_CURSOR_POS display-id ,start-row ,start-column

## 戻り値

> ###

> 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)
> アクセス | write only
> 受け渡し方 | by reference

> 指定された仮想ディスプレイ内の仮想カーソルの現在の行位置が書き込まれます。 start-row 引数は，現在の行位置が書き込まれる符号付きロングワードのアドレスです。

> ### start-column

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

> 指定された仮想ディスプレイ内の仮想カーソルの現在のカラム位置が書き込まれます。 start-column 引数は，現在のカラム位置が書き込まれる符号付きロングワードのアドレスです。

## 説明

> SMG$RETURN_CURSOR_POS ルーチンは，指定された仮想ディスプレイ内の仮想カーソルの現在の行位置とカラム位置を戻します。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INVDIS_ID | display-id 引数に誤りがあります。
> SMG$_WRONUMARG | 引数の数が誤っています。

# SMG$RETURN_INPUT_LINE

> The Return Input Line ルーチンは，再呼び出しバッファ内の要求された行を，呼び出し側に戻します。この行は，指定された文字列に適合させる，あるいは適切な行数を指定することによって回復します。

## 形式

> SMG$RETURN_INPUT_LINE keyboard-id ,resultant-string [,match-string] [,byte-integer-line-number] [,resultant-length] [,character-set]

## 戻り値

> ###

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

## 引数

> ### keyboard-id

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

> 仮想キーボードの識別子。 keyboard-id 引数は，読み取る対象となる仮想キーボードの識別子を格納した符号なしロングワードのアドレスです。

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

> ### resultant-string

> OpenVMS 用法 | char_string
> データ型 | character string
> アクセス | write only
> 受け渡し方 | by descriptor

> SMG$RETURN_INPUT_LINEルーチンが，最終的に作成した行を書き込む文字列。 resultant-string 引数は，生成される行が書き込まれる文字列を示すディスクリプタのアドレスです。

> ### match-string

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

> 再呼び出しする行を検索するときに使用される照合文字列。 match-string 引数は省略可能であり，この照合文字列を指すディスクリプタのアドレスです。検索操作は最後に入力した行から開始されます。

> ### byte-integer-line-number

> OpenVMS 用法 | byte_unsigned
> データ型 | byte (unsigned)
> アクセス | read only
> 受け渡し方 | by reference

> 呼び出す行を検索するときに使用される行番号。 byte-integer-line-number 引数は省略可能であり，再呼び出しする行の行番号を格納した符号なしバイトのアドレスです。最後に入力した行の行番号は1です。

> ### resultant-length

> OpenVMS 用法 | word_unsigned
> データ型 | word (unsigned)
> アクセス | write only
> 受け渡し方 | by reference

> resultant-string 文字列の長さ。読み込まれたバイト数と，resultant-string 引数の最大サイズのどちらか小さい方が書き込まれます。resultant-length 引数は，読み込まれたバイト数または最大サイズが書き込まれる符号なしワードのアドレスです。

> ### character-set

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

> 再呼び出しバッファから戻された行の文字集合。 character-set 引数は，文字集合コードを格納する符号なしロングワードのアドレスです(省略可能)。文字集合が未定義の場合には，SMG$C_UNKOWN が戻されます。

> 値 | 文字集合 (コードセット)
> --- | ---
> SMG$C_ASCII | ASCII文字集合
> SMG$C_SPEC_GRAPHICS | DEC特殊文字集合
> SMG$C_SUPPLEMENTAL | 補助文字集合 1
> SMG$C_KANJI | DEC漢字文字集合
> SMG$C_JIS_KANA | JISカタカナ文字集合
> SMG$C_UNKNOWN | 未定義文字集合
> SMG$C_SDK | Super DEC 漢字コードセット

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

## 説明

> SMG$RETURN_INPUT_LINEルーチンは，再呼び出しバッファ内の指定された行を，呼び出し側に戻します。このルーチンは，DCL 形式の "RECALL" コマンドを実現するための補助として使用されます。

> match-string 引数を指定した場合には，SMG$RETURN_INPUT_LINEルーチンは，指定された文字列と一致する行を検索し，その行を戻します。 byte-integer-line-number 引数を指定した場合には， SMG$RETURN_INPUT_LINEルーチンは，指定された行番号に対応する行を戻します。 match-string 引数と byte-integer-line-number 引数をどちらも指定した場合には，SMG$_INVARG が戻されます。match-string 引数を指定したときに，一致する文字列を検索できない場合には，SMG$_LINNOTFNDが戻されます。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INVARG | 引数に誤りがあります。
> SMG$_INVKBD_ID | keyboard-id 引数に誤りがあります。
> SMG$_LINNOTFND | 一致する行を検索できませんでした。
> SMG$_WRONUMARG | 引数の数が誤っています。
> LIB$_xxx | LIB$COPY_R_DX から戻されたエラー。

## 例

#1
    !+
    ! This FORTRAN example uses the routine
    ! SMG$RETURN_INPUT_LINE to implement a
    ! RECALL/ALL command.
    !-

     IMPLICIT INTEGER (A-Z)
     INCLUDE '($SMGDEF)'
     INCLUDE '($SMGMSG)'
     CHARACTER*20 TEXT

     WRITE (5,*) 'Enter number of lines to save.'
     READ  (5,*) R

     S = SMG$CREATE_PASTEBOARD(PBID)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$CREATE_VIRTUAL_DISPLAY(22,70,DID,SMG$M_BORDER)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$CREATE_VIRTUAL_KEYBOARD(KBID,,,,R)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$PUT_LINE(DID,'Enter lines of text:')
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$PASTE_VIRTUAL_DISPLAY(DID,PBID,2,2)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))

    !+
    ! Read in lines of text.
    !-
     DO 10 I = 1,R
         S = SMG$READ_COMPOSED_LINE(KBID,,TEXT,'Example>',,DID)
         IF (.NOT. S) CALL LIB$STOP(%VAL(S))
      10 CONTINUE

     S = SMG$PUT_LINE(DID,'**** The lines of text are:')
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
    !+
    ! Recall all lines in the buffer.
    !-
     DO 30 N = 1,R
           S = SMG$RETURN_INPUT_LINE(KBID,TEXT,,N)
         IF (.NOT. S) CALL LIB$STOP(%VAL(S))
         S = SMG$PUT_LINE(DID,TEXT)
         IF (.NOT. S) CALL LIB$STOP(%VAL(S))
      30 CONTINUE

    !+
    ! Recall the line containing 'fox'
    !-
     S = SMG$PUT_LINE(DID,'**** The line containing "fox" is:',2)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))
     S = SMG$RETURN_INPUT_LINE(KBID,TEXT,'FOX')
     IF (S .EQ. SMG$_LINNOTFND) TEXT = 'None found!'
     S = SMG$PUT_LINE(DID,TEXT)
     IF (.NOT. S) CALL LIB$STOP(%VAL(S))

     END

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