home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 January / VPR0101A.BIN / OLS / LZR100 / lzr100.lzh / Source / SPIMain.cpp < prev    next >
C/C++ Source or Header  |  2000-10-07  |  6KB  |  198 lines

  1. /*--------------------------------------------------------------------------------------*/
  2. /*    Susie Plug-in (00IN-type) 汎用実装ファイル                                            */
  3. /*    for VisualStudio6.0 only                                                            */
  4. /*    ※このファイルは変更する必要ありません。全てのOOIN系プラグインで共通です。            */
  5. /*    Copyright (C) 2000 DJ☆Uchi [H.Uchida]                                                */
  6. /*--------------------------------------------------------------------------------------*/
  7. #include "SPIMain.h"
  8.  
  9. static HINSTANCE hInst;
  10.  
  11.  
  12. /*--------------------------------------------------------------------------------------*/
  13. /*    ロード後に、このDLLへのハンドルを取得する。                                            */
  14. /*--------------------------------------------------------------------------------------*/
  15. BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD fdwReason, LPVOID lpReserved)
  16. {
  17.     if (fdwReason == DLL_PROCESS_ATTACH) hInst = hModule;
  18.     return TRUE;
  19. }
  20.  
  21.  
  22. /*--------------------------------------------------------------------------------------*/
  23. /*    GetPluginInfo()                                                                        */
  24. /*    リソース文字列よりプラグイン情報を取得する。                                        */
  25. /*--------------------------------------------------------------------------------------*/
  26. int _export PASCAL GetPluginInfo(int infono, LPSTR buf, int buflen)
  27. {
  28.     if (infono >= 0) {
  29.         return LoadString(hInst, infono, buf, buflen);
  30.     } else {
  31.         return 0;
  32.     }
  33. }
  34.  
  35.  
  36. /*--------------------------------------------------------------------------------------*/
  37. /*    IsSupported()                                                                        */
  38. /*    ヘッダ情報からファイル形式を調べる。                                                */
  39. /*    ※ファイル-メモリ変換、入出力部のみ実装。本体は IsSupportedEx()                    */
  40. /*--------------------------------------------------------------------------------------*/
  41. int _export PASCAL IsSupported (LPSTR filename, DWORD dw)
  42. {
  43.     char *data;
  44.     char buff[HEADBUF_SIZE];
  45.  
  46.     if ((dw & 0xFFFF0000) == 0) {
  47.         DWORD ReadBytes;
  48.         memset(buff, 0, HEADBUF_SIZE);
  49.         if (!ReadFile((HANDLE)dw, buff, HEADBUF_SIZE, &ReadBytes, NULL)) return 0;
  50.         data = buff;
  51.     } else {
  52.         data = (char *)dw;
  53.     }
  54.  
  55.     if (IsSupportedEx(filename, data)) {
  56.         return 1;
  57.     } else {
  58.         return 0;
  59.     }
  60. }
  61.  
  62.  
  63. /*--------------------------------------------------------------------------------------*/
  64. /*    GetPictureInfo()                                                                    */
  65. /*    ファイルヘッダから画像情報を取得する。                                                */
  66. /*    ※ファイル-メモリ変換、入出力部のみ実装。本体は GetPictureInfoEx()                    */
  67. /*--------------------------------------------------------------------------------------*/
  68. int _export PASCAL GetPictureInfo (LPSTR buf, long len, unsigned int flag, PictureInfo *lpInfo)
  69. {
  70.     int ret = SPI_OTHER_ERROR;
  71.     char *data;
  72.     char *filename;
  73.     long datasize;
  74.  
  75.     if ((flag & 7) == 0) {
  76.         HANDLE hf;
  77.         DWORD ReadBytes;
  78.         hf = CreateFile(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
  79.         if (hf == INVALID_HANDLE_VALUE) return SPI_FILE_READ_ERROR;
  80.         datasize = GetFileSize(hf, NULL) -len;
  81.         if (datasize < 0) {
  82.             CloseHandle(hf);
  83.             return SPI_NOT_SUPPORT;
  84.         }
  85.         SetFilePointer(hf, len, NULL, FILE_BEGIN);
  86.         data = (char *)LocalAlloc(LMEM_FIXED, datasize);
  87.         if (data == NULL) {
  88.             CloseHandle(hf);
  89.             return SPI_NO_MEMORY;
  90.         }
  91.         if (!ReadFile(hf, data, datasize, &ReadBytes, NULL)) {
  92.         CloseHandle(hf);
  93.             LocalFree(data);
  94.             return SPI_FILE_READ_ERROR;
  95.         }
  96.         CloseHandle(hf);
  97.         filename = buf;
  98.     } else {
  99.         data = (char *)buf;
  100.         datasize = len;
  101.         filename = NULL;
  102.     }
  103.  
  104.     if (!IsSupportedEx(filename, data)) {
  105.         ret = SPI_NOT_SUPPORT;
  106.     } else {
  107.         ret = GetPictureInfoEx(datasize, lpInfo, data);
  108.     }
  109.  
  110.     if ((flag & 7) == 0) LocalFree(data);
  111.  
  112.     return ret;
  113. }
  114.  
  115.  
  116. /*--------------------------------------------------------------------------------------*/
  117. /*    GetPicture()                                                                        */
  118. /*    画像データを読み込み、DIBで返す。                                                    */
  119. /*    ※ファイル-メモリ変換、入出力部のみ実装。本体は GetPictureEx()                        */
  120. /*--------------------------------------------------------------------------------------*/
  121. int _export PASCAL GetPicture (LPSTR buf, long len, unsigned int flag,
  122.                                HANDLE *pHBInfo, HANDLE *pHBm, SPI_PROGRESS, long)
  123. {
  124.     int ret = SPI_OTHER_ERROR;
  125.     char *data;
  126.     char *filename;
  127.     long datasize;
  128.  
  129.     if ((flag & 7) == 0) {
  130.         HANDLE hf;
  131.         DWORD ReadBytes;
  132.         hf = CreateFile(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
  133.         if (hf == INVALID_HANDLE_VALUE) return SPI_FILE_READ_ERROR;
  134.         datasize = GetFileSize(hf, NULL) -len;
  135.         if (datasize < 0) {
  136.             CloseHandle(hf);
  137.             return SPI_NOT_SUPPORT;
  138.         }
  139.         SetFilePointer(hf, len, NULL, FILE_BEGIN);
  140.  
  141.         data = (char *)LocalAlloc(LMEM_FIXED, datasize);
  142.         if (data == NULL) {
  143.             CloseHandle(hf);
  144.             return SPI_NO_MEMORY;
  145.         }
  146.         if (!ReadFile(hf, data, datasize, &ReadBytes, NULL)) {
  147.             CloseHandle(hf);
  148.             LocalFree(data);
  149.             return SPI_FILE_READ_ERROR;
  150.         }
  151.         CloseHandle(hf);
  152.         filename = buf;
  153.     } else {
  154.         data = buf;
  155.         datasize = len;
  156.         filename = NULL;
  157.     }
  158.  
  159.     if (!IsSupportedEx(filename, data)) {
  160.         ret = SPI_NOT_SUPPORT;
  161.     } else {
  162.         ret = GetPictureEx(datasize, pHBInfo, pHBm, NULL, NULL, (BYTE *)data);
  163.     }
  164.  
  165.     if ((flag & 7) == 0) LocalFree(data);
  166.  
  167.     return ret;
  168. }
  169.  
  170.  
  171. /*--------------------------------------------------------------------------------------*/
  172. /*    GetPreview()                                                                        */
  173. /*    プレビュー用のサムネイル画像を生成する。                                            */
  174. /*    ※通常実装しません。                                                                */
  175. /*--------------------------------------------------------------------------------------*/
  176. int _export PASCAL GetPreview (LPSTR buf, long len, unsigned int flag,
  177.                                HANDLE *pHBInfo, HANDLE *pHBm,FARPROC, long)
  178. {
  179.     return SPI_NO_FUNCTION;
  180. }
  181.  
  182. /*--------------------------------------------------------------------------------------*/
  183. /*    ConfigurationDlg()                                                                    */
  184. /*    アバウト&設定ダイアログを表示する。                                                */
  185. /*    ※GetPluginInfo() 用のストリングテーブルをメッセージボックス表示するだけ。            */
  186. /*--------------------------------------------------------------------------------------*/
  187. int _export FAR PASCAL ConfigurationDlg(HWND parent, int fnc)
  188. {
  189.     char buf[256];
  190.     LoadString(hInst, 1, buf, sizeof(buf));
  191.     if (fnc == SUSIE_CONFIGDLG_ABOUT || fnc == SUSIE_CONFIGDLG_SETTING) {
  192.         MessageBox(NULL, buf, "About..", MB_OK | MB_TASKMODAL | MB_ICONINFORMATION);
  193.         return SPI_ALL_RIGHT;
  194.     } else {
  195.         return SPI_NO_FUNCTION;
  196.     }
  197. }
  198.