1.2 オートスケーリングルーチン

GRPH2 のパッケージには USPACK, UMPACK などのように, 変換メソッド(元関数)のパラメタ (ウィンドウなど) を自動的に決める パッケージがいくつかある. これらのパッケージを使うと, 細かなパラメタを気にすることなく, 与えられたデータをグラフ化することができて便利であるが, システムが決めるパラメータが全ての目的に最適である訳ではない. パラメタの一部をユーザーが指定することで, 最終的な図の品質が各段に向上することも少なくない.

このように「一部のパラメタをユーザーが指定する」ことを 可能にするためには, システムが「ユーザーがどのパラメタを陽に指定したか」ということを 知る必要がある. そのために GRPH2 では, 欠損値と同様に「未定義値」を導入する. この「未定義値」は glpget/glpsetによって管理される 'RUNDEF', 'IUNDEF' である.

具体的な手続きとしては,

1:
新しい図を描く前に自動決定可能なパラメタ全てに 「未定義値」を代入する.
2:
オートスケーリングルーチンは, 「未定義値」になっているパラメタのみを自動的に決定する.
1 の「未定義値」の代入は GRPACK のgrfrm, grfig を 呼ぶことで行なわれる. したがて, ユーザーは sgrfm の代りにgrfrm を呼び, オートスケーリングルーチンを呼ぶ前に, grswnd/sgswnd などによってパラメタを与えることで 一部のパラメタを陽に指定することができる. grswnd のように複数のパラメタを同時に指定するルーチンで, その中の一部のパラメタだけ陽に指定したい場合には, その他のパラメタに'RUNDEF' のあらわす値を代入しておけばよい. オートスケーリングルーチンは, 指定されているパラメタによって若干異なる動作をする場合がある.

例えば, 全てをユーザーが指定する (オートスケーリングルーチンを使わない) 場合には,

 
      NumRu::DCL.gropn(iws)
      CALL grfrm

      NumRu::DCL.grstrn(itr)
      NumRu::DCL.grsvpt(vxmin,vxmax,vymin,vymax)
      NumRu::DCL.grswnd(uxmin,uxmax,uymin,uymax)

      CALL grstrf
      ........

となるが, 描画したい点の情報から USPACK に適当なパラメタを決めさせたい 場合は,
      NumRu::DCL.gropn(iws)
      CALL grfrm

      NumRu::DCL.grstrn(itr)
      NumRu::DCL.usspnt(x,y)
      CALL uspfit

      CALL grstrf
      ........
      NumRu::DCL.sgplu(upx,upy)
      ........

となる. つまり, grswnd, grsvpt などの代りに, これらを決定するための情報を usspnt によって与える. 必要なパラメタはuspfitが呼ばれることによって決定され, grstrfを呼ばれることによって変換メソッド(元関数)が確定する. 一部のパラメタを陽に指定したい場合は, grfrmgrstrf の間で grswndgrsvpt などを使って指定すればよい. 例えば,
 
      NumRu::DCL.gropn(iws)
      CALL grfrm

      NumRu::DCL.grstrn(itr)
      NumRu::DCL.grswnd(uxmin,uxmax,uymin,uymax)
      NumRu::DCL.usspnt(x,y)
      CALL uspfit

      CALL grstrf
      ........
      NumRu::DCL.sgplu(upx,upy)
      ........

とすれば, Y軸の最大最小値のみ自動的に決めることができる.