No. 40/622 Index Prev Next
Relay-Version: version B 2.10.2 9/5/84; site titcca.UUCP
Posting-Version: version B 2.10.2 9/5/84; site tsuda.UUCP
Path: titcca!koudai!kddlab!nttlab!tsuda!ogawa
From: ogawa@tsuda.UUCP (T. ogawa)
Newsgroups: fj.kanji
Subject: Commentary on escape sequence by Prof. Wada (In Japanese)
Message-ID: < 149@tsuda.UUCP> 
Date: 11 Jun 86 01:29:07 GMT
Date-Received: 12 Jun 86 20:53:24 GMT
Distribution: fj
Organization: Tsuda College, Japan
Lines: 188

どうも以前に出した記事を読んでおられない方が多いようなので、内容の
ある議論ができるように、もう一度和田先生の解説を投稿します。
エスケープについて憶測で議論する前に、この記事をよく読んでください。

           小川貴英(ogawa@tsuda)


  複数の図形文字セットの使い方

  junetで漢字のメイルやニュースがとび交っているが、図形文字セット
の切り換え方に誤解もあるようなので次に説明する。更にくわしくはJIS 
C6228−1984およびbit Vol 14.No.6エディタとテキス
ト処理(2)を見てほしい。
  ASCIIやJISローマ字、日本語漢字のような文字セットを図形文字セ
ットという。通常は1文字を7単位(7ビット)(列2〜列7)の1バイトか
2バイトで表現する。(CRやESCなどは制御文字といい制御文字セットと
いうものが別に存在する。)
  複数の図形文字セットをとっかえひっかえ使いたいときには、これからどの
図形文字セットを使うかを指定しなければならない。この指定は一般的には2
段構えになっている。沢山の図形文字セットから使おうとするものを一旦G0、
G1、G2、G3のバッファのいずれかに取り出す。この操作を「指示する(
designate)」という。バッファは新しく別の図形文字セットをそこ
へ取り出してくると、そこに前にあったものは失くなる。最大4つの図形文字
セットをバッファに取り出しておくことができる。(バッファといっても1バ
イトのASCIIも2バイトの漢字も入るから不思議である。)次の操作はバ
ッファのいずれかの図形文字セットを7単位のコード表へ持ち込むことで、こ
れを「呼び出す(invoke)」という。コード表は7単位環境にはひとつ、
8単位環境には左と右とふたつある。G0、G1、G2、G3から7単位環境
のコード表に持ち込むにはそれぞれSI(shift in)、SO(shi
ft out)、LS2(locking shift 2)、LS3(lo
cking shift 3)を使う。そこで7単位環境ではG0にJISロ
ーマ字、G1にJIS片仮名を指示しておき、SIでローマ字に切り換え、S
Oで片仮名に切り換えることができる。8単位環境ではG0、G1、G2、G
3から左のコード表に持ち込むのにそれぞれLS0(locking shi
ft 0)、LS1(locking shift 1)、LS2、LS3を
使う。LS0とLS1はSIとSOと同じコード(0/15、0/14)であ
る。G1、G2、G3から右のコード表に持ち込むにはそれぞれLS1R(l
ocking shift 1 right)、LS2R、LS3Rを使う。
歴史的理由でG0から右に持ち込むことはできない。
  LS2、LS3、LS1R、LS2R、LS3Rの制御機能にはどういうコ
ードを使うかというと、 これは ESC Fsシーケンスといってこの順にそ
れぞれ ESC 6/14、 ESC 6/15、ESC 7/14、ESC 7/
13、ESC 7/12ときめてある。


                        7 bit envronment
                           ----------
              invoke       | code   |
           --------------->| table  |< ---------------
           |               |        |               |
           |            -->|        |< --            |
           |            |  |        |  |            |
           |            |  ----------  |            |
           |            |              |            |
           |            |              |            |
      ----------    ----------    ----------    ----------
      |        |    |        |    |        |    |        |
      |        |    |        |    |        |    |        |
      |  G0    |    |  G1    |    |  G2    |    |  G3    |
      |        |    |        |    |        |    |        |
      |        |    |        |    |        |    |        |
      ----------    ----------    ----------    ----------
           ^            ^
    ESC ( B|            |    ESC $ ) @  designate
           |            -----------------------------
           |                                        |
      ----------    ----------    ----------    ----------
      |        |    |        |    |        |    |        |
      |        |    |        |    |        |    |        |
      |ASCII   |    |JIS     |    |JIS     |    |JIS     |
      |        |    |roman   |    |katakana|    |kanji   |
      |        |    |        |    |        |    |1978    |
      ----------    ----------    ----------    ----------


  話を第一段階、指示の仕方に戻す。1バイト7単位の図形文字セットを指示
するには取り出す先がG0、G1、G2、G3のいずれかに従ってそれぞれE
SC 2/8 F、ESC 2/9 F、ESC 2/10 F、ESC 2/11 
Fの形のエスケープシーケンスを使う。Fは終端文字(final char
acter)といい、図形文字セット毎にきまっている。7ビットの図形文字
セットでは

 図形文字セット      F
 ASCII            4/2
 JIS片仮名          4/9
 JISローマ字        4/10
 スウェーデン名前用    4/8

