%表題   基本グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         91/05/20 酒井 敏
%         91/09/05 林祥介
%         92/03/21 塩谷雅人
%         92/04/22 林祥介   (4.1版)
%         94/04/05 酒井敏, 塩谷雅人
%         95/04/21 塩谷雅人
%        }
%
\section{サブルーチンの説明 : コントロールルーチン}

\subsection{SWDOPN/SWDCLS}
\begin{enumerate}
  \item 機能
      \begin{quote}
      デバイスをオープン/クローズする.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWDOPN}\\
      {\tt CALL SWDCLS}
      \end{quote}

  \item 引数の説明
      \begin{quote}
        なし.
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item \SWPSET {\tt (SW}{\it p}{\tt STX)}, {\tt SWCSET(SWCSTX)} をのぞく
               すべてのSWPACKルーチンはこの2つのルーチンの間で呼ばれる.
        \item 座標系の回転は STPACK が行う.
        \item {\tt SWDOPN}を呼ぶ前に \SWPGETSET が管理する
              内部変数{\tt 'IWS'}を設定しておかなければならない.
              この設定はふつう {\tt SGOPN} の中でおこなわれる.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\subsection{SWPOPN/SWPCLS}
\begin{enumerate}
  \item 機能
      \begin{quote}
      ページををオープン/クローズする.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWPOPN}\\
      {\tt CALL SWPCLS}
      \end{quote}

  \item 引数の説明
      \begin{quote}
        なし.
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item CALCOMP系プロットルーチンの様にページの概念のない
              処理系では, 原点移動などにより仮想的にページの概念が
              導入される.
        \item ページのクローズとオープンが
              "改ページ"として常にセットで行われる様な処理系では,
              どちらかのルーチンがDUMMYになる場合もある.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\subsection{SWOOPN/SWOCLS}
\begin{enumerate}
  \item 機能
      \begin{quote}
      オブジェクトをオープン/クローズする.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWOOPN(COBJ,COMM)}\\
      {\tt CALL SWOCLS(COBJ)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt COBJ} & {\tt (C*(*))} & オブジェクト名. \\
      {\tt COMM} & {\tt (C*(*))} & コメント.
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item オブジェクトとは, 同じ属性を持つ一まとまりの図形要素である.
	\item これらのルーチンは,
		SZPACK の上位インターフェイスルーチンの
		オープン/クローズのタイミングで呼ばれる.
        \item オブジェクトの概念のないデバイスではダミールーチンとなる.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\section{サブルーチンの説明 : 描画ルーチン}

\subsection{SWSWDI/SWSCLI}
\label{swpack.swswdi}
\begin{enumerate}
  \item 機能
      \begin{quote}
      描く線分の属性(線幅と色)を指定する.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWSWDI(IWDIDX)} \\
      {\tt CALL SWSCLI(ICLIDX)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt IWDIDX} & {\tt (I)} & 線分の太さに関するインデクス.
                                 SGPACK (\ref{gaiyou.lindex}節)参照. \\
      {\tt ICLIDX} & {\tt (I)} & 線分の色に関するインデクス.
                                 SGPACK (\ref{gaiyou.lindex}節)参照.
      \end{tabular}

      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
      \item これらのルーチンは実際に描画するルーチンの前に
            呼ばなければならない.
      \item {\tt IWDIDX}, {\tt ICLIDX} が0の時は, 1と見なして処理する.
      \item GRPH1で指定できる線幅は0から9までであるが,
            色が指定できないデバイスの場合には,
            線色のインデクス{\tt ICLIDX}を線幅のインデクス{\tt IWDIDX}
            に読み変えてSWPACKに渡す場合があるので,
            このようなシステムにおいてはIWDIDXが99までの値をとる.
      \item 実際に線がどのような色になるか,
            また, どの程度の太さになるかは, システムに依存する.
%           色の指定に関しては\ref{colormap}節を参照のこと.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\subsection{SWGOPN/SWGCLS}
\begin{enumerate}
  \item 機能
      \begin{quote}
      線分をオープン/クローズする.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWGOPN} \\
      {\tt CALL SWGCLS}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      なし.
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item CALCOMP 系の処理系では,
              どちらもDUMMYルーチンとなる.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\subsection{SWGMOV/SWGPLT}
