http://bugs.winehq.org/show_bug.cgi?id=26504
--- Comment #3 from Anastasius Focht focht@gmx.net 2012-04-21 14:56:19 CDT --- Hello,
cleaning up my disk, hence adding some info before it gets lost (not fully analysed).
The client uses the builtin "Squirrel" script engine/vm and small scriptlets. The scripts can be found in a file called "vcfile.res" which is password-protected. The password can be easily found using a debugger -> "vcfile-dorkas629"
After unpacking the archive there will be GUI resources (.jpeg files) and scriptlets (.nut files):
--- snip --- $ ls -o *.nut -r--r--r--. 1 focht 248 Apr 30 2009 BeginDlgLayer.nut -r--r--r--. 1 focht 2810 Apr 30 2009 BeginDlg.nut -rw-rw-r--. 1 focht 24638 Jun 29 2010 configdata.nut -r--r--r--. 1 focht 4248 Sep 13 2009 ConfigLayout.nut -r--r--r--. 1 focht 3724 Sep 13 2009 config.nut -rw-rw-r--. 1 focht 4634 Oct 18 2011 flags.nut -rw-rw-r--. 1 focht 6120 Oct 18 2011 include.nut -r--r--r--. 1 focht 6918 Oct 15 2009 IniSliderBar.nut -r--r--r--. 1 focht 3956 Sep 10 2009 LanguageDlgLayout.nut -rw-rw-r--. 1 focht 4788 Oct 18 2011 language.nut -rw-rw-r--. 1 focht 6884 Mar 15 2010 LanguageSelectDlg.nut -rw-rw-r--. 1 focht 15276 Jun 30 2010 launcherLayer.nut -r--r--r--. 1 focht 8940 Feb 4 2010 Launcher.nut -rw-rw-r--. 1 focht 16152 Apr 19 2010 Main.nut -r--r--r--. 1 focht 1274 Mar 26 2009 MessageBoxDLG.nut -rw-rw-r--. 1 focht 1576 Mar 26 2009 MessageBoxLayout.nut -r--r--r--. 1 focht 1392 Feb 5 2010 stringdef.nut --- snip ---
The scriptlets are unicode.
Main.nut and Launcher.nut are probably the interesting ones. They seem to be closely tied to win32 API (window objects, messages/pump).
Example snippet (from Main.nut):
--- snip --- SQ.LoadModule("stringdef.nut"); SQ.LoadModule("include.nut"); SQ.LoadModule("flags.nut");
SQ.LoadModule("MessageBoxDlg.nut"); SQ.LoadModule("Config.nut");
SQ.LoadModule( "language.nut"); SQ.LoadModule("LanguageSelectDlg.nut"); SQ.LoadModule("Launcher.nut");
g_config<-Ini(config); g_runeDevConfig<-Ini(runeDev);
class MainFrame extends FrameWnd { ...
function Notify( msg) { //print(msg.sType); //
if (msg.sType=="timer") { // //print(msg.pSender.GetName());
if (msg.pSender.GetName()=="cur_ProgressBar") { if (msg.wParam==100) { local now=VC.GetDLFileSizeNow(); local max=VC.GetDLFileSizeMax(); _page.CurlProgress(now,max); local speed=VC.GetDLSpeed();
local listmsg=format("(%.2f KB/s) ",speed/1024); SetProPostMessage(listmsg);
if (max>100 && now>0) {
local par=now*100/ max; par=par*(50)/100.0; SetToTalProgressBar(par+30); } } if (msg.wParam==101) { local par=VC.MD5_GetPar();
_page.CurlProgress(par,100); } } } ... --- snip ---
The scriptlets itself might not really be part of the problem (could be anything, script engine/virtual machine/runtime itself) but it's always useful to have a high-level language view which can be partly mapped to relay trace log/win32 API call sequences.
Regards