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

前へ | 次へ | 目次 | 索引

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

## 戻される状態値

> 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ルーチンを参照してください。

# SMG$CREATE_PASTEBOARD

> Create Pasteboard ルーチンはペーストボードを作成し，ペーストボード識別子を返します。

## 形式

> SMG$CREATE_PASTEBOARD pasteboard-id [,output-device] [,number-of-pasteboard-rows] [,number-of-pasteboard-columns] [,flags] [,type-of-terminal]

## 戻り値

> ###

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

## 引数

> ### pasteboard-id

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

> 新規生成されるペーストボードの識別子。 pasteboard-id 引数は，ペーストボード識別子を格納する符号なしロングワードのアドレスです。

> ### output-device

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

> ペーストボードに結びついた出力を書き出すファイル指定または論理名。 output-device 引数は，出力装置名を示すディスクリプタのアドレスです。この引数を省略した場合の値は SYS$OUTPUT です。

> 注意 日本語 SMG では，ファイルへの出力はサポートされていません。

> ### number-of-pasteboard-rows

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

> output-device 引数で指定された装置の行数。 number-of-pasteboard-rows 引数は， output-device 引数で指定された装置の行数を格納する符号付きロングワードのアドレスです。この値は，ペーストボードの行数となる場合もあります。

> ### number-of-pasteboard-columns

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

> output-device 引数で指定された装置のカラム数。 number-of-pasteboard-columns 引数は output-device 引数で指定された装置のカラム数を格納する符号付きロングワードのアドレスです。

> ### flags

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

> ペーストボードで使用される属性。 flags 引数は省略可能で，フラグを格納した符号なしロングワードのアドレスです。システムで設定されている動作では，ペーストボードが生成される時点でターミナル画面を消去します。以下の値が指定できます。

> SMG$M_KEEP_CONTENTS | 初期化時に，画面を消去しません。日本語 SMG はすべてのターミナル画面を管理する際に最良の機能を提供するため， SMG$M_KEEP_CONTENTS の使用は望ましくありません。

> ### type-of-terminal

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

> ペーストボード関連の出力が書かれる SMG 内部の装置タイプ。 type-of-terminal 引数はターミナル・タイプを格納する符号なしロングワードのアドレスです。
> 返される値は次のとおりです。

> > SMG$K_UNKNOWN
> > SMG$K_VTFOREIGN
> > SMG$K_HARDCOPY
> > SMG$K_VTTERMTABLE

> SMG$K_VTTERMTABLE 以外の値が返される場合，SMG$SNAPSHOT ルーチンを使用してペーストボードの内容を出力しなければなりません(現在の日本語 SMG では， SMG$SNAPSHOT ルーチンはサポートされていません)。

## 説明

> SMG$CREATE_PASTEBOARD ルーチンは新しいペーストボードを作成し， output-device 引数で指定された装置と結び付け，割り当てられた pasteboard-id 引数を返します。すでにペーストボードが割り当てられている装置にペーストボードが要求された場合は，このルーチンは既存のペーストボードの識別子を返し，SMG$_PASALREXI 状態コードを戻します。

> プログラムが SMG$CREATE_PASTEBOARD ルーチンと SMG$CREATE_VIRTUAL_KEYBOARD ルーチンを呼ぶ場合，SMG$CREATE_PASTEBOARD ルーチンが先に呼ばれることを確認してください。SMG$CREATE_PASTEBOARD ルーチンより先に SMG$CREATE_VIRTUAL_KEYBOARD ルーチンを呼ぶと，プログラムは正しく機能しません。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> LIB$_INSVIRMEM | 要求されたバッファを割り当てるのに必要な仮想メモリが不足しています。
> SMG$_PASALREXI | 終了。この装置にはすでにペーストボードが存在しています。
> SMG$_WRONUMARG | 引数の数が誤っています。
> その他 | LIB$GET_EF， LIB$GET_VM， $QIO， $GETDVI $ASSIGN から戻される状態値

# SMG$CREATE_SUBPROCESS

> Create and Initialize a Subprocess ルーチンは，DCL サブプロセスを生成し，そのサブプロセスを仮想ディスプレイに対応づけます。

## 形式

> SMG$CREATE_SUBPROCESS display-id [,AST-routine] [,AST-argument]

## 戻り値

> ###

> 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 ルーチンによって与えられます。

> ### AST-routine

> OpenVMS 用法 | ast_procedure
> データ型 | procedure entry mask
> アクセス | call without stack unwinding
> 受け渡し方 | by value

> 現在実行中のコマンドが終了したときに呼び出される AST ルーチン(省略可能)。 AST-routine 引数はルーチンのプロシージャ・エントリ・マスクです。

> AST ルーチンは 5 つの引数を使用して呼び出されます。最初の引数は， display-id 引数，AST-argument 引数， command-status 引数の値を格納したデータ構造を示すポインタです。 AST ルーチンに対する他の 4 つの引数は R0，R1，PC，PSL です。

AST-routine 引数を指定した場合には，SMG$EXECUTE_COMMAND ルーチンはそのルーチンに渡されたコマンドをバッファに登録し，各コマンドを順に実行し，各コマンドが終了すると，指定された AST ルーチンを呼び出します。 AST-routine 引数を指定しなかった場合には，SMG$EXECUTE_COMMAND ルーチンは，指定されたコマンドが終了するのを待ち，その後，制御をユーザに戻します。

### AST-argument

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

AST ルーチンに対して指定する引数(省略可能)。 AST-argument 引数は，AST ルーチンに渡される値を格納した符号なしロングワードです。

## 説明

> SMG$CREATE_SUBPROCESS ルーチンを使用すれば，DCL サブプロセスを生成し，このサブプロセスを仮想ディスプレイに対応づけることができます(サブプロセスは SET NOVERIFY と SET NOON の DCL コマンドを使用して初期化されます)。その後，メイン・プロセスから SMG$EXECUTE_COMMAND ルーチンを使用してサブプロセスが実行するコマンドを指定できます。

> プロセス間通信はメール・ボックスを使用して実行されます。したがって，入力コマンドと出力テキストを制御できます。コマンドをバッファに登録する場合には，オプションとして AST ルーチンを使用することにより，コマンドが終了したことをメイン・プロセスに通知します。このルーチンを使用するために，ブロードキャスト・トラッピングと要求されていない入力を禁止する必要はありません。

> サブプロセスを生成する前に，日本語 SMG は，必要なメールボックスとサブプロセスを作成するための十分な資源があるかどうかを確認します。BYTLM の残存値は少なくとも 5,000 でなければならず，PRCLM の残存値は少なくとも 1 でなければなりません。

> 日本語 SMG は，ユーザが SMG$DELETE_SUBPROCESS ルーチンを呼び出さずに処理を終了した場合，サブプロセスを削除する終了ハンドラを宣言します。しかし，場合によっては，これらの機能が提供する終了ハンドラが実行されないことがあります。この場合には，DCL の SHOW PROCESS/SUB コマンドと DCL の STOP コマンドを使用してサブプロセスを削除しなければなりません。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INSQUOCRE | サブプロセスを生成するのに必要なクォータが不足しています。
> SMG$_INVDIS_ID | display-id 引数に誤りがあります。
> SMG$_SUBALREXI | この display-id 引数に対応するサブプロセスがすでに存在します(代替正常終了状態)。
> SS$_xxxx | $GETDVI，$GETJPI，$DCLEXH，または $CREMBX から戻された状態値。
> LIB$_xxxx | LIB$SPAWN，LIB$GET_EF，LIB$GET_VM から戻された状態値。

# SMG$CREATE_VIEWPORT

> Create a Virtual Viewport ルーチンは，ビューポートを作成し，そのビューポートを仮想ディスプレイに対応づけます。ビューポートの位置とサイズは呼び出し側が指定します。

## 形式

> SMG$CREATE_VIEWPORT display-id ,viewport-row-start ,viewport-column-start ,viewport-number-rows ,viewport-number-columns

## 戻り値

> ###

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

## 引数

> ### display-id

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

> 新しく作成されるビューポートに対応づけられる，仮想ディスプレイのディスプレイ識別子。display-id 引数は，この識別子を格納した符号なしロングワードのアドレスです。

> ### viewport-row-start

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

> ビューポートの1行目となる仮想ディスプレイの行番号。 viewport-row-start 引数は，行番号を格納した符号付きロングワードのアドレスです。

> ### viewport-column-start

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

> ビューポートの1カラム目となる仮想ディスプレイのカラム番号。 viewport-column-start 引数は，カラム番号を格納した符号付きロングワードのアドレスです。

> viewport-column-start 引数で指定されたカラムが，全角文字の右半分であった場合には，そのカラムは表示されません。

> ### viewport-number-rows

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

> ビューポート内の行数。viewport-number-rows 引数は，新しく作成されるビューポート内の行数を格納した符号付きロングワードのアドレスです。