\begin{enumerate}
  \item 機能
      \begin{quote}
      ペンアップ/ペンダウンで移動する.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWGMOV(WX,WY)} \\
      {\tt CALL SWGPLT(WX,WY)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt WX,WY} & {\tt (R)}    & ワークステーション座標. {\tt (i)}
      \end{tabular}

      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
%       \item 座標系は任意であるが,
%             X方向とY方向の長さの単位は同じでなければならない.
%             単位や描画可能範囲はSWQRCTで取得可能である.
        \item プリミティブの中にこの2つのルーチンは任意の回数
              出現するが, プリミティブがオープンされた直後に呼ばれる
              ルーチンは {\tt SWGMOV} でなければならない.
              {\tt SWGOPN}の直後に{\tt SWGPLT}を呼んだ場合の動作は
              保証されない.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\subsection{SWGTON}
\begin{enumerate}
  \item 機能
      \begin{quote}
      ハードフィルを行う.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWGTON(NP,WPX,WPY,ITPAT) }
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt NP  } & {\tt (I)} & 配列{\tt WPX,WPY}の大きさ.   {\tt (i)}  \\
      {\tt WPX } & {\tt (R)} & 塗りつぶす領域の境界のX座標. {\tt (i)}  \\
      {\tt WPY } & {\tt (R)} & 塗りつぶす領域の境界のY座標. {\tt (i)}  \\
      {\tt IPAT} & {\tt (I)} & 塗りつぶしパターン番号.      {\tt (i)}  \\
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item  パターン番号は5桁の番号で,
              上位2桁が色,
              3桁目がパターンの種類(点または線),
              4桁目が点または線の太さ, 最下位桁が点または線の密度
              に対応する.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\subsection{SWIOPN/SWIDAT/SWICLS}
\begin{enumerate}
  \item 機能
      \begin{quote}
      イメージデータを描画する.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWIOPN(IWX,IWY,IMW,IMH) } \\
      {\tt CALL SWIDAT(IMAGE,NLEN) } \\
      {\tt CALL SWICLS }
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt IWX,IWY } & {\tt (I)}& イメージの左上の座標. {\tt (i)}  \\
      {\tt IMW,IMH } & {\tt (I)}& イメージの大きさ.     {\tt (i)}  \\
      {\tt IMAGE   } & {\tt (I)}& イメージデータ.       {\tt (i)}  \\
      {\tt NLEN    } & {\tt (I)}& イメージデータの長さ. {\tt (i)}  \\
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item  イメージの位置, および大きさはイメージ座標で指定する.
        \item  イメージデータは色番号 (パレット番号) を4バイトの整数
		で指定する.
        \item  {\tt SWIOPN} と {\tt SWICLS} の間で, {\tt SWIDAT} を
		複数回呼ぶことができる.
		すなわち, データを分割して指定することができる.
        \item  一回に指定するデータの長さは任意であるが,
		{\tt SWICLS } が呼ばれるまでに {\tt SWIOPN} で指定した
		イメージの大きさ分だけのデータを指定しなければならない.
		それより, 多いか少い場合の動作は不定である.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\section{サブルーチンの説明 : マウス}
\subsection{SWQPNT}
\begin{enumerate}
  \item 機能
      \begin{quote}
      マウスポイントの位置を返す.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWQPNT(WX,WY,MB)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt WX,WY} & {\tt (R)}  & マウスポイントの位置. {\tt (o)} \\
      {\tt MB}    & {\tt (I)}  & ボタンの種類. {\tt (o)} \\
      \end{tabular}

      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item X ウインドウシステムにおいて {\tt MB} としては
          次のような値を返す.
          {\tt Button1} が押されたら1,
          {\tt Button2} が押されたら2,
          {\tt Button3} が押されたら3,
          その他の場合は0を返す.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\section{サブルーチンの説明 : 座標変換}
\subsection{SWFINT/SWIINT}
\begin{enumerate}
  \item 機能
      \begin{quote}
      ワークステーション座標とイメージ座標の変換をする.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWFINT(WX,WY,IWX,IWY)} \\
      {\tt CALL SWIINT(IWX,IWY,WX,WY)} \\
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt WX,WY}   & {\tt (R)}  & ワークステーション座標. {\tt (i/o)} \\
      {\tt IWX,IWY} & {\tt (I)}  & イメージ座標. {\tt (i/o)} \\
      \end{tabular}

      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item なし.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\section{サブルーチンの説明 : 問い合わせルーチン}
