[Message Prev][Message Next][Thread Prev][Thread Next][Message Index][Thread Index]

[MD:1885]Printing to W32-Printer (Meadow 1.13b1++ / 1.13b1.b)



 emacs21 の話題が沸騰しているので、時既に遅しかも知れませんが、
ようやく印刷機能を組み込んだ Meadow 1.13b1++ ができましたので
Meadow 1.13b1.b としてホームページの方に載せておきます。

 印刷の中身の仕組みですが、Windows 的には非常にオーソドックス
なやりかただと思います。

・meadowからバッファ全体の文字列とバッファの名前をSJISに変換し
 たものとバッファのタブの数を引数として受け取ります。
・PrintDlg 関数を呼び出して、選択したプリンタのデバイスコンテ
 キストを受け取り、以降はそのDCを使って作業します。
・この後は、Windows の標準的なやり方にしたがって、印刷中止のダ
 イアログと中止関数をセットした後で、StartDoc, StartPage, 印
 刷, EndPage, EndDoc を組み合わせてページ制御しつつ印刷します。
・なお、上野のプリンタが低機能な為、フォントを指定していするこ
 とができなかったので、フォントはデフォルトフォントのままです。
・これにより、Meadow から Windows につながりましたので、後は、
 WindowsのDCがお家芸な人がゴシゴシやってくれないかぁー

さて、ソースコード的には、ほとんどのコードは src/uenox.c という
ファイルに追加されていますが、その他は、

・src/makefile.nt に uenox.c を追加して、
・LISPにsymせねばならないので src/emacs.c をいじり、
・印刷中止のダイアログには meadow のインスタンスハンドルがどう
 しても必要なので mw32fns.c に泣く泣く手を入れ、
・ダイアログボックス自体は厚かましくも nt/meadow.rc に追加し、
 nt/resource.h も修正

しています。ロジック自体は uenox.c だけで読めます。uenox.c に
は、uenox-msgbox という余計な関数も入っていますが、meadow と
Windows の接合を試すときに実験したコードをそのまま残しているも
のです。Meadow Programing に参入しようと思っている方は参考にし
ていただければ幸いです。

さて、自分が心配しているのは、(もちろん Windows の印刷部分も
心配ですが)meadow から Windows の処理をする際に SJIS でバッ
ファの文字列を切り出しているあたりです。

w32-system-coding-system でバッファ(あるいはリージョン)の文
字列全体をデコードしているのですが、その際に、バッファを一旦、
make_buffer_string で、Lisp_Object の string に変換しているん
ですねぇ。(細かいことを言うと、バッファの名前もそうなんです。)

make_buffer_string で確保したオブジェクトって、LISPが自動的に
ガベージしてくれるんですよね?GCPROマクロとかはあるが、明示的
な free_string みたいな関数がみあたらない・・・

という訳で、いままで、ちょっとした簡単な印刷のため、メモ帳を
起動していて、何か心の奥底に引っかかっていた方は、是非、ご利
用いただければと思います。基本的には、Heaven Helps Those Who
Hacks Themselves.(天は八苦するものを助く)ですが、ご要望も
承りたいと思います。(私には時間と技術がないので、できるかは
別ですけど・・・)

---
"UENO Tetsuyuki" <uenox@xxxxxxxxxxxx>
上野 哲幸 Meadow のページ作成中
http://uenox.hoops.livedoor.com/meadow/