6.2 USGRPHの分解

ここで, プログラム USPAC1 で呼んだ USGRPH サブルーチンがどのようなルーチンで構成されているか, 見てみましょう. 実は,

CALL USGRPH( N, X, Y )
というサブルーチン・コールは, 次の5つのサブルーチンを順に呼ぶことと同 じなのです.
CALL USSPNT( N, X, Y )
CALL USPFIT
CALL GRSTRF
CALL USDAXS
CALL UULIN( N, X, Y )
データを自動的にスケーリングするためには, まず, 描きたいデータすべての なかから最大値と最小値を見つける必要があります. サブルーチン USSPNT がこれを行ないます. つぎの USPFIT ルーチンでは, これらの データの最大値・最小値を切りの良い数値に丸めてウインドウを決め, ほかの 正規化変換のパラメータも「おまかせ」で決めます. そして, GRSTRF ルーチンで正規化変換を確定します.

ここで, 「おまかせ」の中身を見てみましょう.

まず, MATH1 の SYSLIB パッケージが管理する内部変数 RUNDEF のお話 です. これはDCL全体で使用する内部変数のひとつで, GLRGET/GLRSETルー チンによって参照/変更できます. RUNDEF は「ユーザーが陽に指定し ていない」ことを表す実数値で, 「未定義値」と呼びます. 初期値は-999.です.

さて, この未定義値 RUNDEF ですが, GRFRM ルーチンで新しい作 画領域を設定する際に使われます. GRFRM を呼ぶと, ウインドウ, ビュー ポート, および変換関数番号の正規化変換に関する変数に RUNDEF が代 入され, これらが未定義状態になります. ここで, USSPNTUSPFIT を呼ぶと, ウインドウについては最大値・最小値を切りの良い数値に 丸めて設定し, それ以外の未定義状態にある変数には次の初期値を設定します:

ビューポート: (0.2, 0.8, 0.2, 0.8)
変換関数番号: 1 (直角一様座標)
当然ながら, USPFIT ルーチンの前に GRSWND, GRSVPT, ま たは GRSTRN でこれらの変数を設定していると, それは未定義状態では なくなっているので, その値のまま GRSTRF ルーチンで確定されます.

GRSTRF ルーチンの次の USDAXS は「おまかせ」で座標軸を描く ルーチンです. 次章以降で説明する座標軸ルーチンを使っているのですが, す でに見たように座標軸ラベルがデータに合わせて自動的に付けられます(第 2.1節, quick2.f).

折れ線を描いているのは, UUPACK の UULIN ルーチンです. 基本的には, SGPACK のポリラインプリミティブに対応するものですが, 次節以降で具体的に 見るように別の機能が付け加えられています.