%表題   GRPH2 図形処理上位パッケージ
%
%履歴
%\Drireki{
%         90/03/22 塩谷雅人
%         91/09/05 林祥介
%         91/12/10 林祥介
%         92/02/06 塩谷雅人
%         92/04/22 林祥介   (4.1版)
%         94/03/18 塩谷雅人
%         98/01/24 塩谷雅人
%        }
%
\section{サブルーチンの説明}
%\label{udpack.refud}

\subsection{UDCNTR}
\label{udpack.refud.udcntr}
\begin{enumerate}
  \item 機能
  \begin{quote}
    2次元等高線図を描く(内部で用意した作業領域を使う).
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UDCNTR(Z,MX,NX,NY)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt Z} & {\tt (R)} & {\tt MX}$ \times ${\tt NY}の2次元配列.
        作画には{\tt NX}$ \times ${\tt NY}の部分を使う. \\
      {\tt MX} & {\tt (I)} & 配列{\tt Z}の第1次元整合寸法. \\
      {\tt NX} & {\tt (I)} & 作画に使う配列{\tt Z}の第1次元寸法. \\
      {\tt NY} & {\tt (I)} & 作画に使う配列{\tt Z}の第2次元寸法.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 作業配列の大きさの制約から配列{\tt Z}の大きさは
      1語のビット長が{\tt NB}のとき
      \begin{quote}
        $ ( {\tt NX} + 2 ) \times ( {\tt NY} + 2 ) \times 2 / {\tt NB} + 1
        \leq 1000 $
      \end{quote}
      でなければならない.
      {\tt NB}は \GLPGETSET の管理する
      内部変数{\tt 'NBITSPW'}を参照する.
      普通この値は32である
      (「MATH1」のマニュアル参照).
      もしもこの制限を越える大きさの配列を用いて作画したいときは,
      作業領域をユーザーが指定するサブルーチン{\tt UDCNTZ}
      (次節参照)を用いるとよい.
    \item X方向の格子点の座標が
      {\tt UWSGXA} (\ref{uwpack.refuw.uwsgxya}節参照)または
      {\tt UWSGXB} (\ref{uwpack.refuw.uwsgxyb}節参照)
      によって設定されていない場合, {\tt SGQWND}でウインドウ情報を
      取得し
      ウインドウの{\tt UXMIN}, {\tt UXMAX}を{\tt NX}--1等分するような
      格子点を設定する.
    \item Y方向の格子点の座標が
      {\tt UWSGYA} (\ref{uwpack.refuw.uwsgxya}節参照)または
      {\tt UWSGYB} (\ref{uwpack.refuw.uwsgxyb}節参照)
      によって設定されていない場合, {\tt SGQWND}でウインドウ情報を
      取得し
      ウインドウの{\tt UYMIN}, {\tt UYMAX}を{\tt NY}--1等分するような
      格子点を設定する.
    \item コンターを引くレベルの値が{\tt UDGCLA}, {\tt UDGCLB}または
      {\tt UDSCLV}によって設定されていない場合, 次のサブルーチンを内部で呼んで
      約{\tt NLEV}本のコンターレベルを設定する.
      \begin{quote}
        {\tt CALL UDGCLB(Z,MX,NX,NY,-REAL(NLEV))}
      \end{quote}
%     (\ref{udpack.refud.udgclb}節参照).
      {\tt NLEV}は \UDPGETSET の管理する
      内部変数{\tt 'NLEV'}が参照する値である
      (初期値は12).
      (以下, 特に断らない限り, 単に「内部変数」というのは
      \UDPGETSET の管理する
      内部変数のことをさす. )
    \item コンターを引くアルゴリズムの制約から, 格子点の値は
      どのコンターレベルの値とも等しくてはならない.
      もしもそのような格子点値があると内部で微小量が修正される
      (その際メッセージが出力される).
    \item \GLPGETSET の管理する内部変数{\tt 'LMISS'}が
      {\tt .TRUE.}なら欠損値処理をおこなう.
      (その際, 参照する欠損値は \GLPGETSET の管理する
      内部変数{\tt 'RMISS'}である. )
      {\tt .FALSE.}なら欠損値処理をおこなわない.
      くわしくは「MATH1」のマニュアル参照.
    \item コンタリングの前にすべての格子点値のチェックをおこなう.
      次の2つの場合コンタリングはおこなわずその旨メッセージが出力される.
      さらに内部変数{\tt 'LMSG'}が
      {\tt .TRUE.}のときグラフの下部マージンにもメッセージを書く.
      {\tt .FALSE.}のときメッセージを書かない
      (初期値は{\tt .TRUE.}).
      2つの場合とは:
      \begin{itemize}
        \item すべての格子点が欠損値のとき(missing field).
        \item すべての格子点が同一な値のとき(constant field).
      \end{itemize}
    \item 内部変数{\tt 'LMSG'}が
      {\tt .TRUE.}で引くべきコンターレベルの数が2本以上あるとき,
      実数型の関数{\tt RUDLEV(1)}
      (\ref{udpack.refud.rudlev}節参照)を呼んで
      第1コンターレベルの値(CZL1)と第2コンターレベルの値(CZL2)の差
      (CZL2--CZL1)をグラフの下部マージンに書き出す.
      これらのメッセージは, 地図投影変換以外が設定されているとき,
      {\tt UZPACK}が管理する情報を使って書く.
      したがって, このような場合は, まず座標軸を描いた後で
      {\tt UDCNTR}を呼ぶべきである.
      いっぽう, 地図投影変換が設定されているとき,
      下部マージンの真中に書く.
  \end{enumerate}
