2007-02-01から1ヶ月間の記事一覧

iso_file_sink

なんとかISO 9660 Level-1の出力まで実装できました。 iso_file_sink_impl.hpp iso_directory_writer.hpp 基本的には昨日のコードとiso9660_file_sinkのコードを混ぜたものになっています。 ディレクトリの名前が8.3形式に変更された場合に、その配下のファ…

ISO 9660のファイル名変換

一遍に実装しようとして混乱してきたので、とりあえずファイル名の置換部分だけ書いてみました。 作業記録として、コードを貼っときます。

続 ISOファイル出力の構想

ISOファイル出力でファイルIDの振り直しに梃子摺っています。 ISO 9660の場合、使用できない文字は振り直し Jolietの場合、文字に制限がないので振り直しはないが、UCS-2に変換する必要あり Rock Ridgeの場合、上記に加えて深いディレクトリ階層の移動が加わ…

ISOファイル出力の構想

ISO 9660の出力で難しいのはパステーブルとディレクトリーレコードの管理です。 以前実装したiso9660_file_sinkでは、エントリを追加するたびにパステーブル内の順序を調整していました。 Rock Ridgeの対応を考えた場合、ディレクトリのリロケートをいつ行う…

英語の聞き流し始めました

同じ「ながら作業」なら音楽より英語を聞こうと思い立って、英語のインターネットラジオを聴き始めました。 とりあえず適当にググって見つけたNPRを聞いています。 http://www.npr.org/ 24時間やってるらしいので、日本時間でも問題なしです。 何言ってるか…

続々 拡張可能なヘッダ

ここ数日悩みましたが、 Rock Ridgeのパースの有無でディレクトリトラバースが変わってしまうこと Sinkでは複数のボリューム記述子を出力するなど、予めフォーマットが固定されていないと実装が困難であること などから、2/20の実装のまま行くことにしました…

続 拡張可能なヘッダ

う〜ん、なかなかうまくまとまりません。 どこまでカスタマイズ可能にするか、実行時の多相化とコンパイル時の多相化のどちらを使うべきか悩みどころが多いです。 あらゆる箇所をカスタマイズさせるのは無理があるので、2/20の実装と2/21の目標の折衷案とし…

parse_system_use_field

昨日の案でSystem Use Fieldのパーサー部分を実装してみました。 <hamigaki/archivers/rrip/parser_map.hpp> <hamigaki/archivers/susp/parser.hpp> // mpl::for_eachから呼ぶためのラッパー template<class State, class Header> class call_parser { public: call_parser(State& state, const char* signature, bool& result, Header& head, const char* da…</class></hamigaki/archivers/susp/parser.hpp></hamigaki/archivers/rrip/parser_map.hpp>

拡張可能なヘッダ

う〜ん。 iso_file_sourceのコードですが、どこを弄ったらよいやら分からなくなってきたので明確な目標を設定したいと思います。 SUSP(System Use Sharing Protocol)に基づいたRock Ridge以外の(あるいはRock Ridgeを拡張した)プロトコルを簡単に追加できる…

iso_directory_parser

おおよそ機能の方針で実装できました。 iso_directory_parser.hpp iso9660_directory_parser.hpp joliet_directory_parser.hpp rock_ridge_directory_parser.hpp iso_directory_parserのインタフェースは少し変わりました。 class iso_directory_parser : pr…

Rock Ridge 再検討

Rock Ridgeのコードを眺めていたところ、ディレクトリのトラバースに関する処理もディレクトリレコードの修正だけで対応できることに気が付きました。 "CL" System Use Entry (子ディレクトリの位置) "PL" System Use Entry (親ディレクトリの位置) →そのデ…

続 VC8のfilebufとsetlocale

C++

http://d.hatena.ne.jp/y-hamigaki/20070211 の補足です。 この問題は、出力先がコンソールの場合のみ発生します。 なので、ファイルにリダイレクトしたり、 hoge.exe > log.txt パイプで他のプログラムに流す場合 hoge.exe | more は影響を受けません。 試…

volume_desc::rrip

volume_descriptorをvolume_info(各ボリューム記述子の共通項目)とvolume_desc(それ以外)に分離して、volume_descにはRock Ridgeのバージョンを追加しました。 iso/headers.hppの差分 ついでにJolietの場合はボリューム記述子内の文字列をナロー文字に変換す…

joliet_reader

rock_ridge_readerと同じインタフェースでjoliet_readerを作成し、ISO 9660/Joliet/Rock Ridge対応のiso_file_sourceに組み込みました。 joliet_reader.hpp iso_file_source_impl.hpp ようやく3つのフォーマットに対応できたわけですが、一つのボリューム記…

rock_ridge_reader

Rock Ridge用の「ディレクトリのトラバースと親パスの管理」を実装して、とりあえずrock_ridge_file_sourceの実装を置き換えてみました。 rock_ridge_reader.hpp rock_ridge_file_source_impl.hpp rock_ridge_file_source_implはボリューム記述子を選択した…

