%表題   GRPH1 基本グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         90/03/22 塩谷雅人
%         91/09/05 林祥介
%         91/12/12 塩谷雅人
%         92/02/07 塩谷雅人
%         92/04/22 林祥介   (4.1版)
%         94/01/22 塩谷雅人
%        }
%
%  \Dchapter{SLPACK : レイアウトルーチン}
  \Dchapterhead
\label{layout}

\section{概要}

これは, 装置に依存した図形出力表示面を分割して,
1画面のうちに互いに重なり合わない複数の
ワークステーションビューポートを設定できるようにした
サブルーチンパッケージである.
%このレイアウトサブルーチンパッケージ(以下ではSLPACKという)は
%GRPH1のもとで動作する.

\vspace{1em}
本パッケージは, 次のような主要サブルーチンからなる.
\begin{description}
  \item {\tt SLINIT}  $ \cdots $ 初期化をおこなう.
  \item {\tt SLSIZE}  $ \cdots $
    A4, B4などの紙の大きさで作画範囲を設定する.
  \item {\tt SLFORM}  $ \cdots $
    縦横の実長で作画範囲を設定する.
  \item {\tt SLDIV\ } $ \cdots $ 画面の分割をおこなう.
  \item {\tt SLMGN\ } $ \cdots $ マージンをとる.
  \item {\tt SLRAT\ } $ \cdots $ 縦横比を指定してマージンをとる.
  \item {\tt SLSTTL}  $ \cdots $ タイトルを設定する.
\end{description}

%\vspace{1em}
%以下, 簡単に使用手順の概要を述べる.

\vspace{1em}
まず, {\tt SLINIT}を呼ぶことにより最大作画範囲を設定する.
ただし{\tt SLINIT}は{\tt SGOPN} (\ref{sgpack.cntl.sgopn}参照)の
中で呼ばれるので,
ユーザーが直接呼ぶ必要はない.
この作画可能な最大領域を第1レベル目のフレームという.
SLPACKのほかのルーチンを呼ばなければ, このフレームが
ワークステーションビューポートとなる.
さらに, {\tt SLSIZE}, {\tt SLFORM}によってこの第1レベルの
フレームを具体的な実長を持った大きさで再設定することもできる.

\vspace{1em}
次に, {\tt SLMGN}でこのフレームにマージン(余白部分)をとることができる.
マージンをとった内側が新しいフレームとなる.
{\tt SLRAT}によって, フレームの縦横比を指定して
マージンをとることもできる.
第1レベルのフレームに限って, このマージン部分に文字列(タイトル)を
描くことができる.
この文字列の設定は, {\tt SLSTTL}によっておこなう.

\vspace{1em}
1ページの中に2つ以上のワークステーションビューポートを設定する場合,
サブルーチン{\tt SLDIV}を呼ぶことにより第1レベル目のフレームを分割する.
このときワークステーションビューポートを設定してゆく順序
および分割数を指定する.
ここで, 分割された各部分を第2レベルのフレームという.
再び{\tt SLMGN}または{\tt SLRAT}を呼ぶことによって,
第2レベルのフレームすべてについてマージンをとることができる.
{\tt SLDIV}による分割は2回まで可能である;すなわち第3レベルのフレームまで
設定することができる.
{\tt SGFRM} (\ref{sgpack.cntl.sgfrm}節参照)はこうやって設定したフレームを
ワークステーションビューポートと考えて, つぎつぎと作画領域を定義してゆき
必要に応じて改ページの動作もおこなう.

\vspace{1em}
基本的にこれらのルーチンは{\tt SGOPN}と最初に呼ばれる{\tt SGFRM}の
間で呼ばなければならない. ただし{\tt SLSTTL}は{\tt SGFRM}のあとでも呼
ぶことができて, これは次の改ページのタイミングで有効となる.

\vspace{1em}
その他に,
GRPH1の管理する情報にしたがって作画境界を実線枠あるいは
コーナーマークを使って描くサブルーチンがある.
\begin{description}
  \item {\tt SLPVPR}  $ \cdots $ ビューポートの境界を描く.
  \item {\tt SLPWWR}  $ \cdots $ ワークステーションウインドウの境界を描く.
  \item {\tt SLPWVR}  $ \cdots $ 最大作画領域の境界を描く.
  \item {\tt SLPVPC}  $ \cdots $ ビューポートの4隅を描く.
  \item {\tt SLPWWC}  $ \cdots $ ワークステーションウインドウの4隅を描く.
  \item {\tt SLPWVC}  $ \cdots $ 最大作画領域の4隅を描く.
\end{description}

\vspace{1em}
なお, SLPACKが用いる内部変数は \SGPGETSET が管理している.

\vspace{1em}
内部的には, {\tt SLBLK1}という名前の共通ブロックを使用している.
ユーザーは同じ名前の外部手続き名・共通ブロック名を用いてはならない.

% \vspace{1em}
% 具体的な使用例については第\ref{sldemo}章を参照のこと.



