%表題   MISC1 (その他の基本処理下位パッケージ)
%
%履歴
%\Drireki{
%         92/01/17 酒井  敏
%         92/04/22 林祥介   (4.1版)
%         94/04/23 塩谷雅人 (5.z版)
%         95/04/21 塩谷雅人
%        }
%
\section{文字の内部表現}
 %  \label{char}

文字の内部表現も実数表現と同様に機種に依存する. 
CHGLIB, CHKLIB は, 
機種依存する文字処理を規格化するためのパッケージである. 
\vspace{1em}

FORTRANでは文法上, 
以下のFORTRAN文字集合が定められており, 
FORTRANプログラムは, これらの文字だけで書かなければならない. 
(注釈行や文字型データの中は例外)

\begin{center}
\begin{tabular}{ll}
  英字:     & ABCDEFGHIJKLMNOPQRSTUVWXYZ \\
  数字:     & 0123456789                 \\
  特殊文字: & 空白\verb!'()*+,-./:=! 通貨記号 \\
\end{tabular}
\end{center}

したがって, 
小文字でFORTRANプログラムを書くのは厳密に言えば文法違反になる. 
\vspace{1em}

これらのFORTRAN文字を含めて, 
文字の内部表現方法はFORTRANの規格では特に規定されていない. 
実数の内部表現方法と同様に, IBM規格であるEBCDICと, 
アメリカの標準規格であるASCIIとにわかれる. 

%------------------------------- EBCDIC --------------------------------
\begin{itemize}
  \item {\bf EBCDIC}
    \begin{quote}
      IBMによって定められた拡張2進化10進情報交換用コード
      (Extended Binary Coded Decimal Interchange Code).
      その名が示す通り, 
      BCD(2進化10進)コードと呼ばれるものを拡張したものである. 
      BCDコードとは16進数のA,B,C,D,E,Fを使わず, 
      0から9までの数字を使って10進数を表現するもので, 
      4ビットで10進数の1桁に対応させる. 
      \vspace{1em}
      
      EBCDICでは8ビットで1文字を表現し, 
      数字は上位4ビットをFとして下位4ビットをBCDコードに対応させている. 
      (これがEBCDICたる由縁)
      富士通, 日立などのいわゆるIBMコンパチ汎用機でも採用されているが, 
      各社, 微妙に定義が異なる. 
      \vspace{1em}

      FORTRAN文字に関しては各社とも同じコードを使っているようであるが, 
      その他の文字についてはかなり機種依存性が強い. 
      特に, 日本ではカタカナを使うためにコード体系を変更している場合があり, 
      その対応の仕方に2種類ある. 
      一つは, アルファベットの小文字の部分をカタカナに置き換えてしまう方法で, 
      この方法では, カタカナとアルファベットの小文字は同時に使用できない. 
      富士通のMシリーズではこの方法が採用されている
      (計算センターによって異なる場合がある). 
      もう一つは, 小文字の部分を上記のようにカタカナに置き換えた上で, 
      さらに, 小文字をあいているコードに押し込めたもので, 
      EBCDIK(最後のKはカナ)コードとも呼ばれる. 
      これは日立のMシリーズで採用されている. 
      これら2つの方法で, アルファベットの大文字とカタカナに関しては
      同一のコードとなるが, 小文字に関しては互換性がなくなる. 
    \end{quote}

%--------------------------------- ASCII -------------------------------
  \item {\bf ASCIIコード}
    \begin{quote}
      これはアメリカ規格協会(ANSI)で規定された文字コード体系である. 
      UNIX, MS-DOS などで採用されている. 
      日本では, ほぼ同じものがJIS X0201として規定されている. 
      ASCII コードは7ビットで, 最上位桁は0であるが, 
      JISには8ビット全部使ってカタカナまで規定した8単位符号表がある. 
    \end{quote}
\end{itemize}

このように文字コードは, たとえFORTRAN文字であっても機種に依存する. 
したがって, 文字コードを返す{\tt ICHAR}関数はFORTRANの標準の組み込み関数
であるが, その値は機種に依存することになる. 
文字コードの大小を機種に依存せずに比較するための関数として, 
{\tt LGE}, {\tt LGT}, {\tt LLE}, {\tt LLT} があり, 
これはその計算機のコード体系によらず, 
ASCIIコード順に比較する.
\vspace{1em}
 

\newpage

