# OpenVMS
ユーザーズ・マニュアル

前へ | 次へ | 目次 | 索引

## A.11.6 大文字と小文字を正確に区別する検索の設定

検索処理では，EVE の大文字と小文字の区別の規則に従います。検索時の大文字と小文字の区別について設定するには， SET FIND コマンドをEVE 初期化ファイルに入れます。たとえば，次の EDT コマンドと EVE コマンドはほとんど同じです。

EDT の場合:

    SET SEARCH EXACT

EVE の場合:

    SET FIND CASE EXACT

これらのコマンドは，全く同じわけではありません。EVE では，発音区別符号は検索文字列に入力されたとおりに常に正確に照合されるからです。

## A.11.7 EDT マクロから DECTPU プロシージャへの変換

EDT マクロの代わりに DECTPU プロシージャを使用します。プロシージャを含むバッファを作成し， EXTEND コマンドを使用して EXTEND コマンドとともにプロシージャをコンパイルします。または，プロシージャを DECTPU コマンド・ファイルに入れ， /COMMAND 修飾子を使用して EVE を起動します。どちらの場合にも，コンパイルされたプロシージャをセクション・ファイルにセーブすることができます。

LEARN コマンドを使用して，対応する EVE コマンドを 1 つのキーに結合することもできます。その後，キー定義をセクション・ファイルにセーブできます。別の方法として，対応する EVE コマンドを初期化ファイルに入れることもできます。

次の例は，EDT スタートアップ・ファイルから DECTPU プロシージャに変換されたマクロを示しています。それぞれ，新しいコマンド WIDEN を作成します。このコマンドは，表示を132 桁に設定し，右マージンを 120 に設定します。

EDT マクロ:

    FIND =WIDEN
    INSERT;SET SCREEN 132
    INSERT;SET WRAP 120
    FIND =MAIN.

DECTPU プロシージャ:

    PROCEDURE EVE_WIDEN;
       EVE_SET_WIDTH (132);
       EVE_SET_RIGHT_MARGIN (120);
    ENDPROCEDURE;

マクロまたはプロシージャを実行するには，次のコマンドを使用します。

EDT の場合:

    * DEFINE MACRO WIDEN
    * WIDEN

EVE の場合:

    Command: EXTEND EVE WIDEN
    Command: WIDEN

## A.11.8 EDT 非キーパッド文から DECTPU プロシージャへの変換

通常は，非キーパッド指定子を使用する EDT マクロおよびキー定義を DECTPU プロシージャまたは学習シーケンスに変換できます。次の例は，非キーパッド・モードを使用する EDT キー定義と，対応する DECTPU プロシージャおよびキー定義を示しています。どちらも，数値キーパッド上のコンマを現在の文字と前の文字を交換して入れ換えるためのキーとして定義します。 EDT 非キーパッド文の --C は，DECTPU プロシージャでは MOVE_HORIZONTAL (--1) に変換されます。

EDT の場合:

    DEFINE KEY 19 AS "-C D1C +C UNDC."

DECTPU の場合:

    PROCEDURE USER_TRANSPOSE
       LOCAL  SWAP_THIS;

       SWAP_THIS  :=  ERASE_CHARACTER (1);

       MOVE_HORIZONTAL (-1);
       EVE$INSERT_TEXT (SWAP_THIS);
       RETURN (TRUE);
    ENDPROCEDURE;

    EVE$DEFINE_KEY ("USER_TRANSPOSE", COMMA, , EVE$X_USER_KEYS);

## A.11.9 WPS キーパッド・ルーラ・キーの使用

EDTキーパッドを設定しても，EDT スタイルのタブ調整のためのキーは定義されません。ただし，WPS キーパッド Ruler キー (GOLD R) としてのキーを定義して，タブ・ストップを追加または削除するためにそのルーラを使用することによって，同じような効果を得ることができます。

たとえば，次のコマンドは F20 を WPS Ruler キーとして定義します。 WPS キーパッドを有効にする必要はありません。

    Command: DEFINE KEY= F20  WPS GOLD-R