\end{enumerate}

\subsection{UDCNTZ}
\label{udpack.refud.udcntz}
\begin{enumerate}
  \item 機能
  \begin{quote}
    2次元等高線図を描く(ユーザーが作業領域を与える).
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UDCNTZ(Z,MX,NX,NY,IBR,NBR3)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt Z} & {\tt (R)} & {\tt MX}$ \times ${\tt NY}の2次元配列.
        作画には{\tt NX}$ \times ${\tt NY}の部分を使う. \\
      {\tt MX} & {\tt (I)} & 配列{\tt Z}の第1次元整合寸法. \\
      {\tt NX} & {\tt (I)} & 作画に使う配列{\tt Z}の第1次元寸法. \\
      {\tt NY} & {\tt (I)} & 作画に使う配列{\tt Z}の第2次元寸法. \\
      {\tt IBR} & {\tt (I)} & 作業領域として用いられる配列. \\
      {\tt NBR3} & {\tt (I)} & 配列{\tt IBR}の長さ.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item このサブルーチンを使用する際の注意事項は,
      配列の大きさに関する次の注意点を除いて
      {\tt UDCNTR} (前節参照)と基本的に同じである.
    \item 作業配列の大きさは次の条件を満たすように決めてやればよい.
      1語のビット長が{\tt NB}のとき
      \begin{quote}
        $ ( {\tt NX} + 2 ) \times ( {\tt NY} + 2 ) \times 2 / {\tt NB} + 1
        \leq {\tt NBR3} / 3 $
      \end{quote}
      {\tt NB}は \GLPGETSET の管理する
      内部変数{\tt 'NBITSPW'}を参照する.
      ふつうこの値は32である
      (「MATH1」のマニュアル参照).
  \end{enumerate}
\end{enumerate}

\subsection{UDGCLA}
\label{udpack.refud.udgcla}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt UDCNTR} (または{\tt UDCNTZ})で使うコンターレベル値を
    最小値・最大値および
    きざみ値またはおよそのレベル数で設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UDGCLA(XMIN,XMAX,DX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt XMIN}, {\tt XMAX} & {\tt (R)} & コンターレベルの最小値と最大値.
        必ずしもきりのよい値でなくてもよい. \\
      {\tt DX} & {\tt (R)} & $ {\tt DX} > 0 $のとき{\tt DX}をきざみ幅とする. \\
               &           & $ {\tt DX} = 0 $のとき内部変数
                             {\tt 'NLEV'}を参照して, 約{\tt NLEV}本の
                             コンターレベルを生成する. \\
               &           & $ {\tt DX} < 0 $のとき約{\tt INT(ABS(DX))}本の
         コンターレベルを生成する.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item $ {\tt XMIN} \ne {\tt XMAX} $でなければならない.
    \item コンターレベルは{\tt DX}が決めるきざみ幅の整数倍に
      なるように設定される.
    \item コンターにつけるラベルは, サブルーチン{\tt UDLABL}が生成する.
      このとき使用するフォーマットは, サブルーチン{\tt UDQFMT/}{\tt UDSFMT}で
      参照/変更できる(\ref{udpack.refud.udsfmt}節参照).
    \item コンターにはmajor lineとminor lineの2種類がある.
      major lineとはラベル付きのコンターで,
      minor lineとはラベルなしのコンターである.
      (ただし, 内部変数{\tt 'LABEL'}を{\tt .FALSE.}にすれば
      major lineもラベルなしとすることができる. 初期値は{\tt .TRUE.})
      major lineのラインインデクスは内部変数
      {\tt 'INDXMJ'}が決める(初期値は3).
      major lineに付けるラベルの文字高は内部変数
      {\tt 'RSIZEL'}が決める
      (単位はV座標系の値;初期値は不定. このとき{\tt RSIZEL}は
      \UZPGETSET の管理する内部変数{\tt 'RSIZEL1'}を参照する).
      minor lineのラインインデクスは内部変数
      {\tt 'INDXMN'}が決める(初期値は1).
    \item 内部変数{\tt 'LDASH'}が{\tt .TRUE.}のとき,
      コンターレベルが負のコンターラインは内部変数{\tt 'IDASH'}を参照して
      そのラインタイプで描かれる
      ({\tt 'LDASH'}の初期値は{\tt .TRUE.}, {\tt 'IDASH'}の初期値は3:破線).
      それ以外のコンターラインは内部変数{\tt 'ISOLID'}を参照して
      そのラインタイプで描かれる
      ({\tt 'ISOLID'}の初期値は1:実線).
    \item minor lineをmajor lineの間に何本引くかは内部変数{\tt 'ICYCLE'}
      (初期値は2)が決める.
      すなわち{\tt 'ICYCLE'}で参照する値に1本の割合で
      major lineを引き, 残りはminor lineを引く.
      major lineのコンターレベルは{\tt DX}で決まるきざみ幅の{\tt 'ICYCLE'}倍
      になるように設定される.
  \end{enumerate}
