library testdll;

uses

    m_globaldefs, m_api, Windows;

    {$include m_helpers.inc}

    function MirandaPluginInfo(mirandaVersion: DWORD): PPLUGININFO; cdecl;
    begin
        Result := @PLUGININFO;
        PLUGININFO.cbSize := sizeof(TPLUGININFO);
        PLUGININFO.shortName := 'Plugin Template';
        PLUGININFO.version := PLUGIN_MAKE_VERSION(0,0,0,1);
        PLUGININFO.description := 'The long description of your plugin, to go in the plugin options dialog';
        PLUGININFO.author := 'J. Random Hacker';
        PLUGININFO.authorEmail := 'noreply@sourceforge.net';
        PLUGININFO.copyright := '(c) 2003 J. Random Hacker';
        PLUGININFO.homepage := 'http://miranda-icq.sourceforge.net/';
        PLUGININFO.isTransient := 0;
        PLUGININFO.replacesDefaultModule := 0;
    end;

    function PluginMenuCommand(wParam: WPARAM; lParam: LPARAM): Integer; cdecl;
    begin
        Result := 0;
        // this is called by Miranda, thus has to use the cdecl calling convention
        // all services and hooks need this.
        MessageBox(0, 'Just groovy, baby!', 'Plugin-o-rama', MB_OK);
    end;

    function Load(link: PPLUGINLINK): int; cdecl;
    var
        mi: TCListMenuItem;
    begin
        // this line is VERY VERY important, if it's not present, expect crashes.
        PLUGINLINK := Pointer(link);
        pluginLink^.CreateServiceFunction('TestPlug/MenuCommand', @PluginMenuCommand);
        FillChar(mi, sizeof(mi), 0);
        mi.cbSize := sizeof(mi);
        mi.position := $7FFFFFFF;
        mi.flags := 0;
        mi.hIcon := LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
        mi.pszName := '&Test Plugin...';
        mi.pszService := 'TestPlug/MenuCommand';
        pluginLink^.CallService(MS_CLIST_ADDMAINMENUITEM, 0, lParam(@mi));
        Result := 0;
    end;

    function Unload: int; cdecl;
    begin
        Result := 0;
    end;

    exports

        MirandaPluginInfo, Load, Unload;

begin
end.
