前へ | 次へ | 目次 | 索引 |
この DEC FORTRAN の例で生成される出力は以下の図に示すとおりです。 図 8-1 では,プログラムは初期仮想ディスプレイを, "Viewport" というラベルの付いた 2 番目の仮想ディスプレイにコピーしています。
図 8-1 仮想ディスプレイがペーストされた後に生成される出力
2 つの同じ仮想ディスプレイをペーストした後,プログラムは 2 番目の(コピーした) 仮想ディスプレイにビューポートを作成します。2 番目のディスプレイが "再ペースト" された後,ビューポート内の一部だけが表示される状態になります。この結果は 図 8-2 に示されています。
図 8-2 ビューポートを作成した後に生成される出力
SMG$CHANGE_VIEWPORT ルーチンを呼び出すことにより,仮想ディスプレイの中でビューポートを通じて表示される部分は変化します。これは 図 8-3 に示すとおりです。
図 8-3 SMG$CHANGE_VIEWPORT ルーチンを呼び出した後に生成される出力
Change Virtual Display ルーチンは,仮想ディスプレイのサイズ,境界,ビデオ属性を変更します。
SMG$CHANGE_VIRTUAL_DISPLAYdisplay-id [,number-of-rows] [,number-of-columns] [,display-attributes] [,video-attributes] [,character-set]
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 ルーチンによって与えられます。
number-of-rows
OpenVMS 用法 longword_signed データ型 longword (signed) アクセス read only 受け渡し方 by reference
仮想ディスプレイの新しい行数。 number-of-rows 引数は,仮想ディスプレイの行数を格納した符号付きロングワードのアドレスです。number-of-columns
OpenVMS 用法 longword_signed データ型 longword (signed) アクセス read only 受け渡し方 by reference
仮想ディスプレイの新しいカラム数。 number-of-columns 引数は,仮想ディスプレイのカラム数を格納した符号付きロングワードのアドレスです。display-attributes
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
仮想ディスプレイの属性。 display-attributes 引数は,仮想ディスプレイの属性を格納したロングワード・ビット・マスクのアドレスです。この引数に対して指定できる値は次のとおりです。
SMG$M_BORDER 境界付き仮想ディスプレイを指定します。省略した場合は,仮想ディスプレイに境界は表示されません。 SMG$M_BLOCK_BORDER ブロック形の境界付き仮想ディスプレイを指定します。省略した場合は,仮想ディスプレイに境界は表示されません。 SMG$M_DISPLAY_CONTROLS 漢字ターミナルがグラフィック文字をサポートする場合は,キャリッジ・リターンやライン・フィードなどの制御文字をグラフィック文字として表示することを指定します。 SMG$M_TRUNC_ICON 仮想ディスプレイの幅をこえる行を切り捨てた際に,その場所にアイコン(通常は菱形)を表示することを指定します。
video-attributes
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
仮想ディスプレイの出力に適用される属性のシステム設定値。
video-attributes 引数は,ビデオ属性マスクを格納した符号なしロングワードの
アドレスです。特定の出力ルーチンを呼び出さない限り,仮想ディスプレイのすべての出力に適用されます。たとえば,属性を指定して SMG$PUT_CHARS を呼び出した場合は,レンディションのシステム設定値は無効になります。
この引数に対して指定できるビットは次のとおりです。
SMG$M_BLINK 点滅する文字を表示します。 SMG$M_BOLD 通常の輝度より高い輝度で文字を表示します。 SMG$M_REVERSE 文字を反転表示します。つまり,仮想ディスプレイの現在の省略時の属性とは逆の状態で表示します。 SMG$M_UNDERLINE 下線を付けた文字を表示します。 SMG$M_INVISIBLE 表示されない文字を指定します。つまり,仮想ディスプレイに存在していても,ペーストボードに表示されない文字を指定します。 SMG$M_USER1 から SMG$M_USER8 ユーザ定義属性を表示します。
1回の呼び出しで複数の属性の組み合わせを指定できます。他のビットはすべて DEC が使用するために予約されており,0 でなければなりません。
character-set
OpenVMS 用法 longword_unsigned データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
仮想ディスプレイに対する文字集合のシステム設定値。 character-set 引数は,文字集合指定子を格納した符号なしロングワードのアドレスです。
値 | 文字集合 (コードセット) |
---|---|
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$CHANGE_VIRTUAL_DISPLAY ルーチンは,既存の仮想ディスプレイのサイズまたはシステム設定値の属性を変更します。仮想ディスプレイのサイズを変更する場合は,日本語 SMG は新しいサイズ(1行目/1カラム目から始まる)に適合するように,仮想ディスプレイに関連するテキストを再マップします。仮想ディスプレイの新しいサイズが前のサイズより小さい場合は,一部のテキストが切り捨てられる可能性があります。全角文字の右半分が切り捨てられた場合は,その文字の左半分は未定義文字になります。仮想ディスプレイの新しいサイズが前のサイズより大きい場合は,テキストの右側に空白が挿入されることがあります。
仮想ディスプレイのサイズを変更した場合は,仮想ディスプレイの仮想カーソルは, 1行目,1カラム目に移動されます。ラベル付き境界を仮想ディスプレイで使用する際に,サイズの変更された仮想ディスプレイ上にラベルを表示できない場合は,ラベルは削除されます。
オリジナルの SMG ルーチンは,ASCII文字集合と DEC特殊文字集合のみをサポートします。日本語 SMG ではこの他に SMG$C_SUPPLEMENTAL,SMG$C_KANJI,SMG$C_JIS_KANA, SMG$C_SDK が指定できます。
SS$_NORMAL 正常終了。 LIB$_INSVIRMEM 要求されたバッファを再び割り当てるために必要な仮想メモリが不足しています。 SMG$_INVARG ビデオ属性または仮想ディスプレイの属性に誤りがあります。 SMG$_INVDIS_ID display-id 引数が誤っています。 SMG$_WRONUMARG 引数の数が誤っています。
Check for Occlusion ルーチンは,仮想ディスプレイが別の仮想ディスプレイによって覆われているかどうかを確認します。
SMG$CHECK_FOR_OCCLUSION display-id ,pasteboard-id ,occlusion-state
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 ルーチンによって与えられます。
pasteboard-id
OpenVMS 用法 identifier データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
確認したいペーストボードを指定します。pasteboard-id 引数は,ペーストボード識別子を格納した符号なしロングワードのアドレスです。この引数は SMG$CREATE_PASTEBOARD ルーチンによって与えられます。occlusion-state
OpenVMS 用法 longword_signed データ型 longword (signed) アクセス write only 受け渡し方 by reference
ディスプレイが重なっているかどうかを示す値が書き込まれます。
occlusion-state 引数は,重なっているかどうかを示す状態が書き込まれる符号付きロングワードのアドレスです。ディスプレイが重なっている場合には, occlusion-state 引数は 1 に設定され,指定されたペーストボードでディスプレイが重なっていない場合には 0 に設定されます。プロシージャが SS$_NORMAL を戻さなかった場合には,occlusion-state 引数の内容は未定義です。
SMG$CHECK_FOR_OCCLUSION ルーチンは,指定された仮想ディスプレイを指定されたペーストボードにペーストしたときに,その仮想ディスプレイが別の仮想ディスプレイと重なり合っているかどうかを確認します。
SS$_NORMAL 正常終了。 SMG$_INVDIS_ID display-id 引数に誤りがあります。 SMG$_INVPAS_ID pasteboard-id 引数に誤りがあります。 SMG$_NOTPASTED 仮想ディスプレイが指定されたペーストボードにペーストされていません。 SMG$_WRONUMARG 引数の数が誤っています。
#1 |
---|
C+ C This DEC FORTRAN example program demonstrates the use of C SMG$CHECK_FOR_OCCLUSION. C C This routine creates a virtual display and writes it to the C pasteboard. Data is placed in the virtual display using SMG$PUT_CHARS. C- INTEGER SMG$CREATE_VIRTUAL_DISPLAY, SMG$CREATE_PASTEBOARD INTEGER SMG$PASTE_VIRTUAL_DISPLAY, SMG$PUT_CHARS INTEGER SMG$CHECK_FOR_OCCLUSION INTEGER DISPLAY1, DISPLAY2, PASTE1, PASTE2, ROWS, COLUMNS, BORDER INTEGER OCCLUSION, STATUS CHARACTER*29 TEXT C+ C Include the SMG definitions. In particular, we want SMG$M_BORDER. C- INCLUDE '($SMGDEF)' C+ C Create two virtual displays using SMG$CREATE_VIRTUAL_DISPLAY. C Give them borders. C- ROWS = 6 COLUMNS = 50 STATUS = SMG$CREATE_VIRTUAL_DISPLAY 1 (ROWS, COLUMNS, DISPLAY1, SMG$M_BORDER) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) ROWS = 5 COLUMNS = 30 STATUS = SMG$CREATE_VIRTUAL_DISPLAY 1 (ROWS, COLUMNS, DISPLAY2, SMG$M_BORDER) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Create the pasteboard using SMG$CREATE_PASTEBOARD. C- STATUS = SMG$CREATE_PASTEBOARD (PASTE1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Use SMG$PUT_CHARS to put data into the virtual displays. C- STATUS = SMG$PUT_CHARS ( DISPLAY1, 1 ' This virtual display has 6 rows and 50 columns.', 2, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1, 1 ' This is a bordered virtual display.', 3, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1, 1 ' SMG$PUT_CHARS puts data in this virtual display.', 4, 1 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1, 1 ' This text should be partially occluded.', 5, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY1, 1 ' So should part of this row.', 6, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY2, ' This is virtual', 3, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY2, 1 ' display #2.', 4, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PUT_CHARS ( DISPLAY2, 1 ' This is just some more text.', 5, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Use SMG$PASTE_VIRTUAL_DISPLAY to paste the virtual display. C- STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY1, PASTE1, 4, 15) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) STATUS = SMG$PASTE_VIRTUAL_DISPLAY ( DISPLAY2, PASTE1, 8, 15) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) C+ C Check the two virtual displays for occlusion by calling C SMG$CHECK_FOR_OCCLUSION. C- TEXT = 'This display is not occluded.' STATUS = SMG$CHECK_FOR_OCCLUSION (DISPLAY1, PASTE1, OCCLUSION) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) IF (OCCLUSION .EQ. 0) THEN STATUS = SMG$PUT_CHARS (DISPLAY1, TEXT, 1, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) ELSE STATUS = SMG$PUT_CHARS (DISPLAY1, 'Occluded.', 1 , 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) END IF STATUS = SMG$CHECK_FOR_OCCLUSION (DISPLAY2, PASTE1, OCCLUSION) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) IF (OCCLUSION .EQ. 0) THEN STATUS = SMG$PUT_CHARS (DISPLAY2, TEXT, 1, 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) ELSE STATUS = SMG$PUT_CHARS (DISPLAY2, 'Occluded.', 1 , 1) IF (.NOT. STATUS) CALL LIB$SIGNAL(%VAL(STATUS)) END IF END |
この FORTRAN プログラムから生成される出力は 図 8-4 に示すとおりです。
図 8-4 SMG$CHECK_FOR_OCCLUSION ルーチンを呼び出す FORTRAN プログラムが生成する出力
Control Mode ルーチンはペーストボードのモードを制御します。これには,バッファ操作,画面更新,ペーストボード削除時のターミナル画面の消去,ターミナル画面管理のためのタブの使用が含まれます。
SMG$CONTROL_MODE pasteboard-id [,new-mode] [,old-mode] [,buffer-size]
OpenVMS 用法 cond_value データ型 longword (unsigned) アクセス write only 受け渡し方 by value
pasteboard-id
OpenVMS 用法 identifier データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
変更されるペーストボードを指定します。 pasteboard-id 引数は,ペーストボード識別子を格納した符号なしロングワードのアドレスです。この引数は SMG$CREATE_PASTEBOARD ルーチンによって与えられます。
new-mode
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス read only 受け渡し方 by reference
制御モードの新設定。 new-mode 引数は省略可能で,設定モードを格納した符号なしロングワード・ビット・マスクのアドレスです。ビットを 1 に設定すると各モードが設定され,0 に設定すると解除されます。この引数に対して指定できる値は次のとおりです。
SMG$M_BUF_ENABLED バッファリングを行います。 SMG$M_CLEAR_SCREEN ペーストボードが消去されずにプログラムが終了した際にターミナル画面を消去します。 SMG$M_MINUPD 更新を最小限にします(省略時の設定値)。 SMG$M_NOTABS 日本語 SMG がターミナル画面管理を行う際にタブを使わないようにします。 SMG$M_PROTECT ペーストボード操作を AST 割り込みから保護します(省略時の設定値)。
他のビットはすべて DEC が使用するために予約されており,0 でなければなりません。
old-mode
OpenVMS 用法 mask_longword データ型 longword (unsigned) アクセス write only 受け渡し方 by reference
制御モードの旧設定。 old-mode 引数は省略可能で,旧設定モードが書き込まれる符号なしロングワード・ビット・マスクのアドレスです。このプロシージャが呼ばれる前に使われていた設定モードです。ビットが 1 の場合は各モードが設定されており,0 の場合は設定されていません。buffer-size
OpenVMS 用法 word_unsigned データ型 word (unsigned) アクセス read only 受け渡し方 by reference
バッファ・サイズ(バイト長)。 buffer-size 引数は省略可能で,バッファ・サイズを格納した符号なしワードのアドレスです。buffer-size 引数はバッファリング可能 (SMG$M_BUF_ENABLEDの指定がある)な場合に適用されます。システム設定値である最小バッファ・サイズは 256 バイトです。最大バッファ・サイズは 65535 バイトです。buffer-size 引数の値は UAF 値に依存し,その最大値は SYSGEN パラメータ(MAXBUF)によって決まります。
SMG$CONTROL_MODE ルーチンを使用することにより,指定したペーストボード・モードに対する日本語 SMG 操作の設定モードを得たり,その設定値を変更することができます。また,new-mode 引数と old-mode 引数を組み合わせて,次のような場合に使用することができます。
- 現在の設定モードに関する情報を得る場合
《形式》 SMG$CONTROL_MODE (pasteboard_id ,,old_mode)
- 現在の設定モードとは関係なくモードを設定する場合
《形式》 SMG$CONTROL_MODE (pasteboard_id ,new_mode)
- 現在の設定を保存して新モードを設定した後で,旧設定を復元する場合
《形式 1 》 SMG$CONTROL_MODE (pasteboard_id ,new_mode ,old_mode)
この形式では,現在のモード設定を保存し new-mode 引数に従って新モードを設定します。
この後で旧設定を復元する場合は次の形式を指定してください。以前に保存した設定に従って新モードを設定します。
《形式 2 》 SMG$CONTROL_MODE (pasteboard_id ,old_mode)
注意
old-mode 引数と new-mode 引数の両方を省略した場合には情報は与えられません。
SMG$CONTROL_MODE ルーチンを使用することにより,次のモードに関して,情報を得たり変更を加えることができます。
- バッファリング
このモードでは効率的なシステム QIO を使用するために,日本語 SMG はすべての出力をバッファに格納します。バッファが一杯になった時点で日本語 SMG はバッファを漢字ターミナルに書き込みます。また,SMG$FLUSH_BUFFER ルーチンを呼び出すことにより,漢字ターミナルに書き込まれていないペーストボード・バッファの内容をターミナル画面に出力することができます。
- 最小限の画面更新
日本語 SMG のシステム設定では,漢字ターミナルに出力する文字数を最小限におさえます。これは,日本語 SMG がペーストボードの現在の内容と新しい内容を比べ,変更のあった文字だけを送り出しているからです。この機能を使用しない場合は,変更を加える文字だけではなく,その文字を含む行が書き換えられます。その際には,変更される最初の文字以降が書き換えられます。
- 画面消去
日本語 SMG のシステム設定値では,ペーストボードが削除されずにプログラムが終了した場合,ターミナル画面は消去されません。システム設定による動作を変更するために,このモードを使用します。
- タブ解除
このモードが設定されている場合は,漢字ターミナルのタブ設定は使用されません。このモードが設定されていない場合には,最小限の画面更新プロシージャに漢字ターミナルのタブ機能が使用されます。ただし,タブ・ストップの設定は DIGITAL の標準位置(8カラムごと)が仮定されています。漢字ターミナルのタブ設定に依存せずにアプリケーションを使用したい場合は "no tabs" に指定してください。省略時にはビットはクリアされています。ターミナル設定で SET TERM/NOTABS と指定すると,システム設定値は使用されません。
SS$_NORMAL 正常終了。 SMG$_INVARG 引数が誤っています。下記に相当しないビットが new-mode 引数に設定されているか,またはバッファ・サイズが 256 バイト以下です。 SMG$M_BUF_ENABLED
SMG$M_MINUPD
SMG$M_CLEAR_SCREEN
SMG$M_NOTABSSMG$_INVPAS_ID pasteboard-id 引数が誤っています。 SMG$_WRONUMARG 引数の数が誤っています。
前へ | 次へ | 目次 | 索引 |