この後にタブ・ストップを追加または削除するには，次の手順に従ってください。

手順 | 操作
--- | ---
1 | Ruler キーとして定義したキーを押す。 現在のウィンドウの最下部 (ウィンドウのステータス・ラインのすぐ上) にルーラが表示される。カーソルはルーラ内に表示される。タブ・ストップは Tでマークされる。
2 | タブ・ストップを追加または削除したい位置にカーソルを置く。たとえば，ルーラ内の特定の桁まで移動するには左および右の矢印キーを押し，ルーラ内の次のタブ・ストップ( T)に移動するには， Tab キーを押す。
3 | タブ・ストップを設定したい位置で T または t を入力する。タブが既にそこにある場合は，そのタブ・ストップが削除される。新しいタブ・ストップは編集中のバッファにすぐに適用される。
4 | その他のタブ・ストップを追加または削除するには，手順 2 と 3 を繰り返す。
5 | ルーラを終了して編集を再開するには，Return キーまたは GOLD Return を押す。

WPS Ruler キーについての詳細は，ルーラ内でカーソルを移動するためのキーの一覧も含めて，『Guide to the Extensible Versatile Editor』の SET KEYPAD WPS コマンドの説明を参照してください。

# 付録 B
文字セット

この付録では，次の文字セットについて説明します。

- DEC 各国語文字セット

- DCL 文字セット

注意 Extended File Specifications のある環境で作業をしている場合，利用できる文字セットの詳細については『OpenVMS Extended File Specifications の手引き』を参照してください。

# B.1 DEC 各国語文字セット

DEC 各国語文字セットは，256 文字からなる 8 ビット文字セットで，最初の 128 文字が ASCII 文字セットに対応します。それぞれの文字は，0 〜 255 の 10 進値を持っています。

## B.1.1 ASCII 文字セット

付録 B.1.2 項 は ASCII 文字セット (0 〜 127 の 10 進値を持つ文字) を表しています。番号が付いたそれぞれの列の左側には， VTxxx シリーズ・ターミナルやワークステーションで入力するときの文字またはプリンタで出力される文字 (印刷不可能な文字を除く) が示されています。それぞれの列の右側には，バイトの 2 進値が示されており，値は 8 進数，10 進数，16 進数の 3 つの基数で表されます。

たとえば，大文字の A は，ASCII 規則では， 16 進数の 41 (ビット構成は 01000001) という値を持ち，これは 8 進数の 101，10 進数の 65 に相当します。 DCL は 16 進値を使用して文字列比較を行います (文字列比較については， 第 14 章 を参照してください)。

## B.1.2 ASCII 文字セット，第 1 部

次の図は，DEC 各国語文字セットの前半部分を示しています。

## B.1.3 ASCII 文字セット，第 2 部

次の図は，DEC 各国語文字セットの後半部分を表しています (10 進値の 128 〜 255 を持つ文字)。番号が付いたそれぞれの列の左側には， VT300 または VT200 シリーズ・ターミナルやプリンタに出力される文字が示されています (これらの文字は VT100 シリーズ・ターミナルでは表示できません)。

# B.2 DCL 文字セット

表 B-1 は，DCL 文字セットの文字の一覧です。

