%表題   GRPH1 基本グラフィックルーチンライブラリ
%
%履歴
%\Drireki{
%         90/03/22 塩谷雅人
%         91/09/05 林祥介
%         91/12/12 塩谷雅人
%         92/02/07 塩谷雅人
%         92/04/22 林祥介   (4.1版)
%         94/03/17 塩谷雅人
%         95/04/21 塩谷雅人
%        }
%

\section{サブルーチンのリスト}

\subsubsection{主要ルーチン}
\begin{quote}
  \begin{tabular}{lp{10cm}}
    {\tt SLINIT(WXMAX,WYMAX,FACT)} & 初期化. \\
    {\tt SLSIZE(CSIZE)} 	& 第1フレームの再設定 (A4, B5 等). \\
    {\tt SLFORM(DXA,DYA)} 	& 第1フレームの再設定 (実長). \\
    {\tt SLDIV(CFORM,IX,IY)} 	& フレームの分割. \\
    {\tt SLMGN(XL,XR,YB,YT)} 	& マージンの設定.  \\
    {\tt SLRAT(RX,RY)} 		& 縦横比の設定. \\
    {\tt SLSTTL(CTTL,CSIDE,PX,PY,HT,NT)} & タイトルの設定. \\
  \end{tabular}
\end{quote}

\subsubsection{作画境界}
\begin{quote}
  \begin{tabular}{lp{10cm}}
    {\tt SLPVPR(INDEX)} 	& ビューポートの枠を描く.\\
    {\tt SLPWWR(INDEX)} 	& ワークステーションウインドウの枠を描く.\\
    {\tt SLPWVR(INDEX)} 	& 最大作画領域の枠を描く.\\
    {\tt SLPVPC(INDEX,RC)}	& ビューポートのコーナーマークを描く.\\
    {\tt SLPWWC(INDEX,RC)} 	
		& ワークステーションウインドウのコーナーマークを描く. \\
    {\tt SLPWVC(INDEX,RC)} 	
		& 最大作画領域のコーナーマークを描く.\\
  \end{tabular}
\end{quote}

\section{主要サブルーチンの説明}
%\label{slpack.sub}

\subsection{SLINIT}
%\label{slpack.sub.slinit}
\begin{enumerate}
  \item 機能
  \begin{quote}
    レイアウトサブルーチンパッケージを初期化する.
    GRPH1のもとでは{\tt SGOPN} (実際には{\tt SGINIT};
    \ref{sgpack.cntl.sgopn}節参照)内で呼ばれるので,
    ユーザーが直接呼ぶ必要はない.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SLINIT(WXMAX,WYMAX,FACT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt WXMAX},{\tt WYMAX} & {\tt (R)} & 最大作画範囲
        (W座標系の単位で与える). \\
      {\tt FACT} & {\tt (R)} & W座標系の単位長と実長との比を与える. \\
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt WXMAX}$>$0, {\tt WYMAX}$>$0, {\tt FACT}$>$0
      でなければならない.
    \item このルーチンを呼ぶと第1レベル目のフレームとして最大作画範囲が
      割りあてられる.
      第1レベル目のフレームは, {\tt SLSIZE}, {\tt SLFORM}によって
      変更できる.
  \end{enumerate}
\end{enumerate}

\subsection{SLSIZE}
%\label{slpack.sub.slsize}
\begin{enumerate}
  \item 機能
  \begin{quote}
    A系列およびB系列の紙の大きさで, 第1レベル目のフレームを再設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SLSIZE(CSIZE)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt CSIZE} & {\tt (C*3)} & フレームの大きさと向きを表す.
        最初の2文字が大きさ, 3文字目が向きを表す.
        フレームの大きさはA系列またはB系列(A4,B5など)で指定する.
        フレームの向きは, \\
      & & \hspace*{5mm}縦長に割り付けるなら{\tt 'T'}ate
        または{\tt 'P'}ortrait, \\
      & & \hspace*{5mm}横長に割り付けるなら{\tt 'Y'}oko
        または{\tt 'L'}andscape \\
      & & とする.
        また{\tt 'A'}utoとすると{\tt SLINIT}で指定された最大作図範囲の
        縦・横比を見て, 横長なら{\tt 'Y'}oko, 縦長なら{\tt 'T'}ate
        として割り付ける.
        たとえばA4の大きさで横長のフレームを設定するには
        {\tt 'A4Y'}と指定する. \\
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし.
  \end{enumerate}
\end{enumerate}

\subsection{SLFORM}
%\label{slpack.sub.slform}
\begin{enumerate}
  \item 機能
  \begin{quote}
    縦横の長さを実長で指定して, 第1レベル目のフレームを再設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SLFORM(DXA,DYA)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt DXA}, {\tt DYA} & {\tt (R)} & フレームの横および縦の実長.
        単位はcm. \\
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし.
  \end{enumerate}
