LPKKC107.TXT LPKKC document 1. これは? 一言で要約すると、LPKKC.SYS は KKCFUNC.SYS と同じ動作をする ものです。KKCFUNC.SYS はバージョン 5.0 以上の DOS に かな漢字変換 FEP をインストールするとき、必要とされる デバイスドライバです。(バージョン 5.0 以上の日本語 DOS で あればたいがい付属しているはずです) もとから日本語対応していない DOS を日本語化するときには 日本語版の DOS から KKCFUNC.SYS を持ってくるかわりにこの LPKKC.SYS が使えるでしょう。 2. 動作環境 バージョン 5.0 以上の DOS(もしくは DOS 互換環境) DOS 汎用(のはず)。 3. ファイル内容 LPKKC.SYS KKCFUNC.SYS 互換ドライバ LPKKCWIN.SYS KKCFUNC.SYS 互換ドライバ(Windows, DOSSHELL 対応版) Windows もしくは DOS 用のタスクスワッパー (DOSSHELL や DR-DOS 付属の TaskMax など)を利用する 場合はこちらを組み込んでください。 LPKKCMIN.SYS KKCFUNC.SYS 互換ドライバ(簡易版) 常駐サイズは非常に小さくなりますが、いろいろ処理を はしょっているせいもありちょっと危険です。 よほどサイズにこだわらない限りは LPKKC.SYS を使う ことをおすすめします。 また、Windows 環境との併用もまったく考慮していません。 KKCSEL.EXE 複数の FEP をインストールしてある場合、この プログラムで FEP の切りかえができます。 つまり MS-DOS の selkkc の手抜き版だとお考えください。 そうです。かなりやっつけ仕事です^^; 4. インストール lpkkc.sys は kkcfunc.sys の代用ドライバですので、kkcfunc.sys を インストールするのと同様に、config.sys を編集して、 lpkkc.sys(あるいは lpkkcwin.sys, lpkkcmin.sys)をデバイスドライバ として登録します。 5. ライセンスなど 本プログラムはいわゆるフリーソフトウェアです。 ・誰でも無償で使用することができます。 ・営利目的での許可なき再配布は認めません。 ・内容、動作に関する保証はいたしません。 ・本プログラムを使用した結果生じた事態に対して作者は、補償を  いっさいおこないません。各自の判断と責任においてご利用ください。 6. その他もろもろ ・現時点で調べた FEP は、WX2 2.56 と WX3 と MS-IME95 という  似たような系列のものばかりなので atok やら vje やらだと  どうだろう。不安。 ・KKCFUNC.SYS ではかな漢字変換が 16 個まで登録可能ですが  LPKKC.SYS は 4 個までです。ソースをいじればもっと増やせますが  そんなに必要だとも思えないので。 ・ソースの中には個々の機能について説明が書いてありますが、別に  オフィシャルな資料にあたって調べたわけではなく完全に作者の  一存で書かれているのであまり鵜呑みにすべきではないでしょう。 ・バージョンアップ情報なんかは、このテキストのいちばん下に書いた WEB ページのアドレスから適当にたどってみてください。 ・本プログラムはフリーソフトウェアですが、寄付については特に  拒んでおりませんのでお気軽にご連絡ください;) (以下は 1.02) ・int2fh, ah=4eh の処理について。本家の KKCFUNC は int2fh,ah=4eh を  完全に分捕ってしまうらしい(伝聞形なのがアレですがお察し下さい)が、  念のため Interrupt List 見たら SilverNet とかいうのが  int 2fh,ax=4e53h を使っていたので、一応これだけスルーしてみた。 ・KKC の仕様が int 2fh, ax=4e00h〜ax=4effh のうちどのへんを予約して  いるのかは、KKC の仕様を読める立場にないのでわからない。FEP の切替に  ax=4e05h が使われているので、ax=4e00h〜ax=4e05h までは少なくとも  仕様化されていると思う。しかし FEP のリバースエンジニアリングでも  しない限り、ax=4e05h 以外の詳細は不明。 (以下は 1.03, 1.04) ・FreeDOS 対策として、DOS 内部データ退避領域を多めに確保してみた。  日本語化した FreeDOS を使う場合、バージョン 1.02 以前の lpkkc や  その他の kkcfunc を使うと内部領域が破壊される。ただし、退避処理を  省略している lpkkcmin や kkcfake(HP100/200LX 日本語化キット付属)  の場合は問題ない。  退避領域は Build 2035 の FAT32 対応カーネルで 3210 バイトほど必要。  SDA サイズが 2048 バイトをオーバーしている DOS はたぶん FreeDOS  だけだと思う。ちなみに Win98SE は 2010 バイト) ・DOSSHELL 向けのローカルデータ通知コールをサポートし忘れてたので  いちおう追加しといたけど……必要かどうかいまいち不明。  だって DOSSHELL だし。他にこの機能使ってそうなのって DR-DOS の  TaskMax ぐらいしか思いつかないが、(DR-DOS 6.0/V に付属していた  ものを除いて)DOS/V 日本語環境をまともにサポートしていない。 ・Windows とかを考慮したコードを入れておくのが実はムダだという気も  してきたので lpkkc.sys から除去してみた。必要な場合は lpkkcwin.sys  のほうを使ってください。 (以下は 1.05) ・1.00 当初から存在していたバグが修正されました。  これほど致命的なものに10年以上気づかなかったとは…。  ちなみに該当部分は lpkkcmin.sys には含まれていません。つまり、  NEC AI を利用した環境で Vz editor を常駐させる場合、lpkkcmin.sys は  使えません。lpkkc.sys もしくは lpkkcwin.sys をご利用ください。 ・OpenWatcom 1.8 の wasm でドライバをビルドしてみました。DOS 環境に  依存せずにビルドできるの(だけ)が利点です。 ・1.04 のアーカイブに kkcsel.exe が入ってなかったような気がする…。 (以下は 1.06) ・ローカルスタックサイズ設定オプション追加。常駐サイズにこだわる  場合にどうぞ。    [用例]  DEVICE=LPKKC.SYS /S128    /S の直後に10進数でスタックサイズを記述します。  値の範囲は 64〜512 で、オプション無指定時は /S256 と同じです。    FEP が使用するのよりも少ないサイズに設定してしまった場合、LPKKC の  内部領域が破壊されます。当然ながら動作は保証されません。  調査の一助として、LPKKC 初期化時にローカルスタック領域を FFh で  初期化するようにしてあります。ローカルスタックは LPKKC の  メモリ最高位部分に配置されており、FEP を使って変換作業をしたのち  DEBUG (SYMDEB) などでメモリの該当部分をダンプすれば、FEP が使った  スタック領域のサイズを(ある程度までは)推定できます。  (NEC 版 MS-DOS 6.2 + 付属の NECAI、DOS/V 版 Win95 + 付属の  DOS 版 MS-IME という構成で調べた限りでは、どちらも 64 バイト内に  ギリギリ収まっているように見える。とはいえすべての状況を確認した  わけではないので…) (以下は 1.07) ・最小スタックサイズ(/S64)が設定できなかったのを修正  (その日のうちにバグ修正…)。 ・常駐時の内部ステータス表示オプション /V 追加。    [用例]  DEVICE=LPKKC.SYS /S128 /V    [表示例]  LPKKC : Kana-Kanji Converter Supporter ver 1.07  (c)sava/LP-Project. 1997-2009   DOS SDA (indos) 0436:0320 (1932bytes)   LPKKC Internal Stack 1302:0C00 (128bytes)  DOS SDA は KKCFUNC(互換ドライバ)が退避/復元する必要がある  DOS の内部データ領域、LPKKC Internal Stack は LPKKC 内部スタックの  先頭アドレスとオプション /S で指定したスタックサイズです。  (lpkkcmin では何も表示しません)  ちなみに、変更点は初期化部分のみですので、ドライバのファイルサイズ  や常駐サイズは 1.06 と変わりません。 7. 履歴 Ver 1.00 1997/11/21 ・作成 Ver 1.01 1997/12/01 ・デバイスドライバのコマンドルーチンを正しく書きかえて いなかったので修正。 ・int 2Fh, ax=1605h の判定がやや甘かったので修正。 ・KKCSEL を修正。FEP がひとつもないときを考慮。 Ver 1.02test 2002/02/27 ・int 2Fh, ah=4Eh の処理を追加。というか入れ忘れてたもよう。  OAK/V がこれでいけるだろうか……  ・ローカルスタックサイズを 512 -> 256 バイトへ。大丈夫かな?  (lpkkc のみ) Ver 1.03 2002/11/30 ・FreeDOS 対策。  private SDA の最大サイズを 2048 -> 4096 バイトに変更。  (lpkkc のみ。したがって lpkkcmin は 1.02 と同じ) Ver 1.04 2004/11/23 ・lpkkc.sys から Windows でのインスタンス化コードを除去。  かわりに lpkkcwin.sys を用意した。 ・lpkkcwin.sys のほうに int 2Fh, ax=4B05h(DOSSHELL での  ローカルデータ領域通知)のサポート追加。今までつけ忘れていたので。 ・初期化コードの位置を動かして、バイナリサイズを削減してみた。  (常駐サイズは減らない) Ver 1.05 2009/04/25 ・DOS 内部データ退避サイズの判定が間違っていたのを修正。  これにより、lpkkc や lpkkcwin と NEC AI 利用時に Vz を  常駐させてもハングアップしなくなった(thanks to reiria)。 ・OpenWatcom のアセンブラ (wasm) 向けの修正。  ついでに Makefile 添付。(Makefile.wc) Ver 1.06 2009/04/27 ・ローカルスタックサイズ設定オプション追加。 Ver 1.07 2009/04/27 ・オプション /S で /S64 指定時の不具合修正。 ・/V オプション追加。 -- sava/LP-Project http://hp.vector.co.jp/authors/VA003720/lpproj/