表 B-1 DCL 文字セット
シンボル | 名前 | 意味
--- | --- | ---
@ | アットマーク | コマンド・プロシージャ・ファイルの内容をコマンド入力ストリームに収める。
: | コロン | ファイル指定の中のデバイス名の区切り文字。ダブルコロン (::) はノード名区切り文字。コロンは修飾子区切り文字としても使用でき，修飾子名とその値とを分割する。
/ | スラッシュ | 修飾子の接頭辞。
+ | プラス記号 | パラメータのセパレータ。一部のコマンドでは，パラメータの連結子として働く。文字列連結演算子，単項プラス記号，数値式の中の補足演算子としても認識される。
, | コンマ | パラメータまたは引数リストのリスト要素のセパレータ。
- | ハイフン | 継続文字。文字列分割演算子，単項マイナス記号，数値式の中の減算演算子，およびディレクトリ検索ワイルドカード文字としても認識される。
( ) | 括弧 | 引数リストのリスト区切り文字。数値式の中で演算順序を示すときにも使用される。
[ ] | 大括弧 | ファイル指定の中のディレクトリ名の区切り文字。山括弧に等しい。
<> | 山括弧 | ファイル指定の中のディレクトリ名の区切り文字。大括弧に等しい。
? | 疑問符 | ヘルプ文字。
& | アンパサンド | 実行時置換演算子。これ以外の場合には，予備の特殊文字。
\ | バックスラッシュ | 予備の特殊文字。
= | 等号 | 修飾子値の区切り文字。修飾子名と引数とを分割する。等号 (=) は，シンボル定義での割り当て文としても利用される。
^ | サーカンフレックス | 予備の特殊文字。
# | 番号記号 | 予備の特殊文字。
* | アスタリスク | ファイル指定の中のワイルドカード文字。数値式の中の乗算演算子ならびにシンボル定義の中の短縮形区切り文字としても使用される。
' | 一重引用符 | 置換演算子。
. | ピリオド | ファイル指定の中のファイル・タイプとバージョン番号区切り文字。サブディレクトリ区切り文字としても使用される。
; | セミコロン | ファイル指定の中のバージョン番号区切り文字。
% | パーセント記号 | ファイル指定の中のワイルドカード文字。基数演算子としても使用される。
! | 感嘆符 | コメントを示す。
" | 二重引用符 | リテラル文字列区切り文字。

# 付録 C
コマンド・プロシージャの例

ここでは， 第 15 章 ， 第 16 章 ，および 第 17 章 で説明した概念と手法について実際のコマンド・プロシージャを示しながら説明します。 1 つの節で 1 つのコマンド・プロシージャを解説します。コマンド・プロシージャごとに次の内容を示します。

- プロシージャの概要

- プロシージャの例

- プロシージャで使用される概念と手法に関する説明

- プロシージャの実行例の結果

# C.1 CONVERT.COM コマンド・プロシージャ

このコマンド・プロシージャは，(これ以降の時間の) 絶対時刻をデルタ時間に変換し，現在の時刻とユーザが指定した時刻との差を示します。このプロシージャは，F$TIME と F$CVTIME レキシカル関数の使用方法と，割り当て文を使用して算術計算を行ったりシンボル値を連結する方法を示します。

例: CONVERT.COM

    $ ! Procedure to convert an absolute time to a delta time.
    $ ! The delta time is returned as the global symbol WAIT_TIME.
    $ ! P1 is the time to be converted.
    $ ! P2 is an optional parameter - SHOW - that causes the
    $ ! procedure to display WAIT_TIME before exiting
    $ !
    $ ! Check for inquiry
    $ !
    $ IF P1 .EQS. "?" .OR. P1 .EQS. "" THEN GOTO TELL          (1)
    $ !
    $ ! Verify the parameter:  hours must be less than 24
    $ !                        minutes must be less than 60
    $ !                        time string must contain only hours
    $ !                        and minutes
    $ !
    $ ! Change error and message handling to
    $ ! use message at BADTIME
    $ !
    $ ON WARNING THEN GOTO BADTIME                             (2)
    $ SAVE_MESSAGE = F$ENVIRONMENT("MESSAGE")
    $ SET MESSAGE/NOFACILITY/NOIDENTIFICATION/NOSEVERITY/NOTEXT
    $ TEMP = F$CVTIME(P1)
    $ !
    $ ! Restore default error handling and message format
    $ ON ERROR THEN EXIT
    $ SET MESSAGE'SAVE_MESSAGE'
    $ !
    $ IF F$LENGTH(P1) .NE. 5 .OR. -                            (3)
            F$LOCATE(":",P1) .NE. 2 -
            THEN GOTO BADTIME
    $ !
    $ ! Get the current time
    $ !
    $ TIME = F$TIME()                                          (4)
    $ !
    $ ! Extract the hour and minute fields from both the current time
    $ ! value (TIME) and the future time (P1)
    $ !
    $ MINUTES = F$CVTIME(TIME,"ABSOLUTE","MINUTE")       ! Current minutes (5)
    $ HOURS = F$CVTIME(TIME,"ABSOLUTE","HOUR")           ! Current hours
    $ FUTURE_MINUTES = F$CVTIME(P1,"ABSOLUTE","MINUTE")  ! Minutes in future time
    $ FUTURE_HOURS = F$CVTIME(P1,"ABSOLUTE","HOUR")      ! Hours in future time
    $ !
    $ !
    $ ! Convert both time values to minutes
    $ ! Note the implicit string to integer conversion being performed
    $ !
    $ CURRENT_TIME = HOURS*60 + MINUTES                        (6)
    $ FUTURE_TIME = FUTURE_HOURS*60 + FUTURE_MINUTES
    $ !
    $ ! Compute difference between the future time and the current time
    $ ! (in minutes)
    $ !
    $ !
    $ MINUTES_TO_WAIT = FUTURE_TIME - CURRENT_TIME             (7)
    $ !
    $ ! If the result is less than 0 the specified time is assumed to be
    $ ! for the next day; more calculation is required.
    $ !
    $ IF MINUTES_TO_WAIT .LT. 0 THEN -                         (8)
            MINUTES_TO_WAIT = 24*60 + FUTURE_TIME - CURRENT_TIME
    $ !
    $ ! Start looping to determine the value in hours and minutes from
    $ ! the value expressed all in minutes
    $ !
    $       HOURS_TO_WAIT = 0
    $ HOURS_TO_WAIT_LOOP:                                      (9)
    $       IF MINUTES_TO_WAIT .LT. 60 THEN GOTO FINISH_COMPUTE
    $       MINUTES_TO_WAIT = MINUTES_TO_WAIT - 60
    $       HOURS_TO_WAIT = HOURS_TO_WAIT + 1
    $       GOTO HOURS_TO_WAIT_LOOP
    $ FINISH_COMPUTE:
    $ !
    $ ! Construct the delta time string in the proper format
    $ !
    $ WAIT_TIME == F$STRING(HOURS_TO_WAIT)+ ":" + F$STRING(MINUTES_TO_WAIT)- (10)
      + ":00.00"
    $ !
    $ ! Examine the second parameter
    $ !
    $ IF P2 .EQS.  "SHOW" THEN SHOW SYMBOL WAIT_TIME           (11)
    $ !
    $ ! Normal exit
    $ !
    $ EXIT
    $ !
    $ BADTIME:                                                 (12)
    $ ! Exit taken if first parameter is not formatted correctly
    $ ! EXIT command returns but does not display error status
    $ !
    $ SET MESSAGE'SAVE_MESSAGE'
    $ WRITE SYS$OUTPUT  "Invalid time value: ",P1,", format must be hh:mm"
    $ WRITE SYS$OUTPUT "Hours must be less than 24; minutes must be less than 60"
    $ EXIT %X10000000
    $ !
    $ !
    $ TELL:                                                    (13)
    $ ! Display message and exit if user enters inquiry or enters
    $ ! an illegal parameter
    $ !
    $ TYPE SYS$INPUT
            This procedure converts an absolute time value to
            a delta time value.  The absolute time must be in
            the form hh:mm and must indicate a time in the future.
            On return, the global symbol WAIT_TIME contains the
            converted time value.  If you enter the keyword SHOW
            as the second parameter, the procedure displays the
            resulting value in the output stream. To invoke this
            procedure, use the following syntax:

                           @CONVERT hh:mm [SHOW]
    $ EXIT

CONVERT.COM コマンド・プロシージャの説明

1. パラメータが省略されたのか，またはパラメータとして入力された値が疑問符 (?) なのかをチェックする。いずれの場合も，プロシージャは TELL ラベルに分岐する。

