JM5 ver0.1b6 98/11/21 by 河邊(ktkawabe@hi-ho.ne.jp) 注意) このバージョンのJM5(JM5_01b6)の二次配布を希望される場合は、必ず ktkawabe@hi-ho.ne.jp まで事前に御連絡下さり、作者の了解を得た上で二次配布してください。 1: JM5とは 1-1: 前バージョンとの主な相違点 2: JM5以外に必要なソフトウエア 3: インストール/アンインスト−ル 3-1: バイナリパッケ−ジ 3-2: ソ−スパッケ−ジ 3-3: アンインスト−ル 3-4: アルファ版OPXに関する注意 4: 操作法など 5: 配布条件、著作権、その他注意すべきこと 6: 知られている不具合、制限など 7: OPLでの日本語表示 7-1: KEditの日本語コードについて 7-2: このプログラム中の日本語表示プロシジャの使用法 7-3: このプログラムで使用するKECデータの形式について 8: 更新履歴(深い感謝の歴史) 9: 補足 9-1: JM5_01b1とb3に関する注意 9-2 JM5_01b1かそれ以前を使用していた方への注意 1:JM5とは JM5とは、Psion Series5の非日本語版で、MessageSuiteと連携して使用する事で 日本語メイルの送受信を実現するための小物プログラムです。OPLで日本語を扱う プログラムの習作として書きました。MessageSuiteはPsion社が配布している Seris5用のメイラですが、今のところ日本語版はありません。 近藤玲史さん作のmailjaというプログラム を元に、河邊が日本語表示部分とメイル送信部分を付加し、また河邊がユーザー インターフェイスを書き直しました。 1-1: 前バージョン(jm5_01b5マイナ−バグフィクス版)との主な相違点 ・日本語ヘッダに対応(ISO-2022-JP,B-Encoding) --日本語subject:と日本語From:を、ビューアおよびエキスポート時に 表示/セーブするようにした(-->詳細は履歴を参照) --送信時、Subject: を日本語でも送れるようにした ・送信時Cc:指定可能 ・細かいバグフィクス無数(-->主なものについては履歴を参照) 2: JM5以外に必要なソフトウェア JM5は、単体で動作するソフトではありません。 まず、D: またはC: ドライブにPsionが配布しているMessageSuiteをインストー ルする必要があります。 から取得してください。 SMTPサーバに接続するために、ソケットをOPLから扱えるようにするためのOPXで ある、CSocket.OPXとCDescriptor.OPXをインストールする必要があります。 から取得してください。本プログラム では、αrelease0.4に対応しています。バージョンが異なるとプログラムが動かな いようになっているので、気をつけてください(OPXが正式リリースになった時に、 この制限を外したものを公開します)。 日本語を表示するためには、KEditやJMemo用の日本語フォントである、jiskan.gdr を利用します。これは、開発者の小山忠義さんのホームページ から取得してください。 現在配布されているフォントファイルは、タイムスタンプが98/03/21です。 それ以前のフォントファイルは、半角フォントが定義されておらずうまく利用 出来ませんので、最新版をインストールしてください。 KEditやJMemo自体はインストールされていなくても良いのですが、KEditを常駐さ せていない場合、メモリにフォントをロードする分だけプログラムの起動が遅くな ります。 また、RMR Software社が配布しているMESSAGE.OPXとsystinfo.opxを使用します。 これらのOPXは、作者のOtfried Cheongさんの要請により、JM5のパッケ−ジに含めて 配布します(本JM5パッケ−ジに含まれるのは、Message.opxの1.01と、systinfo.opx のver.3です)。が、最新版は常ににあります。 最新版を使用してコンパイルされたプログラムは、古いOPXで実行する事は出来ない ようですが、古いOPXを使用してコンパイルされたプログラムを新しいOPXで実行する ことは出来ます。したがって、最新版のOPXをインストールしておくことをお勧めし ます。 OXHファイルはJM5パッケージには入っていませんので、ソースをいじって再コンパ イルしたい場合などにはRMRのwebページから最新版を取ってくる必要があります。 3: インストール/アンインスト−ル JM5はバイナリパッケージ、ソースパッケージに分けて配布されています。 JM5を使用するだけでしたら、ソースパッケージは必要ありません。 ドキュメントはバイナリパッケージとソースパッケージで共通です。 3-1: バイナリパッケ−ジ バイナリパッケージjm501b6b.zipには、以下の5つのファイルが含まれます。 ・jm5_01b6.txt(このテキストです) ・jm5.app ・jm5.aif ・messageOPX.SIS ・systinfo.SIS このうち最後の2つのファイルは、Otfried Cheong氏が開発し、RMR Software社が 配布しているものですが、Cheong氏からの要請により、JM5バイナリパッケージに 入れてあります。 JM5パッケージに含まれるこれらのOPXは、1998/11/21の時点では最新版ですが、 いつまでもそうであるとは限りません。 C:またはD:ドライブに、System\Apps\JM5というフォルダを作成し、JM5のバイ ナリパッケ−ジに入っているjm5.appとjm5.aifをそこにコピ−します。 古いiniファイルがある場合、そのまま置いておけば良いです。 message.opxとsystinfo.opxがインスト−ルされていない場合、または インスト−ルされているがバ−ジョンが古いかもしれないと思う場合は、JM5の パッケ−ジに含まれるmessageOPX.SISとsytinfo.SISをインスト−ルします。 良くわからなければ、とりあえずインスト−ルしてみて下さい。このとき 「今インスト−ルしようとしているものより新しいのがインスト−ルされていま す」というような英語のメッセ−ジが出たら、インスト−ルを中止するのを選択 すれば良いでしょう。 (SISファイルは、PsiWinでダブルクリックするか、S5に持ってきてからコントロ−ル パネルのADD/REMOVEでインスト−ルされます。) Message Suite、CDescriptor.OPX、およびCSocket.OPXを取得し、それぞれの添付文書 に従いインストールします。 jiskan.gdrをC:\System\fonts\にコピ−してください。 注) Systemフォルダが表示されないとか、あるはずのファイルが見えない場合には、 システム画面で menu->tools->preferences で表示される設定項目のうち、show hidden filesとshow "System" folderに チェックすると良いことがあるやもしれません。 JM5を使用するだけでしたら、これでインスト−ルは終了です。 3-2: ソースパッケ−ジ ソースパッケ−ジjm501b6s.zipは、プログラムの中身を見たり、改造して再コンパイルする時に のみ必要なものです。適当なフォルダに、ソ−スパッケ−ジの中身を全てコピ−し ます。 また、message.opxとsystinfo.opxのOXHファイルが必要ですが、これはJM5のパッ ケージには含まれないので、RMR Softwareのwebページ から 各OPXの配布パッケージを取得し、各OXHファイルを\system\oplにコピ−します。 JM5に含まれるこれらのopxが最新のものでは無かったばあい、迷わずに最新のものに 入れ替えてください。 また、CDescriptor.OXHとCSocket.OXHも同様に\system\oplにコピーします。 3-3: アンインスト−ル JM5フォルダとその中身を全て削除してください。OPXについては、他のソフト が使用していなければアンインスト−ルしても良いでしょう。ソースパッケージ の場合は、インストールしたJM5ソースを全て削除し、またOPHについても使用し ないなら削除します。 3-4: アルファ版OPXに関する注意 このバージョンのJM5(JM5_01b6)は、アルファ版のOPX (CDescriptor.opxとCSocket.opx、release0.4)を使用しています。 JM5とOPXの整合性を保証するため、バージョンの異なるOPXは使用 できない様になっています。 「CSocket.opx(またはCDescriptor.opx)のバージョンが違うので 起動できない」というようなダイアログが出た場合、JM5またはOPX のどちらかが最新版で無い(またはJM5が最新版OPXに未対応)と考え られますので、ご使用中のJM5およびOPXが最新のものかどうか確認 し、もし両方とも最新なのに上記のようなダイアログが出るのであ ればktkawabe@hi-ho.ne.jpまでご連絡下さい。 4: 操作法など 最初に起動すると、SMTPの設定などを聞いてくるので入力してください。 From:には自分のe-mailアドレス、SMTP Server nameにはSMTPサーバーの名前を 書きます。IPアドレスを直接書くことも出来ます。 次に、メイルを送る時の設定を入力します。 ここではsignatureファイルを自動添付するかしないか、signatureファイルの場所、 outフォルダとsentフォルダを設定します。 signatureを自動添付しない場合でも、signatureファイルは指定しなければならない ので、その場合何か適当なファイルを指定して下さい。 この点は気が向いたら改良するかもしれません。 outフォルダとsentフォルダは、メイルのまとめ送りに関するフォルダで、 「任意の」、「既に存在する」フォルダを指定する事が出来ます。もし、まだ 存在しないフォルダを指定したいばあいには、必ずそのフォルダを作ってから JM5で指定してください。 最後に、ビューアの設定とエキスポートの設定を行います。 Always save %%To: and %%Subject:については、「制御ヘッダ」で後述します。 これらの設定は、後でメニュ−から変更することも出来ます。 ・基本操作 JM5には、単体でPOPサーバと通信する機能はありません。メイルをサーバから 取ってくるには、MessageSuiteのEmailプログラムを使用してダウンロードし、 S5のローカルフォルダに保存する必要があります。 その後に、JM5をExtrasバ−から起動します。 起動直後は、メイル一覧が表示される「ロ−カルフォルダ画面」モ−ドになって います。 このモ−ドでは、ペンでタップまたはカーソルキーで移動して好きなメイルを選び、 メニューからコマンドを選ぶなりなんなりして下さい。 メイルが一画面に収まらないほど沢山ある場合には、カーソルキ−での移動のほか に、スペ−スキ−で次画面、Pで前画面に移動できます。「この辺にスクロールバー があるよな普通」と思われるあたりでタップしても、画面移動が出来ます。 メニューを開きたくない場合は、vもしくはCTRL-vまたはEnterでメイルビューア を起動、sもしくはCtrl-sでテキストファイルにエキスポート、Eもしくは CTRL-SHIFT-eで引用記号を行頭に付け足しながらテキストファイルにエキスポート、 Shift-Ctrl-sでテキストファイルをメイルとして送信、Shift-Ctrl-fでoutフォルダ 内のメイルをまとめ送り、rまたはCTRL-rでlocalフォルダをもう一度チェック、Bもしく はCTRL-SHIFT-bでビューアを太字モードにする、Shift-Ctrl-pでSMTP設定、 ctrl-eで終了です。 なお、このロ−カルフォルダ画面では、MIMEヘッダを使用したメイルの日本語 From:や日本語Cc:などは、デコ−ドされずそのまま表示されます。 ・メイルを読む ビューア起動中(ビュ−アモ−ド)は、スペースバーまたはnまたはEnterで次画面、 pまたはbまたはDelで前画面、Shift-Ctrl-eやCtrl-sで引用記号あり/なしのエキス ポート、Escまたはqでビューアを終了します。 メニューでも同じ事が出来ます。 JM5でメイルを表示しても、MessageSuiteはそれを検出しないので、メッセージの Statusは変化しません。"read"にしたいばあいは、Emailプログラムで対処して下 さい。 ・メイルをテキストファイルにエキスポ−トする ローカルフォルダ画面またはビューア画面で、Shift-Ctrl-eでエキスポ−トを選択 すると、まず"Citation"というダイアログが開きます。 ファイルの各行頭に、ここで入力した文字列が挿入されてセ−ブされます。 何も挿入したくなければESCを押せば良いです。 次にファイル名を入力してセ−ブします。 Ctrl-sでエキスポートする場合は、Citationの入力はスキップされます。 エキスポ−ト時、所謂半角カナを検出した場合には、出来るかぎりの範囲で、プログ ラムが停止したりしないように努力したつもりです。この場合、検出されたキャラク タコ−ドが7bitであれ8bitであれ、キャラクタコ−ドの&A1から&DFまで(いわゆる 8bit半角カナ)に変換してセ−ブします。JM5は、生8bit、OutlookExpressや NetscapeMailの独自拡張形式、MS-InternetMailの独自拡張形式、の3種類の形式 を検出することが出来るはずですが、うまく検出できなかったとしてもあまり怒った りしないで下さい ^_^; エキスポ−ト後に編集の必要があれば、半角カナを正しく処理できるエディタを使用 してください。 ヘッダ情報は、MessageSuiteでサポートされているヘッダ情報はほぼ全て抽出した つもりです。Date:フィールドは、相手のメイルにどんなものがついていたにせよ GMT(グリニッジ標準時)に変換されてしまいますが、これはどうもMessageSuite のEmailプログラムの仕様であるようです。 ・制御ヘッダの自動付加 "always save %%To: and %%Subject:"のオプションがチェックされていると、 ローカルフォルダ画面からエキスポ−トを選択した時に、ファイルの先頭に制御 ヘッダ(後述)として %%To: メイルを送ったひと %%Subject: Re: そのメイルのサブジェクト が付加されます。 制御ヘッダを自動付加する場合は、たとえ日本語のSubject:であってもB-Encode されたままセ−ブされます。 # これは他の仕様とのからみでこうなっているので、今のところ耐えて下さい。 # 単純にデコ−ドすると不都合が生じる場合がありますので。将来的には何とか # します、多分。 ビューア画面からエキスポートを選択する場合には、諸般の事情により(-_-;;) 今のところ制御ヘッダを付加しないようになっていますので、注意してください。 ・Sjisのテキストファイルをメイルとして送る 送りたいメッセ−ジを、SJISのテキストファイルで用意します。S5で書くばあいには S5用のSJIS日本語エディタであるJMemoとかLogExpressを使用すると良いでしょう。 JM5のロ−カルフォルダ画面モ−ドで、メニューからSend Text as an Emailを選択 するなりShift-Ctrl-Sを入力するなりしてください。 ダイアログが出るので、送りたいファイルを選択し、To: とSubject: を入力します。 この時、ロ−カルフォルダ画面で選択されていたメイルの中でReply-to: に 記述されていたアドレス、またはReply-To: が無い場合にはFrom: のアドレス が、デフォ−ルトでTo: の所に入力されています。 また、同様にロ−カルフォルダ画面で選択されていたメイルのSubject: に "Re:"を付加したものが、デフォ−ルトでSubject: になっています。 変更が必要なら変更します。 ただし、ファイルの先頭に%%To:と%%Subject:の制御ヘッダ(後述)が両方記述されて いた場合には、宛先とサブジェクトの確認を行わずにメイルを送ります。 (subject:やto:にダイアログで直接日本語を書く事は出来ません、念のため。) send setting でAttach Signatureにチェックが入っていると、メイルの末尾に signatureファイルをつけて送ります(日本語可です、念のため)。 複数の人にメイルを送る場合、To:には複数のメイルアドレスをカンマ「,」で区切 り入力してください。カンマを含み、255文字まで入力できます。 そのあとちょっと時間がかかりますが、選択したファイルはSJISテキストからJISの メッセージに変換され、SMTPサーバーに送られます。 ・制御ヘッダ メイルとして送るファイルの先頭に、"%%"で始まる行を付けておく事が出来ます。 このような行を、とりあえず制御ヘッダと呼びましょう。制御ヘッダは、そのまま 相手に送られることはありません。 制御ヘッダの目的は、ここになにか記述することによってメイル送信時にJM5の動作 を制御する事です。 今のところ、有効な制御ヘッダは以下の3種類です。 1: "%%To:相手のe-mail address"という制御ヘッダがついている場合、 このファイルの宛先は"相手のe-mail address"になります。日本語は 使用出来ません。 (日本語を書くと、送信できないような仕様になっています。) 2: "%%Cc:相手のe-mail address"という制御ヘッダがついている場合、 このファイルは"相手のe-mail address"にも送付されます。日本語は 使用出来ません。 (日本語を書くと、送信できないような仕様になっています。 3: "%%Subject:サブジェクトの中身"という制御ヘッダがあった場合、メイルの サブジェクトが"Subject: サブジェクトの中身"となります。%%Subject: には、日本語を書くことが出来ます。日本語が検出されると、JM5は Subject:全体をB-Encodingして送ります。ダイアログが出る場合、B-encode された文字列が出るので驚かないで下さい。 これ以外の制御ヘッダは今のところ無視されます。自分の覚書にでも使用して下さい。 制御ヘッダは、一行につき%%まで入れて255文字まで入力出来ます。 制御ヘッダ部の途中に%%で始まらない行を挿入する事は出来ません。つまり、 %%To: xxxx@yyyy.zzzzz.ne.jp 空行 %%Subject: meeting on Jan. 1st. というような記述がファイルの先頭にあった場合、最初のToは認識されますが、 間に空行が入っているためにSubject:は認識されず、無視もされず、メイル本文と して送られてしまいます。 ・複数のメイルをまとめて送信する 複数のメイルをまとめて送りたい場合があるかと思いますが、このような場合には 送りたいファイルをまとめてoutフォルダに入れておきます。 その上で、Shift-Ctrl-fでまとめ送りを行います。 まとめ送りの場合にも、制御ヘッダが有効です。 送信に成功したファイルだけが、sentフォルダに移動されます。まとめ送り後に、 outフォルダにあったファイルx個のうちy通が送られたということが y/x files have been sent のように表示されます。 outフォルダとsentフォルダは、メニュ−のTools->seNd settingsで設定すること が出来ます。 ・いわゆる半角カナの送信には対応しておりません。これは、半角カナと呼ばれてい る文字コ−ドが、インタ−ネット通信においては標準的なものではなく、使用した ばあいに様々な不都合を生ずる可能性があるからです。現在、様々なメイラの中に は、これらの非標準的な文字コ−ドを送ることが出来るようになっているものも ありますが、それはあくまでそれらのメイラ独自の拡張であるというのが実状であ り、他のメイラでは読めない場合があります。 ただし、PCからS5に移動したファイルの中には、何かの誤りでキャラクタコ−ドの &A1から&DFまで(MS-DOSやWindowsのエディタなどで使用される半角カナコ−ド)が 紛れ込んでいる事も考えられます。 このため、誤ってこれらのキャラクタコ−ドをそのまま送ろうとしたばあい、JM5は 警告ダイアログを表示します。この状態で、送信を中止するか、または半角カナを普 通の2bytesのカタカナ(いわゆる全角のカタカナ)に変換して送信するかを選択する 事ができます。上記以外の8bitコ−ド系は処理できませんので、そのようなコ−ドを 含む文章を送信しようとすると、送信を中止します。 インタ−ネットで通常使用されるべき文字については、RFC1468という文書に 記述されています。もし少しでも御興味をお持ちであれば、是非御一読をお勧め いたします。この文書はインタ−ネットの様々な場所に起かれており、検索エン ジンを使用してRFC1468を検索すれば、容易に見付ける事が出来るでしょう。 5: 配布条件、著作権、その他注意すべきこと ・このプログラムの70%ぐらいは、近藤玲史さんが書いたmailjaそのままの物で、 アイデアは100% mailjaから引き継いでいます。 ・このプログラムはRMRソフトウェアの配布しているMessage.OPXとSystinfo.OPX を使用しています。 ・このプログラムは、Keith Walker氏が開発、配布している CSocket.OPXとCDescriptor.OPXを使用しています。 ・このプログラムは、河邊が書いた部分については河邊が著作権を保有します。 その他の部分はそれぞれの作者がそれぞれの権利を保有します。 RMRソフトウェアは、Message.OPXとsystinfo.opxを含むソフトを二次配布するこ とを許可しています。 近藤さんはmailjaのソースの変更と配布を許可なさっています。 ・CDescriptor.opxとCSocket.opxはいまだに開発段階(アルファステージ)にある OPXであり、将来アップデートされた際にユーザーインターフェイスが変わる可 能性もあります。 インストールされているOPXのバージョンと、JM5が想定しているバージョンの 間に不整合があると、プログラムの動作に支障が出たり、場合によってはシス テムにダメージを与えるかもしれません(多分与えないと思いますが)。OPXのバ ージョンとそのOPXを使用するプログラムは常に整合性を保たねばなりません。 したがって、出来る限りの範囲でJM5とOPXとの整合性を保つことを保証するた め、このプログラム(JM5公開β版)にはOPXのバージョンをチェックするコード が入っています。JM5の想定するバージョンと異なるOPXがインストールされて いる場合、JM5は「OPXのバージョンが違う」というようなダイアログを出して ストップします。 この条件はKeith Walker氏がopxの配布条件を変更した時に同時に変更されます。 ・ソースは個人使用に限り、自由に書き換えて使用してくださって構いませんが、 書き換えたソースおよび、それから生成した実行ファイルを二次配布しないで 下さい。 ・二次配布をご希望される場合は、必ずktkawabe@hi-ho.ne.jp まで事前にご連絡下さい。 6: 知られている不具合、制限など ・日本語のsubject:などはエキスポ−トおよびビュ−アモ−ドの時だけ日本語で 表示されます。ロ−カルフォルダ画面では日本語表示されません。 これは仕様です。高速な日本語表示OPXが開発されないかぎり、変更されません。 ・日本語ヘッダ−の送信は、subject:に限り、また制御ヘッダを使用する場合に 限り、可能です。エンコ−ディングはISO-2022のみに対応しています。 ・BCC:に送られてきたメイルであっても、BCC:フィ−ルドは表示されません。 これはmesagesuite(Email)の仕様であるようです。 ・message suiteの送信系のメッセ−ジ(sentフォルダにあるものや、ドラ フトなど)は、メイルファイルの構造を解析していませんので、とりあえずTo: とかsubejct:などはmessage.opxで取得するようにしています。 このため、32文字までしか表示されません。 ・View/Exportで、もとはあったはずの改行が無視される場合があります。 これはmessagesuite(Email)の不具合だか仕様だかである事が分かっています。 ・Date:フィ−ルドは、もともとのDate:フィールドがどのTimeZoneを示していた としても必ずGMT表示(グリニッジ標準時)に変換されてしまいますが、これは messagesuiteの仕様のようです。気が向けばTimeZoneを再設定できるように するかもしれません。 ・単体送りの場合、送ったメイルはどこにも格納されません。 ・今のところ、ローカルフォルダは\system\messages\local に固定されており、 これ以外のフォルダに入ったメッセージを読むことはできません。 ・文字化けすることがあるかもしれません。 ・ビューアは、1ページごとのスクロールにしか対応していません。 ・遅いです。 etc. 不具合の報告は河邊(ktkawabe@hi-ho.ne.jp)まで、e-mailにてお願いします。 7: OPLでの日本語表示 このプログラムでは、小山さん作のJMemoおよびKEditのフォントを使用して 日本語を表示しています。この方法の利点は、gprintを使用して日本語が描画 出来るので、比較的簡単にプログラムが書けること、gstyle 1 (BOLD)などが そのまま有効になることです。欠点は遅いことです。 7-1: KEditの日本語コードについて 注)以下に記すことは、河邊がKEditのソースとか日本語フォントの中身から推測 した事であって、誤りを含むかもしれないことに注意してください。 KEditは、日本語表示機能を持たないS5の標準アプリで何とか日本語表示を実現さ せるため、複数(39+1種)のフォントを切り替えて使用します。つまり、標準アプ リ内では、日本語文字も欧文文字の一書体として扱われます。 したがって、KEditのフォントを使用して任意の日本語文字を表示させようとする 場合、「その文字の含まれているフォントのfontidを知る」「その文字に対応す るキャラクタコードを知る」事が必要になります。ここでは、この二つの情報の 組み合わせを仮にKEdit Code (KEC)と略記しましょう。 幸いなことに、小山さんはKEditのソースを公開されていますので、日本語文字のsjis コードとKECの対応を知ることが出来ます。河邊がKEditのソースのごく一部を眺め、 またフォントファイルの中身を眺めて得た限りの事を以下に記します。 なお、ここに記されている事は、タイムスタンプが98/03/21のフォントファイルに 関しては正しいと思いますが、それ以前のフォントファイルでは成立しないようです し、また将来変更されないとも限りませんのでご注意下さい。 A) 日本語フォントは、第一水準、第二水準を含めて、jiskan00からjiskan38まで、 39種のフォントに分割されている。 B) shift-jisコードの上1byteが同じ文字は、同じフォントに定義されている。 sjis文字コード KEC フォント種 &81xx〜&84xx --> jiskan00〜jiskan03 &87xx --> 多分定義されていないと思う(`@等の特殊な記号類) &88xx〜&9Fxx --> jiskan04〜jiskan27 &E0xx〜&EAxx --> jiskan28〜jiskan38 さらに、半角フォントがjiskanとして定義されている。 C) 一つのフォント種に対し、ドット数の異なる2種のフォント(16×16と12×12)が 用意されている。各フォントのフォント名とフォントIDの関係は、 fontname jiskanx(x=00,01,02,…)--> fontid= &10000433+x for 16 dots &1000045B+x for 12 dots である。 また、jiskanのフォントIDは &1000045A for 16 dots, &10000482 for 12dots である。 D) 基本的にSJISの下1byteがKECのキャラクタコードになる。 例外として&80, &81, &8D〜&90,&9D, &9E, &A0の計9種のコードがある。これ らは通常の1byteコード系では使用されない(らしい)コードである。 SJISの下1byteが&40より大きい事を利用して、上記9種のコードはこの順番で &31〜&39に割り当てる。 7-2: このプログラム中の日本語表示プロシジャの使用法など ・ ViewSjisBuffer:(sjbuffer&,sjbufferlen&) ビューア本体です。 sjbuffer&はバッファのアドレスで、バッファには生のsjisテキストを入 れておきます。 sjbufferlen&はテキストのバイト数です。バッファのサイズではないので 注意して下さい。 このプロシジャの中で、sjisテキストはKECテキストに変換されてから表 示されます。KECテキストのデータ構造は後述。 ・ Sjis2KecOneLine&:(sjisbuffer&,sjisbufferlen&,kecbuffer&, maxcharcolumn%) sjisbuffer&に格納されているsjisテキストを、一行分だけKECに変換して kecbuffer&に格納します。sjisbufferlen&はテキストのサイズで、バッファ のサイズではありません。kecbuffer&で示されるバッファのサイズは256 バイト以上必要。 一行の定義は、改行コード(CR+LF)が出てくるまでか、KECバッファのバイ ト数が256バイトになるまでか、もしくは行の幅がmaxcharcolumn%よりも 大きくならない範囲(半角文字は幅1、全角は幅2として計算)のいずれかを 指します。 戻り値として、変換されたSJISテキストのバイト数を返します。 ・ kPrintKecOneLine:(buffer&) buffer&で参照されるKECの行データを描画します。 その他の諸仕様はgprintと同様です。gstyleなどもgprintと同様に効きま す。 任意のプログラムで日本語文字列を表示するには、まずSJIS文字列を、適当 にallocateしたバッファに、改行コード込みで格納します。 次にこのバッファをSjis2KecOneLineでKECに変換し、kPrintKecOneLineで描 画するという感じになります。 文字単位の変換、描画は用意していませんが、必要ならSjis2KecOneLineに 「一文字(2bytes)+crlf」という4バイトのデータを渡す事でKECバッファには 一文字分のデータが格納されます。 そのうちもうちょっと一般性のあるものに書き換えられたら良いと思ってい ます。 7-3: このプログラムで使用するKECデータの形式について このプログラムでは、KEditや標準アプリでの内部表現がどうなっているか全 く解析せず、独自のKECデータ形式を採用しましたので、それについて触れ ておきます。 OPLでの画面表示は遅いです。(OPLに限らないのかもしれませんが。) 特に、gprint分で一文字づつプリントする場合、その遅さは耐えられないほ どです。 英文で、フォント切り替えを行わなくても済むような場合、これは致命的で はありません。何故なら、一行(80文字なら80文字)をまとめてgprintする事 ができるからで、このばあいデータ転送がまとめて行われるので、一文字づ つプリントする場合に比べ、転送にかかる時間がはるかに短縮され(ると思わ れ)ます。 KEditのフォントをOPLから利用する場合、原理から言っても、一行のデータ を一度のgprintで済ませることは出来ません。 ところが、通常の文章では、ひらがな、カタカナ、アルファベットは、ある 程度連続して出てくるものです。そこで、このプログラムでは、同じフォン ト種が連続する場合には、連続するデータをまとめてgprintする事で、ちょっ とだけ高速化する仕組みになっています。例えば「ちょっとだけ高速化する」 を表示する場合、文字列を"ちょっとだけ"、"高"、"速"、"化"、"する"、の ように同フォントのブロックに分解し、それぞれのブロックをgprintで描画 します。もちろん、「明日は良い日だ」のように、違うフォントが一文字づ つ連続する場合には、同フォント文字列分解に要する時間だけ損をして、全 く高速化されませんが、実際は、ビューアのようにある程度の長さの文を表 示する場合、多くの文章で速くなることを確認しております。 このため、Sjis2KecOneLine&:(sjisbuffer&,sjisbufferlen&,kecbuffer&) を使用して、sjisを一行分だけKECの同フォント文字列に分解します。 生成されるデータ形式は次のようになっています。 offset 0 (1 byte): 一行中で出てくる「のべ」フォント数≡n0 offset 1 (1 byte): 1番目のフォントID - kFontJiskan00& offset 2 (1 byte): 1番目の同フォントブロックの文字数≡n1 offset 3〜2+n1 (n1 bytes): 1番目の同フォントブロックのキャラクタコード列 offset 3+n1 (1 byte): 2番目のフォントID - kFontJiskan00& offset 4+n1 (1 byte): 2番目の同フォントブロックの文字数≡n2 offset 5+n1〜4+n1+n2 (n2 bytes): 2番目の同フォントブロックのキャラク タコード列 offset 5+n1+n2 (1 byte): 3番目のフォントID - kFontJiskan00& offset 6+n1+n2 (1 byte): 3番目の同フォントブロックの文字数≡n3 offset 7+n1+n2〜6+n1+n2+n3 (n3 bytes): 3番目の同フォントブロックのキャ ラクタコード列 以下略。 一行分のバッファは、全体として256bytes以下であることが求められます。 例えば先ほどの「ちょっとだけ高速化する」の例では、n0=5、n1=6、n2=1、 n3=1、n4=1,n5=2です。 各同フォントブロックは、フォントIDを除けばOPL文字列と同じデータ構造に なっています。したがって、kPrintKecOneLine中では、フォントIDを読んで フォントを変えた後、例えば2番目の同フォントブロックを描画するには gprint peek$(buffer&+3+n1) のようにしています。 EPOC32のrichtextモデルに即したデータ形式を使用したいところですが、それは 時間があり余っていればということで。 同様に、KEditを使用して日本語入力をOPLプログラム中で実現できるのですが JM5ではそこまではやっておりません。ご興味をお持ちの方は、ktkawabe作の プログラムであるclp2sjisのドキュメントや、同じくktkawabe作のextractの ソ−スコ−ドをご覧下さい。JM5と同じwebページ http://www.hi-ho.ne.jp/~ktkawabe 以下に置いてあります。 8: 更新履歴(深い感謝の歴史) 98/11/21 JM5_01b6 ・日本語ヘッダに対応(ISO-2022-JP,B-Encoding) --日本語subject:と日本語From:を、ビューアおよびエキスポート時に 表示/セーブするようにした。B-Encodingのデコ−ドプロシジャは、 酒井さんに送っていただいたものに手を加えて使用(酒井さんに感謝)。 また、残念ながらリリ−スには組込まれなかったが、JM5リリ−ス前のテ スト期間中に、入山さんが独自にB-Encodingのデコ−ド機能を付加した JM5を開発し、河邊に送付して下さった(入山さんに感謝)。 --送信時、Subject: を日本語でも送れるようにした。 簡単のため、Subject:中に非ANK文字を検出すると、jisに変換してから Subject:全体をB-Encodeする。したがって、MIMEヘッダ−をサポ−トしない メイラで読むと、ANKで書かれた部分も読めないことになる。この仕様は 特に必要性を感じないかぎり(もしくは何かのRFCに違反しているのでない 限り)将来も変えるつもりはありません。 ・送信時Cc:指定可能にした。 ・送信がエラ−で止まったり、ユ−ザ−によってキャンセルされた場合、送信ファ イルを解放すべきところ、していなかった点を直した。 ・送信時、ヘッダとボディのセパレ−タを何故か入れ忘れていたので直した。 ・メイルがlocal folderに一通もない場合にエラ−になっていた点を修正。 ・その他細かいバグフィクス無数(自分でも覚えていない) 1998/10/20 JM5_01b5マイナ−バグフィクス版 ・SJIS2KECOneLineのマイナーバグフィクス(渡されたバッファの大きさが一行の最大 表示可能字数に満たず、しかもバッファの末尾が改行でない場合に限り、KECデータ の末尾にゴミがついていた。メイルの場合、バッファ末尾が改行になっているらし く、気が付かなかった。) ・ローカルフォルダ画面で、全メイル数が一画面分(14通)未満である場合、メイルの ないところをタップするとエラーになっていたのを直した。 98/10/12 jm5_01b5 ・メイルのまとめ送りに対応(ベ−タテスタの皆さんに感謝) 任意の「Outフォルダ」に入れておいたファイルを、まとめて送ることが 出来るようになった。 ・制御ヘッダを用いたメイルの半自動送り(^_^;; に対応 ・signature自動添付が可能になった ・Message suiteのsentフォルダに入っているメイルや、ドラフトなどの 「send系」のメッセージが表示できないという不具合に対応 ・"E"でエキスポ−ト出来ず、さらに"e"キ−で終了してしまうというバグに 対応 ・その他細々とした改変 98/09/17 jm5_01b41 ・メイルをDate:順にソートすることにしました。 ・Reply-To:ヘッダの内容によっては、メイルが読めない場合があったのに 対処したつもりです。同様に、Cc:に指定されたアドレスの数によっては メイルが読めなかったかもしれませんが、これにも対処したつもりです。 (むらかみさん&こにしさんに感謝) 98/09/12 jm5_01b4 ・Date:フィールドを抽出する事が出来ました(こにしさんに深く感謝) ・エキスポート時の動作で、「引用記号を入れない」というものをCtrl-sに割り当て ・一部ペン操作対応 ・C:ドライブだけでも動作するという確認が取れたので、あまりお勧めしませんが C:ドライブにMessageSuiteがインストールされている場合にも対応しました。 ・ビューアでもヘッダが出るようにした。 ・その他細かく内部的に色々。 98/08/27 jm5_01b31 ・メイル本文の最後が改行なしの全角文字である場合、本来入るべきいわゆる kanji-outコードが欠落するというバグを修正した。 (このバグが引き起こした障害の例については、 http://www.hi-ho.ne.jp/~ktkawabe/troublereport.txt を参照して下さい。) ・前バージョンでは、Content-Typeを付加していなかった。このような場合 経路の途中で不正なContent-Typeを勝手に付加されてしまう事があると 判明したので、自衛のため正しいContent-Typeを最初からつける事にした。 ・上記二つの不具合は、障害を報告してくださった星野さんや、該当メイル が御自分の環境で読めたことを報告してくださったPsion-ML-Jの皆さん、 その後のテストに快く応じていただいた皆さんのご協力があって、はじめて 短時間で特定され、また対応を行うことが出来ました。ここに感謝いたします。 ・X-Mailer:をヘッダに付加するようにした。 98/08/23 jm5_01b3(障害報告により、およそ7時間強で配布中止) ・メイルが100通以上溜っているばあいに、ロ−カルフォルダ画面の表示が おかしくなる不具合を修正。 ・ヘッダ情報を読み出すようにした。いまのところ、Date:フィ−ルドの解析が 済んでいない。 ・引用文字列を255文字まで入力出来るよう拡張。 ・CDescriptor.opxとCSocket.opxのバージョン違いをチェックし、バージョンが 違うと動かないようにする代わりに、二次配布不可の条件を外した。 (Keith Walkerさんに深く感謝) 98/08/14 jm5_01b2 (ベ−タテスタ登録者のみに公開) ・OPA化した。 ・iniファイルを作るようにした。設定が保存されるようになった。 ・キ−割当ての種類を増した。具体的には inbox画面でEnterでもビュ−ア起動 メイルが沢山あるときspaceで次画面 pで前画面 viewerでEnterでも次画面 Delでも前画面 ESCでもビュ−ア終了 ・半角仮名を受信時、送られてきた形式によらず8bit半角仮名に変換。(近藤さんに深く感謝) ・8bit半角仮名を送信しようとした場合、送信を中止するか、全角に変換してから 送信するか選択できるようにした。(-->テスタの皆さんに本当に深く感謝) ・Aboutが出るようになった ・ファイル名を入力せずESCで逃げた場合にもエラ−を出さないようにした。 ・エキスポ−ト時に、引用マ−クを一文字だけ入れられるようにした。 ・message1.opxのバ−ジョンが上り、メイルが読めない事がある不具合が解消された。 (Otfried Cheongさんとこにしさんに深く感謝) ・その他細かいバグ取り 98/08/09 jm5_01b1 ・CDescriptor.opxおよびCSocket.opxのバージョンがrelease0.4になったので、 新しいOPXを用いてコンパイルしなおした。 ・Keith Walkerからの要請により、OPXのバージョンチェックルーチンを書き加えた。 98/08/03 jm5_01b0 ・アルファテストを終わり、公開β版とした。 ・描画をBoldにした時に、長い行の右端の方が画面からはみ出してしまう不具合を 修正した。 ・非常に長い英文メイルをViewまたはExportする場合、また非常に長い日本語 メイルを送信する場合に、バッファ容量が不足する不具合を修正した。 (この不具合は多数のテスタの皆さんのおかげで修正することが出来ました。) 98/07/07 jm5_00b ・アルファ版 ・メイル送信時にlocal portがserialまたはirdaになっている場合、強制的にdisable にしてモデムに接続するようにした。(アルファテスタの皆さんに深く感謝) 98/07/02 jm5_00a ・アルファ版 ・SJISテキストをJISに変換し、SMTPサーバに送信する機能を付加。 これにより日本語メイルの送信が可能に。 ・localフォルダにたくさんメイルが溜まっている場合に画面表示が変になる不具合 を修正。 98/06/21 jm5_00 ・最初の公開版。メイル読み機能のみ。 9: 補足 9-1 JM5_01b1とb3に関する注意 古いバージョンのJM5の中で、JM5_01b1とJM5_b3には、メイルを受ける側に まれに障害を引き起こす可能性のあるバグが含まれていました。詳細に御興味 をお持ちの方は http://www.hi-ho.ne.jp/~ktkawabe/troublereport.txt を参照して下さい。該当バージョンのJM5を御使用になっている場合、必ず バグフィクスの行われたバージョン(JM5_01b31かそれ以後)に入れ替えて下さい。 9-2 JM5_01b1かそれ以前を使用していた方への注意 message1.opxのバ−ジョンが新しくなり、それに従いOPXのUIDも変更されま した。古いOPXのファイル名はmessage1.opxでタイムスタンプは98/03/19 19:00:00です。新しいものはSIS形式でインスト−ルされるようになっており、 SISファイル名はmessageOPX.SISでタイムスタンプは98/08/12 00:57:18です。 本バ−ジョン(JM5_01b6)は、新しいOPXを使用してコンパイルされてい ます。古いmessagae1.opxを御使用の場合、必ずJM5のパッケ−ジに含まれる ものかそれより新しいものをインスト−ルして御使用下さい。 なお、古いmessage1.OPXは新しいものとUIDが違うので、バイナリのみ使用す る場合には必ずしも古いものをアンインスト−ルする必要はありませんが、もし 他のプログラムで全く使用していないのならアンインスト−ルした方が良いでしょ う。 ソ−スを利用するばあいには、古いmessage.oxhを利用することは出来ません。