aboutsummaryrefslogtreecommitdiffstats
path: root/src/lua/ULuaUtils.pas
diff options
context:
space:
mode:
Diffstat (limited to 'src/lua/ULuaUtils.pas')
-rw-r--r--src/lua/ULuaUtils.pas370
1 files changed, 185 insertions, 185 deletions
diff --git a/src/lua/ULuaUtils.pas b/src/lua/ULuaUtils.pas
index 143b34d4..92122152 100644
--- a/src/lua/ULuaUtils.pas
+++ b/src/lua/ULuaUtils.pas
@@ -1,186 +1,186 @@
-{* UltraStar Deluxe - Karaoke Game
- *
- * UltraStar Deluxe is the legal property of its developers, whose names
- * are too numerous to list here. Please refer to the COPYRIGHT
- * file distributed with this source distribution.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; see the file COPYING. If not, write to
- * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- *
- * $URL$
- * $Id$
- *}
-
-unit ULuaUtils;
-
-interface
-
-{$IFDEF FPC}
- {$MODE Delphi}
-{$ENDIF}
-
-{$I switches.inc}
-
-uses ULua, ULuaCore;
-
-{ converts a lua table with a structure like:
- * = 1 , * = 4 , * = 5
- to an integer with the value:
- 0b11001
- does not pop anything }
-function Lua_ToBinInt(L: PLua_State; idx: Integer): Integer;
-
-{ converts an integer with the value:
- 0b11001
- to a lua table with a structure like:
- * = 1 , * = 4 , * = 5
- and pushed the table onto the stack }
-procedure Lua_PushBinInt(L: PLua_State; BinInt: Integer);
-
-{ pushes a table with position and size of a rectangle
- t.x => position of the rectangle in pixels at x-axis
- t.y => position of the rectangle in pixels at y-axis
- t.w => width of the rectangle
- t.h => height of the rectangle }
-procedure Lua_PushRect(L: PLua_State; X, Y, W, H: Double);
-
-{ returns plugin that is the owner of the given state
- may raise a lua error if the parent id is not found
- in states registry, if state owner does not exists
- or is not loaded. So a check for a nil value is not
- necessary }
-function Lua_GetOwner(L: PLua_State): TLuaPlugin;
-
-{ this is a helper in case an evenet owner don't has no use for the results
- returns number of popped elements }
-function Lua_ClearStack(L: Plua_State): Integer;
-
-
-implementation
-
-{ converts a lua table with a structure like:
- * = 1 , * = 4 , * = 5
- to an integer with the value:
- 0b11001
- does not pop anything }
-function Lua_ToBinInt(L: PLua_State; idx: Integer): Integer;
- var
- I: Integer;
-begin
- // default: no bits set
- Result := 0;
-
- lua_checkstack(L, 2);
-
- if (idx < 0) then
- dec(idx); // we will push one value before using this
-
- lua_PushNil(L);
- while (lua_next(L, idx) <> 0) do
- begin
- if (lua_isNumber(L, -1)) then
- begin //check if we got an integer value from 1 to 32
- I := lua_toInteger(L, -1);
- if (I >= 1) and (I <= 32) then
- Result := Result or 1 shl (I - 1);
- end;
-
- // pop value, so key is on top
- lua_pop(L, 1);
- end;
-end;
-
-{ converts an integer with the value:
- 0b11001
- to a lua table with a structure like:
- * = 1 , * = 4 , * = 5
- and pushed the table onto the stack }
-procedure Lua_PushBinInt(L: PLua_State; BinInt: Integer);
-var
- I, Index: Integer;
-begin
- lua_newTable(L);
-
-
- Index := 1; //< lua starts w/ index 1
- for I := 0 to 31 do
- if (BinInt and (1 shl I) <> 0) then
- begin
- lua_pushInteger(L, Index);
- lua_pushInteger(L, I);
- lua_settable(L, -3);
-
- Inc(Index);
- end;
-end;
-
-{ pushes a table with position and size of a rectangle
- t.x => position of the rectangle in pixels at x-axis
- t.y => position of the rectangle in pixels at y-axis
- t.w => width of the rectangle
- t.h => height of the rectangle }
-procedure Lua_PushRect(L: PLua_State; X, Y, W, H: Double);
-begin
- lua_createtable(L, 0, 4); // table w/ 4 record fields
-
- // x pos
- lua_pushNumber(L, X);
- lua_setField(L, -2, 'x');
-
- // y pos
- lua_pushNumber(L, Y);
- lua_setField(L, -2, 'y');
-
- // width
- lua_pushNumber(L, W);
- lua_setField(L, -2, 'w');
-
- // height
- lua_pushNumber(L, H);
- lua_setField(L, -2, 'h');
-end;
-
-{ returns plugin that is the owner of the given state
- may raise a lua error if the parent id is not found
- in states registry, if state owner does not exists
- or is not loaded. So a check for a nil value is not
- necessary }
-function Lua_GetOwner(L: PLua_State): TLuaPlugin;
-begin
- lua_checkstack(L, 1);
-
- lua_getfield (L, LUA_REGISTRYINDEX, '_USDX_STATE_ID');
- if (not lua_isNumber(L, -1)) then
- luaL_error(L, 'unable to get _USDX_STATE_ID');
-
- Result := LuaCore.GetPluginById(lua_toInteger(L, -1));
-
- lua_pop(L, 1); //< remove state id from stack
-
- if (Result = nil) then
- luaL_error(L, '_USDX_STATE_ID has invalid value')
- else if (Result.Status > psRunning) then
- luaL_error(L, 'owning plugin is not loaded or already unloaded in Lua_GetOwner');
-end;
-
-{ this is a helper in case an evenet owner don't has no use for the results
- returns number of popped elements }
-function Lua_ClearStack(L: Plua_State): Integer;
-begin
- Result := lua_gettop(L);
- lua_pop(L, Result);
-end;
-
+{* UltraStar Deluxe - Karaoke Game
+ *
+ * UltraStar Deluxe is the legal property of its developers, whose names
+ * are too numerous to list here. Please refer to the COPYRIGHT
+ * file distributed with this source distribution.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ *
+ * $URL$
+ * $Id$
+ *}
+
+unit ULuaUtils;
+
+interface
+
+{$IFDEF FPC}
+ {$MODE Delphi}
+{$ENDIF}
+
+{$I switches.inc}
+
+uses ULua, ULuaCore;
+
+{ converts a lua table with a structure like:
+ * = 1 , * = 4 , * = 5
+ to an integer with the value:
+ 0b11001
+ does not pop anything }
+function Lua_ToBinInt(L: PLua_State; idx: Integer): Integer;
+
+{ converts an integer with the value:
+ 0b11001
+ to a lua table with a structure like:
+ * = 1 , * = 4 , * = 5
+ and pushed the table onto the stack }
+procedure Lua_PushBinInt(L: PLua_State; BinInt: Integer);
+
+{ pushes a table with position and size of a rectangle
+ t.x => position of the rectangle in pixels at x-axis
+ t.y => position of the rectangle in pixels at y-axis
+ t.w => width of the rectangle
+ t.h => height of the rectangle }
+procedure Lua_PushRect(L: PLua_State; X, Y, W, H: Double);
+
+{ returns plugin that is the owner of the given state
+ may raise a lua error if the parent id is not found
+ in states registry, if state owner does not exists
+ or is not loaded. So a check for a nil value is not
+ necessary }
+function Lua_GetOwner(L: PLua_State): TLuaPlugin;
+
+{ this is a helper in case an evenet owner don't has no use for the results
+ returns number of popped elements }
+function Lua_ClearStack(L: Plua_State): Integer;
+
+
+implementation
+
+{ converts a lua table with a structure like:
+ * = 1 , * = 4 , * = 5
+ to an integer with the value:
+ 0b11001
+ does not pop anything }
+function Lua_ToBinInt(L: PLua_State; idx: Integer): Integer;
+ var
+ I: Integer;
+begin
+ // default: no bits set
+ Result := 0;
+
+ lua_checkstack(L, 2);
+
+ if (idx < 0) then
+ dec(idx); // we will push one value before using this
+
+ lua_PushNil(L);
+ while (lua_next(L, idx) <> 0) do
+ begin
+ if (lua_isNumber(L, -1)) then
+ begin //check if we got an integer value from 1 to 32
+ I := lua_toInteger(L, -1);
+ if (I >= 1) and (I <= 32) then
+ Result := Result or 1 shl (I - 1);
+ end;
+
+ // pop value, so key is on top
+ lua_pop(L, 1);
+ end;
+end;
+
+{ converts an integer with the value:
+ 0b11001
+ to a lua table with a structure like:
+ * = 1 , * = 4 , * = 5
+ and pushed the table onto the stack }
+procedure Lua_PushBinInt(L: PLua_State; BinInt: Integer);
+var
+ I, Index: Integer;
+begin
+ lua_newTable(L);
+
+
+ Index := 1; //< lua starts w/ index 1
+ for I := 0 to 31 do
+ if (BinInt and (1 shl I) <> 0) then
+ begin
+ lua_pushInteger(L, Index);
+ lua_pushInteger(L, I);
+ lua_settable(L, -3);
+
+ Inc(Index);
+ end;
+end;
+
+{ pushes a table with position and size of a rectangle
+ t.x => position of the rectangle in pixels at x-axis
+ t.y => position of the rectangle in pixels at y-axis
+ t.w => width of the rectangle
+ t.h => height of the rectangle }
+procedure Lua_PushRect(L: PLua_State; X, Y, W, H: Double);
+begin
+ lua_createtable(L, 0, 4); // table w/ 4 record fields
+
+ // x pos
+ lua_pushNumber(L, X);
+ lua_setField(L, -2, 'x');
+
+ // y pos
+ lua_pushNumber(L, Y);
+ lua_setField(L, -2, 'y');
+
+ // width
+ lua_pushNumber(L, W);
+ lua_setField(L, -2, 'w');
+
+ // height
+ lua_pushNumber(L, H);
+ lua_setField(L, -2, 'h');
+end;
+
+{ returns plugin that is the owner of the given state
+ may raise a lua error if the parent id is not found
+ in states registry, if state owner does not exists
+ or is not loaded. So a check for a nil value is not
+ necessary }
+function Lua_GetOwner(L: PLua_State): TLuaPlugin;
+begin
+ lua_checkstack(L, 1);
+
+ lua_getfield (L, LUA_REGISTRYINDEX, '_USDX_STATE_ID');
+ if (not lua_isNumber(L, -1)) then
+ luaL_error(L, 'unable to get _USDX_STATE_ID');
+
+ Result := LuaCore.GetPluginById(lua_toInteger(L, -1));
+
+ lua_pop(L, 1); //< remove state id from stack
+
+ if (Result = nil) then
+ luaL_error(L, '_USDX_STATE_ID has invalid value')
+ else if (Result.Status > psRunning) then
+ luaL_error(L, 'owning plugin is not loaded or already unloaded in Lua_GetOwner');
+end;
+
+{ this is a helper in case an evenet owner don't has no use for the results
+ returns number of popped elements }
+function Lua_ClearStack(L: Plua_State): Integer;
+begin
+ Result := lua_gettop(L);
+ lua_pop(L, Result);
+end;
+
end. \ No newline at end of file