home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
DOS/V Power Report 2001 January
/
VPR0101A.BIN
/
OLS
/
LZR100
/
lzr100.lzh
/
Source
/
SPIMain.cpp
< prev
next >
Wrap
C/C++ Source or Header
|
2000-10-07
|
6KB
|
198 lines
/*--------------------------------------------------------------------------------------*/
/* Susie Plug-in (00IN-type) 汎用実装ファイル */
/* for VisualStudio6.0 only */
/* ※このファイルは変更する必要ありません。全てのOOIN系プラグインで共通です。 */
/* Copyright (C) 2000 DJ☆Uchi [H.Uchida] */
/*--------------------------------------------------------------------------------------*/
#include "SPIMain.h"
static HINSTANCE hInst;
/*--------------------------------------------------------------------------------------*/
/* ロード後に、このDLLへのハンドルを取得する。 */
/*--------------------------------------------------------------------------------------*/
BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD fdwReason, LPVOID lpReserved)
{
if (fdwReason == DLL_PROCESS_ATTACH) hInst = hModule;
return TRUE;
}
/*--------------------------------------------------------------------------------------*/
/* GetPluginInfo() */
/* リソース文字列よりプラグイン情報を取得する。 */
/*--------------------------------------------------------------------------------------*/
int _export PASCAL GetPluginInfo(int infono, LPSTR buf, int buflen)
{
if (infono >= 0) {
return LoadString(hInst, infono, buf, buflen);
} else {
return 0;
}
}
/*--------------------------------------------------------------------------------------*/
/* IsSupported() */
/* ヘッダ情報からファイル形式を調べる。 */
/* ※ファイル-メモリ変換、入出力部のみ実装。本体は IsSupportedEx() */
/*--------------------------------------------------------------------------------------*/
int _export PASCAL IsSupported (LPSTR filename, DWORD dw)
{
char *data;
char buff[HEADBUF_SIZE];
if ((dw & 0xFFFF0000) == 0) {
DWORD ReadBytes;
memset(buff, 0, HEADBUF_SIZE);
if (!ReadFile((HANDLE)dw, buff, HEADBUF_SIZE, &ReadBytes, NULL)) return 0;
data = buff;
} else {
data = (char *)dw;
}
if (IsSupportedEx(filename, data)) {
return 1;
} else {
return 0;
}
}
/*--------------------------------------------------------------------------------------*/
/* GetPictureInfo() */
/* ファイルヘッダから画像情報を取得する。 */
/* ※ファイル-メモリ変換、入出力部のみ実装。本体は GetPictureInfoEx() */
/*--------------------------------------------------------------------------------------*/
int _export PASCAL GetPictureInfo (LPSTR buf, long len, unsigned int flag, PictureInfo *lpInfo)
{
int ret = SPI_OTHER_ERROR;
char *data;
char *filename;
long datasize;
if ((flag & 7) == 0) {
HANDLE hf;
DWORD ReadBytes;
hf = CreateFile(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hf == INVALID_HANDLE_VALUE) return SPI_FILE_READ_ERROR;
datasize = GetFileSize(hf, NULL) -len;
if (datasize < 0) {
CloseHandle(hf);
return SPI_NOT_SUPPORT;
}
SetFilePointer(hf, len, NULL, FILE_BEGIN);
data = (char *)LocalAlloc(LMEM_FIXED, datasize);
if (data == NULL) {
CloseHandle(hf);
return SPI_NO_MEMORY;
}
if (!ReadFile(hf, data, datasize, &ReadBytes, NULL)) {
CloseHandle(hf);
LocalFree(data);
return SPI_FILE_READ_ERROR;
}
CloseHandle(hf);
filename = buf;
} else {
data = (char *)buf;
datasize = len;
filename = NULL;
}
if (!IsSupportedEx(filename, data)) {
ret = SPI_NOT_SUPPORT;
} else {
ret = GetPictureInfoEx(datasize, lpInfo, data);
}
if ((flag & 7) == 0) LocalFree(data);
return ret;
}
/*--------------------------------------------------------------------------------------*/
/* GetPicture() */
/* 画像データを読み込み、DIBで返す。 */
/* ※ファイル-メモリ変換、入出力部のみ実装。本体は GetPictureEx() */
/*--------------------------------------------------------------------------------------*/
int _export PASCAL GetPicture (LPSTR buf, long len, unsigned int flag,
HANDLE *pHBInfo, HANDLE *pHBm, SPI_PROGRESS, long)
{
int ret = SPI_OTHER_ERROR;
char *data;
char *filename;
long datasize;
if ((flag & 7) == 0) {
HANDLE hf;
DWORD ReadBytes;
hf = CreateFile(buf, GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, 0, NULL);
if (hf == INVALID_HANDLE_VALUE) return SPI_FILE_READ_ERROR;
datasize = GetFileSize(hf, NULL) -len;
if (datasize < 0) {
CloseHandle(hf);
return SPI_NOT_SUPPORT;
}
SetFilePointer(hf, len, NULL, FILE_BEGIN);
data = (char *)LocalAlloc(LMEM_FIXED, datasize);
if (data == NULL) {
CloseHandle(hf);
return SPI_NO_MEMORY;
}
if (!ReadFile(hf, data, datasize, &ReadBytes, NULL)) {
CloseHandle(hf);
LocalFree(data);
return SPI_FILE_READ_ERROR;
}
CloseHandle(hf);
filename = buf;
} else {
data = buf;
datasize = len;
filename = NULL;
}
if (!IsSupportedEx(filename, data)) {
ret = SPI_NOT_SUPPORT;
} else {
ret = GetPictureEx(datasize, pHBInfo, pHBm, NULL, NULL, (BYTE *)data);
}
if ((flag & 7) == 0) LocalFree(data);
return ret;
}
/*--------------------------------------------------------------------------------------*/
/* GetPreview() */
/* プレビュー用のサムネイル画像を生成する。 */
/* ※通常実装しません。 */
/*--------------------------------------------------------------------------------------*/
int _export PASCAL GetPreview (LPSTR buf, long len, unsigned int flag,
HANDLE *pHBInfo, HANDLE *pHBm,FARPROC, long)
{
return SPI_NO_FUNCTION;
}
/*--------------------------------------------------------------------------------------*/
/* ConfigurationDlg() */
/* アバウト&設定ダイアログを表示する。 */
/* ※GetPluginInfo() 用のストリングテーブルをメッセージボックス表示するだけ。 */
/*--------------------------------------------------------------------------------------*/
int _export FAR PASCAL ConfigurationDlg(HWND parent, int fnc)
{
char buf[256];
LoadString(hInst, 1, buf, sizeof(buf));
if (fnc == SUSIE_CONFIGDLG_ABOUT || fnc == SUSIE_CONFIGDLG_SETTING) {
MessageBox(NULL, buf, "About..", MB_OK | MB_TASKMODAL | MB_ICONINFORMATION);
return SPI_ALL_RIGHT;
} else {
return SPI_NO_FUNCTION;
}
}