%\CheckSum{1132}
%\title{日本語文字コード変換パッケージjconv~\fileversion}
%\author{本田知亮}
%\date{\filedate}
%\maketitle
%
%\changes{v1.0}{2001/01/30}{公開}
%\changes{v1.5}{2001/07/25}{sjisをjisに変換するルーチンの不具合修正(1)}
%\changes{v1.6}{2001/07/27}{sjisをjisに変換するルーチンの不具合修正(2)}
%
%\section{はじめに}
%日本語語の文字コードを，指定形式から別の指定の形式に変換する
%マクロを提供しています．対応形式は，jis，sjis，euc，kuten(区点)です．
%変換のマクロはすべて，|\XXXtoYYY|[\meta{option}]\meta{arg}の形式で
%optionには入力と出力のコードが16進数かそれ以外か，
%変換結果を保存するマクロを指定するかが記述できます．
%\par
%このマクロはご自由にお使いください．ただし，
%マクロそのものに関して著作権を「自由に主張」するのは禁止します．
%不具合・改善意見などがあればご連絡ください
%\par
%なんらかの改変をされたものを再配布することは禁止しませんが
%その際は改変個所を明示してください．
%できればその際にはご連絡ください．
%\par
%このマクロを作成するにあたっては
%Ken Lunde(小林剣)氏の``Understanding Japanese Information Processing''
%, O'Reilly \& Associate, Inc
%(邦訳「日本語情報処理」(春遍雀来，鈴木武生訳，SoftBank)の情報を
%主に使用しています．
%\section{制限}
%文字を引数にして，その文字のコードを判別させて，変換後のコード番号を
%出力する，つまり|\tojis{亜}|として，変換結果を|3021|(16)とするようなことは
%実装していません．
%\par
%また，出力結果を16進数にして，それを保存しているマクロを，このパッケージの
%内部で使用している基数変換マクロ|\HexToDeci|に引数として与えると
%エラーが発生します．
%\iffalse
%<*driver>
\documentclass{jltxdoc}
\usepackage{jconv}
\GetFileInfo{jconv.sty}
\begin{document}
\DocInput{jconv.dtx}
\end{document}
%</driver>
%\fi
%\StopEventually{}
%
%\section{マクロ}
%\subsection{マクロのプリアンブル}
%    \begin{macrocode}
%<*jconv>
\NeedsTeXFormat{pLaTeX2e}
\ProvidesPackage{jconv}[2001/07/27 v1.6 Tomoaki Honda]
\RequirePackage{keyval}
\newcount\@tempcntc
\newcount\@tempcntd
\newif\if@Hex@In@
\newif\if@Hex@Out@
%</jconv>
%    \end{macrocode}
%\subsection{内部計算用マクロ}
%内部で計算のために使用するためのマクロがいくつかあります．
%このパッケージ内で使うことだけを考えて作ってありますが，
%ある程度汎用的に使えるかもしれません．
%\begin{macro}{\jmod}
%書式は|\jmod|[\meta{option}]\meta{arg1}\meta{arg2}です．
%\meta{arg1}を\meta{arg2}で割った余りを
%\meta{option}で指定したマクロに保存します．
%デフォルト(無指定)では|\R|に保存します．例えば
%|\jmod[\amari]{13}{4}|\jmod[\amari]{13}{4} とすると，
%$13\div 4=3\cdots1$ですので，|\amari|は\amari となります．
%    \begin{macrocode}
%<*jconv>
\def\jmod{\@ifnextchar[%]
  {\@jmod}{\@jmod[\R]}%
}
\def\@jmod[#1]#2#3{%
\begingroup%
  \@tempcntc#2\relax%
  \divide\@tempcntc#3\relax%
  \multiply\@tempcntc#3\relax%
  \advance\@tempcntc-#2\relax%
  \multiply\@tempcntc\m@ne%
  \edef\x{\def\noexpand#1{\the\@tempcntc}}%
\expandafter\endgroup\x%
}
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\power}
%書式は|\power|[\meta{option}]\meta{arg1}\meta{arg2}です．
%\meta{arg1}の\meta{arg2}乗を
%\meta{option}で指定したマクロに保存します．
%デフォルト(無指定)では|\Pow|に保存します．例えば
%|\power[\Beki]{5}{3}|\power[\Beki]{5}{3} とすると，$5^3=125$ですので，
%|\Beki|は$\Beki$となります．
%    \begin{macrocode}
%<*jconv>
\def\power{\@ifnextchar[%]
  {\@power}{\@power[\Pow]}%
}
\def\@power[#1]#2#3{%
\begingroup%
  \@tempcntc#2\@tempcntd#3\def\Pow{1}%
  \@pow@r%
  \edef\x{\def\noexpand#1{\Pow}}%
\expandafter\endgroup\x%
}%
\def\@pow@r{%
  \ifnum\@tempcntd=\z@\let\next\relax\else%
  \begingroup%
    \expandafter\@tempcntd\Pow\relax%
    \multiply\@tempcntd by\@tempcntc%
    \edef\x{\def\noexpand\Pow{\the\@tempcntd}}%
  \expandafter\endgroup\x%
  \advance\@tempcntd\m@ne%
  \let\next\@pow@r%
  \fi\next%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\HexToDeci}
%書式は|\HexToDeci|[\meta{option}]\meta{arg}です．
%16進数の\meta{arg}を10進数に変換したものを
%\meta{option}で指定したマクロに保存します．
%デフォルトでは|\D|に保存にします．例えば，
%|\HexToDeci[\Deci]{889F}|\HexToDeci[\Deci]{889F} とすると，
%|\Deci|は\Deci になります．
%\par
%変換の実装は，
%$$
%1234_{(\mathrm{H})}=1*16^3+2*16^2+3*16+4^16^0=(((0+1)*16+2)*16+3)*16+4
%$$
%などとかけることを使用しています．
%    \begin{macrocode}
%<*jconv>
\def\HexToDeci{\@ifnextchar[%]
 {\@HexToDeci}{\@HexToDeci[\D]}%
}%
\def\@HexToDeci[#1]#2{%
\begingroup%
  \@tempcntc\z@%
  \@H@xToDeci#2\relax%
  \edef\x{\def\noexpand#1{\the\@tempcntc}}%
\expandafter\endgroup\x%
}%
\def\@H@xToDeci#1{%
   \if#1\relax\let\next\relax%
   \else%
     \ifnum\@tempcntc=\z@\else\multiply\@tempcntc\sixt@@n\fi%
     \advance\@tempcntc\@HtoD{#1}%
     \let\next\@H@xToDeci%
   \fi\next%
}%
\def\@HtoD#1{\if#1A10\else\if#1B11\else%
  \if#1C12\else\if#1D13\else\if#1E14\else%
  \if#1F15\else#1\fi\fi\fi\fi\fi\fi%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\DeciToHex}
%書式は|\DeciToHex|[\meta{option}]\meta{arg}です．
%10進数の\meta{arg}を16進数に変換したものを
%\meta{option}で指定したマクロに保存します．
%デフォルトでは|\H|に保存にします．例えば，
%|\DeciToHex[\Hex]{34975}|\DeciToHex[\Hex]{34975} とすると，
%|\Hex|は\Hex になります．
%    \begin{macrocode}
%<*jconv>
\def\DeciToHex{\@ifnextchar[%]
 {\@DeciToHex}{\@DeciToHex[\H]}%
}
\def\@DeciToHex[#1]#2{%
\begingroup%
  \@tempcntc#2\relax\def\@temphex{}%
  \@D@ciToHex%
  \edef\x{\edef\noexpand#1{\@temphex}}%
\expandafter\endgroup\x%
}%
\def\@D@ciToHex{%
  \ifnum\@tempcntc<\sixt@@n%
    \edef\@temphex{\@DtoH{\the\@tempcntc}\@temphex}%
    %\@DtoH{\the\@tempcntc}
    \let\next\relax%
  \else%
    \edef\x{\the\@tempcntc}%
    \jmod\x\sixt@@n%
    \divide\@tempcntc\sixt@@n%
    \edef\@temphex{\@DtoH{\R}\@temphex}%
    %\@DtoH{\R}%
    \let\next\@D@ciToHex%
  \fi\next%
}%
\def\@DtoH#1{%
  \ifnum#1>9%
  \ifnum#1<11 A\else\ifnum#1<12 B\else%
  \ifnum#1<13 C\else\ifnum#1<14 D\else%
  \ifnum#1<15 E\else\ifnum#1<16 F\else\relax%
  \fi\fi\fi\fi\fi\fi%
  \else#1\fi%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\div@jmod@cclvi}
%書式は|\div@jmod@cclvi|\meta{arg}です
%10進数の\meta{arg}を256で割った商を|\@Upp@r|，余りを|\@Low@r|に保存します．
%なぜかこれだけは，保存マクロ名が決めうちです|(^^;;|．
%\makeatletter
%例えば，|\div@jmod@cclvi{34975}|\div@jmod@cclvi{34975} とすると
%商|\@Upp@r|は\@Upp@r に，余り|\@Low@r|は\@Low@r となります．
%\makeatother
%    \begin{macrocode}
%<*jconv>
\def\div@jmod@cclvi#1{%
\begingroup%
  \jmod{#1}{\@cclvi}%
  \@tempcntc#1\relax%
  \divide\@tempcntc\@cclvi%
  \edef\@Quot{\the\@tempcntc}%
  \edef\x{\edef\noexpand\@Low@r{\R}\edef\noexpand\@Upp@r{\@Quot}}%
\expandafter\endgroup\x%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\subsection{コード変換マクロ}
%まずは，keyval packageを使うための準備をします．
%入力が16進数であることを|\@Hex@In@true|で，
%出力が16進数であることを|\@Hex@In@true|であらわし，
%16進数でなければ，自動的に10進数であるとします．つまり，
%8進数，2進数などには対応していません．
%    \begin{macrocode}
%<*jconv>
\define@key{jconv}{incode}{%
  \ifnum#1=\sixt@@n\@Hex@In@true\else\@Hex@In@false\fi}%
\define@key{jconv}{outcode}{%
  \ifnum#1=\sixt@@n\@Hex@Out@true\else\@Hex@Out@false\fi}%
\define@key{jconv}{return}{%
\begingroup%
  \escapechar=\m@ne%
  \edef\x{\def\noexpand\cs@return{\string #1}}%
\expandafter\endgroup\x%
}%
%</jconv>
%    \end{macrocode}
%コード変換のマクロはすべて，|\XXXtoYYY|という形をしています．
%|XXX|は入力のコード名，|YYY|は出力のコード名で，それぞれ
%sjis，jis，euc，kutenを記述できます．
%例えば，|\sjistokuten|はSJISのコードからkutenを算出します．
%\par
%kuten以外の入力と出力はすべて共通です．
%各マクロではオプション引数で|incode=num|，|outcode=num|
%の形式で値を設定できます．|num|には16を指定すれば，16進数をあらわし，
%16以外の数字を指定すれば10を指定したものとみなされます．
%|incode|，|outcode|を指定しなかった場合は，
%kutenが関わっていないときは16が，
%kutenが関わっているときは10が指定されているとみなされます．
%例えば，|\kutentojis|はデフォルトでは，
%入力のデフォルトは10進数，出力のデフォルトは16進数です．
%\par
%変換結果を保存するマクロ名は出力が区点ではないときは
%|return=cs|とオプションで指定できます．例えば
%|\sjistojis[return=\JIS]{889F}|\sjistojis[return=\JIS]{889F}とすると
%|\JIS|は\JIS となります．デフォルトでは|\resultcode|に保存されます
%出力が区点である場合には，
%|KU=csku|，|TEN=csten|とオプション指定することによって
%保存するマクロ名を指定でしきます．例えば
%|\sjistokuten[KU=\区,TEN=\点]{889F}|\sjistokuten[KU=\区,TEN=\点]{889F}
%とすると|\区|は\区 ，|\点|は\点 となります．
%\par
%区点で入力する場合は，区と点を|-|で区切ってください．
%例えば，|\kutentojis{16-1}|\kutentojis{16-1}とすると
%|\resultcode|は\resultcode になります．
%\par
%\begin{macro}{\pre@trans}
%keyval packageの処理や計算のための前処理をさせるマクロです．
%引数はそれぞれのコード変換マクロのものをそのまま渡します．
%    \begin{macrocode}
%<*jconv>
\def\pre@trans#1#2{%
  \@Hex@In@true%
  \@Hex@Out@true%
  \def\cs@return{resultcode}%
  \setkeys{jconv}{#1}%
  \if@Hex@In@%
    \HexToDeci{#2}%
    \@tempcntc\D\relax%
  \else%
    \@tempcntc#2\relax%
  \fi%
  \edef\y{\the\@tempcntc}%
  \div@jmod@cclvi{\y}%
  \expandafter\@tempcntc\@Upp@r\relax%
  \expandafter\@tempcntd\@Low@r\relax%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\post@trans}
%計算後の数値を指定の形式して外部へ出力する処理をするマクロです
%    \begin{macrocode}
%<*jconv>
\def\post@trans{%
  \multiply\@tempcntc\@cclvi%
  \advance\@tempcntc\@tempcntd%
  \if@Hex@Out@%
    \edef\y{\the\@tempcntc}%
    \DeciToHex{\y}%
    \edef\x{\noexpand\expandafter%
      \noexpand\edef\noexpand\csname \cs@return\noexpand\endcsname{\H}}%
  \else%
    \edef\x{\noexpand\expandafter%
      \noexpand\edef\noexpand\csname \cs@return\endcsname{\the\@tempcntc}}%
  \fi%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jistosjis}
%JISをSJISに変換します．
%    \begin{macrocode}
%<*jconv>
\def\jistosjis{\@ifnextchar[%]
 {\@jistosjis}{\@jistosjis[]}%
}%
\def\@jistosjis[#1]#2{%
\begingroup%
  \pre@trans{#1}{#2}%
  \ifnum\@tempcntc<95\relax%
    \def\rowOffset{112}\relax%
  \else%
    \def\rowOffset{176}\relax%
  \fi%
  \ifodd\@tempcntc%
    \ifnum\@tempcntd>95\relax%
      \def\cellOffset{32}%
    \else%
      \def\cellOffset{31}%
    \fi%
  \else%
     \def\cellOffset{126}%
  \fi%
  \advance\@tempcntc\@ne%
  \divide\@tempcntc\tw@%
  \advance\@tempcntc\rowOffset\relax%
  \advance\@tempcntd\cellOffset\relax%
  \post@trans%
  \expandafter\endgroup\x%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\sjistojis}
%SJISをJISに変換します．
%    \begin{macrocode}
%<*jconv>
\def\sjistojis{\@ifnextchar[%]
 {\@sjistojis}{\@sjistojis[]}%
}%
\def\@sjistojis[#1]#2{%
\begingroup%
  \pre@trans{#1}{#2}%
  \ifnum\@tempcntd<159\relax%
    \def\adjust{1}%
  \else%
    \def\adjust{0}%
  \fi%
  \ifnum\@tempcntc<160\relax%
    \def\rowOffset{112}%
  \else%
    \def\rowOffset{176}%
  \fi%
  \if\adjust1\relax%
    \ifnum\@tempcntd>127\relax%
      \def\cellOffset{32}%
    \else%
      \def\cellOffset{31}%
    \fi%
  \else%
    \def\cellOffset{126}%
  \fi%
  \advance\@tempcntc-\rowOffset\relax%
  \multiply\@tempcntc\tw@%
  \advance\@tempcntc-\adjust\relax%
  \advance\@tempcntd-\cellOffset\relax%
 \post@trans%
  \expandafter\endgroup\x%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jistoeuc}
%JISをEUCに変換します．
%    \begin{macrocode}
%<*jconv>
\def\jistoeuc{\@ifnextchar[%]
 {\@jistoeuc}{\@jistoeuc[]}%
}%

\def\@jistoeuc[#1]#2{%
\begingroup%
  \pre@trans{#1}{#2}%
  \advance\@tempcntc128\relax
  \advance\@tempcntd128\relax
  \post@trans%
  \expandafter\endgroup\x%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jistoeuc}
%JISをEUCに変換します．
%    \begin{macrocode}
%<*jconv>
\def\euctojis{\@ifnextchar[%]
 {\@euctojis}{\@euctojis[]}%
}%
\def\@euctojis[#1]#2{%
\begingroup%
  \pre@trans{#1}{#2}%
  \advance\@tempcntc-128\relax
  \advance\@tempcntd-128\relax
  \post@trans%
  \expandafter\endgroup\x%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\jistokuten}
%JISをKUTENに変換します．
%    \begin{macrocode}
%<*jconv>
\define@key{jconv}{KU}{%
\begingroup%
  \escapechar=\m@ne%
  \edef\x{\def\noexpand\cs@KU@return{\string #1}}%
\expandafter\endgroup\x%
}
\define@key{jconv}{TEN}{%
\begingroup%
  \escapechar=\m@ne%
  \edef\x{\def\noexpand\cs@TEN@return{\string #1}}%
\expandafter\endgroup\x%
}%
\def\jistokuten{\@ifnextchar[%]
 {\@jistokuten}{\@jistokuten[]}%
}%
\def\@jistokuten[#1]#2{%
\begingroup%
  \@Hex@In@true%
  \def\cs@KU@return{KU}%
  \def\cs@TEN@return{TEN}%
  \setkeys{jconv}{#1}%
  \if@Hex@In@%
    \HexToDeci{#2}%
    \@tempcntc\D\relax%
  \else%
    \@tempcntc#2\relax%
  \fi%
  \edef\y{\the\@tempcntc}%
  \div@jmod@cclvi{\y}%
  \expandafter\@tempcntc\@Upp@r\relax%
  \expandafter\@tempcntd\@Low@r\relax%
  \advance\@tempcntc-32\relax%
  \advance\@tempcntd-32\relax%
  \edef\x{%
    \noexpand\expandafter\noexpand\edef%
      \noexpand\csname \cs@KU@return\noexpand\endcsname{\the\@tempcntc}%
    \noexpand\expandafter\noexpand\edef%
      \noexpand\csname \cs@TEN@return\noexpand\endcsname{\the\@tempcntd}%
  }%
  \if@Hex@Out@%
    \DeciToHex[\y]{\KU}%
    \DeciToHex[\z]{\TEN}%
  \edef\x{%
    \noexpand\expandafter\noexpand\edef\noexpand%
      \csname \cs@KU@return\noexpand\endcsname{\y}%
    \noexpand\expandafter\noexpand\edef\noexpand%
      \csname \cs@TEN@return\noexpand\endcsname{\z}%
  }%
  \fi%
  \expandafter\endgroup\x%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\kutentojis}
%KUTENをJISに変換します．
%    \begin{macrocode}
%<*jconv>
\def\kutentojis{\@ifnextchar[%]
 {\@kutentojis}{\@kutentojis[]}%
}%
\def\@kutentojis[#1]#2{%
\begingroup%
  \@Hex@Out@true%
  \def\split@hyphen##1-##2\@nil{\edef\KU{##1}\edef\TEN{##2}}%
  \def\cs@return{resultcode}%
  \expandafter\split@hyphen#2\@nil%
  \setkeys{jconv}{#1}%
  \if@Hex@In@%
    \HexToDeci{\KU}%
    \@tempcntc\H\relax%
    \HexToDeci{\TEN}%
    \@tempcntd\H\relax%
  \else%
    \@tempcntc\KU\relax%
    \@tempcntd\TEN\relax%
  \fi%
  \advance\@tempcntc32\relax%
  \advance\@tempcntd32\relax%
  \multiply\@tempcntc\@cclvi%
  \advance\@tempcntc\@tempcntd
  \edef\x{%
    \noexpand\expandafter\noexpand\edef\noexpand%
       \csname \cs@return\noexpand\endcsname{\the\@tempcntc}%
  }%
  \if@Hex@Out@%
    \edef\y{\the\@tempcntc}%
    \DeciToHex{\y}%
    \edef\x{%
     \noexpand\expandafter\noexpand\edef\noexpand%
       \csname \cs@return\noexpand\endcsname{\H}%
    }%
  \fi%
  \expandafter\endgroup\x%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\sjistokuten}
%SJISをKUTENに変換します．
%    \begin{macrocode}
%<*jconv>
\def\sjistokuten{\@ifnextchar[%]
  {\@sjistokuten}{\@sjistokuten[]}%
}%
\def\@sjistokuten[#1]#2{%
\sjistojis[#1,outcode=10]{#2}%
\jistokuten[#1,incode=10]{\resultcode}%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\euctokuten}
%EUCをKUTENに変換します．
%    \begin{macrocode}
%<*jconv>
\def\euctokuten{\@ifnextchar[%]
  {\@euctokuten}{\@euctokuten[]}%
}%
\def\@euctokuten[#1]#2{%
\euctojis[#1,outcode=10]{#2}%
\jistokuten[#1,incode=10]{\resultcode}%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\kutentosjis}
%KUTENをJISに変換します．
%    \begin{macrocode}
%<*jconv>
\def\kutentosjis{\@ifnextchar[%]
  {\@kutentosjis}{\@kutentosjis[]}%
}%
\def\@kutentosjis[#1]#2{%
\kutentojis[#1,outcode=10]{#2}%
\jistosjis[#1,incode=10]{\resultcode}%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\kutentoeuc}
%KUTENをEUCに変換します．
%    \begin{macrocode}
%<*jconv>
\def\kutentoeuc{\@ifnextchar[%]
  {\@kutentoeuc}{\@kutentoeuc[]}%
}%
\def\@kutentoeuc[#1]#2{%
\kutentojis[#1,outcode=10]{#2}%
\jistoeuc[#1,incode=10]{\resultcode}%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\sjistoeuc}
%SJISをEUCに変換します．
%    \begin{macrocode}
%<*jconv>
\def\sjistoeuc{\@ifnextchar[%]
  {\@sjistoeuc}{\@sjistoeuc[]}%
}%
\def\@sjistoeuc[#1]#2{%
\sjistojis[#1,outcode=10]{#2}%
\jistoeuc[#1,incode=10]{\resultcode}%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\begin{macro}{\euctosjis}
%EUCをSJISに変換します．
%    \begin{macrocode}
%<*jconv>
\def\euctosjis{\@ifnextchar[%]
  {\@euctosjis}{\@euctosjis[]}%
}%
\def\@euctosjis[#1]#2{%
\euctojis[#1,outcode=10]{#2}%
\jistosjis[#1,incode=10]{\resultcode}%
}%
%</jconv>
%    \end{macrocode}
%\end{macro}
%\section{サンプル}
%\begin{macro}{sample}
%|sample.tex|が生成されているので，それをコンパイルしてみてください．
%    \begin{macrocode}
%<*sample>
\documentclass[a4j]{jarticle}
\usepackage{jconv}
\usepackage{longtable}
\makeatletter
\def\tenline{%
\global\advance\@tempcntb\@ne%
\kutentojis{\the\@tempcnta-\the\@tempcntb}%
\char\jis"\resultcode&%%%文字
\the\@tempcnta&%%区
\the\@tempcntb&%%点
\kutentojis{\the\@tempcnta-\the\@tempcntb}\resultcode(16)~%%jis
\kutentojis[outcode=10]{\the\@tempcnta-\the\@tempcntb}\resultcode(10)&
\kutentosjis{\the\@tempcnta-\the\@tempcntb}\resultcode(16)~%%sjis
\kutentosjis[outcode=10]{\the\@tempcnta-\the\@tempcntb}\resultcode(10)&%%%sjis
\kutentoeuc{\the\@tempcnta-\the\@tempcntb}\resultcode(16)~%%euc
\kutentoeuc[outcode=10]{\the\@tempcnta-\the\@tempcntb}\resultcode(10)%%euc
\\\hline%
}%
\def\oneKU{%
\global\advance\@tempcnta\@ne
\global\@tempcntb\z@
\tenline\tenline\tenline\tenline\tenline%%%5
\tenline\tenline\tenline\tenline\tenline%%%10
\tenline\tenline\tenline\tenline\tenline%%%15
\tenline\tenline\tenline\tenline\tenline%%%20
\tenline\tenline\tenline\tenline\tenline%%%25
\tenline\tenline\tenline\tenline\tenline%%%30
\tenline\tenline\tenline\tenline\tenline%%%35
\tenline\tenline\tenline\tenline\tenline%%%40
\tenline\tenline\tenline\tenline\tenline%%%45
\tenline\tenline\tenline\tenline\tenline%%%50
\tenline\tenline\tenline\tenline\tenline%%%55
\tenline\tenline\tenline\tenline\tenline%%%60
\tenline\tenline\tenline\tenline\tenline%%%65
\tenline\tenline\tenline\tenline\tenline%%%70
\tenline\tenline\tenline\tenline\tenline%%%75
\tenline\tenline\tenline\tenline\tenline%%%80
\tenline\tenline\tenline\tenline\tenline%%%85
\tenline\tenline\tenline\tenline\tenline%%%90
\tenline\tenline\tenline\tenline%%%94
}
\makeatother
\begin{document}
JIS X 0208の文字コード一覧表\par
第一水準漢字は47区51点(\char\kuten"2F33)まで，
第二水準漢字は48区1点(\char\kuten"3001)からなので注意．
\makeatletter
\@tempcnta15\relax\@tempcntb\z@
\begin{longtable}{|c|c|c|c|c|c|}\hline
漢字&区&点&JIS&SJIS&EUC\\\hline
\endhead
\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU%%%16-25
\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU%%%26-35
\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU%%%36-45
\oneKU%%46
%%\oneKU47
\makeatletter
\global\advance\@tempcnta\@ne
\global\@tempcntb\z@
\makeatother
\tenline\tenline\tenline\tenline\tenline%%%5
\tenline\tenline\tenline\tenline\tenline%%%10
\tenline\tenline\tenline\tenline\tenline%%%15
\tenline\tenline\tenline\tenline\tenline%%%20
\tenline\tenline\tenline\tenline\tenline%%%25
\tenline\tenline\tenline\tenline\tenline%%%30
\tenline\tenline\tenline\tenline\tenline%%%35
\tenline\tenline\tenline\tenline\tenline%%%40
\tenline\tenline\tenline\tenline\tenline%%%45
\tenline\tenline\tenline\tenline\tenline%%%50
\tenline%
%%%%47-51
\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU%%%48-55
\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU%%%56-65
\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU%%%66-75
\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU\oneKU%%%76-83
\makeatletter%%%84
\global\advance\@tempcnta\@ne\global\@tempcntb\z@
\makeatother
\tenline\tenline\tenline%%%1,2,3
\tenline\tenline\tenline%%%4,5,6
\end{longtable}
\end{document}
%</sample>
%    \end{macrocode}
%\end{macro}{sample}
%\Finale
