Updated nasium-lse pages.

Pascal J. Bourguignon [2014-06-18 13:32]
Updated nasium-lse pages.
Filename
bin/html-update
bin/toc.html
com.informatimago.www/Makefile
com.informatimago.www/articles/cl-types/index.html
com.informatimago.www/articles/emacs-colors/index.html
com.informatimago.www/articles/ffn=-n/index.html
com.informatimago.www/articles/flpl/index.html
com.informatimago.www/articles/index.html
com.informatimago.www/articles/interleave/index.html
com.informatimago.www/articles/life-saver.html
com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html
com.informatimago.www/articles/raspberrypi/index.html
com.informatimago.www/articles/usenet.html
com.informatimago.www/attic.html
com.informatimago.www/develop/abalone/index.html
com.informatimago.www/develop/aliases_helper/index.html
com.informatimago.www/develop/cirrus/index.html
com.informatimago.www/develop/emacs/index.html
com.informatimago.www/develop/gnustep/index.html
com.informatimago.www/develop/lisp/index.html
com.informatimago.www/develop/mtel/index.html
com.informatimago.www/develop/patches/index.html
com.informatimago.www/develop/pic-merge-diff3/index.html
com.informatimago.www/develop/sms/index.html
com.informatimago.www/develop/squeak/index.html
com.informatimago.www/index.html
com.informatimago.www/linux/chrooted-ssh-cvs.html
com.informatimago.www/linux/emacs-on-user-mode-linux.html
com.informatimago.www/linux/rpm-rebuilddb.html
com.informatimago.www/nodes.el
com.informatimago.www/toc.html
com.informatimago.www/yacy.html
com.ogamita.www/nasium-lse/beep.wav
com.ogamita.www/nasium-lse/doc-cli/index.html
com.ogamita.www/nasium-lse/doc-cli/lse-commandes.html
com.ogamita.www/nasium-lse/doc-cli/lse-fonctions.html
com.ogamita.www/nasium-lse/doc-cli/lse-generalites.html
com.ogamita.www/nasium-lse/doc-cli/lse-grammaire.html
com.ogamita.www/nasium-lse/doc-cli/lse-instructions.html
com.ogamita.www/nasium-lse/doc-cli/lse-legal.html
com.ogamita.www/nasium-lse/doc-cli/lse-options.html
com.ogamita.www/nasium-lse/exemple.html
com.ogamita.www/nasium-lse/index.html
com.ogamita.www/nasium-lse/interactif.html
com.ogamita.www/nasium-lse/terminal/applet.conf
com.ogamita.www/nasium-lse/terminal/default.conf
com.ogamita.www/nasium-lse/terminal/jta26.jar
com.ogamita.www/nasium-lse/terminal/nasium-lse-online.html
com.ogamita.www/nasium-lse/terminal/termlib/compacted/termlib_min.js
com.ogamita.www/nasium-lse/terminal/termlib/compacted/termlib_parser_min.js
com.ogamita.www/nasium-lse/terminal/termlib/faq.html
com.ogamita.www/nasium-lse/terminal/termlib/index.html
com.ogamita.www/nasium-lse/terminal/termlib/multiterm_test.html
com.ogamita.www/nasium-lse/terminal/termlib/parser_sample.html
com.ogamita.www/nasium-lse/terminal/termlib/readme.txt
com.ogamita.www/nasium-lse/terminal/termlib/sample_ansi_mapping.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_chrome.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_color.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_globbing.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_import.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_invaders.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_remote_terminal.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_socket.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_style_settings.html
com.ogamita.www/nasium-lse/terminal/termlib/sample_wrap.html
com.ogamita.www/nasium-lse/terminal/termlib/samples.html
com.ogamita.www/nasium-lse/terminal/termlib/term_styles.css
com.ogamita.www/nasium-lse/terminal/termlib/termlib.js
com.ogamita.www/nasium-lse/terminal/termlib/termlib_compacted.js
com.ogamita.www/nasium-lse/terminal/termlib/termlib_invaders.js
com.ogamita.www/nasium-lse/terminal/termlib/termlib_parser.js
com.ogamita.www/nasium-lse/terminal/termlib/tests/test1.txt
com.ogamita.www/nasium-lse/terminal/termlib/tests/test2.txt
com.ogamita.www/nasium-lse/terminal/termlib/tests/whats_inside.txt
description
org.ogamita.pjb/cv/cv-pjb-cpp-en-full.html
org.ogamita.pjb/cv/cv-pjb-cpp-en-short.html
org.ogamita.pjb/cv/cv-pjb-cpp-es-full.html
org.ogamita.pjb/cv/cv-pjb-cpp-es-short.html
org.ogamita.pjb/cv/cv-pjb-dev-fr-full.txt
diff --git a/bin/html-update b/bin/html-update
index 927268b..6a36ee5 100755
--- a/bin/html-update
+++ b/bin/html-update
@@ -70,7 +70,7 @@ docmd umask 022

 echo '(setq nodes-dir "'`pwd`'")' > "$tmpwd"
 echo 'Starting emacs processing...'
-docmd emacs --batch -q -l "$tmpwd" -l "$nodef" -l "$dname"/html-update.el
+docmd emacs --debug-init --batch -q -l "$tmpwd" -l "$nodef" -l "$dname"/html-update.el
 docmd echo rm -f "$nodel" "$tmpwd"

 exit 0
diff --git a/bin/toc.html b/bin/toc.html
index f3587ec..6d73bc0 100755
--- a/bin/toc.html
+++ b/bin/toc.html
@@ -1,81 +1,71 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Strict//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
 <HTML>
 <HEAD>
 <TITLE>Table of Content</TITLE>
 <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
 <META NAME="author" CONTENT="Pascal J. Bourguignon">
 <META HTTP-EQUIV="Description" NAME="description" CONTENT="Table of contents">
+<link rel="stylesheet"    href="default.css"  type="text/css">
 </HEAD>
 <BODY>
 <H1>Table of Contents</H1>
 <OL>
-
-"../index.html"
-<li><a href="../index.html">index.html</a></li>
+<li><a href="index.html">index.html</a></li>
 <li><ol>
-
-"../develop/emacs/index.html"
-<li><a href="../develop/emacs/index.html">develop/emacs/index.html</a></li>
-
-"../develop/lisp/index.html"
-<li><a href="../develop/lisp/index.html">develop/lisp/index.html</a></li>
+<li><a href="develop/lisp/index.html">develop/lisp/index.html</a></li>
 <li><ol>
-
-"../develop/lisp/small-cl-pgms/index.html"
-<li><a href="../develop/lisp/small-cl-pgms/index.html">develop/lisp/small-cl-pgms/index.html</a></li>
-
-"../develop/lisp/small-cl-pgms/aim-8/index.html"
-<li><a href="../develop/lisp/small-cl-pgms/aim-8/index.html">develop/lisp/small-cl-pgms/aim-8/index.html</a></li>
-
-"../develop/lisp/small-cl-pgms/wang.html"
-<li><a href="../develop/lisp/small-cl-pgms/wang.html">develop/lisp/small-cl-pgms/wang.html</a></li>
-
-"../develop/lisp/small-cl-pgms/ibcl/index.html"
-<li><a href="../develop/lisp/small-cl-pgms/ibcl/index.html">develop/lisp/small-cl-pgms/ibcl/index.html</a></li>
-
-"../develop/lisp/small-cl-pgms/basic/index.html"
-<li><a href="../develop/lisp/small-cl-pgms/basic/index.html">develop/lisp/small-cl-pgms/basic/index.html</a></li>
+<li><a href="develop/lisp/doc/index.html">develop/lisp/doc/index.html</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/index.html.in</a></li>
+<li><ol>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html.in</a></li>
+<li><ol>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/aim-8/aim-8.html.in">develop/lisp/com/informatimago/small-cl-pgms/aim-8/aim-8.html.in</a></li>
+</ol></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html.in</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/wang.html.in">develop/lisp/com/informatimago/small-cl-pgms/wang.html.in</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html.in</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html.in</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html.in</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html.in</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html.in</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/basic/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/basic/index.html.in</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html.in">develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html.in</a></li>
+</ol></li>
+</ol></li>
+<li><a href="develop/lisp/l99/index.html">develop/lisp/l99/index.html</a></li>
+<li><a href="develop/emacs/index.html">develop/emacs/index.html</a></li>
+<li><a href="articles/index.html">articles/index.html</a></li>
+<li><ol>
+<li><a href="articles/usenet.html">articles/usenet.html</a></li>
+<li><ol>
+<li><a href="articles/interleave/index.html">articles/interleave/index.html</a></li>
+<li><a href="articles/ffn=-n/index.html">articles/ffn=-n/index.html</a></li>
+<li><a href="articles/cl-types/index.html">articles/cl-types/index.html</a></li>
+<li><a href="articles/life-saver.html">articles/life-saver.html</a></li>
+<li><a href="articles/emacs-colors/index.html">articles/emacs-colors/index.html</a></li>
+<li><a href="articles/flpl/index.html">articles/flpl/index.html</a></li>
+<li><a href="articles/raspberrypi/index.html">articles/raspberrypi/index.html</a></li>
+<li><ol>
+<li><a href="articles/raspberrypi/ccl-sur-qemu.html">articles/raspberrypi/ccl-sur-qemu.html</a></li>
+</ol></li>
 </ol></li>
-
-"../attic.html"
-<li><a href="../attic.html">attic.html</a></li>
+</ol></li>
+<li><a href="attic.html">attic.html</a></li>
+<li><ol>
+<li><a href="develop/sms/index.html">develop/sms/index.html</a></li>
 <li><ol>
-
-"../develop/sms/index.html"
-<li><a href="../develop/sms/index.html">develop/sms/index.html</a></li>
-
-"../develop/aliases_helper/index.html"
-<li><a href="../develop/aliases_helper/index.html">develop/aliases_helper/index.html</a></li>
-
-"../develop/pic-merge-diff3/index.html"
-<li><a href="../develop/pic-merge-diff3/index.html">develop/pic-merge-diff3/index.html</a></li>
-
-"../linux/rpm-rebuilddb.html"
-<li><a href="../linux/rpm-rebuilddb.html">linux/rpm-rebuilddb.html</a></li>
-
-"../linux/chrooted-ssh-cvs.html"
-<li><a href="../linux/chrooted-ssh-cvs.html">linux/chrooted-ssh-cvs.html</a></li>
-
-"../linux/emacs-on-user-mode-linux.html"
-<li><a href="../linux/emacs-on-user-mode-linux.html">linux/emacs-on-user-mode-linux.html</a></li>
-
-"../develop/abalone/index.html"
-<li><a href="../develop/abalone/index.html">develop/abalone/index.html</a></li>
-
-"../develop/mtel/index.html"
-<li><a href="../develop/mtel/index.html">develop/mtel/index.html</a></li>
-
-"../develop/squeak/index.html"
-<li><a href="../develop/squeak/index.html">develop/squeak/index.html</a></li>
-
-"../develop/cirrus/index.html"
-<li><a href="../develop/cirrus/index.html">develop/cirrus/index.html</a></li>
-
-"../develop/gnustep/index.html"
-<li><a href="../develop/gnustep/index.html">develop/gnustep/index.html</a></li>
-
-"../develop/patches/index.html"
-<li><a href="../develop/patches/index.html">develop/patches/index.html</a></li>
+<li><a href="develop/aliases_helper/index.html">develop/aliases_helper/index.html</a></li>
+<li><a href="develop/pic-merge-diff3/index.html">develop/pic-merge-diff3/index.html</a></li>
+<li><a href="linux/rpm-rebuilddb.html">linux/rpm-rebuilddb.html</a></li>
+<li><a href="linux/chrooted-ssh-cvs.html">linux/chrooted-ssh-cvs.html</a></li>
+<li><a href="linux/emacs-on-user-mode-linux.html">linux/emacs-on-user-mode-linux.html</a></li>
+<li><a href="develop/abalone/index.html">develop/abalone/index.html</a></li>
+<li><a href="develop/mtel/index.html">develop/mtel/index.html</a></li>
+<li><a href="develop/squeak/index.html">develop/squeak/index.html</a></li>
+<li><a href="develop/cirrus/index.html">develop/cirrus/index.html</a></li>
+<li><a href="develop/gnustep/index.html">develop/gnustep/index.html</a></li>
+<li><a href="develop/patches/index.html">develop/patches/index.html</a></li>
+</ol></li>
 </ol></li>
 </ol></li>
 </OL>
diff --git a/com.informatimago.www/Makefile b/com.informatimago.www/Makefile
index 8e24a0e..28129dd 100644
--- a/com.informatimago.www/Makefile
+++ b/com.informatimago.www/Makefile
@@ -40,7 +40,8 @@ help::

 help::
 	@echo 'make update          # Reprocess nodes in pjb.'
-update: git-pull generate
+update: git-clone generate documentation update-nodes
+update-nodes:
 	../bin/html-update nodes.el
 	-find . -name \*~ -exec rm -f {} \;
 	../bin/publish     .
@@ -63,23 +64,38 @@ clean:
 	@find . -name \*~ -exec rm -f {} \;


+
+help::
+	@echo 'make git-clone       # get informatimago lisp code.'
+git-clone:
+	-mkdir -p develop/lisp/com develop/emacs
+	-rm -rf develop/emacs/emacs develop/lisp/com/informatimago develop/lisp/l99
+	git clone git@gitorious.org:com-informatimago/emacs.git             develop/emacs/emacs
+	git clone git@gitorious.org:com-informatimago/com-informatimago.git develop/lisp/com/informatimago
+	git clone ssh://pjb@git.informatimago.com/srv/git/public/l99        develop/lisp/l99
+#	git clone git://git.informatimago.com/public/lisp                   develop/lisp/com/informatimago
+
 help::
 	@echo 'make generate        # generate small-cl-pgms stuff.'
+	@echo 'make documentation   # generate documentation stuff.'
 generate:
 	$(MAKE) $(MFLAGS) -C develop/lisp/com/informatimago/small-cl-pgms generate
+documentation:
+	-rm -rf develop/lisp/doc
+	$(MAKE) $(MFLAGS) -C develop/lisp/com/informatimago               documentation lispdoc



 help::
-	@echo 'make git-clone       # get informatimago lisp code.'
-git-clone:
-	mkdir -p develop/lisp/com
-	git clone git://git.informatimago.com/public/lisp develop/lisp/com/informatimago
-
-help::
 	@echo 'make git-pull        # update informatimago lisp code.'
 git-pull:
 	cd develop/lisp/com/informatimago ; git pull
+	cd develop/lisp/l99               ; git pull
+	cd develop/emacs/emacs            ; git pull

+git-show:
+	cd develop/lisp/com/informatimago ; git-show-remotes
+	cd develop/lisp/l99               ; git-show-remotes
+	cd develop/emacs/emacs            ; git-show-remotes

 ### THE END ###
diff --git a/com.informatimago.www/articles/cl-types/index.html b/com.informatimago.www/articles/cl-types/index.html
index c924c7d..e24577e 100644
--- a/com.informatimago.www/articles/cl-types/index.html
+++ b/com.informatimago.www/articles/cl-types/index.html
@@ -19,9 +19,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -30,7 +28,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../ffn=-n/index.html">Previous</a> |
- <A HREF="../index.html">Up</a> |
+ <A HREF="../usenet.html">Up</a> |
  <A HREF="../life-saver.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -127,7 +125,7 @@ hierarchy of these various implementations:</p>
  | <a href="http://informatimago.free.fr/i//articles/cl-types/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:37
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:54
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/emacs-colors/index.html b/com.informatimago.www/articles/emacs-colors/index.html
index cb1d3a2..eba9f00 100644
--- a/com.informatimago.www/articles/emacs-colors/index.html
+++ b/com.informatimago.www/articles/emacs-colors/index.html
@@ -89,9 +89,7 @@ img.floatRight {
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -100,7 +98,7 @@ img.floatRight {
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../life-saver.html">Previous</a> |
- <A HREF="../index.html">Up</a> |
+ <A HREF="../usenet.html">Up</a> |
  <A HREF="../flpl/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -181,7 +179,7 @@ enough that you won't even see the result of your settings.</p>
  | <a href="http://informatimago.free.fr/i//articles/emacs-colors/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:37
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:55
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/ffn=-n/index.html b/com.informatimago.www/articles/ffn=-n/index.html
index 6c71715..24c29c3 100644
--- a/com.informatimago.www/articles/ffn=-n/index.html
+++ b/com.informatimago.www/articles/ffn=-n/index.html
@@ -22,9 +22,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -33,7 +31,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../interleave/index.html">Previous</a> |
- <A HREF="../index.html">Up</a> |
+ <A HREF="../usenet.html">Up</a> |
  <A HREF="../cl-types/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -367,7 +365,7 @@ C/USER[85]>
  | <a href="http://informatimago.free.fr/i//articles/ffn=-n/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:37
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:54
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/flpl/index.html b/com.informatimago.www/articles/flpl/index.html
index cd2962f..24b3894 100644
--- a/com.informatimago.www/articles/flpl/index.html
+++ b/com.informatimago.www/articles/flpl/index.html
@@ -19,9 +19,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -30,7 +28,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../emacs-colors/index.html">Previous</a> |
- <A HREF="../index.html">Up</a> |
+ <A HREF="../usenet.html">Up</a> |
  <A HREF="../raspberrypi/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -58,7 +56,7 @@ J. R. Hansen, C. L. Gerberich.
  | <a href="http://informatimago.free.fr/i//articles/flpl/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:37
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:55
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/index.html b/com.informatimago.www/articles/index.html
index 8ebe9e9..cd67588 100644
--- a/com.informatimago.www/articles/index.html
+++ b/com.informatimago.www/articles/index.html
@@ -18,9 +18,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -74,7 +72,7 @@ are, as plain web pages from my web site. </p>
  | <a href="http://informatimago.free.fr/i//articles/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:36
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:53
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/interleave/index.html b/com.informatimago.www/articles/interleave/index.html
index e0fc1f1..9a0f5ae 100644
--- a/com.informatimago.www/articles/interleave/index.html
+++ b/com.informatimago.www/articles/interleave/index.html
@@ -19,9 +19,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -30,7 +28,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../usenet.html">Previous</a> |
- <A HREF="../index.html">Up</a> |
+ <A HREF="../usenet.html">Up</a> |
  <A HREF="../ffn=-n/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -93,7 +91,7 @@ Graphviz</a> from .dot files generated by <a href="interleave.lisp">interleave.l
  | <a href="http://informatimago.free.fr/i//articles/interleave/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:37
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:54
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/life-saver.html b/com.informatimago.www/articles/life-saver.html
index 834c16f..c108394 100644
--- a/com.informatimago.www/articles/life-saver.html
+++ b/com.informatimago.www/articles/life-saver.html
@@ -89,9 +89,7 @@ img.floatRight {
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -100,7 +98,7 @@ img.floatRight {
  <A HREF="../toc.html">Contents</a> |
  <A HREF="../index.html">Home</a> |
  <A HREF="cl-types/index.html">Previous</a> |
- <A HREF="index.html">Up</a> |
+ <A HREF="usenet.html">Up</a> |
  <A HREF="emacs-colors/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -508,7 +506,7 @@ should be included in any application written in C or C++.
  | <a href="http://informatimago.free.fr/i//articles/life-saver.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:37
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:55
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html b/com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html
index 812d913..6531b04 100644
--- a/com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html
+++ b/com.informatimago.www/articles/raspberrypi/ccl-sur-qemu.html
@@ -18,9 +18,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -111,7 +109,7 @@ ccl/armcl
  | <a href="http://informatimago.free.fr/i//articles/raspberrypi/ccl-sur-qemu.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:55
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/raspberrypi/index.html b/com.informatimago.www/articles/raspberrypi/index.html
index 29c0a44..f5c762f 100644
--- a/com.informatimago.www/articles/raspberrypi/index.html
+++ b/com.informatimago.www/articles/raspberrypi/index.html
@@ -18,9 +18,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -29,7 +27,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../flpl/index.html">Previous</a> |
- <A HREF="../index.html">Up</a> |
+ <A HREF="../usenet.html">Up</a> |
  <A HREF="ccl-sur-qemu.html">Down</a> |
  <A HREF="ccl-sur-qemu.html">Next</a> |
 </P><HR></DIV>
@@ -57,7 +55,7 @@
  | <a href="http://informatimago.free.fr/i//articles/raspberrypi/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:37
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:55
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/articles/usenet.html b/com.informatimago.www/articles/usenet.html
index 931da77..00b5eaa 100644
--- a/com.informatimago.www/articles/usenet.html
+++ b/com.informatimago.www/articles/usenet.html
@@ -18,9 +18,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -30,6 +28,7 @@
  <A HREF="../index.html">Home</a> |
  <A HREF="index.html">Previous</a> |
  <A HREF="index.html">Up</a> |
+ <A HREF="interleave/index.html">Down</a> |
  <A HREF="interleave/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
diff --git a/com.informatimago.www/attic.html b/com.informatimago.www/attic.html
index b26465e..c079f37 100644
--- a/com.informatimago.www/attic.html
+++ b/com.informatimago.www/attic.html
@@ -14,9 +14,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -192,7 +190,7 @@
  | <a href="http://informatimago.free.fr/i//attic.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:55
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/abalone/index.html b/com.informatimago.www/develop/abalone/index.html
index 37739cf..4d4b21e 100644
--- a/com.informatimago.www/develop/abalone/index.html
+++ b/com.informatimago.www/develop/abalone/index.html
@@ -15,9 +15,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -26,7 +24,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../../linux/emacs-on-user-mode-linux.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../mtel/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -61,8 +59,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>Abalone.1.0b2.NI.b.tar.gz</CODE><BR>(3610955 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/nextstep/Abalone.1.0b2.NI.b.tar.gz">
@@ -117,7 +115,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../../linux/emacs-on-user-mode-linux.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../mtel/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -130,7 +128,7 @@
  | <a href="http://informatimago.free.fr/i//develop/abalone/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/aliases_helper/index.html b/com.informatimago.www/develop/aliases_helper/index.html
index d6c6f93..b615dff 100644
--- a/com.informatimago.www/develop/aliases_helper/index.html
+++ b/com.informatimago.www/develop/aliases_helper/index.html
@@ -10,9 +10,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -21,7 +19,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../sms/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../pic-merge-diff3/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -265,8 +263,8 @@ execute /bin/mail -s &#39;List Aliases&#39; informat &lt; /var/lists/aliases
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>aliases_helper-20010202.tar.gz</CODE><BR>(17384 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/gnustep/aliases_helper-20010202.tar.gz">
@@ -289,7 +287,7 @@ execute /bin/mail -s &#39;List Aliases&#39; informat &lt; /var/lists/aliases
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../sms/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../pic-merge-diff3/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -302,7 +300,7 @@ execute /bin/mail -s &#39;List Aliases&#39; informat &lt; /var/lists/aliases
  | <a href="http://informatimago.free.fr/i//develop/aliases_helper/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/cirrus/index.html b/com.informatimago.www/develop/cirrus/index.html
index 7fc0221..b911caa 100644
--- a/com.informatimago.www/develop/cirrus/index.html
+++ b/com.informatimago.www/develop/cirrus/index.html
@@ -13,9 +13,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -24,7 +22,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../squeak/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../gnustep/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -119,8 +117,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>CirrusLogicGD754X_SVGA.0.96.I.s.tar.gz</CODE><BR>(28174 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/nextstep/CirrusLogicGD754X_SVGA.0.96.I.s.tar.gz">
@@ -155,7 +153,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../squeak/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../gnustep/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -168,7 +166,7 @@
  | <a href="http://informatimago.free.fr/i//develop/cirrus/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:39
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/emacs/index.html b/com.informatimago.www/develop/emacs/index.html
index 40228a2..a8164ec 100644
--- a/com.informatimago.www/develop/emacs/index.html
+++ b/com.informatimago.www/develop/emacs/index.html
@@ -13,9 +13,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -314,7 +312,7 @@ or with <a href="https://gitorious.org/com-informatimago/emacs/trees/master">git
  | <a href="http://informatimago.free.fr/i//develop/emacs/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:36
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:53
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/gnustep/index.html b/com.informatimago.www/develop/gnustep/index.html
index b9a6d2c..fdfb1a7 100644
--- a/com.informatimago.www/develop/gnustep/index.html
+++ b/com.informatimago.www/develop/gnustep/index.html
@@ -13,9 +13,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -24,7 +22,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../cirrus/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../patches/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -53,8 +51,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>AutoresizingTest-1.0.1.readme</CODE><BR>(923 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/gnustep/AutoresizingTest-1.0.1.readme">
@@ -86,8 +84,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>Little.s.tar.gz</CODE><BR>(2522 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/gnustep/Little.s.tar.gz">
@@ -116,8 +114,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>ooestimate.NOG.s.tar.gz</CODE><BR>(21692 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/gnustep/ooestimate.NOG.s.tar.gz">
@@ -173,8 +171,8 @@ useful when invoked from a script.
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>filesel-20010515.tar.gz</CODE><BR>(3742 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/gnustep/filesel-20010515.tar.gz">
@@ -199,8 +197,8 @@ useful when invoked from a script.
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>gls.tar.gz</CODE><BR>(3174 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/gnustep/gls.tar.gz">
@@ -315,8 +313,8 @@ useful when invoked from a script.
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>NSDecimalNumbers-20000317.tar.gz</CODE><BR>(110925 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/gnustep/NSDecimalNumbers-20000317.tar.gz">
@@ -430,8 +428,8 @@ useful when invoked from a script.
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>AdaptorTest-0.6d43.readme</CODE><BR>(196 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/gnustep/OracleAdaptor/AdaptorTest-0.6d43.readme">
@@ -496,7 +494,7 @@ useful when invoked from a script.
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../cirrus/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../patches/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -509,7 +507,7 @@ useful when invoked from a script.
  | <a href="http://informatimago.free.fr/i//develop/gnustep/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:39
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/lisp/index.html b/com.informatimago.www/develop/lisp/index.html
index 7bfc8ee..b841b06 100644
--- a/com.informatimago.www/develop/lisp/index.html
+++ b/com.informatimago.www/develop/lisp/index.html
@@ -13,9 +13,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -232,7 +230,7 @@ but first try to do them yourself!</p>
  | <a href="http://informatimago.free.fr/i//develop/lisp/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:34
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:51
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/mtel/index.html b/com.informatimago.www/develop/mtel/index.html
index 338b644..6af2813 100644
--- a/com.informatimago.www/develop/mtel/index.html
+++ b/com.informatimago.www/develop/mtel/index.html
@@ -14,9 +14,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -25,7 +23,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../abalone/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../squeak/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -144,8 +142,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>M1B.app.b.M.tar.gz</CODE><BR>(1386424 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/nextstep/M1B.app.b.M.tar.gz">
@@ -180,7 +178,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../abalone/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../squeak/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -193,7 +191,7 @@
  | <a href="http://informatimago.free.fr/i//develop/mtel/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:39
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/patches/index.html b/com.informatimago.www/develop/patches/index.html
index 8b2ed6f..9a82899 100644
--- a/com.informatimago.www/develop/patches/index.html
+++ b/com.informatimago.www/develop/patches/index.html
@@ -21,9 +21,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -32,7 +30,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../gnustep/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
 </P><HR></DIV>
 <!--MENU-END-->

@@ -166,8 +164,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>fileutils-4.0.35-14pjb2.dif.gz</CODE><BR>(3098 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/linux/fileutils-4.0.35-14pjb2.dif.gz">
@@ -316,8 +314,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>Maelstrom-3.0.1.p1.diffs.tar.gz</CODE><BR>(13727 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/linux/Maelstrom-3.0.1.p1.diffs.tar.gz">
@@ -340,7 +338,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../gnustep/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
 </P><HR></DIV>
 <!--MENU-END-->
   <!--BOTTOM-BEGIN-->
@@ -352,7 +350,7 @@
  | <a href="http://informatimago.free.fr/i//develop/patches/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:39
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:57
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/pic-merge-diff3/index.html b/com.informatimago.www/develop/pic-merge-diff3/index.html
index c10e482..1f14f3e 100644
--- a/com.informatimago.www/develop/pic-merge-diff3/index.html
+++ b/com.informatimago.www/develop/pic-merge-diff3/index.html
@@ -14,9 +14,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -25,7 +23,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../aliases_helper/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../../linux/rpm-rebuilddb.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -262,8 +260,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>pmd-20010714.tar.gz</CODE><BR>(16241 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/unix/pmd-20010714.tar.gz">
@@ -286,7 +284,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../aliases_helper/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../../linux/rpm-rebuilddb.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -299,7 +297,7 @@
  | <a href="http://informatimago.free.fr/i//develop/pic-merge-diff3/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/sms/index.html b/com.informatimago.www/develop/sms/index.html
index cacb5c6..e576ef7 100644
--- a/com.informatimago.www/develop/sms/index.html
+++ b/com.informatimago.www/develop/sms/index.html
@@ -21,9 +21,7 @@
 <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -33,6 +31,7 @@
  <A HREF="../../index.html">Home</a> |
  <A HREF="../../attic.html">Previous</a> |
  <A HREF="../../attic.html">Up</a> |
+ <A HREF="../aliases_helper/index.html">Down</a> |
  <A HREF="../aliases_helper/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -171,8 +170,8 @@ Ukraine       KyivStar              +38067.
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>mail-to-sms-distrib-20010331083630.tar.gz</CODE><BR>(24481 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/unix/mail-to-sms-distrib-20010331083630.tar.gz">
@@ -197,6 +196,7 @@ Ukraine       KyivStar              +38067.
  <A HREF="../../index.html">Home</a> |
  <A HREF="../../attic.html">Previous</a> |
  <A HREF="../../attic.html">Up</a> |
+ <A HREF="../aliases_helper/index.html">Down</a> |
  <A HREF="../aliases_helper/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -209,7 +209,7 @@ Ukraine       KyivStar              +38067.
  | <a href="http://informatimago.free.fr/i//develop/sms/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:55
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/develop/squeak/index.html b/com.informatimago.www/develop/squeak/index.html
index 7be034e..92b99aa 100644
--- a/com.informatimago.www/develop/squeak/index.html
+++ b/com.informatimago.www/develop/squeak/index.html
@@ -13,9 +13,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -24,7 +22,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../mtel/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../cirrus/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -182,8 +180,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>squeak-2.0-0.3d109.README</CODE><BR>(11186 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/nextstep/squeak/squeak-2.0-0.3d109.README">
@@ -715,7 +713,7 @@
  <A HREF="../../toc.html">Contents</a> |
  <A HREF="../../index.html">Home</a> |
  <A HREF="../mtel/index.html">Previous</a> |
- <A HREF="../../attic.html">Up</a> |
+ <A HREF="../sms/index.html">Up</a> |
  <A HREF="../cirrus/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -728,7 +726,7 @@
  | <a href="http://informatimago.free.fr/i//develop/squeak/index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:39
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/index.html b/com.informatimago.www/index.html
index d36b5eb..4e9ddcf 100644
--- a/com.informatimago.www/index.html
+++ b/com.informatimago.www/index.html
@@ -115,7 +115,7 @@
  | <a href="http://informatimago.free.fr/i//index.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-19 08:06:58
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:50
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/linux/chrooted-ssh-cvs.html b/com.informatimago.www/linux/chrooted-ssh-cvs.html
index 2e53c06..4bdd501 100644
--- a/com.informatimago.www/linux/chrooted-ssh-cvs.html
+++ b/com.informatimago.www/linux/chrooted-ssh-cvs.html
@@ -21,9 +21,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -32,7 +30,7 @@
  <A HREF="../toc.html">Contents</a> |
  <A HREF="../index.html">Home</a> |
  <A HREF="rpm-rebuilddb.html">Previous</a> |
- <A HREF="../attic.html">Up</a> |
+ <A HREF="../develop/sms/index.html">Up</a> |
  <A HREF="emacs-on-user-mode-linux.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -195,8 +193,8 @@
 <p><br></p>
 <TABLE BORDER="1" WIDTH="95%" SUMMARY="Download sources">
   <TR><TH>Mirrors</TH>
-    <TH>France 2.1 Gb/s</TH>
-    <TH>Germany 2.1 Gb/s</TH>
+    <TH>France</TH>
+    <TH>Germany</TH>
   </TR>
   <TR VALIGN="TOP"><TD><CODE>chrooted-ssh-cvs.README.gz</CODE><BR>(3899 bytes)</TD>
     <TD><A HREF="http://informatimago.free.fr/archives/develop/linux/chrooted-ssh-cvs.README.gz">
@@ -231,7 +229,7 @@
  <A HREF="../toc.html">Contents</a> |
  <A HREF="../index.html">Home</a> |
  <A HREF="rpm-rebuilddb.html">Previous</a> |
- <A HREF="../attic.html">Up</a> |
+ <A HREF="../develop/sms/index.html">Up</a> |
  <A HREF="emacs-on-user-mode-linux.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -244,7 +242,7 @@
  | <a href="http://informatimago.free.fr/i//linux/chrooted-ssh-cvs.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/linux/emacs-on-user-mode-linux.html b/com.informatimago.www/linux/emacs-on-user-mode-linux.html
index 4ef7c16..b31f155 100644
--- a/com.informatimago.www/linux/emacs-on-user-mode-linux.html
+++ b/com.informatimago.www/linux/emacs-on-user-mode-linux.html
@@ -15,9 +15,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -26,7 +24,7 @@
  <A HREF="../toc.html">Contents</a> |
  <A HREF="../index.html">Home</a> |
  <A HREF="chrooted-ssh-cvs.html">Previous</a> |
- <A HREF="../attic.html">Up</a> |
+ <A HREF="../develop/sms/index.html">Up</a> |
  <A HREF="../develop/abalone/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -167,7 +165,7 @@ implementation with a FFI  and portable Hemlock.
  <A HREF="../toc.html">Contents</a> |
  <A HREF="../index.html">Home</a> |
  <A HREF="chrooted-ssh-cvs.html">Previous</a> |
- <A HREF="../attic.html">Up</a> |
+ <A HREF="../develop/sms/index.html">Up</a> |
  <A HREF="../develop/abalone/index.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -180,7 +178,7 @@ implementation with a FFI  and portable Hemlock.
  | <a href="http://informatimago.free.fr/i//linux/emacs-on-user-mode-linux.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/linux/rpm-rebuilddb.html b/com.informatimago.www/linux/rpm-rebuilddb.html
index de8581b..e028718 100644
--- a/com.informatimago.www/linux/rpm-rebuilddb.html
+++ b/com.informatimago.www/linux/rpm-rebuilddb.html
@@ -21,9 +21,7 @@
   <!--TOP-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
 <!-- from data in 'node.el'.    Please, do not edit it here. -->
-<DIV CLASS="TOP">
-
-</DIV>
+<DIV CLASS="TOP"></DIV>
 <!--TOP-END-->
 <!--MENU-BEGIN-->
 <!-- This section is automatically generated by html-update, -->
@@ -32,7 +30,7 @@
  <A HREF="../toc.html">Contents</a> |
  <A HREF="../index.html">Home</a> |
  <A HREF="../develop/pic-merge-diff3/index.html">Previous</a> |
- <A HREF="../attic.html">Up</a> |
+ <A HREF="../develop/sms/index.html">Up</a> |
  <A HREF="chrooted-ssh-cvs.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -202,7 +200,7 @@ rpm -q -a
  <A HREF="../toc.html">Contents</a> |
  <A HREF="../index.html">Home</a> |
  <A HREF="../develop/pic-merge-diff3/index.html">Previous</a> |
- <A HREF="../attic.html">Up</a> |
+ <A HREF="../develop/sms/index.html">Up</a> |
  <A HREF="chrooted-ssh-cvs.html">Next</a> |
 </P><HR></DIV>
 <!--MENU-END-->
@@ -215,7 +213,7 @@ rpm -q -a
  | <a href="http://informatimago.free.fr/i//linux/rpm-rebuilddb.html">Mirror on free.fr</a>
  | </small></code>

-<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2012-12-31 13:21:38
+<BR><SMALL>Last update : <!--MODIFICATION-DATE--> 2014-05-30 05:45:56
      by : <!--MODIFICATION-AUTEUR--> Pascal J. Bourguignon
     </SMALL>
 <BR><SMALL>
diff --git a/com.informatimago.www/nodes.el b/com.informatimago.www/nodes.el
index d036c92..15543c5 100644
--- a/com.informatimago.www/nodes.el
+++ b/com.informatimago.www/nodes.el
@@ -55,26 +55,29 @@
 ;;;                        -------------------
 ;;;                        7:baa  8:bab  9:bac

+;; node ::= (path node*)
+;; path ::= string
+
 (setq nodes
       '("index.html"
-       (("develop/lisp/index.html"
-         (("develop/lisp/doc/index.html")
-          ("develop/lisp/com/informatimago/small-cl-pgms/index.html.in"
-           ("develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html.in"
-            ("develop/lisp/com/informatimago/small-cl-pgms/aim-8/aim-8.html.in"))
-           ("develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html.in")
-           ("develop/lisp/com/informatimago/small-cl-pgms/wang.html.in")
-           ("develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html.in")
-           ("develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html.in")
-           ("develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html.in")
-           ("develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html.in")
-           ("develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html.in")
-           ("develop/lisp/com/informatimago/small-cl-pgms/basic/index.html.in")
-           ("develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html.in"))))
+        ("develop/lisp/index.html"
+         ("develop/lisp/doc/index.html")
+         ("develop/lisp/com/informatimago/small-cl-pgms/index.html.in"
+          ("develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html.in"
+           ("develop/lisp/com/informatimago/small-cl-pgms/aim-8/aim-8.html.in"))
+          ("develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html.in")
+          ("develop/lisp/com/informatimago/small-cl-pgms/wang.html.in")
+          ("develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html.in")
+          ("develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html.in")
+          ("develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html.in")
+          ("develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html.in")
+          ("develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html.in")
+          ("develop/lisp/com/informatimago/small-cl-pgms/basic/index.html.in")
+          ("develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html.in")))
         ("develop/lisp/l99/index.html")
         ("develop/emacs/index.html")
         ("articles/index.html"
-         (("articles/usenet.html")
+         ("articles/usenet.html"
           ("articles/interleave/index.html")
           ("articles/ffn=-n/index.html")
           ("articles/cl-types/index.html")
@@ -82,9 +85,9 @@
           ("articles/emacs-colors/index.html")
           ("articles/flpl/index.html")
           ("articles/raspberrypi/index.html"
-           (("articles/raspberrypi/ccl-sur-qemu.html")))))
+           ("articles/raspberrypi/ccl-sur-qemu.html"))))
         ("attic.html"
-         (("develop/sms/index.html")
+         ("develop/sms/index.html"
           ("develop/aliases_helper/index.html")
           ("develop/pic-merge-diff3/index.html")
           ("linux/rpm-rebuilddb.html")
@@ -95,7 +98,8 @@
           ("develop/squeak/index.html")
           ("develop/cirrus/index.html")
           ("develop/gnustep/index.html")
-          ("develop/patches/index.html"))))))
+          ("develop/patches/index.html")))))
+


 ;;;-----------------------------------------------------------------------
diff --git a/com.informatimago.www/toc.html b/com.informatimago.www/toc.html
index 343ecaf..c02e839 100644
--- a/com.informatimago.www/toc.html
+++ b/com.informatimago.www/toc.html
@@ -14,28 +14,31 @@
 <li><ol>
 <li><a href="develop/lisp/index.html">Informatimago Common-Lisp Software</a></li>
 <li><ol>
-<li><a href="develop/lisp/doc/index.html">Informatimago Common Lisp Packages Documentation</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/index.html">Common-Lisp Small Programs and Tidbits</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html">The Original LISP</a></li>
+<li><a href="develop/lisp/doc/index.html">develop/lisp/doc/index.html</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/index.html.in">Common-Lisp Small Programs and Tidbits</a></li>
 <li><ol>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/aim-8/aim-8.html">RECURSIVE FUNCTIONS OF SYMBOLIC EXPRESSIONS
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/aim-8/index.html.in">The Original LISP</a></li>
+<li><ol>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/aim-8/aim-8.html.in">RECURSIVE FUNCTIONS OF SYMBOLIC EXPRESSIONS
          AND THEIR COMPUTATION BY MACHINE</a></li>
 </ol></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html">A Parser for M-Expressions</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/wang.html">Old LISP programs still run in Common Lisp</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html">Common Lisp - Image Based Development</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html">Sexp Edit</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html">An implementation of the Playtomo Stonedge game, with its solver</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html">Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html">Sudoku Solver</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/basic/index.html">A Quick, Dirty and Ugly BASIC implemented in Common Lisp</a></li>
-<li><a href="develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html">Brainfuck in Lisp -- Lisp in Brainfuck</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/m-expression/index.html.in">A Parser for M-Expressions</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/wang.html.in">Old LISP programs still run in Common Lisp</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/ibcl/index.html.in">Common Lisp - Image Based Development</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/sedit/index.html.in">Sexp Edit</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/playtomo-stonedge/index.html.in">An implementation of the Playtomo Stonedge game, with its solver</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/rpsls/index.html.in">Rock, Paper, Scissors, Gun, Dynamite, Nuke, Lightning, Devil, Dragon, Alien, Water, Bowl, Air, Moon, Sponge, Wolf, Cockroach, Tree, Man, Woman, Monkey, Snake, Axe, Fire, Sun</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/sudoku-solver/index.html.in">Brainfuck in Lisp -- Lisp in Brainfuck</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/basic/index.html.in">A Quick, Dirty and Ugly BASIC implemented in Common Lisp</a></li>
+<li><a href="develop/lisp/com/informatimago/small-cl-pgms/brainfuck/index.html.in">Brainfuck in Lisp -- Lisp in Brainfuck</a></li>
+</ol></li>
 </ol></li>
 <li><a href="develop/lisp/l99/index.html">Solutions to the L-99: Ninety-Nine Lisp Problems</a></li>
 <li><a href="develop/emacs/index.html">Emacs Packages</a></li>
 <li><a href="articles/index.html">Articles</a></li>
 <li><ol>
 <li><a href="articles/usenet.html">Pascal Bourguignon's Usenet posts of interest</a></li>
+<li><ol>
 <li><a href="articles/interleave/index.html">Interleave</a></li>
 <li><a href="articles/ffn=-n/index.html">  f(f(n)) = -n  </a></li>
 <li><a href="articles/cl-types/index.html">Graphs of Common Lisp Types</a></li>
@@ -47,9 +50,11 @@
 <li><a href="articles/raspberrypi/ccl-sur-qemu.html">Clozure CL sur Raspbian sur qemu-linaro</a></li>
 </ol></li>
 </ol></li>
+</ol></li>
 <li><a href="attic.html">The Attic: Unsupported Free Software by Pascal Bourguignon</a></li>
 <li><ol>
 <li><a href="develop/sms/index.html">Mail-to-SMS</a></li>
+<li><ol>
 <li><a href="develop/aliases_helper/index.html">Aliases Helper</a></li>
 <li><a href="develop/pic-merge-diff3/index.html">Picture Merge (&agrave;-la Diff3)</a></li>
 <li><a href="linux/rpm-rebuilddb.html">RPM - Rebuilding a RPM database NFAQ</a></li>
@@ -63,6 +68,7 @@
 <li><a href="develop/patches/index.html">Patches</a></li>
 </ol></li>
 </ol></li>
+</ol></li>
 </OL>
 </BODY>
 </HTML>
diff --git a/com.informatimago.www/yacy.html b/com.informatimago.www/yacy.html
index c8a1dcd..e36f2b7 100644
--- a/com.informatimago.www/yacy.html
+++ b/com.informatimago.www/yacy.html
@@ -15,12 +15,12 @@
           content="pjb@informatimago.com">

     <meta http-equiv=refresh
-          content="0;URL=http://yacy.informatimago.com:8090/yacyinteractive.html?display=2">
+          content="0;URL=http://yacy.informatimago.com/yacysearch.html">

 </head>

 <body>
-<p> <a href="http://yacy.informatimago.com:8090/yacyinteractive.html?display=2"> Yacy Search. </a>
+<p> <a href="http://yacy.informatimago.com/yacysearch.html"> Yacy Search. </a>
 </body>
 </html>

diff --git a/com.ogamita.www/nasium-lse/beep.wav b/com.ogamita.www/nasium-lse/beep.wav
new file mode 100644
index 0000000..e9eab09
Binary files /dev/null and b/com.ogamita.www/nasium-lse/beep.wav differ
diff --git a/com.ogamita.www/nasium-lse/doc-cli/index.html b/com.ogamita.www/nasium-lse/doc-cli/index.html
new file mode 100644
index 0000000..6f66d45
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/doc-cli/index.html
@@ -0,0 +1,34 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+
+<html>
+<head>
+<title>NASIUM L.S.E. - Langage Symbolique d'Enseignement</title>
+<link rel="shortcut icon" href="http://www.ogamita.com/favicon.ico">
+<link rel="icon" href="http://www.ogamita.com/favicon.ico" type="image/vnd.microsoft.icon">
+<link rel="icon" href="http://www.ogamita.com/favicon.png" type="image/png">
+<link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
+<meta name="author" content="Pascal J. Bourguignon">
+<meta name="Reply-To" content="pjb@informatimago.com">
+<meta name="Keywords" content="NASIUM, LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français"></head>
+<body><img src="../nasium-lse-2.png" alt="NASIUM L.S.E.">
+<hr>
+<div class="navigation"><a href="../">Maison</a></div>
+<hr>
+<pre>
+
+NASIUM L.S.E.
+LANGAGE SYMBOLIQUE D'ENSEIGNEMENT
+VERSION 1.0.0-0.999953-CCL-LINUX
+COPYRIGHT 1984 - 2014 PASCAL BOURGUIGNON
+
+DISTRIBUE SELON LES TERMES DE LA LICENCE AGPLv3.
+</pre>
+<ol>
+<li><a href="lse-generalites.html">GÉNÉRALITÉS</a></li>
+<li><a href="lse-options.html">OPTIONS</a></li>
+<li><a href="lse-commandes.html">COMMANDES</a></li>
+<li><a href="lse-instructions.html">INSTRUCTIONS</a></li>
+<li><a href="lse-fonctions.html">FONCTIONS</a></li>
+<li><a href="lse-grammaire.html">GRAMMAIRE</a></li>
+<li><a href="lse-legal.html">LÉGAL</a></li></ol></body></html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/doc-cli/lse-commandes.html b/com.ogamita.www/nasium-lse/doc-cli/lse-commandes.html
new file mode 100644
index 0000000..0dd9cfe
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/doc-cli/lse-commandes.html
@@ -0,0 +1,177 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+
+<html>
+<head>
+<title>NASIUM L.S.E. - Commandes</title>
+<link rel="shortcut icon" href="http://www.ogamita.com/favicon.ico">
+<link rel="icon" href="http://www.ogamita.com/favicon.ico" type="image/vnd.microsoft.icon">
+<link rel="icon" href="http://www.ogamita.com/favicon.png" type="image/png">
+<link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
+<meta name="author" content="Pascal J. Bourguignon">
+<meta name="Reply-To" content="pjb@informatimago.com">
+<meta name="Keywords" content="NASIUM, LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français, commandes"></head>
+<body><img src="../nasium-lse-2.png" alt="NASIUM L.S.E.">
+<hr>
+<div class="navigation"><a href="../">Maison</a> | <a href="lse-options.html">Page précédente</a> | <a href="index.html">Index</a> | <a href="lse-instructions.html">Page suivante</a></div>
+<hr>
+<h2>Commandes</h2>
+<p>Ce chapitre présente une description succinte des commandes du système L.S.E. Pour plus de détails, voir les références. </p>
+<p>Une fois démarré le système L.S.E. affiche le mot: PRET. Il est alors prêt à recevoir une commande, une instruction à exécuter en mode machine de bureau, ou une ligne de programme. </p>
+<p>On donne une commande au système L.S.E. en saisissant les deux premiers caractères de la commande et en les envoyant au système en tapant sur la touche <kbd>[X-OFF]</kbd>. Le système complète alors le nom de la commande, et éventuellement attend la saisie des arguments, puis il exécute la commande. </p>
+<p>Chacune des sections suivantes décrivent une commande, selon le format suivant: </p>
+<ul>
+<li>nom de la commande, </li>
+<li>syntaxe: les deux lettres initiales à taper, ), le reste du nom de la commande, suivit éventuellement des arguments attendus. </li>
+<li>description, </li>
+<li>exemples (optionels), </li>
+<li>références (optionelles). </li></ul>
+<p>Description de la syntaxe des arguments: </p>
+<ul>
+<li>&lt;N&gt; : un numéro de ligne. </li>
+<li>&lt;N1&gt;,&lt;N2&gt; : deux numéros de ligne, séparés par une virgule. </li>
+<li><kbd>[&lt;N1&gt;[,&lt;N2&gt;]</kbd>] : deux numéros de ligne optionnels séparés par une virgule. On peut saisir aucun numéro, un numéro, ou deux numéro séparés par une virgule. </li>
+<li>* | &lt;N1&gt;[,&lt;N2&gt;[...,&lt;Nn&gt;]...] | &lt;N1&gt; A &lt;N2&gt; : une étoile représente toutes les lignes; sinon on peut écrire une liste de numéros de ligne, ou d'intervale (deux numéros de lignes séparés par le mot A), séparés par une virgule. </li>
+<li>&lt;NOMPG&gt; : un nom de programme. C'est normalement un identificateur, composé d'une lettre, suivi d'au plus quatre lettres ou chiffres. Le nom es mis en minuscule et une extension '.lse' est ajoutée pour former le nom du fichier unix. </li>
+<li>&lt;NOMFI&gt; : un nom de fichier. C'est normalement un identificateur, composé d'une lettre, suivi d'au plus quatre lettres ou chiffres. Le nom es mis en minuscule et une extension '.don' est ajoutée pour former le nom du fichier unix. </li>
+<li>&lt;NOMF1&gt;,&lt;NOMF2&gt; : deux noms de fichier, séparés par une virgule. </li>
+<li>&lt;NOMFI&gt;[,&lt;N1&gt;[,&lt;N2&gt;]] : un nom de fichier, suivit de deux numéros de lignes optionnels. </li>
+<li>&lt;TEXTE&gt; : une ligne de texte. </li>
+<li>* | &lt;NOMFI&gt;,P|D|T : soit une étoile signifiant tous les fichiers temporaires, soit un nom de fichier, suivit d'une virgule et d'une lettre P, D, ou T, signifiant: P = fichier programme, D = fichier donnée permanent, T = fichier temporaire. </li></ul>
+<div class="toc">
+<p>Table des commandes :</p>
+<ul>
+<li><a href="#ABREGER">ABREGER</a></li>
+<li><a href="#AFFICHER REPERTOIRE">AFFICHER REPERTOIRE</a></li>
+<li><a href="#AIDER">AIDER</a></li>
+<li><a href="#APPELER">APPELER</a></li>
+<li><a href="#ARCHIVER RUBAN">ARCHIVER RUBAN</a></li>
+<li><a href="#AU REVOIR">AU REVOIR</a></li>
+<li><a href="#CATALOGUER">CATALOGUER</a></li>
+<li><a href="#CHANGER REPERTOIRE">CHANGER REPERTOIRE</a></li>
+<li><a href="#CONTINUER">CONTINUER</a></li>
+<li><a href="#DECODER">DECODER</a></li>
+<li><a href="#DOCUMENTATION">DOCUMENTATION</a></li>
+<li><a href="#ECHO">ECHO</a></li>
+<li><a href="#EFFACER LIGNES">EFFACER LIGNES</a></li>
+<li><a href="#ENCODER">ENCODER</a></li>
+<li><a href="#ETAGERE DE RUBANS">ETAGERE DE RUBANS</a></li>
+<li><a href="#EXECUTER A PARTIR DE">EXECUTER A PARTIR DE</a></li>
+<li><a href="#IN EXTENSO">IN EXTENSO</a></li>
+<li><a href="#LD DESASSEMBLER A PARTIR DE">LD DESASSEMBLER A PARTIR DE</a></li>
+<li><a href="#LE EVALUER UNE EXPRESSION LISP">LE EVALUER UNE EXPRESSION LISP</a></li>
+<li><a href="#LISTER A PARTIR DE">LISTER A PARTIR DE</a></li>
+<li><a href="#LP DEASSEMBLER/PERFORER A PARTIR DE">LP DEASSEMBLER/PERFORER A PARTIR DE</a></li>
+<li><a href="#MODIFIER">MODIFIER</a></li>
+<li><a href="#NORMAL">NORMAL</a></li>
+<li><a href="#NUMERO A PARTIR DE">NUMERO A PARTIR DE</a></li>
+<li><a href="#PAS A PAS">PAS A PAS</a></li>
+<li><a href="#PERFORER A PARTIR DE">PERFORER A PARTIR DE</a></li>
+<li><a href="#POURSUIVRE JUSQU'EN">POURSUIVRE JUSQU'EN</a></li>
+<li><a href="#RANGER">RANGER</a></li>
+<li><a href="#REPRENDRE A PARTIR DE">REPRENDRE A PARTIR DE</a></li>
+<li><a href="#RUBAN">RUBAN</a></li>
+<li><a href="#SELECTIONNER RUBAN">SELECTIONNER RUBAN</a></li>
+<li><a href="#SILENCE">SILENCE</a></li>
+<li><a href="#SUPPRIMER">SUPPRIMER</a></li>
+<li><a href="#TABLE DES FICHIERS">TABLE DES FICHIERS</a></li>
+<li><a href="#TOUCHES">TOUCHES</a></li>
+<li><a href="#UTILISATION DISQUE">UTILISATION DISQUE</a></li></ul></div><a name="ABREGER"></a><code><b>AB</b>)REGER </code>
+<blockquote>
+<p>Ne complète pas l'affichage des commandes. </p>Voir la commande <code><a href="#IN EXTENSO">IN EXTENSO</a></code>.</blockquote><a name="AFFICHER REPERTOIRE"></a><code><b>AF</b>)FICHER REPERTOIRE </code>
+<blockquote>
+<p>Affiche le répertoire courant. </p>Voir les commandes <code><a href="#CHANGER REPERTOIRE">CHANGER REPERTOIRE</a></code>,  <code><a href="#TABLE DES FICHIER">TABLE DES FICHIER</a></code>,  <code><a href="#UTILISATION DISQUE">UTILISATION DISQUE</a></code>.</blockquote><a name="AIDER"></a><code><b>AI</b>)DER </code>
+<blockquote>
+<p>Affiche la liste des commandes disponibles. </p>Voir la commande: <code><a href="#DOCUMENTATION">DOCUMENTATION</a></code>.</blockquote><a name="APPELER"></a><code><b>AP</b>)PELER &lt;NOMPG&gt;</code>
+<blockquote>
+<p>Commande d'appel d'un programme déjà sur le disque. </p>
+<p>Le fichier programme dont le nom NOMPG est indiqué dans le répertoire courant est chargé en mémoire, remplaçant le programme courant. L'utilisateur peut alors l'exécuter, le lister, le modifier, etc. </p>Voir les commandes <code><a href="#AFFICHER REPERTOIRE">AFFICHER REPERTOIRE</a></code>,  <code><a href="#CHANGER REPERTOIRE">CHANGER REPERTOIRE</a></code>,  <code><a href="#RANGER">RANGER</a></code>,  <code><a href="#MODIFIER">MODIFIER</a></code>.</blockquote><a name="ARCHIVER RUBAN"></a><code><b>AR</b>)CHIVER RUBAN &lt;NOMFI&gt;</code>
+<blockquote>
+<p>Nomme le ruban qui vient d'être perforé et l'archive sur l'étagère. </p>Voir les commandes <code><a href="#ETAGERE DE RUBAN">ETAGERE DE RUBAN</a></code>,  <code><a href="#SELECTIONNER RUBAN">SELECTIONNER RUBAN</a></code>,  <code><a href="#RUBAN">RUBAN</a></code>,  <code><a href="#PERFORER A PARTIR DE">PERFORER A PARTIR DE</a></code>.</blockquote><a name="AU REVOIR"></a><code><b>AU</b>) REVOIR </code>
+<blockquote>
+<p>La commande AU REVOIR annonce au système qu'il peut effacer les fichiers temporaires, et quitter le système L.S.E. </p></blockquote><a name="CATALOGUER"></a><code><b>CA</b>)TALOGUER &lt;NOMF1&gt;,&lt;NOMF2&gt;</code>
+<blockquote>
+<p>NOMF1 est un fichier temporaire existant. NOMF2 est un fichier permanent. </p>
+<p>Cette commande permet de mettre en bibliothèque sous le nom NOMF2 le fichier données NOMF1 qui devient donc un fichier permanent. </p>
+<p>Les fichiers permanents sont garés dans le répertoire courant. </p>Voir les commandes <code><a href="#AFFICHER REPERTOIRE">AFFICHER REPERTOIRE</a></code>,  <code><a href="#CHANGER REPERTOIRE">CHANGER REPERTOIRE</a></code>,  <code><a href="#TABLE DES FICHIERS">TABLE DES FICHIERS</a></code>.</blockquote><a name="CHANGER REPERTOIRE"></a><code><b>CH</b>)ANGER REPERTOIRE &lt;TEXTE&gt;</code>
+<blockquote>
+<p>Change le répertoire courant. Le TEXTE donné désigne un chemin unix absolu, ou relatif à l'ancien répertoire courant. </p>Voir les commandes <code><a href="#AFFICHER REPERTOIRE">AFFICHER REPERTOIRE</a></code>,  <code><a href="#TABLE DES FICHIER">TABLE DES FICHIER</a></code>,  <code><a href="#UTILISATION DISQUE">UTILISATION DISQUE</a></code>.</blockquote><a name="CONTINUER"></a><code><b>CO</b>)NTINUER </code>
+<blockquote>
+<p>Permet de relancer l'exécution d'un programme momentanément interroompu par l'instruction PAUSE ou la touche d'interruption escape. L'exécution reprend à l'endroit où elle fut arrêtée. </p>Voir les commandes <code><a href="#PAS A PAS">PAS A PAS</a></code>,  <code><a href="#NORMAL">NORMAL</a></code>,  <code><a href="#EXECUTER A PARTIR DE">EXECUTER A PARTIR DE</a></code>,  <code><a href="#REPRENDRE A PARTIR DE">REPRENDRE A PARTIR DE</a></code>,  <code><a href="#POURSUIVRE JUSQU'EN">POURSUIVRE JUSQU'EN</a></code>.</blockquote><a name="DECODER"></a><code><b>DE</b>)CODER &lt;NOMFI&gt;[,&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Le programme courant est garé en fichier temporaire sous le nom NOMFI, depuis la ligne N1 jusqu'à la ligne N2. </p>
+<p>Si N2 est omis, on rangera de la ligne N1 jusqu'à la dernière ligne du programme. </p>
+<p>Si N1 et N2 sont omis, on rangera tout le programme de l'utilisateur. </p>
+<p>Le programme est rangé sous forme de chaîne de caractères, chaque ligne étant terminé par un code X-OFF (19) et avec un code NUL (0) à la fin, dans des enregistrements consécutifs partant du numéro 1. </p>Voir les commandes <code><a href="#ENCODER">ENCODER</a></code>,  <code><a href="#APPELER">APPELER</a></code>,  <code><a href="#RANGER">RANGER</a></code>,  <code><a href="#MODIFIER">MODIFIER</a></code>.</blockquote><a name="DOCUMENTATION"></a><code><b>DO</b>)CUMENTATION &lt;TEXTE&gt;</code>
+<blockquote>
+<p>Affiche la documentation d'une commande ou d'une instruction. </p>Voir la commande: <code><a href="#AIDER">AIDER</a></code></blockquote><a name="ECHO"></a><code><b>EC</b>)HO </code>
+<blockquote>
+<p>Active l'affichage de tout ce que l'utilisateur tape au clavier. </p>Voir les commandes <code><a href="#SILENCE">SILENCE</a></code>,  <code><a href="#RUBAN">RUBAN</a></code>.</blockquote><a name="EFFACER LIGNES"></a><code><b>EF</b>)FACER LIGNES * | &lt;N1&gt;[,&lt;N2&gt;[...,&lt;Nn&gt;]...] | &lt;N1&gt; A &lt;N2&gt;</code>
+<blockquote>
+<p>Si * est donné, efface tout le programme courant de l'utilisateur. Sinon supprime les lignes dont les numéros sont indiqués par N1, N2, ... Nn, ou les lignes de numéro N1 à N2 inclus, dans le programme courant de l'utilisateur. </p>Voir les commandes <code><a href="#LISTER A PARTIR DE">LISTER A PARTIR DE</a></code>,  <code><a href="#NUMERO A PARTIR DE">NUMERO A PARTIR DE</a></code>,  <code><a href="#PERFORER A PARTIR DE">PERFORER A PARTIR DE</a></code>.</blockquote><a name="ENCODER"></a><code><b>EN</b>)CODER &lt;NOMFI&gt;[,&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Cette commande est la commande symétrique de DECODER, les parametres NOMFI, N1 et N2 on la même signfication. </p>
+<p>Cette commande consiste à lire les instructions contenues dans le fichier à décoder et à les compiler. </p>Voir les commandes <code><a href="#DECODER">DECODER</a></code>,  <code><a href="#APPELER">APPELER</a></code>,  <code><a href="#RANGER">RANGER</a></code>,  <code><a href="#MODIFIER">MODIFIER</a></code>.</blockquote><a name="ETAGERE DE RUBANS"></a><code><b>ET</b>)AGERE DE RUBANS &lt;TEXTE&gt;</code>
+<blockquote>
+<p>Les rubans perforés sont simulés par des fichiers. Ils sont conservés sur des "étagère", c'est à dire, enregistrés dans des répertoires. </p>
+<p>Cette commande permet de sélectionner le répertoire où les rubans perforés sont enregistrés. </p>Voir les commandes <code><a href="#SELECTIONNER RUBAN">SELECTIONNER RUBAN</a></code>,  <code><a href="#RUBAN">RUBAN</a></code>,  <code><a href="#PERFORER A PARTIR DE">PERFORER A PARTIR DE</a></code>,  <code><a href="#ARCHIVER RUBAN">ARCHIVER RUBAN</a></code>.</blockquote><a name="EXECUTER A PARTIR DE"></a><code><b>EX</b>)ECUTER A PARTIR DE [&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Fait passer la console de l'état «moniteur» à l'état «exécution». </p>
+<p>Fait exécuter le programme courant de l'utilisateur à partir de la ligne de numéro N1 (si aucune ligne de numéro N1 existe, une erreur sera détectée). </p>
+<p>L'exécution se poursuivra jusqu'à ce qu'on arrive : </p>
+<ul>
+<li>soit à la ligne de numéro N2 ; cette ligne ne sera pas exécutée, la console repassera dans l'état «mooniteur» et affichera N2. </li>
+<li>soit à l'une des instructions LSE : PAUSE ou TERMINER ou à une erreur. La console repassera dans l'état «moniteur» et affichera un message indiquant la cause de l'arrêt et le numéro de la ligne où il s'est produit. Éventuellement, en cas d'arrêt dans une procédure, le numéro de la ligne où l'on avait appelé cette procédure. </li>
+<li>L'utilisation de la touche d'interruption escape arrête également l'exécution. </li></ul>Voir les commandes <code><a href="#PAS A PAS">PAS A PAS</a></code>,  <code><a href="#NORMAL">NORMAL</a></code>,  <code><a href="#CONTINUER">CONTINUER</a></code>,  <code><a href="#REPRENDRE A PARTIR DE">REPRENDRE A PARTIR DE</a></code>,  <code><a href="#POURSUIVRE JUSQU'EN">POURSUIVRE JUSQU'EN</a></code>.</blockquote><a name="IN EXTENSO"></a><code><b>IN</b>) EXTENSO </code>
+<blockquote>
+<p>Annule la commande ABREGER: complète l'affichage des commandes. </p>Voir la commande <code><a href="#ABREGER">ABREGER</a></code>.</blockquote><a name="LD DESASSEMBLER A PARTIR DE"></a><code><b>LD</b>) DESASSEMBLER A PARTIR DE [&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Commande de deboguage: Désassemble les lignes de programme. </p></blockquote><a name="LE EVALUER UNE EXPRESSION LISP"></a><code><b>LE</b>) EVALUER UNE EXPRESSION LISP &lt;TEXTE&gt;</code>
+<blockquote>
+<p>Commande de déboguage: évaluation d'une expression LISP. </p></blockquote><a name="LISTER A PARTIR DE"></a><code><b>LI</b>)STER A PARTIR DE [&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Fait afficher le programme courant de l'utilisateur, à partir de la ligne N1 jusqu'à la ligne N2, si N2 est présent, sinon jusqu'à la fin. En cours de listage, la touche d'interruption escape peut être utilisée pour l'arrêter. </p>Voir les commandes <code><a href="#NUMERO A PARTIR DE">NUMERO A PARTIR DE</a></code>,  <code><a href="#EFFACER LIGNES">EFFACER LIGNES</a></code>,  <code><a href="#PERFORER A PARTIR DE">PERFORER A PARTIR DE</a></code>.</blockquote><a name="LP DEASSEMBLER/PERFORER A PARTIR DE"></a><code><b>LP</b>) DEASSEMBLER/PERFORER A PARTIR DE [&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Commande de deboguage: Désassemble les lignes de programme en perforant un ruban. </p></blockquote><a name="MODIFIER"></a><code><b>MO</b>)DIFIER &lt;NOMPG&gt;</code>
+<blockquote>
+<p>Permet de ranger sur le disque un programme utilisateur. </p>
+<p>Le programme courant est enregistré dans un fichier de nom NOMPG indiqué, dans le répertoire courant. Le fichier doit exister préalablement, et il est mis à jour par le nouveau programme. </p>Voir les commandes <code><a href="#AFFICHER REPERTOIRE">AFFICHER REPERTOIRE</a></code>,  <code><a href="#CHANGER REPERTOIRE">CHANGER REPERTOIRE</a></code>,  <code><a href="#TABLE DES FICHIERS">TABLE DES FICHIERS</a></code>,  <code><a href="#APPELER">APPELER</a></code>,  <code><a href="#RANGER">RANGER</a></code>.</blockquote><a name="NORMAL"></a><code><b>NO</b>)RMAL </code>
+<blockquote>
+<p>Annule la commande PAS A PAS. </p>Voir les commandes <code><a href="#PAS A PAS">PAS A PAS</a></code>,  <code><a href="#CONTINUER">CONTINUER</a></code>,  <code><a href="#REPRENDRE A PARTIR DE">REPRENDRE A PARTIR DE</a></code>,  <code><a href="#POURSUIVRE JUSQU'EN">POURSUIVRE JUSQU'EN</a></code>.</blockquote><a name="NUMERO A PARTIR DE"></a><code><b>NU</b>)MERO A PARTIR DE [&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Fait afficher les numéros de lignes utilisés à partir du numéro N1 jusqu'au numéro N2, si N2 est présent, sinon jusqu'à la fin. </p>Voir les commandes <code><a href="#LISTER A PARTIR DE">LISTER A PARTIR DE</a></code>,  <code><a href="#EFFACER LIGNES">EFFACER LIGNES</a></code>,  <code><a href="#PERFORER A PARTIR DE">PERFORER A PARTIR DE</a></code>.</blockquote><a name="PAS A PAS"></a><code><b>PA</b>)S A PAS </code>
+<blockquote>
+<p>Peut être utilisée avant EXECUTER, CONTINUER, REPRENDRE. </p>
+<p>Fait arrêter l'exécution au début de chaque ligne. La console repasse alors dans l'état «moniteur» et affiche le numéro de la ligne atteinte. </p>
+<p>Pour faire continuer l'exécution il suffit de frapper RET mais on peut aussi utiliser toute autre commande ou le mode «machine de bureau»; pour revenir à l'exécution du programme, il faudra alors utiliser la commande CONTINUER. </p>Voir les commandes <code><a href="#NORMAL">NORMAL</a></code>,  <code><a href="#CONTINUER">CONTINUER</a></code>,  <code><a href="#REPRENDRE A PARTIR DE">REPRENDRE A PARTIR DE</a></code>,  <code><a href="#POURSUIVRE JUSQU'EN">POURSUIVRE JUSQU'EN</a></code>.</blockquote><a name="PERFORER A PARTIR DE"></a><code><b>PE</b>)RFORER A PARTIR DE [&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Permet d'obtenir un ruban perforé comme support du programme L.S.E. rentré à la console. </p>
+<p>Cette commande simule le ruban perforé en écrivant sur un fichier temporaire. Le ruban ainsi perforé peut alors être archivé sur une étagère avec la commande ARCHIVER RUBAN. </p>
+<p>Le programme est perforé à partir de la ligne N1 jusqu'à la ligne N2, si N2 est présent sinon jusqu'à la fin. </p>Voir les commandes <code><a href="#ETAGERE DE RUBAN">ETAGERE DE RUBAN</a></code>,  <code><a href="#SELECTIONNER RUBAN">SELECTIONNER RUBAN</a></code>,  <code><a href="#RUBAN">RUBAN</a></code>,  <code><a href="#ARCHIVER RUBAN">ARCHIVER RUBAN</a></code>.</blockquote><a name="POURSUIVRE JUSQU'EN"></a><code><b>PO</b>)URSUIVRE JUSQU'EN &lt;N&gt;</code>
+<blockquote>
+<p>Relance l'exécution comme CONTINUER, mais avec un arrêt en ligne N. </p>Voir les commandes <code><a href="#PAS A PAS">PAS A PAS</a></code>,  <code><a href="#NORMAL">NORMAL</a></code>,  <code><a href="#EXECUTER A PARTIR DE">EXECUTER A PARTIR DE</a></code>,  <code><a href="#CONTINUER">CONTINUER</a></code>,  <code><a href="#REPRENDRE A PARTIR DE">REPRENDRE A PARTIR DE</a></code>.</blockquote><a name="RANGER"></a><code><b>RA</b>)NGER &lt;NOMPG&gt;</code>
+<blockquote>
+<p>Permet de ranger sur le disque un programme utilisateur. </p>
+<p>Le programme courant est enregistré dans un fichier de nom NOMPG indiqué, dans le répertoire courant. Le fichier doit préalablement ne pas exister, et sera créé. </p>Voir les commandes <code><a href="#AFFICHER REPERTOIRE">AFFICHER REPERTOIRE</a></code>,  <code><a href="#CHANGER REPERTOIRE">CHANGER REPERTOIRE</a></code>,  <code><a href="#TABLE DES FICHIERS">TABLE DES FICHIERS</a></code>,  <code><a href="#APPELER">APPELER</a></code>,  <code><a href="#MODIFIER">MODIFIER</a></code>.</blockquote><a name="REPRENDRE A PARTIR DE"></a><code><b>RE</b>)PRENDRE A PARTIR DE [&lt;N1&gt;[,&lt;N2&gt;]]</code>
+<blockquote>
+<p>Permet de reprendre l'exécution sur une ligne différente de celle où elle fut interrompue. </p>
+<ul>
+<li>Les parametres N1 et N2 ont la même signification que ceux de la commande EXECUTER, mais la commande REPRENDRE ne change pas l'affectatioon des indentificateurs. Toutes les valeurs antérieures à l'interruption sont conservées. </li></ul>
+<p>L'exécution du programme est toujours reprise au niveau principal (même si le programme avait été interrompu dans une procédure). </p>Voir les commandes <code><a href="#PAS A PAS">PAS A PAS</a></code>,  <code><a href="#NORMAL">NORMAL</a></code>,  <code><a href="#EXECUTER A PARTIR DE">EXECUTER A PARTIR DE</a></code>,  <code><a href="#CONTINUER">CONTINUER</a></code>,  <code><a href="#POURSUIVRE JUSQU'EN">POURSUIVRE JUSQU'EN</a></code>.</blockquote><a name="RUBAN"></a><code><b>RU</b>)BAN </code>
+<blockquote>
+<p>Cette commande déclenche le lecteur de ruban de la télétype. </p>Voir les commandes <code><a href="#ETAGERE DE RUBAN">ETAGERE DE RUBAN</a></code>,  <code><a href="#SELECTIONNER RUBAN">SELECTIONNER RUBAN</a></code>,  <code><a href="#PERFORER A PARTIR DE">PERFORER A PARTIR DE</a></code>,  <code><a href="#ARCHIVER RUBAN">ARCHIVER RUBAN</a></code>.</blockquote><a name="SELECTIONNER RUBAN"></a><code><b>SE</b>)LECTIONNER RUBAN &lt;NOMFI&gt;</code>
+<blockquote>
+<p>Selectionne un ruban de l'étagère et le place dans le lecteur de ruban. </p>
+<p>Un fichier ruban doit commencer par un titre sur la première ligne, suivi des données. </p>
+<p>Le titre est lu et affiché par cette commande; le reste des données est lu par les commandes et instructions données par l'utilisateur ou le programme. </p>Voir les commandes <code><a href="#ETAGERE DE RUBAN">ETAGERE DE RUBAN</a></code>,  <code><a href="#RUBAN">RUBAN</a></code>,  <code><a href="#PERFORER A PARTIR DE">PERFORER A PARTIR DE</a></code>,  <code><a href="#ARCHIVER RUBAN">ARCHIVER RUBAN</a></code>.</blockquote><a name="SILENCE"></a><code><b>SI</b>)LENCE </code>
+<blockquote>
+<p>Supprime l'affichage de tout ce que l'utilisateur tape au clavier. L'effet de cette commande est annulé par la touche escape ou par commande ECHO. </p>Voir les commandes <code><a href="#ECHO">ECHO</a></code>,  <code><a href="#RUBAN">RUBAN</a></code>.</blockquote><a name="SUPPRIMER"></a><code><b>SU</b>)PPRIMER * | &lt;NOMFI&gt;,P|D|T</code>
+<blockquote>
+<p>SUPPRIMER * supprime tous les fichiers temporaires. </p>
+<p>SUPPRIMER NOMFI,P|D|T supprime le fichier Programme, Donnée permanent, ou Temporaire indiqué. </p>Voir les commandes <code><a href="#TABLE DES FICHIERS">TABLE DES FICHIERS</a></code>,  <code><a href="#UTILISATION DISQUE">UTILISATION DISQUE</a></code>.</blockquote><a name="TABLE DES FICHIERS"></a><code><b>TA</b>)BLE DES FICHIERS </code>
+<blockquote>
+<p>Cette comamnde liste tous les fichiers programmes et donnée du répertoire courant, et les fichiers temporaires. </p>Voir les commandes <code><a href="#UTILISATION DISQUE">UTILISATION DISQUE</a></code>,  <code><a href="#SUPPRIMER">SUPPRIMER</a></code>.</blockquote><a name="TOUCHES"></a><code><b>TO</b>)UCHES </code>
+<blockquote>
+<p>Montre les touches. </p></blockquote><a name="UTILISATION DISQUE"></a><code><b>UT</b>)ILISATION DISQUE </code>
+<blockquote>
+<p>Cette comamnde liste tous les fichiers programmes et donnée du répertoire courant, et les fichiers temporaires. </p>Voir les commandes <code><a href="#TABLE DES FICHIERS">TABLE DES FICHIERS</a></code>,  <code><a href="#SUPPRIMER">SUPPRIMER</a></code>.</blockquote></body></html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/doc-cli/lse-fonctions.html b/com.ogamita.www/nasium-lse/doc-cli/lse-fonctions.html
new file mode 100644
index 0000000..21f3b6c
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/doc-cli/lse-fonctions.html
@@ -0,0 +1,199 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+
+<html>
+<head>
+<title>NASIUM L.S.E. - Fonctions</title>
+<link rel="shortcut icon" href="http://www.ogamita.com/favicon.ico">
+<link rel="icon" href="http://www.ogamita.com/favicon.ico" type="image/vnd.microsoft.icon">
+<link rel="icon" href="http://www.ogamita.com/favicon.png" type="image/png">
+<link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
+<meta name="author" content="Pascal J. Bourguignon">
+<meta name="Reply-To" content="pjb@informatimago.com">
+<meta name="Keywords" content="NASIUM, LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français, fonctions"></head>
+<body><img src="../nasium-lse-2.png" alt="NASIUM L.S.E.">
+<hr>
+<div class="navigation"><a href="../">Maison</a> | <a href="lse-instructions.html">Page précédente</a> | <a href="index.html">Index</a> | <a href="lse-grammaire.html">Page suivante</a></div>
+<hr>
+<h2>Fonctions</h2>
+<p>Ce chapitre présente une description succinte des fonctions du système L.S.E. Pour plus de détails, voir les références. </p>
+<p>On inclu également les opérateurs. Les expressions peuvent combiner plusieurs opérations et appels de fonctions. Voir la section PRIORITE, pour l'ordre d'évaluation des opérateurs, lorsqu'ils ne sont pas groupés avec des parenthèses. </p>
+<p>Les appels peuvent se faire aux fonctions primitives décrite dans ce chapitre, ou à des procédure fonctions déclarée dans le programme (voir instructions PROCEDURE et RESULTAT). Les procédure fonctions ont un identificateur començant par un caractère '&amp;'. </p>
+<p>Chacune des sections suivantes décrivent une commande, selon le format suivant: </p>
+<ul>
+<li>nom de la fonction, description succinte, </li>
+<li>syntaxe, </li>
+<li>description, </li>
+<li>exemples (optionels), </li>
+<li>références (optionelles). </li></ul>
+<div class="toc">
+<p>Table des fonctions :</p>
+<ul>
+<li><a href="#!">!</a></li>
+<li><a href="#ABS">ABS</a></li>
+<li><a href="#ALE">ALE</a></li>
+<li><a href="#ATG">ATG</a></li>
+<li><a href="#ATT">ATT</a></li>
+<li><a href="#CCA">CCA</a></li>
+<li><a href="#CNB">CNB</a></li>
+<li><a href="#COMPARAISON">COMPARAISON</a></li>
+<li><a href="#CONJONCTION">CONJONCTION</a></li>
+<li><a href="#COS">COS</a></li>
+<li><a href="#DAT">DAT</a></li>
+<li><a href="#DISJONCTION">DISJONCTION</a></li>
+<li><a href="#DIVISE">DIVISE</a></li>
+<li><a href="#ENT">ENT</a></li>
+<li><a href="#ENV">ENV</a></li>
+<li><a href="#EQC">EQC</a></li>
+<li><a href="#EQN">EQN</a></li>
+<li><a href="#ETL">ETL</a></li>
+<li><a href="#EXP">EXP</a></li>
+<li><a href="#FOIS">FOIS</a></li>
+<li><a href="#GRL">GRL</a></li>
+<li><a href="#LGN">LGN</a></li>
+<li><a href="#LGR">LGR</a></li>
+<li><a href="#LISP">LISP</a></li>
+<li><a href="#MOINS">MOINS</a></li>
+<li><a href="#NEGATION">NEGATION</a></li>
+<li><a href="#OPPOSÉ">OPPOSÉ</a></li>
+<li><a href="#OUL">OUL</a></li>
+<li><a href="#OUX">OUX</a></li>
+<li><a href="#PLUS">PLUS</a></li>
+<li><a href="#POS">POS</a></li>
+<li><a href="#PRIORITE">PRIORITE</a></li>
+<li><a href="#PTR">PTR</a></li>
+<li><a href="#PUISSANCE">PUISSANCE</a></li>
+<li><a href="#RAC">RAC</a></li>
+<li><a href="#SCH">SCH</a></li>
+<li><a href="#SIN">SIN</a></li>
+<li><a href="#SITERNAIRE">SITERNAIRE</a></li>
+<li><a href="#SKP">SKP</a></li>
+<li><a href="#TEM">TEM</a></li>
+<li><a href="#XIT">XIT</a></li></ul></div><a name="!"></a>
+<h3>! - Concaténation de deux chaînes</h3><code>A!B</code>
+<p>Résultat: La concatenation des chaînes A et B. </p><a name="ABS"></a>
+<h3>ABS - Valeur absolue</h3><code>ABS(A)</code>
+<p>Résultat: La valeur absolue de A. </p><a name="ALE"></a>
+<h3>ALE - Valeur pseudo-aléatoire</h3><code>ALE(A)</code>
+<p>Résultat: Une valeur pseudo-aléatoire comprise entre 0 et 1 (bornes exclues). </p>
+<p>Si A=0 alors le résultat est vraiment aléatoire (différent à chaque appel). </p>
+<p>Si 0&lt;A&lt;1 alors le résultat dépent de A, ce qui permet de calculer des séries pseudo-aléatoire reproduisibles. </p><a name="ATG"></a>
+<h3>ATG - Arc tangente</h3><code>ATG(A)</code>
+<p>Résultat: L'arc tangente de A, exprimé en radian. </p><a name="ATT"></a>
+<h3>ATT - Signal d'attention utilisateur</h3><code>ATT()</code>
+<p>Cette fonction retourne normalement 0. </p>
+<p>Lorsque l'utilisateur tape <kbd>[ATTENTION]</kbd>, ATT() retourne transitoirement 1. </p><a name="CCA"></a>
+<h3>CCA - Conversion en caractère</h3><code>CCA(A)</code>
+<p>Résultat: une chaîne de caractère contenant la représentation du nombre A au format U. </p><a name="CNB"></a>
+<h3>CNB - Conversion en nombre</h3><code>CNB(CH,DE) ou CNB(CH,DE,VA)</code>
+<p>Résultat: un nombre converti de la sous-chaîne de CH commençant à la position DE. (Les espaces initiaux sont ignorés). </p>
+<p>Si VA est présent, ce doit être une variable arithmétique à laquelle la fonction CNB affecte la position du premier caractère qui n'est pas utilisé dans la représentation. </p><a name="COMPARAISON"></a>
+<h3>COMPARAISON</h3><code>A&lt;B, A&lt;=B, A&gt;B, A&gt;=B, A=B, A#B</code>
+<p>A et B doivent être du même type, soit tous les deux nombres, soit tous les deux chaînes. </p>
+<p>Résultat: vrai ou faux, selon l'ordre de A et B. </p><a name="CONJONCTION"></a>
+<h3>CONJONCTION</h3><code>comparaison1 ET comparaison2</code>
+<p>Résultat: conjonction des deux comparaisons. </p><a name="COS"></a>
+<h3>COS - Cosinus</h3><code>COS(A)</code>
+<p>Résultat: Le Cosinus de l'angle A exprimé en radian. </p><a name="DAT"></a>
+<h3>DAT - Chaîne date</h3><code>DAT()</code>
+<p>Résultat: une chaîne au format AA/MM/DD HH:MM:SS représentant la date et l'heure courante. </p>
+<p>Note: Cette fonction n'est pas conforme Y2K, elle retourne 00 pour 2000. </p><a name="DISJONCTION"></a>
+<h3>DISJONCTION</h3><code>conjonction1 OU conjonction2</code>
+<p>Résultat: disjonction des deux conjonctions. </p><a name="DIVISE"></a>
+<h3>DIVISE - Quotient de deux nombres</h3><code>A/B</code>
+<p>Résultat: Le produit de la multiplication entre A et B. </p>
+<p>B doit être non-nul, sinon un erreur est détectée. </p><a name="ENT"></a>
+<h3>ENT - Partie entière</h3><code>ENT(A)</code>
+<p>Résultat: La partie entière de A. </p><a name="ENV"></a>
+<h3>ENV - Variable d'environement</h3><code>ENV(NOM)</code>
+<p>Résultat: une chaîne contenant la valeur de la variable d'environement POSIX du nom indiqué. Si la variable d'environement n'existe pas, une chaîne vide est retournée. </p>
+<p>Exemple: ENV('USERNAME') --&gt; 'pjb' </p><a name="EQC"></a>
+<h3>EQC - Équivalent caractère</h3><code>EQC(CO)</code>
+<p>Résultat: une chaîne de 1 caractère dont l'équivalent numérique en code ASCII est CO. </p><a name="EQN"></a>
+<h3>EQN - Équivalent numérique</h3><code>EQN(CH) ou EQN(CH,PO)</code>
+<p>Résultat: l'équivalent numérique en code ASCII du caractère de la chaine CH qui se trouve en position PO, ou en première position si PO est omis. </p><a name="ETL"></a>
+<h3>ETL - ET logique bit-à-bit</h3><code>ETL(A,B)</code>
+<p>Résultat: le ET logique bit-à-bit entre les bits de A et ceux de B. </p><a name="EXP"></a>
+<h3>EXP - exponentiation e↑A</h3><code>EXP(A)</code>
+<p>Résultat: e à la puissance A. </p>
+<p>e=2.7182817 </p>
+<p>LGN est l'inverse de EXP. </p><a name="FOIS"></a>
+<h3>FOIS - Produit de deux nombres</h3><code>A*B</code>
+<p>Résultat: Le produit de la multiplication entre A et B. </p><a name="GRL"></a>
+<h3>GRL - Groupe de lettres</h3><code>GRL(CH,DE) ou GRL(CH,DE,VA)</code>
+<p>Résultat: la sous-chaîne composée de la première séquence continue de lettres à partir de la position DE. </p>
+<p>Si VA est présent, ce doit être une variable arithmétique à laquelle la fonction SCH affecte soit la position du premier caractère qui n'est pas une lettre, soit LGR(CH)+1 si le dernier caractère de la sous-chaîne est le dernier caractère de la chaîne. </p><a name="LGN"></a>
+<h3>LGN - Logarithme népérien</h3><code>LGN(A)</code>
+<p>Résultat: Le logarithme népérien de A. </p>
+<p>L'argument A doit être un nombre strictement positif, sinon une erreur est détectée. </p><a name="LGR"></a>
+<h3>LGR - Longueur d'une chaîne</h3><code>LGR(A)</code>
+<p>Résultat: la longueur de la chaîne A. </p><a name="LISP"></a>
+<h3>LISP - Evaluation d'une expression LISP</h3><code>LISP(EXPR,PRINT,NOERR)</code>
+<p>Cette fonction évalue l'expression Common Lisp EXPR. </p>
+<pre>1* FONCTION LISP(EXPR,PRINT,NOERR)
+2* PRINT=0 =&gt; LISP() N'AFFICHE RIEN;
+3* PRINT=1 =&gt; LISP() AFFICHE LES RESULTATS DE L'EXPRESSION LISP.
+4 PRINT←1
+5* NOERR=0 =&gt; SI UNE ERREUR EST DETECTEE ELLE EST RAPPORTEE NORMALEMENT.
+6* NOERR=1 =&gt; SI UNE ERREUR EST DETECTEE, LISP() RETOURNE 0.0.
+7 NOERR←1
+8 A←LISP('(TRUNCATE 10 3)',PRINT,NOERR)
+9 TERMINER
+</pre><a name="MOINS"></a>
+<h3>MOINS - Différence de deux nombres</h3><code>A-B</code>
+<p>Résultat: La difference entre A et B. </p><a name="NEGATION"></a>
+<h3>NEGATION</h3><code>NON condition</code>
+<p>Résultat: La négation logique de la condition. </p><a name="OPPOSÉ"></a>
+<h3>OPPOSÉ - Changement de signe</h3><code>-A</code>
+<p>Résultat: L'opposé de A. </p><a name="OUL"></a>
+<h3>OUL - OU logique bit-à-bit</h3><code>OUL(A,B)</code>
+<p>Résultat le OU logique bit-à-bit entre les bits de A et ceux de B. </p><a name="OUX"></a>
+<h3>OUX - OU exclusif bit-à-bit</h3><code>OUX(A,B)</code>
+<p>Résultat le OU exclusif bit-à-bit entre les bits de A et ceux de B. </p><a name="PLUS"></a>
+<h3>PLUS - Somme de deux nombres</h3><code>A+B</code>
+<p>Résultat: La somme des deux nombres. </p><a name="POS"></a>
+<h3>POS - Position d'une sous-chaîne</h3><code>POS(CH,DE,SC)</code>
+<p>Résultat: la position de la première occurence de la sous-chaîne SC dans la chaîne CH, après la position DE, ou 0 si SC n'est pas une sous-chaîne de CH. </p>
+<p>DE doit être un nombre entier supérieur ou égal à 1. </p><a name="PRIORITE"></a>
+<h3>PRIORITE</h3><code>Priorité des opérateurs</code>
+<p>Hors présence de parenthèses, les opérations sont évaluées par ordre de priorité décroissante: </p>
+<ul>
+<li>SI ternaire, appel de fonction, référence à une variable ou un tableau. </li>
+<li>A↑B Élévation à la puissance. </li>
+<li>A*B et A/B, multiplication et division. </li>
+<li>-A. opposé. </li>
+<li>A+B, A-B et C!D, addition et soustraction de nombres, et concaténation de chaînes. </li>
+<li>A&lt;B, A&lt;=B, A&gt;B, A&gt;=B, A=B et A#B, comparaisons. </li>
+<li>NON EB, négation logique. </li>
+<li>A ET B, conjonction. </li>
+<li>A OU B, disjonction. </li></ul><a name="PTR"></a>
+<h3>PTR - Pointeur</h3><code>PTR(CH,DE) ou PTR(CH,DE,EV)</code>
+<p>Résultat: la position dans la chaîne CH, à partir de la position DE, soit du premier caractère qui n'est pas une lettre si EV n'est pas donné, soit du premier caractère qui est n'est pas dans la chaîne EV; ou bien LGR(CH)+1 si tous les caractères sont des lettres, ou si tous les caractères sont dans la chaine EV. </p><a name="PUISSANCE"></a>
+<h3>PUISSANCE - Élévation à la puissance</h3><code>A↑B</code>
+<p>Résultat: A à la puissance B. </p>
+<p>Si A est négatif, alors B doit être entier. </p>
+<p>Note sur un terminal Unicode, ↑ s'affiche comme une flêche vers le haut. Sur un terminal ASCII, c'est un chapeau, AltGr-9 ou chapeau espace sur un clavier AZERTY, Shift-6 sur un clavier QWERTY. </p><a name="RAC"></a>
+<h3>RAC - Racine carrée</h3><code>RAC(A)</code>
+<p>Résultat: La racine carrée de A. </p>
+<p>L'argument A doit être un nombre positif ou nul, sinon une erreur est détectée. </p><a name="SCH"></a>
+<h3>SCH - Sous-chaîne</h3><code>SCH(CH,DE,LO[,VA]) ou SCH(CH,DE,SC[,VA])</code>
+<p>CH est une chaîne d'où SCH va extraire une sous-chaîne. </p>
+<p>DE est la position de départ de la sous-chaîne. </p>
+<p>LO est la longueur de la sous-chaîne. </p>
+<p>SC est une chaîne contenant les caractères d'arrêt de la sous-chaîne. </p>
+<p>Résultat: une sous-chaîne de CH, commençant à la position DE, de longueur LO ou allant jusqu'à la première occurence d'un des caractères de SC. </p>
+<p>Si VA est présent, ce doit être une variable arithmétique à laquelle la fonction SCH affecte soit la position du premier caractère qui n'est pas utilisé dans la représentation, soit LGR(CH)+1 si le dernier caractère de la sous-chaîne est le dernier caractère de la chaîne. </p><a name="SIN"></a>
+<h3>SIN - Sinus</h3><code>SIN(A)</code>
+<p>Résultat: Le Sinus de l'angle A exprimé en radian. </p><a name="SITERNAIRE"></a>
+<h3>SITERNAIRE</h3><code>SI condition ALORS expr1 SINON expr2</code>
+<p>Résultat: si condition est vrai alors le résultat de l'expression expr1, sinon le résultat de l'expression expr2. </p><a name="SKP"></a>
+<h3>SKP - Saut</h3><code>SKP(CH,DE) ou SKP(CH,DE,EV)</code>
+<p>Résultat: la position dans la chaîne CH, à partir de la position DE, de la première lettre si EV n'est pas donné, ou du premier caractère qui n'est pas dans la chaîne EV; ou bien LGR(CH)+1 si aucune lettre, ou si tous les caractères sont dans la chaine EV. </p><a name="TEM"></a>
+<h3>TEM - Temps en seconde écoulé depuis minuit.</h3><code>TEM(A)</code>
+<p>Résultat: Le nombre de secondes écoulées depuis le début du jour (minuit). </p><a name="XIT"></a>
+<h3>XIT - Sortie de boucles</h3><code>XIT(N)</code>
+<p>Cette procédure permet de sortir d'un ou de plusieurs niveaux de boucles. </p>
+<p>Si N=0 alors cet procédure ne fait rien. </p>
+<p>Si N=1 alors on sort de la boucle courante. </p>
+<p>Si N&gt;1 alors on sort de N boucle imbriquées. </p>
+<p>Si N est supérieur au nombre de boucles imbriquées, on sort de toutes les boucles. </p>Voir: <code><a href="#FAIREJUSQUA">FAIREJUSQUA</a></code>,  <code><a href="#FAIRETANTQUE">FAIRETANTQUE</a></code></body></html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/doc-cli/lse-generalites.html b/com.ogamita.www/nasium-lse/doc-cli/lse-generalites.html
new file mode 100644
index 0000000..babe58e
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/doc-cli/lse-generalites.html
@@ -0,0 +1,194 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+
+<html>
+<head>
+<title>NASIUM L.S.E. - Généralités</title>
+<link rel="shortcut icon" href="http://www.ogamita.com/favicon.ico">
+<link rel="icon" href="http://www.ogamita.com/favicon.ico" type="image/vnd.microsoft.icon">
+<link rel="icon" href="http://www.ogamita.com/favicon.png" type="image/png">
+<link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
+<meta name="author" content="Pascal J. Bourguignon">
+<meta name="Reply-To" content="pjb@informatimago.com">
+<meta name="Keywords" content="NASIUM, LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français, généralités"></head>
+<body><img src="../nasium-lse-2.png" alt="NASIUM L.S.E.">
+<hr>
+<div class="navigation"><a href="../">Maison</a> | <a href="index.html">Index</a> | <a href="lse-options.html">Page suivante</a></div>
+<hr>
+<h2>Généralités</h2>
+<p>NASIUM L.S.E. </p>
+<p>SYSTÈME L.S.E. </p>
+<p>LANGAGE SYMBOLIQUE D'ENSEIGNEMENT </p>
+<div class="toc">
+<p>Table des généralités :</p>
+<ul>
+<li><a href="#1. PRESENTATION">1. PRESENTATION</a></li>
+<li><a href="#2. B.A.BA">2. B.A.BA</a></li>
+<li><a href="#7. MODE EMACS">7. MODE EMACS</a></li>
+<li><a href="#8. REFERENCES">8. REFERENCES</a></li></ul></div><a name="1. PRESENTATION"></a>
+<h3>1. PRESENTATION</h3>
+<p>Le L.S.E. est un langage de programmation adapté aux besoins de l'enseignement. (C'est à dire aux besoins de l'enseignement dans les années 1970, je ne mets pas d'émoticon car ils n'étaient pas inventés à l'époque). Il fut inventé par l'École Supérieure d'Électricité dans les années 1970. Il fût utilisé par l'enseignement secondaire en France, et également par l'École d'Application des Transmissions de l'Armée. </p>
+<p>Ce langage de programmation était utilisé dans 57 lycées de France faisant partie de l'expérience des 57 minis. C'étaient des mini-ordinateurs CII (SEMS) MITRA-15 et Télémécanique T-1600, sur lesquels un environnement et un interpréteur L.S.E. interactifs fonctionnaient, via 8 ou 16 consoles de visualisation et 1 ou 2 télétypes/perforatrices de ruban. </p>
+<p>Un compilateur L.S.E. pour ordinateurs CII 10170 et CII IRIS 80 sur les systèmes SIRIS 7 et SIRIS 8 fût également développé et utilisé dans les universités disposant de ces matériels, dont l'utilisation était basée sur les cartes perforées. </p>
+<p>Au début des années 1980, ces mini-ordinateurs fûrent submergés par la vague des 10000 micros tels les R2E Micral, et les Logabax, sur lesquels l'environnement L.S.E. et l'interpreteur L.S.E. fûrent portés, (SARL Microdur fondée en 1982 afin de poursuivre le développement de L.S.E., EDL et, plus recemment Logicia), puis même sur les suivants, les compatibles PC, le Macintosh, et des matériels Commodore. </p>
+<p>Ces 57 mini-ordinateurs disposaient d'une mémoire centrale de 4 ou 8 kilo-mots, c'est à dire 8192 octets ou 16384 octets, pas kilo-octets, ni même, n'y pensez pas méga-octets. Ce document ne tiendrait pas entierement dans ces mémoires centrales! Les disques durs atteignaient à peine les 256 Ko et les disquettes de 8" les 64 Ko. L'espace de mémoire centrale restant pour stocker les programmes L.S.E. et les données de l'utilisateurs était de l'ordre de 2000 mots (4 ko, 4096 octets ! On pouvait les compter sur ses doigts en binaire, et il restait 8 doigts). Quand à l'espace de disque dur disponible, il se comptait en dizaines de secteurs de 256 octets, pas beaucoup plus. Heureusement, on disposait d'un lecteur de disquettes 8". D'accord, disons plutôt, de galettes souples, de 8 pouce, c'est pas vraiment des disquettes. Leur capacité étant, si je me souviens bien de 40 pistes de 8 secteurs de 128 octets soit 40960 octets en tout (plus que la mémoire centrale). </p>
+<p>Et bien entendu, les unités centrales de ces "mini" ordinateurs occupaient la place d'un trés gros réfrigerateur, et nécessitaient une alimentation électrique triphasée. </p>
+<p>LSE devrait vous permettre de resentir les joies qu'offraient un tel environnement de programmation. Malgrès tous nos efforts, nous ne réussirons surement pas à vous empêcher de programmer en L.S.E. en évitant les avantages offerts par les méga-systèmes-GUI actuels. Néanmoins, il constitura surement un article de valeur dans le musée historique virtuel des systèmes anciens. </p>
+<p>L.S.E. n'est plus un langage "vivant" et il ne me semble pas intéressant d'envisager une implémentation "contemporaine" (voir les versions pour les premiers micro-ordinateurs, avec introduction des miniscules et des graphiques bit-map). Aussi ce projet se limite volontairement au système qui existait sur MITRA-15 avec toutes ses contraintes et limites. Avec cependant quelques modifications afin de l'adapter à l'environnement unix. </p>
+<p>Veuillez envoyer vos commentaires, rapports de bogues, suggestions à : Pascal Bourguignon <a href="mailto:pjb@ogamita.com">mailto:pjb@ogamita.com</a> </p><a name="2. B.A.BA"></a>
+<h3>2. B.A.BA</h3>
+<p>Au lancement de la commande lse, on entre directement dans l'état actif, et la commande AU)REVOIR fait quiter le programme lse et revenir à la coquille (au "shell"). </p>
+<p>Dans l'état actif, on peut donner: </p>
+<ul>
+<li>des commandes, </li>
+<li>des lignes de programmes numérotées, et </li>
+<li>des instructions à exécuter immédiatement en mode "machine de bureau". </li></ul>
+<p>Les commandes sont données avec leur deux premières lettres. Le système L.S.E. complète la commande (sauf lorsque la commande ABREGER a été donnée) une fois que la saisie des deux lettres est validée. </p>
+<p>Les saisies sont validées avec le code X-OFF, c'est a dire, CONTRÔLE-S, pas avec ENTRÉE. Ceci étant dû au fonctionnement des consoles qui acceptent la saisie d'une ligne sans intervention de l'unité centrale. la pression de X-OFF provoque la transmission de la ligne saisie a l'unite centrale. </p>
+<p>Les consoles SINTRA fonctionnaient comme une télétype : la saisie (hors ligne) n'était possible que sur la ligne du bas. il n'y avait pas de curseur, la ligne était emplie de soulignés que la saisie recouvrait. L'affichage se faisaient également à partir du bas de l'écran et à la réception d'un saut de ligne ça défilait vers le haut comme le papier de la télétype et sans possibilité de revenir en arrière. lse ne simule pas cette ligne de soulignés et laisse l'emulateur de terminal utilisé afficher un curseur. </p>
+<p>Comme la saisie se faisait sans intervention de l'unité centrale, il n'y avait pas moyen de corriger vraiment les caractères saisis (pas d'édition de la ligne de saisie). On peut cependant commander la suppression du ou des caractères précédement saissis en tapant un ou plusieurs caractères contre-cotice : </p>
+<p>Taper : BON\\\SALE\UT! </p>
+<p>Équivaut à taper : SALUT! </p>
+<p>La touche ÉCHAPEMENT (ESC) permet d'interrompre le traitement et revenir à l'invite. </p>
+<p>La touche CONTRÔLE-A permet d'envoyer un signal asynchrone qui est lu avec la fonction ATT(). </p>
+<p>En résumé : </p>
+<ul>
+<li>CONTRÔLE-S pour saisir les données, </li>
+<li>ÉCHAPEMENT pour interrompre, </li>
+<li>CONTRÔLE-A pour envoyer un signal lu par ATT(), </li>
+<li>control-cotice \ pour supprimer un caractère. </li>
+<li>ENTRÉE peut aussi s'utiliser pour entrer une chaîne de caractère, mais alors un code RETOUR CHARIOT (13) est ajouté à la fin de la chaîne. </li></ul>
+<p>Cependant, on peut sélectionner le mode moderne, dans lequel les touches utilisées sont celles configurées par stty(1), normalement: </p>
+<ul>
+<li>ENTRÉE pour saisir les données, </li>
+<li>CONTRÔLE-C pour interrompre, </li>
+<li>CONTRÔLE-\ pour envoyer un signal lu par ATT(), </li>
+<li>EFFACEMENT pour supprimer un caractère. </li></ul>
+<p>Ceci permet de conserver ses habitudes récentes. </p>
+<p>Nous avons introduit quelques commandes nouvelles, en particulier : </p>
+<ul>
+<li>AI)DE permet d'afficher la liste des commandes disponibles dans l'état où on se trouve. </li>
+<li>DO)CUMENTATION permet de lire la documentation en-ligne. </li></ul>
+<p>Exemple de session. </p>
+<p>Rappel : les commandes se tapent avec leurs deux premiers caractères et la touche d'entrée (CONTRÔLE-S ou ENTRÉE selon la configuration), lse complétant: B O <kbd>[X-OFF]</kbd> --&gt; BONJOUR. </p>
+<pre>   || = LIGNE AFFICHEE PAR LE SYSTEME.
+
+   &gt;| = LES DEUX PREMIERS CARACTÈRES SONT TAPES PAR L'UTILISATEUR, SUIVIT
+        DE [XOFF] (ET ÉVENTUELLEMENT LE PARAMÈTRE DE LA COMMANDE).
+
+   &gt;&gt; = TOUTE LA LIGNE EST TAPÉE PAR L'UTILISATEUR, TERMINÉE PAR [ENTRÉE]
+
+   |&gt; = AFFICHAGE D'UN MESSAGE PAR LE SYSTÈME, SUIVIT D'UNE SAISIE PAR
+        L'UTILISATEUR TEMINÉE PAR [XOFF].
+
+
+   ||  NASIUM L.S.E.
+   ||  LANGAGE SYMBOLIQUE D'ENSEIGNEMENT
+   ||  VERSION 1.0.0-0.272-CL-UNIX
+   ||  COPYRIGHT 1984 - 2014 PASCAL BOURGUIGNON
+   ||
+   ||  DISTRIBUE SELON LES TERMES DE LA LICENCE AGPLv3.
+   ||
+   ||  Ce programme est livré avec ABSOLUMENT AUCUNE GARANTIE; pour plus de
+   ||  détails utilisez la commande DO GARANTIE.  Ce logiciel est libre, et
+   ||  vous êtes les bienvenus pour redistribuer sous certaines conditions;
+   ||  utilisez la commande DO LICENSE pour plus de détails.
+   ||
+   ||  Tapez AI pour avoir de l'aide.
+   ||
+   ||  BONJOUR     21:15:40
+   ||
+   ||  PRET
+   ||
+   &gt;&gt;  1*TEST
+   &gt;&gt;  10 AFFICHER 'QUI EST\ TU ? '
+   &gt;&gt;  20 CHAINE NOM;LIRE NOM
+   &gt;&gt;  30 AFFICHER 'ENCHANTE ',NOM,' !'
+   &gt;&gt;  40 AFFICHER 'N\\NOM,' \, DONNE MOIS\ UN NOMBRE, SIL T \\\\\'IL TE PLAIT : '
+   &gt;|  LISTER A PARTIR DE 40
+   ||  40 AFFICHER NOM,', DONNE MOI UN NOMBRE, S''IL TE PLAIT : '
+   &gt;&gt;  50 LIRE N
+   &gt;&gt;  60 AFFICHER '\N,' * 'M\,NM\,' = ',N*N
+   &gt;&gt;  70 AFFICHER 'AU REVOIR '\\M\, ',NOM
+   &gt;&gt;  80 TERMINER
+   &gt;|  LISTER A PARTIR DE 1
+   ||  1*TEST
+   ||  10 AFFICHER 'QUI ES TU ? '
+   ||  20 CHAINE NOM;LIRE NOM
+   ||  30 AFFICHER 'ENCHANTE ',NOM,' !'
+   ||  40 AFFICHER NOM,', DONNE MOI UN NOMBRE, S''IL TE PLAIT : '
+   ||  50 LIRE N
+   ||  60 AFFICHER N,' * ',N,' = ',N*N
+   ||  70 AFFICHER 'AU REVOIR, ',NOM
+   ||  80 TERMINER
+   &gt;|  EXECUTER A PARTIR DE 1
+   |&gt;  QUI ES TU ? PASCAL
+   ||  ENCHANTE PASCAL !
+   |&gt;  PASCAL, DONNE MOI UN NOMBRE, S'IL TE PLAIT : 12
+   ||  12  * 12  = 144
+   &gt;|  AU REVOIR, PASCAL
+   ||  TERMINE
+   ||
+   &gt;|  AU REVOIR  04:09:21
+</pre><a name="7. MODE EMACS"></a>
+<h3>7. MODE EMACS</h3>
+<p>Un mode emacs pour l'édition des programmes L.S.E. est fourni avec les sources (voir section LÉGAL, SOURCES). </p>
+<p>En particulier, il remplace l'affichage caractère souligné par une flêche gauche (unicode) de l'affectation, et celui du caractère chapeau par une flêche vers le haut (unicode) de la puissance, qui étaient dans le jeu de caractère des systèmes L.S.E. </p>
+<p>Les numéros de lignes ont automatiquement insérés par la touche retour, et une commande pour renuméroter est fournie. </p>
+<p>Pour l'activer, utiliser la commande emacs: </p>
+<p>M-x load-file RET lse-mode.el RET </p>
+<p>ou placer dans ~/.emacs: </p>
+<p>(require 'lse-mode) </p>
+<p><a href="http://www.gnu.org/s/emacs">http://www.gnu.org/s/emacs</a> </p>
+<p><a href="http://www.emacsformacosx.com/">http://www.emacsformacosx.com/</a> </p><a name="8. REFERENCES"></a>
+<h3>8. REFERENCES</h3>
+<pre> "LANGAGE SYMBOLIQUE D'ENSEIGNEMENT L.S.E.  MANUEL D'UTILISATION"
+ BULLETIN DE LIAISON "L'INFORMATIQUE ET L'ENSEIGNEMENT SECONDAIRE"
+ JANVIER 1975
+ C.LAFOND - INSTITUT NATIONAL DE RECHERCHE ET DE DOCUMENTATION PEDAGOGIQUES
+
+
+ "LANGAGE SYMBOLIQUE D'ENSEIGNEMENT LSE 15 - MANUEL D'UTILISATION"
+ ECOLE D'APPLICATION DES TRANSMISSIONS - DIRECTION DE L'INSTRUCTION
+ DIFFUSION INTERNE A DES FINS PEDAGOGIQUES SEULEMENT
+ ARTICLE II MARCHE 78 P 78
+
+
+ "LANGAGE LSE SOUS SIRIS 7 / SIRIS 8 - MANUEL D'UTILISATION"
+ P. FISCHER, P. MERCIER (I.U.C.A)
+ REFERENCE : NOTC0031 MAIS 1978
+ INSTITUT UNIVERSITAIRE DE CALCUL AUTOMATIQUE DE LORRAINE
+ INSTITUT UNIVERSITAIRE DE TECHNOLOGIE (DEPARTEMENT INFORMATIQUE)
+ INSTITUT DE RECHERCHE SUR L'ENSEIGNEMENT DES MATHEMATIQUES.
+
+
+ "L.S.E. POUR TOUS"
+ EPI - ENSEIGNEMENT PUBLIC ET INFORMATIQUE (ASSOC. LOI DE 1901)
+ BULLETIN JANVIER 81 NO.  SPECIAL  - 1ER EDITION - ISBN 2-86469-014-5 - 1981
+
+
+ NORME AFNOR 1982
+
+
+ "L.S.E. POUR TOUS"
+ CENTRE NATIONAL DE DOCUMENTATION PEDAGOGIQUE
+ EPI - ENSEIGNEMENT PUBLIC ET INFORMATIQUE (ASSOC. LOI DE 1901)
+ BROCHURE NO. 42006  - 4E EDITION 1983
+
+
+ "LE SYSTEME LSE - MIEUX CONNAITRE SON FONCTIONNEMENT SUR MICRO-ORDINATEUR"
+ EPI - ENSEIGNEMENT PUBLIC ET INFORMATIQUE (ASSOC. LOI DE 1901)
+ DOSSIER EPI NO. 3 JUIN 89
+
+
+ "La Saga du LSE et de sa famille (LSD/LSG/LST)"
+</pre>
+<p><a href="http://wwwsi.supelec.fr/yn/sagaLSx.html">http://wwwsi.supelec.fr/yn/sagaLSx.html</a> </p>
+<p><a href="http://www.epi.asso.fr/revue/54/b54p216.htm">http://www.epi.asso.fr/revue/54/b54p216.htm</a> </p>
+<pre> "LSE83"
+ Jacques Arsac
+ Bulletin de l'EPI n° 38
+</pre>
+<p><a href="http://archive-edutice.ccsd.cnrs.fr/docs/00/03/06/74/PDF/b38p116.pdf">http://archive-edutice.ccsd.cnrs.fr/docs/00/03/06/74/PDF/b38p116.pdf</a> </p>
+<p>Article Wikipedia sur le L.S.E. : </p>
+<p><a href="http://fr.wikipedia.org/wiki/LSE_(langage_de_programmation)">http://fr.wikipedia.org/wiki/LSE_(langage_de_programmation)</a> </p></body></html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/doc-cli/lse-grammaire.html b/com.ogamita.www/nasium-lse/doc-cli/lse-grammaire.html
new file mode 100644
index 0000000..c5f63e6
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/doc-cli/lse-grammaire.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+
+<html>
+<head>
+<title>NASIUM L.S.E. - Grammaire</title>
+<link rel="shortcut icon" href="http://www.ogamita.com/favicon.ico">
+<link rel="icon" href="http://www.ogamita.com/favicon.ico" type="image/vnd.microsoft.icon">
+<link rel="icon" href="http://www.ogamita.com/favicon.png" type="image/png">
+<link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
+<meta name="author" content="Pascal J. Bourguignon">
+<meta name="Reply-To" content="pjb@informatimago.com">
+<meta name="Keywords" content="NASIUM, LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français, grammaire"></head>
+<body><img src="../nasium-lse-2.png" alt="NASIUM L.S.E.">
+<hr>
+<div class="navigation"><a href="../">Maison</a> | <a href="lse-fonctions.html">Page précédente</a> | <a href="index.html">Index</a> | <a href="lse-legal.html">Page suivante</a></div>
+<hr>
+<h2>Grammaire</h2>
+<p>Les symboles terminaux peuvent être nommés ou anonymes. Les symboles terminaux nommés sont écrits en majuscules, et sont décrits par une expression régulière écrite entre cotices. Les symboles terminaux anonymes sont écrits dans les règles de grammaire entre apostrophes. </p>
+<p>Exemple: un symbole terminal nommé: </p>
+<pre>    IDENTIFICATEUR       = /[A-Z][0-9A-Z]*/.
+</pre>
+<p>Exemple: un symbole terminal anonyme: </p>
+<pre>    'AFFICHER'
+</pre>
+<p>Les symboles non-terminaux sont écrits en minuscules. </p>
+<p>Les règles de grammaire ont la forme : </p>
+<pre>    symbole-non-terminal ::= partie-droite .
+</pre>
+<p>La partie droite peut être (a et b sont des parties droites) : </p>
+<ul>
+<li>une séquence : a b </li>
+<li>une alternative (éventuellement entre parenthèse pour éviter les ambiguités) : a | b </li>
+<li>une optionelle (0 ou 1) : [ a ] </li>
+<li>une répetitive (0 ou plus) : { a } </li>
+<li>un symbole non-terminal ; </li>
+<li>un symbole terminal. </li></ul>
+<p>Le symbole initial de la grammaire est debut. </p>
+<p>nil représente le vide. </p>
+<pre class="grammar">
+Symboles terminaux :
+
+    NOMBRE               = /[-+]?[0-9]+\.[0-9]+[Ee][-+]?[0-9]+?/.
+
+    NUMERO               = /[0-9]+/.
+
+    LITCHAINE            = /'(('')?[^']*)*'/.
+
+    PROCIDENT            = /&amp;[A-Z][0-9A-Z]*/.
+
+    IDENTIFICATEUR       = /[A-Z][0-9A-Z]*/.
+
+    COMMENTAIRE          = /\*.*$/.
+
+
+Règles de grammaire :
+
+    debut                ::= ligne-programme | liste-inst-ou-decl | affic | nil.
+
+    ligne-programme      ::= NUMERO (liste-inst-ou-decl | decl-procedure [';' liste-inst-ou-decl]).
+
+    decl-procedure       ::= 'PROCEDURE' procident '(' (')' [decl-local] | liste-identificateur ')' [decl-local]).
+
+    decl-local           ::= 'LOCAL' liste-identificateur.
+
+    liste-inst-ou-decl   ::= instruction [';' liste-inst-ou-decl] | decl [';' liste-inst-ou-decl] | COMMENTAIRE.
+
+    decl                 ::= decl-chaine | decl-tableau.
+
+    decl-chaine          ::= 'CHAINE' liste-identificateur.
+
+    decl-tableau         ::= 'TABLEAU' liste-decl-tabl.
+
+    liste-decl-tabl      ::= decl-tabl {',' decl-tabl}.
+
+    decl-tabl            ::= identificateur '[' expression [',' expression] ']'.
+
+    instruction          ::= liberation | affectation | appel | lire | afficher | aller-en | si-alors-sinon | terminer | pause | debut-fin | faire | retour | resultat | garer | charger | supprimer | executer.
+
+    liberation           ::= 'LIBERER' liste-identificateur.
+
+    affectation          ::= reference '_' expression.
+
+    appel                ::= procident '(' [liste-argument] ')'.
+
+    lire                 ::= 'LIRE' liste-reference.
+
+    affic                ::= '?' (format [liste-expression] | liste-expression).
+
+    afficher             ::= 'AFFICHER' (format [liste-expression] | liste-expression).
+
+    format               ::= '[' liste-spec ']'.
+
+    liste-spec           ::= specification {',' specification}.
+
+    specification        ::= LITCHAINE | '/' | 'X' | 'C' | 'L' | 'U' | 'F' NUMERO '.' NUMERO | 'E' NUMERO '.' NUMERO | spec-rep-fois (LITCHAINE | '/' | 'X' | 'C' | 'L') | spec-rep-num (LITCHAINE | '/' | 'X' | 'C' | 'L' | 'U' | 'F' NUMERO '.' NUMERO | 'E' NUMERO '.' NUMERO).
+
+    spec-rep-num         ::= NUMERO.
+
+    spec-rep-fois        ::= '*'.
+
+    aller-en             ::= 'ALLER' 'EN' expression.
+
+    si-alors-sinon       ::= 'SI' disjonction 'ALORS' instruction ['SINON' instruction].
+
+    terminer             ::= 'TERMINER'.
+
+    pause                ::= 'PAUSE'.
+
+    debut-fin            ::= 'DEBUT' liste-inst-ou-decl 'FIN'.
+
+    faire                ::= 'FAIRE' expression 'POUR' identificateur '_' expression ['PAS' expression] ('JUSQUA' expression | 'TANT' 'QUE' disjonction).
+
+    retour               ::= 'RETOUR' ['EN' expression].
+
+    resultat             ::= 'RESULTAT' expression.
+
+    garer                ::= 'GARER' identificateur ',' expression ',' expression.
+
+    charger              ::= 'CHARGER' identificateur ',' expression ',' expression [',' identificateur].
+
+    supprimer            ::= 'SUPPRIMER' expression [',' expression].
+
+    executer             ::= 'EXECUTER' expression [',' expression].
+
+    expression           ::= terme-signe {('-' terme | '+' terme | '!' terme)}.
+
+    terme-signe          ::= ['-'] terme.
+
+    terme                ::= facteur {('*' facteur | '/' facteur)}.
+
+    facteur              ::= simple {'^' simple}.
+
+    simple               ::= 'SI' disjonction 'ALORS' expression 'SINON' expression | procident ['(' [liste-argument] ')'] | '(' disjonction ')' | reference | at | LITCHAINE | NOMBRE | NUMERO.
+
+    liste-argument       ::= expression {',' expression}.
+
+    liste-expression     ::= expression {',' expression}.
+
+    liste-identificateur ::= identificateur {',' identificateur}.
+
+    disjonction          ::= conjonction {'OU' conjonction}.
+
+    conjonction          ::= condition {'ET' condition}.
+
+    condition            ::= 'NON' condition | expression [('=' | '&lt;' | '&lt;=' | '#' | '&gt;' | '&gt;=') expression].
+
+    reference            ::= identificateur [('[' expression [',' expression] ']' | '(' [liste-argument] ')')].
+
+    liste-reference      ::= reference {',' reference}.
+
+    identificateur       ::= IDENTIFICATEUR.
+
+    at                   ::= '@'.
+
+    procident            ::= PROCIDENT.
+
+</pre></body></html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/doc-cli/lse-instructions.html b/com.ogamita.www/nasium-lse/doc-cli/lse-instructions.html
new file mode 100644
index 0000000..81c8e18
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/doc-cli/lse-instructions.html
@@ -0,0 +1,231 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+
+<html>
+<head>
+<title>NASIUM L.S.E. - Instructions</title>
+<link rel="shortcut icon" href="http://www.ogamita.com/favicon.ico">
+<link rel="icon" href="http://www.ogamita.com/favicon.ico" type="image/vnd.microsoft.icon">
+<link rel="icon" href="http://www.ogamita.com/favicon.png" type="image/png">
+<link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
+<meta name="author" content="Pascal J. Bourguignon">
+<meta name="Reply-To" content="pjb@informatimago.com">
+<meta name="Keywords" content="NASIUM, LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français, instructions"></head>
+<body><img src="../nasium-lse-2.png" alt="NASIUM L.S.E.">
+<hr>
+<div class="navigation"><a href="../">Maison</a> | <a href="lse-commandes.html">Page précédente</a> | <a href="index.html">Index</a> | <a href="lse-fonctions.html">Page suivante</a></div>
+<hr>
+<h2>Instructions</h2>
+<p>Ce chapitre présente une description succinte des instructions du langage de programmation L.S.E. Pour plus de détails, voir les références. </p>
+<p>Un programme se compose d'une sequence discontinue de lignes de programmes numérotés de 1 à 65535. Chaque ligne de programme peut contenir plusieurs instructions, séparées par un point-virgule. La dernière instruction peut être un commentaire commençant par le caractère *, et allant jusqu'à la fin de la ligne. </p>
+<p>On peut aussi saisir une instruction en mode machine de bureau, c'est à dire sans numéro de ligne. Elle est alors exécutée immédiatement. </p>
+<p>Exemple, un petit programme: </p>
+<pre>1* Résolution d'une équation du second degré.
+10 AFFICHER 'A=';LIRE A
+12 AFFICHER 'B=';LIRE B
+14 AFFICHER 'C=';LIRE C
+16 AFFICHER['Equation: U,'*X↑2 + ',U,'*X + ',U,' = 0']A,B,C
+20 DELTA←B*B-4*A*C
+22 SI DELTA&lt;0 ALORS AFFICHER 'Pas de solutions réelles.';TERMINER
+24 SI DELTA=0 ALORS AFFICHER 'Solution: X=',-B/2/A;TERMINER
+26 AFFICHER 'Première solution: X=',(-B+RAC(DELTA))/2/A
+28 AFFICHER 'Deuxième solution: X=',(-B-RAC(DELTA))/2/A
+30 TERMINER
+</pre>
+<p>Chacune des sections suivantes décrivent une instruction, selon le format suivant: </p>
+<ul>
+<li>nom de l'instruction, </li>
+<li>syntaxe, </li>
+<li>description, </li>
+<li>exemples (optionels), </li>
+<li>références (optionelles). </li></ul>
+<div class="toc">
+<p>Table des instructions :</p>
+<ul>
+<li><a href="#AFFECTATION">AFFECTATION</a></li>
+<li><a href="#AFFICHER">AFFICHER</a></li>
+<li><a href="#ALLEREN">ALLEREN</a></li>
+<li><a href="#APPEL">APPEL</a></li>
+<li><a href="#CHAINE">CHAINE</a></li>
+<li><a href="#CHARGER">CHARGER</a></li>
+<li><a href="#DEBUT">DEBUT</a></li>
+<li><a href="#EXECUTER">EXECUTER</a></li>
+<li><a href="#FAIREJUSQUA">FAIREJUSQUA</a></li>
+<li><a href="#FAIRETANTQUE">FAIRETANTQUE</a></li>
+<li><a href="#FORMAT">FORMAT</a></li>
+<li><a href="#GARER">GARER</a></li>
+<li><a href="#INSTRUCTIONSI">INSTRUCTIONSI</a></li>
+<li><a href="#LIBERER">LIBERER</a></li>
+<li><a href="#LIRE">LIRE</a></li>
+<li><a href="#PAUSE">PAUSE</a></li>
+<li><a href="#PROCEDURE">PROCEDURE</a></li>
+<li><a href="#RESULTAT">RESULTAT</a></li>
+<li><a href="#RETOUR">RETOUR</a></li>
+<li><a href="#RETOUREN">RETOUREN</a></li>
+<li><a href="#SUPPRIMER">SUPPRIMER</a></li>
+<li><a href="#TABLEAU">TABLEAU</a></li>
+<li><a href="#TERMINER">TERMINER</a></li></ul></div><a name="AFFECTATION"></a>
+<h3>AFFECTATION</h3><code>
+<p>ref ← expression </p></code>
+<p>L'instruction d'affectation permet de changer la valeur d'une variable ou d'un élément de tableau. ref doit être un identificateur de variable: une lettre suivie d'au plus quatre lettres ou chiffres, ou une référence de tableau: un identificateur de tableau, suivi d'un crochet ouvrant, d'une ou deux expressions index séparées par une virgule, et un crochet fermant. L'identificateur ne peut pas être un mot réservé du langage L.S.E. </p>
+<p>Exemples: I PRNOM C12 V[2] V[I+1] M[1,3] M[I,J] </p>
+<p>L'expression est une expression arithmétique ou une expression chaîne. </p>
+<p>Si ref est une référence de tableau, alors il doit avoir été déclaré au préalable par une instruction TABLEAU. </p>
+<p>Si l'expression est une expression chaîne, alors la variable ref doit avoir été déclarée au préalable par une instruction CHAINE. </p>
+<p>Note: ← s'affiche comme une flêche vers la gauche sur un terminal Unicode, ou comme un souligné sur un terminal ASCII. Il se tape comme un souligné, touche 8 sur un clavier AZERTY, touche shift-moins sur un clavier QWERTY. </p>Voir: <code><a href="#TABLEAU">TABLEAU</a></code>,  <code><a href="#CHAINE">CHAINE</a></code>,  <code><a href="#FONCTIONS">FONCTIONS</a></code><a name="AFFICHER"></a>
+<h3>AFFICHER</h3><code>
+<p>AFFICHER[format]expr1,...,expr2 </p></code>
+<p>L'instruction AFFICHER permet de faire afficher sur le terminal, des données. Le format entre crochet est optionel. Sans format, la valeur de chaque expression est affichée selon le format U (universel). Le format permet de spécifier plus précisément comment les valeurs doivent être formatées pour l'affichage. </p>
+<p>En mode machine de bureau, AFFICHER peut aussi s'écrire ?. </p>
+<p>Exemples: </p>
+<pre>? 2+3
+1 AFFICHER 'BONJOUR'
+2 AFFICHER[/,'X=',F5.2,3X,'N=',U,/]12.34,'BONJOUR'
+</pre>Voir: <code><a href="#FORMAT">FORMAT</a></code><a name="ALLEREN"></a>
+<h3>ALLEREN</h3><code>
+<p>ALLER EN ligne </p></code>
+<p>L'instruction ALLER EN permet de poursuivre l'exécution à la ligne dont le numéro est indiqué. </p><a name="APPEL"></a>
+<h3>APPEL</h3><code>
+<p>&amp;PROID(ARGUMENTS,...) </p></code>
+<p>&amp;PROID est un identificateur de procédure sous-programme, il est composé du caractère &amp;, suivi d'une lettre, suivi d'au plus quatre lettres ou chiffres. </p>
+<p>Les ARGUMENTS sont des expressions pour les paramètres passés par valeur, ou des références (variables ou référence tableau) pour les paramètres passé par référence. </p>Voir: <code><a href="#PROCEDURE">PROCEDURE</a></code><a name="CHAINE"></a>
+<h3>CHAINE</h3><code>
+<p>CHAINE id1,...,idn </p></code>
+<p>L'instruction CHAINE permet de déclarer une ou plusieurs variable chaines. Ces variables ne doivent pas avoir été déclarées comme tableau ou affecté une valeur numérique au préalable (voir instruction LIBERER). Une fois déclarée comme chaîne, on peut lui affecter des valeurs chaîne de caractère. </p>
+<p>Exemple: </p>
+<pre>1 CHAINE CH,CH2;CH←'BON';CH2←'JOUR';AFFICHER CH!CH2
+2 TERMINER
+</pre>Voir: <code><a href="#LIBERER">LIBERER</a></code>,  <code><a href="#TABLEAU">TABLEAU</a></code>,  <code><a href="#FONCTIONS">FONCTIONS</a></code><a name="CHARGER"></a>
+<h3>CHARGER</h3><code>
+<p>CHARGER VAR,NE,NF ou CHARGER VAR,NE,NF,VE </p></code>
+<p>L'instruction CHARGER permet définir implicitement l'identificateur VAR comme une variable simple, une chaîne ou un tableau et de la charger avec le contenu de l'enregistrement de numéro NE du fichier NF. </p>
+<p>NE doit être une expression donnant un nombre entier supérieur ou égal à 1. </p>
+<p>NF doit être une expression chaîne donnant le nom du fichier (une lettre, suivi au plus de quatre lettres ou chiffres). Si le nom du fichier est précédé du caractère #, il s'agit d'un fichier donnée permanent, sinon d'un fichier temporaire. </p>
+<p>Si le paramètre optionel VE est donné, ce doit être une variable simple, à laquelle est affectée un compte rendu du chargement: </p>
+<p>VE = -2 le fichier de nom NF n'existe pas. </p>
+<p>VE = -1 l'enregistrement de numéro NE n'existe pas. </p>
+<p>VE = 0 VAR est une variable simple. </p>
+<p>VE = 1 VAR est une variable tableau de une dimension. </p>
+<p>VE = 2 VAR est une variable tableau de deux dimensions. </p>
+<p>VE = 3 VAR est une variable chaîne. </p>
+<p>Exemple: </p>
+<pre>1 CHARGER I,1,'FTEMP',VE;AFFICHER VE,I
+2 CHARGER CH,2,'#PERMA',VE;AFFICHER VE,CH
+3 TERMINER
+</pre>Voir: <code><a href="#GARER">GARER</a></code>,  <code><a href="#SUPPRIMER">SUPPRIMER</a></code><a name="DEBUT"></a>
+<h3>DEBUT</h3><code>
+<p>DEBUT instruction1;...;instructionN FIN </p></code>
+<p>L'instruction DEBUT ... FIN permet de regrouper plusieurs instructions pour qu'elles soient considérées comme une seule. </p>Voir: <code><a href="#INSTRUCTIONSI">INSTRUCTIONSI</a></code><a name="EXECUTER"></a>
+<h3>EXECUTER</h3><code>
+<p>EXECUTER FP ou EXECUTER FP,LN </p></code>
+<p>L'instruction EXECUTER fonctionne comme une double commande : elle provoque le chargement du programme indiqué par l'expression chaîne FP (comme la commande APPELER), puis lance son exécution à partir de la ligne LN (ou de 1 si LN n'est pas donné) (comme la commande EXECUTER A PARTIR DE). </p>
+<p>Celà permet donc d'enchaîner des programmes automatiquement. </p>Voir: <code><a href="lse-commandes.html#APPELER">APPELER</a></code>,  <code><a href="lse-commandes.html#EXECUTER A PARTIR DE">EXECUTER A PARTIR DE</a></code><a name="FAIREJUSQUA"></a>
+<h3>FAIREJUSQUA</h3><code>
+<p>FAIRE ligne POUR var ← expri [PAS exprp] JUSQUA exprf </p></code>
+<p>L'instruction FAIRE JUSQUA permet d'exécuter une boucle itérative. </p>
+<p>ligne est le numéro n de la dernière ligne de la partie de programme à répéter. </p>
+<p>var est le nom de la variable contrôlée; ce doit être une variable arithmétique simple. </p>
+<p>expri est une expression qui donne la valeur initiale vi affectée à var. </p>
+<p>exprp est une expression qui donne le pas vp, c'est à dire l'incrément ajouté à var à chaque itération. Par défaut c'est 1. </p>
+<p>exprf est une expression qui donne la valeur finale vf. </p>
+<p>La première fois qu'au cours de l'exécution on arrive à l'instruction FAIRE, la valeur vi est affectée à la variable contrôlée var. La valeur de var est testée. </p>
+<ul>
+<li>si var &gt; vf (avec vp &gt; 0) ou var &lt; vf (avec vp &lt; 0) alors on sort de la bouche et on va exécuter la première ligne qui suit la ligne de numéro n. </li>
+<li>sinon on exécute une fois la boucle ; le pas vp est ensuite ajouté à var et on compare var à vf comme précédement. Ceci conduit de nouveau soit à sortir de la boucle soit à la réexécution. </li></ul>Voir: <code><a href="#FAIRETANTQUE">FAIRETANTQUE</a></code>,  <code><a href="#XIT">XIT</a></code><a name="FAIRETANTQUE"></a>
+<h3>FAIRETANTQUE</h3><code>
+<p>FAIRE ligne POUR var ← expri [PAS exprp] TANT QUE condition </p></code>
+<p>L'instruction FAIRE TANT QUE permet d'exécuter une boucle itérative. </p>
+<p>ligne est le numéro n de la dernière ligne de la partie de programme à répéter. </p>
+<p>var est le nom de la variable contrôlée; ce doit être une variable arithmétique simple. </p>
+<p>expri est une expression qui donne la valeur initiale vi affectée à var. </p>
+<p>exprp est une expression qui donne le pas vp, c'est à dire l'incrément ajouté à var à chaque itération. Par défaut c'est 1. </p>
+<p>condition est une condition qui indique quand la boucle doit finir. </p>
+<p>La première fois qu'au cours de l'exécution on arrive à l'instruction FAIRE, la valeur vi est affectée à la variable contrôlée var. La condition est testée. </p>
+<ul>
+<li>si la condition est fausse alors on sort de la bouche et on va exécuter la première ligne qui suit la ligne de numéro n. </li>
+<li>sinon on exécute une fois la boucle ; le pas vp est ensuite ajouté à var et on évalue la condition de nouveau. Ceci conduit de nouveau soit à sortir de la boucle soit à la réexécution. </li></ul>Voir: <code><a href="#FAIREJUSQUA">FAIREJUSQUA</a></code>,  <code><a href="#XIT">XIT</a></code><a name="FORMAT"></a>
+<h3>FORMAT</h3><code>
+<p>AFFICHER[format]expr1,...,expr2 </p></code>
+<p>Le format est une liste entre crochets de spécificateur de format séparés par des virgules. Chaque spécificateur peut être précédé d'un facteur de répétition, qui peut être soit un nombre, soit une étoile *. Lorsque c'est une étoile, une valeur dans la liste d'expressions est prise comme facteur de répétition variable. </p>
+<p>Les spécificateurs sont: </p>
+<p>'LITERAL' : la chaîne litérale est affichée (répétée s'il y a un facteur de répétition). </p>
+<p>U : une valeur prise dans les expressions est affichée selon un format universel. </p>
+<p>X : un espace est affiché. </p>
+<p>L : provoque le passage à la ligne suivante sans retour au début de la ligne. </p>
+<p>/ : provoque le passage à la ligne suivante, avec retour au début de la ligne. </p>
+<p>C : provoque le retour au début de la ligne, sans passage à la ligne suivante. </p>
+<p>Fe.d : affiche un nombre avec e chiffres avant le point décimal, et d chiffres après le point décimal. </p>
+<p>Ee.d : affiche un nombre en notation scientifique avec e chiffres avant le point décimal, et d chiffres après le point décimal. </p>
+<p>e et d sont compris entre 0 et 100. </p>Voir: <code><a href="#AFFICHER">AFFICHER</a></code><a name="GARER"></a>
+<h3>GARER</h3><code>
+<p>GARER VAR,NE,NF </p></code>
+<p>L'instruction GARER permet copier l'information contenue dans la variable VAR (qui peut être une variable simple, une chaîne ou un tableau) dans l'enregistrement de numéro NE du fichier NF. </p>
+<p>NE doit être une expression donnant un nombre entier supérieur ou égal à 1. </p>
+<p>NF doit être une expression chaîne donnant le nom du fichier (une lettre, suivi au plus de quatre lettres ou chiffres). Si le nom du fichier est précédé du caractère #, il s'agit d'un fichier donnée permanent, sinon d'un fichier temporaire. </p>
+<p>Exemple: </p>
+<pre>1 CHAINE CH;CH←'BONJOUR'
+2 I←42
+3 GARER I,1,'FTEMP'
+4 GARER CH,2,'#PERMA'
+5 TERMINER
+</pre>Voir: <code><a href="#CHARGER">CHARGER</a></code>,  <code><a href="#SUPPRIMER">SUPPRIMER</a></code><a name="INSTRUCTIONSI"></a>
+<h3>INSTRUCTIONSI</h3><code>
+<p>SI condition ALORS instruction1 [SINON instruction2] </p></code>
+<p>L'instruction SI permet de faire un choix entre deux instructions. Si la valeur de la condition est vrai, alors instruction1 est exécutée, sinon c'est instruction2 qui est exécutée. </p>
+<p>On peut grouper plusieurs instructions en une seule grâce à l'instruction DEBUT ... FIN. </p>Voir: <code><a href="#DEBUT">DEBUT</a></code><a name="LIBERER"></a>
+<h3>LIBERER</h3><code>
+<p>LIBERER id1,...,idn </p></code>
+<p>L'instruction LIBERER permet de libérer une variable ou plusieurs variables, c'est à dire, d'oublier leurs valeurs et leurs types chaîne ou tableau. Les variables libérées peuvent ainsi être réutilisée (affectation d'une valeur numérique, ou déclaration par CHAINE ou TABLEAU). </p>
+<p>Exemple: </p>
+<pre>1 CHAINE C;C←'BONJOUR';AFFICHER C
+2 LIBERER C;C←42;AFFICHER C
+4 TERMINER
+</pre>Voir: <code><a href="#AFFECTATION">AFFECTATION</a></code>,  <code><a href="#CHAINE">CHAINE</a></code>,  <code><a href="#TABLEAU">TABLEAU</a></code><a name="LIRE"></a>
+<h3>LIRE</h3><code>
+<p>LIRE ref1,...,refn </p></code>
+<p>L'instruction LIRE permet d'affecter aux variables ou éléments de tableau référencés une valeur tapée au clavier. L'instruction LIRE émet un siflement, puis attend que l'utilisateur saisisse les valeurs séparées par des espaces et/ou terminées par xoff. Les chaînes doivent être terminées par xoff. </p>
+<p>Si une variable tableau est lue, l'utilisateur doit saisir une valeur pour chaque élément du tableau. </p>
+<p>VOIR: AFFECTATION </p><a name="PAUSE"></a>
+<h3>PAUSE</h3><code>
+<p>PAUSE </p></code>
+<p>L'instruction PAUSE suspend l'exécution du programme, et fait afficher sur l'écran un message indiquant le numéro de la ligne où se trouve l'instruction PAUSE. </p>
+<p>On peut fair epoursuivre l'exécution du programme en utilisant les commandes CONTINUER, REPRENDRE ou POURSUIVRE. </p>Voir: <code><a href="#TERMINER">TERMINER</a></code>,  <code><a href="lse-commandes.html#CONTINUER">CONTINUER</a></code>,  <code><a href="lse-commandes.html#REPRENDRE A PARTIR DE">REPRENDRE A PARTIR DE</a></code>,  <code><a href="lse-commandes.html#POURSUIVRE JUSQU'EN">POURSUIVRE JUSQU'EN</a></code><a name="PROCEDURE"></a>
+<h3>PROCEDURE</h3><code>
+<p>PROCEDURE &amp;PROID(parametre,...) [LOCAL var,...] </p></code>
+<p>PROCEDURE n'est pas vraiment une instruction, mais plutôt une déclaration, car on ne peut pas l'exécuter : une erreur est signalée si l'exécution atteint cette déclaration. </p>
+<p>PROCEDURE permet de déclarer une procédure sous-programme ou une procédure fonction. </p>
+<p>&amp;PROID est un identificateur de procédure, il est composé du caractère &amp;, suivi d'une lettre, suivi d'au plus quatre lettres ou chiffres. </p>
+<p>Suit une liste entre parenthèses d'identificateurs nommant les paramètres. </p>
+<p>Optionnellement, la liste des paramètres peut être suivie de LOCAL suivit d'une liste d'identificateur de variables locales. </p>
+<p>Ces variables locales peuvent aussi include des paramètres. Ils sont alors passé par valeur, au lieu d'être passés par référence. </p>
+<p>Une procédure sous-programme doit finir avec une instruction RETOUR ou RETOUR EN. </p>
+<p>Une procédure fonction doit finir avec une instruction RESULTAT. </p>Voir: <code><a href="#RETOUR">RETOUR</a></code>,  <code><a href="#RETOUREN">RETOUREN</a></code>,  <code><a href="#RESULTAT">RESULTAT</a></code><a name="RESULTAT"></a>
+<h3>RESULTAT</h3><code>
+<p>RESULTAT expression </p></code>
+<p>L'instruction RESULTAT permet de finir l'exécution d'une procédure fonction et de donner le résultat de cette fonction. Ce résultat est alors utilisé dans l'expression d'où venait l'appel de procédure fonction. </p>Voir: <code><a href="#PROCEDURE">PROCEDURE</a></code>,  <code><a href="#RETOUR">RETOUR</a></code>,  <code><a href="#RETOUR EN">RETOUR EN</a></code><a name="RETOUR"></a>
+<h3>RETOUR</h3><code>
+<p>RETOUR </p></code>
+<p>L'instruction RETOUR permet de finir l'exécution d'une procédure sous-programme et de retourner à l'instruction qui suit l'appel de la procédure esous-programme. </p>Voir: <code><a href="#PROCEDURE">PROCEDURE</a></code>,  <code><a href="#RETOUREN">RETOUREN</a></code>,  <code><a href="#RESULTAT">RESULTAT</a></code><a name="RETOUREN"></a>
+<h3>RETOUREN</h3><code>
+<p>RETOUR EN ligne </p></code>
+<p>L'instruction RETOUR EN permet de finir l'exécution d'une procédure sous-programme et de retourner à la ligne indiquée. </p>Voir: <code><a href="#PROCEDURE">PROCEDURE</a></code>,  <code><a href="#RETOUR">RETOUR</a></code>,  <code><a href="#RESULTAT">RESULTAT</a></code><a name="SUPPRIMER"></a>
+<h3>SUPPRIMER</h3><code>
+<p>SUPPRIMER NF,NE ou SUPPRIMER NF </p></code>
+<p>L'instruction SUPPRIMER permet de supprimer un enregistrement d'un fichier si NE est donné, ou un fichier entier sinon. </p>
+<p>Exemple: </p>
+<pre>1 SUPPRIMER 'FTEMP'
+2 SUPPRIMER '#PERMA',2
+3 TERMINER
+</pre>Voir: <code><a href="#GARER">GARER</a></code>,  <code><a href="#CHARGER">CHARGER</a></code><a name="TABLEAU"></a>
+<h3>TABLEAU</h3><code>
+<p>TABLEAU tab1,...,tabn </p></code>
+<p>L'instruction TABLEAU permet de déclarer une ou plusieurs variable tableau. Chaque tabi doit être de la forme: IDENT[EXPR] pour un vecteur (tableau de dimension 1) ou IDENT[EXPR1,EXPR2] pour une matrice (tableau de dimension 2). </p>
+<p>Ces variables ne doivent pas avoir été déclarées comme chaîne, ou affecté une valeur numérique au préalable (voir instruction LIBERER). Une fois déclarée comme tableau, on peut lui affecter des valeurs numérique à ses éléments. </p>
+<p>Exemple: </p>
+<pre>1 N←3;M←4;TABLEAU V[3],MAT[N,M];V[1]←1;MAT[2,2]←2;AFFICHER V[1]+MAT[2,2]
+2 TERMINER
+</pre>Voir: <code><a href="#LIBERER">LIBERER</a></code>,  <code><a href="#CHAINE">CHAINE</a></code>,  <code><a href="#FONCTIONS">FONCTIONS</a></code><a name="TERMINER"></a>
+<h3>TERMINER</h3><code>
+<p>TERMINER </p></code>
+<p>L'instruction TERMINER arrête l'exécution du programme, et fait afficher sur l'écran un message indiquant TERMINE EN LIGNE nnn </p>
+<p>Cette instruction est la dernière exécutée (ce n'est pas forcément la dernière dans le programme). </p>Voir: <code><a href="#PAUSE">PAUSE</a></code>,  <code><a href="lse-commandes.html#CONTINUER">CONTINUER</a></code>,  <code><a href="lse-commandes.html#POURSUIVRE JUSQU'EN">POURSUIVRE JUSQU'EN</a></code>,  <code><a href="lse-commandes.html#REPRENDRE A PARTIR DE">REPRENDRE A PARTIR DE</a></code>,  <code><a href="lse-commandes.html#EXECUTER A PARTIR DE">EXECUTER A PARTIR DE</a></code></body></html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/doc-cli/lse-legal.html b/com.ogamita.www/nasium-lse/doc-cli/lse-legal.html
new file mode 100644
index 0000000..64bd1bc
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/doc-cli/lse-legal.html
@@ -0,0 +1,174 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+
+<html>
+<head>
+<title>NASIUM L.S.E. - Légal</title>
+<link rel="shortcut icon" href="http://www.ogamita.com/favicon.ico">
+<link rel="icon" href="http://www.ogamita.com/favicon.ico" type="image/vnd.microsoft.icon">
+<link rel="icon" href="http://www.ogamita.com/favicon.png" type="image/png">
+<link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
+<meta name="author" content="Pascal J. Bourguignon">
+<meta name="Reply-To" content="pjb@informatimago.com">
+<meta name="Keywords" content="NASIUM, LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français, légal"></head>
+<body><img src="../nasium-lse-2.png" alt="NASIUM L.S.E.">
+<hr>
+<div class="navigation"><a href="../">Maison</a> | <a href="lse-grammaire.html">Page précédente</a> | <a href="index.html">Index</a></div>
+<hr>
+<h2>Légal</h2>
+<div class="toc">
+<p>Table des légal :</p>
+<ul>
+<li><a href="#GARANTIE">GARANTIE</a></li>
+<li><a href="#LICENSE">LICENSE</a></li>
+<li><a href="#SOURCES">SOURCES</a></li></ul></div><a name="GARANTIE"></a>
+<h3>GARANTIE</h3>
+<p>Système L.S.E </p>
+<p>Copyright (C) 1984 - 2014 Pascal Bourguignon </p>
+<p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. </p>
+<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. </p>
+<p>You should have received a copy of the GNU Affero General Public License along with this program. If not, see <a href="http://www.gnu.org/licenses/">http://www.gnu.org/licenses/</a> </p><a name="LICENSE"></a>
+<h3>LICENSE</h3>
+<p>GNU AFFERO GENERAL PUBLIC LICENSE Version 3, 19 November 2007 </p>
+<p>Copyright (C) 2007 Free Software Foundation, Inc. &lt;http://fsf.org/&gt; Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. </p>
+<p>Preamble </p>
+<p>The GNU Affero General Public License is a free, copyleft license for software and other kinds of works, specifically designed to ensure cooperation with the community in the case of network server software. </p>
+<p>The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. </p>
+<p>When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. </p>
+<p>Developers that use our General Public Licenses protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License which gives you legal permission to copy, distribute and/or modify the software. </p>
+<p>A secondary benefit of defending all users' freedom is that improvements made in alternate versions of the program, if they receive widespread use, become available for other developers to incorporate. Many developers of free software are heartened and encouraged by the resulting cooperation. However, in the case of software used on network servers, this result may fail to come about. The GNU General Public License permits making a modified version and letting the public access it on a server without ever releasing its source code to the public. </p>
+<p>The GNU Affero General Public License is designed specifically to ensure that, in such cases, the modified source code becomes available to the community. It requires the operator of a network server to provide the source code of the modified version running there to the users of that server. Therefore, public use of a modified version, on a publicly accessible server, gives the public access to the source code of the modified version. </p>
+<p>An older license, called the Affero General Public License and published by Affero, was designed to accomplish similar goals. This is a different license, not a version of the Affero GPL, but Affero has released a new version of the Affero GPL which permits relicensing under this license. </p>
+<p>The precise terms and conditions for copying, distribution and modification follow. </p>
+<p>TERMS AND CONDITIONS </p>
+<pre>0. Definitions.
+</pre>
+<p>"This License" refers to version 3 of the GNU Affero General Public License. </p>
+<p>"Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. </p>
+<p>"The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. </p>
+<p>To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. </p>
+<p>A "covered work" means either the unmodified Program or a work based on the Program. </p>
+<p>To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. </p>
+<p>To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. </p>
+<p>An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. </p>
+<pre>1. Source Code.
+</pre>
+<p>The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. </p>
+<p>A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. </p>
+<p>The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. </p>
+<p>The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. </p>
+<p>The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. </p>
+<p>The Corresponding Source for a work in source code form is that same work. </p>
+<pre>2. Basic Permissions.
+</pre>
+<p>All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. </p>
+<p>You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. </p>
+<p>Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. </p>
+<pre>3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+</pre>
+<p>No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article </p>
+<pre>11 of the WIPO copyright treaty adopted on 20 December 1996, or
+</pre>
+<p>similar laws prohibiting or restricting circumvention of such measures. </p>
+<p>When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. </p>
+<pre>4. Conveying Verbatim Copies.
+</pre>
+<p>You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. </p>
+<p>You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. </p>
+<pre>5. Conveying Modified Source Versions.
+</pre>
+<p>You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: </p>
+<p>a) The work must carry prominent notices stating that you modified it, and giving a relevant date. </p>
+<p>b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". </p>
+<p>c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. </p>
+<p>d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. </p>
+<p>A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. </p>
+<pre>6. Conveying Non-Source Forms.
+</pre>
+<p>You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: </p>
+<p>a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. </p>
+<p>b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. </p>
+<p>c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. </p>
+<p>d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. </p>
+<p>e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. </p>
+<p>A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. </p>
+<p>A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. </p>
+<p>"Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. </p>
+<p>If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). </p>
+<p>The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. </p>
+<p>Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. </p>
+<pre>7. Additional Terms.
+</pre>
+<p>"Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. </p>
+<p>When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. </p>
+<p>Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: </p>
+<p>a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or </p>
+<p>b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or </p>
+<p>c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or </p>
+<p>d) Limiting the use for publicity purposes of names of licensors or authors of the material; or </p>
+<p>e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or </p>
+<p>f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. </p>
+<p>All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. </p>
+<p>If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. </p>
+<p>Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. </p>
+<pre>8. Termination.
+</pre>
+<p>You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). </p>
+<p>However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. </p>
+<p>Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. </p>
+<p>Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. </p>
+<pre>9. Acceptance Not Required for Having Copies.
+</pre>
+<p>You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. </p>
+<pre>10. Automatic Licensing of Downstream Recipients.
+</pre>
+<p>Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. </p>
+<p>An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. </p>
+<p>You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. </p>
+<pre>11. Patents.
+</pre>
+<p>A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". </p>
+<p>A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. </p>
+<p>Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. </p>
+<p>In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. </p>
+<p>If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. </p>
+<p>If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. </p>
+<p>A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. </p>
+<p>Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. </p>
+<pre>12. No Surrender of Others' Freedom.
+</pre>
+<p>If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. </p>
+<pre>13. Remote Network Interaction; Use with the GNU General Public License.
+</pre>
+<p>Notwithstanding any other provision of this License, if you modify the Program, your modified version must prominently offer all users interacting with it remotely through a computer network (if your version supports such interaction) an opportunity to receive the Corresponding Source of your version by providing access to the Corresponding Source from a network server at no charge, through some standard or customary means of facilitating copying of software. This Corresponding Source shall include the Corresponding Source for any work covered by version 3 of the GNU General Public License that is incorporated pursuant to the following paragraph. </p>
+<p>Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the work with which it is combined will remain governed by version </p>
+<pre>3 of the GNU General Public License.
+14. Revised Versions of this License.
+</pre>
+<p>The Free Software Foundation may publish revised and/or new versions of the GNU Affero General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. </p>
+<p>Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. </p>
+<p>If the Program specifies that a proxy can decide which future versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. </p>
+<p>Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. </p>
+<pre>15. Disclaimer of Warranty.
+</pre>
+<p>THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. </p>
+<pre>16. Limitation of Liability.
+</pre>
+<p>IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. </p>
+<pre>17. Interpretation of Sections 15 and 16.
+</pre>
+<p>If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. </p>
+<p>END OF TERMS AND CONDITIONS </p>
+<p>How to Apply These Terms to Your New Programs </p>
+<p>If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. </p>
+<p>To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. </p>
+<p>&lt;one line to give the program's name and a brief idea of what it does.&gt; Copyright (C) &lt;year&gt; &lt;name of author&gt; </p>
+<p>This program is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. </p>
+<p>This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. </p>
+<p>You should have received a copy of the GNU Affero General Public License along with this program. If not, see &lt;http://www.gnu.org/licenses/&gt;. </p>
+<p>Also add information on how to contact you by electronic and paper mail. </p>
+<p>If your software can interact with users remotely through a computer network, you should also make sure that it provides a way for users to get its source. For example, if your program is a web application, its interface could display a "Source" link that leads users to an archive of the code. There are many ways you could offer source, and different solutions will be better for different programs; see section 13 for the specific requirements. </p>
+<p>You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU AGPL, see &lt;http://www.gnu.org/licenses/&gt;. </p><a name="SOURCES"></a>
+<h3>SOURCES</h3>
+<p>Les sources de ce programme sont disponibles sous license AGPLv3 à l'adresse suivante: </p>
+<p><a href="http://www.ogamita.com/lse/">http://www.ogamita.com/lse/</a> </p></body></html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/doc-cli/lse-options.html b/com.ogamita.www/nasium-lse/doc-cli/lse-options.html
new file mode 100644
index 0000000..ebd0dc2
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/doc-cli/lse-options.html
@@ -0,0 +1,116 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+
+<html>
+<head>
+<title>NASIUM L.S.E. - Options</title>
+<link rel="shortcut icon" href="http://www.ogamita.com/favicon.ico">
+<link rel="icon" href="http://www.ogamita.com/favicon.ico" type="image/vnd.microsoft.icon">
+<link rel="icon" href="http://www.ogamita.com/favicon.png" type="image/png">
+<link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+<meta HTTP-EQUIV="Content-Type" content="text/html; charset=utf-8">
+<meta name="author" content="Pascal J. Bourguignon">
+<meta name="Reply-To" content="pjb@informatimago.com">
+<meta name="Keywords" content="NASIUM, LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français, options"></head>
+<body><img src="../nasium-lse-2.png" alt="NASIUM L.S.E.">
+<hr>
+<div class="navigation"><a href="../">Maison</a> | <a href="lse-generalites.html">Page précédente</a> | <a href="index.html">Index</a> | <a href="lse-commandes.html">Page suivante</a></div>
+<hr>
+<h2>Options</h2>
+<p>lse est une commande unix interactive implémentant un système L.S.E. avec son interpréteur. </p>
+<p>lse accepte les options décrites dans ce chapitre. </p>
+<p>Selon le compilateur Common Lisp utilisé pour compiler cette commande, ces options peuvent devoir s'écrire après une option '--'. (Les options précédant '--' étant interprétées par l'implémentation Common Lisp). </p>
+<p><kbd>[AFAIRE]</kbd> Établir la liste exacte des implémentations nécessitant '--'. </p>
+<p>Ces options permettent de configurer le terminal, et les touches utilisées. Sur le systèmes L.S.E. MITRA-15 et T1600 des années 1970, les terminaux était trés simples, et on tapait <kbd>[CONTRÔLE-S]</kbd> pour envoyer les données saisies à l'ordinateur, la touche <kbd>[ÉCHAPPEMENT]</kbd> pour interrompre un programme, la touche <kbd>[\]</kbd> pour annuler le caractère précédent, et la touche <kbd>[CONTRÔLE-A]</kbd> pour envoyer un signal d'attention au programme. La touche <kbd>[ENTRÉE]</kbd> pouvait être utilisée pour saisir une chaîne, mais alors le code CARRIAGE RETURN était ajouté en fin de chaîne. Les consoles et télétypes n'étaient capable d'afficher et d'encoder seulement des caractères majuscules, et les accents étaient totalement inconnus. </p>
+<p>Sur un terminal unix, on utilise <kbd>[ENTRÉE]</kbd> pour la saisie des données, <kbd>[EFFACEMENT]</kbd> pour supprimer le caractère précédent, généralement, <kbd>[CONTRÔLE-C]</kbd> pour interrompre un programme, et d'autres touches configurées avec stty(1). Les minuscules sont la norme. </p>
+<p>On peut donc configurer lse avec des options sur la ligne de commande, ou interactivement, pour utiliser le mode ancien ou un mode moderne. </p>
+<p><kbd>[AFAIRE]</kbd> établir un fichier de configuration pour éviter d'avoir à refaire ces configurations à chaque fois. </p>
+<p>lse tient compte des variables d'environnement suivantes: </p>
+<p>LC_ALL, ou sinon LC_CTYPE, ou sinon LANG donnent l'encodage du terminal. </p>
+<p>TERM indiquent le type de terminal. </p>
+<p>LSE←REJECT←LOWCASE←INPUT (NIL ou T, défaut: NIL) Indique s'il faut accepter ou rejeter les caractères minuscules saisis. Correspond aux options --rejeter-minuscules --reject-lowcase --accepter-minuscules --accept-lowcase. </p>
+<p>LSE←UPCASE←OUTPUT (NIL ou T, défaut: NIL) Indique s'il faut imprimer tous les messages seulement en majuscules, ou s'il est possible d'imprimer des minuscules. Correspond aux options --afficher-en-majuscules --upcase-output --affichage-mixte --mixed-output. </p>
+<p>LSE←OUTPUT←ARROWS (ASCII, DECTECH, UNICODE ou UNICODE-HALFWIDTH, défaut: ASCII) Indique comment afficher les caractères flêche vers la gauche et flêche vers le haut. Correspond aux options --fleches-ascii --ascii-arrows --fleches-dectech --dectech-arrows --fleches-unicode --unicode-arrows --fleches-unicode-halfwidth --unicode-halfwidth-arrows. </p>
+<p>LSE←ACCENTED←OUTPUT (NIL ou T, défaut: T) Indique s'il est possible d'afficher des lettres accentuées. Correspond aux options --afficher-avec-accent --accented-output --afficher-sans-accent --no-accent-output. </p>
+<p>LSE←MODERN←MODE (NIL ou T, défaut: T) Indique s'il faut utiliser le mode moderne de saisi, ou le mode ancien ([ENTRÉE] ou <kbd>[X-OFF]</kbd>). Correspond aux options --mode-moderne --modern-mode --mode-ancien --old-mode. </p>
+<p>LSE←RETURN←IS←XOFF (NIL ou T, défaut: NIL) Indique comment traiter la touche <kbd>[ENTRÉE]</kbd> dans le mode ancien. Correspond aux options --entree-comme-xoff --return-is-xoff. </p>
+<p>LSE←PAGER (NIL, T, ou un nombre de lignes; défaut: T) Indique s'il faut pager les sorties sur le terminal. NIL indique pas de pagination; T active la pagination en fonction de la taille du terminal; un nombre active la pagination sur ce nombre de ligne. </p>
+<div class="toc">
+<p>Table des options :</p>
+<ul>
+<li><a href="#--accepter-minuscules">--accepter-minuscules</a></li>
+<li><a href="#--affichage-mixte">--affichage-mixte</a></li>
+<li><a href="#--afficher-avec-accent">--afficher-avec-accent</a></li>
+<li><a href="#--afficher-en-majuscules">--afficher-en-majuscules</a></li>
+<li><a href="#--afficher-sans-accent">--afficher-sans-accent</a></li>
+<li><a href="#--aide">--aide</a></li>
+<li><a href="#--avec-bip">--avec-bip</a></li>
+<li><a href="#--configuration-interactive">--configuration-interactive</a></li>
+<li><a href="#--configuration-macosx-terminal">--configuration-macosx-terminal</a></li>
+<li><a href="#--entree-comme-xoff">--entree-comme-xoff</a></li>
+<li><a href="#--fleches-ascii">--fleches-ascii</a></li>
+<li><a href="#--fleches-dectech">--fleches-dectech</a></li>
+<li><a href="#--fleches-unicode">--fleches-unicode</a></li>
+<li><a href="#--fleches-unicode-halfwidth">--fleches-unicode-halfwidth</a></li>
+<li><a href="#--mode-ancien">--mode-ancien</a></li>
+<li><a href="#--mode-moderne">--mode-moderne</a></li>
+<li><a href="#--montrer-touches">--montrer-touches</a></li>
+<li><a href="#--rejeter-minuscules">--rejeter-minuscules</a></li>
+<li><a href="#--sans-bip">--sans-bip</a></li>
+<li><a href="#--version">--version</a></li></ul></div><a name="--accepter-minuscules"></a>
+<h3>--accepter-minuscules</h3>
+<p>Accepte les caractères minuscules. (Défaut). Note: les mots clés et identificateurs sont toujours mis en majuscules, mais les chaînes peuvent contenir des minuscules. </p>
+<p>Variable d'environnement: LSE←REJECT←LOWCASE←INPUT=NIL C'est l'option par défaut. </p><a name="--affichage-mixte"></a>
+<h3>--affichage-mixte</h3>
+<p>Affiche en majuscules et minisucules. </p>
+<p>Variable d'environnement: LSE←UPCASE←OUTPUT=NIL C'est l'option par défaut. </p><a name="--afficher-avec-accent"></a>
+<h3>--afficher-avec-accent</h3>
+<p>Assume que le terminal est capable d'afficher les accents. </p>
+<p>Variable d'environnement: LSE←ACCENTED←OUTPUT=T C'est l'option par défaut. </p><a name="--afficher-en-majuscules"></a>
+<h3>--afficher-en-majuscules</h3>
+<p>Fait afficher tout en majuscules, comme sur les anciens terminaux. </p>
+<p>Variable d'environnement: LSE←UPCASE←OUTPUT=T </p><a name="--afficher-sans-accent"></a>
+<h3>--afficher-sans-accent</h3>
+<p>Si le terminal n'est pas capable d'afficher les accents, cette option permet de convertir les lettres accentuees en lettres sans accent. </p>
+<p>Variable d'environnement: LSE←ACCENTED←OUTPUT=NIL </p><a name="--aide"></a>
+<h3>--aide</h3>
+<p>Affiche la liste des options. </p><a name="--avec-bip"></a>
+<h3>--avec-bip</h3>
+<p>Si le terminal est capable de biper, cette option permet d'autoriser l'envoi des codes ASCII BEL (↑G). </p>
+<p>Variable d'environnement: LSE←NO←BELL=NIL </p><a name="--configuration-interactive"></a>
+<h3>--configuration-interactive</h3>
+<p>Permet d'effectuer la saisie des options de ligne de commande de manière interactive. </p><a name="--configuration-macosx-terminal"></a>
+<h3>--configuration-macosx-terminal</h3>
+<p>Permet d'effectuer la saisie des options de ligne de commande de manière interactive, en pré-supposant l'usage avec Terminal.app et la configuration nasium-lse.terminal. </p><a name="--entree-comme-xoff"></a>
+<h3>--entree-comme-xoff</h3>
+<p>Dans le mode ancien, traite la touche ENTRÉE comme la touche X-OFF. </p>
+<p>Variable d'environnement: LSE←RETURN←IS←XOFF=T </p>
+<p>Par défaut le mode ancien traite la touche ENTRÉE différement de la touche X-OFF: les données sont validées, mais un code RETOUR est inclus en fin de chaîne lue. </p>
+<p>Variable d'environnement: LSE←RETURN←IS←XOFF=NIL </p><a name="--fleches-ascii"></a>
+<h3>--fleches-ascii</h3>
+<p>Les caractères _ et ^ sont affichés tels quels. </p>
+<p>Variable d'environnement: LSE←OUTPUT←ARROWS=ASCII C'est l'option par défaut. </p><a name="--fleches-dectech"></a>
+<h3>--fleches-dectech</h3>
+<p>Le terminal est configuré avec une police de caractères DecTech. Les caractères _ et ^ sont alors mappés sur flêche vers la gauche et flêche vers le haut. </p>
+<p>Variable d'environnement: LSE←OUTPUT←ARROWS=DECTECH </p><a name="--fleches-unicode"></a>
+<h3>--fleches-unicode</h3>
+<p>Le terminal est configuré avec une police de caractères Unicode incorporant les flêches LEFTWARD_ARROW and UPWARD_ARROW (codes 8592 et 8593). Les caractères _ et ^ sont alors mappés sur ces caractères. </p>
+<p>Variable d'environnement: LSE←OUTPUT←ARROWS=UNICODE </p><a name="--fleches-unicode-halfwidth"></a>
+<h3>--fleches-unicode-halfwidth</h3>
+<p>Le terminal est configuré avec une police de caractères Unicode incorporant les flêches HALFWIDTH_LEFTWARD_ARROW and HALFWIDTH_UPWARD_ARROW (codes 65513 et 65514). Les caractères _ et ^ sont alors mappés sur ces caractères. </p>
+<p>Variable d'environnement: LSE←OUTPUT←ARROWS=UNICODE-HAFLWIDTH </p><a name="--mode-ancien"></a>
+<h3>--mode-ancien</h3>
+<p>Dans le mode ancien, on utilise <kbd>[CONTRÔLE-S]</kbd> (X-OFF) pour entrer une donnée, <kbd>[\]</kbd> pour effacer un caractère, et <kbd>[INTERRUPTION]</kbd> pour interrompre, entre autres. </p>
+<p>Variable d'environnement: LSE←MODERN←MODE=NIL </p><a name="--mode-moderne"></a>
+<h3>--mode-moderne</h3>
+<p>Dans le mode moderne, les caractères et codes de contrôle configurés par stty(1) sont utilisé (en général, <kbd>[RETOUR]</kbd> pour entrer une donnée, <kbd>[EFFACEMENT]</kbd> pour effacer un caractère, <kbd>[CONTRÔLE-C]</kbd> pour interrompre, etc). </p>
+<p>Variable d'environnement: LSE←MODERN←MODE=T C'est l'option par défaut. </p><a name="--montrer-touches"></a>
+<h3>--montrer-touches</h3>
+<p>Affiche les touches à utiliser. </p><a name="--rejeter-minuscules"></a>
+<h3>--rejeter-minuscules</h3>
+<p>Rejette tout caractère minuscule comme caractère invalide, ce qui force l'utilisateur à ne saisir que des caractères majuscules. </p>
+<p>Variable d'environnement: LSE←REJECT←LOWCASE←INPUT=T </p><a name="--sans-bip"></a>
+<h3>--sans-bip</h3>
+<p>Si le terminal n'est pas capable de biper,cette option permet d'éviter d'envoyer des codes ASCII BEL (↑G). </p>
+<p>Variable d'environnement: LSE←NO←BELL=T </p><a name="--version"></a>
+<h3>--version</h3>
+<p>Affiche la version. </p></body></html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/exemple.html b/com.ogamita.www/nasium-lse/exemple.html
new file mode 100644
index 0000000..055dd0a
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/exemple.html
@@ -0,0 +1,275 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <link rel="shortcut icon"                        href="http://www.ogamita.com/favicon.ico" />
+    <link rel="icon" type="image/vnd.microsoft.icon" href="http://www.ogamita.com/favicon.ico" />
+    <link rel="icon" type="image/png"                href="http://www.ogamita.com/favicon.png" />
+    <link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+    <title>NASIUM L.S.E. - Exemples</title>
+    <meta name="author" content="Pascal J. Bourguignon">
+    <meta name="Reply-To" content="pjb@ogamita.com">
+    <meta name="Keywords" content="NASIUM,LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français">
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  </head>
+  <body>
+
+    <img src="nasium-lse-2.png" alt="NASIUM L.S.E." />
+
+    <h1>Exemples</h1>
+
+
+    <p>Un serveur NASIUM LSE en cours de dévelopement est accessible via telnet ou via http.</p>
+
+    <p>Par telnet:
+      <quote>
+        <a href="telnet://nasium-lse.ogamita.com:8115">telnet://nasium-lse.ogamita.com:8115</a>
+      </quote>
+    </p>
+    <p></p>
+
+    <p>Par http:
+      <quote>
+        <a href="http://nasium-lse.ogamita.com:8117">http://nasium-lse.ogamita.com:8117</a>
+      </quote>
+    </p>
+
+    <pre>
+      REPERTOIRES EXISTANTS, NON MODIFIABLES:
+
+      /BOURG    PROGRAMMES ECRITS AU COLLEGE PAR PASCAL BOURGUIGNON.
+      /EXEMP    EXEMPLES DE "LANGAGE SYMBOLIQUE D'ENSEIGNEMENT L.S.E.
+      MANUEL D'UTILISATION".
+      /TESTS    PROGRAMMES DE TEST DE NASIUM-LSE.
+
+      REPERTOIRES EXISTANTS, MODIFIABLES:
+
+      /PROGR    PROGRAMMES DES UTILISATEURS.
+      /RUBANS   ETAGERE DE RUBANS.
+    </pre>
+
+
+    <h2>Exemple d'interaction: mode machine de bureau</h2>
+    <p>En gras les caractères que vous devez taper, suivi de <kbd>ENTRÉE</kbd></p>
+
+    <pre>
+      <b>?atg(1)</b>
+      0.7853982
+      <b>pi_atg(1)*4</b>
+      <b>?pi</b>
+      3.1415927
+      <b>?2*pi</b>
+      6.2831855
+    </pre>
+
+    <h2>Exemple d'interaction: exécution d'un programme existant</h2>
+    <p>En gras les caractères que vous devez taper, suivi de <kbd>ENTRÉE</kbd></p>
+
+    <pre>
+
+      <b>CH</b>ANGER REPERTOIRE <b>/exemp</b>
+      <b>TA</b>BLE DES FICHIERS   05/05/12 17:39:55
+
+      FICHIERS-PROGRAMMES
+      *******************
+
+      NOM NO.COMPTE  DATE  NB.MOTS
+
+      FLIBU  00    05/05/12   558
+      PG01   00    05/05/12   193
+      PG02   00    05/05/12   194
+      …
+      PG641  00    05/05/12   329
+      PG642  00    05/05/12   311
+      PG76   00    05/05/12  1123
+      PG77   00    05/05/12   966
+
+      FICHIERS-PERMANENTS
+      *******************
+
+      NOM NO.COMPTE  DATE  NB.SECTEURS
+
+
+      FICHIERS-DONNEE TEMPORAIRES
+      *****************************
+
+      NOM CONSOLE NB.SECTEURS
+
+
+      <b>AP</b>PELER <b>pg09</b>
+      <b>LI</b>STER A PARTIR DE <b>1</b>
+
+      1*SOMME DES CARRES DES N PREMIERS ENTIERS NATURES
+      4 AFFICHER 'N=';LIRE N
+      6 I_1;S_0
+      8 S_S+I^2
+      10 SI N=I ALORS ALLER EN 12
+      11 I_I+1;ALLER EN 8
+      12 AFFICHER 'SOMME = ',S
+      14 TERMINER
+      251*EXTRAIT DE "LANGAGE SYMBOLIQUE D'ENSEIGNEMENT L.S.E. MANUEL D'UTILISATION"
+      252*BULLETIN DE LIAISON "L'INFORMATIQUE ET L'ENSEIGNEMENT SECONDAIRE" JAN 1975
+      253*C.LAFOND - INSTITUT NATIONAL DE RECHERCHE ET DE DOCUMENTATION PEDAGOGIQUES
+      254*PROGRAMME PG9, PAGE 53, SOMME DES CARRES DES N PREMIERS NOMBRES ENTIERS
+      255*&#91;PAS TESTE SUR EMULSE]
+
+      <b>EX</b>ECUTER A PARTIR DE <b>1</b>
+
+      N=<b>20</b>
+      SOMME = 2870
+      TERMINE EN LIGNE 014
+
+    </pre>
+
+    <h2>Exemple d'interaction: création d'un nouveau programme</h2>
+    <p>En gras les caractères que vous devez taper, suivi de <kbd>ENTRÉE</kbd></p>
+
+
+    <pre>
+      <b>CH</b>ANGER REPERTOIRE <b>/progr</b>
+      <b>TA</b>BLE DES FICHIERS   05/05/12 17:48:46
+
+      FICHIERS-PROGRAMMES
+      *******************
+
+      NOM NO.COMPTE  DATE  NB.MOTS
+
+
+      FICHIERS-PERMANENTS
+      *******************
+
+      NOM NO.COMPTE  DATE  NB.SECTEURS
+
+
+      FICHIERS-DONNEE TEMPORAIRES
+      *****************************
+
+      NOM CONSOLE NB.SECTEURS
+
+
+      <b>1*auteur: Pascal Bourguignon</b>
+      <b>2*resolution d'une equation du 2e degre</b>
+      <b>10 afficher &#91;/,'resolution d'une equation du second degre',/]</b>
+      ERREUR EN LIGNE  10 : COLONNE 29 : ATTENDU "]", PAS U "U"
+      10 AFFICHER &#91;/,'RESOLUTION D'UNE EQUATION DU SECOND DEGRE',/]
+      ^
+
+      PRET
+      <b>10 afficher &#91;/,'resolution d''ene equation du second degre',/]</b>
+      <b>12 afficher &#91;/,'A*X^2+B*X+C=0',/]</b>
+      <b>20 afficher &#91;/,'A='];lire a</b>
+      <b>22 afficher &#91;/,'B='];lire b</b>
+      <b>24 afficher &#91;/,'C='];lire c</b>
+      <b>30 delta=b^2-4*a*c</b>
+      ERREUR EN LIGNE  30 : COLONNE 8 : ATTENDU "_", PAS = "="
+      30 DELTA=B^2-4*A*C
+      ^
+
+      PRET
+      <b>30 delta_b^2-4*a*c</b>
+      <b>32 si delta&lt;0 alors debut afficher 'pas de solution' ; terminer fin</b>
+      <b>34 si delta=0 alors debut afficher&#91;/,'solution: x=',u,/]-b/(2*a) ; terminer fin</b>
+      <b>36 x1_(-b-rac(delta))/(2*a); x1_(-b+rac(delta))/(2*a)</b>
+      <b>38 afficher&#91;/,'deux solutions: x1=',u,' et x2=',u,/]x1,x2</b>
+      <b>40 terminer</b>
+
+      <b>LI</b>STER A PARTIR DE <b>1</b>
+      1*AUTEUR: PASCAL BOURGUIGNON
+      2*RESOLUTION D'UNE EQUATION DU 2E DEGRE
+      10 AFFICHER&#91;/,'RESOLUTION D''ENE EQUATION DU SECOND DEGRE',/]
+      12 AFFICHER&#91;/,'A*X^2+B*X+C=0',/]
+      20 AFFICHER&#91;/,'A='];LIRE A
+      22 AFFICHER&#91;/,'B='];LIRE B
+      24 AFFICHER&#91;/,'C='];LIRE C
+      30 DELTA_B^2-4*A*C
+      32 SI DELTA<0 ALORS DEBUT AFFICHER 'PAS DE SOLUTION';TERMINER FIN
+                    34 SI DELTA=0 ALORS DEBUT AFFICHER&#91;/,'SOLUTION: X=',U,/]-B/2*A;TERMINER FIN
+                    36 X1_(-B-RAC(DELTA))/2*A;X1_(-B+RAC(DELTA))/2*A
+                    38 AFFICHER&#91;/,'DEUX SOLUTIONS: X1=',U,' ET X2=',U,/]X1,X2
+                    40 TERMINER
+
+                    <b>EX</b>ECUTER A PARTIR DE <b>1</b>
+
+                    RESOLUTION D'ENE EQUATION DU SECOND DEGRE
+
+                    A*X^2+B*X+C=0
+
+                    A=<b>2</b>
+                    B=<b>4</b>
+                    C=<b>2</b>
+                    SOLUTION: X=-1
+
+                    TERMINE EN LIGNE 034
+                    <b>EX</b>ECUTER A PARTIR DE <b>1</b>
+
+                    RESOLUTION D'ENE EQUATION DU SECOND DEGRE
+
+                    A*X^2+B*X+C=0
+
+                    A=<b>2</b>
+                    B=<b>5</b>
+                    C=<b>1</b>
+                    DEUX SOLUTIONS: X1=-0.21922362  ET X2=
+                    ERREUR EN LIGNE  38 : LA VARIABLE X2 N'A PAS ETE INITIALISEE
+
+                    PRET
+                    <b>36 X1_(-B-RAC(DELTA))/2*A;X2_(-B+RAC(DELTA))/2*A</b>
+                    <b>RE</b>PRENDRE A PARTIR DE <b>36</b>
+
+                    DEUX SOLUTIONS: X1=-9.123106  ET X2=-0.8768945
+
+                    TERMINE EN LIGNE 040
+                    <b>LI</b>STER A PARTIR DE <b>36</b>
+                    36 X1_(-B-RAC(DELTA))/2*A;X2_(-B+RAC(DELTA))/2*A
+                    38 AFFICHER&#91;/,'DEUX SOLUTIONS: X1=',U,' ET X2=',U,/]X1,X2
+                    40 TERMINER
+
+                    <b>36 X1_(-B-RAC(DELTA))/(2*A);X2_(-B+RAC(DELTA))/(2*A)</b>
+                    <b>EX</b>ECUTER A PARTIR DE <b>1</b>
+
+                    RESOLUTION D'ENE EQUATION DU SECOND DEGRE
+
+                    A*X^2+B*X+C=0
+
+                    A=<b>2</b>
+                    B=<b>5</b>
+                    C=<b>1</b>
+                    DEUX SOLUTIONS: X1=-2.2807765  ET X2=-0.21922362
+
+                    TERMINE EN LIGNE 040
+                    <b>?a*x1^2+b*x1+c</b>
+                    0
+                    <b>?a*x2^2+b*x2+c</b>
+                    -1.1920929E-07
+
+                    <b>RA</b>NGER <b>equa2</b>
+                    <b>TA</b>BLE DES FICHIERS   05/05/12 17:56:43
+
+                    FICHIERS-PROGRAMMES
+                    *******************
+
+                    NOM NO.COMPTE  DATE  NB.MOTS
+
+                    EQUA2  00    05/05/12   262
+
+                    FICHIERS-PERMANENTS
+                    *******************
+
+                    NOM NO.COMPTE  DATE  NB.SECTEURS
+
+
+                    FICHIERS-DONNEE TEMPORAIRES
+                    *****************************
+
+                    NOM CONSOLE NB.SECTEURS
+
+    </pre>
+
+    <br>
+    <hr>
+    <a href="index.html">Nasium LSE</a>
+    <hr>
+    <div class="copyright">Copyright 2001 - 2014 Ogamita ;
+      <a href="mailto:info@ogamita.com">info@ogamita.com</a></div>
+  </body>
+</html>
+
diff --git a/com.ogamita.www/nasium-lse/index.html b/com.ogamita.www/nasium-lse/index.html
index 9178398..78c92c4 100644
--- a/com.ogamita.www/nasium-lse/index.html
+++ b/com.ogamita.www/nasium-lse/index.html
@@ -38,15 +38,17 @@ Article Wikipedia sur LSE</a>.</p>
 <p><a href="doc-server">Lire la documentation Serveur.</a>
 -->

-<h2>Téléchargement</h2>
+<h2>Licence</h2>

 <p>Ce logiciel est distribué sous la license
-<a href="http://www.gnu.org/licenses/agpl-3.0.html">  GNU Affero General
-Public License</a>.
+<a href="http://www.gnu.org/licenses/agpl-3.0.html">
+GNU Affero General Public License</a>.</p>

-<p><em>Pas encore disponible</em></p>

 <!--
+
+<h2>Téléchargement</h2>
+
 <p>Avant de télécharger ce programme, nous voudrions vous inviter à nous
 aider à supporter son développement.

@@ -97,21 +99,36 @@ aider à supporter son développement.

 -->

-<h2>Dépôt fossil et rapports de bogue</h2>
+<h2>Dépôt git et rapports de bogue</h2>

-<p>Les sources de </b>NASIUM L.S.E.</b> sont aussi disponibles dans un
-dépôt <a href="http://www.fossil-scm.org/">fossil</a> :
-<a href="http://fossil.nasium-lse.ogamita.com/nasium-lse">
-http://fossil.nasium-lse.ogamita.com/nasium-lse</a>.</p>
+<p>Les sources de </b>NASIUM L.S.E.</b> sont disponibles dans un
+dépôt <a href="http://www.git-scm.org/">git</a> :
+<a href="http://gitorious.org/nasium-lse">
+http://gitorious.org/nasium-lse</a>.</p>

+<!--
 <p>Les rapports de bogue peuvent être consultés et saisis sur:
 <a href="http://fossil.nasium-lse.ogamita.com/nasium-lse/reportlist">
 http://fossil.nasium-lse.ogamita.com/nasium-lse/reportlist</a>.</p>
+-->

-<br>
+<h2>Exemples</h2>
+
+<p>Quelques <a href="exemple.html">exemples</a> sont disponibles.</p>
+
+<p>Vous pouvez aussi <a href="interactif.html">utiliser Nasium LSE</a>
+directement, tout en accédant à la documentation. dans votre
+navigateur.</p>

+<h2>Liste de difusion</h2>

-<div class="copyright">Copyright 2001 - 2012 Ogamita ;
+<p>Une liste de diffusion pour les utilisateurs <b>NASIUM L.S.E.</b>
+est disponible à <a href="http://lists.ogamita.com/listinfo/lse">
+http://lists.ogamita.com/listinfo/lse</a>.</p>
+
+<br>
+<hr>
+<div class="copyright">Copyright 2001 - 2014 Ogamita ;
 <a href="mailto:info@ogamita.com">info@ogamita.com</a></div>
 </body>
 </html>
diff --git a/com.ogamita.www/nasium-lse/interactif.html b/com.ogamita.www/nasium-lse/interactif.html
new file mode 100644
index 0000000..1389b03
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/interactif.html
@@ -0,0 +1,44 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+  <head>
+    <link rel="shortcut icon"                        href="http://www.ogamita.com/favicon.ico" />
+    <link rel="icon" type="image/vnd.microsoft.icon" href="http://www.ogamita.com/favicon.ico" />
+    <link rel="icon" type="image/png"                href="http://www.ogamita.com/favicon.png" />
+    <link rel="stylesheet" href="http://www.ogamita.com/default.css" type="text/css">
+    <title>NASIUM L.S.E. - Interactif</title>
+    <meta name="author" content="Pascal J. Bourguignon">
+    <meta name="Reply-To" content="pjb@ogamita.com">
+    <meta name="Keywords" content="NASIUM,LSE, L.S.E, Langage Symbolique d'Enseignement, Langage de programmation, Français">
+    <meta http-equiv="Content-Type" content="text/html;charset=utf-8">
+  </head>
+  <body>
+
+    <table width="100%" height="80%">
+      <tr>
+        <td width="50%">
+          <iframe frameborder="1" scrolling="auto" width="100%" height="700"
+                  src="http://nasium-lse.ogamita.com:8117">
+            <A href="http://nasium-lse.ogamita.com:8117">Nasium-LSE.</A>
+          </iframe>
+        </td>
+
+        <td width="50%">
+          <iframe frameborder="1" scrolling="auto" width="100%" height="700"
+                  src="doc-cli/index.html">
+            <A href="doc-cli/index.html">Documentation de Nasium-LSE.</A>
+          </iframe>
+        </td>
+
+      </tr>
+    </table>
+
+
+    <br>
+    <hr>
+    <a href="index.html">Nasium LSE</a>
+    <hr>
+    <div class="copyright">Copyright 2001 - 2014 Ogamita ;
+      <a href="mailto:info@ogamita.com">info@ogamita.com</a></div>
+  </body>
+</html>
+
diff --git a/com.ogamita.www/nasium-lse/terminal/applet.conf b/com.ogamita.www/nasium-lse/terminal/applet.conf
new file mode 100644
index 0000000..06e62d0
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/applet.conf
@@ -0,0 +1,114 @@
+# This file is part of "JTA - Telnet/SSH for the JAVA(tm) platform".
+#
+# (c) Matthias L. Jugel, Marcus Meißner 1996-2005. All Rights Reserved.
+#
+# Please visit http://javatelnet.org/ for updates and contact.
+#
+# --LICENSE NOTICE--
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --LICENSE NOTICE--
+#
+
+# -- IMPORTANT NOTICE --
+# Copy this file when creating your own configuration and name it different.
+# default.conf is used by the software for initial setup. Your own config
+# may not need all the fields found in this file but only those you want
+# to change.
+# -- IMPORTANT NOTICE --
+
+# =======================================================================
+# common program defaults
+# =======================================================================
+plugins                         =       Status,Socket,Telnet,Terminal
+pluginPath                      =       de.mud.jta.plugin
+layout                          =       BorderLayout
+layout.Terminal                 =       Center
+layout.Status                   =       South
+layout.MudConnector             =       North
+
+# help url/filename
+Help.url        = index.html
+
+# =======================================================================
+# Applet defaults
+# =======================================================================
+Applet.detach                   =       false
+Applet.detach.fullscreen        =       false
+Applet.detach.immediately       =       false
+Applet.detach.menuBar           =       true
+Applet.detach.startText         =       Connect
+Applet.detach.stopText          =       Disonnect
+Applet.disconnect               =       true
+Applet.disconnect.closeWindow   =       true
+# to make Netscape behave good we would like to have some privileges
+Applet.Netscape.privilege       =       UniversalConnect,UniversalPrintJobAccess,UniversalSystemClipboardAccess
+
+# =======================================================================
+# Socket defaults
+# =======================================================================
+# This is set to the webserver by default.
+Socket.host                     =       voyager.informatimago.com
+Socket.port                     =       8115
+# for SSH use the port below
+#Socket.port                    =       22
+
+# =======================================================================
+# Timeout settings
+# =======================================================================
+Timeout.seconds                 =       60
+Timeout.command                 =       exit\n
+
+# =======================================================================
+# Terminal defaults
+# =======================================================================
+Terminal.foreground             =       #00ff33
+Terminal.background             =       #000000
+Terminal.cursor.foreground      =       #000000
+Terminal.cursor.background      =       #ffff00
+Terminal.print.color            =       false
+Terminal.border                 =       2
+Terminal.borderRaised           =       false
+# if you use your own file use a fully qualified URL!
+Terminal.colorSet               =       /de/mud/terminal/colorSet.conf
+Terminal.scrollBar              =       West
+# now the real terminal configuration
+Terminal.id                     =       vt320
+Terminal.buffer                 =       100
+Terminal.size                   =       [80,24]
+Terminal.resize                 =       screen
+Terminal.font                   =       Monospaced
+Terminal.fontStyle              =       plain
+Terminal.fontSize               =       11
+# if you use your own file use a fully qualified URL!
+Terminal.keyCodes               =       /de/mud/terminal/keyCodes.conf
+Terminal.VMS                    =       false
+Terminal.IBM                    =       falseapplet java telnet
+# the setting below should be correct, but it does not work
+#Terminal.encoding              =       ISO8859_1
+# the setting used it probably incorrect but forces the default behaviour
+#Terminal.encoding              =       latin1
+Terminal.encoding               =       utf-8
+#Terminal.beep                  =       http://www.mud.de/se/jta/BOUNCE.WAV
+Terminal.beep                   =       beep.wav
+
+# =======================================================================
+# MudConnect defaults
+# =======================================================================
+MudConnector.listURL            =       http://www.mudconnector.com/java/Telnet/javalist.db
+
+# =======================================================================
+# MudConnect defaults
+# =======================================================================
+Capture.url                     = Configure this URL!
diff --git a/com.ogamita.www/nasium-lse/terminal/default.conf b/com.ogamita.www/nasium-lse/terminal/default.conf
new file mode 100644
index 0000000..06a5ea2
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/default.conf
@@ -0,0 +1,112 @@
+# This file is part of "JTA - Telnet/SSH for the JAVA(tm) platform".
+#
+# (c) Matthias L. Jugel, Marcus Meißner 1996-2005. All Rights Reserved.
+#
+# Please visit http://javatelnet.org/ for updates and contact.
+#
+# --LICENSE NOTICE--
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+# --LICENSE NOTICE--
+#
+
+# -- IMPORTANT NOTICE --
+# Copy this file when creating your own configuration and name it different.
+# default.conf is used by the software for initial setup. Your own config
+# may not need all the fields found in this file but only those you want
+# to change.
+# -- IMPORTANT NOTICE --
+
+# =======================================================================
+# common program defaults
+# =======================================================================
+plugins				=	Status,Socket,Telnet,Terminal
+pluginPath			=	de.mud.jta.plugin
+layout				=	BorderLayout
+layout.Terminal			=	Center
+layout.Status			=	South
+layout.MudConnector		=	North
+
+# help url/filename
+Help.url        = /index.html
+
+# =======================================================================
+# Applet defaults
+# =======================================================================
+Applet.detach			=	false
+Applet.detach.fullscreen	=	false
+Applet.detach.immediately	=	false
+Applet.detach.menuBar		=	true
+Applet.detach.startText		=	Connect
+Applet.detach.stopText		=	Disonnect
+Applet.disconnect		=	true
+Applet.disconnect.closeWindow	=	true
+# to make Netscape behave good we would like to have some privileges
+Applet.Netscape.privilege	=	UniversalConnect,UniversalPrintJobAccess,UniversalSystemClipboardAccess
+
+# =======================================================================
+# Socket defaults
+# =======================================================================
+# This is set to the webserver by default.
+Socket.host			=
+Socket.port			=	23
+# for SSH use the port below
+#Socket.port			=	22
+
+# =======================================================================
+# Timeout settings
+# =======================================================================
+Timeout.seconds			=	60
+Timeout.command			=	exit\n
+
+# =======================================================================
+# Terminal defaults
+# =======================================================================
+Terminal.foreground		=	#ffffff
+Terminal.background		=	#000000
+Terminal.cursor.foreground	=	#000000
+Terminal.cursor.background	=	#ffffff
+Terminal.print.color		=	false
+Terminal.border			=	2
+Terminal.borderRaised		=	false
+# if you use your own file use a fully qualified URL!
+Terminal.colorSet		=	/de/mud/terminal/colorSet.conf
+Terminal.scrollBar		=	West
+# now the real terminal configuration
+Terminal.id			=	vt320
+Terminal.buffer			=	100
+Terminal.size			=	[80,24]
+Terminal.resize			=	screen
+Terminal.font			=	Monospaced
+Terminal.fontStyle		=	plain
+Terminal.fontSize		=	11
+# if you use your own file use a fully qualified URL!
+Terminal.keyCodes		=	/de/mud/terminal/keyCodes.conf
+Terminal.VMS			=	false
+Terminal.IBM			=	false
+# the setting below should be correct, but it does not work
+#Terminal.encoding		=	ISO8859_1
+# the setting used it probably incorrect but forces the default behaviour
+Terminal.encoding		=	latin1
+#Terminal.beep			=	http://www.mud.de/se/jta/BOUNCE.WAV
+
+# =======================================================================
+# MudConnect defaults
+# =======================================================================
+MudConnector.listURL	=	http://www.mudconnector.com/java/Telnet/javalist.db
+
+# =======================================================================
+# MudConnect defaults
+# =======================================================================
+Capture.url       = Configure this URL!
diff --git a/com.ogamita.www/nasium-lse/terminal/jta26.jar b/com.ogamita.www/nasium-lse/terminal/jta26.jar
new file mode 100644
index 0000000..7ed0d2b
Binary files /dev/null and b/com.ogamita.www/nasium-lse/terminal/jta26.jar differ
diff --git a/com.ogamita.www/nasium-lse/terminal/nasium-lse-online.html b/com.ogamita.www/nasium-lse/terminal/nasium-lse-online.html
new file mode 100644
index 0000000..17c39db
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/nasium-lse-online.html
@@ -0,0 +1,14 @@
+<html>
+  <head>
+    <title>NASIUM LSE</title>
+  </head>
+  <body>
+    <applet CODEBASE="."
+            ARCHIVE="jta26.jar"
+            CODE="de.mud.jta.Applet"
+            WIDTH="590" HEIGHT="360">
+      <param name="">
+      <param name="config" value="applet.conf">
+    </applet>
+  </body>
+</html>
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/compacted/termlib_min.js b/com.ogamita.www/nasium-lse/terminal/termlib/compacted/termlib_min.js
new file mode 100644
index 0000000..3f7751f
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/compacted/termlib_min.js
@@ -0,0 +1,367 @@
+/*
+  termlib.js - JS-WebTerminal Object v1.6 (source compacted using jsmin.php)
+
+  (c) Norbert Landsteiner 2003-2010
+  mass:werk - media environments
+  <http://www.masswerk.at/termlib/>
+
+  Creates [multiple] Terminal instances.
+
+  Synopsis:
+
+  myTerminal = new Terminal(<config object>);
+  myTerminal.open();
+
+  See file "readme.txt" for documentation and usage.
+
+  License:
+  This JavaScript-library is free.
+  Include a visible backlink to <http://www.masswerk.at/termlib/> in the
+  embedding web page or application.
+  The library should always be accompanied by the 'readme.txt' and the
+  sample HTML-documents.
+
+  Any changes should be commented and must be reflected in `Terminal.version'
+  in the format: "Version.Subversion (compatibility)".
+
+  Donations are welcome:
+  http://www.masswerk.at/termlib/donate/
+
+  Disclaimer:
+  This software is distributed AS IS and in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. The entire risk as to
+  the quality and performance of the product is borne by the user. No use of
+  the product is authorized hereunder except under this disclaimer.
+*/
+
+var Terminal=function(conf){if(typeof conf!='object'){conf=new Object();}
+else{for(var i in this.Defaults){if(typeof conf[i]=='undefined')conf[i]=this.Defaults[i];}}
+this.conf=conf;this.setInitValues();}
+Terminal.prototype={version:'1.6 (original)',Defaults:{cols:80,rows:24,x:100,y:100,termDiv:'termDiv',bgColor:'#181818',frameColor:'#555555',frameWidth:1,rowHeight:15,blinkDelay:500,fontClass:'term',crsrBlinkMode:false,crsrBlockMode:true,DELisBS:false,printTab:true,printEuro:true,catchCtrlH:true,closeOnESC:true,historyUnique:false,id:0,ps:'>',greeting:'%+r Terminal ready. %-r',handler:this.defaultHandler,ctrlHandler:null,initHandler:null,exitHandler:null,wrapping:false,mapANSI:false,ANSItrueBlack:false},setInitValues:function(){this.isSafari=(navigator.userAgent.indexOf('Safari')>=0||navigator.userAgent.indexOf('WebKit')>=0)?true:false;this.isOpera=(window.opera&&navigator.userAgent.indexOf('Opera')>=0)?true:false;this.isChrome=(navigator.userAgent.indexOf('Chrome/')>=0&&navigator.userAgent.indexOf('WebKit')>=0)?true:false;this.domAPI=(document&&document.createElement)?true:false;this.isMac=(navigator.userAgent.indexOf('Mac')>=0)?true:false;this.id=this.conf.id;this.maxLines=this.conf.rows;this.maxCols=this.conf.cols;this.termDiv=this.conf.termDiv;this.crsrBlinkMode=this.conf.crsrBlinkMode;this.crsrBlockMode=this.conf.crsrBlockMode;this.blinkDelay=this.conf.blinkDelay;this.DELisBS=this.conf.DELisBS;this.printTab=this.conf.printTab;this.printEuro=this.conf.printEuro;this.catchCtrlH=this.conf.catchCtrlH;this.closeOnESC=this.conf.closeOnESC;this.historyUnique=this.conf.historyUnique;this.ps=this.conf.ps;this.closed=false;this.r;this.c;this.charBuf=new Array();this.styleBuf=new Array();this.scrollBuf=null;this.blinkBuffer=0;this.blinkTimer;this.cursoractive=false;this.lock=true;this.insert=false;this.charMode=false;this.rawMode=false;this.lineBuffer='';this.inputChar=0;this.lastLine='';this.guiCounter=0;this.history=new Array();this.histPtr=0;this.env=new Object();this.buckupBuffer=null;this.handler=this.conf.handler;this.wrapping=this.conf.wrapping;this.mapANSI=this.conf.mapANSI;this.ANSItrueBlack=this.conf.ANSItrueBlack;this.ctrlHandler=this.conf.ctrlHandler;this.initHandler=this.conf.initHandler;this.exitHandler=this.conf.exitHandler;this.fieldMode=false;this.fieldStart=this.fieldEnd=this.fieldC=0;},defaultHandler:function(){this.newLine();if(this.lineBuffer!=''){this.type('You typed: '+this.lineBuffer);this.newLine();}
+this.prompt();},open:function(){if(this.termDivReady()){if(!this.closed)this._makeTerm();this.init();return true;}
+else{return false;}},close:function(){this.lock=true;this.cursorOff();if(this.exitHandler)this.exitHandler();this.globals.setVisible(this.termDiv,0);this.closed=true;},init:function(){if(this.guiReady()){this.guiCounter=0;if(this.closed){this.setInitValues();}
+this.clear();this.globals.setVisible(this.termDiv,1);this.globals.enableKeyboard(this);if(this.initHandler){this.initHandler();}
+else{this.write(this.conf.greeting);this.newLine();this.prompt();}}
+else{this.guiCounter++;if(this.guiCounter>18000){if(confirm('Terminal:\nYour browser hasn\'t responded for more than 2 minutes.\nRetry?')){this.guiCounter=0;}
+else{return;}};this.globals.termToInitialze=this;window.setTimeout('Terminal.prototype.globals.termToInitialze.init()',200);}},getRowArray:function(l,v){var a=new Array();for(var i=0;i<l;i++)a[i]=v;return a;},wrapOn:function(){this.wrapping=true;},wrapOff:function(){this.wrapping=false;},type:function(text,style){for(var i=0;i<text.length;i++){var ch=text.charCodeAt(i);if(!this.isPrintable(ch))ch=94;this.charBuf[this.r][this.c]=ch;this.styleBuf[this.r][this.c]=(style)?style:0;var last_r=this.r;this._incCol();if(this.r!=last_r)this.redraw(last_r);}
+this.redraw(this.r)},write:function(text,usemore){if(typeof text!='object'){if(typeof text!='string')text=''+text;if(text.indexOf('\n')>=0){var ta=text.split('\n');text=ta.join('%n');}}
+else{if(text.join){text=text.join('%n');}
+else{text=''+text;}
+if(text.indexOf('\n')>=0){var ta=text.split('\n');text=ta.join('%n');}}
+if(this.mapANSI)text=this.globals.ANSI_map(text,this.ANSItrueBlack);this._sbInit(usemore);var chunks=text.split('%');var esc=(text.charAt(0)!='%');var style=0;var styleMarkUp=this.globals.termStyleMarkup;for(var i=0;i<chunks.length;i++){if(esc){if(chunks[i].length>0){this._sbType(chunks[i],style);}
+else if(i>0){this._sbType('%',style);}
+esc=false;}
+else{var func=chunks[i].charAt(0);if(chunks[i].length==0&&i>0){this._sbType("%",style);esc=true;}
+else if(func=='n'){this._sbNewLine(true);if(chunks[i].length>1)this._sbType(chunks[i].substring(1),style);}
+else if(func=='+'){var opt=chunks[i].charAt(1);opt=opt.toLowerCase();if(opt=='p'){style=0;}
+else if(styleMarkUp[opt]){style|=styleMarkUp[opt];}
+if(chunks[i].length>2)this._sbType(chunks[i].substring(2),style);}
+else if(func=='-'){var opt=chunks[i].charAt(1);opt=opt.toLowerCase();if(opt=='p'){style=0;}
+else if(styleMarkUp[opt]){style&=~styleMarkUp[opt];}
+if(chunks[i].length>2)this._sbType(chunks[i].substring(2),style);}
+else if(chunks[i].length>1&&func=='c'){var cinfo=this._parseColor(chunks[i].substring(1));style=(style&(~0xfffff0))|cinfo.style;if(cinfo.rest)this._sbType(cinfo.rest,style);}
+else if(chunks[i].length>1&&chunks[i].charAt(0)=='C'&&chunks[i].charAt(1)=='S'){this.clear();this._sbInit();if(chunks[i].length>2)this._sbType(chunks[i].substring(2),style);}
+else{if(chunks[i].length>0)this._sbType(chunks[i],style);}}}
+this._sbOut();},_parseColor:function(chunk){var rest='';var style=0;if(chunk.length){if(chunk.charAt(0)=='('){var clabel='';for(var i=1;i<chunk.length;i++){var c=chunk.charAt(i);if(c==')'){if(chunk.length>i)rest=chunk.substring(i+1);break;}
+clabel+=c;}
+if(clabel){if(clabel.charAt(0)=='@'){var sc=this.globals.nsColors[clabel.substring(1).toLowerCase()];if(sc)style=(16+sc)*0x100;}
+else if(clabel.charAt(0)=='#'){var cl=clabel.substring(1).toLowerCase();var sc=this.globals.webColors[cl];if(sc){style=sc*0x10000;}
+else{cl=this.globals.webifyColor(cl);if(cl)style=this.globals.webColors[cl]*0x10000;}}
+else if(clabel.length&&clabel.length<=2){var isHex=false;for(var i=0;i<clabel.length;i++){if(this.globals.isHexOnlyChar(clabel.charAt(i))){isHex=true;break;}}
+var cl=(isHex)?parseInt(clabel,16):parseInt(clabel,10);if(!isNaN(cl)||cl<=15){style=cl*0x100;}}
+else{style=this.globals.getColorCode(clabel)*0x100;}}}
+else{var c=chunk.charAt(0);if(this.globals.isHexChar(c)){style=this.globals.hexToNum[c]*0x100;rest=chunk.substring(1);}
+else{rest=chunk;}}}
+return{rest:rest,style:style};},_sbInit:function(usemore){var sb=this.scrollBuf=new Object();var sbl=sb.lines=new Array();var sbs=sb.styles=new Array();sb.more=usemore;sb.line=0;sb.status=0;sb.r=0;sb.c=this.c;sbl[0]=this.getRowArray(this.conf.cols,0);sbs[0]=this.getRowArray(this.conf.cols,0);for(var i=0;i<this.c;i++){sbl[0][i]=this.charBuf[this.r][i];sbs[0][i]=this.styleBuf[this.r][i];}},_sbType:function(text,style){var sb=this.scrollBuf;for(var i=0;i<text.length;i++){var ch=text.charCodeAt(i);if(!this.isPrintable(ch))ch=94;sb.lines[sb.r][sb.c]=ch;sb.styles[sb.r][sb.c++]=(style)?style:0;if(sb.c>=this.maxCols)this._sbNewLine();}},_sbNewLine:function(forced){var sb=this.scrollBuf;if(this.wrapping&&forced){sb.lines[sb.r][sb.c]=10;sb.lines[sb.r].length=sb.c+1;}
+sb.r++;sb.c=0;sb.lines[sb.r]=this.getRowArray(this.conf.cols,0);sb.styles[sb.r]=this.getRowArray(this.conf.cols,0);},_sbWrap:function(){var wb=new Object();wb.lines=new Array();wb.styles=new Array();wb.lines[0]=this.getRowArray(this.conf.cols,0);wb.styles[0]=this.getRowArray(this.conf.cols,0);wb.r=0;wb.c=0;var sb=this.scrollBuf;var sbl=sb.lines;var sbs=sb.styles;var ch,st,wrap,lc,ls;var l=this.c;var lastR=0;var lastC=0;wb.cBreak=false;for(var r=0;r<sbl.length;r++){lc=sbl[r];ls=sbs[r];for(var c=0;c<lc.length;c++){ch=lc[c];st=ls[c];if(ch){var wrap=this.globals.wrapChars[ch];if(ch==10)wrap=1;if(wrap){if(wrap==2){l++;}
+else if(wrap==4){l++;lc[c]=45;}
+this._wbOut(wb,lastR,lastC,l);if(ch==10){this._wbIncLine(wb);}
+else if(wrap==1&&wb.c<this.maxCols){wb.lines[wb.r][wb.c]=ch;wb.styles[wb.r][wb.c++]=st;if(wb.c>=this.maxCols)this._wbIncLine(wb);}
+if(wrap==3){lastR=r;lastC=c;l=1;}
+else{l=0;lastR=r;lastC=c+1;if(lastC==lc.length){lastR++;lastC=0;}
+if(wrap==4)wb.cBreak=true;}}
+else{l++;}}
+else{continue;}}}
+if(l){if(wb.cbreak&&wb.c!=0)wb.c--;this._wbOut(wb,lastR,lastC,l);}
+sb.lines=wb.lines;sb.styles=wb.styles;sb.r=wb.r;sb.c=wb.c;},_wbOut:function(wb,br,bc,l){var sb=this.scrollBuf;var sbl=sb.lines;var sbs=sb.styles;var ofs=0;var lc,ls;if(l+wb.c>this.maxCols){if(l<this.maxCols){this._wbIncLine(wb);}
+else{var i0=0;ofs=this.maxCols-wb.c;lc=sbl[br];ls=sbs[br];while(true){for(var i=i0;i<ofs;i++){wb.lines[wb.r][wb.c]=lc[bc];wb.styles[wb.r][wb.c++]=ls[bc++];if(bc==sbl[br].length){bc=0;br++;lc=sbl[br];ls=sbs[br];}}
+this._wbIncLine(wb);if(l-ofs<this.maxCols)break;i0=ofs;ofs+=this.maxCols;}}}
+else if(wb.cBreak){wb.c--;}
+lc=sbl[br];ls=sbs[br];for(var i=ofs;i<l;i++){wb.lines[wb.r][wb.c]=lc[bc];wb.styles[wb.r][wb.c++]=ls[bc++];if(bc==sbl[br].length){bc=0;br++;lc=sbl[br];ls=sbs[br];}}
+wb.cBreak=false;},_wbIncLine:function(wb){wb.r++;wb.c=0;wb.lines[wb.r]=this.getRowArray(this.conf.cols,0);wb.styles[wb.r]=this.getRowArray(this.conf.cols,0);},_sbOut:function(){var sb=this.scrollBuf;if(this.wrapping&&!sb.status)this._sbWrap();var sbl=sb.lines;var sbs=sb.styles;var tcb=this.charBuf;var tsb=this.styleBuf;var ml=this.maxLines;var buflen=sbl.length;if(sb.more){if(sb.status){if(this.inputChar==this.globals.lcMoreKeyAbort){this.r=ml-1;this.c=0;tcb[this.r]=this.getRowArray(this.conf.cols,0);tsb[this.r]=this.getRowArray(this.conf.cols,0);this.redraw(this.r);this.handler=sb.handler;this.charMode=false;this.inputChar=0;this.scrollBuf=null;this.prompt();return;}
+else if(this.inputChar==this.globals.lcMoreKeyContinue){this.clear();}
+else{return;}}
+else{if(this.r>=ml-1)this.clear();}}
+if(this.r+buflen-sb.line<=ml){for(var i=sb.line;i<buflen;i++){var r=this.r+i-sb.line;tcb[r]=sbl[i];tsb[r]=sbs[i];this.redraw(r);}
+this.r+=sb.r-sb.line;this.c=sb.c;if(sb.more){if(sb.status)this.handler=sb.handler;this.charMode=false;this.inputChar=0;this.scrollBuf=null;this.prompt();return;}}
+else if(sb.more){ml--;if(sb.status==0){sb.handler=this.handler;this.handler=this._sbOut;this.charMode=true;sb.status=1;}
+if(this.r){var ofs=ml-this.r;for(var i=sb.line;i<ofs;i++){var r=this.r+i-sb.line;tcb[r]=sbl[i];tsb[r]=sbs[i];this.redraw(r);}}
+else{var ofs=sb.line+ml;for(var i=sb.line;i<ofs;i++){var r=this.r+i-sb.line;tcb[r]=sbl[i];tsb[r]=sbs[i];this.redraw(r);}}
+sb.line=ofs;this.r=ml;this.c=0;this.type(this.globals.lcMorePrompt1,this.globals.lcMorePromtp1Style);this.type(this.globals.lcMorePrompt2,this.globals.lcMorePrompt2Style);this.lock=false;return;}
+else if(buflen>=ml){var ofs=buflen-ml;for(var i=0;i<ml;i++){var r=ofs+i;tcb[i]=sbl[r];tsb[i]=sbs[r];this.redraw(i);}
+this.r=ml-1;this.c=sb.c;}
+else{var dr=ml-buflen;var ofs=this.r-dr;for(var i=0;i<dr;i++){var r=ofs+i;for(var c=0;c<this.maxCols;c++){tcb[i][c]=tcb[r][c];tsb[i][c]=tsb[r][c];}
+this.redraw(i);}
+for(var i=0;i<buflen;i++){var r=dr+i;tcb[r]=sbl[i];tsb[r]=sbs[i];this.redraw(r);}
+this.r=ml-1;this.c=sb.c;}
+this.scrollBuf=null;},typeAt:function(r,c,text,style){var tr1=this.r;var tc1=this.c;this.cursorSet(r,c);for(var i=0;i<text.length;i++){var ch=text.charCodeAt(i);if(!this.isPrintable(ch))ch=94;this.charBuf[this.r][this.c]=ch;this.styleBuf[this.r][this.c]=(style)?style:0;var last_r=this.r;this._incCol();if(this.r!=last_r)this.redraw(last_r);}
+this.redraw(this.r);this.r=tr1;this.c=tc1;},statusLine:function(text,style,offset){var ch,r;style=(style&&!isNaN(style))?parseInt(style)&15:0;if(offset&&offset>0){r=this.conf.rows-offset;}
+else{r=this.conf.rows-1;}
+for(var i=0;i<this.conf.cols;i++){if(i<text.length){ch=text.charCodeAt(i);if(!this.isPrintable(ch))ch=94;}
+else{ch=0;}
+this.charBuf[r][i]=ch;this.styleBuf[r][i]=style;}
+this.redraw(r);},printRowFromString:function(r,text,style){var ch;style=(style&&!isNaN(style))?parseInt(style)&15:0;if(r>=0&&r<this.maxLines){if(typeof text!='string')text=''+text;for(var i=0;i<this.conf.cols;i++){if(i<text.length){ch=text.charCodeAt(i);if(!this.isPrintable(ch))ch=94;}
+else{ch=0;}
+this.charBuf[r][i]=ch;this.styleBuf[r][i]=style;}
+this.redraw(r);}},setChar:function(ch,r,c,style){this.charBuf[r][c]=ch;this.styleBuf[this.r][this.c]=(style)?style:0;this.redraw(r);},newLine:function(){this.c=0;this._incRow();},_charOut:function(ch,style){this.charBuf[this.r][this.c]=ch;this.styleBuf[this.r][this.c]=(style)?style:0;this.redraw(this.r);this._incCol();},_incCol:function(){this.c++;if(this.c>=this.maxCols){this.c=0;this._incRow();}},_incRow:function(){this.r++;if(this.r>=this.maxLines){this._scrollLines(0,this.maxLines);this.r=this.maxLines-1;}},_scrollLines:function(start,end){window.status='Scrolling lines ...';start++;for(var ri=start;ri<end;ri++){var rt=ri-1;this.charBuf[rt]=this.charBuf[ri];this.styleBuf[rt]=this.styleBuf[ri];}
+var rt=end-1;this.charBuf[rt]=this.getRowArray(this.conf.cols,0);this.styleBuf[rt]=this.getRowArray(this.conf.cols,0);this.redraw(rt);for(var r=end-1;r>=start;r--)this.redraw(r-1);window.status='';},clear:function(){window.status='Clearing display ...';this.cursorOff();this.insert=false;for(var ri=0;ri<this.maxLines;ri++){this.charBuf[ri]=this.getRowArray(this.conf.cols,0);this.styleBuf[ri]=this.getRowArray(this.conf.cols,0);this.redraw(ri);}
+this.r=0;this.c=0;window.status='';},reset:function(){if(this.lock)return;this.lock=true;this.rawMode=false;this.charMode=false;this.maxLines=this.conf.rows;this.maxCols=this.conf.cols;this.lastLine='';this.lineBuffer='';this.inputChar=0;this.clear();},prompt:function(){this.lock=true;if(this.c>0)this.newLine();this.type(this.ps);this._charOut(1);this.lock=false;this.cursorOn();},isPrintable:function(ch,unicodePage1only){if(this.wrapping&&this.globals.wrapChars[ch]==4)return true;if(unicodePage1only&&ch>255){return(ch==this.termKey.EURO&&this.printEuro)?true:false;}
+return((ch>=32&&ch!=this.termKey.DEL)||(this.printTab&&ch==this.termKey.TAB));},cursorSet:function(r,c){var crsron=this.cursoractive;if(crsron)this.cursorOff();this.r=r%this.maxLines;this.c=c%this.maxCols;this._cursorReset(crsron);},cursorOn:function(){if(this.blinkTimer)clearTimeout(this.blinkTimer);this.blinkBuffer=this.styleBuf[this.r][this.c];this._cursorBlink();this.cursoractive=true;},cursorOff:function(){if(this.blinkTimer)clearTimeout(this.blinkTimer);if(this.cursoractive){this.styleBuf[this.r][this.c]=this.blinkBuffer;this.redraw(this.r);this.cursoractive=false;}},cursorLeft:function(){var crsron=this.cursoractive;if(crsron)this.cursorOff();var r=this.r;var c=this.c;if(c>0){c--;}
+else if(r>0){c=this.maxCols-1;r--;}
+if(this.isPrintable(this.charBuf[r][c])){this.r=r;this.c=c;}
+this.insert=true;this._cursorReset(crsron);},cursorRight:function(){var crsron=this.cursoractive;if(crsron)this.cursorOff();var r=this.r;var c=this.c;if(c<this.maxCols-1){c++;}
+else if(r<this.maxLines-1){c=0;r++;}
+if(!this.isPrintable(this.charBuf[r][c])){this.insert=false;}
+if(this.isPrintable(this.charBuf[this.r][this.c])){this.r=r;this.c=c;}
+this._cursorReset(crsron);},backspace:function(){var crsron=this.cursoractive;if(crsron)this.cursorOff();var r=this.r;var c=this.c;if(c>0)c--
+else if(r>0){c=this.maxCols-1;r--;};if(this.isPrintable(this.charBuf[r][c])){this._scrollLeft(r,c);this.r=r;this.c=c;};this._cursorReset(crsron);},fwdDelete:function(){var crsron=this.cursoractive;if(crsron)this.cursorOff();if(this.isPrintable(this.charBuf[this.r][this.c])){this._scrollLeft(this.r,this.c);if(!this.isPrintable(this.charBuf[this.r][this.c]))this.insert=false;}
+this._cursorReset(crsron);},_cursorReset:function(crsron){if(crsron){this.cursorOn();}
+else{this.blinkBuffer=this.styleBuf[this.r][this.c];}},_cursorBlink:function(){if(this.blinkTimer)clearTimeout(this.blinkTimer);if(this==this.globals.activeTerm){if(this.crsrBlockMode){this.styleBuf[this.r][this.c]=(this.styleBuf[this.r][this.c]&1)?this.styleBuf[this.r][this.c]&0xfffffe:this.styleBuf[this.r][this.c]|1;}
+else{this.styleBuf[this.r][this.c]=(this.styleBuf[this.r][this.c]&2)?this.styleBuf[this.r][this.c]&0xffffd:this.styleBuf[this.r][this.c]|2;}
+this.redraw(this.r);}
+if(this.crsrBlinkMode)this.blinkTimer=setTimeout('Terminal.prototype.globals.activeTerm._cursorBlink()',this.blinkDelay);},_scrollLeft:function(r,c){var rows=new Array();rows[0]=r;while(this.isPrintable(this.charBuf[r][c])){var ri=r;var ci=c+1;if(ci==this.maxCols){if(ri<this.maxLines-1){ci=0;ri++;rows[rows.length]=ri;}
+else{break;}}
+this.charBuf[r][c]=this.charBuf[ri][ci];this.styleBuf[r][c]=this.styleBuf[ri][ci];c=ci;r=ri;}
+if(this.charBuf[r][c]!=0)this.charBuf[r][c]=0;for(var i=0;i<rows.length;i++)this.redraw(rows[i]);},_scrollRight:function(r,c){var rows=new Array();var end=this._getLineEnd(r,c);var ri=end[0];var ci=end[1];if(ci==this.maxCols-1&&ri==this.maxLines-1){if(r==0)return;this._scrollLines(0,this.maxLines);this.r--;r--;ri--;}
+rows[r]=1;while(this.isPrintable(this.charBuf[ri][ci])){var rt=ri;var ct=ci+1;if(ct==this.maxCols){ct=0;rt++;rows[rt]=1;}
+this.charBuf[rt][ct]=this.charBuf[ri][ci];this.styleBuf[rt][ct]=this.styleBuf[ri][ci];if(ri==r&&ci==c)break;ci--;if(ci<0){ci=this.maxCols-1;ri--;rows[ri]=1;}}
+for(var i=r;i<this.maxLines;i++){if(rows[i])this.redraw(i);}},_getLineEnd:function(r,c){if(!this.isPrintable(this.charBuf[r][c])){c--;if(c<0){if(r>0){r--;c=this.maxCols-1;}
+else{c=0;}}}
+if(this.isPrintable(this.charBuf[r][c])){while(true){var ri=r;var ci=c+1;if(ci==this.maxCols){if(ri<this.maxLines-1){ri++;ci=0;}
+else{break;}}
+if(!this.isPrintable(this.charBuf[ri][ci]))break;c=ci;r=ri;}}
+return[r,c];},_getLineStart:function(r,c){var ci,ri;if(!this.isPrintable(this.charBuf[r][c])){ci=c-1;ri=r;if(ci<0){if(ri==0)return[0,0];ci=this.maxCols-1;ri--;}
+if(!this.isPrintable(this.charBuf[ri][ci])){return[r,c];}
+else{r=ri;c=ci;}}
+while(true){var ri=r;var ci=c-1;if(ci<0){if(ri==0)break;ci=this.maxCols-1;ri--;}
+if(!this.isPrintable(this.charBuf[ri][ci]))break;;r=ri;c=ci;}
+return[r,c];},_getLine:function(){var end=this._getLineEnd(this.r,this.c);var r=end[0];var c=end[1];var line=new Array();while(this.isPrintable(this.charBuf[r][c])){line[line.length]=String.fromCharCode(this.charBuf[r][c]);if(c>0){c--;}
+else if(r>0){c=this.maxCols-1;r--;}
+else{break;}}
+line.reverse();return line.join('');},_clearLine:function(){var end=this._getLineEnd(this.r,this.c);var r=end[0];var c=end[1];var line='';while(this.isPrintable(this.charBuf[r][c])){this.charBuf[r][c]=0;if(c>0){c--;}
+else if(r>0){this.redraw(r);c=this.maxCols-1;r--;}
+else{break;}}
+if(r!=end[0])this.redraw(r);c++;this.cursorSet(r,c);this.insert=false;},backupScreen:function(){var backup=this.backupBuffer=new Object();var rl=this.conf.rows;var cl=this.conf.cols;backup.cbuf=new Array(rl);backup.sbuf=new Array(rl);backup.maxCols=this.maxCols;backup.maxLines=this.maxLines;backup.r=this.r;backup.c=this.c;backup.charMode=this.charMode;backup.rawMode=this.rawMode;backup.handler=this.handler;backup.ctrlHandler=this.ctrlHandler;backup.cursoractive=this.cursoractive;backup.crsrBlinkMode=this.crsrBlinkMode;backup.crsrBlockMode=this.crsrBlockMode;backup.blinkDelay=this.blinkDelay;backup.DELisBS=this.DELisBS;backup.printTab=this.printTab;backup.printEuro=this.printEuro;backup.catchCtrlH=this.catchCtrlH;backup.closeOnESC=this.closeOnESC;backup.historyUnique=this.historyUnique;backup.ps=this.ps;backup.lineBuffer=this.lineBuffer;backup.inputChar=this.inputChar;backup.lastLine=this.lastLine;backup.historyLength=this.history.length;backup.histPtr=this.histPtr;backup.wrapping=this.wrapping;backup.mapANSI=this.mapANSI;backup.ANSItrueBlack=this.ANSItrueBlack;if(this.cursoractive)this.cursorOff();for(var r=0;r<rl;r++){var cbr=this.charBuf[r];var sbr=this.styleBuf[r];var tcbr=backup.cbuf[r]=new Array(cl);var tsbr=backup.sbuf[r]=new Array(cl);for(var c=0;c<cl;c++){tcbr[c]=cbr[c];tsbr[c]=sbr[c];}}},restoreScreen:function(){var backup=this.backupBuffer;if(!backup)return;var rl=this.conf.rows;for(var r=0;r<rl;r++){this.charBuf[r]=backup.cbuf[r];this.styleBuf[r]=backup.sbuf[r];this.redraw(r);}
+this.maxCols=backup.maxCols;this.maxLines=backup.maxLines;this.r=backup.r;this.c=backup.c;this.charMode=backup.charMode;this.rawMode=backup.rawMode;this.handler=backup.handler;this.ctrlHandler=backup.ctrlHandler;this.cursoractive=backup.cursoractive;this.crsrBlinkMode=backup.crsrBlinkMode;this.crsrBlockMode=backup.crsrBlockMode;this.blinkDelay=backup.blinkDelay;this.DELisBS=backup.DELisBS;this.printTab=backup.printTab;this.printEuro=backup.printEuro;this.catchCtrlH=backup.catchCtrlH;this.closeOnESC=backup.closeOnESC;this.historyUnique=backup.historyUnique;this.ps=backup.ps;this.lineBuffer=backup.lineBuffer;this.inputChar=backup.inputChar;this.lastLine=backup.lastLine;if(this.history.length>backup.historyLength){this.history.length=backup.historyLength;this.histPtr=backup.histPtr;}
+this.wrapping=backup.wrapping;this.mapANSI=backup.mapANSI;this.ANSItrueBlack=backup.ANSItrueBlack;if(this.cursoractive)this.cursorOn();this.backupBuffer=null;},swapBackup:function(){var backup=this.backupBuffer;this.backupScreen;if(backup){var backup2=this.backupBuffer;this.backupBuffer=backup;this.restoreScreen();this.backupBuffer=backup2;}},escapeMarkup:function(t){return t.replace(/%/g,'%%');},enterFieldMode:function(start,end,style){this.cursorOff();if(start===undefined||start<0)start=this.c;if(end===undefined||end<start||end>this.maxCols)end=this.maxCols;if(!style)style=0;this.fieldStart=start;this.fieldEnd=end;this.fieldStyle=style;this.fieldC=0;this.lastLine='';this.fieldMode=true;this.rawMode=this.charMode=false;if(style&1){this._crsrWasBlockMode=this.crsrBlockMode;this._crsrWasBlinkMode=this.crsrBlinkMode;this.crsrBlockMode=false;this.crsrBlinkMode=true;}
+this.drawField();this.lock=false;},exitFieldMode:function(){this.drawField(true);this.fieldMode=false;this.c=this.fieldEnd;if(this.c==this.maxLine)this.newLine();this.lock=true;},drawField:function(isfinal){this.cursorOff();if(isfinal)this.fieldC=0;var fl=this.fieldEnd-this.fieldStart;if(this.fieldC==this.lastLine.length)fl--;var ofs=this.fieldC-fl;if(ofs<0)ofs=0;var line=(ofs)?this.lastLine.substring(ofs):this.lastLine;var sb=this.styleBuf[this.r];var cb=this.charBuf[this.r];var max=line.length;for(var i=this.fieldStart,k=0;i<this.fieldEnd;i++,k++){sb[i]=this.fieldStyle;cb[i]=(k<max)?line.charCodeAt(k):0;}
+this.redraw(this.r);if(isfinal){if(this.fieldStyle&1){this.crsrBlockMode=this._crsrWasBlockMode;this.crsrBlinkMode=this._crsrWasBlinkMode;delete this._crsrWasBlockMode;delete this._crsrWasBlinkMode;}}
+else{this.c=this.fieldStart+this.fieldC-ofs;this.cursorOn();}},focus:function(){this.globals.setFocus(this);},termKey:null,_makeTerm:function(rebuild){window.status='Building terminal ...';var divPrefix=this.termDiv+'_r';if(this.domAPI){this.globals.hasSubDivs=false;var td,row,table,tbody,table2,tbody2,tr,td,node;table=document.createElement('table');table.setAttribute('border',0);table.setAttribute('cellSpacing',0);table.setAttribute('cellPadding',this.conf.frameWidth);tbody=document.createElement('tbody');table.appendChild(tbody);row=document.createElement('tr');tbody.appendChild(row);ptd=document.createElement('td');ptd.style.backgroundColor=this.conf.frameColor;row.appendChild(ptd);table2=document.createElement('table');table2.setAttribute('border',0);table2.setAttribute('cellSpacing',0);table2.setAttribute('cellPadding',2);tbody2=document.createElement('tbody');table2.appendChild(tbody2);tr=document.createElement('tr');tbody2.appendChild(tr);td=document.createElement('td');td.style.backgroundColor=this.conf.bgColor;tr.appendChild(td);ptd.appendChild(table2);ptd=td;table2=document.createElement('table');table2.setAttribute('border',0);table2.setAttribute('cellSpacing',0);table2.setAttribute('cellPadding',0);tbody2=document.createElement('tbody');table2.appendChild(tbody2);var rstr='';for(var c=0;c<this.conf.cols;c++)rstr+='&nbsp;';for(var r=0;r<this.conf.rows;r++){tr=document.createElement('tr');td=document.createElement('td');td.id=divPrefix+r;td.style.height=td.style.minHeight=td.style.maxHeight=this.conf.rowHeight;td.style.whiteSpace='nowrap';td.className=this.conf.fontClass;td.innerHTML=rstr;tr.appendChild(td);tbody2.appendChild(tr);}
+ptd.appendChild(table2);node=document.getElementById(this.termDiv);while(node.hasChildNodes())node.removeChild(node.firstChild);node.appendChild(table);}
+else{this.globals.hasSubDivs=(navigator.userAgent.indexOf('Gecko')<0);var s='';s+='<table border="0" cellspacing="0" cellpadding="'+this.conf.frameWidth+'">\n';s+='<tr><td bgcolor="'+this.conf.frameColor+'"><table border="0" cellspacing="0" cellpadding="2"><tr><td  bgcolor="'+this.conf.bgColor+'"><table border="0" cellspacing="0" cellpadding="0">\n';var rstr='';for(var c=0;c<this.conf.cols;c++)rstr+='&nbsp;';for(var r=0;r<this.conf.rows;r++){var termid=(this.globals.hasSubDivs)?'':' id="'+divPrefix+r+'"';s+='<tr><td nowrap height="'+this.conf.rowHeight+'"'+termid+' class="'+this.conf.fontClass+'">'+rstr+'<\/td><\/tr>\n';}
+s+='<\/table><\/td><\/tr>\n';s+='<\/table><\/td><\/tr>\n';s+='<\/table>\n';var termOffset=2+this.conf.frameWidth;if(this.globals.hasSubDivs){for(var r=0;r<this.conf.rows;r++){s+='<div id="'+divPrefix+r+'" style="position:absolute; top:'+(termOffset+r*this.conf.rowHeight)+'px; left: '+termOffset+'px;" class="'+this.conf.fontClass+'"><\/div>\n';}
+this.globals.termStringStart='<table border="0" cellspacing="0" cellpadding="0"><tr><td nowrap height="'+this.conf.rowHeight+'" class="'+this.conf.fontClass+'">';this.globals.termStringEnd='<\/td><\/tr><\/table>';}
+this.globals.writeElement(this.termDiv,s);}
+if(!rebuild){this.globals.setElementXY(this.termDiv,this.conf.x,this.conf.y);this.globals.setVisible(this.termDiv,1);}
+window.status='';},rebuild:function(){var rl=this.conf.rows;var cl=this.conf.cols;for(var r=0;r<rl;r++){var cbr=this.charBuf[r];if(!cbr){this.charBuf[r]=this.getRowArray(cl,0);this.styleBuf[r]=this.getRowArray(cl,0);}
+else if(cbr.length<cl){for(var c=cbr.length;c<cl;c++){this.charBuf[r][c]=0;this.styleBuf[r][c]=0;}}}
+var resetcrsr=false;if(this.r>=rl){r=rl-1;resetcrsr=true;}
+if(this.c>=cl){c=cl-1;resetcrsr=true;}
+if(resetcrsr&&this.cursoractive)this.cursorOn();this._makeTerm(true);for(var r=0;r<rl;r++){this.redraw(r);}
+this.backupBuffer=null;},moveTo:function(x,y){this.globals.setElementXY(this.termDiv,x,y);},resizeTo:function(x,y){if(this.termDivReady()){x=parseInt(x,10);y=parseInt(y,10);if(isNaN(x)||isNaN(y)||x<4||y<2)return false;this.maxCols=this.conf.cols=x;this.maxLines=this.conf.rows=y;this._makeTerm();this.clear();return true;}
+else{return false;}},redraw:function(r){var s=this.globals.termStringStart;var curStyle=0;var tstls=this.globals.termStyles;var tscls=this.globals.termStyleClose;var tsopn=this.globals.termStyleOpen;var tspcl=this.globals.termSpecials;var tclrs=this.globals.colorCodes;var tnclrs=this.globals.nsColorCodes;var twclrs=this.globals.webColorCodes;var t_cb=this.charBuf;var t_sb=this.styleBuf;var clr;for(var i=0;i<this.conf.cols;i++){var c=t_cb[r][i];var cs=t_sb[r][i];if(cs!=curStyle){if(curStyle){if(curStyle&0xffff00)s+='</span>';for(var k=tstls.length-1;k>=0;k--){var st=tstls[k];if(curStyle&st)s+=tscls[st];}}
+curStyle=cs;for(var k=0;k<tstls.length;k++){var st=tstls[k];if(curStyle&st)s+=tsopn[st];}
+clr='';if(curStyle&0xff00){var cc=(curStyle&0xff00)>>>8;clr=(cc<16)?tclrs[cc]:'#'+tnclrs[cc-16];}
+else if(curStyle&0xff0000){clr='#'+twclrs[(curStyle&0xff0000)>>>16];}
+if(clr){if(curStyle&1){s+='<span style="background-color:'+clr+' !important;">';}
+else{s+='<span style="color:'+clr+' !important;">';}}}
+s+=(tspcl[c])?tspcl[c]:String.fromCharCode(c);}
+if(curStyle>0){if(curStyle&0xffff00)s+='</span>';for(var k=tstls.length-1;k>=0;k--){var st=tstls[k];if(curStyle&st)s+=tscls[st];}}
+s+=this.globals.termStringEnd;this.globals.writeElement(this.termDiv+'_r'+r,s);},guiReady:function(){var ready=true;if(this.globals.guiElementsReady(this.termDiv)){for(var r=0;r<this.conf.rows;r++){if(this.globals.guiElementsReady(this.termDiv+'_r'+r)==false){ready=false;break;}}}
+else{ready=false;}
+return ready;},termDivReady:function(){if(document.getElementById){return(document.getElementById(this.termDiv))?true:false;}
+else if(document.all){return(document.all[this.termDiv])?true:false;}
+else{return false;}},getDimensions:function(){var w=0;var h=0;var d=this.termDiv;if(document.getElementById){var obj=document.getElementById(d);if(obj&&obj.firstChild){w=parseInt(obj.firstChild.offsetWidth,10);h=parseInt(obj.firstChild.offsetHeight,10);}
+else if(obj&&obj.children&&obj.children[0]){w=parseInt(obj.children[0].offsetWidth,10);h=parseInt(obj.children[0].offsetHeight,10);}}
+else if(document.all){var obj=document.all[d];if(obj&&obj.children&&obj.children[0]){w=parseInt(obj.children[0].offsetWidth,10);h=parseInt(obj.children[0].offsetHeight,10);}}
+return{width:w,height:h};},globals:{termToInitialze:null,activeTerm:null,kbdEnabled:false,keylock:false,keyRepeatDelay1:450,keyRepeatDelay2:100,keyRepeatTimer:null,lcMorePrompt1:' -- MORE -- ',lcMorePromtp1Style:1,lcMorePrompt2:' (Type: space to continue, \'q\' to quit)',lcMorePrompt2Style:0,lcMoreKeyAbort:113,lcMoreKeyContinue:32,_initGlobals:function(){var tg=Terminal.prototype.globals;tg._extendMissingStringMethods();tg._initWebColors();tg._initDomKeyRef();Terminal.prototype.termKey=tg.termKey;},getHexChar:function(c){var tg=Terminal.prototype.globals;if(tg.isHexChar(c))return tg.hexToNum[c];return-1;},isHexChar:function(c){return((c>='0'&&c<='9')||(c>='a'&&c<='f')||(c>='A'&&c<='F'))?true:false;},isHexOnlyChar:function(c){return((c>='a'&&c<='f')||(c>='A'&&c<='F'))?true:false;},hexToNum:{'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9,'a':10,'b':11,'c':12,'d':13,'e':14,'f':15,'A':10,'B':11,'C':12,'D':13,'E':14,'F':15},webColors:[],webColorCodes:[''],colors:{black:1,red:2,green:3,yellow:4,blue:5,magenta:6,cyan:7,white:8,grey:9,red2:10,green2:11,yellow2:12,blue2:13,magenta2:14,cyan2:15,red1:2,green1:3,yellow1:4,blue1:5,magenta1:6,cyan1:7,gray:9,darkred:10,darkgreen:11,darkyellow:12,darkblue:13,darkmagenta:14,darkcyan:15,'default':0,clear:0},colorCodes:['','#000000','#ff0000','#00ff00','#ffff00','#0066ff','#ff00ff','#00ffff','#ffffff','#808080','#990000','#009900','#999900','#003399','#990099','#009999'],nsColors:{'aliceblue':1,'antiquewhite':2,'aqua':3,'aquamarine':4,'azure':5,'beige':6,'black':7,'blue':8,'blueviolet':9,'brown':10,'burlywood':11,'cadetblue':12,'chartreuse':13,'chocolate':14,'coral':15,'cornflowerblue':16,'cornsilk':17,'crimson':18,'darkblue':19,'darkcyan':20,'darkgoldenrod':21,'darkgray':22,'darkgreen':23,'darkkhaki':24,'darkmagenta':25,'darkolivegreen':26,'darkorange':27,'darkorchid':28,'darkred':29,'darksalmon':30,'darkseagreen':31,'darkslateblue':32,'darkslategray':33,'darkturquoise':34,'darkviolet':35,'deeppink':36,'deepskyblue':37,'dimgray':38,'dodgerblue':39,'firebrick':40,'floralwhite':41,'forestgreen':42,'fuchsia':43,'gainsboro':44,'ghostwhite':45,'gold':46,'goldenrod':47,'gray':48,'green':49,'greenyellow':50,'honeydew':51,'hotpink':52,'indianred':53,'indigo':54,'ivory':55,'khaki':56,'lavender':57,'lavenderblush':58,'lawngreen':59,'lemonchiffon':60,'lightblue':61,'lightcoral':62,'lightcyan':63,'lightgoldenrodyellow':64,'lightgreen':65,'lightgrey':66,'lightpink':67,'lightsalmon':68,'lightseagreen':69,'lightskyblue':70,'lightslategray':71,'lightsteelblue':72,'lightyellow':73,'lime':74,'limegreen':75,'linen':76,'maroon':77,'mediumaquamarine':78,'mediumblue':79,'mediumorchid':80,'mediumpurple':81,'mediumseagreen':82,'mediumslateblue':83,'mediumspringgreen':84,'mediumturquoise':85,'mediumvioletred':86,'midnightblue':87,'mintcream':88,'mistyrose':89,'moccasin':90,'navajowhite':91,'navy':92,'oldlace':93,'olive':94,'olivedrab':95,'orange':96,'orangered':97,'orchid':98,'palegoldenrod':99,'palegreen':100,'paleturquoise':101,'palevioletred':102,'papayawhip':103,'peachpuff':104,'peru':105,'pink':106,'plum':107,'powderblue':108,'purple':109,'red':110,'rosybrown':111,'royalblue':112,'saddlebrown':113,'salmon':114,'sandybrown':115,'seagreen':116,'seashell':117,'sienna':118,'silver':119,'skyblue':120,'slateblue':121,'slategray':122,'snow':123,'springgreen':124,'steelblue':125,'tan':126,'teal':127,'thistle':128,'tomato':129,'turquoise':130,'violet':131,'wheat':132,'white':133,'whitesmoke':134,'yellow':135,'yellowgreen':136},nsColorCodes:['','f0f8ff','faebd7','00ffff','7fffd4','f0ffff','f5f5dc','000000','0000ff','8a2be2','a52a2a','deb887','5f9ea0','7fff00','d2691e','ff7f50','6495ed','fff8dc','dc143c','00008b','008b8b','b8860b','a9a9a9','006400','bdb76b','8b008b','556b2f','ff8c00','9932cc','8b0000','e9967a','8fbc8f','483d8b','2f4f4f','00ced1','9400d3','ff1493','00bfff','696969','1e90ff','b22222','fffaf0','228b22','ff00ff','dcdcdc','f8f8ff','ffd700','daa520','808080','008000','adff2f','f0fff0','ff69b4','cd5c5c','4b0082','fffff0','f0e68c','e6e6fa','fff0f5','7cfc00','fffacd','add8e6','f08080','e0ffff','fafad2','90ee90','d3d3d3','ffb6c1','ffa07a','20b2aa','87cefa','778899','b0c4de','ffffe0','00ff00','32cd32','faf0e6','800000','66cdaa','0000cd','ba55d3','9370db','3cb371','7b68ee','00fa9a','48d1cc','c71585','191970','f5fffa','ffe4e1','ffe4b5','ffdead','000080','fdf5e6','808000','6b8e23','ffa500','ff4500','da70d6','eee8aa','98fb98','afeeee','db7093','ffefd5','ffdab9','cd853f','ffc0cb','dda0dd','b0e0e6','800080','ff0000','bc8f8f','4169e1','8b4513','fa8072','f4a460','2e8b57','fff5ee','a0522d','c0c0c0','87ceeb','6a5acd','708090','fffafa','00ff7f','4682b4','d2b48c','008080','d8bfd8','ff6347','40e0d0','ee82ee','f5deb3','ffffff','f5f5f5','ffff00','9acd32'],_webSwatchChars:['0','3','6','9','c','f'],_initWebColors:function(){var tg=Terminal.prototype.globals;var ws=tg._webColorSwatch;var wn=tg.webColors;var cc=tg.webColorCodes;var n=1;var a,b,c,al,bl,bs,cl;for(var i=0;i<6;i++){a=tg._webSwatchChars[i];al=a+a;for(var j=0;j<6;j++){b=tg._webSwatchChars[j];bl=al+b+b;bs=a+b;for(var k=0;k<6;k++){c=tg._webSwatchChars[k];cl=bl+c+c;wn[bs+c]=wn[cl]=n;cc[n]=cl;n++;}}}},webifyColor:function(s){var tg=Terminal.prototype.globals;if(s.length==6){var c='';for(var i=0;i<6;i+=2){var a=s.charAt(i);var b=s.charAt(i+1);if(tg.isHexChar(a)&&tg.isHexChar(b)){c+=tg._webSwatchChars[Math.round(parseInt(a+b,16)/255*5)];}
+else{return'';}}
+return c;}
+else if(s.length==3){var c='';for(var i=0;i<3;i++){var a=s.charAt(i);if(tg.isHexChar(a)){c+=tg._webSwatchChars[Math.round(parseInt(a,16)/15*5)];}
+else{return'';}}
+return c;}
+else{return'';}},setColor:function(label,value){var tg=Terminal.prototype.globals;if(typeof label=='number'&&label>=1&&label<=15){tg.colorCodes[label]=value;}
+else if(typeof label=='string'){label=label.toLowerCase();if(label.length==1&&tg.isHexChar(label)){var n=tg.hexToNum[label];if(n)tg.colorCodes[n]=value;}
+else if(typeof tg.colors[label]!='undefined'){var n=tg.colors[label];if(n)tg.colorCodes[n]=value;}}},getColorString:function(label){var tg=Terminal.prototype.globals;if(typeof label=='number'&&label>=0&&label<=15){return tg.colorCodes[label];}
+else if(typeof label=='string'){label=label.toLowerCase();if(label.length==1&&tg.isHexChar(label)){return tg.colorCodes[tg.hexToNum[label]];}
+else if(typeof tg.colors[label]!='undefined'){return tg.colorCodes[tg.colors[label]];}}
+return'';},getColorCode:function(label){var tg=Terminal.prototype.globals;if(typeof label=='number'&&label>=0&&label<=15){return label;}
+else if(typeof label=='string'){label=label.toLowerCase();if(label.length==1&&tg.isHexChar(label)){return parseInt(label,16);}
+else if(typeof tg.colors[label]!='undefined'){return tg.colors[label];}}
+return 0;},insertText:function(text){var tg=Terminal.prototype.globals;var termRef=tg.activeTerm;if(!termRef||termRef.closed||tg.keylock||termRef.lock||termRef.charMode||termRef.fieldMode)return false;for(var i=0;i<text.length;i++){tg.keyHandler({which:text.charCodeAt(i),_remapped:true});}
+return true;},importEachLine:function(text){var tg=Terminal.prototype.globals;var termRef=tg.activeTerm;if(!termRef||termRef.closed||tg.keylock||termRef.lock||termRef.charMode||termRef.fieldMode)return false;termRef.cursorOff();termRef._clearLine();text=text.replace(/\r\n?/g,'\n');var t=text.split('\n');for(var i=0;i<t.length;i++){for(var k=0;k<t[i].length;k++){tg.keyHandler({which:t[i].charCodeAt(k),_remapped:true});}
+tg.keyHandler({which:term.termKey.CR,_remapped:true});}
+return true;},importMultiLine:function(text){var tg=Terminal.prototype.globals;var termRef=tg.activeTerm;if(!termRef||termRef.closed||tg.keylock||termRef.lock||termRef.charMode||termRef.fieldMode)return false;termRef.lock=true;termRef.cursorOff();termRef._clearLine();text=text.replace(/\r\n?/g,'\n');var lines=text.split('\n');for(var i=0;i<lines.length;i++){termRef.type(lines[i]);if(i<lines.length-1)termRef.newLine();}
+termRef.lineBuffer=text;termRef.lastLine='';termRef.inputChar=0;termRef.handler();return true;},normalize:function(n,m){var s=''+n;while(s.length<m)s='0'+s;return s;},fillLeft:function(t,n){if(typeof t!='string')t=''+t;while(t.length<n)t=' '+t;return t;},center:function(t,l){var s='';for(var i=t.length;i<l;i+=2)s+=' ';return s+t;},stringReplace:function(s1,s2,t){var l1=s1.length;var l2=s2.length;var ofs=t.indexOf(s1);while(ofs>=0){t=t.substring(0,ofs)+s2+t.substring(ofs+l1);ofs=t.indexOf(s1,ofs+l2);}
+return t;},wrapChars:{9:1,10:1,12:4,13:1,32:1,40:3,45:2,61:2,91:3,94:3,123:3},setFocus:function(termref){Terminal.prototype.globals.activeTerm=termref;Terminal.prototype.globals.clearRepeatTimer();},termKey:{'NUL':0x00,'SOH':0x01,'STX':0x02,'ETX':0x03,'EOT':0x04,'ENQ':0x05,'ACK':0x06,'BEL':0x07,'BS':0x08,'BACKSPACE':0x08,'HT':0x09,'TAB':0x09,'LF':0x0A,'VT':0x0B,'FF':0x0C,'CR':0x0D,'SO':0x0E,'SI':0x0F,'DLE':0x10,'DC1':0x11,'DC2':0x12,'DC3':0x13,'DC4':0x14,'NAK':0x15,'SYN':0x16,'ETB':0x17,'CAN':0x18,'EM':0x19,'SUB':0x1A,'ESC':0x1B,'IS4':0x1C,'IS3':0x1D,'IS2':0x1E,'IS1':0x1F,'DEL':0x7F,'EURO':0x20AC,'LEFT':0x1C,'RIGHT':0x1D,'UP':0x1E,'DOWN':0x1F},termDomKeyRef:{},_domKeyMappingData:{'LEFT':'LEFT','RIGHT':'RIGHT','UP':'UP','DOWN':'DOWN','BACK_SPACE':'BS','RETURN':'CR','ENTER':'CR','ESCAPE':'ESC','DELETE':'DEL','TAB':'TAB'},_initDomKeyRef:function(){var tg=Terminal.prototype.globals;var m=tg._domKeyMappingData;var r=tg.termDomKeyRef;var k=tg.termKey;for(var i in m)r['DOM_VK_'+i]=k[m[i]];},registerEvent:function(obj,eventType,handler,capture){if(obj.addEventListener){obj.addEventListener(eventType.toLowerCase(),handler,capture);}
+else{var et=eventType.toUpperCase();if(window.Event&&window.Event[et]&&obj.captureEvents)obj.captureEvents(Event[et]);obj['on'+eventType.toLowerCase()]=handler;}},releaseEvent:function(obj,eventType,handler,capture){if(obj.removeEventListener){obj.removeEventListener(eventType.toLowerCase(),handler,capture);}
+else{var et=eventType.toUpperCase();if(window.Event&&window.Event[et]&&obj.releaseEvents)obj.releaseEvents(Event[et]);et='on'+eventType.toLowerCase();if(obj[et]&&obj[et]==handler)obj.et=null;}},enableKeyboard:function(term){var tg=Terminal.prototype.globals;if(!tg.kbdEnabled){tg.registerEvent(document,'keypress',tg.keyHandler,true);tg.registerEvent(document,'keydown',tg.keyFix,true);tg.registerEvent(document,'keyup',tg.clearRepeatTimer,true);tg.kbdEnabled=true;}
+tg.activeTerm=term;},disableKeyboard:function(term){var tg=Terminal.prototype.globals;if(tg.kbdEnabled){tg.releaseEvent(document,'keypress',tg.keyHandler,true);tg.releaseEvent(document,'keydown',tg.keyFix,true);tg.releaseEvent(document,'keyup',tg.clearRepeatTimer,true);tg.kbdEnabled=false;}
+tg.activeTerm=null;},keyFix:function(e){var tg=Terminal.prototype.globals;var term=tg.activeTerm;var ch;if(tg.keylock||term.lock)return true;if(window.event){if(!e)e=window.event;ch=e.keyCode;if(e.DOM_VK_UP){for(var i in tg.termDomKeyRef){if(e[i]&&ch==e[i]){tg.keyHandler({which:tg.termDomKeyRef[i],_remapped:true,_repeat:(ch==0x1B)?true:false});if(e.preventDefault)e.preventDefault();if(e.stopPropagation)e.stopPropagation();e.cancelBubble=true;return false;}}
+e.cancelBubble=false;return true;}
+else{var termKey=term.termKey;var keyHandler=tg.keyHandler;if(ch==8&&!term.isOpera){keyHandler({which:termKey.BS,_remapped:true,_repeat:true});}
+else if(ch==9){keyHandler({which:termKey.TAB,_remapped:true,_repeat:(term.printTab)?false:true});}
+else if(ch==27){keyHandler({which:termKey.ESC,_remapped:true,_repeat:(term.printTab)?false:true});}
+else if(ch==37){keyHandler({which:termKey.LEFT,_remapped:true,_repeat:true});}
+else if(ch==39){keyHandler({which:termKey.RIGHT,_remapped:true,_repeat:true});}
+else if(ch==38){keyHandler({which:termKey.UP,_remapped:true,_repeat:true});}
+else if(ch==40){keyHandler({which:termKey.DOWN,_remapped:true,_repeat:true});}
+else if(ch==127||ch==46){keyHandler({which:termKey.DEL,_remapped:true,_repeat:true});}
+else if(ch>=57373&&ch<=57376){if(ch==57373){keyHandler({which:termKey.UP,_remapped:true,_repeat:true});}
+else if(ch==57374){keyHandler({which:termKey.DOWN,_remapped:true,_repeat:true});}
+else if(ch==57375){keyHandler({which:termKey.LEFT,_remapped:true,_repeat:true});}
+else if(ch==57376){keyHandler({which:termKey.RIGHT,_remapped:true,_repeat:true});}}
+else{e.cancelBubble=false;return true;}
+if(e.preventDefault)e.preventDefault();if(e.stopPropagation)e.stopPropagation();e.cancelBubble=true;return false;}}},clearRepeatTimer:function(e){var tg=Terminal.prototype.globals;if(tg.keyRepeatTimer){clearTimeout(tg.keyRepeatTimer);tg.keyRepeatTimer=null;}},doKeyRepeat:function(ch){Terminal.prototype.globals.keyHandler({which:ch,_remapped:true,_repeated:true})},keyHandler:function(e){var tg=Terminal.prototype.globals;var term=tg.activeTerm;if(tg.keylock||term.lock||term.isMac&&e&&e.metaKey)return true;if(window.event){if(window.event.preventDefault)window.event.preventDefault();if(window.event.stopPropagation)window.event.stopPropagation();}
+else if(e){if(e.preventDefault)e.preventDefault();if(e.stopPropagation)e.stopPropagation();}
+var ch;var ctrl=false;var shft=false;var remapped=false;var termKey=term.termKey;var keyRepeat=0;if(e){ch=e.which;ctrl=((e.ctrlKey&&e.altKey)||e.modifiers==2);shft=(e.shiftKey||e.modifiers==4);if(e._remapped){remapped=true;if(window.event){ctrl=(ctrl||(window.event.ctrlKey&&!window.event.altKey));shft=(shft||window.event.shiftKey);}}
+if(e._repeated){keyRepeat=2;}
+else if(e._repeat){keyRepeat=1;}}
+else if(window.event){ch=window.event.keyCode;ctrl=(window.event.ctrlKey&&!window.event.altKey);shft=(window.event.shiftKey);if(window.event._repeated){keyRepeat=2;}
+else if(window.event._repeat){keyRepeat=1;}}
+else{return true;}
+if(ch==''&&remapped==false){if(e==null)e=window.event;if(e.charCode==0&&e.keyCode){if(e.DOM_VK_UP){var dkr=tg.termDomKeyRef;for(var i in dkr){if(e[i]&&e.keyCode==e[i]){ch=dkr[i];break;}}}
+else{if(e.keyCode==28){ch=termKey.LEFT;}
+else if(e.keyCode==29){ch=termKey.RIGHT;}
+else if(e.keyCode==30){ch=termKey.UP;}
+else if(e.keyCode==31){ch=termKey.DOWN;}
+else if(e.keyCode==37){ch=termKey.LEFT;}
+else if(e.keyCode==39){ch=termKey.RIGHT;}
+else if(e.keyCode==38){ch=termKey.UP;}
+else if(e.keyCode==40){ch=termKey.DOWN;}
+else if(e.keyCode==9){ch=termKey.TAB;}}}}
+if((ch>=0xE000)&&(ch<=0xF8FF))return;if(keyRepeat){tg.clearRepeatTimer();tg.keyRepeatTimer=window.setTimeout('Terminal.prototype.globals.doKeyRepeat('+ch+')',(keyRepeat==1)?tg.keyRepeatDelay1:tg.keyRepeatDelay2);}
+if(term.charMode){term.insert=false;term.inputChar=ch;term.lineBuffer='';term.handler();if(ch<=32&&window.event)window.event.cancelBubble=true;return false;}
+if(!ctrl){if(ch==termKey.CR){term.lock=true;term.cursorOff();term.insert=false;if(term.rawMode){term.lineBuffer=term.lastLine;}
+else if(term.fieldMode){term.lineBuffer=term.lastLine;term.exitFieldMode();}
+else{term.lineBuffer=term._getLine();if(term.lineBuffer!=''&&(!term.historyUnique||term.history.length==0||term.lineBuffer!=term.history[term.history.length-1])){term.history[term.history.length]=term.lineBuffer;}
+term.histPtr=term.history.length;}
+term.lastLine='';term.inputChar=0;term.handler();if(window.event)window.event.cancelBubble=true;return false;}
+else if(term.fieldMode){if(ch==termKey.ESC){term.lineBuffer=term.lastLine='';term.exitFieldMode();term.lastLine='';term.inputChar=0;term.handler();if(window.event)window.event.cancelBubble=true;return false;}
+else if(ch==termKey.LEFT){if(term.fieldC>0)term.fieldC--;}
+else if(ch==termKey.RIGHT){if(term.fieldC<term.lastLine.length)term.fieldC++;}
+else if(ch==termKey.BS){if(term.fieldC>0){term.lastLine=term.lastLine.substring(0,term.fieldC-1)+term.lastLine.substring(term.fieldC);term.fieldC--;}}
+else if(ch==termKey.DEL){if(term.fieldC<term.lastLine.length){term.lastLine=term.lastLine.substring(0,term.fieldC)+term.lastLine.substring(term.fieldC+1);}}
+else if(ch>=32){term.lastLine=term.lastLine.substring(0,term.fieldC)+String.fromCharCode(ch)+term.lastLine.substring(term.fieldC);term.fieldC++;}
+term.drawField();return false;}
+else if(ch==termKey.ESC&&term.conf.closeOnESC){term.close();if(window.event)window.event.cancelBubble=true;return false;}
+if(ch<32&&term.rawMode){if(window.event)window.event.cancelBubble=true;return false;}
+else{if(ch==termKey.LEFT){term.cursorLeft();if(window.event)window.event.cancelBubble=true;return false;}
+else if(ch==termKey.RIGHT){term.cursorRight();if(window.event)window.event.cancelBubble=true;return false;}
+else if(ch==termKey.UP){term.cursorOff();if(term.histPtr==term.history.length)term.lastLine=term._getLine();term._clearLine();if(term.history.length&&term.histPtr>=0){if(term.histPtr>0)term.histPtr--;term.type(term.history[term.histPtr]);}
+else if(term.lastLine){term.type(term.lastLine);}
+term.cursorOn();if(window.event)window.event.cancelBubble=true;return false;}
+else if(ch==termKey.DOWN){term.cursorOff();if(term.histPtr==term.history.length)term.lastLine=term._getLine();term._clearLine();if(term.history.length&&term.histPtr<=term.history.length){if(term.histPtr<term.history.length)term.histPtr++;if(term.histPtr<term.history.length){term.type(term.history[term.histPtr]);}
+else if(term.lastLine){term.type(term.lastLine);}}
+else if(term.lastLine){term.type(term.lastLine);}
+term.cursorOn();if(window.event)window.event.cancelBubble=true;return false;}
+else if(ch==termKey.BS){term.backspace();if(window.event)window.event.cancelBubble=true;return false;}
+else if(ch==termKey.DEL){if(term.DELisBS){term.backspace();}
+else{term.fwdDelete();}
+if(window.event)window.event.cancelBubble=true;return false;}}}
+if(term.rawMode){if(term.isPrintable(ch)){term.lastLine+=String.fromCharCode(ch);}
+if(ch==32&&window.event){window.event.cancelBubble=true;}
+else if(window.opera&&window.event){window.event.cancelBubble=true;}
+return false;}
+else{if(term.conf.catchCtrlH&&(ch==termKey.BS||(ctrl&&ch==72))){term.backspace();if(window.event)window.event.cancelBubble=true;return false;}
+else if(term.ctrlHandler&&(ch<32||(ctrl&&term.isPrintable(ch,true)))){if((ch>=65&&ch<=96)||ch==63){if(ch==63){ch=31;}
+else{ch-=64;}}
+term.inputChar=ch;term.ctrlHandler();if(window.event)window.event.cancelBubble=true;return false;}
+else if(ctrl||!term.isPrintable(ch,true)){if(window.event)window.event.cancelBubble=true;return false;}
+else if(term.isPrintable(ch,true)){if(term.blinkTimer)clearTimeout(term.blinkTimer);if(term.insert){term.cursorOff();term._scrollRight(term.r,term.c);}
+term._charOut(ch);term.cursorOn();if(ch==32&&window.event){window.event.cancelBubble=true;}
+else if(window.opera&&window.event){window.event.cancelBubble=true;}
+return false;}}
+return true;},hasSubDivs:false,termStringStart:'',termStringEnd:'',termSpecials:{0:'&nbsp;',1:'&nbsp;',9:'&nbsp;',32:'&nbsp;',34:'&quot;',38:'&amp;',60:'&lt;',62:'&gt;',127:'&loz;',0x20AC:'&euro;'},termStyles:[1,2,4,8,16],termStyleMarkup:{'r':1,'u':2,'i':4,'s':8,'b':16},termStyleOpen:{1:'<span class="termReverse">',2:'<u>',4:'<i>',8:'<strike>',16:'<i>'},termStyleClose:{1:'<\/span>',2:'<\/u>',4:'<\/i>',8:'<\/strike>',16:'</i>'},assignStyle:function(styleCode,markup,htmlOpen,htmlClose){var tg=Terminal.prototype.globals;if(!styleCode||isNaN(styleCode)){if(styleCode>=256){alert('termlib.js:\nCould not assign style.\n'+s+' is not a valid power of 2 between 0 and 256.');return;}}
+var s=styleCode&0xff;var matched=false;for(var i=0;i<8;i++){if((s>>>i)&1){if(matched){alert('termlib.js:\nCould not assign style code.\n'+s+' is not a power of 2!');return;}
+matched=true;}}
+if(!matched){alert('termlib.js:\nCould not assign style code.\n'+s+' is not a valid power of 2 between 0 and 256.');return;}
+markup=String(markup).toLowerCase();if(markup=='c'||markup=='p'){alert('termlib.js:\nCould not assign mark up.\n"'+markup+'" is a reserved code.');return;}
+if(markup.length>1){alert('termlib.js:\nCould not assign mark up.\n"'+markup+'" is not a single letter code.');return;}
+var exists=false;for(var i=0;i<tg.termStyles.length;i++){if(tg.termStyles[i]==s){exists=true;break;}}
+if(exists){var m=tg.termStyleMarkup[markup];if(m&&m!=s){alert('termlib.js:\nCould not assign mark up.\n"'+markup+'" is already in use.');return;}}
+else{if(tg.termStyleMarkup[markup]){alert('termlib.js:\nCould not assign mark up.\n"'+markup+'" is already in use.');return;}
+tg.termStyles[tg.termStyles.length]=s;}
+tg.termStyleMarkup[markup]=s;tg.termStyleOpen[s]=htmlOpen;tg.termStyleClose[s]=htmlClose;},ANSI_regexp:/(\x1b\[|x9b)([0-9;]+?)([a-zA-Z])/g,ANIS_SGR_codes:{'0':'%+p','1':'%+b','3':'%+i','4':'%+u','7':'%+r','9':'%+s','21':'%+u','22':'%-b','23':'%-i','24':'%-u','27':'%-r','29':'%-s','30':'%c(0)','31':'%c(a)','32':'%c(b)','33':'%c(c)','34':'%c(d)','35':'%c(e)','36':'%c(f)','37':'%c(#999)','39':'%c(0)','90':'%c(9)','91':'%c(2)','92':'%c(3)','93':'%c(4)','94':'%c(5)','95':'%c(6)','96':'%c(7)','97':'%c(8)','99':'%c(0)','trueBlack':'%c(1)'},ANSI_map:function(t,trueBlack){var tg=Terminal.prototype.globals;tg.ANSI_regexp.lastIndex=0;return t.replace(tg.ANSI_regexp,function(str,p1,p2,p3,offset,s){return tg.ANSI_replace(p2,p3,trueBlack);});},ANSI_replace:function(p,cmd,trueBlack){var tg=Terminal.prototype.globals;if(cmd=='m'){if(p==''){return tg.ANIS_SGR_codes[0];}
+else if(trueBlack&&p=='30'){return tg.ANIS_SGR_codes.trueBlack;}
+else if(tg.ANIS_SGR_codes[p]){return tg.ANIS_SGR_codes[p];}}
+return'';},writeElement:function(e,t){if(document.getElementById){var obj=document.getElementById(e);obj.innerHTML=t;}
+else if(document.all){document.all[e].innerHTML=t;}},setElementXY:function(d,x,y){if(document.getElementById){var obj=document.getElementById(d);obj.style.left=x+'px';obj.style.top=y+'px';}
+else if(document.all){document.all[d].style.left=x+'px';document.all[d].style.top=y+'px';}},setVisible:function(d,v){if(document.getElementById){var obj=document.getElementById(d);obj.style.visibility=(v)?'visible':'hidden';}
+else if(document.all){document.all[d].style.visibility=(v)?'visible':'hidden';}},setDisplay:function(d,v){if(document.getElementById){var obj=document.getElementById(d);obj.style.display=v;}
+else if(document.all){document.all[d].style.display=v;}},guiElementsReady:function(e){if(document.getElementById){return(document.getElementById(e))?true:false;}
+else if(document.all){return(document.all[e])?true:false;}
+else{return false;}},_termString_makeKeyref:function(){var tg=Terminal.prototype.globals;var termString_keyref=tg.termString_keyref=new Array();var termString_keycoderef=tg.termString_keycoderef=new Array();var hex=new Array('A','B','C','D','E','F');for(var i=0;i<=15;i++){var high=(i<10)?i:hex[i-10];for(var k=0;k<=15;k++){var low=(k<10)?k:hex[k-10];var cc=i*16+k;if(cc>=32){var cs=unescape("%"+high+low);termString_keyref[cc]=cs;termString_keycoderef[cs]=cc;}}}},_extendMissingStringMethods:function(){if(!String.fromCharCode||!String.prototype.charCodeAt){Terminal.prototype.globals._termString_makeKeyref();}
+if(!String.fromCharCode){String.fromCharCode=function(cc){return(cc!=null)?Terminal.prototype.globals.termString_keyref[cc]:'';};}
+if(!String.prototype.charCodeAt){String.prototype.charCodeAt=function(n){cs=this.charAt(n);return(Terminal.prototype.globals.termString_keycoderef[cs])?Terminal.prototype.globals.termString_keycoderef[cs]:0;};}}}}
+Terminal.prototype.globals._initGlobals();var TerminalDefaults=Terminal.prototype.Defaults;var termDefaultHandler=Terminal.prototype.defaultHandler;var TermGlobals=Terminal.prototype.globals;var termKey=Terminal.prototype.globals.termKey;var termDomKeyRef=Terminal.prototype.globals.termDomKeyRef;Terminal.prototype._HttpSocket=function(){var req=null;if(window.XMLHttpRequest){try{req=new XMLHttpRequest();}
+catch(e){}}
+else if(window.ActiveXObject){var prtcls=this._msXMLHttpObjects;for(var i=0;i<prtcls.length;i++){try{req=new ActiveXObject(prtcls[i]);if(req){if(prtcls.length>1)this.prototype._msXMLHttpObjects=[prtcls[i]];break;}}
+catch(e){}}}
+this.request=req;this.url;this.data=null;this.query='';this.timeoutTimer=null;this.localMode=Boolean(window.location.href.search(/^file:/i)==0);this.error=0;}
+Terminal.prototype._HttpSocket.prototype={version:'1.02',useXMLEncoding:false,defaulTimeout:10000,defaultMethod:'GET',forceNewline:true,errno:{OK:0,NOTIMPLEMENTED:1,FATALERROR:2,TIMEOUT:3,NETWORKERROR:4,LOCALFILEERROR:5},errstring:['','XMLHttpRequest not implemented.','Could not open XMLHttpRequest.','The connection timed out.','Network error.','The requested local document was not found.'],_msXMLHttpObjects:['Msxml2.XMLHTTP','Microsoft.XMLHTTP','Msxml2.XMLHTTP.5.0','Msxml2.XMLHTTP.4.0','Msxml2.XMLHTTP.3.0'],serializeData:function(){this.query=this.serialize(this.data);},serialize:function(data){var v='';if(data!=null){switch(typeof data){case'object':var d=[];if(data instanceof Array){for(var i=0;i<data.length;i++){d.push(this.serialize(data[i]));}
+v=d.join(',');break;}
+for(var i in data){switch(typeof data[i]){case'object':d.push(encodeURIComponent(i)+'='+this.serialize(data[i]));break;default:d.push(encodeURIComponent(i)+'='+encodeURIComponent(data[i]));break;}}
+v=(this.useXMLEncoding)?d.join(';'):d.join('&');break;case'number':v=String(data);break;case'string':v=encodeURIComponent(data);break;case'boolean':v=(data)?'1':'0';break;}}
+return v;},toCamelCase:function(s){if(typeof s!='string')s=String(s);var a=s.toLowerCase().split('-');var cc=a[0];for(var i=1;i<a.length;i++){p=a[i];if(p.length)cc+=p.charAt(0).toUpperCase()+p.substring(1);}
+return cc;},callbackHandler:function(){if(this.termRef.closed)return;var r=this.request;if(this.error==0&&r.readyState!=4)return;if(this.timeoutTimer){clearTimeout(this.timeoutTimer);this.timeoutTimer=null;}
+var success=false;var failed=true;var response={headers:{},ErrorCodes:this.errno};if(this.localMode){if(this.error&&this.error<this.errno.NETWORKERROR){response.status=0;response.statusText='Connection Error';response.responseText='';response.responseXML=null;}
+else if(this.error||r.responseText==null){failed=false;response.status=404;response.statusText='Not Found';response.responseText='The document '+this.url+' was not found on this file system.';response.responseXML=null;this.error=this.errno.LOCALFILEERROR;}
+else{success=true;failed=false;response.status=200;response.statusText='OK';response.responseText=r.responseText;response.responseXML=r.responseXML;}}
+else{try{if(!this.error){if(typeof r=='object'&&r.status!=undefined){failed=false;if(r.status>=200&&r.status<300){success=true;}
+else if(r.status>=12000){failed=true;this.error=this.errno.NETWORKERROR;}}}}
+catch(e){}
+if(!failed){response.status=r.status;response.statusText=(r.status==404)?'Not Found':r.statusText;response.responseText=r.responseText;response.responseXML=r.responseXML;if(this.getHeaders){if(this.getHeaders instanceof Array){for(var i=0;i<this.getHeaders.length;i++){var h=this.getHeaders[i];try{response.headers[this.toCamelCase(h)]=r.getResponseHeader(h);}
+catch(e){}}}
+else{for(var h in this.getHeaders){try{response.headers[this.toCamelCase(h)]=r.getResponseHeader(h);}
+catch(e){}}}}}
+else{response.status=0;response.statusText='Connection Error';response.responseText='';response.responseXML=null;}}
+if(this.forceNewline)response.responseText=response.responseText.replace(/\r\n?/g,'\n');response.url=this.url;response.data=this.data;response.query=this.query;response.method=this.method;response.success=success;response.errno=this.error;response.errstring=this.errstring[this.error];var term=this.termRef;term.socket=response;if(this.callback){if(typeof this.callback=='function'){this.callback.apply(term);}
+else if(window[this.callback]&&typeof window[this.callback]=='function'){window[this.callback].apply(term);}
+else{term._defaultServerCallback();}}
+else{term._defaultServerCallback();}
+delete term.socket;this.request=null;this.callback=null;},timeoutHandler:function(){this.error=this.errno.TIMEOUT;try{this.request.abort();}
+catch(e){}
+if(!this.localMode)this.callbackHandler();}}
+Terminal.prototype.send=function(opts){var soc=new this._HttpSocket();if(opts){if(typeof opts.method=='string'){switch(opts.method.toLowerCase()){case'post':soc.method='POST';break;case'get':soc.method='GET';break;default:soc.method=soc.defaultMethod.toUpperCase();}}
+else{soc.method=soc.defaultMethod;}
+if(opts.postbody!=undefined){soc.method='POST';soc.query=opts.postbody;soc.data=opts.data;}
+else if(opts.data!=undefined){soc.data=opts.data;soc.serializeData();}
+if(opts.url)soc.url=opts.url;if(opts.getHeaders&&typeof opts.getHeaders=='object'){soc.getHeaders=opts.getHeaders;}}
+else{opts={}
+soc.method=soc.defaultMethod;}
+var uri=soc.url;if(soc.method=='GET'){if(soc.query){uri+=(uri.indexOf('?')<0)?'?'+soc.query:(soc.useXMLEncoding)?';'+soc.query:'&'+soc.query;}
+if(!soc.localMode){var uniqueparam='_termlib_reqid='+new Date().getTime()+'_'+Math.floor(Math.random()*100000);uri+=(uri.indexOf('?')<0)?'?'+uniqueparam:(soc.useXMLEncoding)?';'+uniqueparam:'&'+uniqueparam;}}
+soc.callback=opts.callback;soc.termRef=this;if(!soc.request){soc.error=soc.errno.NOTIMPLEMENTED;soc.callbackHandler();return;}
+else{try{if(opts.userid!=undefined){if(opts.password!=undefined){soc.request.open(soc.method,uri,true,opts.userid,opts.password);}
+else{soc.request.open(soc.method,uri,true,opts.userid);}}
+else{soc.request.open(soc.method,uri,true);}}
+catch(e){soc.error=soc.errno.FATALERROR;soc.callbackHandler();return;}
+var body=null;if(soc.method=='POST'){try{soc.request.setRequestHeader('Content-Type','application/x-www-form-urlencoded');}
+catch(e){}
+body=soc.query;}
+if(opts.headers&&typeof opts.headers=='objects'){for(var i in opts.headers){try{soc.request.setRequestHeader(i,opts.headers[i]);}
+catch(e){}}}
+if(opts.mimetype&&soc.request.overrideMimeType){try{soc.request.overrideMimeType(opts.mimetype);soc.request.setRequestHeader('Connection','close');}
+catch(e){}}
+var timeoutDelay=(opts.timeout&&typeof opts.timeout=='number')?opts.tiomeout:soc.defaulTimeout;soc.request.onreadystatechange=function(){soc.callbackHandler();};try{soc.request.send(body);}
+catch(e){if(soc.localMode){soc.request.onreadystatechange=null;soc.request.abort();soc.error=soc.errno.LOCALFILEERROR;}
+else{soc.request.onreadystatechange=null;try{soc.request.abort();}
+catch(e2){}
+soc.error=soc.errno.NETWORKERROR;}
+soc.callbackHandler();return true;}
+soc.timeoutTimer=setTimeout(function(){soc.timeoutHandler()},timeoutDelay);}}
+Terminal.prototype._defaultServerCallback=function(){if(this.socket.success){this.write('Server Response:%n'+this.socket.responseText,true);}
+else{var s='Request failed: '+this.socket.status+' '+this.socket.statusText;if(this.socket.errno)s+='%n'+this.socket.errstring;this.write(s);this.prompt();}}
+// eof
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/compacted/termlib_parser_min.js b/com.ogamita.www/nasium-lse/terminal/termlib/compacted/termlib_parser_min.js
new file mode 100644
index 0000000..93697b3
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/compacted/termlib_parser_min.js
@@ -0,0 +1,33 @@
+/*
+  termlib_parser.js  v.1.1 (source compacted using jsmin.php)
+  command line parser for termlib.js
+  (c) Norbert Landsteiner 2005-2010
+  mass:werk - media environments
+  <http://www.masswerk.at>
+
+  you are free to use this parser under the "termlib.js" license:
+  http://www.masswerk.at/termlib/
+*/
+function Parser(){this.whiteSpace={' ':true,'\t':true};this.quoteChars={'"':true,"'":true,'`':true};this.singleEscapes={'\\':true};this.optionChars={'-':true};this.escapeExpressions={'%':Parser.prototype.plugins.hexExpression};}
+Parser.prototype={version:'1.1',plugins:{hexExpression:function(termref,charindex,escapechar,quotelevel){if(termref.lineBuffer.length>charindex+2){var hi=termref.lineBuffer.charAt(charindex+1);var lo=termref.lineBuffer.charAt(charindex+2);lo=lo.toUpperCase();hi=hi.toUpperCase();if((((hi>='0')&&(hi<='9'))||((hi>='A')&&((hi<='F'))))&&(((lo>='0')&&(lo<='9'))||((lo>='A')&&((lo<='F'))))){Parser.prototype.plugins._escExprStrip(termref,charindex+1,charindex+3);return String.fromCharCode(parseInt(hi+lo,16));}}
+return escapechar;},_escExprStrip:function(termref,from,to){termref.lineBuffer=termref.lineBuffer.substring(0,from)+
+termref.lineBuffer.substring(to);}},getopt:function(termref,optsstring){var opts={'illegals':[]};while((termref.argc<termref.argv.length)&&(termref.argQL[termref.argc]=='')){var a=termref.argv[termref.argc];if((a.length>0)&&(this.optionChars[a.charAt(0)])){var i=1;while(i<a.length){var c=a.charAt(i);var v='';while(i<a.length-1){var nc=a.charAt(i+1);if((nc=='.')||((nc>='0')&&(nc<='9'))){v+=nc;i++;}
+else{break;}}
+if(optsstring.indexOf(c)>=0){opts[c]=(v=='')?{value:-1}:(isNaN(v))?{value:0}:{value:parseFloat(v)};}
+else{opts.illegals[opts.illegals.length]=c;}
+i++;}
+termref.argc++;}
+else{break;}}
+return opts;},parseLine:function(termref){var argv=[''];var argQL=[''];var argc=0;var escape=false;for(var i=0;i<termref.lineBuffer.length;i++){var ch=termref.lineBuffer.charAt(i);if(escape){argv[argc]+=ch;escape=false;}
+else if(this.escapeExpressions[ch]){var v=this.escapeExpressions[ch](termref,i,ch,argQL[argc]);if(typeof v!='undefined')argv[argc]+=v;}
+else if(this.quoteChars[ch]){if(argQL[argc]){if(argQL[argc]==ch){argc++;argv[argc]=argQL[argc]='';}
+else{argv[argc]+=ch;}}
+else{if(argv[argc]!=''){argc++;argv[argc]='';argQL[argc]=ch;}
+else{argQL[argc]=ch;}}}
+else if(this.whiteSpace[ch]){if(argQL[argc]){argv[argc]+=ch;}
+else if(argv[argc]!=''){argc++;argv[argc]=argQL[argc]='';}}
+else if(this.singleEscapes[ch]){escape=true;}
+else{argv[argc]+=ch;}}
+if((argv[argc]=='')&&(!argQL[argc])){argv.length--;argQL.length--;}
+termref.argv=argv;termref.argQL=argQL;termref.argc=0;}}
+// eof
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/faq.html b/com.ogamita.www/nasium-lse/terminal/termlib/faq.html
new file mode 100644
index 0000000..4a4b2e3
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/faq.html
@@ -0,0 +1,462 @@
+<html>
+<head>
+	<title>mass:werk termlib faq</title>
+
+<style type="text/css">
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh13 {
+	line-height: 13px;
+}
+.lh15 {
+	line-height: 15px;
+}
+pre {
+	font-family: courier,fixed,swiss,sans-serif;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+.prop {
+	font-family: courier,fixed,swiss,sans-serif;
+	color: #bbee99;
+	font-size: 12px;
+	line-height: 15px;
+}
+h1 {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 16px;
+	color: #cccccc;
+}
+b.quest {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 14px;
+	font-weight: bold;
+	color: #bbee99;
+}
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #dddddd;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 12px;
+		color: #000000;
+	}
+	.lh13 {
+		line-height: 13px;
+	}
+	.lh15 {
+		line-height: 15px;
+	}
+	pre,.prop {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 12px;
+		color: #000000;
+		line-height: 15px;
+	}
+	h1 {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 16px;
+		color: #000000;
+	}
+	b.quest {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 14px;
+		font-weight: bold;
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		text-decoration: none;
+		color: #000000;
+	}
+	a:hover {
+		text-decoration: underline;
+		color: #000000;
+	}
+	a:active {
+		text-decoration: underline;
+		color: #000000;
+	}
+}
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#dddddd" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"><a name="top"></a>
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap>faq</td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0" width="700" align="center">
+	<tr><td>
+		<h1>frequently asked questions</h1>
+	</td></tr>
+	<tr><td class="lh13">
+&nbsp;<br>
+	<ul>
+	<li class="lh15"><a href="#chrome">Can I add chrome to the terminal? (e.g. a window header, a close box)</a></li>
+	<li class="lh15"><a href="#embed">How can I embed a terminal relative to my HTML layout?</a></li>
+	<li class="lh15"><a href="#syntax">I pasted your sample code and just got an error. - ???</a></li>
+	<li class="lh15"><a href="#keyboard">I can't get any input, but I don't get any erros too.</a></li>
+	<li class="lh15"><a href="#keylock">How can I temporary disable the keyboard handlers?</a></li>
+	<li class="lh15"><a href="#linesranges">How can I set the cusor to the start / the end of the command line?</a></li>
+	<li class="lh15"><a href="#historyunique">How can I limit the command history to unique entries only?</a></li>
+	<li class="lh15"><a href="#rebuild">How can I change my color theme on the fly?</a></li>
+	<li class="lh15"><a href="#import">How can I import text to a terminal instance?</a></li>
+	<li class="lh15"><a href="#colors">Is there support for colors?</a></li>
+	<li class="lh15"><a href="#wrapping">Is there any support for text wrapping?</a></li>
+	<li class="lh15"><a href="#bold">Isn't there any way to use bold output or any other custom styles?</a></li>
+	<li class="lh15"><a href="#connect">How can I connect to a server? (AJAX Handling)</a></li>
+	<li class="lh15"><a href="#examples">Are there any real world examples of termlib.js at work?</a></li>
+	</ul>
+	</td></tr>
+	<tr><td class="lh13"><a name="chrome"></a>
+&nbsp;<br>
+<b class="quest">Can I add chrome to the terminal? (e.g. a window header, a close box)</b><br><br>
+
+Not by the means of the Terminal object's interface (since there are way too many things that you may possibly want to add).<br>
+The Terminal object allows you to specify the background color, the frame color, the frame's width and the font class used. If you want to add more chrome, you must align this in a separate division element.<br><br>
+
+To calculate the dimensions of the terminal use this formula:<br><br>
+
+width:&nbsp; 2 * frameWidth + conf.cols * &lt;width of &nbsp;&gt; + 2 * 2px padding (left and right)<br>
+height: 2 * frameWidth + conf.rows * conf.rowHeight + 2 * 2px padding (top and bottom).<br><br>
+
+Or you could get the empirical values for width and height by calling a terminal's `<span class="prop">getDimensions()</span>' method, once the terminal is open. (see documentation in &quot;readme.txt&quot;).<br><br>
+
+Finnally, you could obviously embed the terminal's division element in your custom chrome layout (see below). [This will not be compatible to Netscape 4.]<br><br>
+
+p.e.:<pre>
+  &lt;div id=&quot;myTerminal1&quot; style=&quot;position:absolute; top:100px; left:100px;&quot;&gt;
+     &lt;table class=&quot;termChrome&quot;&gt;
+     	&lt;tbody&gt;
+        &lt;tr&gt;
+           &lt;td class=&quot;termTitle&quot;&gt;terminal 1&lt;/td&gt;
+        &lt;/tr&gt;
+        &lt;tr&gt;
+           &lt;td class=&quot;termBody&quot;&gt;&lt;div id=&quot;termDiv1&quot; style=&quot;position:relative&quot;&gt;&lt;/div&gt;&lt;/td&gt;
+        &lt;/tr&gt;
+     	&lt;/tbody&gt;
+     &lt;/table&gt;
+   &lt;/div&gt;
+
+   // get a terminal for this
+
+   var term1 = new Terminal(
+                 {
+                   x: 0,
+                   y: 0,
+                   id: 1,
+                   termDiv: &quot;termDiv1&quot;,
+                   handler: myTermHandler
+                 }
+              );
+   term1.open();
+
+   // and this is how to move the chrome and the embedded terminal
+
+   TermGlobals.setElementXY( &quot;myTerminal1&quot;, 200, 80 );
+</pre>
+To keep track of the instance for any widgets use the terminal's `id' property. (You must set this in the configuration object to a unique value for this purpose.)<br><br>
+
+For a demonstration see the <a href="sample_chrome.html">Chrome Sample Page</a>.
+	</td></tr>
+	<tr><td class="lh13"><a name="embed"></a>
+&nbsp;<br>
+<b class="quest">How can I embed a terminal relative to my HTML layout?</b><br><br>
+
+Define your devision element with attribute &quot;position&quot; set to &quot;relative&quot; and place this inside your layout. Call &quot;new Terminal()&quot; with config-values { x: 0, y: 0 } to leave it at its relative origin.
+	</td></tr>
+	<tr><td class="lh13"><a name="syntax"></a>
+&nbsp;<br>
+<b class="quest">I pasted your sample code and just got an error. - ???</b><br><br>
+
+The short examples are kept arbitrarily simple to show the syntax.<br>
+Make sure that your divison element(s) is/are rendered by the browser before `Terminal.open()' is called.<br><br>
+
+Does not work:
+<pre>  &lt;head&gt;
+  &lt;script&gt;
+    var term = new Terminal();
+    term.open();
+  &lt;/script&gt;
+  &lt;/head&gt;
+</pre>
+Does work:
+<pre>  &lt;head&gt;
+  &lt;script&gt;
+    var term;
+
+    function termOpen() {
+       // to be called from outside after compile time
+       term = new Terminal();
+       term.open();
+    }
+  &lt;/script&gt;
+  &lt;/head&gt;
+</pre>
+c.f. &quot;readme.txt&quot;<br>
+(Opening a terminal by clicking a link implies also that the page has currently focus.)<br><br>
+With v.1.01 and higher this doesn't cause an error any more.<br>`Terminal.prototype.open()' now returns a value for success.
+	</td></tr>
+	<tr><td class="lh13"><a name="keyboard"></a>
+&nbsp;<br>
+<b class="quest">I can't get any input, but I don't get any erros too.</b><br><br>
+
+The Terminal object's functionality relies on the browsers ability to generate and handle keyboard events.<br>
+Sadly some browsers lack a full implementation of the event model. (e.g. Konquerer [khtml] and early versions of Apple Safari, which is a descendant of khtml.)
+	</td></tr>
+	<tr><td class="lh13"><a name="keylock"></a>
+&nbsp;<br>
+<b class="quest">How can I temporary disable the keyboard handlers?</b><br>
+<span class="prop">(The terminal is blocking my HTML form fields, etc.)</span><br><br>
+
+With version 1.03 there's a global property `<span class="prop">TermGlobals.keylock</span>'. Set this to `true' to disable the keyboard handlers without altering any other state. Reset it to `false' to continue with your terminal session(s).
+	</td></tr>
+	<tr><td class="lh13"><a name="linesranges"></a>
+&nbsp;<br>
+<b class="quest">How can I set the cusor to the start / the end of the command line?</b><br><br>
+
+In case you need to implement a shortcut (like ^A of some UN*X-shells) to jump to the beginning or the end of the current input line, there are two private instance methods you could utilize:<br><br>
+`<span class="prop">_getLineEnd(&lt;row&gt;, &lt;col&gt;)</span>' returns an array [&lt;row&gt;, &lt;col&gt;] with the position of the last character in the logical input line with ASCII value &gt;= 32 (0x20).<br><br>
+`<span class="prop">_getLineStart(&lt;row&gt;, &lt;col&gt;)</span>' returns an array [&lt;row&gt;, &lt;col&gt;] with the position of the first character in the logical input line with ASCII value &gt;= 32 (0x20).<br><br>
+Both take a row and a column of a cursor position as arguments.<br><br>
+
+p.e.:
+<pre>
+  // jump to the start of the input line
+
+  myCtrlHandler() {
+     // catch ^A and jump to start of the line
+     if (this.inputChar == 1) {
+        var firstChar = this._getLineStart(this.r, this.c);
+        this.cursorSet(firstChar[0], firstChar[1]);
+     }
+  }</pre>
+(Keep in mind that this is not exactly a good example, since some browser actually don't issue a keyboard event for
+&quot;^A&quot;. And other browsers, which do catch such codes, are not very reliable in that.)
+	</td></tr>
+	<tr><td class="lh13"><a name="historyunique"></a>
+&nbsp;<br>
+<b class="quest">How can I limit the command history to unique entries only?</b><br>
+	<span class="prop">(My application effords commands to be commonly repeated.)</span><br><br>
+
+With version 1.05 there is a new configuration and control flag `<span class="prop">historyUnique</span>'. All you need is setting this to `true' in your terminal's configuration object.
+	</td></tr>
+	<tr><td class="lh13"><a name="rebuild"></a>
+&nbsp;<br>
+<b class="quest">How can I change my color theme on the fly?</b><br><br>
+
+With version 1.07 there is a new method `<span class="prop">Terminal.rebuild()</span>'.<br>
+This method updates the GUI to current config settings while preserving all other state.<br><br>
+p.e.:
+<pre>
+   // change color settings on the fly
+   // here: set bgColor to white and font style to class &quot;termWhite&quot;
+   // method rebuild() updates the GUI without side effects
+   // assume var term holds a referene to a Terminal object already active
+
+   term.conf.bgColor = '#ffffff';
+   term.conf.fontClass = 'termWhite';
+   term.rebuild();</pre>
+	</td></tr>
+	<tr><td class="lh13"><a name="import"></a>
+&nbsp;<br>
+<b class="quest">How can I import text to terminal instance?</b><br><br>
+
+Have a look at the <a href="sample_import.html">Text Import Sample Page</a>.<br><br>
+This page features three different methods for the import of single line and multiline text.
+
+	</td></tr>
+	<tr><td class="lh13"><a name="colors"></a>
+&nbsp;<br>
+<b class="quest">Is there support for color?</b><br><br>
+
+Starting with version 1.2 there is built in support for color styles aside from the configureable front and background colors.<br><br>
+For details have a look at the <a href="sample_color.html">Color Sample Page</a>.
+
+	</td></tr>
+	<tr><td class="lh13"><a name="wrapping"></a>
+&nbsp;<br>
+<b class="quest">Is there any support for text wrapping?</b><br><br>
+
+Starting with version 1.3 there is built in support for automatic text wrapping with the <span class="prop">write()</span> method.<br><br>
+You may enabel text wrapping using the instance method <span class="prop">wrapOn()</span> and disable wrapping using the instance method <span class="prop">wrapOff()</span>. Wrapping is <span class="prop">off</span> by default.<br>
+You may also set the property &quot;<span class="prop">wrapping</span>&quot; of the configuration object to <span class="prop">true</span> at start up to turn wrapping globally on. Or change the value of the boolean flag &quot;<span class="prop">wrapping</span>&quot; at run time.<br><br>
+&quot;termlib.js&quot; even supports conditional/soft word breaks: Use the <span class="prop">&lt;form feed&gt;</span>-character (&quot;\f&quot;&nbsp;==&nbsp;ASCII 12) for a conditional word break.<br><br>
+Wrapping behaviors are configured on a per-character basis in <span class="prop">TermGlobals.wrapChars</span>.<br><br>
+Have a look at the <a href="sample_wrap.html">Text Wrap Sample Page</a>.
+	</td></tr>
+
+	<tr><td class="lh13"><a name="bold"></a>
+&nbsp;<br>
+<b class="quest">Isn't there any way to use bold output or any other custom styles?</b><br><br>
+
+Starting with version 1.4 there is built in support for custom styles and markup.<br><br>
+
+Have a look at the <a href="sample_style_settings.html">Style Settings Sample Page</a> for an example using a custom &quot;b&quot; style for bold.
+	</td></tr>
+
+	<tr><td class="lh13"><a name="connect"></a>
+&nbsp;<br>
+<b class="quest">How can I connect to a server? (AJAX Handling)</b><br><br>
+
+&quot;termlib.js&quot; comes with tightly integrated functionallity for client-server remote communication tasks via XMLHttpRequests (commonly known as AJAX or JSON).<br><br>
+All you have to do, is call the <span class="prop">send( &lt;options&gt; )</span> method and return.<br>The request (might it succeed or fail) will come back to your callback-handler with your Terminal instance set as the <tt>this</tt> object.<br><br>
+
+example:
+<pre>  // assume we are inside a handler
+  // (&quot;this&quot; refers to an instance of Terminal)
+
+  this.send(
+    {
+      url:      &quot;my_service.cgi&quot;,
+      method:   &quot;post&quot;,
+      data:     myDataObject,
+      callback: mySocketCallback
+    }
+  );
+  return;
+
+  function mySocketCallback() {
+    if (this.socket.succes) {
+       // status 200 OK
+       this.write(&quot;Server said:\n&quot; + this.socket.responseText);
+    }
+    else if (this.socket.errno) {
+       // connection failed
+       this.write(&quot;Connection error: &quot; + this.socket.errstring);
+    }
+    else {
+       // connection succeeded, but server returned other status than 2xx
+       this.write(&quot;Server returned: &quot; +
+                  this.socket.status + &quot; &quot; + this.socket.statusText);
+    }
+    this.prompt()
+  }
+</pre>
+
+Have a look at the <a href="sample_socket.html">Socket Sample Page</a> for detailed information.<br><br>
+
+You may consider to enable the optional <a href="sample_ansi_mapping.html">ANSI-mapping</a> to desplay texts formated using ANSI-escape sequences.<br><br><br>
+
+For better understanding, here is the basic layout of a generic XMLHttpRequest and its handling:
+
+<pre>
+  function connectToHost(url) {
+     // create a request object
+     if (window.XMLHttpRequest) {
+        // create a standard XMLHttpRequest
+        request = new XMLHttpRequest();
+     }
+     else if (window.ActiveXObject) {
+         // XMLHttpRequest not supported, try Active X
+         request = new ActiveXObject('Microsoft.XMLHTTP');
+     }
+     if (request) {
+         request.onreadystatechange = requestChangeHandler;
+         request.open('GET', url);
+         request.send('');
+     }
+     else {
+        // XMLHttpRequest not implemented
+     }
+  }
+
+  function requestChangeHandler() {
+     if (request.readyState == 4) {
+        // readyState 4: complete; now test for server's response status
+        if (request.status == 200) {
+           // response in request.responseText or request.responseXML if XML-code
+           // if it's JS-code we could get this by eval(request.responseText)
+           // by this we could import whole functions to be used via the terminal
+        }
+        else {
+           // connection error
+           // status code and message in request.status and request.statusText
+        }
+     }
+  }
+</pre>
+The details of the communication can be controlled by the following methods of the XMLHttpRequest object:<br><br>
+
+	<table border="0" cellspacing="0" cellpadding="3">
+	<tr valign="top"><td nowrap class="prop">setRequestHeader(&quot;<i>headerLabel</i>&quot;, &quot;<i>value</i>&quot;)</td><td>set a HTTP header to be sent to the server</td></tr>
+	<tr valign="top"><td nowrap class="prop">getResponseHeader(&quot;<i>headerLabel</i>&quot;)</td><td>get a HTTP header sent from the server</td></tr>
+	<tr valign="top"><td nowrap class="prop">open(<i>method</i>, &quot;<i>url</i>&quot; [, <i>asyncFlag</i> [,<br>&nbsp; &quot;<i>userid</i>&quot; [, &quot;<i>password</i>&quot;]]])</td><td>assign the destination properties to the request.<br>be aware that userid and password are not encrypted!</td></tr>
+	<tr valign="top"><td nowrap class="prop">send(<i>content</i>)</td><td>transmit a message body (post-string or DOM object)</td></tr>
+	<tr valign="top"><td nowrap class="prop">abort()</td><td>use this to stop a pending connection</td></tr>
+	</table>
+
+	</td></tr>
+
+	<tr><td class="lh13"><a name="examples"></a>
+&nbsp;<br>
+<b class="quest">Are there any real world examples of termlib.js at work?</b><br><br>
+
+Have a look at these pages:
+
+<ul>
+<li class="lh13"><a href="http://www.masswerk.at/elizabot/eliza.html" target="_blank">www.masswerk.at/elizabot/eliza.html</a><br>
+ELIZA Terminal &ndash; An implementation of Joseph Weizenbaum's famous ELIZA program. (2005)</li>
+<li class="lh13"><a href="http://www.masswerk.at/pmd/" target="_blank">www.masswerk.at/pmd/</a><br>
+Pac-Man Dungeons &ndash; A not-so-serious text-mode Pac-Man. (2006)</li>
+<li class="lh13"><a href="http://www.yootopia.org/" target="_blank">www.yootopia.org/</a><br>
+At work at a beta project by Yahoo-research (<a href="http://www.yootles.com/">www.yootles.com</a>).</li>
+<li class="lh13"><a href="http://rubyforge.org/projects/rubyinlabs/" target="_blank">rubyforge.org/projects/rubyinlabs/</a><br>
+Part of the RubyInLabs distribution.</li>
+<li class="lh13"><a href="http://cb.vu/" target="_blank">[cb.vu]~></a><br>
+A web console by Colin Barschel (2007-2008).</li>
+<li class="lh13"><a href="http://articles2.bluishcoder.co.nz/responder/fjsc/" target="_blank">Factor to JavaScript REPL</a><br>
+A online Factor compiler by <a href="http://www.bluishcoder.co.nz/" target="_blank">Bluish Coder</a> (Chris Double, 2006).</li>
+</ul>
+
+	</td></tr>
+
+	<tr><td class="lh13">
+	&nbsp;<br>
+	Norbert Landsteiner<br>
+	<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+	</td></tr>
+	<tr><td class="lh13">
+	&nbsp;<br>
+		<a href="#top">&gt; top of page</a>
+	</td></tr>
+	<tr><td class="lh13">
+	&nbsp;
+	</td></tr>
+</table>
+
+<div id="termDiv" style="position:absolute; top:20px; left:100px;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/index.html b/com.ogamita.www/nasium-lse/terminal/termlib/index.html
new file mode 100644
index 0000000..375fb21
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/index.html
@@ -0,0 +1,241 @@
+<html>
+<head>
+	<title>mass:werk termlib</title>
+
+<style type="text/css">
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh13 {
+	line-height: 13px;
+}
+.lh15 {
+	line-height: 15px;
+}
+pre {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #ccffaa;
+	line-height: 15px;
+}
+.prop {
+	font-family: courier,fixed,swiss,sans-serif;
+	color: #bbee99;
+	font-size: 12px;
+	line-height: 15px;
+}
+h1 {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 16px;
+	color: #cccccc;
+}
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #dddddd;
+}
+
+ul.features li {
+	line-height: 13px;
+	padding-bottom: 6px;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 12px;
+		color: #000000;
+	}
+	.lh13 {
+		line-height: 13px;
+	}
+	.lh15 {
+		line-height: 15px;
+	}
+	pre,.prop {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 12px;
+		color: #000000;
+		line-height: 15px;
+	}
+	h1 {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 16px;
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		text-decoration: none;
+		color: #000000;
+	}
+	a:hover {
+		text-decoration: underline;
+		color: #000000;
+	}
+	a:active {
+		text-decoration: underline;
+		color: #000000;
+	}
+}
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#dddddd" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"><a name="top"></a>
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap>termlib.js home</td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0" width="700" align="center">
+	<tr><td>
+		<h1>mass:werk termlib.js</h1>
+	</td></tr>
+	<tr><td class="lh13">
+		The JavaScript library &quot;termlib.js&quot; provides a `Terminal' object, which
+		facillitates a simple and object oriented approach to generate and control a
+		terminal-like interface for web services.<br><br>
+
+		&quot;termlib.js&quot; features direct keyboard input and powerful output methods
+		for multiple and simultanious instances of the `Terminal' object.<br><br>
+
+		The library was written with the aim of simple usage and a maximum of compatibility
+		with minimal foot print in the global namespace.<br><br><br>
+
+
+		A short example:<br>
+  <pre>
+  var term = new Terminal( {handler: termHandler} );
+  term.open();
+
+  function termHandler() {
+     this.newLine();
+     var line = this.lineBuffer;
+     if (line != &quot;&quot;) {
+        this.write(&quot;You typed: &quot;+line);
+     }
+     this.prompt();
+  }</pre>
+  	</td></tr>
+	<tr><td class="lh13">
+		<b>Key Features:</b>
+
+		<ul class="features">
+		<li><b>Object oriented</b>: Handle multiple instances independently at the same time!</li>
+		<li><b>Type styles</b>: Ready-to-use type styles and support for <a href="sample_style_settings.html">custom styles and mark up</a>.</li
+		<li><b>Colors</b>: Extended <a href="sample_color.html">support for colors</a>.</li>
+		<li><b>ANSI codes</b>: Limited <a href="sample_ansi_mapping.html">ANSI-support</a> for SGR codes.</li>
+		<li><b>Text wrapping</b>: Automatic <a href="sample_wrap.html">text wrapping</a> (v 1.3 and higher, see <a href="faq.html#wrapping">faq</a> for details)</li>
+		<li><b>Remote communications</b>: The <a href="sample_socket.html">socket extension</a> for client-server remote communication (commonly known as AJAX) provides a tightly integrated API for a simple and object oriented approach to XMLHttpRequests.<br>(Starting with version 1.5 the socket extension is included in the main library.)</li>
+		<li><b>Import methods</b>: &quot;termlib.js&quot; provides methods for <a href="sample_import.html">text import</a> via dialogs or copy'n'paste.</li>
+		<li><b>Parser</b>: Set up your own shell-like application using the included <a href="parser_sample.html">parser</a>.</li>
+		<li><b>Documentation</b>: <a href="readme.txt">Extensive documentation</a> and loads of <a href="samples.html">usage examples</a>.</li>
+		<li><b>Free</b>: Best of all: &quot;termlib.js&quot; is free, see the licence below.</li>
+		</ul>
+
+		Note on <b>Backward Compatibility</b>:<br><br>
+		<table border="0" cellspacing="0" cellpadding="0">
+		<tr valign="top">
+			<td nowrap class="lh13">Version 1.5:</td>
+			<td class="lh13">&nbsp;</td>
+			<td class="lh13"><b>Changed the license.</b><br>Also dropped support for Netscape 4 (layers) and included the socket extension in the main library.<br>
+		As the socket extension is now included in the library, please delete any script-tags refering to &quot;termlib_socket.js&quot; from older applications!<br>&nbsp;</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap class="lh13">Version 1.52:</td>
+			<td class="lh13">&nbsp;</td>
+			<td class="lh13">Re-organized the <a href="parser_sample.html">Parser</a>. The parser is now a self-contained object with a constructor.<br>&nbsp;</td>
+		</tr>
+		</table>
+  	</td></tr>
+	<tr><td class="lh13">
+	<b>License</b><br><br>
+
+	This JavaScript-library is <b>free</b>.<br>
+	Include a visible backlink to &lt;<a href="http://www.masswerk.at/termlib/">http://www.masswerk.at/termlib/</a>&gt; in the embedding web page or application. The library should always be accompanied by the &quot;readme.txt&quot; and the sample HTML-documents.
+	</td></tr>
+	<tr><td class="lh13">
+	<b>Distribution</b><br><br>
+
+	This JavaScript-library may be distributed freely as long it is distributed together with the &quot;readme.txt&quot; and the sample HTML-documents and this document.<br><br>
+
+	Any changes to the library should be commented and be documented in the readme-file.<br>
+	Any changes must be reflected in the `Terminal.version' string as &quot;Version.Subversion&nbsp;(compatibility)&quot;.
+	</td></tr>
+	<tr><td class="lh13">
+	<b>Disclaimer</b><br><br>
+
+	This software is distributed AS IS and in the hope that it will be useful, but WITHOUT ANY
+	WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+	PURPOSE. The entire risk as to the quality and performance of the product is borne by the
+	user. No use of the product is authorized hereunder except under this disclaimer.
+	</td></tr>
+	<tr><td class="lh13">
+	<b>History</b><br><br>
+
+	This library evolved from the terminal script &quot;TermApp&quot; ((c) N. Landsteiner 2003) and is in its
+	current form a down scaled spinn-off of the &quot;JS/UIX&quot; project. (JS/UIX is not a free&nbsp;software by now.)
+	c.f.: &lt;<a href="http://www.masswerk.at/jsuix/" target="_blank">http://www.masswerk.at/jsuix</a>&gt;<br><br>
+
+	For version history: see the <a href="readme.txt">readme.txt</a>.
+	</td></tr>
+	<tr><td class="lh13">
+	&nbsp;<br>
+	<b>Download</b><br><br>
+	Be sure to have read the license information and the disclamer and that you are willing to respect copyrights.<br><br>
+
+	<span class="prop">Download:</span> <a href="termlib.zip">termlib.zip</a> (~ 156 KB, incl. docs &amp; sample pages)<br><br>
+	Current version is &quot;1.6 (original)&quot;.<br>
+	Files are provided with line breaks  in format &lt;CRLF&gt;.<br>
+	The ZIP-archive includes now also a compacted version of &quot;termlib.js&quot;.
+	&nbsp;
+	</td></tr>
+	<tr><td class="lh13">
+	<b>Donations</b><br><br>
+
+	Donations are welcome: You may use the PayPal-button to support and/or honor the development of &quot;termlib.js&quot; at: <a href="http://www.masswerk.at/termlib/donate/">http://www.masswerk.at/termlib/donate/</a>
+	</td></tr>
+	<tr><td class="lh13">
+	<b>Author</b><br><br>
+	&copy; Norbert Landsteiner 2003-2010<br>
+	mass:werk &#150; media environments<br>
+	<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+	</td></tr>
+	<tr><td class="lh13">
+	&nbsp;<br>
+	Author's note:<br>
+	Please do not contact me on questions of simple usage. There is an extensive documentation (readme.txt) including plenty of sample code that should provide all information you need.
+	</td></tr>
+	<tr><td class="lh13">
+	&nbsp;<br>
+		<a href="#top">&gt; top of page</a>
+	</td></tr>
+	<tr><td class="lh13">
+	&nbsp;
+	</td></tr>
+</table>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/multiterm_test.html b/com.ogamita.www/nasium-lse/terminal/termlib/multiterm_test.html
new file mode 100644
index 0000000..9ec5367
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/multiterm_test.html
@@ -0,0 +1,196 @@
+<html>
+<head>
+	<title>termlib Multiple Terminal Test</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script language="JavaScript" type="text/javascript">
+<!--
+
+/*
+  multiple terminal test for termlib.js
+
+  (c) Norbert Landsteiner 2003-2005
+  mass:werk - media environments
+  <http://www.masswerk.at>
+
+*/
+
+var term=new Array();
+
+var helpPage=[
+	'%CS%+r Terminal Help %-r%n',
+	'  This is just a tiny test for multiple terminals.',
+	'  use one of the following commands:',
+	'     clear .... clear the terminal',
+	'     exit ..... close the terminal (or <ESC>)',
+	'     id ....... show terminal\'s id',
+	'     switch ... switch to other terminal',
+	'     help ..... show this help page',
+	'  other input will be echoed to the terminal.',
+	' '
+];
+
+function termOpen(n) {
+	if (!term[n]) {
+		var y=(n==1)? 70: 280;
+		term[n]=new Terminal(
+			{
+				x: 220,
+				y: y,
+				rows: 12,
+				greeting: '%+r +++ Terminal #'+n+' ready. +++ %-r%nType "help" for help.%n',
+				id: n,
+				termDiv: 'termDiv'+n,
+				crsrBlinkMode: true,
+				handler: termHandler,
+				exitHandler: termExitHandler
+			}
+		);
+		if (term[n]) term[n].open();
+	}
+	else if (term[n].closed) {
+		term[n].open();
+	}
+	else {
+		term[n].focus();
+	}
+}
+
+function termHandler() {
+	// called on <CR> or <ENTER>
+	this.newLine();
+	var cmd=this.lineBuffer;
+	if (cmd!='') {
+		if (cmd=='switch') {
+			var other=(this.id==1)? 2:1;
+			termOpen(other);
+		}
+		else if (cmd=='clear') {
+			this.clear();
+		}
+		else if (cmd=='exit') {
+			this.close();
+		}
+		else if (cmd=='help') {
+			this.write(helpPage);
+		}
+		else if (cmd=='id') {
+			this.write('terminal id: '+this.id);
+		}
+		else {
+			this.type('You typed: '+cmd);
+			this.newLine();
+		}
+	}
+	this.prompt();
+}
+
+function termExitHandler() {
+	// optional handler called on exit
+	// activate other terminal if open
+	var other=(this.id==1)? 2:1;
+	if ((term[other]) && (term[other].closed==false)) term[other].focus();
+}
+
+//-->
+</script>
+
+<style type="text/css">
+
+/* essential terminal styles */
+
+.term {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #33d011;
+	background: none;
+}
+.termReverse {
+	color: #111111;
+	background: #33d011;
+}
+
+/* other page styles */
+
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #dddddd;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #dddddd;
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#dddddd" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap>multiple terminals</td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr><td nowrap>
+		Multiple Terminal Test<br>&nbsp;
+	</td></tr>
+	<tr><td nowrap>
+		<a href="javascript:termOpen(1)" onfocus="if(this.blur)this.blur();" onmouseover="window.status='terminal 1'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal 1 &nbsp;</a>
+	</td></tr>
+	<tr><td nowrap>
+		<a href="javascript:termOpen(2)" onfocus="if(this.blur)this.blur();" onmouseover="window.status='terminal 2'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal 2 &nbsp;</a>
+	</td></tr>
+	<tr><td nowrap class="lh15">
+		&nbsp;<br>
+		(c) mass:werk,<br>N. Landsteiner 2003-2005<br>
+		<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+	</td></tr>
+</table>
+
+<div id="termDiv1" style="position:absolute; top:20px; left:100px;"></div>
+<div id="termDiv2" style="position:absolute; top:20px; left:100px;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/parser_sample.html b/com.ogamita.www/nasium-lse/terminal/termlib/parser_sample.html
new file mode 100644
index 0000000..db9fc2f
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/parser_sample.html
@@ -0,0 +1,697 @@
+<html>
+<head>
+	<title>termlib Sample Parser</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+	<script language="JavaScript" type="text/javascript" src="termlib_parser.js"></script>
+
+<script language="JavaScript" type="text/javascript">
+<!--
+
+/*
+  test sample for termlib.js and termlib_parser.js
+
+  (c) Norbert Landsteiner 2005-2010
+  mass:werk - media environments
+  <http://www.masswerk.at>
+
+*/
+
+var term, parser;
+
+var helpPage=[
+	'%CS%+r Terminal Help %-r%n',
+	'  This is just a sample to demonstrate command line parsing.',
+	' ',
+	'  Use one of the following commands:',
+	'     clear [-a] .......... clear the terminal',
+	'                           option "a" also removes the status line',
+	'     number -n<value> .... return value of option "n" (test for options)',
+	'     repeat -n<value> .... repeats the first argument n times (another test)',
+	'     dump ................ lists all arguments and alphabetic options',
+	'     login <username> .... sample login (test for raw mode)',
+	'     exit ................ close the terminal (same as <ESC>)',
+	'     help ................ show this help page',
+	' ',
+	'  other input will be echoed to the terminal as a list of parsed arguments',
+	'  in the format <argument index> <quoting level> "<parsed value>".',
+	' '
+];
+
+function termOpen() {
+	if (!term || term.losed) {
+		term=new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				ps: '[guest]$',
+				initHandler: termInitHandler,
+				handler: commandHandler,
+				exitHandler: termExitHandler
+			}
+		);
+		if (term) term.open();
+		parser=new Parser();
+
+		// dimm UI text
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+	else {
+		term.focus();
+	}
+}
+
+function termExitHandler() {
+	// reset the UI
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+function termInitHandler() {
+	// output a start up screen
+	this.write(
+		[
+			this.globals.center('####################################################', 80),
+			this.globals.center('#                                                  #', 80),
+			this.globals.center('#         termlib.js - Sample Parser v 1.1         #', 80),
+			this.globals.center('#  Input is echoed as a list of parsed arguments.  #', 80),
+			this.globals.center('#                                                  #', 80),
+			this.globals.center('#  Type "help" for commands.                       #', 80),
+			this.globals.center('#                                                  #', 80),
+			this.globals.center('#  (c) N. Landsteiner 2005-2010;  www.masswerk.at  #', 80),
+			this.globals.center('#                                                  #', 80),
+			this.globals.center('####################################################', 80),
+			'%n'
+		]
+	);
+	// set a double status line
+	this.statusLine('', 8,2); // just a line of strike
+	this.statusLine(' +++ This is just a test sample for command parsing. Type "help" for help. +++');
+	this.maxLines -= 2;
+	// and leave with prompt
+	this.prompt();
+}
+
+function commandHandler() {
+	this.newLine();
+	// check for raw mode first (should not be parsed)
+	if (this.rawMode) {
+		if (this.env.getPassword) {
+			// sample password handler (lineBuffer == stored username ?)
+			if (this.lineBuffer == this.env.username) {
+				this.user = this.env.username;
+				this.ps = '['+this.user+']>';
+				this.type('Welcome '+this.user+', you are now logged on to the system.');
+			}
+			else {
+				this.type('Sorry.');
+			}
+			this.env.username = '';
+			this.env.getPassword = false;
+		}
+		// leave in normal mode
+		this.rawMode = false;
+		this.prompt();
+		return;
+	}
+	// normal command parsing
+	// just call the termlib_parser with a reference of the calling Terminal instance
+	// parsed arguments will be imported in this.argv,
+	// quoting levels per argument in this.argQL (quoting character or empty)
+	// cursor for arguments is this.argc (used by Parser.getopt)
+	// => see 'termlib_parse.js' for configuration and details
+	parser.parseLine(this);
+	if (this.argv.length == 0) {
+		// no commmand line input
+	}
+	else if (this.argQL[0]) {
+	    // first argument quoted -> error
+		this.write("Syntax error: first argument quoted.");
+	}
+	else {
+		var cmd = this.argv[this.argc++];
+		/*
+		  process commands now
+		  1st argument: this.argv[this.argc]
+		*/
+		switch (cmd) {
+			case 'help':
+				this.write(helpPage);
+				break;
+			case 'clear':
+				// get options
+				var opts = parser.getopt(this, 'aA');
+				if (opts.a) {
+					// discard status line on opt "a" or "A"
+					this.maxLines = this.conf.rows;
+				}
+				this.clear();
+				break;
+			case 'number':
+				// test for value options
+				var opts = parser.getopt(this, 'n');
+				if (opts.illegals.length) {
+					this.type('illegal option. usage: number -n<value>');
+				}
+				else if ((opts.n) && (opts.n.value != -1)) {
+					this.type('option value: '+opts.n.value);
+				}
+				else {
+					this.type('usage: number -n<value>');
+				}
+				break;
+			case 'repeat':
+				// another test for value options
+				var opts = parser.getopt(this, 'n');
+				if (opts.illegals.length) {
+					this.type('illegal option. usage: repeat -n<value> <string>');
+				}
+				else if ((opts.n) && (opts.n.value != -1)) {
+					// first normal argument is again this.argv[this.argc]
+					var s = this.argv[this.argc];
+					if (typeof s != 'undefined') {
+						// repeat this string n times
+						var a = [];
+						for (var i=0; i<opts.n.value; i++) a[a.length] = s;
+						this.type(a.join(' '));
+					}
+				}
+				else {
+					this.type('usage: repeat -n<value> <string>');
+				}
+				break;
+			case 'login':
+				// sample login (test for raw mode)
+				if ((this.argc == this.argv.length) || (this.argv[this.argc] == '')) {
+					this.type('usage: login <username>');
+				}
+				else {
+					this.env.getPassword = true;
+					this.env.username = this.argv[this.argc];
+					this.write('%+iSample login: repeat username as password.%-i%n');
+					this.type('password: ');
+					// exit in raw mode (blind input)
+					this.rawMode = true;
+					this.lock = false;
+					return;
+				}
+				break;
+			case 'dump':
+				var opts = parser.getopt(this, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ');
+				for (var p in opts) {
+					if (p == 'illegals') {
+						if (opts.illegals.length) {
+							this.type('  illegal options: "'+opts.illegals.join('", "')+'"');
+							this.newLine();
+						}
+					}
+					else {
+						this.type('  option "'+p+'" value '+opts[p].value);
+						this.newLine();
+					}
+				}
+				while (this.argc<this.argv.length) {
+					var ql = this.argQL[this.argc] || '-';
+					this.type('  argument [QL: '+ql+'] "'+this.argv[this.argc++]+'"');
+					this.newLine();
+				}
+				break;
+			case 'exit':
+				this.close();
+				return;
+			default:
+				// for test purpose just output argv as list
+				// assemble a string of style-escaped lines and output it in more-mode
+				s=' INDEX  QL  ARGUMENT%n';
+				for (var i=0; i<this.argv.length; i++) {
+					s += this.globals.stringReplace('%', '%%',
+							this.globals.fillLeft(i, 6) +
+							this.globals.fillLeft((this.argQL[i])? this.argQL[i]:'-', 4) +
+							'  "' + this.argv[i] + '"'
+						) + '%n';
+				}
+				this.write(s, 1);
+				return;
+		}
+	}
+	this.prompt();
+}
+
+
+//-->
+</script>
+
+<style type="text/css">
+
+/* essential terminal styles */
+
+.term {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #33d011;
+	background: none;
+}
+.termReverse {
+	color: #111111;
+	background: #33d011;
+}
+
+/* other page styles */
+
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #dddddd;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #dddddd;
+}
+
+table.inventory td {
+	padding-bottom: 20px !important;
+}
+
+pre,tt {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+.pale { color: #cceebb !important; }
+
+li {
+	line-height: 15px;
+	margin-bottom: 8px !important;
+}
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td,li,tt {
+		color: #000000;
+	}
+	pre,.prop,.pale {
+		color: #000000;
+	}
+	h1 {
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		color: #000000;
+	}
+	a:hover {
+		color: #000000;
+	}
+	a:active {
+		color: #000000;
+	}
+	table.inventory {
+		display: none;
+	}
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#dddddd" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap>parser</td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0" width="100%">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap valign="top">
+			Sample Parser Test<br>&nbsp;
+		</td></tr>
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal &nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			(c) mass:werk,<br>N. Landsteiner 2003-2010<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td id="mainPane" align="center">
+		<table border="0" cellspacing="0" cellpadding="0" width="660">
+		<tr><td align="left"  class="lh15" id="mainPane">
+
+		<p><b style="letter-spacing: 1px;">Sample Parser</b><br>&nbsp;</p>
+		<p>The parser provides a solid basis for any command evaluation for &quot;termlib.js&quot;. It splits the current command line to arguments (words) and takes care of any white space and quotes. Even escape characters and options are supported.</p>
+		<p>&nbsp;<br><b>Synopsis:</b></p>
+<pre>
+  var parser = new Parser();
+  parser.parseLine(this);
+  var command = this.argv[this.argc++];
+</pre>
+		<p>&nbsp;<br><b>Usage:</b></p>
+
+		<p>Call method &quot;<tt>parseLine(this)</tt>&quot; from inside of your Terminal-handler.
+		This will parse the current command line to chunks separated by any amount of
+		white space (see property <tt>whiteSpace</tt>).
+		<tt>&quot;parseLine&quot;</tt> will inject the following properties into the Terminal instance:</p>
+
+		<table border="0" cellspacing="0" cellpadding="2" style="margin-left: 20px;">
+		<tr valign="top">
+			<td nowrap><tt>this.argv</tt>:&nbsp;</td>
+			<td>Array of parsed chunks (words, arguments)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>this.argQL</tt>:&nbsp;</td>
+			<td>Array of quoting level per argument<br>
+				This array will contain the according quote character or an empty string for each element of argv with the same index.</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>this.argc</tt>:&nbsp;</td>
+			<td>A pointer to <tt>this.argv</tt> and <tt>this.argQL</tt> (initially set to <tt>0</tt>; used by method <tt>getopt</tt>).</td>
+		</tr>
+		</table>
+
+		<p>Example:</p>
+		<table border="0" cellspacing="0" cellpadding="0">
+		<tr><td nowrap>For the string:</td><td>&nbsp;</td><td><span class="pale">This is &quot;quoted&quot;.</span></td></tr>
+		<tr><td nowrap><tt>argv</tt> will result to:</td><td>&nbsp;</td><td><span class="pale">['this', 'is', 'quoted', '.']</span></td></tr>
+		<tr><td nowrap>and <tt>argQL</tt> will result to:</td><td>&nbsp;</td><td><span class="pale">['', '', '&quot;', '']</span></td></tr>
+		</table>
+		<p>(Provided that '&quot;' is defined as a quote character. Defaults: ', &quot;, and `)</p>
+
+		<p>&nbsp;<br><tt>getopt(this, &quot;&lt;options&gt;&quot;)</tt>:</p>
+		<p>Call this method from inside of your handler to parse any options from the
+		next chunk in <tt>this.argv</tt> that <tt>this.argc</tt> points to.<br>
+		Options are considered any arguments preceded by an option character in the
+		property <tt>optionChars</tt> (default: &quot;-&quot;). The second argument is a string
+		containing all characters to be considered legal option flags.<br>
+		The method returns an object with a property of type object for any option
+		flag (defined as a character in the options-string) found in <tt>argv</tt>.
+		argc will be advanced to the first element of <tt>argv</tt> that is not an option.
+		Each of the flag-objects will contain the property `<tt>value</tt>'.<br>
+		In case that the option flag was immediately followed by  a number
+		(unsigned float value), this will be stored as a Number in the <tt>value</tt>,
+		otherwise the flag's <tt>value</tt> will be set to <tt>-1</tt>.<br>
+		Any flags that were not defined in the options-string will be stored in
+		an array of single characters in the property `<tt>illegals</tt>' of the returned object.</p>
+
+		<p>Example:</p>
+<pre>
+   this.argv: [&quot;test&quot;, &quot;-en7a&quot;, &quot;-f&quot;, &quot;next&quot;]
+   this.argc: set initially to 0
+
+   var command = this.argv[this.argc++];    // this.argc now points to 2nd chunk
+   var options = parser.getopt(this, &quot;en&quot;);
+</pre>
+		<p><tt>getopt</tt> will return the following object:</p>
+<pre>   {
+      'e': { value: -1 },
+      'n': { value: 7 },
+      'illegals': ['a', 'f']
+   }</pre>
+		<p>and <tt>this.argc</tt> will be set to <tt>3</tt>, pointing to &quot;next&quot;.</p>
+		<p>Note: Quoted terms are never parsed as options.</p>
+
+		<p>&nbsp;<br><b>Escape expressions:</b></p>
+		<p>The parser can handle escape sequences, e.g.: hexdecimal notations of
+		characters that are preceded by an escape character. (default: parse any
+		2-byte hex expressions preceded by &quot;%&quot; as a character,  e.g. &quot;%41&quot; =&gt; &quot;A&quot;.)<br>
+		Escape characters are defined in the property <tt>escapeExpressions</tt> (type object) with the
+		according method as their value. (The given function or method must be present
+		at creation and takes four arguments: terminal instance, current char-position,
+		the escape character found, and the current quoting level. The method or function
+		is expected to strip any escape sequence of the lineBuffer and to return a string
+		to be inserted at the current parsing position.)<br>
+		The result of an escape expression will allways add to the current chunk and will never result in parsed white space.</p>
+
+		<p>&nbsp;<br><b>Configuration:</b></p>
+		<p>You may want to overide the follow objects (or add properties):</p>
+
+		<table border="0" cellspacing="0" cellpadding="2" style="margin-left: 20px;">
+		<tr><td nowrap>parser.<tt>whiteSpace</tt>:&nbsp;</td><td>chars to be parsed as white space (default: space, tab)</td></tr>
+		<tr><td nowrap>parser.<tt>quoteChars</tt>:&nbsp;</td><td>chars to be parsed as quotes (default: &quot;, ', `)</td></tr>
+		<tr><td nowrap>parser.<tt>singleEscapes</tt>:&nbsp;</td><td>chars to escape a quote or escape expression (default: \)</td></tr>
+		<tr><td nowrap>parser.<tt>optionChars</tt>:&nbsp;</td><td>chars that start an option (default: -)</td></tr>
+		<tr><td nowrap>parser.<tt>escapeExpressions</tt>:&nbsp;</td><td>chars that start escape expressions (default: % =&gt; 2-byte hex)</td></tr>
+		</table>
+
+		<p>&nbsp;<br>Notes:<br>
+		v. 1.1: Parser is now a function with a constructor.<br>
+		Configurations can be handled at a per-instance basis.<br>
+		Parser is now a single, self-contained object in the global name space.<br>
+		Note on the implementation: We are not storing the terminal instance in order to avoid memory leakage.</p>
+
+		<p>&nbsp;</p>
+		<p><b>Alternate Implementation Example</b> &ndash; not UNIX-like:<br>(for a sane implementation see the source of this file.)</p>
+<pre class="pale">
+// a simple command shell,
+// toggeling &quot;-&quot; (minus) and &quot;/&quot; (forward slash) as the option character
+
+var term, parser;
+var files = {
+   &quot;initscreen&quot;: [
+      &quot;*** Quick and Dumb Shell v. 1.0 ***&quot;,
+      &quot;Nanofluffy Corporation 1982&quot;,
+      &quot;ready.&quot;,
+      &quot;type 'help' for a list of commands.&quot;
+    ],
+   &quot;help&quot;: [
+       &quot;Commands:&quot;,
+       &quot;  type [-p] &lt;filename&gt; .... write a file to the screen&quot;,
+       &quot;                            option p: use screen pager&quot;,
+       &quot;  print &lt;filename&gt; [/p] ... write a file to the screen&quot;,
+       &quot;                            option p: use screen pager&quot;,
+       &quot;  help .................... display this screen&quot;,
+       &quot;  exit .................... exit the command shell&quot;
+    ],
+    &quot;test&quot;: [
+       &quot;Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Nam&quot;,
+       &quot;facilisis enim. Pellentesque in elit et lacus euismod dignissim.&quot;,
+       &quot;Aliquam dolor pede, convallis eget, dictum a, blandit ac, urna.&quot;,
+       &quot;Pellentesque sed nunc ut justo volutpat egestas. Class aptent&quot;,
+       &quot;taciti sociosqu ad litora torquent per conubia nostra, per inceptos&quot;,
+       &quot;hymenaeos. In erat. Suspendisse potenti. Fusce faucibus nibh sed&quot;,
+       &quot;nisi. Phasellus faucibus, dui a cursus dapibus, mauris nulla&quot;,
+       &quot;euismod velit, a lobortis turpis arcu vel dui. Pellentesque&quot;,
+       &quot;fermentum ultrices pede. Donec auctor lectus eu arcu. Curabitur&quot;,
+       &quot;non orci eget est porta gravida. Aliquam pretium orci id nisi.&quot;,
+       &quot;Duis faucibus, mi non adipiscing venenatis, erat urna aliquet&quot;,
+       &quot;elit, eu fringilla lacus tellus quis erat. Nam tempus ornare&quot;,
+       &quot;lorem. Nullam feugiat. Lorem ipsum dolor sit amet, consectetuer&quot;,
+       &quot;adipiscing elit. Nam facilisis enim. Pellentesque in elit et lacus&quot;,
+       &quot;euismod dignissim. Aliquam dolor pede, convallis eget, dictum a,&quot;,
+       &quot;blandit ac, urna. Pellentesque sed nunc ut justo volutpat egestas.&quot;,
+       &quot;Class aptent taciti sociosqu ad litora torquent per conubia nostra,&quot;,
+       &quot;per inceptos hymenaeos. In erat. Suspendisse potenti. Fusce&quot;,
+       &quot;faucibus nibh sed nisi. Phasellus faucibus, dui a cursus dapibus,&quot;,
+       &quot;mauris nulla euismod velit, a lobortis turpis arcu vel dui.&quot;,
+       &quot;Pellentesque fermentum ultrices pede. Donec auctor lectus eu arcu.&quot;,
+       &quot;Curabitur non orci eget est porta gravida. Aliquam pretium orci id&quot;,
+       &quot;nisi. Duis faucibus, mi non adipiscing venenatis, erat urna aliquet&quot;,
+       &quot;elit, eu fringilla lacus tellus quis erat. Nam tempus ornare lorem.&quot;,
+       &quot;Nullam feugiat. Lorem ipsum dolor sit amet, consectetuer adipiscing&quot;,
+       &quot;elit. Nam facilisis enim. Pellentesque in elit et lacus euismod&quot;,
+       &quot;dignissim. Aliquam dolor pede, convallis eget, dictum a, blandit ac,&quot;,
+       &quot;urna. Pellentesque sed nunc ut justo volutpat egestas. Class aptent&quot;,
+       &quot;taciti sociosqu ad litora torquent per conubia nostra, per inceptos&quot;,
+       &quot;hymenaeos. In erat. Suspendisse potenti. Fusce faucibus nibh sed nisi.&quot;,
+       &quot;Phasellus faucibus, dui a cursus dapibus, mauris nulla euismod velit,&quot;,
+       &quot;a lobortis dui: The quick brown fox jumps over the lazy dog.&quot;
+    ]
+};
+
+function openTerminal() {
+   if (!term || term.closed) {
+      // create and open a terminal
+      term = new Terminal(
+         {
+            handler: commandShell,
+            termDiv: &quot;termDiv&quot;,
+            ps: &quot;&gt;&quot;,
+            greeting: files.initscreen
+         }
+      );
+      term.open();
+
+      // create and configure the parser
+      parser = new Parser();
+      // only accept double and single quotes as quote characters
+      parser.quoteChars = { &quot;\&quot;&quot;: true, &quot;'&quot;: true };
+      // set &quot;-&quot; (minus) as the option character (same as default)
+      parser.optionChars = { &quot;-&quot;: true };
+   }
+}
+
+function commandShell() {
+   this.newLine();
+   parser.parseLine(this);
+   if (this.argv.length == 0) {
+      // no commmand line input
+   }
+   else {
+      var cmd = this.argv[this.argc++]; // we advance argc to point to the next chunk
+      cmd = cmd.toLowerCase();          // case insensitive (dumb shell)
+
+      // now handle each command
+      switch (cmd) {
+         // &quot;system&quot; commands
+         case &quot;help&quot;:
+            // display a help screen
+            this.clear();
+            this.write(files.help);
+            break;
+         case &quot;exit&quot;:
+            // just quit with grace
+            this.close();
+            return;
+
+         // implement a command &quot;type [-p] &lt;filename&gt;&quot;
+         case &quot;type&quot;:
+            // read option &quot;p&quot;
+            var opts = parser.getopt(this, &quot;p&quot;);
+            if (opts.illegals.length) {
+               // other option flags found
+               this.write(&quot;Error: Illegal option.&quot;);
+            }
+            else if (this.argc != this.argv.length-1) {
+               this.write(&quot;Error: Illegal argument list.&quot;);
+            }
+            else {
+               var filename = this.argv[this.argc];
+               var file = files[filename];
+               if (file) {
+                  if (opts.p) {
+                     // write in more-mode
+                     this.write(file, true);
+                     return;
+                  }
+                  else {
+                     this.write(file);
+                  }
+               }
+               else {
+                   this.write(&quot;Error: No such file '&quot;+filename+&quot;'.&quot;);
+               }
+            }
+            break;
+
+         // implement a command &quot;print &lt;filename&gt; [/p]&quot;
+         case &quot;print&quot;:
+            if (this.argv.length&gt;this.argc) {
+               var filename = this.argv[this.argc];
+               if (this.argQL[this.argc] || filename.charAt(0) != &quot;/&quot;) {
+                  // filename quoted or not an option =&gt; suppose it's legal
+                  // advance argc
+                  this.argc++;
+                  // get option /p
+                  // overwrite default optionChars with forward slash
+                  parser.optionChars = { &quot;/&quot;: true };
+                  var opts = parser.getopt(this, &quot;p&quot;);
+                  // now reset the optionChars
+                  parser.optionChars = { &quot;-&quot;: true };
+                  // check and execute ...
+                  if (opts.illegals.length) {
+                     this.write(&quot;Error: Illegal option.&quot;);
+                  }
+                  else {
+                     var file = files[filename];
+                     if (file) {
+                        if (opts.p) {
+                           this.write(file, true);
+                           return;
+                        }
+                        else {
+                           this.write(file);
+                        }
+                     }
+                     else {
+                        this.write(&quot;Error: No such file '&quot;+filename+&quot;'.&quot;);
+                     }
+                  }
+               }
+               else {
+                  this.write(&quot;Error: Illegal argument list.&quot;);
+               }
+            }
+            else {
+               this.write(&quot;Error: Missing argument list.&quot;);
+            }
+            break;
+
+         // not a known command
+         default:
+            this.write(&quot;Not a command: &quot;+cmd);
+      }
+   }
+   this.prompt();
+}
+
+// eof
+	</td>
+	</tr>
+	</table>
+</td>
+<td>
+	<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+	<tr><td>&nbsp;</td></tr>
+	</table>
+</td>
+</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/readme.txt b/com.ogamita.www/nasium-lse/terminal/termlib/readme.txt
new file mode 100644
index 0000000..0b8489e
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/readme.txt
@@ -0,0 +1,2375 @@
+****  mass:werk termlib.js - JS-WebTerminal Object v1.57  ****
+
+  (c) Norbert Landsteiner 2003-2010
+  mass:werk - media environments
+  <http://www.masswerk.at>
+
+
+
+
+### COMPATIBILITY WARNING ###
+
+Dropped support of Netscape 4 (layers) with version 1.5!
+Netscape 4 is now outdated for more than 10 years. Any further support of this browser
+would be of academic nature. As a benefit this step allows us to include the socket
+extension in the main library, so there are no additional files to load anymore.
+
+
+For the first time there is a backward compatibility issue from version 1.3 to version 1.4:
+The following applies to the style vector for the `type()' method while using colors:
+
+   while with version 1.3 a color was encoded using the color code times 16 (0xf), e.g.:
+
+      myTerm.type( 'This is red.', 2*16 );
+
+   this changed with version 1.4 to the color code times 256 (0xff), e.g.:
+
+      myTerm.type( 'This is red.', 2*256 );
+
+
+All other style encodings or color API remain unchanged.
+Since this feature was only introduced in version 1.3 and there are no known applications
+that would use a statement like the above (since you would usually use the `write()' method
+for complex output), this seems to be good bargain for some codes for custom styles.
+C.f.: sect 7.5 "TermGlobals.assignStyle()"
+
+
+### Mac OS X Dead-Keys ###
+
+(Dead-keys: combinations of accents and characters that are built by two consecutively pressed keys.)
+Mac OS X 10.5 and later doesn't fire a keyboard event for dead keys anymore.
+It's possible to fix this for Safari by a custom dead keys emulation, but not for Chrome or Firefox.
+"termlib.js" provides automatic translations of common dead-keys for Safari in German (de-de).
+In case you would need dead-keys for another language, please contact me via http://www.masswerk.at/.
+
+
+
+Contents:
+
+   1  About
+   2  Creating a new Terminal Instance
+      2.1 Configuration Values
+   3  Using the Terminal
+      3.1  The Default Handler
+      3.2  Input Modes
+           3.2.1  Normal Line Input (Command Line Mode)
+                  3.2.1.2 Special Keys (ctrlHandler)
+           3.2.2  Raw Mode
+           3.2.3  Character Mode
+      3.3  Other Handlers
+           3.3.1  initHandler
+           3.3.2  exitHandler
+      3.4  Flags for Behaviour Control
+   4  Output Methods
+           4.1  Terminal.type()
+           4.2  Terminal.write()
+           4.3  Terminal.typeAt()
+           4.4  Terminal.setChar()
+           4.5  Terminal.newLine()
+           4.6  Terminal.clear()
+           4.7  Terminal.statusLine()
+           4.8  Terminal.printRowFromString()
+           4.9  Terminal.redraw()
+           4.10 Using Color
+           4.11 Text Wrap - Terminal.wrapOn(), Terminal.wrapOff()
+           4.12 ANSI Support
+   5  Cursor Methods and Editing
+           5.1  Terminal.cursorOn()
+           5.2  Terminal.cursorOff()
+           5.3  Terminal.cursorSet()
+           5.4  Terminal.cursorLeft()
+           5.5  Terminal.cursorRight()
+           5.6  Terminal.backspace()
+           5.7  Terminal.fwdDelete()
+           5.8  Terminal.isPrintable()
+   6  Other Methods of the Terminal Object
+           6.1  Terminal.prompt()
+           6.2  Terminal.reset()
+           6.3  Terminal.open()
+           6.4  Terminal.close()
+           6.5  Terminal.focus()
+           6.6  Terminal.moveTo()
+           6.7  Terminal.resizeTo()
+           6.8  Terminal.getDimensions()
+           6.9  Terminal.rebuild()
+           6.10 Terminal.backupScreen();
+           6.11 Terminal.restoreScreen();
+           6.12 Terminal.swapBackup();
+   7  Global Static Methods (TermGlobals)
+           7.1  TermGlobals.setFocus()
+           7.2  TermGlobals.keylock (Global Locking Flag)
+           7.3  TermGlobals Text Methods
+                7.3.1  TermGlobals.normalize()
+                7.3.2  TermGlobals.fillLeft()
+                7.3.3  TermGlobals.center()
+                7.3.4  TermGlobals.stringReplace()
+           7.4  TermGlobals Import Methods
+                7.4.1  TermGlobals.insertText()
+                7.4.2  TermGlobals.importEachLine()
+                7.4.3  TermGlobals.importMultiLine()
+           7.5  TermGlobals.assignStyle()
+   8  Localization
+   9  The Socket Extension (Remote Communication)
+           9.1  A First Example
+           9.2  The send() API
+           9.3  Global Config Settings
+           9.4  The Callback (Response Handling)
+           9.5  Error Codes
+           9.6  Note on Compatibly / Browser Requirements
+           9.7  termlib_socket.js Version History
+  10  Cross Browser Functions
+  11  Architecture, Internals
+      11.1  Global Entities
+      11.2  I/O Architecture
+      11.3  Compatibility
+  12  History
+  13  Example for a Command Line Parser
+  14  License
+  15  Disclaimer
+  16  Donations
+  17  References
+
+
+
+
+1  About
+
+The Terminal library "termlib.js" provides an object oriented constructor and control
+methods for a terminal-like DHTML interface.
+
+"termlib.js" features direct keyboard input and powerful output methods for multiple
+instances of the `Terminal' object (including focus control).
+"termlib.js" also comprises methods for a transparent handling of client-server com-
+munications via XMLHttpRequests (see sect. 9 "The Socket Extension").
+
+The library was written with the aim of simple usage and a maximum of compatibility with
+minimal foot print in the global namespace.
+
+
+A simple example:
+
+  // creating a terminal and using it
+
+  var term = new Terminal( {handler: termHandler} );
+  term.open();
+
+  function termHandler() {
+    var line = this.lineBuffer;
+    this.newLine();
+    if (line == "help") {
+      this.write(helpPage)
+    }
+    else if (line == "exit") {
+      this.close();
+      return;
+    }
+    else if (line != "") {
+      this.write("You typed: "+line);
+    }
+    this.prompt();
+  }
+
+  var helpPage = [
+    "This is the monstrous help page for my groovy terminal.",
+    "Commands available:",
+    "   help ... print this monstrous help page",
+    "   exit ... leave this groovy terminal",
+    " ",
+    "Have fun!"
+  ];
+
+
+You should provide CSS font definitions for the classes ".term" (normal video) and
+".termReverse" (reverse video) in a monospaced font.
+A sample stylesheet "term_styles.css" comes with this library.
+
+See the sample application "multiterm_test.html" for a demo of multiple terminals.
+
+v.1.01: If you configure to use another font class (see 2.1 Configuration Values),
+        you must provide a subclass ".termReverse" for reversed video.
+
+        p.e.: .myFontClass .termReverse {
+                /* your definitions for reverse video here */
+              }
+
+        With the addition of `conf.fontClass' you can now create multiple
+        instances with independend appearences.
+
+
+
+
+2   Creating a new Terminal Instance
+
+Use the `new' constructor to create a new instance of the Terminal object. You will want
+to supply a configuration object as an argument to the constructor. If the `new'
+constructor is called without an object as its first argument, default values are used.
+
+p.e.:
+
+  // creating a new instance of Terminal
+
+  var conf= {
+    x: 100,
+    y: 100,
+    cols: 80,
+    rows: 24
+  }
+
+  var term = new Term(conf);
+  term.open();
+
+`Terminal.open()' initializes the terminal and makes it visible to the user.
+This is handled in by separate method to allow the re-initilization of instances
+previously closed.
+
+NOTE:
+The division or HTML-element that holds the terminal must be present when calling
+`Terminal.open()'. So you must not call this method from the header of a HTML-document at
+compile time.
+
+
+
+2.1 Configuration Values
+
+Set any of these values in your configuration object to override:
+
+
+  LABEL                     DEFAULT VALUE    COMMENT
+
+  x                                   100    terminal's position x in px
+  y                                   100    terminal's position y in px
+  divDiv                        'termDiv'    id of terminals CSS division
+  bgColor                       '#181818'    background color (HTML hex value)
+  frameColor                    '#555555'    frame color (HTML hex value)
+  frameWidth                            1    frame border width in px
+  fontClass                        'term'    class name of CSS font definition to use
+  cols                                 80    number of cols per row
+  rows                                 24    number of rows
+  rowHeight                            15    a row's line-height in px
+  blinkDelay                          500    delay for cursor blinking in milliseconds
+  crsrBlinkMode                     false    true for blinking cursor
+  crsrBlockMode                      true    true for block-cursor else underscore
+  DELisBS                           false    handle <DEL> as <BACKSPACE>
+  printTab                           true    handle <TAB> as printable (prints as space)
+  printEuro                          true    handle unicode 0x20AC (Euro sign) as printable
+  catchCtrlH                         true    handle ^H as <BACKSPACE>
+  closeOnESC                         true    close terminal on <ESC>
+  historyUnique                     false    prevent consecutive and identical entries in history
+  id                                    0    terminal id
+  ps                                  '>'    prompt string
+  greeting      '%+r Terminal ready. %-r'    string for greeting if no initHandler is used
+  handler                   defaultHandler    reference to handler for command interpretation
+  ctrlHandler                        null    reference to handler called on uncatched special keys
+  initHandler                        null    reference to handler called at end of init()
+  exitHandler                        null    reference to handler called on close()
+  wrapping                          false    text wrapping for `write()' on/off
+  mapANSI                           false    enable mapping of ANSI escape sequences (SGR only)
+  ANSItrueBlack                     false    force ANSI 30m to be rendered as black (default: fg color)
+
+
+At least you will want to specify `handler' to implement your own command parser.
+
+Note: While `id' is not used by the Termninal object, it provides an easy way to identify
+multiple terminals by the use of "this.id". (e.g.: "if (this.id == 1) startupterm = true;")
+
+p.e.:
+
+  // creating two individual Terminal instances
+
+  var term1 = new Terminal(
+    {
+      id: 1,
+      x: 200,
+      y: 10,
+      cols: 80,
+      rows: 12,
+      greeting: "*** This is Terminal 1 ***",
+      handler: myTerminalHandler
+    }
+  );
+  term1.open();
+
+  var term2 = new Terminal(
+    {
+      id: 2,
+      x, 200,
+      y: 220,
+      cols: 80
+      rows: 12,
+      greeting: "*** This is Terminal 2 ***",
+      handler: myTerminalHandler
+    }
+  );
+  term2.open();
+
+
+
+
+3   Using the Terminal
+
+There are 4 different handlers that are called by a Terminal instance to process input and
+some flags to control the input mode and behaviour.
+
+
+
+3.1 The Default Handler (a simlple example for input handling)
+
+If no handlers are defined in the configuration object, a default handler is called to
+handle a line of user input. The default command line handler `defaultHandler' just
+closes the command line with a new line and echos the input back to the user:
+
+  function termDefaultHandler() {
+    this.newLine();
+    if (this.lineBuffer != '') {
+      this.type('You typed: '+this.lineBuffer);
+      this.newLine();
+    }
+    this.prompt();
+  }
+
+  // Note: This used to be top level function. With version 1.4 `termDefaultHandler' became
+  // a reference to the method `Terminal.prototype.defaultHandler'.
+
+First you may note that the instance is refered to as `this'. So you need not worry about
+which Terminal instance is calling your handler. As the handler is entered, the terminal
+is locked for user input and the cursor is off. The current input is available as a string
+value in `this.lineBuffer'.
+
+The method `type(<text>)' just does what it says and types a string at the current cursor
+position to the terminal screen.
+
+`newLine()' moves the cursor to a new line.
+
+The method `prompt()' adds a new line if the cursor isn't at the start of a line, outputs
+the prompt string (as specified in the configuration), activates the cursor, and unlocks
+the terminal for further input. While you're doing normal command line processing, always
+call `prompt()' when leaving your handler.
+
+In fact this is all you need to create your own terminal application. Please see at least
+the method `write()' for a more powerful output method.
+
+Below we will refer to all methods of the Terminal object as `Terminal.<method>()'.
+You can call them as `this.<method>()' in a handler or as methods of your named instance
+in other context (e.g.: "myTerminal.close()").
+
+[In technical terms these methods are methods of the Terminal's prototype object, while
+the properties are properties of a Termninal instance. Since this doesn't make any
+difference to your script, we'll refer to both as `Terminal.<method-or-property>'.]
+
+
+
+3.2 Input Modes
+
+3.2.1 Normal Line Input (Command Line Mode)
+
+By default the terminal is in normal input mode. Any printable characters in the range of
+ASCII 0x20 - 0xff are echoed to the terminal and may be edited with the use of the cursor
+keys and the <BACKSPACE> key.
+The cursor keys UP and DOWN let the user browse in the command line history (the list of
+all commands issued previously in this Terminal instance).
+
+If the user presses <CR> or <ENTER>, the line is read from the terminal buffer, converted
+to a string, and placed in `Terminal.lineBuffer' (-> `this.lineBuffer') for further use.
+The terminal is then locked for further input and the specified handler
+(`Terminal.handler') is called.
+
+
+3.2.1.2 Special Keys (ctrlHandler)
+
+If a special character (ASCII<0x20) or an according combination of <CTRL> and a key is
+pressed, which is not caught for editing or "enter", and a handler for `ctrlHandler' is
+specified, this handler is called.
+The ASCII value of the special character is available in `Terminal.inputChar'. Please note
+that the terminal is neither locked, nor is the cursor off - all further actions have to
+be controlled by `ctrlHandler'. (The tracking of <CTRL>-<key> combinations as "^C" usually
+works but cannot be taken for granted.)
+
+A named reference of the special control values in POSIX form (as well as the values of
+the cursor keys [LEFT, RIGHT, UP, DOWN]) is available in the `termKey' object.
+
+Note:
+With version 1.4 `termKey' is a reference to `Terminal.prototype.globals.termKey'.
+This object is also mapped to `Terminal.prototype.termKey', so you may also access it as
+"this.termKey" inside handlers.
+
+p.e.:
+
+  // a simple ctrlHandler
+
+  function myCtrlHandler() {
+    if (this.inputChar == termKey.ETX) {
+      // exit on ^C (^C == ASCII 0x03 == <ETX>)
+      this.close();
+    }
+  }
+
+If no `ctrlHandler' is specified, control keys are ignored (default).
+
+
+3.2.2 Raw Mode
+
+If the flag `Terminal.rawMode' is set to a value evaluating to `true', no special keys are
+tracked but <CR> and <ENTER> (and <ESC>, if the flag `Terminal.closeOnESC' is set).
+The input is NOT echoed to the terminal. All printable key values [0x20-0xff] are
+transformed to characters and added to `Terminal.lineBuffer' sequentially. The command
+line input is NOT added to the history.
+
+This mode is especially suitable for password input.
+
+p.e.:
+
+  // using raw mode for password input
+
+  function myTermHandler() {
+    this.newLine();
+    // we stored a flag in Terminal.env to track the status
+    if (this.env.getpassword) {
+      // leave raw mode
+      this.rawMode = false;
+      if (passwords[this.env.user] == this.lineBuffer) {
+        // matched
+        this.type('Welcome '+this.env.user);
+        this.env.loggedin = true;
+      }
+      else {
+        this.type('Sorry.');
+      }
+      this.env.getpassword = false;
+    }
+    else {
+      // simple parsing
+      var args = this.lineBuffer.split(' ');
+      var cmd = args[0];
+      if (cmd == 'login') {
+        var user = args[1];
+        if (!user) {
+          this.type('usage: login <username>');
+        }
+        else {
+          this.env.user = user;
+          this.env.getpassword = true;
+          this.type('password? ');
+          // enter raw mode
+          this.rawMode = true;
+          // leave without prompt so we must unlock first
+          this.lock = false;
+          return;
+        }
+      }
+      /*
+        other actions ...
+      */
+    }
+    this.prompt();
+  }
+
+In this example a handler is set up to process the command "login <username>" and ask for
+a password for the given user name in raw mode. Note the use of the object `Terminal.env'
+which is just an empty object set up at the creation of the Terminal instance. Its only
+purpose is to provide an individual namespace for private data to be stored by a Terminal
+instance.
+
+NOTE: The flag `Terminal.lock' is used to control the keyboard locking. If we would not
+set this to `false' before leaving in raw mode, we would be caught in dead-lock, since no
+input could be entered and our handler wouldn't be called again. - A dreadful end of our
+terminal session.
+
+NOTE: Raw mode utilizes the property `Terminal.lastLine' to collect the input string.
+This is normally emty, when a handler is called. This is not the case if your script left
+the input process on a call of ctrlHandler. You should clear `Terminal.lastLine' in such
+a case, if you're going to enter raw mode immediatly after this.
+
+
+3.2.3 Character Mode
+
+If the flag `Terminal.charMode' is set to a value evaluating to `true', the terminal is in
+character mode. In this mode the numeric ASCII value of the next key typed is stored in
+`Terminal.inputChar'. The input is NOT echoed to the terminal. NO locking or cursor
+control is performed and left to the handler.
+You can use this mode to implement your editor or a console game.
+`Terminal.charMode' takes precedence over `Terminal.rawMode'.
+
+p.e.:
+
+  // using char mode
+
+  function myTermHandler() {
+    // this is the normal handler
+    this.newLine();
+    // simple parsing
+    var args = this.lineBuffer.split(' ');
+    var cmd = args[0];
+    if (cmd == 'edit') {
+      // init the editor
+      myEditor(this);
+      // redirect the handler to editor
+      this.handler = myEditor;
+      // leave in char mode
+      this.charMode = true;
+      // show cursor
+      this.cursorOn();
+      // don't forget unlocking
+      this.lock = false;
+      return;
+    }
+    /*
+      other actions ...
+    */
+    this.prompt();
+  }
+
+  function myEditor(initterm) {
+    // our dummy editor (featuring modal behaviour)
+    if (initterm) {
+      // perform initialization tasks
+      initterm.clear();
+      initterm.write('this is a simple test editor; leave with <ESC> then "q"%n%n');
+      initterm.env.mode = '';
+      // store a reference of the calling handler
+      initterm.env.handler = initterm.handler;
+      return;
+    }
+    // called as handler -> lock first
+    this.lock=true;
+    // hide cursor
+    this.cursorOff();
+    var key = this.inputChar;
+    if (this.env.mode == 'ctrl') {
+      // control mode
+      if (key == 113) {
+        // "q" => quit
+        // leave charMode and reset the handler to normal
+        this.charMode = false;
+        this.handler = this.env.handler;
+        // clear the screen
+        this.clear();
+        // prompt and return
+        this.prompt();
+        return;
+      }
+      else {
+        // leave control mode
+        this.env.mode = '';
+      }
+    }
+    else {
+      // edit mode
+      if (key == termKey.ESC) {
+        // enter control mode
+        // we'd better indicate this in a status line ...
+        this.env.mode = 'ctrl';
+      }
+      else if (key == termKey.LEFT) {
+        // cursor left
+      }
+      else if (key == termKey.RIGHT) {
+        // cursor right
+      }
+      if (key == termKey.UP) {
+        // cursor up
+      }
+      else if (key == termKey.DOWN) {
+        // cursor down
+      }
+      else if (key == termKey.CR) {
+        // cr or enter
+      }
+      else if (key == termKey.BS) {
+        // backspace
+      }
+      else if (key == termKey.DEL) {
+        // fwd delete
+        // conf.DELisBS is not evaluated in charMode!
+      }
+      else if (this.isPrintable(key)) {
+        // printable char - just type it
+        var ch = String.fromCharCode(key);
+        this.type(ch);
+      }
+    }
+    // leave unlocked with cursor
+    this.lock = false;
+    this.cursorOn();
+  }
+
+
+Note the redirecting of the input handler to replace the command line handler by the
+editor. The method `Terminal.clear()' clears the terminal.
+`Terminal.cursorOn()' and `Terminal.cursorOff()' are used to show and hide the cursor.
+
+
+
+3.3 Other Handlers
+
+There are two more handlers that can be specified in the configuration object:
+
+
+3.3.1 initHandler
+
+`initHandler' is called at the end of the initialization triggered by `Terminal.open()'.
+The default action - if no `initHandler' is specified - is:
+
+  // default initilization
+
+  this.write(this.conf.greeting);
+  this.newLine();
+  this.prompt();
+
+Use `initHandler' to perform your own start up tasks (e.g. show a start up screen). Keep
+in mind that you should unlock the terminal and possibly show a cursor to give the
+impression of a usable terminal.
+
+
+3.3.2  exitHandler
+
+`exitHandler' is called by `Terminal.close()' just before hiding the terminal. You can use
+this handler to implement any tasks to be performed on exit. Note that this handler is
+called even if the terminal is closed on <ESC> outside of your inputHandlers control.
+
+See the file "multiterm_test.html" for an example.
+
+
+
+3.4   Overview: Flags for Behaviour Control
+
+These falgs are accessible as `Terminal.<flag>' at runtime. If not stated else, the
+initial value may be specified in the configuration object.
+The configuration object and its properties are accessible at runtime via `Terminal.conf'.
+
+
+  NAME                      DEFAULT VALUE    MEANING
+
+  blink_delay                         500    delay for cursor blinking in milliseconds.
+
+  crsrBlinkMode                     false    true for blinking cursor.
+                                             if false, cursor is static.
+
+  crsrBlockMode                      true    true for block-cursor else underscore.
+
+  DELisBS                           false    handle <DEL> as <BACKSPACE>.
+
+  printTab                           true    handle <TAB> as printable (prints as space)
+                                             if false <TAB> is handled as a control character
+
+  printEuro                          true    handle the euro sign as valid input char.
+                                             if false char 0x20AC is printed, but not accepted
+                                             in the command line
+
+  catchCtrlH                         true    handle ^H as <BACKSPACE>.
+                                             if false, ^H must be tracked by a custom
+                                             ctrlHandler.
+
+  closeOnESC                         true    close terminal on <ESC>.
+                                             if true, <ESC> is not available for ctrHandler.
+
+
+  historyUnique                     false    unique history entries.
+                                             if true, entries that are identical to the last
+                                             entry in the user history will not be added.
+
+  charMode                          false    terminal in character mode (tracks next key-code).
+                                             (runtime only)
+
+  rawMode                           false    terminal in raw mode (no echo, no editing).
+                                             (runtime only)
+
+  wrapping                          false    text wrapping on/off
+
+  mapANSI                           false    filter ANSI escape sequences and apply SGR styles
+                                             and color codes for write()
+
+  ANSItrueBlack                     false    force output of ANSI code 30m (black) as black
+                                             (default: render color 0 as foreground color)
+
+
+Not exactly a flag but useful:
+
+  ps                                  '>'    prompt string.
+
+
+
+
+4  Output Methods
+
+Please note that any output to the terminal implies an advance of the cursor. This means,
+that if your output reaches the last column of your terminal, the cursor is advanced and
+a new line is opened automatically. This procedure may include scrolling to make room for
+the new line. While this is not of much interest for most purposes, please note that, if
+you output a string of length 80 to a 80-columns-terminal, and a new line, and another
+string, this will result in an empty line between the two strings.
+
+
+4.1  Terminal.type( <text> [,<stylevector>] )
+
+Types the string <text> at the current cursor position to the terminal. Long lines are
+broken where the last column of the terminal is reached and continued in the next line.
+`Terminal.write()' does not support any kind of arbitrary line breaks. (This is just a
+basic output routine. See `Terminal.write()' for a more powerful output method.)
+
+A bitvector may be supplied as an optional second argument to represent a style or a
+combination of styles. The meanings of the bits set are interpreted as follows:
+
+<stylevector>:
+
+   1 ... reverse    (2 power 0)
+   2 ... underline  (2 power 1)
+   4 ... italics    (2 power 2)
+   8 ... strike     (2 power 3)
+  16 ... bold       (2 power 4)  *displayed as italics, used internally for ANSI-mapping*
+
+So "Terminal.type( 'text', 5 )" types "text" in italics and reverse video.
+
+Note:
+There is no bold, for most monospaced fonts (including Courier) tend to render wider in
+bold. Since this would bring the terminal's layout out of balance, we just can't use bold
+as a style. - Sorry.
+
+The HTML-representation of this styles are defined in "TermGlobals.termStyleOpen" and
+"TermGlobals.termStyleClose".
+(Version 1.4: "TermGlobals" is now a reference to "Terminal.prototype.globals".)
+
+Version 1.2 introduces additional styles for colors.
+Please read also sect. 4.10 "Using Color" for the extended color values.
+
+
+4.2  Terminal.write( <text> [,<usemore>] )
+
+Writes a text with markup to the terminal. If an optional second argument evaluates to
+true, a UN*X-style utility like `more' is used to page the text. The text may be supplied
+as a single string (with newline character "\n") or as an array of lines. Any other input
+is transformed to a string value before output.
+
+4.2.1 Mark-up:
+
+`Terminal.write()' employs a simple mark-up with the following syntax:
+
+<markup>: %((+|-)<style>|n|CS|%)
+
+   where "+" and '-' are used to switch on and off a style, where
+
+   <style>:
+
+      "i" ... italics
+      "r" ... reverse
+      "s" ... strike
+      "u" ... underline
+
+      "p" ... reset to plain ("%+p" == "%-p")
+
+   styles may be combined and may overlap. (e.g. "This is %+rREVERSE%-r, %+uUNDER%+iSCORE%-u%-i.")
+
+   "%n"  represents a new line (in fact "\n" is translated to "%n" before processing)
+
+   "%CS" clears the terminal screen
+
+   "%%"  represents the percent character ('%')
+
+Version 1.2 introduces an additional syntax for colors:
+
+	<color-style> ::= %c(<value>|"("<color-label>")")
+
+Please read also sect. 4.10 "Using Color" for the extended color syntax.
+
+Version 1.51 introduces the mapping of ANSI escape sequences. To use this option you must supply
+the flag `mapANSI' with a true value in the config-object or set `this.mapANSI' to `true' at run-
+time. Currently supported are SGR codes foreground colors and type styles. Other sequences are
+just filtered out. See section 4.12 "ANSI Support" for more.
+
+
+4.2.2 Buffering:
+
+`Terminal.write()' writes via buffered output to the terminal. This means that the
+provided text is rendered to a buffer first and then only the visible parts are transfered
+to the terminal display buffers. This avoids scrolling delays for long output.
+
+4.2.3 UseMore Mode:
+
+The buffering of `Terminal.write()' allows for pagewise output, which may be specified by
+a second boolean argument. If <usemore> evaluates to `true' and the output exceeds the
+range of empty rows on the terminal screen, `Terminal.write()' performs like the UN*X
+utility `more'. The next page may be accessed by hitting <SPACE> while <q> terminates
+paging and returns with the prompt (-> `Terminal.prompt()').
+
+To use this facillity make sure to return immediatly after calling `Terminal.write()' in
+order to allow the more-routine to track the user input.
+The terminal is set to "charMode == false" afterwards.
+
+p.e.:
+
+  // using Terminal.write as a pager
+
+  function myTermHandler() {
+    this.newLine();
+    var args = this.lineBuffer.split(' ');
+    var cmd = args[0];
+    if (cmd == 'more') {
+      var page = args[1];
+      if (myPages[page]) {
+        // Terminal.write as a pager
+        this.write(myPages[page], true);
+        return;
+      }
+      else {
+        // Terminal.write for simple output
+        this.write('no such page.');
+      }
+    }
+    /*
+      other actions ...
+    */
+    this.prompt();
+  }
+
+
+4.2.4 Text Wrap
+
+Starting with version 1.3 "termlib.js" supports automatic text wrapping with
+`Terminal.write()'. (Text wrapping is off by default.)
+
+Use `Terminal.wrapOn()' to enable wrapping, use `Terminal.wrapOff()' to turn it off again.
+Use the property "wrapping" of the configuration object to turn wrapping globaly on.
+
+For details see sect. 4.11 "Text Wrap - Terminal.wrapOn(), Terminal.wrapOff()"
+
+
+4.3  Terminal.typeAt( <r>, <c>, <text> [,<stylevector>] )
+
+Output the string <text> at row <r>, col <c>.
+For <stylevector> see `Terminal.type()'.
+`Terminal.typeAt()' does not move the cursor.
+
+
+4.4  Terminal.setChar( <charcode>, <r>, <c> [,<stylevector>] )
+
+Output a single character represented by the ASCII value of <charcode> at row <r>, col <c>.
+For <stylevector> see `Terminal.type()'.
+
+
+4.5  Terminal.newLine()
+
+Moves the cursor to the first column of the next line and performs scrolling, if needed.
+
+
+4.6  Terminal.clear()
+
+Clears the terminal screen. (Returns with cursor off.)
+
+
+4.7  Terminal.statusLine( <text> [,<stylevector> [,<lineoffset>]] )
+
+All output acts on a logical screen with the origin at row 0 / col 0. While the origin is
+fixed, the logical width and height of the terminal are defined by `Terminal.maxCols' and
+`Terminal.maxLines'. These are set to the configuration dimensions at initilization and by
+`Terminal.reset()', but may be altered at any moment. Please note that there are no bounds
+checked, so make sure that `Terminal.maxCols' and `Terminal.maxLines' are less or equal
+to the configuration dimensions.
+
+You may want to decrement `Terminal.maxLines' to keep space for a reserved status line.
+`Terminal.statusLine( <text>, <style> )' offers a simple way to type a text to the last
+line of the screen as defined by the configuration dimensions.
+
+  // using statusLine()
+
+  function myHandler() {
+    // ...
+    // reserve last line
+    this.maxLines = term.conf.rows-1;
+    // print to status line in reverse video
+    this.statusLine("Status: <none>", 1);
+    // ...
+  }
+
+For multiple status lines the optional argument <lineoffset> specifies the addressed row,
+where 1 is the line closest to the bottom, 2 the second line from the bottom and so on.
+(default: 1)
+
+
+4.8  Terminal.printRowFromString( <r> , <text> [,<stylevector>] )
+
+Outputs the string <text> to row <r> in the style of an optional <stylevector>.
+If the string's length exceeds the length of the row  (up to `Terminal.conf.cols'), extra
+characteres are ignored, else any extra space is filled with character code 0 (prints as
+<SPACE>).
+The valid range for <row> is: 0 >= <row> < `Terminal.maxLines'.
+`Terminal.printRowFromString()' does not set the cursor.
+
+You could, for example, use this method to output a line of a text editor's buffer.
+
+p.e.:
+
+  // page refresh function of a text editor
+
+  function myEditorRefresh(termref, topline) {
+    // termref: reference to Terminal instance
+    // topline: index of first line to print
+    // lines of text are stored in termref.env.lines
+    for (var r=0; r<termref.maxLines; r++) {
+      var i = topline + r;
+      if (i < termref.env.lines.length) {
+        // output stored line
+        termref.printRowFromString(r, termref.env.lines[i]);
+      }
+      else {
+        // output <tilde> for empty line
+        termref.printRowFromString(r, '~');
+      }
+    }
+    // set cursor to origin
+    termref.r = termref.c = 0; // same as termref.cursorSet(0, 0);
+  }
+
+
+4.9  Terminal.redraw( <row> )
+
+Basic function to redraw a terminal row <row> according to screen buffer values.
+For hackers only. (e.g.: for a console game, hack screen buffers first and redraw all
+changed rows at once.)
+
+
+4.10  Using Color
+
+With version 1.2 termlib.js introduces support for colors.
+Colors are controlled using the styles interface of the type() and write() methods.
+
+Usage:
+
+As any style settings colors are controlled by the "%<style>" markup of the write() method,
+where <style> starts with a "c" for "color".
+
+"termlib.js" supports 3 different color systems:
+
+1) The first approach mimics the ANSI color approach as known from most terminals:
+
+There is a set of 16 colors (1 default color and 15 configurable colors):
+
+  color name     code     color string    synonyms
+  ----------------------------------------------------------------
+  default         0       *empty*         clear, ""
+  black           1       #000000
+  red             2       #ff0000         red1
+  green           3       #00ff00         green1
+  yellow          4       #ffff00         yellow1
+  blue            5       #0066ff         blue1
+  magenta         6       #ff00ff         magenta1
+  cyan            7       #00ffff         cyan1
+  white           8       #ffffff
+  grey            9       #808080         gray
+  darkred         A       #990000         red2
+  darkgreen       B       #009900         green2
+  darkyellow      C       #999900         yellow2
+  darkblue        D       #003399         blue2
+  darkmagenta     E       #990099         magenta2
+  darkcyan        F       #009999         cyan2
+
+
+"default" or "clear" refers always to the configured default color.
+
+Code values from "A" to "F" (may be lower case) indicate hex values from 10 to 15.
+
+You may change the color string using the method
+`TermGlobals.setColor( <label>, <colorstring> )', where <label> is the name or code
+of a color and <colorstring> a valid CSS color value.
+
+
+Examples:
+
+  // changing the color string used for "red"
+  TermGlobals.setColor( "red", "#880000" );
+  TermGlobals.setColor( "2", "#880000" );
+  TermGlobals.setColor( 2, "#880000" );
+  // changing darkred
+  TermGlobals.setColor( "darkred", "#440000" );
+  TermGlobals.setColor( "A", "#440000" );
+  TermGlobals.setColor( 10, "#440000" );
+
+You may also access the currently used color string using the method
+`TermGlobals.getColorString( <label> )' or look up a color's code using
+`TermGlobals.getColorCode( <label> )'.
+
+Note on `TermGlobals' and version 1.4 or higher:
+`TermGlobals' is now a reference to `Terminal.prototype.globals', so you may also use the
+following inside a handler: "this.globals.setColor( 'red', '#880000' );".
+
+
+
+Writing with color:
+
+You may switch the color using the markup "%c(<color name>)" and switch back to the default
+color using "%c(default)" or "%c(clear)" or just "%c()" or "%c0".
+
+Alternatively to color names you may use a one-digit hex code "%+c<color-code>" where
+<color-code> is in the range from "0" to "F" (case insensitive).
+
+Examples:
+
+  myTerm.write("Switching to %c(red)RED%c(default) and back again.");
+  myTerm.write("Switching to %c2RED%c0 and back again.");
+
+  myTerm.write("Switching to %c(darkred)DARKRED%c() and back again.");
+  myTerm.write("Switching to %caDARKRED%c0 and back again.");
+
+With version 1.4 or higher you may also use a color code (hex or decimal) inside brackets
+(resulting in a unified color markup syntax "%c(...)"):
+
+  myTerm.write("Switching to %c(2)RED%c(0) and back again.");
+  myTerm.write("Switching to %c(02)RED%c(0) and back again.");
+
+  myTerm.write("Switching to %c(a)DARKRED%c() and back again.");
+  myTerm.write("Switching to %c(10)DARKRED%c() and back again.");
+
+
+Note that %c0, %c(0), %c(), %c(default), %c(clear) are just synonyms for the default color.
+For the following examples we'll use "%c()" for this.
+
+
+All the color names and codes are case insensitive ("RED" == "red").
+As with all styles, setting a color applies to the single write() only.
+
+Using the type() method the color values correspond to the bytes 8 to 11 (bitmask xf00) of
+the style-vector. (This means you have to multiply the color code by 256 or 0xff.)
+
+Examples:
+
+  myTerm.type("This is green.", 3*256);
+  myTerm.type("This is green and reverse.", 3*256 + 1);
+
+
+2) Using named web colors (Netscape colors)
+
+As a second approach you may use any of the 16 standard named colors or any of the 120
+additional Netscape colors.
+
+All you have to do to access this second color set is to prefix the color name with "@".
+
+Examples:
+
+  myterm.write("Switching to %c(@burlywood)burlywood%c() and back again.");
+  myterm.write("Switching to %c(@lightseagreen)lightseagreen%c() and back again.");
+
+
+There are no color codes associated with this. Internally the bits 8 to 15 of the style
+vector (bitmask 0xff00) are used for these colors. (Values start with or 0x1000.)
+
+The names of these 136 colors are:
+
+aliceblue antiquewhite aqua aquamarine azure beige black blue blueviolet brown burlywood
+cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson darkblue darkcyan
+darkgoldenrod darkgray darkgreen darkkhaki darkmagenta darkolivegreen darkorange
+darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkturquoise
+darkviolet deeppink deepskyblue dimgray dodgerblue firebrick floralwhite forestgreen
+fuchsia gainsboro ghostwhite gold goldenrod gray green greenyellow honeydew hotpink
+indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue
+lightcoral lightcyan lightgoldenrodyellow lightgreen lightgrey lightpink lightsalmon
+lightseagreen lightskyblue lightslategray lightsteelblue lightyellow lime limegreen linen
+maroon mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen
+mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream
+mistyrose moccasin navajowhite navy oldlace olive olivedrab orange orangered orchid
+palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink plum
+powderblue purple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell
+sienna silver skyblue slateblue slategray snow springgreen steelblue tan teal thistle
+tomato turquoise violet wheat white whitesmoke yellow yellowgreen
+
+As above all color names are not case sensitive.
+
+The values of this color set is fixed, you cannot change them using
+TermGlobals.setColor(). (The codes of this set are mapped internally to color strings.
+Changing these would be possible, but would not make much sense.)
+
+
+3) Using the web color set
+
+Finally you may use any of the 216 standard web colors.
+You access these by a leading "# and the 6-hex-digit color code of the color.
+(You may use also the 3-digit CSS format for these colors).
+
+Examples:
+
+  myterm.write("Switching to %c(#ff0000)red%c() and back again.");
+  myterm.write("Switching to %c(#f00)red%c() and back again.");
+
+Again there are no accessible color codes associated to these. Internally these colors are
+mapped to the bitmask 0xff0000 of the style vector.
+
+If the given color code is not part of the web color set, but represents a valid color in
+6-digit format or in short 3-digit notation, the color will be matched to the nearest web
+color available (e.g. "#9a44ee" => "#9933ff").
+
+The available color codes are (in long notation):
+
+000000 000033 000066 000099 0000cc 0000ff 003300 003333 003366 003399 0033cc 0033ff 006600
+006633 006666 006699 0066cc 0066ff 009900 009933 009966 009999 0099cc 0099ff 00cc00 00cc33
+00cc66 00cc99 00cccc 00ccff 00ff00 00ff33 00ff66 00ff99 00ffcc 00ffff 330000 330033 330066
+330099 3300cc 3300ff 333300 333333 333366 333399 3333cc 3333ff 336600 336633 336666 336699
+3366cc 3366ff 339900 339933 339966 339999 3399cc 3399ff 33cc00 33cc33 33cc66 33cc99 33cccc
+33ccff 33ff00 33ff33 33ff66 33ff99 33ffcc 33ffff 660000 660033 660066 660099 6600cc 6600ff
+663300 663333 663366 663399 6633cc 6633ff 666600 666633 666666 666699 6666cc 6666ff 669900
+669933 669966 669999 6699cc 6699ff 66cc00 66cc33 66cc66 66cc99 66cccc 66ccff 66ff00 66ff33
+66ff66 66ff99 66ffcc 66ffff 990000 990033 990066 990099 9900cc 9900ff 993300 993333 993366
+993399 9933cc 9933ff 996600 996633 996666 996699 9966cc 9966ff 999900 999933 999966 999999
+9999cc 9999ff 99cc00 99cc33 99cc66 99cc99 99cccc 99ccff 99ff00 99ff33 99ff66 99ff99 99ffcc
+99ffff cc0000 cc0033 cc0066 cc0099 cc00cc cc00ff cc3300 cc3333 cc3366 cc3399 cc33cc cc33ff
+cc6600 cc6633 cc6666 cc6699 cc66cc cc66ff cc9900 cc9933 cc9966 cc9999 cc99cc cc99ff cccc00
+cccc33 cccc66 cccc99 cccccc ccccff ccff00 ccff33 ccff66 ccff99 ccffcc ccffff ff0000 ff0033
+ff0066 ff0099 ff00cc ff00ff ff3300 ff3333 ff3366 ff3399 ff33cc ff33ff ff6600 ff6633 ff6666
+ff6699 ff66cc ff66ff ff9900 ff9933 ff9966 ff9999 ff99cc ff99ff ffcc00 ffcc33 ffcc66 ffcc99
+ffcccc ffccff ffff00 ffff33 ffff66 ffff99 ffffcc ffffff
+
+As above all color codes are not case sensitive.
+
+The values of this color set is fixed, you cannot change them using
+`TermGlobals.setColor()'. (The codes of this set are mapped internally to color strings.
+Changing these would be possible, but would not make much sense.)
+
+
+All this adds up to the complete color-markup syntax:
+
+  <color-markup>     ::= "%c"<color-expression>
+  <color-expression> ::= <hex-digit> | <label-expression>
+  <label-expression> ::= "("<internal-color>|"@"<netscape-color>"|#"<web-color>")"
+  <hex-digit>        ::= "0" - "F"
+  <internal-color>   ::= any of the names referring to the 16 internal colors
+                         or any decimal or hex value 0 <= n < 15
+  <netscape-color>   ::= any of the names of the 136 named netscape colors
+  <web-color>        ::= any of the codes of the 216 standard web colors
+
+
+In short, there are three color sets available:
+
+    * One for configurable colors, you access them by a hex digit or "(<name>)"
+    * One for netscape color names, you access them by "(@<name>)"
+    * One for web colors, you access them by "(#<code>)"
+
+Generally any color-markup begins with "%c" and is followed by one of the three notations.
+"%c0", "%c()", or "%c(default)" switch back to the default color.
+
+Supplying an invalid or non-matching color label or value will result in switching back to
+the default color. (e.g. "%c(xxx)" == "%c()")
+
+
+For general style issues c.f. sect 4.1 "Terminal.type()" and sect 4.2 "Terminal.write()".
+
+
+
+4.11  Text Wrap - Terminal.wrapOn(), Terminal.wrapOff()
+
+Starting with version 1.3 there is built in support for automatic text wrapping.
+Text wrapping is OFF by default.
+
+Please note that text wrapping is only supported for the `write()' method.
+
+Set the property "wrapping" of the configuration to `true' object to turn wrapping on
+globally.
+
+To turn on/of wrapping at run time use one of the following:
+
+    * use `Terminal.wrapOn()' to turn wrapping on
+    * use `Terminal.wrapOff()' to turn wrapping off
+    * set the the flag `Terminal.wrapping' to true/false.
+
+"termlib.js" even supports conditional/soft word breaks: Use the <form feed>-character
+("\f" == ASCII 12) for a conditional word break.
+
+Wrapping behaviours are configured on a per-character basis in `TermGlobals.wrapChars':
+
+TermGlobals.wrapChars = {
+  // values: 1 = white space, 2 = wrap after, 3 = wrap before, 4 = conditional word break
+  9:  1, // tab
+  10: 1, // new line - don't change this (used internally)!!!
+  12: 4, // form feed (use this for conditional word breaks)
+  13: 1, // cr
+  32: 1, // blank
+  40: 3, // (
+  45: 2, // dash/hyphen
+  61: 2, // =
+  91: 3, // [
+  94: 3, // caret (non-printing chars)
+  123:3  // {
+}
+
+values and meanings:
+   1 ... white space, ommited at line ends
+   2 ... wrap only after (e.g. a dash/hyphen)
+   3 ... wrap before
+   4 ... conditional/soft word break (in breaks substituted by a hyphen ASCII 45)
+
+The default configuration evaluetes to this:
+	* break on (e.g. space, tab), ommit these chars at line ends
+	* break after "-" and "="
+	* break before "(", "[", "{", and non-printable (caret)
+	* soft break at form feeds (\f)
+
+
+4.12  ANSI Support
+
+Version 1.51 introduces limited support for ANSI escape sequences.
+If the option `mapANSI' is set to `true', any ANSI-sequences are filtered from the
+input stream of the method `write()' and translated to internal markup.
+Currently only a subset of the SGR (Select Graphic Rendition) codes are supported.
+Other sequences are just deleted from the input stream.
+
+ANSI escape sequences are of the form <CSI><parameters><letter>
+
+where
+
+   * CSI is either the multi-byte the Sequence <escape> (0x19) "["
+         or the single escape character 0x9b (decimal 155)
+
+   * parameters is either a single number, a semicolon-separated list of numbers,
+         or empty
+
+   * letter a upper- or lower-case letter (currently only "m" supported)
+
+
+List of supported SGR codes (letter "m"):
+
+code    effect                 notes
+-------------------------------------------------------------------------------
+0       Reset / Normal         default rendition (implementation-defined),
+                               cancels the effect of any preceding occurrence of SGR
+1       Intensity: Bold        rendered as italics by default, see note
+3       Italics: on
+4       Underline: Single
+7       Negative Image         reverse
+9       Crossed-out            characters still legible but marked as to be deleted
+21      Underline: Double      rendered as simple underline
+22      Intensity: Normal      not bold
+23      Italics: off
+24      Underline: off         both single and double
+27      Positive Image         reverse off
+29      not crossed out
+30-39   Set foreground color,
+        normal intensity       3x, see color table
+90-99   Set foreground color,
+        high intensity         9x, see color table
+
+Color Table
+
+code    name         internal     notes
+                  representation
+------------------------------------------------------------------
+30      black           0         default foreground color, or
+                        1         with option ANSItrueBlack = true
+31      red             10
+32      green           11
+33      yellow          12
+34      blue            13
+35      magenta         14
+36      cyan            15
+37      white           #999      effect: light grey
+39      reset           0
+90      bright black    9         effect: dark grey
+91      bright red      2
+92      bright green    3
+93      bright yellow   4
+94      bright blue     5
+95      bright magenta  6
+96      bright cyan     7
+97      bright white    8
+99      reset           0         (not a standard)
+
+
+Note on bold (1m): As bold type is not a sane font-face on default, "bold" is rendered
+as italics by default. For this a special internal style 16, markup-charcter "b" is used.
+
+You may override this setting for true bold face by assigning a new style:
+
+   TermGlobals.assignStyle(
+      16,      // style code
+      "b",     // markup character
+      "<b>",   // html start string
+      "</b>"   // html end string
+   );
+
+Make sure to define CSS with proper letter-spacing to compansate for the wider character
+widths of bold type. (See the "sample_style_settings.html" for further information.)
+
+As ANSI-mapping will be considered for the use with server-generated text files, it will
+be usefull to escape any "%" (termlib.js markup escape) in the text first. You may find
+the method `escapeMarkup(<text>)' handy for this purpose.
+
+Usage Example:
+
+   var myterm = new Terminal(
+      {
+         mapANSI: true,       // enable ANSI mapping
+         ANSItrueBlack: true  // force black in stead of renderung as fg color
+      }
+    );
+
+    myterm.open();
+    var escapedText = myterm.escapeMarkup( ANSIencodedText );
+    myterm.write( escapedText, true );
+
+
+All ANSI-code-to-markup-mapping is defined in the static object
+"Terminal.prototype.globals.ANIS_SGR_codes" (or short: "TermGlobals.ANIS_SGR_codes").
+
+See the file "sample_ansi_mapping.html" for further information.
+
+
+
+
+5  Cursor Methods and Editing
+
+
+5.1  Terminal.cursorOn()
+
+Show the cursor.
+
+
+5.2  Terminal.cursorOff()
+
+Hide the cursor.
+
+
+5.3  Terminal.cursorSet( <r>, <c> )
+
+Set the cursor position to row <r> column <c>.
+`Terminal.cursorSet()' preserves the cursor's active state (on/off).
+
+
+5.4  Terminal.cursorLeft()
+
+Move the cursor left. (Movement is restricted to the logical input line.)
+`Terminal.cursorLeft()' preserves the cursor's active state (on/off).
+
+
+5.5  Terminal.cursorRight()
+
+Move the cursor right. (Movement is restricted to the logical input line.)
+`Terminal.cursorRight()' preserves the cursor's active state (on/off).
+
+
+5.6  Terminal.backspace()
+
+Delete the character left from the cursor, if the cursor is not in first position of the
+logical input line.
+`Terminal.backspace()' preserves the cursor's active state (on/off).
+
+
+5.7  Terminal.fwdDelete()
+
+Delete the character under the cursor.
+`Terminal.fwdDelete()' preserves the cursor's active state (on/off).
+
+
+5.8  Terminal.isPrintable( <key code> [,<unicode page 1 only>] )
+
+Returns `true' if the character represented by <key code> is printable with the current
+settings. An optional second argument <unicode page 1 only> limits the range of valid
+values to 255 with the exception of the Euro sign, if the flag `Terminal.printEuro' is set.
+(This second flag is used for input methods but not for output methods. So you may only
+enter portable characters, but you may print others to the terminals screen.)
+
+
+
+
+6  Other Methods of the Terminal Object
+
+6.1  Terminal.prompt()
+
+Performes the following actions:
+
+  * advance the cursor to a new line, if the cursor is not at 1st column
+  * type the prompt string (as specified in the configuaration object)
+  * show the cursor
+  * unlock the terminal
+
+(The value of the prompt string can be accessed and changed in `Terminal.ps'.)
+
+
+6.2  Terminal.reset()
+
+Resets the terminal to sane values and clears the terminal screen.
+
+
+6.3  Terminal.open()
+
+Opens the terminal. If this is a fresh instance, the HTML code for the terminal is
+generated. On re-entry the terminal's visibility is set to `true'. Initialization tasks
+are performed and the optional initHandler called. If no initHandler is specified in the
+configuration object, the greeting (configuration or default value) is shown and the user
+is prompted for input.
+
+v.1.01: `Terminal.open()' now checks for the existence of the DHTML element as defined in
+        `Terminal.conf.termDiv' and returns success.
+
+
+6.4  Terminal.close()
+
+Closes the terminal and hides its visibility. An optional exitHandler (specified in the
+configuration object) is called, and finally the flag `Terminal.closed' is set to true. So
+you can check for existing terminal instances as you would check for a `window' object
+created by `window.open()'.
+
+p.e.:
+
+  // check for a terminals state
+  // let array "term" hold references to terminals
+
+  if (term[n]) {
+    if (term[n].closed) {
+      // terminal exists and is closed
+      // re-enter via "term[n].open()"
+    }
+    else {
+      // terminal exists and is currently open
+    }
+  }
+  else {
+    // no such terminal
+    // create it via "term[n] = new Terminal()"
+  }
+
+
+6.5  Terminal.focus()
+
+Set the keyboard focus to this instance of Terminal. (As `window.focus()'.)
+
+
+6.6  Terminal.moveTo( <x>, <y> )
+
+Move the terminal to position <x>/<y> in px.
+(As `window.moveTo()', but inside the HTML page.)
+
+
+6.7  Terminal.resizeTo( <x>, <y> )
+
+Resize the terminal to dimensions <x> cols and <y> rows.
+<x> must be at least 4, <y> at least 2.
+`Terminal.resizeTo()' resets `Terminal.conf.rows', `Terminal.conf.cols',
+`Terminal.maxLines', and `Terminal.maxCols' to <y> and <x>, but leaves the instance' state
+else unchanged. Clears the terminal's screen and returns success.
+
+(A bit like `window.resizeTo()', but with rows and cols instead of px.)
+
+
+6.8  Terminal.getDimensions()
+
+Returns an object with properties "width" and "height" with numeric values for the
+terminal's outer dimensions in px. Values are zero (0) if the element is not present or
+if the method fails otherwise.
+
+
+6.9  Terminal.rebuild()
+
+Rebuilds the Terminal object's GUI preserving its state and content.
+Use this to change the color theme on the fly.
+
+p.e.:
+
+   // change color settings on the fly
+   // here: set bgColor to white and font style to "termWhite"
+   // method rebuild() updates the GUI without side effects
+
+   term.conf.bgColor = '#ffffff';
+   term.conf.fontClass = 'termWhite';
+   term.rebuild();
+
+
+6.10  Terminal.backupScreen()
+
+Backups the current terminal screen, state, and handlers to the internal object
+"backupBuffer". Use this if you want to go full screen or if you want to display an
+interactive dialog or a warning. Use `Terminal.restoreScreen()' to restore the former
+state of the terminal instance. (See the file "sample_globbing.html" for an example.)
+
+Please note that any call of method `Terminal.rebuild()' will clear the buckup buffer
+to avoid any errors or undefined cases resulting from changing screen sizes.
+
+
+6.11  Terminal.restoreScreen()
+
+Restores a terminal instance from a backup made by a previous call to
+`Terminal.backupScreen()'. This resets the screen, the terminal's state and handlers.
+
+
+6.12  Terminal.swapBackup()
+
+Swaps the backup buffer and the current state of the terminal instance. (E.g.: do/undo)
+If the backup buffer is empty (null), just like `Terminal.backupScreen()'.
+
+
+
+
+
+7   Global Static Methods (TermGlobals)
+
+
+Note:
+With version 1.4 TermGlobals is just a reference mapped to "Terminal.prototype.globals".
+So inside a handler these properties and methods may also be accessed as "this.globals".
+
+
+7.1  TermGlobals.setFocus( <termref> )
+
+Sets the keyboard focus to the instance referenced by <termref>.
+The focus is controlled by `TermGlobals.activeTerm' which may be accessed directly.
+See also: `Terminal.focus()'
+
+
+7.2  TermGlobals.keylock (Global Locking Flag)
+
+The global flag `TermGlobals.keylock' allows temporary keyboard locking without any
+other change of state. Use this to free the keyboard for any other resources.
+(added in v.1.03)
+
+
+7.3  TermGlobals Text Methods
+
+There is a small set of methods for common terminal related string tasks:
+
+
+7.3.1  TermGlobals.normalize( <n>, <fieldlength> )
+
+Converts a number to a string, which is filled at its left with zeros ("0") to the total
+length of <filedlength>. (e.g.: "TermGlobals.normalize(1, 2)" => "01")
+
+
+7.3.2  TermGlobals.fillLeft( <value>, <fieldlength> )
+
+Converts a value to a string and fills it to the left with blanks to <fieldlength>.
+
+
+7.3.3  TermGlobals.center( <text>, <length> )
+
+Adds blanks at the left of the string <text> until the text would be centered at a line
+of length <length>. (No blanks are added to the the right.)
+
+
+7.3.4  TermGlobals.stringReplace( <string1>, <string2>, <text> )
+
+Replaces all occurences of the string <string1> in <text> with <string2>.
+This is just a tiny work around for browsers with no support of RegExp.
+
+
+7.4  TermGlobals Import Methods
+
+There are three different methods to import/paste a text string to the active instance
+of Terminal:
+
+
+7.4.1  TermGlobals.insertText( <string> )
+
+Inserts the given string at the current cursor position. Use this method to paste a
+single line of text (e.g.: as part of a command) to the terminal.
+Returns a boolean value success.
+(If there is no active terminal, or the terminal is locked or the global keylock
+`TermGlobals.keylock' is set to `true', the method will return false to indicate
+its failing. Else the method returns true for success.)
+
+7.4.2  TermGlobals.importEachLine( <string> )
+
+Breaks the given string to lines and imports each line to the active terminal.
+Each line will be imported and executed sequentially (just as a user would have typed
+it on the keyboard and hit <ENTER> afterwards).
+Any text in the current command line will be lost.
+Returns success (see 7.4.1).
+
+7.4.3  TermGlobals.importMultiLine( <string> )
+
+Imports the given string to the active terminal. The text will be imported as single
+string and executed once. The text will be available in the terminal's `lineBuffer'
+property with any line breaks normalized to newlines (\n).
+As with `TermGlobals.importEachLine()' any text in the current command line will be
+lost.
+Returns success (see 7.4.1).
+
+
+7.5  TermGlobals.assignStyle( <style-code>, <markup>, <HTMLopen>, <HTMLclose> )
+
+`TermGlobals.assignStyle()' allows you to install a custom style (new with vers. 1.4).
+You usually would want to install a new style before opening any instance of Terminal
+in order to have the style ready for use.
+
+`TermGlobals.assignStyle()' takes for arguments:
+
+    <style-code>: a number to be used in the style vector to identify this style.
+                  <style-code> must be power of 2 between 0 and 256
+                  (<style-code> = 2^n, 0 <= n <= 7)
+
+	<markup>:     a one letter string to be used for markup (case insensitive)
+
+	<HTMLopen>:   the (heading) opening HTML clause for a range in this style
+
+	<HTMLclose>:  the (trailing) closing HTML clause for a range in this style
+
+
+Example 1:
+
+    // install style #32 as bold, markup "b"
+
+    TermGlobals.assignStyle( 32, 'b', '<b>', '</b>' );
+
+    // now we may use this in a write statement:
+
+    myTerm.write( 'This is %+bBOLD%-b.' );
+
+
+Example 2:
+
+    // override strike (#16) to be displayed as bold:
+    TermGlobals.assignStyle( 16, 'b', '<b>', '</b>' );
+
+
+Please mind that "c" and "p" are reserved markup-codes.
+"termlib.js" has the following preinstalled styles in use:
+
+    STYLE-CODE  MARK-UP  MEANING
+
+    1           "r"      reverse
+    2           "u"      underline
+    4           "i"      italics
+    8           "s"      strike
+   16           "b"      bold (renders as italics, used internally for ANSI-mapping)
+
+You would usually not want to change style #1 (reverse) since this style is used
+for the cursor in block mode.
+(The same applies for #2 / underline for the cursor, when block mode is off.)
+
+Unlike all other methods of termlib.js `TermGlobals.assignStyle()' alerts any errors.
+(Since these errors will usually be detected in development phase, these alerts should
+not bother the users of your application.)
+
+
+
+
+8   Localization
+
+The strings and key-codes used by the more utility of `Terminal.write()' are the only
+properties of "termlib.js" that may need localization. These properties are defined in
+`TermGlobals'. You may override them as needed:
+
+PROPERTY                                      STANDARD VALUE                  COMMENT
+
+TermGlobals.lcMorePrompt1                                    ' -- MORE -- '   1st string
+TermGlobals.lcMorePromtp1Style                                            1   reverse
+TermGlobals.lcMorePrompt2       ' (Type: space to continue, \'q\' to quit)'   appended string
+TermGlobals.lcMorePrompt2Style                                            0   plain
+TermGlobals.lcMoreKeyAbort                                              113   (key-code: q)
+TermGlobals.lcMoreKeyContinue                                            32   (key-code <SPACE>)
+
+
+As "TermGlobals.lcMorePrompt2" is appended to "TermGlobals.lcMorePrompt1" make sure that
+the length of the combined strings does not exceed `Terminal.conf.cols'.
+
+Note:
+With version 1.4 TermGlobals is just a reference mapped to "Terminal.prototype.globals".
+So inside a handler these properties may also be accessed as "this.globals".
+
+
+
+
+9   The Socket Extension (Remote Communication)
+
+The socket extension provides an easy way to integrate any AJAX/JSON
+requests for server-client communication into "termlib.js".
+
+The socket extension provides an easy way for client-server
+communication via asynchronous XMLHttpRequests (commonly known as AJAX or JSON).
+
+See the file "sample_socket.html" for an example.
+
+
+9.1  A First Example
+
+The socket extension provides a tight integration for all XMLHttpRequest
+tasks that would commonly occur in a real world application.
+
+All you have to do, is call the new send( <options> ) method and return.
+The request (might it succeed or fail) will come back to your
+callback-handler with your Terminal instance set as the this object.
+
+example:
+
+  // assume we are inside a handler
+  // ("this" refers to an instance of Terminal)
+
+  var myDataObject = {
+      book: 'Critique of pure reason',
+      chapter: 7,
+      page: 4
+  };
+
+  this.send(
+    {
+      url:      "my_service.cgi",
+      method:   "post",
+      data:     myDataObject,
+      callback: mySocketCallback
+    }
+  );
+  return;
+
+  function mySocketCallback() {
+    if (this.socket.succes) {
+       // status 200 OK
+       this.write("Server said:\n" + this.socket.responseText);
+    }
+    else if (this.socket.errno) {
+       // connection failed
+       this.write("Connection error: " + this.socket.errstring);
+    }
+    else {
+       // connection succeeded, but server returned other status than 2xx
+       this.write("Server returned: " +
+                  this.socket.status + " " + this.socket.statusText);
+    }
+    this.prompt()
+  }
+
+
+9.2  The send() API
+
+As send( <options> ) is called the socket library creates a
+XMLHttpRequest, collects and escapes the provided data, executes any
+initial tasks, and sends the request.
+
+All settings are transfered via a single options-object containing one
+ore more of the following options:
+
+  url         the request url, must be on the same host (default "")
+
+  method      request method (GET or POST; default GET)
+
+  data        request data (default ""), may be of any type, preferably an
+              object with key-value pairs.
+              the data is serialized and escaped for you by the library. (Please note
+              that there might be unexpected results with nested objects or arrays. By
+              the way: arrays are serialized as comma separated lists.) For complex
+              data structures use a XML-object (true AJAX, see below).
+              The resulting string will be either appended to the request url (GET) or
+              used as post-body.
+
+  callback    the callback-function to handled the response
+
+
+  advanced settings:
+
+  postbody    Use this for true AJAX (e.g. sending a XML-object to the server)
+              If a postbody option is supplied, this will change the behavior as follows:
+              1) the request method is forced to "POST"
+              2) the postbody will be used instead of any supplied data object
+              3) the postbody will be transmitted as is (no serializing or escaping)
+
+              (Note: The creation and parsing of XML-objects is out of the scope of this
+              document and termlib.js and is therefor left entirely up to you.)
+
+  userid      optional user-id for implicit login (transfered without  encryption!)
+
+  password    optional password for implicit login (transfered without encryption!)
+
+  mimetype    optional MIME-type to override the response's default MIME
+
+  headers     optional object (key-value pairs) of HTTP-headers to be included in the
+              request
+
+  getHeaders  optional array (or object with labels as keys) of HTTP-headers to be
+              extracted from the response
+
+  timeout     optional individual timeout for this request (default 10000)
+
+
+send() will add a parameter "_termlib_reqid" with a unique id to every
+GET request that doesn't target the local file system (sent from pages
+with the "file:" schemes). This additional parameter ensures that MSIE
+(MS Internet Explorer) will truly fetch the requested document instead
+of serving it from its cache.
+
+
+A word on local requests:
+
+Please note that local requests (from and to the local file system)
+won't work with MSIE 7. (Sorry, ask Bill.) This MSIE 7 error will be
+captured as connection error with errno 2 ("Could not open
+XMLHttpRequest.").
+If a browser requests a local document that does not exist, a 404 (Not
+Found) status code will be generated by the library and the errno
+property will be set to 5 ("The requested local document was not found.").
+
+
+9.3  Global Config Settings
+
+There are a few global settings in
+Terminal.prototype._HttpSocket.prototype (the prototype of the internal
+socket object used by the library), which define some default values:
+
+  useXMLEncoding   Boolean flag (default: false) for parameter delimiters
+                   if false, parameters will be delimited by "&".
+                   if true, parameters will be delimited using ";" (new XML
+                   compatible syntax).
+  defaulTimeout    Number of ticks (milliseconds, default: 10000 = 10 sec)
+                   for request timeout, if not specified else.
+  defaultMethod    String (default: "GET"); request method to use, if not
+                   specified else.
+  forceNewline     Boolean flag (default: true): translate line breaks in
+                   the responseText to newlines (\n).
+
+
+9.4  The Callback (Response Handling)
+
+Any request issued by send() will trigger the handler specified by the
+callback option (or a basic default-handler). The callback will be
+called in any case, should the request succeed, timeout or fail otherwise.
+
+All response data (and some of the request data) is provided in a
+temporary "socket object for your convenience. (This temporary object
+will be discarded just after the callback returns.) As the this object
+points to your instance of Terminal, this object will be available as
+"this.socket" inside your callback-handler.
+
+Properties of the socket object:
+
+  status        the HTTP status code (e.g.: 200, 404) or 0 (zero) on timeout
+                and network errors
+  statusText    the HTTP status text (e.g.: "OK", "Not Found")
+  responseText  the transmitted text (response body)
+                line breaks will be normalized to newlines (\n) if
+                _HttpSocket.prototype.forceNewline == true (default behavior)
+  responseXML   the response body as XML object (if applicable)
+  success       a simple boolean flag for a 2xx OK response
+  headers       object containing any HTTP headers (as key-value pairs) of the
+                response, which where requested by the "getHeaders"-option of
+                the send().
+                the header-labels are unified to "camelCase"
+                e.g.: "Content-Length" will be in headers.contentLength
+
+  stored request data:
+
+  url           the request url as specified in the send() options.
+  data          the data you called send() with
+  query         the composed query-string or postbody as transmitted to the host
+  method        the request method
+  errno         the internal error number (0: no error)
+  errstring     the internal error message ("": no error)
+
+
+Some of the response specific data (as status codes, or headers) might
+not be present with local connections.
+
+
+9.5  Error Codes
+
+Connection errors are classified with the following errno and errstring
+values:
+
+  errno   errstring                                       label
+
+  0       ""                                              OK
+  1       "XMLHttpRequest not implemented."               NOTIMPLEMENTED
+  2       "Could not open XMLHttpRequest."                FATALERROR
+  3       "The connection timed out."                     TIMEOUT
+  4       "Network error."                                NETWORKERROR
+  5       "The requested local document was not found."   LOCALFILEERROR
+
+
+The labels are implemented as key-value pairs in
+Termlib.prototype._HttpSocket.prototype.errno (type "object").
+Error codes (errno) are also accessible as this.socket.ErrorCodes at run-time.
+
+example:
+
+  // assume we are inside a handler
+  if (this.socket.errno == this.socket.ErrorCodes.TIMEOUT) {
+     this.write("Oops, the request encountered a timeout.");
+  }
+
+
+Inside an interactive terminal session you'll usually want to return
+just after send() and call prompt() at the end of your callback-handler.
+This way the terminal will keep blocked until the callback is finished.
+
+Aside from this, the socket extension provides also the means for
+background tasks (e.g. storing temporary status on a server etc.) that
+do not need visual feedback or user interaction. Since the requests are
+performed and handled asynchronous and object oriented, both will go
+side by side.
+
+
+
+
+10   Cross Browser Functions
+
+For DHTML rendering some methods - as needed by the Terminal library - are provided.
+These may also be accessed for other purposes.
+
+Note:
+With version 1.4 TermGlobals is just a reference mapped to "Terminal.prototype.globals".
+So inside a handler these methods may also be accessed as "this.globals".
+e.g.: "this.globals.setVisible( 'myDiv', true );"
+
+
+10.1  TermGlobals.writeElement( <element id>, <text> )
+
+Writes <text> to the DHTML element with id/name <element id>.
+
+10.2  TermGlobals.setElementXY( <element id>, <x>, <y> )
+
+Sets the DHTML element with id/name <element id> to position <x>/<y>.
+
+
+10.3  TermGlobals.setVisible( <element id>, <value> )
+
+If <value> evaluates to `true' show DHTML element with id/name <element id> else hide it.
+
+
+10.4  Custom Fixes for Missing String Methods
+
+Although `String.fromCharCode' and `String.prototype.charCodeAt' are defined by ECMA-262-2
+specifications, a few number of browsers lack them in their JavaScript implementation. At
+compile time custom methods are installed to fix this. Please note that they work only
+with ASCII characters and values in the range of [0x20-0xff].
+
+
+10.5  TermGlobals.setDisplay( <element id>, <value> )
+
+Sets the style.display property of the element with id/name <element id> to the given
+<value>. (added with v. 1.06)
+
+
+10.6  Browser Flags
+
+There are two flags used to control some special cases for the key handlers:
+
+    Terminal.isSafari (Boolean)
+    Terminal.isOpera (Boolean)
+
+They are set to `true', if the corresponding web browser is currently in use and default
+to `false' else.
+
+
+
+
+11   Architecture, Internals
+
+11.1  Global Entities
+
+The library is designed to leave only a small foot print in the namespace while providing
+suitable usability:
+
+  Globals defined in this library:
+
+    Terminal           (Terminal object, `new' constructor and prototype methods)
+    TerminalDefaults   (default configuration, static object)
+    termDefaultHandler (default command line handler, static function)
+    TermGlobals        (common vars and code for all instances, static object and methods)
+    termKey            (named mappings for special keys, static object)
+    termDomKeyRef      (special key mapping for DOM key constants, static object)
+
+
+  With version 1.4 "Terminal" is an entirely self contained object.
+  For comfort and backward compatibility these globals Objects remain mapped to the
+  following internal properties/objects:
+
+    * TerminalDefaults   => Terminal.prototype.Defaults
+    * termDefaultHandler => Terminal.prototype.defaultHandler
+    * termKey            => Terminal.prototype.globals.termKey
+                            see also: Terminal.prototype.termKey
+    * TermGlobals        => Terminal.prototype.globals
+    * termDomKeyRef      => Terminal.prototype.globals.termDomKeyRef
+
+
+  Required CSS classes for font definitions: ".term", ".termReverse".
+
+
+
+11.2  I/O Architecture
+
+The Terminal object renders keyboard input from keyCodes to a line buffer and/or to a
+special keyCode buffer. In normal input mode printable input is echoed to the screen
+buffers. Special characters like <LEFT>, <RIGHT>, <BACKSPACE> are processed for command
+line editing by the internal key-handler `TermGlobals.keyHandler' and act directly on the
+screen buffers. On <CR> or <ENTER> the start and end positions of the current line are
+evaluated (terminated by ASCII 0x01 at the beginning which separates the prompt from the
+user input, and any value less than ASCII 0x20 (<SPACE>) at the right end). Then the
+character representation for the buffer values in this range are evaluated and
+concatenated to a string stored in `Terminal.lineBuffer'. As this involves some
+ASCII-to-String-transformations, the range of valid printable input characters is limited
+to the first page of unicode characters (0x0020-0x00ff).
+
+There are two screen buffers for output, one for character codes (ASCII values) and one
+for style codes. Style codes represent combination of styles as a bitvector (see
+`Terminal.type' for bit values.) The method `Terminal.redraw(<row>)' finally renders the
+buffers values to a string of HTML code, which is written to the HTML entity holding the
+according terminal row. The character buffer is a 2 dimensional array
+`Terminal.charBuf[<row>][<col>]' with ranges for <row> from 0 to less than
+`Terminal.conf.rows' and for <col> from 0 to less than `Terminal.conf.cols'. The style
+buffer is a 2 dimensional array `Terminal.styleBuf[<row>][<col>]' with according ranges.
+
+So every single character is represented by a ASCII code in `Terminal.charBuf' and a
+style-vector in `Terminal.styleBuf'. The range of printable character codes is unlimitted
+but should be kept to the first page of unicode characters (0x0020-0x00ff) for
+compatibility purpose. (c.f. 8.4)
+
+Keyboard input is first handled on the `KEYDOWN' event by the handler `TermGlobals.keyFix'
+to remap the keyCodes of cursor keys to consistent values. (To make them distinctable from
+any other possibly printable values, the values of POSIX <IS4> to <IS1> where chosen.)
+The mapping of the cursor keys is stored in the properties LEFT, RIGHT, UP, and DOWN of
+the global static object `termKey'. (v.1.4: `Terminal.prototype.globals.termKey')
+
+The main keyboard handler `TermGlobals.keyHandler' (invoked on `KEYPRESS' or by
+`TermGlobals.keyFix') does some final mapping first. Then the input is evaluated as
+controlled by the flags `Terminal.rawMode' and `Terminal.charMode' with precedence of the
+latter. In dependancy of the mode defined and the handlers currently defined, the input
+either is ignored, or is internally processed for command line editing, or one of the
+handlers is called.
+(v.1.4: `TermGlobals.keyHandler' => `Terminal.prototype.globals.keyHandler'
+        `TermGlobals.keyFix'     => Terminal.prototype.globals.keyFix')
+
+In the case of the simultanous presecence of two instances of Terminal, the keyboard focus
+is controlled via a reference stored in `TermGlobals.activeTerm'. This reference is also
+used to evaluate the `this'-context of the key handlers which are methods of the static
+Object `TermGlobals'.
+(v.1.4: `TermGlobals.activeTerm' => `Terminal.prototype.globals.activeTerm')
+
+A terminal's screen consists of a HTML-table element residing in the HTML/CSS division
+spcified in `Terminal.conf.termDiv'. Any output is handled on a per row bases. The
+individual rows are either nested sub-divisions of the main divisions (used for browsers
+not compatible to the "Gecko" engine) or the indiviual table data elements (<TD>) of the
+terminal's inner table (used for browsers employing the "Gecko" engine).
+(This implementation was chosen for rendering speed and in order to minimize any screen
+flicker.) Any output or change of state in a raw results in the inner HTML contents of a
+row's HTML element to be rewritten. Please note that as a result of this a blinking cursor
+may cause a flicker in the line containing the cursor's position while displayed by a
+browser, which employs the "Gecko" engine.
+
+
+
+11.3  Compatibility
+
+Standard web browsers with a JavaScript implementation compliant to ECMA-262 2nd edition
+[ECMA262-2] and support for the anonymous array and object constructs and the anonymous
+function construct in the form of "myfunc = function(x) {}" (c.f. ECMA-262 3rd edion
+[ECMA262-3] for details). This comprises almost all current browsers but Konquerer (khtml)
+and versions of Apple Safari for Mac OS 10.0-10.28 (Safari < 1.1) which lack support for
+keyboard events.
+
+To provide a maximum of compatibilty the extend of language keywords used was kept to a
+minimum and does not exceed the lexical conventions of ECMA-262-2. Especially there is no
+use of the `switch' statement or the `RegExp' method of the global object. Also the use of
+advanced Array methods like `push', `shift', `splice' was avoided.
+
+The socket extension uses ECMA263-3 (JavaScript 1.5) syntax and requires
+an implementation of the XMLHttpRequest object (which is generated via
+ActiveX for MSIE).
+
+With version 1.5 (2010/01) support for Netscape 4 (layers) was dropped and the socket
+extension was included in the main library. For this the standard requirements are now
+to ECMA263-3 (JavaScript 1.5).
+
+Opera related:
+The Opera web browser fires some identical events and keyCodes for some extra keys, which
+can't be distinguished from the ordinary ones. These are all related to the extended key
+pad as listed in the following table:
+
+   keyCode   Normal Key      Opera Irregular
+   -----------------------------------------
+     35      # (pound mark)  End / Pos 2
+     36      $ (dollar)      Home / Pos 1
+     46      . (period)      Forward Delete
+
+
+
+
+12   History
+
+This library evolved from the terminal script "TermApp" ((c) N. Landsteiner 2003) and is
+in its current form a down scaled spinn-off of the "JS/UIX" project [JS/UIX] (evolution
+"JS/UIX v0.5"). c.f.: <http://www.masswerk.at/jsuix>
+
+v 1.01: added Terminal.prototype.resizeTo(x,y)
+        added Terminal.conf.fontClass (=> configureable class name)
+        Terminal.prototype.open() now checks for element conf.termDiv in advance
+          and returns success.
+
+v 1.02: added support for <TAB> and Euro sign
+          Terminal.conf.printTab
+          Terminal.conf.printEuro
+        and method Terminal.prototype.isPrintable(keycode)
+        added support for getopt to sample parser ("parser_sample.html")
+
+
+v 1.03: added global keyboard locking (TermGlobals.keylock)
+        modified Terminal.prototype.redraw for speed (use of locals)
+
+
+v 1.04: modified the key handler to fix a bug with MSIE5/Mac
+        fixed a bug in TermGlobals.setVisible with older MSIE-alike browsers without
+        DOM support.
+        moved the script of the sample parser to an individual document
+        => "termlib_parser.js" (HTML document is "parser_sample.html" as before)
+
+v 1.05: added config flag historyUnique.
+
+v 1.06: fixed CTRl+ALT (Windows alt gr) isn't CTRL any more
+        -> better support for international keyboards with MSIE/Win.
+        fixed double backspace bug for Safari;
+        added TermGlobals.setDisplay for setting style.display props
+        termlib.js now outputs lower case html (xhtml compatibility)
+        (date: 12'2006)
+
+v 1.07: added method Terminal.rebuild() to rebuild the GUI with new color settings.
+        (date: 01'2007)
+
+v 1.07a: added sample for text import (see faq).
+        (date: 03'2007)
+
+v 1.1:  fixed a bug in 'more' output mode (cursor could be hidden after quit)
+        added the socket extension in a separate file "termlib_socket.js".
+        (this is a separate file because we break our compatibility guide lines with
+        this IO/AJAX library.)
+        see chapter 11 for more.
+        included some more sample pages.
+
+v 1.2   added color support ("%[+-]c(<color>)" markup)
+        moved paste support from sample file to lib
+        * TermGlobals.insertText( <text>)
+        * TermGlobals.importEachLine( <text> )
+        * TermGlobals.importMultiLine( <text> )
+
+v 1.3   added word wrapping to write()
+        * activate with myTerm.wrapOn()
+        * deactivate with myTerm.wrapOff()
+        use conf.wrapping (boolean) for a global setting
+
+v 1.4   Terminal is now an entirely self-contained object
+        Global references to inner objects for backward compatipility:
+        * TerminalDefaults   => Terminal.prototype.Defaults
+        * termDefaultHandler => Terminal.prototype.defaultHandler
+        * termKey            => Terminal.prototype.globals.termKey
+                        see also: Terminal.prototype.termKey
+        * TermGlobals        => Terminal.prototype.globals
+        * termDomKeyRef      => Terminal.prototype.globals.termDomKeyRef
+
+        So in effect to outside scripts everything remains the same;
+        no need to rewrite any existing scripts.
+        You may now use "this.globals" inside any handlers
+        to refer to the static global object (TermGlobals).
+        You may also refer to key definitions as "this.termKey.*".
+        (Please mind that "this.termKey" is a reference to the static object
+        and not specific to the instance. A change to "this.termKey" will be
+        by any other instances of Terminal too.)
+
+        Added a new method TermGlobals.assignStyle() for custom styles & mark up.
+
+        Unified the color mark up: You may now use color codes (decimal or hex)
+        inside brackets. e.g.: %c(10)DARKRED%c() or %c(a)DARKRED%c()
+
+        Added key repeat for remapped keys (cursor movements etc).
+
+v 1.41  Fixed a bug in the word wrapping regarding write() output, when
+        the cursor was set with cursorSet() before.
+
+        Included the Termlib-Invaders sample application.
+
+v 1.42  Fixed a bug which caused Opera to delete 2 chars at once.
+        Introduced new property Terminal.isOpera (Boolean).
+        Added a compatibility note on Opera to the "Read Me" (this file, sect. 11.3).
+
+v 1.43  enhanced the ctrlHandler so it also catches ESC if flag closeOnESC
+        is set to false. fixed a bug with Safari which fired repeated events
+        for the ctrlHandler for TAB if flag printTab was set to false.
+
+v 1.5   Dropped support of Netscape 4 (layers).
+        Moved the socket extension ("termlib_socket.js") to the main file.
+        Added methods for screen/state backup and restore ("this.backupScreen()" and
+        "this.restoreScreen()").
+        Changed the license (c.f. sect 14)
+
+v 1.51  Added limited ANSI-support.
+        Cleaned up the code a little bit.
+        Added a jsmin-compacted version "termlib_compacted.js"
+
+v 1.52  Added method swapBackup().
+        Reorganized some of the accompanying files.
+        The Parser ("termlib_parse.js") is now a self contained object with a
+        constructor (see "parser_sample.html")
+
+v 1.53  Minor tweaks to the accompanying files.
+        Compacted versions are now organized in a dedicated subdirectory.
+
+v 1.54  Fixed BACK_SPACE for Opera, DELETE for Safari/WebKit
+
+v 1.55  Fixed dead keys issue for Mac OS (Leapard & later), vowels only.
+        (As this needs extensive translation tables, this fixes only
+        combinations of "^", "´", "`" with any vowel, and "~" with "n".
+        Please give feedback, if you need more.)
+
+v 1.56  Fixed a new ESC-key issue for Safari.
+
+v 1.57  Fixed the dead keys fix: Now only activated for Safari, German (de-de).
+
+v 1.58  Fixed a MS IE issue introduced in the last update.
+
+v 1.59  Dropped dead keys fix, fixed backspace for Safari.
+
+
+
+13  Example for a Command Line Parser
+
+  // parser example, splits command line to args with quoting and escape
+  // for use as `Terminal.handler'
+
+  function commandHandler() {
+    this.newLine();
+    var argv = [''];     // arguments vector
+    var argQL = [''];    // quoting level
+    var argc = 0;        // arguments cursor
+    var escape = false ; // escape flag
+    for (var i=0; i<this.lineBuffer.length; i++) {
+      var ch= this.lineBuffer.charAt(i);
+      if (escape) {
+        argv[argc] += ch;
+        escape = false;
+      }
+      else if ((ch == '"') || (ch == "'") || (ch == "`")) {
+        if (argQL[argc]) {
+          if (argQL[argc] == ch) {
+            argc ++;
+            argv[argc] = argQL[argc] = '';
+          }
+          else {
+            argv[argc] += ch;
+          }
+        }
+        else {
+          if (argv[argc] != '') {
+            argc ++;
+            argv[argc] = '';
+            argQL[argc] = ch;
+          }
+          else {
+            argQL[argc] = ch;
+          }
+        }
+      }
+      else if ((ch == ' ') || (ch == '\t')) {
+        if (argQL[argc]) {
+          argv[argc] += ch;
+        }
+        else if (argv[argc] != '') {
+          argc++;
+          argv[argc] = argQL[argc] = '';
+        }
+      }
+      else if (ch == '\\') {
+        escape = true;
+      }
+      else {
+        argv[argc] += ch;
+      }
+    }
+    if ((argv[argc] == '') && (!argQL[argc])) {
+      argv.length--;
+      argQL.length--;
+    }
+    if (argv.length == 0) {
+      // no commmand line input
+    }
+    else if (argQL[0]) {
+      // first argument quoted -> error
+      this.write("Error: first argument quoted by "+argQL[0]);
+    }
+    else {
+      argc = 0;
+      var cmd = argv[argc++];
+      /*
+        parse commands
+        1st argument is argv[argc]
+        arguments' quoting levels in argQL[argc] are of (<empty> | ' | " | `)
+      */
+      if (cmd == 'help') {
+        this.write(helpPage);
+      }
+      else if (cmd == 'clear') {
+        this.clear();
+      }
+      else if (cmd == 'exit') {
+        this.close();
+        return;
+      }
+      else {
+        // for test purpose just output argv as list
+        // assemple a string of style-escaped lines and output it in more-mode
+        s='   ARG  QL  VALUE%n';
+        for (var i=0; i<argv.length; i++) {
+          s += this.globals.stringReplace('%', '%%',
+                 this.globals.fillLeft(i, 6) +
+                 this.globals.fillLeft((argQL[i])? argQL[i]:'-', 4) +
+                 '  "' + argv[i] + '"'
+            ) + '%n';
+        }
+        this.write(s, 1);
+        return;
+      }
+    }
+    this.prompt();
+  }
+
+
+The file "parser_sample.html" features a stand-alone parser ("termlib_parser.js") very
+much like this. You are free to use it according to the termlib-license (see sect. 14).
+It provides configurable values for quotes and esape characters and imports the parsed
+argument list into a Terminal instance's namespace. ("parser_sample.html" and
+"termlib_parser.js" should accompany this file.)
+
+
+
+
+14   License
+
+This JavaScript-library is free.
+Include a visible backlink to <http://www.masswerk.at/termlib/> in the embedding web
+page or application. The library should always be accompanied by the "readme.txt" and
+the sample HTML-documents.
+
+Any changes to the library should be commented and be documented in the readme-file.
+Any changes must be reflected in the `Terminal.version' string as
+"Version.Subversion (compatibility)".
+
+If you want to support the development of termlib.js, see the section "Donations" below.
+
+
+
+
+15   Disclaimer
+
+This software is distributed AS IS and in the hope that it will be useful, but WITHOUT ANY
+WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
+PURPOSE. The entire risk as to the quality and performance of the product is borne by the
+user. No use of the product is authorized hereunder except under this disclaimer.
+
+
+
+
+16   Donations
+
+In case you like termlib.js, are using it commercially, and/or are making profit by its
+use, you may want to make a donation to support further maintenance and development or
+just to honor the labor and time it incorporates.
+
+You can donate anytime via PayPal:
+http://www.masswerk.at/termlib/donate/
+
+
+
+
+17   References
+
+[ECMA262-2] "ECMAScript Language Specification" Standard ECMA-262 2nd Edition
+            August 1998 (ISO/IEC 16262 - April 1998)
+
+[ECMA262-3] "ECMAScript Language Specification" Standard ECMA-262 3rd Edition Final
+            24 March 2000
+
+[JS/UIX]     JS/UIX - JavaScript Uniplexed Interface eXtension
+             <http://www.masswerk.at/jsuix/>
+
+
+
+
+
+Norbert Landsteiner / Vienna, Aug 2005 - Jan 2010
+mass:werk - media environments
+<http://www.masswerk.at>
+See web site for contact information.
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_ansi_mapping.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_ansi_mapping.html
new file mode 100644
index 0000000..0a75f47
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_ansi_mapping.html
@@ -0,0 +1,639 @@
+<html>
+<head>
+	<title>termlib ANSI-Mapping Sample</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script type="text/javascript">
+<!--
+
+// mass:werk, N.Landsteiner 2010
+
+var ANSI_CSI=String.fromCharCode(0x1b)+'[';
+
+function ansiExpression(p) {
+	return ANSI_CSI+String(p)+'m';
+}
+
+var term;
+
+var help = [
+	' termlib ANSI-mapping sample help: ',
+	'',
+	' * type "test" to see a demo for ANSI-escape code mapping.',
+	' * type "help" to see this page.',
+	' * type "exit" to quit.',
+	' '
+];
+
+
+var colorTable = [
+	ansiExpression(7)+' termlib ANSI-mapping sample: '+ansiExpression(0),
+	' ',
+	ansiExpression(3)+ansiExpression(4)+' color name      code       sample       comment'+ansiExpression(23)+'                               '+ansiExpression(0),
+	' black           30m    '+ansiExpression(30)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0)+'   "black" is displayed as config color',
+	' red             31m    '+ansiExpression(31)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0)+'    unless option ANSItrueBlack is true',
+	' green           32m    '+ansiExpression(32)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' yellow          33m    '+ansiExpression(33)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' blue            34m    '+ansiExpression(34)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' magenta         35m    '+ansiExpression(35)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' cyan            36m    '+ansiExpression(36)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' white           37m    '+ansiExpression(37)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' bright black    90m    '+ansiExpression(90)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' bright red      91m    '+ansiExpression(91)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' bright green    92m    '+ansiExpression(92)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' bright yellow   93m    '+ansiExpression(93)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' bright blue     94m    '+ansiExpression(94)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' bright magenta  95m    '+ansiExpression(95)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' bright cyan     96m    '+ansiExpression(96)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' bright white    97m    '+ansiExpression(97)+'normal '+ansiExpression(7)+'reverse'+ansiExpression(0),
+	' ',
+	'other supported ANSI SGR sequences:',
+	' 1m '+ansiExpression(1)+'bold'+ansiExpression(22)+', 3m '+ansiExpression(3)+'italics'+ansiExpression(23)+', 4m '+ansiExpression(4)+'underline'+ansiExpression(24)+', 7m '+ansiExpression(7)+'negative image'+ansiExpression(27)+', 9m '+ansiExpression(9)+'crossed out'+ansiExpression(29)+',%n 21m '+ansiExpression(21)+'underline double'+ansiExpression(24)
+];
+
+function termOpen() {
+	if ((!term) || (term.closed)) {
+		term = new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				bgColor: '#232e45',
+				mapANSI: true,
+				ANSItrueBlack: true,
+				initHandler: termInitHandler,
+				handler: termHandler,
+				exitHandler: termExitHandler
+			}
+		);
+		term.open();
+		// dimm UI text
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+}
+
+function termExitHandler() {
+	// reset the UI
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+function termInitHandler() {
+	// output a start up screen
+	this.write(colorTable);
+	// and leave with prompt
+	this.prompt();
+}
+
+function termHandler() {
+	// default handler + exit
+	this.newLine();
+	if (this.lineBuffer.search(/^\s*exit\s*$/i) == 0) {
+		this.close();
+		return;
+	}
+	else if (this.lineBuffer.search(/^\s*test\s*$/i) == 0) {
+		this.clear();
+		this.write(colorTable);
+	}
+	else if (this.lineBuffer.search(/^\s*help\s*$/i) == 0) {
+		this.clear();
+		this.write(help);
+	}
+	else if (this.lineBuffer != '') {
+		this.type('You typed: '+this.lineBuffer);
+		this.newLine();
+	}
+	this.prompt();
+}
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td,li {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+
+.term {
+	font-family: "Courier New",courier,fixed,monospace;
+	font-size: 12px;
+	color: #94aad6;
+	background: none;
+	letter-spacing: 1px;
+}
+.term .termReverse {
+	color: #232e45;
+	background: #95a9d5;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+table.inventory td {
+	padding-bottom: 20px !important;
+}
+
+tt,pre {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td,li,tt {
+		color: #000000;
+	}
+	pre,.prop,.markup {
+		color: #000000;
+	}
+	h1 {
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		color: #000000;
+	}
+	a:hover {
+		color: #000000;
+	}
+	a:active {
+		color: #000000;
+	}
+	table.inventory {
+		display: none;
+	}
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap>
+			ANSI-Mapping Sample<br>&nbsp;
+		</td></tr>
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal &nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			(c) mass:werk,<br>N. Landsteiner 2005-2010<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td class="lh15" width="560" id="mainPane">
+		<p><b style="letter-spacing: 1px;">ANSI-Mapping  Sample Page</b><br>&nbsp;</p>
+		<p>With version 1.51 termlib.js comes with basic support of ANSI-escape sequences<br>This option might be especially usefull with output of any server-generated texts.</p>
+		<p>ANSI-escape sequences are of the form <tt>CSI parameter letter</tt>, where</p>
+		<ul>
+			<li><tt>CSI</tt> is a sequence of ESC (0x19) and &quot;[&quot; or the single char 0x9b</li>
+			<li><tt>parameters</tt> a single number, a list of numbers separated by &quot;;&quot;, or empty</li>
+			<li><tt>letter</tt> a letter signifying the command (currently only &quot;m&quot; supported)</li>
+		</ul>
+
+		<p>Supported is a subclass of SGR (Select Graphic Rendition) codes (letter &quot;m&quot;), all other sequences are deleted from output.</p>
+
+		<p>To enable ANSI-mapping for the <tt>write()</tt> method set the config-flag <tt>mapANSI</tt> to <tt>true</tt>.<br>
+		As the the color code for black is rendered as the normal foreground color by default, you may also want to set the config-flag <tt>ANSItrueBlack</tt> to <tt>true</tt> in order to render code <tt>CSI 30 m</tt> (set foreground color to black) as truely black.</p>
+
+		<p>Example:</p>
+<pre>
+   var myterm = new Terminal(
+      {
+         mapANSI: true,       // enable ANSI mapping
+         ANSItrueBlack: true  // force black in stead of renderung as fg color
+      }
+    );
+
+    myterm.open();
+
+</pre>
+
+		<p>You may also turn ANSI-mapping on and off on the fly by directly accessing the property <tt>mapANSI</tt> of your Terminal instance.</p>
+		<p>Example:</p>
+<pre>
+   myterm.mapANSI = true;
+   myterm.write( ANSIencodedText, true ); // output text with &quot;more&quot;-option
+   myterm.mapANSI = false; // resume to normal
+
+</pre>
+		<p>Warning: As the method <tt>write()</tt> uses the percent sign (<tt>%</tt>) as an escape character, you would probably want to escape any &quot;%&quot; in any server-generated text with &quot;%%&quot; before output. You may use the method <tt>escapeMarkup()</tt> for this:</p>
+		<p>Example:</p>
+<pre>
+   escapedText = myterm.escapeMarkup( ANSIencodedText );
+   myterm.write( escapedText, true ); // output text with &quot;more&quot;-option
+
+</pre>
+		<p>See the example at the bottom of this page for a complete example of a remote text reader with aNSI-support and escaping of internal markup.</p>
+		<p>&nbsp;</p>
+
+		<p><b>Supported SGR Codes:</b></p>
+
+
+		<table border="0" cellspacing="0" cellpadding="2" style="margin-left: 20px;">
+		<tr>
+			<td nowrap><tt>code</tt></td><td nowrap>&nbsp;</td>
+			<td nowrap><tt>effect</tt></td><td nowrap>&nbsp;</td>
+			<td nowrap><tt>notes</tt></td>
+		</tr>
+		<tr valign="top">
+			<td>0</tt><td></td>
+			<td nowrap>Reset / Normal</td><td></td>
+			<td>default rendition (implementation-defined), cancels the effect of any preceding occurrence of SGR [ECMA-48]</td>
+		</tr>
+		<tr valign="top">
+			<td>1</tt><td></td>
+			<td norap>Intensity: Bold</td><td></td>
+			<td>rendered as <i>italics</i> by default,<br>see note on style 16</td>
+		</tr>
+		<tr>
+			<td>3</tt><td></td>
+			<td nowrap>Italics: on</td><td></td>
+			<td></td>
+		</tr>
+		<tr>
+			<td>4</tt><td></td>
+			<td nowrap>Underline: Single</td><td></td>
+			<td></td>
+		</tr>
+		<tr>
+			<td>7</tt><td></td>
+			<td nowrap>Negative Image</td><td></td>
+			<td>reverse</td>
+		</tr>
+		<tr valign="top">
+			<td>9</tt><td></td>
+			<td nowrap>Crossed-out</td><td></td>
+			<td>characters still legible but marked as to be deleted</td>
+		</tr>
+		<tr>
+			<td>21</tt><td></td>
+			<td nowrap>Underline: Double</td><td></td>
+			<td>rendered as simple underline</td>
+		</tr>
+		<tr>
+			<td>22</tt><td></td>
+			<td nowrap>Intensity: Normal</td><td></td>
+			<td>not bold</td>
+		</tr>
+		<tr>
+			<td>23</tt><td></td>
+			<td nowrap>Italics: off</td><td></td>
+			<td></td>
+		</tr>
+		<tr>
+			<td>24</tt><td></td>
+			<td nowrap>Underline: off</td><td></td>
+			<td>both single and double</td>
+		</tr>
+		<tr>
+			<td>27</tt><td></td>
+			<td nowrap>Positive Image</td><td></td>
+			<td>reverse off</td>
+		</tr>
+		<tr>
+			<td>29</tt><td></td>
+			<td nowrap>not crossed out</td><td></td>
+			<td></td>
+		</tr>
+		<tr valign="top">
+			<td>30-39</tt><td></td>
+			<td nowrap>Set foreground color,<br>normal intensity</td><td></td>
+			<td>3x, see color table</td>
+		</tr>
+		<tr valign="top">
+			<td>90-99</tt><td></td>
+			<td nowrap>Set foreground color,<br>high intensity</td><td></td>
+			<td>9x, see color table</td>
+		</tr>
+		</table>
+
+
+		<p>Color Table</p>
+
+
+		<table border="0" cellspacing="0" cellpadding="2" style="margin-left: 20px;">
+		<tr>
+			<td nowrap><tt>code</tt></td><td nowrap>&nbsp;</td>
+			<td nowrap><tt>name</tt></td><td nowrap>&nbsp;</td>
+			<td nowrap><tt>internal color</tt></td><td nowrap>&nbsp;</td>
+			<td nowrap><tt>notes</tt></td>
+		</tr>
+
+		<tr>
+			<td>30</td><td></td>
+			<td nowrap>black</td><td></td>
+			<td>0</td><td></td>
+			<td>default foreground color, or</td><td></td>
+		</tr>
+		<tr valign="top">
+			<td></td><td></td>
+			<td nowrap></td><td></td>
+			<td>1</td><td></td>
+			<td>with option <tt>ANSItrueBlack</tt> = <tt>true</tt></td><td></td>
+		</tr>
+		<tr>
+			<td>31</td><td></td>
+			<td nowrap>red</td><td></td>
+			<td>10</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>32</td><td></td>
+			<td nowrap>green</td><td></td>
+			<td>11</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>33</td><td></td>
+			<td nowrap>yellow</td><td></td>
+			<td>12</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>34</td><td></td>
+			<td nowrap>blue</td><td></td>
+			<td>13</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>35</td><td></td>
+			<td nowrap>magenta</td><td></td>
+			<td>14</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>36</td><td></td>
+			<td nowrap>cyan</td><td></td>
+			<td>15</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>37</td><td></td>
+			<td nowrap>white</td><td></td>
+			<td>#999</td><td></td>
+			<td>effect: light grey</td><td></td>
+		</tr>
+		<tr>
+			<td>39</td><td></td>
+			<td nowrap>reset</td><td></td>
+			<td>0</td><td></td>
+			<td></td><td></td>
+		</tr>
+
+		<tr>
+			<td>90</td><td></td>
+			<td nowrap>bright black</td><td></td>
+			<td>9</td><td></td>
+			<td>effect: dark grey</td><td></td>
+		</tr>
+		<tr>
+			<td>91</td><td></td>
+			<td nowrap>bright red</td><td></td>
+			<td>2</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>92</td><td></td>
+			<td nowrap>bright green</td><td></td>
+			<td>3</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>93</td><td></td>
+			<td nowrap>bright yellow</td><td></td>
+			<td>4</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>94</td><td></td>
+			<td nowrap>bright blue</td><td></td>
+			<td>5</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>95</td><td></td>
+			<td nowrap>bright magenta</td><td></td>
+			<td>6</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>96</td><td></td>
+			<td nowrap>bright cyan</td><td></td>
+			<td>7</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>97</td><td></td>
+			<td nowrap>bright white</td><td></td>
+			<td>8</td><td></td>
+			<td></td><td></td>
+		</tr>
+		<tr>
+			<td>99</td><td></td>
+			<td nowrap>reset</td><td></td>
+			<td>0</td><td></td>
+			<td>(not a standard)</td><td></td>
+		</tr>
+		</table>
+
+		<p>As most colors (but 93 &quot;normal white&quot;, hard-coded to &quot;#999&quot;) are internally matched to color-codes, you may configure the representation of ANSI-colors.</p>
+		<p>Example:</p>
+<pre>
+   // assign ANSI-code 93 (bright red) = internal color code 2:
+   TermGlobals.setColor( &quot;2&quot;, &quot;#880000&quot; );
+
+</pre>
+
+		<p><b>Note on the Representation of &quot;bold&quot;</b></p>
+		<p>As bold is not sane for display on default, code 2 (bold) is matched to the internal style <tt>&quot;b&quot;</tt>, style code <tt>16</tt> and rendered as <i>italics</i> by default.</p>
+		<p>To change the representation of this style you may use the static method <tt>TermGlobals.assignStyle()</tt> as in the following example:</p>
+<pre>
+   // overwrite default rendering by defining style #16 ('b'):
+
+   TermGlobals.assignStyle(
+      16,      // style code
+      &quot;b&quot;,     // markup character
+      &quot;&lt;b&gt;&quot;,   // html start string
+      &quot;&lt;/b&gt;&quot;   // html end string
+   );
+
+</pre>
+		<p>Be sure to have read the section on bold fonts and CSS-letter-spacing in the <nobr><a href="sample_style_settings.html">Style Settings Sample Page</a>,</nobr> when applying this.</p>
+		<p>&nbsp;</p>
+
+		<p>All ANSI-code-to-markup-mapping is defined in the static object <tt>Terminal.prototype.globals.ANIS_SGR_codes</tt> (or short: <tt>TermGlobals.ANIS_SGR_codes</tt>).</p>
+		<p>&nbsp;</p>
+
+		<p><b>Example: Remote Text Reader</b></p>
+		<p>Here is a complete example of how to receive a text from a server and display it using ANSI-sequences:</p>
+
+<pre>
+   // *** external file reader with ANSI support ***
+
+   var myterm;
+
+   var helpPage = [
+      &quot;*** Remote Page Sample ***&quot;,
+      &quot;type 'read &lt;filename&gt;' to load and display a file from the server.&quot;,
+      &quot;type 'exit' to quit.&quot;,
+      &quot; &quot;
+   ];
+
+   function openTerminal() {
+       if (!myterm || myterm.closed) {
+          myterm = new Terminal(
+             {
+                mapANSI: true,
+                handler: commandHandler,
+                initHandler: initHandler
+             }
+          );
+          myterm.open();
+       }
+   }
+
+   function initHandler() {
+      this.write( helpPage );
+      this.prompt();
+   }
+
+   function commandHandler() {
+      this.newLine();
+      this.lineBuffer = this.lineBuffer.replace(/^\s+/, '');
+      var argv = this.lineBuffer.split(/\s+/);
+      var cmd = argv[0];
+      switch (cmd) {
+         case 'read':
+            if (argv.length == 2) {
+               // cmd 'read' with filename: load file from server
+               // return without prompt, response handled in serverCallback
+               var filename = argv[1];
+               this.send(
+                  {
+                     url: filename,
+                     method: 'get',
+                     callback: serverCallback
+                  }
+               );
+               return;
+            }
+            else {
+               // wrong number of arguments
+               this.type( 'Usage: read &lt;filename&gt;' );
+            }
+            break;
+         case 'help':
+            this.clear();
+            this. write( helpPage );
+            break;
+         case 'exit':
+            this.close();
+            return;
+         default:
+            if (cmd) this.type( 'Unkmown command.' );
+      }
+      this.prompt;
+   }
+
+   function serverCallback() {
+      var response=this.socket;
+      if (response.success) {
+         // escape any markup (%) and write it using the more-option
+         // ANSI-translation is done automatically (see config-flag)
+         // return without prompt, prompt is generated by write-more
+
+         var escapedText = this.escapeMarkup( response.responseText );
+         this.write( escapedText, true );
+         return;
+      }
+      else if (response.status == 404) {
+         this.write( 'No such file.' );
+      }
+      else {
+         var message = 'Request failed: '
+           + response.status + ' ' + response.statusText;
+         if (response.errno) message +=  '\n' + response.errstring;
+         this.write( message );
+      }
+      this.prompt();
+   }
+
+</pre>
+	<p>See also: <a href="sample_color.html">Colors Sample Page</a>, <a href="sample_socket.html">Socket Sample Page</a>, <a href="sample_style_settings.html">Style Settings Sample Page</a>.</p>
+	<p>&nbsp;</p>
+</td>
+	</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_chrome.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_chrome.html
new file mode 100644
index 0000000..12d5aac
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_chrome.html
@@ -0,0 +1,636 @@
+<html>
+<head>
+	<title>termlib Chrome Sample</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script language="JavaScript" type="text/javascript">
+<!--
+
+/*
+  test sample for termlib.js: window chrome
+  (updated for use with termlib.js v. 1.07)
+
+  (c) Norbert Landsteiner 2005
+  mass:werk - media environments
+  <http://www.masswerk.at>
+
+  all rights reserved
+
+*/
+
+var term = new Array();
+
+function termOpen(n) {
+	if (termToSet) return; // do not open while there is modal dialog
+	n = parseInt(n);
+	if ((!n) || (isNaN(n))) n = 1;
+	var termid = 'terminal'+n;
+	if (!term[n]) {
+		term[n] = new Terminal(
+			{
+				x: 0,
+				y: 0,
+				id: n,
+				termDiv: 'termDiv'+n,
+				frameWidth: 1,
+				frameColor: '#aaaaaa',
+				bgColor: '#eeeeee',
+				greeting: 'Terminal ready.',
+				handler: termHandler,
+				exitHandler: termChromeHide
+			}
+		);
+		term[n].colorsetting=1;
+		if (term[n]) {
+			termChromeShow(n);
+			term[n].open();
+		}
+	}
+	else if (term[n].closed) {
+		termSetChromeState(n, true);
+		termChromeShow(n);
+		term[n].open();
+	}
+	else {
+		termSetChromeState(n, true);
+	}
+	termBringToFront(n);
+}
+
+function termHandler() {
+	this.newLine();
+	var line = this.lineBuffer;
+	if (line != '') {
+		if (line == 'exit') this.close()
+		else this.type('You typed: '+line);
+	}
+	this.prompt();
+}
+
+function termSetChromeState(n, v) {
+	var header = 'termHeader'+n;
+	var classname = (v)? 'termHeaderActive':'termHeaderInactive';
+	if (document.getElementById) {
+		var obj = document.getElementById(header);
+		if (obj) obj.className = classname;
+	}
+	else if (document.all) {
+		var obj = document.all[header];
+		if (obj) obj.className = classname;
+	}
+
+}
+
+function termChromeShow(n) {
+	var div = 'terminal'+n;
+	TermGlobals.setElementXY(div, 210+n*20, 30+n*20);
+	TermGlobals.setVisible(div,1);
+	if (document.getElementById) {
+		var obj = document.getElementById(div);
+		if (obj) obj.className = 'termShow';
+	}
+	else if (document.all) {
+		var obj = document.all[div];
+		if (obj) obj.className = 'termShow';
+	}
+}
+
+function termChromeHide() {
+	var div='terminal'+this.id;
+	TermGlobals.setVisible(div,0);
+	if (document.getElementById) {
+		var obj = document.getElementById(div);
+		if (obj) obj.className = 'termHidden';
+	}
+	else if (document.all) {
+		var obj = document.all[div];
+		if (obj) obj.className = 'termHidden';
+	}
+	if (termToSet==this.id) closeSettings(0);
+}
+
+function termClose(n) {
+	if ((term[n]) && (term[n].closed == false)) term[n].close();
+}
+
+function termBringToFront(n) {
+	for (var i=1; i<term.length; i++) {
+		if ((n!=i) && (term[i])) {
+			var obj=(document.getElementById)? document.getElementById('terminal'+i):document.all['terminal'+i];
+			if (obj) obj.style.zIndex=1;
+			termSetChromeState(i, false);
+		}
+	}
+	var obj=(document.getElementById)? document.getElementById('terminal'+n):document.all['terminal'+n];
+	if (obj) obj.style.zIndex=2;
+	termSetChromeState(n, true);
+	term[n].focus();
+}
+
+var termToSet=0;
+
+function termConfigure(n) {
+	var t=term[n];
+	if (parseFloat(t.version)<1.03) {
+		alert('This utility requires termlib.js 1.03 or better.');
+		return;
+	}
+	var color = t.colorsetting;
+	termToSet = n;
+	var f=document.forms.settingvalues;
+	f.rows.value=t.conf.rows;
+	f.cols.value=t.conf.cols;
+	f.color[color-1].checked=true;
+	var div='settingsdialog';
+	TermGlobals.setVisible(div,1);
+	if (document.getElementById) {
+		var obj = document.getElementById(div);
+		if (obj) obj.className = 'termShow';
+	}
+	else if (document.all) {
+		var obj = document.all[div];
+		if (obj) obj.className = 'termShow';
+	}
+	var td='terminal'+n;
+	objs = (document.getElementById)? document.getElementById(td):document.all[td];
+	if (obj) TermGlobals.setElementXY(div, parseInt(objs.style.left)+26, parseInt(objs.style.top)+26);
+	TermGlobals.keylock=true;
+}
+
+function closeSettings(state) {
+	var t=term[termToSet];
+	if (state) {
+		var f=document.forms.settingvalues;
+		var color = 1
+		if (f.color[1].checked) color=2
+		else if (f.color[2].checked) color=3
+		else if (f.color[3].checked) color=4;
+		var rows = parseInt(f.rows.value);
+		var cols = parseInt(f.cols.value);
+		if ((isNaN(rows)) || (rows<2) || (isNaN(cols)) || (cols<4)) {
+			rows=t.conf.rows;
+			cols=t.conf.cols;
+		}
+		var changed=((rows==t.conf.rows) && (cols==t.conf.cols) && (color==t.colorsetting))? false:true;
+		t.colorsetting=color;
+		var rstring= 'New Settings: Terminal set to '+rows+' rows, '+cols+' cols, ';
+		if (color==1) {
+			t.conf.bgColor='#eeeeee';
+			t.conf.fontClass='term';
+			rstring+='black on white.';
+		}
+		else if (color==2) {
+			t.conf.bgColor='#181818';
+			t.conf.fontClass='term2';
+			rstring+='white on black.';
+		}
+		else if (color==3) {
+			t.conf.bgColor='#181818';
+			t.conf.fontClass='term3';
+			rstring+='green on black.';
+		}
+		else if (color==4) {
+			t.conf.bgColor='#779977';
+			t.conf.fontClass='term4';
+			rstring+='black on green.';
+		}
+		if (changed) {
+			t.cursorOff();
+			t.conf.rows=t.maxLines=rows;
+			t.conf.cols=t.maxCols=cols;
+			t.rebuild();
+			t.newLine();
+			t.write(rstring);
+			t.prompt();
+		}
+	}
+	var div='settingsdialog';
+	TermGlobals.setVisible(div,0);
+	if (document.getElementById) {
+		var obj = document.getElementById(div);
+		if (obj) obj.className = 'termHidden';
+	}
+	else if (document.all) {
+		var obj = document.all[div];
+		if (obj) obj.className = 'termHidden';
+	}
+	termToSet = 0;
+	TermGlobals.keylock=false;
+}
+
+function settingsSetColor(n) {
+	document.forms.settingvalues.elements.color[n-1].checked=true;
+}
+
+// simple drag & drop
+
+var dragobject=null;
+var dragOfsX, dragOfsY;
+var lastX, lastY;
+
+function drag(e) {
+	if (dragobject!=null) {
+		if (window.event) e = window.event;
+		var x = (typeof e.clientX != 'undefined')? e.clientX:e.pageX;
+		var y = (typeof e.clientY != 'undefined')? e.clientY:e.pageY;
+		dragobject.style.left=x+dragOfsX-lastX;
+		dragobject.style.top=y+dragOfsY-lastY;
+	}
+}
+
+function dragStart(e) {
+	if (window.event) e = window.event;
+	lastX = (typeof e.clientX != 'undefined')? e.clientX:e.pageX;
+	lastY = (typeof e.clientY != 'undefined')? e.clientY:e.pageY;
+}
+
+function dragTerm(n) {
+	termBringToFront(n)
+	var div='terminal'+n;
+	dragobject = (document.getElementById)? document.getElementById(div):document.all[div];
+	dragOfsX = parseInt(dragobject.style.left);
+	dragOfsY = parseInt(dragobject.style.top);
+}
+
+function dragRelease(e) {
+	dragobject=null;
+}
+
+document.onmousemove=drag;
+document.onmouseup=dragRelease;
+document.onmousedown=dragStart;
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+.term {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #181818;
+	background: none;
+}
+.termReverse {
+	color: #eeeeee;
+	background: #222222;
+}
+
+
+.term2 {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #eeeeee;
+	background: none;
+}
+.term2 .termReverse {
+	color: #181818;
+	background: #eeeeee;
+}
+
+.term3 {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #44bb33;
+	background: none;
+}
+.term3 .termReverse {
+	color: #111111;
+	background: #44bb33;
+}
+
+.term4 {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #111111;
+	background: none;
+}
+.term4 .termReverse {
+	color: #779977;
+	background: #111111;
+}
+
+/* term chrome (border styles do not really work on MSIE - so do it the hard way */
+
+.termOuterChrome {
+	background: #A2A2A2;
+	padding: 0px;
+	border-width: 2px;
+	border-top-color: #D0D0D0;
+	border-left-color: #D0D0D0;
+	border-right-color: #747474;
+	border-bottom-color: #747474;
+	border-style: solid;
+	border-spacing: 0px;
+}
+
+.termInnerChrome {
+	background: #A2A2A2;
+	padding: 0px;
+	border-width: 1px;
+	border-top-color: #747474;
+	border-left-color: #747474;
+	border-right-color: #D0D0D0;
+	border-bottom-color: #D0D0D0;
+	border-style: solid;
+	border-spacing: 0px;
+}
+.termBody {
+	background: #333333;
+	padding: 0px;
+	border-width: 0px;
+	border-style: none;
+}
+.termHeaderActive {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	letter-spacing: 1px;
+	color: #ffffff;
+	background: #000089;
+	padding: 1px;
+	padding-left: 6px;
+	border-width: 2px;
+	border-top-color: #B0B0D8;
+	border-left-color: #B0B0D8;
+	border-right-color: #0B0B55;
+	border-bottom-color: #0B0B55;
+	border-style: solid;
+}
+.termHeaderInactive {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	letter-spacing: 1px;
+	color: #dddddd;
+	background: #686868;
+	padding: 1px;
+	padding-left: 6px;
+	border-width: 2px;
+	border-top-color: #C6C6C6;
+	border-left-color: #C6C6C6;
+	border-right-color: #474747;
+	border-bottom-color: #474747;
+	border-style: solid;
+	border-spacing: 0px;
+}
+.termMenuPane {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+	background: #A7A7A7;
+	padding: 2px;
+	border-width: 1px;
+	border-top-color: #DDDDDD;
+	border-left-color: #DDDDDD;
+	border-right-color: #707070;
+	border-bottom-color: #707070;
+	border-style: solid;
+	border-spacing: 0px;
+}
+
+.termMenu,.termMenu:link,.termMenu:visited  {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+	text-decoration: none;
+	background: #A7A7A7;
+	margin: 1px;
+	padding-top: 1px;
+	padding-bottom: 1px;
+	padding-left: 3px;
+	padding-right: 4px;
+	border-width: 1px;
+	border-color: #A7A7A7;
+	border-style: solid;
+}
+.termMenu:hover  {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+	text-decoration: none;
+	background: #dddddd;
+	margin: 1px;
+	padding-top: 1px;
+	padding-bottom: 1px;
+	padding-left: 3px;
+	padding-right: 4px;
+	border-width: 1px;
+	border-top-color: #f1f1f1;
+	border-left-color: #f1f1f1;
+	border-right-color: #8a8a8a;
+	border-bottom-color: #8a8a8a;
+	border-style: solid;
+}
+.termMenu:active  {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+	text-decoration: none;
+	background: #f9f9f9;
+	margin: 1px;
+	padding-top: 1px;
+	padding-bottom: 1px;
+	padding-left: 3px;
+	padding-right: 4px;
+	border-width: 1px;
+	border-top-color: #c9c9c9;
+	border-left-color: #c9c9c9;
+	border-right-color: #ffffff;
+	border-bottom-color: #ffffff;
+	border-style: solid;
+}
+
+.uiButton,.uiButton:link,.uiButton:visited  {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+	font-weight: bold;
+	text-decoration: none;
+	background: #aaaaaa;
+	margin: 1px;
+	padding-top: 2px;
+	padding-bottom: 2px;
+	padding-left: 6px;
+	padding-right: 6px;
+	border-width: 2px;
+	border-top-color: #f1f1f1;
+	border-left-color: #f1f1f1;
+	border-right-color: #666666;
+	border-bottom-color: #666666;
+	border-style: solid;
+}
+.uiButton:hover  {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+	font-weight: bold;
+	text-decoration: none;
+	background: #dddddd;
+	margin: 1px;
+	padding-top: 2px;
+	padding-bottom: 2px;
+	padding-left: 6px;
+	padding-right: 6px;
+	border-width: 2px;
+	border-top-color: #f1f1f1;
+	border-left-color: #f1f1f1;
+	border-right-color: #666666;
+	border-bottom-color: #666666;
+	border-style: solid;
+}
+.uiButton:active  {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+	font-weight: bold;
+	text-decoration: none;
+	background: #888888;
+	margin: 1px;
+	padding-top: 2px;
+	padding-bottom: 2px;
+	padding-left: 6px;
+	padding-right: 6px;
+	border-width: 2px;
+	border-top-color: #666666;
+	border-left-color: #666666;
+	border-right-color: #bbbbbb;
+	border-bottom-color: #bbbbbb;
+	border-style: solid;
+}
+.settings {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+}
+.settingsLabel,.settingsLabel:link,settingsLabel:active,.settingsLabel:visited,.settingsLabel:hover {
+	font-family: arial,helvetica,sans-serif;
+	font-size: 12px;
+	color: #000000;
+	text-decoration: none;
+}
+
+.termHidden {
+	display: none;
+}
+.termShow {
+	display: block;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top"><td nowrap>
+		Chrome Sample<br>&nbsp;
+	</td>
+	</tr>
+	<tr><td nowrap>
+		<a href="javascript:termOpen(1)" onfocus="if(this.blur)this.blur();" onmouseover="window.status='terminal 1'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal 1 &nbsp;</a>
+	</td></tr>
+	<tr><td nowrap>
+		<a href="javascript:termOpen(2)" onfocus="if(this.blur)this.blur();" onmouseover="window.status='terminal 1'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal 2 &nbsp;</a>
+	</td></tr>
+	<tr><td nowrap>
+		&nbsp;
+	</td></tr>
+	<tr><td nowrap class="lh15">
+		&nbsp;<br>
+		(c) mass:werk,<br>N. Landsteiner 2005<br>
+		<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+	</td></tr>
+</table>
+
+<div id="terminal1" style="position:absolute; visibility: hidden; z-index:1" class="termHidden"><table class="termOuterChrome" onmouseup="termBringToFront(1)" cellpadding="1" cellspacing="0"><tr><td><table class="termInnerChrome" cellpadding="0" cellspacing="0">
+	<tr><td class="termHeaderActive" onmousedown="dragTerm(1); return false" id="termHeader1">Terminal 1</td></tr>
+	<tr><td class="termMenuPane"><a href="javascript:termClose(1)" onfocus="if(this.blur)this.blur();" class="termMenu">Close</a><a href="javascript:termConfigure(1)" onfocus="if(this.blur)this.blur();" class="termMenu">Settings</a></td></tr>
+	<tr><td class="termBody"><div id="termDiv1" style="position:relative;"></div></td></tr>
+</table></td></tr>
+</table></div>
+
+<div id="terminal2" style="position:absolute; visibility: hidden; z-index:2" class="termHidden"><table class="termOuterChrome" onmouseup="termBringToFront(2)" cellpadding="1" cellspacing="0"><tr><td><table class="termInnerChrome" cellpadding="0" cellspacing="0">
+	<tr><td class="termHeaderActive" onmousedown="dragTerm(2); return false" id="termHeader2">Terminal 2</td></tr>
+	<tr><td class="termMenuPane"><a href="javascript:termClose(2)" onfocus="if(this.blur)this.blur();" class="termMenu">Close</a><a href="javascript:termConfigure(2)" onfocus="if(this.blur)this.blur();" class="termMenu">Settings</a></td></tr>
+	<tr><td class="termBody"><div id="termDiv2" style="position:relative;"></div></td></tr>
+</table></td></tr>
+</table></div>
+
+<div id="settingsdialog" style="position:absolute; visibility: hidden; z-index:3" class="termHidden"><table class="termOuterChrome" cellpadding="1" cellspacing="0"><tr><td><table class="termInnerChrome" cellpadding="0" cellspacing="0" width="300">
+	<tr><td align="center" class="termMenuPane">
+		<table borrder="0" cellspacing="0" cellpadding="4" width="260">
+		<tr><td align="center" class="settings">Terminal Settings</td></tr>
+		<form name="settingvalues" onsubmit="return false">
+		<tr><td class="settings">&nbsp;<br><b>Size</b></td></tr>
+		<tr><td><table borrder="0" cellspacing="0" cellpadding="2">
+			<tr valign="middle"><td class="settings">Rows:</td><td><input name="rows" type="text" value="" size="4" class="settings"></tr>
+			<tr valign="middle"><td class="settings">Cols:</td><td><input name="cols" type="text" value="" size="4" class="settings"></tr>
+		</table></td></tr>
+		<tr><td class="settings">&nbsp;<br><b>Color</b></td></tr>
+		<tr><td><table borrder="0" cellspacing="0" cellpadding="2">
+			<tr valign="middle"><td><input type="radio" name="color" value="1"></td><td class="settings"><a href="javascript:settingsSetColor(1)" onfocus="if (this.blur) this.blur();" class="settingsLabel">black on white</a></td></tr>
+			<tr valign="middle"><td><input type="radio" name="color" value="2"></td><td class="settings"><a href="javascript:settingsSetColor(2)" onfocus="if (this.blur) this.blur();" class="settingsLabel">white on black</a></td></tr>
+			<tr valign="middle"><td><input type="radio" name="color" value="3"></td><td class="settings"><a href="javascript:settingsSetColor(3)" onfocus="if (this.blur) this.blur();" class="settingsLabel">green on black</a></td></tr>
+			<tr valign="middle"><td><input type="radio" name="color" value="4"></td><td class="settings"><a href="javascript:settingsSetColor(4)" onfocus="if (this.blur) this.blur();" class="settingsLabel">black on green</a></td></tr>
+		</table></td></tr>
+		</form>
+		<tr><td class="settings" align="right" nowrap>&nbsp;<br><a href="javascript:closeSettings(0)" onfocus="if(this.blur)this.blur();" class="uiButton">Cancel</a>&nbsp;<a href="javascript:closeSettings(1)" onfocus="if(this.blur)this.blur();" class="uiButton">Configure</a><br>&nbsp;</td></tr>
+		</table>
+</table></td></tr>
+</table></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_color.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_color.html
new file mode 100644
index 0000000..3e46f9a
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_color.html
@@ -0,0 +1,536 @@
+<html>
+<head>
+	<title>termlib Color Sample</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script type="text/javascript">
+<!--
+
+// *** text color sample ***
+// mass:werk, N.Landsteiner 2007
+
+var term;
+
+var help = [
+	'%+r termlib color sample help: %-r',
+	'',
+	' * type "colors"    to see the default internal colors.',
+	' * type "webcolors" to see the standard VGA and web safe colors.',
+	' * type "nscolors"  to see the VGA and netscape colors by name.',
+	' * type "help"      to see this page.',
+	' * type "exit"      to quit.',
+	' '
+];
+
+var colorTable = [
+	'termlib.js internal color table:',
+	' %+i%+ucolor name   code        sample       comment%-i                                %-u',
+	' default        0     %c(default)normal %+rreverse%-r%c0   "default" refers always to config color',
+	' black          1     %c(black)normal %+rreverse%-r%c0',
+	' red            2     %c(red)normal %+rreverse%-r%c0',
+	' green          3     %c(green)normal %+rreverse%-r%c0',
+	' yellow         4     %c(yellow)normal %+rreverse%-r%c0',
+	' blue           5     %c(blue)normal %+rreverse%-r%c0',
+	' magenta        6     %c(magenta)normal %+rreverse%-r%c0',
+	' cyan           7     %c(cyan)normal %+rreverse%-r%c0',
+	' white          8     %c(white)normal %+rreverse%-r%c0',
+	' grey           9     %c(grey)normal %+rreverse%-r%c0',
+	' darkred        A     %c(darkred)normal %+rreverse%-r%c0   hex 10',
+	' darkgreen      B     %c(darkgreen)normal %+rreverse%-r%c0   hex 11',
+	' darkyellow     C     %c(darkyellow)normal %+rreverse%-r%c0   hex 12',
+	' darkblue       D     %c(darkblue)normal %+rreverse%-r%c0   hex 13',
+	' darkmagenta    E     %c(darkmagenta)normal %+rreverse%-r%c0   hex 14',
+	' darkcyan       F     %c(darkcyan)normal %+rreverse%-r%c0   hex 15',
+	' ',
+	'%+i(type "nscolors" or "webcolors" for some more supported color sets.)%-i'
+];
+
+function listNetsacpeColors() {
+	var t=new Array();
+	for (var k in TermGlobals.nsColors) t.push(k);
+	t.sort();
+	var s='%+usupported Netscape colors by name:%-u\n\n';
+	var l=0;
+	for (var i=0; i<t.length; i++) {
+		var c=t[i];
+		if (l+c.length>78) {
+			s+='\n';
+			l=0;
+		}
+		else if (l>0) {
+			s+=' ';
+			l++;
+		}
+		s+= '%c(@'+c+')'+c;
+		l+=c.length;
+	}
+	return s+'%c0\n ';
+}
+
+function listWebColors() {
+	var t=new Array();
+	for (var k=1; k<TermGlobals.webColorCodes.length; k++) {
+		t.push(TermGlobals.webColorCodes[k]);
+	}
+	var s='%+usupported 216 web colors:%-u (you may use 3 digit codes also)\n\n';
+	var l=0;
+	for (var i=0; i<t.length; i++) {
+		var c=t[i];
+		if (l+c.length>78) {
+			s+='\n';
+			l=0;
+		}
+		else if (l>0) {
+			s+=' ';
+			l++;
+		}
+		s+= '%c(#'+c+')'+c;
+		l+=c.length;
+	}
+	return s+'%c0\n ';
+}
+
+function termOpen() {
+	if ((!term) || (term.closed)) {
+		term = new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				bgColor: '#232e45',
+				initHandler: termInitHandler,
+				handler: termHandler,
+				exitHandler: termExitHandler
+			}
+		);
+		term.open();
+		// dimm UI text
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+}
+
+function termExitHandler() {
+	// reset the UI
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+function termInitHandler() {
+	// output a start up screen
+	this.write(
+		[
+			'%c(@yellowgreen)            ****           termlib.js - Color Sample            ****',
+			'            **** type "colors" for color table, "exit" to quit. ****',
+			'%c()%n'
+		]
+	);
+	this.write(colorTable);
+	// and leave with prompt
+	this.prompt();
+}
+
+function termHandler() {
+	// default handler + exit
+	this.newLine();
+	if (this.lineBuffer.search(/^\s*exit\s*$/i) == 0) {
+		this.close();
+		return;
+	}
+	else if (this.lineBuffer.search(/^\s*colors\s*$/i) == 0) {
+		this.clear();
+		this.write(colorTable);
+	}
+	else if (this.lineBuffer.search(/^\s*nscolors\s*$/i) == 0) {
+		this.clear();
+		this.write(listNetsacpeColors());
+	}
+	else if (this.lineBuffer.search(/^\s*webcolors\s*$/i) == 0) {
+		this.clear();
+		this.write(listWebColors());
+	}
+	else if (this.lineBuffer.search(/^\s*help\s*$/i) == 0) {
+		this.clear();
+		this.write(help);
+	}
+	else if (this.lineBuffer != '') {
+		this.type('You typed: '+this.lineBuffer);
+		this.newLine();
+	}
+	this.prompt();
+}
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td,li {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+
+.term {
+	font-family: "Courier New",courier,fixed,monospace;
+	font-size: 12px;
+	color: #94aad6;
+	background: none;
+	letter-spacing: 1px;
+}
+.term .termReverse {
+	color: #232e45;
+	background: #95a9d5;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+table.inventory td {
+	padding-bottom: 20px !important;
+}
+
+tt,pre {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+
+.markup { color: #00ffcc; }
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td,li,tt {
+		color: #000000;
+	}
+	pre,.prop,.markup {
+		color: #000000;
+	}
+	h1 {
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		color: #000000;
+	}
+	a:hover {
+		color: #000000;
+	}
+	a:active {
+		color: #000000;
+	}
+	table.inventory {
+		display: none;
+	}
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap>
+			Color Sample<br>&nbsp;
+		</td></tr>
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal &nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			(c) mass:werk,<br>N. Landsteiner 2005-2007<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td class="lh15" width="560" id="mainPane">
+		<p><b style="letter-spacing: 1px;">Color Sample Page</b><br>&nbsp;</p>
+		<p>With version 1.2 termlib.js introduces support for colors.</p>
+		<p>Colors are controlled using the styles interface of the <tt>type()</tt> and <tt>write()</tt> methods.</p>
+		<p><b>Usage:</b></p>
+		<p>As any style settings colors are controlled by the <tt>%&lt;style&gt;</tt> markup of the <tt>write()</tt> method, where <tt>&lt;style&gt;</tt> starts with a &quot;<tt>c</tt>&quot; for &quot;color&quot;.</p>
+		<p>&quot;termlib.js&quot; supports 3 different color systems:</p>
+		<p>1) The first approach mimics the ANSI color approach as known from most terminals:</p>
+		<p>There is a set of 16 colors (1 default color and 15 configurable colors):</p>
+
+		<table border="0" cellspacing="0" cellpadding="2" style="margin-left: 20px;">
+		<tr>
+			<td nowrap><tt>color name</tt></td><td nowrap>&nbsp;</td>
+			<td nowrap><tt>code</tt></td><td nowrap>&nbsp;</td>
+			<td nowrap><tt>color string</tt></td><td nowrap>&nbsp;</td>
+			<td nowrap><tt>synonyms</tt></td>
+		</tr>
+		<tr>
+			<td nowrap>default</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">0</td><td nowrap>&nbsp;</td>
+			<td nowrap><i>empty</i></td><td nowrap>&nbsp;</td>
+			<td nowrap>clear, <i>empty string</i></td>
+		</tr>
+		<tr>
+			<td nowrap>black</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">1</td><td nowrap>&nbsp;</td>
+			<td nowrap>#000000</td><td nowrap>&nbsp;</td>
+			<td nowrap>&nbsp;</td>
+		</tr>
+		<tr>
+			<td nowrap>red</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">2</td><td nowrap>&nbsp;</td>
+			<td nowrap>#ff0000</td><td nowrap>&nbsp;</td>
+			<td nowrap>red1</td>
+		</tr>
+		<tr>
+			<td nowrap>green</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">3</td><td nowrap>&nbsp;</td>
+			<td nowrap>#00ff00</td><td nowrap>&nbsp;</td>
+			<td nowrap>green1</td>
+		</tr>
+		<tr>
+			<td nowrap>yellow</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">4</td><td nowrap>&nbsp;</td>
+			<td nowrap>#ffff00</td><td nowrap>&nbsp;</td>
+			<td nowrap>yellow1</td>
+		</tr>
+		<tr>
+			<td nowrap>blue</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">5</td><td nowrap>&nbsp;</td>
+			<td nowrap>#0066ff</td><td nowrap>&nbsp;</td>
+			<td nowrap>blue1</td>
+		</tr>
+		<tr>
+			<td nowrap>magenta</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">6</td><td nowrap>&nbsp;</td>
+			<td nowrap>#ff00ff</td><td nowrap>&nbsp;</td>
+			<td nowrap>magenta1</td>
+		</tr>
+		<tr>
+			<td nowrap>cyan</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">7</td><td nowrap>&nbsp;</td>
+			<td nowrap>#00ffff</td><td nowrap>&nbsp;</td>
+			<td nowrap>cyan1</td>
+		</tr>
+		<tr>
+			<td nowrap>white</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">8</td><td nowrap>&nbsp;</td>
+			<td nowrap>#ffffff</td><td nowrap>&nbsp;</td>
+			<td nowrap>&nbsp;</td>
+		</tr>
+		<tr>
+			<td nowrap>grey</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">9</td><td nowrap>&nbsp;</td>
+			<td nowrap>#808080</td><td nowrap>&nbsp;</td>
+			<td>gray</td>
+		</tr>
+		<tr>
+			<td nowrap>darkred</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">A</td><td nowrap>&nbsp;</td>
+			<td nowrap>#990000</td><td nowrap>&nbsp;</td>
+			<td nowrap>red2</td>
+		</tr>
+		<tr>
+			<td nowrap>darkgreen</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">B</td><td nowrap>&nbsp;</td>
+			<td nowrap>#009900</td><td nowrap>&nbsp;</td>
+			<td nowrap>green2</td>
+		</tr>
+		<tr>
+			<td nowrap>darkyellow</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">C</td><td nowrap>&nbsp;</td>
+			<td nowrap>#999900</td><td nowrap>&nbsp;</td>
+			<td nowrap>yellow2</td>
+		</tr>
+		<tr>
+			<td nowrap>darkblue</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">D</td><td nowrap>&nbsp;</td>
+			<td nowrap>#003399</td><td nowrap>&nbsp;</td>
+			<td nowrap>blue2</td>
+		</tr>
+		<tr>
+			<td nowrap>darkmagenta</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">E</td><td nowrap>&nbsp;</td>
+			<td nowrap>#990099</td><td nowrap>&nbsp;</td>
+			<td nowrap>magenta2</td>
+		</tr>
+		<tr>
+			<td nowrap>darkcyan</td><td nowrap>&nbsp;</td>
+			<td nowrap align="center">F</td><td nowrap>&nbsp;</td>
+			<td nowrap>#009999</td><td nowrap>&nbsp;</td>
+			<td nowrap>cyan2</td>
+		</tr>
+		<tr><td colspan="7">&nbsp;</td></tr>
+		</table>
+
+		<p>&quot;default&quot; or &quot;clear&quot; refers always to the configured default color.</p>
+		<p>Code values from <tt>A</tt> to <tt>F</tt> (may be lower case) indicate hex values from 10 to 15.</p>
+
+		<p>You may change the color string using the method <tt>TermGlobals.setColor( &lt;label&gt;, &lt;colorstring&gt; )</tt>, where &lt;label&gt; is the name or code of a color and &lt;colorstring&gt; a valid CSS color value.</p>
+
+		<p>Examples:</p>
+<pre>  // changing the color string used for &quot;red&quot;
+  TermGlobals.setColor( &quot;red&quot;, &quot;#880000&quot; );
+  TermGlobals.setColor( &quot;2&quot;, &quot;#880000&quot; );
+  TermGlobals.setColor( 2, &quot;#880000&quot; );
+
+  // changing darkred
+  TermGlobals.setColor( &quot;darkred&quot;, &quot;#440000&quot; );
+  TermGlobals.setColor( &quot;A&quot;, &quot;#440000&quot; );
+  TermGlobals.setColor( 10, &quot;#440000&quot; );
+</pre>
+		<p>You may also access the currently used color string using the method <tt>TermGlobals.getColorString( &lt;label&gt; )</tt> or look up a color's code using <tt>TermGlobals.getColorCode( &lt;label&gt )</tt>.</p>
+
+		<p>&nbsp;</p>
+		<p>Writing with color:</p>
+
+		<p>You may switch the color using the markup <tt>%c(&lt;color&nbsp;name&gt;)</tt> and switch back to the default color using <tt>%c(default)</tt> or <tt>%c(clear)</tt> or just <tt>%c()</tt> or <tt>%c0</tt>.<p>
+		<p>Alternatively to color names you may use a one-digit hex code <tt>%+c&lt;color&nbsp;code&gt;</tt> where &lt;color&nbsp;code&gt; is in the range from 0 to F (case insensitive).</p>
+
+		<p>Examples:</p>
+<pre>  myTerm.write(&quot;Switching to <span class="markup">%c(red)</span>RED<span class="markup">%c(default)</span> and back again.&quot;);
+  myTerm.write(&quot;Switching to <span class="markup">%c2</span>RED<span class="markup">%c0</span> and back again.&quot;);
+
+  myTerm.write(&quot;Switching to <span class="markup">%c(darkred)</span>DARKRED<span class="markup">%c()</span> and back again.&quot;);
+  myTerm.write(&quot;Switching to <span class="markup">%ca</span>DARKRED<span class="markup">%c0</span> and back again.&quot;);
+</pre>
+		<p>With version 1.4 or higher you may also use a color code (hex or decimal) inside brackets (resulting in a unified color markup syntax &quot;<tt>%c(...)</tt>&quot;):</p>
+<pre>  myTerm.write(&quot;Switching to <span class="markup">%c(2)</span>RED<span class="markup">%c(0)</span> and back again.&quot;);
+  myTerm.write(&quot;Switching to <span class="markup">%c(02)</span>RED<span class="markup">%c(0)</span> and back again.&quot;);
+
+  myTerm.write(&quot;Switching to <span class="markup">%c(a)</span>DARKRED<span class="markup">%c()</span> and back again.&quot;);
+  myTerm.write(&quot;Switching to <span class="markup">%c(10)</span>DARKRED<span class="markup">%c()</span> and back again.&quot;);
+
+</pre>
+		<p>Note that <tt>%c0</tt>, <tt>%c(0)</tt>, <tt>%c()</tt>, <tt>%c(default)</tt>, <tt>%c(clear)</tt> are just synonyms for the default color. For the following examples we'll use &quot;<tt>%c()</tt>&quot; for this.</p>
+
+		<p>All the color names and codes are case insensitive (&quot;RED&quot; == &quot;red&quot;).<br>As with all styles, setting a color applies to the single <tt>write()</tt> only.</p>
+		<p>Using the <tt>type()</tt> method the color values correspond to the bits 8 to 11 (bit-mask xf00) of the style-vector. (This means you have to multiply the color code by 256 or 0xff.)</p>
+		<p>Examples:</p>
+<pre>  myTerm.type(&quot;This is green.&quot;, 3*256);
+  myTerm.type(&quot;This is green and reverse.&quot;, 3*256 + 1);
+</pre>
+		<p>&nbsp;</p>
+		<p>2) Using named web colors (Netscape colors)</p>
+		<p>As a second approach you may use any of the 16 standard named colors or any of the 120 additional Netscape colors.</p>
+		<p>All you have to do to access this second color set is to prefix the color name with &quot;<tt>@</tt>&quot;.</p>
+		<p>Examples:</p>
+<pre>  myterm.write(&quot;Switching to <span class="markup">%c(@burlywood)</span>burlywood<span class="markup">%c()</span> and back again.&quot;);
+  myterm.write(&quot;Switching to <span class="markup">%c(@orange)</span>orange<span class="markup">%c()</span> and back again.&quot;);
+</pre>
+		<p>There are no color codes associated with this. Internally the bits 8 to 15 of the style vector (bit-mask 0xff00) are used for these colors. (Values start with or 0x1000.)</p>
+
+		<p>The names of these 136 colors are:</p>
+		<p style="margin-left: 20px;">aliceblue antiquewhite aqua aquamarine azure beige black blue blueviolet brown burlywood cadetblue chartreuse chocolate coral cornflowerblue cornsilk crimson darkblue darkcyan darkgoldenrod darkgray darkgreen darkkhaki darkmagenta darkolivegreen darkorange darkorchid darkred darksalmon darkseagreen darkslateblue darkslategray darkturquoise darkviolet deeppink deepskyblue dimgray dodgerblue firebrick floralwhite forestgreen fuchsia gainsboro ghostwhite gold goldenrod gray green greenyellow honeydew hotpink indianred indigo ivory khaki lavender lavenderblush lawngreen lemonchiffon lightblue lightcoral lightcyan lightgoldenrodyellow lightgreen lightgrey lightpink lightsalmon lightseagreen lightskyblue lightslategray lightsteelblue lightyellow lime limegreen linen maroon mediumaquamarine mediumblue mediumorchid mediumpurple mediumseagreen mediumslateblue mediumspringgreen mediumturquoise mediumvioletred midnightblue mintcream mistyrose moccasin navajowhite navy oldlace olive olivedrab orange orangered orchid palegoldenrod palegreen paleturquoise palevioletred papayawhip peachpuff peru pink plum powderblue purple red rosybrown royalblue saddlebrown salmon sandybrown seagreen seashell sienna silver skyblue slateblue slategray snow springgreen steelblue tan teal thistle tomato turquoise violet wheat white whitesmoke yellow yellowgreen</p>
+
+		<p>As above all color names are not case sensitive.</p>
+		<p>The values of this color set is fixed, you cannot change them using TermGlobals.setColor(). (The codes of this set are mapped internally to color strings. Changing these would be possible, but would not make much sense.)</p>
+
+		<p>&nbsp;</p>
+		<p>3) Using the web color set</p>
+
+		<p>Finally you may use any of the 216 standard web colors.<br>
+		You access these by a leading &quot;<tt>#</tt> and the 6-hex-digit color code of the color.<br>
+		(You may also use the 3-digit CSS format for these colors).</p>
+
+		<p>Examples:</p>
+<pre>  myterm.write(&quot;Switching to <span class="markup">%c(#ff0000)</span>red<span class="markup">%c()</span> and back again.&quot;);
+  myterm.write(&quot;Switching to <span class="markup">%c(#f00)</span>red<span class="markup">%c()</span> and back again.&quot;);
+</pre>
+		<p>Again there are no accessible color codes associated to these. Internally these colors are mapped to the bit-mask 0xff0000 of the style vector.</p>
+
+		<p>If the given color code is not part of the web color set, but represents a valid color in 6-digit format or in short 3-digit notation, the color will be matched to the nearest web color available (e.g. &quot;#9a44ee&quot; =&gt; &quot;#9933ff&quot;).</p>
+
+		<p>The available color codes are (in long notation):</p>
+
+<p style="margin-left:20px;">000000 000033 000066 000099 0000cc 0000ff 003300 003333 003366 003399 0033cc 0033ff 006600 006633 006666 006699 0066cc 0066ff 009900 009933 009966 009999 0099cc 0099ff 00cc00 00cc33 00cc66 00cc99 00cccc 00ccff 00ff00 00ff33 00ff66 00ff99 00ffcc 00ffff 330000 330033 330066 330099 3300cc 3300ff 333300 333333   333366 333399 3333cc 3333ff 336600 336633 336666 336699 3366cc 3366ff 339900    339933 339966 339999 3399cc 3399ff 33cc00 33cc33 33cc66 33cc99 33cccc 33ccff    33ff00 33ff33 33ff66 33ff99 33ffcc 33ffff 660000 660033 660066 660099 6600cc    6600ff 663300 663333 663366 663399 6633cc 6633ff 666600 666633 666666 666699    6666cc 6666ff 669900 669933 669966 669999 6699cc 6699ff 66cc00 66cc33 66cc66    66cc99 66cccc 66ccff 66ff00 66ff33 66ff66 66ff99 66ffcc 66ffff 990000 990033 990066 990099 9900cc 9900ff 993300 993333 993366 993399 9933cc 9933ff 996600 996633 996666 996699 9966cc 9966ff 999900 999933 999966 999999 9999cc 9999ff 99cc00 99cc33 99cc66 99cc99 99cccc 99ccff 99ff00 99ff33 99ff66 99ff99 99ffcc 99ffff cc0000 cc0033 cc0066 cc0099 cc00cc cc00ff cc3300 cc3333 cc3366 cc3399 cc33cc cc33ff cc6600 cc6633 cc6666 cc6699 cc66cc cc66ff cc9900 cc9933 cc9966 cc9999 cc99cc cc99ff cccc00 cccc33 cccc66 cccc99 cccccc ccccff ccff00 ccff33 ccff66 ccff99 ccffcc ccffff ff0000 ff0033 ff0066 ff0099 ff00cc ff00ff ff3300 ff3333 ff3366 ff3399 ff33cc ff33ff ff6600 ff6633 ff6666 ff6699 ff66cc ff66ff ff9900 ff9933 ff9966 ff9999 ff99cc ff99ff ffcc00 ffcc33 ffcc66 ffcc99 ffcccc ffccff ffff00 ffff33 ffff66 ffff99 ffffcc ffffff</p>
+
+		<p>As above all color codes are not case sensitive.</p>
+		<p>The values of this color set is fixed, you cannot change them using TermGlobals.setColor(). (The codes of this set are mapped internally to color strings. Changing these would be possible, but would not make much sense.)</p>
+
+		<p>&nbsp;</p>
+
+		<p>All this adds up to the complete color-markup syntax:</p>
+<pre>  &lt;color-markup&gt;     ::= &quot;%c&quot;&lt;color-expression&gt;
+  &lt;color-expression&gt; ::= &lt;hex-digit&gt; | &lt;label-expression&gt;
+  &lt;label-expression&gt; ::= &quot;(&quot;&lt;internal-color&gt|&quot;@&quot;&lt;netscape-color&gt;&quot;|#&quot;&lt;web-color&gt;&quot;)&quot
+  &lt;hex-digit&gt;        ::= &quot;0&quot; - &quot;F&quot;
+  &lt;internal-color&gt;   ::= any of the names referring to the 16 internal colors
+                         or any decimal or hex value 0 &lt;= n &lt; 15
+  &lt;netscape-color&gt;   ::= any of the names of the 136 named netscape colors
+  &lt;web-color&gt;        ::= any of the codes of the 216 standard web colors
+</pre>
+		<p>&nbsp;</p>
+		<p>In short, there are three color sets available:</p>
+		<ul>
+		<li>One for configurable colors, you access them by a hex digit or <tt>(&lt;name&gt;)</tt></li>
+		<li>One for netscape color names, you access them by <tt>(@&lt;name&gt;)</tt></li>
+		<li>One for web colors, you access them by <tt>(#&lt;code&gt;)</tt></li>
+		</ul>
+		<p>Generally any color-markup begins with &quot;<tt>%c</tt>&quot; and is followed by one of the three notations.
+&quot;<tt>%c0</tt>&quot;, &quot;<tt>%c()</tt>&quot;, or &quot;<tt>%c(default)</tt>&quot; switch back to the default color.</p>
+		<p>Supplying an invalid or non-matching color label or value will result in switching back to the default color. (e.g. &quot;%c(xxx)&quot; == &quot;%c()&quot;)</p>
+		<p>&nbsp;</p>
+</td>
+	</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_globbing.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_globbing.html
new file mode 100644
index 0000000..910694a
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_globbing.html
@@ -0,0 +1,561 @@
+<html>
+<head>
+	<title>termlib Globbing Sample</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script type="text/javascript">
+<!--
+
+// *** text globbing sample ***
+// mass:werk, N.Landsteiner 2009
+
+// dictionary for globbing
+// Object of arrays per first letter, others in 'nonalpha'
+
+var termGlobDict = {
+	'a': [
+			'all',
+			'alternate',
+			'any',
+			'anyone',
+			'anywhere',
+			'anyhow',
+			'are',
+			'arbitrage',
+			'arbitrary'
+		],
+	'b': [
+			'bar',
+			'bit',
+			'byte',
+			'better',
+			'best',
+			'boost',
+			'booster'
+		],
+	'c': [
+			'case',
+			'character',
+			'completion'
+		],
+	'd': [
+			'delete',
+			'dialog',
+			'display'
+		],
+	'e': [
+			'either',
+			'element',
+			'empty'
+		],
+	'f': [
+			'first',
+			'foo',
+			'function'
+		],
+	'g': [
+			'get',
+			'glob',
+			'globbing'
+		],
+	'h': [
+			'head',
+			'heat',
+			'help'
+		],
+	'i': [
+			'is',
+			'it',
+			'iteration'
+		],
+	'j': [
+			'joke',
+			'just',
+			'justice'
+		],
+	'k': [
+			'karma',
+			'kilo',
+			'kilobit'
+		],
+	'l': [
+			'lambda',
+			'like',
+			'limit'
+		],
+	'm': [
+			'meta',
+			'metaphysic',
+			'metaphor'
+		],
+	'n': [
+			'neither',
+			'never',
+			'number'
+		],
+	'o': [
+			'object',
+			'open',
+			'order'
+		],
+	'p': [
+			'parser',
+			'print',
+			'prompt'
+		],
+	'q': [
+			'quantum',
+			'query',
+			'quote'
+		],
+	'r': [
+			'remember',
+			'rest',
+			'roman'
+		],
+	's': [
+			'sane',
+			'some',
+			'sort'
+		],
+	't': [
+			'target',
+			'tell',
+			'tolerance'
+		],
+	'u': [
+			'under',
+			'upper',
+			'urgent'
+		],
+	'v': [
+			'vane',
+			'vertical',
+			'vital'
+		],
+	'w': [
+			'want',
+			'which',
+			'width'
+		],
+	'x': [
+			'x-ray',
+			'xanadu',
+			'xylophone'
+		],
+	'y': [
+			'yacht',
+			'yet',
+			'ypsilon'
+		],
+	'z': [
+			'zet',
+			'zeta',
+			'zoom'
+		],
+
+	'nonalpha': [
+		// non-alphanumeric go here
+		'100',
+		'1000',
+		'0.0',
+		'#!/usr/bin/perl'
+	]
+};
+
+// flag: sort hit list alphabetical
+var termGlobSortAlphabetical = false;
+
+var term;
+
+function termOpen() {
+	if ((!term) || (term.closed)) {
+		term = new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				bgColor: '#232e45',
+				greeting: '%+r **** termlib.js globbing sample **** %-r%n%ntype any text and hit ESC or TAB for globbing.%ntype "exit" to quit.%n ',
+				handler: termHandler,
+				exitHandler: termExitHandler,
+				ctrlHandler: termCtrlHandler,
+				printTab: false,
+				closeOnESC: false
+			}
+		);
+		term.open();
+
+		// dimm UI text
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+}
+
+function termExitHandler() {
+	// reset the UI
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+function termHandler() {
+	// default handler + exit
+	this.newLine();
+	if (this.lineBuffer.search(/^\s*exit\s*$/i) == 0) {
+		this.close();
+		return;
+	}
+	else if (this.lineBuffer != '') {
+		this.type('You typed: '+this.lineBuffer);
+		this.newLine();
+	}
+	this.prompt();
+}
+
+// this is our control handler where we trap the TAB and ESC
+/*
+	C.f.: the according entry in the initialization object of Terminal.open() above,
+	where we
+		1) regeistered this handler
+		2) released the TAB and the ESC from the default handling
+*/
+
+function termCtrlHandler() {
+	var ch = this.inputChar;
+	if (ch == termKey.TAB || ch == termKey.ESC) {
+		this.lock=true;
+		// get the command line input and extract the last word
+		var line = this._getLine();
+		var words = line.split(/\s+/);
+		if (words.length) {
+			var word=words[words.length-1];
+			if (word) {
+				// prepare for search
+				var found=new Array();
+				var dialog, re, qword, rword, i;
+				// all persistant data is stored per instance using the namespace this.env
+				this.env.globBuffer=new Array();
+				// select the appropriate dictionary list (based on first letter)
+				// (we could also select a dict on contextual creteria ...)
+				var firstletter = word.charAt(0).toLowerCase();
+				if (firstletter < 'a' || firstletter > 'z') firstletter='nonalpha';
+				var dict=termGlobDict[firstletter];
+				if (dict) {
+					// quote meta and build a regexp
+					qword= word.replace(/([\\\/\+\-\.\*\?\[\]\{\}\(\)^$\|\!])/g, '\\$1');
+					re = new RegExp('^'+qword, 'i');
+					rword = new RegExp('^'+qword+'$', 'i');
+					// test the regexp against the array of possible completions (exlude identical words)
+					for (i=0; i<dict.length; i++) {
+						if (re.test(dict[i]) && !rword.test(dict[i])) found.push(dict[i]);
+					}
+				}
+				if (found.length) {
+					// some completions were found
+					// cut list to max 9 entries
+					if (found.length>9) found.length=9;
+					// sort alphabetical if flag is set;
+					if (termGlobSortAlphabetical) found.sort();
+					// collect a dialog and store the complementary parts in this.env.globBuffer
+					dialog=new Array();
+					dialog.push('Suggestions for "'+word+'":');
+					dialog.push('');
+					dialog.push('  0  '+word+' (CANCEL)');
+					for (i=0; i<found.length; i++) {
+						dialog.push('  '+(i+1)+'  '+found[i]);
+						this.env.globBuffer[i]=String(found[i]).replace(re, '');
+					}
+					dialog.push('');
+					dialog.push('');
+					dialog.push('Choose an option or press any key to continue.');
+					this.env.globCursor=0;
+				}
+				else {
+					// nothing found => compile an appropriate dialog
+					dialog = [
+						'No suggestions found for "'+word+'".',
+						'',
+						'',
+						'Press any key to continue.'
+					];
+					this.env.globCursor=-1;
+				}
+				// backup the whole terminal state
+				this.backupScreen();
+				// reset terminal space to full size (in case there was a status line etc)
+				this.maxCols=this.conf.cols;
+				this.maxLines=this.conf.rows;
+				// and show the dialog
+				termGlobbingShowDialog(this, dialog);
+				// set the cursor on first option (cancel)
+				if (found.length) termGlobbingSetDialogCursor(this, 0);
+				// enter charMode and transfer control to our modal dialog handler
+				this.charMode=true;
+				this.handler=this.ctrlHandler=termGlobbingHandler;
+			}
+		}
+		this.lock=false;
+	}
+	else {
+		return;
+	}
+}
+
+// special handler for the modal globbing dialog
+
+function termGlobbingHandler() {
+	var ch = this.inputChar;
+	// cursor motion controls: move selection up or down and return
+	if (this.env.globCursor>=0) {
+		if (ch==termKey.UP) {
+			if (this.env.globCursor>0) termGlobbingSetDialogCursor(this, -1);
+			return;
+		}
+		if (ch==termKey.DOWN) {
+			if (this.env.globCursor<this.env.globBuffer.length) termGlobbingSetDialogCursor(this, 1);
+			return;
+		}
+	}
+	// other actions (close dialog and evaluate the options):
+	// 1) restore terminal's state from backup and complete with given option, if any
+	// by restoring the terminal's state we also restore the handlers
+	this.restoreScreen();
+	// 2) evaluate any valid options
+	var completion;
+	if (ch >= 49 && ch <= 48+this.env.globBuffer.length) {
+		// we got a valid number as input
+		completion = this.env.globBuffer[ch-49];
+	}
+	else if (ch == termKey.CR && this.env.globCursor>0) {
+		// user hit RETURN and the dialog's cursor was on a selected option
+		completion = this.env.globBuffer[this.env.globCursor-1];
+	}
+	if (completion) {
+		// get position of last char, return value: [r,c]
+		var pos = this._getLineEnd(this.r, this.c);
+		var r = pos[0];
+		var c = pos[1];
+		// advance to next cursor position
+		if (++c == this.maxCols) {
+			c=0;
+			r++;
+		}
+		// set cursor (if necessary) and append the completion
+		this.cursorOff();
+		if (this.r != r || this.c != c) this.cursorSet(r, c);
+		this.type(completion);
+		this.cursorOn();
+
+	}
+	// 3) clean up: reset our special store and unlock
+	this.env.globBuffer.length=0;
+	this.env.globCursor=-1;
+	this.lock=false;
+}
+
+// draw a nice dialog
+
+function termGlobbingShowDialog(termRef, lines) {
+	var horizontalMargin=5;
+	var verticalMargin=2;
+	var horizontalBorderChar='-';
+	var verticalBorderChar='|';
+	var cornerChar='+';
+	var style=8*256; // white (normal style, no color = 0)
+	var l=termRef.conf.cols-horizontalMargin-1;
+	var i, n, line;
+	var b0=cornerChar;
+	var b1=verticalBorderChar;
+	var b2=verticalBorderChar+'  ';
+	var b3=' '+verticalBorderChar;
+	for (i=horizontalMargin+b0.length; i<l; i++) b0+=horizontalBorderChar;
+	for (i=horizontalMargin+b1.length; i<l; i++) b1+=' ';
+	b0+=cornerChar;
+	b1+=verticalBorderChar;
+	var l2=l-b3.length-horizontalMargin;
+	var r=verticalMargin;
+	termRef.typeAt(r++,horizontalMargin, b0, style);
+	termRef.typeAt(r++,horizontalMargin, b1, style);
+	for (n=0; n<lines.length; n++) {
+		if (lines[n]!='') {
+			line=b2+lines[n];
+			for (i=line.length; i<=l2; i++) line+=' ';
+			termRef.typeAt(r++,horizontalMargin, line+b3, style);
+		}
+		else {
+			termRef.typeAt(r++, horizontalMargin, b1, style);
+		}
+	}
+	termRef.typeAt(r++, horizontalMargin, b1, style);
+	termRef.typeAt(r, horizontalMargin, b0, style);
+}
+
+// set the cursor inside the dialog (invert selected option)
+
+function termGlobbingSetDialogCursor(termRef, motion) {
+	// offset is r = verticalMargin+4 and c = horizontalMargin+4
+	// this depends on the layout of our dialog
+	var horizontalMargin=5;
+	var verticalMargin=2;
+	var r,sr,i;
+	var c=horizontalMargin+4;
+	if (!motion) motion=0;
+	// reset any previous selected option
+	// (reset least significant bit of stylevector to 0)
+	if (termRef.env.globCursor>=0 && motion) {
+		r=verticalMargin+4+termRef.env.globCursor;
+		sr=termRef.styleBuf[r];
+		for (i=c; i<c+3; i++) sr[i]&=0xfffffffe;
+		termRef.redraw(r);
+	}
+	// hilite selected option
+	// (invert: set least significant style-bit to 1)
+	termRef.env.globCursor+=motion;
+	r=verticalMargin+4+termRef.env.globCursor;
+	sr=termRef.styleBuf[r];
+	for (i=c; i<c+3; i++) sr[i]|=1;
+	termRef.redraw(r);
+}
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+
+.term {
+	font-family: "Courier New",courier,fixed,monospace;
+	font-size: 12px;
+	color: #94aad6;
+	background: none;
+	letter-spacing: 1px;
+}
+.term .termReverse {
+	color: #232e45;
+	background: #95a9d5;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+tt {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap>
+			Text Globbing Sample<br>&nbsp;
+		</td></tr>
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal &nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			(c) mass:werk,<br>N. Landsteiner 2005-2009<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td class="lh15" id="mainPane">
+		<p><b style="letter-spacing: 1px;">A Simple Globbing Sample (with dialog)</b><br>&nbsp;</p>
+		<p>This sample demonstrates how to back up and restore a terminal's state<br>in order to implement a special mode (here a dialog).<br>
+		It also shows how to trap a special key and how to process the current<br>input of the command line.</p>
+		<p>Open the terminal, type a some text and hit TAB or ESC for globbing.<br>
+		Any completions are evaluated from the last word in the line.</p>
+		<p>Possible completions are stored in an object containing lists (arrays)<br>per first letter:</p>
+		<pre>
+var termGlobDict = {
+   'a': [
+          // put strings beginning with &quot;a&quot; here
+        ],
+   'b': [
+          // put strings beginning with &quot;b&quot; here
+        ]
+   ...
+}</pre>
+		<p>(Only the max. first 9 hits are displayed as possible options.)</p>
+		<p>Inside a dialog options may be selected by either</p>
+		<ul>
+		<li>typing the according number or</li>
+		<li>by moving the cursor and hitting &lt;ENTER&gt;.</li>
+		</ul>
+	</td>
+	</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_import.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_import.html
new file mode 100644
index 0000000..81ba7ef
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_import.html
@@ -0,0 +1,306 @@
+<html>
+<head>
+	<title>termlib Text Import Sample</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script type="text/javascript">
+<!--
+
+// *** text import sample ***
+// mass:werk, N.Landsteiner 2007
+
+var term;
+
+function termOpen() {
+	if ((!term) || (term.closed)) {
+		term = new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				bgColor: '#232e45',
+				greeting: '%+r **** termlib.js import sample **** %-r%n%n * any text is simply echoed%n * for imports use the links at the left%n * type "exit" to quit.%n ',
+				handler: termHandler,
+				exitHandler: termExitHandler
+			}
+		);
+		term.open();
+
+		// dimm UI text
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+}
+
+function termHandler() {
+	// default handler + exit
+	this.newLine();
+	if (this.lineBuffer.search(/^\s*exit\s*$/i) == 0) {
+		this.close();
+		return;
+	}
+	else if (this.lineBuffer != '') {
+		this.type('You typed: '+this.lineBuffer);
+		this.newLine();
+	}
+	this.prompt();
+}
+
+function termExitHandler() {
+	// reset the UI
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+
+// demo hooks
+
+function testInsertAsTypedText() {
+	if ((!term) || (term.closed)) {
+		alert('Please open a terminal first!');
+		return;
+	}
+	var t=prompt('Please enter a text to be typed:');
+	if (t) TermGlobals.insertText(t);
+}
+
+var useMultiLineImport=false;
+
+function testMultiLine(funcFlag) {
+	if ((!term) || (term.closed)) {
+		alert('Please open a terminal first!');
+		return;
+	}
+	// set flag for handler
+	// if true, we'll use importMultiLineText(), else importEachLine()
+	useMultiLineImport=funcFlag;
+
+	// set global keylock (else no key stroke will reach the form element)
+	TermGlobals.keylock = true;
+
+	// and show the multiline prompt
+	TermGlobals.setVisible('promptDiv', true);
+	document.forms.promptForm.content.focus();
+	// input will by handled by promptHandler
+}
+
+function promptHandler(text) {
+	// hide the dialog
+	TermGlobals.setVisible('promptDiv', false);
+
+	// reset keylock and import the text
+	TermGlobals.keylock = false;
+	if (text) {
+		if (useMultiLineImport) {
+			TermGlobals.importMultiLine(text);
+		}
+		else {
+			TermGlobals.importEachLine(text);
+		}
+	}
+}
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+
+.term {
+	font-family: "Courier New",courier,fixed,monospace;
+	font-size: 12px;
+	color: #94aad6;
+	background: none;
+	letter-spacing: 1px;
+}
+.term .termReverse {
+	color: #232e45;
+	background: #95a9d5;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+table.inventory td {
+	padding-bottom: 20px !important;
+}
+
+tt {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td,li,tt {
+		color: #000000;
+	}
+	pre,.prop {
+		color: #000000;
+	}
+	h1 {
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		color: #000000;
+	}
+	a:hover {
+		color: #000000;
+	}
+	a:active {
+		color: #000000;
+	}
+	table.inventory {
+		display: none;
+	}
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap>
+			Text Import Sample<br>&nbsp;
+		</td></tr>
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal &nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			<p><a href="javascript:testInsertAsTypedText()" onfocus="if(this.blur)this.blur();" class="termopen">&gt; test insertText()&nbsp;</a></p>
+			<p><a href="javascript:testMultiLine(false)" onfocus="if(this.blur)this.blur();" class="termopen">&gt; test importEachLine()&nbsp;</a></p>
+			<p><a href="javascript:testMultiLine(true)" onfocus="if(this.blur)this.blur();" class="termopen">&gt; test importMultiLine()&nbsp;</a></p>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			(c) mass:werk,<br>N. Landsteiner 2005-2007<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td class="lh15" id="mainPane">
+		<p><b style="letter-spacing: 1px;">How to import text to a termlib.js Terminal object.</b><br>&nbsp;</p>
+		<p>This page demos 3 different methods of <tt>TermGlobals</tt> for text import:</p>
+		<ul>
+		<li><tt>TermGlobals.insertText( text:String )</tt><br>
+			Auto-types a given text at the current cursor position.<br>
+			this is a true input (just as it came form the keyboard).<br>
+			Works only with single line input.<br>
+			&nbsp;</li>
+		<li><tt>TermGlobals.importEachLine( text:String )</tt><br>
+			Types multiline input to the current command line.<br>
+			The given text exchanges any text on the current command line.<br>
+			Each line is executed separately - just as if it would have<br>
+			been typed with a trailing &lt;ENTER&gt; each.<br>
+			&nbsp;
+			</li>
+		<li><tt>TermGlobals.importMultiLine( text:String )</tt><br>
+			Imports multiple lines of text as one input, fakes terminal input.<br>
+			The whole text will be imported as one string using &quot;\n&quot; as line<br>
+			separator. (As all non-printable characters the newline will be<br>
+			displayed as a caret [CARET/CIRCUMFLEX ACCENT] using <tt>type()</tt>.)<br>
+			As with <tt>TermGlobals.importEachLine()</tt> any text in the current<br>
+			command line will be lost.<br>
+			&nbsp;
+			</li>
+		</ul>
+
+		<p>Note on forms for input:<br>
+		Be sure to set <tt>TermGlobals.keylock</tt> to <i><tt>true</tt></i> before waiting for any form input!</p>
+
+		<p>All three methods act on the currently active Terminal-object and return their<br> success. A negative return value indicates an inactive terminal, or a global or<br>
+		individual lock =&gt; <tt>((TermGlobals.keylock) || (TermGlobals.activeTerm.lock))</tt>.</p>
+	</td>
+	</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+<div id="promptDiv" style="position:absolute; top: 60px; left: 340px; background-color: #ddd; border-color: #fff #888 #888 #fff; border-width: 1px; border-style: solid;z-index:2; visibility: hidden;">
+	<table border="0" cellspacing="8" cellpadding="2">
+	<tr>
+	<td style="font-family: arial,helvetica,sans-serif; font-size: 12px; color: #000;">Please enter a text to import:</td>
+	</tr>
+	<form id="promptForm">
+	<tr>
+	<td><textarea name="content" cols="40" rows="6""></textarea></td>
+	</tr>
+	<tr>
+	<td align="right">
+		<input type="button" value="Cancel" onclick="promptHandler(null, false); this.form.content.value='';">
+		<input type="button" value="Import" onclick="promptHandler(this.form.content.value); this.form.content.value='';">
+	</td>
+	</tr>
+	</form>
+	</table>
+</div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_invaders.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_invaders.html
new file mode 100644
index 0000000..594731c
Binary files /dev/null and b/com.ogamita.www/nasium-lse/terminal/termlib/sample_invaders.html differ
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_remote_terminal.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_remote_terminal.html
new file mode 100644
index 0000000..13e82aa
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_remote_terminal.html
@@ -0,0 +1,543 @@
+<html>
+<head>
+	<title>termlib Remote Terminal</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script type="text/javascript">
+<!--
+
+// *** remote terminal sample ***
+// mass:werk, N.Landsteiner 2007
+
+// path to server script goes here
+var remotePath = '/cgi-bin/termbackend.pl';
+
+// a var to stor the last transfered content
+var lastResponse = '';
+
+var term;
+
+var help = [
+	'%+r **** remote terminal sample **** %-r',
+	' ',
+	'* use "exit" to quit.',
+	'* use "rlogin <username>" for remote login.',
+	'* use "rlogout" to clear any rlogin data.',
+	'* use "clear" to clear the screen.',
+	'* use "help" to see this page.',
+	'* any other command will be executed on the remote host.',
+	' '
+];
+
+function termOpen() {
+	if ((!term) || (term.closed)) {
+		term = new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				bgColor: '#232e45',
+				greeting: help.join('\n'),
+				handler: termHandler,
+				exitHandler: termExitHandler
+			}
+		);
+		// set up some instance properties for server-client communication
+		// we use the private namespace "env" of our Terminal instance
+		term.env.myHistPtr = 0;
+		term.env.dir = '';
+		term.env.userid = '';
+		term.env.password = '';
+		// and open the terminal
+		term.open();
+
+		// some UI tasks
+		var lastResponseLink = (document.getElementById)?
+			document.getElementById('lastResponseLink') : document.all.lastResponseLink;
+		if (lastResponseLink) lastResponseLink.style.display = 'inline';
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+}
+
+function termExitHandler() {
+	// reset the UI
+	var lastResponseLink = (document.getElementById)?
+		document.getElementById('lastResponseLink') : document.all.lastResponseLink;
+	if (lastResponseLink) lastResponseLink.style.display = 'none';
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+// terminal main loop
+
+function termHandler() {
+	this.newLine();
+
+	// check for raw mode first
+	if (this.rawMode) {
+		this.rawMode = false;
+		if (this.env.getPassword) {
+			// we just recieved the password of "rlogin"
+			// first store password
+			this.env.password = this.lineBuffer;
+			this.env.getPassword = false;
+			// store the local terminal history position for later
+			term.env.myHistPtr = this.histPtr;
+			// send an initial request to verify and get the working dir
+			this.send(
+				{
+					url: remotePath,
+					method: 'post',
+					callback: socketCallback,
+					data: {
+						command: 'echo "connection up and ready."',
+						dir: '',
+						user: this.env.userid,
+						pass: this.env.password
+					}
+				}
+			);
+			// done, leave without prompt (this will come from the callback)
+			return;
+		}
+		// we shouldn't end here
+		this.prompt(); return;
+	}
+
+	// clear heading white space from input line
+	this.lineBuffer = this.lineBuffer.replace(/^\s+/, '');
+
+	// evaluate commands (split to words first)
+	var argv = this.lineBuffer.split(/\s+/);
+	var cmd = argv[0];
+
+	switch (cmd) {
+		case 'rlogin':
+			if (argv.length<2 || argv[1]=='') {
+				this.type('usage: rlogin <username>');
+			}
+			else {
+				this.env.getPassword = true;
+				this.env.userid = argv[1];
+				this.type('Password: ');
+				// exit in raw mode for password (blind input)
+				this.rawMode = true;
+				this.lock = false;
+				return;
+			}
+			break;
+
+		case 'rlogout':
+			// just forget username and password, reset prompt-string
+			this.env.dir = '';
+			this.env.userid = '';
+			this.env.password = '';
+			this.ps = '>';
+			// reset the local terminal's history to login-state
+			this.histPtr = this.env.myHistPtr;
+			this.history.length = this.histPtr;
+			// clear stored last response
+			lastResponse='';
+			break;
+
+		case 'clear':
+			this.clear();
+			break;
+
+		case 'help':
+			this.clear();
+			this.write(help);
+			break;
+
+		case 'exit':
+			this.env.dir = '';
+			this.env.userid = '';
+			this.env.password = '';
+			this.close();
+			lastResponse='';
+			return;
+
+		default:
+			// no local command
+			if (this.lineBuffer != '') {
+				if (!this.env.userid) {
+					this.write('Not logged in, sorry.'); // not logged in
+				}
+				else {
+					// send (unparsed) line to server-backend
+					this.send(
+						{
+							url: remotePath,
+							method: 'post',
+							callback: socketCallback,
+							data: {
+								command: this.lineBuffer,
+								dir: this.env.dir,
+								user: this.env.userid,
+								pass: this.env.password
+							}
+						}
+					);
+					// leave without prompt (this will come from the callback)
+					return;
+				}
+			}
+	}
+	this.prompt();
+}
+
+
+// callback for server-client communication
+
+function socketCallback() {
+	var response = this.socket;
+	if (response.success) {
+		// split the responseText to lines
+		var lines = response.responseText.split('\n');
+		// get the last valid line and check it
+		if (lines.length > 1 && lines[lines.length-1] == '') lines.length--;
+		var lastline = lines[lines.length-1];
+		if (lastline.indexOf('dir:') == 0) {
+			// if last line starts with "dir:", store this as working dir
+			this.env.dir = lastline.substring(4);
+			// shorten output
+			lines.length--;
+			if (lines[lines.length-1] == '') lines.length--;
+			// and set the prompt-string of the terminal
+			this.ps = '[' + this.env.dir + ']$';
+		}
+		else if (lines.length == 1 && lastline == 'Sorry.') {
+			// autorization failed, clear login properties
+			this.env.dir = '';
+			this.env.userid = '';
+			this.env.password = '';
+			this.ps = '>';
+			// reset the local terminal's history to login-state
+			this.histPtr = this.env.myHistPtr;
+			this.history.length = this.histPtr;
+		}
+		// escape any '%' markups for write
+		for (var i=0; i<lines.length; i++) lines[i] = lines[i].replace(/%/g, '%%');
+		// write the remaining content to the terminal in more-mode
+		this.write(lines, true);
+		// store it in a var for later use
+		lastResponse = lines.join('\n');
+	}
+	else {
+		var s = 'Request failed: ' + response.status + ' ' + response.statusText;
+		if (response.errno) s += '\n'+response.errstring;
+		this.write(s);
+		// reset any authorization properties
+		this.env.dir = '';
+		this.env.userid = '';
+		this.env.password = '';
+		this.ps = '>';
+		this.prompt();
+	}
+}
+
+
+// a function to show the last transfered content in a textarea for copy etc
+
+function showLastResponse() {
+	if ((!term) || (term.closed)) return;
+	var d = (document.getElementById)?
+		document.getElementById('lastResponseDiv') : document.all.lastResponseDiv;
+	if (!d) {
+		d = document.createElement('div');
+		var s= '<form method="get" onsubmit="return false;">';
+		s+= '<table border="0" cellspacing="0" cellpadding="12" style="background-color: #808080; border-style: solid; border-width: 1px; border-color: #999 #555 #555 #999;">';
+		s+= '<tr><td style="color: #000; text-align: center;">Last transfered content<\/td><\/tr>';
+		s+= '<tr><td><textarea cols="80" rows="24" name="lastResponseDisplay" id="lastResponseDisplay" style="color: #000; background-color: #fff;"><\/textarea><\/td><\/tr>';
+		s+= '<tr><td style="color: #000; text-align: right;"><input type="button" value="close" onclick="hideLastResponse()"><\/td><\/tr>';
+		s+= '<\/table>';
+		s+= '<\/form>';
+		d.innerHTML = s;
+		d.id = 'lastResponseDiv';
+		d.style.display = 'block';
+		d.style.position = 'absolute';
+		d.style.left = '10px';
+		d.style.top = '10px';
+		d.style.zIndex = 1000;
+		document.body.appendChild(d);
+	}
+	// lock the terminal's keyHandler in order to release keyboard capture
+	TermGlobals.keylock=true;
+	// insert the last stored Response
+	var f = (document.getElementById)?
+		document.getElementById('lastResponseDisplay') : document.all.lastResponseDisplay;
+	if (f) f.value = lastResponse;
+}
+
+function hideLastResponse() {
+	var d = (document.getElementById)?
+		document.getElementById('lastResponseDiv') : document.all.lastResponseDiv;
+	if (d) {
+		d.style.display = 'none';
+		d.parentNode.removeChild(d);
+	}
+	// reset the terminal's keyboard lock
+	TermGlobals.keylock = false;
+}
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+
+.term {
+	font-family: "Courier New",courier,fixed,monospace;
+	font-size: 12px;
+	color: #94aad6;
+	background: none;
+	letter-spacing: 1px;
+}
+.term .termReverse {
+	color: #232e45;
+	background: #95a9d5;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+table.inventory td {
+	padding-bottom: 20px !important;
+}
+
+tt {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+
+.scriptexample {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #222222;
+	background-color: #bbbbbb;
+	padding: 12px;
+}
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td,li,tt {
+		color: #000000;
+	}
+	pre,.prop {
+		color: #000000;
+	}
+	h1 {
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		color: #000000;
+	}
+	a:hover {
+		color: #000000;
+	}
+	a:active {
+		color: #000000;
+	}
+	table.inventory {
+		display: none;
+	}
+	.scriptexample {
+		background-color: #eeeeee !important;
+		color: #000000 !important;
+	}
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal&nbsp;</a>
+		</td></tr>
+		<tr><td nowrap height="34" valign="bottom">
+			<a href="javascript:showLastResponse()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='show last transfer document'; return true" onmouseout="window.status=''; return true" class="termopen" id="lastResponseLink" style="display: none;">&gt; show last response&nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			remote terminal sample<br>
+			(c) mass:werk,<br>N. Landsteiner 2005-2007<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td class="lh15" width="560" id="mainPane">
+		<p><b style="letter-spacing: 1px;">termlib.js Remote Terminal Sample</b><br>&nbsp;</p>
+
+		<p>This is a simple example for a remote terminal client using termlib.js.</p>
+		<p>Be sure to understand why <span style="letter-spacing: 1px;">NOT</span> to use this for real!</p>
+
+		<p>&nbsp;<br><b style="letter-spacing: 1px;">The Client Part</b></p>
+		<p>For the client-side part see the source code of this page:</p>
+
+		<p>Userid and password are transfered in plain text in the post body of each request. Also userid and password are stored in instance properties of the Terminal object. (Use the local command &quot;rlogout&quot; to clear those.)<br>For minimum security username and password settings are not stored in the script but must be checked on the server side.</p>
+
+		<p>When logged in, the terminal echoes any output of the shell as it executes the command(s) at the remote host. Have a look at the Perl script below for an example of how to capture both <tt title="STDOUT: Standard Output">STDOUT</tt> and <tt title="STDERR: Standard Error">STDERR</tt> of a command.</p>
+
+		<p>You will <span style="letter-spacing: 1px;">NOT</span> be able to edit any file at the remote host! For this you would need a true interactive terminal client. (A work-around could be the implementation of a vi-like editor inside the terminal or an export/import facillity for external editing. So you could fetch a file, edit it in the browser, and transfer it back to the remote host.) For the same reason you won't be able to execute any interactive commands (e.g. &quot;<tt title="switch user">su</tt>&quot;).</p>
+
+		<p>Be sure to understand that this does <span style="letter-spacing: 1px;">NOT</span> open an interactive session.<br>
+		The location of the current working directory is transfered forth and back between host and client. This enables some real shell-like behavior, but it is essential to understand that each line of command(s) is executed separately at the remote host in a shell session of its own.</p>
+
+		<p>Userid and password are only provided for (a very weak) secutity. The commands will execute with the <tt title="UID: User ID">UID</tt> and <tt title="GID: Group ID">GID</tt> of the server-side CGI-script.</p>
+
+		<p>As all client-server transfers are performed via XMLHttpRequests, you may only connect to the originating host of the served page.</p>
+
+		<p>Please mind that there is no guarantee for the correctness of the displayed or transfered data.<br>
+		The termlib.js interface should work reliably with the printable characters of the US-ASCII charset (but mind that it is provided &quot;as is&quot;). Be sure to understand the risks of charset-translations (as might be involved client-side as well as server-side with any interface of this kind) and the immanent risk of damage and/or loss of data.</p>
+
+		<p>&nbsp;</p>
+
+		<p><b style="letter-spacing: 1px;">The Server Part</b></p>
+
+		<p>This is a simple Perl script as an example for a server-side interface.<br>We'll assume the host is UINIX-style and addressed via the Common Gateway Interface of the web-server (e.g. Apache).
+		As above, be sure to understand why <span style="letter-spacing: 1px;">NOT</span> to use this for real.</p>
+
+
+<pre class="scriptexample">#!/usr/bin/perl
+
+### termbackend.pl                                           ###
+### sample backend for the termlib.js remote terminal sample ###
+### example only, do not use for real!                       ###
+
+use strict;
+use CGI;
+use IPC::Open3;
+use Symbol qw(gensym);
+
+#### username and password here
+
+my $userid = 'user';
+my $password = 'password';
+
+#### get cgi params
+
+my $q = new CGI;
+my $user = $q-&gt;param('user');
+my $pass = $q-&gt;param('pass');
+my $cmd = $q-&gt;param('command') || '';
+my $dir = $q-&gt;param('dir') || $ENV{DOCUMENT_ROOT};
+
+#### start output
+
+print &quot;Content-type: text/plain\n\n&quot;;
+
+if (($user eq $userid) && ($pass eq $password)) {
+    # passed user authorization
+
+    # prepare the command string:
+    # first append echo of working dir as last line
+    # and clean up the command string (leading blanks etc)
+
+    $cmd .= ';echo &quot;&quot;;echo &quot;dir:$PWD&quot;';
+    $cmd =~ s/^[\\;\s]+//;
+
+    # change dir and return command output ...
+
+    chdir($dir) || die &quot;Error: Could not change directory.&quot;;
+
+    # simple backticks (print `$cmd`) won't catch STDERR
+    # so we'll use open3 and mix STDOUT and STDERR ...
+
+    my $pid = open3(gensym, \*CATCH, \*CATCH, $cmd);
+    while( &lt;CATCH&gt; ) {
+       print $_;
+    }
+    waitpid($pid, 0);
+}
+else {
+    # authorization failed, return Sorry.
+    print &quot;Sorry.&quot;;
+}
+
+### eof</pre>
+
+	<p>&nbsp;</p>
+	<p>A script like this must be installed on your web-server (probably in the cgi-bin directory) with sufficient execute permissions in order to make this sample work. Since this is not installed on the <a href="http://www.masswerk.at/" target="_blank">mass:werk</a> server, this page won't be functional on this site.</p>
+	<p>Be sure to understand that installing a script like this on a public server will mean to welcome hackers with open doors ...</p>
+	<p>&nbsp;</p>
+
+	<p>Disclaimer<br>
+	This piece of software is published as an example only and AS IS. No warranty of any kind is granted, not even the implied warranty of fitness for a particular purpose. You are advised to <span style="letter-spacing: 1px;">NOT</span> use this script for real. Be aware that using this script or any interface alike bears the risk of serious damage and loss of data. Be also aware that there is no guarantee of any kind for the correctness of the data displayed or transfered.</p>
+
+	</td>
+	</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_socket.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_socket.html
new file mode 100644
index 0000000..a78ced5
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_socket.html
@@ -0,0 +1,583 @@
+<html>
+<head>
+	<title>termlib Socket Sample</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script type="text/javascript">
+<!--
+
+// *** request sample ***
+// mass:werk, N.Landsteiner 2007
+
+var term;
+
+var help = [
+	'%+r **** termlib socket sample **** %-r',
+	' ',
+	'* type "get" and a filename to send a http-request,',
+	'  use option -e for a JSON-style eval',
+	'* type "help" for this page',
+	'* type "exit" to quit.',
+	' ',
+	'TESTS:',
+	'  for a normal file request try:  get tests/test1.txt',
+	'  for an evaled JSON request try: get -e tests/test2.txt',
+	' '
+];
+
+function termOpen() {
+	if ((!term) || (term.closed)) {
+		term = new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				bgColor: '#232e45',
+				greeting: help.join('\n'),
+				handler: termHandler,
+				exitHandler: termExitHandler
+			}
+		);
+		term.open();
+
+		// dimm UI text
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+}
+
+function termExitHandler() {
+	// reset the UI
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+function pasteCommand(text) {
+	// insert given text into the command line and execute
+	var termRef = TermGlobals.activeTerm;
+	if ((!termRef) || (termRef.closed)) {
+		alert('Please open the terminal first.');
+		return;
+	}
+	if ((TermGlobals.keylock) || (termRef.lock)) return;
+	termRef.cursorOff();
+	termRef._clearLine();
+	for (var i=0; i<text.length; i++) {
+		TermGlobals.keyHandler({which: text.charCodeAt(i), _remapped:true});
+	}
+	TermGlobals.keyHandler({which: termKey.CR, _remapped:true});
+}
+
+function termHandler() {
+	this.newLine();
+
+	this.lineBuffer = this.lineBuffer.replace(/^\s+/, '');
+	var argv = this.lineBuffer.split(/\s+/);
+	var cmd = argv[0];
+
+	switch (cmd) {
+		case 'get':
+			if (argv[1] == '-e') {
+				// option -e
+				if (argv.length >= 3) {
+					this.send(
+						{
+							url: argv[2],
+							method: 'get',
+							callback: myServerCallback,
+							getHeaders: ['Content-Type', 'Content-Length']
+						}
+					);
+					return;
+				}
+			}
+			else if (argv.length >= 2) {
+				// use default request-callback
+				this.send(
+					{
+						url: argv[1],
+						method: 'get'
+					}
+				);
+				return;
+			}
+			this.write('Usage: send [-e] filename');
+			break;
+
+		case 'help':
+			this.clear();
+			this.write(help);
+			break;
+
+		case 'exit':
+			this.close();
+			return;
+
+		default:
+			if (this.lineBuffer != '') {
+				this.type('You typed: ' + this.lineBuffer);
+				this.newLine();
+			}
+	}
+	this.prompt();
+}
+
+function myServerCallback() {
+	var response=this.socket;
+	if (response.success) {
+		var func=null;
+		try {
+			func=eval(response.responseText);
+		}
+		catch (e) {
+		}
+		if (typeof func=='function') {
+			try {
+				func.apply(this);
+			}
+			catch(e) {
+				this.write('An error occured within the imported function: '+e);
+			}
+		}
+		else {
+			this.write('Server Response:\n' + response.responseText);
+		}
+		this.newLine();
+		this.write('Response Statistics:');
+		this.newLine();
+		this.write('  Content-Type: ' + response.headers.contentType);
+		this.newLine();
+		this.write('  Content-Length: ' + response.headers.contentLength);
+	}
+	else {
+		var s='Request failed: ' + response.status + ' ' + response.statusText;
+		if (response.errno) s +=  '\n' + response.errstring;
+		this.write(s);
+	}
+	this.prompt();
+}
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td,li {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+
+.term {
+	font-family: "Courier New",courier,fixed,monospace;
+	font-size: 12px;
+	color: #94aad6;
+	background: none;
+	letter-spacing: 1px;
+}
+.term .termReverse {
+	color: #232e45;
+	background: #95a9d5;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+table.inventory td {
+	padding-bottom: 20px !important;
+}
+
+tt,pre {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+
+li {
+	line-height: 15px;
+	margin-bottom: 8px !important;
+}
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td,li,tt {
+		color: #000000;
+	}
+	pre,.prop {
+		color: #000000;
+	}
+	h1 {
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		color: #000000;
+	}
+	a:hover {
+		color: #000000;
+	}
+	a:active {
+		color: #000000;
+	}
+	table.inventory {
+		display: none;
+	}
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap>
+			Server Request Sample<br>&nbsp;
+		</td></tr>
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal&nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			<p>Tests:</p>
+			<p><a href="javascript:pasteCommand('get tests/test1.txt')" onfocus="if(this.blur)this.blur();" class="termopen">&gt; 1) a simple request&nbsp;</a></p>
+			<p><a href="javascript:pasteCommand('get -e tests/test2.txt')" onfocus="if(this.blur)this.blur();" class="termopen">&gt; 2) a JSON request &nbsp;</a></p>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			(c) mass:werk,<br>N. Landsteiner 2005-2007<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td class="lh15" width="560" id="mainPane">
+		<p><b style="letter-spacing: 1px;">termlib-Socket Sample</b><br>&nbsp;</p>
+
+		<p>This page demos the termlib.js socket extension for client-server communication via asynchronous XMLHttpRequests (commonly known as AJAX).</p>
+		<p>The socket extension provides a tight integration for all XMLHttpRequest tasks that would commonly occur in a real world application.</p>
+		<p>All you have to do, is call the <tt>send( &lt;options&gt; )</tt> method and return.<br>The request (might it succeed or fail) will come back to your callback-handler with your Terminal instance set as the <tt>this</tt> object.</p>
+
+		<p>example:</p>
+<pre>  // assume we are inside a handler
+  // (&quot;this&quot; refers to an instance of Terminal)
+
+  this.send(
+    {
+      url:      &quot;my_service.cgi&quot;,
+      method:   &quot;post&quot;,
+      data:     myDataObject,
+      callback: mySocketCallback
+    }
+  );
+  return;
+
+  function mySocketCallback() {
+    if (this.socket.succes) {
+       // status 200 OK
+       this.write(&quot;Server said:\n&quot; + this.socket.responseText);
+    }
+    else if (this.socket.errno) {
+       // connection failed
+       this.write(&quot;Connection error: &quot; + this.socket.errstring);
+    }
+    else {
+       // connection succeeded, but server returned other status than 2xx
+       this.write(&quot;Server returned: &quot; +
+                  this.socket.status + &quot; &quot; + this.socket.statusText);
+    }
+    this.prompt()
+  }
+</pre>
+		<p>&nbsp;<br><b style="letter-spacing: 1px;">The <tt>send()</tt> API:</b></p>
+
+		<p>As <tt>send( &lt;options&gt; )</tt> is called the socket library creates a XMLHttpRequest, collects and escapes the provided data, executes any initial tasks, and sends the request.</p>
+
+		<p>All settings are transfered via a single options-object containing one ore more of the following options:</p>
+
+		<table border="0" cellspacing="0" cellpadding="4">
+		<tr valign="top">
+			<td nowrap><tt>url</tt></td>
+			<td>the request url, must be on the same host (default &quot;&quot;)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>method</tt></td>
+			<td>request method (GET or POST; default GET)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>data</tt></td>
+			<td>request data (default &quot;&quot;), may be of any type, preferably an object with key-value pairs.<br>
+				the data is serialized and escaped for you by the library. (Please note that there might be unexpected results with nested objects or arrays. By the way: arrays are serialized as comma separated lists.) For complex data structures use a XML-object (true AJAX, see below).<br>
+				The resulting string will be either appended to the request url (GET) or used as post-body.
+			</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>callback</tt></td>
+			<td>the callback-function to handled the response</td>
+		</tr>
+		<tr><td colspan="2">&nbsp;<br>advanced settings:</td></tr>
+		<tr valign="top">
+			<td nowrap><tt>postbody</tt></td>
+			<td>Use this for true AJAX (e.g. sending a XML-object to the server)<br>
+				If a postbody option is supplied, this will change the behavior as follows:<br>
+				1) the request method is forced to &quot;POST&quot;<br>
+				2) the postbody will be used instead of any supplied data object<br>
+				3) the postbody will be transmitted as is (no serializing or escaping)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap></td>
+			<td>
+				(Note: The creation and parsing of XML-objects is out of the scope of this document and termlib.js and is therefor left entirely up to you.)
+			</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>userid</tt></td>
+			<td>optional user-id for implicit login (transfered without encryption!)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>password</tt></td>
+			<td>optional password for implicit login (transfered without encryption!)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>mimetype</tt></td>
+			<td>optional MIME-type to override the response's default MIME</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>headers</tt></td>
+			<td>optional object (key-value pairs) of HTTP-headers to be included in the request</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>getHeaders</tt></td>
+			<td>optional array (or object with labels as keys) of HTTP-headers to be extracted from the response</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>timeout</tt></td>
+			<td>optional individual timeout in msecs for this request<br>(default: 10000)</td>
+		</tr>
+		</table>
+
+		<p><tt>send()</tt> will add a parameter &quot;<tt>_termlib_reqid</tt>&quot; with a unique id to every GET request that doesn't target the local file system (sent from pages with the &quot;file:&quot; schemes). This additional parameter ensures that MSIE (MS Internet Explorer) will truly fetch the requested document instead of serving it from its cache.</p>
+
+		<p>A word on local requests:<br>
+		Please note that local requests (from and to the local file system) won't work with MSIE 7. (Sorry, ask Bill.) This MSIE 7 error will be captured as connection error with <tt>errno</tt> 2 (&quot;Could not open XMLHttpRequest.&quot;).<br>
+		If a browser requests a local document that does not exist, a 404 (Not Found) status code will be generated by the library and the <tt>errno</tt> property will be set to 5 (&quot;The requested local document was not found.&quot;).</p>
+
+		<p>&nbsp;<br><b style="letter-spacing: 1px;">Global Config Settings:</b></p>
+		<p>There are a few global settings in <tt>Terminal.prototype._HttpSocket.prototype</tt> (the prototype of the internal socket object used by the library), which define some default values:</p>
+
+		<table border="0" cellspacing="0" cellpadding="4">
+		<tr valign="top">
+			<td nowrap><tt>useXMLEncoding</tt></td>
+			<td>Boolean flag (default: false) for parameter delimiters<br>
+				if false, parameters will be delimited by &quot;&amp&quot;.<br>
+				if true, parameters will be delimited using &quot;;&quot; (new XML compatible syntax).
+			</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>defaulTimeout</tt></td>
+			<td>Number of ticks (milliseconds, default: 10000 = 10 sec) for request timeout, if not specified else.</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>defaultMethod</tt></td>
+			<td>String (default: &quot;GET&quot;); request method to use, if not specified else.</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>forceNewline</tt></td>
+			<td>Boolean flag (default: true): translate line breaks in the responseText to newlines (\n).</td>
+		</tr>
+		</table>
+
+		<p>&nbsp;<br><b style="letter-spacing: 1px;">The Callback (Response Handling):</b></p>
+		<p>Any request issued by <tt>send()</tt> will trigger the handler specified by the <tt>callback</tt> option (or a basic default-handler). The callback will be called in any case, should the request succeed, timeout or fail otherwise.</p>
+		<p>All response data (and some of the request data) is provided in a temporary &quot;<tt>socket</tt> object for your convenience. (This temporary object will be discarded just after the callback returns.) As the <tt>this</tt> object points to your instance of Terminal, this object will be available as &quot;<tt>this.socket</tt>&quot; inside your callback-handler.</p>
+
+		<p>Properties of the <tt>socket</tt> object:</p>
+
+		<table border="0" cellspacing="0" cellpadding="4">
+		<tr valign="top">
+			<td nowrap><tt>status</tt></td>
+			<td>the HTTP status code (e.g.: 200, 404) or 0 (zero) on timeout and network errors</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>statusText</tt></td>
+			<td>the HTTP status text (e.g.: &quot;OK&quot;, &quot;Not Found&quot;)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>responseText</tt></td>
+			<td>the transmitted text (response body)<br>line breaks will be normalized to newlines (\n) if _HttpSocket.prototype.forceNewline == true (default behavior)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>responseXML</tt></td>
+			<td>the response body as XML object (if applicable)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>success</tt></td>
+			<td>a simple boolean flag for a 2xx OK response</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>headers</tt></td>
+			<td>object containing any HTTP headers (as key-value pairs) of the response,
+				which where requested by the &quot;<tt>getHeaders</tt>&quot;-option of the <tt>send()</tt>.<br>
+				the header-labels are unified to &quot;camelCase&quot;<br>
+				e.g.: &quot;Content-Length&quot; will be in <tt>headers.contentLength</tt></td>
+		</tr>
+		<tr><td colspan="2">&nbsp;<br>stored request data:</td></tr>
+		<tr valign="top">
+			<td nowrap><tt>url</tt></td>
+			<td>the request url as specified in the <tt>send()</tt> options.</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>data</tt></td>
+			<td>the data you called <tt>send()</tt> with</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>query</tt></td>
+			<td>the composed query-string or postbody as transmitted to the host</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>method</tt></td>
+			<td>the request method</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>errno</tt></td>
+			<td>the internal error number (0: no error)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap><tt>errstring</tt></td>
+			<td>the internal error message (&quot;&quot;: no error)</td>
+		</tr>
+		</table>
+
+		<p>Some of the response specific data (as status codes, or headers) might not be present with local connections.</p>
+
+		<p>&nbsp;<br>Connection errors are classified with the following <tt>errno</tt> and <tt>errstring</tt> values:</p>
+
+		<table border="0" cellspacing="0" cellpadding="4">
+		<tr valign="top">
+			<td nowrap><tt>errno</tt></td>
+			<td nowrap><tt>errstring</tt></td>
+			<td></td>
+			<td nowrap><tt>label</tt></td>
+		</tr>
+		<tr valign="top">
+			<td nowrap>0</td>
+			<td>&quot;&quot;</td>
+			<td></td>
+			<td nowrap>OK</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap>1</td>
+			<td>&quot;XMLHttpRequest not implemented.&quot;</td>
+			<td></td>
+			<td nowrap>NOTIMPLEMENTED</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap>2</td>
+			<td>&quot;Could not open XMLHttpRequest.&quot;</td>
+			<td></td>
+			<td nowrap>FATALERROR</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap>3</td>
+			<td>&quot;The connection timed out.&quot;</td>
+			<td></td>
+			<td nowrap>TIMEOUT</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap>4</td>
+			<td>&quot;Network error.&quot;</td>
+			<td></td>
+			<td nowrap>NETWORKERROR</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap>5</td>
+			<td>&quot;The requested local document was not found.&quot;</td>
+			<td></td>
+			<td nowrap>LOCALFILEERROR</td>
+		</tr>
+		</table>
+
+		<p>The labels are implemented as key-value pairs in <tt>Terminal.prototype._HttpSocket.prototype.errno</tt> (type &quot;object&quot;).<br>
+		Error codes (errno) are also accessible as <tt>this.socket.ErrorCodes</tt> at run-time.</p>
+		<p>example:</p>
+<pre>  // assume we are inside a handler
+  if (this.socket.errno == this.socket.ErrorCodes.TIMEOUT) {
+     this.write(&quot;Oops, the request encountered a timeout.&quot;);
+  }
+
+</pre>
+
+		<p>Inside an interactive terminal session you'll usually want to <tt>return</tt> just after <tt>send()</tt> and call <tt>prompt()</tt> at the end of your callback-handler.<br>
+		This way the terminal will keep blocked until the callback is finished.<p>
+		<p>Aside from this, the socket extension provides also the means for background tasks (e.g. storing temporary status on a server etc.) that do not need visual feedback or user interaction. Since the requests are performed and handled asynchronous and object oriented, both will go side by side.</p>
+
+		<p>&nbsp;</p>
+
+		<p>Norbert Landsteiner<br>Vienna, 2007/03<br>Updated 2010/01</p>
+		<p>&nbsp;</p>
+
+
+	</td>
+	</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_style_settings.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_style_settings.html
new file mode 100644
index 0000000..8f25f92
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_style_settings.html
@@ -0,0 +1,395 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+	<title>termlib Style Settings Sample</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script type="text/javascript">
+<!--
+
+// *** text wrap sample ***
+// mass:werk, N.Landsteiner 2007
+
+
+/*
+   define a new style for bold
+   style-code:        16,
+   mark up:           'b',
+   HTML-opening part: '<b>'
+   HTML-closing part: '<\/b>'
+
+   use method TermGlobals.assignStyle( <style-code>, <markup>, <HTMLopen>, <HTMLclose> )
+   <style-code> must be a power of 2 between 0 and 256 (<style-code> = 2^n, 0 <= n <= 7)
+*/
+
+TermGlobals.assignStyle( 16, 'b', '<b>', '<\/b>' );
+
+/*
+   define a new style for small
+   style-code:        32,
+   mark up:           'm' (for "miniature", "s" already in use for strike),
+   HTML-opening part: '<span style="font-size:10px; letter-spacing:2px;">'
+   HTML-closing part: '<\/span>'
+*/
+
+TermGlobals.assignStyle( 32, 'm', '<span style="font-size:10px; letter-spacing:2px;">', '<\/span>' );
+
+// custom styles done
+
+
+var text = [
+	'This is a sample text to demonstrate our custom styles %+bbold%-b and %+mminiature%-m.',
+	'',
+	'With some luck, the following lines are of same width:',
+	'',
+	'   Normal:    ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789',
+	'   Bold:      %+bABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%-b',
+	'   Miniature: %+mABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789%-m',
+	'',
+	'This is the list of our styles in use:',
+	'',
+	'   * %+rreverse%-r    (predefined)',
+	'   * %+uunderline%-u  (predefined)',
+	'   * %+iitalics%-i    (predefined)',
+	'   * %+sstrike%-s     (predefined)',
+	'   * %+bbold%-b       (custom style)',
+	'   * %+mminiature%-m  (custom style)',
+	'',
+	'Use %+bbold%-b only with a CSS definition of "letter-spacing: 1px;" for ".term", since bold letters do need some extra space as they are rendered.',
+	'We recommend not to change style #1 ("r": reverse), since this style is used by the cursor in block mode.',
+	' '
+];
+
+var help = [
+	'%+r **** termlib.js style config sample **** %-r',
+	' ',
+	' This sample installs and uses a custom %+bbold%-b style.',
+	' ',
+	' * type "test" for a sample text using bold.',
+	' * type "help" to see this page.',
+	' * type "exit" to quit.',
+	' '
+]
+
+var term;
+
+function termOpen() {
+	if ((!term) || (term.closed)) {
+		term = new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				bgColor: '#232e45',
+				greeting: help.join('%n'),
+				handler: termHandler,
+				exitHandler: termExitHandler,
+				wrapping: true
+			}
+		);
+		term.open();
+
+		// dimm UI text
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+}
+
+function termExitHandler() {
+	// reset the UI
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+function termHandler() {
+	// default handler + exit
+	this.newLine();
+	if (this.lineBuffer.match(/^\s*exit\s*$/i)) {
+		this.close();
+		return;
+	}
+	if (this.lineBuffer.match(/^\s*test\s*$/i)) {
+		this.clear();
+		this.write(text);
+	}
+	else if (this.lineBuffer.match(/^\s*help\s*$/i)) {
+		this.clear();
+		this.write(help);
+	}
+	else if (this.lineBuffer != '') {
+		// echo with write for wrapping, but escape any mark-up
+		this.write('You wrote: '+this.lineBuffer.replace(/%/g, '%%'));
+		this.newLine();
+	}
+	this.prompt();
+}
+
+
+// demo hooks
+
+function test(command) {
+	if ((!term) || (term.closed)) {
+		alert('Please open the terminal first!');
+		return;
+	}
+	TermGlobals.importEachLine( command );
+}
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+
+.term {
+	font-family: "Courier New",courier,fixed,monospace;
+	font-size: 12px;
+	color: #94aad6;
+	background: none;
+	letter-spacing: 1px;
+}
+.term .termReverse {
+	color: #232e45;
+	background: #95a9d5;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+table.inventory td {
+	padding-bottom: 20px !important;
+}
+
+pre,tt {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+
+li {
+	line-height: 15px;
+	margin-bottom: 8px !important;
+}
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td,li,tt {
+		color: #000000;
+	}
+	pre,.prop {
+		color: #000000;
+	}
+	h1 {
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		color: #000000;
+	}
+	a:hover {
+		color: #000000;
+	}
+	a:active {
+		color: #000000;
+	}
+	table.inventory {
+		display: none;
+	}
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap>
+			Style Settings Sample<br>&nbsp;
+		</td></tr>
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal &nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			<p><a href="javascript:test('test')" onfocus="if(this.blur)this.blur();" class="termopen">&gt; show sample text&nbsp;</a></p>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			(c) mass:werk,<br>N. Landsteiner 2005-2007<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td class="lh15" width="560" id="mainPane">
+		<p><b style="letter-spacing: 1px;">Introducing Style Settings</b><br>&nbsp;</p>
+		<p>Version 1.4 of &quot;termlib.js&quot; introduces configurations for styles and associated markup.</p>
+
+		<p>The method <tt>TermGlobals.assignStyle()</tt> allows you to
+		install a custom style and associated mark up with a single method call.</p>
+		<p><tt>TermGlobals.assignStyle()</tt> takes four arguments:</p>
+
+		<table border="0" cellspacing="0" cellpadding="3">
+		<tr valign="top">
+			<td nowrap class="lh15"><tt>&lt;style-code&gt;</tt><td>
+			<td class="lh15">The code to be used in the style vector for this style.<br>
+			<tt>&lt;style-code&gt;</tt> must be a power of 2 between 0 and 256 (<tt>&lt;style-code&gt;</tt> = 2^n, 0 &lt;= n &lt;= 7)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap class="lh15"><tt>&lt;markup&gt;</tt><td>
+			<td class="lh15">The one letter markup to be associated with this style (case insensitive).<br>
+			&quot;p&quot; and &quot;c&quot; are reserved.</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap class="lh15"><tt>&lt;HTMLopen&gt;</tt><td>
+			<td class="lh15">The opening HTML clause to be written before a range in this style.<br>
+			(This is used as a line of text is rendered to the terminal display.)</td>
+		</tr>
+		<tr valign="top">
+			<td nowrap class="lh15"><tt>&lt;HTMLclose&gt;</tt><td>
+			<td class="lh15">The closing HTML clause to be written after a range in this style.<br>
+			(This is used as a line of text is rendered to the terminal display.)</td>
+		</tr>
+		</table>
+
+
+		<p>As an example we will install a style &quot;b&quot; for <b>bold</b> and use style #16 (2^4) for this.<br>
+		To have this all ready before needed, you would want to do this before opening any instance of <tt>Terminal</tt>:</p>
+
+<pre>
+  TermGlobals.assignStyle( 16, 'b', '&lt;b&gt;', '&lt;/b&gt;' );
+</pre>
+
+		<p>&nbsp;</p>
+		<p>Now we can use our new style and markup in any <tt>write()</tt> statement like this:</p>
+<pre>
+  myTerm.write('This is %+bBOLD%-b.');
+
+</pre>
+
+		<p>Now as we have installed our new &quot;bold&quot; style, we see that any bold letters are running wider then any plain text using the same letters. Since we want a well behaved terminal output, we'll have definitely to fix this.</p>
+		<p>We will apply some kerning to provide the extra space required for bold letters.
+		To do this, we'll add a &quot;<tt>letter-spacing</tt>&quot; definition to our CSS rule &quot;.term&quot; (if it's not already there):</p>
+
+<pre>  .term
+  {
+     font-family: &quot;Courier New&quot;,courier,fixed,monospace;
+     font-size: 12px;
+
+     /* ... any other definitions ... */
+
+     letter-spacing: 1px;
+  }</pre>
+
+		<p>&nbsp;</p>
+		<p>(As we can now see, installing a bold style involves some synchronized CSS and HTML coding. This is also the reason why bold is not in the standard set of termlib.js styles.)</p>
+
+		<p>&nbsp;</p>
+
+		<p>As a second example we'll install a small style &quot;m&quot; (&quot;minature&quot;, &quot;s&quot; is already in use for strike) with style code 32 (2^5).</p>
+		<p>This should be rendered with <tt>font-size</tt>: 10px.<br>
+		To preserve our mono-spced appearance we'll have to adjust the kerning for the smaller character-width.<br>
+		So we'll use a custom HTML span with a style attribute for this:</p>
+
+<pre>
+  TermGlobals.assignStyle(
+                           32,
+                           'm',
+                           '&lt;span style=&quot;font-size:10px; letter-spacing:2px;&quot;&gt;',
+                           '&lt;/span&gt;'
+                         );
+
+</pre>
+		<p>As above we can now use this in a <tt>write()</tt> statement like this:</p>
+<pre>
+  myTerm.write('This is %+mSMALL%-m.');
+</pre>
+
+		<p>&nbsp;</p>
+		<p>Finally you could define a style as some kind of makro using the HTMl-parts (3rd and 4th argument) for visible information:</p>
+
+<pre>
+  TermGlobals.assignStyle( 64, 'e', 'ERROR: ', '!' );
+
+  myTerm.write('%+eYou did not enter enter a valid number%-e');
+
+  // &quot;ERROR: You did not enter enter a valid number!&quot;
+</pre>
+
+		<p>&nbsp;</p>
+		<p>Notes:<br>
+		With version 1.4 <tt>TermGlobals</tt> is just a reference to <tt>Terminal.prototype.globals</tt>.<br>
+		Since the term &quot;<tt>TermGlobals</tt>&quot; is handy outside any handler, we used this as a shortcut.</p>
+		<p>Unlike any other methods <tt>TermGlobals.assignStyle()</tt> alerts any errors. (Since these alerts should only occure in development phase, this provides an easy debugging facillity without any notice to application users.)</p>
+		<p>You usually would not want to change style #1 (reverse) since this style is used by the cursor in block mode.</p>
+		<p>&nbsp;</p>
+	</td>
+	</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/sample_wrap.html b/com.ogamita.www/nasium-lse/terminal/termlib/sample_wrap.html
new file mode 100644
index 0000000..b5e4847
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/sample_wrap.html
@@ -0,0 +1,316 @@
+<html>
+<head>
+<meta http-equiv="content-type" content="text/html; charset=iso-8859-1">
+	<title>termlib Text Wrap Sample</title>
+	<script language="JavaScript" type="text/javascript" src="termlib.js"></script>
+
+<script type="text/javascript">
+<!--
+
+// *** text wrap sample ***
+// mass:werk, N.Landsteiner 2007
+
+var texts = [
+'1)',
+'This is just a sample text to introduce the amazing word wrap facillities new with termlib.js 1.3. You must have seen this!',
+'2)',
+'The quick brown fox jumps over the lazy dog. (Seen this before?) Now for a break just at a word boundary ...',
+'3)',
+'The quick brown fox jumps over the lazy dog. (Seen this before?) Now for a line-break at a dash .... and yet another break occuring in the middle of a dashed-word but not exactly filling the line ...',
+'4)',
+'The quick brown fox jumps over the lazy dog. Now this break should occure just(here) before the parenthesis ...',
+'5)',
+'This is a sentence containing a word stretching over more than 1 line ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ and so on ...',
+'6)',
+'And this is a sentence containing a word stretching over 2 lines ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 and so on ...'
+];
+
+var kant=[
+'%+uKant, Immanuel: Critique of Pure Reason. Part I, Chapter I:%-u',
+'',
+'                         Kritik der reinen Vernunft',
+'                                     I.',
+'                       Transzendentale Elementarlehre',
+'',
+'                     Der transzendentalen Elementarlehre',
+'                                Erster Teil',
+'',
+'                        Die transzendentale sthetik',
+'',
+'                                     1',
+'Auf welche Art und durch welche Mittel sich auch immer eine Erkenntnis auf Gegenstnde beziehen mag, es ist doch diejenige, wodurch sie sich auf dieselbe unmittelbar bezieht, und worauf alles Denken als Mittel abzweckt, die %+iAnschauung%-i. Diese findet aber nur statt, sofern uns der Gegenstand gegeben wird; dieses aber ist wiederum, uns Menschen wenigstens, nur dadurch mglich, da er das Gemt auf gewisse Weise affiziere. Die Fhigkeit (Rezeptivitt), Vorstellungen durch die Art, wie wir von Gegenstnden affiziert werden, zu bekommen, heit %+iSinnlichkeit%-i. Vermittelst der Sinnlichkeit also werden uns Gegenstnde %+igegeben%-i, und sie allein liefert uns %+iAnschauungen%-i; durch den Verstand aber werden sie %+igedacht%-i, und von ihm entspringen %+iBegriffe%-i. Alles Denken aber mu sich, es sei geradezu (direkte) oder im Umschweife (indirekte), vermittelst gewisser Merkmale, zuletzt auf Anschauungen, mithin, bei uns, auf Sinnlichkeit beziehen, weil uns auf andere Weise kein Gegenstand gegeben werden kann.',
+'',
+'Die Wirkung eines Gegenstandes auf die Vorstellungsfhigkeit, sofern wir von demselben affiziert werden, ist %+iEmpfindung%-i. Diejenige Anschauung, welche sich auf den Gegenstand durch Empfindung bezieht, heit %+iempirisch%-i. Der unbestimmte Gegenstand einer empirischen Anschauung heit %+iErscheinung%-i.',
+'',
+'In der Erscheinung nenne ich das, was der Empfindung korrespondiert, die %+iMaterie%-i derselben, dasjenige aber, welches macht, da das Mannigfaltige der Erscheinung in gewissen Verhltnissen geordnet werden kann, nenne ich die %+iForm%-i der Erscheinung. Da das, worinnen sich die Empfindungen allein ordnen, und in gewisse Form gestellt werden knnen, nicht selbst wiederum Empfindung sein kann, so ist uns zwar die Materie aller Erscheinung nur a posteriori gegeben, die Form derselben aber mu zu ihnen insgesamt im Gemte a priori bereitliegen und daher abgesondert von aller Empfindung knnen betrachtet werden.',
+'',
+'Ich nenne alle Vorstellungen rein (im transzendentalen Verstande), in denen nichts, was zur Empfindung gehrt, angetroffen wird. Demnach wird die reine Form sinnlicher Anschauungen berhaupt im Gemte a priori angetroffen werden, worinnen alles Mannigfaltige der Erscheinungen in gewissen Verhltnissen angeschaut wird. Diese reine Form der Sinnlichkeit wird auch selber %+ireine Anschauung%-i heien. So, wenn ich von der Vorstellung eines Krpers das, was der Verstand davon denkt, als Substanz, Kraft, Teilbarkeit usw., imgleichen, was davon zur Empfindung gehrt, als Undurchdringlichkeit, Hrte, Farbe usw. absondere, so bleibt mir aus dieser empirischen Anschauung noch etwas brig, nmlich Ausdehnung und Gestalt. Diese gehren zur reinen Anschauung, die a priori, auch ohne einen wirklichen Gegenstand der Sinne oder Empfindung, als eine bloe Form der Sinnlichkeit im Gemte stattfindet.',
+'',
+'Eine Wissenschaft von allen Prinzipien der Sinnlichkeit a priori nenne ich die %+itranszendentale sthetik%-i. Es mu also eine solche Wissenschaft geben, die den ersten Teil der transzendentalen Elementarlehre ausmacht, im Gegensatz derjenigen, welche die Prinzipien des reinen Denkens enthlt, und transzendentale Logik genannt wird.',
+'',
+'In der transzendentalen sthetik also werden wir zuerst die Sinnlichkeit %+iisolieren%-i, dadurch, da wir alles absondern, was der Verstand durch seine Begriffe dabei denkt, damit nichts als empirische Anschauung brigbleibe. Zweitens werden wir von dieser noch alles, was zur Empfindung gehrt, abtrennen, damit nichts als reine Anschauung und die bloe Form der Erscheinungen brigbleibe, welches das einzige ist, das die Sinnlichkeit a priori liefern kann. Bei dieser Untersuchung wird sich finden, da es zwei reine Formen sinnlicher Anschauung, als Prinzipien der Erkenntnis a priori gebe, nmlich Raum und Zeit, mit deren Erwgung wir uns jetzt beschftigen werden.'
+]
+
+var help = [
+	'%+r **** termlib.js text wrap sample **** %-r',
+	' ',
+	' * type "tests -w" for wrapping tests.',
+	' * type "tests" (without option) to see the same texts without wrapping.',
+	' * type "kant" for some longer text (by Immanuel Kant).',
+	' * type "help" to see this page.',
+	' * type "exit" to quit.',
+	' '
+]
+
+var term;
+
+function termOpen() {
+	if ((!term) || (term.closed)) {
+		term = new Terminal(
+			{
+				x: 220,
+				y: 70,
+				termDiv: 'termDiv',
+				bgColor: '#232e45',
+				greeting: help.join('%n'),
+				handler: termHandler,
+				exitHandler: termExitHandler,
+				wrapping: true
+			}
+		);
+		term.open();
+
+		// dimm UI text
+		var mainPane = (document.getElementById)?
+			document.getElementById('mainPane') : document.all.mainPane;
+		if (mainPane) mainPane.className = 'lh15 dimmed';
+	}
+}
+
+function termExitHandler() {
+	// reset the UI
+	var mainPane = (document.getElementById)?
+		document.getElementById('mainPane') : document.all.mainPane;
+	if (mainPane) mainPane.className = 'lh15';
+}
+
+function termHandler() {
+	// default handler + exit
+	this.newLine();
+	if (this.lineBuffer.match(/^\s*exit\s*$/i)) {
+		this.close();
+		return;
+	}
+	else if (this.lineBuffer.match(/^\s*tests\s+-w\s*$/i)) {
+		this.write('starting tests with wrap %+ion%-i:');
+		this.newLine();
+		this.newLine();
+		this.write(texts);
+	}
+	else if (this.lineBuffer.match(/^\s*tests\s*$/i)) {
+		this.wrapOff();
+		this.write('starting tests with wrap %+ioff%-i:');
+		this.newLine();
+		this.newLine();
+		this.write(texts);
+		this.wrapOn();
+	}
+	else if (this.lineBuffer.match(/^\s*kant\s*$/i)) {
+		this.write(kant, true);
+		return;
+	}
+	else if (this.lineBuffer.match(/^\s*help\s*$/i)) {
+		this.clear();
+		this.write(help);
+	}
+	else if (this.lineBuffer != '') {
+		// echo with write for wrapping, but escape any mark-up
+		this.write('You wrote: '+this.lineBuffer.replace(/%/g, '%%'));
+		this.newLine();
+	}
+	this.prompt();
+}
+
+
+// demo hooks
+
+function test(command) {
+	if ((!term) || (term.closed)) {
+		alert('Please open the terminal first!');
+		return;
+	}
+	TermGlobals.importEachLine( command );
+}
+
+//-->
+</script>
+
+<style type="text/css">
+body,p,a,td {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh15 {
+	line-height: 15px;
+}
+
+.term {
+	font-family: "Courier New",courier,fixed,monospace;
+	font-size: 12px;
+	color: #94aad6;
+	background: none;
+	letter-spacing: 1px;
+}
+.term .termReverse {
+	color: #232e45;
+	background: #95a9d5;
+}
+
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #eeeeee;
+}
+
+a.termopen,a.termopen:link,a.termopen:visited {
+	text-decoration: none;
+	color: #77dd11;
+	background: none;
+}
+a.termopen:hover {
+	text-decoration: none;
+	color: #222222;
+	background: #77dd11;
+}
+a.termopen:active {
+	text-decoration: none;
+	color: #222222;
+	background: #eeeeee;
+}
+
+table.inventory td {
+	padding-bottom: 20px !important;
+}
+
+tt {
+	font-family: courier,fixed,monospace;
+	color: #ccffaa;
+	font-size: 12px;
+	line-height: 15px;
+}
+
+li {
+	line-height: 15px;
+	margin-bottom: 8px !important;
+}
+
+.dimmed,.dimmed *,.dimmed * * {
+	background-color: #222222 !important;
+	color: #333333 !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td,li,tt {
+		color: #000000;
+	}
+	pre,.prop {
+		color: #000000;
+	}
+	h1 {
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		color: #000000;
+	}
+	a:hover {
+		color: #000000;
+	}
+	a:active {
+		color: #000000;
+	}
+	table.inventory {
+		display: none;
+	}
+}
+
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#eeeeee" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0">
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap><a href="samples.html" style="color: #cccccc;">samples</a></td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0">
+	<tr valign="top">
+	<td nowrap>
+		<table border="0" cellspacing="0" cellpadding="0" width="190" class="inventory">
+		<tr><td nowrap>
+			Text Wrap Sample<br>&nbsp;
+		</td></tr>
+		<tr><td nowrap>
+			<a href="javascript:termOpen()" onfocus="if(this.blur)this.blur();" onmouseover="window.status='open terminal'; return true" onmouseout="window.status=''; return true" class="termopen">&gt; open terminal &nbsp;</a>
+		</td></tr>
+		<tr><td nowrap>
+			<p><a href="javascript:test('tests -w')" onfocus="if(this.blur)this.blur();" class="termopen">&gt; show wrap tests&nbsp;</a></p>
+			<p><a href="javascript:test('tests')" onfocus="if(this.blur)this.blur();" class="termopen">&gt; tests without wrap&nbsp;</a></p>
+			<p><a href="javascript:test('kant')" onfocus="if(this.blur)this.blur();" class="termopen">&gt; read some Kant&nbsp;</a></p>
+		</td></tr>
+		<tr><td nowrap>
+			&nbsp;
+		</td></tr>
+		<tr><td nowrap class="lh15">
+			&nbsp;<br>
+			(c) mass:werk,<br>N. Landsteiner 2005-2007<br>
+			<a href="http://www.masswerk.at/" target="_blank">http://www.masswerk.at</a>
+		</td></tr>
+		</table>
+	</td>
+	<td class="lh15" width="560" id="mainPane">
+		<p><b style="letter-spacing: 1px;">Introducing Text Wrapping</b><br>&nbsp;</p>
+		<p>Version 1.3 of &quot;termlib.js&quot; proudly introduces text wrapping.</p>
+		<p>For compatibility text wrapping is <tt>off</tt> by default.<br>
+		To enable text wrapping globally set the property &quot;<tt>wrapping</tt>&quot; of your configuration-object to <tt>true</tt>.</p>
+		<p>To change wrapping at run-time do one of the following:</p>
+		<ul>
+		<li>call <tt>myterm.wrapOn()</tt> to enable text wrapping.</li>
+		<li>call <tt>myterm.wrapOff()</tt> to disable text wrapping.</li>
+		<li>set the boolean value of the flag &quot;<tt>wrapping</tt>&quot; to turn wrapping on/off.</li>
+		</ul>
+		<p>Please note that text wrapping works with the <tt>write()</tt> method only.</p>
+		<p>Wrapping behavior can be configured on a per-character basis in <tt>TermGlobals.wrapChars</tt> (see readme.txt sect 4.11).</p>
+		<p>&quot;termlib.js&quot; also supports conditional or &quot;soft&quot; word breaks.<br>In default configuration use <tt>&lt;form feed&gt;</tt> (\f) for a conditional word break.</p>
+
+		<p>&nbsp;</p>
+	</td>
+	</tr>
+</table>
+
+<div id="termDiv" style="position:absolute; visibility: hidden; z-index:1;"></div>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/samples.html b/com.ogamita.www/nasium-lse/terminal/termlib/samples.html
new file mode 100644
index 0000000..b02aabc
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/samples.html
@@ -0,0 +1,150 @@
+<html>
+<head>
+	<title>mass:werk termlib samples</title>
+
+<style type="text/css">
+body,p,a,td,li {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #cccccc;
+}
+.lh13 {
+	line-height: 13px;
+}
+.lh15 {
+	line-height: 15px;
+}
+pre {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #ccffaa;
+	line-height: 15px;
+}
+.prop {
+	font-family: courier,fixed,swiss,sans-serif;
+	color: #bbee99;
+	font-size: 12px;
+	line-height: 15px;
+}
+h1 {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 16px;
+	color: #cccccc;
+}
+a,a:link,a:visited {
+	text-decoration: none;
+	color: #77dd11;
+}
+a:hover {
+	text-decoration: underline;
+	color: #77dd11;
+}
+a:active {
+	text-decoration: underline;
+	color: #dddddd;
+}
+
+li {
+	line-height: 15px;
+	margin-bottom: 8px !important;
+}
+
+@media print {
+	body { background-color: #ffffff; }
+	body,p,a,td, li {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 12px;
+		color: #000000;
+	}
+	.lh13 {
+		line-height: 13px;
+	}
+	.lh15 {
+		line-height: 15px;
+	}
+	pre,.prop {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 12px;
+		color: #000000;
+		line-height: 15px;
+	}
+	h1 {
+		font-family: courier,fixed,swiss,sans-serif;
+		font-size: 16px;
+		color: #000000;
+	}
+	a,a:link,a:visited {
+		text-decoration: none;
+		color: #000000;
+	}
+	a:hover {
+		text-decoration: underline;
+		color: #000000;
+	}
+	a:active {
+		text-decoration: underline;
+		color: #000000;
+	}
+}
+</style>
+</head>
+
+
+<body bgcolor="#222222" link="#77dd11" text="#cccccc" alink="#dddddd" vlink="#77dd11"
+topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" marginheight="0" marginwidth="0"><a name="top"></a>
+
+<table border="0" cellspacing="20" cellpadding="0" align="center">
+<tr>
+	<td nowrap><a href="index.html">termlib.js home</a></td>
+	<td>|</td>
+	<td nowrap><a href="multiterm_test.html">multiple terminals</a></td>
+	<td>|</td>
+	<td nowrap><a href="parser_sample.html">parser</a></td>
+	<td>|</td>
+	<td nowrap><a href="faq.html">faq</a></td>
+	<td>|</td>
+	<td nowrap><a href="readme.txt" title="readme.txt (text/plain)">documentation</a></td>
+	<td>|</td>
+	<td nowrap>samples</td>
+</tr>
+</table>
+
+<table border="0" cellspacing="20" cellpadding="0" width="700" align="center">
+	<tr><td>
+		<h1>mass:werk termlib.js samples</h1>
+	</td></tr>
+	<tr><td class="lh15">
+		<p>Here are some sample pages that address different issues of advanced usage of termlib.js:</p>
+		<p>&nbsp;</p>
+
+		<ul>
+		<li><a href="sample_chrome.html">The Chrome Sample</a><br>
+			shows how to implement a Terminal-object inside a window-like DHTML-division. (This is a quite old example.)</li>
+		<li><a href="sample_import.html">The Import Sample</a><br>
+			shows how to import/paste text into a terminal window.</li>
+		<li><a href="sample_socket.html">The Socket Sample</a><br>
+			demos the termlib.js-socket extension for client-server communication (AJAX).</li>
+		<li><a href="sample_remote_terminal.html">The Remote Terminal Sample</a><br>
+			shows how to implement a terminal client to a remote host using the termlib.js-socket extension. As this sample requires a backend at the server-side, it won't work out of the box.</li>
+		<li><a href="sample_color.html">The Color Sample</a><br>
+			demos the color support introduced with version 1.2.</li>
+		<li><a href="sample_wrap.html">The Text Wrap Sample</a><br>
+			demos the wrapping support introduced with version 1.3.</li>
+		<li><a href="sample_style_settings.html">The Style Settings Sample</a><br>
+			demos the style configuration introduced with version 1.4 and shows, how to implement a custom style for bold.</li>
+		<li><a href="sample_globbing.html">Text Globbing Sample</a><br>
+			demonstrates how to set up a modal state (here a dialog), how to trap a special key, and how to acces the current input of the command line.</li>
+		<li><a href="sample_ansi_mapping.html">ANSI-Mapping Sample</a><br>
+			demonstrates how to make use of the new support for ANSI-SRG-codes.</li>
+		<li><a href="sample_invaders.html">Termlib-Invaders</a><br>
+			a sample application featuring a Space Invaders game.</li>
+		</ul>
+
+		<p>&nbsp;</p>
+		<p>Please consult the source code of this pages for implemntation details.<br><br>These pages are only demonstrations, and provided AS IS without any warranty of any kind.<br>Most of these samples won't work with Netscape Navigator 4.x</p>
+
+	</td></tr>
+</table>
+
+</body>
+</html>
\ No newline at end of file
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/term_styles.css b/com.ogamita.www/nasium-lse/terminal/termlib/term_styles.css
new file mode 100644
index 0000000..4971709
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/term_styles.css
@@ -0,0 +1,11 @@
+.term {
+	font-family: courier,fixed,swiss,sans-serif;
+	font-size: 12px;
+	color: #33d011;
+	background: none;
+}
+
+.termReverse {
+	color: #111111;
+	background: #33d011;
+}
diff --git a/com.ogamita.www/nasium-lse/terminal/termlib/termlib.js b/com.ogamita.www/nasium-lse/terminal/termlib/termlib.js
new file mode 100644
index 0000000..9fbe31e
--- /dev/null
+++ b/com.ogamita.www/nasium-lse/terminal/termlib/termlib.js
@@ -0,0 +1,3350 @@
+/*
+  termlib.js - JS-WebTerminal Object v1.6
+
+  (c) Norbert Landsteiner 2003-2010
+  mass:werk - media environments
+  <http://www.masswerk.at/termlib/>
+
+  Creates [multiple] Terminal instances.
+
+  Synopsis:
+
+  myTerminal = new Terminal(<config object>);
+  myTerminal.open();
+
+  <config object> overrides any values of object `TerminalDefaults'.
+  individual values of `id' must be supplied for multiple terminals.
+  `handler' specifies a function to be called for input handling.
+  (see `Terminal.prototype.defaultHandler()' and documentation.)
+
+  globals defined in this library:
+  	Terminal           (Terminal object)
+    TerminalDefaults   (default configuration)
+    termDefaultHandler (default command line handler)
+    TermGlobals        (common vars and code for all instances)
+    termKey            (named mappings for special keys)
+    termDomKeyRef      (special key mapping for DOM constants)
+
+  (please see the v. 1.4 history entry on these elements)
+
+  required CSS classes for font definitions: ".term", ".termReverse".
+
+  Compatibilty:
+  Standard web browsers with a JavaScript implementation compliant to
+  ECMA-262 2nd edition and support for the anonymous array and object
+  constructs and the anonymous function construct in the form of
+  "myfunc=function(x) {}" (c.f. ECMA-262 3rd edion for details).
+  This comprises almost all current browsers but Konquerer (khtml) and
+  versions of Apple Safari for Mac OS 10.0-10.28 (Safari 1.0) which
+  lack support for keyboard events.
+  v1.5: Dropped support of Netscape 4 (layers)
+
+  License:
+  This JavaScript-library is free.
+  Include a visible backlink to <http://www.masswerk.at/termlib/> in the
+  embedding web page or application.
+  The library should always be accompanied by the 'readme.txt' and the
+  sample HTML-documents.
+
+  Any changes should be commented and must be reflected in `Terminal.version'
+  in the format: "Version.Subversion (compatibility)".
+
+  Donations:
+  Donations are welcome: You may support and/or honor the development of
+  "termlib.js" via PayPal at: <http://www.masswerk.at/termlib/donate/>
+
+  Disclaimer:
+  This software is distributed AS IS and in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. The entire risk as to
+  the quality and performance of the product is borne by the user. No use of
+  the product is authorized hereunder except under this disclaimer.
+
+  ### The sections above must not be removed. ###
+
+  version 1.01: added Terminal.prototype.resizeTo(x,y)
+                added Terminal.conf.fontClass (=> configureable class name)
+                Terminal.prototype.open() now checks for element conf.termDiv
+                in advance and returns success.
+
+  version 1.02: added support for <TAB> and Euro sign
+                (Terminal.conf.printTab, Terminal.conf.printEuro)
+                and a method to evaluate printable chars:
+                Terminal.prototype.isPrintable(keycode)
+
+  version 1.03: added global keyboard locking (TermGlobals.keylock)
+                modified Terminal.prototype.redraw for speed (use of locals)
+
+  version 1.04: modified the key handler to fix a bug with MSIE5/Mac
+                fixed a bug in TermGlobals.setVisible with older MSIE-alike
+                browsers without DOM support.
+
+  version 1.05: added config flag historyUnique.
+
+  version 1.06: fixed CTRl+ALT (Windows alt gr) isn't CTRL any more
+                fixed double backspace bug for Safari;
+                added TermGlobals.setDisplay for setting style.display props
+                termlib.js now outputs lower case html (xhtml compatibility)
+
+  version 1.07: added method rebuild() to rebuild with new color settings.
+
+  version 1.1:  fixed a bug in 'more' output mode (cursor could be hidden after
+                quit)
+                added socket-extension for server-client talk in a separate file
+                -> "temlib_socket.js" (to be loaded after termlib.js)
+                (this is a separate file because we break our compatibility
+                guide lines with this IO/AJAX library.)
+
+  version 1.2   added color support ("%[+-]c(<color>)" markup)
+                moved paste support from sample file to lib
+                * TermGlobals.insertText( <text>)
+                * TermGlobals.importEachLine( <text> )
+                * TermGlobals.importMultiLine( <text> )
+
+  version 1.3   added word wrapping to write()
+                * activate with myTerm.wrapOn()
+                * deactivate with myTerm.wrapOff()
+                use conf.wrapping (boolean) for a global setting
+
+  version 1.4   Terminal is now an entirely self-contained object
+                Global references to inner objects for backward compatipility:
+                * TerminalDefaults   => Terminal.prototype.Defaults
+                * termDefaultHandler => Terminal.prototype.defaultHandler
+                * termKey            => Terminal.prototype.globals.termKey
+                                        see also: Terminal.prototype.termKey
+                * TermGlobals        => Terminal.prototype.globals
+                * termDomKeyRef      => Terminal.prototype.globals.termDomKeyRef
+
+                So in effect to outside scripts everything remains the same;
+                no need to rewrite any existing scripts.
+                You may now use "this.globals" inside any handlers
+                to refer to the static global object (TermGlobals).
+                You may also refer to key definitions as "this.termKey.*".
+                (Please mind that "this.termKey" is a reference to the static object
+                and not specific to the instance. A change to "this.termKey" will be
+                by any other instances of Terminal too.)
+
+                Added method TermGlobals.assignStyle() for custom styles & mark up.
+
+                Unified the color mark up: You may now use color codes (decimal or hex)
+                inside brackets. e.g.: %c(10)DARKRED%c() or %c(a)DARKRED%c()
+
+                Added key repeat for remapped keys (cursor movements etc).
+
+  version 1.41  fixed a bug in the word wrapping regarding write() output, when
+                the cursor was set with cursorSet() before.
+
+  version 1.42  fixed a bug which caused Opera to delete 2 chars at once.
+                introduced property Terminal.isOpera (Boolean)
+
+  version 1.43  enhanced the control handler so it also catches ESC if flag closeOnESC
+                is set to false. fixed a bug with Safari which fired repeated events
+                for the control handler for TAB if flag printTab was set to false.
+
+  version 1.5   Changed the license.
+                Dropped support for Netscape 4 (layers).
+                HTML-elements are now created by document.createElement, if applicable.
+                Included the formerly separate socket extension in the main library.
+                Added methods 'backupScreen()' and 'restoreScreen()' to save a screen
+                and restore it's content from backup. (see the globbing sample).
+
+  version 1.51  Added basic support of ANSI-SGR-sequences.
+
+  version 1.52  Added method swapBackup(), reorganized some of the accompanying files.
+
+  version 1.54  Fixed BACK_SPACE for Chrome, DELETE for Safari/WebKit.
+
+  version 1.55  Fixed dead keys issue for Mac OS (Leapard & later), vowels only.
+  version 1.56  Fixed new ESC issue for Safari.
+  version 1.57  Fixed dead keys fix: now only for Safari/Mac, German (de-de).
+  version 1.59  Dropped dead keys fix, fixed backspace for Safari.
+  version 1.6   Saved some bytes by discarding traces of ancient condition syntax
+                Added input mode "fieldMode"
+
+*/
+
+var Terminal = function(conf) {
+	if (typeof conf != 'object') {
+		conf=new Object();
+	}
+	else {
+		for (var i in this.Defaults) {
+			if (typeof conf[i] == 'undefined') conf[i]=this.Defaults[i];
+		}
+	}
+	this.conf=conf;
+	this.setInitValues();
+}
+
+
+Terminal.prototype = {
+// prototype definitions (save some 2k on indentation)
+
+version: '1.6 (original)',
+
+Defaults: {
+	// dimensions
+	cols:80,
+	rows:24,
+	// appearance
+	x:100,
+	y:100,
+	termDiv:'termDiv',
+	bgColor:'#181818',
+	frameColor:'#555555',
+	frameWidth:1,
+	rowHeight:15,
+	blinkDelay:500,
+	// css class
+	fontClass:'term',
+	// initial cursor mode
+	crsrBlinkMode:false,
+	crsrBlockMode:true,
+	// key mapping
+	DELisBS:false,
+	printTab:true,
+	printEuro:true,
+	catchCtrlH:true,
+	closeOnESC:true,
+	// prevent consecutive history doublets
+	historyUnique:false,
+	// optional id
+	id:0,
+	// strings
+	ps:'>',
+	greeting:'%+r Terminal ready. %-r',
+	// handlers
+	handler:this.defaultHandler,
+	ctrlHandler:null,
+	initHandler:null,
+	exitHandler:null,
+	wrapping:false,
+	mapANSI:false,
+	ANSItrueBlack:false
+},
+
+setInitValues: function() {
+	this.isSafari= (navigator.userAgent.indexOf('Safari')>=0 || navigator.userAgent.indexOf('WebKit')>=0)? true:false;
+	this.isOpera= (window.opera && navigator.userAgent.indexOf('Opera')>=0)? true:false;
+	this.isChrome= (navigator.userAgent.indexOf('Chrome/')>=0 && navigator.userAgent.indexOf('WebKit')>=0)? true:false;
+	this.domAPI= (document && document.createElement)? true:false;
+	this.isMac= (navigator.userAgent.indexOf('Mac')>=0)? true:false;
+	this.id=this.conf.id;
+	this.maxLines=this.conf.rows;
+	this.maxCols=this.conf.cols;
+	this.termDiv=this.conf.termDiv;
+	this.crsrBlinkMode=this.conf.crsrBlinkMode;
+	this.crsrBlockMode=this.conf.crsrBlockMode;
+	this.blinkDelay=this.conf.blinkDelay;
+	this.DELisBS=this.conf.DELisBS;
+	this.printTab=this.conf.printTab;
+	this.printEuro=this.conf.printEuro;
+	this.catchCtrlH=this.conf.catchCtrlH;
+	this.closeOnESC=this.conf.closeOnESC;
+	this.historyUnique=this.conf.historyUnique;
+	this.ps=this.conf.ps;
+	this.closed=false;
+	this.r;
+	this.c;
+	this.charBuf=new Array();
+	this.styleBuf=new Array();
+	this.scrollBuf=null;
+	this.blinkBuffer=0;
+	this.blinkTimer;
+	this.cursoractive=false;
+	this.lock=true;
+	this.insert=false;
+	this.charMode=false;
+	this.rawMode=false;
+	this.lineBuffer='';
+	this.inputChar=0;
+	this.lastLine='';
+	this.guiCounter=0;
+	this.history=new Array();
+	this.histPtr=0;
+	this.env=new Object();
+	this.buckupBuffer=null;
+	this.handler=this.conf.handler;
+	this.wrapping=this.conf.wrapping;
+	this.mapANSI=this.conf.mapANSI;
+	this.ANSItrueBlack=this.conf.ANSItrueBlack;
+	this.ctrlHandler=this.conf.ctrlHandler;
+	this.initHandler=this.conf.initHandler;
+	this.exitHandler=this.conf.exitHandler;
+	this.fieldMode=false;
+	this.fieldStart=this.fieldEnd=this.fieldC=0;
+},
+
+defaultHandler: function() {
+	this.newLine();
+	if (this.lineBuffer != '') {
+		this.type('You typed: '+this.lineBuffer);
+		this.newLine();
+	}
+	this.prompt();
+},
+
+open: function() {
+	if (this.termDivReady()) {
+		if (!this.closed) this._makeTerm();
+		this.init();
+		return true;
+	}
+	else {
+		return false;
+	}
+},
+
+close: function() {
+	this.lock=true;
+	this.cursorOff();
+	if (this.exitHandler) this.exitHandler();
+	this.globals.setVisible(this.termDiv,0);
+	this.closed=true;
+},
+
+init: function() {
+	// wait for gui
+	if (this.guiReady()) {
+		this.guiCounter=0;
+		// clean up at re-entry
+		if (this.closed) {
+			this.setInitValues();
+		}
+		this.clear();
+		this.globals.setVisible(this.termDiv,1);
+		this.globals.enableKeyboard(this);
+		if (this.initHandler) {
+			this.initHandler();
+		}
+		else {
+			this.write(this.conf.greeting);
+			this.newLine();
+			this.prompt();
+		}
+	}
+	else {
+		this.guiCounter++;
+		if (this.guiCounter>18000) {
+			if (confirm('Terminal:\nYour browser hasn\'t responded for more than 2 minutes.\nRetry?')) {
+				this.guiCounter=0;
+			}
+			else {
+				return;
+			}
+		};
+		this.globals.termToInitialze=this;
+		window.setTimeout('Terminal.prototype.globals.termToInitialze.init()',200);
+	}
+},
+
+getRowArray: function(l,v) {
+	// returns a fresh array of l length initialized with value v
+	var a=new Array();
+	for (var i=0; i<l; i++) a[i]=v;
+	return a;
+},
+
+wrapOn: function() {
+	// activate word wrap, wrapping workes with write() only!
+	this.wrapping=true;
+},
+
+wrapOff: function() {
+	this.wrapping=false;
+},
+
+// main output methods
+
+type: function(text,style) {
+	for (var i=0; i<text.length; i++) {
+		var ch=text.charCodeAt(i);
+		if (!this.isPrintable(ch)) ch=94;
+		this.charBuf[this.r][this.c]=ch;
+		this.styleBuf[this.r][this.c]=(style)? style:0;
+		var last_r=this.r;
+		this._incCol();
+		if (this.r!=last_r) this.redraw(last_r);
+	}
+	this.redraw(this.r)
+},
+
+write: function(text,usemore) {
+	// write to scroll buffer with markup
+	// new line = '%n' prepare any strings or arrys first
+	if (typeof text != 'object') {
+		if (typeof text!='string') text=''+text;
+		if (text.indexOf('\n')>=0) {
+			var ta=text.split('\n');
+			text=ta.join('%n');
+		}
+	}
+	else {
+		if (text.join) {
+			text=text.join('%n');
+		}
+		else {
+			text=''+text;
+		}
+		if (text.indexOf('\n')>=0) {
+			var ta=text.split('\n');
+			text=ta.join('%n');
+		}
+	}
+	if (this.mapANSI) text=this.globals.ANSI_map(text, this.ANSItrueBlack);
+	this._sbInit(usemore);
+	var chunks=text.split('%');
+	var esc=(text.charAt(0)!='%');
+	var style=0;
+	var styleMarkUp=this.globals.termStyleMarkup;
+	for (var i=0; i<chunks.length; i++) {
+		if (esc) {
+			if (chunks[i].length>0) {
+				this._sbType(chunks[i],style);
+			}
+			else if (i>0) {
+				this._sbType('%', style);
+			}
+			esc=false;
+		}
+		else {
+			var func=chunks[i].charAt(0);
+			if (chunks[i].length==0 && i>0) {
+				this._sbType("%",style);
+				esc=true;
+			}
+			else if (func=='n') {
+				this._sbNewLine(true);
+				if (chunks[i].length>1) this._sbType(chunks[i].substring(1),style);
+			}
+			else if (func=='+') {
+				var opt=chunks[i].charAt(1);
+				opt=opt.toLowerCase();
+				if (opt=='p') {
+					style=0;
+				}
+				else if (styleMarkUp[opt]) {
+					style|=styleMarkUp[opt];
+				}
+				if (chunks[i].length>2) this._sbType(chunks[i].substring(2),style);
+			}
+			else if (func=='-') {
+				var opt=chunks[i].charAt(1);
+				opt=opt.toLowerCase();
+				if (opt=='p') {
+					style=0;
+				}
+				else if (styleMarkUp[opt]) {
+					style&=~styleMarkUp[opt];
+				}
+				if (chunks[i].length>2) this._sbType(chunks[i].substring(2),style);
+			}
+			else if (chunks[i].length>1 && func=='c') {
+				var cinfo=this._parseColor(chunks[i].substring(1));
+				style=(style&(~0xfffff0))|cinfo.style;
+				if (cinfo.rest) this._sbType(cinfo.rest,style);
+			}
+			else if (chunks[i].length>1 && chunks[i].charAt(0)=='C' && chunks[i].charAt(1)=='S') {
+				this.clear();
+				this._sbInit();
+				if (chunks[i].length>2) this._sbType(chunks[i].substring(2),style);
+			}
+			else {
+				if (chunks[i].length>0) this._sbType(chunks[i],style);
+			}
+		}
+	}
+	this._sbOut();
+},
+
+// parse a color markup
+_parseColor: function(chunk) {
+	var rest='';
+	var style=0;
+	if (chunk.length) {
+		if (chunk.charAt(0)=='(') {
+			var clabel='';
+			for (var i=1; i<chunk.length; i++) {
+				var c=chunk.charAt(i);
+				if (c==')') {
+					if (chunk.length>i) rest=chunk.substring(i+1);
+					break;
+				}
+				clabel+=c;
+			}
+			if (clabel) {
+				if (clabel.charAt(0) == '@') {
+					var sc=this.globals.nsColors[clabel.substring(1).toLowerCase()];
+					if (sc) style=(16+sc)*0x100;
+				}
+				else if (clabel.charAt(0) == '#') {
+					var cl=clabel.substring(1).toLowerCase();
+					var sc=this.globals.webColors[cl];
+					if (sc) {
+						style=sc*0x10000;
+					}
+					else {
+						cl=this.globals.webifyColor(cl);
+						if (cl) style=this.globals.webColors[cl]*0x10000;
+					}
+				}
+				else if (clabel.length && clabel.length<=2) {
+					var isHex=false;
+					for (var i=0; i<clabel.length; i++) {
+						if (this.globals.isHexOnlyChar(clabel.charAt(i))) {
+							isHex=true;
+							break;
+						}
+					}
+					var cl=(isHex)? parseInt(clabel, 16):parseInt(clabel,10);
+					if (!isNaN(cl) || cl<=15) {
+						style=cl*0x100;
+					}
+				}
+				else {
+					style=this.globals.getColorCode(clabel)*0x100;
+				}
+			}
+		}
+		else {
+			var c=chunk.charAt(0);
+			if (this.globals.isHexChar(c)) {
+				style=this.globals.hexToNum[c]*0x100;
+				rest=chunk.substring(1);
+			}
+			else {
+				rest=chunk;
+			}
+		}
+	}
+	return { rest: rest, style: style };
+},
+
+// internal scroll buffer output methods
+
+_sbInit: function(usemore) {
+	var sb=this.scrollBuf=new Object();
+	var sbl=sb.lines=new Array();
+	var sbs=sb.styles=new Array();
+	sb.more=usemore;
+	sb.line=0;
+	sb.status=0;
+	sb.r=0;
+	sb.c=this.c;
+	sbl[0]=this.getRowArray(this.conf.cols,0);
+	sbs[0]=this.getRowArray(this.conf.cols,0);
+	for (var i=0; i<this.c; i++) {
+		sbl[0][i]=this.charBuf[this.r][i];
+		sbs[0][i]=this.styleBuf[this.r][i];
+	}
+},
+
+_sbType: function(text,style) {
+	// type to scroll buffer
+	var sb=this.scrollBuf;
+	for (var i=0; i<text.length; i++) {
+		var ch=text.charCodeAt(i);
+		if (!this.isPrintable(ch)) ch=94;
+		sb.lines[sb.r][sb.c]=ch;
+		sb.styles[sb.r][sb.c++]=(style)? style:0;
+		if (sb.c>=this.maxCols) this._sbNewLine();
+	}
+},
+
+_sbNewLine: function(forced) {
+	var sb=this.scrollBuf;
+	if (this.wrapping && forced) {
+		sb.lines[sb.r][sb.c]=10;
+		sb.lines[sb.r].length=sb.c+1;
+	}
+	sb.r++;
+	sb.c=0;
+	sb.lines[sb.r]=this.getRowArray(this.conf.cols,0);
+	sb.styles[sb.r]=this.getRowArray(this.conf.cols,0);
+},
+
+_sbWrap: function() {
+	// create a temp wrap buffer wb and scan for words/wrap-chars
+	// then re-asign lines & styles to scrollBuf
+	var wb=new Object();
+	wb.lines=new Array();
+	wb.styles=new Array();
+	wb.lines[0]=this.getRowArray(this.conf.cols,0);
+	wb.styles[0]=this.getRowArray(this.conf.cols,0);
+	wb.r=0;
+	wb.c=0;
+	var sb=this.scrollBuf;
+	var sbl=sb.lines;
+	var sbs=sb.styles;
+	var ch, st, wrap, lc, ls;
+	var l=this.c;
+	var lastR=0;
+	var lastC=0;
+	wb.cBreak=false;
+	for (var r=0; r<sbl.length; r++) {
+		lc=sbl[r];
+		ls=sbs[r];
+		for (var c=0; c<lc.length; c++) {
+			ch=lc[c];
+			st=ls[c];
+			if (ch) {
+				var wrap=this.globals.wrapChars[ch];
+				if (ch==10) wrap=1;
+				if (wrap) {
+					if (wrap==2) {
+						l++;
+					}
+					else if (wrap==4) {
+						l++;
+						lc[c]=45;
+					}
+					this._wbOut(wb, lastR, lastC, l);
+					if (ch==10) {
+						this._wbIncLine(wb);
+					}
+					else if (wrap==1 && wb.c<this.maxCols) {
+						wb.lines[wb.r][wb.c]=ch;
+						wb.styles[wb.r][wb.c++]=st;
+						if (wb.c>=this.maxCols) this._wbIncLine(wb);
+					}
+					if (wrap==3) {
+						lastR=r;
+						lastC=c;
+						l=1;
+					}
+					else {
+						l=0;
+						lastR=r;
+						lastC=c+1;
+						if (lastC==lc.length) {
+							lastR++;
+							lastC=0;
+						}
+						if (wrap==4) wb.cBreak=true;
+					}
+				}
+				else {
+					l++;
+				}
+			}
+			else {
+				continue;
+			}
+		}
+	}
+	if (l) {
+		if (wb.cbreak && wb.c!=0) wb.c--;
+		this._wbOut(wb, lastR, lastC, l);
+	}
+	sb.lines=wb.lines;
+	sb.styles=wb.styles;
+	sb.r=wb.r;
+	sb.c=wb.c;
+},
+
+_wbOut: function(wb, br, bc, l) {
+	// copy a word (of l length from br/bc) to wrap buffer wb
+	var sb=this.scrollBuf;
+	var sbl=sb.lines;
+	var sbs=sb.styles;
+	var ofs=0;
+	var lc, ls;
+	if (l+wb.c>this.maxCols) {
+		if (l<this.maxCols) {
+			this._wbIncLine(wb);
+		}
+		else {
+			var i0=0;
+			ofs=this.maxCols-wb.c;
+			lc=sbl[br];
+			ls=sbs[br];
+			while (true) {
+				for (var i=i0; i<ofs; i++) {
+					wb.lines[wb.r][wb.c]=lc[bc];
+					wb.styles[wb.r][wb.c++]=ls[bc++];
+					if (bc==sbl[br].length) {
+						bc=0;
+						br++;
+						lc=sbl[br];
+						ls=sbs[br];
+					}
+				}
+				this._wbIncLine(wb);
+				if (l-ofs<this.maxCols) break;
+				i0=ofs;
+				ofs+=this.maxCols;
+			}
+		}
+	}
+	else if (wb.cBreak) {
+		wb.c--;
+	}
+	lc=sbl[br];
+	ls=sbs[br];
+	for (var i=ofs; i<l; i++) {
+		wb.lines[wb.r][wb.c]=lc[bc];
+		wb.styles[wb.r][wb.c++]=ls[bc++];
+		if (bc==sbl[br].length) {
+			bc=0;
+			br++;
+			lc=sbl[br];
+			ls=sbs[br];
+		}
+	}
+	wb.cBreak=false;
+},
+
+_wbIncLine: function(wb) {
+	// create a new line in temp buffer
+	wb.r++;
+	wb.c=0;
+	wb.lines[wb.r]=this.getRowArray(this.conf.cols,0);
+	wb.styles[wb.r]=this.getRowArray(this.conf.cols,0);
+},
+
+_sbOut: function() {
+	var sb=this.scrollBuf;
+	if (this.wrapping && !sb.status) this._sbWrap();
+	var sbl=sb.lines;
+	var sbs=sb.styles;
+	var tcb=this.charBuf;
+	var tsb=this.styleBuf;
+	var ml=this.maxLines;
+	var buflen=sbl.length;
+	if (sb.more) {
+		if (sb.status) {
+			if (this.inputChar==this.globals.lcMoreKeyAbort) {
+				this.r=ml-1;
+				this.c=0;
+				tcb[this.r]=this.getRowArray(this.conf.cols,0);
+				tsb[this.r]=this.getRowArray(this.conf.cols,0);
+				this.redraw(this.r);
+				this.handler=sb.handler;
+				this.charMode=false;
+				this.inputChar=0;
+				this.scrollBuf=null;
+				this.prompt();
+				return;
+			}
+			else if (this.inputChar==this.globals.lcMoreKeyContinue) {
+				this.clear();
+			}
+			else {
+				return;
+			}
+		}
+		else {
+			if (this.r>=ml-1) this.clear();
+		}
+	}
+	if (this.r+buflen-sb.line<=ml) {
+		for (var i=sb.line; i<buflen; i++) {
+			var r=this.r+i-sb.line;
+			tcb[r]=sbl[i];
+			tsb[r]=sbs[i];
+			this.redraw(r);
+		}
+		this.r+=sb.r-sb.line;
+		this.c=sb.c;
+		if (sb.more) {
+			if (sb.status) this.handler=sb.handler;
+			this.charMode=false;
+			this.inputChar=0;
+			this.scrollBuf=null;
+			this.prompt();
+			return;
+		}
+	}
+	else if (sb.more) {
+		ml--;
+		if (sb.status==0) {
+			sb.handler=this.handler;
+			this.handler=this._sbOut;
+			this.charMode=true;
+			sb.status=1;
+		}
+		if (this.r) {
+			var ofs=ml-this.r;
+			for (var i=sb.line; i<ofs; i++) {
+				var r=this.r+i-sb.line;
+				tcb[r]=sbl[i];
+				tsb[r]=sbs[i];
+				this.redraw(r);
+			}
+		}
+		else {
+			var ofs=sb.line+ml;
+			for (var i=sb.line; i<ofs; i++) {
+				var r=this.r+i-sb.line;
+				tcb[r]=sbl[i];
+				tsb[r]=sbs[i];
+				this.redraw(r);
+			}
+		}
+		sb.line=ofs;
+		this.r=ml;
+		this.c=0;
+		this.type(this.globals.lcMorePrompt1, this.globals.lcMorePromtp1Style);
+		this.type(this.globals.lcMorePrompt2, this.globals.lcMorePrompt2Style);
+		this.lock=false;
+		return;
+	}
+	else if (buflen>=ml) {
+		var ofs=buflen-ml;
+		for (var i=0; i<ml; i++) {
+			var r=ofs+i;
+			tcb[i]=sbl[r];
+			tsb[i]=sbs[r];
+			this.redraw(i);
+		}
+		this.r=ml-1;
+		this.c=sb.c;
+	}
+	else {
+		var dr=ml-buflen;
+		var ofs=this.r-dr;
+		for (var i=0; i<dr; i++) {
+			var r=ofs+i;
+			for (var c=0; c<this.maxCols; c++) {
+				tcb[i][c]=tcb[r][c];
+				tsb[i][c]=tsb[r][c];
+			}
+			this.redraw(i);
+		}
+		for (var i=0; i<buflen; i++) {
+			var r=dr+i;
+			tcb[r]=sbl[i];
+			tsb[r]=sbs[i];
+			this.redraw(r);
+		}
+		this.r=ml-1;
+		this.c=sb.c;
+	}
+	this.scrollBuf=null;
+},
+
+// basic console output
+
+typeAt: function(r,c,text,style) {
+	var tr1=this.r;
+	var tc1=this.c;
+	this.cursorSet(r,c);
+	for (var i=0; i<text.length; i++) {
+		var ch=text.charCodeAt(i);
+		if (!this.isPrintable(ch)) ch=94;
+		this.charBuf[this.r][this.c]=ch;
+		this.styleBuf[this.r][this.c]=(style)? style:0;
+		var last_r=this.r;
+		this._incCol();
+		if (this.r!=last_r) this.redraw(last_r);
+	}
+	this.redraw(this.r);
+	this.r=tr1;
+	this.c=tc1;
+},
+
+statusLine: function(text,style,offset) {
+	var ch,r;
+	style=(style && !isNaN(style))? parseInt(style)&15:0;
+	if (offset && offset>0) {
+		r=this.conf.rows-offset;
+	}
+	else {
+		r=this.conf.rows-1;
+	}
+	for (var i=0; i<this.conf.cols; i++) {
+		if (i<text.length) {
+			ch=text.charCodeAt(i);
+			if (!this.isPrintable(ch)) ch = 94;
+		}
+		else {
+			ch=0;
+		}
+		this.charBuf[r][i]=ch;
+		this.styleBuf[r][i]=style;
+	}
+	this.redraw(r);
+},
+
+printRowFromString: function(r,text,style) {
+	var ch;
+	style=(style && !isNaN(style))? parseInt(style)&15:0;
+	if (r>=0 && r<this.maxLines) {
+		if (typeof text != 'string') text=''+text;
+		for (var i=0; i<this.conf.cols; i++) {
+			if (i<text.length) {
+				ch=text.charCodeAt(i);
+				if (!this.isPrintable(ch)) ch = 94;
+			}
+			else {
+				ch=0;
+			}
+			this.charBuf[r][i]=ch;
+			this.styleBuf[r][i]=style;
+		}
+		this.redraw(r);
+	}
+},
+
+setChar: function(ch,r,c,style) {
+	this.charBuf[r][c]=ch;
+	this.styleBuf[this.r][this.c]=(style)? style:0;
+	this.redraw(r);
+},
+
+newLine: function() {
+	this.c=0;
+	this._incRow();
+},
+
+// internal methods for output
+
+_charOut: function(ch, style) {
+	this.charBuf[this.r][this.c]=ch;
+	this.styleBuf[this.r][this.c]=(style)? style:0;
+	this.redraw(this.r);
+	this._incCol();
+},
+
+_incCol: function() {
+	this.c++;
+	if (this.c>=this.maxCols) {
+		this.c=0;
+		this._incRow();
+	}
+},
+
+_incRow: function() {
+	this.r++;
+	if (this.r>=this.maxLines) {
+		this._scrollLines(0,this.maxLines);
+		this.r=this.maxLines-1;
+	}
+},
+
+_scrollLines: function(start, end) {
+	window.status='Scrolling lines ...';
+	start++;
+	for (var ri=start; ri<end; ri++) {
+		var rt=ri-1;
+		this.charBuf[rt]=this.charBuf[ri];
+		this.styleBuf[rt]=this.styleBuf[ri];
+	}
+	// clear last line
+	var rt=end-1;
+	this.charBuf[rt]=this.getRowArray(this.conf.cols,0);
+	this.styleBuf[rt]=this.getRowArray(this.conf.cols,0);
+	this.redraw(rt);
+	for (var r=end-1; r>=start; r--) this.redraw(r-1);
+	window.status='';
+},
+
+// control methods
+
+clear: function() {
+	window.status='Clearing display ...';
+	this.cursorOff();
+	this.insert=false;
+	for (var ri=0; ri<this.maxLines; ri++) {
+		this.charBuf[ri]=this.getRowArray(this.conf.cols,0);
+		this.styleBuf[ri]=this.getRowArray(this.conf.cols,0);
+		this.redraw(ri);
+	}
+	this.r=0;
+	this.c=0;
+	window.status='';
+},
+
+reset: function() {
+	if (this.lock) return;
+	this.lock=true;
+	this.rawMode=false;
+	this.charMode=false;
+	this.maxLines=this.conf.rows;
+	this.maxCols=this.conf.cols;
+	this.lastLine='';
+	this.lineBuffer='';
+	this.inputChar=0;
+	this.clear();
+},
+
+prompt: function() {
+	this.lock=true;
+	if (this.c>0) this.newLine();
+	this.type(this.ps);
+	this._charOut(1);
+	this.lock=false;
+	this.cursorOn();
+},
+
+isPrintable: function(ch, unicodePage1only) {
+	if (this.wrapping && this.globals.wrapChars[ch]==4) return true;
+	if (unicodePage1only && ch>255) {
+		return (ch==this.termKey.EURO && this.printEuro)? true:false;
+	}
+	return (
+		(ch>=32 && ch!=this.termKey.DEL)