従ってASCIIをG0に指示するには ESC 2/8 4/2とする。 図形
文字で表わせば2/8が(、4/2がBだから ESC( Bとなる。JISロ
ーマ字をG1に指示するにのは ESC )Jを使う。
  複数バイトの指示はG0、G1、G2、G3に対しそれぞれESC 2/4 
F、ESC 2/4 2/9 F、ESC 2/4 2/10 F、ESC 2/4 
2/11 Fの形を使うことになっていた。 G0だけ形がちがうのは複数バイ
トがその昔G0へしか指示できなかった時代の名残りである。Fの方は、

  図形文字セット      F
  日本語漢字(旧)  4/0   JIS C6226−1978
  日本語漢字(新)  4/2   JIS C6226−1983
  中国漢字          4/1

となっている。従って1978年版のJIS漢字をG1に指示するにはESC
 $ )@となる。(G0へ指示するときだけ形が違うのは気持ちが悪いという
ので、 F=4/3以降はG0への指示もESC 2/4 2/8 Fとすること
になった。)
  以上のように、使いたい図形文字セットをバッファに指示し、コード表へ呼
び出して使うのが正式なのだが、それは面倒という場合には、あるバッファは
あるコード表に直結していて、指示しただけで即使えるという方法もある。そ
れには使う前にアナウンサというのを送る。例えばESC 2/0 4/1を
送ると、これは「バッファはG0しか使わない、そのかわり、G0へ指示した
ものは7単位環境ではすぐコード表へ呼び出す。8単位ではG0へ指示したも
のを左のコード表へ呼び出す」という約束をする。アナウンサにはまだ沢山あ
るがそれはJIS C6228の8章を見てほしい。しかし上には上があって、
情報交換当事者間の合意があればアナウンサも省略してよいことになっている。
  そこでjunetで漢字を使う場合だが、次のようにするのはどうであろう
か。当事者間の合意があったとしてESC 2/0 4/1のアナウンサがあ
ったように使う。つまり図形文字セットを切り換えるには常に毎回G0への指
示からやり直すものとする。そして呼び出しの制御機能は使わない。

  ASCIIへ切り換えるには           ESC( B
  JISローマ字へ切り換えるには        ESC( J
  JIS漢字(1978)へ切り換えるには ESC $ @
  JIS漢字(1983)へ切り換えるには ESC $ B

  これまでjunetの漢字ニュースなどで漢字へ入るのはESC $ @で、
出るのはESC( Hといわれたりしていたが、 サブルーチンを呼んだり戻っ
たりするように考えるのは間違いで、エスケープシーケンスによる切り換えは
常にGOTO文であり、以前何を使っていたかには関係ないことに注意してほ
しい。 従ってESC( Hは漢字から出るのではなく、1バイトのローマ字へ
「行く」という表現が正しいが、ここにもうひとつの誤りがある。上にあるよ
うにJISローマ字へ切り換えるにはESC( Jを使わなければならない。 
しかしこれは世の中では間違ってESC( Hと伝わっている。それはJIS 
C6228−1975が制定されたとき、 JIS C6220の片仮名とロー
マ字のFはそれぞれ4/7と4/8になると予想してそう記述してしまったか
らである。制定のときには4/6までしかきまっていなかったからだ。一方片
仮名とローマ字のFを貰うべく登録手続きをしたのだが、その頃同じく登録手
続き中であったスウェーデン基本コードとスウェーデン名前用コードが4/7
と4/8を貰い、日本の片仮名とローマ字は4/9と4/10になった。そこ
でJIS C6228−1975には正誤表をつけて頒布したが、 このことは
徹底しなかった。 JIS C6228−1984の解15ページには正しい表
がでているが、JISハンドブックには解説がないからそれだけ見たのではわ
からない。
  JISのローマ字とスウェーデン名前用の文字セットは次の点で字形がちが
っている。スウェーデンのものだけ示す。

  2/4      $ではなく一般の通貨記号(太陽マークといわれるもの)
  4/0      大文字E+アキュートアクセント
  5/11    大文字A+ウムラウト
  5/12    大文字O+ウムラウト
  5/13    大文字オングストロームのA
  5/14    大文字U+ウムラウト
  6/10、7/11−7/14上のものの小文字

 ついでにASCIIとJISローマ字のちがいは次の通り

               ASCII      JISローマ字
  5/12    \              ¥
  7/14    ~ (チルド)    ‾(オーバーライン)

この方は軽微な差と思われる。
  junetのシステムとしては次のように考えるのはどうか。送信側は自分
の端末がASCIIかJISかによりESC( BかESC( Jを先行させる。
受信側はESC( B、ESC( J、ESC( Hを見たら受けつける。 ソフ
ト、ハード的に厳密にできるなら、このどれを受けたかにより、それぞれの図
形文字セットの図形をだす。面倒なら適当にASCIIかJISローマ字で出
力する。大切なことは送信側はスウェーデン名前用を使っていない限りESC
( Hをなるべく早くやめることである。 世の中から大体なくなったと思った
ら受信側もESC( Hをはねるようにソフトを変更する。
  漢字については次のようにしたい。 JIS C6226−1978(旧版)
にくらべ1983(新版)は特殊文字が39文字、けい線素片が32文字、漢
字が4文字ふえた。旧版しか知らない端末には新版の端末から困るコードも送
られてくるかもしれない。漢字にも第一、第二水準間で入れ換えがあったが、
一応同じ字になっているから読むには困らないであろう。そこで漢字の方も、
送信側が自分はどちらのJISのつもりかをつけて送ることにする。受信側は
ESC$@、ESC$Bのいずれがきてもあわてずに処理をする。規格協会で
売っている16ドット、24ドットの漢字パターンは新版のJISのものであ
る。IBM5550のコードは旧版である。
  制御文字について一言、CRとかTABとか制御文字はどの図形文字セット
が呼び出してあるかに関係なく使えるようなコード構造になっている。改行す
るのに漢字から一度ASCIIへでなければならないと思っている人もいるよ
うだがこれは誤りである。

                                                  以上

P.S.コードの切り換えについてわからないことがあったら、和田まで聞い
て下さい。

                (03)812-2111 ext. 7410
                junet address wada@ccut.utyo.junet
Next
Continue