unit fdbtPlugin;

interface

uses Windows, SysUtils, Classes, TagEditorLibConsts;

//////////////////////////////////////////
//
// freeDBTagger Plugin Basic Unit
// Copyright(C) 2007 by Noradaiko
// http://nw.odoruinu.net/
//
//////////////////////////////////////////

type

TFdbtPlugin = class
protected
  InitInfo: TFdbtPluginInitInfo;
public
  function Initialize(info: PFdbtPluginInitInfo): integer; virtual;
  function GetLibInfo(InfoNo: Integer; Buffer: PChar; Size: Integer): Integer; virtual;
  function ShowConfig: integer; virtual;
  function GetTagInfo(FileName: PWideChar; Tag: PTagInfo; Size: integer): integer; virtual;
  function SetTagInfo(FileName: PWideChar; Tag: PTagInfo): integer; virtual;
  function GetTagFieldInfo(fl: PTagFieldList; size: integer): integer; virtual;
end;


function Initialize(info: PFdbtPluginInitInfo): integer; stdcall;
function GetLibInfo(InfoNo: Integer; Buffer: PChar; Size: Integer): Integer; stdcall;
function ShowConfig: integer; stdcall;
function GetTagInfo(FileName: PWideChar; Tag: PTagInfo; Size: integer): integer; stdcall;
function SetTagInfo(FileName: PWideChar; Tag: PTagInfo): integer; stdcall;
function GetTagFieldInfo(fl: PTagFieldList; size: integer): integer; stdcall;


var
  Plugin: TFdbtPlugin;

exports
  Initialize,
  GetLibInfo,
  ShowConfig,
  GetTagInfo,
  SetTagInfo,
  GetTagFieldInfo;

implementation



//
// Initialize
// ライブラリの初期化
// 戻り値：エラー定数
//
function Initialize(info: PFdbtPluginInitInfo): integer; stdcall;
begin
  if Assigned(Plugin) then
    Result:=Plugin.Initialize(info)
  else
    Result:=FDBT_NOTIMPLEMENTED;
end;

//
// GetLibInfo
// ライブラリ情報を返す
// 戻り値：エラー定数
//
function GetLibInfo(InfoNo: Integer; Buffer: PChar; Size: Integer): Integer; stdcall;
begin
  if Assigned(Plugin) then
    Result:=Plugin.GetLibInfo(InfoNo, Buffer, Size)
  else
    Result:=FDBT_NOTIMPLEMENTED;
end;

//
// ShowConfig
// プラグインの設定を行う
// 戻り値：エラー定数
//
function ShowConfig: integer; stdcall;
begin
  if Assigned(Plugin) then
    Result:=Plugin.ShowConfig
  else
    Result:=FDBT_NOTIMPLEMENTED;
end;

//
// GetTagInfo
// タグをファイルから読み込む
// 戻り値：フィールドの数
//
function GetTagInfo(FileName: PWideChar; Tag: PTagInfo; Size: integer): integer; stdcall;
begin
  if Assigned(Plugin) then
    Result:=Plugin.GetTagInfo(FileName, Tag, Size)
  else
    Result:=FDBT_NOTIMPLEMENTED;
end;

//
// SetTagInfo
// タグをファイルに書き込む
// 戻り値：エラー定数
//
function SetTagInfo(FileName: PWideChar; Tag: PTagInfo): integer; stdcall;
begin
  if Assigned(Plugin) then
    Result:=Plugin.SetTagInfo(FileName, Tag)
  else
    Result:=FDBT_NOTIMPLEMENTED;
end;

//
// GetTagFieldInfo
// フィールド情報を返す
// 戻り値：フィールドの数
//
function GetTagFieldInfo(fl: PTagFieldList; size: integer): integer; stdcall;
begin
  if Assigned(Plugin) then
    Result:=Plugin.GetTagFieldInfo(fl, size)
  else
    Result:=FDBT_NOTIMPLEMENTED;
end;





function TFdbtPlugin.Initialize(info: PFdbtPluginInitInfo): integer;
begin
  InitInfo := info^;
  Result:=FDBT_SUCCESS;
end;

function TFdbtPlugin.GetLibInfo(InfoNo: Integer; Buffer: PChar; Size: Integer): Integer;
begin
  Result:=FDBT_NOTIMPLEMENTED;
end;

function TFdbtPlugin.ShowConfig: integer;
begin
  Result:=FDBT_NOTIMPLEMENTED;
end;

function TFdbtPlugin.GetTagInfo(FileName: PWideChar; Tag: PTagInfo; Size: integer): integer;
begin
  Result:=FDBT_NOTIMPLEMENTED;
end;

function TFdbtPlugin.SetTagInfo(FileName: PWideChar; Tag: PTagInfo): integer;
begin
  Result:=FDBT_NOTIMPLEMENTED;
end;

function TFdbtPlugin.GetTagFieldInfo(fl: PTagFieldList; size: integer): integer;
begin
  Result:=FDBT_NOTIMPLEMENTED;
end;






initialization
  Plugin:=TFdbtPlugin.Create;

end.
