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 として, 片対数座標にし ています.