■■TRONコードを他OSに実装するに際しての考察■■ ■仕様書と実装 「BTRON3仕様書Ver 3.20.00」が公開されているが、製品「超漢字(B-right/V R2.0)」との間には少しく距離があり、仕様書を見ただけではTRONコードの使い方がわかりにくい。 BTRONに関しての学術論文やITRONなどの周辺知識を知っていることを前提に記述されているようで、記載に舌足らずな面があることや、BTRON仕様書の改訂が製品に追いついていないことなどが原因と思われる。 ここでは、B-right/V R2.0(超漢字)におけるTADの実装を文字コードに焦点を当てて例示してみる。 なお、パーソナルメディア(株)のサイトで公開されているB-right/V R2.0仕様書(現時点では製品の仕様書だが、かなりの部分が次回改定時にBTRON3仕様へ移行する方向だとのこと)やTRON.org(http://www.tron.org)も参照のこと。 ■サンプルテキスト ----- BTRONでは「龍」の異体字の1つ「〓」が表記できます。 ----- ※注意:〓は、「龍」の旁のなかの三の一番下の横線が「ノ」の形になっている字体。文字鏡番号050706。 ※「BTRON」は全角表示。「1」は半角表示。 と表示されているBTRONの【文字部分】をダンプすると、 ===== dump-1 ----- 0000:2342 2354 2352 234f 234e 2447 244f 2156 BTRONでは「 0010:4e36 2157 244e 305b 424e 3b7a 244e ffa2 龍」の異体字の.. 0020:0006 0300 0000 0102 2331 ffa2 0006 0300 ........1...... 0030:0000 0000 2444 2156 fe2c 5c48 fe21 2157 ....つ「..〓..」 0040:242c 493d 352d 2447 242d 245e 2439 2123 が表記できます。 0050:000a .. ===== となっている。 □"2342 2354 2352 234f 234e 2447 244f 2156 4e36 2157 244e 305b 424e 3b7a 244e"は、TRONコード システムスクリプト面(0x21面)の文字列で、2バイトづつ、 "BTRONでは「龍」の異体字の" に対応している。 ASCII文字列に相当する英数字記号は、仮名漢字と区別せずに(いわゆる半角文字に相当するコードを使用せず)システムスクリプト面のTRONコードで表現する。全て2バイトコードである。 いわゆるJIS第一・第二水準相当の文字は、コードポイントはそのままTRONコードとして採用されている。 □"ffa2 0006 0300 0000 0102 "と"ffa2 0006 0300 0000 0000 "は、可変長セグメント-指定付箋(文字拡大/縮小付箋)。 前者でデフォルトの文字幅を1/2にし、後者で1/1に戻してその間に挟まれた"2331"を1/2幅(半角様)に表現している。 このように、TRONコード(日本語)では半角コードと全角コードの区別はなく、ディスプレイ上の半角様表現は文字表示の修飾によって行っている。文字コードとしては相違はなく、ただ大きさが違って見えるだけである。機能としては、文字に色を付けたり大きさを変えたりする際と同等である。 □"2444 2156"は、TRONコードシステムスクリプト面の "の「" 。 □"fe2c"は、言語指定コード。次からのコード列がTRONコード0x2c面であることを示す。で、次に文字鏡番号050706に相当する文字"5c48"が来ている。同様に、"fe21 "により、言語面を0x21面に戻している。 それでは、冒頭からの文字列がどうして0x21面だとわかるのかというと、後ほど。 □"2157 242c 493d 352d 2447 242d 245e 2439 2123"は、システムスクリプト面の文字列 "」が表記できます。" に相当。 □"000a"は、制御コード(改段落)。BTRONの制御コードは 無効コード 0x0000 タブコード 0x0009 改段落コード 0x000A 改コラムコード 0x000B 改ページコード 0x000C 改行コード 0x000D セパレータ(スペース) 0x0020 しか使ってはいけない。アプリケーションで特別な機能を使用したいときには、可変長セグメント(指定付箋など)により行う。BTRON(日本語)は2バイトコードなので、制御コードも2バイト固定。 通常の改行コードは0x000A(改段落コード)のみを使う。0x000D(改行コード)は、定められたフィールド内での改行などの機能が与えられている。 現時点でのB-right/Vの「空白」コードは、0x2121のみが使用されており、0x0020は使用されていない。 ■BTRONでのデータ BTRONで扱うデータはTADと呼ばれるデータ体系なので、DOSで云う様な純粋な"テキストデータ"が存在することは少い。つまり、テキストの中に図形や仮身などいろんなものが含まれていることが多い。 TADは、例えてみれば風呂敷包が1列に並んでいるものと言うことができる。それぞれの風呂敷づづみには、データの種類及び大きさが記された貼紙が貼ってある。風呂敷包は入子構造にすることもできる。 アプリケーションは次の2つの態度を取ることができると考えられる。 1.そばを歩きながら、自分が読むことのできる風呂敷だけを拾っていき、編集して保存する。 2.一応風呂敷を全部拾っていくが、ファイルに書き込み・保存をする際には、わからない風呂敷は(順番は変えずに)開けずにそのまま元の場所に戻す。 風呂敷包の形式が決っているので、どんなデータでも読み込んで好きな場所だけを解釈することができる。 ■BTRONでのテキスト BTRONの文章データには次のものが含まれるとされている。 □固定長セグメント  通常の文字コード  制御コード :(0x0000〜0x020)  言語指定コード :(0xFE)で始まる多バイトコード。(TRONコードが百万数十万文字に達するまでは、2バイト)  特殊コード :(0xFF)(0x21〜0x7E)の2バイトコード(使用目的不明?) □可変長セグメント  通常セグメント :(0xFF)(0x80〜0xFE)の2バイトで始まるセグメント。仮身とか図とか。  ラージセグメント :(0xFF)(0x80〜0xFE)の2バイトで始まるセグメント。65536バイト以上の場合。 従って、大雑把に言えば、BTRONの文章データから0xFFで始まるデータ列をその長さ分だけ読み飛ばしていけば、BTRONの"テキストデータ"となる。 ただ、TADの立場からいえば、「これは文章データである」という風呂敷包が必要である。従って、テキストデータの冒頭と末尾に文章開始/終了セグメントを付ける。 文章開始セグメント中には、デフォルトの言語面が指定されている。 以上よりBTRONの文章データの最小セットは、 [文章開始セグメント]>[文字コード・制御コード・言語指定コードからなるコード列]>[文章終了セグメント] となると考えられる。 これは、BTRONシステム内部で、カットアンドペーストなど文章データの受渡しの最小単位でもある。 冒頭の文字列が書いてある【文章データ】をダンプすると、 ===== dump-2 ----- 0000: ffe1 0018 0000 0000 0000 0000 0000 0000 0010: 0000 0000 0000 0000 0021 0000 2342 2354 0020: 2352 234f 234e 2447 244f 244f 2156 4e36 0030: 2157 244e 305b 424e 3b7a 244e ffa2 0006 0040: 0300 0000 0102 2331 ffa2 0006 0300 0000 0050: 0000 2444 2156 fe2c 5c48 fe21 2157 242c 0060: 493d 352d 2447 242d 245e 2439 2123 000a 0070: ffe2 0000 ===== となる。 "ffe1 0018 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0021 0000 " が、文章開始セグメントで、25-26バイト目の2バイトが、デフォルトの言語面を示す。 最初のの4バイトと言語面を示す2バイト以外は(レイアウト情報など:いろいろ指定することも可能だが)0で埋めておいて支障ない。 "ffe2 0000"が、文章終了セグメント。 BTRONの【ファイル】としてみた場合は、通常は更にこのデータの前にファイルのデータの性格を示す「管理情報セグメント」が来る。(「実身等の1つの独立したTADデータの場合は、TAD本体(文章/図形データ)前に必ずなくてはならない」とされている。) dump-2は、管理情報セグメントをバイナリエディタで取り除いたものである。これでもTADの最小単位ではあるので文章エディタで読み込めることを示している。 これを文章エディタで「更新して保存」すると、冒頭に管理情報セグメントが付け加えられる。 ■TRONコードを扱うテキストエディタ。 DOSで、TRONコードを扱うテキストエディタを作ることを考えてみる。 DOSのいわゆるプレインテキストでは、文字コードのみが羅列されているわけだが(Unicodeの拡張によってどうなるのか興味あるが)、BTRONの"プレーンテキスト"を扱うテキストエディタでは、[文字コード・制御コード・言語指定コードからなるコード列]を最終的にファイルに書き込めばよいことになる。 ただし、最初と最後に"ffe1 0018 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0021 0000 ", "ffe2 0000"をつけるだけで最小のTADデータになるわけだし、デフォルト言語面は文章開始セグメントの中に記述されているので、出力する際にはこれらも付け加えた方がよいと思われる(実際、現バージョンの超漢字では、文章開始/セグメントで挟まれていないと文章データとして認識してくれない。もちろん、ここのところはBTRON上で面倒を見るべきという考えもありうる)。 管理情報セグメントは、BTRON上に移せば勝手に付加してくれる。 結局、 "ffe1 0018 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0021 0000 ", [文字コード・制御コード・言語指定コードからなるコード列], "ffe2 0000" がファイルに書き込まれていればよい。 この形式のファイルなら、BTRON上でもそのまま再利用できる。 DOS上からBTRONへの一方通行なら上記でよいが、やはり相互にデータを行き来させたくなる。 BTRONでは、一見テキストのみしか表示されていないように見えても、既に多数のセグメントが埋め込まれていることが多い。 冒頭の例の文章をBTRONの文章エディタで通常の操作法で作成し、それをバイナリエディタで見てみる。 サンプルでは、必要最小限のセグメントに限定したが、もっとたくさんの(0xFF)で始まるセグメントが埋め込まれているのがわかる。 ===== dump-3 ----- 0000: ffe0 0006 0000 0002 0121 ffe1 0018 0000 0010: 0000 0000 0000 0000 0000 0000 0000 ff88 0020: ff88 0021 0000 ffa0 000e 0000 057b 03e0 0030: 005e 005e 005e 002f ffa0 000a 0100 005e 0040: 005e 005e 002f ffa4 0024 0811 2122 2123 0050: 2124 2125 212b 212c 2147 2149 214b 214d 0060: 214f 2151 2153 2155 2157 2159 215b ffa4 0070: 0096 0911 2146 2148 214a 214c 214e 2150 0080: 2152 2154 2156 2158 215a 2147 2361 2362 0090: 2363 2364 2365 2366 2367 2368 2369 236a 00a0: 236b 236c 236d 236e 236f 2370 2371 2372 00b0: 2373 2374 2375 2376 2377 2378 2379 237a 00c0: 2341 2342 2343 2344 2345 2346 2347 2348 00d0: 2349 234a 234b 234c 234d 234e 234f 2350 00e0: 2351 2352 2353 2354 2355 2356 2357 2358 00f0: 2359 235a 2330 2331 2332 2333 2334 2335 0100: 2336 2337 2338 2339 ffa1 0024 0200 0304 0110: 0304 0000 0000 0000 000b 0048 0090 00d8 0120: 0120 0168 01b0 01f8 0240 0288 02d0 0318 0130: ffa1 0004 0001 0104 ffa2 0004 0401 0108 0140: 2342 2354 2352 234f 234e 2447 244f 2156 0150: 4e36 2157 244e 305b 424e 3b7a 244e ffa2 0160: 0006 0300 0000 0102 2331 ffa2 0006 0300 0170: 0000 0000 2444 2156 fe2c 5c48 fe21 2157 0180: 242c 493d 352d 2447 242d 245e 2439 2123 0190: 000a ffe2 0000 ===== dump-2に加え、ワードラップ、書式、文字間隔、行間隔、用紙の大きさ・割りつけ、ヘッダ・フッタの情報などが加わっている。いづれも、0xFFで始まる単位である。 従って、DOSでのTADコードエディタでは0xFFで始まるセグメントを読み飛ばして [文章開始セグメント]>[文字コード・制御コード・言語指定コードからなるコード列]>[文章終了セグメント] の形に読み込める機能が必要になるだろう。 直接関係ないが、BTRONでエディタを作る際に、これと同様に(便利かどうかはわからないが)プレーンテキストのみを扱うテキストエディタという実装もあり得る。 ■TADテキスト通信 因みに、冒頭のサンプルを「TADテキスト変換」すると、 ----- BTRONでは「龍」の異体字の1つ「`Lh^(b