問題山積

過去類のない(と思われる)大規模なメカニズムなので、色々と難しい問題が山積みになってます。

初期化に問題発覚


最初にエスケープシーケンスなどで符号を認識します。
これは、エンコードチェックの処理であり、実際の文字の処理とは別です。

符号が決定した後は、CES-IDとCCS-IDを所定の場所にセットして初期化処理を走らせます。
ワークエリアの初期化や、オプションをDLLに渡したりするのに、不可欠な作業なのです。
そして、コンソールに符号の情報などを出力します。
しかしこの処理は、当初想定していたより難儀な問題を抱えていることが明らかとなりました。



問題


各DLLの初期化とオプション渡しは必要ですが、最初に呼び出しまで完了させてしまうと、次のような符号列で支障が発生してしまう。

ABC<ESC>※※※

エスケープシーケンスを認識した時点で、自動判別機能はその符号を推定できる。
従って、その後は初期化処理が走るわけです。


既存の処理だと、エスケープシーケンスは最初にあることを想定していました。
初期化が終わった時点で既に呼び出しが終わっているので、最初のABCも、ASCIIではなくESC後の文字集合として認識されていました。
当然、これは誤った実装ではあります。



解決


しかし、符号ごとの初期化は、最初だろうが、途中だろうが、共通化する必要があります。
そして初期化の場合も、呼び出しまでの全てを終わらせておかないと、コンソールに符号の情報などが出力できません。参照する情報は、共通だからです。


この状況下、暫定的な解決を試みた。

シフトJISとかEUCとか、明らかに自明なものはフラグを立てる。
それ以外のフラグが立っていないもので、かつ符号が手動設定でない場合は、コンソールに情報を表示し終えた後で再びG0=ASCII、C0/C1は規定値に、強引に呼び出し直すことにしてみた。
こうして、最初はASCII、エスケープシーケンスを認識してからは所定の符号系、という、有るべき動作が実現された。
途中の場合は、このフラグがどう設定されようが全く参照されないので、動作に支障が出ない。

理論上は、理想的な動作ではあります。




また、呼び出しの度にDLLにコマンドラインのオプションを渡す必要があることを思い出したので、所定の関数までオプションを持ち回し、呼び出した後にAPIを取得してAPIを呼ぶようにもしてみました。

エスケープシーケンスなんて、たかが数バイト程度の符号列なのですが、文字集合を切り替えるというのは大きなコストなのであり、内部ではものすごい処理が必要となるのです。

今後も、製造を続けながら検証も続けていきたい。



新規対応



今日新規に対応した符号

ISO-IR-49 NINS G0
ISO-IR-50 NINS G1 非標準
ISO-IR-51 NINS G1 キリル
ISO-IR-54 ロシア語
ISO-IR-55 ギリシャ語
ISO-IR-70 ビデオテックス追加集合
ISO-IR-88 ギリシャ語
ISO-IR-90 ISO 6937/2部分集合
ISO-IR-91 JIS C 6229 OCR-A

2008/12/21(日)23:16 |Comments(0) |Trackback(0)

製造開発 | プログラミング | コンピュータ | [編集]

▲ページトップ

コメント

コメントの投稿

94文字集合を攻略中 ホーム ISO-IR
トラックバック

この記事にトラックバックする(FC2ブログユーザー)
▲ページトップ

カレンダー

04 | 2017/05 | 06
- 1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31 - - -

プロフィール

miraicorp

Author:miraicorp
未来情報産業(株) 社長

主として「ICカードこれひとつ」や「文字、文字コード」処理、時々C++などについて記述しています。

twitterツイッター

管理用

検索フォーム

お知らせ

コメント等お気軽にどうぞ。

気に入ったら拍手して頂けると、今後の記事を書く際の参考や励みになります。

■お仕事を募集しております
ソフトウェア製造の仕事や、原稿執筆の仕事などを随時受け付けております。
お気軽にご相談下さい

■初めての方へ
こまごまと更新しているため、他にも関連する記事があるかもしれません。
「月別アーカイブ」「検索フォーム」「カテゴリ」などをお試し下さい。
トップページはこちら

最新記事

最新コメント

最新トラックバック

月別アーカイブ

カテゴリ

広告枠

メール

メールはこちら

リンク

このブログをリンクに追加する

RSSリンクの表示

QRコード

QR