続 Rock Ridgeを含めた共通化

だいぶ考えがまとまってきました。 Rock Ridgeでは実際のファイル名とファイルIDが異なるため、ディレクトリレコードのファイルIDに基づく二分探索ができません。 このため、rock_ridge_file_sourceはディレクトリのトラバースに二分探索を使わないで済むよ…

Windows DreamScene Preview

今日のWindows Updateでようやく「Windows DreamScene」が登場です。 まだPreview扱いで英語版のみの提供となるため、予めUltimate Extraで「英語パック」をインストールしておく必要があるようです。 DreamSceneをインストールすると、壁紙の設定で動画ファ…

Rock Ridgeを含めた共通化

昨日はrock_ridge_file_sourceをとりあえず作ったわけですが、ほとんどiso9660_file_sourceと同じ処理ですから、うまく共通化できないものかと考えています。 Rock Ridgeの深いディレクトリ階層を実装した感触からすると、 ボリューム記述子のパース(共通) …

Deep Directory Hierarchies

rock_ridge_file_sourceを作成して、深いディレクトリ階層もサポートしました。 rock_ridge_file_source_impl.hpp とりあえず動くことを第一に考えて書いたので、前のコードからコピペしまくりです。 ISO 9660ではディレクトリ階層は(ルートを1と数えて)8階…

仕切り直し

名前空間iso9660にISO 9660以外のものがたくさん追加されてしまったため、前言撤回になりますが、名前空間をisoに変更しました。 ちなみにViewCVSはディレクトリのリビジョンまで面倒見てくれないので、古いディレクトリを見ると404になります。日記内のリン…

VC8のfilebufとsetlocale

C++

今日はライブラリの作業を進める気分ではなかったので、前々から気になっていた、VC8のstd::filebufがstd::setlocale()を呼ばないと動かない問題と、std::setlocale()を呼ぶと標準出力/エラー出力がおかしくなる問題について調べてみました。 原因に関しては…

続 cygwin1.dllと格闘中

今日一日中Cygwinを調べてましたが、直りませんでした。 そもそも動かなかったテスト ds_capture_test direct_sound_test pcm_source_test のうち、/dev/dspが関係あるのはpcm_source_testだけなので、/dev/dspの問題というより、Vistaのサウンド機能とCygwi…

cygwin1.dllと格闘中

CygwinでHamigaki.Audioのテストが暴走する問題を調査中です。 サンプルのpcm_record等は正常に動作しますし、pcm_source_testの2回目の読み込みでとまっているようだったので、次のコードを試したところ、再現しました。 #include <fcntl.h> #include <unistd.h> void capture</unistd.h></fcntl.h>…

Vista上でのテスト

Vistaに移行して初の全体テストを行いました。 http://hamigaki.sourceforge.jp/status/ かなりボロボロです。 Hamigaki.ArchiversのテストがCodeWarriorとMinGWでFailになっているのは、#ifdefのミスなのですぐ直します。 MinGWでテスト結果が取得できずにM…

MSYSを管理者として実行する

Windows Vistaでショートカットを「管理者として実行する」で起動した場合、ショートカットで指定した作業フォルダの設定が無視されるようです。 この仕様のため、MSYSを管理者として起動すると、実行ファイルが見つからずにエラーになります。 msys.batの先…

Singer Song Writer Lite 5.0

Singer Song Writer Lite 5.0のVista対応アップデータが公開されていたので入れてみました。 ソフトウェアMIDIが軒並みアウトの現状で、VSC3.2に依存した機能がどうなるのか気になっていたのですが、INTERNETの選んだ解決策は「VSCのエンジンをソフトに組み…

Game Explorerに未対応ゲームを勝手に登録する

Windows Vistaにはスタートメニューに「ゲーム」という項目があり、Vista対応ゲームをインストールするとココにアイコンが追加されるようになっています。 Vista未対応のゲームでも、実行ファイルかショートカットをドラッグ&ドロップすることで追加するこ…

create_shell_link

今日はWindows VistaのGame Explorerを弄って遊んでました。 ショートカットファイルを作成する必要があったので、ついでにHamigaki.Filesystemにショートカット作成関数create_shell_link()を追加しました。 shell_link.cpp インタフェースは、 void create…

「Windowsの基本操作」が基本過ぎる件

「ウェルカム センター」の「Windowsの基本操作」でヘルプが見れるわけですが、この説明が妙に詳しいです。 コンピュータとは コンピュータは、一連の命令、つまりプログラムに基づいて処理や計算を実行する機械です。1940 年代に開発された最初の電子計算機…

一週間使った感想

Vistaをインストールして一週間が経ちました。 一週間使ってみて気が付いたことなどを書いておきます。 まず、アップグレード前のスペックを示しておきましょう。 3年前のメーカー製PCにしてはマシなスペックです。 項目 仕様 OS Windows XP Media Center Ed…