> ### viewport-number-columns

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

> ビューポート内のカラム数。viewport-number-columns 引数は，新しく作成されるビューポート内のカラム数を格納した符号付きロングワードのアドレスです。

## 説明

> SMG$CREATE_VIEWPORT ルーチンはビューポートを作成し，そのビューポートを特定の仮想ディスプレイに対応づけます。仮想ディスプレイはビューポートを作成する前に作成しておかなければならず，各仮想ディスプレイに対してビューポートを1つだけ作成できます。ビューポートを表示するには，SMG$PASTE_VIRTUAL_DISPLAY ルーチンを呼び出すことにより，仮想ディスプレイをペーストしなければなりません。仮想ディスプレイのビューポートの中に入る部分だけが表示されます。ビューポートはSMG$DELETE_VIEWPORT ルーチンを使用して削除できます。

> viewport-column-start 引数で指定されたカラムが全角文字の右半分であった場合には，そのカラムは表示されません。また，ビューポートが全角文字の左半分で終了した場合にも，そのカラムは表示されません。

## 戻される状態値

> SS$_NORMAL | 正常終了。
> SMG$_INVARG | 行数またはカラム数が0より小さい値です。
> SMG$_INVCOL | 誤ったカラム番号が指定されました。
> SMG$_INVDIS_ID | display-id 引数に誤りがあります。
> SMG$_INVROW | 誤った行番号が指定されました。
> SMG$_WINEXISTS | ビューポートはすでに仮想ディスプレイ内に存在します(代替正常終了状態)。
> SMG$_WRONUMARG | 引数の数が誤っています。

## 例

#1
    C+
    C This FORTRAN example creates two virtual displays, one
    C being a copy of the other. The initial virtual display is
    C filled and pasted to the pasteboard. The second virtual
    C display is assigned a viewport and then pasted to the
    C pasteboard. Therefore, only the section of the second
    C virtual display that falls inside the viewport is visible.
    C-
     IMPLICIT INTEGER (A-Z)
     INCLUDE '($SMGDEF)'

    C Create the Virtual Display. Give it a border.

     ROWS = 9
       COLUMNS = 32

     STATUS = SMG$CREATE_VIRTUAL_DISPLAY
         1         (ROWS, COLUMNS, DISPLAY1,SMG$M_BORDER )
     IF (.NOT. STATUS) call lib$signal(%val(STATUS))

    C Create the Pasteboard

     STATUS = SMG$CREATE_PASTEBOARD (PASTE1)
     IF (.NOT. STATUS) call lib$signal(%val(STATUS))

    C Put data in the Virtual Display

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 1, you see.', 1, 1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 2, you see.', 2, 1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 3, you see.', 3, 1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 4, you see.', 4,1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 5, you see.', 5, 1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 6, you see.', 6, 1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 7, you see.', 7, 1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 8, you see.', 8, 1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

     STATUS = SMG$PUT_CHARS ( DISPLAY1,
         1  'This is row number 9, you see.', 9, 1)
     IF (.not. STATUS) call lib$signal(%val(STATUS))

    C Paste the Virtual Display
     STATUS = SMG$PASTE_VIRTUAL_DISPLAY (DISPLAY1, PASTE1, 2, 2)
     IF (.NOT. STATUS) call lib$signal(%VAL(STATUS))

         STATUS = SMG$LABEL_BORDER (DISPLAY1, 'Full Display',,,SMG$M_BOLD)
     IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

     STATUS = SMG$COPY_VIRTUAL_DISPLAY (DISPLAY1, DISPLAY2)
     IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

     STATUS = SMG$LABEL_BORDER (DISPLAY2, 'Viewport',,,SMG$M_BOLD)
     IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS))

     STATUS = SMG$CREATE_VIEWPORT ( DISPLAY2, 3, 9, 3, 12)
     IF (.NOT. STATUS) call lib$signal(%VAL(STATUS))

     STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY2, PASTE1, 15, 20)
     IF (.NOT. STATUS) call lib$signal(%VAL(STATUS))

     END

> この FORTRAN の例では，最初の仮想ディスプレイが 2 番目の仮想ディスプレイにコピーされます。2 番目の仮想ディスプレイにはビューポートが対応づけられています。 2 番目の仮想ディスプレイをペーストすると，仮想ディスプレイの中でビューポートの内部だけが表示されます。これは 図 8-8 に示すとおりです。

> 図 8-8 ビューポートを作成することにより生成される出力

前へ | 次へ | 目次 | 索引