2. F$CVTIME 関数を使用して，時間値が有効な 24 時間形式の時刻を示しているかどうかをチェックする。 F$CVTIME は，入力時間が有効でないと警告メッセージを戻す。 F$CVTIME 関数がエラーを戻す場合には，省略時の ON アクションを変更して，BADTIME ラベルに制御を渡す。
   プロシージャは，F$ENVIRONMENT 関数を使用して現在のメッセージ設定値をセーブしてから，警告メッセージやエラー・メッセージが表示されないようにメッセージ形式を設定する。時間値をチェックしたら，省略時の ON 状態とメッセージ形式を復元する。

3. パラメータの形式をチェックする。次の形式の時間値でなければならない。

       hh:mm

   IF コマンドは，(1) 入力された値の長さが 5 文字であるかどうか， (2) 3 番目の文字 (オフセット 2) がコロンであるかどうかをチェックする。 IF コマンドには論理 OR 演算子が含まれているため，いずれかの式が真の場合 (すなわち，値の長さが 5 文字でないか，3 番目の文字の位置にコロンがない場合) には，プロシージャはBADTIME ラベルに分岐する。

4. F$TIME レキシカル関数が現在の時間値を TIME シンボルに収める。

5. F$CVTIME 関数が現在の時間 (TIME シンボルにセーブされている)から "minute" と "hour" フィールドを取り出してから，変換したい時間から "minute" と "hour" フィールドを取り出す。

6. この割り当て文は，現在の時間と将来の時間を分に変換する。割り当て文の中でシンボル MINUTES，HOURS，FUTURE_HOURS，およびFUTURE_MINUTES を使用すると，これらの値は自動的に整数に変換される。

7. ここで，将来の時間 (分) から現在の時間 (分) を減算する。

8. この結果が 0 未満の場合には，将来の時間は翌日になると解釈される。この場合，プロシージャは，これ以降の時間に 24 時間を加算してから現在の時間を減算する。

9. プロシージャはループに入り，その中で MINUTES_TO_WAIT の値から時間数を計算する。ループを通過するたびに，MINUTES_TO_WAIT が60 より大きいかどうかをチェックする。 60 より大きい場合には，MINUTES_TO_WAIT から 60 を減算してから，時間数のアキュムレータ(HOURS_TO_WAIT) に 1 を加算する。

10. ループを終了すると，プロシージャは時間値と分値を時間文字列に連結する。シンボル HOURS_TO_WAIT と MINUTES_TO_WAIT はそれと同値の文字列に置き換えられ，間にコロンが置かれる。これによって得られた文字列は，これ以降の時間のデルタ時間が収められる WAIT_TIME シンボルに割り当てられる。 WAIT_TIME はグローバル・シンボルとして定義されているため， CONVERT.COM プロシージャが終了しても削除されない。

11. 2 番目のパラメータである SHOW が入力された場合には，結果の時間値を表示し，入力されなかった場合には，プロシージャが終了する。

12. BADTIME ラベルでは，プロシージャは，間違って入力された値と正しい形式を示すエラー・メッセージを表示する。エラー・メッセージを出した後，CONVERT.COM が終了する。 EXITコマンドは，上位桁が 1 に設定されたエラー状態を戻すため，エラー・メッセージは表示されない。
    プロシージャは，EXIT コマンドでエラー状態を明示的に指定するため，ユーザは別のプロシージャの中から CONVERT.COM を実行できる。 CONVERT.COM が完了すると，呼び出し側プロシージャは時間が正しく変換されたかどうかを判別できる。

13. TELL ラベルでは，プロシージャの実行内容を表示する。 TYPE コマンドは，入力データ・ストリームの SYS$INPUT にリストされた行を表示する。

CONVERT.COM コマンド・プロシージャの実行結果例

    $ SHOW TIME
    10-JUN-1996 10:38:26
    $ @CONVERT 12:00 SHOW
       WAIT_TIME = "1:22:00.00"

SHOW TIME コマンドは，現在の日時を表示します。 CONVERT.COM はパラメータ 12:00 と SHOW を指定して実行されます。プロシージャは，絶対時刻 12:00 をデルタ値に変換して，それをターミナルに表示します。

前へ | 次へ | 目次 | 索引