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 {