第 4 章 おまかせ一次元図
第2.2節のプログラムSTEP1 では, x 座標値の配列を宣言して等間隔に値を代入し, UULIN でf (x) 型の一 次元図を描きましたが, これはちょっと大げさな気もします. USGRPH やUULIN などのサブルーチンで「未 定義値」をうまく使うと, x またはy 方向の座標値が等間隔なf (x) やg(y) 型のグラフを簡単に作図でき ます.

4.1 基本概念(5): 内部変数 「未定義値」

DCL ではxxpGET, xxpSET 型の内部変数管理ルーチンが多く使われています(いままで一度もお目にかかっ ていませんが). xx は通常パッケージの先頭2 文字で, p は変数の型によって, I(整数型), R(実数型), L(論 理型), C(文字型) のうちのひとつになります. 内部変数はそれぞれのパッケージ毎に数多くあり, 「未定義 値」'RUNDEF' もそのような実数型内部変数のひとつで, SYSLIB パッケージで管理されています. 一般に, 内部変数は, あらかじめシステムが用意した値「初期値」をデフォルトで保持しています. 'RUNDEF' の場 合, この値を GLRGET ルーチンによって参照し, GLRSET ルーチンによって変更することがでます.

ところで, 'RUNDEF' は「ユーザーが陽に指定していない」ことを表す内部変数で, その値RUNDEF を「未 定義値」と呼びます. これまで, おまかせサブルーチンの説明で「○○が陽に指定されていなければ」とい うくだりがいくつかでてきましたが, これは「○○がRUNDEF に等しい時には」ということだったのです. このRUNDEF をUSGRPH ルーチンなどの引数に用いると, x またはy の座標値を「おまかせ」にすること が出来ます.

このRUNDEF の値は初期値として999: が与えられていますが, この値が不都合な時(例えば, 1000 から 999 までのグラフを描く場合など) はGRFRM ルーチンを_呼_ぶ_前にCALL GLRSET('RUNDEF', -999999.) などとして未定義値の値を変更しておきます. GRFRM ルーチンでこのRUNDEF を使っているからです.

4.2 f(ix)

このプログラム例U1D1 では, x 方向には[1945, 1995] の範囲で等間隔に点をとり, y 方向には配列Y で与 えられた座標値を結んで折れ線を描きます. 25 行めのUSGRPH ルーチンでX を指定するかわりにRUNDEF を指定する(つまり, X は定義されていないと宣言する) と, USGPRH はx 座標値がウインドウの幅いっぱい に等間隔にならんでいるものと解釈してグラフを描きます. このとき, USGRPH が呼ばれる前にx 方向のウ インドウは決まっていないといけませんから, GRSWND ルーチンでx 方向だけを陽に与えています. ここで も, y 方向は未定義にして, 正規化変換の確定はUSGPRH におまかせします. なお, RUNDEF の値は, 13 行め のGLRGET ルーチンで参照しています.

4.3 g(jy)

前節と同様に, y 方向に座標値が等間隔な場合にも, Y を指定するかわりにRUNDEF を指定します. このプ ログラムU1D2 では, USSPNT, UUMRK, UULIN の各ルーチンでY を未定義値としています. ここではUSSPNT ルーチンを使ってウインドウを決め, ビューポートの設定は初期値に頼りますので, GRSTRF ルーチンの前 にUSPFIT を呼んでいることを再確認しておきましょう. なお, 変換関数番号を3 として, 片対数座標にし ています.