第[here]節のプログラム STEP1 では,x 座標値の配列を 宣言して等間隔に値を代入し,UULIN で f(x) 型の一次元図を描きま したが,これはちょっと大げさな気もします.USGRPH や UULIN などのサブルーチンで「未定義値」をうまく使うと,x または y 方向の 座標値が等間隔な f(x) や g(y)型のグラフを簡単に作図できます.
DCLでは xxpGET, xxpSET 型の内部変数管理ルーチンが多く使わ れています(いままで一度もお目にかかっていませんが). xx は通常パッ ケージの先頭2文字で,p は変数の型によって,I(整数型), R(実数型), L(論理型), C(文字型)のうちのひとつになります. 内部変数はそれぞれのパッケージ毎に数多くあり,「未定義値」'RUNDEF' もそのような実数型内部変数のひとつで,SYSLIB パッケージで管 理されています.一般に,内部変数は,あらかじめシステムが用意した値「初 期値」をデフォルトで保持しています.'RUNDEF'の場合,この値を GLRGET ルーチンによって参照し,GLRSET ルーチンによって変更 することがでます.
CP (文字型) 内部変数の名前. RPARA (実数型) 内部変数の値.
パラメータは上と同じ.
ところで,'RUNDEF' は「ユーザーが陽に指定していない」ことを表す 内部変数で,その値 RUNDEF を「未定義値」と呼びます.これまで,お まかせサブルーチンの説明で「○○が陽に指定されていなければ」というくだ りがいくつかでてきましたが,これは「○○が RUNDEF に等しい時には」 ということだったのです.この RUNDEF を USGRPH ルーチンなど の引数に用いると,x または y の座標値を「おまかせ」にすることが出 来ます.
この RUNDEF の値は初期値として -999. が与えられていますが,こ の値が不都合な時(例えば,-1000 から -999 までのグラフを描く場合な ど)は GRFRM ルーチンを.呼.ぶ.前に CALL GLRSET('RUNDEF', -999999.) などとして未定義値の値を変更しておきます.GRFRM ルー チンでこの RUNDEF を使っているからです.
次のプログラム例 U1D1 では,x 方向には [1945, 1995] の範囲で等 間隔に点をとり,y 方向には配列Yで与えられた座標値を結んで折れ 線を描きます.25行めの USGRPH ルーチンで X を指定するかわ りに RUNDEF を指定する(つまり,X は定義されていないと宣言 する)と,USGRPH は x 座標値がウインドウの幅いっぱいに等間隔に ならんでいるものと解釈してグラフを描きます.このとき,USGRPH が 呼ばれる前に x 方向のウインドウは決まっていないといけませんから, GRSWND ルーチンで x 方向だけを陽に与えています.ここでも,y 方向は未定義にして,正規化変換の確定は USGRPH におまかせします. なお,RUNDEF の値は,13行めの GLRGETルーチンで参照していま す.
u1d1.f: frame1
前節と同様に,y 方向に座標値が等間隔な場合にも,Y を指定するか わりに RUNDEF を指定します.次のプログラム U1D2 では,USSPNT, UUMRK, UULIN の各ルーチンで Y を未定義値と しています.ここでは USSPNT ルーチンを使ってウインドウを決め,ビュー ポートの設定は初期値に頼りますので,GRSTRF ルーチンの前に USPFIT を呼んでいることを再確認しておきましょう.なお,変換関数番号を 3として,片対数座標にしています.
u1d2.f: frame1
NUMAGUTI Atusi <a1n@gfdl.gov> Last Modified: Thu Aug 31 13:12:32 EDT 1995