9front - general discussion about 9front
 help / color / mirror / Atom feed
From: Lorenzo Bivens <izaki@belaska.us>
To: "9front@9front.org" <9front@9front.org>
Subject: [9front] [patch] Merging echoline's drawterm forks (fbdev and android)  into drawterm
Date: Sat, 14 Aug 2021 03:59:35 +0000	[thread overview]
Message-ID: <CO1PR17MB51778F16E9F21847384BF986B6FB9@CO1PR17MB5177.namprd17.prod.outlook.com> (raw)

[-- Attachment #1: Type: text/plain, Size: 613 bytes --]

Dear 9front,

I found a couple of forks (thank you echoline) of drawterm that include additions that for sure will profit the community. I've carefully merged them into our front branch and it would seem nothing was broken. 

I am aware of another fork by sirjofri that introduces improvements to the android implementation, but I haven't had a chance yet to make the merge.

It would be great if we could make this part of our front branch (left to the community to decide)
The original forks are 
https://github.com/echoline/drawterm-android
https://github.com/echoline/drawterm-fbdev

Best,
Izaki

[-- Attachment #2: 0001-Merging-echoline-s-android-and-fbdev-forks.patch --]
[-- Type: application/octet-stream, Size: 231890 bytes --]

From 67aff281ed261cf2f7ca4acdc269e6368e2a459e Mon Sep 17 00:00:00 2001
From: Lorenzo Bivens <git@lorenzobivens.info>
Date: Fri, 13 Aug 2021 20:39:50 -0700
Subject: [PATCH] Merging echoline's android and fbdev forks

---
 Make.android                                  |  38 +
 Make.android-386                              |  26 +
 Make.android-amd64                            |  26 +
 Make.android-arm                              |  26 +
 Make.android-arm64                            |  26 +
 Make.fbdev                                    |  22 +
 README                                        |  11 +
 README.bak                                    |  34 +
 gui-android/AndroidManifest.xml               |  30 +
 gui-android/Makefile                          |  23 +
 gui-android/bin/.keep                         |   0
 gui-android/cpp/android.c                     | 230 ++++++
 gui-android/cpp/devandroid.c                  | 248 +++++++
 gui-android/cpp/native-lib.c                  | 173 +++++
 gui-android/gen/.keep                         |   0
 .../org/echoline/drawterm/DrawTermThread.java |  32 +
 .../org/echoline/drawterm/MainActivity.java   | 437 ++++++++++++
 .../org/echoline/drawterm/MySurfaceView.java  |  91 +++
 gui-android/obj/.keep                         |   0
 gui-android/res/drawable-hdpi/ic_small.png    | Bin 0 -> 5361 bytes
 gui-android/res/drawable-mdpi/ic_small.png    | Bin 0 -> 3173 bytes
 gui-android/res/drawable-xhdpi/ic_small.png   | Bin 0 -> 5181 bytes
 gui-android/res/drawable-xxhdpi/ic_small.png  | Bin 0 -> 8529 bytes
 gui-android/res/drawable-xxxhdpi/ic_small.png | Bin 0 -> 10972 bytes
 gui-android/res/layout/activity_main.xml      |  24 +
 gui-android/res/layout/content_main.xml       |  16 +
 gui-android/res/layout/drawterm_main.xml      |  44 ++
 gui-android/res/layout/item_main.xml          |   8 +
 gui-android/res/layout/server_main.xml        |  56 ++
 gui-android/res/mipmap-hdpi/ic_launcher.png   | Bin 0 -> 14867 bytes
 gui-android/res/mipmap-mdpi/ic_launcher.png   | Bin 0 -> 11578 bytes
 gui-android/res/mipmap-xhdpi/ic_launcher.png  | Bin 0 -> 15155 bytes
 gui-android/res/mipmap-xxhdpi/ic_launcher.png | Bin 0 -> 20643 bytes
 .../res/mipmap-xxxhdpi/ic_launcher.png        | Bin 0 -> 25294 bytes
 gui-android/res/values/colors.xml             |   6 +
 gui-android/res/values/strings.xml            |   3 +
 gui-android/res/values/styles.xml             |   8 +
 gui-fbdev/Makefile                            |  12 +
 gui-fbdev/fbdev.c                             | 673 ++++++++++++++++++
 kern/devaudio-alsa.c                          | 108 +++
 lib/arm64-v8a/.keep                           |   0
 lib/armeabi-v7a/.keep                         |   0
 lib/x86/.keep                                 |   0
 lib/x86_64/.keep                              |   0
 libc/getpid.c                                 |  17 +
 main.c                                        |   1 +
 46 files changed, 2449 insertions(+)
 create mode 100644 Make.android
 create mode 100644 Make.android-386
 create mode 100644 Make.android-amd64
 create mode 100644 Make.android-arm
 create mode 100644 Make.android-arm64
 create mode 100644 Make.fbdev
 create mode 100644 README.bak
 create mode 100644 gui-android/AndroidManifest.xml
 create mode 100644 gui-android/Makefile
 create mode 100644 gui-android/bin/.keep
 create mode 100644 gui-android/cpp/android.c
 create mode 100644 gui-android/cpp/devandroid.c
 create mode 100644 gui-android/cpp/native-lib.c
 create mode 100644 gui-android/gen/.keep
 create mode 100644 gui-android/java/org/echoline/drawterm/DrawTermThread.java
 create mode 100644 gui-android/java/org/echoline/drawterm/MainActivity.java
 create mode 100644 gui-android/java/org/echoline/drawterm/MySurfaceView.java
 create mode 100644 gui-android/obj/.keep
 create mode 100644 gui-android/res/drawable-hdpi/ic_small.png
 create mode 100644 gui-android/res/drawable-mdpi/ic_small.png
 create mode 100644 gui-android/res/drawable-xhdpi/ic_small.png
 create mode 100644 gui-android/res/drawable-xxhdpi/ic_small.png
 create mode 100644 gui-android/res/drawable-xxxhdpi/ic_small.png
 create mode 100644 gui-android/res/layout/activity_main.xml
 create mode 100644 gui-android/res/layout/content_main.xml
 create mode 100644 gui-android/res/layout/drawterm_main.xml
 create mode 100644 gui-android/res/layout/item_main.xml
 create mode 100644 gui-android/res/layout/server_main.xml
 create mode 100644 gui-android/res/mipmap-hdpi/ic_launcher.png
 create mode 100644 gui-android/res/mipmap-mdpi/ic_launcher.png
 create mode 100644 gui-android/res/mipmap-xhdpi/ic_launcher.png
 create mode 100644 gui-android/res/mipmap-xxhdpi/ic_launcher.png
 create mode 100644 gui-android/res/mipmap-xxxhdpi/ic_launcher.png
 create mode 100644 gui-android/res/values/colors.xml
 create mode 100644 gui-android/res/values/strings.xml
 create mode 100644 gui-android/res/values/styles.xml
 create mode 100644 gui-fbdev/Makefile
 create mode 100644 gui-fbdev/fbdev.c
 create mode 100644 kern/devaudio-alsa.c
 create mode 100644 lib/arm64-v8a/.keep
 create mode 100644 lib/armeabi-v7a/.keep
 create mode 100644 lib/x86/.keep
 create mode 100644 lib/x86_64/.keep
 create mode 100644 libc/getpid.c

diff --git a/Make.android b/Make.android
new file mode 100644
index 0000000..00eaf68
--- /dev/null
+++ b/Make.android
@@ -0,0 +1,38 @@
+# Android
+SDKPREFIX=$(HOME)/Android/Sdk
+JAVA_HOME=/usr
+OBJS=lib/arm64-v8a/libdrawterm.so lib/armeabi-v7a/libdrawterm.so lib/x86/libdrawterm.so lib/x86_64/libdrawterm.so
+
+all: drawterm.apk
+
+clean:
+	rm -f *.apk lib/*/*.so
+
+lib/arm64-v8a/libdrawterm.so:
+	CONF=android-arm64 make -j5;
+	CONF=android-arm64 make clean;
+
+lib/armeabi-v7a/libdrawterm.so:
+	CONF=android-arm make -j5;
+	CONF=android-arm make clean;
+
+lib/x86/libdrawterm.so:
+	CONF=android-386 make -j5;
+	CONF=android-386 make clean;
+
+lib/x86_64/libdrawterm.so:
+	CONF=android-amd64 make -j5;
+	CONF=android-amd64 make clean;
+
+drawterm.apk: drawterm-signed.apk
+	$(SDKPREFIX)/build-tools/30.0.3/zipalign -v -f 4 $< $@
+
+drawterm-signed.apk: drawterm-unsigned.apk drawterm.keystore
+	$(JAVA_HOME)/bin/jarsigner -verbose -keystore ./drawterm.keystore -storepass glendarocks -keypass glendarocks -signedjar $@ $< drawtermKey
+
+drawterm-unsigned.apk: $(OBJS)
+	$(SDKPREFIX)/build-tools/30.0.3/aapt package -v -f -M gui-android/AndroidManifest.xml -S gui-android/res -I $(SDKPREFIX)/platforms/android-21/android.jar -F $@ gui-android/bin
+	$(SDKPREFIX)/build-tools/30.0.3/aapt add $@ $(OBJS)
+
+drawterm.keystore:
+	$(JAVA_HOME)/bin/keytool -genkeypair -validity 1000 -dname "CN=9front,O=Android,C=US" -keystore $@ -storepass glendarocks -keypass glendarocks -alias drawtermKey -keyalg RSA -v
diff --git a/Make.android-386 b/Make.android-386
new file mode 100644
index 0000000..ff43cf6
--- /dev/null
+++ b/Make.android-386
@@ -0,0 +1,26 @@
+# Android
+SDKPREFIX=$(HOME)/Android/Sdk
+NDKPREFIX=$(SDKPREFIX)/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin
+JAVA_HOME=/usr
+
+PTHREAD=-pthread
+AR=$(NDKPREFIX)/i686-linux-android-ar
+AS=$(NDKPREFIX)/i686-linux-android-as
+RANLIB=$(NDKPREFIX)/i686-linux-android-ranlib
+STRIP=$(NDKPREFIX)/i686-linux-android-strip
+CC=$(NDKPREFIX)/i686-linux-android21-clang
+CFLAGS=-Wall -Wno-missing-braces -ggdb -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/kern -c -Dmain=dt_main -fPIC
+O=o
+OS=posix
+GUI=android
+LDADD=-ggdb -lm -shared -llog -landroid
+LDFLAGS=$(PTHREAD)
+TARG=lib/x86/libdrawterm.so
+AUDIO=none
+
+all: default
+
+libmachdep.a:
+	arch=386; \
+	(cd posix-$$arch &&  make)
+
diff --git a/Make.android-amd64 b/Make.android-amd64
new file mode 100644
index 0000000..3f5cf46
--- /dev/null
+++ b/Make.android-amd64
@@ -0,0 +1,26 @@
+# Android
+SDKPREFIX=$(HOME)/Android/Sdk
+NDKPREFIX=$(SDKPREFIX)/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin
+JAVA_HOME=/usr
+
+PTHREAD=-pthread
+AR=$(NDKPREFIX)/x86_64-linux-android-ar
+AS=$(NDKPREFIX)/x86_64-linux-android-as
+RANLIB=$(NDKPREFIX)/x86_64-linux-android-ranlib
+STRIP=$(NDKPREFIX)/x86_64-linux-android-strip
+CC=$(NDKPREFIX)/x86_64-linux-android21-clang
+CFLAGS=-Wall -Wno-missing-braces -ggdb -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/kern -c -Dmain=dt_main -fPIC
+O=o
+OS=posix
+GUI=android
+LDADD=-ggdb -lm -shared -llog -landroid
+LDFLAGS=$(PTHREAD)
+TARG=lib/x86_64/libdrawterm.so
+AUDIO=none
+
+all: default
+
+libmachdep.a:
+	arch=amd64; \
+	(cd posix-$$arch &&  make)
+
diff --git a/Make.android-arm b/Make.android-arm
new file mode 100644
index 0000000..862d81d
--- /dev/null
+++ b/Make.android-arm
@@ -0,0 +1,26 @@
+# Android
+SDKPREFIX=$(HOME)/Android/Sdk
+NDKPREFIX=$(SDKPREFIX)/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin
+JAVA_HOME=/usr
+
+PTHREAD=-pthread
+AR=$(NDKPREFIX)/arm-linux-androideabi-ar
+AS=$(NDKPREFIX)/arm-linux-androideabi-as
+RANLIB=$(NDKPREFIX)/arm-linux-androideabi-ranlib
+STRIP=$(NDKPREFIX)/arm-linux-androideabi-strip
+CC=$(NDKPREFIX)/armv7a-linux-androideabi21-clang
+CFLAGS=-Wall -Wno-missing-braces -ggdb -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/kern -c -Dmain=dt_main -fPIC
+O=o
+OS=posix
+GUI=android
+LDADD=-ggdb -lm -shared -llog -landroid
+LDFLAGS=$(PTHREAD)
+TARG=lib/armeabi-v7a/libdrawterm.so
+AUDIO=none
+
+all: default
+
+libmachdep.a:
+	arch=arm; \
+	(cd posix-$$arch &&  make)
+
diff --git a/Make.android-arm64 b/Make.android-arm64
new file mode 100644
index 0000000..5ceab39
--- /dev/null
+++ b/Make.android-arm64
@@ -0,0 +1,26 @@
+# Android
+SDKPREFIX=$(HOME)/Android/Sdk
+NDKPREFIX=$(SDKPREFIX)/ndk/21.1.6352462/toolchains/llvm/prebuilt/linux-x86_64/bin
+JAVA_HOME=/usr
+
+PTHREAD=-pthread
+AR=$(NDKPREFIX)/aarch64-linux-android-ar
+AS=$(NDKPREFIX)/aarch64-linux-android-as
+RANLIB=$(NDKPREFIX)/aarch64-linux-android-ranlib
+STRIP=$(NDKPREFIX)/aarch64-linux-android-strip
+CC=$(NDKPREFIX)/aarch64-linux-android21-clang
+CFLAGS=-Wall -Wno-missing-braces -ggdb -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/kern -c -Dmain=dt_main -fPIC
+O=o
+OS=posix
+GUI=android
+LDADD=-ggdb -lm -shared -llog -landroid
+LDFLAGS=$(PTHREAD)
+TARG=lib/arm64-v8a/libdrawterm.so
+AUDIO=none
+
+all: default
+
+libmachdep.a:
+	arch=arm64; \
+	(cd posix-$$arch &&  make)
+
diff --git a/Make.fbdev b/Make.fbdev
new file mode 100644
index 0000000..ed8e1b0
--- /dev/null
+++ b/Make.fbdev
@@ -0,0 +1,22 @@
+# Unix
+#PTHREAD=	# for Mac
+PTHREAD=-pthread
+AR=ar
+AS=as
+RANLIB=ranlib
+CC=gcc
+CFLAGS=-Wall -Wno-missing-braces -ggdb -I$(ROOT) -I$(ROOT)/include -I$(ROOT)/kern -c -D_THREAD_SAFE $(PTHREAD) -O2
+O=o
+OS=posix
+GUI=fbdev
+LDADD=-ggdb -lm -lasound
+LDFLAGS=$(PTHREAD)
+TARG=drawterm
+# AUDIO=none
+AUDIO=alsa
+
+all: default
+
+libmachdep.a:
+	arch=`uname -m|sed 's/i.86/386/;s/Power Macintosh/power/; s/x86_64/amd64/; s/armv[567].*/arm/; s/aarch64/arm64/'`; \
+	(cd posix-$$arch &&  make)
diff --git a/README b/README
index 2599800..749273f 100644
--- a/README
+++ b/README
@@ -18,6 +18,17 @@ To build on Mac OS X with X11 (xquartz), run CONF=osx-x11 make.
 
 To build on Mac OS X with Cocoa, run CONF=osx-cocoa make and "cp drawterm gui-cocoa/drawterm.app/".
 
+To build for Android, make sure Make.android* and gui-android/Makefile are correct for your build and target systems, then run make -f Make.android
+
+USAGE
+-------
+On Android the five checkboxes at the top represent the three mouse buttons and mousewheel, determining which "buttons" are clicked. The "kb" button toggles the soft keyboard.
+
+
+CAVEATS
+--------
+Be aware that right now on Android the login details are saved as a plaintext string if saved, and there is no secstore support.
+
 
 BINARIES
 ---------
diff --git a/README.bak b/README.bak
new file mode 100644
index 0000000..2599800
--- /dev/null
+++ b/README.bak
@@ -0,0 +1,34 @@
+DESCRIPTION
+-----------
+This is a fork of Russ Cox's drawterm to incorporate features
+from Plan9front (http://9front.org), most importantly DP9IK
+authentication support (see authsrv(6)) and the TLS based rcpu(1)
+protocol.
+
+
+INSTALLATION
+--------------
+To build on Unix, run CONF=unix make.
+
+To build on Solaris using Sun cc, run CONF=sun make.
+
+To build on Windows, you can't use Visual C. Use Mingw on cygwin.
+
+To build on Mac OS X with X11 (xquartz), run CONF=osx-x11 make.
+
+To build on Mac OS X with Cocoa, run CONF=osx-cocoa make and "cp drawterm gui-cocoa/drawterm.app/".
+
+
+BINARIES
+---------
+http://drawterm.9front.org/
+
+
+SOURCE
+------
+http://git.9front.org/plan9front/drawterm/HEAD/info.html
+
+
+HELP
+----
+No.
diff --git a/gui-android/AndroidManifest.xml b/gui-android/AndroidManifest.xml
new file mode 100644
index 0000000..97be515
--- /dev/null
+++ b/gui-android/AndroidManifest.xml
@@ -0,0 +1,30 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+    package="org.echoline.drawterm">
+
+    <supports-screens android:largeScreens="true"
+        android:normalScreens="true" android:smallScreens="true"
+        android:anyDensity="true" />
+
+    <application
+        android:allowBackup="true"
+        android:icon="@mipmap/ic_launcher"
+        android:label="@string/app_name"
+        android:supportsRtl="true"
+        android:theme="@style/AppTheme">
+        <activity
+            android:name=".MainActivity"
+            android:label="@string/app_name"
+            android:windowSoftInputMode="stateUnchanged|adjustNothing">
+            <intent-filter>
+                <action android:name="android.intent.action.MAIN" />
+                <category android:name="android.intent.category.LAUNCHER" />
+            </intent-filter>
+        </activity>
+    </application>
+    <uses-permission android:name="android.permission.INTERNET"/>
+    <!--<uses-permission android:name="android.permission.SET_DEBUG_APP"/>-->
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
+    <uses-permission android:name="android.permission.CAMERA"/>
+</manifest>
diff --git a/gui-android/Makefile b/gui-android/Makefile
new file mode 100644
index 0000000..04df778
--- /dev/null
+++ b/gui-android/Makefile
@@ -0,0 +1,23 @@
+ROOT=..
+include ../Make.config
+LIB=libgui.a
+
+OFILES=\
+	cpp/android.$O\
+	cpp/native-lib.$O\
+	cpp/devandroid.$O\
+
+default: $(LIB) gen/org/echoline/drawterm/R.java bin/classes.dex
+$(LIB): $(OFILES)
+	$(AR) r $(LIB) $(OFILES)
+	$(RANLIB) $(LIB)
+
+gen/org/echoline/drawterm/R.java: $(shell find res/ -type f)
+	$(SDKPREFIX)/build-tools/30.0.3/aapt package -f -m -M AndroidManifest.xml -I $(SDKPREFIX)/platforms/android-21/android.jar -S res/ -J gen
+
+bin/classes.dex: obj/org/echoline/drawterm/MainActivity.class obj/org/echoline/drawterm/DrawTermThread.class obj/org/echoline/drawterm/MySurfaceView.class
+	$(SDKPREFIX)/build-tools/30.0.3/dx --dex --verbose --output=$@ obj/
+
+obj/org/echoline/drawterm/%.class: java/org/echoline/drawterm/%.java
+	$(JAVA_HOME)/bin/javac -d obj/ -classpath $(SDKPREFIX)/platforms/android-21/android.jar -sourcepath java java/org/echoline/drawterm/$*.java gen/org/echoline/drawterm/R.java
+
diff --git a/gui-android/bin/.keep b/gui-android/bin/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/gui-android/cpp/android.c b/gui-android/cpp/android.c
new file mode 100644
index 0000000..e6a2e0f
--- /dev/null
+++ b/gui-android/cpp/android.c
@@ -0,0 +1,230 @@
+#include <jni.h>
+#include <android/native_window.h>
+#include <android/log.h>
+
+#include "u.h"
+#include "lib.h"
+#include "dat.h"
+#include "fns.h"
+
+#include <draw.h>
+#include <memdraw.h>
+#include <keyboard.h>
+#include <cursor.h>
+#include "screen.h"
+
+Memimage *gscreen = nil;
+extern int screenWidth;
+extern int screenHeight;
+extern ANativeWindow *window;
+extern jobject mainActivityObj;
+extern JavaVM *jvm;
+
+char*
+clipread(void)
+{
+	char *ret;
+	const char *s;
+	JNIEnv *env;
+	jint rs = (*jvm)->AttachCurrentThread(jvm, &env, NULL);
+	if (rs != JNI_OK) {
+		__android_log_print(ANDROID_LOG_WARN, "drawterm", "AttachCurrentThread returned error: %d", rs);
+		return strdup("");
+	}
+	jclass clazz = (*env)->GetObjectClass(env, mainActivityObj);
+	jmethodID methodID = (*env)->GetMethodID(env, clazz, "getClipBoard", "()Ljava/lang/String;");
+        jstring str = (jstring)(*env)->CallObjectMethod(env, mainActivityObj, methodID);
+	s = (*env)->GetStringUTFChars(env, str, NULL);
+	ret = strdup(s);
+	(*env)->ReleaseStringUTFChars(env, str, s);
+	(*jvm)->DetachCurrentThread(jvm);
+	return ret;
+}
+
+int
+clipwrite(char *buf)
+{
+	JNIEnv *env;
+	jint rs = (*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_6);
+	if(rs != JNI_OK) {
+		__android_log_print(ANDROID_LOG_WARN, "drawterm", "GetEnv returned error: %d", rs);
+		return 0;
+	}
+	jclass clazz = (*env)->GetObjectClass(env, mainActivityObj);
+	jmethodID methodID = (*env)->GetMethodID(env, clazz, "setClipBoard", "(Ljava/lang/String;)V");
+        jstring str = (*env)->NewStringUTF(env, buf);
+	(*env)->CallVoidMethod(env, mainActivityObj, methodID, str);
+	return 0;
+}
+
+void
+show_notification(char *buf)
+{
+	JNIEnv *env;
+	jint rs = (*jvm)->AttachCurrentThread(jvm, &env, NULL);
+	if(rs != JNI_OK) {
+		__android_log_print(ANDROID_LOG_WARN, "drawterm", "AttachCurrentThread returned error: %d", rs);
+		return;
+	}
+	jclass clazz = (*env)->GetObjectClass(env, mainActivityObj);
+	jmethodID methodID = (*env)->GetMethodID(env, clazz, "showNotification", "(Ljava/lang/String;)V");
+        jstring str = (*env)->NewStringUTF(env, buf);
+	(*env)->CallVoidMethod(env, mainActivityObj, methodID, str);
+	(*jvm)->DetachCurrentThread(jvm);
+	return;
+}
+
+int
+num_cameras()
+{
+	JNIEnv *env;
+	int n;
+	jint rs = (*jvm)->GetEnv(jvm, (void**)&env, JNI_VERSION_1_6);
+	if(rs != JNI_OK) {
+		__android_log_print(ANDROID_LOG_WARN, "drawterm", "GetEnv returned error: %d", rs);
+		return 0;
+	}
+	jclass clazz = (*env)->GetObjectClass(env, mainActivityObj);
+	jmethodID methodID = (*env)->GetMethodID(env, clazz, "numCameras", "()I");
+	n = (*env)->CallIntMethod(env, mainActivityObj, methodID);
+	return n;
+}
+
+void
+take_picture(int id)
+{
+	JNIEnv *env;
+	jint rs = (*jvm)->AttachCurrentThread(jvm, &env, NULL);
+	if(rs != JNI_OK) {
+		__android_log_print(ANDROID_LOG_WARN, "drawterm", "AttachCurrentThread returned error: %d", rs);
+		return;
+	}
+	jclass clazz = (*env)->GetObjectClass(env, mainActivityObj);
+	jmethodID methodID = (*env)->GetMethodID(env, clazz, "takePicture", "(I)V");
+	(*env)->CallVoidMethod(env, mainActivityObj, methodID, id);
+	(*jvm)->DetachCurrentThread(jvm);
+	return;
+}
+
+void
+setcolor(ulong i, ulong r, ulong g, ulong b)
+{
+	return;
+}
+
+void
+getcolor(ulong v, ulong *r, ulong *g, ulong *b)
+{
+	*r = (v>>16)&0xFF;
+	*g = (v>>8)&0xFF;
+	*b = v&0xFF;
+}
+
+void
+flushmemscreen(Rectangle r)
+{
+	ANativeWindow_Buffer buffer;
+	uint8_t *pixels;
+	int x, y, o, b;
+	ARect bounds;
+
+	if (window == NULL)
+		return;
+
+	memset(&buffer, 0, sizeof(buffer));
+
+	bounds.left = r.min.x;
+	bounds.top = r.min.y;
+	bounds.right = r.max.x;
+	bounds.bottom = r.max.y;
+
+	if (ANativeWindow_lock(window, &buffer, &bounds) != 0) {
+		__android_log_print(ANDROID_LOG_WARN, "drawterm", "Unable to lock window buffer");
+		return;
+	}
+
+	r.min.x = bounds.left;
+	r.min.y = bounds.top;
+	r.max.x = bounds.right;
+	r.max.y = bounds.bottom;
+
+	pixels = (uint8_t*)buffer.bits;
+	for (y = r.min.y; y < r.max.y; y++)
+		for (x = r.min.x; x < r.max.x; x++) {
+			o = (y * screenWidth + x) * 4;
+			b = (y * buffer.stride + x) * 4;
+			pixels[b+3] = 0xFF;
+			pixels[b+2] = gscreen->data->bdata[o+0];
+			pixels[b+1] = gscreen->data->bdata[o+1];
+			pixels[b+0] = gscreen->data->bdata[o+2];
+		}
+
+	if (ANativeWindow_unlockAndPost(window) != 0) {
+		__android_log_print(ANDROID_LOG_WARN, "drawterm", "Unable to unlock and post window buffer");
+	}
+	return;
+}
+
+void
+screeninit(void)
+{
+	Rectangle r = Rect(0,0,screenWidth,screenHeight);
+	memimageinit();
+	screensize(r, XRGB32);
+	if (gscreen == nil)
+		panic("screensize failed");
+	gscreen->clipr = r;
+	terminit();
+	qlock(&drawlock);
+	flushmemscreen(r);
+	qunlock(&drawlock);
+	return;
+}
+
+void
+screensize(Rectangle r, ulong chan)
+{
+	Memimage *mi;
+
+	mi = allocmemimage(r, chan);
+	if (mi == nil)
+		return;
+
+	if (gscreen != nil)
+		freememimage(gscreen);
+
+	gscreen = mi;
+	gscreen->clipr = ZR;
+}
+
+Memdata*
+attachscreen(Rectangle *r, ulong *chan, int *depth, int *width, int *softscreen)
+{
+	*r = gscreen->clipr;
+	*depth = gscreen->depth;
+	*chan = gscreen->chan;
+	*width = gscreen->width;
+	*softscreen = 1;
+
+	gscreen->data->ref++;
+	return gscreen->data;
+}
+
+void
+setcursor(void)
+{
+	return;
+}
+
+void
+mouseset(Point xy)
+{
+	return;
+}
+
+void
+guimain(void)
+{
+	cpubody();
+}
+
diff --git a/gui-android/cpp/devandroid.c b/gui-android/cpp/devandroid.c
new file mode 100644
index 0000000..daf2f57
--- /dev/null
+++ b/gui-android/cpp/devandroid.c
@@ -0,0 +1,248 @@
+#include	"u.h"
+#include	"lib.h"
+#include	"dat.h"
+#include	"fns.h"
+#include	"error.h"
+
+#include <android/log.h>
+#include <android/sensor.h>
+
+void show_notification(char *buf);
+void take_picture(int id);
+int num_cameras();
+
+int Ncameras = 0;
+
+uchar *cambuf = nil;
+int camlen;
+
+ASensorManager *sensorManager = NULL;
+
+enum
+{
+	Qdir		= 0,
+	Qcam		= 1,
+	Qaccel		= 2,
+	Qcompass	= 4,
+	Qnotification	= 6,
+};
+#define QID(p, c, y) 	(((p)<<16) | ((c)<<4) | (y))
+
+static void androidinit(void);
+
+static void
+androidinit(void)
+{
+	sensorManager = ASensorManager_getInstance();
+
+	Ncameras = num_cameras();
+}
+
+static Chan*
+androidattach(char *param)
+{
+	Chan *c;
+
+	c = devattach('N', param);
+	c->qid.path = QID(0, 0, Qdir);
+	c->qid.type = QTDIR;
+	c->qid.vers = 0;
+
+	return c;
+}
+
+static int
+androidgen(Chan *c, char *n, Dirtab *d, int nd, int s, Dir *dp)
+{
+	Qid q;
+
+	if (s == DEVDOTDOT) {
+		mkqid(&q, Qdir, 0, QTDIR);
+		devdir(c, q, "#N", 0, eve, 0555, dp);
+		return 1;
+	}
+	if (s < Ncameras) {
+		sprintf(up->genbuf, "cam%d.jpg", s);
+		mkqid(&q, (s << 16) | Qcam, 0, QTFILE);
+		devdir(c, q, up->genbuf, 0, eve, 0444, dp);
+		return 1;
+	}
+	if (s == Ncameras) {
+		sprintf(up->genbuf, "accel");
+		mkqid(&q, Qaccel, 0, QTFILE);
+		devdir(c, q, up->genbuf, 0, eve, 0444, dp);
+		return 1;
+	}
+	if (s == (Ncameras+1)) {
+		sprintf(up->genbuf, "compass");
+		mkqid(&q, Qcompass, 0, QTFILE);
+		devdir(c, q, up->genbuf, 0, eve, 0444, dp);
+		return 1;
+	}
+	if (s == (Ncameras+2)) {
+		sprintf(up->genbuf, "notification");
+		mkqid(&q, Qnotification, 0, QTFILE);
+		devdir(c, q, up->genbuf, 0, eve, 0222, dp);
+		return 1;
+	}
+	return -1;
+}
+
+static Walkqid*
+androidwalk(Chan *c, Chan *nc, char **name, int nname)
+{
+	return devwalk(c, nc, name, nname, 0, 0, androidgen);
+}
+
+static int
+androidstat(Chan *c, uchar *db, int n)
+{
+	return devstat(c, db, n, 0, 0, androidgen);
+}
+
+static Chan*
+androidopen(Chan *c, int omode)
+{
+	p9_uvlong s;
+
+	c = devopen(c, omode, 0, 0, androidgen);
+
+	if (c->qid.path & Qcam) {
+		s = c->qid.path >> 16;
+		take_picture(s);
+	}
+	c->mode = openmode(omode);
+	c->flag |= COPEN;
+	c->offset = 0;
+	c->iounit = 8192;
+
+	return c;
+}
+
+static void
+androidclose(Chan *c)
+{
+	if (c->qid.path & Qcam && cambuf != nil) {
+		free(cambuf);
+		cambuf = nil;
+	}
+}
+
+static long
+androidread(Chan *c, void *v, long n, vlong off)
+{
+	char *a = v;
+	long l;
+	const ASensor *sensor;
+	ASensorEventQueue *queue = NULL;
+	ASensorEvent data;
+
+	switch((ulong)c->qid.path & 0xF) {
+		default:
+			error(Eperm);
+			return -1;
+
+		case Qcam:
+			while(cambuf == nil)
+				usleep(10 * 1000);
+
+			l = camlen - off;
+			if (l > n)
+				l = n;
+
+			if (l > 0)
+				memcpy(a, cambuf + off, l);
+
+			return l;
+		case Qaccel:
+			queue = ASensorManager_createEventQueue(sensorManager, ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS), 1, NULL, NULL);
+			if (queue == NULL)
+				return 0;
+			sensor = ASensorManager_getDefaultSensor(sensorManager, ASENSOR_TYPE_ACCELEROMETER);
+			if (sensor == NULL) {
+				ASensorManager_destroyEventQueue(sensorManager, queue);
+				return 0;
+			}
+			if (ASensorEventQueue_enableSensor(queue, sensor)) {
+				ASensorEventQueue_disableSensor(queue, sensor);
+				ASensorManager_destroyEventQueue(sensorManager, queue);
+				return 0;
+			}
+			l = 0;
+			if (ALooper_pollAll(1000, NULL, NULL, NULL) == 1) {
+				if (ASensorEventQueue_getEvents(queue, &data, 1)) {
+					l = snprint(a, n, "%11f %11f %11f\n", data.vector.x, data.vector.y, data.vector.z);
+				}
+			}
+			ASensorEventQueue_disableSensor(queue, sensor);
+			ASensorManager_destroyEventQueue(sensorManager, queue);
+			return l;
+		case Qcompass:
+			queue = ASensorManager_createEventQueue(sensorManager, ALooper_prepare(ALOOPER_PREPARE_ALLOW_NON_CALLBACKS), 1, NULL, NULL);
+			if (queue == NULL)
+				return 0;
+			sensor = ASensorManager_getDefaultSensor(sensorManager, ASENSOR_TYPE_MAGNETIC_FIELD);
+			if (sensor == NULL) {
+				ASensorManager_destroyEventQueue(sensorManager, queue);
+				return 0;
+			}
+			if (ASensorEventQueue_enableSensor(queue, sensor)) {
+				ASensorEventQueue_disableSensor(queue, sensor);
+				ASensorManager_destroyEventQueue(sensorManager, queue);
+				return 0;
+			}
+			l = 0;
+			if (ALooper_pollAll(1000, NULL, NULL, NULL) == 1) {
+				if (ASensorEventQueue_getEvents(queue, &data, 1)) {
+					l = snprint(a, n, "%11f %11f %11f\n", data.vector.x, data.vector.y, data.vector.z);
+				}
+			}
+			ASensorEventQueue_disableSensor(queue, sensor);
+			ASensorManager_destroyEventQueue(sensorManager, queue);
+			return l;
+		case Qdir:
+			return devdirread(c, a, n, 0, 0, androidgen);
+	}
+}
+
+static long
+androidwrite(Chan *c, void *vp, long n, vlong off)
+{
+	char *a = vp;
+	char *str;
+
+	switch((ulong)c->qid.path) {
+		case Qnotification:
+			str = malloc(n+1);
+			memcpy(str, a, n);
+			str[n] = '\0';
+			show_notification(str);
+			free(str);
+			return n;
+		default:
+			error(Eperm);
+			break;
+	}
+	return -1;
+}
+
+Dev androiddevtab = {
+	'N',
+	"android",
+
+	devreset,
+	androidinit,
+	devshutdown,
+	androidattach,
+	androidwalk,
+	androidstat,
+	androidopen,
+	devcreate,
+	androidclose,
+	androidread,
+	devbread,
+	androidwrite,
+	devbwrite,
+	devremove,
+	devwstat,
+};
diff --git a/gui-android/cpp/native-lib.c b/gui-android/cpp/native-lib.c
new file mode 100644
index 0000000..1e768b3
--- /dev/null
+++ b/gui-android/cpp/native-lib.c
@@ -0,0 +1,173 @@
+#include <jni.h>
+#include <android/native_window.h>
+#include <android/native_window_jni.h>
+#include <android/log.h>
+#include "u.h"
+#include "lib.h"
+#include "dat.h"
+#include "fns.h"
+#include "error.h"
+#include <draw.h>
+#include <string.h>
+#include <keyboard.h>
+
+void absmousetrack(int, int, int, ulong);
+ulong ticks(void);
+int dt_main(int, char**);
+int screenWidth;
+int screenHeight;
+Point mousept = {0, 0};
+int buttons = 0;
+float ws = 1;
+float hs = 1;
+extern char *snarfbuf;
+int mPaused = 0;
+ANativeWindow *window = NULL;
+jobject mainActivityObj;
+JavaVM *jvm;
+void flushmemscreen(Rectangle r);
+extern uchar *cambuf;
+extern int camlen;
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_setObject(
+        JNIEnv *env,
+        jobject obj) {
+    mainActivityObj = (*env)->NewGlobalRef(env, obj);
+    jint rs = (*env)->GetJavaVM(env, &jvm);
+    assert(rs == JNI_OK);
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_keyDown(
+        JNIEnv *env,
+        jobject obj,
+        jint c) {
+    kbdkey(c, 1);
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_keyUp(
+        JNIEnv *env,
+        jobject obj,
+        jint c) {
+    kbdkey(c, 0);
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_setPass(
+        JNIEnv *env,
+        jobject obj,
+        jstring str) {
+    setenv("PASS", (char*)(*env)->GetStringUTFChars(env, str, 0), 1);
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_setWidth(
+        JNIEnv *env,
+        jobject obj,
+        jint width) {
+    screenWidth = width;
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_setHeight(
+        JNIEnv *env,
+        jobject obj,
+        jint height) {
+    screenHeight = height;
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_setWidthScale(
+        JNIEnv *env,
+        jobject obj,
+        jfloat s) {
+    ws = s;
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_setHeightScale(
+        JNIEnv *env,
+        jobject obj,
+        jfloat s) {
+    hs = s;
+}
+
+JNIEXPORT jint JNICALL
+Java_org_echoline_drawterm_MainActivity_dtmain(
+        JNIEnv *env,
+        jobject obj,
+        jobjectArray argv) {
+    int i, ret;
+    char **args = (char **) malloc(((*env)->GetArrayLength(env, argv)+1) * sizeof(char *));
+
+    for (i = 0; i < (*env)->GetArrayLength(env, argv); i++) {
+        jobject str = (jobject) (*env)->GetObjectArrayElement(env, argv, i);
+        args[i] = strdup((char*)(*env)->GetStringUTFChars(env, (jstring)str, 0));
+    }
+    args[(*env)->GetArrayLength(env, argv)] = NULL;
+
+    ret = dt_main(i, args);
+
+    for (i = 0; args[i] != NULL; i++) {
+        free(args[i]);
+    }
+    free(args);
+
+    return ret;
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_setMouse(
+        JNIEnv *env,
+        jobject obj,
+        jintArray args) {
+    jboolean isCopy;
+    jint *data;
+    if ((*env)->GetArrayLength(env, args) < 3)
+        return;
+    data = (*env)->GetIntArrayElements(env, args, &isCopy);
+    mousept.x = (int)(data[0] / ws);
+    mousept.y = (int)(data[1] / hs);
+    buttons = data[2];
+    (*env)->ReleaseIntArrayElements(env, args, data, 0);
+    absmousetrack(mousept.x, mousept.y, buttons, ticks());
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_setDTSurface(
+	JNIEnv* jenv,
+	jobject obj,
+	jobject surface) {
+    if (surface != NULL) {
+        window = ANativeWindow_fromSurface(jenv, surface);
+	ANativeWindow_setBuffersGeometry(window, screenWidth, screenHeight,
+		AHARDWAREBUFFER_FORMAT_R8G8B8X8_UNORM);
+	flushmemscreen(Rect(0, 0, screenWidth, screenHeight));
+    } else if (window != NULL) {
+        ANativeWindow_release(window);
+	window = NULL;
+    }
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_exitDT(
+	JNIEnv* jenv,
+	jobject obj) {
+    exit(0);
+}
+
+JNIEXPORT void JNICALL
+Java_org_echoline_drawterm_MainActivity_sendPicture(
+	JNIEnv* env,
+	jobject obj,
+	jbyteArray array) {
+    jint len = (*env)->GetArrayLength(env, array);
+    jbyte *bytes = (*env)->GetByteArrayElements(env, array, NULL);
+    camlen = len;
+    cambuf = malloc(camlen);
+    memcpy(cambuf, bytes, camlen);
+    (*env)->ReleaseByteArrayElements(env, array, bytes, 0);
+}
+
diff --git a/gui-android/gen/.keep b/gui-android/gen/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/gui-android/java/org/echoline/drawterm/DrawTermThread.java b/gui-android/java/org/echoline/drawterm/DrawTermThread.java
new file mode 100644
index 0000000..52baae8
--- /dev/null
+++ b/gui-android/java/org/echoline/drawterm/DrawTermThread.java
@@ -0,0 +1,32 @@
+package org.echoline.drawterm;
+
+/**
+ * Created by eli on 12/4/17.
+ */
+
+public class DrawTermThread extends Thread {
+	private MainActivity m;
+	private String p;
+	private String []args;
+
+	public DrawTermThread(String []args, String p, MainActivity m) {
+		this.m = m;
+		this.p = p;
+		this.args = args;
+	}
+
+	@Override
+	public void run() {
+		if (p != null && !p.equals(""))
+			m.setPass(p);
+		m.dtmain(args);
+		m.runOnUiThread(new Runnable() {
+			@Override
+			public void run() {
+				m.exitDT();
+				m.setContentView(R.layout.server_main);
+				m.populateServers(m);
+			}
+		});
+	}
+}
diff --git a/gui-android/java/org/echoline/drawterm/MainActivity.java b/gui-android/java/org/echoline/drawterm/MainActivity.java
new file mode 100644
index 0000000..2e9b852
--- /dev/null
+++ b/gui-android/java/org/echoline/drawterm/MainActivity.java
@@ -0,0 +1,437 @@
+package org.echoline.drawterm;
+
+import android.content.Context;
+import android.content.SharedPreferences;
+import android.content.pm.ActivityInfo;
+import android.content.res.Resources;
+import android.graphics.Point;
+import android.os.Bundle;
+import android.os.Environment;
+
+import android.app.Activity;
+
+import android.app.Notification;
+import android.app.NotificationManager;
+
+import android.util.DisplayMetrics;
+import android.util.Log;
+import android.view.Display;
+import android.view.MotionEvent;
+import android.view.View;
+import android.view.Menu;
+import android.view.MenuItem;
+import android.view.WindowManager;
+import android.view.Surface;
+import android.view.inputmethod.InputMethodManager;
+import android.view.KeyEvent;
+import android.widget.ArrayAdapter;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.LinearLayout;
+import android.widget.ListView;
+import android.widget.TextView;
+import android.content.ClipData;
+import android.content.ClipboardManager;
+import android.hardware.camera2.CameraManager;
+import android.hardware.camera2.CameraAccessException;
+import android.hardware.camera2.CameraDevice;
+import android.hardware.camera2.CaptureRequest;
+import android.hardware.camera2.CameraMetadata;
+import android.hardware.camera2.CameraCaptureSession;
+import android.hardware.camera2.TotalCaptureResult;
+import android.media.Image;
+import android.media.ImageReader;
+import android.graphics.ImageFormat;
+import android.os.Handler;
+import android.os.HandlerThread;
+
+import java.io.File;
+import java.util.Map;
+import java.nio.ByteBuffer;
+import java.util.List;
+import java.util.ArrayList;
+
+public class MainActivity extends Activity {
+	private Map<String, ?> map;
+	private MainActivity mainActivity;
+	private boolean dtrunning = false;
+	private DrawTermThread dthread;
+	private int notificationId;
+	private CameraDevice cameraDevice = null;
+	private byte []jpegBytes;
+
+	static {
+		System.loadLibrary("drawterm");
+	}
+
+	public void showNotification(String text) {
+		Notification.Builder builder = new Notification.Builder(this)
+			.setDefaults(Notification.DEFAULT_SOUND)
+			.setSmallIcon(R.drawable.ic_small)
+			.setContentText(text)
+			.setStyle(new Notification.BigTextStyle().bigText(text))
+			.setPriority(Notification.PRIORITY_DEFAULT);
+
+		((NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE)).notify(notificationId, builder.build());
+		notificationId++;
+	}
+
+	public int numCameras() {
+		try {
+			return ((CameraManager)getSystemService(Context.CAMERA_SERVICE)).getCameraIdList().length;
+		} catch (CameraAccessException e) {
+			Log.w("drawterm", e.toString());
+			return 0;
+		}
+	}
+
+	public void takePicture(int id) {
+		try {
+			HandlerThread mBackgroundThread = new HandlerThread("Camera Background");
+			mBackgroundThread.start();
+			Handler mBackgroundHandler = new Handler(mBackgroundThread.getLooper());
+			CameraManager manager = (CameraManager)getSystemService(Context.CAMERA_SERVICE);
+			String []cameraIdList = manager.getCameraIdList();
+			manager.openCamera(cameraIdList[id], new CameraDevice.StateCallback() {
+				public void onOpened(CameraDevice device) {
+					cameraDevice = device;
+				}
+				public void onDisconnected(CameraDevice device) {
+					if (cameraDevice != null)
+						cameraDevice.close();
+					cameraDevice = null;
+				}
+				public void onError(CameraDevice device, int error) {
+					if (cameraDevice != null)
+						cameraDevice.close();
+					cameraDevice = null;
+				}
+			}, mBackgroundHandler);
+			ImageReader reader = ImageReader.newInstance(640, 480, ImageFormat.JPEG, 1);
+			CaptureRequest.Builder captureBuilder = cameraDevice.createCaptureRequest(CameraDevice.TEMPLATE_ZERO_SHUTTER_LAG);
+			captureBuilder.set(CaptureRequest.CONTROL_MODE, CameraMetadata.CONTROL_MODE_AUTO);
+			captureBuilder.set(CaptureRequest.CONTROL_AWB_MODE, CameraMetadata.CONTROL_AWB_MODE_AUTO);
+			captureBuilder.set(CaptureRequest.CONTROL_AE_MODE, CameraMetadata.CONTROL_AE_MODE_ON);
+			captureBuilder.set(CaptureRequest.JPEG_ORIENTATION, getWindowManager().getDefaultDisplay().getRotation());
+			captureBuilder.addTarget(reader.getSurface());
+			reader.setOnImageAvailableListener(new ImageReader.OnImageAvailableListener() {
+				public void onImageAvailable(ImageReader reader) {
+					Image image = null;
+					try {
+						image = reader.acquireLatestImage();
+						ByteBuffer buffer = image.getPlanes()[0].getBuffer();
+						jpegBytes = new byte[buffer.capacity()];
+						buffer.get(jpegBytes);
+					} catch (Exception e) {
+						Log.w("drawterm", e.toString());
+					} finally {
+						if (image != null) {
+							image.close();
+						}
+					}
+				}
+			}, mBackgroundHandler);
+			List<Surface> outputSurfaces = new ArrayList<Surface>(1);
+			outputSurfaces.add(reader.getSurface());
+			cameraDevice.createCaptureSession(outputSurfaces, new CameraCaptureSession.StateCallback() {
+				public void onConfigured(CameraCaptureSession session) {
+					try {
+						List<CaptureRequest> captureRequests = new ArrayList<CaptureRequest>(10);
+						for (int i = 0; i < 10; i++)
+							captureRequests.add(captureBuilder.build());
+						session.captureBurst(captureRequests, new CameraCaptureSession.CaptureCallback() {
+							public void onCaptureSequenceCompleted(CameraCaptureSession session, int sequenceId, long frameNumber) {
+								try {
+									sendPicture(jpegBytes);
+									mBackgroundThread.quitSafely();
+									mBackgroundThread.join();
+								} catch (Exception e) {
+									Log.w("drawterm", e.toString());
+								}
+							}
+						}, mBackgroundHandler);
+					} catch (CameraAccessException e) {
+						e.printStackTrace();
+					}
+				}
+				public void onConfigureFailed(CameraCaptureSession session) {
+				}
+			}, mBackgroundHandler);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+	}
+
+	public void serverView(View v) {
+		setContentView(R.layout.server_main);
+		serverButtons();
+
+		String s = (String)map.get(((TextView)v).getText().toString());
+		String []a = s.split("\007");
+
+		((EditText)findViewById(R.id.cpuServer)).setText((String)a[0]);
+		((EditText)findViewById(R.id.authServer)).setText((String)a[1]);
+		((EditText)findViewById(R.id.userName)).setText((String)a[2]);
+		if (a.length > 3)
+			((EditText)findViewById(R.id.passWord)).setText((String)a[3]);
+	}
+
+	public void populateServers(Context context) {
+		ListView ll = (ListView)findViewById(R.id.servers);
+		ArrayAdapter<String> la = new ArrayAdapter<String>(this, R.layout.item_main);
+		SharedPreferences settings = getSharedPreferences("DrawtermPrefs", 0);
+		map = (Map<String, ?>)settings.getAll();
+		String key;
+		Object []keys = map.keySet().toArray();
+		for (int i = 0; i < keys.length; i++) {
+			key = (String)keys[i];
+			la.add(key);
+		}
+		ll.setAdapter(la);
+
+		setDTSurface(null);
+		dtrunning = false;
+	}
+
+	public void runDrawterm(String []args, String pass) {
+		Resources res = getResources();
+		DisplayMetrics dm = res.getDisplayMetrics();
+
+		int wp = dm.widthPixels;
+		int hp = dm.heightPixels;
+
+		setContentView(R.layout.drawterm_main);
+
+		Button kbutton = (Button)findViewById(R.id.keyboardToggle);
+		kbutton.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(final View view) {
+				InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
+				imm.toggleSoftInput(InputMethodManager.SHOW_IMPLICIT, 0);
+			}
+		});
+
+		int rid = res.getIdentifier("navigation_bar_height", "dimen", "android");
+		if (rid > 0) {
+			hp -= res.getDimensionPixelSize(rid);
+		}
+		LinearLayout ll = (LinearLayout)findViewById(R.id.dtButtons);
+		hp -= ll.getHeight();
+
+		int w = (int)(wp * (160.0/dm.xdpi));
+		int h = (int)(hp * (160.0/dm.ydpi));
+		float ws = (float)wp/w;
+		float hs = (float)hp/h;
+		// only scale up
+		if (ws < 1) {
+			ws = 1;
+			w = wp;
+		}
+		if (hs < 1) {
+			hs = 1;
+			h = hp;
+		}
+
+		MySurfaceView mView = new MySurfaceView(mainActivity, w, h, ws, hs);
+		mView.getHolder().setFixedSize(w, h);
+
+		LinearLayout l = (LinearLayout)findViewById(R.id.dlayout);
+		l.addView(mView, 1, new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.MATCH_PARENT));
+
+		dthread = new DrawTermThread(args, pass, mainActivity);
+		dthread.start();
+
+		dtrunning = true;
+	}
+
+	public void serverButtons() {
+		Button button = (Button)findViewById(R.id.save);
+		button.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				String cpu = ((EditText)findViewById(R.id.cpuServer)).getText().toString();
+				String auth = ((EditText)findViewById(R.id.authServer)).getText().toString();
+				String user = ((EditText)findViewById(R.id.userName)).getText().toString();
+				String pass = ((EditText)findViewById(R.id.passWord)).getText().toString();
+
+				SharedPreferences settings = getSharedPreferences("DrawtermPrefs", 0);
+				SharedPreferences.Editor editor = settings.edit();
+				editor.putString(user + "@" + cpu + " (auth="  + auth + ")", cpu + "\007" + auth + "\007" + user + "\007" + pass);
+				editor.commit();
+			}
+		});
+
+		button = (Button) findViewById(R.id.connect);
+		button.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(final View view) {
+				String cpu = ((EditText)findViewById(R.id.cpuServer)).getText().toString();
+				String auth = ((EditText)findViewById(R.id.authServer)).getText().toString();
+				String user = ((EditText)findViewById(R.id.userName)).getText().toString();
+				String pass = ((EditText)findViewById(R.id.passWord)).getText().toString();
+
+				String args[] = {"drawterm", "-p", "-h", cpu, "-a", auth, "-u", user};
+				runDrawterm(args, pass);
+			}
+		});
+	}
+
+	@Override
+	protected void onCreate(Bundle savedInstanceState) {
+		super.onCreate(savedInstanceState);
+		setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+		getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
+
+		mainActivity = this;
+		setObject();
+		setContentView(R.layout.activity_main);
+		populateServers(this);
+
+		View fab = findViewById(R.id.fab);
+		fab.setOnClickListener(new View.OnClickListener() {
+			@Override
+			public void onClick(View v) {
+				setContentView(R.layout.server_main);
+				serverButtons();
+			}
+		});
+	}
+
+	@Override
+	public boolean dispatchKeyEvent(KeyEvent event)
+	{
+		if (!dtrunning) {
+			return super.dispatchKeyEvent(event);
+		}
+
+		int k = event.getUnicodeChar();
+		if (k == 0) {
+			k = event.getDisplayLabel();
+			if (k >= 'A' && k <= 'Z')
+				k |= 0x20;
+		}
+		String chars = event.getCharacters();
+		if (k == 0 && chars != null) {
+			for (int i = 0; i < chars.length(); i++) {
+				k = chars.codePointAt(i);
+				keyDown(k);
+				keyUp(k);
+			}
+			return true;
+		}
+
+		if (k == 0) switch (event.getKeyCode()) {
+		case KeyEvent.KEYCODE_DEL:
+			k = 0x0008;
+			break;
+		case KeyEvent.KEYCODE_FORWARD_DEL:
+			k = 0x007F;
+			break;
+		case KeyEvent.KEYCODE_ESCAPE:
+			k = 0x001B;
+			break;
+		case KeyEvent.KEYCODE_MOVE_HOME:
+			k = 0xF00D;
+			break;
+		case KeyEvent.KEYCODE_MOVE_END:
+			k = 0xF018;
+			break;
+		case KeyEvent.KEYCODE_PAGE_UP:
+			k = 0xF00F;
+			break;
+		case KeyEvent.KEYCODE_PAGE_DOWN:
+			k = 0xF013;
+			break;
+		case KeyEvent.KEYCODE_INSERT:
+			k = 0xF014;
+			break;
+		case KeyEvent.KEYCODE_SYSRQ:
+			k = 0xF010;
+			break;
+		case KeyEvent.KEYCODE_DPAD_UP:
+			k = 0xF00E;
+			break;
+		case KeyEvent.KEYCODE_DPAD_LEFT:
+			k = 0xF011;
+			break;
+		case KeyEvent.KEYCODE_DPAD_RIGHT:
+			k = 0xF012;
+			break;
+		case KeyEvent.KEYCODE_DPAD_DOWN:
+			k = 0xF800;
+			break;
+		}
+
+		if (k == 0)
+			return true;
+
+		if (event.isCtrlPressed()) {
+			keyDown(0xF017);
+		}
+		if (event.isAltPressed() && k < 128) {
+			keyDown(0xF015);
+		}
+
+		if (event.getAction() == KeyEvent.ACTION_DOWN) {
+			keyDown(k);
+		}
+		else if (event.getAction() == KeyEvent.ACTION_UP) {
+			keyUp(k);
+		}
+
+		if (event.isCtrlPressed()) {
+			keyUp(0xF017);
+		}
+		if (event.isAltPressed() && k < 128) {
+			keyUp(0xF015);
+		}
+
+		return true;
+	}
+
+	@Override
+	public void onBackPressed()
+	{
+	}
+
+	@Override
+	public void onDestroy()
+	{
+		setDTSurface(null);
+		dtrunning = false;
+		exitDT();
+		super.onDestroy();
+	}
+
+	public void setClipBoard(String str) {
+		ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
+		if (cm != null) {
+			ClipData cd = ClipData.newPlainText(null, str);
+			cm.setPrimaryClip(cd);
+		}
+	}
+
+	public String getClipBoard() {
+		ClipboardManager cm = (ClipboardManager)getApplicationContext().getSystemService(Context.CLIPBOARD_SERVICE);
+		if (cm != null) {
+			ClipData cd = cm.getPrimaryClip();
+			if (cd != null)
+				return (String)(cd.getItemAt(0).coerceToText(mainActivity.getApplicationContext()).toString());
+		}
+		return "";
+	}
+
+	public native void dtmain(Object[] args);
+	public native void setPass(String arg);
+	public native void setWidth(int arg);
+	public native void setHeight(int arg);
+	public native void setWidthScale(float arg);
+	public native void setHeightScale(float arg);
+	public native void setDTSurface(Surface surface);
+	public native void setMouse(int[] args);
+	public native void setObject();
+	public native void keyDown(int c);
+	public native void keyUp(int c);
+	public native void exitDT();
+	public native void sendPicture(byte[] array);
+}
diff --git a/gui-android/java/org/echoline/drawterm/MySurfaceView.java b/gui-android/java/org/echoline/drawterm/MySurfaceView.java
new file mode 100644
index 0000000..fe71676
--- /dev/null
+++ b/gui-android/java/org/echoline/drawterm/MySurfaceView.java
@@ -0,0 +1,91 @@
+package org.echoline.drawterm;
+
+import android.util.Log;
+
+import android.content.Context;
+import android.graphics.Bitmap;
+import android.os.SystemClock;
+import android.view.MotionEvent;
+import android.view.SurfaceView;
+import android.view.SurfaceHolder;
+import android.view.View;
+import android.widget.CheckBox;
+import android.widget.EditText;
+
+import java.nio.ByteBuffer;
+import java.nio.IntBuffer;
+import java.security.spec.ECField;
+
+/**
+ * Created by eli on 12/3/17.
+ */
+public class MySurfaceView extends SurfaceView implements SurfaceHolder.Callback {
+	private int screenWidth, screenHeight;
+	private MainActivity mainActivity;
+	private float ws, hs;
+
+	public MySurfaceView(Context context, int w, int h, float ws, float hs) {
+		super(context);
+		screenHeight = h;
+		screenWidth = w;
+		this.ws = ws;
+		this.hs = hs;
+		mainActivity = (MainActivity)context;
+		mainActivity.setWidth(screenWidth);
+		mainActivity.setHeight(screenHeight);
+		mainActivity.setWidthScale(ws);
+		mainActivity.setHeightScale(hs);
+		setWillNotDraw(true);
+
+		getHolder().addCallback(this);
+
+		setOnTouchListener(new View.OnTouchListener() {
+			private int[] mouse = new int[3];
+
+			@Override
+			public boolean onTouch(View v, MotionEvent event) {
+				CheckBox left = (CheckBox)mainActivity.findViewById(R.id.mouseLeft);
+				CheckBox middle = (CheckBox)mainActivity.findViewById(R.id.mouseMiddle);
+				CheckBox right = (CheckBox)mainActivity.findViewById(R.id.mouseRight);
+				CheckBox up = (CheckBox)mainActivity.findViewById(R.id.mouseUp);
+				CheckBox down = (CheckBox)mainActivity.findViewById(R.id.mouseDown);
+				int buttons = (left.isChecked()? 1: 0) |
+								(middle.isChecked()? 2: 0) |
+								(right.isChecked()? 4: 0) |
+								(up.isChecked()? 8: 0) |
+								(down.isChecked()? 16: 0);
+				if (event.getAction() == MotionEvent.ACTION_DOWN) {
+					mouse[0] = Math.round(event.getX());
+					mouse[1] = Math.round(event.getY());
+					mouse[2] = buttons;
+					mainActivity.setMouse(mouse);
+				} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
+					mouse[0] = Math.round(event.getX());
+					mouse[1] = Math.round(event.getY());
+					mouse[2] = buttons;
+					mainActivity.setMouse(mouse);
+				} else if (event.getAction() == MotionEvent.ACTION_UP) {
+					mouse[0] = Math.round(event.getX());
+					mouse[1] = Math.round(event.getY());
+					mouse[2] = 0;
+					mainActivity.setMouse(mouse);
+				}
+				return true;
+			}
+		});
+	}
+
+	@Override
+	public void surfaceCreated(SurfaceHolder holder) {
+		mainActivity.setDTSurface(holder.getSurface());
+	}
+
+	@Override
+	public void surfaceChanged(SurfaceHolder holder, int w, int h, int format) {
+	}
+
+	@Override
+	public void surfaceDestroyed(SurfaceHolder holder) {
+		mainActivity.setDTSurface(null);
+	}
+}
diff --git a/gui-android/obj/.keep b/gui-android/obj/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/gui-android/res/drawable-hdpi/ic_small.png b/gui-android/res/drawable-hdpi/ic_small.png
new file mode 100644
index 0000000000000000000000000000000000000000..67c067bf719be65701ad8a91af18060a7bb4358e
GIT binary patch
literal 5361
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
P00000NkvXXu0mjf7mR>_

literal 0
HcmV?d00001

diff --git a/gui-android/res/drawable-mdpi/ic_small.png b/gui-android/res/drawable-mdpi/ic_small.png
new file mode 100644
index 0000000000000000000000000000000000000000..7c24e6ac8bc34d41eee51805cc6f224c963072c2
GIT binary patch
literal 3173
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
LNkvXXu0mjf)t&&%

literal 0
HcmV?d00001

diff --git a/gui-android/res/drawable-xhdpi/ic_small.png b/gui-android/res/drawable-xhdpi/ic_small.png
new file mode 100644
index 0000000000000000000000000000000000000000..f2b85001eb8f634484150e4f6b12e3e972190aa9
GIT binary patch
literal 5181
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

literal 0
HcmV?d00001

diff --git a/gui-android/res/drawable-xxhdpi/ic_small.png b/gui-android/res/drawable-xxhdpi/ic_small.png
new file mode 100644
index 0000000000000000000000000000000000000000..1a7dc776c15ddacd33574b519fa0e6335f1be1ea
GIT binary patch
literal 8529
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
LNkvXXu0mjf)9P)C

literal 0
HcmV?d00001

diff --git a/gui-android/res/drawable-xxxhdpi/ic_small.png b/gui-android/res/drawable-xxxhdpi/ic_small.png
new file mode 100644
index 0000000000000000000000000000000000000000..dc9205252fd9bbdabb58cb12d303ca65c9d2170d
GIT binary patch
literal 10972
zcmV<2DkIg2P)<h;3K|Lk000e1NJLTq003YB003YJ1ONa4NRhv@000yHdQ@0+Qek%>
zaB^>EX>4U6ba`-PAZ2)IW&i+q+U;9ecH_E|{LfYN5-<<T!FW#ZpqJl~36LUX$(HVY
zpRZiDXo@0%93mnUFpdBF-%0<2f6<#j&c_sT2nzpPcG(mhB(?r!`KgtYpYkv4xA6Pz
zJe_YCoU(Ye>(^NJ^#$ks;{(StbiJRawBIpl-)O&a+|crq4G#KskT`GFdF}R%^4LSp
zDPD(K&3bM7LK({bwoz_<-h_Xr>j@WOrS5T+HD*|CmHbR=1a^HFK98TuW?ZLjkYh)9
zaaQk<z#zBj9j{7V4RkZ|aYWD7KaZY_Z^}MzpKQ6kML2l*hW4+GFDAY`*q$RY&u{4V
zV><hL&YtERYj(v2STyX2Qgm2{KZ6S^Om5|40bdc{9>-C>GQN^3s=+y3HC6G|bk+ve
zpQN4cy6CBgyf)o1L}!MHcr~UOE9a7pCYxs2PmaIzG|^_;ZGtbG8DuR^n{zB$o}1-)
zO(#6LYg}qHZl>{(w_o(zo8NrVoNQaIRXS~jaT$(W41+z#KXDZtqUZLT7Xu$(+x_Yi
zKL}NL(2JQ9CRkKmx2Rq}V#|u3Ew1x;U0I<i_I(4G2+#HyjJEKA3fg)dw2H<=tzpLm
z2NjImSZ69cpuIO8gEY?CU?`eo_}TbO)N-u>Oc_26Y=R>^vMIth*%mm<Igj{>E+K}B
zx88a0gO5Iu&%Oj3T<{@;7#QSAw9!Q$LyR%S980pvC7(iyDW#lBHrWCLeGWP1lyfe{
zP{D%=?p1Jo!I^5Rt*-hSYOJZ|S{lNqx#nAFv89$<>89HbnCPL$o_g+OXc|C@;f5b!
z#F0iGWg^z5oo@OWW}Io}Sx&EQum1S@!fSea&4{P?x_EjGXDP<x7MkJ2v(Ml$<1{=T
z*#ih@!#-0<J7?H)>@$@OlENDd(z9=<YxWpi=!Q0a>eF`*&wb=K^64YLnZG<o?7IJi
z=LoL*>9-eN>&$aaJhrlsZK^D?5ATmu$fUxgRz7>J#Z3inHWg;pBUEGuX71ah0PLCC
z*XkRb&}}s(d(}!!x_X~R#CU5go#$i%?h<kxmOp}7;U2g%9N#o)514CsLa8v04r-*D
zY|XH%RU_ga9(fI*E;BjIZzeT;&egka#+csZ5_9OCO7A(0;@~t@;J|8ZC?>bzRgBYP
zK2x_jQ;2}$6lYhiIy+$-#Hx*R>Qd}PiewBqXnw<KgGbN7$F0lHP--8u1xyCBjt$ZR
zcu?TqtbA{L)2J%OQ3Ju@4d7fVB591^bpkk#IWV_1pK5tN)AD>=#e6#A83Rn13z9XL
zft!0zrs(XWvY{gIhi@^g`D9o$)Tv;NfixJYtHCkm`^eSu=$q*<YcDMg426!dxXW0Y
zMv&Er`J7&2s_JHXm&X`78B>$T|4;#H$Ti%^XK-IMAfEuEhUv=8$qv&dg2i<VW+ps0
z%B*6oxu_gkHZrN)JucQU`bMf3m|Z9EWbGj-BxjNMQ|hZ%`t5=-ZPR|+32~e{LL<XW
zY$wI=-z-Ae^zIUk(tI-Tp9|du*vTf?sk-0e_-7c?i#WF8_jMCxVdelcyUJz`$-u?|
z|3fVixT6~2h@DQQq{i&Ey{_CJQ9P6cs4Cr64$#(Y@dymEy|`{0!V^J?+$;!+qFuFS
zs4={^z#ctd6o5+a@Gu9(&N`0L6p?ivYGj^aitBvn0Z{5WN^>;`3oB6ySaLkxG~ow!
z!Ou{o_p$mWRH5Z7#?=PqY&@U<`B{}Gm)Qmd>|JJwqmH0vM<&nVFr^~t98}5pm<zBh
zkdyCapW~i>5B#5Tk4FF^5gT2_Wo$$=A_Kfu^0sylqg7No%wpaE-!ni`JAfo2WFk#s
zcBnprg<k<T;J%3&W=12E2*+hsTvI?k6MU5O@H58*!^{kT!?k0E77W;gL1lYB<^h2A
zJHomlorkG-XN6c0k0JRHV&#G>V+#1sl<mtXvVhtTqo^T>*jruq<t@i<V1K#DN02qa
zvjF*qlwQ4(uvKjwtUO`>GiHw@E_ZL5c=Kl0&)y_Vq4s1a=hw_8fwhrjzyle2hw|_o
zf}L>=;ZOqekqaBY52OQ&lq=LBliMBXDsmL#f~Pr)Spp>dgu`Q+oX=nr)tw%WAOr%U
z0*oKHx`fXsW*TfqKuo7N05P)U5MvxWTqGn{Y-?cr-jM{8zlSH-K;mX_1ZCX8)@u8-
z34VwD@ZN;V5Dx(d;jwI^hbMKN+Jq`8#3cu6S{)~(SVX{rIc5L>CgXBJ1mam01E~$w
z6vm<fu^4^tcpQd~ng-D#ajMIt#T5d`YTUrInH!jv_Kc;FjE~Hv4=C#+#-a}>>&cH`
z`l*&SfC(`DZs1QcUgH=z3gB}v2y$dvBn?y>L|MjhhF*bndTKy<*fT^p58;c860+7?
zS8D|wX&|m~kQKpKh>X%8jv+Nf-awDd4lD$CVU%#3bx)|bF%P+R!XCg1Z)mgQCRPN;
ztg{Bh3qIN6b|K&gn$m()V9*(XtBvD}V(L-!V1#`~6-rRm2_Z~Bgb+Lgiz^9YtmWPs
zJ3b=TI_MZ8Tp+Fzt1(}A7^zNnPe&?LZ6_FwVKgqA0Xn7z%-Mj6B5E^KUw1wl300Lk
z^}#9B?V1qBK0MnHoGGu^9}v%in{lqt*EIr@fK(Ikb&3TtB0zq@(9a+gkv&aCDoKpZ
zkR+=FO~mMoCm1Zy#4rgZ9D(Lg5c%g<diTcjYee8fT4>D1v$R0nA|aGaHvxP>h@TZg
zE?fk1y$EEK76SZ$Cb;>Xm+2!n*M*m;tjq<K{A~3^B|^1=)DQiEN-?z&1(hm;MPzD_
zcm`C0`nZHet##gI;Hfx4te){<xY?K_p%THAl@SM_0?J~ffMpKRg^WV6m&_r$Jh&N7
zcC=NOh!{{ci>@tVMrI8YCU9g6f1oe2Rj8hYKk8bf@gjN$oqZ9J;UOXsNSo&uxeL!H
zw$wnm`XG8MVG=UUgX<Bhn4)lfXRe2S6$(Na1{P;bK~fSafJRUltX>6C2Kl5)3Mkl8
zXBG$HAoc-WC`_B=P-4gcd`SYKaFfId;z0%lj$j}hev1twia-WHXk{V<d@#F%BS5}<
zWM}j6s?!rC6r!9@)ZSJqThq?$qa*#GTPw&fNu;1QhD=Zl2h1(C^=xqhIEReFof^V@
z00P($YzC`4fw27{RSw4-Qsr>Wp;VS%>QXA=mn=#Jz%b|{%_pkvqt-<%K%P!m?Z)Y#
zqh~SzdURzQeNr91FAfnSTbI(u1=&koy2TJ+j3B~*V}}}AkWl-fh87~|rG|<ig4_dP
zIUmh{hGZl}1R`1WE_yq}fJ{WvS+EI5Zq;Mq?MmvDgKNx9xPDA_J)TxUcwmvQ3eKPN
zldxsX2El$`cRrCgicanx{~HO)16nl)y`o=X-!Z?MHN6xq#%>TgWcdL?<yLLDv{bnP
z1`$9=WVsR$Vu8uUENBieKMhnL%U2Jouw3G$tT7&sgt2%u8_99$)kdRUXXKOtHZoUM
zrtpRF3}MzR(7)k4^W6`ir)Q+^AQdCk3u;6_8m?`iq*bN2$i<>I<|xvAP*wrJdnT@=
za*bm!sNr5c2ECc^F!I5Khmj8=+@ZCIkgOPaw~7SsKXdx?sOgho{~UEn%($>&sD05C
zEuN~i+i)YQth*EyL0C6Q952>|=n<B>gCTv1h7MVzAz&p?n5j?<u^Mdj;HvIQymM6>
zTi!-1F?Hdp3K4NL9etT#M`?GU>MHGE9eU6>YP&__i^W-7-B}#7T>9n}jngY0|Bc2$
z$xPmssZWkNL@UUNHg5u!g4^u345PLCQFhJvdrg}Tcm8ueaTLE03NLg5@*GNG%i~K^
zO}b3n(Q$e;htK9C$}?#Wm!qKrLwX1PmxfNTlz|V6>jukL{(NjcKj;@@DdS4NJ)7NW
z#tc<})49`3-s5&ENvj!9DG_@JlI4{{kep7jcc&~#LU*q~<$v3N<X6Bwy{o?#0a)l!
z@F)u&t{5}&mPd?u1c8nO6oj=wq1@0s@BQyWfH($Ns-f^(LBI`*-O5vE!y;@!?=R5O
zF3{2namNC+S@fIxR}%-t8+Y)QTGOoN+)(<eT8-%OFu8bx2{LUx4pag@Bd@j|-{n<2
z^mw@R6z!#_$b||JGFePb7myHl>m4+S5_G~ap;qC?#C=jE?CO)+c=SoN^hvuko{U5{
zaXaEDc+N<6`dH=Ifn4lb<zQ7>bCy*Ol+Tb(N9{!~i?7dXFDQsLW_mYh1V_W+)eU)d
zW;nCA8!QegcZ*Q?JvxQU4^b*3KN+n!^+Nxwkf65!!G#2WlzZ$t#G}Ex^m8xa=<nK<
z!Njd9j#KVb2N<2>RDpO{nTUY+5U%JCyjnS#{?>=|cb5mm`l#iPN`BYz(ifCUo_;Ci
z-&XG3M@G@r{eh-R2sc{Hp9TWSc(<u7qX1Wisae|WkaiRNAG!M@C?VmXuj(8k;wH~c
zxXJTWUdnUcX~N^<Ef_#6(Itcu%wF>qx&$D1P1vk8cLT!KC6{gh(1R0=Ta|+}7xdCi
zoE#RB`%H*wd;`Ju(uP`n5`dd;dvQaOo0m5jQ~7SRI-ldX-(Ij=_XD`vy<jI$d*1c9
zXO*OpPtoP3GQ@v6LV6zJKOG@G5AmB3?p0e^lAzm~#P>@QXB?1kodaR_yg4ybl%gS?
zi5aA5@O{BVkeZ=LUP9(ePl#m=W}p|7*wlY8N%40ki8m$zx|~cx0$~wQkAq{80g`Dg
zGq6Y2GJ~u!uv_LE-lp3^p|rksUmD`9?9%9%Wy|9_%jhn%q%}<xlgE7kGzaFKEwrO1
z9aqAQ?n=0{JEeoo<KqEcC#IgF=z!EMippMoKQ$3y09icuuM}V{<nHoxi$D0o@h*|U
zl*tWz-sk}4o4k~_I`}Q5%j!_1+wu^{tcxtAIZZJ3GQfHhwGgswti?VKz}*kI_VDOU
z6YsAco|>Dc4%JF0PaU##?`c4Ui)=NErUC{IKxUfaT}@u1ZKA$Ipc+;rWLDn!%u9hN
zEI92v%n~xv&LUWmc2PBEymH+x(I49-kam8MJqTgdf@`t)zOavK?z&i7%a6s<(K2nG
z36Xc>3~4zEXdsgyI^C?o3p22+3oB_L#4FMgL+Y$Wo#;>cmo>=hdtxM{Z>Vy~+!xD(
zYjrSK7H8Y4=Q<>nEM~nfL{^AFL9?}5)CJAf$~*kZK0k8+5rRWmr#-5^;PSQVLp|_R
z^+7E0lHof#r`rjXAe^^c1|RkOTI)wDALaaB>`%R4)(D{?FR~-WqwYNyBg$PZ_jpsw
zT0hh>Ex9~pF(S{SGRY%IWx`t)gp!an7%+;E?G_H+o3-d+u8*y?_LT@}S59$Ro+SKY
ztGHRanDfT^#GW@Zs@>y-Oo_M=_jn`glU{ZQLG&?GB|XXdt&efrLm{sU5SJBR8sT*T
z=a4kHLv1&ln+{J!;iq*A!Fpw!aw#iWmV-X$b_OhgB2G3N4C5YEzL{fj{x0%mwTjAF
z<^Np9kiqZegVmUkEL!lueVLU-f({hjC>MR~FZvj1bWfmnuPob$E9zrGXyUP}FV#@h
z2twlx=}Q?aS(8><D&I7KBq;rJZhgH;XF|;|KSH8pZem6qy#NZ1SgJroP63o^G~~Q9
z?tnKGD>bVLS%VsegElZlvV*Kd22*R2KtQC6AV%&;-}Uvr8~SbI&2`_6kjH}pe>B<X
z>m`S2T-<^R`i3{PiJ&6Z8g6fDI}}yU&g8HaRe`Q{OKJ>|02po8H|KJl)HlQh&ao<c
z)HiFnZr3*=(2s=+Nc#fYN^uGH0WlnvC84y$Z;)D#(h?EBauxD5wstEl6|1r&6n0Lo
zag{*ZLaR~DX>r*;Qq1%A5dqN?U$2X1^!uvW`$e-FR?pT-5T{C24!q$-Zr7QadAkGm
zw0V}tA|{Hw%Es;px6Vt-S(?}=q!ffGjx8bEQ4k^Dxs(06IrQgJFz*kev*7v{^%lF6
z;Lip7e^ftv+vD4Uf`as<xcZQtG3!!kxvcGx+;W+s<xqR9ogG|z#CnwqKtT#Ou~3a&
zqIGpsw1`&erYPQ6{|4E3KM}3%Uki`CI`Ak99=+ZFb??N<{x5n9pwiua(?@*KMWo$E
z{Lw|^43*x}hdW*9#a5Tt^0C+DSlie4g}mr*3waqdP0uTNsF?<kAgPrBmA3<bvY<_W
zcEYc;lcwa4to$DtwDX64O`u2qtU*EE9pTT*Dj@@$w}=KE75-}oDEJls5c?4cwssvW
z2BI?II_^6Bwx*EjE7!d8jFTdn+diwF=XGqv*Z`%hN`@`5_Stk;b8VqI*y`Y_#Z=5w
zlN|St<j*Cp0`p~y=+_Pry=)OFWxu6ey78{iE`#`AJ*^-6Dp9X}x4ydxS5Wf?IrI(Y
z{02F6#T;g=f7;@pM~{R1GiDk2C|Di~?}#&3ZY%GpYi4%0*H`I6?Y)1v+2mDf(pKOM
z;X5X|zCNQ;>T3j5%zx}hroVI%B3qg{2v6J^wf@n`!K01MvI~SawL<wbh5|HsBZ!eT
zLJXneKX)Gc!Ml@pe}xC{g5ewQNP+}en_nr<wSjT(ehs|=kU{e1{9}dBnkDq3Tf)r}
zF7p1|+<D*INk2DtuKx2EI|mZ4anirvzslRJZ6xWfEq|Pg1K?E-@>cfZK(tpo>cHFU
zAmK*TT$HT8x1eAC;NtJUw>UQ4JJcf5BRY58A3dUatc<5~uR`eVvQ=RTz-u4UeOLkg
z_4?l%{rQSG0#(!h18yY%wW)jP3;+NC0%A)?L;(MXkIcUS000SaNLh0L01FcU01FcV
z0GgZ_00007bV*G`2jmI~7X=l6dI3ZL02X9PL_t(|+U?wVkY(pt9`N6HmV0}j>Dgzb
z8SS<<YnP=6Vq}aJfx}`d2B!oeHVIWJ;-ZowU_wZlu%=u|VM0|Fl2lR!MZiwk21l&1
zi4lop6T2jN(`d9yqZxJgOwaV~yPf6BANT94k&$J|8jW#Pdj6R1d+#}Y-t#Wc^FHr;
zn*aax_5BKG|CBM9muodLL2DH1*Uo_AH8^L-kGa7E9=6K?kN9Jce}i}+W)|#ok&A73
z+Pbb~%laPoK#1Q69w=Pm4u|}@hr?zHr;FX;7SDR_wJ{(&t7q$ayComBE>1oCxc}oB
zcf?D+5e%U6geRObj(OZ04_FF~$2{m3yZ#D<Pz*Xca<$DDjp@eYR-M+@Sa69sYw<CC
zk9gL$*fl=;nefUyFz-6=^F{wy=PQ(iLR6`BEZgT6-{Ve)toxvg{IrFyV+h3%uW_sM
zthn1wZ;hA7?Jr`$4$Ha%Iu5wjRnE81yr&KP4ei%6gm$}4@Q{xw9dNq~eJVa`{RJQu
zoF}u*s#c>bH_~-L&lf!GgJx}hoeYRqy45Eg)7Ro*54gg2xWO;D?*;zcXTdIyX;dCD
z?^3s#H}I4PJ?oZuI6QpL4TxPgIOrKqhtuh$v0khMZ}QgI_oYy!*ISS1DuqzTfndg>
z^9`+f&KIn@-U$z%`y80{eiwK^k66aVxEN<+8IJjLA8@g|bk8WF_c&};fq_=XqMp63
z@&?PI%6u%&y#ditJ(E~p_73lMhpXap==ozGvSK_<fuTQf#1-aHJK~E@IAz&E^JdiU
zw$0n(?723eb;M9foOj4KxyzeeYfsEW-{&3i)_7h*389g>T88M96He(lDYMrFb~`G%
z>Fm;%mt#QfUdPRd=Ik@$CO5jl#dgPz=N$1*+!`|yNX<E@j6pQC;e^&{n=W#-i_}g!
zb#{yC%efmve`t?cnc8Wq9<=NlJ*Ce$<|+TxrS6D-8irutxIIql8CiGC8_ZgBwN+1;
z^Q4o8=hy=whLOT~ay=_n9n-hh_1@?@JHlz7u<q6=eLL(wh-O4%r>zQho44$s^X=5P
z?k(}+bC1L`=9Qtc>RCti44mgCZ*^%b!{Z(_vMXi~o^r3ke26Lor>rRLv1yM(_KRx&
z)RpJnfTw-NOf2*~<)}hmYmZCZ=$csitl#%ue{FisH`q&PRW==V*j^pG?6Y5C-A5cd
z_XhNwFk{xpgYNMut6Fm|bh9hXg@GqM=Dc`b%n@DYK%7A%muYRNbj(>Wr}as*@v2y!
zQv*WO*lr=T;i%8~lt--#mR;{syJDf|k7aICV$MFVb8*~hkA3!8&{Ju2EZJ?*Q}+4W
zXTaY%B6GPzTF=H{&1Wsy=_04K4!G9HQO8~3kUDm}-kf*4(!i``OBT%tqJ6Hjp>*6H
zdo}0UfWlRp_^8Uja~`zAtupftxxt!_E8T3rJ9J!QughGPj(bES*N7IqUS*Htu6Kzy
z$9uzxbErzhc|YK!`y35b%<OQRcR65(P0#ofYktb*(+?jtlpzx|slY}QcAF51b=$qo
z$7RN^PBnV@1_T{9y2MAq264t!-r^1RE6wR^TxPd{OeyFaY88Sgs<k?()N+N^SYzIU
zzUWbRheyvz2!&`AAH|*+!vtlYvfHv<b~+!cR+Xw$7+Q2hHFCLJ5M&x-L8CErr#s!F
zjSs3F4r}M2sSn5Ez-_k2FNMuG(AS!GsY1_K&_P$FMwH7$M43!0Q<^bU$uSl^tZ=h$
z#=ZV|{9j>wE@YMHJN$@SV-Rh3wcAztDw&RsOe51ZYgRXz(M>@!*2>J8)yT|Qw5V&%
zhOzzL?>(_|E|j^U-*AJgJnf)cT#2C73ezBo!Zi9@jY>>ji0Ko#Rwh?#v{pp3u2nh`
zA8^d@l}RsOgEks3^d^Oy`~$3~3z<ZGi$>IuX|>1{$|S;!jEvQ2v`S-RL9J0}EIH4Q
z`yY<Hva0koiMw&T_xUjl)moKIDHpY(h)koETl%sCH>`^CX#+aeD&)o*LDx3_#`|Ac
zE_@B$QQYkoH)CCapd)G!WQrF^ULW*nN3H8))*(OTqV&!K$zziMjDp&x*LjNv<9*@y
zYpYJb(eGi!ETW)mY^1de?)J1?&>FhW{f;^rT4LrxJ6vtk*m-W%+SCZiS3wZ{xm`Z$
ztzJ6=Vs4k+Nr}$YGMQSYYm`3nYd)bA5H%`IXd$%mNxv!+jlIoxgZov2OeK>kjh*&+
zMeMx%FnXmP==key$5==ynyC#foA<LmjxUAbi#Ls-)=RhHUUwS0)h`=*+%VxqrBXZQ
zM*VnS7`-+Il-}X{tSV)R?FTGd@t}`|zj&FI<EW#=b+32OPC3)E8?}Dk2YlA(wE;3V
zF>59j%F56Pzwd`$?&VLv9`I8>=utbAGNo;nEZC0fwM^m`g*<`Qz)t)N|2;hYig{#o
zJpO^kw`nzMm0DkAC1J>GL?vQ!c#vVIqdwvz;eoG_3_s}}AMluYl}(#Aowg!VzE&Qn
z#Dt`yM3Vo=Pli`9zzYw>56E5QgiVditT~JJ#EsCLbpzsdZ?qq!!u<3Mm&9GVi8vPm
z!ju<9g)IFX682|_0Yp*Ix8PcboHBz<)OD$E_hejG`%+jrYg8hZ-t1r5VY`u@S}S_a
zNn@v+))N#eOLi%cTQb%<<PBf-)E_b93fs*KiJbHt0N?K8FO3N=+XJ!VUEbj`1DjSn
zVMCRg6?QtH*7c;1yV&>oqLcb+OZHgS$~@;ueHS^X=Wa)BXdQ5ckyAeHV=nU^J9R{h
z&i5(5?Lt3+pL2Qq^|1NsCp1g0aHqFmppjcpXizG}RQwhdo^rkehUWEUw%M<1Q>(D%
zq-_rB*`~IrwM%ZOwcUkwS+m2uMhEi_q_ONx9+;B9SLJ~V{4Kj|7;3TIF7sy6duv*m
zOmL%bF>=DP^K@-a^F*p#xynBKFjP2hO=ZaeH(S?Qa8T6PaHX3(>^@gmvL>Dl0~Wm7
zn&Wbr8QaXDuTtum)d~tkBV8vPw&WV)7Z`Av3+zed@g7HIS{<(wZMwiAt$nEh9ovb|
zd(<sVZ_}%ok(Dm<O?KFkIQ`IyBeuCgU#rqdqDhz{?7w%3>n;0_K5k9lE+2N0k2q@1
zk}K@7sb{RQsUtUU-?U?R*5y9r-&u08@A5{wUb@h{91nDTr|<Dcj_T>S$qgQIQdF6H
z(a-liY94>+qwWdo#Eze_!xL^&TJgIYvo5o!l9@4QpHFy9<^s1`!*TaJVA&VVx&Ea?
z=w+1AIOm-X`J7K$v)g<9n00+CI<EK%hy04SIp!|U5L#j|XU6${!f7A#8GYw@uOB?)
zh#&F?GT-Vq{i#gm34i8<?>Fy5ek=4}od?GL)Oi+M=zyK}VAggA{GRt(S0?pghef5a
z6Hcl8p7rq58MkSuRQa$|9(Fvmkzezh3GOnP&sh<yIjvFK>n=+^>9-tr%&WzLP<u44
zyVA98@x!TYuaq9~htIS2xXqGMWi<>Ytxuen$r9}=&EZ~~M!IoE*Ae|Nj6o)dvZPi&
zEb18hoEe*bH&kbfO04^o`#j}`RWe<{XFUFb3f-Hm5ll3Nc)siHwat<P9`~TbR@0P!
zvIcU2EBw#+7lKwy?6yq`Ug4lU{+YW&b=J60XpM<Ilo|p5*6*L$bZk+txMaU&7rNYD
zvr7A1=zM!T=D1S^(~;FBYCA+<@|ck#o%cGQGo#~_<Kbm>1+R>ao;j3w*3lQ0pmw;?
zcbfH>H5-Pw#5cR#7aaDORhwE}th&?B<1T%Db?P&?8lUz%PQG@k#Mq4Bzj%NAl{1M}
zoTzV=breo|$ht~y)w7m#UFdvs7B#vSEo%LlW$$#0<L>d0I4#Rx@EhUSYiB@E*|f{Q
z^l1Fw;piF74u#4Se$|z(Q(AXgPqZqx<N|N92#&blSX79<6Mx`-@r*uf<kV}^(8Scm
z<#NaD^FiP4=<_XNY~{wDb3}BVD{NR3oz&C!w3D7xs8vZzoil6bx1IEe6EcfaB`;G>
zv*oNBP$e@4LgG1t7p8ig)Tr0n<`YinS@Lc_?t?z;uoZo+4BzZM9+PW4?S2n=PHmre
zdOJ?o@k+XsS71Qg;r!`QTfOwR#LY9+h|tE$KyAfy$aSpvtTm5$?D>gUJmER_YUGZ2
z+%aRN+#9{la{@0-puYwK;ymWu=;owLOw{MTzMpk_{GsPDHwKNNRi%!7mM!|6XKWfP
z;#?Br$6610z*u2LPpxCgvOZd~Cc8#w&wyBZms>UVI)ol7xhS`YH~Y2t3*l4KJecgM
zL>;+aQlqzdv&wOsMoxQD?rE#~avNqW8M)R^yTlL+PI%JUlNRG{Z}NlQIF+@+G(t0l
z4U4|Z2fj=>8j6BvM75~U)9R><ja3$$a(^02Wk$Mg^*7y!Rk`Q%T<ngxF}=1RcOrcH
zYht6Z^j$uLkzB1%q-H)#=1;zRySpcd5JNg=k>WU$D-|kvl6*5=wSm#J4Laage5;-y
z7&xix;9t6s|K`W7DUDU3ec1-Y1wZ2NyBw_`YP2$~Mj?uFxeTZMl7Ia?sKsyw&&;*R
zlNi?3QOmVX%jEiQ^FFs@pr;WvO7nkdMfNG5lzZC8+#l9oehB5h$>mP#DyB28kOtTp
z8dQ3A`b9^+4AkNoa_v^nOrg;i<QlmUsyOR*tcXeFm?UvOd2S;5Rt~xgH1@}1GNtu!
z-&Z#vTE|Sfgeb_x<h3l#d!w!uyI%-u>F7pC(s?aYpj8{C^Rzl~r)^VgnatC=YHd1q
zC*7)2AB{ynIX(OD#vk>p?5k;`WzyLuL!?O%O{VWnngs`Wa`@nROrHL0r^CLG!f!0d
z<zm>xd;BM?84F6KOq8W1ohJEtGVN?N&J3Q5yx-ehRD2aB`auu74C6Ef3rP@ero+?5
zFwMnoe<7%yK|f;hUo=ktS7O}jT6dYZBIuf|j(5_ups&?fNgnB#NviD0<dJ9X@J>T}
zU)q4is>5mTq)ka1Q#8lvcdb@q)BD^W|IQhW<nzcd5#=ZIuvS;A3T?dD4-1${sXh=C
ziX<LS!fLEm8>JA;G-(F9VCb;7`McRy@xV3ShH6?#+B1aPTBAwqej={i?mx#HU!+v$
z$>ch5p^*05zt1Hq9l2JeQ5hK-sC0C6ZIc^l^sI<FqOnS&k(;+{=+T$(K-}pz*Qa?{
zcE-HDP1DIN`DH6oPg?eE-VufW`(;7YZb>7d)vAfzc%yGk@0KaFGSO&iVobA$*4W6%
zamy}IqznndB-p}Bh`D$AD5_}^H%f(idS3$?O@ghlM$}sJC*EaMX{36-XNw{AbTgvH
ze!uQpQh}C^&1@K((-n*~Dg%wmhT71I-ENykz*Yc%rB&?M@sCo;ngmX*mZw;jisM$P
z+^R8KSo;RQr1XRj`@D@W%ZJzdduC<kT!VS7#=t4Fc4O6P9Sc)Bm!lEP=onfwZ)~JV
z?^NPfz=62i?S4rxP8U5Xm`&P+$fl!;NqlcX8m-((d;LHvs|VxS^iw%;;Aa1D`fFCr
zrDe3PO>0I9OXhS$-PExKwL+E%$PwFhlaetpEe|hx_rKfk;DmXFX7WKHjia}!^A<jk
zsgqJ6=|GiDi(g^RRjZ8DqOn$2)GDnxWnhP^)pD7UfswJXu@P#gwPqc%OOuFAE!Qbt
zG<bd)Y!lRpPxjTi%2ZEi6OiT8sxmRFPN_bpc~Ju@C*>+blg6i;JlwIztlWy$yafY|
z*3dwuKxW2Bt1x3IPvw~Q3<F{?YrpIK0!~;=cRvaV#3s8xZ6aw+su3~Kw#iSGpp+{x
zN_3+&($~lof>x#0%FSw~J1(WdSYzO{Wv@#+MTM>+k@8Nu?`_J=a`L=X@dE00k+=If
ztXm*yH93h$S1Pn;G?b<%47T7ZCeR9r`?SflNf_p7#*<ARRY}1#S*04NjhvQEo>mak
ze%EFS;ts}oI!Vi`#TR%$?)&{rDt2wUV@0~>Tb=M$jUFeWmWhUjT3sDQdUm5yX?4_E
zGsx}GsM8d(P1v1j4N^Lmy5^kF*HL-MA=~v;Mya=}jdcVAg<T5Kcv2yY6g;<>x8QqI
z>yl5GChI9#$Ws1?M9;R|*(P=rv>LfWM@YVCRK`h$35h7=Dlw6QTCEaw&6rUbrNC?q
zjZz?PajA|P^X3y<Dkk*4h)YIx`#Im1B-({EzwM-G%~PCiRpod_Bh*ek6H}2Lr@`N3
z;k8au%%rg?(t_0N6veAF=36qaKw-uSwN|atQKp+UF*0b)Tau-l(jpXo5sR)(VKkRw
zKcoaLWis<dYGYB8;A)TxXOOF8Ducu+$7zeGOuM@aHjQ<~#HeaxBhhTalv!P+)=1Y5
z(Mbcrev646wbPi-jGa*1D@&UKg|hIY>C#V|Pla%jc#|C1O3^}Vl&Ek_+D%BWZLyPD
zYbog!lfv2+Y#OUlfIXi9TWl)VHJ@(HnpV$-kuo(tTO_<z$sF?MKI)+NDAVQV6rRzw
zpkq#*3g@J{jFq}#8fQpoo2k?(ATnc(S}CL$t&CHsv{UX>X{XF}!bgjg6OCG?H8c`L
zy`)<NrOJk&kc)|bMhrZi&?QSGunzI0QmIOXsZFqwB^j`rPO#Mvx5hFZ%;*>!sg>!N
zO?{17%euxX8w!n~u~u!UZ!-a6Y0kP{%Ab)Sq#Khfb<J3`L#{PUB28w&QD3ypwW6+$
z)>u`TN$``))Pf?ljfHAjgC>=yqfCaB3Cbo3D?!lYURQc3lqyk3M$~!+>6O-4t+k<-
zusxsl&M|cwg))V2mdNwSQJL@XtjFy)XFOTBodDFNeU^qiTMeUBRVKU7b-MJ~l)7!&
zH_VI$L1ml-lcC(AZqkfug^t1?9X|=iNqwplS({a+gbgW(OTmV2%BV?3jMcuRr?#$5
zCAkQ3>q1+MgtQ(r){`sK>s!BUaw(-;qf{mVaI7>Vde){+ityR=w<T(Aq6w9Oo<V}Z
z41EKYO0eB5NhoM7*{w;7oTWB}VPBH~v@)<@p9M3r!ZAbR)WVf%LB6Au%N6QmPNOxW
zv8gbZs9Kg#deW5Ca$U1Y@~REYo*|w^9UYz2<!&15nAg!bX3aBZEZb$f;51sLAWj3U
zP4uxcu&yVlbj&Ek!lu5Fu9?JFCV1L0CnnMq5*U?<gVw3h3#nptMWX~f^V6-a)>xj%
zN1fL1i!{PGY^Y2dzbnR08!7G7is>=xMf0MNmP_&km6efWPTFa9i_8?dx@yA&4S6C>
zwbDSPlqW!odOEi0qe@R`Oz!ujUM*@24Ag>UrP?SpLPML${Gb$!&0^k+p<{Mf7E@q8
zqUUNCrgi3AFtlNZStE7A{1aB}w9Rgru}+bi=Sk?q=`3>c_ffiM$R{y9@ZS~ng!EiM
zl{$phD3OUR^*T>zvXN3ZsPttzi7ypO(X2%aX?b>2Y0kWPl`%H0DJ&_h+L$KtF7po9
zYst_+S!fb8#iX2V5#ZdC8U4igqhMBFWru;0IZL`uXcB9x4N~>U65)`F--a36jOE4#
zsHd~YR$=G#LAgd_S!PL-h{~o_OD@&u+0ab}yxx`Og!I@&`~Lvzm=?GnJL(<)0000<
KMNUMnLSTY*4_h4o

literal 0
HcmV?d00001

diff --git a/gui-android/res/layout/activity_main.xml b/gui-android/res/layout/activity_main.xml
new file mode 100644
index 0000000..14c98eb
--- /dev/null
+++ b/gui-android/res/layout/activity_main.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.widget.FrameLayout
+	xmlns:android="http://schemas.android.com/apk/res/android"
+	xmlns:app="http://schemas.android.com/apk/res-auto"
+	xmlns:tools="http://schemas.android.com/tools"
+	android:layout_width="match_parent"
+	android:layout_height="match_parent"
+	tools:context="org.echoline.drawterm.MainActivity">
+
+	<include layout="@layout/content_main" />
+
+	<LinearLayout
+		android:layout_width="wrap_content"
+		android:layout_height="wrap_content"
+		android:layout_gravity="bottom|end">
+
+		<Button
+			android:id="@+id/fab"
+			android:text="add server"
+			android:layout_width="wrap_content"
+			android:layout_height="wrap_content"/>
+	</LinearLayout>
+
+</android.widget.FrameLayout>
diff --git a/gui-android/res/layout/content_main.xml b/gui-android/res/layout/content_main.xml
new file mode 100644
index 0000000..8a7f802
--- /dev/null
+++ b/gui-android/res/layout/content_main.xml
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.widget.FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="org.echoline.drawterm.MainActivity"
+    tools:showIn="@layout/activity_main">
+    <ListView
+        android:id="@+id/servers"
+        android:layout_width="match_parent"
+        android:layout_height="match_parent"
+        android:orientation="vertical">
+    </ListView>
+</android.widget.FrameLayout>
diff --git a/gui-android/res/layout/drawterm_main.xml b/gui-android/res/layout/drawterm_main.xml
new file mode 100644
index 0000000..cb5c9f3
--- /dev/null
+++ b/gui-android/res/layout/drawterm_main.xml
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/dlayout"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    android:orientation="vertical"
+    tools:context="org.echoline.drawterm.MainActivity">
+
+    <LinearLayout
+        android:layout_width="match_parent"
+        android:layout_height="wrap_content"
+        android:layout_gravity="bottom"
+        android:gravity="center_horizontal"
+        android:orientation="horizontal"
+        android:id="@+id/dtButtons">
+
+        <CheckBox
+            android:id="@+id/mouseLeft"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent" />
+        <CheckBox
+            android:id="@+id/mouseMiddle"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent" />
+        <CheckBox
+            android:id="@+id/mouseRight"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent" />
+        <CheckBox
+            android:id="@+id/mouseUp"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent" />
+        <CheckBox
+            android:id="@+id/mouseDown"
+            android:layout_width="wrap_content"
+            android:layout_height="match_parent" />
+        <Button
+            android:id="@+id/keyboardToggle"
+            android:text="kb"
+            android:layout_width="wrap_content"
+            android:layout_height="wrap_content" />
+    </LinearLayout>
+</LinearLayout>
diff --git a/gui-android/res/layout/item_main.xml b/gui-android/res/layout/item_main.xml
new file mode 100644
index 0000000..9049612
--- /dev/null
+++ b/gui-android/res/layout/item_main.xml
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="utf-8"?>
+<TextView xmlns:android="http://schemas.android.com/apk/res/android"
+    android:layout_width="match_parent" android:layout_height="match_parent"
+    android:padding="10dp"
+    android:textSize="16sp"
+    android:onClick="serverView">
+</TextView>
+
diff --git a/gui-android/res/layout/server_main.xml b/gui-android/res/layout/server_main.xml
new file mode 100644
index 0000000..3d592c2
--- /dev/null
+++ b/gui-android/res/layout/server_main.xml
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="utf-8"?>
+<android.widget.FrameLayout
+    xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:app="http://schemas.android.com/apk/res-auto"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="org.echoline.drawterm.MainActivity">
+
+    <LinearLayout
+        android:layout_height="match_parent"
+        android:layout_width="match_parent"
+        android:orientation="vertical">
+
+        <EditText
+            android:id="@+id/cpuServer"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:ems="10"
+            android:hint="CPU" />
+        <EditText
+            android:id="@+id/authServer"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:ems="10"
+            android:hint="Auth" />
+        <EditText
+            android:id="@+id/userName"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:ems="10"
+            android:hint="Username" />
+
+        <EditText
+            android:id="@+id/passWord"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:ems="10"
+            android:password="true"
+            android:hint="Password"/>
+
+        <Button
+            android:id="@+id/save"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="Save" />
+
+        <Button
+            android:id="@+id/connect"
+            android:layout_width="match_parent"
+            android:layout_height="wrap_content"
+            android:text="Connect" />
+
+    </LinearLayout>
+
+</android.widget.FrameLayout>
diff --git a/gui-android/res/mipmap-hdpi/ic_launcher.png b/gui-android/res/mipmap-hdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..5099b530fa24f18ecb088d985011b9256cec23c3
GIT binary patch
literal 14867
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%0A-!|tp?(%~dGeU(OzG<!BcfhS4
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
FV1lP!Um5@a

literal 0
HcmV?d00001

diff --git a/gui-android/res/mipmap-mdpi/ic_launcher.png b/gui-android/res/mipmap-mdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..8a70757f25145079718cbe7e8b53dda8994a752d
GIT binary patch
literal 11578
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

literal 0
HcmV?d00001

diff --git a/gui-android/res/mipmap-xhdpi/ic_launcher.png b/gui-android/res/mipmap-xhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..66e95343855f47c004d3504193f99a450d3b5ad6
GIT binary patch
literal 15155
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

literal 0
HcmV?d00001

diff --git a/gui-android/res/mipmap-xxhdpi/ic_launcher.png b/gui-android/res/mipmap-xxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..52aaeb67a697a95bd6f7f3d268705a3ff50fe2e9
GIT binary patch
literal 20643
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
O0000<MNUMnLSTZOT>QcS

literal 0
HcmV?d00001

diff --git a/gui-android/res/mipmap-xxxhdpi/ic_launcher.png b/gui-android/res/mipmap-xxxhdpi/ic_launcher.png
new file mode 100644
index 0000000000000000000000000000000000000000..ee3c0243beb4ceab4fd710fbf8179d5f92588877
GIT binary patch
literal 25294
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%0A3FH@QV2
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

literal 0
HcmV?d00001

diff --git a/gui-android/res/values/colors.xml b/gui-android/res/values/colors.xml
new file mode 100644
index 0000000..b8fda67
--- /dev/null
+++ b/gui-android/res/values/colors.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+    <color name="colorPrimary">#3F51B5</color>
+    <color name="colorPrimaryDark">#303F9F</color>
+    <color name="colorAccent">#3FB551</color>
+</resources>
diff --git a/gui-android/res/values/strings.xml b/gui-android/res/values/strings.xml
new file mode 100644
index 0000000..d975d5f
--- /dev/null
+++ b/gui-android/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+    <string name="app_name">Drawterm</string>
+</resources>
diff --git a/gui-android/res/values/styles.xml b/gui-android/res/values/styles.xml
new file mode 100644
index 0000000..ccb41fa
--- /dev/null
+++ b/gui-android/res/values/styles.xml
@@ -0,0 +1,8 @@
+<resources>
+
+    <!-- Base application theme. -->
+    <style name="AppTheme" parent="android:Theme.NoTitleBar">
+        <!-- Customize your theme here. -->
+    </style>
+
+</resources>
diff --git a/gui-fbdev/Makefile b/gui-fbdev/Makefile
new file mode 100644
index 0000000..cce6ef0
--- /dev/null
+++ b/gui-fbdev/Makefile
@@ -0,0 +1,12 @@
+ROOT=..
+include ../Make.config
+LIB=libgui.a
+
+OFILES=\
+	fbdev.$O\
+
+default: $(LIB)
+$(LIB): $(OFILES)
+	$(AR) r $(LIB) $(OFILES)
+	$(RANLIB) $(LIB)
+
diff --git a/gui-fbdev/fbdev.c b/gui-fbdev/fbdev.c
new file mode 100644
index 0000000..fa1ca2a
--- /dev/null
+++ b/gui-fbdev/fbdev.c
@@ -0,0 +1,673 @@
+#include "u.h"
+#include "lib.h"
+#include "dat.h"
+#include "fns.h"
+#include "error.h"
+
+#include <draw.h>
+#include <memdraw.h>
+#include <keyboard.h>
+#include <cursor.h>
+#include "screen.h"
+
+#undef long
+#undef ulong
+
+#include <linux/fb.h>
+#include <linux/input.h>
+
+uchar*		fbp;
+Memimage*	screenimage;
+Memimage*	backbuf;
+Rectangle	screenr;
+char*		snarfbuf;
+struct fb_fix_screeninfo finfo;
+struct fb_var_screeninfo vinfo;
+int		*eventfds = NULL;
+int		neventfds;
+Point		mousexy;
+char		shift_state;
+int		ttyfd;
+char*		tty;
+char		hidden;
+int		devicesfd;
+ulong		chan;
+int		depth;
+
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+#include <limits.h>
+
+#include <fcntl.h>
+#include <termios.h>
+#include <poll.h>
+#include <sys/ioctl.h>
+#include <linux/keyboard.h>
+#include <signal.h>
+
+#include <termios.h>
+
+#define ulong p9_ulong
+
+int code2key[] = {
+	Kesc, '1', '2', '3', '4', '5', '6', '7', '8', '9', '0', '-', '=', '\x08',
+	'\x09', 'q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p', '[', ']', '\n',
+	Kctl, 'a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l', ';', '\'', '`', Kshift,
+	'\\', 'z', 'x', 'c', 'v', 'b', 'n', 'm', ',', '.', '/', Kshift, '*', Kalt,
+	' ', Kcaps, KF|1, KF|2, KF|3, KF|4, KF|5, KF|6, KF|7, KF|8, KF|9, KF|10,
+	Knum, Kscroll,
+	'7', '8', '9', '-', '4', '5', '6', '+', '1', '2', '3', '0', '.',
+};
+
+int code2key_shift[] = {
+	Kesc, '!', '@', '#', '$', '%', '^', '&', '*', '(', ')', '_', '+', '\x08',
+	'\x09', 'Q', 'W', 'E', 'R', 'T', 'Y', 'U', 'I', 'O', 'P', '{', '}', '\n',
+	Kctl, 'A', 'S', 'D', 'F', 'G', 'H', 'J', 'K', 'L', ':', '\"', '~', Kshift,
+	'|', 'Z', 'X', 'C', 'V', 'B', 'N', 'M', '<', '>', '?', Kshift, '*', Kalt,
+	' ', Kcaps, KF|1, KF|2, KF|3, KF|4, KF|5, KF|6, KF|7, KF|8, KF|9, KF|10,
+	Knum, Kscroll,
+	'7', '8', '9', '-', '4', '5', '6', '+', '1', '2', '3', '0', '.',
+};
+
+Memimage *gscreen;
+char *snarfbuf = nil;
+
+int onevent(struct input_event*);
+void termctl(uint32_t o, int or);
+void ctrlc(int sig);
+
+void
+_fbput(Memimage *m, Rectangle r) {
+	int y;
+
+	for (y = r.min.y; y < r.max.y; y++){
+		long loc = y * finfo.line_length + r.min.x * depth;
+		void *ptr = m->data->bdata + y * m->width * 4 + r.min.x * depth;
+
+		memcpy(fbp + loc, ptr, Dx(r) * depth);
+	}
+}
+
+Memimage*
+fbattach(int fbdevidx)
+{
+	Rectangle r;
+	char devname[64];
+	size_t size;
+	int fd;
+
+	/*
+	 * Connect to /dev/fb0
+	 */
+	snprintf(devname, sizeof(devname) - 1, "/dev/fb%d", fbdevidx);
+	if ((fd = open(devname, O_RDWR)) < 0)
+		goto err;
+
+	if (ioctl(fd, FBIOGET_VSCREENINFO, &(vinfo)) < 0)
+		goto err;
+
+	switch (vinfo.bits_per_pixel) {
+	case 32:
+		chan = XRGB32;
+		depth = 4;
+		break;
+	case 16:
+		chan = RGB16;
+		depth = 2;
+		break;
+	default:
+		goto err;
+	}
+
+	if (ioctl(fd, FBIOGET_FSCREENINFO, &(finfo)) < 0)
+		goto err;
+
+	size = vinfo.yres_virtual * finfo.line_length;
+	if ((fbp = mmap(0, size, PROT_READ | PROT_WRITE, MAP_SHARED, fd, (off_t)0)) < 0)
+		goto err;
+	/*
+	 * Figure out underlying screen format.
+	 */
+	r = Rect(0, 0, vinfo.xres_virtual, vinfo.yres_virtual);
+
+	screenr = r;
+
+	screenimage = allocmemimage(r, chan);
+	backbuf = allocmemimage(r, chan);
+	return backbuf;
+
+err:
+	return nil;
+}
+
+int
+eventattach()
+{
+	char eventfile[PATH_MAX] = "";
+	char line[PATH_MAX];
+	FILE *devices;
+	char *ptr;
+
+	neventfds = 0;
+	devices = fopen("/proc/bus/input/devices", "r");
+	if (devices == NULL)
+		return -1;
+	while (fgets(line, sizeof(line)-1, devices) != NULL)
+		if (line[0] == 'H') {
+			ptr = strstr(line, "event");
+			if (ptr == NULL)
+				continue;
+			ptr[strcspn(ptr, " \r\n")] = '\0';
+			snprintf(eventfile, sizeof(eventfile)-1, "/dev/input/%s", ptr);
+			neventfds++;
+			eventfds = realloc(eventfds, neventfds * sizeof(int));
+			eventfds[neventfds-1] = open(eventfile, O_RDONLY);
+			if (eventfds[neventfds-1] < 0)
+				neventfds--;
+		}
+	fclose(devices);
+
+	if (neventfds == 0)
+		return -1;
+	return 1;
+}
+
+void
+flushmemscreen(Rectangle r)
+{
+	int x, y, i;
+	Point p;
+	long fbloc;
+	int x2, y2;
+
+	if (rectclip(&r, screenimage->r) == 0)
+		return;
+	if (Dx(r) == 0 || Dy(r) == 0)
+		return;
+
+	assert(!canqlock(&drawlock));
+
+	memimagedraw(screenimage, r, backbuf, r.min, nil, r.min, S);
+
+	if (hidden != 0)
+		return;
+
+	p = mousexy;
+
+	// draw cursor
+	for (x = 0; x < 16; x++) {
+		x2 = x + cursor.offset.x;
+
+		if ((p.x + x2) < 0)
+			continue;
+
+		if ((p.x + x2) >= screenimage->r.max.x)
+			break;
+
+		for (y = 0; y < 16; y++) {
+			y2 = y + cursor.offset.y;
+
+			if ((p.y + y2) < 0)
+				continue;
+
+			if ((p.y + y2) >= screenimage->r.max.y)
+				break;
+
+			i = y * 2 + x / 8;
+			fbloc = ((p.y+y2) * screenimage->r.max.x + (p.x+x2)) * depth;
+
+			if (cursor.clr[i] & (128 >> (x % 8))) {
+				switch (depth) {
+				case 2:
+					*((uint16_t*)(screenimage->data->bdata + fbloc)) = 0xFFFF;
+					break;
+				case 4:
+					*((uint32_t*)(screenimage->data->bdata + fbloc)) = 0xFFFFFFFF;
+					break;
+				}
+			}
+
+			if (cursor.set[i] & (128 >> (x % 8))) {
+				switch (depth) {
+				case 2:
+					*((uint16_t*)(screenimage->data->bdata + fbloc)) = 0x0000;
+					break;
+				case 4:
+					*((uint32_t*)(screenimage->data->bdata + fbloc)) = 0xFF000000;
+					break;
+				}
+			}
+		}
+	}
+
+	_fbput(screenimage, r);
+}
+
+static void
+fbproc(void *v)
+{
+	struct input_event data;
+	char buf[32];
+	struct pollfd *pfd;
+	int r;
+	int ioctlarg;
+
+	pfd = calloc(3, sizeof(struct pollfd));
+	pfd[0].fd = ttyfd; // for virtual console switches
+	pfd[0].events = POLLPRI;
+	pfd[1].fd = 0; // stdin goes to nowhere
+	pfd[1].events = POLLIN;
+	pfd[2].fd = open("/proc/bus/input/devices", O_RDONLY); // input hotplug
+	if (pfd[2].fd < 0)
+		panic("cannot open /proc/bus/input/devices: %r");
+	pfd[2].events = POLLIN;
+
+TOP:
+	while(read(pfd[2].fd, buf, 31) > 0);
+
+	pfd = realloc(pfd, sizeof(struct pollfd) * (neventfds + 3));
+	for (r = 0; r < neventfds; r++) {
+		pfd[r+3].fd = eventfds[r];
+		pfd[r+3].events = POLLIN;
+	}
+
+	for(;;) {
+		shift_state = 6;
+		if (ioctl(0, TIOCLINUX, &shift_state) < 0)
+			panic("ioctl TIOCLINUX 6: %r");
+
+		r = poll(pfd, 3+neventfds, -1);
+		if (r < 0)
+			oserror();
+		if (pfd[0].revents & POLLPRI) {
+			if ((r = read(ttyfd, buf, 31)) <= 0)
+				panic("ttyfd read: %r");
+			buf[r] = '\0';
+			if (strcmp(buf, tty) == 0) {
+				hidden = 0;
+				printf("\e[?25l");
+				fflush(stdout);
+				qlock(&drawlock);
+				flushmemscreen(gscreen->clipr);
+				qunlock(&drawlock);
+			}
+			else
+				hidden = 1;
+			close(ttyfd);
+			ttyfd = open("/sys/class/tty/tty0/active", O_RDONLY);
+			if (ttyfd < 0)
+				panic("cannot open tty active fd: %r");
+			pfd[0].fd = ttyfd;
+			read(ttyfd, buf, 0);
+		}
+		if (pfd[1].revents & POLLIN)
+			read(pfd[1].fd, buf, 31);
+		if (pfd[2].revents & POLLIN) {
+			for (r = 0; r < neventfds; r++)
+				close(eventfds[r]);
+			if(eventattach() < 0) {
+				panic("cannot open event files: %r");
+			}
+			goto TOP;
+		}
+		for (r = 0; r < neventfds; r++)
+			if (pfd[r+3].revents & POLLIN) {
+				if (read(pfd[r+3].fd, &data, sizeof(data)) != sizeof(data))
+					panic("eventfd read: %r");
+				if (onevent(&data) == 0) {
+					ioctlarg = 15;
+					if (ioctl(0, TIOCLINUX, &ioctlarg) != 0) {
+						ioctlarg = 4;
+						ioctl(0, TIOCLINUX, &ioctlarg);
+						qlock(&drawlock);
+						flushmemscreen(gscreen->clipr);
+						qunlock(&drawlock);
+					} else {
+						write(1, "\033[9;30]", 7);
+					}
+				}
+			}
+	}
+
+	printf("\e[?25h");
+	fflush(stdout);
+	termctl(ECHO, 1);
+	free(pfd);
+}
+
+void
+screensize(Rectangle r, ulong chan)
+{
+	gscreen = backbuf;
+	gscreen->clipr = ZR;
+}
+
+void
+screeninit(void)
+{
+	int r;
+	char buf[1];
+
+	// set up terminal
+	printf("\e[?25l");
+	fflush(stdout);
+	termctl(~(ICANON|ECHO), 0);
+	signal(SIGINT, ctrlc);
+
+	memimageinit();
+
+	// tty switching
+	ttyfd = open("/sys/class/tty/tty0/active", O_RDONLY);
+	if (ttyfd >= 0) {
+		tty = malloc(32);
+		r = read(ttyfd, tty, 31);
+		if (r >= 0)
+			tty[r] = '\0';
+		else
+			tty[0] = '\0';
+		close(ttyfd);
+		ttyfd = open("/sys/class/tty/tty0/active", O_RDONLY);
+	}
+	if (ttyfd < 0)
+		panic("cannot open tty active fd: %r");
+	read(ttyfd, buf, 0);
+	hidden = 0;
+
+	if(fbattach(0) == nil) {
+		panic("cannot open framebuffer: %r");
+	}
+
+	if(eventattach() < 0) {
+		panic("cannot open event files: %r");
+	}
+
+	screensize(screenr, chan);
+	if (gscreen == nil)
+		panic("screensize failed");
+
+	gscreen->clipr = screenr;
+	kproc("fbdev", fbproc, nil);
+
+	terminit();
+
+	qlock(&drawlock);
+	flushmemscreen(gscreen->clipr);
+	qunlock(&drawlock);
+}
+
+Memdata*
+attachscreen(Rectangle *r, ulong *chan, int *depth, int *width, int *softscreen)
+{
+	*r = gscreen->clipr;
+	*chan = gscreen->chan;
+	*depth = gscreen->depth;
+	*width = gscreen->width;
+	*softscreen = 1;
+
+	gscreen->data->ref++;
+	return gscreen->data;
+}
+
+void
+getcolor(ulong i, ulong *r, ulong *g, ulong *b)
+{
+	ulong v;
+	
+	v = cmap2rgb(i);
+	*r = (v>>16)&0xFF;
+	*g = (v>>8)&0xFF;
+	*b = v&0xFF;
+}
+
+void
+setcolor(ulong i, ulong r, ulong g, ulong b)
+{
+	/* no-op */
+	return;
+}
+
+char*
+clipread(void)
+{
+	if(snarfbuf)
+		return strdup(snarfbuf);
+	return nil;
+}
+
+int
+clipwrite(char *buf)
+{
+	if(snarfbuf)
+		free(snarfbuf);
+	snarfbuf = strdup(buf);
+	return 0;
+}
+
+void
+guimain(void)
+{
+	cpubody();
+}
+
+void
+termctl(uint32_t o, int or)
+{
+	struct termios t;
+
+	tcgetattr(0, &t);
+	if (or)
+		t.c_lflag |= o;
+	else
+		t.c_lflag &= o;
+	tcsetattr(0, TCSANOW, &t);
+}
+
+void
+ctrlc(int sig) {
+}
+
+int
+onevent(struct input_event *data)
+{
+	Rectangle old, new;
+	ulong msec;
+	static int buttons;
+	static Point coord;
+	static char touched;
+	static Point startmousept;
+	static Point startpt;
+	int key;
+	static ulong lastmsec = 0;
+
+	if (hidden != 0)
+		return -1;
+
+	msec = ticks();
+
+	old.min = mousexy;
+	old.max = addpt(old.min, Pt(16, 16));
+
+	buttons &= ~0x18;
+
+	switch(data->type) {
+	case 3:
+		switch(data->code) {
+		case 0:
+			coord.x = data->value;
+			break;
+		case 1:
+			coord.y = data->value;
+			break;
+		case 0x18:
+		case 0x1c:
+			if (data->value == 0)
+				touched = 0;
+			else if (data->value > 24) {
+				touched = 1;
+				startmousept = coord;
+				startpt = mousexy;
+			}
+			break;
+		default:
+			return -1;
+		}
+		if (touched)
+			mousexy = addpt(startpt, divpt(subpt(coord, startmousept), 4));
+		break;
+	case 2:
+		switch(data->code) {
+		case 0:
+			mousexy.x += data->value;
+			break;
+		case 1:
+			mousexy.y += data->value;
+			break;
+		case 8:
+			buttons |= data->value == 1? 8: 16;
+			break;
+		default:
+			return -1;
+		}
+		break;
+	case 1:
+		switch(data->code) {
+		case 0x110:
+			if (data->value == 1)
+				buttons |= 1;
+			else
+				buttons &= ~1;
+			break;
+		case 0x111:
+			if (data->value == 1)
+				buttons |= shift_state & (1 << KG_SHIFT)? 2: 4;
+			else
+				buttons &= ~(shift_state & (1 << KG_SHIFT)? 2: 4);
+			break;
+		case 0x112:
+			if (data->value == 1)
+				buttons |= 2;
+			else
+				buttons &= ~2;
+			break;
+		default:
+			if (hidden)
+				return 0;
+			if (data->code > 0 && data->code <= nelem(code2key)) {
+				if (shift_state & (1 << KG_SHIFT))
+					key = code2key_shift[data->code-1];
+				else
+					key = code2key[data->code-1];
+				if (key == Kshift)
+					return -1;
+				kbdkey(key, data->value);
+				return 0;
+			}
+			switch(data->code) {
+			case 87:
+				kbdkey(KF|11, data->value);
+				break;
+			case 88:
+				kbdkey(KF|12, data->value);
+				break;
+			case 96:
+				kbdkey('\n', data->value);
+				break;
+			case 97:
+				kbdkey(Kctl, data->value);
+				break;
+			case 98:
+				kbdkey('/', data->value);
+				break;
+			case 100:
+				kbdkey(Kalt, data->value);
+				break;
+			case 102:
+				kbdkey(Khome, data->value);
+				break;
+			case 103:
+				kbdkey(Kup, data->value);
+				break;
+			case 104:
+				kbdkey(Kpgup, data->value);
+				break;
+			case 105:
+				kbdkey(Kleft, data->value);
+				break;
+			case 106:
+				kbdkey(Kright, data->value);
+				break;
+			case 107:
+				kbdkey(Kend, data->value);
+				break;
+			case 108:
+				kbdkey(Kdown, data->value);
+				break;
+			case 109:
+				kbdkey(Kpgdown, data->value);
+				break;
+			case 110:
+				kbdkey(Kins, data->value);
+				break;
+			case 111:
+				kbdkey(Kdel, data->value);
+				break;
+			}
+			return 0;
+		}
+		break;
+	default:
+		return -1;
+	}
+
+	if (mousexy.x < screenimage->r.min.x)
+		mousexy.x = screenimage->r.min.x;
+	if (mousexy.y < screenimage->r.min.y)
+		mousexy.y = screenimage->r.min.y;
+	if (mousexy.x > screenimage->r.max.x)
+		mousexy.x = screenimage->r.max.x;
+	if (mousexy.y > screenimage->r.max.y)
+		mousexy.y = screenimage->r.max.y;
+	
+	new.min = mousexy;
+	new.max = addpt(new.min, Pt(16, 16)); // size of cursor bitmap
+
+	combinerect(&new, old);
+	new.min = subpt(new.min, Pt(16, 16)); // to encompass any cursor->offset
+
+	qlock(&drawlock);
+	flushmemscreen(new);
+	qunlock(&drawlock);
+
+	if ((msec - lastmsec) < 10)
+		if (data->type != 1)
+			return 0;
+
+	lastmsec = msec;
+
+	absmousetrack(mousexy.x, mousexy.y, buttons, msec);
+
+	return 0;
+}
+
+void
+mouseset(Point p)
+{
+	qlock(&drawlock);
+	mousexy = p;
+	flushmemscreen(screenr);
+	qunlock(&drawlock);
+}
+
+void
+setcursor(void)
+{
+	qlock(&drawlock);
+	flushmemscreen(screenr);
+	qunlock(&drawlock);
+}
+
+void
+titlewrite(char* buf)
+{
+}
+
diff --git a/kern/devaudio-alsa.c b/kern/devaudio-alsa.c
new file mode 100644
index 0000000..30dfd60
--- /dev/null
+++ b/kern/devaudio-alsa.c
@@ -0,0 +1,108 @@
+/*
+ * ALSA
+ */
+#include <alsa/asoundlib.h>
+#include	"u.h"
+#include	"lib.h"
+#include	"dat.h"
+#include	"fns.h"
+#include	"error.h"
+#include	"devaudio.h"
+
+enum
+{
+	Channels = 2,
+	Rate = 44100,
+	Bits = 16,
+};
+
+static snd_pcm_t *playback;
+static snd_pcm_t *capture;
+static int speed = Rate;
+
+/* maybe this should return -1 instead of sysfatal */
+void
+audiodevopen(void)
+{
+	if(snd_pcm_open(&playback, "default", SND_PCM_STREAM_PLAYBACK, 0) < 0)
+		error("snd_pcm_open playback");
+
+	if(snd_pcm_set_params(playback, SND_PCM_FORMAT_S16_LE, SND_PCM_ACCESS_RW_INTERLEAVED, 2, speed, 1, 500000) < 0)
+		error("snd_pcm_set_params playback");
+
+	if(snd_pcm_prepare(playback) < 0)
+		error("snd_pcm_prepare playback");
+
+	if(snd_pcm_open(&capture, "default", SND_PCM_STREAM_CAPTURE, 0) < 0)
+		error("snd_pcm_open capture");
+
+	if(snd_pcm_set_params(capture, SND_PCM_FORMAT_S16_LE, SND_PCM_ACCESS_RW_INTERLEAVED, 2, speed, 1, 500000) < 0)
+		error("snd_pcm_set_params capture");
+
+	if(snd_pcm_prepare(capture) < 0)
+		error("snd_pcm_prepare capture");
+}
+
+void
+audiodevclose(void)
+{
+	snd_pcm_drain(playback);
+	snd_pcm_close(playback);
+
+	snd_pcm_close(capture);
+}
+
+void
+audiodevsetvol(int what, int left, int right)
+{
+	if(what == Vspeed){
+		speed = left;
+		return;
+	}
+}
+
+void
+audiodevgetvol(int what, int *left, int *right)
+{
+	if(what == Vspeed){
+		*left = *right = speed;
+		return;
+	}
+
+	*left = *right = 100;
+}
+
+int
+audiodevwrite(void *v, int n)
+{
+	snd_pcm_sframes_t frames;
+	int tot, m;
+
+	for(tot = 0; tot < n; tot += m){
+		do {
+			frames = snd_pcm_writei(playback, v+tot, (n-tot)/4);
+		} while(frames == -EAGAIN);
+		if (frames < 0)
+			frames = snd_pcm_recover(playback, frames, 0);
+		if (frames < 0)
+			error((char*)snd_strerror(frames));
+		m = frames*4;
+	}
+
+	return tot;
+}
+
+int
+audiodevread(void *v, int n)
+{
+	snd_pcm_sframes_t frames;
+
+	do {
+		frames = snd_pcm_readi(capture, v, n/4);
+	} while(frames == -EAGAIN);
+
+	if (frames < 0)
+		error((char*)snd_strerror(frames));
+
+	return frames*4;
+}
diff --git a/lib/arm64-v8a/.keep b/lib/arm64-v8a/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/lib/armeabi-v7a/.keep b/lib/armeabi-v7a/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/lib/x86/.keep b/lib/x86/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/lib/x86_64/.keep b/lib/x86_64/.keep
new file mode 100644
index 0000000..e69de29
diff --git a/libc/getpid.c b/libc/getpid.c
new file mode 100644
index 0000000..9a9c86c
--- /dev/null
+++ b/libc/getpid.c
@@ -0,0 +1,17 @@
+#include	<u.h>
+#include	<libc.h>
+
+int
+getpid(void)
+{
+	char b[20];
+	int f;
+
+	memset(b, 0, sizeof(b));
+	f = open("#c/pid", 0);
+	if(f >= 0) {
+		read(f, b, sizeof(b));
+		close(f);
+	}
+	return atol(b);
+}
diff --git a/main.c b/main.c
index 0d74b2e..e66c81a 100644
--- a/main.c
+++ b/main.c
@@ -54,6 +54,7 @@ main(int argc, char **argv)
 	if(bind("#U", "/root", MREPL) < 0)
 		panic("bind #U: %r");
 	bind("#A", "/dev", MAFTER);
+	bind("#N", "/dev", MAFTER);
 	bind("#C", "/", MAFTER);
 
 	if(open("/dev/cons", OREAD) != 0)
-- 
2.31.1.windows.1


             reply	other threads:[~2021-08-14  9:08 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-14  3:59 Lorenzo Bivens [this message]
2021-08-14 12:19 ` sirjofri
2021-08-14 17:30 ` cinap_lenrek
2021-08-15 16:29 ` Amavect
2021-08-16 15:49   ` Lorenzo Bivens
2021-08-16 15:59     ` hiro
2021-08-16 19:14       ` Lorenzo Bivens
2021-08-18  3:31         ` Lorenzo Bivens
2021-08-18 13:16           ` cinap_lenrek
2021-08-18 19:24             ` Lorenzo Bivens
2021-08-19 13:18               ` cinap_lenrek

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=CO1PR17MB51778F16E9F21847384BF986B6FB9@CO1PR17MB5177.namprd17.prod.outlook.com \
    --to=izaki@belaska.us \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).