2006/06/25(日)make uninstall

installが出来たので,uninstallを書いていたのだが,pathの指定を忘れて,プラグイン毎に翻訳したファイルがすべて消えてしまった.まあ,大体のファイルは大学サーバに残っているのでいいのだが,ちょっとショックだ.makeのオプションである -n*1 の重要性を改めて知った.

*1 : 実行するコマンドの表示だけを行い、実際の実行を行わない。

2006/06/25(日)プラグイン::ロード順

プラグインは,ファイル名を辞書式にソートした順でロードされます.

そのため,アーカイブの展開プラグインや,画像のサムネイルを作成するプラグインではファイル名の指定が重要になります.

例えば,汎用サムネイル作成プラグインは,すべての形式に対して有効であるため,先にロードされるファイル名であると,その後ロードされたサムネイル作成プラグインが無効となってしまいます.

2006/06/24(土)プラグイン::サムネイル作成

サムネイル作成プラグインは,プラグイン汎用関数の他,IsAccept関数MakeThumbnail関数ImageSize関数を実装しなければならない.

  • int IsAccept(const char *path, const void *header)
    pathで指定されたファイルを処理できるか返す関数.
    処理できる場合は,0以外の値 を返し,処理できない場合は,0 を返すこと.
    headerには,pathで指定されるファイルの先頭 128byte が入っている.
    ただし,128byteに満たないファイルの場合,余剰部分に入っているデータは未定義である.
  • size MakeThumbnail(const char *in, const char *out, int width, int height, int reserved)
    inで指定されたファイルのサムネイルを作成し,outで指定されるファイルに保存する関数.
    サムネイルのサイズは,幅width pixel,高さheight pixel以内で作成すること.
    返値は,作成したサムネイルのサイズをsize型のオブジェクトで返すこと.
    サムネイルの作成に失敗した場合,size.x = size.y = 1sizeオブジェクトを返すこと.
  • size ImageSize(const char *img, const void *header)
    imgで指定されたファイルの画像のサイズを返す関数.
    headerには,pathで指定されるファイルの先頭 128byte が入っている.
    ただし,128byteに満たないファイルの場合,余剰部分に入っているデータは未定義である.
    返値は,サムネイルのサイズをsize型のオブジェクトで返すこと.
    画像サイズが不明である場合,size.x = size.y = 1sizeオブジェクトを返すこと.

sizeクラスの定義は以下の通りである.

class size
{
public:
	int x;
	int y;
	size(int nx = -1, int ny = -1)
		{ x = nx; y = ny; };
	~size(){};
};

後々,size MakeThumbnailFD(const char *in, int out, int width, int height, int reserved)
関数との選択式にする予定.
こちらの関数は,outで指定されるファイルディスクリプタにサムネイルを出力する.

2006/06/24(土)アーカイブ

展開できるようになりました.

現在用意してあるアーカイブ展開プラグインは,zziplibを利用したzipアーカイブの展開プラグインのみ.以前は,unziplhatarコマンドを利用した3つのプラグインを用意していたけど,今回は用意しないつもり.

2006/06/18(日)ファイルのアップロード

ファイルのアップロードプラグインを更新.アップロード先のフォルダの指定が出来るようになりました.あと,最近アップロードしたファイルへの登録もするようにしました.

更新ファイル\[http://bigslope.dyndns.org/album3.1/common.h:common.h]\[http://bigslope.dyndns.org/album3.1/common.cpp:common.cpp]\[http://bigslope.dyndns.org/album3.1/inifile.h:inifile.h]\[http://bigslope.dyndns.org/album3.1/plugin/upload.cpp:upload.cpp]

多分これだけだと思うけど,不安なので,album3.1.tar.gz\こっちには,全部入ってる...はず

ファイルのアップロード upload.cpp

アップロード先のフォルダの優先順位は,以下のとおりです.

  1. 環境変数指定されたフォルダ env["folder"]
  2. フォームで指定されたフォルダ form["folder"]
  3. 現在のパスから決まるフォルダ env["gallery"]

ユーザ名は自動で付加されるので,ユーザ毎のホームディレクトリからの相対パスを指定してください.

2006/06/18(日)文字列クラス

sstring.h{message}に+=するのがいい加減に面倒になったので,<<を追加.inlineで追加してあるので,ヘッダファイルだけ置き換えればOkです...多分...

これで,

CSString str, str2 = "def";
str  = "abc";
str += str2;
str += "ghi";

みたいなソースが,

CSString str, str2 = "def";
str << "abc" << str2 << "ghi";

のように書くことができます.

念のため.\[http://bigslope.dyndns.org/album3.1/sstring.cpp:sstring.cpp]

2006/06/15(木)プラグインとかの修正

アップロードプラグイン
ファイルのアップロードに成功した場合,アップロードしたファイルのハッシュを環境変数env["upload"]に保存するようにしました.

フォルダ作成プラグイン
フォルダ作成時,dir.txtが無い場合,作成するように修正しました.

ハッシュテーブルクラス ヘッダ\[http://bigslope.dyndns.org/album3.1s/hashtable.cpp:ハッシュテーブルクラス ソース]
IsExistメソッドの仕様を変更しました.
int CHashTable::IsExist(const char *name, const char *value, int flag)\ハッシュテーブル中のnameエントリーに,valueがあるかテストします.
flagが非0の場合,大文字,小文字区別します.0の場合(省略時)は区別されません.

おまけ{int CHashTable::IsExist(const char *name, const char *value, int (*func)(const char *, const char *) = strcasecmp))}\ハッシュテーブル中のnameエントリーに,valueがあるかテストします.
3番目の引数で,比較関数を指定することができます.