%表題   MISC1 (その他の基本処理下位パッケージ)
%
%履歴
%\Drireki{
%         90/03/22 塩谷雅人
%         91/09/05 林祥介
%         91/12/17 塩谷雅人
%         92/03/14 塩谷雅人
%         92/04/13 塩谷雅人
%         92/04/22 林祥介   (4.1版)
%        }
%
%  \Dchapter{BITLIB : ビットパターンの処理}
\Dchapterhead
\label{bitlib}

\section{概要}
ビットパターンの処理をおこなう関数・サブルーチンパッケージ.
1語長が32bitのシステムを念頭においている.

\vspace{1em}
ビットパターンを与える/返す引数は1語長であれば, 整数型である必要はない.

\vspace{1em}
なおこのパッケージは({\tt BITPIC}, {\tt BITPCI}を除いて),
NCARのグラフィックパッケージに付随していた
基本関数・サブルーチン群にもとづいている.

\section{サブルーチンのリスト}
\begin{tabular}{lp{10cm}}
  {\tt BITPIC(IP,CP)} & ビットパターンを文字列化する. \\
  {\tt BITPCI(CP,IP)} & 文字列をビットパターン化する. \\
  {\tt GBYTE(NP,IO,IB,NB)} & ビットパターンを切り出す. \\
  {\tt GBYTES(NP,NO,IB,NB,NS,IT)} & ビットパターンを切り出す. \\
  {\tt SBYTE(NP,IO,IB,NB)} & ビットパターンを埋め込む. \\
  {\tt SBYTES(NP,NO,IB,NB,NS,IT)} & ビットパターンを埋め込む.
\end{tabular}

\section{関数のリスト}
\begin{tabular}{lp{10cm}}
  {\tt ISHIFT(IW,N)} & ビットパターンをシフトする. \\
  {\tt IAND(I1,I2)} & ビット積を求める. \\
  {\tt IOR(I1,I2)} & ビット和を求める.
\end{tabular}

\vspace{1em}
{\tt IAND}, {\tt IOR}は実時間FORTRANに規定されており,
処理系が用意している場合がある.

\section{サブルーチンの説明}
\subsection{BITPIC}
\label{bitlib.sub.bitpic}
\begin{enumerate}
  \item 機能
  \begin{quote}
    ビットパターンを{\tt '0'}, {\tt '1'}の文字列として返す.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL BITPIC(IP,CP)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt IP} & {\tt (I)} & ビットパターンを調べる1語長の引数. \\
      {\tt CP} & {\tt (C*(*))} & ビットパターンを返す文字型の引数.
        ビットがONなら{\tt '1'}, OFFなら{\tt '0'}を返す.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt CP}の長さがN (={\tt LEN(CP)})ならば
      {\tt IP}の下位MIN(N,NB)ビット( NBは内部変数
      {\tt 'NBITSPW'}で決まる数)を調べそのパターンを右詰めして返す.
      NがNBより大きいとき{\tt CP(1:N-NB)}は不定である.
  \end{enumerate}
\end{enumerate}

\subsection{BITPCI}
\label{bitlib.sub.bitpci}
\begin{enumerate}
  \item 機能
  \begin{quote}
    {\tt '0'}, {\tt '1'}の文字列をビットパターンとして返す.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL BITPCI(CP,IP)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt CP} & {\tt (C*(*))} & ビットパターンを与える文字型の引数.
        ビットがONなら{\tt '1'}, OFFなら{\tt '0'}を指定する. \\
      {\tt IP} & {\tt (I)} & ビットパターンを返す1語長の引数.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt CP}の長さがN (={\tt LEN(CP)})ならば
      {\tt CP}の下位MIN(N,NB)文字( NBは内部変数
      {\tt 'NBITSPW'}で決まる数)を調べそのパターンを右詰めして返す.
      NがNBより大きいとき, 下位NB文字({\tt CP(N-NB+1:N)})のパターンを調べる.
      ビットパターンの指定方法について, 正確には
      {\tt '0'}ならビットがOFF, {\tt '0'}以外ならビットがONと見なす.
  \end{enumerate}
