diff --git a/src/servers/app/drawing/html5/haiku.js b/src/servers/app/drawing/html5/haiku.js
index 8c7b808efd..bf272ae096 100644
--- a/src/servers/app/drawing/html5/haiku.js
+++ b/src/servers/app/drawing/html5/haiku.js
@@ -12,6 +12,92 @@
var logDiv;
var desktop; // the canvas
+var b64Values = new Array(
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
+ -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,
+ 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -2, -1, -1,
+ -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,
+ -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,
+ 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);
+
+//DEBUG
+var stream={s:"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==",i:0};
+var stream2={s:"YWJjZAYWIYQVQqgqlUVaoVaqqVQqlVVqg",i:0};
+
+
+function b64_get_u32_(t, i)
+{
+ var v = 0;
+ if (b64Values[t.charCodeAt(i)] < 0) return v;
+ v += b64Values[t.charCodeAt(i++)] << 26;
+ if (b64Values[t.charCodeAt(i)] < 0) return v;
+ v += b64Values[t.charCodeAt(i++)] << 20;
+ if (b64Values[t.charCodeAt(i)] < 0) return v;
+ v += b64Values[t.charCodeAt(i++)] << 14;
+ if (b64Values[t.charCodeAt(i)] < 0) return v;
+ v += b64Values[t.charCodeAt(i++)] << 8;
+ if (b64Values[t.charCodeAt(i)] < 0) return v;
+ v += b64Values[t.charCodeAt(i++)] << 2;
+ if (b64Values[t.charCodeAt(i)] < 0) return v;
+ v += b64Values[t.charCodeAt(i++)] >> 4;
+ if (b64Values[t.charCodeAt(i)] < 0) i++;
+ if (b64Values[t.charCodeAt(i)] < 0) i++;
+ dbg("u32:" + v + " 0x" + v.toString(16));
+ return v;
+}
+
+
+function b64_get_u8(s)
+{
+ var v = 0;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] << 2;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] >> 4;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
+ dbg(" u8:" + v + " 0x" + v.toString(16));
+ return v;
+}
+
+function b64_get_u16(s)
+{
+ var v = 0;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] << 10;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] << 4;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] >> 2;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
+ dbg("u16:" + v + " 0x" + v.toString(16));
+ return v;
+}
+
+function b64_get_u32(s)
+{
+ var v = 0;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] << 26;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] << 20;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] << 14;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] << 8;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] << 2;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;
+ v += b64Values[s.s.charCodeAt(s.i++)] >> 4;
+ //v &= 0x0ffffffff;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
+ if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;
+ dbg("u32:" + v + " 0x" + v.toString(16));
+ return v;
+}
+
function dbg(str)
{
var div = document.createElement("div");
@@ -45,9 +131,61 @@ window.popup("plop");
dbg(message.target.responseText);
}
+function decodeCanvasMessage(msg)
+{
+ dbg("decodeCanvasMessage()");
+ var code = b64_get_u16(msg);
+ dbg("code: " + code);
+/* switch (code) {
+ //case 1:
+ //break;
+ default:
+ dbg("unhandled code " + code);
+ return;
+ }*/
+}
+
+function onReadyStateChange()
+{
+ dbg("readystate changed: " + this.readyState);
+ if (this.readyState != 4)
+ return;
+ dbg("status: " + this.status);
+ dbg("resonseType: " + this.responseType);
+ dbg("response: " + this.responseText);
+ //dbg("headers: " + this.getAllResponseHeaders());
+//var stream={s:"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==",i:0};
+ var msg = {s:(this.responseText),i:0};
+ decodeCanvasMessage(msg);
+}
+
+//DEBUG
+function testB64(stream)
+{
+ var i = 0;
+ b64_get_u32(stream);
+ b64_get_u16(stream);
+ b64_get_u8(stream);
+ b64_get_u8(stream);
+ b64_get_u8(stream);
+ b64_get_u16(stream);
+ b64_get_u16(stream);
+ b64_get_u32(stream);
+ b64_get_u32(stream);
+ dbg("s.i:"+stream.i);
+}
+
function initDesktop()
{
dbg("initDesktop()");
+
+ //testB64(stream);
+ //testB64(stream2);
+
+//var stream={s:"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==",i:0};
+ var msg = {s:"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==",i:0};
+ decodeCanvasMessage(stream);
+
desktop = document.getElementById("desktop");
var xhr = createXHR();
if (xhr) {
@@ -65,20 +203,11 @@ function initDesktop()
dbg("multipart: " + xhr.multipart);
xhr.open("GET", "http://127.0.0.1:8080/output", true);
//xhr.onload = onMessage;
- xhr.onreadystatechange = function() {
- dbg("readystate changed: " + xhr.readyState);
- if (xhr.readyState != 4)
- return;
- dbg("status: " + xhr.status);
- dbg("resonseType: " + xhr.responseType);
- dbg("response: " + xhr.responseText);
- dbg("headers: " + xhr.getAllResponseHeaders());
-
- }
+ xhr.onreadystatechange = onReadyStateChange;
//xhr.responseType = "arraybuffer";
//dbg("xhr.onload:" + xhr.onload);
//dbg("xhr.send:" + xhr.send);
- xhr.overrideMimeType("multipart/x-mixed-replace;boundary=x");
+ //xhr.overrideMimeType("multipart/x-mixed-replace;boundary=x");
xhr.send(null);
//dbg("headers: " + xhr.getAllResponseHeaders());
} else
diff --git a/src/servers/app/drawing/html5/haiku.js.h b/src/servers/app/drawing/html5/haiku.js.h
index 18e8abf065..3c720f0594 100644
--- a/src/servers/app/drawing/html5/haiku.js.h
+++ b/src/servers/app/drawing/html5/haiku.js.h
@@ -13,6 +13,92 @@ static const char haiku_js[] =
"var logDiv;\n"
"var desktop; // the canvas\n"
"\n"
+ "var b64Values = new Array(\n"
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n"
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,\n"
+ " -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 62, -1, -1, -1, 63,\n"
+ " 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, -2, -1, -1,\n"
+ " -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,\n"
+ " 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1,\n"
+ " -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40,\n"
+ " 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, -1, -1, -1, -1, -1);\n"
+ "\n"
+ "//DEBUG\n"
+ "var stream={s:\"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==\",i:0};\n"
+ "var stream2={s:\"YWJjZAYWIYQVQqgqlUVaoVaqqVQqlVVqg\",i:0};\n"
+ "\n"
+ "\n"
+ "function b64_get_u32_(t, i)\n"
+ "{\n"
+ " var v = 0;\n"
+ " if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
+ " v += b64Values[t.charCodeAt(i++)] << 26;\n"
+ " if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
+ " v += b64Values[t.charCodeAt(i++)] << 20;\n"
+ " if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
+ " v += b64Values[t.charCodeAt(i++)] << 14;\n"
+ " if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
+ " v += b64Values[t.charCodeAt(i++)] << 8;\n"
+ " if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
+ " v += b64Values[t.charCodeAt(i++)] << 2;\n"
+ " if (b64Values[t.charCodeAt(i)] < 0) return v;\n"
+ " v += b64Values[t.charCodeAt(i++)] >> 4;\n"
+ " if (b64Values[t.charCodeAt(i)] < 0) i++;\n"
+ " if (b64Values[t.charCodeAt(i)] < 0) i++;\n"
+ " dbg(\"u32:\" + v + \" 0x\" + v.toString(16));\n"
+ " return v;\n"
+ "}\n"
+ "\n"
+ "\n"
+ "function b64_get_u8(s)\n"
+ "{\n"
+ " var v = 0;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] << 2;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] >> 4;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
+ " dbg(\" u8:\" + v + \" 0x\" + v.toString(16));\n"
+ " return v;\n"
+ "}\n"
+ "\n"
+ "function b64_get_u16(s)\n"
+ "{\n"
+ " var v = 0;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] << 10;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] << 4;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] >> 2;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
+ " dbg(\"u16:\" + v + \" 0x\" + v.toString(16));\n"
+ " return v;\n"
+ "}\n"
+ "\n"
+ "function b64_get_u32(s)\n"
+ "{\n"
+ " var v = 0;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] << 26;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] << 20;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] << 14;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] << 8;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] << 2;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) return v;\n"
+ " v += b64Values[s.s.charCodeAt(s.i++)] >> 4;\n"
+ " //v &= 0x0ffffffff;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
+ " if (b64Values[s.s.charCodeAt(s.i)] < 0) s.i++;\n"
+ " dbg(\"u32:\" + v + \" 0x\" + v.toString(16));\n"
+ " return v;\n"
+ "}\n"
+ "\n"
"function dbg(str)\n"
"{\n"
" var div = document.createElement(\"div\");\n"
@@ -46,9 +132,61 @@ static const char haiku_js[] =
" dbg(message.target.responseText);\n"
"}\n"
"\n"
+ "function decodeCanvasMessage(msg)\n"
+ "{\n"
+ " dbg(\"decodeCanvasMessage()\");\n"
+ " var code = b64_get_u16(msg);\n"
+ " dbg(\"code: \" + code);\n"
+ "/* switch (code) {\n"
+ " //case 1:\n"
+ " //break;\n"
+ " default:\n"
+ " dbg(\"unhandled code \" + code);\n"
+ " return;\n"
+ " }*/\n"
+ "}\n"
+ "\n"
+ "function onReadyStateChange()\n"
+ "{\n"
+ " dbg(\"readystate changed: \" + this.readyState);\n"
+ " if (this.readyState != 4)\n"
+ " return;\n"
+ " dbg(\"status: \" + this.status);\n"
+ " dbg(\"resonseType: \" + this.responseType);\n"
+ " dbg(\"response: \" + this.responseText);\n"
+ " //dbg(\"headers: \" + this.getAllResponseHeaders());\n"
+ "//var stream={s:\"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==\",i:0};\n"
+ " var msg = {s:(this.responseText),i:0};\n"
+ " decodeCanvasMessage(msg);\n"
+ "}\n"
+ "\n"
+ "//DEBUG\n"
+ "function testB64(stream)\n"
+ "{\n"
+ " var i = 0;\n"
+ " b64_get_u32(stream);\n"
+ " b64_get_u16(stream);\n"
+ " b64_get_u8(stream);\n"
+ " b64_get_u8(stream);\n"
+ " b64_get_u8(stream);\n"
+ " b64_get_u16(stream);\n"
+ " b64_get_u16(stream);\n"
+ " b64_get_u32(stream);\n"
+ " b64_get_u32(stream);\n"
+ " dbg(\"s.i:\"+stream.i);\n"
+ "}\n"
+ "\n"
"function initDesktop()\n"
"{\n"
" dbg(\"initDesktop()\");\n"
+ "\n"
+ " //testB64(stream);\n"
+ " //testB64(stream2);\n"
+ "\n"
+ "//var stream={s:\"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==\",i:0};\n"
+ " var msg = {s:\"YWJjZA==YWI=YQ==VQ==qg==qlU=Vao=VaqqVQ==qlVVqg==\",i:0};\n"
+ " decodeCanvasMessage(stream);\n"
+ "\n"
" desktop = document.getElementById(\"desktop\");\n"
" var xhr = createXHR();\n"
" if (xhr) {\n"
@@ -66,20 +204,11 @@ static const char haiku_js[] =
" dbg(\"multipart: \" + xhr.multipart);\n"
" xhr.open(\"GET\", \"http://127.0.0.1:8080/output\", true);\n"
" //xhr.onload = onMessage;\n"
- " xhr.onreadystatechange = function() {\n"
- " dbg(\"readystate changed: \" + xhr.readyState);\n"
- " if (xhr.readyState != 4)\n"
- " return;\n"
- " dbg(\"status: \" + xhr.status);\n"
- " dbg(\"resonseType: \" + xhr.responseType);\n"
- " dbg(\"response: \" + xhr.responseText);\n"
- " dbg(\"headers: \" + xhr.getAllResponseHeaders());\n"
- "\n"
- " }\n"
+ " xhr.onreadystatechange = onReadyStateChange;\n"
" //xhr.responseType = \"arraybuffer\";\n"
" //dbg(\"xhr.onload:\" + xhr.onload);\n"
" //dbg(\"xhr.send:\" + xhr.send);\n"
- " xhr.overrideMimeType(\"multipart/x-mixed-replace;boundary=x\");\n"
+ " //xhr.overrideMimeType(\"multipart/x-mixed-replace;boundary=x\");\n"
" xhr.send(null);\n"
" //dbg(\"headers: \" + xhr.getAllResponseHeaders());\n"
" } else\n"