\subsection{SWQWDC/SWQCLC/SWQTNC/SWQIMC/SWQPTC}
\begin{enumerate}
  \item 機能
      \begin{quote}
      SWPACKのルーチンが持つ能力を問い合わせる.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWQWDC(LWD)} \\
      {\tt CALL SWQCLC(LCL)} \\
      {\tt CALL SWQTNC(LTN)} \\
      {\tt CALL SWQIMC(LIM)} \\
      {\tt CALL SWQPTC(LPT)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt LWD} & {\tt (L)} & 線幅を変える能力がある時
                              {\tt .TRUE. (o)} \\
      {\tt LCL} & {\tt (L)} & 線色を変える能力がある時
                              {\tt .TRUE. (o)} \\
      {\tt LTN} & {\tt (L)} & ハードフィルを行う能力がある時
                              {\tt .TRUE. (o)} \\
      {\tt LIM} & {\tt (L)} & イメージ描画を行う能力がある時
                              {\tt .TRUE. (o)} \\
      {\tt LIM} & {\tt (L)} & マウスポイントの位置を調べる能力がある時
                              {\tt .TRUE. (o)}
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item 線幅または線色が変化できない機種では,
              特に指定されない限り上位ルーチンが, 線分属性の情報を
              その機種で区別可能な属性に変換する.
        \item ハードフィルができない機種では,
              上位ルーチンがソフトフィルを行う.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\subsection{SWQFNM}
\begin{enumerate}
  \item 機能
      \begin{quote}
      各種データベースファイル名を得る.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWQFNM(CPARA,CFNAME) }
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt CPARA}  & {\tt (C*(*))} & データベース名を示す内部変数の
                                     名前(\ref{swpack.swpget}節参照). \\
      {\tt CFNAME} & {\tt (C*(*))} & データベースファイル名.
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item どのようなルールでファイル名を探すかはシステムに依存する.
        \item 標準ライブラリではまずカレントディレクトリを探す.
              次に {\tt GLCGET/}{\tt GLCSET}が管理する内部変数
              {\tt 'DUPATH'}のさすディレクトリを探す.
              最後に内部変数{\tt 'DSPATH'}のさすディレクトリを探す.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\subsection{SWQRCT}
\begin{enumerate}
  \item 機能
      \begin{quote}
      最大作画領域を通知する.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWQRCT(WXMIN,WXMAX,WYMIN,WYMAX,FACT) }
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt WXMIN} & {\tt (R)} & 作画領域の左下のX座標.   {\tt (o)} \\
      {\tt WXMAX} & {\tt (R)} & 作画領域の右上のX座標.   {\tt (o)} \\
      {\tt WYMIN} & {\tt (R)} & 作画領域の左下のY座標.   {\tt (o)} \\
      {\tt WYMAX} & {\tt (R)} & 作画領域の右上のY座標.   {\tt (o)} \\
      {\tt FACT} & {\tt (R)} & 座標系の1単位の長さ(cm).  {\tt (o)}
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item ディスプレイの様な大きさのはっきりしない
              デバイスに対しては,
              描画領域の大きさがほぼA4程度の紙の大きさであると考えて
              {\tt FACT}を設定する.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------

\subsection{SWSROT}
\begin{enumerate}
  \item 機能
      \begin{quote}
      画面の回転方向を指定する.
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SWSROT(IWTROT) }
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt IWTROT} & {\tt (I)} & 1 のとき正立; 2 のとき90度回転して
                                 いることをあらわす. {\tt (i)}
      \end{tabular}
      \end{quote}

  \item 備考
      \begin{quote}
      \begin{enumerate}
        \item 通常SWPACKは上位ルーチンがどのような向きに図形を
              描画しているか関知しないが,
              ハードフィルの際には図形の向きとデバイスの向きの関係が
              問題になるので,
              それを通知するためのルーチンである.
              したがって, この情報はハードフィルルーチンのみが使用する.
      \end{enumerate}
      \end{quote}

\end{enumerate}