\end{enumerate}

\subsection{GBYTE/GBYTES}
\label{bitlib.sub.gbyte}
\begin{enumerate}
  \item 機能
  \begin{quote}
    連続した記憶領域からビットパターンを切り出す.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL GBYTE(NP,IO,IB,NB)} \\
    {\tt CALL GBYTES(NP,NO,IB,NB,NS,IT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt NP} & {\tt (I)} & 連続した記憶領域(たとえば配列)の先頭となる語. \\
      {\tt IO} & {\tt (I)} & 切り出したビットパターンを返す変数. \\
      {\tt NO} & {\tt (I)} & 切り出したビットパターンを返す配列. \\
      {\tt IB} & {\tt (I)} & 先頭の語においてスキップするビット数. \\
      {\tt NB} & {\tt (I)} & 切り出すビット数. \\
      {\tt NS} & {\tt (I)} & 切り出すビットパターン間のビット数. \\
      {\tt IT} & {\tt (I)} & 配列{\tt NO}の長さ.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt NB}は1以上, 1語のビット数(ここでは32)以下でなければならない.
  \end{enumerate}
\end{enumerate}

\subsection{SBYTE/SBYTES}
\label{bitlib.sub.sbyte}
\begin{enumerate}
  \item 機能
  \begin{quote}
    連続した記憶領域にビットパターンを埋め込む.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt CALL SBYTE(NP,IO,IB,NB)} \\
    {\tt CALL SBYTES(NP,NO,IB,NB,NS,IT)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt NP} & {\tt (I)} & 連続した記憶領域(たとえば配列)の先頭となる語. \\
      {\tt IO} & {\tt (I)} & 埋め込むビットパターンを与える変数. \\
      {\tt NO} & {\tt (I)} & 埋め込むビットパターンを与える配列. \\
      {\tt IB} & {\tt (I)} & 先頭の語においてスキップするビット数. \\
      {\tt NB} & {\tt (I)} & 埋め込むビット数. \\
      {\tt NS} & {\tt (I)} & 埋め込むビットパターン間のビット数. \\
      {\tt IT} & {\tt (I)} & 配列{\tt NO}の長さ.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt NB}は1以上, 1語のビット数(ここでは32)以下でなければならない.
  \end{enumerate}
\end{enumerate}

\section{関数の説明}

\subsection{ISHIFT}
\label{bitlib.sub.ishift}
\begin{enumerate}
  \item 機能
  \begin{quote}
    ビットパターンをシフトする.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt ISHIFT(IW,N)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt IW} & {\tt (I)} & ビットパターンをシフトする1語長の引数. \\
      {\tt N}  & {\tt (I)} & シフトするビット数.
        ${\tt N}>0$なら左側にシフトする.
        左側にあふれた分は右側に詰められる(circular shift).
        ${\tt N}<0$なら右側にシフトする.
        右側にあふれた分は捨てられる(end-off shift). \\
      {\tt ISHIFT} & {\tt (I)} & シフトした結果を返す関数値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item なし.
  \end{enumerate}
\end{enumerate}

\subsection{IAND/IOR}
\label{bitlib.sub.iand}
\begin{enumerate}
  \item 機能
  \begin{quote}
    ビットごとのブール積/和を求める.
  \end{quote}
  \item 呼び出し方法
  \begin{quote}
    {\tt IAND(I1,I2)}\\
    {\tt IOR(I1,I2)}
  \end{quote}
  \item パラメーターの説明
  \begin{quote}
    \begin{tabular}{llp{10cm}}
      {\tt I1}, {\tt I2} & {\tt (I)} & ビット列を与える1語長の引数. \\
      {\tt IAND} & {\tt (I)} & ビット列のブール積を返す関数値. \\
      {\tt IOR} & {\tt (I)} & ビット列のブール和を返す関数値.
    \end{tabular}
  \end{quote}
  \item 備考
  \begin{enumerate}
    \item {\tt IAND}, {\tt IOR}は実時間FORTRANに規定されており,
      処理系が用意している場合がある.
  \end{enumerate}
\end{enumerate}