%--------------------------------付表----------------------------------
\newcommand{\MB}[1]{\makebox[7mm]{#1}}
\begin{center}
  {\bf EBCDIC コード表 }\\
  {\setlength{\tabcolsep}{0.5mm} \tt
  \begin{tabular}%
    {|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|c|}
    \hline
\MB{} & \MB{0} & \MB{1} & \MB{2} & \MB{3} & \MB{4} & \MB{5} & \MB{6} & \MB{7} &
        \MB{8} & \MB{9} & \MB{A} & \MB{B} & \MB{C} & \MB{D} & \MB{E} & \MB{F} 
\\ \hline
%   0   1   2   3   4   5   6   7   8   9   A   B   C   D   E   F
0 &NUL&DLE&   &   &SP &\& & - &   &   &   &   &   &\{ &\} &\$ & 0 \\ \hline
1 &SOH&DC1&   &   &   &   & / &   & a & j &\verb!~!&&A& J &   & 1 \\ \hline
2 &STX&DC2&FS &SYN&   &   &   &   & b & k & s &   & B & K & S & 2 \\ \hline
3 &ETX&DC3&   &   &   &   &   &   & c & l & t &   & C & L & T & 3 \\ \hline
4 &   &   &   &   &   &   &   &   & d & m & u &   & D & M & U & 4 \\ \hline
5 &HT &   &LF &   &   &   &   &   & e & n & v &   & E & N & V & 5 \\ \hline
6 &   &BS &ETB&   &   &   &   &   & f & o & w &   & F & O & W & 6 \\ \hline
7 &DEL&   &ESC&EOT&   &   &   &   & g & p & x &   & G & P & X & 7 \\ \hline
8 &   &CAN&   &   &   &   &   &   & h & q & y &   & H & Q & Y & 8 \\ \hline
9 &   &EM &   &   &   &   &   &   & i & r & z &   & I & R & Z & 9 \\ \hline
A &   &   &   &   &※ &※ &※ & : &   &   &   &   &   &   &   &   \\ \hline
B &VT &   &   &   & . &\yen&, &\# &   &   &   &   &   &   &   &   \\ \hline
C &FF &   &   &DC4&$<$&$*$&\% & @ &   &   &   &   &   &   &   &   \\ \hline
D &CR &GS &ENQ&NAK& ( & ) &\_ & ' &   &   &   &   &   &   &   &   \\ \hline
E &SO &RS &ACK&   & + & ; &$>$& = &   &   &   &   &   &   &   &   \\ \hline
F &SI &US &BEL&SUB&※ &※ & ? & " &   &   &   &   &   &   &   &   \\ \hline
  \end{tabular}
  }
\end{center}
\begin{itemize}
   \item 制御コードの意味に関しては, この節の最後の表を参照のこと.
   \item 富士通のコードにはこれ以外の制御コードも定義されている. 
   \item 日立のEBCDIKではアルファベットの小文字のコードが異なる. 
   \item 特殊文字部分の※印は富士通と日立で定義が異なる部分である. 
   \item \yen (5B) は通貨記号であり, アメリカでは \$ となる. 
      その場合には, E0の\$は\verb!\! (バックスラッシュ)となる. 
\end{itemize}

\newpage
\begin{center}
  {\bf ASCII コード表}\\
  {\setlength{\tabcolsep}{0.5mm} \tt
  \begin{tabular}%
    {|c|c|c|c|c|c|c|c|c|}
    \hline
    \MB{} & \MB{0} & \MB{1} & \MB{2} & \MB{3} & 
            \MB{4} & \MB{5} & \MB{6} & \MB{7} \\ \hline 
      %   0   1   2   3   4   5   6   7  
      0 & NUL & DLE & SP  &  0  &  @  &  P     &     &  p     \\ \hline
      1 & SOH & DC1 &  !  &  1  &  A  &  Q     &  a  &  q     \\ \hline
      2 & STX & DC2 &  "  &  2  &  B  &  R     &  b  &  r     \\ \hline
      3 & ETX & DC3 & \#  &  3  &  C  &  S     &  c  &  s     \\ \hline
      4 & EOT & DC4 & \$  &  4  &  D  &  T     &  d  &  t     \\ \hline
      5 & ENQ & NAK & \%  &  5  &  E  &  U     &  e  &  u     \\ \hline
      6 & ACK & SYN & \&  &  6  &  F  &  V     &  f  &  v     \\ \hline
      7 & BEL & ETB &  '  &  7  &  G  &  W     &  g  &  w     \\ \hline
      8 & BS  & CAN &  (  &  8  &  H  &  X     &  h  &  x     \\ \hline
      9 & HT  & EM  &  )  &  9  &  I  &  Y     &  i  &  y     \\ \hline
      A & LF  & SUB &  *  &  :  &  J  &  Z     &  j  &  z     \\ \hline
      B & VT  & ESC &  +  &  ;  &  K  &  [     &  k  & \{     \\ \hline
      C & FF  & FS  &  ,  & $<$ &  L  &\verb!\!&  l  &  |     \\ \hline
      D & CR  & GS  &  -  &  =  &  M  &  ]     &  m  & \}     \\ \hline
      E & SO  & RS  &  .  & $>$ &  N  &\verb!^!&  n  &\verb!~!\\ \hline
      F & SI  & US  &  /  &  ?  &  O  &  \_    &  o  &  DEL   \\ \hline
  \end{tabular}
  }
\end{center}
\vspace{1em}

JIS X0201 では上の表の\verb!\!が\yen, \verb!~!が$^-$(上線)となっている. 

\newpage
\begin{center}
      {\bf 制御コード表} \\
      {\small
      \begin{tabular}{lll}
        \hline
        記号&     意味         &       英語名          \\
        \hline
        {\tt NUL} & 空値             & null                  \\
        {\tt SOH} & ヘディング開始   & start of heading      \\
        {\tt STX} & テキスト開始     & start of text         \\
        {\tt ETX} & テキスト終了     & end of text           \\
        {\tt EOT} & 伝送終了         & end of transmission   \\
        {\tt ENQ} & 問い合わせ       & enquiry               \\
        {\tt ACK} & 肯定応答         & acknowledge           \\
        {\tt BEL} & ベル             & bell                  \\
        {\tt BS } & 後退             & backspace             \\
        {\tt HT } & 水平タブ         & horizontal tabulation \\
        {\tt LF } & 改行             & line feed             \\
        {\tt VT } & 垂直タブ         & horizontal tabulation \\
        {\tt FF } & 改ページ         & form feed             \\
        {\tt CR } & 復帰             & carriage return       \\
        {\tt SO } & シフトアウト     & shift out             \\
        {\tt SI } & シフトイン       & shift in              \\
        {\tt DLE} & 伝送制御拡張     & data link escape      \\
        \hline
      \end{tabular}
      \begin{tabular}{lll}
        \hline
        記号&     意味         &       英語名          \\
        \hline
        {\tt DC1} & 装置制御1        & device control 1      \\
        {\tt DC2} & 装置制御2        & device control 2      \\
        {\tt DC3} & 装置制御3        & device control 3      \\
        {\tt DC4} & 装置制御4        & device control 4      \\
        {\tt NAK} & 否定応答         & negative acknowledge  \\
        {\tt SYN} & 同期信号         & synchronous idle      \\
        {\tt ETB} & 伝送ブロック終結 & end of transmission block \\
        {\tt CAN} & 取消             & cancel                \\
        {\tt EM } & 媒体終端         & end of medium         \\
        {\tt SUB} & 置換文字         & substitute character  \\
        {\tt ESC} & 拡張             & escape                \\
        {\tt FS } & ファイル分離文字 & file separator        \\
        {\tt GS } & グループ分離文字 & group separator       \\
        {\tt RS } & レコード分離文字 & record separator      \\
        {\tt US } & ユニット分離文字 & unit separator        \\
        {\tt SP } & 空白             & space                 \\
        {\tt DEL} & 消去             & delete                \\
        \hline
      \end{tabular}
      }
\end{center}
\vspace{1cm}

\begin{center}
  {\bf 富士通と日立のEBCDICとASCIIの対応 }\\
      {\tt
      \begin{tabular}{cccc}
        \hline
        コード    & 富士通  &  日立    &  ASCII   \\
        \hline
          4A      &   c*    &   [      &   [      \\
          4F      & \verb!|!&   !      &   !      \\
          5A      &   !     &   ]      &   ]      \\
          5B      &  \yen   &  \yen    &   \$     \\
          5F      & $\neg$  & \verb!^! & \verb!^! \\
          6A      &         & \verb!|! & \verb!|! \\
          E0      &  \$     &   \$     & \verb!\! \\
        \hline
      \end{tabular}
      }

\end{center}

\begin{quote}
\begin{itemize}
  \item 注1:富士通の4Aはcに縦棒. 
  \item 注2:ASCIIコードとの対応は, 
          通常アスキー端末に出力されるコードで, 
          これ以外のコードに変換される場合もある. 
\end{itemize}
\end{quote}
