Pilot HOWTO by David H. Silber pilot@orbits.com v0.5, 17 August 1997 日本語訳 : 川島浩 (kei@av.crl.sony.co.jp) 訳の吟味/校正 : 吉山さん (yosshy@jedi.cs.kobe-u.ac.jp) : 土屋さん (tsuchiya@inet.mmp.fujitsu.co.jp) この HOWTO ドキュメントでは、Linux と共に Pilot を使う方法について 述べています。一般的には HOWTO ドキュメントは Linux オペレーティング システムのためのものですが、この HOWTO は Unix 全体に適用可能なもの です。(is not dependent on the version of unix used.) (訳注: ようするに、Linux に限らず、どんな Unix ユーザにも役に立ちます よ、ということですね。) 1. イントロダクション Pilot には、そのメモリ上のデータと、Microsoft Windows system 間の 同期を行うためのソフトウエアが付属しています。アップルのマッキントッシュ と同期させるためのソフトウエアもありますが、こちらは別売りです。 これまで、Linux/Unix コミュニティは Pilot の製造業者から無視されてきましたが、 幸運なことに、このような要求を満たすためのフリーソフトが開発されています。 このドキュメントではそのソフトウエアについて述べます。 つまり、どこから入手できて、どのようにインストールし、どうやって使うか、 などです。 1.1. このドキュメントについて このドキュメントの最新版は以下のURLで読むことができます: http://www.orbits.com/Pilot/Pilot-HOWTO.html また、このドキュメントは Linux Documentation Project (LDP) の一部と なっています。LDP や、他の HOWTO ドキュメントのさらに詳細については、 http://sunsite.unc.edu/LDP/ をご覧下さい。 将来のバージョンでは、もっとたくさんの種類の、Pilotの上で動作する プログラムを書くためのツールや、unix システムと Pilot の間でデータを やりとりするための conduit を書くためのツール等を紹介できると思います。 このドキュメントの中で、間違いや、もっとうまい表現などを見つけたら、 上の私のアドレスまで e-mail をください。その時には、どのバージョンの ドキュメントについてのコメントかも、書いてくださいね。 このドキュメントの著作権は David H. Silber に属します。また、 LDP HOWTO-INDEX ドキュメントに準じた条件でリリースされています。 This document is Copyright ゥ 1997 by David H. Silber. It is released under the copyright terms in the LDP HOWTO-INDEX document. 1.2. メイリングリスト pilot-unix メイリングリストは Matthew Cravit が運営しています。 . このメイリングリストの ルール(mandate)は: pilot-unix メイリングリストは、US Robotics Pilot PDA を UNIX システムと 一緒に使うことに興味のある人のための、議論と知識共有のためのものです。 これには、Pilot を UNIX と一緒に使うためのツール開発や、Unix上のPilot用 SDKの開発の助けをすることに興味のある人なども含まれます。 さらに詳細な情報(メイリングリストへの参加も含めて)については、``INFO'' という単語を含むメイルを pilot-unix-request@lists.best.com 宛に 送ってください。Subject 行は無視されますので注意してください。 1.3. メイリングリストのアーカイブ pilot-unix メイリングリストのアーカイブ(過去の記録)は、 http:///www.acm.rpi.edu/~albert/pilot/ にあります。Chris Stevens が管理しています。 1.4. FTP サイト Unix上で使う Pilot 用のツール類のアーカイブは: ftp://ryeham.ee.ryerson.ca/pub/PalmOS/ にあります。 Jeff Dionne が管理しています。 2. 一般的な情報 2.1 Pilot って何ですか? Pilot は小さな、ペンベースの Personal Digital Assistant (PDA)です。 現在は 3Com の子会社である、U.S. Robotics が開発しました。 (訳注: もともとは独立した会社である、Palm Computing という会社 が開発しましたが、その後 USR が Palm Computing を買収し、 3Com が USR を買収し...という経緯で 現在は 3Com ブランドになって います。 Pilot は遊び心一杯のマシンで、本当に可愛いデバイスです。 ペンベースというと文字認識の確度の低さに拒否反応を示される方も 多いかもしれませんが、Pilot はそんなことはありません。ちょっと 特殊な、でもすぐに覚えられる一筆書きのアルファベット文字認識 を採用していて、認識率は非常に高くなっています。また、山田さんの 開発された J-OS suite という日本語化環境をインストールすることで、 ほとんどのアプリケーションで日本語を使うことが可能になります。 (もちろんローマ字かな漢字変換で日本語を入力する事もできます。 J-OS suite の詳細は山田さんのホームページ http://www.tt.rim.or.jp/~tatsushi を参照ください。) PDA という言葉について詳しくない方のために書きますと、PDA とは、 さまざまな種類の個人情報、つまり、住所録や電話番号、カレンダー、 小切手帳管理、備忘録リスト、メモなどを管理するための機能を備えた 電子デバイスで、情報が必要なときにはいつでも使えるように簡単に 持ち運べるようなものです。 さらに Pilot のように融通のきく PDA では、PDA 上に格納されたデータを 他のコンピュータにバックアップをとったり、逆にコンピュータからデータや 新しいプログラムをダウンロードできたりします。 (訳注: この、母艦コンピュータとの同期機能が、Pilotのウリの一つです。 それと、もうひとつ、Programmable Device であるということ。 誰でも自由に新しいアプリケーションを書くことができるのです。 ソフトウエアを開発するための API も 3Com から公開されています。 実際、毎日平均5件以上もの新しいプログラムがインターネット上に公開 されています。Pilot用のFree/Shareware, 商用ソフトについては、例えば http://www.pilotgear.com http://www.pilotzone.com などをご覧ください。 また、開発ツールに関しては、この HOWTO の後のほうにも書かれていますが、 prc-tools という素晴らしいフリーの開発パッケージもあります。) 2.2. いろいろな種類の Pilot 128kバイト、512kバイトの RAM を搭載しています。 最近の2種類つまり、PalmPilot Personal と PalmPilot Professionalは それぞれ、512kバイト、1Mバイトの RAM を搭載しています。さらに、この 2機種には、LCD パネルのバックライトと、バージョン 2.0 の オペレーティングシステムが搭載されています。Professional には、この 他に TCP/IP スタックといくつかの追加内蔵プログラムが含まれています。 どの Pilot でも、メモリーカード(ROMとRAMを内蔵している)を交換すること によってアップグレードが可能です。もちろん、古いタイプの Pilot には バックライト機能はありませんけどね。 2.3. ハードウエアのインストール Pilot には、デスクトップコンピュータとデータをやりとりするための ``クレードル''が付属しています。この装置は実際には、Pilot を保持する ためのホールダーとシリアルケーブル、`ホットシンク'ボタンから構成 されています。このクレードルを、あなたのコンピュータの空いている シリアルポートに接続する必要があります。それぞれのスタンドアローン プログラムを走らせる時には、Pilot をこのクレードルに置いて、 `ホットシンク'ボタンを押してください。こうすることで、Pilot は通信する 必要があることを知ることができます。ボタンが押された時に Pilot の 電源がオフになっていた場合には、自動的にオンになります。 クレードルが接続されているシリアルポートに /dev/pilot という別名を 用意しておくと便利でしょう。こうするためには root ユーザになって、 以下を実行します: ln /dev/cua0 /dev/pilot このコマンドラインの、'cua0' の部分は、あなたの環境に合わせて 変更してくださいね。(クレードルのつながっているシリアルポート名) (訳注: /dev/cua* が存在しない場合には、/dev/ttyS* がこれに対応します。 また、DOS/Windows のシリアルポート名との対応は: DOS/Windows Linux COM1 cua0/ttyS0 COM2 cua1/ttyS1 です。) 3. Pilot と Linux でデータを共有する 3.1. Pilot-link というソフトウエア Pilot-link という一揃いのソフトウエアがあります。このソフトウエアに よって、プログラムを Pilot にダウンロードしたり、内蔵プログラムの データを linux との間でやりとりしたりすることができるようになります。 Pilot に付属するデスクトップソフトほどにはシームレスではありませんが、 双方向のデータのやりとりをすることができます。一般的に言って、 pilot-link ソフトウエアに含まれるそれぞれのソフトは、それぞれが 1種類のデータを管理します。(訳注: ようするに、Memo/Address/ToDo などなど、それぞれのデータを扱うソフトが独立している、ということ ですね。)で、これらの pilot-link ソフトウエアの上位ソフトとして PilotManager というソフトウエアがあり、これを使うとより統合的な 環境が実現できます。つまり、いろいろな種類のデータの同期を一度に 行うことができるわけです。 3.1.1. Pilot-link ソフトをインストールする。 パッケージ化されたバージョンのものは、大本(master)の配布よりはどうしても 遅れてしまいますが、設定が不要ですし、インストールも楽です。 バグフィックスや、新しい機能が必要な場合には、大本の配布を 使うほうがいいでしょう。 Debian Linux 用の pilot-link version 0.7.2 は、 ftp://ftp.debian.org/pub/debian/hamm/hamm/binary-i386/otherosfs/pilot- link_0.7.2-1.deb から入手できます。通常の方法で(訳注: dpkg や dselectを使って) インストールしてください。これをインストールした場合には、 「Pilot-link ソフトを使う」の章までスキップしてください。 RedHat Linux 用の pilot-link version 0.7.6 は、 ftp://ftp.redhat.com/pub/contrib/i386/pilot-link-0.7.6-2.i386.rpm から入手できます。通常の方法でインストールしてください。 これをインストールした場合には、「Pilot-link ソフトを使う」の章まで スキップしてください。 その他の版の linux や、その他の unix の場合には、 ftp://ryeham.ee.ryerson.ca/pub/PalmOS/pilot-link.0.8.2.tar.gz. をダウンロードしてください。 バージョン番号は少々変わってしまっているかもしれませんが、 新しいバージョンのものが、同じ場所に、同様の名前で存在する はずです。 (訳注: pilot-link の最新版は訳している現在、pilot-link.0.8.9.tar.gz になっているようです。訳者もこれをゲットしました。) 配布ファイル(訳注: pilot-link.0.8.2.tar.gzのこと)をゲットしたら、 次のコマンドラインで展開します: tar -xvzf pilot-link.0.8.2.tar.gz これによって、pilot-link.0.8.2 というディレクトリができあがり、 その中にソースがあります。 (訳注: 訳者は pilot-link.0.8.9 をゲットして、Debian-1.3.1の上に インストールしてみました。あっけないほど簡単にコンパイル/インストール が完了しました。まだ 全部の機能をテストしていませんが、うまく動作 しています。pilot-xfer のバックアップ機能 (-b オプション)はいいですね。 根こそぎバックアップしてくれているようなので安心。 また、この HOWTO に記述されているよりも多くのソフトウエアが含まれて います。X11 上のカレンダーソフト ical との連係も可能です。(Pilot -> Linux の片方向なのが残念ですが...) ./configure を実行します。これによって、ソフトウエアをコンパイルする ために必要なシステム情報を自動的に認識します。デフォールトでは、 できあがったソフトウエアを /usr/local 以下にインストールするような 設定になります。それを変更したい場合には、./configure のかわりに、 ./configure --prefix=DIR と実行してください。DIRには、あなたが pilot-link ソフトを インストールしたいと思っているディレクトリを指定します。 さて、make を実行して、コンパイルをおこないます。これだけでは ソフトウエアのインストールはおこなわれませんから、まずはやってみましょう。 (もしあなたが古いバージョンのソフトを新しいバージョンで置き換えようと している場合には、予め必要な機能がうまく動作するかどうかを確認したい かもしれませんよね。普通は問題ないはずですが。) root ユーザになって、make install を実行します。 これによって、/usr/local (または、あなたが --prefix オプションで指定 したディレクトリ)以下に、必要なソフトウエアがインストールされます。 もしあなたが root ユーザになることができない場合には、あなたが 書き込み権限を持っているどこかのディレクトリにインストールすれば よいでしょう。 実行ファイルのあるディレクトリを、サーチパスに加えるのを忘れないで くださいね。 3.1.2. Pilot-link ソフトを使う。 pilot-link ソフトのほとんどは、conduit(直訳:導管) です。 つまり、Pilot との間のデータ交換をおこなうものです。 このようなソフトを使う時には、Pilot の クレードルのホットシンクボタンを 押してください。これによって、Pilot 側のデータ転送が始まります。 なかには、ホットシンクボタンを押すように促さないプログラムもありますので、 れは覚えておいたほうがいいでしょう。 これらのプログラムのさらに詳細なことや、オプションなどに関しては それぞれのマニュアルページを参照してください。例えば pilot-xfer プログラムに関して知りたい場合には、シェルプロンプトから、 man pilot-xfer と入力します。 PilotManager を使う場合には、これらの細かいツールの使い方は知る必要 はないかもしれません。 (訳注: Pilot <-> Linux のやりとりをする時のシリアルラインのデフォールト 速度は 9600bps のようです。これは環境変数 PILOTRATE を設定することで 変更可能です。訳者の環境(Pentium-90+16550A+Linux2.0.32)では、 setenv PILOTRATE 57600 で、快適に動作しています。) 3.1.2.1. pilot-xfer pilot-link プログラムの中で、恐らく一番使いでのあるプログラムでしょう。 pilot-xfer を使うと、Pilot にプログラムをインストールしたり、 バックアップをとったり、バックアップをリストアしたり、ということが できます。 プログラムを Pilot にインストールするには: pilot-xfer /dev/pilot -i program.prc Pilot のバックアップをとるには: pilot-xfer /dev/pilot -b backup-directory これによって、Pilot の中にあるすべてのデータベースの内容が backup-directory というディレクトリにコピーされます。 (プログラムも含めて?)もし、そのディレクトリが存在しない場合には 新しく作成されます。 Pilot にデータをリストアするには: pilot-xfer /dev/pilot -r backup-directory 一般的にこれが必要になるのは、ハードリセットをおこなった時か、 電池が完全に切れてしまったときなどでしょう。 Pilot 上のプログラムを表示するには: pilot-xfer /dev/pilot -l 3.1.2.2. install-memo Linux上のファイルを Pilotのメモとしてダウンロードします。 メモを特定のプロジェクトカテゴリー(すでに作成済の)としてダウンロード するには: install-memo /dev/pilot -c project project.memo メモの最初の行には、ファイル名が挿入され、Pilot上のメモプログラムの ディレクトリ情報(一覧)には、これが表示されます。 3.1.2.3. memos このプログラムは Pilot の中のそれぞれのメモを引っ張り出して、標準的な mailbox フォーマットで表示します。 memo を見るためには: memos /dev/pilot とします。 3.1.2.4. pilot-addresses Pilot-addresses は、Pilot のアドレスデータベースをやりとりするための ものです。 Pilot から、Linux ファイルに内容を書き出すには: pilot-addresses /dev/pilot -w storage.file (訳注: こっちだけ試してみました。日本語を含む address もちゃんと 吸い上げることができます。ただし、Pilot + J-OS の日本語コードは シフトJIS(MS漢字コード)ですので、Linux 上で読むためには nkf -e などの コマンドで、 EUC に変換する必要があります。) Linux ファイルから Pilot に内容を転送するためには: pilot-addresses /dev/pilot -r storage.file (訳注: read-ical ってのもあります。で、これは Pilot の datebook と todo を ical フォーマットで吸い上げてくれるもので、ical は、ToDo と、 DateBook を X11 上で表示できるアプリケーションです。見栄えもかなり良いです。 しかし、残念ながら ical では日本語が通らないようです。 今回初めて ical をインストールしてみたのですが、とっても使えそうな アプリケーションなだけに無念です。 ...と思ったのですが、なんとかなりました。 まず、ical の日本語表示に関しては、ical-2.2 と、日本語化された tcl/tk である、 tcl7.6jp/tk4.2jp の組合せで日本語が表示可能になりました。 (もちろん、ical-2.2 の再コンパイルが必要です。) 問題は read-ical 側で、シフトJISを通すための簡単なパッチが必要です。 すごくいいかげんな対処ですが、とりあえず訳者のところでは動作してます。 (ほんとにこれでいいのかなあ...とても不安。) この文書の最後に pilot-link0.8.9用のパッチを付加しますが、他にまじめに パッチした方がいらしたら、ぜひ御連絡ください。 ちなみに、オリジナルの ical のリリースURL は: http://www.research.digital.com/SRC/personal/Sanjay_Ghemawat/ical/home.html です。 現在は Pilot -> Linux という片方向だけですが、かなり幸せです。 さらに write-ical ができればいいなあ...) 3.2. MakeDoc Pilot 組み込みの memo プログラムの一つの欠点は、大きなドキュメント を扱うことができない、という点です。これを解決するために、Rick Bram は Doc を開発しました。Doc は Pilot で 動作するドキュメントリーダーです。 (http://www.concentric.net/~rbram/doc.shtml を参照) ドキュメントを Doc が扱える形式に変換するためには、MakeDoc を使います。 MakeDoc は Pat Beirne が開発しました。 3.2.1. MakeDoc をインストールする。 MakeDoc は以下の URL からダウンロードできます: http://www.concentric.net/~rbram/makedoc7.cpp これを、お手持ちの C++ コンパイラでコンパイルし、サーチパス上の どこかのディレクトリに、makedoc としてインストールしてください。 makedoc (version 0.7a) には少々バグがあるようで、ユーザーに表示される 最後の文字として、改行(newline)を出力しないようです。 まあ、多少不愉快ではありますが、できあがるドキュメントファイルの大勢に 影響はありません。 新しいバージョンもあるようですが、これには Java が必要です。 Pat Beirne の MakeDoc ウェブページを参照してください: http://cpu563.adsl.sympatico.ca/MakeDocJ.htm 3.2.2. MakeDoc を使う。 MakeDoc は次のように使います: makedoc data.txt data.prc "Data to display with Doc" これによって、data.prc という Pilot にダウンロード可能なファイルが 生成されます。(ダウンロードには pilot-xfer を使います。) "Data to display with Doc" の所には、Doc のドキュメントディレクトリ (一覧)で表示させたい文字列を指定します。 MakeDoc のコマンドラインの文法は以下の通りです: makedoc [-n] [-b] または makedoc -d [-b] 変換したい元テキストファイル 生成するファイル名 ('.prc' という拡張子を後ろにつけてください。) Doc または Jdoc のドキュメントディレクトリ(一覧)に表示させたい 文字列。(訳注: 空白を含む場合には ''や、"" で囲ってください。) できあがった .prc ファイルをデコードしたり、圧縮を制御するための オプションもあります。 3.3. PilotManager PilotManager は、複数のデータベースを一度のホットシンクで同期させる ことのできる統括的なアプリケーションです。 私自身は、この Pilot-HOWTO を書いている時点ではまだ PilotManagerの 構築/インストールに成功していません。 いくつか助けになりそうなリンクを: * PilotManager パッケージのURL: http://playground.sun.com/~bharat/pilotmgr.html * パッチ: ftp://ftp.orbits.com/pub/Pilot/pilotmgr,v1.009-BETA-3.patch このパッチは PilotManager version 1.009 beta 3 を pilot-link version 0.8.0 と共に使う場合のパッチです。PilotManager のソースをゲットして、 以下のコマンドでパッチをあてます。 tar -xvzf pilotmgr,v1.009-BETA-3.dev.tar.gz cd pilotmgr,v1.009-BETA-3 patch -p1 < ../pilotmgr,v1.009-BETA-3.patch 私自身はもう少しでこのソフトウエアをインストールできると思うので、 その時にはまたこのドキュメントの新しいバージョンで、それについて ふれたいと思います。 (訳注: 訳者も PilotManager に関して少しだけのたうち回ってみましたが、 PilotManager は、どうも XOpenの CDE (Common Development Environment) に含まれる Calendar プログラムとインターフェースをとるような構造で 作成されているようです。で、これらが再配布できないパッケージなので、 CDE をすでに持っている方以外は(少なくともカレンダー機能は)使えない のではないかと思います。PilotManagerの、その他の機能に関しては使用可能 かもしれませんが、未確認です。うまく使う事のできた方、是非情報をお寄せ ください。 また、Data::Dumper のインストールには、perl 5.004 以降が必要なようです。 うまく PilotManager を使う方法をご存知の方がいらっしゃいましたら、 是非御連絡ください。 Linuxに関しては、恐らく、Caldera 社の販売している CDE を購入すればi 利用可能となるのではないかと思っていますが、手元にないので試して いません。) 4. Pilot用のソフトウエアを開発するためのツールについて。 4.1. prc-tools prc-tools パッケージは、FSF GNU ユーティリティから派生した開発環境 一揃いです。コンパイラ、デバッガといくつかの特別なツールから構成されて います。(訳注: GUIを構成するためのリソースコンパイラ pilrc も含まれて います。訳者もこの環境で開発しています。素晴らしい環境です。) ドキュメントは少々不足していますが、次の Pilot Software Development ウェブページが補ってくれるかもしれません: http://www.massena.com/darrin/pilot/ 4.1.1. prc-tools をインストールする。 prc-tools の最新版は以下の場所からダウンロードできます: ftp://ryeham.ee.ryerson.ca/pub/PalmOS GNU ツールは次の場所から: ftp://prep.ai.mit.edu/pub/gnu binutils-2.7.tar.gz, gcc-2.7.2.2.tar.gz, gdb-4.16.tar.gz をゲットして ください。ここで示した GNU ツールのバージョン番号は、prc-tools の リリース 0.5.0 に対応したバージョンです。より新しい prc-tools には、 もっと新しいバージョンの GNU ツールが必要かもしれません。 これらのすべての配布パッケージをひとつのディレクトリに置きます。 prc-tools の配布パッケージだけを解凍(Unpack)します。他のパッケージ に関しては、prc-tools の Makefile が面倒をみてくれますから。 デフォールトでは prc-tools は /usr/loccal/gnu にインストールされる ようになっています。もし、その他の場所にインストールしたい場合には Makefile の中の、INSTALLDIR の値を変更してください。 コンパイルの手順は: tar -xvzf prc-tools.0.5.0.tar.gz cd prc-tools-0.5.0 (必要なら Makefile をエディットする。) make doeverything です。 4.1.2. prc-tools を使う。 prc-tools の一般的な使い方を学ぶには、example ディレクトリの下のファイル が役にたつでしょう。特に Makefile。PilRC のドキュメントは、prc-tools バージョン 0.5.0 に含まれている、 pilrc1.5/doc/pilrc.htm にあります。 (訳注: pilrc は現在 v2.0 となり、圧縮ビットマップのサポートをはじめとして、 めざましい進歩をとげております。ぜひ最新版を使うことをお勧めします。) PilRC のホームページは: http://www.scumby.com/scumbysoft/pilot/pilrc/ です。 E. 関係する人々 Kenneth Albanowski は、pilot-link 関連のツールを管理しています。 Donnie Barnes は、pilot-link 関連のツールを Red Hat RPM ファイルにパッケージして くれています。 Rick Bram は、Doc の作者です。 Matthew Cravit は、pilot-unix メイリングリストの管理者(owner)です。 Jeff Dionne は、pilot-link 関連のツールの原作者です。UNIX PalmOS/Pilot 開発 プロジェクトを管理しています。 Mark W. Eichin は、pilot-link 関連のソフトウエアを Debian Linux に移植しました。 David H. Silber は、このドキュメントの著者です。 Chris Stevens は、pilot-unix メイリングリストのアーカイブを管理しています。 X. 訳者の勝手な付録 pilot-link0.8.9 の read-ical.c で日本語を通すためのいいかげんなパッチ 以下の内容を 'diffs' というファイルにセーブして、pilot-link0.8.9 の ディレクトリで (csh または tcsh から) patch = 0x81 && (c) <= 0x9f) || ((c) >= 0xe0)) + + char * tclquote(char * in) { static char * buffer = 0; char * out; ! unsigned char * pos; int len; ! int inkanji = 0; ! ! #if 0 /* Skip leading bullet (and any whitespace after) */ if (in[0] == '\x95') { ++in; *************** *** 29,60 **** ++in; } } ! len = 3; ! pos = in; ! while(*pos) { ! if((*pos == '\\') || (*pos == '"') || (*pos == '[') || (*pos == '{') || (*pos == '$')) ! len++; ! len++; ! pos++; ! } ! if (buffer) ! free(buffer); ! buffer = (char*)malloc(len); ! out = buffer; ! ! pos = in; ! *out++ = '"'; ! while(*pos) { ! if((*pos == '\\') || (*pos == '"') || (*pos == '[') || (*pos == '{') || (*pos == '$')) ! *out++ = '\\'; ! *out++=*pos++; ! } ! *out++ = '"'; ! *out++ = '\0'; ! return buffer; } static void Usage(char *progname) --- 35,78 ---- ++in; } } + #endif ! len = 3; ! pos = in; ! while(*pos) { ! if (!inkanji && ((*pos == '\\') || (*pos == '"') || (*pos == '[') ! || (*pos == '{') || (*pos == '$'))) ! len++; ! if (inkanji) ! inkanji = 0; ! else if (isSjis1stByte(*pos)) ! inkanji = 1; ! len++; ! pos++; ! } ! if (buffer) ! free(buffer); ! buffer = (char*)malloc(len); ! out = buffer; ! ! pos = in; ! *out++ = '"'; ! inkanji = 0; ! while(*pos) { ! if (!inkanji && ((*pos == '\\') || (*pos == '"') || (*pos == '[') ! || (*pos == '{') || (*pos == '$'))) ! *out++ = '\\'; ! if (inkanji) ! inkanji = 0; ! else if (isSjis1stByte(*pos)) ! inkanji = 1; ! *out++ = *pos++; ! } ! *out++ = '"'; ! *out++ = '\0'; ! return buffer; } static void Usage(char *progname)