\end{enumerate}

\subsection{UDGCLB}
\label{udpack.refud.udgclb}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt UDCNTR} (または{\tt UDCNTZ})で使うコンターレベル値を
    格子点値を与える配列と
    きざみ値またはおよそのレベル数で設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UDGCLB(Z,MX,NX,NY,DX)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{lp{10cm}}
      {\tt Z}, {\tt MX}, {\tt NX}, {\tt NY} & {\tt UDCNTR}
        (\ref{udpack.refud.udcntr}節)参照. \\
      {\tt DX} & {\tt UDGCLA} (\ref{udpack.refud.udgcla}節)参照.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item このルーチンは{\tt Z}の格子点値の最小値・最大値をチェックして,
      内部で{\tt UDGCLA}を呼んでいる.
  \end{enumerate}
\end{enumerate}

\subsection{UDSCLV}
\label{udpack.refud.udsclv}
\begin{enumerate}
  \item 機能
  \begin{quote}
    コンターラインの属性をすべて指定して1本のコンターレベルを設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UDSCLV(ZLEV,INDX,ITYP,CLV,HL)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt ZLEV} & {\tt (R)} & コンターレベルの値. \\
      {\tt INDX} & {\tt (I)} & コンターラインのラインインデクス. \\
      {\tt ITYP} & {\tt (I)} & コンターラインのラインタイプ. \\
      {\tt CLV} & {\tt (C*(*))} & コンターラインにつけるラベル. \\
      {\tt HL} & {\tt (R)} & ラベルの高さ(単位はV座標系).
        $ {\tt HL} \leq 0 $のときラベルをつけない.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt UDGCLA}, {\tt UDGCLB}は内部でこのルーチンを呼んでいる.
      補助線を入れたいときなど {\tt UDGCLA}, {\tt UDGCLB}を
      呼んだ後でこのルーチンを呼べば,
      引くべきコンターレベルを1本追加できる.
    \item ラベル({\tt CLV})の長さは8以下でなければならない.
    \item 現在設定されているコンターレベルの総本数は
      \begin{quote}
        {\tt CALL UDQCLN(NLEV)}
      \end{quote}
      によって参照できる.
    \item 第{\tt NL}番目のコンターレベルの属性は
      \begin{quote}
        {\tt CALL UDQCLV(ZLEV,INDX,ITYP,CLV,HL,NL)}
      \end{quote}
      によって参照できる.
      コンターレベルに関する情報は{\tt UDSCLV}によって順に追加されるので,
      {\tt UDQCLV}が参照するコンターレベルの値は必ずしも昇順にならんで
      いるとは限らない．
  \end{enumerate}
\end{enumerate}

\subsection{UDDCLV}
\label{udpack.refud.uddclv}
\begin{enumerate}
  \item 機能
  \begin{quote}
    あるコンターレベルを削除する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UDDCLV(ZLEV)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt ZLEV} & {\tt (R)} & 削除するコンターレベルの値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt UDGCLA}, {\tt UDGCLB}によって既に設定されているコンターレベル
      から特定のコンターレベルを削除したいとき
      このルーチンを呼べばよい.
  \end{enumerate}
\end{enumerate}

