Index: MUSHclient.rc =================================================================== RCS file: /cvs/mushclient/MUSHclient.rc,v retrieving revision 1.211 retrieving revision 1.212 diff -c -r1.211 -r1.212 *** MUSHclient.rc 30 Dec 2007 04:32:12 -0000 1.211 --- MUSHclient.rc 10 Jan 2008 01:24:53 -0000 1.212 *************** *** 56,63 **** // VS_VERSION_INFO VERSIONINFO ! FILEVERSION 4,0,20,0 ! PRODUCTVERSION 4,0,20,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L --- 56,63 ---- // VS_VERSION_INFO VERSIONINFO ! FILEVERSION 4,0,21,0 ! PRODUCTVERSION 4,0,21,0 FILEFLAGSMASK 0x3fL #ifdef _DEBUG FILEFLAGS 0x1L *************** *** 75,88 **** VALUE "Comments", "MUSHclient - a client program for playing MUD games\0" VALUE "CompanyName", "Gammon Software Solutions\0" VALUE "FileDescription", "MUSHclient\0" ! VALUE "FileVersion", "4.20\0" VALUE "InternalName", "MUSHCLIENT\0" ! VALUE "LegalCopyright", "Copyright © 2007 Gammon Software Solutions\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "MUSHCLIENT.EXE\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "MUSHclient\0" ! VALUE "ProductVersion", "4.20\0" VALUE "SpecialBuild", "\0" END END --- 75,88 ---- VALUE "Comments", "MUSHclient - a client program for playing MUD games\0" VALUE "CompanyName", "Gammon Software Solutions\0" VALUE "FileDescription", "MUSHclient\0" ! VALUE "FileVersion", "4.21\0" VALUE "InternalName", "MUSHCLIENT\0" ! VALUE "LegalCopyright", "Copyright © 2008 Gammon Software Solutions\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "MUSHCLIENT.EXE\0" VALUE "PrivateBuild", "\0" VALUE "ProductName", "MUSHclient\0" ! VALUE "ProductVersion", "4.21\0" VALUE "SpecialBuild", "\0" END END Index: doc.cpp =================================================================== RCS file: /cvs/mushclient/doc.cpp,v retrieving revision 1.220 retrieving revision 1.221 diff -c -r1.220 -r1.221 *** doc.cpp 9 Aug 2007 01:20:55 -0000 1.220 --- doc.cpp 10 Jan 2008 01:24:53 -0000 1.221 *************** *** 499,504 **** --- 499,507 ---- DISP_FUNCTION(CMUSHclientDoc, "SendSpecial", SendSpecial, VT_I4, VTS_BSTR VTS_BOOL VTS_BOOL VTS_BOOL VTS_BOOL) DISP_FUNCTION(CMUSHclientDoc, "GetGlobalOption", GetGlobalOption, VT_VARIANT, VTS_BSTR) DISP_FUNCTION(CMUSHclientDoc, "GetGlobalOptionList", GetGlobalOptionList, VT_VARIANT, VTS_NONE) + DISP_FUNCTION(CMUSHclientDoc, "GetPluginTriggerOption", GetPluginTriggerOption, VT_VARIANT, VTS_BSTR VTS_BSTR VTS_BSTR) + DISP_FUNCTION(CMUSHclientDoc, "GetPluginAliasOption", GetPluginAliasOption, VT_VARIANT, VTS_BSTR VTS_BSTR VTS_BSTR) + DISP_FUNCTION(CMUSHclientDoc, "GetPluginTimerOption", GetPluginTimerOption, VT_VARIANT, VTS_BSTR VTS_BSTR VTS_BSTR) DISP_PROPERTY_PARAM(CMUSHclientDoc, "NormalColour", GetNormalColour, SetNormalColour, VT_I4, VTS_I2) DISP_PROPERTY_PARAM(CMUSHclientDoc, "BoldColour", GetBoldColour, SetBoldColour, VT_I4, VTS_I2) DISP_PROPERTY_PARAM(CMUSHclientDoc, "CustomColourText", GetCustomColourText, SetCustomColourText, VT_I4, VTS_I2) *************** *** 3816,3825 **** --- 3819,3851 ---- break; } // end of switch + if (App.m_bErrorNotificationToOutputWindow) + { Note (strMsg); + Note (""); + Note (Translate ("For assistance with connection problems see: ")); + Tell (" "); + Hyperlink (FORUM_URL "?id=8369", + FORUM_URL "?id=8369", + Translate ("How to resolve network connection problems"), + "deepskyblue", "black", TRUE); + Note (""); + Note (""); + + } else + { + strMsg += "\n\n"; + strMsg += Translate ("For assistance with connection problems see: "); + strMsg += FORUM_URL "?id=8369"; + strMsg += "\n\n"; + strMsg += Translate ("This message can be suppressed, or displayed in the main window."); + strMsg += "\n"; + strMsg += Translate ("See the File menu -> Global Preferences -> General to do this."); + UMessageBox (strMsg); + } } // end of notification wanted return; *************** *** 4322,4327 **** --- 4348,4355 ---- timer_item->nMatched++; // count timer matches timer_item->tWhenFired = tNow; // when it fired + m_iTimersFiredCount++; + // TRACE1 ("Fired at = %10.8f\n", timer_item->tWhenFired.m_dt); if (timer_item->strLabel.IsEmpty ()) *************** *** 7752,7756 **** putontoclipboard (QuoteForumCodes (strContents)); } - --- 7780,7783 ---- Index: doc.h =================================================================== RCS file: /cvs/mushclient/doc.h,v retrieving revision 1.230 retrieving revision 1.231 diff -c -r1.230 -r1.231 *** doc.h 30 Dec 2007 04:32:12 -0000 1.230 --- doc.h 10 Jan 2008 01:24:53 -0000 1.231 *************** *** 21,28 **** // New versions - things to change ! #define THISVERSION 420 // Step 1. ! const CString MUSHCLIENT_VERSION = "4.20"; // Step 2. // Step 3. Don't forget VERSION resource in Resources tab // Step 4. Remember: README.TXT --- 21,28 ---- // New versions - things to change ! #define THISVERSION 421 // Step 1. ! const CString MUSHCLIENT_VERSION = "4.21"; // Step 2. // Step 3. Don't forget VERSION resource in Resources tab // Step 4. Remember: README.TXT *************** *** 880,885 **** --- 880,891 ---- __int64 m_iOutputPacketCount; // count of packets sent long m_iUTF8ErrorCount; // count of lines with bad UTF8 + long m_iTriggersEvaluatedCount; // how many triggers we evaluated + long m_iTriggersMatchedCount; // how many triggers matched + long m_iAliasesEvaluatedCount; // how many aliases we evaluated + long m_iAliasesMatchedCount; // how many aliases matched + long m_iTimersFiredCount; // how many timers fired + int m_last_prefs_page; unsigned short m_bConfigEnableTimers; // used when doing world config *************** *** 2393,2398 **** --- 2399,2407 ---- afx_msg long SendSpecial(LPCTSTR Message, BOOL Echo, BOOL Queue, BOOL Log, BOOL History); afx_msg VARIANT GetGlobalOption(LPCTSTR Name); afx_msg VARIANT GetGlobalOptionList(); + afx_msg VARIANT GetPluginTriggerOption(LPCTSTR PluginID, LPCTSTR TriggerName, LPCTSTR OptionName); + afx_msg VARIANT GetPluginAliasOption(LPCTSTR PluginID, LPCTSTR AliasName, LPCTSTR OptionName); + afx_msg VARIANT GetPluginTimerOption(LPCTSTR PluginID, LPCTSTR TimerName, LPCTSTR OptionName); afx_msg long GetNormalColour(short WhichColour); afx_msg void SetNormalColour(short WhichColour, long nNewValue); afx_msg long GetBoldColour(short WhichColour); Index: doc_construct.cpp =================================================================== RCS file: /cvs/mushclient/doc_construct.cpp,v retrieving revision 1.23 retrieving revision 1.24 diff -c -r1.23 -r1.24 *** doc_construct.cpp 13 Jun 2007 17:57:28 -0000 1.23 --- doc_construct.cpp 10 Jan 2008 01:24:53 -0000 1.24 *************** *** 49,54 **** --- 49,61 ---- m_iCurrentActionSource = eUnknownActionSource; m_nBytesIn = 0; m_nBytesOut = 0; + + m_iTriggersEvaluatedCount = 0; + m_iTriggersMatchedCount = 0; + m_iAliasesEvaluatedCount = 0; + m_iAliasesMatchedCount = 0; + m_iTimersFiredCount = 0; + m_bLoaded = false; m_bMapping = false; m_bRemoveMapReverses = true; Index: evaluate.cpp =================================================================== RCS file: /cvs/mushclient/evaluate.cpp,v retrieving revision 1.77 retrieving revision 1.78 diff -c -r1.77 -r1.78 *** evaluate.cpp 12 Jun 2007 04:01:56 -0000 1.77 --- evaluate.cpp 10 Jan 2008 01:24:53 -0000 1.78 *************** *** 286,291 **** --- 286,293 ---- if (!trigger_item->bEnabled) continue; // ignore non-enabled triggers + m_iTriggersEvaluatedCount++; // count evaluations + // do regular expression, if available if (trigger_item->regexp) { *************** *** 417,422 **** --- 419,425 ---- continue; // no regexp, ignore trigger matched = true; + m_iTriggersMatchedCount++; trigger_item->tWhenMatched = CTime::GetCurrentTime(); // when it matched *************** *** 770,775 **** --- 773,780 ---- if (!alias_item->bEnabled) continue; + m_iAliasesEvaluatedCount++; + BOOL bMatched; // empty wildcards now *************** *** 792,797 **** --- 797,804 ---- if (!bMatched) // no match, try next one continue; + + m_iAliasesMatchedCount++; if (alias_item->bOneShot) mapOneShotItems.push_back ( Index: functionlist.cpp =================================================================== RCS file: /cvs/mushclient/functionlist.cpp,v retrieving revision 1.26 retrieving revision 1.27 diff -c -r1.26 -r1.27 *** functionlist.cpp 9 Aug 2007 01:20:55 -0000 1.26 --- functionlist.cpp 10 Jan 2008 01:24:53 -0000 1.27 *************** *** 169,182 **** --- 169,185 ---- "GetOptionList", "GetPluginAliasInfo", "GetPluginAliasList", + "GetPluginAliasOption", "GetPluginID", "GetPluginInfo", "GetPluginList", "GetPluginName", "GetPluginTimerInfo", "GetPluginTimerList", + "GetPluginTimerOption", "GetPluginTriggerInfo", "GetPluginTriggerList", + "GetPluginTriggerOption", "GetPluginVariable", "GetPluginVariableList", "GetQueue", Index: localize.lua =================================================================== RCS file: /cvs/mushclient/localize.lua,v retrieving revision 1.2 retrieving revision 1.3 diff -c -r1.2 -r1.3 *** localize.lua 12 Jun 2007 04:01:56 -0000 1.2 --- localize.lua 10 Jan 2008 01:24:53 -0000 1.3 *************** *** 19,25 **** fo = assert (io.open ("Localize_template.lua", "w")) fo:write ("-- MUSHclient localization file\n\n") ! fo:write (os.date ("-- Written: %A, %m %B %Y at %H:%M:%S\n\n")) -- try to work out number of arguments (see sprintf format) -- eg. %+06.4f --- 19,25 ---- fo = assert (io.open ("Localize_template.lua", "w")) fo:write ("-- MUSHclient localization file\n\n") ! fo:write (os.date ("-- Written: %A, %d %B %Y at %H:%M:%S\n\n")) -- try to work out number of arguments (see sprintf format) -- eg. %+06.4f Index: lua_methods.cpp =================================================================== RCS file: /cvs/mushclient/lua_methods.cpp,v retrieving revision 1.78 retrieving revision 1.79 diff -c -r1.78 -r1.79 *** lua_methods.cpp 24 Dec 2007 01:18:05 -0000 1.78 --- lua_methods.cpp 10 Jan 2008 01:24:53 -0000 1.79 *************** *** 2541,2546 **** --- 2541,2562 ---- //---------------------------------------- + // world.GetPluginAliasOption + //---------------------------------------- + static int L_GetPluginAliasOption (lua_State *L) + { + CMUSHclientDoc *pDoc = doc (L); + COleVariant v = pDoc->GetPluginAliasOption ( + my_checkstring (L, 1), // PluginID + my_checkstring (L, 2), // Alias Name + my_checkstring (L, 3) // Option Name + ); + return pushVariant (L, v); // number of result fields + } // end of L_GetPluginAliasOption + + + + //---------------------------------------- // world.GetPluginID //---------------------------------------- static int L_GetPluginID (lua_State *L) *************** *** 2613,2618 **** --- 2629,2649 ---- //---------------------------------------- + // world.GetPluginTimerOption + //---------------------------------------- + static int L_GetPluginTimerOption (lua_State *L) + { + CMUSHclientDoc *pDoc = doc (L); + COleVariant v = pDoc->GetPluginTimerOption ( + my_checkstring (L, 1), // PluginID + my_checkstring (L, 2), // Timer Name + my_checkstring (L, 3) // Option Name + ); + return pushVariant (L, v); // number of result fields + } // end of L_GetPluginTimerOption + + + //---------------------------------------- // world.GetPluginTriggerInfo //---------------------------------------- static int L_GetPluginTriggerInfo (lua_State *L) *************** *** 2641,2646 **** --- 2672,2692 ---- //---------------------------------------- + // world.GetPluginTriggerOption + //---------------------------------------- + static int L_GetPluginTriggerOption (lua_State *L) + { + CMUSHclientDoc *pDoc = doc (L); + COleVariant v = pDoc->GetPluginTriggerOption ( + my_checkstring (L, 1), // PluginID + my_checkstring (L, 2), // Trigger Name + my_checkstring (L, 3) // Option Name + ); + return pushVariant (L, v); // number of result fields + } // end of L_GetPluginTriggerOption + + + //---------------------------------------- // world.GetPluginVariable //---------------------------------------- static int L_GetPluginVariable (lua_State *L) *************** *** 4938,4951 **** --- 4984,5000 ---- {"GetOptionList", L_GetOptionList}, {"GetPluginAliasInfo", L_GetPluginAliasInfo}, {"GetPluginAliasList", L_GetPluginAliasList}, + {"GetPluginAliasOption", L_GetPluginAliasOption}, {"GetPluginID", L_GetPluginID}, {"GetPluginInfo", L_GetPluginInfo}, {"GetPluginList", L_GetPluginList}, {"GetPluginName", L_GetPluginName}, {"GetPluginTimerInfo", L_GetPluginTimerInfo}, {"GetPluginTimerList", L_GetPluginTimerList}, + {"GetPluginTimerOption", L_GetPluginTimerOption}, {"GetPluginTriggerInfo", L_GetPluginTriggerInfo}, {"GetPluginTriggerList", L_GetPluginTriggerList}, + {"GetPluginTriggerOption", L_GetPluginTriggerOption}, {"GetPluginVariable", L_GetPluginVariable}, {"GetPluginVariableList", L_GetPluginVariableList}, {"GetQueue", L_GetQueue}, Index: methods.cpp =================================================================== RCS file: /cvs/mushclient/methods.cpp,v retrieving revision 1.203 retrieving revision 1.204 diff -c -r1.203 -r1.204 *** methods.cpp 24 Dec 2007 01:18:05 -0000 1.203 --- methods.cpp 10 Jan 2008 01:24:53 -0000 1.204 *************** *** 4189,4195 **** { 240, "Average character width in output window" }, { 241, "Font height in output window" }, { 242, "Number of lines received with bad UTF-8 in them" }, ! { 243, "Fixed Pitch Font" }, // (dates - calculated at runtime) --- 4189,4200 ---- { 240, "Average character width in output window" }, { 241, "Font height in output window" }, { 242, "Number of lines received with bad UTF-8 in them" }, ! { 243, "Fixed Pitch Font Size" }, ! { 244, "Count of triggers evaluated" }, ! { 245, "Count of triggers matched" }, ! { 246, "Count of aliases evaluated" }, ! { 247, "Count of aliases matched" }, ! { 248, "Count of timers fired" }, // (dates - calculated at runtime) *************** *** 4570,4575 **** --- 4575,4600 ---- SetUpVariantLong (vaResult, App.m_iFixedPitchFontSize); break; + case 244: + SetUpVariantLong (vaResult, m_iTriggersEvaluatedCount); + break; + + case 245: + SetUpVariantLong (vaResult, m_iTriggersMatchedCount); + break; + + case 246: + SetUpVariantLong (vaResult, m_iAliasesEvaluatedCount); + break; + + case 247: + SetUpVariantLong (vaResult, m_iAliasesMatchedCount); + break; + + case 248: + SetUpVariantLong (vaResult, m_iTimersFiredCount); + break; + case 301: if (m_tConnectTime.GetTime ()) // only if non-zero, otherwise return empty SetUpVariantDate (vaResult, COleDateTime (m_tConnectTime.GetTime ())); *************** *** 5842,5848 **** return vaResult; } // end of GetTriggerOption ! long CMUSHclientDoc::SetTriggerOption(LPCTSTR TriggerName, LPCTSTR OptionName, LPCTSTR Value) { --- 5867,5876 ---- return vaResult; } // end of GetTriggerOption ! VARIANT CMUSHclientDoc::GetPluginTriggerOption(LPCTSTR PluginID, LPCTSTR TriggerName, LPCTSTR OptionName) ! { ! GET_PLUGIN_STUFF (GetTriggerOption (TriggerName, OptionName)) ! } long CMUSHclientDoc::SetTriggerOption(LPCTSTR TriggerName, LPCTSTR OptionName, LPCTSTR Value) { *************** *** 6113,6118 **** --- 6141,6151 ---- return vaResult; } // end of GetAliasOption + VARIANT CMUSHclientDoc::GetPluginAliasOption(LPCTSTR PluginID, LPCTSTR AliasName, LPCTSTR OptionName) + { + GET_PLUGIN_STUFF (GetAliasOption (AliasName, OptionName)) + } + long CMUSHclientDoc::SetAliasOption(LPCTSTR AliasName, LPCTSTR OptionName, LPCTSTR Value) { CString strAliasName = AliasName; *************** *** 6407,6412 **** --- 6440,6450 ---- return vaResult; } // end of GetTimerOption + + VARIANT CMUSHclientDoc::GetPluginTimerOption(LPCTSTR PluginID, LPCTSTR TimerName, LPCTSTR OptionName) + { + GET_PLUGIN_STUFF (GetTimerOption (TimerName, OptionName)) + } long CMUSHclientDoc::SetTimerOption(LPCTSTR TimerName, LPCTSTR OptionName, LPCTSTR Value) { Index: mushclient.clw =================================================================== RCS file: /cvs/mushclient/mushclient.clw,v retrieving revision 1.337 retrieving revision 1.338 diff -c -r1.337 -r1.338 *** mushclient.clw 24 Dec 2007 01:18:05 -0000 1.337 --- mushclient.clw 10 Jan 2008 01:24:53 -0000 1.338 *************** *** 2,8 **** [General Info] Version=1 ! LastClass=CSendView LastTemplate=CDialog NewFileInclude1=#include "stdafx.h" NewFileInclude2=#include "mushclient.h" --- 2,8 ---- [General Info] Version=1 ! LastClass=CMUSHclientDoc LastTemplate=CDialog NewFileInclude1=#include "stdafx.h" NewFileInclude2=#include "mushclient.h" Index: mushclient.cnt =================================================================== RCS file: /cvs/mushclient/mushclient.cnt,v retrieving revision 1.27 retrieving revision 1.28 diff -c -r1.27 -r1.28 *** mushclient.cnt 9 Aug 2007 01:20:55 -0000 1.27 --- mushclient.cnt 10 Jan 2008 01:24:54 -0000 1.28 *************** *** 315,328 **** --- 315,331 ---- 3 GetOptionList=FNC_GetOptionList 3 GetPluginAliasInfo=FNC_GetPluginAliasInfo 3 GetPluginAliasList=FNC_GetPluginAliasList + 3 GetPluginAliasList=FNC_GetPluginAliasOption 3 GetPluginID=FNC_GetPluginID 3 GetPluginInfo=FNC_GetPluginInfo 3 GetPluginList=FNC_GetPluginList 3 GetPluginName=FNC_GetPluginName 3 GetPluginTimerInfo=FNC_GetPluginTimerInfo 3 GetPluginTimerList=FNC_GetPluginTimerList + 3 GetPluginTimerList=FNC_GetPluginTimerOption 3 GetPluginTriggerInfo=FNC_GetPluginTriggerInfo 3 GetPluginTriggerList=FNC_GetPluginTriggerList + 3 GetPluginTriggerList=FNC_GetPluginTriggerOption 3 GetPluginVariable=FNC_GetPluginVariable 3 GetPluginVariableList=FNC_GetPluginVariableList 3 GetQueue=FNC_GetQueue Index: mushclient.hlp =================================================================== RCS file: /cvs/mushclient/mushclient.hlp,v retrieving revision 1.88 retrieving revision 1.89 diff -c -r1.88 -r1.89 Binary files /tmp/cvsVn4bzr and /tmp/cvsieNt4G differ Index: mushclient.odl =================================================================== RCS file: /cvs/mushclient/mushclient.odl,v retrieving revision 1.106 retrieving revision 1.107 diff -c -r1.106 -r1.107 *** mushclient.odl 9 Aug 2007 01:21:04 -0000 1.106 --- mushclient.odl 10 Jan 2008 01:25:03 -0000 1.107 *************** *** 70,83 **** [id(44)] long SetCommand(BSTR Message); [id(45)] BSTR GetNotes(); [id(46)] void SetNotes(BSTR Message); ! [id(315), propget] long NormalColour(short WhichColour); ! [id(315), propput] void NormalColour(short WhichColour, long nNewValue); ! [id(316), propget] long BoldColour(short WhichColour); ! [id(316), propput] void BoldColour(short WhichColour, long nNewValue); ! [id(317), propget] long CustomColourText(short WhichColour); ! [id(317), propput] void CustomColourText(short WhichColour, long nNewValue); ! [id(318), propget] long CustomColourBackground(short WhichColour); ! [id(318), propput] void CustomColourBackground(short WhichColour, long nNewValue); [id(47)] void Redraw(); [id(48)] long ResetTimer(BSTR TimerName); [id(49)] void SetOutputFont(BSTR FontName, short PointSize); --- 70,83 ---- [id(44)] long SetCommand(BSTR Message); [id(45)] BSTR GetNotes(); [id(46)] void SetNotes(BSTR Message); ! [id(318), propget] long NormalColour(short WhichColour); ! [id(318), propput] void NormalColour(short WhichColour, long nNewValue); ! [id(319), propget] long BoldColour(short WhichColour); ! [id(319), propput] void BoldColour(short WhichColour, long nNewValue); ! [id(320), propget] long CustomColourText(short WhichColour); ! [id(320), propput] void CustomColourText(short WhichColour, long nNewValue); ! [id(321), propget] long CustomColourBackground(short WhichColour); ! [id(321), propput] void CustomColourBackground(short WhichColour, long nNewValue); [id(47)] void Redraw(); [id(48)] long ResetTimer(BSTR TimerName); [id(49)] void SetOutputFont(BSTR FontName, short PointSize); *************** *** 346,351 **** --- 346,354 ---- [id(312)] long SendSpecial(BSTR Message, BOOL Echo, BOOL Queue, BOOL Log, BOOL History); [id(313)] VARIANT GetGlobalOption(BSTR Name); [id(314)] VARIANT GetGlobalOptionList(); + [id(315)] VARIANT GetPluginTriggerOption(BSTR PluginID, BSTR TriggerName, BSTR OptionName); + [id(316)] VARIANT GetPluginAliasOption(BSTR PluginID, BSTR AliasName, BSTR OptionName); + [id(317)] VARIANT GetPluginTimerOption(BSTR PluginID, BSTR TimerName, BSTR OptionName); //}}AFX_ODL_METHOD }; Index: install/readme.txt =================================================================== RCS file: /cvs/mushclient/install/readme.txt,v retrieving revision 1.159 retrieving revision 1.160 diff -c -r1.159 -r1.160 *** install/readme.txt 30 Dec 2007 04:32:23 -0000 1.159 --- install/readme.txt 10 Jan 2008 01:25:03 -0000 1.160 *************** *** 1,7 **** ! MUSHclient version 4.20 ======================= ! Sunday, 30th December 2007 Author: Nick Gammon Web support: http://www.gammon.com.au/forum/ --- 1,7 ---- ! MUSHclient version 4.21 ======================= ! Thursday, 10th January 2008 Author: Nick Gammon Web support: http://www.gammon.com.au/forum/