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

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

Bump.
Is this patch ok?

Thanks,
izaki

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

From 85e175d922e10d7421e174edefd691119b83030a 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 +
 gui-android/AndroidManifest.xml               |  30 +
 gui-android/Makefile                          |  23 +
 gui-android/cpp/android.c                     | 230 ++++++
 gui-android/cpp/devandroid.c                  | 248 +++++++
 gui-android/cpp/native-lib.c                  | 173 +++++
 .../org/echoline/drawterm/DrawTermThread.java |  32 +
 .../org/echoline/drawterm/MainActivity.java   | 437 ++++++++++++
 .../org/echoline/drawterm/MySurfaceView.java  |  91 +++
 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 +++
 libc/getpid.c                                 |  17 +
 main.c                                        |   1 +
 38 files changed, 2415 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 gui-android/AndroidManifest.xml
 create mode 100644 gui-android/Makefile
 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/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/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 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/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/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/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/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
zcmV-3JIut1P)<h;3K|Lk000e1NJLTq003YB003YJ1ONa4NRhv@001LrdQ@0+Qek%>
zaB^>EX>4U6ba`-PAZ2)IW&i+q+O3>tvRt{2t^acrJp_6Z!=a7n8NA{5x0orF%3V|O
z>V%X>Y4#=wU>T5E?)<<1z3zYbuV?RFF0EIq)$?DrY;o{Q_n-gl{T+OMf4~3g_a*-Q
zyXW1{7a~t39@FQaZG7K9c)tAhfgkq>^Y_oY{(U9(?}ffE{J3D!og=^OUkAza@$-Dh
z-wWCK4%vG9b*M9b9@qDcZz$hCsl7}8yomnoetjZ0R%sXBm0~<8B>(>IpAn?bpP}dZ
z+b83FA=URxcJHbB9SIBayXpOS^#0cc`rRV`_|5%s^?&~MhsBTM`+WMtT7IMD_~kEO
z2<5LA|1I$^H%>oC6o3DMjd1@oo$sG}cfa?1W;b$WMe8@Cy!){_`V4QJEO~k#tNb+n
z6n<~-$N1@f_(gEGUw-nlf`!QHUl(%Nfl-9>9#>clF~<`dk1?*8-g7;*XmKUQDeEWP
z*pj84I<Z{wxRiK0{v1nq_qBJw6*_m`fw#uM#R4Ds+aLF@Ui@!<+`UUn6ny`=R*Wku
za~Xyrr@wg@0r`eOH5PvP`G(*Bl0T#>5iD<+I};p!el9Uf_${~6i*w?Ag~v}-1lRWW
z0xS{tE(|6lBH(LCCDh<sj4cG#u@j)d$YaWJ5`j=k+zc}2lxlP>_NaUFnHJuAV~I8D
zX|Rbv6soBa8%u*=<y^?0mOD8#N-DXOQcEk{6)U5rnro@GwknVtEw$WAtF5)(tc{*}
z?xok>dhgbUMN42{v1-k_nT-+M;6{UM4c<R^X2zLjo@LhAW}i04B7Ig~W!2SIU$(}M
zJ8fWM*WGsCw#NzXfD|X6a_VWPA3NicYd76|%dNNFe(jE*QTs;qPe1=f)WSDv@kL7S
zYd@pLv#zxtmk5HBqL>k}m;(`SiU0{66*J#M&QXz5%)CX4qC^H+6dSjLB1Q=F39;Pp
zGj_j4?mvo~EB!x;Tl{yCa|+%6kH|Sf_vg6%Mbx%<ZoP<os!(g{6V=CiM(mD1-t*Ug
z_-LV@9c-L*%erCY#xlfAiG<2Z`+7=BXWp~hgg#lGTP?4X{LW!^z|Y29XE3o4;y!Eb
z=5HE|twHz6uB++pecRY&uIoX$GtzB`RJshiUHv^pQw$_5X1wmvn{GNi5uWSEv|g*r
zK{Z>?0*h}sX<FdQ<J=gm=QT?A&|(V<%FZ*Fkc$}gPmk{JUideUeL(>&<z)k?Aw3uo
ziPldf%#$+nyaM<3k@_Z&?%FpI)jRAK&2P=KquHuqkS;egn=6t4)y)QFkeahbKghiv
z*FMv39*4E4H}tX3xw(;#R7&gRj&^6^DIaz(RMILbF1Nf<dR&s6gw86<TvOooH<2W_
z_EYoR7KjMTeu}Y%(QXT8mtzLsh0yQVuGzYsEKVf*Ii+mww~GjCGvd>I+C(siO7@)5
zVx4KXa&onV654ZAGU?vp4kIUEBz}qM&V6Ar#Nc7Y#yV3)GZ+M;8PhlOZD-ykMW^R_
zPg#XhgM+;nK_<$SNt)qS5|cVUp2V_%y3Dr8R;w|6b4%+mn8q!2tro`|4H#)XTo!W@
zqf4@M@_s?GAixf%@d>*rn=Vl2j+$xIAX&T>2FqB+lumnj^nUrLk14XCYZk|<?;G+R
ztV?N)nYOnCcDW;A3$|8G<W&lB)j8*BVdm@GQ5FCr)K;-r+>GIx^~0s8!*KlFiFYz_
zYc2V@S8s@v+W?htjHm)q4O}{V`(D;5i@dGL-NOh&>yzXocK41_wHybC*!je~EzWp$
z4VNqqhs-{zNxx6(b~c53BcXA9^`x5Z85lUL0R(e56i+xYlnv4VsC~g){pO<A8!4jv
zGJt=QJ&6Fu<}7aR7n8N6RPS&|+&hncPUcg2w{cdzr^eG%J9a}l=1DL<Q_7-lJb7~6
zxZv`phVop6%<Cj(L3PboS8M|)92LAGxl~(mBhF4=;46TPhF~=t!zkGSaE(>j-X!sq
zFTsD7^{i3|5hD<U&$NoN{U8b{z+8#ht3E9;Q*bO;-II!b7uj*HL`-J91{9}N8({j<
z5zrv;fqPc4<><K!i=N74`OPU+7V5E4iSG{gKGe2zI~f9o1N8+jMhFWjZn=S5lQ%VT
zit=A`%rcTop~N{^v_mp2mV!#V(BrIk){_$@a;Rz50@;GBViiMHT$<H(E|4=JjpIJ0
zoYV1}q&3~0V4&FiyF2eH@E?iZy5(#&3GHA4LiUCa*|kj^UD*d+5&JhT1md3+o%_QR
zh-&g?UxYy36qw<t;Ga^F5}GZUK@9s!{Svux_d-wt3fUQniJX`ua6Wz<-?boXkh-VN
z3x8SzI8V;RmMoaM@+9{P(M_a3FdauW7Ygc=()4yh`;g^JqA{tZ>wzT%L_8C!@2Cx{
z_qKT<Uc$X=gmhNSu(9h18Ws(<(ZZq8JY{=Vyv&g5D3g%Ssd=6@af`mZG>7<w#&w<^
z@SU)TS3PbYZJ&ltfrkWw6K+2bsXJ1WOhOeQ0hyzrc%TR1lQcp2A(jRL>$)4LS%e9o
zqI6U;l*KTpy?|*Af+9wLL%B#WL=v?`x)zhRq1M7Cmw|d$c-Qs>V<8EtCkz&M9%Uk!
zm>L=Kq`;|S5Q}{BuF_e71+bwWcFVWLcAXLD+d;gZF>@p}EK)&VFlX>jj5C!=020$B
zlMmSDUy*Qya-g~0fwCaQ_9&(!U=IpWL1%H9^*UEN1a9m%k-e{UQ9tk?09<$^Gc?7p
zAd&<4^EtpXYs3pUCYZj;tDXlF*y{z$@)~#ydmf79f`MLCiP;&Xln<7i&oz*;EX4&3
z5wW^rv;$aKt2r+OHe5X^>e=>!A}Y&HQU){uWtls=Y}s*!Qpu8Q9ett*GS}FR<lH_%
z9Sg*G;CQH@)wf2o?mSV6@=L|Je^jDO>8&i&tBh47fT|_^8BQcN8|*$g5E>S3Po%*S
zW-->?QH{cRRM|&1lK?xR&RUu3Lz&~nsvH7}5h0Xy5H#lrc>+i4gQ|kVNCl2DQ0ONk
z5h!kBVYAW|)j;^Elk3-08-9`4z`R1jB}OC1d2@>k_fXdejBxX@&UGmo?n4HEIEG4f
zk#YxTL)%6PF+WKGiW&&G2=R6*xf;%u2oD8#VMG+FO2vzGC){(|^)9h=XAtgw`<T*W
zFn1VxWJV7>lQ+E11oy`8puzdv;#&L@4a;xP*9k0kWt{s7sGahV&7wG3l<q@DAi*fH
zqPxvTSV%R9I%5l9!H#FC7=aF~m;-eV;7DQ=)MW+WB4%8gzZD=#6c;dTNNEF!WC6e$
z(ruuEI_5N!UD;-JiNS%!33;s)7bw_M)OThPc%0aohEm-u{DI^R9k?Oj!#uL8Ecy#*
zIe}@4LFtY^8J)7mLOy?EPb4pjE_P-cu@h)=|CIY36D5YcDZm_AI$YksH!cIYg}4FV
z0W$!T+{qtB)?(_+-ZaY-FGyByf!i~s*U>T{0H|V)HA86wAviBTZl2^j`O(n5a6^TK
zA(()sGxEHE46qE71oF08lL}NWEnbJ3ATOy4lntrH?JJHYlHe#pu+oIkLn3UPe`N~Y
zzjuxG%^P%WQ_>?piDB>-X@x4?KrW8WRg?zz#bl7EG6`vSk0^k%?s{>XUQRswqAX2#
z5ps$7w6FFaa3=3^?IeR(d=&<!f(>JFX3PVw&9#R)kOg~p@`}aAt2EFwKzPvK_LMIf
z;QI}T(SQ!jKMYwXUIk1h&bWs-03UQMP#*RYiQ-LglO@L_phKAxX7X}Php!-*7D_3T
zn>HxCjdD~t5EZ!x$JN6HO^AT~$2R%!ZVG2Dc;CpXWDahJU|<K}0qkd8!O`c<$X5cD
zKqw6G5pkdeC3O2(0|T_W`Hp)}yO5vGl%~k6LLO~7@Y#?s2W;OU6JeUsM>L>Em#tWz
zLO3WoLrQqo6I}-y=H_$@m@?pjmU=u@T6_giE?;F6>mA9sObH%OrX$Poj1V)lR-Ru4
zXl89L3F2h&s4*B76yl)(H)K9FN2O<QEBH?$gL2>wy8L6jnA0-&8l_2QlO4Eb-aN><
zgPkP5M!*O)M9f}dh9DI&2Su7gghD%j0{kII#BoU^h|BJydPHcP)hGq3uoIq+K=pzE
z@Zy%XHuOvV6*YFiQ0|1ODJu&vkpHzf5Z@aHg(NPz3s`vJ>tsR}0lin*6GB4I(hqbS
znuujh@#!jPay0audpE5A$UNqT3^0TTaDx~n9p%#IC&?~ca^k|j0oW`^8Pp+EjvHfj
zmX*Z}a7mzn1fU`YRjo#5OROV14W6f<&U48`B*&^Oq<*eC3k7>GjM)R3TzseIVJh4L
zuvudTYS)MXb?w(B`3cJsvO!^8PGUo};2|{;wZnoiQGgT9Vs8XVl%7H*V-mb;(uI(D
zLbsxdF$f2`0*bh|rlE$3d@W2^MYD@Af=p1Nk(C(xg2#?<KZRS1>W#X5SuVIB4o&i)
zWwZr@0E|)oMLqait2ze*9;aTBk<3_<(nTtd8s3UK65Nb}FJqb)cP}}5@<fP+0trY-
zC@@fvSk~DK4kL678c6JbVz~IlOQ4UDGQ_DAVziWjevB0E7JRsMm^OWY0G0uvHiyjD
zVNlTqvPSL6fL5=IG=RyFN>nNamAe@xhwx)}NeaRm5XayHbjj;`BU<ytO)vmQMdp`4
zDDSmp0HtmuexS@5p)dY<N;+hAX$>keye_PV7JxhRn@om|pySsUTZzD_RYRUk79p!m
z?P1sowaVsD3xxM*#uUTVuu~NcgplSTvk_F_3*<Ga=ECUI3~A2=rvIX9+~=1TNg<%3
z!;}HDi}%hjrKJWaare#|0<$yAv7y&Awg@fYrbzOW0Jgmr>U6?r)Sk)#xk2=Z25NBz
zKs@4_14D&xAa-;Xz$U#7uo2&0pXHto#eMMN4d6p-)X>QQtkZ?Q#%MwLjWkO^8W7s3
zm4br3lKO%$%vB4WOoZ3Oo&+wabBch5h$G^B#+{{YErW{*8$^B?VlfUZnKYik1A$nA
zZQ38HFfG%PPJA-4VGK7g0?h76e6VTn4kE|naWkv)j+maoQ77_dMvs`IXfK99O|+(-
z4<9W4(;>+beIpk!mb^TvdAS5yzGan7Oc@W3Hec#M^y5O)h^6pRHVCD<)JevwA>7Hq
zZ|BH5(Sw>L=iWLuHHSez>0H7Rt9xx`H7n#_Q49bDS~9<XM{MrXyLUW)yNc$%E0fQe
z%d*fFC3@uN-Pg%x6#KY?rOgpLnJ`vQGN=>3Op=A5V&mX7it12tuhWg`8(55Ro69F3
z@MkNxNg>vO&k$V@;!s*i{W&Iq=N9ShlWQa)f@+eqdW}gnPOIxh`w2k28Y!|)=Y!cD
z!Kis*q(=#<hrx_6hd_*O2JWk?Mc@xon>BRg8sL%2&RpxLbJ#cDahW0WaUJ*B_^K8M
zBzfP?0S<Eof%cnZe3NwKE~CIL4#0s=T6;}hR;l8)KT}n|urg3GC!yqu+Grh0N4>M;
zWW;IP)q$}<1R&>HMofU@sj6;ZTPTeokao%(JCyTPi*Vu7`FGalD{%$V;Yo+>4~UI{
zSUFPh`=)1;Z&stQA+I3|5ZlD(*yd4}k)~@6se_MQhKaUA$5VD7F}A!#$_4$(;A)Y?
zfZW2PWi`uzVl@)qC&xjDuqsPwE`3>u8rlv|!+4e|(pG;>7SsV6upmwmfF8~nH9b{I
zAxPB@7=4a~w?fZlmB=K`I)+q8%0*BZ049~l3d<pYc+gY;aWIBQMGs0t-XY9q4oK%N
zkLP~41J)k%*x|+9;IJ_l^n=6_h@@;5$<GAc0U?kGzXy9om-lC{#Qlp+6pZctv}ge=
z#0Dayf2zg<enS;!atA2NLexwa7VT7OiRjCy{rRiOon~r$_O#%?ZFxbVgR0XMl>C$?
zAj4IsjGQ}g&l=QlVJS&?b;#S~s#T5-k(@wl9vjLKE>1o|<HQ|4I0N|}UxQ~$u$R6u
z)Um|W)P*%_r7!h9C~SyQTSF+3!@a6L^XWuX^<&76nm6@Ti5iRt>iS8UUX(bLoWI6|
z`HR?WtU4s!vi5gMm3V}{piQa|a8gD9iO8DPhD7faq_eCO-ZU~8DL(o>U55<p(}tp)
z)#VZGN6Rd2*J|N6C`l(nP=w+*F?=$H>lW(!9%?*iSc1>P^C|`;?rt*^Dsmr8s-!&5
z4n)HiIQ!lU(~ln2vPP@}G|O8Wnvp_V&*kJLbHRW*fC-@2O|eOtAZoNv8`1wb{*7H=
zahV-xm1R3_e;YKWT`w)hMvrvSvV~Y*{~qK!13lOzc;No3PCja>OeAr_9Gw6nXpik^
z%Z0g`S~XbK_7Q<k$)KIuceN@dUnvoo<uTdYM0qBvAVUkh=j(w(sRloL?+AjXy=2js
zn#V^%0f`BYx6_>vAIumY1hAsps;Jh7z_0qk=e1z8$V_&6iu<ZRC7SB^&)U@w+Aia)
zx&aC3;i=s|#s$-p-D-UxKzB%JeHL+@3#J@xgq8Ms>qt_yn^E?2kdT1(ja|n}C{NYA
zgsH(ABFnLYw)j90lwF1BQJ@6tQUl0A-*A{iokEm9^e0h6sdsW4B`R+I?5LqGv?&KT
zp#zb)XaAalKQa(@7!8C(g$$dRj8tCh4>NrvGh5d#u{PyYEifdDt0rY5Q6uA2KO&>t
zSn#ghEOa9|hK>rntM!QRt;}<N_ainDXZ=~29I+PTNx!Am&1T)<u04|<tUWM-$Y*ul
z?&=Ns?bWchrxI8qB846hSuF9E&{Dz@2()$5evV&zk|X1|`uf)!&C60gCH%du#L6V?
ze1PlGT}M3-aAdw(?Rd$lZCP^h0ENk+SujK5N=hke6Tfrawi5mf^*!tCX4?)qg|yU3
z7~s!--0iCOBHNhUa}(-6b=i5Sb|Vnhq;|1*q$CNQwQmZS`55bxTLklgnDJau{64z)
zhbMkK3hg!mS>iqI33;(#;2|DoLE2JgVH+ij*C2MnquR-v1Neuo{s?TWcKY7-`t8lD
z!y%kXtZ!3qPxYn-I!<LG4s|N4bm*vaeYMJ9VnpGpY8ax6P}@V>O&K->4Hwihdn6|0
zkv5t4(*oj91d2_>XvolGoF^y;Wl|RGLXi>nD4T~y=}5*N@_oC3^+TybYaJO-Cw@#|
zWTi|zSptAbdnoq$P4Yu}n(}2C8Wac*Od-$P%4G>Oaq1XVg^i$S2h%LROyRxyR&Ws)
z%5Q6&yoz|;Ca+uYZB4Bc7J+efCU@1|Z46z<QJ5Nb>h<ZS{pizWZH`2YU7&#bM>FL|
z*2wRHDQ)Bm#`RcT>PYI;q0?EMc65*gOhdJ!R=`pwMqP5Z9@QR^J!f+L0@A@Bl~dio
z>^xxjlhMnm^_k%<C|}!&fR|j0q<vi4vn%*wS$OU%W`L1cOaNbv%1}hzXNsmAw7Vk|
zqmFHilndqw@Pu5j8tPZ<RGuNP+6~$-uv2*SR-52qAtK@u#RiyZuN}v~5MzLhne+<@
zs_iF)?1jxcm5HWYDXK@8K|z%JL`Wi&pMZAXCh_sw+60$CqIu<`1dWl>lk-fCq{MJ$
z#1Ik|h4(os6YusfC-EY3Ipa0PE;H-W2N6+))2>2~6#ZulwPv&lG%(cZ#0YL_S=(zf
z*O{OrZSbz#mb5<kgNMcN;&(P?5@1H&3h;D*qfYg~PR=rwrsDym7PrXHwmLbeqsoF0
zGOi>Zq){wh2b&r)p+F)T29&0nPpN5;>I(K}y^NYc!yI>YGR82yJ;azWn(qLN2ao;+
zU;gS5@N@E7GKF&mbU7jwGQmbDA8@5QLWNEQ%;w8^opCzqvUY43AwnSso!%<J0mzJp
z6h;8nh~_?Ow&stKX+ydkLYwNRm|QMWsfV|Tia1|VoQMY$wWA^j%Uxuk(#YArE;&jQ
zy8GZb<**u3doCTHNWcm&dx-cv+lP?Cxpk)wgr91}U{^#{QdtEq&@MC<T5G7;zf%<~
zH;m9`*Irm89n}qQNqu#Pj0$~YqFD^=|AJl-lW1CWFibcLOcw#`Y0nV?voIDG1q6l(
zsNb*YcClog=L1wJExZvq6W>`5HNEGeGRj6(1s%=x+FY3=i0v4%XLW)k5YoY#Q+F4p
zuQ0DVWC4c8SA9Pu5X4X6pAzzH@cd!DKq3~J;9&a5C#j!W9g=uOtZ;1Fc;5Nu2>a{-
zvV@V4OzPX-b-%l`rtXO}cbHJfz?2~iv_0(VJHkbQbQDa!nvV878EuzgC{PO0FQ+I2
ziwFncs;q4V0fH!ryO8h0>41~i_2S;NWxX-Ij1uHwTu%@S?sI9ZJX*7S4|>RXW6gCM
z@sNWD<zH^n=~e(c5ZtpN!;NDg#N=w$LV=pVteSWdyDxpB9W}D42lO9{g@s^cgSuFk
zoNOeGB!7U>$U}9Q5Px0nvvid>ibQ7@WR^D<<)$c_y{I*SEm}exFwleWG^Rra7j0uI
zKf|2buozV-0h!@`<%)(5zv#5zrxT*)rHguwXo#_qVaS(Vbk<ufxJ^;0_uNqY4NN8@
zfDnO_#0fO<%Bo}nlN>toyzWj~Iz-c7g)?u=BkD|Ny0nvrvi{k@P`e5#O|=rQE)|51
zYH#ykX;&C0fQ;tGDDs;9N7X7PRGA&r84`psBQ#hSvTR2_h%{HHz)$x#);K5ay1e!k
zFg#&tYRrbXUT2koDg+!6XYHQ*?ye0T9!0pO^!*s|32_1z0$E&cgAcF|R<wCDb)N8v
zdO*#<VzsUSXTpzs#jfFZNshq>JGDrVwBhP0*p6>vhD&}knjW9Ff*!Ty0tJ!tVtp5|
zoH`C^pob)}<*@u`cLW`fw9iS#q&`_OmS4LfR-?{BAWfB+J|cu!?6-xg8GTMb=nNXZ
z6KEraAW>F?qLQoy>iS<posLCd{C<aZIyl6PaV90cqXz1c=>V}$bEEhQs!T^zxU}|i
zNK6(Rc2CPqomBDh+}B{m9B@C-jf-mEYkCEl3M_DSm#e)j9n6o;ZR9N&rS=md#hH}B
zuB2$vxx0WXRsZ<4oxk1We3#DX=wJ^%OeaN09C4v4knJ8<VHXy89q>MNSlSrAgez;0
zved>V+)O>%()Uu(ON>doRG=|Qp_NomY4(aAz#Yl?Ku<XD1MNv;At`jQ^=i)%2B2=C
zP+z)?;MR6dJBZ!)6_ktgBmCPB=V7H&RR>kwG}NEzqZP-sbre6Wm_E&582**l)UiA2
zK30B#kWEKBh?<bFDp|D)5QsZLt2*BBguhOq;vt5vVg==bo+81}-ZLQ0G!_Kw>f!Zj
zwfB0S+M1)-R>vh*FN=xQL9So*v-XkbhV~l3fYCy~lagQ(ws1g4mw=(FQiutGA9aB(
z+4nvAqxk%`Ne)^GT+sCsBE(_lkg$iO&VV2-sM<47mJ<cD(&sQuYW-07Q0EESjjQS(
z8H<plQ%Dg_KLCp3X-!9fxC0aLNQwfko-P)hUY;8RFhbN(T2UIHAo+{C!A&p?5NAYq
znRu9Y$jl`FSiuMFtAdX@$ir>A0Aiuz->DoF{7x`8_@YADQdl|!hJ#_aeY;uF!&^sy
z;Mk(V(eV=dhzaUI&0%s=4OMuZv?OWCy|V%-S9NxTY$6s89kk>VN$k;ByD+Pc=Xh;s
zp7x;+u%7%>`?R6<r%r7Gl%@KG+rX@zHJ5|oO$V#hGRhFtLXmB?Z;0K?!ODu0&nN^y
z1;KiMOTyoB5W#+R<TE`P4_O=?16Ds{`0qi>twYAIeK9kaCn@IE(N9fhuFuwkJcWB=
zTtqP?3v@I)QEPta8v)>tSK6p$jh+^}4+v<U#2h9WhyX-@61^P|5r_ts;_ZMk1x2rf
zLPU{QIyD<lLb%1x!PHNyih#aj_VD*nkG1oci&*X&ypBO79a!iF6nmYDA;)F7tImPJ
zk)u{&k{TjWhw_S+`mwo9vO?Vd+5dw*mb};Jtf$VvK^5Y_Vgr4%k`6M;E1h>v-4uH6
zOMy%5CAG#F?b~LSXe4}Ns%=pTCb7CYq>drqOXdPjdHr_~9>ar1@Ox@wDrOX0%`cjx
zu;d6goxV_4RflO{oTzS@#n9|Wj}|4Buyry^h_{);=-L)``D}f4OC0h!l}^cN4-qM?
z_BT|dZ`m!i%$k@Aa|Q+&5~LcS`MlF4G){;-hE7Hg<jK@mM9NYZ4NY1J^n6K)n9^BI
zLE2iH%3|^OKzd3=B<>W)uJc_wW4sd|sB!{agv30&Q?Qm~g6pMzpF1_|1TV5AQqP11
zEOU8?|GEIC{h$^QRmV@XQLp26I@ZcyLW$Z#gf^0r;Fi~804&uZ!PHa&p5dp+eV7)s
zz8|hdeGSWy49%7{O3+3+Q6Uu%sPOOf$TqwKrNcV_Y#ajiS_nF&27>jIb&Oa6Yzl4G
zv2yJY^3H+TWxT4>a@17AtB?uFF>d)%LLR(&ms}HZ^jZ+6(+s$?kXxzTrLLp~8~pn0
zns(_Jiq5K+un-ZH<c7vf->87C)Qg5W@bfQAL9(VpLS(NUM$={~8BFqzQ<wIyf)2Sj
zuOlF#>6pYj6A-l*MeJ3$<-R@1f&LysqRoua2HFjfwwLuSgc3cvy6a#;0zrTazzR1}
z@(J8W-X8==B|khzg611_aC*x#74^NmJfm*H)TU!TP%kk-im>`S5ca3~c0(hA&`FLp
zfLS>&u@BO&uDJ9S608RZe0ruxoOX<^Nj%kfCuL1NGNS|<vx?8Qs_RRU!dT)meZ`BF
zicjH56Rc+uaoN+Wgp&Vy1;Zb$bu`>538(WSnGZx?ARp2kWzp1$%=+dGJd4FIqqtzC
z4kB}Y&VlM&s66ecS1n|ujZWl;5`cjIzTA|;`)b7S>Po8@FFi+Q&t_tIK1G5oBB73S
zC8@NtoZs0qy?oyH5wG^DQQ*F?0*KfN73gFZaP5M=)ajMmi3|mB3j#{JXF8^fG@fsp
zFvRx_ChhpccQ2(RVh$jyZ>rtt9dVix;`@Vs)#`d3bg^AssI!3wQ(IYIdu5oaLvjwC
zxQe(N(2_L0PKQaiMCy@<1ds!oW=QqEQBw7_-n|B|lv;Isk=5gaIz9fwz+<7hL-G?F
z?Tkuh$_Z0iTNd;P-2&^Tw!KVUg=kD0S^Dn8R<Bj0`1U<Yb=tI*TJ~lhFhlkXeK)CU
zgX<~NUTp`RWJEJeeUYSNzX9#C$aDAwz`!UVMmJU>2KkE$ac_m2MR@+=Z6r0p80xG`
zIVT<7N7aJ*wn19YrB4ADlhX#RzG9L-J&uGQ?mE;3&~I2%Uy&)=m0w6|vI547uNA*o
zeX!ORX{$yT-2dpVWo<YLnj{d&7PWl66qiv=?@J*aNWE$hFMXW?Ry%M4UU_Kv*(GgR
z-t`(qQ^$mc&Opi1)d3|1g?Focgr`v$nf_AnP;97Wqo!sHpAI_#O6t&Pzk(nX$>MPZ
zOvvsrcV~<`coSe=2}|E!obd5HH%VO-AyF$lq7MDDSlms==48r~QI!m*8OE85_oiZe
zr&Ix13NPr~Y#rJ;nv||v@D*G~&`y1=ccf2~jPodBt!o%l#|2q6;teY2y19$qsa-Ez
zvc3a$qYH0$f9so=Lq~mc|ET^UH>X3}c)az_7oLwo;w_)UzPlqV6HaTVq^-lcsjsZB
zW7PIeL1NF6&i4^<Q*%ToDOl!BtTP^5C#zp8Q#&R847DxcNhd%{`j(Fl(S)L}!;v~$
z$L_KYok0O82yMLuy#cKhK}SU54f-0m$zI;B-St{P13+oKZ)PS`7UB^9g6(Tt2RaIp
zd#AF-`+pNe^&1T(!2N>08)vW0pY;u2HL}IN@5rK#YeR=8Zj=YpgUbsvi;<J2)!u8X
zsUjZpRDTC}mM!tsk*{(xI+>1sfxD!|k(h76F9bhk#DkM{NpHg2GOq)j+B;cu)&B0e
zHaB#f=xw$q0B7oaEonwv!&arNTCh8loM8rJtoG8kPT&^!2)B(bKsc&@bfw+P7J&Nm
zVZTd8nEO90I>zk<e@#9B00ARuLqkwWLqi~Na&Km7Y-Iodc$}S(Jxat-6otQx|ASVF
zf?A}o9k6jKn^7SM3Nemgw8|tI986+JG7Rp(o#<kw5Cm7?3KXn8FIrfb#s`=4ak=-L
z_a3zDBuvZMT}ZR4aJ-&>>0j9kZ?surgE_W>u*`d|dqU&+e8n>Q(lK7mbAO)sC@w?k
zRF#E!QGvBD?oO)Qu!^<YzIP~o5Zh6jMdBy%PLxK5&90Xw<M7AR+-5n>F3wF~wT;6u
zr?}V*7&9WFq9e`JIiky+)S)2Yo{~_S5UV%QOvR0;l#|1Os4voO8uB*lJXa|Ld5q*`
z67ERlY4R}t`@QyYR&QGC(>y4Gx;3L}4Ttdl2rE9UK12JuA#3sX+ZtxN^~^ut_yxMt
zP)^D8SO)+A00Lr5M??VshmXv^00009a7bBm000XU000XU0RWnu7ytkO2XskIMF->x
z2^S6q7%-Vp000&uNkl<Zc-qz5X^^FNbsq5FyWOSl?e6L6=~<-Nq?rLEgv4e`EF#8c
zbL<L%IH|-g$FYNx%7>(qa*-;hQWz&yRH{N!t}J$e4KcQ{aVT5?naGxr5FjZa2`xxM
z(nvzH&-CoQ-sRo$;r{#12!u2PGh@>qdhX2J`@Zk_pL3q`oadYy)wLh#pV*K1PkQMu
zSy@s@Br26uOZKB>z=}Wggx$7TaNIU;v-2_<5M9a~s4P3?dHZ!;ZQ9To3tD!%?y`B|
zl6oNbth=4`_q;+^gxmpld%~>ElE3*$+;gY1-ey)RQmZ7kd%YQ7wf{#0g(BPSG$m6w
zVcwF=HD2XgPX0{@q1r%CDKq(^mM6BFHmxJJ<atYGZP#(FEfy^5UIx^@C<B%}<#tc|
zF&{AbqVFihQi<Gxqn=WDrPtZ$J-+5Kzhd2Ap8>h2&0Em1&QV{n+ve|ioXQ!gfm&_g
zsK->=wwQ92manS*`a-C1!b3{e*rRa7!;ZMoPBWS>FyNTJMH|Fog-WXDh)J)o+meCe
zk{6x}yxub&@j9DzB-rKE_PWbHAMoQZ$dNP7I&G&^!#1z-oQL#vT;)0&JZ6_&SKffW
zM;)}$wsFWbbv0EUb(gkRYK$Rmt3|m=qAfDC?4Zo7S=U?dHdB8c2CVp)*Lagj4E5A9
zsZHLbbi3PZ9~;ncvweCBk)~8(RolF8TjwfMnpX6*L{~b58ro9SPP@~hZMNBA+S^2)
zKMxw)-YoKjn@nri>6il&haI+P)dp|%tgpCL=gJnc#CB~ZRvd7j&-jW*9aEZgz3uLC
zcwEL>YR{-dV$;@})-|ng+ySR-7I{>Dr9&w51`M$3gjG*V73NHtwb2eA)%VkyAuxL8
z4V7q`wBCYAiGAjDTxZ7gB`#*khd=!C23(~hH?45i0jI25L2S~Lw$fokn*-lGY@a=*
zG*wodwAYHZeY)ms(zeN_OA4hIa2$~dm17DWbLMO|;h2Zq?@?z=yVaD372(~x{R4@C
zNYkWQoU-DKgN`_5Lf3u1bLGk0KwqwD)+U>EG#&AvyFF)UyH{&EWdOE%y~>J6YQj2m
zDyO7QIN%s!e`N2KH(-nF<#JuyY?WxK9rcWdJt=piH~Ex@g1>4{JFX5UTw|xx22MF<
zUSXY^&0cu}CapKn*K)l#dA*GiJqJAKDXTiR+vKoA3RLzvqAw0zaiSwNuwq$H>Slf4
z4*t4g21H_umL;~h!H?Nx9Zq}Pb50nVa;wTW4bV4lujd?d%u(}}wKc>B796*1i+Q){
zU1>I2IHa~&ZN1l6bjl%Zg+m@UVUrCahtyU*<Ba<~YeLUSXDsTgaLnVTRAwDFf92_P
zVJ~)Sny|^Mo$`n!tM+@udOdqR=#=dWk2&lC4}g}dB`Pr%JtcPBoJSpTuUjrjE?lrG
zvE&O{UT>>R>9qgnkL`0-$5wyKI-l`Zro(wOHPxsPi&2YE>8r$6WUlpLZx#R0s?h}$
zvbA!yOV3_gwZvk5eT7)!j02wVj7Tk28>&TWLxoBiV7NpqQi@EOu;8e@4w<$7%7jp?
z>l%@hQe6!*wmIR9Q%-ph>viNZGy^u|;qsMI88nJiN39{jZ9ea(lwPf2w+&aKC*G*x
z0cX8RM@w65#X&13Wg<firBXynr6|0r#cH{Mrc8-U<XWXi-EY<n{-rksCF!yn5R2Sr
z+28RdEZFNosg_8k5=o_M12yXK@P$aKp;RgKl$xs0GsIGrMUVR}&-q2&%dgC}{j5hk
zWzJy_c*3%2Nk~v?RXFQf93C(diBuskYNZmDLMoP;5b3#HVT+q=(!NMP`~ceMKHsqH
zVIPxds%7D!BQX+@VKAVS1Pm(GYPGgRBoQfO8c4)Su@#kH^B%h|5|w@cX1hbnZ~25s
zq!xuhDZ+z|&UfuqZB-<dNCK}-l%cX`8e)Y~CXwj-L$zPM{05xxfN$xWQmZi(i6v^4
z-0-}2{zGrD#X4<~RR{c$`@n>2Lk`qpu}H0<>uF!M%gr`l&Je2ng`ZQKkgG*1xlB`S
z1*v!0p;n1Zc&+Pgu}+4e1OD7z4T%FDR0c?m#VWN_OYE$Hk9+$?<iSOHpmf~4Qmj-+
z1G?9SVnYqr`BiU5B|@el4Sca-hhJ8TMeg(k4O1p1YPD3QQc8492G$#09s~Nm?rY(O
zkxHSK$SkS+rngD$`M&yRW;(pO#h*((;NP1u8@lNc2sdROHt7x8m&bsCFZo|)R4Q@6
zmdMZ!xB3}xxWKDi<tofN>PaU;Ga7}|u6)v}8!ndtkqASjL=rG4wcuy`8`~}t46gHQ
z?(kQ>DHE#{a+&%fCkYpgLNN+u2%@GHD}K}8wf&+mmAT40@VK)wsZ63RGka0Ps2|7!
z_4xOaUEc1!Zu|k;!R_AaxVt=ILPy7hmdQ}9FIycLRnLZ4Zq-ltbz6T3I=sg(>DgyS
zTc*<2x9GUZvEq6O4LIX|he8Mq0{_V!uqc-V;yj`ZRe;hcQ0Y1pJ?Fh1d9!8F(++9t
zhtI5d#$VcLO2aG7U8+J>TXC<C`nI#$x*B4!^=5QU>6$>LVbMt?N~=<wuxubVlq=;1
zdMcSzKVZ);KW^FM&g!ehO6y!@zXdn@cWyQDlFGvc8?fwi{>(iJEgNjpl?9qs85qjs
zwtKVvKJ99=ng*7fbkw3q*Jf=;9X97?TXn^bcuK>JTfD<Qzvr+5%MN>ozwLnE6}i=W
z{rvZt$6ZtiE%>%Od_iJTqO_utAXi|;f?7{)vm*|u3{5C4Ixd%qu-Q68M<x1B>x(Q(
zO=?<l*csD~S(M1J;<yF1q1(M;EL#3h1{`pkLuO<mwX;si<$?1|ij^w0hde3Qb;dk0
z1BIqUX+fn{V%{+=Q<yL%w&a+Hb(Q)KN<_MzbikAwJ?o^&mmw7wXuzU7oiM9Z>044D
zlBpDyLv5h8Y-qbZ7Cnj*gOJku%sVbpNxjx)wb;-;m6pR2iDRh68ip3!Y^x<FLx1-}
z88Gy$ue(3|ZANON9Tq(%mWjtypbqunwSK{Vk6ZQ6{DfI;$NhKDxxt(j%bu}l%7m6w
zTVG|>v9W}?*#YnOi&h-)A3glC3f=_``M%^Yz1P(y^*!L5HkcOcSdxTu9yK?kpRR3I
zRQ|E|y2U!NMF*X*(L?$+d%x6*C!Ln+S(WQ~m)$D+e8YMRHo4A8D|T6ZSt<SkP-w~L
zJ?}cVSm%WQ>A%>ZYfA2b6^TeHR*5yWoOP|A^@uqicD07sXbq?5pigLeryI2$_A$RR
zj_%s0{FK_=K4_On>UuYsbdN>v^uCuwp$jk|cgP{DrZt`LX@8)thoAEcX5@$!&RUXd
zm@zF=m~q3{y_M3kBlharW2?kj&o~oGUWw~nqjHxInvt3Jxc7OBYizRF_LpojFK9+~
zjVXKW^-Xs>C{=6e+wJXRhF@8<B$rvQgW6CpNGZl;?TtE`hWh$;c(vBJD%WzA+KgB(
za|1Sb_XW%|FA#-hyv_|~eMt|6+FR^6uR_MAbk*U4wId#L%%Wu{ZE>AlX0@dvLubr8
zV4pX;NhAr4eH}a%DV%W9fACHdmyQd?T3V(I!;ND9#JgY6bi~1&MaP`B&tCHehE90e
z0XMnECR0K6sjYfi?u67U?9d1%)J~zW>b169pv-kqWNzq05U`jt`ywB%o$-)6EZb&-
zu9n*K9`YT#?Y7;9piq=1eaR=y_}3abGO1c&UQgd!{QV1-d@qttkAy-hzwMA;dci4G
zYPH0qNMXtz>trf3Hdr+DyhHkWVgrj773M7ZoJVYOvpwipHN*|x=c>zNz%Zz96Yj8T
zqqm%Qqe!LHu+u;Fq{lpIohco$IUIG+UQdA=?J<o)!`=SO`@JgEl0u@;9#0xBu>p~;
z)xi4aeA7R2`wI++RT?(hfhX;E+O*Q7uD0#w?D6g(=nj>7dRn%cb*)*YWoM9uhV`;^
zWT}nzqlJOudp;gZH4W{z;?1UYEcoC4k6XOk9ve)AUB<8beH%rZwz$C_b27)==1z&$
zMUMY2!hll_>#0SG&~YX1G3Cbd3Qa82l$f<4DABVvT4$$g%><mP&6@K@4V6uH+N2>@
zc*560|5d3kr2(~NrJhGU=#W$_S4uQxKIB;+vhBS7HPJR}(!jj4R=mpQ@timcUW)B<
zqqfqlu2gQpDFtE!v@c>I<boESKI<W+BlgLpqA<Lx^hNH}@Xx*R1-eBOLv*bdDJ^)w
z!{$tAn6_EvYI8a&T|*0E-||V1m_*@fn=V3Fd08%W+}C{E9peGVNQxa*gF;7N;Z8q!
zp1&%Ep<dXRh~$>d8_HxFTDn#gwrK`o?5u};(I=#)!-~k;y~ngX6g?^%-0*!=ikCE?
zw&E}RiWP}kq6~_hz+VcnTIF-z875q7%0m&R1C=TST&V~TGn8m)iPcJlgFfmrS`xHP
z8#<{{g~{4z-taGc&`cQM#upw!Oa9nrt*S$jiZ#aJGm>LVr2dD)epxrD45P~?LAx6j
zzA_j#kn5;L8Y-0u5BMElm55D9L<Vw+L?I6|gh=8}LoFNpq}Q0aa03dDxJy?d4`+T(
z+o{4xDb@64xy|2I)S^%q){IySy2^wq__Nlq>`$a-#4?n6Xp59`#aMlP#$IgIcf=+P
zt#^~g%NY>K2-B}RVE9`2RBD+7h4t?LuA(-A)H;Y)QIO(CW4{JUkwoFRGn#6#mRcb<
zl!(<*NmyO06eiRn^ZqL`9VdLiuiGMdITWf<O2#I{AxuVm=o}gqL1r<Q%FijOYv#t`
ziz$>Uk+wyD;ENJ1nOZ)sFQq7qo}%$W&6-KI!dV-A!+-MAu6t<%V!PewiSdo=kcLrs
z$SO?VbCt+Fre9Fh&i6wlI&U5p$wcNo;!a<+USb#mED!3&ghZknJd*1Nza*iD>p1Oq
zl@7nO0f`w~eLI}=+Vp)C!RMyGu~;hg8=mzWFVX;x9^Lp;!w~QL{E25p3PWWGqCCLD
z$jp{ZCQ(QgVHz~L&We^j?sDf#8&KNo|4Kr$QjTTy5h5i)VjqfRYLPp{{*~8%&seYy
zNu31$jXvM=W%Dw_P@j{KDX~-`Qd`o}QfuitZ79}ID@95x`e9W5eSc26&%@#Dt00`L
z<$>`s&01<lrk(UDSF67(kfQUlA`XW4J?5(pN+gCN&2W#Vc--@yV^<AL8=bLFPRNv6
z--PD(GoZHYUjNqfvH+P$sKILntetBTE}6--ls@9H4_S}aczm~(%8{N`#E$rHJ{^!J
z4g>F@DGfb+l~f{?p^`~7tPcTpPC%=z1_k^@`Ol|(&UeNMm`Xzkotw~%{!D@~qrqz>
zb+3<T+T>lXJ5RM39l~CJY6*+(lZ0?-nKW=pZB93&aWt;NX_(11tXK?OcNE0g7!O~B
z|9r)tx+e(eqYxT~y@w=RSf~smJs}wr;EsKs#cq`YVX3SR>EG~>{~Uyt%(T8rB9@yl
ztD&@P)iA8?WD3HuR0a~eEa;D!!01W7hYQtK-0tTwVW1o@PYToFB*eV&BiCVKd9J{v
zS}LU?><rc6Aktv$X#Cv}hXgLIGo|UQz2QijTACUfni?XBNwJ<oPKpCGkB}+--r)It
zpAjkb0?J1Lmxn=o8l_eeV0CTHMlf=;J2VVNM&VY8R2){qYnhfzOEO-}$(=M*SSQxA
zq$v?=X@}5_4K&3{1C2269|S&j-r27@>JguHuc`4y+^8OmerJlnZ`Nj9YbaEWn-yV{
z6a_p<#hNC>YDIwGkuiPom{H{lu?cNmXDuisYK6i0Df08)Ed*{B_QS>+=y%-a!zx{U
zwRF75lqwZ6S<peNF{vAwaIQA26)hoC*8V>VH?2gn(AF1fjj$3m3Ytt)S7q8jE>i1D
zv_n8fYMG8<7;GhhTb(DPf6>PkVb61f0{J*)gk%!Pa2%pH4jg?TSLh*;hWJh-VVb!R
zAYg3~GtyE?w8C|ALw#*+g@)}8TTlhe$yHJfL$#)kK~SfnF-jSF#F7PHwqF*o`5d}L
zVI^h|T8uRj@%#{4%ZoA$o05>UnZ|f)u~sNlR>gt(r4kKMkbBE8`6ScQJ8#@QLcvt6
zXEn4+YxF)nBXQDi`;<hjX%JkRi)50Jrcv1Vj9xIYT8qcQxWYCJ6$-uJ;4Fx}Bb|Cg
z5Y{Hlqo$@1S+*K#?7%vWz^#TM{zs&K5H<rAkgAnydqy9@f_uXQmSJ2`pGV&+Jq@Ww
zNX%RvTrWg*6&CV`Xau;;L%7u@0^i9(1JuwE>4k=;XBhrBcUEFuAlECBur!#5hN#lC
zMb|-<B%olvHW`X^^g@;=FCYt5K=v%8%Se|?f@_oDgIGtZv}_po{;1$LP3XuBLp_Pk
zV?%WS>z-63(UR!epl#rJM>N7fTsVTG-sT;S`aQ$IQA?HdY6B|<`oZbRSYs=~ZPyx$
zBruaS6sbxhbgz}#FhqPAATbRwpN4ZE=|Q6%#WG-frV?vwgoVINLqjE(=mt4p6v!hs
z+_ps#(zy(tNmt}5Eu~T#5F(dLH6-CpaZn#dHyuIPTFYI9YTFZQ>q?zPtT7%v^<_b^
zn+OtDE?1h;3B6esI<8u2Sz#d7a8@2BaI2_vJnQooWhM*_MH*6RKb%$>kf8{kC<9cT
z+oc+YBpi){s<Ek2C@5J-xNhjJvakZ4OJq7);a}q5xk+8QGLVP0dNE=-qw`Hd(^RN6
z&FQ<t2AdrZhY}+#qycN9G3K1xxXnT?Bq6kN{jnx7N~20ctqQ%<s4f(i4Fivjm4-^~
zu$C$43?qUudf1*K%$(~$+jEg_z@akuuPM<nAvFlcSt_KJ0Rb5VQdUV!sK&kUsAxAs
z&zh^ma(SqOnZjx)XruIPn6PRPVtzFC=!;ZZLCL7m3z(DyNnL0;mz~Cx$YR*P79fC3
zrMAVSc}pYuzEMl2Ffa%;FOr80AB`JE>+-Q&q9NDQACrc7ObX&4D3*a@HTB0D(x_Mt
z4Yf3+CN$($45c<%?<##~owTS9bIFkol?RZH1L9@cW^`0C1AWV4X-8W_9^!qZ*Hrp?
z<E7$S7P7t(HW_M3NYYW1kG{LQMkUff{Tjg^Bq6E`i%9L%l*`euL8hw_is2|UGD}uK
zOFG7^M5bx8X{YtVcMxjnFd$B>6{tWSxOOwRHV(6~3Ats>5RtJ$Un$lWsjV1jYDm?A
zO*TS~w6#NJA1QOOz9`IRrk%DByjR*`!d{2R`(Tx(j)l<pjDl&MS!XOcqm;=<$5jV_
zjKavd4jcY?Xd>%z13zlPJK+l^ark;e6x#9lJUv+`WS#I`4l)y=Qz!zI#(Gw)hDtu6
z)VFF;CKKtHQCLz~Z&DH_5~r*<;<!bbwnCbO(i8;(Hew&O%D^D30FUChuPwEpscF@c
zp>>jQwxiAGC@9cLFh%Hhm!v8UEs<1j+@a;pgvr}zfBme|VyMZrjt!RV7whQCrCL(Y
h*l*ELOIs!O{{eB;ujK1ZN#y_l002ovPDHLkV1gaL%vk^c

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/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.20.1


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

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-14  3:59 Lorenzo Bivens
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 [this message]
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=CO1PR17MB51775BC0410BA2836C4AA578B6FF9@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).