\end{enumerate}

\subsection{SLDIV}
%\label{slpack.sub.sldiv}
\begin{enumerate}
  \item 機能
  \begin{quote}
    フレームの分割をおこない, 次のレベルのフレームを定義する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SLDIV(CFORM,IX,IY)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt CFORM} & {\tt (C*1)} & フレームを割り付ける方向を指定する.\\
      & & \hspace*{5mm}縦方向に割り付けるなら,
        {\tt 'T'}ateまたは{\tt 'L'}engthways, \\
      & & \hspace*{5mm}横方向に割り付けるなら,
        {\tt 'Y'}okoまたは{\tt 'S'}ideways,  \\
      & & とする. \\
      {\tt IX}, {\tt IY} & {\tt (I)} & X方向, Y方向の分割数.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt SLDIV}は2回まで呼ぶことができる.
      すなわち最大のレベル数は3である.
    \item 各レベルのフレームの総計は40である.
  \end{enumerate}
\end{enumerate}

\subsection{SLMGN}
%\label{slpack.sub.slmgn}
\begin{enumerate}
  \item 機能
  \begin{quote}
    今のレベルのフレームすべてについて指定したマージンをとる.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SLMGN(XL,XR,YB,YT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt XL},{\tt XR},{\tt YB},{\tt YT} & {\tt (R)} &
        それぞれ, 左辺, 右辺, 下辺, 上辺のマージン.
        左辺, 右辺のマージンについては横方向の幅を1とする比率で,
        下辺, 上辺のマージンについては縦方向の幅を1とする比率で
        比率で指定する.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item 0$\leq${\tt XL}, {\tt XR}, {\tt YB}, {\tt YT}$\leq$1かつ,
          {\tt XL}+{\tt XR}$<$1, {\tt YB}+{\tt YT}$<$1で
          なければならない.
  \end{enumerate}
\end{enumerate}

\subsection{SLRAT}
\label{slpack.sub.slrat}
\begin{enumerate}
  \item 機能
  \begin{quote}
    今のレベルのフレームすべてについて,
    縦横比を指定してフレームが最大内接するようにマージンをとる.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SLRAT(RX,RY)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt RX}, {\tt RY} & {\tt (R)} & フレームの縦横比を与える.
        たとえば{\tt RX}=1.0, {\tt RY}=1.0とすると, 正方形のフレームが
        最大内接するようにマージンを取る. \\
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt RX}, {\tt RY}$>$0でなければならない.
  \end{enumerate}
\end{enumerate}

\subsection{SLSTTL}
\label{slpack.sub.slsttl}
\begin{enumerate}
  \item 機能
  \begin{quote}
    第1レベル目のトップマージンまたはボトムマージンに描く文字列を設定する.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SLSTTL(CTTL,CSIDE,PX,PY,HT,NT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabbing}
      123456 \= 12345678 \=                                         \kill
      {\tt CTTL} \> {\tt (C*(*))} \>
        \parbox[t]{11cm}{描く文字列.
        次の予約変数があってそのつど相当する文字列に置き換えられる.
        \rule[-1ex]{0ex}{1ex}} \\
      \> \> \makebox[2cm][r]{{\tt '\#PAGE'} :}
        \parbox[t]{9cm}{ページ数.アラビア数字で2文字分のスペースをとる.
        \rule[-1ex]{0ex}{1ex}} \\
      \> \> \makebox[2cm][r]{{\tt '\#DATE'} :}
        \parbox[t]{9cm}{プログラムを実行したときの日付.
        YY/MM/DD (YY:年, MM:月, DD:日) のフォーマットで表現する.
        \rule[-1ex]{0ex}{1ex}} \\
      \> \> \makebox[2cm][r]{{\tt '\#TIME'} :}
        \parbox[t]{9cm}{プログラムを実行したときの時刻.
        HH:MM:SS (HH:時, MM:分, SS:秒)のフォーマットで表現する.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt CSIDE} \> {\tt (C*1)} \>
        \parbox[t]{11cm}{文字列を描く場所. {\tt 'T'}op
        (トップマージン)または{\tt 'B'}ottom(ボトムマージン)を指定する.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt PX}, {\tt PY} \> {\tt (R)} \>
        \parbox[t]{11cm}{マージン内における文字列の位置を
        $-$1.0から+1.0までの実数値で指定する. \rule[-1ex]{0ex}{1ex}} \\
      \> \> \parbox[t]{11cm}{{\tt PX}については, } \\
      \> \> \makebox[2cm][r]{$-$1.0 :} \parbox[t]{7cm}{左よせ} \\
      \> \> \makebox[2cm][r]{0.0 :}   \parbox[t]{7cm}{中央あわせ} \\
      \> \> \makebox[2cm][r]{+1.0 :}  \parbox[t]{7cm}{右よせ} \\
      \> \> \parbox[t]{11cm}{{\tt PY}については, } \\
      \> \> \makebox[2cm][r]{$-$1.0 :} \parbox[t]{7cm}{下よせ} \\
      \> \> \makebox[2cm][r]{0.0 :}   \parbox[t]{7cm}{中央あわせ} \\
      \> \> \makebox[2cm][r]{+1.0 :}  \parbox[t]{7cm}{上よせ
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt HT} \> {\tt (R)} \>
        \parbox[t]{11cm}{文字の高さ. 単位はR座標系.
        \rule[-1ex]{0ex}{1ex}} \\
      {\tt NT} \> {\tt (I)} \>
        \parbox[t]{11cm}{何番目の文字列かを指定する.
        \rule[-1ex]{0ex}{1ex}} \\
    \end{tabbing}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item このルーチンは文字列を設定するだけで, 実際に文字列を描くのは
      {\tt SLPTTL}である.
      {\tt SLPTTL}は{\tt SGFRM} (\ref{sgpack.cntl.sgfrm}節参照)の
      なかで呼ばれるので,
      ユーザーは{\tt SLPTTL}を直接呼ぶ必要はない.
      またこのとき同時に{\tt SLPCNR}が最大作画領域の4隅に
      コーナーマークをつける.
      なお{\tt SLSTTL}はほかのSGPACKのルーチンと違って, {\tt SGFRM}の
      あとでも呼べる. こうすることによってページごとに異なるタイトルを
      書くことができる.
      \SGPGETSET の管理する内部変数{\tt 'LCORNER'}を{\tt .FALSE.}とす
      るとコーナーマークを描かない(初期値は{\tt .FALSE.});
      また{\tt 'LTITLE'}を{\tt .FALSE.}とするとタイトルを描かない
      (初期値は{\tt .TRUE.}).
    \item 設定できる文字列の最大数は5である.
    \item 設定した文字列を無効にしたいときは
      \begin{quote}
        {\tt CALL SLDTTL(NT)}
      \end{quote}
      とすると第{\tt NT}番目の設定が無効になる.
  \end{enumerate}
\end{enumerate}

\subsection{SLPVPR/SLPWWR/SLPWVR/SLPVRC/SLPWWC/SLPWVC}
%\label{slpack.sub.slpget}
\begin{enumerate}
  \item 機能
  \begin{quote}
    作画境界を実線枠あるいはコーナーマークを使って描く \\
    {\tt SLPVPR} : ビューポートの枠を描く.\\
    {\tt SLPWWR} : ワークステーションウインドウの枠を描く.\\
    {\tt SLPWVR} : 最大作画領域の枠を描く.\\
    {\tt SLPVPC} : ビューポートのコーナーマークを描く.\\
    {\tt SLPWWC} : ワークステーションウインドウのコーナーマークを描く. \\
    {\tt SLPWVC} : 最大作画領域のコーナーマークを描く.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SLPVPR(INDEX)} \\
    {\tt CALL SLPWWR(INDEX)} \\
    {\tt CALL SLPWVR(INDEX)} \\
    {\tt CALL SLPVPC(INDEX,RC)} \\
    {\tt CALL SLPWWC(INDEX,RC)} \\
    {\tt CALL SLPWVC(INDEX,RC)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{11cm}}
      {\tt INDEX} & {\tt (I)} & 線分のラインインデクス
        (\ref{gaiyou.outp}節参照;初期値は1). \\
      {\tt RC} & {\tt (R)} & コーナーマークの長さ(単位はR座標系).
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt INDEX}は1以上でなければならない.
      ただし{\tt INDEX}が0のとき, メッセージは出力されるがなにもしない.
    \item {\tt RC}は0より大きくなければならない.
      ただし{\tt RC}が0のとき, メッセージは出力されるがなにもしない.
  \end{enumerate}
\end{enumerate}

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

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

\vspace{1em}
\begin{quote}
\begin{tabular}{llllll}
  {\tt SLDIVZ} & {\tt SLMGNZ} & {\tt SLPAGE} &
  {\tt SLPCNR} & {\tt SLQRCT} & {\tt SLQSIZ} \\
  {\tt SLRATZ} & {\tt SLPTTL} & {\tt SLTLCV} &
  {\tt SLZTTL} &              &
\end{tabular}
\end{quote}


