Cleanup paths after move

This commit is contained in:
Jordan Eldredge 2020-08-18 22:55:08 -07:00
parent 3664324bac
commit 2bd0aaa5ea
6 changed files with 15 additions and 889 deletions

View file

@ -8,23 +8,23 @@ This package is an experiment to see if we can bring "modern" Winamp skins to th
## Maki Interpreter
One of the biggest challenges to this project is that modern skins could define their own behavior by writing scripts in a custom language called Maki (Make a Killer Interface). One of the critical pieces of this project will be to write a working Maki interpreter and runtime in browser-compatible JavaScript. We have made good progress on this front. The work on that project lives in `modern/src/maki-interpreter` and has its own [readme](./src/maki-interpreter/readme.md).
One of the biggest challenges to this project is that modern skins could define their own behavior by writing scripts in a custom language called Maki (Make a Killer Interface). One of the critical pieces of this project will be to write a working Maki interpreter and runtime in browser-compatible JavaScript. We have made good progress on this front. The work on that project lives in `src/maki-interpreter` and has its own [readme](./src/maki-interpreter/readme.md).
One goal of this project is to document what we learn about the Maki language so that if others wish to travel down this path they will have an open source reference implementation and also better docs than we had. We've started that effort with out [Maki Language Spec](https://paper.dropbox.com/doc/Maki-Language-Spec--AlIjyyR70bQuNFJD7rIeuFfiAg-csainvAwSr3SBUXO5DWXy) document. Once the document stabalizes, we will likely convert it to Markdown and check it into this repository.
Another way to document the behavior of Maki is to write automated tests in the form of Maki scripts. We have few of these so far, but intend to be more systematic about writing tests in the future. For now our tests can be found in `modern/resources/maki_compiler/*/*.maki` and `modern/src/maki-interpreter/fixtures/issue_*/*.maki`.
Another way to document the behavior of Maki is to write automated tests in the form of Maki scripts. We have few of these so far, but intend to be more systematic about writing tests in the future. For now our tests can be found in `resources/maki_compiler/*/*.maki` and `src/maki-interpreter/fixtures/issue_*/*.maki`.
## Standard Library
In addition to the Maki interpreter, we also need an implementation of the Maki standard library. We have some portion of that implmented, but it's still very much a work in progress. You can find the code in `modern/src/runtime/`. The definition for how these classes and methods should behave is derived from looking at the types defined in the `std.mi` file distributed with the Maki compiler. We have a file that contains a JSON representation of these types. It can be found in `modern/src/objects.js`. That file is used for a few runtime checks (which I hope we can remove) but also to power some static analysis and tests.
In addition to the Maki interpreter, we also need an implementation of the Maki standard library. We have some portion of that implmented, but it's still very much a work in progress. You can find the code in `src/runtime/`. The definition for how these classes and methods should behave is derived from looking at the types defined in the `std.mi` file distributed with the Maki compiler. We have a file that contains a JSON representation of these types. It can be found in `src/objects.js`. That file is used for a few runtime checks (which I hope we can remove) but also to power some static analysis and tests.
`modern/src/objects.test.js` does some tests to double check that every method no prefixed with `_` or `js_` is a maki method. It also tracks which methods are still unimplemented in a Jest snapshot file.
`src/objects.test.js` does some tests to double check that every method no prefixed with `_` or `js_` is a maki method. It also tracks which methods are still unimplemented in a Jest snapshot file.
`eslint-local-rules.js` contains a custom [ESLint](https://eslint.org/) rule which uses the type definitions to check many of the same things that the Jest test checks, but also can make assertions about argument names and TypeScript types. This approach also has the advantage that it can automatically correct some errors and generate stubs for missing methods.
We also have a tool for examining a corpus of modern skins an extracting which methods of the standard libary they use. This lives in `modern/src/maki-interpreter/tools/extract-functions.js` it's not really built for anyone but Jordan to run, so it has a few paths hard coded into it. This could be fixed if somebody else had the interest. By running `yarn analyze-wals` it will look in a specific hard-coded folder for skins and extract method data from them. It will then write that data to `modern/resources/maki-skin-data.json`. This data is invaluable for prioritizing which methods we should implement next. Some methods are only used by a very small number of skins. Others are not used at all.
We also have a tool for examining a corpus of modern skins an extracting which methods of the standard libary they use. This lives in `src/maki-interpreter/tools/extract-functions.js` it's not really built for anyone but Jordan to run, so it has a few paths hard coded into it. This could be fixed if somebody else had the interest. By running `yarn analyze-wals` it will look in a specific hard-coded folder for skins and extract method data from them. It will then write that data to `resources/maki-skin-data.json`. This data is invaluable for prioritizing which methods we should implement next. Some methods are only used by a very small number of skins. Others are not used at all.
The data extracted by the `extract-functions.js` utility and the list of unimplmented methods which is validated by `modern/src/objects.test.js` can be visualized visiting [https://webamp.org/ready/](https://webamp.org/ready/) or `localhost:8080/ready` if developing locally. This dashboard makes it very easy to see current progress and explore the usage of different methods. Keep in mind that as of this writting some ~20% of `.maki` files fail to parse, so the data on this page represents a lower bound of actual usage.
The data extracted by the `extract-functions.js` utility and the list of unimplmented methods which is validated by `src/objects.test.js` can be visualized visiting [https://webamp.org/ready/](https://webamp.org/ready/) or `localhost:8080/ready` if developing locally. This dashboard makes it very easy to see current progress and explore the usage of different methods. Keep in mind that as of this writting some ~20% of `.maki` files fail to parse, so the data on this page represents a lower bound of actual usage.
## Architecture

View file

@ -2,7 +2,7 @@
In the process of starting to build support for "modern" Winamp skins for Webamp, we built an interpreter for MAKI (Make A Killer Interface) byte code, the scripting language used for adding custom functionality to modern Winamp skins.
Most of what we learned came from the decompiler built by [TODO] and trial and error testing of what the compiler output.
Most of what we learned came from the Ralf Engels' [Maki Decompiler](http://www.rengels.de/maki_decompiler/) (which seems to be offline at the moment) and trial and error testing of what the compiler output.
My goal here is to document the structure and semantics of the compiled `.maki` file that the MAKI compiler outputs and Winamp interprerates.
@ -27,7 +27,7 @@ Encoded as little endien.
### _Vector_
_Vectors_ are encoded with their [u32](#u32) length followed by the encoding of their element sequence.
_Vectors_ are encoded with their _u32_ length followed by the encoding of their element sequence.
### _String_
@ -37,7 +37,7 @@ A string is encoded as a _u16_ indicating the length of the string n followed by
_module_ ::= _header_ _classes_ _methods_ _variables_ _constants_ _bindings_ _codes_
A module (file) consists of seven consecutive sections.
A module (file) consists of the above seven consecutive sections.
## Header

View file

@ -11,10 +11,10 @@
"test": "jest --config=config/jest.unit.js",
"tdd": "jest --config=config/jest.unit.js --watch",
"format": "prettier --write \"**/*.{js,ts,tsx,d.ts,css}\"",
"analyze-wals": "babel-node --extensions=\".ts,.js,.tsx\" modern/src/maki-interpreter/tools/extract-functions.js > modern/resources/maki-skin-data.json",
"extract-object-types": "babel-node --extensions=\".ts,.js,.tsx\" modern/src/maki-interpreter/tools/extract-object-types.js",
"extract-attributes": "babel-node --extensions=\".ts,.js,.tsx\" modern/src/maki-interpreter/tools/extract-attributes.js > modern/resources/attribute-skin-data.json",
"maki-interfaces": "babel-node --extensions=\".ts,.js,.tsx\" modern/src/maki-interpreter/tools/build-typescript-interfaces.js > modern/__generated__/makiInterfaces.ts"
"analyze-wals": "babel-node --extensions=\".ts,.js,.tsx\" src/maki-interpreter/tools/extract-functions.js > resources/maki-skin-data.json",
"extract-object-types": "babel-node --extensions=\".ts,.js,.tsx\" src/maki-interpreter/tools/extract-object-types.js",
"extract-attributes": "babel-node --extensions=\".ts,.js,.tsx\" src/maki-interpreter/tools/extract-attributes.js > resources/attribute-skin-data.json",
"maki-interfaces": "babel-node --extensions=\".ts,.js,.tsx\" src/maki-interpreter/tools/build-typescript-interfaces.js > __generated__/makiInterfaces.ts"
},
"repository": {
"type": "git",

View file

@ -1,874 +0,0 @@
{
"totalCalls": {
"System.getprivateint": 17565,
"System.getcontainer": 11033,
"Container.getlayout": 11570,
"GuiObject.findobject": 66801,
"Object.onnotify": 209,
"System.setprivateint": 17673,
"Timer.setdelay": 12332,
"Timer.start": 19703,
"Timer.stop": 18293,
"System.getscriptgroup": 15264,
"System.messagebox": 18248,
"GuiObject.setalpha": 19643,
"PlDir.showcurrentlyplayingentry": 498,
"System.integertostring": 28927,
"Text.setalternatetext": 4595,
"System.getplayitemlength": 8913,
"System.integertotime": 5136,
"GuiObject.getalpha": 2574,
"System.windowmenu": 229,
"System.getruntimeversion": 9063,
"Group.getobject": 44841,
"GuiObject.getwidth": 7226,
"GuiObject.setxmlparam": 95564,
"Map.loadmap": 4658,
"System.getvolume": 3877,
"System.onvolumechanged": 182,
"System.getposition": 3286,
"System.onseek": 153,
"Layer.setregionfrommap": 2911,
"System.navigateurl": 3138,
"System.getparam": 4070,
"System.gettoken": 24530,
"System.onsetxuiparam": 1695,
"System.newgroup": 1524,
"GuiObject.init": 1612,
"System.getplayitemstring": 2132,
"System.strleft": 3592,
"Map.getvalue": 4393,
"System.seekto": 1505,
"Region.loadfrommap": 2324,
"GuiObject.gettop": 6724,
"GuiObject.getleft": 6904,
"Region.offset": 1120,
"Layer.setregion": 2428,
"System.setvolume": 3586,
"Map.getwidth": 696,
"Map.getheight": 373,
"GuiObject.hide": 58287,
"AnimatedLayer.setstartframe": 1640,
"AnimatedLayer.gotoframe": 6604,
"GuiObject.settargety": 7166,
"GuiObject.gototarget": 20164,
"GuiObject.show": 34098,
"System.getskinname": 18451,
"System.gettimeofday": 13790,
"Slider.getposition": 2523,
"Slider.onsetposition": 353,
"Button.getactivated": 2077,
"Text.settext": 29732,
"Slider.setposition": 3639,
"Config.newitem": 8391,
"Config.getitem": 3695,
"ConfigItem.newattribute": 55187,
"ConfigAttribute.setdata": 27563,
"ConfigAttribute.getdata": 21107,
"ConfigAttribute.ondatachanged": 1432,
"ToggleButton.getcurcfgval": 312,
"System.geteqpreamp": 495,
"System.geteqband": 4469,
"System.seteqband": 11227,
"System.seteqpreamp": 253,
"Wac.sendcommand": 56,
"Button.setactivated": 5822,
"System.stringtointeger": 11431,
"GuiObject.getxmlparam": 9340,
"GuiObject.settargeta": 12052,
"GuiObject.settargetspeed": 18942,
"System.getsonginfotext": 1996,
"System.strsearch": 4192,
"Button.setactivatednocallback": 644,
"PopupMenu.addcommand": 11473,
"PopupMenu.popatmouse": 1653,
"System.getstatus": 4705,
"Timer.isrunning": 1272,
"System.getmouseposx": 584,
"System.getmouseposy": 528,
"GuiObject.getheight": 6394,
"System.getviewportleft": 1022,
"System.getviewporttop": 1057,
"System.getviewportwidth": 1780,
"System.getviewportheight": 1421,
"Text.gettextwidth": 616,
"GuiObject.resize": 2443,
"Map.inregion": 1854,
"Button.leftclick": 2623,
"Timer.getdelay": 319,
"System.integer": 971,
"System.getplayitemmetadatastring": 4973,
"System.getplayitemdisplaytitle": 343,
"GuiObject.getautowidth": 1804,
"GuiObject.canceltarget": 1385,
"GuiObject.ismouseoverrect": 117,
"GuiObject.getguix": 695,
"GuiObject.settargetx": 7697,
"GuiObject.getparentlayout": 1397,
"Object.getid": 712,
"GuiObject.getguiy": 588,
"GuiObject.sendaction": 791,
"System.translate": 209,
"System.onplay": 13,
"Layout.beforeredock": 346,
"Layout.snapadjust": 498,
"Layout.redock": 385,
"Layout.getcontainer": 375,
"GuiObject.isactive": 328,
"GuiObject.isvisible": 3755,
"Container.switchtolayout": 875,
"GuiObject.clienttoscreenx": 240,
"GuiObject.screentoclientx": 248,
"System.getprivatestring": 3107,
"System.setprivatestring": 3389,
"GuiObject.isgoingtotarget": 1560,
"AnimatedLayer.getlength": 2199,
"System.chr": 1345,
"AnimatedLayer.setspeed": 1326,
"System.getvisband": 262,
"AnimatedLayer.setendframe": 1594,
"AnimatedLayer.play": 2520,
"System.random": 652,
"PopupMenu.addsubmenu": 774,
"System.getleftvumeter": 1743,
"System.getrightvumeter": 1376,
"AnimatedLayer.getcurframe": 641,
"CheckBox.setchecked": 1763,
"System.strupper": 656,
"System.strlower": 4114,
"LayoutStatus.callme": 619,
"System.play": 239,
"AnimatedLayer.isstopped": 94,
"CheckBox.ischecked": 1321,
"System.floattostring": 1563,
"Container.show": 524,
"System.isvideofullscreen": 262,
"System.isminimized": 452,
"System.getplaylistlength": 1277,
"System.getplaylistindex": 1940,
"System.isvideo": 885,
"Text.gettext": 2297,
"System.strlen": 3989,
"GuiObject.settargetw": 1449,
"System.integertolongtime": 549,
"System.strmid": 1226,
"PopupMenu.addseparator": 1568,
"GuiObject.onmousemove": 997,
"System.geteq": 129,
"System.oneqchanged": 14,
"ConfigItem.getattribute": 2395,
"Vis.getmode": 121,
"Vis.setmode": 1282,
"AnimatedLayer.setautoreplay": 266,
"ToggleButton.ontoggle": 318,
"AnimatedLayer.stop": 1575,
"AnimatedLayer.pause": 166,
"Layer.fx_update": 533,
"Layer.fx_setgridsize": 611,
"Layer.fx_setbgfx": 515,
"Layer.fx_setwrap": 547,
"Layer.fx_setbilinear": 551,
"Layer.fx_setrect": 583,
"Layer.fx_setclear": 523,
"Layer.fx_setlocalized": 543,
"Layer.fx_setrealtime": 563,
"Layer.fx_setenabled": 1064,
"Region.loadfrombitmap": 113,
"Edit.gettext": 948,
"Browser.navigateurl": 760,
"Edit.settext": 575,
"Browser.back": 22,
"Browser.refresh": 16,
"Browser.forward": 22,
"Browser.stop": 16,
"Edit.onenter": 32,
"CfgGroup.cfgsetint": 96,
"CfgGroup.cfggetname": 272,
"CfgGroup.cfggetint": 96,
"Edit.setautoenter": 232,
"System.stringtofloat": 265,
"CfgGroup.cfgsetfloat": 48,
"CfgGroup.cfggetfloat": 48,
"CfgGroup.cfgsetstring": 48,
"CfgGroup.cfggetstring": 48,
"GuiObject.getparent": 197,
"Timer.ontimer": 204,
"System.getwac": 77,
"Button.onactivate": 195,
"AnimatedLayer.isplaying": 113,
"System.sqr": 68,
"Slider.lock": 4,
"Slider.unlock": 4,
"System.getpath": 393,
"System.urlencode": 143,
"System.next": 190,
"System.previous": 95,
"System.stop": 171,
"System.pause": 140,
"System.eject": 20,
"GuiObject.bringbelow": 20,
"GuiObject.settargeth": 976,
"Container.getcurlayout": 377,
"Layout.istransparencysafe": 211,
"System.getviewportheightfromguiobject": 42,
"System.getmonitorheightfromguiobject": 4,
"System.getviewportwidthfromguiobject": 44,
"System.getmonitorwidthfromguiobject": 6,
"System.restoreapplication": 251,
"System.activateapplication": 248,
"System.navigateurlbrowser": 32,
"Container.close": 279,
"System.newdynamiccontainer": 392,
"System.isdesktopalphaavailable": 128,
"System.getviewportleftfromguiobject": 28,
"System.getviewporttopfromguiobject": 28,
"System.getmonitorleftfromguiobject": 2,
"System.getmonitortopfromguiobject": 2,
"GuiObject.getguiw": 450,
"AlbumArtLayer.refresh": 18,
"System.strright": 1373,
"Layer.isinvalid": 72,
"AlbumArtLayer.isloading": 8,
"Config.getitembyguid": 388,
"System.debugstring": 830,
"GuiObject.onleftbuttonup": 207,
"Container.toggle": 233,
"Layout.center": 36,
"AnimatedLayer.getendframe": 96,
"System.oneqpreampchanged": 34,
"System.oneqbandchanged": 34,
"System.triggeraction": 46,
"PopupMenu.checkcommand": 12491,
"Button.onleftclick": 152,
"ComponentBucket.enumchildren": 156,
"ComponentBucket.getnumchildren": 52,
"System.getmonitorheight": 68,
"System.getmonitorwidth": 98,
"System.iskeydown": 1094,
"GuiObject.setfocus": 342,
"TabSheet.getcurpage": 289,
"TabSheet.setcurpage": 200,
"Edit.onidleeditupdate": 178,
"System.playfile": 303,
"System.sin": 946,
"System.getalbumart": 48,
"GuiObject.ontargetreached": 9,
"Layout.getsnapadjustbottom": 114,
"Layout.getsnapadjustright": 20,
"Layout.getsnapadjusttop": 4,
"Layout.getsnapadjustleft": 4,
"Container.getnumlayouts": 4,
"Container.enumlayout": 8,
"Container.onswitchtolayout": 10,
"System.istransparencyavailable": 66,
"System.onstop": 6,
"System.onpause": 4,
"Frame.setposition": 34,
"Frame.getposition": 50,
"Text.ontextchanged": 16,
"System.sqrt": 370,
"List.additem": 17876,
"List.enumitem": 586,
"System.removepath": 212,
"GuiObject.ismouseover": 33,
"GuiObject.getguih": 473,
"Container.hide": 124,
"System.switchskin": 506,
"System.isobjectvalid": 46,
"AnimatedLayer.getstartframe": 37,
"Layer.fx_setalphamode": 147,
"Layer.fx_setspeed": 167,
"System.cos": 805,
"System.pow": 302,
"List.removeitem": 40,
"Container.isdynamic": 4,
"System.onscriptloaded": 4,
"Layout.setscale": 334,
"System.getviewportleftfrompoint": 24,
"System.getviewporttopfrompoint": 24,
"System.getviewportwidthfrompoint": 24,
"System.getviewportheightfrompoint": 24,
"ConfigAttribute.getattributename": 652,
"GuiList.deselectall": 12,
"GuiList.setitemfocused": 18,
"GuiList.setselected": 10,
"System.acos": 8,
"CfgGroup.cfggetguid": 80,
"System.setclipboardtext": 88,
"System.getextension": 147,
"System.newgroupaslayout": 71,
"System.isappactive": 73,
"System.getcurappleft": 52,
"System.getcurapptop": 52,
"GuiObject.bringtofront": 164,
"Object.getclassname": 24,
"Group.getnumobjects": 38,
"Group.enumobject": 54,
"System.atan2": 58,
"PopupMenu.popatxy": 36,
"System.seteq": 146,
"System.getcurrenttrackrating": 24,
"System.setcurrenttrackrating": 12,
"PlEdit.getnumtracks": 264,
"GuiObject.getautoheight": 14,
"PlEdit.getcurrentindex": 60,
"PlEdit.gettitle": 22,
"PlEdit.getlength": 12,
"PlEdit.playtrack": 48,
"PlEdit.removetrack": 26,
"PlDir.getnumitems": 20,
"PlDir.getitemname": 16,
"PlEdit.getrating": 76,
"PlDir.playitem": 12,
"PlEdit.setrating": 16,
"AnimatedLayer.getautoreplay": 2,
"System.getpublicint": 48,
"System.setpublicint": 304,
"Layout.getscale": 96,
"System.getdate": 130,
"System.formatdate": 10,
"Timer.getskipped": 15,
"GuiObject.onleftbuttondown": 107,
"System.lockui": 342,
"System.unlockui": 280,
"System.setpublicstring": 186,
"GuiList.setautosort": 50,
"GuiList.setpreventmultipleselection": 50,
"GuiList.insertitem": 390,
"GuiList.getitemlabel": 216,
"GuiList.getitemfocused": 52,
"GuiList.deleteallitems": 42,
"System.datetolongtime": 16,
"System.formatlongdate": 8,
"System.ontitlechange": 15,
"GuiTree.setsorted": 14,
"GuiTree.enumrootitem": 14,
"GuiTree.getnumvisibleitems": 14,
"GuiTree.enumallitems": 28,
"GuiTree.movetreeitem": 14,
"TreeItem.setlabel": 28,
"GuiTree.addtreeitem": 28,
"GuiTree.selectitem": 28,
"GuiTree.getbylabel": 28,
"TreeItem.expand": 14,
"TreeItem.getlabel": 28,
"GuiList.setcolumnlabel": 26,
"GuiList.setcolumnwidth": 22,
"GuiList.addcolumn": 22,
"Edit.enter": 40,
"GuiList.setsubitem": 268,
"GuiList.getnumitems": 56,
"GuiList.getfirstitemselected": 26,
"GuiList.deletebypos": 44,
"DropDownList.setlistheight": 16,
"GuiObject.setenabled": 1013,
"System.onkeydown": 2,
"PlEdit.movedown": 2,
"PlEdit.moveup": 2,
"System.popmainbrowser": 10,
"ComponentBucket.getscroll": 46,
"ComponentBucket.setscroll": 46,
"System.oninfochange": 8,
"GuiObject.clienttoscreenh": 135,
"GuiObject.reversetarget": 69,
"Layout.islayoutanimationsafe": 44,
"System.isnamedwindowvisible": 176,
"System.hidenamedwindow": 120,
"System.showwindow": 78,
"System.onshownotification": 7,
"Button.rightclick": 56,
"Vis.nextmode": 20,
"List.getnumitems": 224,
"GuiObject.bringtoback": 49,
"Group.islayout": 2,
"Slider.onsetfinalposition": 16,
"GuiObject.onresize": 54,
"Slider.onpostedposition": 28,
"CheckBox.ontoggle": 6,
"GuiObject.onaccelerator": 96,
"GuiObject.onenterarea": 28,
"GuiObject.onleavearea": 28,
"System.asin": 6,
"System.minimizeapplication": 24,
"GuiObject.onsetvisible": 38,
"Vis.setrealtime": 3,
"PlEdit.enqueuefile": 2,
"List.removeall": 20,
"PopupMenu.disablecommand": 7,
"System.atan": 172,
"System.getdatehour": 49,
"System.getpublicstring": 20,
"System.getwinampversion": 4,
"GuiObject.onrightbuttonup": 12,
"Layer.fx_restart": 8,
"System.getdatemin": 36,
"System.getdatesec": 4,
"GuiObject.endmodal": 5,
"GuiObject.onrightbuttondown": 18,
"System.frac": 4,
"GuiObject.clienttoscreeny": 8,
"DropDownList.deleteallitems": 4,
"DropDownList.additem": 8,
"DropDownList.finditem": 12,
"DropDownList.selectitem": 12,
"DropDownList.getselectedtext": 52,
"DropDownList.getnumitems": 4,
"GuiList.additem": 44,
"PlEdit.showtrack": 40,
"PlEdit.moveto": 24,
"PlEdit.getmetadata": 12,
"System.enqueuefile": 12,
"PlEdit.clear": 4,
"System.getcurappwidth": 20,
"System.getcurappheight": 16,
"GuiList.setitemlabel": 6,
"GuiList.setfontsize": 4,
"Layout.getdesktopalpha": 3,
"MouseRedir.setredirection": 6,
"AnimatedLayer.onframe": 14,
"Group.getmouseposx": 6,
"Group.getmouseposy": 146,
"Map.getregion": 3,
"GuiObject.screentoclienty": 8,
"GuiList.moveitem": 4,
"Layout.setredrawonresize": 2,
"AnimatedLayer.getdirection": 3,
"GuiObject.runmodal": 1
},
"foundInSkins": {
"System.getprivateint": 1613,
"System.getcontainer": 1627,
"Container.getlayout": 1568,
"GuiObject.findobject": 1846,
"Object.onnotify": 151,
"System.setprivateint": 1607,
"Timer.setdelay": 1909,
"Timer.start": 1909,
"Timer.stop": 1756,
"System.getscriptgroup": 2002,
"System.messagebox": 2226,
"GuiObject.setalpha": 1052,
"PlDir.showcurrentlyplayingentry": 448,
"System.integertostring": 1917,
"Text.setalternatetext": 843,
"System.getplayitemlength": 1658,
"System.integertotime": 1223,
"GuiObject.getalpha": 719,
"System.windowmenu": 221,
"System.getruntimeversion": 1461,
"Group.getobject": 1694,
"GuiObject.getwidth": 732,
"GuiObject.setxmlparam": 1790,
"Map.loadmap": 1503,
"System.getvolume": 1448,
"System.onvolumechanged": 87,
"System.getposition": 1067,
"System.onseek": 82,
"Layer.setregionfrommap": 413,
"System.navigateurl": 1094,
"System.getparam": 1861,
"System.gettoken": 1724,
"System.onsetxuiparam": 1504,
"System.newgroup": 1508,
"GuiObject.init": 1534,
"System.getplayitemstring": 906,
"System.strleft": 770,
"Map.getvalue": 1147,
"System.seekto": 876,
"Region.loadfrommap": 641,
"GuiObject.gettop": 1262,
"GuiObject.getleft": 1407,
"Region.offset": 251,
"Layer.setregion": 667,
"System.setvolume": 1272,
"Map.getwidth": 370,
"Map.getheight": 294,
"GuiObject.hide": 1542,
"AnimatedLayer.setstartframe": 509,
"AnimatedLayer.gotoframe": 899,
"GuiObject.settargety": 965,
"GuiObject.gototarget": 1246,
"GuiObject.show": 1539,
"System.getskinname": 1199,
"System.gettimeofday": 1273,
"Slider.getposition": 457,
"Slider.onsetposition": 166,
"Button.getactivated": 361,
"Text.settext": 1337,
"Slider.setposition": 487,
"Config.newitem": 339,
"Config.getitem": 503,
"ConfigItem.newattribute": 349,
"ConfigAttribute.setdata": 456,
"ConfigAttribute.getdata": 539,
"ConfigAttribute.ondatachanged": 165,
"ToggleButton.getcurcfgval": 147,
"System.geteqpreamp": 407,
"System.geteqband": 478,
"System.seteqband": 357,
"System.seteqpreamp": 167,
"Wac.sendcommand": 14,
"Button.setactivated": 576,
"System.stringtointeger": 1069,
"GuiObject.getxmlparam": 613,
"GuiObject.settargeta": 711,
"GuiObject.settargetspeed": 1226,
"System.getsonginfotext": 459,
"System.strsearch": 669,
"Button.setactivatednocallback": 129,
"PopupMenu.addcommand": 697,
"PopupMenu.popatmouse": 663,
"System.getstatus": 1089,
"Timer.isrunning": 148,
"System.getmouseposx": 361,
"System.getmouseposy": 351,
"GuiObject.getheight": 729,
"System.getviewportleft": 462,
"System.getviewporttop": 447,
"System.getviewportwidth": 598,
"System.getviewportheight": 571,
"Text.gettextwidth": 338,
"GuiObject.resize": 669,
"Map.inregion": 600,
"Button.leftclick": 561,
"Timer.getdelay": 265,
"System.integer": 223,
"System.getplayitemmetadatastring": 484,
"System.getplayitemdisplaytitle": 197,
"GuiObject.getautowidth": 427,
"GuiObject.canceltarget": 242,
"GuiObject.ismouseoverrect": 55,
"GuiObject.getguix": 157,
"GuiObject.settargetx": 953,
"GuiObject.getparentlayout": 546,
"Object.getid": 204,
"GuiObject.getguiy": 137,
"GuiObject.sendaction": 151,
"System.translate": 37,
"System.onplay": 13,
"Layout.beforeredock": 95,
"Layout.snapadjust": 103,
"Layout.redock": 95,
"Layout.getcontainer": 103,
"GuiObject.isactive": 61,
"GuiObject.isvisible": 540,
"Container.switchtolayout": 242,
"GuiObject.clienttoscreenx": 238,
"GuiObject.screentoclientx": 240,
"System.getprivatestring": 375,
"System.setprivatestring": 363,
"GuiObject.isgoingtotarget": 416,
"AnimatedLayer.getlength": 717,
"System.chr": 70,
"AnimatedLayer.setspeed": 398,
"System.getvisband": 56,
"AnimatedLayer.setendframe": 485,
"AnimatedLayer.play": 611,
"System.random": 91,
"PopupMenu.addsubmenu": 130,
"System.getleftvumeter": 768,
"System.getrightvumeter": 705,
"AnimatedLayer.getcurframe": 138,
"CheckBox.setchecked": 128,
"System.strupper": 220,
"System.strlower": 521,
"LayoutStatus.callme": 619,
"System.play": 141,
"AnimatedLayer.isstopped": 51,
"CheckBox.ischecked": 112,
"System.floattostring": 310,
"Container.show": 380,
"System.isvideofullscreen": 254,
"System.isminimized": 290,
"System.getplaylistlength": 286,
"System.getplaylistindex": 288,
"System.isvideo": 241,
"Text.gettext": 357,
"System.strlen": 673,
"GuiObject.settargetw": 345,
"System.integertolongtime": 338,
"System.strmid": 284,
"PopupMenu.addseparator": 388,
"GuiObject.onmousemove": 319,
"System.geteq": 77,
"System.oneqchanged": 14,
"ConfigItem.getattribute": 378,
"Vis.getmode": 59,
"Vis.setmode": 195,
"AnimatedLayer.setautoreplay": 70,
"ToggleButton.ontoggle": 101,
"AnimatedLayer.stop": 238,
"AnimatedLayer.pause": 76,
"Layer.fx_update": 278,
"Layer.fx_setgridsize": 301,
"Layer.fx_setbgfx": 293,
"Layer.fx_setwrap": 293,
"Layer.fx_setbilinear": 305,
"Layer.fx_setrect": 297,
"Layer.fx_setclear": 297,
"Layer.fx_setlocalized": 301,
"Layer.fx_setrealtime": 305,
"Layer.fx_setenabled": 305,
"Region.loadfrombitmap": 57,
"Edit.gettext": 206,
"Browser.navigateurl": 224,
"Edit.settext": 194,
"Browser.back": 22,
"Browser.refresh": 16,
"Browser.forward": 22,
"Browser.stop": 16,
"Edit.onenter": 32,
"CfgGroup.cfgsetint": 48,
"CfgGroup.cfggetname": 48,
"CfgGroup.cfggetint": 48,
"Edit.setautoenter": 70,
"System.stringtofloat": 148,
"CfgGroup.cfgsetfloat": 48,
"CfgGroup.cfggetfloat": 48,
"CfgGroup.cfgsetstring": 48,
"CfgGroup.cfggetstring": 48,
"GuiObject.getparent": 134,
"Timer.ontimer": 126,
"System.getwac": 40,
"Button.onactivate": 79,
"AnimatedLayer.isplaying": 56,
"System.sqr": 14,
"Slider.lock": 4,
"Slider.unlock": 4,
"System.getpath": 165,
"System.urlencode": 105,
"System.next": 108,
"System.previous": 79,
"System.stop": 107,
"System.pause": 104,
"System.eject": 20,
"GuiObject.bringbelow": 10,
"GuiObject.settargeth": 207,
"Container.getcurlayout": 170,
"Layout.istransparencysafe": 108,
"System.getviewportheightfromguiobject": 14,
"System.getmonitorheightfromguiobject": 2,
"System.getviewportwidthfromguiobject": 14,
"System.getmonitorwidthfromguiobject": 2,
"System.restoreapplication": 176,
"System.activateapplication": 173,
"System.navigateurlbrowser": 26,
"Container.close": 186,
"System.newdynamiccontainer": 210,
"System.isdesktopalphaavailable": 102,
"System.getviewportleftfromguiobject": 14,
"System.getviewporttopfromguiobject": 14,
"System.getmonitorleftfromguiobject": 2,
"System.getmonitortopfromguiobject": 2,
"GuiObject.getguiw": 122,
"AlbumArtLayer.refresh": 12,
"System.strright": 219,
"Layer.isinvalid": 36,
"AlbumArtLayer.isloading": 6,
"Config.getitembyguid": 76,
"System.debugstring": 118,
"GuiObject.onleftbuttonup": 144,
"Container.toggle": 116,
"Layout.center": 18,
"AnimatedLayer.getendframe": 82,
"System.oneqpreampchanged": 34,
"System.oneqbandchanged": 34,
"System.triggeraction": 34,
"PopupMenu.checkcommand": 318,
"Button.onleftclick": 53,
"ComponentBucket.enumchildren": 52,
"ComponentBucket.getnumchildren": 52,
"System.getmonitorheight": 38,
"System.getmonitorwidth": 42,
"System.iskeydown": 129,
"GuiObject.setfocus": 163,
"TabSheet.getcurpage": 103,
"TabSheet.setcurpage": 103,
"Edit.onidleeditupdate": 89,
"System.playfile": 134,
"System.sin": 69,
"System.getalbumart": 48,
"GuiObject.ontargetreached": 9,
"Layout.getsnapadjustbottom": 26,
"Layout.getsnapadjustright": 8,
"Layout.getsnapadjusttop": 4,
"Layout.getsnapadjustleft": 4,
"Container.getnumlayouts": 4,
"Container.enumlayout": 8,
"Container.onswitchtolayout": 10,
"System.istransparencyavailable": 46,
"System.onstop": 6,
"System.onpause": 4,
"Frame.setposition": 10,
"Frame.getposition": 10,
"Text.ontextchanged": 14,
"System.sqrt": 42,
"List.additem": 58,
"List.enumitem": 58,
"System.removepath": 78,
"GuiObject.ismouseover": 15,
"GuiObject.getguih": 86,
"Container.hide": 78,
"System.switchskin": 263,
"System.isobjectvalid": 18,
"AnimatedLayer.getstartframe": 21,
"Layer.fx_setalphamode": 59,
"Layer.fx_setspeed": 71,
"System.cos": 53,
"System.pow": 34,
"List.removeitem": 14,
"Container.isdynamic": 4,
"System.onscriptloaded": 4,
"Layout.setscale": 86,
"System.getviewportleftfrompoint": 24,
"System.getviewporttopfrompoint": 24,
"System.getviewportwidthfrompoint": 24,
"System.getviewportheightfrompoint": 24,
"ConfigAttribute.getattributename": 38,
"GuiList.deselectall": 10,
"GuiList.setitemfocused": 14,
"GuiList.setselected": 6,
"System.acos": 4,
"CfgGroup.cfggetguid": 20,
"System.setclipboardtext": 28,
"System.getextension": 41,
"System.newgroupaslayout": 71,
"System.isappactive": 55,
"System.getcurappleft": 21,
"System.getcurapptop": 21,
"GuiObject.bringtofront": 63,
"Object.getclassname": 12,
"Group.getnumobjects": 26,
"Group.enumobject": 28,
"System.atan2": 20,
"PopupMenu.popatxy": 36,
"System.seteq": 47,
"System.getcurrenttrackrating": 12,
"System.setcurrenttrackrating": 12,
"PlEdit.getnumtracks": 20,
"GuiObject.getautoheight": 14,
"PlEdit.getcurrentindex": 18,
"PlEdit.gettitle": 18,
"PlEdit.getlength": 12,
"PlEdit.playtrack": 20,
"PlEdit.removetrack": 18,
"PlDir.getnumitems": 16,
"PlDir.getitemname": 16,
"PlEdit.getrating": 16,
"PlDir.playitem": 12,
"PlEdit.setrating": 16,
"AnimatedLayer.getautoreplay": 2,
"System.getpublicint": 18,
"System.setpublicint": 34,
"Layout.getscale": 40,
"System.getdate": 50,
"System.formatdate": 9,
"Timer.getskipped": 15,
"GuiObject.onleftbuttondown": 51,
"System.lockui": 59,
"System.unlockui": 62,
"System.setpublicstring": 18,
"GuiList.setautosort": 14,
"GuiList.setpreventmultipleselection": 14,
"GuiList.insertitem": 14,
"GuiList.getitemlabel": 18,
"GuiList.getitemfocused": 16,
"GuiList.deleteallitems": 18,
"System.datetolongtime": 8,
"System.formatlongdate": 8,
"System.ontitlechange": 13,
"GuiTree.setsorted": 14,
"GuiTree.enumrootitem": 14,
"GuiTree.getnumvisibleitems": 14,
"GuiTree.enumallitems": 14,
"GuiTree.movetreeitem": 14,
"TreeItem.setlabel": 14,
"GuiTree.addtreeitem": 14,
"GuiTree.selectitem": 14,
"GuiTree.getbylabel": 14,
"TreeItem.expand": 14,
"TreeItem.getlabel": 14,
"GuiList.setcolumnlabel": 14,
"GuiList.setcolumnwidth": 14,
"GuiList.addcolumn": 14,
"Edit.enter": 16,
"GuiList.setsubitem": 14,
"GuiList.getnumitems": 18,
"GuiList.getfirstitemselected": 14,
"GuiList.deletebypos": 18,
"DropDownList.setlistheight": 8,
"GuiObject.setenabled": 47,
"System.onkeydown": 2,
"PlEdit.movedown": 2,
"PlEdit.moveup": 2,
"System.popmainbrowser": 6,
"ComponentBucket.getscroll": 46,
"ComponentBucket.setscroll": 46,
"System.oninfochange": 4,
"GuiObject.clienttoscreenh": 23,
"GuiObject.reversetarget": 23,
"Layout.islayoutanimationsafe": 22,
"System.isnamedwindowvisible": 35,
"System.hidenamedwindow": 31,
"System.showwindow": 31,
"System.onshownotification": 7,
"Button.rightclick": 10,
"Vis.nextmode": 12,
"List.getnumitems": 38,
"GuiObject.bringtoback": 13,
"Group.islayout": 2,
"Slider.onsetfinalposition": 4,
"GuiObject.onresize": 49,
"Slider.onpostedposition": 4,
"CheckBox.ontoggle": 6,
"GuiObject.onaccelerator": 2,
"GuiObject.onenterarea": 2,
"GuiObject.onleavearea": 2,
"System.asin": 6,
"System.minimizeapplication": 11,
"GuiObject.onsetvisible": 22,
"Vis.setrealtime": 3,
"PlEdit.enqueuefile": 2,
"List.removeall": 6,
"PopupMenu.disablecommand": 7,
"System.atan": 24,
"System.getdatehour": 31,
"System.getpublicstring": 8,
"System.getwinampversion": 4,
"GuiObject.onrightbuttonup": 8,
"Layer.fx_restart": 4,
"System.getdatemin": 18,
"System.getdatesec": 4,
"GuiObject.endmodal": 5,
"GuiObject.onrightbuttondown": 8,
"System.frac": 4,
"GuiObject.clienttoscreeny": 6,
"DropDownList.deleteallitems": 4,
"DropDownList.additem": 4,
"DropDownList.finditem": 4,
"DropDownList.selectitem": 4,
"DropDownList.getselectedtext": 4,
"DropDownList.getnumitems": 4,
"GuiList.additem": 6,
"PlEdit.showtrack": 4,
"PlEdit.moveto": 4,
"PlEdit.getmetadata": 4,
"System.enqueuefile": 4,
"PlEdit.clear": 4,
"System.getcurappwidth": 13,
"System.getcurappheight": 13,
"GuiList.setitemlabel": 6,
"GuiList.setfontsize": 4,
"Layout.getdesktopalpha": 3,
"MouseRedir.setredirection": 6,
"AnimatedLayer.onframe": 4,
"Group.getmouseposx": 6,
"Group.getmouseposy": 10,
"Map.getregion": 3,
"GuiObject.screentoclienty": 4,
"GuiList.moveitem": 2,
"Layout.setredrawonresize": 1,
"AnimatedLayer.getdirection": 1,
"GuiObject.runmodal": 1
}
}

View file

@ -54,7 +54,7 @@ function isInState(store, predicate) {
});
}
// Given a skin directory in `modern/resources/testSkins/` loads it and returns
// Given a skin directory in `resources/testSkins/` loads it and returns
// an array representing all the calls to System.messagebox.
async function runSkin(skinDirectory) {
const skinDirectoryPath = path.join(

View file

@ -46,7 +46,7 @@ getMethod("Wac", "onNotify").result = "int";
Here's the error we get without that patch:
modern/__generated__/makiInterfaces.ts:254:18 - error TS2430: Interface 'Wac' incorrectly extends interface 'MakiObject'.
__generated__/makiInterfaces.ts:254:18 - error TS2430: Interface 'Wac' incorrectly extends interface 'MakiObject'.
Types of property 'onnotify' are incompatible.
Type '(notifstr: string, a: number, b: number) => void' is not assignable to type '(command: string, param: string, a: number, b: number) => number'.
Types of parameters 'a' and 'param' are incompatible.