ヘッダ文字列(「名前」とか「電話番号」とか)の取得を、CMapクラスを使って ハッシュテーブルを引くように変更した。 ちょっとは速くなったかな?
起動時に新規ファイルをオープンするかどうかを選択できるようにした。
全角英小文字を半角に変換する際に、 一文字ずれて変換されるという不具合(全角a→半角b)を修正。 今まで全然気がつかなかった。
レコード一覧表示の動作を最適化して、高速化を図った。
編集時に必須項目が入力済みかチェックするようにした。
レポート編集ダイアログの[内容欄]を5行→12行に拡大した。
レポートの印刷設定時に、印字しないを選ぶと他の項目を選択不能にした。
通信ポートとして、COM5~COM9に対応。
光通信でザウルスへ転送後に、0.5秒のウェイトを入れる。
ザウルスへ送受信する時に使うツールバーのボタンのデザインを変更。
HiRo.氏 作のTDIAL32.DLLをダイアル時に呼び出せるようにする。 DLLを呼び出すだけなので、実装はすごく簡単。 これで私のノートからでもオートダイアルが可能になった。 HiRo.さん、素早いDLL化、ありがとうございました。
光通信時も通信ポート初期化後に0.5秒のウェイトを入れる。 これで通信開始後に停止することが無くなるかも。
通信ケーブル使用時にPC→ザウルスの転送が全くできなくなっている不具合を 修正。 最初は、ハードウェアフロー制御にしたのが原因かと思ったが、 ソフトウェアフロー制御に戻しても全く変化がない。 341バイト転送したところでいつも通信異常になるので、 タイミング問題と推測。 1バイト毎にウェイトを入れるが改善せず、まったくのお手上げ状態。 SetCommState()に渡すDCB構造体の不良かと思って、直前にブレーク ポイントを設定して見るが問題なし。 ところがこの時だけは正常に転送できる。 ブレークポイントを外すとやっぱり駄目。 この事からウェイトが必要と推測し、 通信ポートの初期化後に0.5秒ほどのウェイトを入れると 以後は全く問題なし。 理由は不明だが、結果オーライ。
と思ったら、今度は転送終了後に「通信異常が発生しました」の表示。 ケーブル使用時には、最後の0x1aを送信する前に1秒ほどのウェイトを 入れる必要があるが、これが足りないのかと思って、ちょっと増やす。 駄目。思い切って10秒に増やす。これも駄目。 これだけやって駄目なら、原因は他の事だろう。 さっきと同様に、0x1a送信直前でブレークさせ、ステップ実行してみる。 この時は最後まで正常に送信できた。 結局、0x1a送信後に0.5秒ほどのウェイトを入れることで、 安定して送信できるようになった。
これらは以前は問題なく出来ていたし、パソコンによっては 問題が発生しないようなので、かなり微妙なタイミングらしい。 それとも3日程前にP6-150MHzから166MHzにクロックアップしたのが 悪影響しているのかな。
「切り取り」が複数レコードに対応していなかった不具合を修正。
環境設定ダイアログをちょっとだけかっこよくした。
スピンボタンコントロールにアクセラレーションを設定。 少し操作しやすくなったかも。
アクションリストの重要度「緊急」が「重要」になっているのを直す。
PC-9821V10で光通信が出来ない不具合を修正。 V1.1までDCB構造体のメンバ変数fRtsControlを RTS_CONTROL_ENABLEにしていたが、 V1.2でRTS_CONTROL_DISABLEにしたことが原因らしい。 でもAT互換機の方ではどちらにしても問題が無い。 PC-98用のシステムが何か変? ともかく、元のRTS_CONTROL_ENABLEにしておく。
今日は私の誕生日。 というのはどうでも良くて、 V1.2でアドイン転送機能を付けた時に、 光通信のタイムアウトをやや厳しめに設定していたけど、 どうもタイミング的に苦しいマシンもありそうなので、 V1.1並みに戻す。
データの内容を、画面表示用とファイル出力用で書き方を変えるようにした。 例えば、備考欄のMEM1は表示されなくなったし、生年月日も'/'区切りで 見易くなった。
手書きメモのデータが不正な場合に一般保護違反が起こらないように修正。
レコード関係の操作にキーボードアクセラレータを追加。
手書きメモ編集ダイアログのコピーと貼り付けボタンをCBitmapButtonに変更。
環境設定のスライダコントロールをドラッグ中にも更新するようにした。
アクションリスト編集ダイアログに曜日表示を追加。
電話帳と名刺管理の編集ダイアログに生年月日の曜日表示を追加。
何気なくVCのヘルプを眺めてると、ちょっと手を加えるだけで MAPIに対応できるらしい。 早速、メニューリソースに[送信]っていうのを付けて、 ソースに2行ほど書き足したら、確かにMAPI対応らしくなった。 なったことはなったけど、Microsoft ExchangeとかWindows Messagingとか 私には理解不能のアプリケーションを使わされるようだ。 うーん、Internet Mailとかに簡単に添付できるものだと思ってたけど、 ちょっと違うみたい。 ま、簡単に出来たから残しとくけども。
昨年の11月17日に実装した「擬似クリップボード機能」を ようやく本物のクリップボード対応にする。 今までは独自のメモリを確保して1レコードのコピー&ペースト を行ってたけど、今後は他のアプリにテキスト形式でペースト できるようにした。 さらに複数のレコードを一度にコピーできるようにした。
右クリック時のメニューで選択できないはずのものが 選択できるようになることがあるのを修正。
手書きメモ編集ダイアログで、クリップボードに貼り付けられない 形式のデータがある時でも[貼り付け]ボタンが有効になるのを修正。
レポートの入力フィールド等幅フォント化はやっぱり中止。 デザイン上、ザウルスの文字幅分のスペースを取るのが難しいし (640x480の解像度を切り捨てればいいけど)、大きいフォント使われた ときにどうなるか分からないし、Emigrantみたいなのでフォント換えられたら 元も子もなくなるかもしれないから。
手書きメモの画像表示スペースに、最大の画像サイズを表示しておくように した。
少しだけエラー対策強化(効果は疑問)。
リリース版でアドイン転送直後にアクセスバイオレーションが発生する 大バグを修正。 いつもはデバッグ版でデバッグするので気付かなかった。 これじゃV1.2の価値はないなぁ。
大きなアドインを転送すると、プログレスバーが早く100%に 達してしまうバグを発見。 プログレスバー自体がどうも16bit符号付整数(32K)しか受け取れないため、 これ以上の大きさのファイルではオーバフローしているようだ。 うーん、32bit OSの名が泣くぞ。
記念日編集機能完成。
レポートの入力フィールドを等幅フォントに変更。 これでレイアウトしやすくなったかな?
もう一度光通信モジュールを見直し。 エラー処理を強化し、再起動しなくても良いようにした。 まだ完全じゃないかもしれないけど、前よりはマシになったはず。
記念日データを扱えるようにする。 内部的には扱えるように設計してあったけど、 編集ダイアログなどがなかったので、その辺から作り始める。 月/週/曜の記念日データを保持する適当なフィールドクラスが なかったので新しく専用のクラスを作成。
光通信モジュールの見直し。 デッドロックする可能性がある部分を修正して、極力回避するようにした。
アドイン転送の光通信部が意外に難航。 光通信プロトコルのレベルで、ENQ後のSYNが一度で通らない時があるため、 やたらと遅い(タイムアウトまで待つため)。 リトライすると通るので、タイミング問題と推測。 受信-送信間に規定されている3msのウェイトを入れると、かなり安定した。 が、まだ何回かのリトライが発生しているので、思い切って15msのウェイトに してみる。 これで完全にリトライがなくなった。
パソコンリンクプロトコルのレベルで、CANに対する応答がうまくいかず、 やや詰まる。 応答ENQ-ACK-ACKは次のSOHから始まるパケットとまとめて、 一度の光通信パケットに入れることでうまくいくことが判明。 無事回避。
アドイン転送部のスレッド化と転送経過の表示部分作成。 通信ケーブルの部分はこれで完成。
アドインの説明書を表示して確認できるようにした。
ZRSファイルの選択機構と、ZRSファイルの内容のチェック機構を作った。
やっぱり時々「アドイン機能のチェック段階」で止まることがあるので、 もう一度精密検査。 なんと、RTS(Request To Send)は有効にしてたのに、CTS(Clear To Send)を 有効にし忘れてた。 おいおい、それじゃ意味ないって。
それでもアドイン本体でまだ止まる。 フロー制御は出来てるはずなので、よーく調べてみると、RFDパケットに 書き込むバイト数に"RFD"の3バイトを足すのを忘れてた。 道理で1ブロック目からNAKが返ってくるはずだ。 それまではNAKに対して、長さ情報がおかしいパケットを延々と送り続けてた。 かわいそうなザウルス。。。
これを直すとようやくアドイン全体が転送できた。 ザウルスでも正常に使えてる。 アドイン転送のメイン部分は出来たので、あとは光通信に対応して (これはちょこっと関数書くだけで対応可能なはず)、 ファイルの選択機構を付けて、マルチスレッド化したら完成かな。
バイナリ転送する必要がある?? ならハードフロー制御しかないじゃないの。 もう開き直って、デフォルトのXフローを捨て、ハードフロー一本に。 こうしたら今まで不安定極まりなかった転送がすごく安定(そりゃそうだ)。 今までは良く行っても「アドイン機能のチェック段階」で止まってたのに、 一気に「アドイン本体の転送段階」まで進んだ。ま、完成はしてないけど、 通信さえしてくれたらデバッグなんて何とでもなるし。
加古英児氏作の アドインダウンローダADTXのソースを参考にアドイン転送部を作り始める。 そう言えば、昔、ポケコン(PC-E500)のアセンブラで遊んでた時も、 加古さんのソースを良く参考にしてたなぁ。。。
お手本があるから結構簡単に出来るかと思ったらそうでもなかった。 大体、Xフロー制御してるのに、なんで8ビットクリーンなデータ転送を 要求するかなぁ。 加古さんのソースを見ても、肝心のフロー設定のところだけコメントが無いので、 よくわからん。 小笠原博之氏の zaddinの説明書では、Xフローは無しに設定するよう書いてあるけど、 ADTXでは有りのままの設定でも転送できている。 でも、ソースの中ではエスケープしている様子は無いし。。。 うー、XONとかXOFFのコードが出てきたらどうすればいいんだ??
6月14日に直したはずだった「通信ケーブル時5秒でタイムアウト現象」が まだ直っていなかったので再度修正。 うーん、一体どうなっとるんだ。
ファイルメニューのオープン履歴がこれまで4件で固定だったのを、 最大16までの可変にした。
そろそろアドインダウンローダでも作るかな。
アクションリストとスケジュールの入力が煩わしかった(特に年)ので、 フォーカスが当たった時に今日の日付が入るようにした。
アクションリストで、[チェック]の項目をチェックすると、今日の日付が [処理日]の項目に入るようにした。
要望の多かったレコード単位(複数可)の送信に対応させる。
○数字を自動的に相互変換するようにした。
特殊記号の変換として、電話マークを"[TEL]"に、FAXマークを"[FAX]"に それぞれ変換するようにした。
ザウルスからの受信時、またはZAUファイルのオープン時に ハングアップすることがある不具合を直す。 データ中に、""で囲まれた文字列があると発生していたようだ。 この辺は設計時にも注意していたが、実際に試してなかったので かなり長い間放置されてたみたい。
VC++5.0からはPentiumProに最適化できるので、やってみることにする。 例によって体感的に変化無いけど、コード自体はだいぶ変わっているようだ。
Visual C++ 5.0 Proのアップグレードが届く。 早速インストールして再コンパイル。
起動時にレジストリから設定値を読み込む処理を最適化。 今まではMFC組み込みの関数を使っていたので、値を一つ読み込む度に レジストリをオープンしてクローズしていたが、まとめて複数の値を 読み込むように変更。 理論上は起動が速くなったはず。
全角英数字を半角に変換するように設定していても、全角ハイフンが 半角にならない不具合を修正。 まぁ、英数字じゃないと言えばそうだけど、やっぱり変なので直す。
直ったと思っていたダイアル機能がまだおかしい。 ダイアルを途中で中止すると、変な後遺症が残る。 もう一度直してみるが、本当に直ったかは疑問。 ダイアル中に再度ダイアルボタンを押せないようにしたので、 ちょっとはましかな?
試しにPentiumに最適化したバイナリを作ってみる。 体感的にはあまり変わらないけど、Pentiumユーザにとっては 精神的に良いかも??
TAPIが正しく電話してくれるかをWindows95で検査。
ところが、一般保護違反で落ちてしまう。
はて、NTではちゃんと動くのに。。。
いろいろ調べると、Win95はTAPI V1.4で、WinNTはTAPI V2.0らしい。
で、標準のtapi.hを眺めてみると、
#define TAPI_CURRENT_VERSION 0x00020000
の表示が。。。
何やら、V1.4対応にしたければtapi.hをインクルードする前に、
自分でバージョンを定義しろとのこと。
言われるままに定義すると、うまく動いた。
でも、ダイアル中に回線を切断すると、デバッガに一般保護違反の表示が。
気持ち悪いので原因を探すと、APIを呼び出す際に渡す構造体が正しく
初期化されていなかった。
直してやると、うまくいった。
一応、バグは取れたようなので、名刺管理のダイアログボックスにも
[dial]ボタンを付けた。
メモリを確保している箇所にチェック機構を付ける。 今まではノーチェックだったけど、これが絡んだ不具合って あったのかいな。
表示画面を最大化して、下の方にある少しの隙間をダブルクリックすると 一般保護違反が出るという、とんでもない不具合を修正。 あぶないソフトだ。
ダイアログボックスにヘルプボタンを付ける。
V1.0.1で、 3月9日に直した「ケーブル受信時に5秒でタイムアウト」 のバグが復活していることを発見。修正。
テレフォニーのプロパティを「パルス」にしていても、勝手に トーンでダイアルしてしまう不具合を発見。 以前はトーン発信だったので気付かなかったが、今のパルス回線では ダイアルすらしてくれなかった。 TAPIのlineTranslateAddress()で、正規アドレスからダイアルアドレスに 一度変換してからダイアルするようにした。 でも、市内にかけても市外局番を付けてしまうのはなぜなんだろう??
同じくTAPIに全角数字を渡さないように、内部で半角数字に変換するように した。 全角を渡していたらどうなるんだろう。。。怖くて試せないや
連続してペーストボタンを押していると落ちるという、致命的な バグを直す。 今までよく見つからなかったなぁ。。。(感心)
ヘルプメニューに、[開発履歴のページ]と[最新版配布のページ]の 項目を追加する。 ここを押すと、Webブラウザが立ち上がって、それぞれのページを 表示するようにした。 後者はサポート対象ユーザだけの特典だけど。。。
ファイルに書き込む処理を最適化。 計ってないけど、2倍ぐらいは高速になったはず。 大きいデータを書き込んでも大丈夫(かな?)
編集後の画面更新を最適化。 以前はリスト全体を更新していたけど、編集したレコードだけを 更新するようにした。 これでかなり体感速度アップ。
ヘルプファイルにFAQとビットマップファイルを幾つか追加した。
通信ケーブルを使用していると、ザウルスからの受信時に終了しない バグを直す。 どうも、転送バイト数が512の倍数だと無限ループに入っていたみたい (恥ずかしい)。
「手書きメモの大きさを検査しない」にしていても、使用ザウルスの 表示幅しか表示していなかったのを直した。
ステータスバーに通信デバイスの種類を表示するようにした。
ヘルプ暫定版が取り敢えず完成。 見難い、恰好悪い、中身が不親切と三拍子揃っているが、まぁ良しとする。
製作開始から9ヶ月弱。ついに正式公開へ。
少し修正。 手書きメモの「イメージデータ」のフィールドには、これまでは圧縮後の バイト数を表示していたけど、それを縦横のドット数に変更。 これのお蔭で表示がやや速くなったはず(理論上は、だけど)。
フィールドのソートに対応。 フィールドヘッダをクリックすると、内容でソートしてくれます。
フィールド内容の制限の有無を選択できるようにした。 これまでは64バイトに制限してたけど、最大1024バイトまで表示可能 にしました。 制限するかしないかは選択可能。 制限した方が速いですけど。
半角ひらがなとか特殊記号など、ザウルス独自の文字を変換する機能を追加。 今まで選択不可能だった[環境設定]-[編集]ページのオプションを有効化。
機能的にはほぼ完成。 後はバグフィックスして暫定ヘルプを作れば、正式公開できるかな。。。
エラーチェックの強化。 今まで手を抜いていた箇所を見直して、保護違反とかが出来るだけ 起こらないようにした。
ヘルプファイル作成開始。 MS-Wordで作るしかないので、大変面倒。 おまけに出来上がりが恰好悪い。
光通信時の送信エコーを無視するかしないかを選択できるようにした。 シャープ純正のCE-IR2は無視しないと駄目だけど、他社製品ではどうか 分からないので一応選択可能に。 でも、自分のところにはそういう装置がないので確認不能。 まぁ、いいか。
要望の多かった「フィールド幅の保存」をようやく実装する。 保存のタイミングをHDN_ENDTRACKで取りたかったのだが、 CWnd::OnChildNotify()ではどうもうまくフック出来ない。 CWnd::OnNotify()やON_NOTIFY_REFLECTマクロで試したが どれも失敗。 よく分からなかったので、違った方法で実装することにした。
レコードの追加に加え、「レコード挿入」も実装した。 ついでにクリップボードから貼り付けるときに、貼り付け場所を選べるように 変更した。
クリップボードへの切り取りを実装していなかったことに気付く。 さらに右クリックによるポップアップメニューで、レコードを選択していないと 出来ないはずの操作が選択していなくても出来るようになっていたので 修正した。
送信バッファの大きさを可変にした。 今までのデフォルト値(128KB)でもほとんど問題は無いはずだけど、 一応1MBまで設定できるようにした。
これまではザウルスの機種によって手書きメモのサイズを 制限していたが、この制限を無くした。 ZauLINK上では大きいビットマップも作成できるけど、 実際に転送できるかはやってみないと分からない(^^;
送受信中のダイアログボックスが貧相だったので、 ちょっと見た目を良くした。 あとは「送受信中にできないはずのことができる」現象を 防止しなければ。
通信ケーブルでの受信時に、5秒でタイムアウトする不具合を直す。 また、受信待機中にウィンドウの移動ができないことも発見。 スレッドに分けていなかったためで、タスクマネージャでも「応答無し」 とか言われてしまった。 恰好悪いので別スレッドを起動するように変更した。
Install Shield Expressでインストーラを作成した。 VC++4.0の頃のInstall Shield SDK Editionはスクリプト書くのが 面倒だったけど、VC++4.2付属のものはウィザード形式でとっても簡単。 一行もスクリプト書かなくて済んだ。 これのためだけでも、バージョンアップした甲斐があるなぁ。
ザウルスの機種選択が有効になるようにした。
自分でも不満のあったレポートと自由帳の扱いを統合した。 編集ダイアログも従来のレポート用のものに一本化し、 仕様的にもすっきりした。
新型ザウルスPI-8000用に、278x128のサイズの手書きメモを 扱えるようにした。 ついでに手書きメモの編集ダイアログもデザイン変更。
不評の多かった、「リスト表示の列幅が編集後に初期化されてしまう」 という問題(というより単なる手抜き)をようやく改善。 一度列幅を設定したら、そのウィンドウを閉じるまで覚えておくように なりました。
いっぱい直して追加して、気づいたら予告してた2月上旬ももう少し。 でも学生に憑き物(?)の後期試験&レポートのため、しばらくまとまった 開発時間が取れそうにないです。 次回こそβ1と考えてたんですけど、とりあえずα5をリリースしておきます。 次は2月下旬以降のリリースになりますが、それまではこれで勘弁を。
注文してたVisual C++ 4.2が届く。 次のバージョンからはこれを使ってリリースの予定。
通報のあったバグを直す。 一つは「受信を開始しますか?」でキャンセルが効かない という不具合(ぉぃぉぃ)。昔動作確認して、その後いじってから おかしくなってたみたい。
もう一つは、ザウルスの他の機能に対して送信すると、 一度アプリを終了しないと通信が出来なくなる不具合。 たとえば、手書きメモのデータをザウルスの自由帳なんかに 送信すると発生します。 これの原因はよく分からないけど、ちょっとまずいかなと 思われるところを修正。 修正後の動作チェックはまだしてないけど(^^;
スケジュールの編集画面のコードはすぐに出来たが、 [OK]ボタンをクリックするとアクセス違反。 なぜかスタックウィンドウで呼び出し元を辿れないため、 原因がわからない。 そもそも呼ばれるはずのない場所でエラーが発生している。 これもNT4.0+VC4.0の動作不具合の一つなのかな。 (注:NT4.0+VC4.0の組合せは、マイクロソフトでは 動作保証していない) 結局、リビルドしたら直ったけど。(気持ち悪いなぁ)
ATIのディスプレイドライバをバージョンアップしたら、 これまでバグバグで使い物にならなかったアイコンエディタや ビットマップエディタが直ってた。 今までみたいに編集中に画面を乱されなくなったので、 ツールバーのボタンをいくつか作った。 これでちょっとおしゃれになったかな?
仕様変更その1。 印刷機能はサポートしません! だいたいそうゆうのが目的ではないから、余計な物は付けません。 今までメニューに印刷関連の項目があったけど、全部抹消!
仕様変更その2。 全データバックアップ対応は無期限延期! 従来の送受信ルーチンを使い回せばすぐに出来ると思ってたけど、 実際にやってみると、タイミングの調整が面倒くさい。 これじゃ一から作るのとあまりかわらんなぁ(←言いすぎ)。やめ!
最後まで作ってなかったスケジュールの編集画面を設計した。 例によってコードは後日書く予定。
今まで項目付きのレポートを「レポート」、項目無しのレポートを 「自由帳」と定義してたけど、場合によっては両者が混在してる事が あるみたい。 先頭レコードの型で「レポート」と「自由帳」を判断してたら、 混在してる時に編集できなくなるので、編集時に型を判断して、 適切な編集ダイアログを表示するようにした。 でも、新規入力時は先頭レコードの型で判断されちゃいます。 まあ、いいでしょ。
とある御仁から通信ケーブルを提供していただいたので、 早速通信ケーブルにも対応してみる。 技術的には光通信の方が数段面倒だったので、対応は結構簡単。 今までサボってた通信環境の設定ダイアログもちゃんと作ったし、 一応二つの通信方式に対応できた。
要望のあったアクションリストの新規入力&編集機能を付ける。 実は内部的には既に対応してあったけど、ダイアログボックスの デザインが面倒でほっておいたという。。。(^^;
レポートの編集画面はまず印刷時の書式設定以外の部分から作成した。 この部分はまた今度でいいか。
ひと段落ついたのでα公開。
レポートの編集ダイアログを作った。 印刷時の書式設定とか個人的にはあまり必要ない設定項目も多いけど、 やっぱり無いとまずいだろうな。 コードは明日書こう。
そろそろα2の公開時期かな。
自由帳の編集と追加が出来るように、 ダイアログとクラスの設計を行った。 PI-3000とPI-5000の自由帳はなんかちょっと違うことに気がついた。 PI-3000の自由帳はPI-5000のレポートみたいだな。
nunome2anike.eonet.ne.jp