Released version 2.8
git-svn-id: https://shellinabox.googlecode.com/svn/trunk@121 0da03de8-d603-11dd-86c2-0f8696b7b6f9
This commit is contained in:
parent
60b5f38d74
commit
adadddf91c
12 changed files with 127 additions and 91 deletions
|
@ -1,3 +1,7 @@
|
|||
2009-05-23 Markus Gutschke <markus@shellinabox.com>
|
||||
|
||||
* Released version 2.8
|
||||
|
||||
2009-05-22 Markus Gutschke <markus@shellinabox.com>
|
||||
|
||||
* Improved support for entering non-ASCII characters.
|
||||
|
|
8
config.h
8
config.h
|
@ -117,22 +117,22 @@
|
|||
#define PACKAGE_NAME "shellinabox"
|
||||
|
||||
/* Define to the full name and version of this package. */
|
||||
#define PACKAGE_STRING "shellinabox 2.7"
|
||||
#define PACKAGE_STRING "shellinabox 2.8"
|
||||
|
||||
/* Define to the one symbol short name of this package. */
|
||||
#define PACKAGE_TARNAME "shellinabox"
|
||||
|
||||
/* Define to the version of this package. */
|
||||
#define PACKAGE_VERSION "2.7"
|
||||
#define PACKAGE_VERSION "2.8"
|
||||
|
||||
/* Define to 1 if you have the ANSI C header files. */
|
||||
#define STDC_HEADERS 1
|
||||
|
||||
/* Most recent revision number in the version control system */
|
||||
#define VCS_REVISION "120"
|
||||
#define VCS_REVISION "121"
|
||||
|
||||
/* Version number of package */
|
||||
#define VERSION "2.7"
|
||||
#define VERSION "2.8"
|
||||
|
||||
/* Define to empty if `const' does not conform to ANSI C. */
|
||||
/* #undef const */
|
||||
|
|
22
configure
vendored
22
configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.63 for shellinabox 2.7.
|
||||
# Generated by GNU Autoconf 2.63 for shellinabox 2.8.
|
||||
#
|
||||
# Report bugs to <markus@shellinabox.com>.
|
||||
#
|
||||
|
@ -745,8 +745,8 @@ SHELL=${CONFIG_SHELL-/bin/sh}
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='shellinabox'
|
||||
PACKAGE_TARNAME='shellinabox'
|
||||
PACKAGE_VERSION='2.7'
|
||||
PACKAGE_STRING='shellinabox 2.7'
|
||||
PACKAGE_VERSION='2.8'
|
||||
PACKAGE_STRING='shellinabox 2.8'
|
||||
PACKAGE_BUGREPORT='markus@shellinabox.com'
|
||||
|
||||
ac_c_werror_flag=
|
||||
|
@ -1469,7 +1469,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures shellinabox 2.7 to adapt to many kinds of systems.
|
||||
\`configure' configures shellinabox 2.8 to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1539,7 +1539,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of shellinabox 2.7:";;
|
||||
short | recursive ) echo "Configuration of shellinabox 2.8:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1655,7 +1655,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
shellinabox configure 2.7
|
||||
shellinabox configure 2.8
|
||||
generated by GNU Autoconf 2.63
|
||||
|
||||
Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001,
|
||||
|
@ -1669,7 +1669,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by shellinabox $as_me 2.7, which was
|
||||
It was created by shellinabox $as_me 2.8, which was
|
||||
generated by GNU Autoconf 2.63. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -2037,7 +2037,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
|
|||
ac_compiler_gnu=$ac_cv_c_compiler_gnu
|
||||
|
||||
|
||||
VCS_REVISION=120
|
||||
VCS_REVISION=121
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -2394,7 +2394,7 @@ fi
|
|||
|
||||
# Define the identity of the package.
|
||||
PACKAGE='shellinabox'
|
||||
VERSION='2.7'
|
||||
VERSION='2.8'
|
||||
|
||||
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
|
@ -13592,7 +13592,7 @@ exec 6>&1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by shellinabox $as_me 2.7, which was
|
||||
This file was extended by shellinabox $as_me 2.8, which was
|
||||
generated by GNU Autoconf 2.63. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -13655,7 +13655,7 @@ Report bugs to <bug-autoconf@gnu.org>."
|
|||
_ACEOF
|
||||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_version="\\
|
||||
shellinabox config.status 2.7
|
||||
shellinabox config.status 2.8
|
||||
configured by $0, generated by GNU Autoconf 2.63,
|
||||
with options \\"`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`\\"
|
||||
|
||||
|
|
|
@ -1,8 +1,8 @@
|
|||
AC_PREREQ(2.57)
|
||||
|
||||
dnl This is the one location where the authoritative version number is stored
|
||||
AC_INIT(shellinabox, 2.7, markus@shellinabox.com)
|
||||
VCS_REVISION=120
|
||||
AC_INIT(shellinabox, 2.8, markus@shellinabox.com)
|
||||
VCS_REVISION=121
|
||||
AC_SUBST(VCS_REVISION)
|
||||
AC_DEFINE_UNQUOTED(VCS_REVISION, "${VCS_REVISION}",
|
||||
[Most recent revision number in the version control system])
|
||||
|
|
6
debian/changelog
vendored
6
debian/changelog
vendored
|
@ -1,3 +1,9 @@
|
|||
shellinabox (2.8-1) unstable; urgency=low
|
||||
|
||||
* New upstream release, version 2.8.
|
||||
|
||||
-- Markus Gutschke <markus@shellinabox.com> Sat, 23 May 2009 11:53:13 -0800
|
||||
|
||||
shellinabox (2.7-1) unstable; urgency=low
|
||||
|
||||
* New upstream release, version 2.7.
|
||||
|
|
81
demo/demo.js
81
demo/demo.js
|
@ -89,32 +89,17 @@ function Demo(container) {
|
|||
extend(Demo, VT100);
|
||||
|
||||
Demo.prototype.keysPressed = function(ch) {
|
||||
for (var i = 0; i < ch.length; i++) {
|
||||
var c = ch.charCodeAt(i);
|
||||
if (c == 3) {
|
||||
if (this.state == 5 /* STATE_EXEC */) {
|
||||
if (this.state == 5 /* STATE_EXEC */) {
|
||||
for (var i = 0; i < ch.length; i++) {
|
||||
var c = ch.charAt(i);
|
||||
if (c == '\u0003') {
|
||||
this.keys = '';
|
||||
this.error('Interrupted');
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (c < 128) {
|
||||
this.keys += String.fromCharCode(c);
|
||||
} else if (c < 0x800) {
|
||||
this.keys += String.fromCharCode(0xC0 + (c >> 6) ) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
} else if (c < 0x10000) {
|
||||
this.keys += String.fromCharCode(0xE0 + (c >> 12) ) +
|
||||
String.fromCharCode(0x80 + ((c >> 6) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
} else if (c < 0x110000) {
|
||||
this.keys += String.fromCharCode(0xF0 + (c >> 18) ) +
|
||||
String.fromCharCode(0x80 + ((c >> 12) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ((c >> 6) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
}
|
||||
}
|
||||
}
|
||||
this.keys += ch;
|
||||
this.gotoState(this.state);
|
||||
};
|
||||
|
||||
|
@ -175,10 +160,10 @@ Demo.prototype.error = function(msg) {
|
|||
if (msg == undefined) {
|
||||
msg = 'Syntax Error';
|
||||
}
|
||||
this.vt100((this.cursorX != 0 ? '\r\n' : '') + '\u0007? ' + msg +
|
||||
(this.currentLineIndex >= 0 ?
|
||||
' in line ' + this.program[this.evalLineIndex].lineNumber() :
|
||||
'') + '\r\n');
|
||||
this.printUnicode((this.cursorX != 0 ? '\r\n' : '') + '\u0007? ' + msg +
|
||||
(this.currentLineIndex >= 0 ? ' in line ' +
|
||||
this.program[this.evalLineIndex].lineNumber() :
|
||||
'') + '\r\n');
|
||||
this.gotoState(2 /* STATE_PROMPT */);
|
||||
this.currentLineIndex = -1;
|
||||
this.evalLineIndex = -1;
|
||||
|
@ -188,7 +173,7 @@ Demo.prototype.error = function(msg) {
|
|||
Demo.prototype.doInit = function() {
|
||||
this.vars = new Object();
|
||||
this.program = new Array();
|
||||
this.vt100(
|
||||
this.printUnicode(
|
||||
'\u001Bc\u001B[34;4m' +
|
||||
'ShellInABox Demo Script\u001B[24;31m\r\n' +
|
||||
'\r\n' +
|
||||
|
@ -215,20 +200,39 @@ Demo.prototype.doPrompt = function() {
|
|||
return false;
|
||||
};
|
||||
|
||||
Demo.prototype.printUnicode = function(s) {
|
||||
var out = '';
|
||||
for (var i = 0; i < s.length; i++) {
|
||||
var c = s.charAt(i);
|
||||
if (c < '\x0080') {
|
||||
out += c;
|
||||
} else {
|
||||
var c = s.charCodeAt(i);
|
||||
if (c < 0x800) {
|
||||
out += String.fromCharCode(0xC0 + (c >> 6) ) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
} else if (c < 0x10000) {
|
||||
out += String.fromCharCode(0xE0 + (c >> 12) ) +
|
||||
String.fromCharCode(0x80 + ((c >> 6) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
} else if (c < 0x110000) {
|
||||
out += String.fromCharCode(0xF0 + (c >> 18) ) +
|
||||
String.fromCharCode(0x80 + ((c >> 12) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ((c >> 6) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
}
|
||||
}
|
||||
}
|
||||
this.vt100(out);
|
||||
};
|
||||
|
||||
Demo.prototype.doReadLine = function() {
|
||||
this.gotoState(3 /* STATE_READLINE */);
|
||||
var keys = this.keys;
|
||||
this.keys = '';
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var ch = keys.charAt(i);
|
||||
if (ch >= ' ') {
|
||||
this.line += ch;
|
||||
this.vt100(ch);
|
||||
} else if (ch == '\r' || ch == '\n') {
|
||||
this.vt100('\r\n');
|
||||
this.gotoState(4 /* STATE_COMMAND */);
|
||||
return false;
|
||||
} else if (ch == '\u0008' || ch == '\u007F') {
|
||||
if (ch == '\u0008' || ch == '\u007F') {
|
||||
if (this.line.length > 0) {
|
||||
this.line = this.line.substr(0, this.line.length - 1);
|
||||
if (this.cursorX == 0) {
|
||||
|
@ -243,6 +247,13 @@ Demo.prototype.doReadLine = function() {
|
|||
} else {
|
||||
this.vt100('\u0007');
|
||||
}
|
||||
} else if (ch >= ' ') {
|
||||
this.line += ch;
|
||||
this.printUnicode(ch);
|
||||
} else if (ch == '\r' || ch == '\n') {
|
||||
this.vt100('\r\n');
|
||||
this.gotoState(4 /* STATE_COMMAND */);
|
||||
return false;
|
||||
} else if (ch == '\u001B') {
|
||||
// This was probably a function key. Just eat all of the following keys.
|
||||
break;
|
||||
|
@ -592,7 +603,7 @@ Demo.prototype.doList = function() {
|
|||
token = 'PRINT';
|
||||
// fall thru
|
||||
default:
|
||||
this.vt100((id ? ' ' : '') + token);
|
||||
this.printUnicode((id ? ' ' : '') + token);
|
||||
space = false;
|
||||
id = true;
|
||||
break;
|
||||
|
@ -621,7 +632,7 @@ Demo.prototype.doPrint = function() {
|
|||
if (value == undefined) {
|
||||
return;
|
||||
}
|
||||
this.vt100(value.toString());
|
||||
this.printUnicode(value.toString());
|
||||
}
|
||||
}
|
||||
if (last != ';') {
|
||||
|
|
|
@ -89,32 +89,17 @@ function Demo(container) {
|
|||
extend(Demo, VT100);
|
||||
|
||||
Demo.prototype.keysPressed = function(ch) {
|
||||
for (var i = 0; i < ch.length; i++) {
|
||||
var c = ch.charCodeAt(i);
|
||||
if (c == 3) {
|
||||
if (this.state == STATE_EXEC) {
|
||||
if (this.state == STATE_EXEC) {
|
||||
for (var i = 0; i < ch.length; i++) {
|
||||
var c = ch.charAt(i);
|
||||
if (c == '\u0003') {
|
||||
this.keys = '';
|
||||
this.error('Interrupted');
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
if (c < 128) {
|
||||
this.keys += String.fromCharCode(c);
|
||||
} else if (c < 0x800) {
|
||||
this.keys += String.fromCharCode(0xC0 + (c >> 6) ) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
} else if (c < 0x10000) {
|
||||
this.keys += String.fromCharCode(0xE0 + (c >> 12) ) +
|
||||
String.fromCharCode(0x80 + ((c >> 6) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
} else if (c < 0x110000) {
|
||||
this.keys += String.fromCharCode(0xF0 + (c >> 18) ) +
|
||||
String.fromCharCode(0x80 + ((c >> 12) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ((c >> 6) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
}
|
||||
}
|
||||
}
|
||||
this.keys += ch;
|
||||
this.gotoState(this.state);
|
||||
};
|
||||
|
||||
|
@ -175,10 +160,10 @@ Demo.prototype.error = function(msg) {
|
|||
if (msg == undefined) {
|
||||
msg = 'Syntax Error';
|
||||
}
|
||||
this.vt100((this.cursorX != 0 ? '\r\n' : '') + '\u0007? ' + msg +
|
||||
(this.currentLineIndex >= 0 ?
|
||||
' in line ' + this.program[this.evalLineIndex].lineNumber() :
|
||||
'') + '\r\n');
|
||||
this.printUnicode((this.cursorX != 0 ? '\r\n' : '') + '\u0007? ' + msg +
|
||||
(this.currentLineIndex >= 0 ? ' in line ' +
|
||||
this.program[this.evalLineIndex].lineNumber() :
|
||||
'') + '\r\n');
|
||||
this.gotoState(STATE_PROMPT);
|
||||
this.currentLineIndex = -1;
|
||||
this.evalLineIndex = -1;
|
||||
|
@ -188,7 +173,7 @@ Demo.prototype.error = function(msg) {
|
|||
Demo.prototype.doInit = function() {
|
||||
this.vars = new Object();
|
||||
this.program = new Array();
|
||||
this.vt100(
|
||||
this.printUnicode(
|
||||
'\u001Bc\u001B[34;4m' +
|
||||
'ShellInABox Demo Script\u001B[24;31m\r\n' +
|
||||
'\r\n' +
|
||||
|
@ -215,20 +200,39 @@ Demo.prototype.doPrompt = function() {
|
|||
return false;
|
||||
};
|
||||
|
||||
Demo.prototype.printUnicode = function(s) {
|
||||
var out = '';
|
||||
for (var i = 0; i < s.length; i++) {
|
||||
var c = s.charAt(i);
|
||||
if (c < '\x0080') {
|
||||
out += c;
|
||||
} else {
|
||||
var c = s.charCodeAt(i);
|
||||
if (c < 0x800) {
|
||||
out += String.fromCharCode(0xC0 + (c >> 6) ) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
} else if (c < 0x10000) {
|
||||
out += String.fromCharCode(0xE0 + (c >> 12) ) +
|
||||
String.fromCharCode(0x80 + ((c >> 6) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
} else if (c < 0x110000) {
|
||||
out += String.fromCharCode(0xF0 + (c >> 18) ) +
|
||||
String.fromCharCode(0x80 + ((c >> 12) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ((c >> 6) & 0x3F)) +
|
||||
String.fromCharCode(0x80 + ( c & 0x3F));
|
||||
}
|
||||
}
|
||||
}
|
||||
this.vt100(out);
|
||||
};
|
||||
|
||||
Demo.prototype.doReadLine = function() {
|
||||
this.gotoState(STATE_READLINE);
|
||||
var keys = this.keys;
|
||||
this.keys = '';
|
||||
for (var i = 0; i < keys.length; i++) {
|
||||
var ch = keys.charAt(i);
|
||||
if (ch >= ' ') {
|
||||
this.line += ch;
|
||||
this.vt100(ch);
|
||||
} else if (ch == '\r' || ch == '\n') {
|
||||
this.vt100('\r\n');
|
||||
this.gotoState(STATE_COMMAND);
|
||||
return false;
|
||||
} else if (ch == '\u0008' || ch == '\u007F') {
|
||||
if (ch == '\u0008' || ch == '\u007F') {
|
||||
if (this.line.length > 0) {
|
||||
this.line = this.line.substr(0, this.line.length - 1);
|
||||
if (this.cursorX == 0) {
|
||||
|
@ -243,6 +247,13 @@ Demo.prototype.doReadLine = function() {
|
|||
} else {
|
||||
this.vt100('\u0007');
|
||||
}
|
||||
} else if (ch >= ' ') {
|
||||
this.line += ch;
|
||||
this.printUnicode(ch);
|
||||
} else if (ch == '\r' || ch == '\n') {
|
||||
this.vt100('\r\n');
|
||||
this.gotoState(STATE_COMMAND);
|
||||
return false;
|
||||
} else if (ch == '\u001B') {
|
||||
// This was probably a function key. Just eat all of the following keys.
|
||||
break;
|
||||
|
@ -592,7 +603,7 @@ Demo.prototype.doList = function() {
|
|||
token = 'PRINT';
|
||||
// fall thru
|
||||
default:
|
||||
this.vt100((id ? ' ' : '') + token);
|
||||
this.printUnicode((id ? ' ' : '') + token);
|
||||
space = false;
|
||||
id = true;
|
||||
break;
|
||||
|
@ -621,7 +632,7 @@ Demo.prototype.doPrint = function() {
|
|||
if (value == undefined) {
|
||||
return;
|
||||
}
|
||||
this.vt100(value.toString());
|
||||
this.printUnicode(value.toString());
|
||||
}
|
||||
}
|
||||
if (last != ';') {
|
||||
|
|
|
@ -1500,7 +1500,7 @@ VT100.prototype.toggleBell = function() {
|
|||
};
|
||||
|
||||
VT100.prototype.about = function() {
|
||||
alert("VT100 Terminal Emulator " + "2.7 (revision 120)" +
|
||||
alert("VT100 Terminal Emulator " + "2.8 (revision 121)" +
|
||||
"\nCopyright 2008-2009 by Markus Gutschke\n" +
|
||||
"For more information check http://shellinabox.com");
|
||||
};
|
||||
|
|
|
@ -59,6 +59,10 @@
|
|||
#include "libhttp/server.h"
|
||||
#include "logging/logging.h"
|
||||
|
||||
#ifdef HAVE_STRLCAT
|
||||
#define strncat(a,b,c) ({ char *_a = (a); strlcat(_a, (b), (c)+1); _a; })
|
||||
#endif
|
||||
|
||||
static int externalFileHttpHandler(HttpConnection *http, void *arg,
|
||||
const char *buf, int len) {
|
||||
checkGraveyard();
|
||||
|
|
|
@ -576,7 +576,7 @@ void closeAllFds(int *exceptFds, int num) {
|
|||
}
|
||||
}
|
||||
|
||||
#if !defined(HAVE_PTSNAME_R) && 0
|
||||
#if !defined(HAVE_OPENPTY) && !defined(HAVE_PTSNAME_R)
|
||||
static int ptsname_r(int fd, char *buf, size_t buflen) {
|
||||
// It is unfortunate that ptsname_r is not universally available.
|
||||
// For the time being, this is not a big problem, as ShellInABox is
|
||||
|
|
|
@ -355,7 +355,7 @@ ShellInABox.prototype.extendContextMenu = function(entries, actions) {
|
|||
};
|
||||
|
||||
ShellInABox.prototype.about = function() {
|
||||
alert("Shell In A Box version " + "2.7 (revision 120)" +
|
||||
alert("Shell In A Box version " + "2.8 (revision 121)" +
|
||||
"\nCopyright 2008-2009 by Markus Gutschke\n" +
|
||||
"For more information check http://shellinabox.com" +
|
||||
(typeof serverSupportsSSL != 'undefined' && serverSupportsSSL ?
|
||||
|
|
|
@ -1500,7 +1500,7 @@ VT100.prototype.toggleBell = function() {
|
|||
};
|
||||
|
||||
VT100.prototype.about = function() {
|
||||
alert("VT100 Terminal Emulator " + "2.7 (revision 120)" +
|
||||
alert("VT100 Terminal Emulator " + "2.8 (revision 121)" +
|
||||
"\nCopyright 2008-2009 by Markus Gutschke\n" +
|
||||
"For more information check http://shellinabox.com");
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue