%表題   ごくらくDCL
%
%履歴
%\Drireki{
%         95/04/13 余田 成男
%        }
%
%\Dchapter{まずはホップ}
\Dchapterhead
\label{c:hop}

DCL グラフィクスの基本的な操作と概念を説明し, 具体的にどうすれば図形出
力が得られるかを概観します. ここでは, UNIX システムで DCL が標準的にイ
ンストールされていることを前提としています. そうでない環境で DCL を学
び始めようという方は, まず, 基本操作のどこが違うか身近な先達に直接尋ね
てみて下さい. ここで紹介する FORTRAN プログラム自体は, どんな環境でも
同じように動くようになっています.

%-----------------------------------------------------------------------
\section{基本操作}
\label{s:hop_kihonsousa}
データ解析でも数値計算でも一刻も早く計算結果が見たいものですが, そんな
時, DCLを用いるとわずか数行でデータをグラフ化できます. 最初の例題とし
て, リサジューの図形を描いてみましょう. FORTRAN プログラムは, 次の
{\tt HOP} です.

\Dproginput{hop/hop.f}
\vspace{1em}

UNIX システムで DCL が標準的にインストールされている場合には,
\begin{quote}
{\tt
\% dclfrt -o hop hop.f
}
\end{quote}
によって {\tt hop} という実行ファイルが作られます. そこで,
\begin{quote}
{\tt
\% hop
}
\end{quote}
といれると,
\begin{quote}
{\tt
WORKSTATION ID (I) ? ; \\
1:X, 2:PS, 3:Tek, 4:gtk ;
}
\end{quote}
ときいてきます. プログラムの17行めでサブルーチン {\tt SGPWSN} を呼んだ
ので, このように今の環境で利用可能な図形出力装置のリストが書き出されま
す.
\vspace{1em}

この場合, 4つの出力先が可能です. X ウインドウシステムが起動されている
状態で1を入力すると, ウインドウがひとつ現れます. マウスクリックでウイ
ンドウの位置を確定すると, 描画がはじまり下のようなグラフが得られます.
このとき, 次の警告メッセージが出ると思いますが, 特に気にする必要はあり
ません. 図形表示の終了はまたマウスクリックで行ないます.
\begin{quote}
{\tt
 *** WARNING (STSWTR) ***  WORKSTATION VIEWPORT WAS MODIFIED.
}
\end{quote}
\vspace{1em}

一方, 2 (PS)を指定すると, カレントディレクトリに dcl.ps というポストス
クリプトファイルができます. そこで,
\begin{quote}
{\tt
\% lpr dcl.ps
}
\end{quote}
と入力すれば, ポストスクリプトプリンタに結果が出力されます. また, 3
(Tek)を指定するとテクトロ端末で描画ができます.4(Gtk) は X とほとんど同じ結果が得られます
が、描画ライブラリにXlibではなくGtkが使用されます。
\vspace{4em}

\begin{center}
\Depsf[10cm]{hop/hop_0001.eps}\\
{\bf hop.f: frame1}\\
\label{f:hop}
\end{center}


\newpage
%-----------------------------------------------------------------------
\section{基本概念(1): 出力装置のオープンとクローズ}

プログラム {\tt HOP} で, DCL グラフィクスの基本的な構成を説明しておき
ましょう. まず, 7行めから13行めまででデータを作り, 実質的には20行めか
ら26行めまでで図形を描いています.
\vspace{1em}

まず, 出力装置のオープンとクローズに関連する3つのサブルーチンについて
説明しましょう. 例えば1冊のノートにグラフを描くことを思い浮かべると,
次のような手順に相当します. ノートを出してきて机の上に置き({\tt
GROPN}), 新しいページを開いて({\tt GRFRM}), そして, 何かグラフを描きま
す. 最後は, 後片付け({\tt GRCLS})をして出来上がりです. この {\tt
GRFRM} と {\tt GRCLS} のあいだでさまざまな作画ルーチンを呼ぶことにより,
多種多様な図形が描けるようになります.

\begin{itemize}
\item {\tt GROPN(IWS)} [出力装置のオープン] \label{GROPN}
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt IWS} & (整数型) & 各装置の番号.
      {\tt IWS}$>$0: 横長画面, {\tt IWS}$<$0: 縦長画面(90度回転).
    \end{tabular}

    図形を描くために, ディスプレイやプリンタなど図形出力装置の準備をする.
  \end{quote}

\item {\tt GRFRM} [フレームの設定] \label{GRFRM}
  \begin{quote}
    新しい作画領域を設定する. \\
    もう一度呼ぶと, いわゆる「改ページ」操作になる.
  \end{quote}

\item {\tt GRCLS} [出力装置のクローズ] \label{GRCLS}
  \begin{quote}
    描画を終了する時の操作. \\
    図形処理の最後に呼ぶ.
  \end{quote}
\end{itemize}


%-----------------------------------------------------------------------
\section{{\tt USGRPH}: 自動スケーリング折れ線図}

プログラム例 {\tt HOP} で具体的にグラフを描いているのは, {\tt GRFRM}
に続く2つのサブルーチンです. {\tt USSTTL} ルーチンで座標軸のタイトルと
なる文字列を指定し, {\tt USGRPH} で折れ線グラフを描いています. デー
タがはみ出さないように $x$ 座標と $y$ 座標の範囲を定め, 各座標軸を描き,
座標軸のラベル(数字)とタイトル・単位をつけます. ここでラベルが長くなら
ないように, ファクター($y$ 軸の括弧内の $\times10^{-4}$)やオフセット
(同じく $+6$)が自動的に用いられます. そして最後に, 与えたデータ列を実
線で結びます.

\begin{itemize}
\item {\tt USSTTL(CXTTL,CXUNIT,CYTTL,CYUNIT)} [座標軸のタイトル・単位の指定]
      \label{USSTTL}
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt CXTTL } & (文字型) & $x$ 座標軸のタイトル. \\
      {\tt CXUNIT} & (文字型) & $x$ 座標軸の単位.     \\
      {\tt CYTTL } & (文字型) & $y$ 座標軸のタイトル. \\
      {\tt CYUNIT} & (文字型) & $y$ 座標軸の単位.
    \end{tabular}
  \end{quote}

\item {\tt USGRPH(N,X,Y)} [自動スケーリングを行って折れ線グラフを描く]
      \label{USGRPH}
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt N}          & (整数型) & データ数. \\
      {\tt X}, {\tt Y} & (実数型) & 折れ線の($x$,$y$)座標値を与える配列.
    \end{tabular}
  \end{quote}
\end{itemize}
