core/systems/PluginSys.cpp
changeset 2105 ad190b9bb5af
parent 2086 debb2ab2c782
child 2113 8e8b28162e23
     1.1 --- a/core/systems/PluginSys.cpp	Sun Jun 01 22:31:58 2008 +0000
     1.2 +++ b/core/systems/PluginSys.cpp	Mon Jun 02 05:03:27 2008 +0000
     1.3 @@ -373,6 +373,36 @@
     1.4  	m_info.name = m_info.name ? m_info.name : "";
     1.5  	m_info.url = m_info.url ? m_info.url : "";
     1.6  	m_info.version = m_info.version ? m_info.version : "";
     1.7 +
     1.8 +	if ((err = base->FindPubvarByName("__version", &idx)) == SP_ERROR_NONE)
     1.9 +	{
    1.10 +		struct __version_info
    1.11 +		{
    1.12 +			cell_t version;
    1.13 +			cell_t filevers;
    1.14 +			cell_t date;
    1.15 +			cell_t time;
    1.16 +		};
    1.17 +		__version_info *info;
    1.18 +		cell_t local_addr;
    1.19 +		const char *pDate, *pTime;
    1.20 +
    1.21 +		pDate = "";
    1.22 +		pTime = "";
    1.23 +
    1.24 +		base->GetPubvarAddrs(idx, &local_addr, (cell_t **)&info);
    1.25 +		m_FileVersion = info->version;
    1.26 +		if (m_FileVersion >= 3)
    1.27 +		{
    1.28 +			base->LocalToString(info->date, (char **)&pDate);
    1.29 +			base->LocalToString(info->time, (char **)&pTime);
    1.30 +			UTIL_Format(m_DateTime, sizeof(m_DateTime), "%s %s", pDate, pTime);
    1.31 +		}
    1.32 +	}
    1.33 +	else
    1.34 +	{
    1.35 +		m_FileVersion = 0;
    1.36 +	}
    1.37  }
    1.38  
    1.39  void CPlugin::Call_OnPluginStart()
    1.40 @@ -2034,12 +2064,13 @@
    1.41  				g_RootMenu.ConsolePrint("[SM] Listing %d plugin%s:", GetPluginCount(), (plnum > 1) ? "s" : "");
    1.42  			}
    1.43  
    1.44 -			SourceHook::List<IPlugin *> m_FailList;
    1.45 +			CPlugin *pl;
    1.46 +			SourceHook::List<CPlugin *>::iterator iter;
    1.47 +			SourceHook::List<CPlugin *> m_FailList;
    1.48  
    1.49 -			IPluginIterator *iter = GetPluginIterator();
    1.50 -			for (; iter->MorePlugins(); iter->NextPlugin(), id++)
    1.51 +			for (iter = m_plugins.begin(); iter != m_plugins.end(); iter++)
    1.52  			{
    1.53 -				IPlugin *pl = iter->GetPlugin();
    1.54 +				pl = (*iter);
    1.55  				assert(pl->GetStatus() != Plugin_Created);
    1.56  				int len = 0;
    1.57  				const sm_plugininfo_t *info = pl->GetPublicInfo();
    1.58 @@ -2069,13 +2100,11 @@
    1.59  				g_RootMenu.ConsolePrint("%s", buffer);
    1.60  			}
    1.61  
    1.62 -			iter->Release();
    1.63 -
    1.64  			if (!m_FailList.empty())
    1.65  			{
    1.66  				g_RootMenu.ConsolePrint("Load Errors:");
    1.67  
    1.68 -				SourceHook::List<IPlugin *>::iterator _iter;
    1.69 +				SourceHook::List<CPlugin *>::iterator _iter;
    1.70  
    1.71  				CPlugin *pl;
    1.72  
    1.73 @@ -2272,8 +2301,21 @@
    1.74  				}
    1.75  				else
    1.76  				{
    1.77 -					g_RootMenu.ConsolePrint("  Debugging: %s", pl->IsDebugging() ? "Yes" : "No");
    1.78 -					g_RootMenu.ConsolePrint("  Running: %s", pl->GetStatus() == Plugin_Running ? "Yes" : "No");
    1.79 +					if (pl->GetStatus() == Plugin_Running)
    1.80 +					{
    1.81 +						if (pl->IsDebugging())
    1.82 +						{
    1.83 +							g_RootMenu.ConsolePrint("  Status: running, debugging");
    1.84 +						}
    1.85 +						else
    1.86 +						{
    1.87 +							g_RootMenu.ConsolePrint("  Status: running");
    1.88 +						}
    1.89 +					}
    1.90 +					else
    1.91 +					{
    1.92 +						g_RootMenu.ConsolePrint("  Status: not running");
    1.93 +					}
    1.94  
    1.95  					const char *typestr = "";
    1.96  					switch (pl->GetType())
    1.97 @@ -2292,6 +2334,10 @@
    1.98  
    1.99  					g_RootMenu.ConsolePrint("  Reloads: %s", typestr);
   1.100  				}
   1.101 +				if (pl->m_FileVersion >= 3)
   1.102 +				{
   1.103 +					g_RootMenu.ConsolePrint("  Timestamp: %s", pl->m_DateTime);
   1.104 +				}
   1.105  			}
   1.106  			else
   1.107  			{