\subsection{UDICLV}
\label{udpack.refud.udiclv}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt UDGCLA}, {\tt UDGCLB}, {\tt UDSCLV}で設定したコンターレベルを
    無効にする.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UDICLV}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    なし
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt UDGCLA}, {\tt UDGCLB}, {\tt UDSCLV}によって
      既に設定されているコンターレベルを
      無効にして{\tt UDCNTR}を呼びたいとき,
      このルーチンを呼ぶ必要がある.
  \end{enumerate}
\end{enumerate}

\subsection{RUDLEV}
\label{udpack.refud.rudlev}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt UDGCLA}, {\tt UDGCLB}, {\tt UDSCLV}で設定したコンターレベルの
    間隔を求める.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt RUDLEV(NLEV)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt NLEV} & {\tt (I)} & 何番目のコンター間隔を調べるか指定する. \\
      {\tt RUDLEV} & {\tt (R)} & コンター間隔を与える実数型関数値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 内部的には{\tt UDQCLV} (\ref{udpack.refud.udsclv}節参照)
      によって第{\tt NLEV}番目と{\tt NLEV}+1番目の
      コンターレベルの値を調べ, その差(第{\tt NLEV}+1番目から
      {\tt NLEV}番目を引いた値)を返す．
      {\tt UDQCLV}が参照するコンターレベルの値は必ずしも昇順にならんで
      いるとは限らないことに注意すること.
    \item コンターレベルは2本以上設定されていなければならない.
      また{\tt NLEV}は1以上で, 設定されているコンターレベルの総数
      より小さくなければならない．これらの条件が満たされないとき
      {\tt RUDVAL}は警告メッセージを出して, 0を返す.
  \end{enumerate}
\end{enumerate}

\subsection{UDSFMT}
\label{udpack.refud.udsfmt}
\begin{enumerate}
  \item 機能
  \begin{quote}
    コンターラベルのフォーマットを指定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL UDSFMT(CFMT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt CFMT} & {\tt (C*(*))} & 指定するフォーマット(長さは16文字以下).
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item たとえばコンターラベルをすべて整数型にしたいとき
      \begin{quote}
        {\tt CALL UDSFMT('(I8)')}
      \end{quote}
      とすればよい
      (文字は左詰めされるのでラベルが8文字以下なら,
      たとえば{\tt '(I12)'}でも効果は同じ).
      初期値はサブルーチン{\tt CHVAL}
      (「MISC1」のマニュアルFMTLIB参照)が解釈するオプション{\tt 'D'}
      (有効数字3ケタでほぼ4--5文字の表現)である.
    \item 現在設定されているフォーマットは
      \begin{quote}
        {\tt CALL UDQFMT(CFMT)}
      \end{quote}
      によって参照できる.
  \end{enumerate}
\end{enumerate}

