Added transparent printing support. The development of this feature is sponsored by De Bortoli Wines Pty Limited and by Eternity Technologies.

git-svn-id: https://shellinabox.googlecode.com/svn/trunk@176 0da03de8-d603-11dd-86c2-0f8696b7b6f9
This commit is contained in:
zodiac 2009-08-20 08:16:28 +00:00
parent 9b8e3af162
commit 065ac9f0fb
16 changed files with 1575 additions and 534 deletions

View file

@ -1,3 +1,9 @@
2009-08-20 Markus Gutschke <markus@shellinabox.com>
* Added transparent printing support. The development of this
feature is sponsored by De Bortoli Wines Pty Limited and by
Eternity Technologies.
2009-08-19 Markus Gutschke <markus@shellinabox.com>
* Added a ${url} parameter that can be used in the service description.

View file

@ -28,6 +28,7 @@ EXTRA_DIST = demo/beep.wav \
demo/demo.xml \
demo/enabled.gif \
demo/styles.css \
demo/print-styles.css \
demo/vt100.js \
demo/usercss-0.css \
demo/usercss-1.css \
@ -94,6 +95,7 @@ shellinaboxd_SOURCES = shellinabox/shellinaboxd.c \
shellinabox/vt100.jspp \
shellinabox/shell_in_a_box.jspp \
shellinabox/styles.css \
shellinabox/print-styles.css \
shellinabox/enabled.gif \
shellinabox/favicon.ico \
shellinabox/beep.wav \
@ -117,10 +119,10 @@ renamesymbols = \
-e ':0' \
-e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
-e ':1' \
-e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
-e 's/\(=[^-_]*\)[-_]\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
-e 't1' \
-e 's/.\{53\}$$//' \
-e 's/[/.]/_/g' \
-e 's/[-/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
@ -134,6 +136,7 @@ ${top_srcdir}/demo/demo.js: ${top_srcdir}/demo/beep.wav \
${top_srcdir}/demo/demo.jspp \
${top_srcdir}/demo/favicon.ico \
${top_srcdir}/demo/styles.css \
${top_srcdir}/demo/print-styles.css \
${top_srcdir}/demo/vt100.js \
${top_srcdir}/demo/usercss-0.css \
${top_srcdir}/demo/usercss-1.css \
@ -156,6 +159,10 @@ ${top_srcdir}/demo/styles.css: ${top_srcdir}/shellinabox/styles.css
@rm -f "$@"
sed -e '/\[if DEFINES_COLORS\]/,/\[endif DEFINES_COLORS\]/d' "$<" >"$@"
${top_srcdir}/demo/print-styles.css: ${top_srcdir}/shellinabox/print-styles.css
@rm -f "$@"
ln "$<" "$@"
${top_srcdir}/demo/usercss-0.css: ${top_srcdir}/shellinabox/white-on-black.css
@rm -f "$@"
ln "$<" "$@"

View file

