diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 5564869f..7c1e8744 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -23,20 +23,20 @@ jobs:
- uses: gradle/actions/setup-gradle@v4
- name: Build debug APK
- run: ./gradlew :BT_Free:assembleDebug
+ run: ./gradlew :app:assembleDebug
- name: Detekt
- run: ./gradlew :BTLib:detekt
+ run: ./gradlew :lib:detekt
- name: Lint
- run: ./gradlew :BTLib:lint :BT_Free:lint
+ run: ./gradlew :lib:lint :app:lint
continue-on-error: true
- name: Upload debug APK
uses: actions/upload-artifact@v4
with:
- name: blowtorch-debug
- path: BT_Free/build/outputs/apk/debug/BT_Free-debug.apk
+ name: mudwammer-debug
+ path: app/build/outputs/apk/debug/app-debug.apk
- name: Upload lint reports
if: always()
@@ -44,5 +44,5 @@ jobs:
with:
name: lint-reports
path: |
- BTLib/build/reports/lint-results*.html
- BT_Free/build/reports/lint-results*.html
+ lib/build/reports/lint-results*.html
+ app/build/reports/lint-results*.html
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index fc0648ac..1a86e1ec 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -25,15 +25,15 @@ jobs:
- uses: gradle/actions/setup-gradle@v4
- name: Build debug APK
- run: ./gradlew :BT_Free:assembleDebug
+ run: ./gradlew :app:assembleDebug
- name: Rename APK
env:
TAG: ${{ github.ref_name }}
- run: cp BT_Free/build/outputs/apk/debug/BT_Free-debug.apk "BlowTorch-${TAG}.apk"
+ run: cp app/build/outputs/apk/debug/app-debug.apk "MUDWammer-${TAG}.apk"
- name: Create release
env:
GH_TOKEN: ${{ github.token }}
TAG: ${{ github.ref_name }}
- run: gh release create "$TAG" "BlowTorch-${TAG}.apk" --generate-notes
+ run: gh release create "$TAG" "MUDWammer-${TAG}.apk" --generate-notes
diff --git a/.gitignore b/.gitignore
index 05fdf542..35f46026 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,17 +1,12 @@
gen/
bin/
-BTLib/gen
-BTLib/bin
-BTLib/obj
-BT_Test/gen
-BT_Test/bin
-BT_Pro/gen
-BT_Pro/bin
-BT_Free/gen
-BT_Free/bin
-BTLib/build
-BT_Free/build
-BT_Aard/build
+lib/gen
+lib/bin
+lib/obj
+app/gen
+app/bin
+lib/build
+app/build
build/
*.o
*.a
@@ -126,8 +121,7 @@ gradle-app.setting
# # Work around https://youtrack.jetbrains.com/issue/IDEA-116898
# gradle/wrapper/gradle-wrapper.properties
*.DS_Store
-BTLib/key/bt_privatekey.keystore
-BT_Aard/key/signiture_cert
+lib/key/bt_privatekey.keystore
# Claude Code working files
docs/plans/
@@ -135,13 +129,26 @@ docs/plans/
.mcp.json
CHANGELOG.md
+# Misc
+crash.log
+firebase-debug.log
+__pycache__/
+
# LuaJIT source (cloned at build time)
LuaJIT-2.1/
# Built native libraries (regenerated by build_ndk_libraries_modern.sh)
-BTLib/jni/luajava/libluajit-*.a
-BTLib/jni/luajava/libluajit-*.so
-BTLib/obj/
+lib/jni/luajava/libluajit-*.a
+lib/jni/luajava/libluajit-*.so
+lib/obj/
+
+# Editor backup files
+*~
+
+# Eclipse
+.classpath
+.project
+.settings/
# Git worktrees
.worktrees/
diff --git a/.gitignore~ b/.gitignore~
deleted file mode 100644
index 3ff77578..00000000
--- a/.gitignore~
+++ /dev/null
@@ -1,11 +0,0 @@
-gen/
-bin/
-BTLib/gen
-BTLib/bin
-BT_Test/gen
-BT_Test/bin
-BT_Pro/gen
-BT_Pro/bin
-BT_Free/gen
-BT_Free/bin
-
diff --git a/BTLib/.classpath b/BTLib/.classpath
deleted file mode 100644
index dec02b33..00000000
--- a/BTLib/.classpath
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/BTLib/.project b/BTLib/.project
deleted file mode 100644
index c0c628fc..00000000
--- a/BTLib/.project
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
- BTLib
-
-
-
-
-
- com.android.ide.eclipse.adt.ResourceManagerBuilder
-
-
-
-
- com.android.ide.eclipse.adt.PreCompilerBuilder
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- com.android.ide.eclipse.adt.ApkBuilder
-
-
-
-
- net.sf.eclipsecs.core.CheckstyleBuilder
-
-
-
-
- net.sourceforge.metrics.builder
-
-
-
-
-
- com.android.ide.eclipse.adt.AndroidNature
- org.eclipse.jdt.core.javanature
- net.sf.eclipsecs.core.CheckstyleNature
- net.sourceforge.metrics.nature
-
-
diff --git a/BTLib/.settings/org.eclipse.core.resources.prefs b/BTLib/.settings/org.eclipse.core.resources.prefs
deleted file mode 100644
index d0578cb6..00000000
--- a/BTLib/.settings/org.eclipse.core.resources.prefs
+++ /dev/null
@@ -1,3 +0,0 @@
-#Tue Mar 27 20:09:56 PDT 2012
-eclipse.preferences.version=1
-encoding//src/com/offsetnull/bt/button/ButtonEditorDialog.java=UTF-8
diff --git a/BTLib/.settings/org.eclipse.jdt.core.prefs b/BTLib/.settings/org.eclipse.jdt.core.prefs
deleted file mode 100644
index 8b8b3e66..00000000
--- a/BTLib/.settings/org.eclipse.jdt.core.prefs
+++ /dev/null
@@ -1,12 +0,0 @@
-#Thu Aug 04 16:27:57 PDT 2011
-eclipse.preferences.version=1
-org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
-org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.6
-org.eclipse.jdt.core.compiler.debug.lineNumber=generate
-org.eclipse.jdt.core.compiler.debug.localVariable=generate
-org.eclipse.jdt.core.compiler.debug.sourceFile=generate
-org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
-org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.6
diff --git a/BTLib/ant.properties b/BTLib/ant.properties
deleted file mode 100644
index abd35776..00000000
--- a/BTLib/ant.properties
+++ /dev/null
@@ -1 +0,0 @@
-source.dir=src
diff --git a/BTLib/build.xml b/BTLib/build.xml
deleted file mode 100644
index 908eb1a8..00000000
--- a/BTLib/build.xml
+++ /dev/null
@@ -1,92 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/BTLib/checkstyle_suppressions.xml b/BTLib/checkstyle_suppressions.xml
deleted file mode 100644
index 478901cb..00000000
--- a/BTLib/checkstyle_suppressions.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-
-
-
-
-
-
-
diff --git a/BTLib/default.properties b/BTLib/default.properties
deleted file mode 100644
index fd1cfd7b..00000000
--- a/BTLib/default.properties
+++ /dev/null
@@ -1,5 +0,0 @@
-android.library=false
-# Indicates whether an apk should be generated for each density.
-split.density=false
-# Project target.
-target=android-14
diff --git a/BTLib/jni/.DS_Store b/BTLib/jni/.DS_Store
deleted file mode 100644
index d3e50e2b..00000000
Binary files a/BTLib/jni/.DS_Store and /dev/null differ
diff --git a/BTLib/jni/Application.mk~ b/BTLib/jni/Application.mk~
deleted file mode 100644
index 064aab2b..00000000
--- a/BTLib/jni/Application.mk~
+++ /dev/null
@@ -1,3 +0,0 @@
-APP_ABI := armeabi
-APP_CFLAGS := -O3 -fno-auto-inc-dec
-APP_MODULES := lsqlite3 sqlite3 lua bit marshal luabins
diff --git a/BTLib/jni/bit/Android.mk~ b/BTLib/jni/bit/Android.mk~
deleted file mode 100644
index 824bd686..00000000
--- a/BTLib/jni/bit/Android.mk~
+++ /dev/null
@@ -1,13 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-ifeq ($(TARGET_ARCH_ABI),armeabi)
-LOCAL_MODULE := bit
-LOCAL_MODULE_FILENAME := bit
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lua
-LOCAL_SRC_FILES := ./bit.c
-LOCAL_SHARED_LIBRARIES := liblua
-LOCAL_CFLAGS := -O3 -fpic -std=c99 -shared
-
-include $(BUILD_SHARED_LIBRARY)
-
-endif
diff --git a/BTLib/jni/lmarshal/Android.mk~ b/BTLib/jni/lmarshal/Android.mk~
deleted file mode 100644
index da6dbcfa..00000000
--- a/BTLib/jni/lmarshal/Android.mk~
+++ /dev/null
@@ -1,24 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-ifeq ($(TARGET_ARCH_ABI),armeabi)
-include $(CLEAR_VARS)
-LOCAL_MODULE := marshal
-LOCAL_MODULE_FILENAME := marshal
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lua
-LOCAL_SRC_FILES := ./lmarshal.c
-LOCAL_SHARED_LIBRARIES := liblua
-LOCAL_CFLAGS := -O3 -fpic -std=c99 -shared
-include $(BUILD_SHARED_LIBRARY)
-
-endif
-
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-include $(CLEAR_VARS)
-LOCAL_MODULE := marshal
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lua
-LOCAL_SRC_FILES := ./lmarshal.c
-LOCAL_SHARED_LIBRARIES := liblua
-LOCAL_CFLAGS := -O3 -fpic -std=c99 -shared
-include $(BUILD_SHARED_LIBRARY)
-endif
-
diff --git a/BTLib/jni/lsqlite3/Android.mk~ b/BTLib/jni/lsqlite3/Android.mk~
deleted file mode 100644
index b679f638..00000000
--- a/BTLib/jni/lsqlite3/Android.mk~
+++ /dev/null
@@ -1,24 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-ifeq ($(TARGET_ARCH_ABI),armeabi)
-include $(CLEAR_VARS)
-LOCAL_MODULE := lsqlite3
-LOCAL_MODULE_FILENAME := lsqlite3
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../sqlite3 $(LOCAL_PATH)/../lua
-LOCAL_SRC_FILES := ./lsqlite3.c
-LOCAL_SHARED_LIBRARIES := sqlite3 liblua
-LOCAL_CFLAGS := -O3 -fpic -std=c99 -shared
-include $(BUILD_SHARED_LIBRARY)
-
-endif
-
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-include $(CLEAR_VARS)
-LOCAL_MODULE := lsqlite3
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../sqlite3 $(LOCAL_PATH)/../lua
-LOCAL_SRC_FILES := ./lsqlite3.c
-LOCAL_SHARED_LIBRARIES := sqlite3 liblua
-LOCAL_CFLAGS := -O3 -fpic -std=c99 -shared
-include $(BUILD_SHARED_LIBRARY)
-endif
-
diff --git a/BTLib/jni/luabins/Android.mk~ b/BTLib/jni/luabins/Android.mk~
deleted file mode 100644
index 64979e8f..00000000
--- a/BTLib/jni/luabins/Android.mk~
+++ /dev/null
@@ -1,37 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-ifeq ($(TARGET_ARCH_ABI),armeabi)
-include $(CLEAR_VARS)
-LOCAL_MODULE := luabins
-LOCAL_MODULE_FILENAME := luabins
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lua
-LOCAL_SHARED_LIBRARIES := liblua
-LOCAL_CFLAGS := -O3 -fpic -shared -std=c99
-LOCAL_SRC_FILES := ./fwrite.c \
- ./load.c \
- ./luabins.c \
- ./save.c \
- ./luainternals.c \
- ./savebuffer.c \
- ./write.c
-
-include $(BUILD_SHARED_LIBRARY)
-
-endif
-
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-include $(CLEAR_VARS)
-LOCAL_MODULE := luabins
-LOCAL_C_INCLUDES += $(LOCAL_PATH)/../lua
-LOCAL_SHARED_LIBRARIES := liblua
-LOCAL_CFLAGS := -O3 -fpic -shared -std=c99
-LOCAL_SRC_FILES := ./fwrite.c \
- ./load.c \
- ./luabins.c \
- ./luainternals.c \
- ./save.c \
- ./savebuffer.c \
- ./write.c
-
-include $(BUILD_SHARED_LIBRARY)
-endif
diff --git a/BTLib/jni/luajava/Android.mk~ b/BTLib/jni/luajava/Android.mk~
deleted file mode 100644
index bd63aeba..00000000
--- a/BTLib/jni/luajava/Android.mk~
+++ /dev/null
@@ -1,32 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-include $(CLEAR_VARS)
-LOCAL_ARM_MODE := arm
-LOCAL_MODULE := luajit
-LOCAL_SRC_FILES := libluajit.a
-include $(PREBUILT_STATIC_LIBRARY)
-
-
-ifeq ($(TARGET_ARCH_ABI),armeabi)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := lua
-LOCAL_LDLIBS := -lluajit
-LOCAL_ARM_MODE := arm
-LOCAL_CFLAGS := -O3 -shared -std=c99 -DLUA_USE_DLOPEN
-LOCAL_SRC_FILES := luajava.c
-include $(BUILD_SHARED_LIBRARY)
-
-endif
-
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-
-include $(CLEAR_VARS)
-LOCAL_MODULE := lua
-LOCAL_LDLIBS := -lluajit
-LOCAL_ARM_MODE := arm
-LOCAL_CFLAGS := -O3 -shared -std=c99 -DLUA_USE_DLOPEN
-LOCAL_SRC_FILES := luajava.c
-include $(BUILD_SHARED_LIBRARY)
-
-endif
diff --git a/BTLib/jni/luajava/luajava.c~ b/BTLib/jni/luajava/luajava.c~
deleted file mode 100644
index 36d0263c..00000000
--- a/BTLib/jni/luajava/luajava.c~
+++ /dev/null
@@ -1,3509 +0,0 @@
-
-/******************************************************************************
-* $Id$
-* Copyright (C) 2003-2007 Kepler Project.
-*
-* Permission is hereby granted, free of charge, to any person obtaining
-* a copy of this software and associated documentation files (the
-* "Software"), to deal in the Software without restriction, including
-* without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to
-* permit persons to whom the Software is furnished to do so, subject to
-* the following conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
-* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
-* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
-* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
-* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-******************************************************************************/
-
-/***************************************************************************
-*
-* $ED
-* This module is the implementation of luajava's dinamic library.
-* In this module lua's functions are exported to be used in java by jni,
-* and also the functions that will be used and exported to lua so that
-* Java Objects' functions can be called.
-*
-*****************************************************************************/
-
-
-#include
-#include
-#include "luajava.h"
-#include "lua.h"
-#include "lualib.h"
-#include "lauxlib.h"
-
-
-/* Constant that is used to index the JNI Environment */
-#define LUAJAVAJNIENVTAG "__JNIEnv"
-/* Defines wheter the metatable is of a java Object */
-#define LUAJAVAOBJECTIND "__IsJavaObject"
-/* Defines the lua State Index Property Name */
-#define LUAJAVASTATEINDEX "LuaJavaStateIndex"
-/* Index metamethod name */
-#define LUAINDEXMETAMETHODTAG "__index"
-/* Garbage collector metamethod name */
-#define LUAGCMETAMETHODTAG "__gc"
-/* Call metamethod name */
-#define LUACALLMETAMETHODTAG "__call"
-/* Constant that defines where in the metatable should I place the function name */
-#define LUAJAVAOBJFUNCCALLED "__FunctionCalled"
-
-
-
-static jclass throwable_class = NULL;
-static jmethodID get_message_method = NULL;
-static jclass java_function_class = NULL;
-static jmethodID java_function_method = NULL;
-static jclass luajava_api_class = NULL;
-static jclass java_lang_class = NULL;
-static jmethodID luajava_new_method = NULL;
-static jmethodID luajava_new_instance_method = NULL;
-static jmethodID luajava_object_index_method = NULL;
-static jmethodID luajava_check_field_method = NULL;
-static jmethodID luajava_class_index_method = NULL;
-static jmethodID luajava_create_proxy_method = NULL;
-static jmethodID java_lang_class_forname_method = NULL;
-static jmethodID luajava_new_array_method = NULL;
-
-
-/***************************************************************************
-*
-* $FC Function objectIndex
-*
-* $ED Description
-* Function to be called by the metamethod __index of the java object
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int objectIndex( lua_State * L );
-
-
-/***************************************************************************
-*
-* $FC Function objectIndexReturn
-*
-* $ED Description
-* Function returned by the metamethod __index of a java Object. It is
-* the actual function that is going to call the java method.
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int objectIndexReturn( lua_State * L );
-
-
-/***************************************************************************
-*
-* $FC Function classIndex
-*
-* $ED Description
-* Function to be called by the metamethod __index of the java class
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int classIndex( lua_State * L );
-
-
-/***************************************************************************
-*
-* $FC Function GC
-*
-* $ED Description
-* Function to be called by the metamethod __gc of the java object
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int gc( lua_State * L );
-
-
-/***************************************************************************
-*
-* $FC Function javaBindClass
-*
-* $ED Description
-* Implementation of lua function luajava.BindClass
-*
-* $EP Function Parameters
-* $P L - lua State
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int javaBindClass( lua_State * L );
-
-/***************************************************************************
-*
-* $FC Function createProxy
-*
-* $ED Description
-* Implementation of lua function luajava.createProxy.
-* Transform a lua table into a java class that implements a list
-* of interfaces
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int createProxy( lua_State * L );
-
-/***************************************************************************
-*
-* $FC Function javaNew
-*
-* $ED Description
-* Implementation of lua function luajava.new
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int javaNew( lua_State * L );
-
-/***************************************************************************
-*
-* $FC Function javaArray
-*
-* $ED Description
-* Implementation of lua function luajava.array
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int javaArray( lua_State * L );
-
-/***************************************************************************
-*
-* $FC Function javaNewInstance
-*
-* $ED Description
-* Implementation of lua function luajava.newInstance
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int javaNewInstance( lua_State * L );
-
-
-/***************************************************************************
-*
-* $FC Function javaLoadLib
-*
-* $ED Description
-* Implementation of lua function luajava.loadLib
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int javaLoadLib( lua_State * L );
-
-
-/***************************************************************************
-/*
-* $FC pushJavaObject
-*
-* $ED Description
-* Function to create a lua proxy to a java object
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P javaObject - Java Object to be pushed on the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int pushJavaObject( lua_State * L , jobject javaObject );
-
-
-/***************************************************************************
-*
-* $FC pushJavaClass
-*
-* $ED Description
-* Function to create a lua proxy to a java class
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P javaObject - Java Class to be pushed on the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function
-*
-*$. **********************************************************************/
-
- static int pushJavaClass( lua_State * L , jobject javaObject );
-
-
-/***************************************************************************
-*
-* $FC isJavaObject
-*
-* $ED Description
-* Returns 1 is given index represents a java object
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P idx - index on the stack
-*
-* $FV Returned Value
-* int - Boolean.
-*
-*$. **********************************************************************/
-
- static int isJavaObject( lua_State * L , int idx );
-
-
-/***************************************************************************
-*
-* $FC getStateFromCPtr
-*
-* $ED Description
-* Returns the lua_State from the CPtr Java Object
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P cptr - CPtr object
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function.
-*
-*$. **********************************************************************/
-
- static lua_State * getStateFromCPtr( JNIEnv * env , jobject cptr );
-
-
-/***************************************************************************
-*
-* $FC luaJavaFunctionCall
-*
-* $ED Description
-* function called by metamethod __call of instances of JavaFunctionWrapper
-*
-* $EP Function Parameters
-* $P L - lua State
-* $P Stack - Parameters will be received by the stack
-*
-* $FV Returned Value
-* int - Number of values to be returned by the function.
-*
-*$. **********************************************************************/
-
- static int luaJavaFunctionCall( lua_State * L );
-
-
-/***************************************************************************
-*
-* $FC pushJNIEnv
-*
-* $ED Description
-* function that pushes the jni environment into the lua state
-*
-* $EP Function Parameters
-* $P env - java environment
-* $P L - lua State
-*
-* $FV Returned Value
-* void
-*
-*$. **********************************************************************/
-
- static void pushJNIEnv( JNIEnv * env , lua_State * L );
-
-
- /***************************************************************************
-*
-* $FC getEnvFromState
-*
-* $ED Description
-* auxiliar function to get the JNIEnv from the lua state
-*
-* $EP Function Parameters
-* $P L - lua State
-*
-* $FV Returned Value
-* JNIEnv * - JNI environment
-*
-*$. **********************************************************************/
-
- static JNIEnv * getEnvFromState( lua_State * L );
-
-
-/********************* Implementations ***************************/
-
-/***************************************************************************
-*
-* Function: objectIndex
-* ****/
-
-int objectIndex( lua_State * L )
-{
- lua_Number stateIndex;
- const char * key;
- //jmethodID method;
- jint checkField;
- jobject * obj;
- jstring str;
- jthrowable exp;
- JNIEnv * javaEnv;
-
- /* Gets the luaState index */
- lua_pushstring( L , LUAJAVASTATEINDEX );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isnumber( L , -1 ) )
- {
- lua_pushstring( L , "Impossible to identify luaState id." );
- lua_error( L );
- }
-
- stateIndex = lua_tonumber( L , -1 );
- lua_pop( L , 1 );
-
- if ( !lua_isstring( L , -1 ) )
- {
- lua_pushstring( L , "Invalid Function call." );
- lua_error( L );
- }
-
- key = lua_tostring( L , -1 );
-
- if ( !isJavaObject( L , 1 ) )
- {
- lua_pushstring( L , "Not a valid Java Object." );
- lua_error( L );
- }
-
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- obj = ( jobject * ) lua_touserdata( L , 1 );
-
- //method = ( *javaEnv )->GetStaticMethodID( javaEnv , luajava_api_class , "checkField" ,
- // "(ILjava/lang/Object;Ljava/lang/String;)I" );
-
- str = ( *javaEnv )->NewStringUTF( javaEnv , key );
-
- checkField = ( *javaEnv )->CallStaticIntMethod( javaEnv , luajava_api_class , luajava_check_field_method ,
- (jint)stateIndex , *obj , str );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * cStr;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , str );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- cStr = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , cStr );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, cStr );
-
- lua_error( L );
- }
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , str );
-
- if ( checkField != 0 )
- {
- return checkField;
- }
-
- lua_getmetatable( L , 1 );
-
- if ( !lua_istable( L , -1 ) )
- {
- lua_pushstring( L , "Invalid MetaTable." );
- lua_error( L );
- }
-
- lua_pushstring( L , LUAJAVAOBJFUNCCALLED );
- lua_pushstring( L , key );
- lua_rawset( L , -3 );
-
- lua_pop( L , 1 );
-
- lua_pushcfunction( L , &objectIndexReturn );
-
- return 1;
-}
-
-
-/***************************************************************************
-*
-* Function: objectIndexReturn
-* ****/
-
-int objectIndexReturn( lua_State * L )
-{
- lua_Number stateIndex;
- jobject * pObject;
- //jmethodID method;
- jthrowable exp;
- const char * methodName;
- jint ret;
- jstring str;
- JNIEnv * javaEnv;
-
- /* Gets the luaState index */
- lua_pushstring( L , LUAJAVASTATEINDEX );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isnumber( L , -1 ) )
- {
- lua_pushstring( L , "Impossible to identify luaState id." );
- lua_error( L );
- }
-
- stateIndex = lua_tonumber( L , -1 );
- lua_pop( L , 1 );
-
- /* Checks if is a valid java object */
- if ( !isJavaObject( L , 1 ) )
- {
- lua_pushstring( L , "Not a valid OO function call." );
- lua_error( L );
- }
-
- lua_getmetatable( L , 1 );
- if ( lua_type( L , -1 ) == LUA_TNIL )
- {
- lua_pushstring( L , "Not a valid java Object." );
- lua_error( L );
- }
-
- lua_pushstring( L , LUAJAVAOBJECTIND );
- lua_rawget( L , -2 );
- if ( lua_type( L , -1 ) == LUA_TNIL )
- {
- lua_pushstring( L , "Not a valid java Object." );
- lua_error( L );
- }
- lua_pop( L , 1 );
-
- /* Gets the method Name */
- lua_pushstring( L , LUAJAVAOBJFUNCCALLED );
- lua_rawget( L , -2 );
- if ( lua_type( L , -1 ) == LUA_TNIL )
- {
- lua_pushstring( L , "Not a OO function call." );
- lua_error( L );
- }
- methodName = lua_tostring( L , -1 );
-
- lua_pop( L , 2 );
-
- /* Gets the object reference */
- pObject = ( jobject* ) lua_touserdata( L , 1 );
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- /* Gets method */
- //method = ( *javaEnv )->GetStaticMethodID( javaEnv , luajava_api_class , "objectIndex" ,
- // "(ILjava/lang/Object;Ljava/lang/String;)I" );
-
- str = ( *javaEnv )->NewStringUTF( javaEnv , methodName );
-
- ret = ( *javaEnv )->CallStaticIntMethod( javaEnv , luajava_api_class , luajava_object_index_method , (jint)stateIndex ,
- *pObject , str );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * cStr;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , str );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- cStr = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , cStr );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, cStr );
-
- lua_error( L );
- }
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , str );
-
- /* pushes new object into lua stack */
- return ret;
-}
-
-
-/***************************************************************************
-*
-* Function: classIndex
-* ****/
-
-int classIndex( lua_State * L )
-{
- lua_Number stateIndex;
- jobject * obj;
- //jmethodID method;
- const char * fieldName;
- jstring str;
- jint ret;
- jthrowable exp;
- JNIEnv * javaEnv;
-
- /* Gets the luaState index */
- lua_pushstring( L , LUAJAVASTATEINDEX );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isnumber( L , -1 ) )
- {
- lua_pushstring( L , "Impossible to identify luaState id." );
- lua_error( L );
- }
-
- stateIndex = lua_tonumber( L , -1 );
- lua_pop( L , 1 );
-
- if ( !isJavaObject( L , 1 ) )
- {
- lua_pushstring( L , "Not a valid java class." );
- lua_error( L );
- }
-
- /* Gets the field Name */
-
- if ( !lua_isstring( L , 2 ) )
- {
- lua_pushstring( L , "Not a valid field call." );
- lua_error( L );
- }
-
- fieldName = lua_tostring( L , 2 );
-
- /* Gets the object reference */
- obj = ( jobject* ) lua_touserdata( L , 1 );
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- // method = ( *javaEnv )->GetStaticMethodID( javaEnv , luajava_api_class , "classIndex" ,
- // "(ILjava/lang/Class;Ljava/lang/String;)I" );
-
- str = ( *javaEnv )->NewStringUTF( javaEnv , fieldName );
-
- /* Return 1 for field, 2 for method or 0 for error */
- ret = ( *javaEnv )->CallStaticIntMethod( javaEnv , luajava_api_class , luajava_class_index_method, (jint)stateIndex ,
- *obj , str );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * cStr;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , str );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- cStr = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , cStr );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, cStr );
-
- lua_error( L );
- }
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , str );
-
- if ( ret == 0 )
- {
- lua_pushstring( L , "Name is not a static field or function." );
- lua_error( L );
- }
-
- if ( ret == 2 )
- {
- lua_getmetatable( L , 1 );
- lua_pushstring( L , LUAJAVAOBJFUNCCALLED );
- lua_pushstring( L , fieldName );
- lua_rawset( L , -3 );
-
- lua_pop( L , 1 );
-
- lua_pushcfunction( L , &objectIndexReturn );
-
- return 1;
- }
-
- return ret;
-}
-
-
-/***************************************************************************
-*
-* Function: gc
-* ****/
-
-int gc( lua_State * L )
-{
- jobject * pObj;
- JNIEnv * javaEnv;
-
- if ( !isJavaObject( L , 1 ) )
- {
- return 0;
- }
-
- pObj = ( jobject * ) lua_touserdata( L , 1 );
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- ( *javaEnv )->DeleteGlobalRef( javaEnv , *pObj );
-
- return 0;
-}
-
-
-/***************************************************************************
-*
-* Function: javaBindClass
-* ****/
-
-int javaBindClass( lua_State * L )
-{
- int top;
- //jmethodID method;
- const char * className;
- jstring javaClassName;
- jobject classInstance;
- jthrowable exp;
- JNIEnv * javaEnv;
-
- top = lua_gettop( L );
-
- if ( top != 1 )
- {
- luaL_error( L , "Error. Function javaBindClass received %d arguments, expected 1." , top );
- }
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- /* get the string parameter */
- if ( !lua_isstring( L , 1 ) )
- {
- lua_pushstring( L , "Invalid parameter type. String expected." );
- lua_error( L );
- }
- className = lua_tostring( L , 1 );
-
- //method = ( *javaEnv )->GetStaticMethodID( javaEnv , java_lang_class , "forName" ,
- // "(Ljava/lang/String;)Ljava/lang/Class;" );
-
- javaClassName = ( *javaEnv )->NewStringUTF( javaEnv , className );
-
- classInstance = ( *javaEnv )->CallStaticObjectMethod( javaEnv , java_lang_class ,
- java_lang_class_forname_method , javaClassName );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * cStr;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , javaClassName );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- cStr = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , cStr );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, cStr );
-
- lua_error( L );
- }
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , javaClassName );
-
- /* pushes new object into lua stack */
-
- return pushJavaClass( L , classInstance );
-}
-
-
-/***************************************************************************
-*
-* Function: createProxy
-* ****/
-int createProxy( lua_State * L )
-{
- jint ret;
- lua_Number stateIndex;
- const char * impl;
- //jmethodID method;
- jthrowable exp;
- jstring str;
- JNIEnv * javaEnv;
-
- if ( lua_gettop( L ) != 2 )
- {
- lua_pushstring( L , "Error. Function createProxy expects 2 arguments." );
- lua_error( L );
- }
-
- /* Gets the luaState index */
- lua_pushstring( L , LUAJAVASTATEINDEX );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isnumber( L , -1 ) )
- {
- lua_pushstring( L , "Impossible to identify luaState id." );
- lua_error( L );
- }
-
- stateIndex = lua_tonumber( L , -1 );
- lua_pop( L , 1 );
-
- if ( !lua_isstring( L , 1 ) || !lua_istable( L , 2 ) )
- {
- lua_pushstring( L , "Invalid Argument types. Expected (string, table)." );
- lua_error( L );
- }
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- //method = ( *javaEnv )->GetStaticMethodID( javaEnv , luajava_api_class , "createProxyObject" ,
- // "(ILjava/lang/String;)I" );
-
- impl = lua_tostring( L , 1 );
-
- str = ( *javaEnv )->NewStringUTF( javaEnv , impl );
-
- ret = ( *javaEnv )->CallStaticIntMethod( javaEnv , luajava_api_class , luajava_create_proxy_method, (jint)stateIndex , str );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * cStr;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , str );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- cStr = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , cStr );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, cStr );
-
- lua_error( L );
- }
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , str );
-
- return ret;
-}
-
-/***************************************************************************
-*
-* Function: javaNew
-* ****/
-
-int javaNew( lua_State * L )
-{
- int top;
- jint ret;
- jclass clazz;
- jmethodID method;
- jobject classInstance ;
- jthrowable exp;
- jobject * userData;
- lua_Number stateIndex;
- JNIEnv * javaEnv;
-
- top = lua_gettop( L );
-
- if ( top == 0 )
- {
- lua_pushstring( L , "Error. Invalid number of parameters." );
- lua_error( L );
- }
-
- /* Gets the luaState index */
- lua_pushstring( L , LUAJAVASTATEINDEX );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isnumber( L , -1 ) )
- {
- lua_pushstring( L , "Impossible to identify luaState id." );
- lua_error( L );
- }
-
- stateIndex = lua_tonumber( L , -1 );
- lua_pop( L , 1 );
-
- /* Gets the java Class reference */
- if ( !isJavaObject( L , 1 ) )
- {
- lua_pushstring( L , "Argument not a valid Java Class." );
- lua_error( L );
- }
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- //clazz = ( *javaEnv )->FindClass( javaEnv , "java/lang/Class" );
-
- userData = ( jobject * ) lua_touserdata( L , 1 );
-
- classInstance = ( jobject ) *userData;
-
- //clazz = (*javaEnv)->GetObjectClass(javaEnv,classInstance);
-
- //if ( ( *javaEnv )->IsInstanceOf( javaEnv , classInstance , java_lang_class ) == JNI_FALSE )
- // {
- // lua_pushstring( L , "Argument not a valid Java Class." );
- // lua_error( L );
- //}
-
- //method = ( *javaEnv )->GetStaticMethodID( javaEnv , luajava_api_class , "javaNew" ,
- //"(ILjava/lang/Class;)I" );
-
- // if ( clazz == NULL || luajava_new_method == NULL )
- // {
- // lua_pushstring( L , "Invalid method org.keplerproject.luajava.LuaJavaAPI.javaNew." );
- // lua_error( L );
- // }
-
- //ret = ( *javaEnv )->CallStaticIntMethod( javaEnv , clazz , method , (jint)stateIndex , classInstance );
- ret = ( *javaEnv )->CallStaticIntMethod( javaEnv , luajava_api_class , luajava_new_method , (jint)stateIndex , classInstance );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * str;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- str = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , str );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, str );
-
- lua_error( L );
- }
- return ret;
-}
-
-
-/***************************************************************************
-*
-* Function: javaNewInstance
-* ****/
-
-int javaNewInstance( lua_State * L )
-{
- jint ret;
- jmethodID method;
- const char * className;
- jstring javaClassName;
- jthrowable exp;
- lua_Number stateIndex;
- JNIEnv * javaEnv;
-
- /* Gets the luaState index */
- lua_pushstring( L , LUAJAVASTATEINDEX );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isnumber( L , -1 ) )
- {
- lua_pushstring( L , "Impossible to identify luaState id." );
- lua_error( L );
- }
-
- stateIndex = lua_tonumber( L , -1 );
- lua_pop( L , 1 );
-
- /* get the string parameter */
- if ( !lua_isstring( L , 1 ) )
- {
- lua_pushstring( L , "Invalid parameter type. String expected as first parameter." );
- lua_error( L );
- }
-
- className = lua_tostring( L , 1 );
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- //method = ( *javaEnv )->GetStaticMethodID( javaEnv , luajava_api_class , "javaNewInstance" ,
- // "(ILjava/lang/String;)I" );
-
- javaClassName = ( *javaEnv )->NewStringUTF( javaEnv , className );
-
- ret = ( *javaEnv )->CallStaticIntMethod( javaEnv , luajava_api_class , luajava_new_instance_method, (jint)stateIndex ,
- javaClassName );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * str;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , javaClassName );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- str = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , str );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, str );
-
- lua_error( L );
- }
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , javaClassName );
-
- return ret;
-}
-
-
-/***************************************************************************
-*
-* Function: javaLoadLib
-* ****/
-
-int javaLoadLib( lua_State * L )
-{
- jint ret;
- int top;
- const char * className, * methodName;
- lua_Number stateIndex;
- jmethodID method;
- jthrowable exp;
- jstring javaClassName , javaMethodName;
- JNIEnv * javaEnv;
-
- top = lua_gettop( L );
-
- if ( top != 2 )
- {
- lua_pushstring( L , "Error. Invalid number of parameters." );
- lua_error( L );
- }
-
- /* Gets the luaState index */
- lua_pushstring( L , LUAJAVASTATEINDEX );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isnumber( L , -1 ) )
- {
- lua_pushstring( L , "Impossible to identify luaState id." );
- lua_error( L );
- }
-
- stateIndex = lua_tonumber( L , -1 );
- lua_pop( L , 1 );
-
-
- if ( !lua_isstring( L , 1 ) || !lua_isstring( L , 2 ) )
- {
- lua_pushstring( L , "Invalid parameter. Strings expected." );
- lua_error( L );
- }
-
- className = lua_tostring( L , 1 );
- methodName = lua_tostring( L , 2 );
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- method = ( *javaEnv )->GetStaticMethodID( javaEnv , luajava_api_class , "javaLoadLib" ,
- "(ILjava/lang/String;Ljava/lang/String;)I" );
-
- javaClassName = ( *javaEnv )->NewStringUTF( javaEnv , className );
- javaMethodName = ( *javaEnv )->NewStringUTF( javaEnv , methodName );
-
- ret = ( *javaEnv )->CallStaticIntMethod( javaEnv , luajava_api_class , method, (jint)stateIndex ,
- javaClassName , javaMethodName );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * str;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , javaClassName );
- ( *javaEnv )->DeleteLocalRef( javaEnv , javaMethodName );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- str = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , str );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, str );
-
- lua_error( L );
- }
-
- ( *javaEnv )->DeleteLocalRef( javaEnv , javaClassName );
- ( *javaEnv )->DeleteLocalRef( javaEnv , javaMethodName );
-
- return ret;
-}
-
-
-/***************************************************************************
-*
-* Function: pushJavaClass
-* ****/
-
-int pushJavaClass( lua_State * L , jobject javaObject )
-{
- jobject * userData , globalRef;
-
- /* Gets the JNI Environment */
- JNIEnv * javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- globalRef = ( *javaEnv )->NewGlobalRef( javaEnv , javaObject );
-
- userData = ( jobject * ) lua_newuserdata( L , sizeof( jobject ) );
- *userData = globalRef;
-
- /* Creates metatable */
- lua_newtable( L );
-
- /* pushes the __index metamethod */
- lua_pushstring( L , LUAINDEXMETAMETHODTAG );
- lua_pushcfunction( L , &classIndex );
- lua_rawset( L , -3 );
-
- /* pushes the __gc metamethod */
- lua_pushstring( L , LUAGCMETAMETHODTAG );
- lua_pushcfunction( L , &gc );
- lua_rawset( L , -3 );
-
- /* Is Java Object boolean */
- lua_pushstring( L , LUAJAVAOBJECTIND );
- lua_pushboolean( L , 1 );
- lua_rawset( L , -3 );
-
- if ( lua_setmetatable( L , -2 ) == 0 )
- {
- lua_pushstring( L , "Cannot create proxy to java class." );
- lua_error( L );
- }
-
- return 1;
-}
-
-
-/***************************************************************************
-*
-* Function: pushJavaObject
-* ****/
-
-int pushJavaObject( lua_State * L , jobject javaObject )
-{
- jobject * userData , globalRef;
-
- /* Gets the JNI Environment */
- JNIEnv * javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- globalRef = ( *javaEnv )->NewGlobalRef( javaEnv , javaObject );
-
- userData = ( jobject * ) lua_newuserdata( L , sizeof( jobject ) );
- *userData = globalRef;
-
- /* Creates metatable */
- lua_newtable( L );
-
- /* pushes the __index metamethod */
- lua_pushstring( L , LUAINDEXMETAMETHODTAG );
- lua_pushcfunction( L , &objectIndex );
- lua_rawset( L , -3 );
-
- /* pushes the __gc metamethod */
- lua_pushstring( L , LUAGCMETAMETHODTAG );
- lua_pushcfunction( L , &gc );
- lua_rawset( L , -3 );
-
- /* Is Java Object boolean */
- lua_pushstring( L , LUAJAVAOBJECTIND );
- lua_pushboolean( L , 1 );
- lua_rawset( L , -3 );
-
- if ( lua_setmetatable( L , -2 ) == 0 )
- {
- lua_pushstring( L , "Cannot create proxy to java object." );
- lua_error( L );
- }
-
- return 1;
-}
-
-
-/***************************************************************************
-*
-* Function: isJavaObject
-* ****/
-
-int isJavaObject( lua_State * L , int idx )
-{
- if ( !lua_isuserdata( L , idx ) )
- return 0;
-
- if ( lua_getmetatable( L , idx ) == 0 )
- return 0;
-
- lua_pushstring( L , LUAJAVAOBJECTIND );
- lua_rawget( L , -2 );
-
- if (lua_isnil( L, -1 ))
- {
- lua_pop( L , 2 );
- return 0;
- }
- lua_pop( L , 2 );
- return 1;
-}
-
-
-/***************************************************************************
-*
-* Function: getStateFromCPtr
-* ****/
-
-lua_State * getStateFromCPtr( JNIEnv * env , jobject cptr )
-{
- lua_State * L;
-
- jclass classPtr = ( *env )->GetObjectClass( env , cptr );
- jfieldID CPtr_peer_ID = ( *env )->GetFieldID( env , classPtr , "peer" , "J" );
- jbyte * peer = ( jbyte * ) ( *env )->GetLongField( env , cptr , CPtr_peer_ID );
-
- L = ( lua_State * ) peer;
-
- pushJNIEnv( env , L );
-
- return L;
-}
-
-
-/***************************************************************************
-*
-* Function: luaJavaFunctionCall
-* ****/
-
-int luaJavaFunctionCall( lua_State * L )
-{
- jobject * obj;
- jthrowable exp;
- int ret;
- JNIEnv * javaEnv;
-
- if ( !isJavaObject( L , 1 ) )
- {
- lua_pushstring( L , "Not a java Function." );
- lua_error( L );
- }
-
- obj = lua_touserdata( L , 1 );
-
- /* Gets the JNI Environment */
- javaEnv = getEnvFromState( L );
- if ( javaEnv == NULL )
- {
- lua_pushstring( L , "Invalid JNI Environment." );
- lua_error( L );
- }
-
- /* the Object must be an instance of the JavaFunction class */
- if ( ( *javaEnv )->IsInstanceOf( javaEnv , *obj , java_function_class ) ==
- JNI_FALSE )
- {
- fprintf( stderr , "Called Java object is not a JavaFunction\n");
- return 0;
- }
-
- ret = ( *javaEnv )->CallIntMethod( javaEnv , *obj , java_function_method );
-
- exp = ( *javaEnv )->ExceptionOccurred( javaEnv );
-
- /* Handles exception */
- if ( exp != NULL )
- {
- jobject jstr;
- const char * str;
-
- ( *javaEnv )->ExceptionClear( javaEnv );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , get_message_method );
-
- if ( jstr == NULL )
- {
- jmethodID methodId;
-
- methodId = ( *javaEnv )->GetMethodID( javaEnv , throwable_class , "toString" , "()Ljava/lang/String;" );
- jstr = ( *javaEnv )->CallObjectMethod( javaEnv , exp , methodId );
- }
-
- str = ( *javaEnv )->GetStringUTFChars( javaEnv , jstr , NULL );
-
- lua_pushstring( L , str );
-
- ( *javaEnv )->ReleaseStringUTFChars( javaEnv , jstr, str );
-
- lua_error( L );
- }
- return ret;
-}
-
-
-/***************************************************************************
-*
-* Function: luaJavaFunctionCall
-* ****/
-
-JNIEnv * getEnvFromState( lua_State * L )
-{
- JNIEnv ** udEnv;
-
- lua_pushstring( L , LUAJAVAJNIENVTAG );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isuserdata( L , -1 ) )
- {
- lua_pop( L , 1 );
- return NULL;
- }
-
- udEnv = ( JNIEnv ** ) lua_touserdata( L , -1 );
-
- lua_pop( L , 1 );
-
- return * udEnv;
-}
-
-
-/***************************************************************************
-*
-* Function: pushJNIEnv
-* ****/
-
-void pushJNIEnv( JNIEnv * env , lua_State * L )
-{
- JNIEnv ** udEnv;
-
- lua_pushstring( L , LUAJAVAJNIENVTAG );
- lua_rawget( L , LUA_REGISTRYINDEX );
-
- if ( !lua_isnil( L , -1 ) )
- {
- udEnv = ( JNIEnv ** ) lua_touserdata( L , -1 );
- *udEnv = env;
- lua_pop( L , 1 );
- }
- else
- {
- lua_pop( L , 1 );
- udEnv = ( JNIEnv ** ) lua_newuserdata( L , sizeof( JNIEnv * ) );
- *udEnv = env;
-
- lua_pushstring( L , LUAJAVAJNIENVTAG );
- lua_insert( L , -2 );
- lua_rawset( L , LUA_REGISTRYINDEX );
- }
-}
-
-/*
-** Assumes the table is on top of the stack.
-*/
-static void set_info (lua_State *L) {
- lua_pushliteral (L, "_COPYRIGHT");
- lua_pushliteral (L, "Copyright (C) 2003-2007 Kepler Project");
- lua_settable (L, -3);
- lua_pushliteral (L, "_DESCRIPTION");
- lua_pushliteral (L, "LuaJava is a script tool for Java");
- lua_settable (L, -3);
- lua_pushliteral (L, "_NAME");
- lua_pushliteral (L, "LuaJava");
- lua_settable (L, -3);
- lua_pushliteral (L, "_VERSION");
- lua_pushliteral (L, "1.1");
- lua_settable (L, -3);
-}
-
-/**************************** JNI FUNCTIONS ****************************/
-
-/************************************************************************
-* JNI Called function
-* LuaJava API Functin
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState_luajava_1open
- ( JNIEnv * env , jobject jobj , jobject cptr , jint stateId )
-{
- lua_State* L;
-
- jclass tempClass;
-
- L = getStateFromCPtr( env , cptr );
-
- lua_pushstring( L , LUAJAVASTATEINDEX );
- lua_pushnumber( L , (lua_Number)stateId );
- lua_settable( L , LUA_REGISTRYINDEX );
-
-
- lua_newtable( L );
-
- lua_setglobal( L , "luajava" );
-
- lua_getglobal( L , "luajava" );
-
- set_info( L);
-
- lua_pushstring( L , "bindClass" );
- lua_pushcfunction( L , &javaBindClass );
- lua_settable( L , -3 );
-
- lua_pushstring( L , "new" );
- lua_pushcfunction( L , &javaNew );
- lua_settable( L , -3 );
-
- lua_pushstring( L , "array" );
- lua_pushcfunction( L , &javaArray );
- lua_settable( L , -3 );
-
- lua_pushstring( L , "newInstance" );
- lua_pushcfunction( L , &javaNewInstance );
- lua_settable( L , -3 );
-
- lua_pushstring( L , "loadLib" );
- lua_pushcfunction( L , &javaLoadLib );
- lua_settable( L , -3 );
-
- lua_pushstring( L , "createProxy" );
- lua_pushcfunction( L , &createProxy );
- lua_settable( L , -3 );
-
- lua_pop( L , 1 );
-
- if ( luajava_api_class == NULL )
- {
- tempClass = ( *env )->FindClass( env , "org/keplerproject/luajava/LuaJavaAPI" );
-
- if ( tempClass == NULL )
- {
- fprintf( stderr , "Could not find LuaJavaAPI class\n" );
- exit( 1 );
- }
-
- if ( ( luajava_api_class = ( *env )->NewGlobalRef( env , tempClass ) ) == NULL )
- {
- fprintf( stderr , "Could not bind to LuaJavaAPI class\n" );
- exit( 1 );
- }
-
- luajava_new_method = ( *env )->GetStaticMethodID( env , luajava_api_class , "javaNew" ,
- "(ILjava/lang/Class;)I" );
- luajava_new_array_method = (*env)->GetStaticMethodID(env,luajava_api_class,"javaArray",
- "(ILjava/lang/Class;I)I");
- luajava_new_instance_method = ( *env )->GetStaticMethodID( env , luajava_api_class , "javaNewInstance" ,
- "(ILjava/lang/String;)I" );
- luajava_check_field_method = ( *env )->GetStaticMethodID( env , luajava_api_class , "checkField" ,
- "(ILjava/lang/Object;Ljava/lang/String;)I" );
- luajava_object_index_method = ( *env )->GetStaticMethodID( env , luajava_api_class , "objectIndex" ,
- "(ILjava/lang/Object;Ljava/lang/String;)I" );
- luajava_class_index_method = ( *env )->GetStaticMethodID( env , luajava_api_class , "classIndex" ,
- "(ILjava/lang/Class;Ljava/lang/String;)I" );
- luajava_create_proxy_method = ( *env )->GetStaticMethodID( env , luajava_api_class , "createProxyObject" ,
- "(ILjava/lang/String;)I" );
-
- //( *javaEnv )->GetStaticMethodID( javaEnv , luajava_api_class , "javaNewInstance" ,
- //"(ILjava/lang/String;)I" );
- }
-
- if ( java_function_class == NULL )
- {
- tempClass = ( *env )->FindClass( env , "org/keplerproject/luajava/JavaFunction" );
-
- if ( tempClass == NULL )
- {
- fprintf( stderr , "Could not find JavaFunction interface\n" );
- exit( 1 );
- }
-
- if ( ( java_function_class = ( *env )->NewGlobalRef( env , tempClass ) ) == NULL )
- {
- fprintf( stderr , "Could not bind to JavaFunction interface\n" );
- exit( 1 );
- }
- }
-
- if ( java_function_method == NULL )
- {
- java_function_method = ( *env )->GetMethodID( env , java_function_class , "execute" , "()I");
- if ( !java_function_method )
- {
- fprintf( stderr , "Could not find method in JavaFunction\n" );
- exit( 1 );
- }
- }
-
- if ( throwable_class == NULL )
- {
- tempClass = ( *env )->FindClass( env , "java/lang/Throwable" );
-
- if ( tempClass == NULL )
- {
- fprintf( stderr , "Error. Couldn't bind java class java.lang.Throwable\n" );
- exit( 1 );
- }
-
- throwable_class = ( *env )->NewGlobalRef( env , tempClass );
-
- if ( throwable_class == NULL )
- {
- fprintf( stderr , "Error. Couldn't bind java class java.lang.Throwable\n" );
- exit( 1 );
- }
- }
-
- if ( get_message_method == NULL )
- {
- get_message_method = ( *env )->GetMethodID( env , throwable_class , "getMessage" ,
- "()Ljava/lang/String;" );
-
- if ( get_message_method == NULL )
- {
- fprintf(stderr, "Could not find method in java.lang.Throwable\n");
- exit(1);
- }
- }
-
- if ( java_lang_class == NULL )
- {
- tempClass = ( *env )->FindClass( env , "java/lang/Class" );
-
- if ( tempClass == NULL )
- {
- fprintf( stderr , "Error. Coundn't bind java class java.lang.Class\n" );
- exit( 1 );
- }
-
- java_lang_class = ( *env )->NewGlobalRef( env , tempClass );
-
- if ( java_lang_class == NULL )
- {
- fprintf( stderr , "Error. Couldn't bind java class java.lang.Throwable\n" );
- exit( 1 );
- }
-
- java_lang_class_forname_method = ( *env )->GetStaticMethodID( env , java_lang_class , "forName" ,
- "(Ljava/lang/String;)Ljava/lang/Class;" );
- }
-
- pushJNIEnv( env , L );
-}
-
-/************************************************************************
-* JNI Called function
-* LuaJava API Functin
-************************************************************************/
-
-JNIEXPORT jobject JNICALL Java_org_keplerproject_luajava_LuaState__1getObjectFromUserdata
- (JNIEnv * env , jobject jobj , jobject cptr , jint index )
-{
- /* Get luastate */
- lua_State * L = getStateFromCPtr( env , cptr );
- jobject * obj;
-
- if ( !isJavaObject( L , index ) )
- {
- ( *env )->ThrowNew( env , ( *env )->FindClass( env , "java/lang/Exception" ) ,
- "Index is not a java object" );
- return NULL;
- }
-
- obj = ( jobject * ) lua_touserdata( L , index );
-
- return *obj;
-}
-
-
-/************************************************************************
-* JNI Called function
-* LuaJava API Functin
-************************************************************************/
-
-JNIEXPORT jboolean JNICALL Java_org_keplerproject_luajava_LuaState__1isObject
- (JNIEnv * env , jobject jobj , jobject cptr , jint index )
-{
- /* Get luastate */
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return (isJavaObject( L , index ) ? JNI_TRUE : JNI_FALSE );
-}
-
-
-/************************************************************************
-* JNI Called function
-* LuaJava API Functin
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushJavaObject
- (JNIEnv * env , jobject jobj , jobject cptr , jobject obj )
-{
- /* Get luastate */
- lua_State* L = getStateFromCPtr( env , cptr );
-
- pushJavaObject( L , obj );
-}
-
-
-/************************************************************************
-* JNI Called function
-* LuaJava API Functin
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushJavaFunction
- (JNIEnv * env , jobject jobj , jobject cptr , jobject obj )
-{
- /* Get luastate */
- lua_State* L = getStateFromCPtr( env , cptr );
-
- jobject * userData , globalRef;
-
- globalRef = ( *env )->NewGlobalRef( env , obj );
-
- userData = ( jobject * ) lua_newuserdata( L , sizeof( jobject ) );
- *userData = globalRef;
-
- /* Creates metatable */
- lua_newtable( L );
-
- /* pushes the __index metamethod */
- lua_pushstring( L , LUACALLMETAMETHODTAG );
- lua_pushcfunction( L , &luaJavaFunctionCall );
- lua_rawset( L , -3 );
-
- /* pusher the __gc metamethod */
- lua_pushstring( L , LUAGCMETAMETHODTAG );
- lua_pushcfunction( L , &gc );
- lua_rawset( L , -3 );
-
- lua_pushstring( L , LUAJAVAOBJECTIND );
- lua_pushboolean( L , 1 );
- lua_rawset( L , -3 );
-
- if ( lua_setmetatable( L , -2 ) == 0 )
- {
- ( *env )->ThrowNew( env , ( *env )->FindClass( env , "org/keplerproject/luajava/LuaException" ) ,
- "Index is not a java object" );
- }
-}
-
-
-/************************************************************************
-* JNI Called function
-* LuaJava API Functin
-************************************************************************/
-
-JNIEXPORT jboolean JNICALL Java_org_keplerproject_luajava_LuaState__1isJavaFunction
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- /* Get luastate */
- lua_State* L = getStateFromCPtr( env , cptr );
- jobject * obj;
-
- if ( !isJavaObject( L , idx ) )
- {
- return JNI_FALSE;
- }
-
- obj = ( jobject * ) lua_touserdata( L , idx );
-
- return ( *env )->IsInstanceOf( env , *obj , java_function_class );
-
-}
-
-
-/*********************** LUA API FUNCTIONS ******************************/
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jobject JNICALL Java_org_keplerproject_luajava_LuaState__1open
- (JNIEnv * env , jobject jobj)
-{
-
- lua_State * L = lua_open();
-
- jobject obj;
-
- jclass tempClass;
-
- tempClass = ( *env )->FindClass( env , "org/keplerproject/luajava/CPtr" );
-
- obj = ( *env )->AllocObject( env , tempClass );
- if ( obj )
- {
- ( *env )->SetLongField( env , obj , ( *env )->GetFieldID( env , tempClass , "peer", "J" ) , ( jlong ) L );
- }
-
-/******************* DAN'S CUSTOM SQL STARTUP *************************/
- /*lua_newtable(L);
- lua_pushstring(L,"package");
- lua_pushvalue(L,-2);
- lua_settable(L,LUA_GLOBALSINDEX);
-
- lua_newtable(L);
- lua_pushstring(L, "preload");
- lua_pushvalue(L, -2);
- lua_settable(L, -4);
- lua_remove(L, -2);
-
- // package.preload["lsocket"] = luaopen_lsocket
- lua_pushstring(L, "lsqlite3");
- lua_pushcfunction(L, luaopen_lsqlite3);
- lua_settable(L, -3);*/
-
-
- return obj;
-
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openBase
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- //luaopen_base( L );
- lua_pushcfunction( L , luaopen_base );
- lua_pushstring( L , "" );
- lua_call(L , 1 , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openTable
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- //luaopen_table( L );
- lua_pushcfunction( L , luaopen_table );
- lua_pushstring( L , LUA_TABLIBNAME );
- lua_call(L , 1 , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openIo
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- //luaopen_io( L );
- lua_pushcfunction( L , luaopen_io );
- lua_pushstring( L , LUA_IOLIBNAME );
- lua_call(L , 1 , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openOs
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- //luaopen_os( L );
- lua_pushcfunction( L , luaopen_os );
- lua_pushstring( L , LUA_OSLIBNAME );
- lua_call(L , 1 , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openString
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- //luaopen_string( L );
- lua_pushcfunction( L , luaopen_string );
- lua_pushstring( L , LUA_STRLIBNAME );
- lua_call(L , 1 , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openMath
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- //luaopen_math( L );
- lua_pushcfunction( L , luaopen_math );
- lua_pushstring( L , LUA_MATHLIBNAME );
- lua_call(L , 1 , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openDebug
- (JNIEnv * env, jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- //luaopen_debug( L );
- lua_pushcfunction( L , luaopen_debug );
- lua_pushstring( L , LUA_DBLIBNAME );
- lua_call(L , 1 , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openPackage
- (JNIEnv * env, jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- //luaopen_package( L );
- lua_pushcfunction( L , luaopen_package );
- lua_pushstring( L , LUA_LOADLIBNAME );
- lua_call(L , 1 , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1openLibs
- (JNIEnv * env, jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- luaL_openlibs( L );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1close
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_close( L );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jobject JNICALL Java_org_keplerproject_luajava_LuaState__1newthread
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- lua_State * newThread;
-
- jobject obj;
- jclass tempClass;
-
- newThread = lua_newthread( L );
-
- tempClass = ( *env )->FindClass( env , "org/keplerproject/luajava/CPtr" );
- obj = ( *env )->AllocObject( env , tempClass );
- if ( obj )
- {
- ( *env )->SetLongField( env , obj , ( *env )->GetFieldID( env , tempClass ,
- "peer" , "J" ), ( jlong ) L );
- }
-
- return obj;
-
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1getTop
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_gettop( L );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1setTop
- (JNIEnv * env , jobject jobj , jobject cptr , jint top)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_settop( L , ( int ) top );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushValue
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_pushvalue( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1remove
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_remove( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1insert
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_insert( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1replace
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_replace( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1checkStack
- (JNIEnv * env , jobject jobj , jobject cptr , jint sz)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_checkstack( L , ( int ) sz );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1xmove
- (JNIEnv * env , jobject jobj , jobject from , jobject to , jint n)
-{
- lua_State * fr = getStateFromCPtr( env , from );
- lua_State * t = getStateFromCPtr( env , to );
-
- lua_xmove( fr , t , ( int ) n );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isNumber
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_isnumber( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isString
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_isstring( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isFunction
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_isfunction( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isCFunction
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_iscfunction( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isUserdata
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_isuserdata( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isTable
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_istable( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isBoolean
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_isboolean( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isNil
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_isnil( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isNone
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_isnone( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1isNoneOrNil
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_isnoneornil( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1type
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_type( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jstring JNICALL Java_org_keplerproject_luajava_LuaState__1typeName
- (JNIEnv * env , jobject jobj , jobject cptr , jint tp)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- const char * name = lua_typename( L , tp );
-
- return ( *env )->NewStringUTF( env , name );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1equal
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx1 , jint idx2)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_equal( L , idx1 , idx2 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1rawequal
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx1 , jint idx2)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_rawequal( L , idx1 , idx2 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1lessthan
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx1 , jint idx2)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_lessthan( L , idx1 ,idx2 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jdouble JNICALL Java_org_keplerproject_luajava_LuaState__1toNumber
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jdouble ) lua_tonumber( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1toInteger
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_tointeger( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1toBoolean
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_toboolean( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jstring JNICALL Java_org_keplerproject_luajava_LuaState__1toString
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- const char * str = lua_tostring( L , idx );
-
- return ( *env )->NewStringUTF( env , str );
-}
-
-JNIEXPORT jbyteArray JNICALL Java_org_keplerproject_luajava_LuaState__1toBytes
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- jbyteArray jb;
- size_t len;
- lua_Number length;
-
- lua_State * L = getStateFromCPtr(env,cptr);
-
- lua_pushvalue(L,idx);
-
- lua_getglobal(L,"string");
- lua_getfield(L,-1,"len");
- lua_remove(L,-2);
-
- lua_insert(L,-2);
- lua_call(L,1,1);
-
- length = lua_tonumber(L,-1);
- lua_pop(L,1);
-
-
-
- const char * str = lua_tostring(L,idx);
- //len = strlen(str);
- jb = (*env)->NewByteArray(env,length);
-
- (*env)->SetByteArrayRegion(env,jb,0,length,str);
-
- return jb;
-}
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1strlen
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_strlen( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1objlen
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_objlen( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jobject JNICALL Java_org_keplerproject_luajava_LuaState__1toThread
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L , * thr;
-
- jobject obj;
- jclass tempClass;
-
- L = getStateFromCPtr( env , cptr );
-
- thr = lua_tothread( L , ( int ) idx );
-
- tempClass = ( *env )->FindClass( env , "org/keplerproject/luajava/CPtr" );
-
- obj = ( *env )->AllocObject( env , tempClass );
- if ( obj )
- {
- ( *env )->SetLongField( env , obj , ( *env )->GetFieldID( env , tempClass , "peer", "J" ) , ( jlong ) thr );
- }
- return obj;
-
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushNil
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_pushnil( L );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushNumber
- (JNIEnv * env , jobject jobj , jobject cptr , jdouble number)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_pushnumber( L , ( lua_Number ) number );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushString__Lorg_keplerproject_luajava_CPtr_2Ljava_lang_String_2
- (JNIEnv * env , jobject jobj , jobject cptr , jstring str)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * uniStr;
-
- uniStr = ( *env )->GetStringUTFChars( env , str , NULL );
-
- lua_pushstring( L , uniStr );
-
- ( *env )->ReleaseStringUTFChars( env , str , uniStr );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushString__Lorg_keplerproject_luajava_CPtr_2_3BI
- (JNIEnv * env , jobject jobj , jobject cptr , jbyteArray bytes , jint n)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- char * cBytes;
-
- cBytes = ( char * ) ( *env )->GetByteArrayElements( env , bytes, NULL );
-
- lua_pushlstring( L , cBytes , n );
-
- ( *env )->ReleaseByteArrayElements( env , bytes , cBytes , 0 );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pushBoolean
- (JNIEnv * env , jobject jobj , jobject cptr , jint jbool)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_pushboolean( L , ( int ) jbool );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1getTable
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_gettable( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1getField
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx , jstring k)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- const char * uniStr;
- uniStr = ( *env )->GetStringUTFChars( env , k , NULL );
-
- lua_getfield( L , ( int ) idx , uniStr );
-
- ( *env )->ReleaseStringUTFChars( env , k , uniStr );
-}
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1rawGet
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_rawget( L , (int)idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1rawGetI
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx, jint n)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_rawgeti( L , idx , n );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1createTable
- (JNIEnv * env , jobject jobj , jobject cptr , jint narr , jint nrec)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_createtable( L , ( int ) narr , ( int ) nrec );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1newTable
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_newtable( L );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1getMetaTable
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return lua_getmetatable( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1getFEnv
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_getfenv( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1setTable
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_settable( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1setField
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx , jstring k)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- const char * uniStr;
- uniStr = ( *env )->GetStringUTFChars( env , k , NULL );
-
- lua_setfield( L , ( int ) idx , uniStr );
-
- ( *env )->ReleaseStringUTFChars( env , k , uniStr );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1rawSet
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_rawset( L , (int)idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1rawSetI
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx, jint n)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_rawseti( L , idx , n );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1setMetaTable
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return lua_setmetatable( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1setFEnv
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return lua_setfenv( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1call
- (JNIEnv * env , jobject jobj , jobject cptr , jint nArgs , jint nResults)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_call( L , nArgs , nResults );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1pcall
- (JNIEnv * env , jobject jobj , jobject cptr , jint nArgs , jint nResults , jint errFunc)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_pcall( L , nArgs , nResults , errFunc );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1yield
- (JNIEnv * env , jobject jobj , jobject cptr , jint nResults)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_yield( L , nResults );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1resume
- (JNIEnv * env , jobject jobj , jobject cptr , jint nArgs)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_resume( L , nArgs );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1status
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_status( L );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1gc
- (JNIEnv * env , jobject jobj , jobject cptr , jint what , jint data)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_gc( L , what , data );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1getGcCount
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_getgccount( L );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1next
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_next( L , idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1error
- (JNIEnv * env , jobject jobj , jobject cptr)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) lua_error( L );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1concat
- (JNIEnv * env , jobject jobj , jobject cptr , jint n)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_concat( L , n );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1pop
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- lua_pop( L , ( int ) idx );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1setGlobal
- (JNIEnv * env , jobject jobj , jobject cptr , jstring name)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- const char * str = ( *env )->GetStringUTFChars( env , name, NULL );
-
- lua_setglobal( L , str );
-
- ( *env )->ReleaseStringUTFChars( env , name , str );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1getGlobal
- (JNIEnv * env , jobject jobj , jobject cptr , jstring name)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- const char * str = ( *env )->GetStringUTFChars( env , name, NULL );
-
- lua_getglobal( L , str );
-
- ( *env )->ReleaseStringUTFChars( env , name , str );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LdoFile
- (JNIEnv * env , jobject jobj , jobject cptr , jstring fileName)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- const char * file = ( *env )->GetStringUTFChars( env , fileName, NULL );
-
- int ret;
-
- ret = luaL_dofile( L , file );
-
- ( *env )->ReleaseStringUTFChars( env , fileName , file );
-
- return ( jint ) ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LdoString
- (JNIEnv * env , jobject jobj , jobject cptr , jstring str)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- const char * utfStr = ( * env )->GetStringUTFChars( env , str , NULL );
-
- int ret;
-
- ret = luaL_dostring( L , utfStr );
-
- return ( jint ) ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LgetMetaField
- (JNIEnv * env , jobject jobj , jobject cptr , jint obj , jstring e)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * str = ( *env )->GetStringUTFChars( env , e , NULL );
- int ret;
-
- ret = luaL_getmetafield( L , ( int ) obj , str );
-
- ( *env )->ReleaseStringUTFChars( env , e , str );
-
- return ( jint ) ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LcallMeta
- (JNIEnv * env , jobject jobj , jobject cptr , jint obj , jstring e)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * str = ( *env )->GetStringUTFChars( env , e , NULL );
- int ret;
-
- ret = luaL_callmeta( L , ( int ) obj, str );
-
- ( *env )->ReleaseStringUTFChars( env , e , str );
-
- return ( jint ) ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1Ltyperror
- (JNIEnv * env , jobject jobj , jobject cptr , jint nArg , jstring tName)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * name = ( *env )->GetStringUTFChars( env , tName , NULL );
- int ret;
-
- ret = luaL_typerror( L , ( int ) nArg , name );
-
- ( *env )->ReleaseStringUTFChars( env , tName , name );
-
- return ( jint ) ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LargError
- (JNIEnv * env , jobject jobj , jobject cptr , jint numArg , jstring extraMsg)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * msg = ( *env )->GetStringUTFChars( env , extraMsg , NULL );
- int ret;
-
- ret = luaL_argerror( L , ( int ) numArg , msg );
-
- ( *env )->ReleaseStringUTFChars( env , extraMsg , msg );
-
- return ( jint ) ret;;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jstring JNICALL Java_org_keplerproject_luajava_LuaState__1LcheckString
- (JNIEnv * env , jobject jobj , jobject cptr , jint numArg)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * res;
-
- res = luaL_checkstring( L , ( int ) numArg );
-
- return ( *env )->NewStringUTF( env , res );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jstring JNICALL Java_org_keplerproject_luajava_LuaState__1LoptString
- (JNIEnv * env , jobject jobj , jobject cptr , jint numArg , jstring def)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * d = ( *env )->GetStringUTFChars( env , def , NULL );
- const char * res;
- jstring ret;
-
- res = luaL_optstring( L , ( int ) numArg , d );
-
- ret = ( *env )->NewStringUTF( env , res );
-
- ( *env )->ReleaseStringUTFChars( env , def , d );
-
- return ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jdouble JNICALL Java_org_keplerproject_luajava_LuaState__1LcheckNumber
- (JNIEnv * env , jobject jobj , jobject cptr , jint numArg)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jdouble ) luaL_checknumber( L , ( int ) numArg );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jdouble JNICALL Java_org_keplerproject_luajava_LuaState__1LoptNumber
- (JNIEnv * env , jobject jobj , jobject cptr , jint numArg , jdouble def)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jdouble ) luaL_optnumber( L , ( int ) numArg , ( lua_Number ) def );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LcheckInteger
- (JNIEnv * env , jobject jobj , jobject cptr , jint numArg)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) luaL_checkinteger( L , ( int ) numArg );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LoptInteger
- (JNIEnv * env , jobject jobj , jobject cptr , jint numArg , jint def)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) luaL_optinteger( L , ( int ) numArg , ( lua_Integer ) def );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1LcheckStack
- (JNIEnv * env , jobject jobj , jobject cptr , jint sz , jstring msg)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * m = ( *env )->GetStringUTFChars( env , msg , NULL );
-
- luaL_checkstack( L , ( int ) sz , m );
-
- ( *env )->ReleaseStringUTFChars( env , msg , m );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1LcheckType
- (JNIEnv * env , jobject jobj , jobject cptr , jint nArg , jint t)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- luaL_checktype( L , ( int ) nArg , ( int ) t );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1LcheckAny
- (JNIEnv * env , jobject jobj , jobject cptr , jint nArg)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- luaL_checkany( L , ( int ) nArg );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LnewMetatable
- (JNIEnv * env , jobject jobj , jobject cptr , jstring tName)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * name = ( *env )->GetStringUTFChars( env , tName , NULL );
- int ret;
-
- ret = luaL_newmetatable( L , name );
-
- ( *env )->ReleaseStringUTFChars( env , tName , name );
-
- return ( jint ) ret;;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1LgetMetatable
- (JNIEnv * env , jobject jobj , jobject cptr , jstring tName)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * name = ( *env )->GetStringUTFChars( env , tName , NULL );
-
- luaL_getmetatable( L , name );
-
- ( *env )->ReleaseStringUTFChars( env , tName , name );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1Lwhere
- (JNIEnv * env , jobject jobj , jobject cptr , jint lvl)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- luaL_where( L , ( int ) lvl );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1Lref
- (JNIEnv * env , jobject jobj , jobject cptr , jint t)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) luaL_ref( L , ( int ) t );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1LunRef
- (JNIEnv * env , jobject jobj , jobject cptr , jint t , jint ref)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- luaL_unref( L , ( int ) t , ( int ) ref );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LgetN
- (JNIEnv * env , jobject jobj , jobject cptr , jint t)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- return ( jint ) luaL_getn( L , ( int ) t );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT void JNICALL Java_org_keplerproject_luajava_LuaState__1LsetN
- (JNIEnv * env , jobject jobj , jobject cptr , jint t , jint n)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
-
- luaL_setn( L , ( int ) t , ( int ) n );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LloadFile
- (JNIEnv * env , jobject jobj , jobject cptr , jstring fileName)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * fn = ( *env )->GetStringUTFChars( env , fileName , NULL );
- int ret;
-
- ret = luaL_loadfile( L , fn );
-
- ( *env )->ReleaseStringUTFChars( env , fileName , fn );
-
- return ( jint ) ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LloadBuffer
- (JNIEnv * env , jobject jobj , jobject cptr , jbyteArray buff , jlong sz , jstring n)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- jbyte * cBuff = ( *env )->GetByteArrayElements( env , buff, NULL );
- const char * name = ( * env )->GetStringUTFChars( env , n , NULL );
- int ret;
-
- ret = luaL_loadbuffer( L , ( const char * ) cBuff, ( int ) sz, name );
-
- ( *env )->ReleaseStringUTFChars( env , n , name );
-
- ( *env )->ReleaseByteArrayElements( env , buff , cBuff , 0 );
-
- return ( jint ) ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jint JNICALL Java_org_keplerproject_luajava_LuaState__1LloadString
- (JNIEnv * env , jobject jobj , jobject cptr , jstring str)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * fn = ( *env )->GetStringUTFChars( env , str , NULL );
- int ret;
-
- ret = luaL_loadstring( L , fn );
-
- ( *env )->ReleaseStringUTFChars( env , str , fn );
-
- return ( jint ) ret;
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jstring JNICALL Java_org_keplerproject_luajava_LuaState__1Lgsub
- (JNIEnv * env , jobject jobj , jobject cptr , jstring s , jstring p , jstring r)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * utS = ( *env )->GetStringUTFChars( env , s , NULL );
- const char * utP = ( *env )->GetStringUTFChars( env , p , NULL );
- const char * utR = ( *env )->GetStringUTFChars( env , r , NULL );
-
- const char * sub = luaL_gsub( L , utS , utP , utR );
-
- ( *env )->ReleaseStringUTFChars( env , s , utS );
- ( *env )->ReleaseStringUTFChars( env , p , utP );
- ( *env )->ReleaseStringUTFChars( env , r , utR );
-
- return ( *env )->NewStringUTF( env , sub );
-}
-
-
-/************************************************************************
-* JNI Called function
-* Lua Exported Function
-************************************************************************/
-
-JNIEXPORT jstring JNICALL Java_org_keplerproject_luajava_LuaState__1LfindTable
- (JNIEnv * env , jobject jobj , jobject cptr , jint idx , jstring fname , jint szhint)
-{
- lua_State * L = getStateFromCPtr( env , cptr );
- const char * name = ( *env )->GetStringUTFChars( env , fname , NULL );
-
- const char * sub = luaL_findtable( L , ( int ) idx , name , ( int ) szhint );
-
- ( *env )->ReleaseStringUTFChars( env , fname , name );
-
- return ( *env )->NewStringUTF( env , sub );
-}
diff --git a/BTLib/jni/sqlite3/Android.mk~ b/BTLib/jni/sqlite3/Android.mk~
deleted file mode 100644
index 85969ebb..00000000
--- a/BTLib/jni/sqlite3/Android.mk~
+++ /dev/null
@@ -1,19 +0,0 @@
-LOCAL_PATH := $(call my-dir)
-
-ifeq ($(TARGET_ARCH_ABI),armeabi)
-include $(CLEAR_VARS)
-LOCAL_MODULE := sqlite3
-LOCAL_SRC_FILES := ./sqlite3.c
-LOCAL_CFLAGS := -O3 -Wall -fpic -shared -pedantic -std=c99 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS
-include $(BUILD_SHARED_LIBRARY)
-
-endif
-
-ifeq ($(TARGET_ARCH_ABI),armeabi-v7a)
-include $(CLEAR_VARS)
-LOCAL_MODULE := sqlite3
-LOCAL_SRC_FILES := ./sqlite3.c
-LOCAL_CFLAGS := -O3 -Wall -fpic -shared -pedantic -std=c99 -DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_FTS3_PARENTHESIS
-include $(BUILD_SHARED_LIBRARY)
-endif
-
diff --git a/BTLib/local.properties b/BTLib/local.properties
deleted file mode 100644
index 585c04ff..00000000
--- a/BTLib/local.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must *NOT* be checked into Version Control Systems,
-# as it contains information specific to your local configuration.
-
-# location of the SDK. This is only used by Ant
-# For customization when using a Version Control System, please read the
-# header note.
-sdk.dir=/Users/render/android/adt-bundle-mac-x86_64-20140702/sdk
diff --git a/BTLib/proguard-project.txt b/BTLib/proguard-project.txt
deleted file mode 100644
index f2fe1559..00000000
--- a/BTLib/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/BTLib/project.properties b/BTLib/project.properties
deleted file mode 100644
index 6fdb0df8..00000000
--- a/BTLib/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system use,
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-
-android.library=true
-# Indicates whether an apk should be generated for each density.
-split.density=false
-# Project target.
-target=android-14
diff --git a/BTLib/release/beta/BlowTorch.apk b/BTLib/release/beta/BlowTorch.apk
deleted file mode 100644
index 7833677b..00000000
Binary files a/BTLib/release/beta/BlowTorch.apk and /dev/null differ
diff --git a/BTLib/release/beta/test_config_all.xml b/BTLib/release/beta/test_config_all.xml
deleted file mode 100644
index aaa2eb84..00000000
--- a/BTLib/release/beta/test_config_all.xml
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- default
-
-
-
-
diff --git a/BTLib/release/beta/test_config_small.xml b/BTLib/release/beta/test_config_small.xml
deleted file mode 100644
index f035ffac..00000000
--- a/BTLib/release/beta/test_config_small.xml
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- default
-
-
-
-
diff --git a/BTLib/release/v1.0.1/BlowTorch.apk b/BTLib/release/v1.0.1/BlowTorch.apk
deleted file mode 100644
index 094a7d5e..00000000
Binary files a/BTLib/release/v1.0.1/BlowTorch.apk and /dev/null differ
diff --git a/BTLib/release/v1.0.2/BlowTorch.apk b/BTLib/release/v1.0.2/BlowTorch.apk
deleted file mode 100644
index 62880fdc..00000000
Binary files a/BTLib/release/v1.0.2/BlowTorch.apk and /dev/null differ
diff --git a/BTLib/release/v1.0.3/BlowTorch.apk b/BTLib/release/v1.0.3/BlowTorch.apk
deleted file mode 100644
index 76812578..00000000
Binary files a/BTLib/release/v1.0.3/BlowTorch.apk and /dev/null differ
diff --git a/BTLib/release/v1.0.4/BlowTorch.apk b/BTLib/release/v1.0.4/BlowTorch.apk
deleted file mode 100644
index 904f235f..00000000
Binary files a/BTLib/release/v1.0.4/BlowTorch.apk and /dev/null differ
diff --git a/BTLib/release/v1.0.5/BlowTorch.apk b/BTLib/release/v1.0.5/BlowTorch.apk
deleted file mode 100644
index 57c511cf..00000000
Binary files a/BTLib/release/v1.0.5/BlowTorch.apk and /dev/null differ
diff --git a/BTLib/release/v1.0.6/BlowTorch.apk b/BTLib/release/v1.0.6/BlowTorch.apk
deleted file mode 100644
index dfdbd6b7..00000000
Binary files a/BTLib/release/v1.0.6/BlowTorch.apk and /dev/null differ
diff --git a/BTLib/release/v1.0.7/BlowTorch.apk b/BTLib/release/v1.0.7/BlowTorch.apk
deleted file mode 100644
index 385600ea..00000000
Binary files a/BTLib/release/v1.0.7/BlowTorch.apk and /dev/null differ
diff --git a/BTLib/release/v1/BlowTorch.apk b/BTLib/release/v1/BlowTorch.apk
deleted file mode 100644
index ef815f28..00000000
Binary files a/BTLib/release/v1/BlowTorch.apk and /dev/null differ
diff --git a/BT_Free/.classpath b/BT_Free/.classpath
deleted file mode 100644
index f32941f7..00000000
--- a/BT_Free/.classpath
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/BT_Free/.project b/BT_Free/.project
deleted file mode 100644
index a2a63cbf..00000000
--- a/BT_Free/.project
+++ /dev/null
@@ -1,40 +0,0 @@
-
-
- BlowTorch
-
-
-
-
-
- com.android.ide.eclipse.adt.ResourceManagerBuilder
-
-
-
-
- com.android.ide.eclipse.adt.PreCompilerBuilder
-
-
-
-
- org.eclipse.jdt.core.javabuilder
-
-
-
-
- com.android.ide.eclipse.adt.ApkBuilder
-
-
-
-
-
- com.android.ide.eclipse.adt.AndroidNature
- org.eclipse.jdt.core.javanature
-
-
-
- BTLib_aidl
- 2
- _android_BTLib_3c968d3/aidl
-
-
-
diff --git a/BT_Free/ant.properties b/BT_Free/ant.properties
deleted file mode 100644
index 1442e7a2..00000000
--- a/BT_Free/ant.properties
+++ /dev/null
@@ -1,3 +0,0 @@
-source.dir=src
-key.store=../BTLib/key/bt_privatekey.keystore
-key.alias=btkey
diff --git a/BT_Free/build.xml b/BT_Free/build.xml
deleted file mode 100644
index 45495297..00000000
--- a/BT_Free/build.xml
+++ /dev/null
@@ -1,102 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/BT_Free/custom_rules.xml b/BT_Free/custom_rules.xml
deleted file mode 100644
index bcb8f201..00000000
--- a/BT_Free/custom_rules.xml
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff --git a/BT_Free/integrate_button_ex.py b/BT_Free/integrate_button_ex.py
deleted file mode 100755
index 2431cb10..00000000
--- a/BT_Free/integrate_button_ex.py
+++ /dev/null
@@ -1,61 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Sun Dec 14 15:50:54 2014
-
-@author: render
-"""
-
-import os
-import re
-
-filecontents = ""
-manifest_filename = os.path.dirname(os.path.realpath(__file__)) + "/assets/share/lua/5.1/buttonserver.lua"
-
-with open(manifest_filename,"r") as f:
- contents = [i for i in f]
- #print contents
- mysearch = r'(^.+local buttonWindowName = ")(button_window_ex)(".+$)'
- for line in contents:
-
- match = re.match(r'^(.+")(button_window_ex)(".+$)',line)
- if match:
- prefix = match.group(1)
- value = match.group(2)
- suffix = match.group(3)
- valueinc = 'button_window'
- print "Updating {0} buttonWindowName = {1} to {2}.".format(manifest_filename,value,valueinc)
- newline = prefix + str(valueinc) + suffix + '\n'
-
- filecontents = filecontents + newline
- else:
- filecontents = filecontents + line
-
-#manifest_filename = manifest_filename + "2"
-with open(manifest_filename,"w") as f:
- f.write(filecontents)
-
-filecontents = ""
-manifest_filename = os.path.dirname(os.path.realpath(__file__)) + "/assets/share/lua/5.1/buttonwindow.lua"
-
-with open(manifest_filename,"r") as f:
- contents = [i for i in f]
- #print contents
- for line in contents:
-
- match = re.match(r'^(.+")(Button Sets Ex)(".+$)',line)
- if match:
- prefix = match.group(1)
- value = match.group(2)
- suffix = match.group(3)
- valueinc = 'Button Sets'
- print "Updating {0} buttonWindowName = {1} to {2}.".format(manifest_filename,value,valueinc)
- newline = prefix + str(valueinc) + suffix + '\n'
-
- filecontents = filecontents + newline
- else:
- filecontents = filecontents + line
-
-#manifest_filename = manifest_filename + "2"
-with open(manifest_filename,"w") as f:
- f.write(filecontents)
-
diff --git a/BT_Free/local.properties b/BT_Free/local.properties
deleted file mode 100644
index 585c04ff..00000000
--- a/BT_Free/local.properties
+++ /dev/null
@@ -1,10 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must *NOT* be checked into Version Control Systems,
-# as it contains information specific to your local configuration.
-
-# location of the SDK. This is only used by Ant
-# For customization when using a Version Control System, please read the
-# header note.
-sdk.dir=/Users/render/android/adt-bundle-mac-x86_64-20140702/sdk
diff --git a/BT_Free/makeshift.sh b/BT_Free/makeshift.sh
deleted file mode 100755
index 626d3b4f..00000000
--- a/BT_Free/makeshift.sh
+++ /dev/null
@@ -1,8 +0,0 @@
-ant clean
-python update_manifest.py
-cp -rv ../../btscripts/button_ex/src/ ./assets/share/lua/5.1/
-rm -rf ./assets/share/lua/5.1/button_window_ex.xml
-python integrate_button_ex.py
-ant release
-adb install -r bin/BlowTorch-release.apk
-adb shell am start -n com.happygoatstudios.bt/com.offsetnull.btfree.FreeLauncher
diff --git a/BT_Free/proguard-project.txt b/BT_Free/proguard-project.txt
deleted file mode 100644
index f2fe1559..00000000
--- a/BT_Free/proguard-project.txt
+++ /dev/null
@@ -1,20 +0,0 @@
-# To enable ProGuard in your project, edit project.properties
-# to define the proguard.config property as described in that file.
-#
-# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in ${sdk.dir}/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the ProGuard
-# include property in project.properties.
-#
-# For more details, see
-# http://developer.android.com/guide/developing/tools/proguard.html
-
-# Add any project specific keep options here:
-
-# If your project uses WebView with JS, uncomment the following
-# and specify the fully qualified class name to the JavaScript interface
-# class:
-#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
-# public *;
-#}
diff --git a/BT_Free/proguard.cfg b/BT_Free/proguard.cfg
deleted file mode 100644
index ab207f26..00000000
--- a/BT_Free/proguard.cfg
+++ /dev/null
@@ -1,34 +0,0 @@
--optimizationpasses 5
--dontusemixedcaseclassnames
--dontskipnonpubliclibraryclasses
--dontpreverify
--verbose
--optimizations !code/simplification/arithmetic,!field/*,!class/merging/*
-
--keep public class * extends android.app.Activity
--keep public class * extends android.app.Application
--keep public class * extends android.app.Service
--keep public class * extends android.content.BroadcastReceiver
--keep public class * extends android.content.ContentProvider
--keep public class com.android.vending.licensing.ILicensingService
-
--keepclasseswithmembers class * {
- native ;
-}
-
--keepclasseswithmembers class * {
- public (android.content.Context, android.util.AttributeSet);
-}
-
--keepclasseswithmembers class * {
- public (android.content.Context, android.util.AttributeSet, int);
-}
-
--keepclassmembers enum * {
- public static **[] values();
- public static ** valueOf(java.lang.String);
-}
-
--keep class * implements android.os.Parcelable {
- public static final android.os.Parcelable$Creator *;
-}
diff --git a/BT_Free/project.properties b/BT_Free/project.properties
deleted file mode 100644
index ea588824..00000000
--- a/BT_Free/project.properties
+++ /dev/null
@@ -1,14 +0,0 @@
-# This file is automatically generated by Android Tools.
-# Do not modify this file -- YOUR CHANGES WILL BE ERASED!
-#
-# This file must be checked in Version Control Systems.
-#
-# To customize properties used by the Ant build system use,
-# "ant.properties", and override values to adapt the script to your
-# project structure.
-
-android.library.reference.1=../BTLib
-# Project target.
-target=android-21
-key.store.password=${env.BT_RELEASE_PASS}
-key.alias.password=${env.BT_RELEASE_PASS}
diff --git a/BT_Free/release/v1.0.8/BlowTorch.apk b/BT_Free/release/v1.0.8/BlowTorch.apk
deleted file mode 100644
index b50a2a2a..00000000
Binary files a/BT_Free/release/v1.0.8/BlowTorch.apk and /dev/null differ
diff --git a/BT_Free/release/v1.0.9/BlowTorch.apk b/BT_Free/release/v1.0.9/BlowTorch.apk
deleted file mode 100644
index 76baa08c..00000000
Binary files a/BT_Free/release/v1.0.9/BlowTorch.apk and /dev/null differ
diff --git a/BT_Free/release/v1.1.1/BlowTorch.apk b/BT_Free/release/v1.1.1/BlowTorch.apk
deleted file mode 100644
index d853b429..00000000
Binary files a/BT_Free/release/v1.1.1/BlowTorch.apk and /dev/null differ
diff --git a/BT_Free/release/v1.1.2/BlowTorch.apk b/BT_Free/release/v1.1.2/BlowTorch.apk
deleted file mode 100644
index 7def215f..00000000
Binary files a/BT_Free/release/v1.1.2/BlowTorch.apk and /dev/null differ
diff --git a/BT_Free/release/v1.1.3/BlowTorch.apk b/BT_Free/release/v1.1.3/BlowTorch.apk
deleted file mode 100644
index 0ee3d0f0..00000000
Binary files a/BT_Free/release/v1.1.3/BlowTorch.apk and /dev/null differ
diff --git a/BT_Free/src/main/res/values/strings.xml b/BT_Free/src/main/res/values/strings.xml
deleted file mode 100644
index 437007af..00000000
--- a/BT_Free/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
- false
- com.offsetnull.bt.window.MainWindow.NORMAL_MODE
- blowtorch_notification2
- :stellar
- com.offsetnull.bt.service.IStellarService.MODE_NORMAL
- BlowTorch
- com.happygoatstudios.bt
- BlowTorch
- WAMDROID
- BlowTorch is a mobile terminal emulator with features that aide in playing text based adventure games (MUDs). For more information on the capabilities of this client, please visit the online documentation.
-
\ No newline at end of file
diff --git a/BT_Free/update_manifest.py b/BT_Free/update_manifest.py
deleted file mode 100755
index 128efc91..00000000
--- a/BT_Free/update_manifest.py
+++ /dev/null
@@ -1,34 +0,0 @@
-# -*- coding: utf-8 -*-
-"""
-Created on Sun Dec 14 15:50:54 2014
-
-@author: render
-"""
-
-import re
-
-filecontents = ""
-manifest_filename = "AndroidManifest.xml"
-
-with open(manifest_filename,"r") as f:
- contents = [i for i in f]
- #print contents
- mysearch = r'(^.+.+$)'
- for line in contents:
-
- match = re.match(r'^(.+")(\d+)(" android:name="BLOWTORCH_LUA_LIBS_VERSION".+$)',line)
- if match:
- prefix = match.group(1)
- value = int(match.group(2))
- suffix = match.group(3)
- valueinc = value + 1
- print "Updating {0} from version {1} to {2}.".format(manifest_filename,value,valueinc)
- newline = prefix + str(valueinc) + suffix
-
- filecontents = filecontents + newline
- else:
- filecontents = filecontents + line
-
-#manifest_filename = manifest_filename + "2"
-with open(manifest_filename,"w") as f:
- f.write(filecontents)
diff --git a/BUILDING_LUA.txt b/BUILDING_LUA.txt
deleted file mode 100644
index d94f52ca..00000000
--- a/BUILDING_LUA.txt
+++ /dev/null
@@ -1,29 +0,0 @@
-COMPILING LUAJAVA FOR ANDROID FOR BLOWTORCH FOR SCRIPTING!!!
-
-pre step- ensure java is accessible from windows
-
-Step 1: Obtain sources for luajava-1.1 and lua-5.1 (or so)
-
-Step 2: Unpack folders
-
-Step 3: Open WINDOWS_CMD, and browse to luajava-1.1
-
-Step 4: Create luajava-1.1\src\gen for generated .class files
-
-Step 4: build the classes with this command-
-javac -sourcepath .\src\java\ .\src\java\org\keplerproject\luajava\*.java
-
-Step 5: execute same command with warning supression. -Xlint to suppress warnings.
-
-Step 6: build the jar file.
-6a) move to src\java for appropriate classpathing while building.
-
-6b) execute to build the .jar--->> jar cvf ../../luajava.jar ./org/keplerproject/luajava/*.class
-
-6c) move back two dirs, ../../ (luajava-1.1 root)
-
-7) generate luajava.h header.
-> javah -o src/c/luajava.h -classpath "path\to\luajava.jar" org.keplerproject.luajava.LuaState
-
-8) COPY STUFF OVER TO MAKE THE ANDROID NDK PROJECT. make luajava-1.1/jni/
-
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
index 00000000..88fa9d36
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,96 @@
+# Changelog
+
+All notable changes to this project will be documented in this file.
+
+The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
+
+## [Unreleased]
+
+### Added
+- Rebrand from BlowTorch to MUDWammer: rename packages, modules, assets, and display strings
+
+### Fixed
+- Fix launcher buttons not visible on bottom of screen (#103)
+- Fix app crash: applicationId mismatch causes NameNotFoundException on launch (#102)
+- Fix ComposeView crash in all Dialog subclasses missing LifecycleOwner (#93)
+- Fix WifiManager crash on connection startup (#79)
+- Remove double onDestroy in MainWindow (#27)
+- Fix ServiceConnection leak in Launcher (#26)
+- Fix Handler memory leak in MainWindow (#23)
+- Fix Connection.getResId() bug (#24)
+- Fix static mutable triggersDirty race condition (#25)
+
+### Changed
+- Remove legacy Ant/Eclipse build files and other cruft (#105)
+- Remove old BlowTorch APKs from repository (#104)
+- Rewrite README as MUDWammer - Android with badges, build instructions, and credits (#92)
+- Convert callback interfaces to sealed classes (#50)
+- Add DataStore dependencies (#45)
+- Define Room entities and DAOs (#47)
+- Convert data classes to Kotlin (#46)
+- Add coroutines dependencies (#44)
+- Add Room database dependencies (#43)
+- Add Jetpack Lifecycle dependencies (#42)
+- Fix remaining lint baseline issues (#91)
+- Fix SetTextI18n lint issues (115) (#90)
+- Fix ObsoleteLayoutParam lint issues (122) (#89)
+- Fix RtlHardcoded lint issues (344) (#88)
+- Fix HardcodedText lint issues (460) (#87)
+- Consolidate dialog classes with generic base (#40)
+- Fix all javac warnings (100 total) (#61)
+- Update all dependencies to latest versions (#78)
+- Open PR for Kotlin/Compose setup (#76)
+- Fix DiscouragedApi lint issues (11) (#86)
+- Fix HandlerLeak lint issues (19) (#84)
+- Fix ResourceType lint issues (13) (#83)
+- Fix DrawAllocation lint issues (15) (#82)
+- Fix UseValueOf lint issues (119) (#85)
+- Fix MissingSuperCall lint issues (9) (#81)
+- Migrate to Gradle version catalog (libs.versions.toml) (#77)
+- Remove redundant kotlin-stdlib dependency from BTLib/build.gradle (#75)
+- Add Detekt and Kotlin analysis tooling (#71)
+- Remove BT_Aard references from CLAUDE.md (#70)
+- Replace deprecated TabHost usage (#64)
+- Add Jetpack Compose dependencies (#69)
+- Add Kotlin plugin and stdlib to build (#41)
+- Replace deprecated onBackPressed() override (#67)
+- Replace deprecated Handler() constructor (#66)
+- Fix raw type and unchecked cast warnings (#63)
+- Replace deprecated boxed constructors with valueOf() (#62)
+- Bump Java source/target from 8 to 17 (#65)
+- Bump Java source/target and enable Xlint warnings (#60)
+- Extract PluginLoader from Plugin.java (#39)
+- Enable View Binding (#29)
+- Fix deprecated ClipboardManager import (#33)
+- Delete unused custom views (#32)
+- Remove unused permissions from manifest (#31)
+- Remove legacy/ folder (#30)
+- Replace fill_parent with match_parent (#28)
+- Extract SettingsPersistence from Connection.java (#38)
+- Extract AliasManager from Connection.java (#35)
+- Extract TriggerManager from Connection.java (#34)
+- Extract GMCPHandler from Connection.java (#37)
+- Extract TimerManager from Connection.java (#36)
+- Remove all RemoteException declarations (#22)
+- Remove separate process and AIDL, move StellarService to main process (#9)
+- Fix ANR when connecting: MainWindow blocks on main thread during service init (#11)
+- Task 10 (#21)
+- Task 9 (#20)
+- Task 8 (#19)
+- Task 7 (#18)
+- Task 6 (#17)
+- Task 5 (#16)
+- Task 4 (#15)
+- Task 3 (#14)
+- Task 2 (#13)
+- Task 1: Remove separate process declaration (#12)
+- Fix XML layout references to old support library classes (#10)
+- Fix XML layout references to old support library classes (#10)
+- Configure Android Lint for Java and XML analysis (#8)
+- First successful build checkpoint (#7)
+- Disable native code (Lua) temporarily (#6)
+- Fix notification channels and foreground service (#5)
+- Fix AndroidX import migration in Java source (#4)
+- Update SDK versions and module build files (#3)
+- Upgrade Gradle wrapper and AGP (#2)
+- Remove BT_Aard module (#1)
diff --git a/CLAUDE.md b/CLAUDE.md
index b2247419..b28042d0 100644
--- a/CLAUDE.md
+++ b/CLAUDE.md
@@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
## What This Is
-BlowTorch (Wamdroid) — an Android MUD client with Lua scripting, plugin support, and multi-connection capability.
+MUDWammer (Wamdroid) — an Android MUD client with Lua scripting, plugin support, and multi-connection capability.
## Build Commands
@@ -16,16 +16,16 @@ BlowTorch (Wamdroid) — an Android MUD client with Lua scripting, plugin suppor
```bash
./build_ndk_libraries_modern.sh
```
-Builds LuaJIT 2.1 for arm64-v8a and x86_64. Then builds JNI modules (luajava, lsqlite3, sqlite3, bit, marshal, luabins) and copies `.so` files to `BTLib/src/main/jniLibs//`.
+Builds LuaJIT 2.1 for arm64-v8a and x86_64. Then builds JNI modules (luajava, lsqlite3, sqlite3, bit, marshal, luabins) and copies `.so` files to `lib/src/main/jniLibs//`.
### Android App
```bash
-./gradlew :BT_Free:assembleDebug # Debug APK
-./gradlew :BT_Free:assembleRelease # Release (needs signing cert + BT_RELEASE_PASS env var)
+./gradlew :app:assembleDebug # Debug APK
+./gradlew :app:assembleRelease # Release (needs signing cert + BT_RELEASE_PASS env var)
```
-Output: `BT_Free/build/outputs/apk/`
+Output: `app/build/outputs/apk/`
-Release signing cert: `BTLib/key/bt_privatekey.keystore`.
+Release signing cert: `lib/key/bt_privatekey.keystore`.
### No Test Infrastructure
No unit or integration tests exist.
@@ -33,10 +33,10 @@ No unit or integration tests exist.
## Architecture
### Module Structure
-- **BTLib** — Shared library (all core logic). Package: `com.offsetnull.bt`
-- **BT_Free** — Thin app wrapper (1 Java file: `FreeLauncher`). Package: `com.happygoatstudios.bt`
+- **lib** — Shared library (all core logic). Package: `org.ncmud.mudwammer`
+- **app** — Thin app wrapper (1 Java file: `FreeLauncher`). Package: `org.ncmud.mudwammer.app`
-### Key Classes (all in BTLib `com.offsetnull.bt`)
+### Key Classes (all in lib `org.ncmud.mudwammer`)
| Class | Role |
|-------|------|
@@ -71,7 +71,7 @@ User Input → MainWindow → Service → Connection → DataPumper → Socket
Lua scripts (LuaJIT 2.0.5) with Java bridge via `org.keplerproject.luajava`. Plugins are XML-configured with Lua code. Available Lua extensions: sqlite3, bitwise ops, binary serialization (marshal, luabins).
### Trigger/Responder System
-Pattern-matched triggers with 7 action types in `com.offsetnull.bt.responder`:
+Pattern-matched triggers with 7 action types in `org.ncmud.mudwammer.responder`:
- `ack/` — Acknowledgment
- `color/` — Colorize matched text
- `gag/` — Suppress output
diff --git a/README b/README
deleted file mode 100644
index 7e21755a..00000000
--- a/README
+++ /dev/null
@@ -1,8 +0,0 @@
-This is the BlowTorch repository.
-Most everything that is BlowTorch resides in /BTlib.
-
-The other folders, BT_Free, BT_Pro and BT_Test are launcher wrappers that invoke the com.happygoatstudios.bt.window.MainWindow Activity.
-
-gfx_src is just graphics stuff that has been accumulated.
-
-test commit
diff --git a/README.md b/README.md
index 94550eca..e5f5a3ec 100644
--- a/README.md
+++ b/README.md
@@ -7,7 +7,7 @@

[](http://getlamp.com)
-A MUD client for Android with Lua scripting, plugin support, and multi-connection capability. This is a fork of [BlowTorch](https://github.com/petter-syn/bloern) by Dan Block, modernized to build with current tools and target Android 16.
+A MUD client for Android with Lua scripting, plugin support, and multi-connection capability. This is a fork of [BlowTorch](https://github.com/blockda/BlowTorch) by Dan Block, modernized to build with current tools and target Android 16.
See also [Wammer - iOS](https://github.com/ncmud/Wammer), the sister project for iPhone, iPad, and macOS.
@@ -41,29 +41,29 @@ The app uses LuaJIT and native extensions (luajava, lsqlite3, marshal, luabins)
./build_ndk_libraries_modern.sh
```
-This builds for `arm64-v8a` and `x86_64` and copies `.so` files to `BTLib/src/main/jniLibs/`.
+This builds for `arm64-v8a` and `x86_64` and copies `.so` files to `lib/src/main/jniLibs/`.
### Build the app
```bash
-./gradlew :BT_Free:assembleDebug
+./gradlew :app:assembleDebug
```
-Output: `BT_Free/build/outputs/apk/debug/`
+Output: `app/build/outputs/apk/debug/`
### Install on a connected device
```bash
-./gradlew :BT_Free:installDebug
+./gradlew :app:installDebug
```
### Release builds
-Release builds require a signing keystore at `BTLib/key/bt_privatekey.keystore` and the `BT_RELEASE_PASS` environment variable:
+Release builds require a signing keystore at `lib/key/bt_privatekey.keystore` and the `BT_RELEASE_PASS` environment variable:
```bash
export BT_RELEASE_PASS=your_keystore_password
-./gradlew :BT_Free:assembleRelease
+./gradlew :app:assembleRelease
```
## Architecture
@@ -72,8 +72,8 @@ The app is split into two modules:
| Module | Purpose |
|--------|---------|
-| **BTLib** | Shared library containing all core logic (`com.offsetnull.bt`) |
-| **BT_Free** | Thin app wrapper with the launcher activity |
+| **lib** | Shared library containing all core logic (`org.ncmud.mudwammer`) |
+| **app** | Thin app wrapper with the launcher activity |
### Key components
@@ -101,7 +101,7 @@ Pull requests, feature requests, and issues are welcome.
## Credits
-This project is a fork of [BlowTorch](https://github.com/petter-syn/bloern) by Dan Block. BlowTorch was an impressive piece of work — a full-featured Android MUD client with Lua scripting and plugin support that served the MUD community for years. We are grateful for Dan's contribution to the community and for open-sourcing the project.
+This project is a fork of [BlowTorch](https://github.com/blockda/BlowTorch) by Dan Block. BlowTorch was an impressive piece of work — a full-featured Android MUD client with Lua scripting and plugin support that served the MUD community for years. We are grateful for Dan's contribution to the community and for open-sourcing the project.
## License
diff --git a/android_checkstyle.xml b/android_checkstyle.xml
deleted file mode 100644
index d3a589ee..00000000
--- a/android_checkstyle.xml
+++ /dev/null
@@ -1,136 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/BT_Free/BT_Free.iml b/app/BT_Free.iml
similarity index 100%
rename from BT_Free/BT_Free.iml
rename to app/BT_Free.iml
diff --git a/BT_Free/build.gradle b/app/build.gradle
similarity index 85%
rename from BT_Free/build.gradle
rename to app/build.gradle
index 18972565..d6c801cc 100644
--- a/BT_Free/build.gradle
+++ b/app/build.gradle
@@ -3,12 +3,12 @@ plugins {
}
android {
- namespace = "com.happygoatstudios.bt"
+ namespace = "org.ncmud.mudwammer.app"
compileSdk = libs.versions.compileSdk.get().toInteger()
signingConfigs {
release {
- storeFile = file("../BTLib/key/bt_privatekey.keystore")
+ storeFile = file("../lib/key/bt_privatekey.keystore")
storePassword = System.getenv("BT_RELEASE_PASS")
keyAlias = "btkey"
keyPassword = System.getenv("BT_RELEASE_PASS")
@@ -16,6 +16,7 @@ android {
}
defaultConfig {
+ applicationId = "org.ncmud.mudwammer"
minSdk = libs.versions.minSdk.get().toInteger()
targetSdk = libs.versions.targetSdk.get().toInteger()
versionCode = 224
@@ -49,5 +50,5 @@ android {
}
dependencies {
- implementation project(":BTLib")
+ implementation project(":lib")
}
diff --git a/BT_Free/lint-baseline.xml b/app/lint-baseline.xml
similarity index 100%
rename from BT_Free/lint-baseline.xml
rename to app/lint-baseline.xml
diff --git a/BT_Free/proguard-rules.pro b/app/proguard-rules.pro
similarity index 79%
rename from BT_Free/proguard-rules.pro
rename to app/proguard-rules.pro
index 0d590f09..36c9f50b 100644
--- a/BT_Free/proguard-rules.pro
+++ b/app/proguard-rules.pro
@@ -6,6 +6,6 @@
*;
}
--keep class com.offsetnull.bt.** {
+-keep class org.ncmud.mudwammer.** {
*;
}
diff --git a/BT_Free/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
similarity index 70%
rename from BT_Free/src/main/AndroidManifest.xml
rename to app/src/main/AndroidManifest.xml
index a5477443..7499c083 100644
--- a/BT_Free/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -12,17 +12,17 @@
-
+
-
@@ -30,29 +30,29 @@
-
-
-
+
-
-
+
diff --git a/BT_Free/src/main/assets/share/lua/5.1/button.lua b/app/src/main/assets/share/lua/5.1/button.lua
similarity index 95%
rename from BT_Free/src/main/assets/share/lua/5.1/button.lua
rename to app/src/main/assets/share/lua/5.1/button.lua
index 89167ad0..004d8050 100755
--- a/BT_Free/src/main/assets/share/lua/5.1/button.lua
+++ b/app/src/main/assets/share/lua/5.1/button.lua
@@ -1,5 +1,5 @@
-Color = luajava.bindClass("com.offsetnull.bt.ui.ColorCompat")
+Color = luajava.bindClass("org.ncmud.mudwammer.ui.ColorCompat")
Path = luajava.bindClass("android.graphics.Path")
PathDirection = luajava.bindClass("android.graphics.Path$Direction")
statusoffset = 0
diff --git a/BT_Free/src/main/assets/share/lua/5.1/buttoneditor.lua b/app/src/main/assets/share/lua/5.1/buttoneditor.lua
similarity index 99%
rename from BT_Free/src/main/assets/share/lua/5.1/buttoneditor.lua
rename to app/src/main/assets/share/lua/5.1/buttoneditor.lua
index 4e58c6ba..dc2d3266 100644
--- a/BT_Free/src/main/assets/share/lua/5.1/buttoneditor.lua
+++ b/app/src/main/assets/share/lua/5.1/buttoneditor.lua
@@ -389,7 +389,7 @@ function showEditorDialog(editorValues,numediting)
--Note("already constructed editor"..dialogView:toString())
--end
- editorDialog = luajava.newInstance("com.offsetnull.bt.window.LuaDialog",context,top,false,nil)
+ editorDialog = luajava.newInstance("org.ncmud.mudwammer.window.LuaDialog",context,top,false,nil)
editorDialog:show()
context = nil
end
diff --git a/BT_Free/src/main/assets/share/lua/5.1/buttoneditoradvanced.lua b/app/src/main/assets/share/lua/5.1/buttoneditoradvanced.lua
similarity index 98%
rename from BT_Free/src/main/assets/share/lua/5.1/buttoneditoradvanced.lua
rename to app/src/main/assets/share/lua/5.1/buttoneditoradvanced.lua
index 5085db01..2e32d0a4 100644
--- a/BT_Free/src/main/assets/share/lua/5.1/buttoneditoradvanced.lua
+++ b/app/src/main/assets/share/lua/5.1/buttoneditoradvanced.lua
@@ -692,12 +692,12 @@ swatchClickListener = luajava.createProxy("android.view.View$OnClickListener",{
elseif(selectedColorField == "flipLabel") then
color = flipLabelColor
end
- colorpickerdialog = luajava.newInstance("com.offsetnull.bt.button.ColorPickerDialog",context,colorPickerDoneListener,color)
+ colorpickerdialog = luajava.newInstance("org.ncmud.mudwammer.button.ColorPickerDialog",context,colorPickerDoneListener,color)
colorpickerdialog:show()
end
})
-colorPickerDoneListener = luajava.createProxy("com.offsetnull.bt.button.ColorPickerDialog$OnColorChangedListener",{
+colorPickerDoneListener = luajava.createProxy("org.ncmud.mudwammer.button.ColorPickerDialog$OnColorChangedListener",{
colorChanged = function(color)
if(selectedColorField == "flip") then
flipColorPicker:setBackgroundColor(color)
diff --git a/BT_Free/src/main/assets/share/lua/5.1/buttonlist.lua b/app/src/main/assets/share/lua/5.1/buttonlist.lua
similarity index 98%
rename from BT_Free/src/main/assets/share/lua/5.1/buttonlist.lua
rename to app/src/main/assets/share/lua/5.1/buttonlist.lua
index 383f862f..7e74d5b6 100644
--- a/BT_Free/src/main/assets/share/lua/5.1/buttonlist.lua
+++ b/app/src/main/assets/share/lua/5.1/buttonlist.lua
@@ -217,7 +217,7 @@ function showList(unsortedList,lastLoadedSet)
local donebutton = layout:findViewById(R_id.done)
donebutton:setOnClickListener(doneListener)
- dialog = luajava.newInstance("com.offsetnull.bt.window.LuaDialog",context,layout,false,nil)
+ dialog = luajava.newInstance("org.ncmud.mudwammer.window.LuaDialog",context,layout,false,nil)
--end
dialog:show()
@@ -471,7 +471,7 @@ newButtonListener = luajava.createProxy("android.view.View$OnClickListener",{
linear:addView(newSetEdit)
linear:addView(buttonholder)
- newButtonSetDialog = luajava.newInstance("com.offsetnull.bt.window.LuaDialog",context,linear,false,nil)
+ newButtonSetDialog = luajava.newInstance("org.ncmud.mudwammer.window.LuaDialog",context,linear,false,nil)
newButtonSetDialog:show()
end
})
diff --git a/BT_Free/src/main/assets/share/lua/5.1/buttonserver.lua b/app/src/main/assets/share/lua/5.1/buttonserver.lua
similarity index 99%
rename from BT_Free/src/main/assets/share/lua/5.1/buttonserver.lua
rename to app/src/main/assets/share/lua/5.1/buttonserver.lua
index 12dda134..02eb3c5f 100755
--- a/BT_Free/src/main/assets/share/lua/5.1/buttonserver.lua
+++ b/app/src/main/assets/share/lua/5.1/buttonserver.lua
@@ -652,7 +652,7 @@ function checkImport()
if(PluginSupports("button_window","exportButtons")) then
WindowXCallS(buttonWindowName,"askImport")
else
- WindowXCallS(buttonWindowName,"failImport","Internal button window plugin does not support exporting buttons. Please update BlowTorch")
+ WindowXCallS(buttonWindowName,"failImport","Internal button window plugin does not support exporting buttons. Please update MUDWammer")
end
end
diff --git a/BT_Free/src/main/assets/share/lua/5.1/buttonutils.lua b/app/src/main/assets/share/lua/5.1/buttonutils.lua
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/buttonutils.lua
rename to app/src/main/assets/share/lua/5.1/buttonutils.lua
diff --git a/BT_Free/src/main/assets/share/lua/5.1/buttonwindow.lua b/app/src/main/assets/share/lua/5.1/buttonwindow.lua
similarity index 99%
rename from BT_Free/src/main/assets/share/lua/5.1/buttonwindow.lua
rename to app/src/main/assets/share/lua/5.1/buttonwindow.lua
index ed8f68db..47b79775 100755
--- a/BT_Free/src/main/assets/share/lua/5.1/buttonwindow.lua
+++ b/app/src/main/assets/share/lua/5.1/buttonwindow.lua
@@ -22,9 +22,9 @@ debugString("Button Window Script Loading...")
density = GetDisplayDensity()
Configuration = luajava.bindClass("android.content.res.Configuration")
-R_id = luajava.bindClass("com.offsetnull.bt.R$id")
-R_layout = luajava.bindClass("com.offsetnull.bt.R$layout")
-R_drawable = luajava.bindClass("com.offsetnull.bt.R$drawable")
+R_id = luajava.bindClass("org.ncmud.mudwammer.R$id")
+R_layout = luajava.bindClass("org.ncmud.mudwammer.R$layout")
+R_drawable = luajava.bindClass("org.ncmud.mudwammer.R$drawable")
android_R_id = luajava.bindClass("android.R$id")
ViewGroup = luajava.bindClass("android.view.ViewGroup")
View = luajava.bindClass("android.view.View")
@@ -35,7 +35,7 @@ ScrollView = luajava.bindClass("android.widget.ScrollView")
AnimationSet = luajava.bindClass("android.view.animation.AnimationSet")
LayoutAnimationController = luajava.bindClass("android.view.animation.LayoutAnimationController")
HapticFeedbackConstants = luajava.bindClass("android.view.HapticFeedbackConstants")
-Validator = luajava.newInstance("com.offsetnull.bt.validator.Validator")
+Validator = luajava.newInstance("org.ncmud.mudwammer.validator.Validator")
MenuItem = luajava.bindClass("android.view.MenuItem")
DialogInterface = luajava.bindClass("android.content.DialogInterface")
Context = luajava.bindClass("android.content.Context")
diff --git a/BT_Free/src/main/assets/share/lua/5.1/config.lua b/app/src/main/assets/share/lua/5.1/config.lua
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/config.lua
rename to app/src/main/assets/share/lua/5.1/config.lua
diff --git a/BT_Free/src/main/assets/share/lua/5.1/copytable.lua b/app/src/main/assets/share/lua/5.1/copytable.lua
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/copytable.lua
rename to app/src/main/assets/share/lua/5.1/copytable.lua
diff --git a/BT_Free/src/main/assets/share/lua/5.1/editoroptionsdialog.lua b/app/src/main/assets/share/lua/5.1/editoroptionsdialog.lua
similarity index 99%
rename from BT_Free/src/main/assets/share/lua/5.1/editoroptionsdialog.lua
rename to app/src/main/assets/share/lua/5.1/editoroptionsdialog.lua
index a20b18cd..80f59a63 100644
--- a/BT_Free/src/main/assets/share/lua/5.1/editoroptionsdialog.lua
+++ b/app/src/main/assets/share/lua/5.1/editoroptionsdialog.lua
@@ -233,7 +233,7 @@ function showDialog(initialValues)
--set up the show editor settings button.
--Note("builder alert creation")
--builder = luajava.newInstance("android.app.AlertDialog$Builder",context)
- dialog = luajava.newInstance("com.offsetnull.bt.window.LuaDialog",context,scroller,false,nil)
+ dialog = luajava.newInstance("org.ncmud.mudwammer.window.LuaDialog",context,scroller,false,nil)
dialog:show()
--local hiddenview = luajava.new(TextView,view:getContext())
--hiddenview:setVisibility(View.GONE)
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/hdpi/cancel.png b/app/src/main/assets/share/lua/5.1/res/hdpi/cancel.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/hdpi/cancel.png
rename to app/src/main/assets/share/lua/5.1/res/hdpi/cancel.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/hdpi/done.png b/app/src/main/assets/share/lua/5.1/res/hdpi/done.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/hdpi/done.png
rename to app/src/main/assets/share/lua/5.1/res/hdpi/done.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/hdpi/settings.png b/app/src/main/assets/share/lua/5.1/res/hdpi/settings.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/hdpi/settings.png
rename to app/src/main/assets/share/lua/5.1/res/hdpi/settings.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/ldpi/cancel.png b/app/src/main/assets/share/lua/5.1/res/ldpi/cancel.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/ldpi/cancel.png
rename to app/src/main/assets/share/lua/5.1/res/ldpi/cancel.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/ldpi/done.png b/app/src/main/assets/share/lua/5.1/res/ldpi/done.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/ldpi/done.png
rename to app/src/main/assets/share/lua/5.1/res/ldpi/done.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/ldpi/settings.png b/app/src/main/assets/share/lua/5.1/res/ldpi/settings.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/ldpi/settings.png
rename to app/src/main/assets/share/lua/5.1/res/ldpi/settings.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/mdpi/cancel.png b/app/src/main/assets/share/lua/5.1/res/mdpi/cancel.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/mdpi/cancel.png
rename to app/src/main/assets/share/lua/5.1/res/mdpi/cancel.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/mdpi/done.png b/app/src/main/assets/share/lua/5.1/res/mdpi/done.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/mdpi/done.png
rename to app/src/main/assets/share/lua/5.1/res/mdpi/done.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/res/mdpi/settings.png b/app/src/main/assets/share/lua/5.1/res/mdpi/settings.png
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/res/mdpi/settings.png
rename to app/src/main/assets/share/lua/5.1/res/mdpi/settings.png
diff --git a/BT_Free/src/main/assets/share/lua/5.1/serialize.lua b/app/src/main/assets/share/lua/5.1/serialize.lua
similarity index 100%
rename from BT_Free/src/main/assets/share/lua/5.1/serialize.lua
rename to app/src/main/assets/share/lua/5.1/serialize.lua
diff --git a/BT_Free/src/main/assets/share/lua/5.1/setpropertieseditor.lua b/app/src/main/assets/share/lua/5.1/setpropertieseditor.lua
similarity index 98%
rename from BT_Free/src/main/assets/share/lua/5.1/setpropertieseditor.lua
rename to app/src/main/assets/share/lua/5.1/setpropertieseditor.lua
index 4e397d83..ba76ecd4 100644
--- a/BT_Free/src/main/assets/share/lua/5.1/setpropertieseditor.lua
+++ b/app/src/main/assets/share/lua/5.1/setpropertieseditor.lua
@@ -127,7 +127,7 @@ function showDialog(editorValues)
finishHolder:addView(cancel)
top:addView(finishHolder)
- dialog = luajava.newInstance("com.offsetnull.bt.window.LuaDialog",context,top,false,nil)
+ dialog = luajava.newInstance("org.ncmud.mudwammer.window.LuaDialog",context,top,false,nil)
dialog:show()
end
diff --git a/BT_Free/src/main/java/com/offsetnull/btfree/FreeLauncher.java b/app/src/main/java/org/ncmud/mudwammer/app/FreeLauncher.java
similarity index 66%
rename from BT_Free/src/main/java/com/offsetnull/btfree/FreeLauncher.java
rename to app/src/main/java/org/ncmud/mudwammer/app/FreeLauncher.java
index bddb1c20..7afb803e 100644
--- a/BT_Free/src/main/java/com/offsetnull/btfree/FreeLauncher.java
+++ b/app/src/main/java/org/ncmud/mudwammer/app/FreeLauncher.java
@@ -1,10 +1,10 @@
-package com.offsetnull.btfree;
+package org.ncmud.mudwammer.app;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
-import com.offsetnull.bt.R;
+import org.ncmud.mudwammer.R;
public class FreeLauncher extends Activity {
/** Called when the activity is first created. */
@@ -13,8 +13,8 @@ public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.new_launcher_layout);
- Intent launch = new Intent(this, com.offsetnull.bt.launcher.Launcher.class);
- launch.putExtra("LAUNCH_MODE", "com.happygoatstudios.bt");
+ Intent launch = new Intent(this, org.ncmud.mudwammer.launcher.Launcher.class);
+ launch.putExtra("LAUNCH_MODE", "org.ncmud.mudwammer");
this.startActivity(launch);
this.finish();
diff --git a/BTLib/src/main/res/drawable-hdpi/icon.png b/app/src/main/res/drawable-hdpi/icon.png
similarity index 100%
rename from BTLib/src/main/res/drawable-hdpi/icon.png
rename to app/src/main/res/drawable-hdpi/icon.png
diff --git a/BT_Free/src/main/res/drawable-hdpi/blowtorch_logo3.png b/app/src/main/res/drawable-hdpi/mudwammer_logo.png
similarity index 100%
rename from BT_Free/src/main/res/drawable-hdpi/blowtorch_logo3.png
rename to app/src/main/res/drawable-hdpi/mudwammer_logo.png
diff --git a/BT_Free/src/main/res/drawable-hdpi/blowtorch_notification2.png b/app/src/main/res/drawable-hdpi/mudwammer_notification.png
similarity index 100%
rename from BT_Free/src/main/res/drawable-hdpi/blowtorch_notification2.png
rename to app/src/main/res/drawable-hdpi/mudwammer_notification.png
diff --git a/BTLib/src/main/res/drawable-ldpi/icon.png b/app/src/main/res/drawable-ldpi/icon.png
similarity index 100%
rename from BTLib/src/main/res/drawable-ldpi/icon.png
rename to app/src/main/res/drawable-ldpi/icon.png
diff --git a/BTLib/src/main/res/drawable-mdpi/icon.png b/app/src/main/res/drawable-mdpi/icon.png
similarity index 100%
rename from BTLib/src/main/res/drawable-mdpi/icon.png
rename to app/src/main/res/drawable-mdpi/icon.png
diff --git a/BT_Free/src/main/res/layout/about_dialog.xml b/app/src/main/res/layout/about_dialog.xml
similarity index 85%
rename from BT_Free/src/main/res/layout/about_dialog.xml
rename to app/src/main/res/layout/about_dialog.xml
index d4b62d97..23325694 100644
--- a/BT_Free/src/main/res/layout/about_dialog.xml
+++ b/app/src/main/res/layout/about_dialog.xml
@@ -17,15 +17,15 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:src="@drawable/blowtorch_logo2"/>
+ android:src="@drawable/mudwammer_logo_small"/>
+ android:text="MUDWammer"/>
@@ -34,16 +34,16 @@
android:layout_width="match_parent"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
- android:text="@string/blowtorch_desc"
+ android:text="@string/mudwammer_desc"
android:textSize="13dip"/>
+ android:text="Visit the MUDWammer website"/>
diff --git a/BT_Free/src/main/res/layout/main.xml b/app/src/main/res/layout/main.xml
similarity index 100%
rename from BT_Free/src/main/res/layout/main.xml
rename to app/src/main/res/layout/main.xml
diff --git a/BT_Free/src/main/res/raw/default_settings.xml b/app/src/main/res/raw/default_settings.xml
similarity index 99%
rename from BT_Free/src/main/res/raw/default_settings.xml
rename to app/src/main/res/raw/default_settings.xml
index 6e5802b9..9fc56bb7 100644
--- a/BT_Free/src/main/res/raw/default_settings.xml
+++ b/app/src/main/res/raw/default_settings.xml
@@ -1,5 +1,5 @@
-
+
@@ -114,4 +114,4 @@ xPos="130" yPos="183" label="CLEAR" moveMethod="0" command=".clearbuttons" />
-->
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
new file mode 100644
index 00000000..213a19de
--- /dev/null
+++ b/app/src/main/res/values/strings.xml
@@ -0,0 +1,13 @@
+
+
+ false
+ org.ncmud.mudwammer.window.MainWindow.NORMAL_MODE
+ mudwammer_notification
+ :stellar
+ org.ncmud.mudwammer.service.IStellarService.MODE_NORMAL
+ MUDWammer
+ org.ncmud.mudwammer
+ MUDWammer
+ WAMDROID
+ MUDWammer is a mobile terminal emulator with features that aide in playing text based adventure games (MUDs). For more information on the capabilities of this client, please visit the online documentation.
+
\ No newline at end of file
diff --git a/build_ndk_libraries_modern.sh b/build_ndk_libraries_modern.sh
index 0d9750ac..a37ce9a1 100755
--- a/build_ndk_libraries_modern.sh
+++ b/build_ndk_libraries_modern.sh
@@ -50,7 +50,7 @@ make clean || true
cd ..
# Clean old JNI artifacts
-rm -f BTLib/jni/luajava/libluajit-*.a BTLib/jni/luajava/libluajit-*.so
+rm -f lib/jni/luajava/libluajit-*.a lib/jni/luajava/libluajit-*.so
build_luajit() {
local ARCH=$1
@@ -97,30 +97,30 @@ build_luajit "x86_64" "$CROSS_X86_64" "" "x86_64"
# Copy output to JNI project
echo ""
echo "**********************************************"
-echo "** Copying LuaJIT output to BTLib/jni/luajava"
+echo "** Copying LuaJIT output to lib/jni/luajava"
echo "**********************************************"
-cp "$LUAJIT_DIR/src/libluajit-arm64-v8a.a" BTLib/jni/luajava/
-cp "$LUAJIT_DIR/src/libluajit-x86_64.a" BTLib/jni/luajava/
+cp "$LUAJIT_DIR/src/libluajit-arm64-v8a.a" lib/jni/luajava/
+cp "$LUAJIT_DIR/src/libluajit-x86_64.a" lib/jni/luajava/
# Copy headers
echo "Copying LuaJIT headers..."
-cp "$LUAJIT_DIR/src/lauxlib.h" BTLib/jni/luajava/
-cp "$LUAJIT_DIR/src/lua.h" BTLib/jni/luajava/
-cp "$LUAJIT_DIR/src/luaconf.h" BTLib/jni/luajava/
-cp "$LUAJIT_DIR/src/luajit.h" BTLib/jni/luajava/
-cp "$LUAJIT_DIR/src/luajit_rolling.h" BTLib/jni/luajava/
-cp "$LUAJIT_DIR/src/lualib.h" BTLib/jni/luajava/
+cp "$LUAJIT_DIR/src/lauxlib.h" lib/jni/luajava/
+cp "$LUAJIT_DIR/src/lua.h" lib/jni/luajava/
+cp "$LUAJIT_DIR/src/luaconf.h" lib/jni/luajava/
+cp "$LUAJIT_DIR/src/luajit.h" lib/jni/luajava/
+cp "$LUAJIT_DIR/src/luajit_rolling.h" lib/jni/luajava/
+cp "$LUAJIT_DIR/src/lualib.h" lib/jni/luajava/
# Build JNI modules with ndk-build
echo ""
echo "**********************************************"
echo "** Building JNI modules (luajava, sqlite3, etc.)"
echo "**********************************************"
-cd BTLib
+cd lib
"$NDK/ndk-build" NDK_PROJECT_PATH=. APP_BUILD_SCRIPT=jni/Android.mk NDK_APPLICATION_MK=jni/Application.mk
echo ""
echo "**********************************************"
-echo "** Build complete! Libraries in BTLib/libs/"
+echo "** Build complete! Libraries in lib/libs/"
echo "**********************************************"
ls -la libs/*/
diff --git a/gfx_src/misc/Untitled-1.psd b/gfx_src/misc/Untitled-1.psd
deleted file mode 100644
index 7c6d82c6..00000000
Binary files a/gfx_src/misc/Untitled-1.psd and /dev/null differ
diff --git a/gfx_src/misc/background.ai b/gfx_src/misc/background.ai
deleted file mode 100644
index 68f2b3aa..00000000
--- a/gfx_src/misc/background.ai
+++ /dev/null
@@ -1,4874 +0,0 @@
-%PDF-1.5
%âãÏÓ
-1 0 obj
<>/OCGs[5 0 R 6 0 R 7 0 R 8 0 R 41 0 R 42 0 R 43 0 R 44 0 R 45 0 R 46 0 R]>>/Pages 3 0 R/Type/Catalog>>
endobj
2 0 obj
<>stream
-
-
-
-
- application/pdf
-
-
- Print
-
-
-
-
- 2010-10-07T11:57:41-07:00
- 2010-10-07T11:57:41-07:00
- 2010-10-07T11:24:53-07:00
- Adobe Illustrator CS5
-
-
-
- 256
- 160
- JPEG
- /9j/4AAQSkZJRgABAgEASABIAAD/7QAsUGhvdG9zaG9wIDMuMAA4QklNA+0AAAAAABAASAAAAAEA
AQBIAAAAAQAB/+4ADkFkb2JlAGTAAAAAAf/bAIQABgQEBAUEBgUFBgkGBQYJCwgGBggLDAoKCwoK
DBAMDAwMDAwQDA4PEA8ODBMTFBQTExwbGxscHx8fHx8fHx8fHwEHBwcNDA0YEBAYGhURFRofHx8f
Hx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8fHx8f/8AAEQgAoAEAAwER
AAIRAQMRAf/EAaIAAAAHAQEBAQEAAAAAAAAAAAQFAwIGAQAHCAkKCwEAAgIDAQEBAQEAAAAAAAAA
AQACAwQFBgcICQoLEAACAQMDAgQCBgcDBAIGAnMBAgMRBAAFIRIxQVEGE2EicYEUMpGhBxWxQiPB
UtHhMxZi8CRygvElQzRTkqKyY3PCNUQnk6OzNhdUZHTD0uIIJoMJChgZhJRFRqS0VtNVKBry4/PE
1OT0ZXWFlaW1xdXl9WZ2hpamtsbW5vY3R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo+Ck5SVlpeYmZ
qbnJ2en5KjpKWmp6ipqqusra6voRAAICAQIDBQUEBQYECAMDbQEAAhEDBCESMUEFURNhIgZxgZEy
obHwFMHR4SNCFVJicvEzJDRDghaSUyWiY7LCB3PSNeJEgxdUkwgJChgZJjZFGidkdFU38qOzwygp
0+PzhJSktMTU5PRldYWVpbXF1eX1RlZmdoaWprbG1ub2R1dnd4eXp7fH1+f3OEhYaHiImKi4yNjo
+DlJWWl5iZmpucnZ6fkqOkpaanqKmqq6ytrq+v/aAAwDAQACEQMRAD8A9U4q7FXYq7FUl8x+dPK/
luIPrOoRWrMKpBUvMwNd1iTk9NutKYDIDmzx45TNRFl5V5g/5yVt15R6BpTSHbjc3zcRXuPRiJr7
H1PoyiWoHR2mHsjJL6jwsD1f87/zF1EyKNRFlDIf7q0jSPj7LIQ0o/4PKjnkXPx9kYhzssYv/Nnm
jUF4X2r3l0nZZp5HA+QZiMgckj1cuGhwx5RCWmeY7mRifmcHEW38vj/mx+QWh2BqCQfEHBxFfAx/
zR8l63Fwv2ZXHyYjDxHvR+Xx/wA2PyCZ2XnHzZYpws9ZvbeP+SK4lRdvYNTCMkh1apaDCecQi/8A
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
-
-
-
-
-
- uuid:10712b55-81c2-4ede-ad39-320cd995f4ca
- xmp.did:68A19EE23DD2DF11A3F688A7CC762E02
- uuid:5D20892493BFDB11914A8590D31508C8
- proof:pdf
-
- xmp.iid:67A19EE23DD2DF11A3F688A7CC762E02
- xmp.did:67A19EE23DD2DF11A3F688A7CC762E02
- uuid:5D20892493BFDB11914A8590D31508C8
- proof:pdf
-
-
-
-
- saved
- xmp.iid:67A19EE23DD2DF11A3F688A7CC762E02
- 2010-10-07T11:08:28-07:00
- Adobe Illustrator CS5
- /
-
-
- saved
- xmp.iid:68A19EE23DD2DF11A3F688A7CC762E02
- 2010-10-07T11:24:53-07:00
- Adobe Illustrator CS5
- /
-
-
-
-
-
- Document
- Print
-
-
- False
- False
- 1
-
- 854.000000
- 480.000000
- Pixels
-
-
-
- Cyan
- Magenta
- Yellow
- Black
-
-
-
-
-
- Default Swatch Group
- 0
-
-
-
- Black
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 100.000000
-
-
- CMYK Red
- CMYK
- PROCESS
- 0.000000
- 100.000000
- 100.000000
- 0.000000
-
-
- CMYK Yellow
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- CMYK Green
- CMYK
- PROCESS
- 100.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- CMYK Cyan
- CMYK
- PROCESS
- 100.000000
- 0.000000
- 0.000000
- 0.000000
-
-
- CMYK Blue
- CMYK
- PROCESS
- 100.000000
- 100.000000
- 0.000000
- 0.000000
-
-
- CMYK Magenta
- CMYK
- PROCESS
- 0.000000
- 100.000000
- 0.000000
- 0.000000
-
-
- C=15 M=100 Y=90 K=10
- CMYK
- PROCESS
- 14.999998
- 100.000000
- 90.000004
- 10.000002
-
-
- C=0 M=90 Y=85 K=0
- CMYK
- PROCESS
- 0.000000
- 90.000004
- 84.999996
- 0.000000
-
-
- C=0 M=80 Y=95 K=0
- CMYK
- PROCESS
- 0.000000
- 80.000001
- 94.999999
- 0.000000
-
-
- C=0 M=50 Y=100 K=0
- CMYK
- PROCESS
- 0.000000
- 50.000000
- 100.000000
- 0.000000
-
-
- C=0 M=35 Y=85 K=0
- CMYK
- PROCESS
- 0.000000
- 35.000002
- 84.999996
- 0.000000
-
-
- C=5 M=0 Y=90 K=0
- CMYK
- PROCESS
- 5.000001
- 0.000000
- 90.000004
- 0.000000
-
-
- C=20 M=0 Y=100 K=0
- CMYK
- PROCESS
- 19.999999
- 0.000000
- 100.000000
- 0.000000
-
-
- C=50 M=0 Y=100 K=0
- CMYK
- PROCESS
- 50.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- C=75 M=0 Y=100 K=0
- CMYK
- PROCESS
- 75.000000
- 0.000000
- 100.000000
- 0.000000
-
-
- C=85 M=10 Y=100 K=10
- CMYK
- PROCESS
- 84.999996
- 10.000002
- 100.000000
- 10.000002
-
-
- C=90 M=30 Y=95 K=30
- CMYK
- PROCESS
- 90.000004
- 30.000001
- 94.999999
- 30.000001
-
-
- C=75 M=0 Y=75 K=0
- CMYK
- PROCESS
- 75.000000
- 0.000000
- 75.000000
- 0.000000
-
-
- C=80 M=10 Y=45 K=0
- CMYK
- PROCESS
- 80.000001
- 10.000002
- 44.999999
- 0.000000
-
-
- C=70 M=15 Y=0 K=0
- CMYK
- PROCESS
- 69.999999
- 14.999998
- 0.000000
- 0.000000
-
-
- C=85 M=50 Y=0 K=0
- CMYK
- PROCESS
- 84.999996
- 50.000000
- 0.000000
- 0.000000
-
-
- C=100 M=95 Y=5 K=0
- CMYK
- PROCESS
- 100.000000
- 94.999999
- 5.000001
- 0.000000
-
-
- C=100 M=100 Y=25 K=25
- CMYK
- PROCESS
- 100.000000
- 100.000000
- 25.000000
- 25.000000
-
-
- C=75 M=100 Y=0 K=0
- CMYK
- PROCESS
- 75.000000
- 100.000000
- 0.000000
- 0.000000
-
-
- C=50 M=100 Y=0 K=0
- CMYK
- PROCESS
- 50.000000
- 100.000000
- 0.000000
- 0.000000
-
-
- C=35 M=100 Y=35 K=10
- CMYK
- PROCESS
- 35.000002
- 100.000000
- 35.000002
- 10.000002
-
-
- C=10 M=100 Y=50 K=0
- CMYK
- PROCESS
- 10.000002
- 100.000000
- 50.000000
- 0.000000
-
-
- C=0 M=95 Y=20 K=0
- CMYK
- PROCESS
- 0.000000
- 94.999999
- 19.999999
- 0.000000
-
-
- C=25 M=25 Y=40 K=0
- CMYK
- PROCESS
- 25.000000
- 25.000000
- 39.999998
- 0.000000
-
-
- C=40 M=45 Y=50 K=5
- CMYK
- PROCESS
- 39.999998
- 44.999999
- 50.000000
- 5.000001
-
-
- C=50 M=50 Y=60 K=25
- CMYK
- PROCESS
- 50.000000
- 50.000000
- 60.000002
- 25.000000
-
-
- C=55 M=60 Y=65 K=40
- CMYK
- PROCESS
- 55.000001
- 60.000002
- 64.999998
- 39.999998
-
-
- C=25 M=40 Y=65 K=0
- CMYK
- PROCESS
- 25.000000
- 39.999998
- 64.999998
- 0.000000
-
-
- C=30 M=50 Y=75 K=10
- CMYK
- PROCESS
- 30.000001
- 50.000000
- 75.000000
- 10.000002
-
-
- C=35 M=60 Y=80 K=25
- CMYK
- PROCESS
- 35.000002
- 60.000002
- 80.000001
- 25.000000
-
-
- C=40 M=65 Y=90 K=35
- CMYK
- PROCESS
- 39.999998
- 64.999998
- 90.000004
- 35.000002
-
-
- C=40 M=70 Y=100 K=50
- CMYK
- PROCESS
- 39.999998
- 69.999999
- 100.000000
- 50.000000
-
-
- C=50 M=70 Y=80 K=70
- CMYK
- PROCESS
- 50.000000
- 69.999999
- 80.000001
- 69.999999
-
-
-
-
-
- Grays
- 1
-
-
-
- C=0 M=0 Y=0 K=100
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 100.000000
-
-
- C=0 M=0 Y=0 K=90
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 89.999402
-
-
- C=0 M=0 Y=0 K=80
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 79.998797
-
-
- C=0 M=0 Y=0 K=70
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 69.999701
-
-
- C=0 M=0 Y=0 K=60
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 59.999102
-
-
- C=0 M=0 Y=0 K=50
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 50.000000
-
-
- C=0 M=0 Y=0 K=40
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 39.999402
-
-
- C=0 M=0 Y=0 K=30
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 29.998803
-
-
- C=0 M=0 Y=0 K=20
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 19.999701
-
-
- C=0 M=0 Y=0 K=10
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 9.999102
-
-
- C=0 M=0 Y=0 K=5
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 4.998803
-
-
-
-
-
- Brights
- 1
-
-
-
- C=0 M=100 Y=100 K=0
- CMYK
- PROCESS
- 0.000000
- 100.000000
- 100.000000
- 0.000000
-
-
- C=0 M=75 Y=100 K=0
- CMYK
- PROCESS
- 0.000000
- 75.000000
- 100.000000
- 0.000000
-
-
- C=0 M=10 Y=95 K=0
- CMYK
- PROCESS
- 0.000000
- 10.000002
- 94.999999
- 0.000000
-
-
- C=85 M=10 Y=100 K=0
- CMYK
- PROCESS
- 84.999996
- 10.000002
- 100.000000
- 0.000000
-
-
- C=100 M=90 Y=0 K=0
- CMYK
- PROCESS
- 100.000000
- 90.000004
- 0.000000
- 0.000000
-
-
- C=60 M=90 Y=0 K=0
- CMYK
- PROCESS
- 60.000002
- 90.000004
- 0.003099
- 0.003099
-
-
-
-
-
- blowtorch
- 1
-
-
-
- White
- CMYK
- PROCESS
- 0.000000
- 0.000000
- 0.000000
- 0.000000
-
-
- R=87 G=84 B=79
- CMYK
- PROCESS
- 61.229873
- 55.492485
- 59.377432
- 33.224994
-
-
- R=255 G=130 B=33
- CMYK
- PROCESS
- 0.003052
- 60.512698
- 95.251387
- 0.003052
-
-
- R=255 G=255 B=59
- CMYK
- PROCESS
- 5.477989
- 0.003052
- 86.474401
- 0.003052
-
-
- R=246 G=0 B=0
- CMYK
- PROCESS
- 0.003052
- 100.000000
- 100.000000
- 0.003052
-
-
- R=130 G=222 B=255
- CMYK
- PROCESS
- 41.229880
- 0.003052
- 0.003052
- 0.003052
-
-
-
-
-
-
-
-
- Adobe PDF library 9.90
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-endstream
endobj
3 0 obj
<>
endobj
10 0 obj
<>/Resources<>/ExtGState<>/Properties<>>>/Thumb 52 0 R/TrimBox[0.0 0.0 854.0 480.0]/Type/Page>>
endobj
48 0 obj
<>stream
-H‰ÌUËn1¼ë+ø+K|Iºv[ô”†ý £CR õ¡Èßw(¨Ãhö´X`!J”4©ÝÇ•vwk¡7oWJ©öBÝ”–üøœ>Ñ÷´[…Ž'*™½ã?JÅ¿V¢ÓNïáôõ” ‹ø*-\h©ìt|H1ó–6p8z£¦B÷AÇ4ÜÈS-ŒA1p²j±Ö1_é>}K_ÒþŒf=ÌKâ:¬ÓOzÉ«ã p €wwàjwf®ž™Ûÿ»àmèDxƒ/g`V¾À\ÛÈ\ÅrÍâ´H6¸V„d‚-ITrÀ=4[a2x¹(õnÙZǼÀ«>-!ŒÁ=m õ_!¼Å>oaß‹ELng bç‚KÿÄ7äaB%ÀA´G475œgZ©¡2¤†žZ¶fLˆÁ[¡†Yƒ’pʼèéÙ„¿ knåÙÜæb6în·¹EõùeEVF,šqjRÅc€ ¢ð*J“Q.‚rdvxi¹2c·WHÇPØœ²>-–°a©Ó^Ä2”»ùÿîu^ôùyÑÊ¿c¼‘Eþ»”—9©G£S!:H$$†jذ£#´ÏhU:ŪBk^¦aØ?1šªÖ6rÿʰ®9¶
}e*åÅÆñ]êê %ôÅÒ|ö<
-q ÒÑE=÷ÐŽt%È0l‰nsº¢)låô¥q\¸O¿ % S
-endstream
endobj
52 0 obj
<>stream
-8;Yi^4`8.k%#&g@DnK+lJt0\Vg-$5Xd%8$O-Vp-M^t1"Ma/DC(r)&%I2=VI"Yk7GL
-;*5p"h#g6J=8X.iZfun,VP`oC:O9euH)o-/J:%40]nY%q,iGHHP=\-.J!jUr+\tWU
-8qlRagpfIT%f4;sdarc()p;/UApX$4TQfjIa0Ro$d+LM=r*@nIDJJ5]l=\lMH#Au(
-cXYYE4V..C]/R\FMKq5B:OHUVc:`m(Z&0+`\]J(j.WWK7+W1M"XsftLR9J--(*1Ug
-N/bp#FO\2tiWLU!3#OGHL802Y1f%M$[!k&hPNk^-BJE994ll!FXun.n'#]XrWI3#j
-4%HR$[bjm(osWB(hR=L/ptU(B=nKR@pKW1.T)KpG!G,(sJh>\FH3,h&V7
-endstream
endobj
53 0 obj
[/Indexed/DeviceRGB 255 54 0 R]
endobj
54 0 obj
<>stream
-8;X]O>EqN@%''O_@%e@?J;%+8(9e>X=MR6S?i^YgA3=].HDXF.R$lIL@"pJ+EP(%0
-b]6ajmNZn*!='OQZeQ^Y*,=]?C.B+\Ulg9dhD*"iC[;*=3`oP1[!S^)?1)IZ4dup`
-E1r!/,*0[*9.aFIR2&b-C#soRZ7Dl%MLY\.?d>Mn
-6%Q2oYfNRF$$+ON<+]RUJmC0InDZ4OTs0S!saG>GGKUlQ*Q?45:CI&4J'_2j$XKrcYp0n+Xl_nU*O(
-l[$6Nn+Z_Nq0]s7hs]`XX1nZ8&94a\~>
-endstream
endobj
41 0 obj
<>
endobj
42 0 obj
<>
endobj
43 0 obj
<>
endobj
44 0 obj
<>
endobj
45 0 obj
<>
endobj
46 0 obj
<>
endobj
65 0 obj
[/View/Design]
endobj
66 0 obj
<>>>
endobj
63 0 obj
[/View/Design]
endobj
64 0 obj
<>>>
endobj
61 0 obj
[/View/Design]
endobj
62 0 obj
<>>>
endobj
59 0 obj
[/View/Design]
endobj
60 0 obj
<>>>
endobj
57 0 obj
[/View/Design]
endobj
58 0 obj
<>>>
endobj
55 0 obj
[/View/Design]
endobj
56 0 obj
<>>>
endobj
51 0 obj
<>
endobj
50 0 obj
[/ICCBased 67 0 R]
endobj
67 0 obj
<>stream
-H‰””uTÔKÇtKˆ”ˆKJI,‚t(Ý‹»4ìKÇÒÝ%Ò¹´H—4J#‚Ò’‚(H
-w¹÷þqÏyïyßó~Ï3çùÌ™gÎ<3óÌ „Y9El
- @¸ ]äÕ!OÔÌ-@ã À à\€ˆ¹¥+BVKK
Àè:øOX×~òþ¿ÿWCa®–iHKL €…À0qÍY¦–Ë `ø5 àcü€Âæk–Ë
- XŠ] ¶x=†äßðš8¯ÙÚÜ üX €„Ŀ׽ƒ>Ÿ.Èf’‡›#aP§®¡¦Èünæ óD^{y8ÂËÅÖÚ €d¡pH×Ë stå©:Yò€Äô׬c xc
IŽVÈ?SÂÅ!þ:óè_úÃÆî¼9[ÂYbQ’PÒ~²+rA
-SÊhª¦›«·HhÀ´†t^ôé
·'0±ß…€Â™kYæX¯ØY9îYq†q•p÷ólÝ'äãäW°Œ£…z„EÎÅèÄE$´%D>,–ê‘^|t*K)Ç%/§`¢è¦¯\¦Ò«úùñ‰•:¯†¼&D®¦“¥[«7¨¿dplDa5–|ªmbõÌÓ4Ê,óy•y‡Å{Ëeè¾¶5•
«œ½Žƒ©£µ“3Üìã’âš…,t+w¯ñhòl÷êõðõóõA
ö½
î émk
-¯‹xYU“›ï“€H„&%«¥È¤
-¥q¼ O'M¿zù3ãKæTÖ@v[NUnn^\¾o]¡a‘b±Tr£ä¢t»lºümE]e~Uü+¿jû×åZÑ:¶zª a·q®i ¹¡¥°5¡Íÿ};¤C¹S¤‹¥›¢û²ç[ï\_ÿÛ†w…ý‰þƒCa…¾Qº1¬±÷ŸÆ;>”L$Lz}4ÿ¤:%8M7ÌlÌŽÎÕΧ/ø}¶XT^â]¦X>\™Ym[Ëùâ³n¸!´ycsk«ûkƶóŽÊ·;ßöv{¿§ýpßÓßúIþsû ÷0ëÈõXõ„éäàôݯÔ3ós®ó‹’ß&—$—õWÆWW˜*ØÂ)ÁãÅ!è$Ü$Æ%¡!e$cºÁHNOAKIMEq“„—úâÖÍíÝýÃâíÆ•;KLów§@˜‡YúX;ØšÙë8^Ý+çDspçñäðfßÏàKåOˆÅTC˜P°p J%†’D=ðè+å+íûÈO%$*©«˜¤”®œ¡’©šý8÷I¡Z½\£Z³^«U»K§_wLï“þ´Á¬á¼Ñ"dÙxíé¦Éö³]Ó}³£ç§æ– †»²º°>³9µ=²;°ßsøî¸ã´_G¬8/ºÌ¹N!GÝzÝ[<ª=‹½2½|B}½ýàþP”Q€z lH0Wc(EèeØnø|ÄPds::5&8Ö9îy¼F‚T"oÒídâä³”¯©³iƒ/ZÓK^&gd:fg«äˆæ²çQçãælÎ
·£kJÐ¥™e‰åá¨J*ø+ëêç¯kôj5ëÔêU”›š[”ZUÚ¿Ñh×é0ì|ÖeÙm×ãÒëÓò6ê]BÚ@ö`ñPÕpãHçèÀØÄû…ñûçñ?QM1MsψÍ*ÌiÏ›.ØöZ[JYÎZ)X-]«úR»Þ¸ÑºÙ¾ÕõµwûãÎú·£ï¸?¨ö@û¼?Åä5Ž Ç–'v§N¿àgçЃß
-—üW´×÷‡3ƒgƒÿŽŸL¬C#u!ó¼áMîMáMéEåvAmsË”F‡V‘NŒž‹Aø¶£ÌGL’w…A¼Ì¬,ô¬äl¸l¿Ø¿s¬Ý›ááêænä©àͽŸÌÎï+€„‚!Bê²"¢¢ 'R&k?¾ÿ´3?Ã4+:§6o¾€ü¾˜¾T²\·Ò±Ú¿6úåÃúÄÆøæÈVß×ÖíÊÌoá»ðïF?LöžîüT;:ä>¢::>ž:©;ýeqÆvx^saõ›òwÝ¥úåÊ•óŸï'_ E˜F”O\D’KšLtAnF¡F)FÅ|“èæõÔ6š\Ú`º@z?äm+Fý;²L¼wiA h›y’¥Í–Àîͽ§Á)ÁÅÎMÁý›g›wú~_
Ž@Œ ØZH_XA,Ê"F)Ž%¾/±*9ù ïaƒZ:ýQ”ŒŸ,\ÎB^_AUñ¡’€2«
-*‰êÕãƒ'[jêão5[´ª´óuR1uàïh`f¨m$1æxJgBdrölÇtÁläy»y¥E¦e$Ôfe¥g-g#`ËdGbwj¿î0áØáTOC9;¸¸Ê ¹Ü¨ÜÎÝ¿xŒz6zåx‡ù8ùøIû³£ÈP‡ó=A¥Á±!.¡†aÂAxÛ‘ ü÷ÏŠ³‹˜Œ}bŽG-ø‘Þ’Ä“ª”‘•x–`—G˜/™ššê›Ôœ¿ªž–Ÿƒ q¡_¢O£?¤0¥"¦§§ý¨ó©êªâ«Û¬ÕЮ˯ǰı²Á³Á´ÂµÅ¶È·Í¸Ó¹Ûºã»í¼ø¾¿À Á0Â@ÃRÄfÅzÆÇ¦È¾ÉÖÊñÌÍ*ÎGÏcЀџҿÓàÕÖ'×LØsÙ›ÚÄÛïÝÞFßsà¡áÏãäM噿çè6é†êØì+í€î×ð1ñòïôMõª÷øZù«úöü:ý{þ»ÿÿÿ € € å´ÍTÌ?¥~òŒ”~i˜ž~L}ãÁ~cbAþ~’Da€dþ€ü¸~t‹yä~W‰²ÊÛ~Oˆ±>~\†´—/~‚…›|“~¾„º`éƒôC –ƒx¢€äƒßú£}%—âH}”1ÉX}%‘z¯Î}K•Ö}†
{N}׋<_´~7‰‰AË~Àˆ-ψø¿|¢°à‚|žÉDz|+›®E|[—£”s|«”¦z}‘æ^•}wO@¶}ÿ-Œ~Ä‹É÷ {G®uÞÚ{D©zÆ{]¤Ä¬Ò{– f“{êœZxÚ|[˜»]ˆ|Ï•M?¹}R’‹<}ÆŽðõ…zªº]ÝYzŸ´Hħz³®‹«|zð©=‘â{L¤Nw²{ÀŸº\‹|=›>Ó|¼˜v|ÛIô8z/ÆrÜ
z¿;Ãbz'¸sªMzd²6ßzɬqvÒ{D§[®{À¢0>|;Ÿ| óyÑÒÈÚñy´ÊaÂIy¸Â©?yð»açzY´ÎvzÝ®Æ[{^©‡=c{ФÓI{Rò*yŒß„ÙýyfÕÓÁUy`Ìî¨Vy”Äâyþ½’uKz†·Zi{±Ü<Ú{z©%žzÈŽíí‰~+Ö~ˆ }±¾Í‡}W¦µ†0}3Ž…„}HtЄü}ŒZk„›}è=Ž„Ÿ~‹‹†z€ëɇ®‰Õ †£‡}½…¹†!¥~„ø…ŒÐ„d„*s}ƒôƒˆYƒ¨ƒ<9ƒ¸‚àù…w„éû†p“øÓS…w‘u¼„œ¤ƒõ‹‰ƒu‹VrUƒ‰ÕWÿ‚؈|;,‚뇔ˆ„{‡¨èR…sžøÑ²„ƒ›ºƒ²˜;¢¡ƒ•:Š8‚ ’¡q)‚PCV÷‚Ž:4‚.Œ–8ƒ‰ŠÉæÈ„ªªÐ2ƒ»¥¹‚ñ¡‚¡?‚U¤ˆîãšp£–çVu“ÿ9S†’‚šŒçåc„µbÎÖƒ°·µ‚Rªê ¹¦.‡ÕN¡Æný ¼U€ãš38‰€ó˜8¼ŒAä/ƒ‹ÀÚͬ‚œº‚¶’δzžô6®ß†è€Ó©°n1€“¤íT\€e Ø7Ý€tžXT‹·ã)ƒ$̯̕‚6Å;µ˜e¾Cž€Ê·Ë† €i±Ýmw€3¬SÆ€¨V7M€
-£\®€l‹GâN‚ÐØ»ËÚæÐN´ÄÈa5€tÁ…N€ºzlÕß´ÍS<º°H6Ѽ¥*ôŠîÝ<’a|˜Çkz|C±V޲|šÇ|ƒ—‹·|IkžŠ‚|±Ru‰ˆ}26މ'~2‹ÖÞÛF‘-†ËÆB…„°*ƒ„o™²‹üƒ‚ƒŠ‚òjŒ‰‚ˆQ^ˆ£‚@5zˆI‚`Š˜ƒ†Ù³ ‘$ÄŽ"Ží®ýŒcŒß˜€Šñ‹&U‰³‰²ijˆ¦ˆ|PJ‡Ë‡v4v‡y‡ú‰V†»ØG›’Ã.2˜{‹†•——Š’ý€ˆè¾hS‡æŽ¼O[‡Œÿ3†ÂŒˆ(‰„ÖéŽJ¦ÁÑŒx¢&¬$ŠÔžs•Ò‰h›
-~æˆ2—êgK‡>•-N}†o’Ì2Ù†‘Á
N‡%ˆÿÕ§±°ÇÀ›‹â¬ ªöŠ>§w”´ˆÖ£A}⇤Ÿ\fX†§›ÚMµ…ݘù2,…Š—ò¨†KˆÔ3»¥¿’‹g¶©ò‰Â°¦“¾ˆ[«¤}
-‡0§ež†6¢çM…_Ÿ¯1…?…—ˆ1Ó£ŒËÆÇ¾³‹ÀI©‰^º’ç‡ô´I|B†Ì¯dö…ܪwL‡…§e1$„¢¡:®…‡æÒàŒrÒW½ûаÊñ¨]‰
Ãá’1‡£½S{†z·|di…‹²ÇL
„½®g0·„\ ðU„އ©Ìû›ò{[¸“™G{!£ö–¸{ ŽÞ”`{&y’E{xbie{ùJrŽÚ|“/cŽ5}~
-~ÀË:šâ„ý·f˜#ƒç£•™‚üú“M‚Kx+‘CØa|ušI~÷.yWã ÏŽ›ƒÉәߎ¶—%ŒÂ¡å”˜ŠøŒá’[‰‰w!^ˆT`ƒŽž‡^H˜*† -§ŒŒ† 5G…èȨ˜ç˜Ž´ã–=•Î §“½“4‹»‘rív†Žÿ_ÒRG±Œf‹û,ދ̋ͯŒ…ßÇ|˜,¢†³Æ•„žúŸ{“›¬Š„Ò˜ªtìŽÙ•ô^1“ Fî‹Å‘Ä,;‹'‘¾<‹!…‘Æ_—›¬¥²²”õ¨Yžl’~¤J‰„J tŽS#]¸Œš'FA‹4—÷+®Š”—;ÛŠL…PÅf—&¶ì±É”€±Þ‰’ˆªÕ¨šs@å¤]Œ0¡E±Š´žÓ+:Š›ÈÖ‡SS ð§ ¨ŒêjVPp,<XQ)‚XVl€(Js•&ÂJ!ÒûK{é½@B€ÐEŠ.œe°íÙWqQ䆓³â½ý~3ßÌ7ßÌçF£HI^ý\¨¯§¬ÁïÓ¡ƒåœ+j&YÅöÉbƒdMLÅÑÅ{#©©úè÷)Fø£ÛAŠ;q²ïT0Œ±_à
^¿£9IݤšxÖº¶Æ¢YFh“9Õ…ÆhX;Jõ²Æl¬ äÀín+jÅÄ¡®(Ým,Ö¼Jƒî(Va÷V/ÀÈÄaØ‘”@ÈQ~.æ8_]±Èš7]ñÕÕÌÃãõÚgÕ|ÓFÕ)-—/ªºMH—|мøP´œ8™%èoFxàCÿ<÷ªR×l®AÒ^«™ ÷QÊlÚÁzÙrJAUžUÿá™ÿd*ÿùüîNî$iÜÉ
#Ÿv
b7FÚ*4Þ‚÷ú¯
-
Ëû§pv€iâxÖ–¼÷ŒÁIªão¥‡ìžËÝJÛ±á#ç
-í¾ËW—àh…Ô‰Šlý"ùkxwVjGá“Dzˆ–ç*¸ÇßœxŸWÁŠ:Æ©d¿ÙPÀîæ$¹üÎ jÀ4W·Mž¨[ÎÝ,]¢Ê«$ˆ–ÈWæî$I×&®åNˆ¬‘}ì7¨
sØþ»‹1@À9‡TÉŽ.íEÙÓzN¾Dfº*uwr þ„úØ ˆ*ª#Øùòë,¥hØ…Ãð"ä8=”³NÍ
¡%ƒ=(‰p¤â…QuÃ9søLÓ“(î&Ãâˆwì¥Ú¾õ?±‚ERAHi.RÚ~ Ô„Ë6õ ØÑâ¿:Ò*tД3*»–¿Û±ôx#ç‰m?r~3×û2ÿ+Êwù‰¾šp¸ÞÇ6‹yXaœTOÃ#Œã
-U‹Â¼<·_)ÂIø(»Œ}¹ÓW2SÎX U€àwü õ¦
M¨–f›_T‰)•úà“Ÿ?k–YYF…ôK8ãÁu;J$óÀþ*1T… >,ë#h›%TÓ,…QÛ¥{[ëõsˆ:˜ü9󅼓¼&^!Õ“˜a£â@Ò!ßÍ"y ð
-µ´.—÷Jl6mçHj†uÁ,béU6£+s©ìýhܸdœ-Ê¥ª}…wi À-s´un=0ŠÄ½äi-_ˆ*)UÞâ_ˈ“âÚãb$ôöna+;ϧTø;pçpA7Û¨¾¨CÈ4åÏ.*·Iߥ›a‡8õ°MÌæm.‚þôACiü“€7»\j|fi³¹Õœ¹•Ô«)Ö÷]Þ°jö¤À¡Ê„ÃÑâUò]¡3(ÞðwhöJÐÛcÉh-®4x7–“öh׿*P0¿HëŽL‡žŠ®ëž‡Ú¡uê‰Õ¾°…Å×Ú,Ë{ÏBz}§…8¦v¶gÊgŸÒ²¤d[û!XTZçZ.ø·vlµA°¿gÑ
-{;SÂm¶`vâîØ¿`~È?g¥a.œ
-3žÃŒì{§Çæ†L¨^–»¡¦ÔÅåW€ƒ¹¾ÍY¥eÆ4õ‚]¸Lû