\subsection{UD{\it p}GET/UD{\it p}SET(UD{\it p}STX)}
\label{udpack.refud.udpget}
\begin{enumerate}
  \item 機能
  \begin{quote}
    UDPACKサブルーチンパッケージで使用する内部変数を参照/変更する.
    ( \UDPSTX は実行時オプションによる変更を許す. )
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL \UDPGET (CP,IPARA)} \\
    {\tt CALL \UDPSET (CP,IPARA)} \\
    {\tt CALL \UDPSTX (CP,IPARA)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt CP} & {\tt (C*8)} & 内部変数の名前.  \\
      {\tt IPARA} & {\tt (I,R,L)} & 内部変数の値.
    \end{tabular}

    \vspace{1em}
    以下に{\tt CP}として指定できる名前のリストを記す.

    \vspace{1em}
    \begin{tabbing}
      123456789 \= 1234 \=                                         \kill
      {\tt 'INDXMJ'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {major lineのラインインデクス(初期値は3).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'INDXMN'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {minor lineのラインインデクス(初期値は1).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LABEL'} \> {\tt (L)} \>
        \parbox[t]{10cm}
        {major lineにラベルをつけるかどうかの指定をする.
        {\tt .TRUE.}ならつける; {\tt .FALSE.}ならつけない
        (初期値は{\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LDASH'} \> {\tt (L)} \>
        \parbox[t]{10cm}
        {負のコンターラインを異なるラインタイプで描くかどうかを指定する.
        {\tt .TRUE.}のとき負のコンターラインを内部変数{\tt 'IDASH'}の
        参照するラインタイプで描く;
        {\tt .FALSE.}のときすべてのコンターラインを内部変数{\tt 'ISOLID'}の
        参照するラインタイプで描く
        (初期値は{\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'IDASH'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {{\tt 'LDASH'}が{\tt .TRUE.}のとき, 負のコンターレベルに使う
        ラインタイプ(初期値は3:破線).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'ISOLID'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {{\tt 'LDASH'}が{\tt .TRUE.}のとき0以上のコンターレベルに,
        または{\tt 'LDASH'}が{\tt .FALSE.}のときすべてのコンターレベルに使う
        ラインタイプ(初期値は1:実線).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'ICYCLE'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {minor lineをmajor lineの間に何本引くかを指定する.
        すなわち{\tt 'ICYCLE'}で参照する値に1本の割合で
        major lineを引き, 残りはminor lineを引く
        (初期値は2).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'NLEV'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {コンターレベルを自動的に生成するとき, この内部変数を参照して
        約{\tt NLEV}本のコンターレベルを生成する
        (初期値は12).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'RSIZEL'} \> {\tt (R)} \>
        \parbox[t]{10cm}
        {コンターラベルの文字高(単位はV座標系;初期値は不定).
        この内部変数が不定のとき {\tt UZRGET/UZRSET}
        の管理する内部変数{\tt 'RSIZEL1'}を
        参照する(\ref{uxyzpack.refuz}節参照).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LMSG'} \> {\tt (L)} \>
        \parbox[t]{10cm}
        {グラフの下部マージンにメッセージを書くかどうかを指定する.
        {\tt .TRUE.}なら書く;{\tt .FALSE.}なら書かない(初期値は{\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LCENT'} \> {\tt (L)} \>
        \parbox[t]{10cm}
        {描くメッセージをセンタリングするかどうかを指定する.
        {\tt .TRUE.}ならセンタリングする;{\tt .FALSE.}ならセンタリングしない
        (初期値は{\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'RSIZET'} \> {\tt (R)} \>
        \parbox[t]{10cm}
        {グラフの下部マージンに書くメッセージの文字高
        (単位はV座標系;初期値は不定).
        この内部変数が不定のとき \UZPGETSET
        の管理する内部変数{\tt 'RSIZEL1'}を
        参照する(\ref{uxyzpack.refuz}節参照).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'XTTL'} \> {\tt (R)} \>
        \parbox[t]{10cm}
        {グラフの下部マージンに書くメッセージの位置を決める内部変数.
        --1から+1までの実数値をとりうる.
        --1のとき左よせ, 0のときセンタリング, +1のとき右よせする
        (初期値は0).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'IUNDEF'} \> {\tt (I)} \>
        \parbox[t]{10cm}
        {値が不定であることを示す内部変数
        (初期値は-999).
        \rule[-1ex]{0ex}{1ex}}
    \end{tabbing}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 内部変数を管理するための下請けルーチンとして
      以下のものがある.
      \begin{quote}
      \begin{tabular}{lp{8cm}}
        {\tt UDPQNP(NCP)}       &
          内部変数の総数{\tt NCP}を求める. \\
        {\tt UDPQID(CP,IDX)}    &
          内部変数{\tt CP}の位置{\tt IDX}を求める.  \\
        {\tt UDPQCP(IDX,CP)}    &
          {\tt IDX}の位置にある内部変数の名前{\tt CP}を参照する.  \\
        {\tt UDPQVL(IDX,IPARA)} &
          {\tt IDX}の位置にある内部変数の値{\tt IPARA}を参照する.  \\
        {\tt UDPSVL(IDX,IPARA)} &
          {\tt IDX}の位置にある内部変数の値{\tt IPARA}を変更する.  \\
      \end{tabular}
      \end{quote}
    \item \UDPGET は上に述べた{\tt UDPQID}を呼んで
      内部変数の位置を求め, {\tt UDPQVL}によって値を参照する;
      \UDPSET は{\tt UDPQID}を呼んで内部変数の位置を求め,
      {\tt UDPSVL}によって値を設定する.
      したがって指定した内部変数名が見つからないとき,
      エラーメッセージは{\tt UDPQID}が出力する.
    \item {\tt ITYPE}としては適切な型の定数または変数を指定すること.
  \end{enumerate}
\end{enumerate}

\subsection{その他のサブルーチン・関数}

このパッケージにはこのほかに以下の下位ルーチン・関数がある.
ここではその名前をあげるにとどめる.

\vspace{1em}
\begin{quote}
\begin{tabular}{llllll}
  {\tt UDSCLZ} & {\tt UDQCLZ} & {\tt UDLINE} &
  {\tt UDUXUY} & {\tt UDGRDN} & {\tt RUDVAL} \\
  {\tt UDBSET} & {\tt UDBCLR} & {\tt LUDCHK} &
  {\tt UDISET} & {\tt UDLABL}
\end{tabular}
\end{quote}