@ -1,8 +1,9 @@
# Makefile.in generated by automake 1.10.2 from Makefile.am.
# Makefile.in generated by automake 1.11 from Makefile.am.
# @configure_input@
# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
# 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation,
# Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -19,8 +20,9 @@
VPATH = @srcdir@
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
@ -51,6 +53,7 @@ am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libhttp_la_LIBADD =
am__objects_1 =
@ -68,7 +71,6 @@ liblogging_la_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
$(liblogging_la_LDFLAGS) $(LDFLAGS) -o $@
am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(man1dir)" \
"$(DESTDIR)$(docdir)"
binPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
PROGRAMS = $(bin_PROGRAMS)
am__dirstamp = $(am__leading_dot)dirstamp
am_shellinaboxd_OBJECTS = shellinaboxd.$(OBJEXT) \
@ -77,8 +79,10 @@ am_shellinaboxd_OBJECTS = shellinaboxd.$(OBJEXT) \
shellinabox/cgi_root.$(OBJEXT) shellinabox/root_page.$(OBJEXT) \
shellinabox/vt100.$(OBJEXT) \
shellinabox/shell_in_a_box.$(OBJEXT) \
shellinabox/styles.$(OBJEXT) shellinabox/enabled.$(OBJEXT) \
shellinabox/favicon.$(OBJEXT) shellinabox/beep.$(OBJEXT)
shellinabox/styles.$(OBJEXT) \
shellinabox/print-styles.$(OBJEXT) \
shellinabox/enabled.$(OBJEXT) shellinabox/favicon.$(OBJEXT) \
shellinabox/beep.$(OBJEXT)
shellinaboxd_OBJECTS = $(am_shellinaboxd_OBJECTS)
shellinaboxd_DEPENDENCIES = liblogging.la libhttp.la
shellinaboxd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
@ -87,6 +91,7 @@ shellinaboxd_LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) \
DEFAULT_INCLUDES = -I.@am__isrc@
depcomp = $(SHELL) $(top_srcdir)/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
@ -100,16 +105,30 @@ SOURCES = $(libhttp_la_SOURCES) $(liblogging_la_SOURCES) \
$(shellinaboxd_SOURCES)
DIST_SOURCES = $(libhttp_la_SOURCES) $(liblogging_la_SOURCES) \
$(shellinaboxd_SOURCES)
man1dir = $(mandir)/man1
NROFF = nroff
MANS = $(man_MANS)
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
dist_docDATA_INSTALL = $(INSTALL_DATA)
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
man1dir = $(mandir)/man1
NROFF = nroff
MANS = $(man_MANS)
DATA = $(dist_doc_DATA) $(noinst_DATA)
HEADERS = $(noinst_HEADERS)
ETAGS = etags
@ -118,9 +137,9 @@ DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
distdir = $(PACKAGE)-$(VERSION)
top_distdir = $(distdir)
am__remove_distdir = \
{ test ! -d $(distdir) \
|| { find $(distdir) -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr $(distdir); }; }
{ test ! -d "$(distdir)" \
|| { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
&& rm -fr "$(distdir)"; }; }
DIST_ARCHIVES = $(distdir).tar.gz
GZIP_ENV = --best
distuninstallcheck_listfiles = find . -type f -print
@ -268,6 +287,7 @@ EXTRA_DIST = demo/beep.wav \
demo/demo.xml \
demo/enabled.gif \
demo/styles.css \
demo/print-styles.css \
demo/vt100.js \
demo/usercss-0.css \
demo/usercss-1.css \
@ -338,6 +358,7 @@ shellinaboxd_SOURCES = shellinabox/shellinaboxd.c \
shellinabox/vt100.jspp \
shellinabox/shell_in_a_box.jspp \
shellinabox/styles.css \
shellinabox/print-styles.css \
shellinabox/enabled.gif \
shellinabox/favicon.ico \
shellinabox/beep.wav \
@ -362,10 +383,10 @@ renamesymbols = \
-e ':0' \
-e 's/$$/aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ/' \
-e ':1' \
-e 's/\(=[^_]*\)_\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
-e 's/\(=[^-_]*\)[-_]\([a-z]\)\([^ ]* .*\2\)\(.\)/\1\4\3\4/' \
-e 't1' \
-e 's/.\{53\}$$//' \
-e 's/[/.]/_/g' \
-e 's/[-/.]/_/g' \
-e 's/^/--redefine-sym _binary_/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_end\2End/' \
-e 's/\([^=]*\)\(=[^ ]*\)/& \1_start\2Start/' \
@ -383,13 +404,13 @@ $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
case '$(am__configure_deps)' in \
*$$dep*) \
echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
cd $(srcdir) && $(AUTOMAKE) --gnu \
$(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
&& exit 0; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
cd $(top_srcdir) && \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --gnu Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@ -406,9 +427,10 @@ $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENC
$(SHELL) ./config.status --recheck
$(top_srcdir)/configure: $(am__configure_deps)
cd $(srcdir) && $(AUTOCONF)
$(am__cd) $(srcdir) && $(AUTOCONF)
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
$(am__aclocal_m4_deps):
config.h: stamp-h1
@if test ! -f $@; then \
@ -420,7 +442,7 @@ stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
@rm -f stamp-h1
cd $(top_builddir) && $(SHELL) ./config.status config.h
$(srcdir)/config.h.in: $(am__configure_deps)
cd $(top_srcdir) && $(AUTOHEADER)
($(am__cd) $(top_srcdir) && $(AUTOHEADER))
rm -f stamp-h1
touch $@
@ -442,31 +464,46 @@ liblogging.la: $(liblogging_la_OBJECTS) $(liblogging_la_DEPENDENCIES)
install-binPROGRAMS: $(bin_PROGRAMS)
@$(NORMAL_INSTALL)
test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)"
@list='$(bin_PROGRAMS)'; for p in $$list; do \
p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
if test -f $$p \
|| test -f $$p1 \
; then \
f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(bindir)/$$f'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(binPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(bindir)/$$f" || exit 1; \
else :; fi; \
done
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
for p in $$list; do echo "$$p $$p"; done | \
sed 's/$(EXEEXT)$$//' | \
while read p p1; do if test -f $$p || test -f $$p1; \
then echo "$$p"; echo "$$p"; else :; fi; \
done | \
sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \
-e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
sed 'N;N;N;s,\n, ,g' | \
$(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
{ d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
if ($$2 == $$4) files[d] = files[d] " " $$1; \
else { print "f", $$3 "/" $$4, $$1; } } \
END { for (d in files) print "f", d, files[d] }' | \
while read type dir files; do \
if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
test -z "$$files" || { \
echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
$(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
} \
; done
uninstall-binPROGRAMS:
@$(NORMAL_UNINSTALL)
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
echo " rm -f '$(DESTDIR)$(bindir)/$$f'"; \
rm -f "$(DESTDIR)$(bindir)/$$f"; \
done
@list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
files=`for p in $$list; do echo "$$p"; done | \
sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
-e 's/$$/$(EXEEXT)/' `; \
test -n "$$list" || exit 0; \
echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(bindir)" && rm -f $$files
clean-binPROGRAMS:
@list='$(bin_PROGRAMS)'; for p in $$list; do \
f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
echo " rm -f $$p $$f"; \
rm -f $$p $$f ; \
done
@list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \
echo " rm -f" $$list; \
rm -f $$list || exit $$?; \
test -n "$(EXEEXT)" || exit 0; \
list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
echo " rm -f" $$list; \
rm -f $$list
shellinabox/$(am__dirstamp):
@$(MKDIR_P) shellinabox
@: > shellinabox/$(am__dirstamp)
@ -483,6 +520,8 @@ shellinabox/shell_in_a_box.$(OBJEXT): shellinabox/$(am__dirstamp) \
shellinabox/$(DEPDIR)/$(am__dirstamp)
shellinabox/styles.$(OBJEXT): shellinabox/$(am__dirstamp) \
shellinabox/$(DEPDIR)/$(am__dirstamp)
shellinabox/print-styles.$(OBJEXT): shellinabox/$(am__dirstamp) \
shellinabox/$(DEPDIR)/$(am__dirstamp)
shellinabox/enabled.$(OBJEXT): shellinabox/$(am__dirstamp) \
shellinabox/$(DEPDIR)/$(am__dirstamp)
shellinabox/favicon.$(OBJEXT): shellinabox/$(am__dirstamp) \
@ -499,6 +538,7 @@ mostlyclean-compile:
-rm -f shellinabox/cgi_root.$(OBJEXT)
-rm -f shellinabox/enabled.$(OBJEXT)
-rm -f shellinabox/favicon.$(OBJEXT)
-rm -f shellinabox/print-styles.$(OBJEXT)
-rm -f shellinabox/root_page.$(OBJEXT)
-rm -f shellinabox/shell_in_a_box.$(OBJEXT)
-rm -f shellinabox/styles.$(OBJEXT)
@ -524,168 +564,168 @@ distclean-compile:
.c.o:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c $<
.c.obj:
@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LTCOMPILE) -c -o $@ $<
hashmap.lo: libhttp/hashmap.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT hashmap.lo -MD -MP -MF $(DEPDIR)/hashmap.Tpo -c -o hashmap.lo `test -f 'libhttp/hashmap.c' || echo '$(srcdir)/'`libhttp/hashmap.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/hashmap.Tpo $(DEPDIR)/hashmap.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/hashmap.Tpo $(DEPDIR)/hashmap.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libhttp/hashmap.c' object='hashmap.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o hashmap.lo `test -f 'libhttp/hashmap.c' || echo '$(srcdir)/'`libhttp/hashmap.c
trie.lo: libhttp/trie.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT trie.lo -MD -MP -MF $(DEPDIR)/trie.Tpo -c -o trie.lo `test -f 'libhttp/trie.c' || echo '$(srcdir)/'`libhttp/trie.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/trie.Tpo $(DEPDIR)/trie.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/trie.Tpo $(DEPDIR)/trie.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libhttp/trie.c' object='trie.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o trie.lo `test -f 'libhttp/trie.c' || echo '$(srcdir)/'`libhttp/trie.c
httpconnection.lo: libhttp/httpconnection.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT httpconnection.lo -MD -MP -MF $(DEPDIR)/httpconnection.Tpo -c -o httpconnection.lo `test -f 'libhttp/httpconnection.c' || echo '$(srcdir)/'`libhttp/httpconnection.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/httpconnection.Tpo $(DEPDIR)/httpconnection.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/httpconnection.Tpo $(DEPDIR)/httpconnection.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libhttp/httpconnection.c' object='httpconnection.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o httpconnection.lo `test -f 'libhttp/httpconnection.c' || echo '$(srcdir)/'`libhttp/httpconnection.c
server.lo: libhttp/server.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT server.lo -MD -MP -MF $(DEPDIR)/server.Tpo -c -o server.lo `test -f 'libhttp/server.c' || echo '$(srcdir)/'`libhttp/server.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/server.Tpo $(DEPDIR)/server.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/server.Tpo $(DEPDIR)/server.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libhttp/server.c' object='server.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o server.lo `test -f 'libhttp/server.c' || echo '$(srcdir)/'`libhttp/server.c
ssl.lo: libhttp/ssl.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT ssl.lo -MD -MP -MF $(DEPDIR)/ssl.Tpo -c -o ssl.lo `test -f 'libhttp/ssl.c' || echo '$(srcdir)/'`libhttp/ssl.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/ssl.Tpo $(DEPDIR)/ssl.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/ssl.Tpo $(DEPDIR)/ssl.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libhttp/ssl.c' object='ssl.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o ssl.lo `test -f 'libhttp/ssl.c' || echo '$(srcdir)/'`libhttp/ssl.c
url.lo: libhttp/url.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT url.lo -MD -MP -MF $(DEPDIR)/url.Tpo -c -o url.lo `test -f 'libhttp/url.c' || echo '$(srcdir)/'`libhttp/url.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/url.Tpo $(DEPDIR)/url.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/url.Tpo $(DEPDIR)/url.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='libhttp/url.c' object='url.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o url.lo `test -f 'libhttp/url.c' || echo '$(srcdir)/'`libhttp/url.c
logging.lo: logging/logging.c
@am__fastdepCC_TRUE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT logging.lo -MD -MP -MF $(DEPDIR)/logging.Tpo -c -o logging.lo `test -f 'logging/logging.c' || echo '$(srcdir)/'`logging/logging.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/logging.Tpo $(DEPDIR)/logging.Plo
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/logging.Tpo $(DEPDIR)/logging.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='logging/logging.c' object='logging.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o logging.lo `test -f 'logging/logging.c' || echo '$(srcdir)/'`logging/logging.c
shellinaboxd.o: shellinabox/shellinaboxd.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shellinaboxd.o -MD -MP -MF $(DEPDIR)/shellinaboxd.Tpo -c -o shellinaboxd.o `test -f 'shellinabox/shellinaboxd.c' || echo '$(srcdir)/'`shellinabox/shellinaboxd.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/shellinaboxd.Tpo $(DEPDIR)/shellinaboxd.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/shellinaboxd.Tpo $(DEPDIR)/shellinaboxd.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/shellinaboxd.c' object='shellinaboxd.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shellinaboxd.o `test -f 'shellinabox/shellinaboxd.c' || echo '$(srcdir)/'`shellinabox/shellinaboxd.c
shellinaboxd.obj: shellinabox/shellinaboxd.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT shellinaboxd.obj -MD -MP -MF $(DEPDIR)/shellinaboxd.Tpo -c -o shellinaboxd.obj `if test -f 'shellinabox/shellinaboxd.c'; then $(CYGPATH_W) 'shellinabox/shellinaboxd.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/shellinaboxd.c'; fi`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/shellinaboxd.Tpo $(DEPDIR)/shellinaboxd.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/shellinaboxd.Tpo $(DEPDIR)/shellinaboxd.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/shellinaboxd.c' object='shellinaboxd.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o shellinaboxd.obj `if test -f 'shellinabox/shellinaboxd.c'; then $(CYGPATH_W) 'shellinabox/shellinaboxd.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/shellinaboxd.c'; fi`
externalfile.o: shellinabox/externalfile.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT externalfile.o -MD -MP -MF $(DEPDIR)/externalfile.Tpo -c -o externalfile.o `test -f 'shellinabox/externalfile.c' || echo '$(srcdir)/'`shellinabox/externalfile.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/externalfile.Tpo $(DEPDIR)/externalfile.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/externalfile.Tpo $(DEPDIR)/externalfile.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/externalfile.c' object='externalfile.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o externalfile.o `test -f 'shellinabox/externalfile.c' || echo '$(srcdir)/'`shellinabox/externalfile.c
externalfile.obj: shellinabox/externalfile.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT externalfile.obj -MD -MP -MF $(DEPDIR)/externalfile.Tpo -c -o externalfile.obj `if test -f 'shellinabox/externalfile.c'; then $(CYGPATH_W) 'shellinabox/externalfile.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/externalfile.c'; fi`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/externalfile.Tpo $(DEPDIR)/externalfile.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/externalfile.Tpo $(DEPDIR)/externalfile.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/externalfile.c' object='externalfile.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o externalfile.obj `if test -f 'shellinabox/externalfile.c'; then $(CYGPATH_W) 'shellinabox/externalfile.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/externalfile.c'; fi`
launcher.o: shellinabox/launcher.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT launcher.o -MD -MP -MF $(DEPDIR)/launcher.Tpo -c -o launcher.o `test -f 'shellinabox/launcher.c' || echo '$(srcdir)/'`shellinabox/launcher.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/launcher.Tpo $(DEPDIR)/launcher.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/launcher.Tpo $(DEPDIR)/launcher.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/launcher.c' object='launcher.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o launcher.o `test -f 'shellinabox/launcher.c' || echo '$(srcdir)/'`shellinabox/launcher.c
launcher.obj: shellinabox/launcher.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT launcher.obj -MD -MP -MF $(DEPDIR)/launcher.Tpo -c -o launcher.obj `if test -f 'shellinabox/launcher.c'; then $(CYGPATH_W) 'shellinabox/launcher.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/launcher.c'; fi`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/launcher.Tpo $(DEPDIR)/launcher.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/launcher.Tpo $(DEPDIR)/launcher.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/launcher.c' object='launcher.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o launcher.obj `if test -f 'shellinabox/launcher.c'; then $(CYGPATH_W) 'shellinabox/launcher.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/launcher.c'; fi`
privileges.o: shellinabox/privileges.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT privileges.o -MD -MP -MF $(DEPDIR)/privileges.Tpo -c -o privileges.o `test -f 'shellinabox/privileges.c' || echo '$(srcdir)/'`shellinabox/privileges.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/privileges.Tpo $(DEPDIR)/privileges.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/privileges.Tpo $(DEPDIR)/privileges.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/privileges.c' object='privileges.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o privileges.o `test -f 'shellinabox/privileges.c' || echo '$(srcdir)/'`shellinabox/privileges.c
privileges.obj: shellinabox/privileges.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT privileges.obj -MD -MP -MF $(DEPDIR)/privileges.Tpo -c -o privileges.obj `if test -f 'shellinabox/privileges.c'; then $(CYGPATH_W) 'shellinabox/privileges.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/privileges.c'; fi`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/privileges.Tpo $(DEPDIR)/privileges.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/privileges.Tpo $(DEPDIR)/privileges.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/privileges.c' object='privileges.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o privileges.obj `if test -f 'shellinabox/privileges.c'; then $(CYGPATH_W) 'shellinabox/privileges.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/privileges.c'; fi`
service.o: shellinabox/service.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT service.o -MD -MP -MF $(DEPDIR)/service.Tpo -c -o service.o `test -f 'shellinabox/service.c' || echo '$(srcdir)/'`shellinabox/service.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/service.Tpo $(DEPDIR)/service.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/service.Tpo $(DEPDIR)/service.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/service.c' object='service.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o service.o `test -f 'shellinabox/service.c' || echo '$(srcdir)/'`shellinabox/service.c
service.obj: shellinabox/service.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT service.obj -MD -MP -MF $(DEPDIR)/service.Tpo -c -o service.obj `if test -f 'shellinabox/service.c'; then $(CYGPATH_W) 'shellinabox/service.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/service.c'; fi`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/service.Tpo $(DEPDIR)/service.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/service.Tpo $(DEPDIR)/service.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/service.c' object='service.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o service.obj `if test -f 'shellinabox/service.c'; then $(CYGPATH_W) 'shellinabox/service.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/service.c'; fi`
session.o: shellinabox/session.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT session.o -MD -MP -MF $(DEPDIR)/session.Tpo -c -o session.o `test -f 'shellinabox/session.c' || echo '$(srcdir)/'`shellinabox/session.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/session.Tpo $(DEPDIR)/session.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/session.Tpo $(DEPDIR)/session.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/session.c' object='session.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o session.o `test -f 'shellinabox/session.c' || echo '$(srcdir)/'`shellinabox/session.c
session.obj: shellinabox/session.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT session.obj -MD -MP -MF $(DEPDIR)/session.Tpo -c -o session.obj `if test -f 'shellinabox/session.c'; then $(CYGPATH_W) 'shellinabox/session.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/session.c'; fi`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/session.Tpo $(DEPDIR)/session.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/session.Tpo $(DEPDIR)/session.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/session.c' object='session.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o session.obj `if test -f 'shellinabox/session.c'; then $(CYGPATH_W) 'shellinabox/session.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/session.c'; fi`
usercss.o: shellinabox/usercss.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT usercss.o -MD -MP -MF $(DEPDIR)/usercss.Tpo -c -o usercss.o `test -f 'shellinabox/usercss.c' || echo '$(srcdir)/'`shellinabox/usercss.c
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/usercss.Tpo $(DEPDIR)/usercss.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/usercss.Tpo $(DEPDIR)/usercss.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/usercss.c' object='usercss.o' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o usercss.o `test -f 'shellinabox/usercss.c' || echo '$(srcdir)/'`shellinabox/usercss.c
usercss.obj: shellinabox/usercss.c
@am__fastdepCC_TRUE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT usercss.obj -MD -MP -MF $(DEPDIR)/usercss.Tpo -c -o usercss.obj `if test -f 'shellinabox/usercss.c'; then $(CYGPATH_W) 'shellinabox/usercss.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/usercss.c'; fi`
@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/usercss.Tpo $(DEPDIR)/usercss.Po
@am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/usercss.Tpo $(DEPDIR)/usercss.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='shellinabox/usercss.c' object='usercss.obj' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o usercss.obj `if test -f 'shellinabox/usercss.c'; then $(CYGPATH_W) 'shellinabox/usercss.c'; else $(CYGPATH_W) '$(srcdir)/shellinabox/usercss.c'; fi`
@ -698,68 +738,64 @@ clean-libtool:
distclean-libtool:
-rm -f libtool config.lt
install-man1: $(man1_MANS) $(man_MANS)
install-man1: $(man_MANS)
@$(NORMAL_INSTALL)
test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)"
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
if test -f $$i; then file=$$i; \
else file=$(srcdir)/$$i; fi; \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
@list=''; test -n "$(man1dir)" || exit 0; \
{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.1[a-z]*$$/p'; \
} | while read p; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; echo "$$p"; \
done | \
sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
sed 'N;N;s,\n, ,g' | { \
list=; while read file base inst; do \
if test "$$base" = "$$inst"; then list="$$list $$file"; else \
echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst"; \
done
$(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
fi; \
done; \
for i in $$list; do echo "$$i"; done | $(am__base_list) | \
while read files; do \
test -z "$$files" || { \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
done; }
uninstall-man1:
@$(NORMAL_UNINSTALL)
@list='$(man1_MANS) $(dist_man1_MANS) $(nodist_man1_MANS)'; \
l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
for i in $$l2; do \
case "$$i" in \
*.1*) list="$$list $$i" ;; \
esac; \
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
echo " rm -f '$(DESTDIR)$(man1dir)/$$inst'"; \
rm -f "$(DESTDIR)$(man1dir)/$$inst"; \
done
@list=''; test -n "$(man1dir)" || exit 0; \
files=`{ for i in $$list; do echo "$$i"; done; \
l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \
sed -n '/\.1[a-z]*$$/p'; \
} | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
-e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
test -z "$$files" || { \
echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(man1dir)" && rm -f $$files; }
install-dist_docDATA: $(dist_doc_DATA)
@$(NORMAL_INSTALL)
test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)"
@list='$(dist_doc_DATA)'; for p in $$list; do \
@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
f=$(am__strip_dir) \
echo " $(dist_docDATA_INSTALL) '$$d$$p' '$(DESTDIR)$(docdir)/$$f'"; \
$(dist_docDATA_INSTALL) "$$d$$p" "$(DESTDIR)$(docdir)/$$f"; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \
$(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \
done
uninstall-dist_docDATA:
@$(NORMAL_UNINSTALL)
@list='$(dist_doc_DATA)'; for p in $$list; do \
f=$(am__strip_dir) \
echo " rm -f '$(DESTDIR)$(docdir)/$$f'"; \
rm -f "$(DESTDIR)$(docdir)/$$f"; \
done
@list='$(dist_doc_DATA)'; test -n "$(docdir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
test -n "$$files" || exit 0; \
echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \
cd "$(DESTDIR)$(docdir)" && rm -f $$files
ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
@ -773,7 +809,7 @@ tags: TAGS
TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
set x; \
here=`pwd`; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
@ -781,36 +817,54 @@ TAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$tags $$unique; \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: CTAGS
CTAGS: $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \
$(TAGS_FILES) $(LISP)
tags=; \
list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | \
$(AWK) '{ files[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in files) print i; }; }'`; \
test -z "$(CTAGS_ARGS)$$tags$$unique" \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$tags $$unique
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& cd $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) $$here
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@list='$(MANS)'; if test -n "$$list"; then \
list=`for p in $$list; do \
if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \
if test -n "$$list" && \
grep 'ab help2man is required to generate this page' $$list >/dev/null; then \
echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \
grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \
echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \
echo " typically \`make maintainer-clean' will remove them" >&2; \
exit 1; \
else :; fi; \
else :; fi
$(am__remove_distdir)
test -d $(distdir) || mkdir $(distdir)
test -d "$(distdir)" || mkdir "$(distdir)"
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
@ -826,21 +880,26 @@ distdir: $(DISTFILES)
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f $(distdir)/$$file \
|| cp -p $$d/$$file $(distdir)/$$file \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
-find $(distdir) -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
-test -n "$(am__skip_mode_fix)" \
|| find "$(distdir)" -type d ! -perm -777 -exec chmod a+rwx {} \; -o \
! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
! -type d ! -perm -400 -exec chmod a+r {} \; -o \
! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
|| chmod -R a+r $(distdir)
|| chmod -R a+r "$(distdir)"
dist-gzip: distdir
tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
$(am__remove_distdir)
@ -853,6 +912,10 @@ dist-lzma: distdir
tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma
$(am__remove_distdir)
dist-xz: distdir
tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz
$(am__remove_distdir)
dist-tarZ: distdir
tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
$(am__remove_distdir)
@ -881,6 +944,8 @@ distcheck: dist
bunzip2 -c $(distdir).tar.bz2 | $(am__untar) ;;\
*.tar.lzma*) \
unlzma -c $(distdir).tar.lzma | $(am__untar) ;;\
*.tar.xz*) \
xz -dc $(distdir).tar.xz | $(am__untar) ;;\
*.tar.Z*) \
uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
*.shar.gz*) \
@ -892,9 +957,11 @@ distcheck: dist
mkdir $(distdir)/_build
mkdir $(distdir)/_inst
chmod a-w $(distdir)
test -d $(distdir)/_build || exit 0; \
dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
&& dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
&& cd $(distdir)/_build \
&& am__cwd=`pwd` \
&& $(am__cd) $(distdir)/_build \
&& ../configure --srcdir=.. --prefix="$$dc_install_base" \
$(DISTCHECK_CONFIGURE_FLAGS) \
&& $(MAKE) $(AM_MAKEFLAGS) \
@ -916,13 +983,15 @@ distcheck: dist
&& rm -rf "$$dc_destdir" \
&& $(MAKE) $(AM_MAKEFLAGS) dist \
&& rm -rf $(DIST_ARCHIVES) \
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck
&& $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
&& cd "$$am__cwd" \
|| exit 1
$(am__remove_distdir)
@(echo "$(distdir) archives ready for distribution: "; \
list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
distuninstallcheck:
@cd $(distuninstallcheck_dir) \
@$(am__cd) '$(distuninstallcheck_dir)' \
&& test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \
|| { echo "ERROR: files left after uninstall:" ; \
if test -n "$(DESTDIR)"; then \
@ -967,6 +1036,7 @@ clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-rm -f shellinabox/$(DEPDIR)/$(am__dirstamp)
-rm -f shellinabox/$(am__dirstamp)
@ -991,6 +1061,8 @@ dvi-am:
html: html-am
html-am:
info: info-am
info-am:
@ -999,18 +1071,28 @@ install-data-am: install-dist_docDATA install-man
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-binPROGRAMS
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man: install-man1
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
@ -1038,16 +1120,16 @@ uninstall-am: uninstall-binPROGRAMS uninstall-dist_docDATA \
uninstall-man: uninstall-man1
.MAKE: install-am install-strip
.MAKE: all install-am install-strip
.PHONY: CTAGS GTAGS all all-am am--refresh check check-am clean \
clean-binPROGRAMS clean-generic clean-libtool clean-local \
clean-noinstLTLIBRARIES ctags dist dist-all dist-bzip2 \
dist-gzip dist-lzma dist-shar dist-tarZ dist-zip distcheck \
distclean distclean-compile distclean-generic distclean-hdr \
distclean-libtool distclean-tags distcleancheck distdir \
distuninstallcheck dvi dvi-am html html-am info info-am \
install install-am install-binPROGRAMS install-data \
dist-gzip dist-lzma dist-shar dist-tarZ dist-xz dist-zip \
distcheck distclean distclean-compile distclean-generic \
distclean-hdr distclean-libtool distclean-tags distcleancheck \
distdir distuninstallcheck dvi dvi-am html html-am info \
info-am install install-am install-binPROGRAMS install-data \
install-data-am install-dist_docDATA install-dvi \
install-dvi-am install-exec install-exec-am install-html \
install-html-am install-info install-info-am install-man \
@ -1067,6 +1149,7 @@ ${top_srcdir}/demo/demo.js: ${top_srcdir}/demo/beep.wav \
${top_srcdir}/demo/demo.jspp \
${top_srcdir}/demo/favicon.ico \
${top_srcdir}/demo/styles.css \
${top_srcdir}/demo/print-styles.css \
${top_srcdir}/demo/vt100.js \
${top_srcdir}/demo/usercss-0.css \
${top_srcdir}/demo/usercss-1.css \
@ -1089,6 +1172,10 @@ ${top_srcdir}/demo/styles.css: ${top_srcdir}/shellinabox/styles.css
@rm -f "$@"
sed -e '/\[if DEFINES_COLORS\]/,/\[endif DEFINES_COLORS\]/d' "$<" >"$@"
${top_srcdir}/demo/print-styles.css: ${top_srcdir}/shellinabox/print-styles.css
@rm -f "$@"
ln "$<" "$@"
${top_srcdir}/demo/usercss-0.css: ${top_srcdir}/shellinabox/white-on-black.css
@rm -f "$@"
ln "$<" "$@"
@ -1182,6 +1269,7 @@ shellinabox/shell_in_a_box.o: shellinabox/shell_in_a_box.js config.h
@echo objcopy "$<" "$@"
@objcopy -I binary `$(objcopyflags)` `echo "$<" | $(renamesymbols)` \
"$<" "$@"
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

162
aclocal.m4 vendored
View file

@ -1,7 +1,7 @@
# generated automatically by aclocal 1.10.2 -*- Autoconf -*-
# generated automatically by aclocal 1.11 -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2007, 2008 Free Software Foundation, Inc.
# 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
@ -7996,10 +7996,10 @@ m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])])
# generated from the m4 files accompanying Automake X.Y.
# (This private macro should not be called outside this file.)
AC_DEFUN([AM_AUTOMAKE_VERSION],
[am__api_version='1.10'
[am__api_version='1.11'
dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
dnl require some minimum version. Point them to the right macro.
m4_if([$1], [1.10.2], [],
m4_if([$1], [1.11], [],
[AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
])
@ -8015,7 +8015,7 @@ m4_define([_AM_AUTOCONF_VERSION], [])
# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
[AM_AUTOMAKE_VERSION([1.10.2])dnl
[AM_AUTOMAKE_VERSION([1.11])dnl
m4_ifndef([AC_AUTOCONF_VERSION],
[m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
@ -8075,14 +8075,14 @@ am_aux_dir=`cd $ac_aux_dir && pwd`
# AM_CONDITIONAL -*- Autoconf -*-
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006
# Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 8
# serial 9
# AM_CONDITIONAL(NAME, SHELL-CONDITION)
# -------------------------------------
@ -8095,6 +8095,7 @@ AC_SUBST([$1_TRUE])dnl
AC_SUBST([$1_FALSE])dnl
_AM_SUBST_NOTMAKE([$1_TRUE])dnl
_AM_SUBST_NOTMAKE([$1_FALSE])dnl
m4_define([_AM_COND_VALUE_$1], [$2])dnl
if $2; then
$1_TRUE=
$1_FALSE='#'
@ -8108,14 +8109,14 @@ AC_CONFIG_COMMANDS_PRE(
Usually this means the macro was only invoked conditionally.]])
fi])])
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006
# Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 9
# serial 10
# There are a few dirty hacks below to avoid letting `AC_PROG_CC' be
# written in clear, in which case automake, when reading aclocal.m4,
@ -8172,6 +8173,16 @@ AC_CACHE_CHECK([dependency style of $depcc],
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
fi
am__universal=false
m4_case([$1], [CC],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac],
[CXX],
[case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac])
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
@ -8189,7 +8200,17 @@ AC_CACHE_CHECK([dependency style of $depcc],
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this. Also, some Intel
# versions had trouble with output in subdirs
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
gcc)
# This depmode causes a compiler race in universal mode.
test "$am__universal" = false || continue
;;
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
@ -8199,19 +8220,23 @@ AC_CACHE_CHECK([dependency style of $depcc],
break
fi
;;
msvisualcpp | msvcmsys)
# This compiler won't grok `-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
am__minus_obj=
;;
none) break ;;
esac
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
if depmode=$depmode \
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
source=sub/conftest.c object=$am__obj \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
@ -8275,12 +8300,13 @@ _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
#serial 4
#serial 5
# _AM_OUTPUT_DEPENDENCY_COMMANDS
# ------------------------------
AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
[# Autoconf 2.62 quotes --file arguments for eval, but not when files
[{
# Autoconf 2.62 quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
case $CONFIG_FILES in
@ -8328,6 +8354,7 @@ do
echo '# dummy' > "$dirpart/$file"
done
done
}
])# _AM_OUTPUT_DEPENDENCY_COMMANDS
@ -8359,13 +8386,13 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
# Do all the work for Automake. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004,
# 2005, 2006, 2008 Free Software Foundation, Inc.
# 2005, 2006, 2008, 2009 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 13
# serial 16
# This macro actually does too much. Some checks are only needed if
# your package does certain things. But this isn't really a big deal.
@ -8382,7 +8409,7 @@ AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)])
# arguments mandatory, and then we can depend on a new Autoconf
# release and drop the old call support.
AC_DEFUN([AM_INIT_AUTOMAKE],
[AC_PREREQ([2.60])dnl
[AC_PREREQ([2.62])dnl
dnl Autoconf wants to disallow AM_ names. We explicitly allow
dnl the ones we care about.
m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
@ -8433,8 +8460,8 @@ AM_MISSING_PROG(AUTOCONF, autoconf)
AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version})
AM_MISSING_PROG(AUTOHEADER, autoheader)
AM_MISSING_PROG(MAKEINFO, makeinfo)
AM_PROG_INSTALL_SH
AM_PROG_INSTALL_STRIP
AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
AC_REQUIRE([AM_PROG_MKDIR_P])dnl
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
@ -8458,8 +8485,21 @@ AC_PROVIDE_IFELSE([AC_PROG_OBJC],
[define([AC_PROG_OBJC],
defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl
])
_AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl
dnl The `parallel-tests' driver may need to know about EXEEXT, so add the
dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro
dnl is hooked onto _AC_COMPILER_EXEEXT early, see below.
AC_CONFIG_COMMANDS_PRE(dnl
[m4_provide_if([_AM_COMPILER_EXEEXT],
[AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
])
dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not
dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
dnl mangled by Autoconf and run in a shell conditional statement.
m4_define([_AC_COMPILER_EXEEXT],
m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
# When config.status generates a header, we must update the stamp-h file.
# This file resides in the same directory as the config header
@ -8482,7 +8522,7 @@ for _am_header in $config_headers :; do
done
echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
# Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc.
# Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
@ -8493,7 +8533,14 @@ echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_co
# Define $install_sh.
AC_DEFUN([AM_PROG_INSTALL_SH],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
if test x"${install_sh}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
*)
install_sh="\${SHELL} $am_aux_dir/install-sh"
esac
fi
AC_SUBST(install_sh)])
# Copyright (C) 2003, 2005 Free Software Foundation, Inc.
@ -8519,13 +8566,13 @@ AC_SUBST([am__leading_dot])])
# Check to see how 'make' treats includes. -*- Autoconf -*-
# Copyright (C) 2001, 2002, 2003, 2005 Free Software Foundation, Inc.
# Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 3
# serial 4
# AM_MAKE_INCLUDE()
# -----------------
@ -8534,7 +8581,7 @@ AC_DEFUN([AM_MAKE_INCLUDE],
[am_make=${MAKE-make}
cat > confinc << 'END'
am__doit:
@echo done
@echo this is the am__doit target
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
@ -8544,24 +8591,24 @@ am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# We grep out `Entering directory' and `Leaving directory'
# messages which can occur if `w' ends up in MAKEFLAGS.
# In particular we don't look at `^make:' because GNU make might
# be invoked under some other name (usually "gmake"), in which
# case it prints its new name instead of `make'.
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
# Ignore all kinds of additional output from `make'.
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=include
am__quote=
_am_result=GNU
fi
;;
esac
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=.include
am__quote="\""
_am_result=BSD
fi
;;
esac
fi
AC_SUBST([am__include])
AC_SUBST([am__quote])
@ -8571,14 +8618,14 @@ rm -f confinc confmf
# Fake the existence of programs that GNU maintainers use. -*- Autoconf -*-
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005
# Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 5
# serial 6
# AM_MISSING_PROG(NAME, PROGRAM)
# ------------------------------
@ -8595,7 +8642,14 @@ AC_SUBST($1)])
AC_DEFUN([AM_MISSING_HAS_RUN],
[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
AC_REQUIRE_AUX_FILE([missing])dnl
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
*)
MISSING="\${SHELL} $am_aux_dir/missing" ;;
esac
fi
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
@ -8666,14 +8720,14 @@ AC_DEFUN([_AM_IF_OPTION],
# Check to make sure that the build environment is sane. -*- Autoconf -*-
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005
# Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008
# Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 4
# serial 5
# AM_SANITY_CHECK
# ---------------
@ -8682,16 +8736,29 @@ AC_DEFUN([AM_SANITY_CHECK],
# Just in case
sleep 1
echo timestamp > conftest.file
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
'
case `pwd` in
*[[\\\"\#\$\&\'\`$am_lf]]*)
AC_MSG_ERROR([unsafe absolute working directory name]);;
esac
case $srcdir in
*[[\\\"\#\$\&\'\`$am_lf\ \ ]]*)
AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);;
esac
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
if test "$[*]" = "X"; then
# -L didn't work.
set X `ls -t $srcdir/configure conftest.file`
set X `ls -t "$srcdir/configure" conftest.file`
fi
rm -f conftest.file
if test "$[*]" != "X $srcdir/configure conftest.file" \
@ -8744,18 +8811,25 @@ fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
AC_SUBST([INSTALL_STRIP_PROGRAM])])
# Copyright (C) 2006 Free Software Foundation, Inc.
# Copyright (C) 2006, 2008 Free Software Foundation, Inc.
#
# This file is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# serial 2
# _AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
# This macro is traced by Automake.
AC_DEFUN([_AM_SUBST_NOTMAKE])
# AM_SUBST_NOTMAKE(VARIABLE)
# ---------------------------
# Public sister of _AM_SUBST_NOTMAKE.
AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
# Check how to create a tarball. -*- Autoconf -*-
# Copyright (C) 2004, 2005 Free Software Foundation, Inc.

View file

@ -138,7 +138,7 @@
#define STDC_HEADERS 1
/* Most recent revision number in the version control system */
#define VCS_REVISION "174"
#define VCS_REVISION "176"
/* Version number of package */
#define VERSION "2.9"

336
configure vendored
View file

@ -740,7 +740,9 @@ ac_includes_default="\
# include <unistd.h>
#endif"
ac_subst_vars='LTLIBOBJS
ac_subst_vars='am__EXEEXT_FALSE
am__EXEEXT_TRUE
LTLIBOBJS
LIBOBJS
LIBTOOL_DEPS
CPP
@ -2317,7 +2319,7 @@ ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $
ac_compiler_gnu=$ac_cv_c_compiler_gnu
VCS_REVISION=174
VCS_REVISION=176
cat >>confdefs.h <<_ACEOF
@ -2326,7 +2328,7 @@ _ACEOF
CFLAGS="${CFLAGS:--Os}"
am__api_version='1.10'
am__api_version='1.11'
ac_aux_dir=
for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
@ -2449,16 +2451,29 @@ $as_echo_n "checking whether build environment is sane... " >&6; }
# Just in case
sleep 1
echo timestamp > conftest.file
# Reject unsafe characters in $srcdir or the absolute working directory
# name. Accept space and tab only in the latter.
am_lf='
'
case `pwd` in
*[\\\"\#\$\&\'\`$am_lf]*)
as_fn_error "unsafe absolute working directory name" "$LINENO" 5;;
esac
case $srcdir in
*[\\\"\#\$\&\'\`$am_lf\ \ ]*)
as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;;
esac
# Do `set' in a subshell so we don't clobber the current shell's
# arguments. Must try -L first in case configure is actually a
# symlink; some systems play weird games with the mod time of symlinks
# (eg FreeBSD returns the mod time of the symlink's containing
# directory).
if (
set X `ls -Lt $srcdir/configure conftest.file 2> /dev/null`
set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
if test "$*" = "X"; then
# -L didn't work.
set X `ls -t $srcdir/configure conftest.file`
set X `ls -t "$srcdir/configure" conftest.file`
fi
rm -f conftest.file
if test "$*" != "X $srcdir/configure conftest.file" \
@ -2496,7 +2511,14 @@ program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
# expand $ac_aux_dir to an absolute path
am_aux_dir=`cd $ac_aux_dir && pwd`
test x"${MISSING+set}" = xset || MISSING="\${SHELL} $am_aux_dir/missing"
if test x"${MISSING+set}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
*)
MISSING="\${SHELL} $am_aux_dir/missing" ;;
esac
fi
# Use eval to expand $SHELL
if eval "$MISSING --run true"; then
am_missing_run="$MISSING --run "
@ -2506,6 +2528,115 @@ else
$as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;}
fi
if test x"${install_sh}" != xset; then
case $am_aux_dir in
*\ * | *\ *)
install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
*)
install_sh="\${SHELL} $am_aux_dir/install-sh"
esac
fi
# Installed binaries are usually stripped using `strip' when the user
# run `make install-strip'. However `strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the `STRIP' environment variable to overrule this program.
if test "$cross_compiling" != no; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_STRIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
$as_echo "$STRIP" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test -z "$ac_cv_prog_STRIP"; then
ac_ct_STRIP=$STRIP
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_STRIP"; then
ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_STRIP="strip"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
$as_echo "$ac_ct_STRIP" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "x$ac_ct_STRIP" = x; then
STRIP=":"
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
STRIP=$ac_ct_STRIP
fi
else
STRIP="$ac_cv_prog_STRIP"
fi
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
if test -z "$MKDIR_P"; then
@ -2686,108 +2817,6 @@ AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
install_sh=${install_sh-"\$(SHELL) $am_aux_dir/install-sh"}
# Installed binaries are usually stripped using `strip' when the user
# run `make install-strip'. However `strip' might not be the right
# tool to use in cross-compilation environments, therefore Automake
# will honor the `STRIP' environment variable to overrule this program.
if test "$cross_compiling" != no; then
if test -n "$ac_tool_prefix"; then
# Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
set dummy ${ac_tool_prefix}strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_STRIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$STRIP"; then
ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_STRIP="${ac_tool_prefix}strip"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
STRIP=$ac_cv_prog_STRIP
if test -n "$STRIP"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
$as_echo "$STRIP" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
fi
if test -z "$ac_cv_prog_STRIP"; then
ac_ct_STRIP=$STRIP
# Extract the first word of "strip", so it can be a program name with args.
set dummy strip; ac_word=$2
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
$as_echo_n "checking for $ac_word... " >&6; }
if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then :
$as_echo_n "(cached) " >&6
else
if test -n "$ac_ct_STRIP"; then
ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
else
as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
for as_dir in $PATH
do
IFS=$as_save_IFS
test -z "$as_dir" && as_dir=.
for ac_exec_ext in '' $ac_executable_extensions; do
if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
ac_cv_prog_ac_ct_STRIP="strip"
$as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
break 2
fi
done
done
IFS=$as_save_IFS
fi
fi
ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
if test -n "$ac_ct_STRIP"; then
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
$as_echo "$ac_ct_STRIP" >&6; }
else
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
$as_echo "no" >&6; }
fi
if test "x$ac_ct_STRIP" = x; then
STRIP=":"
else
case $cross_compiling:$ac_tool_warned in
yes:)
{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
ac_tool_warned=yes ;;
esac
STRIP=$ac_ct_STRIP
fi
else
STRIP="$ac_cv_prog_STRIP"
fi
fi
INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
# We need awk for the "check" target. The system "awk" is bad on
# some platforms.
# Always define AMTAR for backward compatibility.
@ -3576,7 +3605,7 @@ ac_config_commands="$ac_config_commands depfiles"
am_make=${MAKE-make}
cat > confinc << 'END'
am__doit:
@echo done
@echo this is the am__doit target
.PHONY: am__doit
END
# If we don't find an include directive, just comment out the code.
@ -3587,24 +3616,24 @@ am__quote=
_am_result=none
# First try GNU make style include.
echo "include confinc" > confmf
# We grep out `Entering directory' and `Leaving directory'
# messages which can occur if `w' ends up in MAKEFLAGS.
# In particular we don't look at `^make:' because GNU make might
# be invoked under some other name (usually "gmake"), in which
# case it prints its new name instead of `make'.
if test "`$am_make -s -f confmf 2> /dev/null | grep -v 'ing directory'`" = "done"; then
# Ignore all kinds of additional output from `make'.
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=include
am__quote=
_am_result=GNU
fi
;;
esac
# Now try BSD make style include.
if test "$am__include" = "#"; then
echo '.include "confinc"' > confmf
if test "`$am_make -s -f confmf 2> /dev/null`" = "done"; then
case `$am_make -s -f confmf 2> /dev/null` in #(
*the\ am__doit\ target*)
am__include=.include
am__quote="\""
_am_result=BSD
fi
;;
esac
fi
@ -3661,6 +3690,11 @@ else
if test "$am_compiler_list" = ""; then
am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
fi
am__universal=false
case " $depcc " in #(
*\ -arch\ *\ -arch\ *) am__universal=true ;;
esac
for depmode in $am_compiler_list; do
# Setup a source with many dependencies, because some compilers
# like to wrap large dependency lists on column 80 (with \), and
@ -3678,7 +3712,17 @@ else
done
echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this. Also, some Intel
# versions had trouble with output in subdirs
am__obj=sub/conftest.${OBJEXT-o}
am__minus_obj="-o $am__obj"
case $depmode in
gcc)
# This depmode causes a compiler race in universal mode.
test "$am__universal" = false || continue
;;
nosideeffect)
# after this tag, mechanisms are not by side-effect, so they'll
# only be used when explicitly requested
@ -3688,19 +3732,23 @@ else
break
fi
;;
msvisualcpp | msvcmsys)
# This compiler won't grok `-c -o', but also, the minuso test has
# not run yet. These depmodes are late enough in the game, and
# so weak that their functioning should not be impacted.
am__obj=conftest.${OBJEXT-o}
am__minus_obj=
;;
none) break ;;
esac
# We check with `-c' and `-o' for the sake of the "dashmstdout"
# mode. It turns out that the SunPro C++ compiler does not properly
# handle `-M -o', and we need to detect this.
if depmode=$depmode \
source=sub/conftest.c object=sub/conftest.${OBJEXT-o} \
source=sub/conftest.c object=$am__obj \
depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
$SHELL ./depcomp $depcc -c -o sub/conftest.${OBJEXT-o} sub/conftest.c \
$SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
>/dev/null 2>conftest.err &&
grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
grep sub/conftest.${OBJEXT-o} sub/conftest.Po > /dev/null 2>&1 &&
grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
${MAKE-make} -s -f confmf > /dev/null 2>&1; then
# icc doesn't choke on unknown options, it will just issue warnings
# or remarks (even with -Werror). So we grep stderr for any message
@ -4422,13 +4470,13 @@ if test "${lt_cv_nm_interface+set}" = set; then :
else
lt_cv_nm_interface="BSD nm"
echo "int some_variable = 0;" > conftest.$ac_ext
(eval echo "\"\$as_me:4425: $ac_compile\"" >&5)
(eval echo "\"\$as_me:4473: $ac_compile\"" >&5)
(eval "$ac_compile" 2>conftest.err)
cat conftest.err >&5
(eval echo "\"\$as_me:4428: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval echo "\"\$as_me:4476: $NM \\\"conftest.$ac_objext\\\"\"" >&5)
(eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out)
cat conftest.err >&5
(eval echo "\"\$as_me:4431: output\"" >&5)
(eval echo "\"\$as_me:4479: output\"" >&5)
cat conftest.out >&5
if $GREP 'External.*some_variable' conftest.out > /dev/null; then
lt_cv_nm_interface="MS dumpbin"
@ -5634,7 +5682,7 @@ ia64-*-hpux*)
;;
*-*-irix6*)
# Find out which ABI we are using.
echo '#line 5637 "configure"' > conftest.$ac_ext
echo '#line 5685 "configure"' > conftest.$ac_ext
if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
(eval $ac_compile) 2>&5
ac_status=$?
@ -7160,11 +7208,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:7163: $lt_compile\"" >&5)
(eval echo "\"\$as_me:7211: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
echo "$as_me:7167: \$? = $ac_status" >&5
echo "$as_me:7215: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@ -7499,11 +7547,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:7502: $lt_compile\"" >&5)
(eval echo "\"\$as_me:7550: $lt_compile\"" >&5)
(eval "$lt_compile" 2>conftest.err)
ac_status=$?
cat conftest.err >&5
echo "$as_me:7506: \$? = $ac_status" >&5
echo "$as_me:7554: \$? = $ac_status" >&5
if (exit $ac_status) && test -s "$ac_outfile"; then
# The compiler can only warn and ignore the option if not recognized
# So say no if there are warnings other than the usual output.
@ -7604,11 +7652,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:7607: $lt_compile\"" >&5)
(eval echo "\"\$as_me:7655: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
echo "$as_me:7611: \$? = $ac_status" >&5
echo "$as_me:7659: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@ -7659,11 +7707,11 @@ else
-e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \
-e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \
-e 's:$: $lt_compiler_flag:'`
(eval echo "\"\$as_me:7662: $lt_compile\"" >&5)
(eval echo "\"\$as_me:7710: $lt_compile\"" >&5)
(eval "$lt_compile" 2>out/conftest.err)
ac_status=$?
cat out/conftest.err >&5
echo "$as_me:7666: \$? = $ac_status" >&5
echo "$as_me:7714: \$? = $ac_status" >&5
if (exit $ac_status) && test -s out/conftest2.$ac_objext
then
# The compiler can only warn and ignore the option if not recognized
@ -10042,7 +10090,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
#line 10045 "configure"
#line 10093 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@ -10138,7 +10186,7 @@ else
lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2
lt_status=$lt_dlunknown
cat > conftest.$ac_ext <<_LT_EOF
#line 10141 "configure"
#line 10189 "configure"
#include "confdefs.h"
#if HAVE_DLFCN_H
@ -10930,6 +10978,14 @@ LIBOBJS=$ac_libobjs
LTLIBOBJS=$ac_ltlibobjs
if test -n "$EXEEXT"; then
am__EXEEXT_TRUE=
am__EXEEXT_FALSE='#'
else
am__EXEEXT_TRUE='#'
am__EXEEXT_FALSE=
fi
if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
as_fn_error "conditional \"AMDEP\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@ -12374,7 +12430,8 @@ $as_echo "$as_me: executing $ac_file commands" >&6;}
case $ac_file$ac_mode in
"depfiles":C) test x"$AMDEP_TRUE" != x"" || # Autoconf 2.62 quotes --file arguments for eval, but not when files
"depfiles":C) test x"$AMDEP_TRUE" != x"" || {
# Autoconf 2.62 quotes --file arguments for eval, but not when files
# are listed without --file. Let's play safe and only enable the eval
# if we detect the quoting.
case $CONFIG_FILES in
@ -12466,6 +12523,7 @@ $as_echo X"$file" |
echo '# dummy' > "$dirpart/$file"
done
done
}
;;
"libtool":C)

View file

@ -2,7 +2,7 @@ AC_PREREQ(2.57)
dnl This is the one location where the authoritative version number is stored
AC_INIT(shellinabox, 2.9, markus@shellinabox.com)
VCS_REVISION=174
VCS_REVISION=176
AC_SUBST(VCS_REVISION)
AC_DEFINE_UNQUOTED(VCS_REVISION, "${VCS_REVISION}",
[Most recent revision number in the version control system])

35
demo/print-styles.css Normal file
View file

@ -0,0 +1,35 @@
/* Set styles used when opening the printer window */
#print {
margin: 4ex 0px 0px 0px;
}
#options {
position: fixed;
top: 0px;
left: 0px;
right: 0px;
background-color: #EEEEEE;
border-style: solid;
border-top: 0px solid black;
border-left: 0px solid black;
border-right: 0px solid black;
border-bottom: 1px solid black;
}
@media print {
body {
margin: 0px;
}
#print {
margin: 0px;
}
#print .pagebreak {
page-break-before: always;
}
#print .pagebreak hr, #options {
display: none;
}
}

View file

@ -204,6 +204,12 @@ VT100.prototype.reset = function(clearHistory) {
this.crLfMode = false;
this.offsetMode = false;
this.mouseReporting = false;
this.printing = false;
if (typeof this.printWin != 'undefined' &&
this.printWin && !this.printWin.closed) {
this.printWin.close();
}
this.printWin = null;
this.utfEnabled = this.utfPreferred;
this.utfCount = 0;
this.utfChar = 0;
@ -250,10 +256,11 @@ VT100.prototype.getUserSettings = function() {
// Compute hash signature to identify the entries in the userCSS menu.
// If the menu is unchanged from last time, default values can be
// looked up in a cookie associated with this page.
this.signature = 0;
this.signature = 1;
this.utfPreferred = true;
this.visualBell = typeof suppressAllAudio != 'undefined' &&
suppressAllAudio;
this.autoprint = true;
if (this.visualBell) {
this.signature = Math.floor(16807*this.signature + 1) %
((1 << 31) - 1);
@ -278,13 +285,14 @@ VT100.prototype.getUserSettings = function() {
if (settings >= 0) {
settings = document.cookie.substr(settings + key.length).
replace(/([0-1]*).*/, "$1");
if (settings.length == 2 + (typeof userCSSList == 'undefined' ?
if (settings.length == 3 + (typeof userCSSList == 'undefined' ?
0 : userCSSList.length)) {
this.utfPreferred = settings.charAt(0) != '0';
this.visualBell = settings.charAt(1) != '0';
this.autoprint = settings.charAt(2) != '0';
if (typeof userCSSList != 'undefined') {
for (var i = 0; i < userCSSList.length; ++i) {
userCSSList[i][2] = settings.charAt(i + 2) != '0';
userCSSList[i][2] = settings.charAt(i + 3) != '0';
}
}
}
@ -295,7 +303,8 @@ VT100.prototype.getUserSettings = function() {
VT100.prototype.storeUserSettings = function() {
var settings = 'shellInABox=' + this.signature + ':' +
(this.utfEnabled ? '1' : '0') +
(this.visualBell ? '1' : '0');
(this.visualBell ? '1' : '0') +
(this.autoprint ? '1' : '0');
if (typeof userCSSList != 'undefined') {
for (var i = 0; i < userCSSList.length; ++i) {
settings += userCSSList[i][2] ? '1' : '0';
@ -1892,7 +1901,7 @@ VT100.prototype.toggleBell = function() {
};
VT100.prototype.about = function() {
alert("VT100 Terminal Emulator " + "2.9 (revision 174)" +
alert("VT100 Terminal Emulator " + "2.9 (revision 176)" +
"\nCopyright 2008-2009 by Markus Gutschke\n" +
"For more information check http://shellinabox.com");
};
@ -2828,6 +2837,187 @@ VT100.prototype.setCursorAttr = function(setAttr, xorAttr) {
// Changing of cursor color is not implemented.
};
VT100.prototype.openPrinterWindow = function() {
var rc = true;
try {
if (!this.printWin || this.printWin.closed) {
this.printWin = window.open('', 'print-output',
'width=800,height=600,directories=no,location=no,menubar=yes,' +
'status=no,toolbar=no,titlebar=yes,scrollbars=yes,resizable=yes');
this.printWin.document.body.innerHTML =
'<link rel="stylesheet" href="' +
document.location.protocol + '//' + document.location.host +
document.location.pathname.replace(/[^/]*$/, '') +
'print-styles.css" type="text/css">\n' +
'<div id="options"><input id="autoprint" type="checkbox"' +
(this.autoprint ? ' checked' : '') + '>' +
'Automatically, print page(s) when job is ready' +
'</input></div>\n' +
'<pre id="print"></pre>\n';
var autoprint = this.printWin.document.getElementById('autoprint');
this.addListener(autoprint, 'click',
(function(vt100, autoprint) {
return function() {
vt100.autoprint = autoprint.checked;
vt100.storeUserSettings();
return false;
};
})(this, autoprint));
this.printWin.document.title = 'ShellInABox Printer Output';
}
} catch (e) {
// Maybe, a popup blocker prevented us from working. Better catch the
// exception, so that we won't break the entire terminal session. The
// user probably needs to disable the blocker first before retrying the
// operation.
rc = false;
}
rc &= this.printWin && !this.printWin.closed &&
(this.printWin.innerWidth ||
this.printWin.document.documentElement.clientWidth ||
this.printWin.document.body.clientWidth) > 1;
if (!rc && this.printing == 100) {
// Different popup blockers work differently. We try to detect a couple
// of common methods. And then we retry again a brief amount later, as
// false positives are otherwise possible. If we are sure that there is
// a popup blocker in effect, we alert the user to it. This is helpful
// as some popup blockers have minimal or no UI, and the user might not
// notice that they are missing the popup. In any case, we only show at
// most one message per print job.
this.printing = true;
setTimeout((function(win) {
return function() {
if (!win || win.closed ||
(win.innerWidth ||
win.document.documentElement.clientWidth ||
win.document.body.clientWidth) <= 1) {
alert('Attempted to print, but a popup blocker ' +
'prevented the printer window from opening');
}
};
})(this.printWin), 2000);
}
return rc;
};
VT100.prototype.sendToPrinter = function(s) {
this.openPrinterWindow();
try {
var doc = this.printWin.document;
var print = doc.getElementById('print');
if (print.lastChild && print.lastChild.nodeName == '#text') {
print.lastChild.textContent += this.replaceChar(s, ' ', '\u00A0');
} else {
print.appendChild(doc.createTextNode(this.replaceChar(s, ' ','\u00A0')));
}
} catch (e) {
// There probably was a more aggressive popup blocker that prevented us
// from accessing the printer windows.
}
};
VT100.prototype.sendControlToPrinter = function(ch) {
// We get called whenever doControl() is active. But for the printer, we
// only implement a basic line printer that doesn't understand most of
// the escape sequences of the VT100 terminal. In fact, the only escape
// sequence that we really need to recognize is '^[[5i' for turning the
// printer off.
try {
switch (ch) {
case 9:
// HT
this.openPrinterWindow();
var doc = this.printWin.document;
var print = doc.getElementById('print');
var chars = print.lastChild &&
print.lastChild.nodeName == '#text' ?
print.lastChild.textContent.length : 0;
this.sendToPrinter(this.spaces(8 - (chars % 8)));
break;
case 10:
// CR
break;
case 12:
// FF
this.openPrinterWindow();
var pageBreak = this.printWin.document.createElement('div');
pageBreak.className = 'pagebreak';
pageBreak.innerHTML = '<hr />';
this.printWin.document.getElementById('print').appendChild(pageBreak);
break;
case 13:
// LF
this.openPrinterWindow();
var lineBreak = this.printWin.document.createElement('br');
this.printWin.document.getElementById('print').appendChild(lineBreak);
break;
case 27:
// ESC
this.isEsc = 1 /* ESesc */;
break;
default:
switch (this.isEsc) {
case 1 /* ESesc */:
this.isEsc = 0 /* ESnormal */;
switch (ch) {
case 0x5B /*[*/:
this.isEsc = 2 /* ESsquare */;
break;
default:
break;
}
break;
case 2 /* ESsquare */:
this.npar = 0;
this.par = [ 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 ];
this.isEsc = 3 /* ESgetpars */;
this.isQuestionMark = ch == 0x3F /*?*/;
if (this.isQuestionMark) {
break;
}
// Fall through
case 3 /* ESgetpars */:
if (ch == 0x3B /*;*/) {
this.npar++;
break;
} else if (ch >= 0x30 /*0*/ && ch <= 0x39 /*9*/) {
var par = this.par[this.npar];
if (par == undefined) {
par = 0;
}
this.par[this.npar] = 10*par + (ch & 0xF);
break;
} else {
this.isEsc = 4 /* ESgotpars */;
}
// Fall through
case 4 /* ESgotpars */:
this.isEsc = 0 /* ESnormal */;
if (this.isQuestionMark) {
break;
}
switch (ch) {
case 0x69 /*i*/:
this.csii(this.par[0]);
break;
default:
break;
}
break;
default:
this.isEsc = 0 /* ESnormal */;
break;
}
break;
}
} catch (e) {
// There probably was a more aggressive popup blocker that prevented us
// from accessing the printer windows.
}
};
VT100.prototype.csiAt = function(number) {
// Insert spaces
if (number == 0) {
@ -2842,6 +3032,41 @@ VT100.prototype.csiAt = function(number) {
this.needWrap = false;
};
VT100.prototype.csii = function(number) {
// Printer control
switch (number) {
case 0: // Print Screen
window.print();
break;
case 4: // Start printing
if (!this.printing && this.printWin && !this.printWin.closed) {
this.printWin.document.getElementById('print').innerHTML = '';
}
this.printing = 100;
break;
case 5: // Stop printing
try {
if (this.printing && this.printWin && !this.printWin.closed) {
var print = this.printWin.document.getElementById('print');
while (print.lastChild &&
print.lastChild.tagName == 'DIV' &&
print.lastChild.className == 'pagebreak') {
// Remove trailing blank pages
print.removeChild(print.lastChild);
}
if (this.autoprint) {
this.printWin.print();
}
}
} catch (e) {
}
this.printing = false;
break;
default:
break;
}
};
VT100.prototype.csiJ = function(number) {
switch (number) {
case 0: // Erase from cursor to end of display
@ -3007,6 +3232,10 @@ VT100.prototype.settermCommand = function() {
};
VT100.prototype.doControl = function(ch) {
if (this.printing) {
this.sendControlToPrinter(ch);
return '';
}
var lineBuf = '';
switch (ch) {
case 0x00: /* ignored */ break;
@ -3174,6 +3403,7 @@ VT100.prototype.doControl = function(ch) {
/*f*/ case 0x66: this.gotoXaY(this.par[1] - 1, this.par[0] - 1); break;
/*I*/ case 0x49: this.ht(this.par[0] ? this.par[0] : 1); break;
/*@*/ case 0x40: this.csiAt(this.par[0]); break;
/*i*/ case 0x69: this.csii(this.par[0]); break;
/*J*/ case 0x4A: this.csiJ(this.par[0]); break;
/*K*/ case 0x4B: this.csiK(this.par[0]); break;
/*L*/ case 0x4C: this.csiL(this.par[0]); break;
@ -3305,6 +3535,14 @@ VT100.prototype.doControl = function(ch) {
};
VT100.prototype.renderString = function(s, showCursor) {
if (this.printing) {
this.sendToPrinter(s);
if (showCursor) {
this.showCursor();
}
return;
}
// We try to minimize the number of DOM operations by coalescing individual
// characters into strings. This is a significant performance improvement.
var incX = s.length;
@ -3383,6 +3621,7 @@ VT100.prototype.vt100 = function(s) {
} else if (ch == 0xFEFF || (ch >= 0x200A && ch <= 0x200F)) {
continue;
}
if (!this.printing) {
if (this.needWrap || this.insertMode) {
if (lineBuf) {
this.renderString(lineBuf);
@ -3397,9 +3636,11 @@ VT100.prototype.vt100 = function(s) {
this.terminalWidth - this.cursorX - 1, 1,
1, 0, this.color, this.style);
}
}
this.lastCharacter = String.fromCharCode(ch);
lineBuf += this.lastCharacter;
if (this.cursorX + lineBuf.length >= this.terminalWidth) {
if (!this.printing &&
this.cursorX + lineBuf.length >= this.terminalWidth) {
this.needWrap = this.autoWrapMode;
}
} else {

View file

@ -0,0 +1,35 @@
/* Set styles used when opening the printer window */
#print {
margin: 4ex 0px 0px 0px;
}
#options {
position: fixed;
top: 0px;
left: 0px;
right: 0px;
background-color: #EEEEEE;
border-style: solid;
border-top: 0px solid black;
border-left: 0px solid black;
border-right: 0px solid black;
border-bottom: 1px solid black;
}
@media print {
body {
margin: 0px;
}
#print {
margin: 0px;
}
#print .pagebreak {
page-break-before: always;
}
#print .pagebreak hr, #options {
display: none;
}
}

View file

@ -355,7 +355,7 @@ ShellInABox.prototype.extendContextMenu = function(entries, actions) {
};
ShellInABox.prototype.about = function() {
alert("Shell In A Box version " + "2.9 (revision 174)" +
alert("Shell In A Box version " + "2.9 (revision 176)" +
"\nCopyright 2008-2009 by Markus Gutschke\n" +
"For more information check http://shellinabox.com" +
(typeof serverSupportsSSL != 'undefined' && serverSupportsSSL ?

View file

@ -475,8 +475,13 @@ static void serveStaticFile(HttpConnection *http, const char *contentType,
condTrue = 0;
const char *userAgent = getFromHashMap(httpGetHeaders(http),
"user-agent");
if (userAgent) {
// Allow multiple comma separated conditions
if (!userAgent) {
userAgent = "";
}
// Allow multiple comma separated conditions. Conditions are either
// substrings found in the user agent, or they are "DEFINES_..."
// tags at the top of user CSS files.
for (char *tagPtr = tag; *tagPtr; ) {
char *e = strchr(tagPtr, ',');
if (!e) {
@ -494,7 +499,6 @@ static void serveStaticFile(HttpConnection *http, const char *contentType,
}
tagPtr = e;
}
}
// If we find any conditionals, then we need to make a copy of
// the text document. We do this lazily, as presumably the majority
@ -680,6 +684,12 @@ static int shellInABoxHttpHandler(HttpConnection *http, void *arg,
// Serve the style sheet.
serveStaticFile(http, "text/css; charset=utf-8",
cssStyleSheet, strrchr(cssStyleSheet, '\000'));
} else if (pathInfoLength == 16 && !memcmp(pathInfo, "print-styles.css",16)){
// Serve the style sheet.
extern char printStylesStart[];
extern char printStylesEnd[];
serveStaticFile(http, "text/css; charset=utf-8",
printStylesStart, printStylesEnd);
} else if (pathInfoLength > 8 && !memcmp(pathInfo, "usercss-", 8)) {
// Server user style sheets (if any)
struct UserCSS *css = userCSSList;
@ -1232,7 +1242,8 @@ int main(int argc, char * const argv[]) {
}
// Set log file format
serverSetNumericHosts(server, numericHosts);
serverSetNumericHosts(server, numericHosts ||
logIsQuiet() || logIsDefault());
// Disable /quit handler
serverRegisterHttpHandler(server, "/quit", NULL, NULL);

View file

@ -236,6 +236,10 @@ JavaScript file implementing the AJAX terminal emulator.
.TP
.B styles.css
CSS style file that controls the visual appearance of the terminal.
.TP
.B print-styles.css
CSS style file that controls the visual appearance of printed pages when using
the VT100 transparent printing feature.
.P
It is not recommended to override the root HTML page for a particular
.IR service .

View file

@ -136,8 +136,8 @@
#vt100 #scrollable.inverted { color: #ffffff;
background-color: #000000; }
[if DEFINES_COLORS]
/* IE cannot properly handle "inherit" properties. So, the monochrome.css
* style sheet cannot work, if we define colors by default.
/* IE cannot properly handle "inherit" properties. So, the monochrome.css/
* color.css style sheets cannot work, if we define colors in styles.css.
*/
[else DEFINES_COLORS]
#vt100 .ansi0 { }

View file

@ -204,6 +204,12 @@ VT100.prototype.reset = function(clearHistory) {
this.crLfMode = false;
this.offsetMode = false;
this.mouseReporting = false;
this.printing = false;
if (typeof this.printWin != 'undefined' &&
this.printWin && !this.printWin.closed) {
this.printWin.close();
}
this.printWin = null;
this.utfEnabled = this.utfPreferred;
this.utfCount = 0;
this.utfChar = 0;
@ -250,10 +256,11 @@ VT100.prototype.getUserSettings = function() {
// Compute hash signature to identify the entries in the userCSS menu.
// If the menu is unchanged from last time, default values can be
// looked up in a cookie associated with this page.
this.signature = 0;
this.signature = 1;
this.utfPreferred = true;
this.visualBell = typeof suppressAllAudio != 'undefined' &&
suppressAllAudio;
this.autoprint = true;
if (this.visualBell) {
this.signature = Math.floor(16807*this.signature + 1) %
((1 << 31) - 1);
@ -278,13 +285,14 @@ VT100.prototype.getUserSettings = function() {
if (settings >= 0) {
settings = document.cookie.substr(settings + key.length).
replace(/([0-1]*).*/, "$1");
if (settings.length == 2 + (typeof userCSSList == 'undefined' ?
if (settings.length == 3 + (typeof userCSSList == 'undefined' ?
0 : userCSSList.length)) {
this.utfPreferred = settings.charAt(0) != '0';
this.visualBell = settings.charAt(1) != '0';
this.autoprint = settings.charAt(2) != '0';
if (typeof userCSSList != 'undefined') {
for (var i = 0; i < userCSSList.length; ++i) {
userCSSList[i][2] = settings.charAt(i + 2) != '0';
userCSSList[i][2] = settings.charAt(i + 3) != '0';
}
}
}
@ -295,7 +303,8 @@ VT100.prototype.getUserSettings = function() {
VT100.prototype.storeUserSettings = function() {
var settings = 'shellInABox=' + this.signature + ':' +
(this.utfEnabled ? '1' : '0') +
(this.visualBell ? '1' : '0');
(this.visualBell ? '1' : '0') +
(this.autoprint ? '1' : '0');
if (typeof userCSSList != 'undefined') {
for (var i = 0; i < userCSSList.length; ++i) {
settings += userCSSList[i][2] ? '1' : '0';
@ -1892,7 +1901,7 @@ VT100.prototype.toggleBell = function() {
};
VT100.prototype.about = function() {
alert("VT100 Terminal Emulator " + "2.9 (revision 174)" +
alert("VT100 Terminal Emulator " + "2.9 (revision 176)" +
"\nCopyright 2008-2009 by Markus Gutschke\n" +
"For more information check http://shellinabox.com");
};
@ -2828,6 +2837,187 @@ VT100.prototype.setCursorAttr = function(setAttr, xorAttr) {
// Changing of cursor color is not implemented.
};
VT100.prototype.openPrinterWindow = function() {
var rc = true;
try {
if (!this.printWin || this.printWin.closed) {
this.printWin = window.open('', 'print-output',
'width=800,height=600,directories=no,location=no,menubar=yes,' +
'status=no,toolbar=no,titlebar=yes,scrollbars=yes,resizable=yes');
this.printWin.document.body.innerHTML =
'<link rel="stylesheet" href="' +
document.location.protocol + '//' + document.location.host +
document.location.pathname.replace(/[^/]*$/, '') +
'print-styles.css" type="text/css">\n' +
'<div id="options"><input id="autoprint" type="checkbox"' +
(this.autoprint ? ' checked' : '') + '>' +
'Automatically, print page(s) when job is ready' +
'</input></div>\n' +
'<pre id="print"></pre>\n';
var autoprint = this.printWin.document.getElementById('autoprint');
this.addListener(autoprint, 'click',
(function(vt100, autoprint) {
return function() {
vt100.autoprint = autoprint.checked;
vt100.storeUserSettings();
return false;
};
})(this, autoprint));
this.printWin.document.title = 'ShellInABox Printer Output';
}
} catch (e) {
// Maybe, a popup blocker prevented us from working. Better catch the
// exception, so that we won't break the entire terminal session. The
// user probably needs to disable the blocker first before retrying the
// operation.
rc = false;
}
rc &= this.printWin && !this.printWin.closed &&
(this.printWin.innerWidth ||
this.printWin.document.documentElement.clientWidth ||
this.printWin.document.body.clientWidth) > 1;
if (!rc && this.printing == 100) {
// Different popup blockers work differently. We try to detect a couple
// of common methods. And then we retry again a brief amount later, as
// false positives are otherwise possible. If we are sure that there is
// a popup blocker in effect, we alert the user to it. This is helpful
// as some popup blockers have minimal or no UI, and the user might not
// notice that they are missing the popup. In any case, we only show at
// most one message per print job.
this.printing = true;
setTimeout((function(win) {
return function() {
if (!win || win.closed ||
(win.innerWidth ||
win.document.documentElement.clientWidth ||
win.document.body.clientWidth) <= 1) {
alert('Attempted to print, but a popup blocker ' +
'prevented the printer window from opening');
}
};
})(this.printWin), 2000);
}
return rc;
};
VT100.prototype.sendToPrinter = function(s) {
this.openPrinterWindow();
try {
var doc = this.printWin.document;
var print = doc.getElementById('print');
if (print.lastChild && print.lastChild.nodeName == '#text') {
print.lastChild.textContent += this.replaceChar(s, ' ', '\u00A0');
} else {
print.appendChild(doc.createTextNode(this.replaceChar(s, ' ','\u00A0')));
}
} catch (e) {
// There probably was a more aggressive popup blocker that prevented us
// from accessing the printer windows.
}
};
VT100.prototype.sendControlToPrinter = function(ch) {
// We get called whenever doControl() is active. But for the printer, we
// only implement a basic line printer that doesn't understand most of
// the escape sequences of the VT100 terminal. In fact, the only escape
// sequence that we really need to recognize is '^[[5i' for turning the
// printer off.
try {
switch (ch) {
case 9:
// HT
this.openPrinterWindow();
var doc = this.printWin.document;
var print = doc.getElementById('print');
var chars = print.lastChild &&
print.lastChild.nodeName == '#text' ?
print.lastChild.textContent.length : 0;
this.sendToPrinter(this.spaces(8 - (chars % 8)));
break;
case 10:
// CR
break;
case 12:
// FF
this.openPrinterWindow();
var pageBreak = this.printWin.document.createElement('div');
pageBreak.className = 'pagebreak';
pageBreak.innerHTML = '<hr />';
this.printWin.document.getElementById('print').appendChild(pageBreak);
break;
case 13:
// LF
this.openPrinterWindow();
var lineBreak = this.printWin.document.createElement('br');
this.printWin.document.getElementById('print').appendChild(lineBreak);
break;
case 27:
// ESC
this.isEsc = 1 /* ESesc */;
break;
default:
switch (this.isEsc) {
case 1 /* ESesc */:
this.isEsc = 0 /* ESnormal */;
switch (ch) {
case 0x5B /*[*/:
this.isEsc = 2 /* ESsquare */;
break;
default:
break;
}
break;
case 2 /* ESsquare */:
this.npar = 0;
this.par = [ 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 ];
this.isEsc = 3 /* ESgetpars */;
this.isQuestionMark = ch == 0x3F /*?*/;
if (this.isQuestionMark) {
break;
}
// Fall through
case 3 /* ESgetpars */:
if (ch == 0x3B /*;*/) {
this.npar++;
break;
} else if (ch >= 0x30 /*0*/ && ch <= 0x39 /*9*/) {
var par = this.par[this.npar];
if (par == undefined) {
par = 0;
}
this.par[this.npar] = 10*par + (ch & 0xF);
break;
} else {
this.isEsc = 4 /* ESgotpars */;
}
// Fall through
case 4 /* ESgotpars */:
this.isEsc = 0 /* ESnormal */;
if (this.isQuestionMark) {
break;
}
switch (ch) {
case 0x69 /*i*/:
this.csii(this.par[0]);
break;
default:
break;
}
break;
default:
this.isEsc = 0 /* ESnormal */;
break;
}
break;
}
} catch (e) {
// There probably was a more aggressive popup blocker that prevented us
// from accessing the printer windows.
}
};
VT100.prototype.csiAt = function(number) {
// Insert spaces
if (number == 0) {
@ -2842,6 +3032,41 @@ VT100.prototype.csiAt = function(number) {
this.needWrap = false;
};
VT100.prototype.csii = function(number) {
// Printer control
switch (number) {
case 0: // Print Screen
window.print();
break;
case 4: // Start printing
if (!this.printing && this.printWin && !this.printWin.closed) {
this.printWin.document.getElementById('print').innerHTML = '';
}
this.printing = 100;
break;
case 5: // Stop printing
try {
if (this.printing && this.printWin && !this.printWin.closed) {
var print = this.printWin.document.getElementById('print');
while (print.lastChild &&
print.lastChild.tagName == 'DIV' &&
print.lastChild.className == 'pagebreak') {
// Remove trailing blank pages
print.removeChild(print.lastChild);
}
if (this.autoprint) {
this.printWin.print();
}
}
} catch (e) {
}
this.printing = false;
break;
default:
break;
}
};
VT100.prototype.csiJ = function(number) {
switch (number) {
case 0: // Erase from cursor to end of display
@ -3007,6 +3232,10 @@ VT100.prototype.settermCommand = function() {
};
VT100.prototype.doControl = function(ch) {
if (this.printing) {
this.sendControlToPrinter(ch);
return '';
}
var lineBuf = '';
switch (ch) {
case 0x00: /* ignored */ break;
@ -3174,6 +3403,7 @@ VT100.prototype.doControl = function(ch) {
/*f*/ case 0x66: this.gotoXaY(this.par[1] - 1, this.par[0] - 1); break;
/*I*/ case 0x49: this.ht(this.par[0] ? this.par[0] : 1); break;
/*@*/ case 0x40: this.csiAt(this.par[0]); break;
/*i*/ case 0x69: this.csii(this.par[0]); break;
/*J*/ case 0x4A: this.csiJ(this.par[0]); break;
/*K*/ case 0x4B: this.csiK(this.par[0]); break;
/*L*/ case 0x4C: this.csiL(this.par[0]); break;
@ -3305,6 +3535,14 @@ VT100.prototype.doControl = function(ch) {
};
VT100.prototype.renderString = function(s, showCursor) {
if (this.printing) {
this.sendToPrinter(s);
if (showCursor) {
this.showCursor();
}
return;
}
// We try to minimize the number of DOM operations by coalescing individual
// characters into strings. This is a significant performance improvement.
var incX = s.length;
@ -3383,6 +3621,7 @@ VT100.prototype.vt100 = function(s) {
} else if (ch == 0xFEFF || (ch >= 0x200A && ch <= 0x200F)) {
continue;
}
if (!this.printing) {
if (this.needWrap || this.insertMode) {
if (lineBuf) {
this.renderString(lineBuf);
@ -3397,9 +3636,11 @@ VT100.prototype.vt100 = function(s) {
this.terminalWidth - this.cursorX - 1, 1,
1, 0, this.color, this.style);
}
}
this.lastCharacter = String.fromCharCode(ch);
lineBuf += this.lastCharacter;
if (this.cursorX + lineBuf.length >= this.terminalWidth) {
if (!this.printing &&
this.cursorX + lineBuf.length >= this.terminalWidth) {
this.needWrap = this.autoWrapMode;
}
} else {

View file

@ -204,6 +204,12 @@ VT100.prototype.reset = function(clearHistory) {
this.crLfMode = false;
this.offsetMode = false;
this.mouseReporting = false;
this.printing = false;
if (typeof this.printWin != 'undefined' &&
this.printWin && !this.printWin.closed) {
this.printWin.close();
}
this.printWin = null;
this.utfEnabled = this.utfPreferred;
this.utfCount = 0;
this.utfChar = 0;
@ -250,10 +256,11 @@ VT100.prototype.getUserSettings = function() {
// Compute hash signature to identify the entries in the userCSS menu.
// If the menu is unchanged from last time, default values can be
// looked up in a cookie associated with this page.
this.signature = 0;
this.signature = 1;
this.utfPreferred = true;
this.visualBell = typeof suppressAllAudio != 'undefined' &&
suppressAllAudio;
this.autoprint = true;
if (this.visualBell) {
this.signature = Math.floor(16807*this.signature + 1) %
((1 << 31) - 1);
@ -278,13 +285,14 @@ VT100.prototype.getUserSettings = function() {
if (settings >= 0) {
settings = document.cookie.substr(settings + key.length).
replace(/([0-1]*).*/, "$1");
if (settings.length == 2 + (typeof userCSSList == 'undefined' ?
if (settings.length == 3 + (typeof userCSSList == 'undefined' ?
0 : userCSSList.length)) {
this.utfPreferred = settings.charAt(0) != '0';
this.visualBell = settings.charAt(1) != '0';
this.autoprint = settings.charAt(2) != '0';
if (typeof userCSSList != 'undefined') {
for (var i = 0; i < userCSSList.length; ++i) {
userCSSList[i][2] = settings.charAt(i + 2) != '0';
userCSSList[i][2] = settings.charAt(i + 3) != '0';
}
}
}
@ -295,7 +303,8 @@ VT100.prototype.getUserSettings = function() {
VT100.prototype.storeUserSettings = function() {
var settings = 'shellInABox=' + this.signature + ':' +
(this.utfEnabled ? '1' : '0') +
(this.visualBell ? '1' : '0');
(this.visualBell ? '1' : '0') +
(this.autoprint ? '1' : '0');
if (typeof userCSSList != 'undefined') {
for (var i = 0; i < userCSSList.length; ++i) {
settings += userCSSList[i][2] ? '1' : '0';
@ -2828,6 +2837,187 @@ VT100.prototype.setCursorAttr = function(setAttr, xorAttr) {
// Changing of cursor color is not implemented.
};
VT100.prototype.openPrinterWindow = function() {
var rc = true;
try {
if (!this.printWin || this.printWin.closed) {
this.printWin = window.open('', 'print-output',
'width=800,height=600,directories=no,location=no,menubar=yes,' +
'status=no,toolbar=no,titlebar=yes,scrollbars=yes,resizable=yes');
this.printWin.document.body.innerHTML =
'<link rel="stylesheet" href="' +
document.location.protocol + '//' + document.location.host +
document.location.pathname.replace(/[^/]*$/, '') +
'print-styles.css" type="text/css">\n' +
'<div id="options"><input id="autoprint" type="checkbox"' +
(this.autoprint ? ' checked' : '') + '>' +
'Automatically, print page(s) when job is ready' +
'</input></div>\n' +
'<pre id="print"></pre>\n';
var autoprint = this.printWin.document.getElementById('autoprint');
this.addListener(autoprint, 'click',
(function(vt100, autoprint) {
return function() {
vt100.autoprint = autoprint.checked;
vt100.storeUserSettings();
return false;
};
})(this, autoprint));
this.printWin.document.title = 'ShellInABox Printer Output';
}
} catch (e) {
// Maybe, a popup blocker prevented us from working. Better catch the
// exception, so that we won't break the entire terminal session. The
// user probably needs to disable the blocker first before retrying the
// operation.
rc = false;
}
rc &= this.printWin && !this.printWin.closed &&
(this.printWin.innerWidth ||
this.printWin.document.documentElement.clientWidth ||
this.printWin.document.body.clientWidth) > 1;
if (!rc && this.printing == 100) {
// Different popup blockers work differently. We try to detect a couple
// of common methods. And then we retry again a brief amount later, as
// false positives are otherwise possible. If we are sure that there is
// a popup blocker in effect, we alert the user to it. This is helpful
// as some popup blockers have minimal or no UI, and the user might not
// notice that they are missing the popup. In any case, we only show at
// most one message per print job.
this.printing = true;
setTimeout((function(win) {
return function() {
if (!win || win.closed ||
(win.innerWidth ||
win.document.documentElement.clientWidth ||
win.document.body.clientWidth) <= 1) {
alert('Attempted to print, but a popup blocker ' +
'prevented the printer window from opening');
}
};
})(this.printWin), 2000);
}
return rc;
};
VT100.prototype.sendToPrinter = function(s) {
this.openPrinterWindow();
try {
var doc = this.printWin.document;
var print = doc.getElementById('print');
if (print.lastChild && print.lastChild.nodeName == '#text') {
print.lastChild.textContent += this.replaceChar(s, ' ', '\u00A0');
} else {
print.appendChild(doc.createTextNode(this.replaceChar(s, ' ','\u00A0')));
}
} catch (e) {
// There probably was a more aggressive popup blocker that prevented us
// from accessing the printer windows.
}
};
VT100.prototype.sendControlToPrinter = function(ch) {
// We get called whenever doControl() is active. But for the printer, we
// only implement a basic line printer that doesn't understand most of
// the escape sequences of the VT100 terminal. In fact, the only escape
// sequence that we really need to recognize is '^[[5i' for turning the
// printer off.
try {
switch (ch) {
case 9:
// HT
this.openPrinterWindow();
var doc = this.printWin.document;
var print = doc.getElementById('print');
var chars = print.lastChild &&
print.lastChild.nodeName == '#text' ?
print.lastChild.textContent.length : 0;
this.sendToPrinter(this.spaces(8 - (chars % 8)));
break;
case 10:
// CR
break;
case 12:
// FF
this.openPrinterWindow();
var pageBreak = this.printWin.document.createElement('div');
pageBreak.className = 'pagebreak';
pageBreak.innerHTML = '<hr />';
this.printWin.document.getElementById('print').appendChild(pageBreak);
break;
case 13:
// LF
this.openPrinterWindow();
var lineBreak = this.printWin.document.createElement('br');
this.printWin.document.getElementById('print').appendChild(lineBreak);
break;
case 27:
// ESC
this.isEsc = ESesc;
break;
default:
switch (this.isEsc) {
case ESesc:
this.isEsc = ESnormal;
switch (ch) {
case 0x5B /*[*/:
this.isEsc = ESsquare;
break;
default:
break;
}
break;
case ESsquare:
this.npar = 0;
this.par = [ 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0 ];
this.isEsc = ESgetpars;
this.isQuestionMark = ch == 0x3F /*?*/;
if (this.isQuestionMark) {
break;
}
// Fall through
case ESgetpars:
if (ch == 0x3B /*;*/) {
this.npar++;
break;
} else if (ch >= 0x30 /*0*/ && ch <= 0x39 /*9*/) {
var par = this.par[this.npar];
if (par == undefined) {
par = 0;
}
this.par[this.npar] = 10*par + (ch & 0xF);
break;
} else {
this.isEsc = ESgotpars;
}
// Fall through
case ESgotpars:
this.isEsc = ESnormal;
if (this.isQuestionMark) {
break;
}
switch (ch) {
case 0x69 /*i*/:
this.csii(this.par[0]);
break;
default:
break;
}
break;
default:
this.isEsc = ESnormal;
break;
}
break;
}
} catch (e) {
// There probably was a more aggressive popup blocker that prevented us
// from accessing the printer windows.
}
};
VT100.prototype.csiAt = function(number) {
// Insert spaces
if (number == 0) {
@ -2842,6 +3032,41 @@ VT100.prototype.csiAt = function(number) {
this.needWrap = false;
};
VT100.prototype.csii = function(number) {
// Printer control
switch (number) {
case 0: // Print Screen
window.print();
break;
case 4: // Start printing
if (!this.printing && this.printWin && !this.printWin.closed) {
this.printWin.document.getElementById('print').innerHTML = '';
}
this.printing = 100;
break;
case 5: // Stop printing
try {
if (this.printing && this.printWin && !this.printWin.closed) {
var print = this.printWin.document.getElementById('print');
while (print.lastChild &&
print.lastChild.tagName == 'DIV' &&
print.lastChild.className == 'pagebreak') {
// Remove trailing blank pages
print.removeChild(print.lastChild);
}
if (this.autoprint) {
this.printWin.print();
}
}
} catch (e) {
}
this.printing = false;
break;
default:
break;
}
};
VT100.prototype.csiJ = function(number) {
switch (number) {
case 0: // Erase from cursor to end of display
@ -3007,6 +3232,10 @@ VT100.prototype.settermCommand = function() {
};
VT100.prototype.doControl = function(ch) {
if (this.printing) {
this.sendControlToPrinter(ch);
return '';
}
var lineBuf = '';
switch (ch) {
case 0x00: /* ignored */ break;
@ -3174,6 +3403,7 @@ VT100.prototype.doControl = function(ch) {
/*f*/ case 0x66: this.gotoXaY(this.par[1] - 1, this.par[0] - 1); break;
/*I*/ case 0x49: this.ht(this.par[0] ? this.par[0] : 1); break;
/*@*/ case 0x40: this.csiAt(this.par[0]); break;
/*i*/ case 0x69: this.csii(this.par[0]); break;
/*J*/ case 0x4A: this.csiJ(this.par[0]); break;
/*K*/ case 0x4B: this.csiK(this.par[0]); break;
/*L*/ case 0x4C: this.csiL(this.par[0]); break;
@ -3305,6 +3535,14 @@ VT100.prototype.doControl = function(ch) {
};
VT100.prototype.renderString = function(s, showCursor) {
if (this.printing) {
this.sendToPrinter(s);
if (showCursor) {
this.showCursor();
}
return;
}
// We try to minimize the number of DOM operations by coalescing individual
// characters into strings. This is a significant performance improvement.
var incX = s.length;
@ -3383,6 +3621,7 @@ VT100.prototype.vt100 = function(s) {
} else if (ch == 0xFEFF || (ch >= 0x200A && ch <= 0x200F)) {
continue;
}
if (!this.printing) {
if (this.needWrap || this.insertMode) {
if (lineBuf) {
this.renderString(lineBuf);
@ -3397,9 +3636,11 @@ VT100.prototype.vt100 = function(s) {
this.terminalWidth - this.cursorX - 1, 1,
1, 0, this.color, this.style);
}
}
this.lastCharacter = String.fromCharCode(ch);
lineBuf += this.lastCharacter;
if (this.cursorX + lineBuf.length >= this.terminalWidth) {
if (!this.printing &&
this.cursorX + lineBuf.length >= this.terminalWidth) {
this.needWrap = this.autoWrapMode;
}
} else {