%-----------------------------------------------------------------------
\section{サブルーチンの説明 : 内部変数管理ルーチン}
\label{swpack.swpget}

\subsection{SW{\it p}GET/SW{\it p}SET(SW{\it p}STX)/SWCGET/SWCSET(SWCSTX)}
\begin{enumerate}
  \item 機能
      \begin{quote}
      \SWPGETSET {\tt (SW}{\it p}{\tt STX)} は整数・実数・論理型の
      内部変数について,
      {\tt SWCGET/SWCSET(SWCSTX)} は文字型の内部変数について
      参照/変更する.
      ({\tt SW}{\it p}{\tt STX/SWCSTX} は実行時オプションによる変更を許す. )
      \end{quote}

  \item 呼び出し方法
      \begin{quote}
      {\tt CALL SW}{\it p}{\tt GET(CP,IPARA)} \\
      {\tt CALL SW}{\it p}{\tt SET(CP,IPARA)} \\
      {\tt CALL SW}{\it p}{\tt STX(CP,IPARA)} \\
      {\tt CALL SWCGET(CP,CPARA)} \\
      {\tt CALL SWCSET(CP,CPARA)} \\
      {\tt CALL SWCSTX(CP,CPARA)}
      \end{quote}

  \item 引数の説明
      \begin{quote}
      \begin{tabular}{llp{10cm}}
      {\tt CP   }& {\tt (C*8)}   & 内部変数の名前. \\
      {\tt IPARA}& {\tt (I,R,L)} & (整数・実数・論理型の)内部変数の値. \\
      {\tt CPARA}& {\tt (C*(*))} & (文字型の)内部変数の値.
      \end{tabular}

    \vspace{1em}
    以下に, 電脳ライブラリが標準的に提供する図形出力装置
    (Xサーバー, ポストスクリプト, テクトロ端末)に対し,
    {\tt CP}として指定できる名前のリストを記す.
    値が整数・実数・論理型のものは \SWPGETSET {\tt (SW}{\it p}{\tt STX)}で
    指定する;
    値が文字型のものは {\tt SWCGET/SWCSET(SWCSTX)}で
    指定する.

    \vspace{1em}
    {\tt 'FONT1'}, {\tt 'CL2TN'} などデータベースファイル名を示す
    内部変数は, その内部変数の値がファイル名としてそのまま
    利用されるとは限らない.
    実際に利用されるファイル名は {\tt SWQFNM} が決める.
    その時のヒントとして
    これらのパラメータ名は定義されていなければならない.
    標準ライブラリではまずカレントディレクトリを探す.
    次に{\tt GLCGET/}{\tt GLCSET}が管理する内部変数
    {\tt 'DUPATH'}(ユーザーの指定するパス名)のさすディレクトリを探す.
    最後に内部変数{\tt 'DSPATH'}(システムがあらかじめ用意するパス名)の
    さすディレクトリを探す.

    \vspace{1em}
    また, 出力装置に依存して{\tt .x11}, {\tt .psx}などのサフィックスの
    ついたものを優先的に探したりする.
    たとえば, 標準ライブラリにおいて {\tt 'CLRMAP'} の示すファイル名を
    探すときに, 出力装置として X サーバーを選んでいれば,
    まず {\tt .x11} のサフィックスのついたものが探される;
    次にサフィックスなしのものが探される;
    最後に {\tt .psx} のサフィックスのついたものが探される.
    いっぽう, 出力装置として ポストスクリプトを選んでいれば,
    まず {\tt .psx} のサフィックスのついたものが探される;
    次にサフィックスなしのものが探される;
    最後に {\tt .x11} のサフィックスのついたものが探される.

    \vspace{1em}
    {\bf [すべての出力装置に共通なパラメーター]}
    - SWPACK がどのような出力装置を実現していても,
      これらの内部変数名は定義されていなければならない.

    \vspace{1em}
    \begin{tabbing}
      1234567890 \= 1234 \=                                         \kill
      {\tt 'MAXWNU'} \> {\tt (I)} \>
        \parbox[t]{11cm}{
        SWPACK が実現している出力装置の数.
        標準ライブラリにおける値は3 (X, PS, Tek) である.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'IWS'} \> {\tt (I)} \>
        \parbox[t]{11cm}{
        オープンする装置番号.
        1から{\tt 'MAXWNU'}の間の値を指定する(初期値は1).
        この番号は {\tt SGOPN} が設定する.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'WSNAME{\it nn}'} \> {\tt (C)} \>
        \parbox[t]{11cm}{
        ワークステーション名($1 \leq nn \leq ${\tt 'MAXWNU'}).
        標準ライブラリにおける値は,
        {\tt 'WSNAME01'='X'} (Xサーバー),
        {\tt 'WSNAME02'='PS'} (ポストスクリプト),
        {\tt 'WSNAME03'='Tek'} (テクトロ端末) となっている.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'FONT{\it n}'} \> {\tt (C)} \>
        \parbox[t]{11cm}{
        フォントファイル名($n=1,2$).
        標準ライブラリにおける値は,
        {\tt 'FONT1'=}{\tt 'font1u'}, {\tt 'FONT2'=}{\tt 'font2u'},
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'CL2TN'} \> {\tt (C)} \>
        \parbox[t]{11cm}{
        カラー番号をトーンパターン番号に読みかえるためのファイル名.
        標準ライブラリにおける値は{\tt 'cl2tnmap'}.
        \rule[-1ex]{0ex}{1ex}}
    \end{tabbing}

    \vspace{1em}
    {\bf [Xサーバー(X)およびポストスクリプト(PS)に共通なパラメーター]}

    \vspace{1em}
    \begin{tabbing}
      1234567890 \= 1234 \=                                         \kill
      {\tt 'IWIDTH'} \> {\tt (I)} \>
        \parbox[t]{11cm}{
        イメージウインドウの横方向のサイズ
        (省略値は900).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'IHEIGHT'} \> {\tt (I)} \>
        \parbox[t]{11cm}{
        イメージウインドウの縦方向のサイズ
        (省略値は650).
        X では, {\tt 'IWIDTH'}, $\times$ {\tt 'IHEIGHT'} のウインドウが
        オープンされる.
        PS では, 縦横比が {\tt 'IHEIGHT':'IWIDTH'} の描画領域が
        最大描画領域に最大内接するように用意される.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'FNAME'} \> {\tt (C)} \>
        \parbox[t]{11cm}{
        出力ファイル名(省略値は{\tt 'dcl'}).
        この値が{\tt '*'} あるいは空白のとき, 現在実行中の
        プログラム名が用いられる.
        X のダンプファイル名, PS の複数ページ出力のための
        ファイル名として用いられるとき, この名前に
        {\tt '\_}{\it nnn}{\tt '} ({\it nnn}はページ番号)を付けたものとなる.
        さらに X のダンプファイル名の場合は{\tt '.xwd'} の
        サフィックスがつく; PS ファイル名の場合は{\tt '.ps'}の
        サフィックスがつく.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'TITLE'} \> {\tt (C)} \>
        \parbox[t]{11cm}{
        タイトル名(省略値は{\tt '*'}).
        この値が{\tt '*'} あるいは空白のとき, {\tt DCLVNM}
        (MISC1/MISCLIB参照)が返すバージョン名となる.
        X の場合, このタイトル名はウインドウのタイトル名として用いられる;
        PS の場合, このタイトル名はコメント部分の Creator 部分に
        書かれる.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'CLRMAP'} \> {\tt (C)} \>
        \parbox[t]{11cm}{
        カラーマップを収めたファイル名.
        標準ライブラリにおける値は{\tt 'colormap'}.
        \rule[-1ex]{0ex}{1ex}}
    \end{tabbing}

    \vspace{1em}
    {\bf [Xサーバー(X)に関するパラメーター]}

    \vspace{1em}
    \begin{tabbing}
      1234567890 \= 1234 \=                                         \kill
      {\tt 'IPOSX'} \> {\tt (I)} \>
        \parbox[t]{11cm}{
        ウインドウの位置を示すX座標.
        (省略値は-999).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'IPOSY'} \> {\tt (I)} \>
        \parbox[t]{11cm}{
        ウインドウの位置を示すY座標.
        (省略値は-999).
        {\tt (IPOSX,IPOSY)}$=(-999,-999)$のときユーザーが
        マウスで指定する.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LWAIT'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        改ページのタイミングで一時停止するかどうかを指定する.
        {\tt .TRUE.}なら一時停止する;
        {\tt .FALSE.}なら一時停止しない
        (省略値は {\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LWAIT0'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        デバイスをオープンするタイミングで一時停止するかどうかを指定する.
        {\tt .TRUE.}なら一時停止する;
        {\tt .FALSE.}なら一時停止しない
        (省略値は {\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LWAIT1'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        デバイスをクローズするタイミングで一時停止するかどうかを指定する.
        {\tt .TRUE.}なら一時停止する;
        {\tt .FALSE.}なら一時停止しない
        (省略値は {\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
     {\tt 'LDUMP'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        X のダンプファイル(xwd)を作成するかどうか指定する.
        {\tt .TRUE.}なら作成する;
        {\tt .FALSE.}なら作成しない
        (省略値は {\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
     {\tt 'LALT'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        裏画面で描画するかどうかを指定する.
        {\tt .TRUE.}なら裏画面で描画する;
        {\tt .FALSE.}なら裏画面で描画しない
        (省略値は {\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
     {\tt 'LKEY'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        一時停止しているときに, キーボードからの指定を有効にするか
        どうかを指定する.
        {\tt .TRUE.}なら有効にする;
        {\tt .FALSE.}なら有効にしない
        (省略値は {\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      \> \> \makebox[3cm][r]{ SP, RETURN :}
          \makebox[6.5cm][l]{次ページに進む. } \\
      \> \> \makebox[3cm][r]{ {\tt s} :}
          \makebox[6.5cm][l]{{\tt 'LWAIT'を.FALSE.} にする.} \\
      \> \> \makebox[3cm][r]{ {\tt w} :}
          \makebox[6.5cm][l]{{\tt 'LWAIT'を.TRUE.} にする.} \\
      \> \> \makebox[3cm][r]{ {\tt d} :}
          \makebox[6.5cm][l]{ダンプファイルを作成する.} \\
      \> \> \makebox[3cm][r]{ {\tt q} :}
          \makebox[6.5cm][l]{実行を中止する.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'BITMAP'} \> {\tt (C)} \>
        \parbox[t]{11cm}{
        ビットマップを収めたファイル名.
        標準ライブラリにおける値は{\tt 'bitmap'}.
        \rule[-1ex]{0ex}{1ex}}
    \end{tabbing}

    \vspace{1em}
    {\bf [ポストスクリプト(PS)に関するパラメーター]}

    \vspace{1em}
    \begin{tabbing}
      1234567890 \= 1234 \=                                         \kill
      {\tt 'LCOROL'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        カラー対応した PS ファイルを出力するかどうかを指定する.
        {\tt .TRUE.}ならカラー用のPSファイルを出力する;
        {\tt .FALSE.}ならモノクロ用のPSファイルを出力する
        (省略値は {\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LSEP'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        出力ファイルを1ページごとに分割して出力するかどうかを指定する.
        {\tt .TRUE.}なら分割する;
        {\tt .FALSE.}なら分割しない
        (省略値は {\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LPRINT'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        作成された出力ファイルをプリンターに直接出力するかどうかを指定する.
        {\tt .TRUE.}ならプリンターに直接出力する;
        {\tt .FALSE.}なら出力しない
        (省略値は {\tt .FALSE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'LPR'} \> {\tt (C)} \>
        \parbox[t]{11cm}{
        {\tt 'LPRINT'}を{\tt .TRUE.}としたときに用いられる
        プリントコマンドを指定する
        (省略値は {\tt 'lpr'})).
        \rule[-1ex]{0ex}{1ex}}
    \end{tabbing}

    \vspace{1em}
    {\bf [テクトロ端末(Tek)に関するパラメーター]}

    \vspace{1em}
    \begin{tabbing}
      1234567890 \= 1234 \=                                         \kill
      {\tt 'LWAIT'} \> {\tt (L)} \>
        \parbox[t]{11cm}{
        改ページのタイミングで一時停止するかどうかを指定する.
        {\tt .TRUE.}なら一時停止する;
        {\tt .FALSE.}なら一時停止しない
        (省略値は {\tt .TRUE.}).
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt 'NLNSIZE'} \> {\tt (I)} \>
        \parbox[t]{11cm}{
        テクトロ画面のうちコンソール部分の1行の長さを指定する
        (省略値は 21).
        \rule[-1ex]{0ex}{1ex}}
    \end{tabbing}
    \end{quote}

  \item 備考
    \begin{enumerate}
       \item 内部変数を管理するための下請けルーチンとして
             以下のものがある.
             ここではサブルーチン名をあげるにとどめる.
         \begin{quote}
           \begin{tabular}{lllll}
              {\tt SWPQNP} & {\tt SWPQID} & {\tt SWPQCP} &
              {\tt SWPQVL} & {\tt SWPSVL} \\
              {\tt SWCQNP} & {\tt SWCQID} & {\tt SWCQCP} &
              {\tt SWCQVL} & {\tt SWCSVL}
           \end{tabular}
           \end{quote}
         \item \SWPGET は上に述べた{\tt SWPQID}を呼んで
            内部変数の位置を求め, {\tt SWPQVL}によって値を参照する;
            \SWPSET は{\tt SWPQID}を呼んで内部変数の位置を求め,
            {\tt SWPSVL}によって値を設定する.
            したがって指定した内部変数名が見つからないとき,
            エラーメッセージは{\tt SWPQID}が出力する.
         \item {\tt SWCGET} は上に述べた{\tt SWCQID}を呼んで
            内部変数の位置を求め, {\tt SWCQVL}によって値を参照する;
            {\tt SWCSET}は{\tt SWCQID}を呼んで内部変数の位置を求め,
            {\tt SWCSVL}によって値を設定する.
            したがって指定した内部変数名が見つからないとき,
            エラーメッセージは{\tt SWCQID}が出力する.
    \item {\tt IPARA}としては適切な型の定数または変数を指定すること.
    \end{enumerate}

\end{enumerate}

\subsection{使用例}

以下では, 電脳ライブラリが標準的に提供する図形出力装置
(Xサーバー, ポストスクリプト, テクトロ端末)に対する
使用例をいくつか紹介する.

\begin{itemize}
  \item {\bf X でマウスを使わずにコントロールする:}
    \begin{quote}
	{\tt 'LKEY'=.TRUE.} を指定し, さらに,
	kterm などのターミナルエミュレータと描画ウインドウの一部が
        重なるように {\tt 'IPOSX'}, {\tt 'IPOSY'} を指定して,
        そこにあらかじめマウスカーソルを
	移動させておくと, キーボードから手を離さずに操作できる.
    \end{quote}

  \item {\bf アニメーション作成 (その1):}
    \begin{quote}
	1ページの画面が比較的短時間で用意できる場合は,
	{\tt 'LALT'=.TRUE.}, {\tt 'LWAIT'=.FALSE.} とすることで,
	アニメーション表示が可能になる.
    \end{quote}

  \item {\bf アニメーション作成 (その2):}
    \begin{quote}
	上記の方法では遅い場合,
	{\tt 'LDUMP'=.TRUE.} として xwd ファイルを作成し,
	animate やビデオ作成ユーティリティーなどを使って
	アニメーションを作成する.
        \vspace{0.5em}

	{\tt 'LWAIT', 'LWAIT0', 'LWAIT1'} をすべて {\tt .FALSE.} にしておけ
	ば, 自動的にファイルを作成することが可能であるが,
	X サーバーを使っているため画面表示をせずにこれを行なうことはできない.
    \end{quote}

  \item {\bf 大量プリント:}
    \begin{quote}
	大量のプリントをしたいとき, {\tt 'LPRINT'=.TURE.} にしておくと,
	1ページごとにプリンタに送るので,
	ディスクが足りなくなることが少くなる.
        \vspace{0.5em}

	また, プリントサーバーが別になっているシステムでは,
	実行中のプログラムとプリントジョブが並列処理されることになるので,
	処理全体が高速化される.
    \end{quote}

  \item {\bf 長時間ジョブのモニター:}
    \begin{quote}
	数値実験などの長時間ジョブのモニターとして,
	X サーバーを使うことも可能だが,
	プリンタに出力する方が, 常時監視する必要もなく,
	前後の比較などもできて便利である.
        \vspace{0.5em}

	そのような場合も, {\tt 'LPRINT'=.TURE.} にしておけば,
	改ページのタイミングで出力されるので,
	途中経過をプログラム実行中にモニターすることができる.
    \end{quote}

\end{itemize}

