SourceForge.jp

dkutilSusieManager.h

説明を見る。
00001 #ifndef _dkutil_SusieManager__h__
00002 #define _dkutil_SusieManager__h__
00003 
00004 
00005 #ifdef USE_DKINGYO_INCLUDE_SETTING_LIKE_BOOST
00006 #include <dkutil/dkutilDLLmanager.h>
00007 #else
00008 #include "../dkutilDLLManager.h"
00009 #endif
00010 
00011 namespace dkutil{
00012     
00013 
00014 class SusieManager{
00015 public:
00017     struct PictureInfo
00018     {
00019         long left,top;          /* 画像を展開する位置 */
00020         long width;             /* 画像の幅(pixel) */
00021         long height;            /* 画像の高さ(pixel) */
00022         WORD x_density;         /* 画素の水平方向密度 */
00023         WORD y_density;         /* 画素の垂直方向密度 */
00024         short colorDepth;       /* 画素当たりのbit数 */
00025         HLOCAL hInfo;           /* 画像内のテキスト情報[呼び出し側が解放] */
00026     };
00028     struct fileInfo
00029     {
00030         unsigned char method[8];    /* 圧縮法の種類 */
00031         unsigned long position;     /* ファイル上での位置 */
00032         unsigned long compsize;     /* 圧縮されたサイズ */
00033         unsigned long filesize;     /* 元のファイルサイズ */
00034         time_t timestamp;           /* ファイルの更新日時 */
00035         char path[200];             /* 相対パス */
00036         char filename[200];         /* ファイルネーム */
00037         unsigned long crc;          /* CRC */
00038     } ;
00039 
00041     enum SusieConfigDialogParam{
00042         SUSIE_CONFIGDLG_ABOUT= 0,
00043         SUSIE_CONFIGDLG_SETTING,
00044         SUSIE_CONFIGDLG_RESERVED
00045     };
00046 
00047     // Common
00048     typedef int (PASCAL *GetPluginInfoType)(int, LPSTR ,int );
00049     typedef int (PASCAL *IsSupportedType) (LPSTR,DWORD);
00050 
00051 
00052     // '00IN'の関数 
00053     typedef int (PASCAL *GetPictureInfoType) (LPSTR ,long ,unsigned int , PictureInfo *);
00054     typedef int (PASCAL *GetPictureType) (LPSTR ,long ,unsigned int , HANDLE *,HANDLE *,
00055                                     FARPROC ,long );
00056     typedef int (PASCAL *GetPreviewType) (LPSTR ,long ,unsigned int , HANDLE *,HANDLE *,
00057                                     FARPROC ,long );
00058 
00059     // '00AM'の関数 
00060     typedef int  (PASCAL *GetArchiveInfoType) (LPSTR buf, long len, unsigned int flag, HLOCAL *lphInf);
00061     typedef int  (PASCAL *GetFileInfoType) (LPSTR buf,long len, LPSTR filename, unsigned int flag, fileInfo *lpInfo);
00062     typedef int  (PASCAL *GetFileType) (LPSTR src,long len, LPSTR dest,unsigned int flag, FARPROC prgressCallback,long lData);
00063 
00064     typedef int  (PASCAL *ConfigurationDlgType)(HWND parent,int fnc);
00065 
00067     bool isImportFilter(){
00068         check_instance();
00069         return (mPluginInfo[2] == 'I' || mPluginInfo[2] == 'i');
00070     }
00072     bool isExportFilter(){
00073         check_instance();
00074         return (mPluginInfo[2] == 'X' || mPluginInfo[2] == 'x');
00075     }
00077     bool isArchiveExtractor(){
00078         check_instance();
00079         return (mPluginInfo[2] == 'A' || mPluginInfo[2] == 'a');
00080     }
00082     bool isUnknownFilter(){
00083         return (!isImportFilter() && !isExportFilter() && !isArchiveExtractor());
00084     }
00085     bool isNormal(){
00086         check_instance();
00087         return (mPluginInfo[3] == 'N' || mPluginInfo[3] == 'n');
00088     }
00089     bool isMultiPicture(){
00090         check_instance();
00091         return (mPluginInfo[3] == 'M' || mPluginInfo[3] == 'm');
00092     }
00094     bool isIN(){    return (isNormal() && isImportFilter());}
00096     bool isAM(){    return (isMultiPicture() && isArchiveExtractor());}
00098     short GetVersionForceShort(){
00099         check_instance();
00100         short *tmp = (short *)&mPluginInfo[0];
00101         return (*tmp);
00102     }
00104     short GetVersion(){
00105         check_instance();
00106         char buff[3]="";
00107         strncpy(buff,mPluginInfo,2);
00108         return atoi(buff);
00109     }
00115     bool GetVersionStr(char *buff,size_t size){
00116         check_instance();
00117         if(size < 2) return false;
00118         buff[0] = mPluginInfo[0];
00119         buff[1] = mPluginInfo[1];
00120         return true;
00121     }
00122 
00123 protected:
00124 #   define DKUTIL_CAST_SUSIE(v,f) v exe = (v)mDLL.find(f);\
00125     if(exe==NULL)return -1
00126 
00127     // Common Function 
00128     int  GetPluginInfo (int infono, LPSTR buf,int buflen){
00129         check_instance();
00130         DKUTIL_CAST_SUSIE(GetPluginInfoType,"GetPluginInfo");
00131         return exe(infono,buf,buflen);
00132     }
00133 
00134     int  IsSupported (LPSTR filename,DWORD dw){
00135         check_instance();
00136         DKUTIL_CAST_SUSIE(IsSupportedType,"IsSupported");
00137         return exe(filename,dw);
00138     }
00139 
00140 
00141     //'00IN'の関数 
00142     int  GetPictureInfo (LPSTR buf,long len,unsigned int flag, PictureInfo *lpInfo){
00143         check_instance();
00144         DKUTIL_CAST_SUSIE(GetPictureInfoType,"GetPictureInfo");
00145         return exe(buf,len,flag,lpInfo);
00146     }
00147     /*
00148     面倒だから後は各自で実装!(爆
00149     int  GetPicture (LPSTR buf,long len,unsigned int flag, HANDLE *pHBInfo,HANDLE *pHBm,
00150                                     FARPROC lpPrgressCallback,long lData);
00151     int  GetPreview (LPSTR buf,long len,unsigned int flag, HANDLE *pHBInfo,HANDLE *pHBm,
00152                                     FARPROC lpPrgressCallback,long lData);
00153 
00154     // '00AM'の関数 
00155     int  GetArchiveInfo (LPSTR buf, long len, unsigned int flag, HLOCAL *lphInf);
00156     int  GetFileInfo (LPSTR buf,long len, LPSTR filename, unsigned int flag, fileInfo *lpInfo);
00157     int  GetFile (LPSTR src,long len, LPSTR dest,unsigned int flag, FARPROC prgressCallback,long lData);
00158 
00159     int  ConfigurationDlg(HWND parent,int fnc);
00160     */
00161 
00162 protected:
00163 
00164 
00165 private:
00166     static int  PASCAL  DummyCallback__( int , int, long )
00167     {
00168         return( 0 );        // always continue
00169     }
00170 
00171     void check_instance(){
00172         DK_TRUE_ASSERT_OR_THROW(
00173             mDLL.empty(),
00174             std::logic_error("not loaded susie plugin")
00175         );
00176     }
00177     DLLManager mDLL;
00179     char mPluginInfo[4 + 5];
00180     int LoadSusie(){
00181         //load common
00182         
00183         GetPluginInfoType Info =
00184             (GetPluginInfoType ) mDLL.find("GetPluginInfo");
00185         if(Info == NULL ) return edk_FAILED;
00186         NULL_CHAR_ARRAY(mPluginInfo);
00187 
00188         
00189         mDLL.load_function("IsSupported");
00190         mDLL.load_function("ConfigurationDlg");
00191         
00192         //無条件読み込みします。(≦(._.)≧ ペコ
00193         mDLL.load_function("GetPictureInfo");
00194         mDLL.load_function("GetPicture");
00195         mDLL.load_function("GetPreview");
00196         mDLL.load_function("GetArchiveInfo");
00197         mDLL.load_function("GetFileInfo");
00198         mDLL.load_function("GetFile");
00199 
00200         //Plug-in APIバージョン をゲット
00201         Info(0,mPluginInfo,5);
00202         //unknown filter
00203         if(isUnknownFilter()) return edk_FAILED;
00204         /*
00205         //ここらへんのロード条件・・・ カナリ怪しい。
00206         if(isImportFilter())
00207         {
00208             mDLL.load("GetPictureInfo");
00209             mDLL.load("GetPicture");
00210             mDLL.load("GetPreview");
00211         }else if(isExportFilter()){
00212             mDLL.load("GetPictureInfo");
00213             mDLL.load("GetPicture");
00214             mDLL.load("GetPreview");
00215         }else if(isArchiveExtractor()){
00216             mDLL.load("GetArchiveInfo");
00217             mDLL.load("GetFileInfo");
00218             mDLL.load("GetFile");
00219         }
00220         */
00221         return edk_SUCCEEDED;
00222     }
00223 
00224 /*
00225 //関数 説明 
00226 GetPluginInfo Plug-inに関する情報を得る 
00227 IsSupported 展開可能な(対応している)ファイル形式か調べる 
00228 GetPictureInfo 画像ファイルに関する情報を得る 
00229 GetPicture 画像を展開する 
00230 GetPreview プレビュー・カタログ表示用画像縮小展開ルーティン 
00231 ConfigurationDlg Plug-in設定ダイアログ表示 
00232 
00233 
00234 
00235 00AM Plug-in 関数 説明 
00236 GetPluginInfo Plug-inに関する情報を得る 
00237 IsSupported 展開可能な(対応している)ファイル形式か調べる 
00238 GetArchiveInfo アーカイブ内のすべてのファイルの情報を取得する 
00239 GetFileInfo アーカイブ内の指定したファイルの情報を取得する 
00240 GetFile アーカイブ内のファイルを取得する 
00241 ConfigurationDlg Plug-in設定ダイアログ表示 
00242 
00243 */
00244     
00245 
00246 public:
00247     SusieManager(const char *plugin_name=NULL){
00248         NULL_CHAR_ARRAY(mPluginInfo);
00249         if(plugin_name){
00250             reset(plugin_name);
00251         }
00252     }
00253     virtual ~SusieManager(){}
00254 
00255     bool reset(const char *plugin_name){
00256         if(!plugin_name) return false;
00257         //何処にあるか分からないからこれでいいや!!
00258         //if(false==FileExist(plugin_name)) return false;
00259         mDLL.reset(plugin_name);
00260         return DKUTIL_SUCCEEDED(LoadSusie());
00261     }
00262     bool empty(){return mDLL.empty();}
00263 
00264 };
00265 
00266 
00267 
00268 
00269 
00270 }//end of dkutil namespace
00271 
00272 
00273 
00274 
00275 #endif

dkutil 1.02リリース前 d金魚専用マニュアルバージョンに対してSun Dec 28 21:23:08 2003に生成されました。 doxygen 1.3.5