From 564bef9cbb8f7449ac8a48a9917afb3399f935e5 Mon Sep 17 00:00:00 2001 From: jberg Date: Tue, 2 Jul 2019 20:19:55 -0700 Subject: [PATCH] multiple versions of maki compiler (#800) * multiple versions of maki compiler * move compilers to reference dir --- .../Lib/customseek.m | 111 + .../Lib/dragvolume.m | 67 + .../Lib/rotationlayer.m | 61 + .../v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/std.mi | 392 +++ .../v1.1.0.a9 (Winamp 3 alpha 8r)/mc.exe | Bin 0 -> 90112 bytes .../Lib/centerlayer.m | 47 + .../Lib/config.mi | 16 + .../Lib/customseek.m | 118 + .../Lib/dragvolume.m | 67 + .../Lib/pldir.mi | 5 + .../Lib/rotationlayer.m | 63 + .../Lib/std.mi | 2085 +++++++++++++ .../v1.1.1.b3 (Winamp 3.0 build 488d)/mc.exe | Bin 0 -> 107008 bytes .../Lib/avswitcher.m | 232 ++ .../Lib/buttonsounds.m | 84 + .../Lib/centerlayer.m | 47 + .../v1.1.1.b3 (Winamp 3.0 full)/Lib/config.mi | 16 + .../v1.1.1.b3 (Winamp 3.0 full)/Lib/core.mi | 74 + .../Lib/customseek.m | 118 + .../Lib/dragvolume.m | 67 + .../Lib/dumpcscript.m | 3 + .../v1.1.1.b3 (Winamp 3.0 full)/Lib/pldir.mi | 5 + .../Lib/rotationlayer.m | 63 + .../v1.1.1.b3 (Winamp 3.0 full)/Lib/std.mi | 2349 ++++++++++++++ .../v1.1.1.b3 (Winamp 3.0 full)/mc.exe | Bin 0 -> 110592 bytes .../v1.1.13 (Winamp 5.02)/lib/std.mi | 2472 +++++++++++++++ .../v1.1.13 (Winamp 5.02)/mc.exe | Bin 0 -> 113664 bytes .../v1.2.0 (Winamp 5.66)/lib/application.mi | 88 + .../v1.2.0 (Winamp 5.66)/lib/colormgr.mi | 119 + .../lib/com/AutoRepeatButton.m | 100 + .../lib/com/centerlayer.m | 84 + .../v1.2.0 (Winamp 5.66)/lib/com/customseek.m | 118 + .../v1.2.0 (Winamp 5.66)/lib/com/debug.m | 52 + .../lib/com/dispatch_ifc.m | 99 + .../v1.2.0 (Winamp 5.66)/lib/com/dragvolume.m | 67 + .../v1.2.0 (Winamp 5.66)/lib/com/fillbar.m | 173 + .../v1.2.0 (Winamp 5.66)/lib/com/glow.m | 111 + .../v1.2.0 (Winamp 5.66)/lib/com/glowobject.m | 176 ++ .../lib/com/rotationlayer.m | 108 + .../v1.2.0 (Winamp 5.66)/lib/com/songinfo.m | 104 + .../v1.2.0 (Winamp 5.66)/lib/config.mi | 29 + .../v1.2.0 (Winamp 5.66)/lib/core.mi | 81 + .../v1.2.0 (Winamp 5.66)/lib/exd.mi | 118 + .../v1.2.0 (Winamp 5.66)/lib/fileio.mi | 130 + .../v1.2.0 (Winamp 5.66)/lib/pldir.mi | 96 + .../v1.2.0 (Winamp 5.66)/lib/std.mi | 2777 +++++++++++++++++ .../v1.2.0 (Winamp 5.66)/lib/winampconfig.mi | 73 + .../maki_compiler/v1.2.0 (Winamp 5.66)/mc.exe | Bin 0 -> 74240 bytes .../v1.2.0 (Winamp 5.66)/nscrt.dll | Bin 0 -> 348160 bytes 49 files changed, 13265 insertions(+) create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/customseek.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/dragvolume.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/rotationlayer.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/std.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/mc.exe create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/centerlayer.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/config.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/customseek.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/dragvolume.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/pldir.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/rotationlayer.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/std.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/mc.exe create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/avswitcher.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/buttonsounds.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/centerlayer.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/config.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/core.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/customseek.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/dragvolume.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/dumpcscript.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/pldir.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/rotationlayer.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/Lib/std.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 full)/mc.exe create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.13 (Winamp 5.02)/lib/std.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.1.13 (Winamp 5.02)/mc.exe create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/application.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/colormgr.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/AutoRepeatButton.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/centerlayer.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/customseek.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/debug.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/dispatch_ifc.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/dragvolume.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/fillbar.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/glow.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/glowobject.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/rotationlayer.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/com/songinfo.m create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/config.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/core.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/exd.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/fileio.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/pldir.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/std.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/lib/winampconfig.mi create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/mc.exe create mode 100755 experiments/maki-interpreter/reference/maki_compiler/v1.2.0 (Winamp 5.66)/nscrt.dll diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/customseek.m b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/customseek.m new file mode 100755 index 00000000..f0fa045a --- /dev/null +++ b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/customseek.m @@ -0,0 +1,111 @@ +//---------------------------------------------------------------------------------------- +// +// customseek.m +// +//---------------------------------------------------------------------------------------- +// Use like this : +// #define CUSTOM_SEEK_VAR MyVar +// #include "customseek.m" +// +// +// What you need : +// _MyVarInit(Layer seeksurface, Layer seekghost, Map seekmap); +// _MyVarShutdown(); +// + + + +Global Layer _##CUSTOM_SEEK_VAR##Surface; +Global Layer _##CUSTOM_SEEK_VAR##Ghost; +Global Map _##CUSTOM_SEEK_VAR##Map; +Global Int _##CUSTOM_SEEK_VAR##Clicked; +Global Timer _##CUSTOM_SEEK_VAR##Timer; +Global Int _##CUSTOM_SEEK_VAR##CurPos; + +Function _##CUSTOM_SEEK_VAR##Init(Layer s, Layer g, Map m); +Function _##CUSTOM_SEEK_VAR##Update(int newpos); +Function _##CUSTOM_SEEK_VAR##UpdateXY(int x, int y); +Function _##CUSTOM_SEEK_VAR##SeekTo(int x, int y); +Function _##CUSTOM_SEEK_VAR##Shutdown(); + +_##CUSTOM_SEEK_VAR##Init(Layer s, Layer g, Map m) { + _##CUSTOM_SEEK_VAR##Surface = s; + _##CUSTOM_SEEK_VAR##Ghost = g; + _##CUSTOM_SEEK_VAR##Map = m; + _##CUSTOM_SEEK_VAR##Update(0); + _##CUSTOM_SEEK_VAR##Timer = new Timer; + _##CUSTOM_SEEK_VAR##Timer.setDelay(150); + _##CUSTOM_SEEK_VAR##Timer.start(); +} + +_##CUSTOM_SEEK_VAR##Shutdown() { + delete _##CUSTOM_SEEK_VAR##Timer; +} + +_##CUSTOM_SEEK_VAR##Surface.onLeftButtonDown(int x, int y) { + if (getPlayItemLength() == 0) return; + if (Strleft(getPlayItemString(), 4) == "http") return; + _##CUSTOM_SEEK_VAR##Clicked = 1; + _##CUSTOM_SEEK_VAR##UpdateXY(x, y); +} + +_##CUSTOM_SEEK_VAR##Surface.onMouseMove(int x, int y) { + if (_##CUSTOM_SEEK_VAR##Clicked) { + if (getPlayItemLength() == 0) { + _##CUSTOM_SEEK_VAR##Clicked = 0; + return; + } + _##CUSTOM_SEEK_VAR##UpdateXY(x, y); + } +} + +_##CUSTOM_SEEK_VAR##Surface.onLeftButtonUp(int x, int y) { + if (!_##CUSTOM_SEEK_VAR##Clicked) return; + _##CUSTOM_SEEK_VAR##Clicked = 0; + _##CUSTOM_SEEK_VAR##SeekTo(x, y); +} + +_##CUSTOM_SEEK_VAR##SeekTo(int x, int y) { + int n = _##CUSTOM_SEEK_VAR##Map.getValue(x, y); + seekTo(getPlayItemLength() * (n / 255)); +} + +_##CUSTOM_SEEK_VAR##UpdateXY(int x, int y) { + int n = _##CUSTOM_SEEK_VAR##Map.getValue(x, y); + Region r = new Region; + r.loadFromMap(_##CUSTOM_SEEK_VAR##Map, n, 1); + r.offset(-_##CUSTOM_SEEK_VAR##Ghost.getLeft(), -_##CUSTOM_SEEK_VAR##Ghost.getTop()); + _##CUSTOM_SEEK_VAR##Ghost.setRegion(r); + delete r; +} + +_##CUSTOM_SEEK_VAR##Update(int newpos) { + float p; + int l = getPlayItemLength(); + if (l == 0) p = 0; + else p = newpos / l * 255; + Region r = new Region; + r.loadFromMap(_##CUSTOM_SEEK_VAR##Map, p, 1); + _##CUSTOM_SEEK_VAR##CurPos = p; + r.offset(-_##CUSTOM_SEEK_VAR##Ghost.getLeft(), -_##CUSTOM_SEEK_VAR##Ghost.getTop()); + _##CUSTOM_SEEK_VAR##Ghost.setRegion(r); + delete r; +} + +_##CUSTOM_SEEK_VAR##Timer.onTimer() { + if (_##CUSTOM_SEEK_VAR##Clicked) return; + int l = getPlayItemLength(); + if (l > 0) { + int p = getPosition() / l * 255; + if (p != _##CUSTOM_SEEK_VAR##CurPos) { + _##CUSTOM_SEEK_VAR##Update(getPosition()); + } + } else { + if (_##CUSTOM_SEEK_VAR##CurPos != 0) + _##CUSTOM_SEEK_VAR##Update(0); + _##CUSTOM_SEEK_VAR##CurPos = 0; + } +} + + + diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/dragvolume.m b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/dragvolume.m new file mode 100755 index 00000000..8b93311d --- /dev/null +++ b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/dragvolume.m @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------------------- +// +// dragvolume.m +// +//---------------------------------------------------------------------------------------- +// Use like this : +// #define DRAG_VOLUME_VAR MyVar +// #include "dragvolume.m" +// +// +// _MyVarInit(AnimatedLayer l); // init dragvolume +// _MyVarSetMaxDistance(Int nPixels); // set 100% pixel distance +// + + + +Global AnimatedLayer _##DRAG_VOLUME_VAR##AnimLayer; +Global Int _##DRAG_VOLUME_VAR##Clicked; +Global Int _##DRAG_VOLUME_VAR##Y; +Global Int _##DRAG_VOLUME_VAR##V; +Global Int _##DRAG_VOLUME_VAR##Max; + +Function _##DRAG_VOLUME_VAR##Init(AnimatedLayer l); +Function _##DRAG_VOLUME_VAR##Update(int vol); +Function _##DRAG_VOLUME_VAR##SetMaxDistance(int pixels); +Function _##DRAG_VOLUME_VAR##UpdateY(int y); + +_##DRAG_VOLUME_VAR##Init(AnimatedLayer l) { + _##DRAG_VOLUME_VAR##AnimLayer = l; + _##DRAG_VOLUME_VAR##Update(getVolume()); +} + +_##DRAG_VOLUME_VAR##AnimLayer.onLeftButtonDown(int x, int y) { + _##DRAG_VOLUME_VAR##Clicked = 1; + _##DRAG_VOLUME_VAR##Y = y; + _##DRAG_VOLUME_VAR##V = getVolume(); +} + +_##DRAG_VOLUME_VAR##AnimLayer.onMouseMove(int x, int y) { + if (_##DRAG_VOLUME_VAR##Clicked) { + _##DRAG_VOLUME_VAR##updateY(y); + } +} + +_##DRAG_VOLUME_VAR##AnimLayer.onLeftButtonUp(int x, int y) { + _##DRAG_VOLUME_VAR##Clicked = 0; +} + +_##DRAG_VOLUME_VAR##SetMaxDistance(int npix) { + _##DRAG_VOLUME_VAR##Max = npix; +} + +_##DRAG_VOLUME_VAR##UpdateY(int y) { + float p = (_##DRAG_VOLUME_VAR##Y - y) / _##DRAG_VOLUME_VAR##Max; + SetVolume(_##DRAG_VOLUME_VAR##V + p * 255); // range is checked +} + +_##DRAG_VOLUME_VAR##Update(int vol) { + float p = vol / 255; + _##DRAG_VOLUME_VAR##AnimLayer.gotoFrame(p * (_##DRAG_VOLUME_VAR##AnimLayer.getLength()-1)); +} + +#ifndef _##DRAG_VOLUME_VAR##NOSYSTEMHOOK +System.onVolumeChanged(int newvol) { + _##DRAG_VOLUME_VAR##Update(newvol); +} +#endif diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/rotationlayer.m b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/rotationlayer.m new file mode 100755 index 00000000..9652db25 --- /dev/null +++ b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/rotationlayer.m @@ -0,0 +1,61 @@ +//---------------------------------------------------------------------------------------- +// +// rotationlayer.m +// +//---------------------------------------------------------------------------------------- +// Use like this : +// #define ROTATION_LAYER_VAR MyVar +// #include "rotationlayer.m" +// +// _MyVarInit(String containername, String layoutname, String layername); // init rotationlayer +// _MyVarRotateDegree(double r); // in degrees +// _MyVarRotate(double r); // in radians +// double _MyVarGetRotationDegree(); // in degrees +// double _MyVarGetRotation(); // in radians +// + +#define PI 3.1415926536 + +Global Double _##ROTATION_LAYER_VAR##R; +Global Layer _##ROTATION_LAYER_VAR##Layer; + +Function _##ROTATION_LAYER_VAR##Init(String containername, String layoutname, String layername); +Function _##ROTATION_LAYER_VAR##RotateDegree(double r); +Function _##ROTATION_LAYER_VAR##Rotate(double r); +Function double _##ROTATION_LAYER_VAR##GetRotationDegree(); +Function double _##ROTATION_LAYER_VAR##GetRotation(); + +_##ROTATION_LAYER_VAR##RotateDegree(double r) { + _##ROTATION_LAYER_VAR##Rotate(r * PI / 180.0); +} + +_##ROTATION_LAYER_VAR##Rotate(double r) { + _##ROTATION_LAYER_VAR##R = r; + _##ROTATION_LAYER_VAR##Layer.fx_update(); +} + +double _##ROTATION_LAYER_VAR##GetRotationDegree() { + return _##ROTATION_LAYER_VAR##R * 180 / PI; +} + +double _##ROTATION_LAYER_VAR##GetRotation() { + return _##ROTATION_LAYER_VAR##R; +} + +_##ROTATION_LAYER_VAR##Init(String containername, String layoutname, String layername) { + _##ROTATION_LAYER_VAR##Layer = getContainer(containername).getLayout(layoutname).getObject(layername); + _##ROTATION_LAYER_VAR##Layer.fx_setGridSize(1,1); + _##ROTATION_LAYER_VAR##Layer.fx_setBgFx(0); + _##ROTATION_LAYER_VAR##Layer.fx_setWrap(1); + _##ROTATION_LAYER_VAR##Layer.fx_setBilinear(1); + _##ROTATION_LAYER_VAR##Layer.fx_setRect(0); + _##ROTATION_LAYER_VAR##Layer.fx_setClear(0); + _##ROTATION_LAYER_VAR##Layer.fx_setLocalized(1); + _##ROTATION_LAYER_VAR##Layer.fx_setRealtime(0); + _##ROTATION_LAYER_VAR##Layer.fx_setEnabled(1); +} + +_##ROTATION_LAYER_VAR##Layer.fx_onGetPixelR(double r, double d, double x, double y) { + return r + _##ROTATION_LAYER_VAR##R; +} + diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/std.mi b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/std.mi new file mode 100755 index 00000000..ee48e189 --- /dev/null +++ b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/Lib/std.mi @@ -0,0 +1,392 @@ +//---------------------------------------------------------------------------------------------------------------- +// std.mi +// +// standard definitions for internal objects +//---------------------------------------------------------------------------------------------------------------- + +// GUIDS + +extern class @{51654971-0D87-4a51-91E3-A6B53235F3E7}@ @{00000000-0000-0000-0000-000000000000}@ Object; +extern class @{D6F50F64-93FA-49b7-93F1-BA66EFAE3E98}@ Object SystemObject; +extern class @{E90DC47B-840D-4ae7-B02C-040BD275F7FC}@ Object Container; +extern class @{00C074A0-FEA2-49a0-BE8D-FABBDB161640}@ Object Wac; +extern class @{B2023AB5-434D-4ba1-BEAE-59637503F3C6}@ Object &List; +extern class @{38603665-461B-42a7-AA75-D83F6667BF73}@ Object ⤅ +extern class @{F4787AF4-B2BB-4ef7-9CFB-E74BA9BEA88D}@ Object &PopupMenu; +extern class @{3A370C02-3CBF-439f-84F1-86885BCF1E36}@ Object &Region; +extern class @{5D0C5BB6-7DE1-4b1f-A70F-8D1659941941}@ Object &Timer; +extern class @{4EE3E199-C636-4bec-97CD-78BC9C8628B0}@ Object &GuiObject; +extern class @{45BE95E5-2072-4191-935C-BB5FF9F117FD}@ GuiObject &Group; +extern class @{60906D4E-537E-482e-B004-CC9461885672}@ Group &Layout; +extern class @{403ABCC0-6F22-4bd6-8BA4-10C829932547}@ GuiObject &Component; +extern class @{97AA3E4D-F4D0-4fa8-817B-0AF22A454983}@ GuiObject &ComponentBucket; +extern class @{64E4BBFA-81F4-49d9-B0C0-A85B2EC3BCFD}@ GuiObject &Edit; +extern class @{62B65E3F-375E-408d-8DEA-76814AB91B77}@ GuiObject &Slider; +extern class @{CE4F97BE-77B0-4e19-9956-D49833C96C27}@ GuiObject &Vis; +extern class @{A8C2200D-51EB-4b2a-BA7F-5D4BC65D4C71}@ GuiObject &Browser; +extern class @{8D1EBA38-489E-483e-B960-8D1F43C5C405}@ GuiObject &EqVis; +extern class @{0F08C940-AF39-4b23-80F3-B8C48F7EBB59}@ GuiObject &Status; +extern class @{EFAA8672-310E-41fa-B7DC-85A9525BCB4B}@ GuiObject &Text; +extern class @{7DFD3244-3751-4e7c-BF40-82AE5F3ADC33}@ GuiObject &Title; +extern class @{5AB9FA15-9A7D-4557-ABC8-6557A6C67CA9}@ GuiObject &Layer; +extern class @{698EDDCD-8F1E-4fec-9B12-F944F909FF45}@ GuiObject &Button; +extern class @{6B64CD27-5A26-4c4b-8C59-E6A70CF6493A}@ Layer &AnimatedLayer; +extern class @{B4DCCFFF-81FE-4bcc-961B-720FD5BE0FFF}@ Button &ToggleButton; + +// class tree member functions & events + + // Object + +extern String Object.getClassName(); +extern String Object.getId(); +extern Int Object.onNotify(String, int, int); + + // System + +extern SystemObject.onScriptLoaded(); +extern SystemObject.onScriptUnloading(); +extern SystemObject.onQuit(); +extern SystemObject.onKeyDown(String); +extern SystemObject.onCreateLayout(Layout); +extern SystemObject.onShowLayout(Layout); +extern SystemObject.onHideLayout(Layout); +extern SystemObject.onStop(); +extern SystemObject.onPlay(); +extern SystemObject.onPause(); +extern SystemObject.onResume(); +extern SystemObject.onTitleChange(String); +extern SystemObject.onEqBandChanged(int, int); +extern SystemObject.onEqPreampChanged(int); +extern SystemObject.onEqChanged(int); +extern SystemObject.onVolumeChanged(int); +extern SystemObject.onSeek(int); +extern Container SystemObject.getContainer(String); +extern Container SystemObject.newDynamicContainer(String); +extern Int SystemObject.getNumContainers(); +extern Container SystemObject.enumContainer(Int); +extern Wac SystemObject.getWac(String); +extern Int SystemObject.messageBox(String, String, Int, String); +extern String SystemObject.getPlayItemString(); +extern Int SystemObject.getPlayItemLength(); +extern String SystemObject.getPlayItemMetaDataString(String); +extern SystemObject.playFile(String); +extern Int SystemObject.getLeftVuMeter(); +extern Int SystemObject.getRightVuMeter(); +extern Int SystemObject.getVolume(); +extern SystemObject.setVolume(Int); +extern SystemObject.play(); +extern SystemObject.stop(); +extern SystemObject.pause(); +extern SystemObject.next(); +extern SystemObject.previous(); +extern SystemObject.eject(); +extern SystemObject.seekTo(Int); +extern Int SystemObject.getPosition(); +extern SystemObject.setEqBand(int, Int); +extern SystemObject.setEqPreamp(Int); +extern SystemObject.setEq(Int); +extern Int SystemObject.getEqBand(int); +extern int SystemObject.getEqPreamp(); +extern int SystemObject.getEq(); +extern int SystemObject.getMousePosX(); +extern int SystemObject.getMousePosY(); +extern String SystemObject.integerToString(Int); +extern Int SystemObject.StringToInteger(String); +extern String SystemObject.floatToString(float, int); +extern Float SystemObject.stringToFloat(String); +extern String SystemObject.integerToTime(Int); +extern String SystemObject.strmid(String, Int, Int); +extern String SystemObject.Strleft(string, int); +extern string SystemObject.strright(string, int); +extern int SystemObject.strsearch(string, string); +extern int SystemObject.strlen(string); +extern string SystemObject.strupper(string); +extern string SystemObject.strlower(string); +extern string SystemObject.urlEncode(string); +extern string SystemObject.removePath(string); +extern string SystemObject.getToken(string, string, int); +extern double SystemObject.sin(double); +extern double SystemObject.cos(double); +extern double SystemObject.tan(double); +extern double SystemObject.asin(double); +extern double SystemObject.acos(double); +extern double SystemObject.atan(double); +extern double SystemObject.pow(double); +extern double SystemObject.sqr(double); +extern double SystemObject.sqrt(double); +extern int SystemObject.random(int); +extern SystemObject.setPrivateString(string, string, string); +extern SystemObject.setPrivateInt(string, string, int); +extern String SystemObject.getPrivateString(String, String, String); +extern Int SystemObject.getPrivateInt(String, String, Int); +extern SystemObject.setPublicString(String, String); +extern SystemObject.setPublicInt(String, Int); +extern String SystemObject.getPublicString(String, String); +extern Int SystemObject.getPublicInt(String, Int); +extern String SystemObject.getParam(); +extern Int SystemObject.getViewportWidth(); +extern Int SystemObject.getViewportHeight(); +extern SystemObject.debugString(String, Int); +extern SystemObject.ddeSend(String, String, Int); + + // Container + +extern Container.onSwitchToLayout(Layout); +extern Container.onHideLayout(Layout); +extern Container.onShowLayout(Layout); +extern Layout Container.getLayout(String); +extern Int Container.getNumLayouts(); +extern Layout Container.enumLayout(Int); +extern Container.switchToLayout(Layout); +extern Container.show(); +extern Container.hide(); +extern Container.toggle(); + + // Wac + +extern String Wac.getGuid(); +extern String Wac.getName(); +extern Int Wac.sendCommand(String, Int, Int, String); +extern Wac.show(); +extern Wac.hide(); +extern Boolean Wac.isVisible(); +extern Wac.onNotify(String, Int, Int); +extern Wac.onShow(); +extern Wac.onHide(); +extern Wac.setStatusBar(Boolean); +extern Boolean Wac.getStatusBar(); + + + // GuiObject + +extern GuiObject.show(); +extern GuiObject.hide(); +extern int GuiObject.isVisible(); +extern GuiObject.onSetVisible(Boolean); +extern GuiObject.setAlpha(int); +extern int GuiObject.getAlpha(); +extern GuiObject.onLeftButtonUp(int, int); +extern GuiObject.onLeftButtonDown(int, int); +extern GuiObject.onRightButtonUp(int, int); +extern GuiObject.onRightButtonDown(int, int); +extern GuiObject.onRightButtonDblClk(int, int); +extern GuiObject.onLeftButtonDblClk(int, int); +extern GuiObject.onMouseMove(int, int); +extern GuiObject.onEnterArea(); +extern GuiObject.onLeaveArea(); +extern GuiObject.setEnabled(boolean); +extern boolean GuiObject.getEnabled(); +extern GuiObject.onEnable(boolean); +extern GuiObject.resize(int, int, int, int); +extern GuiObject.onResize(int, int, int, int); +extern boolean GuiObject.isMouseOver(int, int); +extern int GuiObject.getLeft(); +extern int GuiObject.getTop(); +extern int GuiObject.getWidth(); +extern int GuiObject.getHeight(); +extern GuiObject.setTargetX(int); +extern GuiObject.setTargetY(int); +extern GuiObject.setTargetW(int); +extern GuiObject.setTargetH(int); +extern GuiObject.setTargetA(int); +extern GuiObject.setTargetSpeed(float); +extern GuiObject.gotoTarget(); +extern GuiObject.onTargetReached(); +extern boolean GuiObject.isGoingToTarget(); +extern GuiObject.setXmlParam(String, String); +extern GuiObject.init(Layout); +extern GuiObject.bringToFront(); +extern GuiObject.bringToBack(); +extern GuiObject.bringAbove(GuiObject); +extern GuiObject.bringBelow(GuiObject); + // Group + +extern GuiObject Group.getObject(String); +extern Int Group.getNumObjects(); +extern GuiObject Group.enumObject(Int); +extern Group.onCreateObject(GuiObject); +extern Int Group.getMousePosX(); +extern Int Group.getMousePosY(); + + + // Layout + +extern Layout.onDock(); +extern Layout.onUndock(); +extern Layout.onScale(Double); +extern Double Layout.getScale(); +extern Layout.setScale(Double); + + + // List + +extern List.addItem(Any); +extern List.removeItem(int); +extern Any List.enumItem(int); +extern Int List.findItem(Any); +extern int List.getNumItems(); +extern List.removeAll(); + + // Map + +extern Int Map.getValue(int, int); +extern Boolean Map.inRegion(int, int); +extern Map.loadMap(String); +extern Int Map.getWidth(); +extern Int Map.getHeight(); +extern Region Map.getRegion(); + + // PopupMenu + +extern PopupMenu.addSubMenu(PopupMenu, String); +extern PopupMenu.addCommand(String, Int, Boolean, Boolean); +extern PopupMenu.addSeparator(); +extern Int PopupMenu.popAtXY(int, int); +extern Int PopupMenu.popAtMouse(); +extern Int PopupMenu.getNumCommands(); +extern PopupMenu.checkCommand(int, boolean); +extern PopupMenu.disableCommand(int, boolean); + + // Region + +extern Region.add(Region); +extern Region.sub(Region); +extern Region.offset(int, int); +extern Region.stretch(double); +extern Region.copy(Region); +extern Region.loadFromMap(Map, Int, Boolean); +extern Region.loadFromBitmap(String); +extern Int Region.getBoundingBoX(); +extern Int Region.getBoundingBoY(); +extern Int Region.getBoundingBoW(); +extern Int Region.getBoundingBoH(); + + // Timer + +extern Timer.onTimer(); +extern Timer.setDelay(int); +extern Int Timer.getDelay(); +extern Timer.start(); +extern Timer.stop(); + + // Component + +extern Component.onGetWac(Wac); +extern String Component.getGuid(); +extern Wac Component.getWac(); +extern Component.setRegionFromMap(Map, Int, Boolean); +extern Component.setRegion(Region); + + // Edit + +extern Edit.onEnter(); +extern Edit.onAbort(); +extern Edit.onIdleEditUpdate(); +extern Edit.onEditUpdate(); +extern Edit.setText(String); +extern String Edit.getText(); + + // Slider + +extern Slider.onSetPosition(int); +extern Slider.onPostedPosition(int); +extern Slider.onSetFinalPosition(int); +extern Slider.setPosition(int); +extern Int Slider.getPosition(); + + // Vis + +extern Vis.onFrame(); +extern Vis.setRealtime(Boolean); +extern Boolean Vis.getRealtime(); + + // Browser + +extern Browser.gotoUrl(String); +extern Browser.back(); +extern Browser.forward(); + + // Text + +extern Text.setText(String); + + // Layer + +extern Layer.onBeginResize(int, int, int, int); +extern Layer.onEndResize(int, int, int, int); +extern Layer.fx_onInit(); +extern Layer.fx_onFrame(); +extern Double Layer.fx_onGetPixelR(double, double, double, double); +extern Double Layer.fx_onGetPixelD(double, double, double, double); +extern Double Layer.fx_onGetPixelX(double, double, double, double); +extern Double Layer.fx_onGetPixelY(double, double, double, double); +extern Double Layer.fx_onGetPixelA(double, double, double, double); +extern Layer.setRegionFromMap(Map, int, boolean); +extern Layer.setRegion(Region); +extern Layer.fx_setEnabled(boolean); +extern Boolean Layer.fx_getEnabled(); +extern Layer.fx_setWrap(Boolean); +extern Boolean Layer.fx_getWrap(); +extern Layer.fx_setRect(Boolean); +extern Boolean Layer.fx_getRect(); +extern Layer.fx_setBgFx(Boolean); +extern Boolean Layer.fx_getBgFx(); +extern Layer.fx_setClear(Boolean); +extern Boolean Layer.fx_getClear(); +extern Layer.fx_setSpeed(Int); +extern Int Layer.fx_getSpeed(); +extern Layer.fx_setRealtime(Boolean); +extern Boolean Layer.fx_getRealtime(); +extern Layer.fx_setLocalized(Boolean); +extern Boolean Layer.fx_getLocalized(); +extern Layer.fx_setBilinear(Boolean); +extern Boolean Layer.fx_getBilinear(); +extern Layer.fx_setAlphaMode(Boolean); +extern Boolean Layer.fx_getAlphaMode(); +extern Layer.fx_setGridSize(Int, Int); +extern Layer.fx_update(); +extern Layer.fx_restart(); + + // Button + +extern Button.onActivate(); +extern Button.onLeftClick(); +extern Button.onRightClick(); +extern Button.setActivated(Boolean); +extern Boolean Button.getActivated(); +extern Button.leftClick(); +extern Button.rightClick(); + + // AnimatedLayer + +extern AnimatedLayer.onPlay(); +extern AnimatedLayer.onPause(); +extern AnimatedLayer.onResume(); +extern AnimatedLayer.onStop(); +extern AnimatedLayer.onFrame(Int); +extern AnimatedLayer.setSpeed(Int); +extern AnimatedLayer.gotoFrame(int); +extern AnimatedLayer.setStartFrame(Int); +extern AnimatedLayer.setEndFrame(int); +extern AnimatedLayer.setAutoReplay(Boolean); +extern AnimatedLayer.play(); +extern AnimatedLayer.stop(); +extern AnimatedLayer.pause(); +extern Boolean AnimatedLayer.isPlaying(); +extern Boolean AnimatedLayer.isPaused(); +extern Boolean AnimatedLayer.isStopped(); +extern Int AnimatedLayer.getStartFrame(); +extern Int AnimatedLayer.getEndFrame(); +extern Int AnimatedLayer.getLength(); +extern Int AnimatedLayer.getDirection(); +extern Boolean AnimatedLayer.getAutoReplay(); +extern Int AnimatedLayer.getCurFrame(); +extern AnimatedLayer.setRealtime(Boolean); + + // ToggleButton + +extern ToggleButton.onToggle(Boolean); + + +.CODE + diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/mc.exe b/experiments/maki-interpreter/reference/maki_compiler/v1.1.0.a9 (Winamp 3 alpha 8r)/mc.exe new file mode 100755 index 0000000000000000000000000000000000000000..d574c25e30a2042916283f218e78286a60ba67ec GIT binary patch literal 90112 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 0) { + int p = getPosition() / l * 255; + if (p != _##CUSTOM_SEEK_VAR##CurPos) { + _##CUSTOM_SEEK_VAR##Update(getPosition()); + } + } else { + if (_##CUSTOM_SEEK_VAR##CurPos != 0) + _##CUSTOM_SEEK_VAR##Update(0); + _##CUSTOM_SEEK_VAR##CurPos = 0; + } +} + + + diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/dragvolume.m b/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/dragvolume.m new file mode 100755 index 00000000..8b93311d --- /dev/null +++ b/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/dragvolume.m @@ -0,0 +1,67 @@ +//---------------------------------------------------------------------------------------- +// +// dragvolume.m +// +//---------------------------------------------------------------------------------------- +// Use like this : +// #define DRAG_VOLUME_VAR MyVar +// #include "dragvolume.m" +// +// +// _MyVarInit(AnimatedLayer l); // init dragvolume +// _MyVarSetMaxDistance(Int nPixels); // set 100% pixel distance +// + + + +Global AnimatedLayer _##DRAG_VOLUME_VAR##AnimLayer; +Global Int _##DRAG_VOLUME_VAR##Clicked; +Global Int _##DRAG_VOLUME_VAR##Y; +Global Int _##DRAG_VOLUME_VAR##V; +Global Int _##DRAG_VOLUME_VAR##Max; + +Function _##DRAG_VOLUME_VAR##Init(AnimatedLayer l); +Function _##DRAG_VOLUME_VAR##Update(int vol); +Function _##DRAG_VOLUME_VAR##SetMaxDistance(int pixels); +Function _##DRAG_VOLUME_VAR##UpdateY(int y); + +_##DRAG_VOLUME_VAR##Init(AnimatedLayer l) { + _##DRAG_VOLUME_VAR##AnimLayer = l; + _##DRAG_VOLUME_VAR##Update(getVolume()); +} + +_##DRAG_VOLUME_VAR##AnimLayer.onLeftButtonDown(int x, int y) { + _##DRAG_VOLUME_VAR##Clicked = 1; + _##DRAG_VOLUME_VAR##Y = y; + _##DRAG_VOLUME_VAR##V = getVolume(); +} + +_##DRAG_VOLUME_VAR##AnimLayer.onMouseMove(int x, int y) { + if (_##DRAG_VOLUME_VAR##Clicked) { + _##DRAG_VOLUME_VAR##updateY(y); + } +} + +_##DRAG_VOLUME_VAR##AnimLayer.onLeftButtonUp(int x, int y) { + _##DRAG_VOLUME_VAR##Clicked = 0; +} + +_##DRAG_VOLUME_VAR##SetMaxDistance(int npix) { + _##DRAG_VOLUME_VAR##Max = npix; +} + +_##DRAG_VOLUME_VAR##UpdateY(int y) { + float p = (_##DRAG_VOLUME_VAR##Y - y) / _##DRAG_VOLUME_VAR##Max; + SetVolume(_##DRAG_VOLUME_VAR##V + p * 255); // range is checked +} + +_##DRAG_VOLUME_VAR##Update(int vol) { + float p = vol / 255; + _##DRAG_VOLUME_VAR##AnimLayer.gotoFrame(p * (_##DRAG_VOLUME_VAR##AnimLayer.getLength()-1)); +} + +#ifndef _##DRAG_VOLUME_VAR##NOSYSTEMHOOK +System.onVolumeChanged(int newvol) { + _##DRAG_VOLUME_VAR##Update(newvol); +} +#endif diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/pldir.mi b/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/pldir.mi new file mode 100755 index 00000000..4529e897 --- /dev/null +++ b/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/pldir.mi @@ -0,0 +1,5 @@ +extern class @{61A7ABAD-7D79-41f6-B1D0-E1808603A4F4}@ Object _predecl PlDir; + +extern PlDir.showCurrentlyPlayingEntry(); + + diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/rotationlayer.m b/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/rotationlayer.m new file mode 100755 index 00000000..ba8a2796 --- /dev/null +++ b/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/rotationlayer.m @@ -0,0 +1,63 @@ +//---------------------------------------------------------------------------------------- +// +// rotationlayer.m +// +//---------------------------------------------------------------------------------------- +// Use like this : +// #define ROTATION_LAYER_VAR MyVar +// #include "rotationlayer.m" +// +// _MyVarInit(Group parentgroup, String layername); // init rotationlayer +// _MyVarRotateDegree(double r); // in degrees +// _MyVarRotate(double r); // in radians +// double _MyVarGetRotationDegree(); // in degrees +// double _MyVarGetRotation(); // in radians +// + +#ifndef PI +#define PI 3.1415926536 +#endif + +Global Double _##ROTATION_LAYER_VAR##R; +Global Layer _##ROTATION_LAYER_VAR##Layer; + +Function _##ROTATION_LAYER_VAR##Init(Group parentgroup, String layername); +Function _##ROTATION_LAYER_VAR##RotateDegree(double r); +Function _##ROTATION_LAYER_VAR##Rotate(double r); +Function double _##ROTATION_LAYER_VAR##GetRotationDegree(); +Function double _##ROTATION_LAYER_VAR##GetRotation(); + +_##ROTATION_LAYER_VAR##RotateDegree(double r) { + _##ROTATION_LAYER_VAR##Rotate(r * PI / 180.0); +} + +_##ROTATION_LAYER_VAR##Rotate(double r) { + _##ROTATION_LAYER_VAR##R = r; + _##ROTATION_LAYER_VAR##Layer.fx_update(); +} + +double _##ROTATION_LAYER_VAR##GetRotationDegree() { + return _##ROTATION_LAYER_VAR##R * 180 / PI; +} + +double _##ROTATION_LAYER_VAR##GetRotation() { + return _##ROTATION_LAYER_VAR##R; +} + +_##ROTATION_LAYER_VAR##Init(Group parentgroup, String layername) { + _##ROTATION_LAYER_VAR##Layer = parentgroup.getObject(layername); + _##ROTATION_LAYER_VAR##Layer.fx_setGridSize(1,1); + _##ROTATION_LAYER_VAR##Layer.fx_setBgFx(0); + _##ROTATION_LAYER_VAR##Layer.fx_setWrap(1); + _##ROTATION_LAYER_VAR##Layer.fx_setBilinear(1); + _##ROTATION_LAYER_VAR##Layer.fx_setRect(0); + _##ROTATION_LAYER_VAR##Layer.fx_setClear(0); + _##ROTATION_LAYER_VAR##Layer.fx_setLocalized(1); + _##ROTATION_LAYER_VAR##Layer.fx_setRealtime(0); + _##ROTATION_LAYER_VAR##Layer.fx_setEnabled(1); +} + +_##ROTATION_LAYER_VAR##Layer.fx_onGetPixelR(double r, double d, double x, double y) { + return r + _##ROTATION_LAYER_VAR##R; +} + diff --git a/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/std.mi b/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/std.mi new file mode 100755 index 00000000..443f7dd0 --- /dev/null +++ b/experiments/maki-interpreter/reference/maki_compiler/v1.1.1.b3 (Winamp 3.0 build 488d)/Lib/std.mi @@ -0,0 +1,2085 @@ +//---------------------------------------------------------------------------------------------------------------- +// std.mi +// +// standard definitions for internal objects +//---------------------------------------------------------------------------------------------------------------- + +#ifndef true +#define true 1 +#endif +#ifndef false +#define false 0 +#endif + + +// GUIDS +extern class @{51654971-0D87-4a51-91E3-A6B53235F3E7}@ @{00000000-0000-0000-0000-000000000000}@ Object; +extern class @{D6F50F64-93FA-49b7-93F1-BA66EFAE3E98}@ Object _predecl System; +extern class @{E90DC47B-840D-4ae7-B02C-040BD275F7FC}@ Object Container; +extern class @{00C074A0-FEA2-49a0-BE8D-FABBDB161640}@ Object Wac; +extern class @{B2023AB5-434D-4ba1-BEAE-59637503F3C6}@ Object &List; +extern class @{38603665-461B-42a7-AA75-D83F6667BF73}@ Object ⤅ +extern class @{F4787AF4-B2BB-4ef7-9CFB-E74BA9BEA88D}@ Object &PopupMenu; +extern class @{3A370C02-3CBF-439f-84F1-86885BCF1E36}@ Object &Region; +extern class @{5D0C5BB6-7DE1-4b1f-A70F-8D1659941941}@ Object &Timer; +extern class @{4EE3E199-C636-4bec-97CD-78BC9C8628B0}@ Object &GuiObject; +extern class @{45BE95E5-2072-4191-935C-BB5FF9F117FD}@ GuiObject &Group; +extern class @{60906D4E-537E-482e-B004-CC9461885672}@ Group &Layout; +extern class @{403ABCC0-6F22-4bd6-8BA4-10C829932547}@ GuiObject &Component; +extern class @{97AA3E4D-F4D0-4fa8-817B-0AF22A454983}@ GuiObject &ComponentBucket; +extern class @{64E4BBFA-81F4-49d9-B0C0-A85B2EC3BCFD}@ GuiObject &Edit; +extern class @{62B65E3F-375E-408d-8DEA-76814AB91B77}@ GuiObject &Slider; +extern class @{CE4F97BE-77B0-4e19-9956-D49833C96C27}@ GuiObject &Vis; +extern class @{A8C2200D-51EB-4b2a-BA7F-5D4BC65D4C71}@ GuiObject &Browser; +extern class @{8D1EBA38-489E-483e-B960-8D1F43C5C405}@ GuiObject &EqVis; +extern class @{0F08C940-AF39-4b23-80F3-B8C48F7EBB59}@ GuiObject &Status; +extern class @{EFAA8672-310E-41fa-B7DC-85A9525BCB4B}@ GuiObject &Text; +extern class @{7DFD3244-3751-4e7c-BF40-82AE5F3ADC33}@ GuiObject &Title; +extern class @{5AB9FA15-9A7D-4557-ABC8-6557A6C67CA9}@ GuiObject &Layer; +extern class @{698EDDCD-8F1E-4fec-9B12-F944F909FF45}@ GuiObject &Button; +extern class @{6B64CD27-5A26-4c4b-8C59-E6A70CF6493A}@ Layer &AnimatedLayer; +extern class @{B4DCCFFF-81FE-4bcc-961B-720FD5BE0FFF}@ Button &ToggleButton; +extern class @{01E28CE1-B059-11d5-979F-E4DE6F51760A}@ GuiObject &GroupList; +extern class @{80F0F8BD-1BA5-42a6-A093-3236A00C8D4A}@ Group &CfgGroup; +extern class @{CDCB785D-81F2-4253-8F05-61B872283CFA}@ GuiObject &QueryList; +extern class @{9B2E341B-6C98-40fa-8B85-0C1B6EE89405}@ GuiObject &MouseRedir; +extern class @{36D59B71-03FD-4af8-9795-0502B7DB267A}@ GuiObject &DropDownList; +extern class @{7FD5F210-ACC4-48df-A6A0-5451576CDC76}@ GuiObject &LayoutStatus; +extern class @{B5BAA535-05B3-4dcb-ADC1-E618D28F6896}@ GuiObject &TabSheet; + + +// class tree member functions & events + +//***************************************************************************** +// Object CLASS +//***************************************************************************** +/** + Object Class. + + @short This is the base class from which all other classes inherit. + @author Nullsoft Inc. + @ver 1.0 +*/ + +/** + getClassName() + + Returns the class name for the object. + + @ret The class name. +*/ +extern String Object.getClassName(); + +/** + getId() + +*/ +extern String Object.getId(); + +/** + onNotify() + + @ret + @param command + @param param + @param a + @param b +*/ +extern Int Object.onNotify(String command, String param, int a, int b); + +//***************************************************************************** +// System CLASS +//***************************************************************************** +/** + System Class. + + @short The system class are basic system functions accessible to all. + @author Nullsoft Inc. + @ver 1.0 +*/ + +/** + onScriptLoaded() + + Hookable. Event happens when script has just finished being loaded. + No params. +*/ +extern System.onScriptLoaded(); + +/** + onScriptUnloading() + + Hookable. Event happens when script is going to be unloaded. + No params. +*/ +extern System.onScriptUnloading(); + +/** + onQuit() + + Hookable. Event happens when the user quits the application. + No params. +*/ +extern System.onQuit(); + +/** + onSetXuiParam(String param, String value) + + Hookable. Event happens when the script is in a group implementing + an xuiobject and a parameter has not been recognized by the group or + the embedded object. + + No params. +*/ +extern System.onSetXuiParam(String param, String value); + +/** + onKeyDown() + + Hookable. Event happens when the user presses a key on the keyboard. + + @param key The key that was pressed. +*/ +extern System.onKeyDown(String key); + +/** + onAccelerator() + + Hookable. Event happens when the user presses an accelerator key. + + @param action The action to perform (from locales) + @param section The locales section for the accelerator. + @param key The key, ie: "tab", "ctrl+a". +*/ +extern System.onAccelerator(String action, String section, String key); + +/** + onCreateLayout() + + Hookable. Event happens when a layout is created. + + @param _layout The layout that was just created. +*/ +extern System.onCreateLayout(Layout _layout); + +/** + onShowLayout() + + Hookable. Event happens when a layout is about to be shown. + This even only happens if the layout was previously hidden. + + @param _layout The layout that's about to be shown. +*/ +extern System.onShowLayout(Layout _layout); + +/** + onHideLayout() + + Hookable. + + @param _layout The layout that's about to be hidden. +*/ +extern System.onHideLayout(Layout _layout); + +/** + onStop() + + Hookable. Event happens when Winamp3 stops playing a file. + No params. +*/ +extern System.onStop(); + +/** + onPlay() + + Hookable. Event happens when Winamp3 starts playing a file. + No params. +*/ +extern System.onPlay(); + +/** + onPause() + + Hookable. Event happens when Winamp3 pauses playback. + No params. +*/ +extern System.onPause(); + +/** + onResume() + + Hookable. Event happens when Winamp3 resumes playback. + Event only happens when the song was previously set in a paused state. + No params. +*/ +extern System.onResume(); + +/** + onTitleChange() + + Hookable. Event happens when the song title changes. +*/ +extern System.onTitleChange(String newtitle); + +extern System.onTitle2Change(String newtitle2); +extern System.onInfoChange(String info); +extern System.onStatusMsg(String msg); + +/** + onEqBandChanged() + + Hookable. Event happens when an equalizer band changes values. + The bands are numbered from 0 to 9 (0 being 60Hz and 9 being 16kHz) + and their values range from -127 to +127. + + @param band The frequency band that has changed. + @param newvalue The new value of the frequency band. +*/ +extern System.onEqBandChanged(int band, int newvalue); + +/** + onEqPreampChanged() + + Hookable. Event happens when the equalizer pre-amp has changed + values. Range of the value is from -127 to +127. + + @param newvalue The new pre-amp value. +*/ +extern System.onEqPreampChanged(int newvalue); + +/** + onEqChanged() + + Hookable. Event happens when the EQ is switched on or off. + 0 means the EQ was turned off. 1 means it was turned on. + You might want to use true and false to verify this, it's a bit + more elegant. :) + + @param newstatus The new status of the EQ. +*/ +extern System.onEqChanged(int newstatus); + +/** + onVolumeChanged() + + Hookable. Event happens when the volume was changed. + The range of the volume is from 0 to 255. + + @param newvol The new volume value. +*/ +extern System.onVolumeChanged(int newvol); + +/** + onSeek() + + Hookable. Event happens when the user seeks + to a position in the track. + + @param newpos The seekers new position. +*/ +extern System.onSeek(int newpos); + +/** + getContainer() + + @ret The requested container. + @param container_id The containers identifier string. +*/ +extern Container System.getContainer(String container_id); + +/** + newDynamicContainer() + + @ret The new container. + @param container_id The identifier for the container you want to create. +*/ +extern Container System.newDynamicContainer(String container_id); + +/** + newGroup() + + @ret The new group. + @param group_id The identifier for the group you want to create. +*/ +extern Group System.newGroup(String group_id); + +extern Layout System.newGroupAsLayout(String group_id); + +/** + getNumContainers() + + Get the number of containers currently created. + + @ret The number of containers. +*/ +extern Int System.getNumContainers(); + +/** + enumContainer() + + Returns the name of the container associated with it's number. + Use getNumContainers() to fetch the number of containers present. + The containers are numbered from 0 to the value returned by getNumContainers(). + + @ret The name of the specified container. + @param num The container's number for which you want to know the name. +*/ +extern Container System.enumContainer(Int num); + +/** + getWac() + + Gets the reference to the wac identified by the guid sent. + + @ret The requested WAC. + @param wac_guid The WAC's GUID. +*/ +extern Wac System.getWac(String wac_guid); + +/** + messageBox() + + Creates a message box. + The flag paramater lets you set the style of the message box. + Just use the OR bitwise operator to set the style you want. + Here's a list of the flags you can use: + + MSGBOX_OK Adds an OK button. (1) + MSGBOX_CANCEL Adds a CANCEL button. (2) + MSGBOX_YES Adds a YES button. (4) + MSGBOX_NO Adds a NO button. (8) + MSGBOX_ALL Adds ALL buttons. (16) + MSGBOX_NEXT Adds a NEXT button. (32) + MSGBOX_PREVIOUS Adds a PREVIOUS button. (64) + + Note that the notanymore_id parameter stores the users answer in the + configuration file with the entry name specified by it's value. + + @ret The value of the button that was pressed (example: if OK is pressed, 1 is returned). + @param message The message you want to display. + @param msgtitle The title of the message box. + @param flag The message box style you want. + @param notanymore_id Configuration item name in which to store the users answer. +*/ +extern Int System.messageBox(String message, String msgtitle, Int flag, String notanymore_id); + +/** + getPlayItemString() + + @ret The name of what is playing. +*/ +extern String System.getPlayItemString(); + +/** + getPlayItemLength() + + Get the length of the track currently playing, in milliseconds. + + @ret Length of the track, in seconds. +*/ +extern Int System.getPlayItemLength(); + +/** + getPlayItemMetaDataString() + + Get metadata for the track currently playing. The metadata field names that + are available are the following: + + **ADD LIST** + + @ret The requested metadata. + @param metadataname The name of the metadata field you want to read. +*/ +extern String System.getPlayItemMetaDataString(String metadataname); + +/** + playFile() + + Play the requested file. Path and filename are required + with proper extension (example: playFile("c:\music\mp3\file.mp3"); ). + It also works with URL's (example: playFile("http://myshoutcast.com:8000"); ). + + @param playitem The path and filename to play. +*/ +extern System.playFile(String playitem); + +/** + getLeftVuMeter() + + Get the value of the left vu meter. + Range is from 0 to 255. Linear. + + @ret The value of the left vu meter. +*/ +extern Int System.getLeftVuMeter(); + +/** + getRightVuMeter() + + Get the value of the right vu meter. + Range is from 0 to 255. Linear. + + @ret The value of the left vu meter. +*/ +extern Int System.getRightVuMeter(); + +/** + getVolume() + + Get the current volume. Range is from 0 to 255. + + @ret The current volume. +*/ +extern Int System.getVolume(); + +/** + setVolume() + + Set the volume to the desired value. + Range is from 0 to 255. + + @param vol The desired volume value. +*/ +extern System.setVolume(Int vol); + +/** + play() + + Trigger the play event. +*/ +extern System.play(); + +/** + stop() + + Trigger the stop event. +*/ +extern System.stop(); + +/** + pause() + + Trigger the pause event. +*/ +extern System.pause(); + +/** + next() + + Trigger the next event. +*/ +extern System.next(); + +/** + previous() + + Trigger the previous event. +*/ +extern System.previous(); + +/** + eject() + + Trigger the eject event. +*/ +extern System.eject(); + +/** + seekTo() + + Seek to the desired position in the track. Range is from + 0 to SONG LENGTH (in milliseconds). +*/ +extern System.seekTo(Int pos); + +/** + getPosition() + + Get the current position in the track currently playing, + in milliseconds. + + @ret The current position in the track. +*/ +extern Int System.getPosition(); + +/** + setEqBand() + + Sets the requested equalizer band to the specified value. + The bands are numbered from 0 (60Hz) to 9 (16kHz) and + each range from -127 to +127. + + @param band The EQ band to set. + @param value The desired value for the specified band. +*/ +extern System.setEqBand(int band, Int value); + +/** + setEqPreamp() + + Set the equalizer pre-amp to the desired value. + Range is from -127 to +127 (0 means no preamp). + + @param value The desired value for the pre-amp. +*/ +extern System.setEqPreamp(Int value); + +/** + Set the equalizer to the desired state. On or off. + 0 is off, 1 is on. + + @param onoff The desired state for the eq. +*/ +extern System.setEq(Int onoff); + +/** + getEqBand() + + Get the value of an equalizer band. The bands + are numbered from 0 (60Hz) to 9 (16kHz). The return + value range is from -127 to +127. + + @ret The value of the band. + @param band The eq band number you want to get. +*/ +extern Int System.getEqBand(int band); + +/** + getEqPreamp() + + Get the equalizer preamp value. The value range is + from -127 to +127 (0 means no preamp). + + @ret The preamp's current value. +*/ +extern int System.getEqPreamp(); + +/** + getEq() + + Get the equalizer state. 0 for off, 1 for on. + Remember to compare return value to true and false. + + @ret The EQ's state. +*/ +extern int System.getEq(); + +/** + getMousePosX() + + This returns the X position of the mouse in the screen, + using the screen coordinate system. + + @ret The mouse's current X pos. +*/ +extern int System.getMousePosX(); + +/** + getMousePosY() + + This returns the Y position of the mouse in the screen, + using the screen coordinate system. + + @ret The mouse's current Y pos. +*/ +extern int System.getMousePosY(); + +/** + integerToString() + + Get the string representation of an integer. + + @ret The string equivalent of the integer. + @param value The integer to change into a string. +*/ +extern String System.integerToString(Int value); + +/** + StringToInteger() + + Get the integer representation of a string. + + @ret The integer equivalent of the string. + @param str The string to change into an integer. +*/ +extern Int System.StringToInteger(String str); + +/** + floatToString() + + Get the string representation of a floating point number. + + @ret The string representation of the float number. + @param value The float to convert. + @param ndigits Number of digits after the decimal point you want. +*/ +extern String System.floatToString(float value, int ndigits); + +/** + stringToFloat() + + Get the floating point representation of a string. + + @ret The float representation of the string. + @param str The string to convert. +*/ +extern Float System.stringToFloat(String str); + +/** + integerToLongTime() + + Convert a time in seconds to a HH:MM:SS value. + + @ret The string representation of the time (HH:MM:SS). + @param value Timestamp to use. +*/ +extern String System.integerToLongTime(Int value); + +/** + integerToTime() + + Convert a time in seconds to a MM:SS value. + + @ret The string representation of the time (MM:SS). + @param value Timestamp to use. +*/ +extern String System.integerToTime(Int value); + +/** + strmid() + + Get a substring from a string. + + @ret The substring. + @param str The string. + @param start The start position. + @param len The length of the string to extract, from start position. +*/ +extern String System.strmid(String str, Int start, Int len); + +/** + strleft() + + Get a substring from a string, starting from the left. + + @ret The substring. + @param str The string. + @param nchars The length of the string to extract, from the left. +*/ +extern String System.Strleft(string str, int nchars); + +/** + strright() + + Get a substring from a string, starting from the right. Since + the start point is the right of the string (or the end). It will + extract the string starting from the END going towards the BEGINNING. + + @ret The substring. + @param str The string. + @param nchars The length of the string to extract, from the right. +*/ +extern string System.strright(string str, int nchars); + +/** + strsearch() + + Search a string for any occurance of substring. If the substring was + found in the string, it will return the position of the substring in + the string searched. If the substring is not found, the return value + is -1. + + @ret Position at which the substring was found. + @param str The string to search in. + @param substr The substring to find. +*/ +extern int System.strsearch(string str, string substr); + +/** + strlen() + + Returns the length of the string. + + @ret The length of the string. + @param str The string. +*/ +extern int System.strlen(string str); + +/** + strupper() + + Convert a string to all uppercase. + + @ret The uppercase string. + @param str The string to uppercase. +*/ +extern string System.strupper(string str); + +/** + strlower() + + Convert a string to all lowercase. + + @ret The lowercase string. + @param str The string to lowercase. +*/ +extern string System.strlower(string str); + +/** + urlEncode() + + URL Encode a string. Characters that are NOT encoded + are: All letters, All digits, underscore (_), dash (-) and + period (.). + + @ret The URL encoded string. + @param url The string to URL encode. +*/ +extern string System.urlEncode(string url); + +/** + removePath() + + Remove the path from a fullpath. (example: + c:\music\mp3\test.mp3 -> test.mp3) + Also works on URL's. + + @ret The filename with the path removed. + @param str The fullpath of a file. +*/ +extern string System.removePath(string str); + +/** + getToken() + + Retreive a token from a list of tokens seperated by separator. + The index starts at 0, not 1, so be careful. + Here's a short example: + getToken("1,2,3,4,5", ",", 3); + Would return, 3. If the token you ask for doesn't exist, an + empty string is returned. + + @ret The token requested. + @param str The tokenenized string. + @param separator The separator to use. + @param tokennum The token to retreive. +*/ +extern string System.getToken(string str, string separator, int tokennum); + +/** + sin() + + Takes an angle in radians and returns the ratio of two sides of a right triangle. + The ratio is the length of the side opposite the angle divided by the length + of the hypotenuse. The result range is from -1 to 1. + + Converting from degrees to radians can be done by multiplying degrees by PI/180. + + @ret The sine value of the angle. + @param value The angle for which you want to know the sine value. +*/ +extern double System.sin(double value); + +/** + cos() + + Takes an angle in radians and returns the ratio of the two sides of a right triangle. + The ratio is the length of the side adjacent to the angle divided by the length of the + hypotenuse. The result is range is from -1 to 1. + + @ret The cosine value of the angle. + @param value The angle for which you want to know the cosine value. +*/ +extern double System.cos(double value); + +/** + tan() + + Takes an angle in radians and returns the ratio between two sides of a right triangle. + The ratio is sin(x) divided by cos(x). + + @ret The tangent value of the angle. + @param value The angle for which you want to know the tangent value. +*/ +extern double System.tan(double value); + +/** + asin() + + Takes a sine value ranging from -1 to 1 and returns the angle in radians. + The return value ranges from -PI/2 to +PI/2. + + @ret The angle in radians. + @param value The sine value for which you want to know the angle. +*/ +extern double System.asin(double value); + +/** + acos() + + Takes a cosine value ranging from -1 to 1 and returns the angle in radians. + The return value ranges from -PI/2 to +PI/2. + + @ret The angle in radians. + @param value The cosine value for which you want to know the angle. +*/ +extern double System.acos(double value); + +/** + atan() + + Takes an angle in radians and returns the ration between two sides of a right triangle. + The ratio is cos(x) divided by sin(x). + + @ret The arc tangent value of the angle. +*/ +extern double System.atan(double value); + +/** + atan2() + + @ret The arctangent of y/x. +*/ +extern double System.atan2(double y, double x); + + +/** + pow() + + Elevate a number to the N'th power. + + @ret The number + @param value The number you want to elevate to the N power. + @param pvalue The power to which you want to elevate the number. +*/ +extern double System.pow(double value, double pvalue); + +/** + sqr() + + Get the square of a number. + + @ret The number, squared. + @param value The number for which you want the square value. +*/ +extern double System.sqr(double value); + +/** + sqrt() + + Get the square root of a number. + + @ret The square root of the number. + @param value The number for which you want the square root value. +*/ +extern double System.sqrt(double value); + +/** + random() + + Get a randomely generated number. The random number will not + be bigger than the max value indicated. Smallest value is 0. + + @ret The random number. + @param max The maximum value of the random number to return. +*/ +extern int System.random(int max); + +/** + setPrivateString() + + Create a private config entry for your script, of String type. + + @param section The section for the entry. + @param item The item name for the entry. + @param value The value of the entry. +*/ +extern System.setPrivateString(string section, string item, string value); + +/** + setPrivateInt() + + Create a private config entry for your script, of Int type. + + @param section The section for the entry. + @param item The item name for the entry. + @param value The value of the entry. +*/ +extern System.setPrivateInt(string section, string item, int value); + +/** + getPrivateString() + + Read a private config entry of String type. Returns + the specified default value if the section and item isn't + found. + + @ret The value of the config entry. + @param section The section from which to read the entry. + @param item The name of the item to read. + @param defvalue The default value to return if no item is found. +*/ +extern String System.getPrivateString(String section, String item, String defvalue); + +/** + getPrivateInt() + + Read a private config entry of Integer type. Returns + the specified default value if the section and item isn't + found. + + @ret The value of the config entry. + @param section The section from which to read the entry. + @param item The name of the item to read. + @param defvalue The defautl value to return if no item is found. +*/ +extern Int System.getPrivateInt(String section, String item, Int defvalue); + +/** + setPublicString() + + Create a public config entry for your script, of String type. + + @param item The item name for the entry. + @param value The value of the entry. +*/ +extern System.setPublicString(String item, String value); + +/** + setPublicInt() + + Create a public config entry for your script, of Int type. + + @param item The item name of the entry. + @param value The value of the entry. +*/ +extern System.setPublicInt(String item, Int value); + +/** + getPublicString() + + Read a public config entry of String type. Returns + the specified default value if the item isn't found. + + @ret The value of the config entry. + @param item The item name to read. + @param defvalue The default value to return if no item is found. +*/ +extern String System.getPublicString(String item, String defvalue); + +/** + getPublicInt() + + Read a public config entry of Integer type. Returns + the specified default value if the item isn't found. + + @ret The value of the config entry. + @param item The item name to read. + @param defvalue The default value to return if no item is found. +*/ +extern Int System.getPublicInt(String item, Int defvalue); + +/** + getParam() + + Get the parameters with which the script is called. + This is the 'param="..."' attribute in the