Index: src/add.c
==================================================================
--- src/add.c
+++ src/add.c
@@ -271,10 +271,103 @@
     free(zName);
   }
   db_multi_exec("DELETE FROM vfile WHERE deleted AND rid=0");
   db_end_transaction(0);
 }
+
+/*
+** COMMAND: addremove ?--dotfiles? ?--ignore GLOBPATTERN?
+**
+** Usage: %fossil addremove
+**
+** If used in a checkout, the current checkout file tree is synchronized
+** with the repository:
+**  * all files, existing in the file tree but not in the repository
+**    (files displayed using the <a>extra</a> command)
+**    are added to the repository - see also <a>add</a>
+**  * all files, existing in the repository, not existing in the file tree
+**    (files displayed as MISSING using the <a>status</a> command)
+**    are removed from the repository - see also <a>rm</a>
+** The command does not <a>commit</a>!
+**
+** This command can be used to track third party software.
+*/
+void import_cmd(void){
+  Blob path;
+  const char *zIgnoreFlag = find_option("ignore",0,1);
+  int allFlag = find_option("dotfiles",0,0)!=0;
+  int n;
+  Stmt q;
+  int vid;
+  Blob repo;
+  int addons = 0;
+  int deletes = 0;
+
+  if( zIgnoreFlag==0 ){
+    zIgnoreFlag = db_get("ignore-glob", 0);
+  }
+  db_must_be_within_tree();
+  vid = db_lget_int("checkout",0);
+  if( vid==0 ){
+    fossil_panic("no checkout to add to");
+  }
+  db_begin_transaction();
+  db_multi_exec("CREATE TEMP TABLE sfile(x TEXT PRIMARY KEY)");
+  n = strlen(g.zLocalRoot);
+  blob_init(&path, g.zLocalRoot, n-1);
+  /* now we read the complete file structure into a temp table */
+  vfile_scan(0, &path, blob_size(&path), allFlag);
+  if( file_tree_name(g.zRepositoryName, &repo, 0) ){
+    db_multi_exec("DELETE FROM sfile WHERE x=%B", &repo);
+  }
+  printf("importing checkout root '%s'\ninto repository '%s':\n",
+          g.zLocalRoot,g.zRepositoryName);
+  /* step 1: search for extra files */
+  db_prepare(&q, 
+      "SELECT x, %Q || x FROM sfile"
+      " WHERE x NOT IN ('manifest','manifest.uuid','_FOSSIL_',"
+                       "'_FOSSIL_-journal','.fos','.fos-journal',"
+                       "'_FOSSIL_-wal','_FOSSIL_-shm','.fos-wal',"
+                       "'.fos-shm')"
+      "   AND NOT %s"
+      " ORDER BY 1",
+      g.zLocalRoot,
+      glob_expr("x", zIgnoreFlag)
+  );
+  while( db_step(&q)==SQLITE_ROW ){
+    Blob omit;
+
+    blob_zero(&omit);
+    add_one_file(db_column_text(&q, 1), vid, &omit);
+    addons++;
+  }
+  db_finalize(&q);
+  /* step 2: search for missing files */
+  db_prepare(&q, 
+      "SELECT pathname,%Q || pathname,deleted FROM vfile"
+      " WHERE deleted!=1"
+      " ORDER BY 1",
+      g.zLocalRoot
+  );
+  while( db_step(&q)==SQLITE_ROW ){
+    const char * zFile;
+    const char * zPath;
+
+    zFile = db_column_text(&q, 0);
+    zPath = db_column_text(&q, 1);
+    if( !file_isfile(zPath) ){
+      db_multi_exec("UPDATE vfile SET deleted=1 WHERE pathname=%Q", zFile);
+      printf("DELETED  %s\n", zFile);
+      deletes--;
+    }
+  }
+  db_finalize(&q);
+  /* show cmmand summary */
+  printf("added %d files, deleted %d files\n",addons,deletes);
+
+  db_end_transaction(0);
+}
 
 /*
 ** Rename a single file.
 **
 ** The original name of the file is zOrig.  The new filename is zNew.
@@ -295,12 +388,12 @@
 **    or: %fossil mv|rename OLDNAME... DIR
 **
 ** Move or rename one or more files within the tree
 **
 ** This command does not rename the files on disk.  This command merely
-** records the fact that filenames have changed so that appropriate notations
-** can be made at the next commit/checkin.
+** records the fact that filenames have changed so that appropriate
+** notations can be made at the next <a>commit</a>/checkin.
 */
 void mv_cmd(void){
   int i;
   int vid;
   char *zDest;

Index: src/allrepo.c
==================================================================
--- src/allrepo.c
+++ src/allrepo.c
@@ -51,13 +51,13 @@
 /*
 ** COMMAND: all
 **
 ** Usage: %fossil all (list|ls|pull|push|rebuild|sync)
 **
-** The ~/.fossil file records the location of all repositories for a
-** user.  This command performs certain operations on all repositories
-** that can be useful before or after a period of disconnected operation.
+** The ~/.fossil file records the location of all repositories for a user.
+** This command performs certain operations on all repositories that can
+** be useful before or after a period of disconnected operation.
 **
 ** On Win32 systems, the file is named "_fossil" and is located in
 ** %LOCALAPPDATA%, %APPDATA% or %HOMEPATH%.
 **
 ** Available operations are:
@@ -71,12 +71,12 @@
 **    rebuild    Rebuild on all repositories
 **
 **    sync       Run a "sync" on all repositories
 **
 ** Respositories are automatically added to the set of known repositories
-** when one of the following commands against the repository: clone, info,
-** pull, push, or sync
+** when one of the following commands against the repository:
+**   <a>clone</a>, <a>info</a>, <a>pull</a>, <a>push</a>, or <a>sync</a>
 */
 void all_cmd(void){
   int n;
   Stmt q;
   const char *zCmd;

Index: src/browse.c
==================================================================
--- src/browse.c
+++ src/browse.c
@@ -247,7 +247,7 @@
       @     </a></li>
     }
   }
   db_finalize(&q);
   @ </ul></td></tr></table>
-  style_footer();
+  style_footer_cmdref("ls",0);
 }

Index: src/checkin.c
==================================================================
--- src/checkin.c
+++ src/checkin.c
@@ -101,11 +101,12 @@
 ** COMMAND: changes
 **
 ** Usage: %fossil changes
 **
 ** Report on the edit status of all files in the current checkout.
-** See also the "status" and "extra" commands.
+**
+** See also the <a>status</a>, <a>extra</a> and <a>addremove</a> commands.
 */
 void changes_cmd(void){
   Blob report;
   int vid;
   db_must_be_within_tree();
@@ -120,10 +121,12 @@
 ** COMMAND: status
 **
 ** Usage: %fossil status
 **
 ** Report on the status of the current checkout.
+**
+** See also <a>addremove</a>
 */
 void status_cmd(void){
   int vid;
   db_must_be_within_tree();
        /* 012345678901234 */
@@ -247,14 +250,16 @@
 /*
 ** COMMAND: extras
 ** Usage: %fossil extras ?--dotfiles? ?--ignore GLOBPATTERN?
 **
 ** Print a list of all files in the source tree that are not part of
-** the current checkout.  See also the "clean" command.
+** the current checkout.  See also the <a>clean</a> command.
 **
 ** Files and subdirectories whose names begin with "." are normally
 ** ignored but can be included by adding the --dotfiles option.
+**
+** See also <a>addremove</a>
 */
 void extra_cmd(void){
   Blob path;
   Blob repo;
   Stmt q;
@@ -293,19 +298,18 @@
 ** COMMAND: clean
 ** Usage: %fossil clean ?--force? ?--dotfiles?
 **
 ** Delete all "extra" files in the source tree.  "Extra" files are
 ** files that are not officially part of the checkout.  See also
-** the "extra" command. This operation cannot be undone. 
+** the <a>extras</a> command. This operation cannot be undone. 
 **
-** You will be prompted before removing each file. If you are
-** sure you wish to remove all "extra" files you can specify the
-** optional --force flag and no prompts will be issued.
+** You will be prompted before removing each file. If you are sure
+** you wish to remove all "extra" files you can specify the optional
+** --force flag and no prompts will be issued.
 **
-** Files and subdirectories whose names begin with "." are
-** normally ignored.  They are included if the "--dotfiles" option
-** is used.
+** Files and subdirectories whose names begin with "." are normally
+** ignored.  They are included if the "--dotfiles" option is used.
 */
 void clean_cmd(void){
   int allFlag;
   int dotfilesFlag;
   Blob path, repo;
@@ -557,27 +561,27 @@
 **
 ** Usage: %fossil commit ?OPTIONS? ?FILE...?
 **
 ** Create a new version containing all of the changes in the current
 ** checkout.  You will be prompted to enter a check-in comment unless
-** the comment has been specified on the command-line using "-m".
-** The editor defined in the "editor" fossil option (see %fossil help set)
+** the comment has been specified on the command-line using "-m". The
+** editor defined in the "editor" fossil option (see %fossil help set)
 ** will be used, or from the "VISUAL" or "EDITOR" environment variables
 ** (in that order) if no editor is set.
 **
 ** You will be prompted for your GPG passphrase in order to sign the
 ** new manifest unless the "--nosign" option is used.  All files that
 ** have changed will be committed unless some subset of files is
 ** specified on the command line.
 **
 ** The --branch option followed by a branch name cases the new check-in
-** to be placed in the named branch.  The --bgcolor option can be followed
+** to be placed in the named branch. The --bgcolor option can be followed
 ** by a color name (ex:  '#ffc0c0') to specify the background color of
 ** entries in the new branch when shown in the web timeline interface.
 **
-** A check-in is not permitted to fork unless the --force or -f
-** option appears.  A check-in is not allowed against a closed check-in.
+** A check-in is not permitted to fork unless the --force or -f option
+** appears.  A check-in is not allowed against a closed check-in.
 **
 ** The --private option creates a private check-in that is never synced.
 ** Children of private check-ins are automatically private.
 **
 ** Options:

Index: src/checkout.c
==================================================================
--- src/checkout.c
+++ src/checkout.c
@@ -172,11 +172,11 @@
 ** files.
 **
 ** The --latest flag can be used in place of VERSION to checkout the
 ** latest version in the repository.
 **
-** See also the "update" command.
+** See also the <a>update</a> command.
 */
 void checkout_cmd(void){
   int forceFlag;                 /* Force checkout even if edits exist */
   int keepFlag;                  /* Do not change any files on disk */
   int latestFlag;                /* Checkout the latest version */
@@ -272,11 +272,11 @@
 /*
 ** COMMAND: close
 **
 ** Usage: %fossil close ?-f|--force?
 **
-** The opposite of "open".  Close the current database connection.
+** The opposite of <a>open</a>.  Close the current database connection.
 ** Require a -f or --force flag if there are unsaved changed in the
 ** current check-out.
 */
 void close_cmd(void){
   int forceFlag = find_option("force","f",0)!=0;

Index: src/clone.c
==================================================================
--- src/clone.c
+++ src/clone.c
@@ -26,21 +26,22 @@
 /*
 ** COMMAND: clone
 **
 ** Usage: %fossil clone ?OPTIONS? URL FILENAME
 **
-** Make a clone of a repository specified by URL in the local
-** file named FILENAME.  
+** Make a clone of a repository specified by URL in the local file
+** named FILENAME.  
 **
 ** By default, your current login name is used to create the default
 ** admin user. This can be overridden using the -A|--admin-user
 ** parameter.
 **
 ** Options:
 **
 **    --admin-user|-A USERNAME
 **
+** See also:  <a>push</a>, <a>pull</a>, <a>remote-url</a>, <a>sync</a>
 */
 void clone_cmd(void){
   char *zPassword;
   const char *zDefaultUser;   /* Optional name of the default user */
 

Index: src/configure.c
==================================================================
--- src/configure.c
+++ src/configure.c
@@ -369,48 +369,53 @@
 /*
 ** COMMAND: configuration
 **
 ** Usage: %fossil configure METHOD ... ?-R|--repository REPOSITORY?
 **
-** Where METHOD is one of: export import merge pull push reset.  All methods
-** accept the -R or --repository option to specific a repository.
+** Where METHOD is one of: export import merge pull push reset.  All
+** methods accept the -R or --repository option to specify a repository.
 **
 **    %fossil configuration export AREA FILENAME
 **
-**         Write to FILENAME exported configuraton information for AREA.
-**         AREA can be one of:  all email project shun skin ticket user
+**        Write to FILENAME exported configuraton information for AREA.
+**        AREA can be one of:  all email project shun skin ticket user
 **
 **    %fossil configuration import FILENAME
 **
-**         Read a configuration from FILENAME, overwriting the current
-**         configuration.
+**        Read a configuration from FILENAME, overwriting the current
+**        configuration.
 **
 **    %fossil configuration merge FILENAME
 **
-**         Read a configuration from FILENAME and merge its values into
-**         the current configuration.  Existing values take priority over
-**         values read from FILENAME.
+**        Read a configuration from FILENAME and merge its values into
+**        the current configuration.  Existing values take priority
+**        over values read from FILENAME.
 **
 **    %fossil configuration pull AREA ?URL?
 **
-**         Pull and install the configuration from a different server
-**         identified by URL.  If no URL is specified, then the default
-**         server is used. 
+**        Pull and install the configuration from a different server
+**        identified by URL.  If no URL is specified, then the default
+**        server is used. 
 **
 **    %fossil configuration push AREA ?URL?
 **
-**         Push the local configuration into the remote server identified
-**         by URL.  Admin privilege is required on the remote server for
-**         this to work.
+**        Push the local configuration into the remote server identified
+**        by URL.  Admin privilege is required on the remote server for
+**        this to work.
 **
 **    %fossil configuration reset AREA
 **
-**         Restore the configuration to the default.  AREA as above.
+**        Restore the configuration to the default.  AREA as above.
+**
+** WARNING: Do not import or merge or pull configurations from an
+** untrusted source.  The inbound configuration is not checked for
+** safety and can introduce security vulnerabilities.
 **
-** WARNING: Do not import, merge, or pull configurations from an untrusted
-** source.  The inbound configuration is not checked for safety and can
-** introduce security vulnerabilities.
+** The different parts of this configuration can also be controlled
+** using the gui:
+**  *  Go to page <a href="setup">Admin</a> and use the subcommands
+**
 */
 void configuration_cmd(void){
   int n;
   const char *zMethod;
   if( g.argc<3 ){

Index: src/db.c
==================================================================
--- src/db.c
+++ src/db.c
@@ -1035,11 +1035,11 @@
 ** COMMAND: new
 **
 ** Usage: %fossil new ?OPTIONS? FILENAME
 **
 ** Create a repository for a new project in the file named FILENAME.
-** This command is distinct from "clone".  The "clone" command makes
+** This command is distinct from "clone".  The <a>clone</a> command makes
 ** a copy of an existing project.  This command starts a new project.
 **
 ** By default, your current login name is used to create the default
 ** admin user. This can be overridden using the -A|--admin-user
 ** parameter.
@@ -1420,11 +1420,11 @@
 ** for the repository is created with its root at the working directory.
 ** If VERSION is specified then that version is checked out.  Otherwise
 ** the latest version is checked out.  No files other than "manifest"
 ** and "manifest.uuid" are modified if the --keep option is present.
 **
-** See also the "close" command.
+** See also the <a>close</a> command.
 */
 void cmd_open(void){
   Blob path;
   int vid;
   int keepFlag;
@@ -1536,77 +1536,82 @@
 ** COMMAND: settings
 ** COMMAND: unset
 ** %fossil settings ?PROPERTY? ?VALUE? ?-global?
 ** %fossil unset PROPERTY ?-global?
 **
-** The "settings" command with no arguments lists all properties and their
-** values.  With just a property name it shows the value of that property.
-** With a value argument it changes the property for the current repository.
+** The "settings" command with no arguments lists all properties and
+** their values.  With just a property name it shows the value of that
+** property. With a value argument it changes the property for the
+** current repository.
 **
 ** The "unset" command clears a property setting.
 **
 **
-**    auto-captcha     If enabled, the Login page provides a button to
-**                     fill in the captcha password.  Default: on
+**    auto-captcha  If enabled, the Login page provides a button to
+**                  fill in the captcha password.  Default: on
+**
+**    auto-shun     If enabled, automatically pull the shunning list
+**                  from a server to which the client autosyncs.
+**
+**    autosync      If enabled, automatically pull prior to commit
+**                  or update and automatically push after commit or
+**                  tag or branch creation.  If the value is "pullonly"
+**                  then only pull operations occur automatically.
+**
+**    binary-glob   The VALUE is a comma-separated list of GLOB patterns
+**                  that should be treated as binary files for merging
+**                  purposes.  Example:   *.xml
+**
+**    clearsign     When enabled, fossil will attempt to sign all commits
+**                  with gpg.  When disabled (the default), commits will
+**                  be unsigned.
+**
+**    diff-command  External command to run when performing a diff.
+**                  If undefined, the internal text diff will be used.
+**
+**    dont-push     Prevent this repository from pushing from client to
+**                  server.  Useful when setting up a private branch.
+**
+**    editor        Text editor command used for check-in comments.
+**
+**    gdiff-command External command to run when performing a graphical
+**                  diff. If undefined, text diff will be used.
+**
+**    http-port     The TCP/IP port number to use by the "server"
+**                  and "ui" commands.  Default: 8080
+**
+**    ignore-glob   The VALUE is a comma-separated list of GLOB patterns
+**                  specifying files that the "extra" command will ignore.
+**                  Example:  *.o,*.obj,*.exe
+**
+**    localauth     If enabled, require that HTTP connections from
+**                  127.0.0.1 be authenticated by password.  If
+**                  false, all HTTP requests from localhost have
+**                  unrestricted access to the repository.
+**
+**    mtime-changes Use file modification times (mtimes) to detect when
+**                  files have been modified.  (Default "on".)
 **
-**    auto-shun        If enabled, automatically pull the shunning list
-**                     from a server to which the client autosyncs.
+**    pgp-command   Command used to clear-sign manifests at check-in.
+**                  The default is "gpg --clearsign -o ".
 **
-**    autosync         If enabled, automatically pull prior to commit
-**                     or update and automatically push after commit or
-**                     tag or branch creation.  If the value is "pullonly"
-**                     then only pull operations occur automatically.
+**    proxy         URL of the HTTP proxy.  If undefined or "off" then
+**                  the "http_proxy" environment variable is consulted.
+**                  If the http_proxy environment variable is undefined
+**                  then a direct HTTP connection is used.
 **
-**    binary-glob      The VALUE is a comma-separated list of GLOB patterns
-**                     that should be treated as binary files for merging
-**                     purposes.  Example:   *.xml
-**
-**    clearsign        When enabled, fossil will attempt to sign all commits
-**                     with gpg.  When disabled (the default), commits will
-**                     be unsigned.
+**    ssh-command   Command used to talk to a remote machine with
+**                  the "ssh://" protocol.
 **
-**    diff-command     External command to run when performing a diff.
-**                     If undefined, the internal text diff will be used.
-**
-**    dont-push        Prevent this repository from pushing from client to
-**                     server.  Useful when setting up a private branch.
-**
-**    editor           Text editor command used for check-in comments.
-**
-**    gdiff-command    External command to run when performing a graphical
-**                     diff. If undefined, text diff will be used.
-**
-**    http-port        The TCP/IP port number to use by the "server"
-**                     and "ui" commands.  Default: 8080
+**    web-browser   A shell command used to launch your preferred
+**                  web browser when given a URL as an argument.
+**                  Defaults to "start" on windows, "open" on Mac,
+**                  and "firefox" on Unix.
 **
-**    ignore-glob      The VALUE is a comma-separated list of GLOB patterns
-**                     specifying files that the "extra" command will ignore.
-**                     Example:  *.o,*.obj,*.exe
-**
-**    localauth        If enabled, require that HTTP connections from
-**                     127.0.0.1 be authenticated by password.  If
-**                     false, all HTTP requests from localhost have
-**                     unrestricted access to the repository.
-**
-**    mtime-changes    Use file modification times (mtimes) to detect when
-**                     files have been modified.  (Default "on".)
-**
-**    pgp-command      Command used to clear-sign manifests at check-in.
-**                     The default is "gpg --clearsign -o ".
-**
-**    proxy            URL of the HTTP proxy.  If undefined or "off" then
-**                     the "http_proxy" environment variable is consulted.
-**                     If the http_proxy environment variable is undefined
-**                     then a direct HTTP connection is used.
-**
-**    ssh-command      Command used to talk to a remote machine with
-**                     the "ssh://" protocol.
-**
-**    web-browser      A shell command used to launch your preferred
-**                     web browser when given a URL as an argument.
-**                     Defaults to "start" on windows, "open" on Mac,
-**                     and "firefox" on Unix.
+** There is a simple form in the administration gui for these settings:
+**  *  Go to the <a href="setup">Admin</a> page
+**  ** and click <a href="setup_settings">Settings</a>
 */
 void setting_cmd(void){
   int i;
   int globalFlag = find_option("global","g",0)!=0;
   int unsetFlag = g.argv[1][0]=='u';

Index: src/descendants.c
==================================================================
--- src/descendants.c
+++ src/descendants.c
@@ -255,17 +255,20 @@
   print_timeline(&q, 20);
   db_finalize(&q);
 }
 
 /*
-** COMMAND:  leaves
+** COMMAND: leaves
 **
 ** Usage: %fossil leaves ?--all? ?--closed?
 **
 ** Find leaves of all branches.  By default show only open leaves.
 ** The --all flag causes all leaves (closed and open) to be shown.
 ** The --closed flag shows only closed leaves.
+**
+** This information can also be viewed in the gui:
+**  * Go the <a href="leaves">leaves</a> page
 */
 void leaves_cmd(void){
   Stmt q;
   int showAll = find_option("all", 0, 0)!=0;
   int showClosed = find_option("closed", 0, 0)!=0;
@@ -292,11 +295,11 @@
     @ <a href="%s(g.zBaseURL)/timeline?p=%d(rid)">[timeline]</a>
   }
 }
 
 /*
-** WEBPAGE:  leaves
+** WEBPAGE: leaves
 **
 ** Find leaves of all branches.
 */
 void leaves_page(void){
   Stmt q;
@@ -351,7 +354,7 @@
   @ function xin(id){
   @ }
   @ function xout(id){
   @ }
   @ </script>
-  style_footer();
+  style_footer_cmdref("leaves",0);
 }

Index: src/diff.c
==================================================================
--- src/diff.c
+++ src/diff.c
@@ -810,20 +810,23 @@
   for(i=0; i<ann.nOrig; i++){
     ((char*)ann.aOrig[i].z)[ann.aOrig[i].n] = 0;
     @ %s(ann.aOrig[i].zSrc): %h(ann.aOrig[i].z)
   }
   @ </pre>
-  style_footer();
+  style_footer_cmdref("annotate",0);
 }
 
 /*
 ** COMMAND: annotate
 **
 ** %fossil annotate FILENAME
 **
 ** Output the text of a file with markings to show when each line of
 ** the file was last modified.
+**
+** This can also be viewed in the gui, if you click the "annotate" link
+** on the "File History" page of files.
 */
 void annotate_cmd(void){
   int fnid;         /* Filename ID */
   int fid;          /* File instance ID */
   int mid;          /* Manifest where file was checked in */

Index: src/diffcmd.c
==================================================================
--- src/diffcmd.c
+++ src/diffcmd.c
@@ -417,17 +417,22 @@
 ** the source check-in for the diff operation.  If not specified, the 
 ** source check-in is the base check-in for the current check-out.
 **
 ** If the "--to VERSION" option appears, it specifies the check-in from
 ** which the second version of the file or files is taken.  If there is
-** no "--to" option then the (possibly edited) files in the current check-out
-** are used.
+** no "--to" option then the (possibly edited) files in the current
+** check-out are used.
 **
 ** The "-i" command-line option forces the use of the internal diff logic
 ** rather than any external diff program that might be configured using
-** the "setting" command.  If no external diff program is configured, then
-** the "-i" option is a no-op.  The "-i" option converts "gdiff" into "diff".
+** the <a>setting</a> command. If no external diff program is configured, then
+** the "-i" option is a no-op.  The "-i" option converts "gdiff" into
+** "diff".
+**
+** The results of the internal diff command can also be seen in the gui:
+**  1. Go to the <a href="vdiff">vdiff</a> page
+**  2. use the "diff against another version" link on the Check-in detail view.
 */
 void diff_cmd(void){
   int isGDiff;               /* True for gdiff.  False for normal diff */
   int isInternDiff;          /* True for internal diff */
   int hasNFlag;              /* True if -N or --new-file flag is used */

Index: src/event.c
==================================================================
--- src/event.c
+++ src/event.c
@@ -440,7 +440,7 @@
   @ <input type="submit" name="preview" value="Preview Your Changes" />
   @ <input type="submit" name="submit" value="Apply These Changes" />
   @ <input type="submit" name="cancel" value="Cancel" />
   @ </td></tr></table>
   @ </div></form>
-  style_footer();
+  style_footer_cmdref(0,"<a href=\"wiki_rules\">wiki format</a>");
 }

Index: src/finfo.c
==================================================================
--- src/finfo.c
+++ src/finfo.c
@@ -27,10 +27,13 @@
 **
 ** Print the change history for a single file.
 **
 ** The "--limit N" and "--offset P" options limit the output to the first
 ** N changes after skipping P changes.
+**
+** The history of a file can also be viewed in the gui:
+**  * Go to the <a href="dir">file browser</a> and drill down to the file
 */
 void finfo_cmd(void){
   Stmt q;
   int vid;
   Blob dest;
@@ -209,7 +212,7 @@
       @     </td></tr>
     }
   }
   @ </table>
   timeline_output_graph_javascript(pGraph);
-  style_footer();
+  style_footer_cmdref("finfo",0);
 }

Index: src/info.c
==================================================================
--- src/info.c
+++ src/info.c
@@ -433,10 +433,12 @@
       }
       @   | <a href="%s(g.zTop)/artifact/%S(zUuid)">manifest</a>
       if( g.okWrite ){
         @   | <a href="%s(g.zTop)/ci_edit?r=%S(zUuid)">edit</a>
       }
+      @   | <a href="%s(g.zTop)/vdiff?from=%S(zUuid)">
+      @      diff against another version</a>
       @   </td>
       @ </tr>
     }
     @ </table>
   }else{
@@ -475,11 +477,11 @@
     const char *zOld = db_column_text(&q,1);
     const char *zNew = db_column_text(&q,2);
     append_file_change_line(zName, zOld, zNew, showDiff);
   }
   db_finalize(&q);
-  style_footer();
+  style_footer_cmdref("info",0);
 }
 
 /*
 ** WEBPAGE: winfo
 ** URL:  /winfo?name=RID
@@ -558,11 +560,11 @@
       wiki_convert(&wiki, 0, 0);
       blob_reset(&wiki);
     }
     manifest_clear(&m);
   }
-  style_footer();
+  style_footer_cmdref("info",0);
 }
 
 /*
 ** Show a webpage error message
 */
@@ -634,21 +636,45 @@
 **
 ** Show all differences between two checkins.  
 */
 void vdiff_page(void){
   int ridFrom, ridTo;
-  int showDetail = 0;
+  int showDetail = atoi(PD("detail","0"));
+  const char *zFrom = P("from");
+  const char *zTo = P("to");
   int iFrom, iTo;
   Manifest mFrom, mTo;
 
   login_check_credentials();
   if( !g.okRead ){ login_needed(); return; }
   login_anonymous_available();
 
-  if( vdiff_parse_manifest("from", &ridFrom, &mFrom) ) return;
-  if( vdiff_parse_manifest("to", &ridTo, &mTo) ) return;
-  showDetail = atoi(PD("detail","0"));
+  if( !zFrom || !zFrom[0] || !zTo || !zTo[0] ){
+    /* if from or to or both are bissing, show a form to enter
+    ** the query parameters by hand
+    */
+    style_header("Check-in Differences");
+    @ <p><br/>
+    @ Enter below the UUIDs, branch- or tag-names, you wish to diff:
+    @ <br/></p>
+    @ <form action="%s(g.zBaseURL)/vdiff" method="post"><div>
+    @ <table><tr><td>from:</td><td><input type="text" size="40"
+    @  name="from" value="%s(zFrom?zFrom:"")" /></td><td></td></tr>
+    @ <tr><td>to:</td><td><input type="text" size="40"
+    @  name="to" value="%s(zTo?zTo:"")" /></td><td></td></tr>
+    @ <tr><td>details:</td><td><input type="checkbox" name="detail"
+    @  checked="checked" value="1" /></td></tr>
+    @ <tr><td></td><td></td><td>
+    @  <input type="submit" name="diff" value="diff" /></td></tr></table>
+    @ </div></form>
+    style_footer_cmdref("diff",0);
+    return;
+  }else if(    vdiff_parse_manifest("from", &ridFrom, &mFrom) 
+            || vdiff_parse_manifest("to", &ridTo, &mTo)
+  ){
+    return;
+  }
   style_header("Check-in Differences");
   @ <h2>Difference From:</h2><blockquote>
   checkin_description(ridFrom);
   @ </blockquote><h2>To:</h2><blockquote>
   checkin_description(ridTo);
@@ -685,11 +711,11 @@
     }
   }
   manifest_clear(&mFrom);
   manifest_clear(&mTo);
 
-  style_footer();
+  style_footer_cmdref("diff",0);
 }
 
 /*
 ** Write a description of an object to the www reply.
 **
@@ -915,11 +941,11 @@
   blob_reset(&c1);
   blob_reset(&c2);
   @ %h(blob_str(&diff))
   @ </pre></blockquote>
   blob_reset(&diff);
-  style_footer();
+  style_footer_cmdref("diff",0);
 }
 
 /*
 ** WEBPAGE: raw
 ** URL: /raw?name=ARTIFACTID&m=TYPE
@@ -1157,11 +1183,11 @@
       hexdump(&content);
       @ </pre>
     }
     @ </blockquote>
   }
-  style_footer();
+  style_footer_cmdref( "artifact",0 );
 }  
 
 /*
 ** WEBPAGE: tinfo
 ** URL: /tinfo?name=ARTIFACTID
@@ -1217,11 +1243,11 @@
   @
   @ <ol>
   free(zDate);
   ticket_output_change_artifact(&m);
   manifest_clear(&m);
-  style_footer();
+  style_footer_cmdref("info",0);
 }
 
 
 /*
 ** WEBPAGE: info

Index: src/main.c
==================================================================
--- src/main.c
+++ src/main.c
@@ -576,11 +576,15 @@
 /*
 ** COMMAND: help
 **
 ** Usage: %fossil help COMMAND
 **
-** Display information on how to use COMMAND
+** Display information on how to use COMMAND. If COMMAND is
+** omitted, a list of available commands is displayed.
+**
+** This can also be viewed in the gui:
+**  * Go to the <a href="help">help</a> page and click COMMAND
 */
 void help_cmd(void){
   int rc, idx;
   const char *z;
   if( g.argc!=3 ){
@@ -602,10 +606,20 @@
   }
   while( *z ){
     if( *z=='%' && strncmp(z, "%fossil", 7)==0 ){
       printf("%s", g.argv[0]);
       z += 7;
+    }else if( *z=='<' && strncmp(z,"<a ",3)==0 ){
+      putchar('"');
+      while( *z && *z!='>') z++;
+      if( *z ) z++;
+    }else if( *z=='<' && strncmp(z,"<a>",3)==0 ){
+      putchar('"');
+      z += 3;
+    }else if( *z=='<' && strncmp(z,"</a>",4)==0 ){
+      putchar('"');
+      z += 4;
     }else{
       putchar(*z);
       z++;
     }
   }
@@ -618,48 +632,125 @@
 */
 void help_page(void){
     const char * zCmd = P("cmd");
     
     style_header("Command line help %s%s",zCmd?" - ":"",zCmd?zCmd:"");
-    if( zCmd ){
+    if( zCmd  && zCmd[0] && strcmp(zCmd,"test") ){
       int rc, idx;
-      char *z, *s, *d;
 
-      @ <h1>%s(zCmd)</h1>
       rc = name_search(zCmd, aCommand, count(aCommand), &idx);
       if( rc==1 ){
-        @ unknown command: %s(zCmd)
+        @ <h1>unknown command: %s(zCmd)</h1>
       }else if( rc==2 ){
-        @ ambiguous command prefix: %s(zCmd)
+        @ <h1>ambiguous command prefix: %s(zCmd)</h1>
       }else{
-        z = (char*)aCmdHelp[idx];
-        if( z==0 ){
+        char *zSrc, *zDest;
+        int src,dest,len;
+
+        @ <h1>%s(aCommand[idx].zName)</h1>
+        zSrc = (char*)aCmdHelp[idx];
+        if( zSrc==0 || *zSrc==0 ){
           @ no help available for the %s(aCommand[idx].zName) command
         }else{
-          z=s=d=mprintf("%s",z);
-	  while( *s ){
-	    if( *s=='%' && strncmp(s, "%fossil", 7)==0 ){
-	      s++;
-	    }else{
-	      *d++ = *s++;
-	    }
-	  }
-	  *d = 0;
-	  @ <pre>%s(z)</pre>
-	  free(z);
-	}
+          len = strlen(zSrc);
+          zDest = malloc(len+1);
+          for(src=dest=0;zSrc[src];){
+            if( zSrc[src]=='%' && strncmp(zSrc+src, "%fossil", 7)==0 ){
+              src++; /* skip % for fossil argv[0] expansion */
+            }else if( zSrc[src]=='<' && strncmp(zSrc+src, "</a>", 3)==0 ){
+              src += 4;
+              zDest[dest++]='<';
+              zDest[dest++]='/';
+              zDest[dest++]='a';
+              zDest[dest++]='>';
+              zDest[dest++]='"';
+            }else if( zSrc[src]=='<' && strncmp(zSrc+src, "<a ", 3)==0 ){
+              len += 2;
+	      zDest=realloc(zDest,len);
+              zDest[dest++]='"';
+              while( zSrc[src] && zSrc[src]!='>' ){
+                zDest[dest++]=zSrc[src++];
+              }
+              if( zSrc[src] ) zDest[dest++]=zSrc[src++];
+            }else if( zSrc[src]=='<' && strncmp(zSrc+src, "<a>", 3)==0 ){
+              /* found an internal command cross reference,
+              ** create an additional link
+              */
+              int start;
+
+              len+=80;
+              zDest=realloc(zDest,len);
+              zDest[dest++]='"';
+              zDest[dest++]=zSrc[src++]; /* < */
+              zDest[dest++]=zSrc[src++]; /* a */
+              zDest[dest++]=' ';
+              zDest[dest++]='h';
+              zDest[dest++]='r';
+              zDest[dest++]='e';
+              zDest[dest++]='f';
+              zDest[dest++]='=';
+              zDest[dest++]='"';
+              zDest[dest++]='h';
+              zDest[dest++]='e';
+              zDest[dest++]='l';
+              zDest[dest++]='p';
+              zDest[dest++]='?';
+              zDest[dest++]='c';
+              zDest[dest++]='m';
+              zDest[dest++]='d';
+              zDest[dest++]='=';
+              start = src+1;
+              for( src=start; zSrc[src] && zSrc[src]!='<'; ){
+                zDest[dest++]=zSrc[src++]; /* command name */
+              }
+              zDest[dest++]='"';
+              zDest[dest++]='>';
+              for( src=start; zSrc[src] && zSrc[src]!='<'; ){
+                zDest[dest++]=zSrc[src++]; /* command name */
+              }
+            }else{
+              zDest[dest++] = zSrc[src++];
+            }
+          }
+          zDest[dest] = 0;
+          @ <div class="cmdhelp">%s(zDest)</div>
+          free(zDest);
+          @ <hr/>additional information may be found in the web documentation:
+          @ <a href="http://www.fossil-scm.org/fossil/doc/tip/www/cmd_%s(aCommand[idx].zName).wiki">
+          @ cmd_%s(aCommand[idx].zName)</a>, 
+        }
       }
-      @ <hr/><a href="help">available commands</a> in fossil
+      @ see also the list of
+      @ <a href="help">available commands</a> in fossil
       @ version %s(MANIFEST_VERSION" "MANIFEST_DATE) UTC
     }else{
-      int i;
+      int nCol, nRow, i, ignored, cnt, showTest;
       
+      /* detect, if we show normal or test commands */
+      showTest = ( zCmd  && !strncmp(zCmd,"test",4) );
+      for( i=0,ignored=0; i<count(aCommand); i++){
+        if( (strncmp(aCommand[i].zName,"test",4)==0) ^ showTest ) ignored++;
+      }
+      nCol = 4;
+      nRow = (count(aCommand)-ignored+nCol-1)/nCol;
       @ <h1>Available commands</h1>
-      for(i=0; i<count(aCommand); i++){
-        if( strncmp(aCommand[i].zName,"test",4)==0 ) continue;
-        @ <kbd><a href="help?cmd=%s(aCommand[i].zName)">
-        @ %s(aCommand[i].zName)</a></kbd>
+      @ <table class="browser"><tr><td class="browser"><ul class="browser">
+      for( i=cnt=0; i<count(aCommand); i++ ){
+        if( cnt==nRow ){
+          @ </ul></td><td class="browser"><ul class="browser">
+          cnt=0;
+        }
+        if( (strncmp(aCommand[i].zName,"test",4)==0) ^ showTest ) continue;
+        @ <li><kbd><a href="help?cmd=%s(aCommand[i].zName)">
+        @ %s(aCommand[i].zName)</a></kbd></li>
+        cnt++;
+      }
+      @ </ul></td></tr></table>
+      if( showTest ){
+        @ <a href="help">show standard commands</a>
+      }else{
+        @ <a class="hidden" href="help?cmd=test">show test commands</a>
       }
       @ <hr/>fossil version %s(MANIFEST_VERSION" "MANIFEST_DATE) UTC
     }
     style_footer();
 }
@@ -869,10 +960,12 @@
 **      repository: /home/somebody/project.db
 **
 ** The second line defines the name of the repository.  After locating
 ** the repository, fossil will generate a webpage on stdout based on
 ** the values of standard CGI environment variables.
+**
+** See also the <a>http</a>, <a>server</a> and <a>ui</a> commands.
 */
 void cmd_cgi(void){
   const char *zFile;
   const char *zNotFound = 0;
   Blob config, line, key, value;
@@ -982,10 +1075,12 @@
 ** If REPOSITORY is a directory that contains one or more respositories
 ** with names of the form "*.fossil" then the first element of the URL
 ** pathname selects among the various repositories.  If the pathname does
 ** not select a valid repository and the --notfound option is available,
 ** then the server redirects (HTTP code 302) to the URL of --notfound.
+**
+** See also the <a>cgi</a>, <a>server</a> and <a>ui</a> commands.
 */
 void cmd_http(void){
   const char *zIpAddr;
   const char *zNotFound;
   zNotFound = find_option("notfound", 0, 1);
@@ -1070,10 +1165,12 @@
 **
 ** In the "server" command, the REPOSITORY can be a directory (aka folder)
 ** that contains one or more respositories with names ending in ".fossil".
 ** In that case, the first element of the URL is used to select among the
 ** various repositories.
+**
+** See also the <a>cgi</a> and <a>http</a> commands.
 */
 void cmd_webserver(void){
   int iPort, mxPort;        /* Range of TCP ports allowed */
   const char *zPort;        /* Value of the --port option */
   char *zBrowser;           /* Name of web browser program */

Index: src/merge.c
==================================================================
--- src/merge.c
+++ src/merge.c
@@ -40,15 +40,15 @@
 ** file and directory names from the current checkout even if those
 ** names might have been changed in the branch being merged in.
 **
 ** Other options:
 **
-**   --detail                Show additional details of the merge
+**   --detail             Show additional details of the merge
 **
-**   --binary GLOBPATTERN    Treat files that match GLOBPATTERN as binary
-**                           and do not try to merge parallel changes.  This
-**                           option overrides the "binary-glob" setting.
+**   --binary GLOBPATTERN Treat files that match GLOBPATTERN as binary
+**                        and do not try to merge parallel changes. This
+**                        option overrides the "binary-glob" setting.
 */
 void merge_cmd(void){
   int vid;              /* Current version */
   int mid;              /* Version we are merging against */
   int pid;              /* The pivot version - most recent common ancestor */

Index: src/rebuild.c
==================================================================
--- src/rebuild.c
+++ src/rebuild.c
@@ -379,13 +379,13 @@
 ** %fossil scrub [--verily] [--force] [REPOSITORY]
 **
 ** The command removes sensitive information (such as passwords) from a
 ** repository so that the respository can be sent to an untrusted reader.
 **
-** By default, only passwords are removed.  However, if the --verily option
-** is added, then private branches, concealed email addresses, IP
-** addresses of correspondents, and similar privacy-sensitive fields
+** By default, only passwords are removed.  However, if the --verily
+** option is added, then private branches, concealed email addresses,
+** IP addresses of correspondents, and similar privacy-sensitive fields
 ** are also purged.
 **
 ** This command permanently deletes the scrubbed information.  The effects
 ** of this command are irreversible.  Use with caution.
 **
@@ -485,10 +485,11 @@
 ** This command studies the artifacts (files) in DIRECTORY and
 ** reconstructs the fossil record from them. It places the new
 ** fossil repository in FILENAME. Subdirectories are read, files
 ** with leading '.' in the filename are ignored.
 **
+** See also the <a>deconstruct</a> command.
 */
 void reconstruct_cmd(void) {
   char *zPassword;
   if( g.argc!=4 ){
     usage("FILENAME DIRECTORY");
@@ -523,18 +524,22 @@
 }
 
 /*
 ** COMMAND: deconstruct
 **
-** Usage %fossil deconstruct ?-R|--repository REPOSITORY? ?-L|--prefixlength N? DESTINATION
+** Usage: %fossil deconstruct ?-R|--repository REPOSITORY? \\
+**                ?-L|--prefixlength N? DESTINATION
 **
-** This command exports all artifacts of o given repository and
-** writes all artifacts to the file system. The DESTINATION directory
-** will be populated with subdirectories AA and files AA/BBBBBBBBB.., where
-** AABBBBBBBBB.. is the 40 character artifact ID, AA the first 2 characters.
+** This command exports all artifacts of o given repository and writes
+** all artifacts to the file system. The DESTINATION directory will be
+** populated with subdirectories AA and files AA/BBBBBBBBB.., where
+** AABBBBBBBBB.. is the 40 character artifact ID and AA the first 2
+** characters.
 ** If -L|--prefixlength is given, the length (default 2) of the directory
 ** prefix can be set to 0,1,..,9 characters.
+**
+** See also the <a>reconstruct</a> command.
 */
 void deconstruct_cmd(void){
   const char *zDestDir;
   const char *zPrefixOpt;
   Stmt        s;

Index: src/report.c
==================================================================
--- src/report.c
+++ src/report.c
@@ -80,11 +80,11 @@
   Th_Render(zScript);
   
   blob_reset(&ril);
   if( g.thTrace ) Th_Trace("END_REPORTLIST<br />\n", -1);
 
-  style_footer();
+  style_footer_cmdref("ticket",0);
 }
 
 /*
 ** Remove whitespace from both ends of a string.
 */

Index: src/setup.c
==================================================================
--- src/setup.c
+++ src/setup.c
@@ -217,11 +217,11 @@
   @ <span class="usertype">nobody</span>.
   @ </p></li>
   @
   @ </ol>
   @ </td></tr></table>
-  style_footer();
+  style_footer_cmdref("user",0);
 }
 
 /*
 ** Return true if zPw is a valid password string.  A valid
 ** password string is:
@@ -664,11 +664,11 @@
   @ template for users who are allowed more access than
   @ <span class="usertype">anonymous</span>,
   @ but less than a <span class="usertype">developer</span>.
   @ </p></li>
   @ </ul>
-  style_footer();
+  style_footer_cmdref("user",0);
 }
 
 
 /*
 ** Generate a checkbox for an attribute.
@@ -1004,11 +1004,11 @@
   @ See also the <a href="setup_header">header</a> and
   @ <a href="setup_footer">footer</a> editing screens.
   @ <blockquote><pre>
   cgi_append_default_css();
   @ </pre></blockquote>
-  style_footer();
+  style_footer_cmdref("configuration","area skin");
   db_end_transaction(0);
 }
 
 /*
 ** WEBPAGE: setup_header
@@ -1042,11 +1042,11 @@
   @ See also the <a href="setup_editcss">CSS</a> and
   @ <a href="setup_footer">footer</a> editing screeens.
   @ <blockquote><pre>
   @ %h(zDefaultHeader)
   @ </pre></blockquote>
-  style_footer();
+  style_footer_cmdref("configuration","area skin");
   db_end_transaction(0);
 }
 
 /*
 ** WEBPAGE: setup_footer
@@ -1079,11 +1079,11 @@
   @ See also the <a href="setup_editcss">CSS</a> and
   @ <a href="setup_header">header</a> editing screens.
   @ <blockquote><pre>
   @ %h(zDefaultFooter)
   @ </pre></blockquote>
-  style_footer();
+  style_footer_cmdref("configuration","area skin");
   db_end_transaction(0);
 }
 
 /*
 ** WEBPAGE: setup_logo
@@ -1148,8 +1148,8 @@
   @
   @ <p><span class="note">Note:</span>  Your browser has probably cached the
   @ logo image, so you will probably need to press the Reload button on your
   @ browser after changing the logo to provoke your browser to reload the new
   @ logo image. </p>
-  style_footer();
+  style_footer_cmdref("configuration","area skin");
   db_end_transaction(0);
 }

Index: src/skins.c
==================================================================
--- src/skins.c
+++ src/skins.c
@@ -840,8 +840,8 @@
       @ </form></li>
     }
   }
   db_finalize(&q);
   @ </ol>
-  style_footer();
+  style_footer_cmdref("configuration","area skin");
   db_end_transaction(0);
 }

Index: src/style.c
==================================================================
--- src/style.c
+++ src/style.c
@@ -114,10 +114,27 @@
   cgi_destination(CGI_BODY);
   g.cgiOutput = 1;
   headerHasBeenGenerated = 1;
   sideboxUsed = 0;
 }
+
+/*
+** append a reference to command line to a web page
+** and generate the footer
+*/
+void style_footer_cmdref( const char * const zCmd, const char * const zAddOn ){
+  @ <div class="cmdref">
+  if( zCmd ){
+    @ See also command line help:
+    @  <a href="help?cmd=%s(zCmd)">%s(zCmd)</a>
+  }
+  if( zAddOn ){
+    @ %s(zAddOn)
+  }
+  @ </div>
+  style_footer();
+}
 
 /*
 ** Draw the footer at the bottom of the page.
 */
 void style_footer(void){
@@ -239,10 +256,11 @@
 @ if {[info exists login]} {
 @   html "<a href='$baseurl/login'>Logout</a> "
 @ } else {
 @   html "<a href='$baseurl/login'>Login</a> "
 @ }
+@ html "<small><sup><a href='$baseurl/help'>?</a></sup></small>"
 @ </th1></div>
 ;
 
 /*
 ** The default page footer
@@ -730,10 +748,30 @@
   },
   { "p.shunned",
     "format for artifact lines beeing shunned",
     @   color: blue;
   },
+  { "a.hidden",
+    "format for links, that should not be very visible",
+    @   font-size: xx-small;
+    @   color: #aaaaaa;
+  },
+  { "div.cmdhelp",
+    "format for single command display on the gui help page",
+    @   font-family: monospace;
+    @   padding-left: 4em;
+    @   padding-bottom: 1em;
+    @   white-space: pre;
+  },
+  { "div.cmdref",
+    "format for references to command line help entries the actual gui page."
+    "set \"display\" to \"none\" to suppress the display",
+    @   font-size: small;
+    @   text-align: right;
+    @   font-family: monospace;
+    @   color: #777777;
+  },
   { 0,
     0,
     0
   }
 };
@@ -745,18 +783,18 @@
   int i;
 
   for (i=0;cssDefaultList[i].elementClass;i++){
     if (cssDefaultList[i].elementClass[0]){
       cgi_printf("/* %s */\n%s {\n%s\n}\n\n",
-		 cssDefaultList[i].comment,
-		 cssDefaultList[i].elementClass,
-		 cssDefaultList[i].value
-		);
+                 cssDefaultList[i].comment,
+                 cssDefaultList[i].elementClass,
+                 cssDefaultList[i].value
+                );
     }else{
       cgi_printf("%s",
-		 cssDefaultList[i].value
-		);
+                 cssDefaultList[i].value
+                );
     }
   }
 }
 
 /*

Index: src/sync.c
==================================================================
--- src/sync.c
+++ src/sync.c
@@ -132,18 +132,19 @@
 ** Pull changes from a remote repository into the local repository.
 ** Use the "-R REPO" or "--repository REPO" command-line options
 ** to specify an alternative repository file.
 **
 ** If the URL is not specified, then the URL from the most recent
-** clone, push, pull, remote-url, or sync command is used.
+** <a>clone</a>, <a>push</a>, <a>pull</a>, <a>remote-url</a>, or <a>sync</a> command
+** is used.
 **
 ** The URL specified normally becomes the new "remote-url" used for
 ** subsequent push, pull, and sync operations.  However, the "--once"
 ** command-line option makes the URL a one-time-use URL that is not
 ** saved.
 **
-** See also: clone, push, sync, remote-url
+** See also: <a>clone</a>, <a>push</a>, <a>sync</a>, <a>remote-url</a>
 */
 void pull_cmd(void){
   int syncFlags = process_sync_args();
   client_sync(0,1,0,syncFlags,0);
 }
@@ -156,18 +157,19 @@
 ** Push changes in the local repository over into a remote repository.
 ** Use the "-R REPO" or "--repository REPO" command-line options
 ** to specify an alternative repository file.
 **
 ** If the URL is not specified, then the URL from the most recent
-** clone, push, pull, remote-url, or sync command is used.
+** <a>clone</a>, <a>push</a>, <a>pull</a>, <a>remote-url</a>, or <a>sync</a> command
+** is used.
 **
 ** The URL specified normally becomes the new "remote-url" used for
-** subsequent push, pull, and sync operations.  However, the "--once"
-** command-line option makes the URL a one-time-use URL that is not
-** saved.
+** subsequent <a>push</a>, <a>pull</a>, and <a>sync</a> operations.  However,
+** the "--once" command-line option makes the URL a one-time-use URL
+** that is not saved.
 **
-** See also: clone, pull, sync, remote-url
+** See also: <a>clone</a>, <a>pull</a>, <a>sync</a>, <a>remote-url</a>
 */
 void push_cmd(void){
   process_sync_args();
   client_sync(1,0,0,0,0);
 }
@@ -177,27 +179,28 @@
 ** COMMAND: sync
 **
 ** Usage: %fossil sync ?URL? ?options?
 **
 ** Synchronize the local repository with a remote repository.  This is
-** the equivalent of running both "push" and "pull" at the same time.
-** Use the "-R REPO" or "--repository REPO" command-line options
+** the equivalent of running both <a>push</a> and <a>pull</a> at the same
+** time. Use the "-R REPO" or "--repository REPO" command-line options
 ** to specify an alternative repository file.
 **
 ** If a user-id and password are required, specify them as follows:
 **
 **     http://userid:password@www.domain.com:1234/path
 **
-** If the URL is not specified, then the URL from the most recent successful
-** clone, push, pull, remote-url, or sync command is used.
+** If the URL is not specified, then the URL from the most recent
+** successful <a>clone</a>, <a>push</a>, <a>pull</a>, <a>remote-url</a>, or <a>sync</a>
+** command is used.
 **
 ** The URL specified normally becomes the new "remote-url" used for
-** subsequent push, pull, and sync operations.  However, the "--once"
-** command-line option makes the URL a one-time-use URL that is not
-** saved.
+** subsequent <a>push</a>, <a>pull</a>, and <a>sync</a> operations.  However,
+** the "--once" command-line option makes the URL a one-time-use URL
+** that is not saved.
 **
-** See also:  clone, push, pull, remote-url
+** See also:  <a>clone</a>, <a>push</a>, <a>pull</a>, <a>remote-url</a>
 */
 void sync_cmd(void){
   int syncFlags = process_sync_args();
   client_sync(1,1,0,syncFlags,0);
 }
@@ -205,19 +208,19 @@
 /*
 ** COMMAND: remote-url
 **
 ** Usage: %fossil remote-url ?URL|off?
 **
-** Query and/or change the default server URL used by the "pull", "push",
-** and "sync" commands.
+** Query and/or change the default server URL used by the <a>pull</a>,
+** <a>push</a>, and <a>sync</a> commands.
 **
-** The remote-url is set automatically by a "clone" command or by any
-** "sync", "push", or "pull" command that specifies an explicit URL.
-** The default remote-url is used by auto-syncing and by "sync", "push",
-** "pull" that omit the server URL.
+** The remote-url is set automatically by a <a>clone</a> command or by any
+** <a>sync</a>, <a>push</a>, or <a>pull</a> command that specifies an explicit
+** URL. The default remote-url is used by auto-syncing and by
+** <a>sync</a>, <a>push</a>, <a>pull</a> that omit the server URL.
 **
-** See also: clone, push, pull, sync
+** See also: <a>clone</a>, <a>push</a>, <a>pull</a>, <a>sync</a>
 */
 void remote_url_cmd(void){
   char *zUrl;
   db_find_and_open_repository(1);
   if( g.argc!=2 && g.argc!=3 ){

Index: src/tag.c
==================================================================
--- src/tag.c
+++ src/tag.c
@@ -318,11 +318,11 @@
 **
 **     %fossil tag add ?--raw? ?--propagate? TAGNAME CHECK-IN ?VALUE?
 **
 **         Add a new tag or property to CHECK-IN. The tag will
 **         be usable instead of a CHECK-IN in commands such as
-**         update and merge.  If the --propagate flag is present,
+**         <a>update</a> and <a>merge</a>.  If the --propagate flag is present,
 **         the tag value propages to all descendants of CHECK-IN
 **
 **     %fossil tag cancel ?--raw? TAGNAME CHECK-IN
 **
 **         Remove the tag TAGNAME from CHECK-IN, and also remove
@@ -345,16 +345,16 @@
 **
 ** If you need to use a tagname that might be confused with
 ** a hexadecimal baseline or artifact ID, you can explicitly
 ** disambiguate it by prefixing it with "tag:". For instance:
 **
-**   fossil update decaf
+**   fossil <a>update</a> decaf
 **
 ** will be taken as an artifact or baseline ID and fossil will
 ** probably complain that no such revision was found. However
 **
-**   fossil update tag:decaf
+**   fossil <a>update</a> tag:decaf
 **
 ** will assume that "decaf" is a tag/branch name.
 **
 ** only allow --date-override and --user-override in 
 **   %fossil tag add --date-override 'YYYY-MMM-DD HH:MM:SS' \\
@@ -531,11 +531,11 @@
       @ <li><span class="tagDsp">%h(zName)</span></li>
     }
   }
   @ </ul>
   db_finalize(&q);
-  style_footer();
+  style_footer_cmdref("tag","list");
 }
 
 /*
 ** Draw the names of all tags added to check-in rid.  Only tags
 ** that are directly applied to rid are named.  Propagated tags

Index: src/timeline.c
==================================================================
--- src/timeline.c
+++ src/timeline.c
@@ -952,11 +952,11 @@
   db_prepare(&q, "SELECT * FROM timeline ORDER BY timestamp DESC /*scan*/");
   @ <h2>%b(&desc)</h2>
   blob_reset(&desc);
   www_print_timeline(&q, tmFlags, 0);
   db_finalize(&q);
-  style_footer();
+  style_footer_cmdref("timeline",0);
 }
 
 /*
 ** The input query q selects various records.  Print a human-readable
 ** summary of those records.
@@ -1091,10 +1091,18 @@
 ** page. For example:
 **
 **     w  = wiki commits only
 **     ci = file commits only
 **     t  = tickets only
+**     e  = events only
+**
+** The information can also be used in the gui:
+**  * go to the <a href="timeline">timeline</a> page
+**  * or the "history" links on the dedicated details views(events,
+**    files, tickets, ..)
+**
+** See also: <a>descendants</a>
 */
 void timeline_cmd(void){
   Stmt q;
   int n, k;
   const char *zCount;

Index: src/tkt.c
==================================================================
--- src/tkt.c
+++ src/tkt.c
@@ -363,11 +363,11 @@
       @ </ul>
     }
     db_finalize(&q);
   }
  
-  style_footer();
+  style_footer_cmdref("info",0);
 }
 
 /*
 ** TH command:   append_field FIELD STRING
 **
@@ -532,11 +532,11 @@
     cgi_redirect(mprintf("%s/tktview/%s", g.zBaseURL, zNewUuid));
     return;
   }
   @ </form>
   if( g.thTrace ) Th_Trace("END_TKTVIEW<br />\n", -1);
-  style_footer();
+  style_footer_cmdref("ticket","add");
 }
 
 /*
 ** WEBPAGE: tktedit
 ** WEBPAGE: debug_tktedit
@@ -599,11 +599,11 @@
     cgi_redirect(mprintf("%s/tktview/%s", g.zBaseURL, zName));
     return;
   }
   @ </form>
   if( g.thTrace ) Th_Trace("BEGIN_TKTEDIT<br />\n", -1);
-  style_footer();
+  style_footer_cmdref("ticket","change");
 }
 
 /*
 ** Check the ticket table schema in zSchema to see if it appears to
 ** be well-formed.  If everything is OK, return NULL.  If something is
@@ -705,11 +705,11 @@
   }
   db_prepare(&q, zSQL);
   free(zSQL);
   www_print_timeline(&q, TIMELINE_ARTID, 0);
   db_finalize(&q);
-  style_footer();
+  style_footer_cmdref("timeline",0);
 }
 
 /*
 ** WEBPAGE: tkthistory
 ** URL: /tkthistory?name=TICKETUUID
@@ -792,11 +792,11 @@
       }
       manifest_clear(&m);
     }
   }
   db_finalize(&q);
-  style_footer();
+  style_footer_cmdref("timeline",0);
 }
 
 /*
 ** Return TRUE if the given BLOB contains a newline character.
 */
@@ -896,10 +896,13 @@
 **
 **         like set, but create a new ticket with the given values.
 **
 ** The values in set|add are not validated against the definitions
 ** given in "Ticket Common Script".
+**
+** All this stuff can also be done in the gui:
+**  * Go the the <a href="reportlist">Tickets</a> page
 */
 void ticket_cmd(void){
   int n;
 
   /* do some ints, we want to be inside a checkout */

Index: src/undo.c
==================================================================
--- src/undo.c
+++ src/undo.c
@@ -244,16 +244,17 @@
 /*
 ** COMMAND: undo
 **
 ** Usage: %fossil undo ?FILENAME...?
 **
-** Undo the most recent update or merge or revert operation.  If FILENAME is
-** specified then restore the content of the named file(s) but otherwise
-** leave the update or merge or revert in effect.
+** Undo the most recent <a>update</a> or <a>merge</a> or <a>revert</a> operation.
+** If FILENAME is specified then restore the content of the named
+** file(s) but otherwise leave the <a>update</a>, <a>merge</a> or <a>revert</a>
+** in effect.
 **
-** A single level of undo/redo is supported.  The undo/redo stack
-** is cleared by the commit and checkout commands.
+** A single level of <a>undo</a>/<a>redo</a> is supported. The undo/<a>redo</a>
+** stack is cleared by the <a>commit</a> and <a>checkout</a> commands.
 */
 void undo_cmd(void){
   int undo_available;
   db_must_be_within_tree();
   db_begin_transaction();
@@ -283,17 +284,17 @@
 /*
 ** COMMAND: redo
 **
 ** Usage: %fossil redo ?FILENAME...?
 **
-** Redo an update or merge or revert operation that has been undone
-** by the undo command.  If FILENAME is specified then restore the changes
-** associated with the named file(s) but otherwise leave the update
-** or merge undone.
+** Redo an <a>update</a>, <a>merge</a> or <a>revert</a> operation that has been
+** undone by the <a>undo</a> command. If FILENAME is specified then restore
+** the changes associated with the named file(s) but otherwise leave the
+** update or merge undone.
 **
-** A single level of undo/redo is supported.  The undo/redo stack
-** is cleared by the commit and checkout commands.
+** A single level of <a>undo</a>/<a>redo</a> is supported.  The <a>undo</a>/<a>redo</a>
+** stack is cleared by the <a>commit</a> and <a>checkout</a> commands.
 */
 void redo_cmd(void){
   int undo_available;
   db_must_be_within_tree();
   db_begin_transaction();

Index: src/update.c
==================================================================
--- src/update.c
+++ src/update.c
@@ -348,11 +348,11 @@
 ** appears.
 **
 ** Revert all files if no file name is provided.
 **
 ** If a file is reverted accidently, it can be restored using
-** the "fossil undo" command.
+** the <a>undo</a> command.
 */
 void revert_cmd(void){
   const char *zFile;
   const char *zRevision;
   Blob record;

Index: src/user.c
==================================================================
--- src/user.c
+++ src/user.c
@@ -171,10 +171,16 @@
 **        to exist in the database.
 **
 **    %fossil user password USERNAME ?PASSWORD?
 **
 **        Change the web access password for a user.
+**        Users can change their own password on the
+**        <a href="login">Login/Logout</a> gui page.
+**
+** Administrators can also use the gui: 
+**  *  Go to page <a href="setup">Admin</a>
+**  ** and click <a href="setup_ulist">Users</a>
 */
 void user_cmd(void){
   int n;
   db_find_and_open_repository(1);
   if( g.argc<3 ){

Index: src/wiki.c
==================================================================
--- src/wiki.c
+++ src/wiki.c
@@ -164,11 +164,11 @@
     @ <li> <form method="get" action="%s(g.zBaseURL)/wfind"><div>
     @     Search wiki titles: <input type="text" name="title"/>
     @  &nbsp; <input type="submit" /></div></form>
     @ </li>
     @ </ul>
-    style_footer();
+    style_footer_cmdref("wiki",0);
     return;
   }
   if( check_name(zPageName) ) return;
   isSandbox = is_sandbox(zPageName);
   if( isSandbox ){
@@ -252,10 +252,14 @@
   db_finalize(&q);
  
   if( !isSandbox ){
     manifest_clear(&m);
   }
+  /* don'tshow the help cross reference, because we are rendering
+  ** the wiki conten!
+  ** style_footer_cmdref("wiki","export");
+  */
   style_footer();
 }
 
 /*
 ** WEBPAGE: wikiedit
@@ -380,11 +384,11 @@
   @ <input type="submit" name="cancel" value="Cancel" />
   @ </div></form>
   if( !isSandbox ){
     manifest_clear(&m);
   }
-  style_footer();
+  style_footer_cmdref("wiki"," / <a href=\"wiki_rules\">wiki format</a>");
 }
 
 /*
 ** WEBPAGE: wikinew
 ** URL /wikinew
@@ -413,11 +417,11 @@
   @ </p></form>
   if( zName[0] ){
     @ <p><span class="wikiError">
     @ "%h(zName)" is not a valid wiki page name!</span></p>
   }
-  style_footer();
+  style_footer_cmdref("wiki","create");
 }
 
 
 /*
 ** Append the wiki text for an remark to the end of the given BLOB.
@@ -599,11 +603,11 @@
   db_prepare(&q, zSQL);
   free(zSQL);
   zWikiPageName = zPageName;
   www_print_timeline(&q, TIMELINE_ARTID, wiki_history_extra);
   db_finalize(&q);
-  style_footer();
+  style_footer_cmdref("timeline",0);
 }
 
 /*
 ** WEBPAGE: wdiff
 ** URL: /whistory?name=PAGENAME&a=RID1&b=RID2
@@ -693,11 +697,11 @@
       @ <li><a href="%s(g.zTop)/wiki?name=%T(zName)"><s>%h(zName)</s></a></li>
     }
   }
   db_finalize(&q);
   @ </ul>
-  style_footer();
+  style_footer_cmdref("wiki","list");
 }
 
 /*
 ** WEBPAGE: wfind
 **
@@ -899,10 +903,13 @@
 **
 **     %fossil wiki diff ?ARTIFACT? ?-f infile[=stdin]? EntryName
 **
 **        Diffs the local copy of a page with a given version (defaulting
 **        to the head version).
+**
+** The wiki format is explained on the <a href="wiki">Wiki</a> subpage
+** <a href="wiki_rules">Formatting rules</a>.
 */
 void wiki_cmd(void){
   int n;
   db_find_and_open_repository(1);
   if( g.argc<3 ){

Index: src/winhttp.c
==================================================================
--- src/winhttp.c
+++ src/winhttp.c
@@ -89,10 +89,13 @@
     if( z ){
       wanted = find_content_length(zHdr) + (&z[4]-zHdr) - amt;
       break;
     }
   }
+  if( g.fHttpTrace ){
+    fprintf(stderr,"HTTPTRACE(%p): got header '%s'\n",pAppData,zHdr);
+  }
   if( amt>=sizeof(zHdr) ) goto end_request;
   out = fopen(zRequestFName, "wb");
   if( out==0 ) goto end_request;
   fwrite(zHdr, 1, amt, out);
   while( wanted>0 ){
@@ -109,16 +112,26 @@
   out = 0;
   sprintf(zCmd, "\"%s\" http \"%s\" %s %s %s%s",
     _pgmptr, g.zRepositoryName, zRequestFName, zReplyFName, 
     inet_ntoa(p->addr.sin_addr), p->zNotFound
   );
+  if( g.fHttpTrace ){
+    fprintf(stderr,"HTTPTRACE(%p): calling '%s'\n",pAppData,zCmd);
+  }
   portable_system(zCmd);
   in = fopen(zReplyFName, "rb");
   if( in ){
+    if( g.fHttpTrace ){
+      fprintf(stderr,"HTTPTRACE(%p): read reply '%s'\n",pAppData,zReplyFName);
+    }
     while( (got = fread(zHdr, 1, sizeof(zHdr), in))>0 ){
       send(p->s, zHdr, got, 0);
     }
+  }else{
+    if( g.fHttpTrace ){
+      fprintf(stderr,"HTTPTRACE(%p): no reply '%s'\n",pAppData,zReplyFName);
+    }
   }
 
 end_request:
   if( out ) fclose(out);
   if( in ) fclose(in);
@@ -212,12 +225,15 @@
     p = fossil_malloc( sizeof(*p) );
     p->id = ++idCnt;
     p->s = client;
     p->addr = client_addr;
     p->zNotFound = zNotFoundOption;
+    if( g.fHttpTrace ){
+      fprintf(stderr,"HTTPTRACE(%p): start new request thread\n",p);
+    }
     _beginthread(win32_process_one_http_request, 0, (void*)p);
   }
   closesocket(s);
   WSACleanup();
 }
 
 #endif /* _WIN32  -- This code is for win32 only */

Index: src/zip.c
==================================================================
--- src/zip.c
+++ src/zip.c
@@ -376,15 +376,18 @@
 /*
 ** COMMAND: zip
 **
 ** Usage: %fossil zip VERSION OUTPUTFILE [--name DIRECTORYNAME]
 **
-** Generate a ZIP archive for a specified version.  If the --name option is
-** used, it argument becomes the name of the top-level directory in the
+** Generate a ZIP archive for a specified version.  If the --name option
+** is used, it argument becomes the name of the top-level directory in the
 ** resulting ZIP archive.  If --name is omitted, the top-level directory
 ** named is derived from the project name, the check-in date and time, and
 ** the artifact ID of the check-in.
+**
+** The zip download can also be done through the Check-in detail view,
+** accessible from the <a href="timeline">timeline</a> page.
 */
 void baseline_zip_cmd(void){
   int rid;
   Blob zip;
   const char *zName;

Index: win/Makefile.PellesCGMake
==================================================================
--- win/Makefile.PellesCGMake
+++ win/Makefile.PellesCGMake
@@ -57,12 +57,13 @@
 LINKFLAGS=-subsystem:console -machine:$(TARGETMACHINE_LN) /LIBPATH:$(PellesCDir)\lib\win$(TARGETEXTEND) /LIBPATH:$(PellesCDir)\lib kernel32.lib advapi32.lib delayimp$(TARGETEXTEND).lib Wsock32.lib Crtmt$(TARGETEXTEND).lib
 
 # define standard C-compiler and flags, used to compile
 # the fossil binary. Some special definitions follow for
 # special files follow
+# Pelles C doesn't support _pgmptr in it's includes/libs, so map it to argv[0]
 CC=$(PellesCDir)\bin\pocc.exe
-DEFINES=-DFOSSIL_I18N=0 -Dstrncasecmp=memicmp -Dstrcasecmp=stricmp 
+DEFINES=-DFOSSIL_I18N=0 -Dstrncasecmp=memicmp -Dstrcasecmp=stricmp -D_pgmptr=g.argv[0]
 CCFLAGS=-T$(TARGETMACHINE_CC)-coff -Ot -W2 -Gd -Go -Ze -MT $(DEFINES)
 INCLUDE=/I $(PellesCDir)\Include\Win /I $(PellesCDir)\Include /I $(ZLIBSRCDIR) /I $(SRCDIR)
 
 # define commands for building the windows resource files
 RESOURCE=fossil.res

Index: www/index.wiki
==================================================================
--- www/index.wiki
+++ www/index.wiki
@@ -123,11 +123,12 @@
   *  [./stats.wiki | Performance statistics] taken from real-world projects
      hosted on fossil.
   *  How to [./shunning.wiki | delete content] from a fossil repository.
   *  How Fossil does [./password.wiki | password management].
   *  Some (unfinished but expanding) extended
-      [./reference.wiki | reference documentation] for the fossil command line.
+      [./reference.wiki | reference documentation] for the fossil
+       [/help|command line].
   *  Documentation on the
      [http://www.sqliteconcepts.org/THManual.pdf | TH1 Script Language] used
      to configure the ticketing subsystem.
   *  A free hosting server for Fossil repositories is available at
      [http://chiselapp.com/].

Index: www/reference.wiki
==================================================================
--- www/reference.wiki
+++ www/reference.wiki
@@ -50,653 +50,65 @@
 <br /><br /> <br />
   <b>You should</b> probably start interacting with fossil at the command
   line by asking it what it can
   do:&nbsp;&nbsp;&nbsp;&nbsp;<a name="tof">&#710;</a>
 
-  <code>$ fossil help</code><nowiki><pre>
+  <code>$ fossil [/help|help]</code>
+
+  This will generate output in the form:<pre>
 Usage: fossil help COMMAND.
 Available COMMANDs:</pre><table width="80%"
                           style="font-family: fixed, courier, monospace;">
   <tr>
-    <td><a href="#add">add</a>*</td>
-    <td><a href="#checkout">co</a>*</td>
-    <td><a href="#http">http</a></td>
-    <td><a href="#rebuild">rebuild</a></td>
-    <td><a href="#sync">sync</a>*</td>
+    <td width="20%">[/help?cmd=add|add]</td>
+    <td>[/help?cmd=co|co]</td>
+    <td width="20%">[/help?cmd=info|info]</td>
+    <td width="20%">[/help?cmd=remote-url|remote-url]</td>
+    <td width="20%">[/help?cmd=ticket|ticket]</td>
   </tr>
   <tr>
-    <td><a href="#all">all</a>*</td>
-    <td><a href="#commit">commit</a></td>
-    <td><a href="#info">info</a></td>
-    <td><a href="#reconstruct">reconstruct</a></td>
-    <td><a href="#tag">tag</a></td>
+    <td>..</td>
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
+    <td>&nbsp;</td>
   </tr>
-  <tr>
-    <td><a href="#branch">branch</a></td>
-    <td><a href="#configuration">configuration</a></td>
-    <td><a href="#leaves">leaves</a></td>
-    <td><a href="#redo">redo</a></td>
-    <td><a href="#timeline">timeline</a></td>
-  </tr>
-  <tr>
-    <td><a href="#cgi">cgi</a>*</td>
-    <td><a href="#deconstruct">deconstruct</a></td>
-    <td><a href="#ls">ls</a>*</td>
-    <td><a href="#mv">rename</a>*</td>
-    <td><a href="#server">ui</a></td>
-  </tr>
-  <tr>
-    <td><a href="#changes">changes</a>*</td>
-    <td><a href="#rm">del</a>*</td>
-    <td><a href="#merge">merge</a></td>
-    <td><a href="#revert">revert</a></td>
-    <td><a href="#undo">undo</a></td>
-  </tr>
-  <tr>
-    <td><a href="#checkout">checkout</a>*</td>
-    <td><a href="#descendants">descendants</a></td>
-    <td><a href="#mv">mv</a>*</td>
-    <td><a href="#rm">rm</a>*</td>
-    <td><a href="#setting">unset</a></td>
-  </tr>
-  <tr>
-    <td><a href="#commit">ci</a></td>
-    <td><a href="#diff">diff</a></td>
-    <td><a href="#new">new</a>*</td>
-    <td><a href="#rstats">rstats</a></td>
-    <td><a href="#update">update</a>*</td>
-  </tr>
-  <tr>
-    <td><a href="#clean">clean</a></td>
-    <td><a href="#extra">extra</a>*</td>
-    <td><a href="#open">open</a></td>
-    <td><a href="#server">server</a></td>
-    <td><a href="#user">user</a></td>
-  </tr>
-  <tr>
-    <td><a href="#clone">clone</a></td>
-    <td><a href="#diff">gdiff</a></td>
-    <td><a href="#pull">pull</a></td>
-    <td><a href="#setting">settings</a></td>
-    <td><a href="#version">version</a>*</td>
-  </tr>
-  <tr>
-    <td><a href="#close">close</a></td>
-    <td><a href="#help">help</a></td>
-    <td><a href="#push">push</a></td>
-    <td><a href="#status">status</a>*</td>
-    <td><a href="#wiki">wiki</a></td>
-  </tr>
-</table><nowiki><pre>
+</table><pre>
 This is fossil version [a89b436bc9] 2009-02-11 05:00:02 UTC
 </pre>
-<b>What follows</b> is a survey of what you get if you type<code>
-fossil&nbsp;help&nbsp;<i>command</i> </code>for all of the
-commands listed above.  There are links to individual pages for each
-of them; pages with content (commands marked with a '*' are done) go
-into the reason for a command in a bit more depth than the program help.
-<pre>
-<hr><a href="#tof">&#710;</a>
-    <a name="add">Usage: </a><code><a href="cmd_add.wiki">fossil add</a></code> FILE...
-    Make arrangements to add one or more files to the current checkout
-    at the next commit.
+
+
+  This information can also viewed in the fossil gui using the url
+  PROJEKT-BASEURL/[/help|help]. You'll see a web page, listing all
+  available commands in the current fossil build.
+
+  Each listed command is a link to a web page, displaying the detailed
+  command line help for the appropriate command.
+
+  There are links to individual wiki pages for each command. These pages
+  are named <kbd>cmd_<i>COMMAND-NAME</i></kbd>. These pages are not
+  defined for all commands - it's a work in progress. Existing pages give
+  more detailed description of the corresponding command.
 
-<hr><a href="#tof">&#710;</a>
-    <a name="all">Usage: </a><code><a href="cmd_all.wiki">fossil all</a></code> (list|pull|push|rebuild|sync)
-    The ~/.fossil file records the location of all repositories for a
-    user.  This command performs certain operations on all repositories
-    that can be useful before or after a period of disconnection operation.
+  <h3>Caveats</h3>
+  This reference is complete concerning the [/help|list] of commands
+  and the detailed command line reference. It's always in sync with the
+  used fossil build, because it uses the original command help, which is
+  compiled into the binary.
 
-    On Win32 systems, this file is located in %LOCALAPPDATA%, %APDDATA%
-    or %HOMEPATH% and is named _fossil.
-
-    Available operations are:
-
-    list       Display the location of all repositories
-
-    pull       Run a "pull" operation on all repositories
-
-    push       Run a "push" on all repositories
-
-    rebuild    Rebuild on all repositories
-
-    sync       Run a "sync" on all repositories
+  Additional, in-depth information in the wiki part is not available for
+  all commands.
+  
+  There are several bits of <b>fossil</b> that are not addressed
+  in the help for commands (special wiki directories, special users, etc.)
+  so they are (currently) not addressed here.  Clarity and brevity may be
+  sacrificed for expediency at the authors indiscretion.  All spelling and
+  grammatical mistakes are somebody elses fault.<code>  void * </code>
+  prohibited where<code> __C_PLUS_PLUS__ </code>. Title and taxes extra.
+  Not valid in Hooptigonia.
 
-    Respositories are automatically added to the set of known repositories
-    when one of the following commands against the repository: clone, info,
-    pull, push, or sync
-
-<hr><a href="#tof">&#710;</a>
-    <a name="branch">Usage: </a><code><a href="cmd_branch.wiki">fossil branch</a></code> SUBCOMMAND ... ?-R|--repository FILE?
-
-Run various subcommands on the branches of the open repository or
-of the repository identified by the -R or --repository option.
-
-   fossil branch new BRANCH-NAME BASIS ?-bgcolor COLOR?
-
-       Create a new branch BRANCH-NAME off of check-in BASIS.
-       You can optionally give the branch a default color.
-
-   fossil branch list
-
-       List all branches
-
-<hr><a href="#tof">&#710;</a>
-    <a name="cgi">Usage: </a><a href="cmd_cgi.wiki">fossil cgi</a> SCRIPT
-    The SCRIPT argument is the name of a file that is the CGI script
-    that is being run.  The command name, "cgi", may be omitted if
-    the GATEWAY_INTERFACE environment variable is set to "CGI" (which
-    should always be the case for CGI scripts run by a webserver.)  The
-    SCRIPT file should look something like this:
-
-    #!/usr/bin/fossil
-    repository: /home/somebody/project.db
-
-    The second line defines the name of the repository.  After locating
-    the repository, fossil will generate a webpage on stdout based on
-    the values of standard CGI environment variables.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="changes">Usage: </a><a href="cmd_changes.wiki">fossil changes</a>
-    Report on the edit status of all files in the current checkout.
-    See also the "status" and "extra" commands.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="checkout">Usage: </a><a href="cmd_checkout.wiki">fossil checkout</a> VERSION ?-f|--force?
-    Check out a version specified on the command-line.  This command
-    will not overwrite edited files in the current checkout unless
-    the --force option appears on the command-line.
-
-    See also the "update" command.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="commit">Usage: </a><a href="cmd_commit.wiki">fossil commit</a> ?-m COMMENT? ?--nosign? ?FILE...?    fossil ci  ...  (as above)
-
-    Create a new version containing all of the changes in the current
-    checkout.  You will be prompted to enter a check-in comment unless
-    the "-m" option is used to specify a comment line.  You will be
-    prompted for your GPG passphrase in order to sign the new manifest
-    unless the "--nosign" option is used.  All files that have
-    changed will be committed unless some subset of files is specified
-    on the command line.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="clean">Usage: </a><a href="cmd_clean.wiki">fossil clean</a> ?-all?
-    Delete all "extra" files in the source tree.  "Extra" files are
-    files that are not officially part of the checkout.  See also
-    the "extra" command. This operation cannot be undone.
-
-    You will be prompted before removing each file. If you are
-    sure you wish to remove all "extra" files you can specify the
-    optional -all flag.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="clone">Usage: </a><a href="cmd_clone.wiki">fossil clone</a> URL FILENAME
-    Make a clone of a repository specified by URL in the local
-    file named FILENAME.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="close">Usage: </a><a href="cmd_close.wiki">fossil close</a> ?-f|--force?
-    The opposite of "open".  Close the current database connection.
-    Require a -f or --force flag if there are unsaved changed in the
-    current check-out.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="configuration">Usage: </a><a href="cmd_configure.wiki">fossil configuration</a> METHOD ...
-    Where METHOD is one of: export import merge pull push reset.  All methods
-    accept the -R or --repository option to specific a repository.
-
-    fossil configuration export AREA FILENAME
-
-    Write to FILENAME exported configuraton information for AREA.
-    AREA can be one of:  all ticket skin project
-
-    fossil configuration import FILENAME
-
-    Read a configuration from FILENAME, overwriting the current
-    configuration.
-
-    fossil configuration merge FILENAME
-
-    Read a configuration from FILENAME and merge its values into
-    the current configuration.  Existing values take priority over
-    values read from FILENAME.
-
-    fossil configuration pull AREA ?URL?
-
-    Pull and install the configuration from a different server
-    identified by URL.  If no URL is specified, then the default
-    server is used.
-    fossil configuration push AREA ?URL?
-
-    Push the local configuration into the remote server identified
-    by URL.  Admin privilege is required on the remote server for
-    this to work.
-
-    fossil configuration reset AREA
-
-    Restore the configuration to the default.  AREA as above.
-
-    WARNING: Do not import, merge, or pull configurations from an untrusted
-    source.  The inbound configuration is not checked for safety and can
-    introduce security vulnerabilities.
-
-<hr><a href="#tof">&#710;</a>
-    COMMAND: deconstruct
-    <a name="deconstruct">Usage: </a><a href="cmd_deconstruct.wiki">fossil deconstruct</a> ?-R|--repository REPOSITORY? DESTINATION
-    Populates the indicated DESTINATION directory with copies of all
-    artifcats contained within the repository.  Artifacts are named AA/bbbbb
-    where AA is the first 2 characters of the artifact ID and bbbbb is the
-    remaining 38 characters.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="rm">Usage: </a><a href="cmd_rm.wiki">fossil rm</a> FILE...    or: fossil del FILE...
-    Remove one or more files from the tree.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="descendants">Usage: </a><a href="cmd_descendants.wiki">fossil descendants</a> ?CHECKIN-ID?
-    Find all leaf descendants of the check-in specified or if the argument
-    is omitted, of the check-in currently checked out.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="diff">Usage: </a><a href="cmd_diff.wiki">fossil diff</a>|gdiff ?-i? ?-r REVISION? FILE...
-    Show the difference between the current version of a file (as it
-    exists on disk) and that same file as it was checked out.
-
-    diff will show a textual diff while gdiff will attempt to run a
-    graphical diff command that you have setup. If the choosen command
-    is not yet configured, the internal textual diff command will be
-    used.
-
-    If -i is supplied for either diff or gdiff, the internal textual
-    diff command will be executed.
-
-    Here are a few external diff command settings, for example:
-
-    fossil setting diff-command diff
-
-    fossil setting gdiff-command tkdiff
-    fossil setting gdiff-command eskill22
-    fossil setting gdiff-command tortoisemerge
-    fossil setting gdiff-command meld
-    fossil setting gdiff-command xxdiff
-    fossil setting gdiff-command kdiff3
-
-<hr><a href="#tof">&#710;</a>
-    <a name="extra">Usage: </a><a href="cmd_extra.wiki">fossil extra</a>
-    Print a list of all files in the source tree that are not part of
-    the current checkout.  See also the "clean" command.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="help">Usage: </a><a href="cmd_help.wiki">fossil help</a> COMMAND
-    Display information on how to use COMMAND
-
-<hr><a href="#tof">&#710;</a>
-    <a name="http">Usage: </a><a href="cmd_http.wiki">fossil http</a> REPOSITORY
-    Handle a single HTTP request appearing on stdin.  The resulting webpage
-    is delivered on stdout.  This method is used to launch an HTTP request
-    handler from inetd, for example.  The argument is the name of the    repository.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="info">Usage: </a><a href="cmd_info.wiki">fossil info</a> ?ARTIFACT-ID|FILENAME?
-    With no arguments, provide information about the current tree.
-    If an argument is specified, provide information about the object
-    in the respository of the current tree that the argument refers
-    to.  Or if the argument is the name of a repository, show
-    information about that repository.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="leaves">Usage: </a><a href="cmd_leaves.wiki">fossil leaves</a>
-    Find leaves of all branches.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="ls">Usage: </a><a href="cmd_ls.wiki">fossil ls</a>
-    Show the names of all files in the current checkout
-
-<hr><a href="#tof">&#710;</a>
-    <a name="merge">Usage: </a><a href="cmd_merge.wiki">fossil merge</a> VERSION
-    The argument is a version that should be merged into the current
-    checkout.
-    Only file content is merged.  The result continues to use the
-    file and directory names from the current check-out even if those
-    names might have been changed in the branch being merged in.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="mv">Usage: </a><a href="cmd_mv.wiki">fossil mv|rename</a> OLDNAME NEWNAME       or: fossil mv|rename OLDNAME... DIR
-
-    Move or rename one or more files within the tree
-
-    This command does not rename the files on disk.  All this command does is
-    record the fact that filenames have changed so that appropriate notations
-    can be made at the next commit/checkin.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="new">Usage: </a><a href="cmd_new.wiki">fossil new</a> FILENAME
-
-    Create a repository for a new project in the file named FILENAME.
-    This command is distinct from "clone".  The "clone" command makes
-    a copy of an existing project.  This command starts a new project.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="open">Usage: </a><a href="cmd_open.wiki">fossil open</a> FILENAME
-    Open a connection to the local repository in FILENAME.  A checkout
-    for the repository is created with its root at the working directory.
-    See also the "close" command.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="rstats">Usage: </a><a href="cmd_rstats.wiki">fossil rstats</a>
-
-    Deliver a report of the repository statistics for the
-    current checkout.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="pull">Usage: </a><a href="cmd_pull.wiki">fossil pull</a> ?URL? ?-R|--respository REPOSITORY?
-    Pull changes in a remote repository into the local repository.
-    The repository is identified by the -R or --repository option.
-    If there is no such option then the open repository is used.
-    The URL of the remote server is specified on the command line
-    If no URL is specified then the URL used by the most recent
-    "pull", "push", or "sync" command is used.
-
-    The URL is of the following form:
-
-    http://USER@HOST:PORT/PATH
-
-    The "USER@" and ":PORT" substrings are optional.
-    The "USER" substring specifies the login user.  You will be
-    prompted for the password on the command-line.  The PORT
-    specifies the TCP port of the server.  The default port is
-    80.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="push">Usage: </a><a href="cmd_push.wiki">fossil push</a> ?URL? ?-R|--repository REPOSITORY?
-    Push changes in the local repository over into a remote repository.
-    See the "pull" command for additional information.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="rebuild">Usage: </a><a href="cmd_rebuild.wiki">fossil rebuild</a> REPOSITORY
-    Reconstruct the named repository database from the core
-    records.  Run this command after updating the fossil
-    executable in a way that changes the database schema.
-
-<hr><a href="#tof">&#710;</a>
-    COMMAND: reconstruct
-    <a name="reconstruct">Usage: </a><a href="cmd_reconstruct.wiki">fossil reconstruct</a> REPOSITORY ORIGIN
-    Creates the REPOSITORY and populates it with the artifacts in the
-    indicated ORIGIN directory.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="redo">Usage: </a><a href="cmd_redo.wiki">fossil redo</a> ?FILENAME...?
-    Redo the an update or merge operation that has been undone by the
-    undo command.  If FILENAME is specified then restore the changes
-    associated with the named file(s) but otherwise leave the update
-    or merge undone.
-
-    A single level of undo/redo is supported.  The undo/redo stack
-    is cleared by the commit and checkout commands.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="revert">Usage: </a><a href="cmd_revert.wiki">fossil revert</a> ?--yes? ?-r CHECKIN? FILE
-    Revert to the current repository version of FILE, or to
-    the version associated with check-in CHECKIN if the -r flag
-    appears.  This command will confirm your operation unless the
-    file is missing or the --yes option is used.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="server">Usage: </a><a href="cmd_server.wiki">fossil server</a> ?-P|--port TCPPORT? ?REPOSITORY?    Or: fossil ui ?-P|--port TCPPORT? ?REPOSITORY?
-
-    Open a socket and begin listening and responding to HTTP requests on
-    TCP port 8080, or on any other TCP port defined by the -P or
-    --port option.  The optional argument is the name of the repository.
-    The repository argument may be omitted if the working directory is
-    within an open checkout.
-
-    The "ui" command automatically starts a web browser after initializing
-    the web server.
-
-<hr><a href="#tof">&#710;</a>
-    COMMAND: settings
-    COMMAND: unset
-    <a name="settings">Usage: </a><a href="cmd_setting.wiki">fossil settings</a> ?PROPERTY? ?VALUE? ?-global?
-    fossil unset PROPERTY ?-global?
-
-    The "settings" command with no arguments lists all properties and their
-    values.  With just a property name it shows the value of that property.
-    With a value argument it changes the property for the current repository.
-
-    The "unset" command clears a property setting.
-
-       autosync         If enabled, automatically pull prior to
-		        commit or update and automatically push
-		        after commit or tag or branch creation.
-
-       diff-command     External command to run when performing a diff.
-		        If undefined, the internal text diff will be used.
-
-       editor           Text editor command used for check-in comments.
-
-       http-port        The TCP/IP port number to use by the "server"
-		        and "ui" commands.  Default: 8080
-
-       gdiff-command    External command to run when performing a graphical
-		        diff. If undefined, text diff will be used.
-
-       localauth        If enabled, require that HTTP connections from
-		        127.0.0.1 be authenticated by password.  If
-		        false, all HTTP requests from localhost have
-		        unrestricted access to the repository.
-
-       clearsign        When enabled (the default), fossil will attempt to
-		        sign all commits with gpg.  When disabled, commits will
-		        be unsigned.
-
-       pgp-command      Command used to clear-sign manifests at check-in.
-		        The default is "gpg --clearsign -o ".
-
-       mtime-changes    Use file modification times (mtimes) to detect when
-		        files have been modified.
-
-       proxy            URL of the HTTP proxy.  If undefined or "on" then
-		        the "http_proxy" environment variable is consulted.
-		        If the http_proxy environment variable is undefined
-		        then a direct HTTP connection is used.
-
-       web-browser      A shell command used to launch your preferred
-		        web browser when given a URL as an argument.
-		        Defaults to "start" on windows, "open" on Mac,
-		        and "firefox" on Unix.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="status">Usage: </a><a href="cmd_status.wiki">fossil status</a>
-    Report on the status of the current checkout.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="sync">Usage: </a><a href="cmd_sync.wiki">fossil sync</a> ?URL? ?-R|--repository REPOSITORY?
-    Synchronize the local repository with a remote repository.  This is
-    the equivalent of running both "push" and "pull" at the same time.
-    See the "pull" command for additional information.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="tag">Usage: </a><a href="cmd_tag.wiki">fossil tag</a> SUBCOMMAND ...
-    Run various subcommands to control tags and properties
-
-    fossil tag add ?--raw? TAGNAME CHECK-IN ?VALUE?
-
-    Add a new tag or property to CHECK-IN. The tag will
-    be usable instead of a CHECK-IN in commands such as
-    update and merge.
-
-    fossil tag branch ?--raw? ?--nofork? TAGNAME CHECK-IN ?VALUE?
-
-    A fork will be created so that the new checkin
-    is a sibling of CHECK-IN and identical to it except
-    for a generated comment. Then the new tag will
-    be added to the new checkin and propagated to
-    all direct children.  Additionally all symbolic
-    tags of that checkin inherited from CHECK-IN will
-    be cancelled.
-
-    However, if the option --nofork is given, no
-    fork will be created and the tag/property will be
-    added to CHECK-IN directly. No tags will be canceled.
-
-    fossil tag cancel ?--raw? TAGNAME CHECK-IN
-
-    Remove the tag TAGNAME from CHECK-IN, and also remove
-    the propagation of the tag to any descendants.
-
-    fossil tag find ?--raw? TAGNAME
-
-    List all check-ins that use TAGNAME
-
-    fossil tag list ?--raw? ?CHECK-IN?
-
-    List all tags, or if CHECK-IN is supplied, list
-    all tags and their values for CHECK-IN.
-
-    The option --raw allows the manipulation of all types of
-    tags used for various internal purposes in fossil. You
-    should not use this option to make changes unless you are
-    sure what you are doing.
-
-    If you need to use a tagname that might be confused with
-    a hexadecimal check-in or artifact ID, you can explicitly
-    disambiguate it by prefixing it with "tag:". For instance:
-
-    fossil update decaf
-
-    will be taken as an artifact or check-in ID and fossil will
-    probably complain that no such revision was found. However
-
-    fossil update tag:decaf
-
-    will assume that "decaf" is a tag/branch name.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="timeline">Usage: </a><a href="cmd_timeline.wiki">fossil timeline</a> ?WHEN? ?CHECK-IN|DATETIME? ?-n|--count N?
-    Print a summary of activity going backwards in date and time
-    specified or from the current date and time if no arguments
-    are given.  Show as many as N (default 20) check-ins.  The
-    WHEN argument can be any unique abbreviation of one of these
-    keywords:
-
-    before
-    after
-    descendants | children
-    ancestors | parents
-
-    The CHECK-IN can be any unique prefix of 4 characters or more.
-    The DATETIME should be in the ISO8601 format.  For
-    examples: "2007-08-18 07:21:21".  You can also say "current"
-    for the current version or "now" for the current time.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="undo">Usage: </a><a href="cmd_undo.wiki">fossil undo</a> ?FILENAME...?
-    Undo the most recent update or merge operation.  If FILENAME is
-    specified then restore the content of the named file(s) but otherwise
-    leave the update or merge in effect.
-
-    A single level of undo/redo is supported.  The undo/redo stack
-    is cleared by the commit and checkout commands.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="update">Usage: </a><a href="cmd_update.wiki">fossil update</a> ?VERSION? ?--latest?
-    The optional argument is a version that should become the current
-    version.  If the argument is omitted, then use the leaf of the
-    tree that begins with the current version, if there is only a    single leaf.  If there are a multiple leaves, the latest is used
-    if the --latest flag is present.
-
-    This command is different from the "checkout" in that edits are
-    not overwritten.  Edits are merged into the new version.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="user">Usage: </a><a href="cmd_user.wiki">fossil user</a> SUBCOMMAND ...  ?-R|--repository FILE?
-    Run various subcommands on users of the open repository or of
-    the repository identified by the -R or --repository option.
-
-    fossil user capabilities USERNAME ?STRING?
-
-    Query or set the capabilities for user USERNAME
-
-    fossil user default ?USERNAME?
-
-    Query or set the default user.  The default user is the
-    user for command-line interaction.
-
-    fossil user list
-
-    List all users known to the repository
-
-    fossil user new ?USERNAME?
-
-    Create a new user in the repository.  Users can never be
-    deleted.  They can be denied all access but they must continue
-    to exist in the database.
-
-    fossil user password USERNAME
-
-    Change the web access password for a user.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="version">Usage: </a><a href="cmd_version.wiki">fossil version</a>
-    Print the source code version number for the fossil executable.
-
-<hr><a href="#tof">&#710;</a>
-    <a name="wiki">Usage: </a><a href="cmd_wiki.wiki">fossil wiki</a> (export|create|commit|list) WikiName
-    Run various subcommands to fetch wiki entries.
-
-    fossil wiki export PAGENAME ?FILE?
-
-    Sends the latest version of the PAGENAME wiki
-    entry to the given file or standard output.
-
-    fossil wiki commit PAGENAME ?FILE?
-
-    Commit changes to a wiki page from FILE or from standard.
-
-    fossil wiki create PAGENAME ?FILE?
-
-    Create a new wiki page with initial content taken from
-    FILE or from standard input.
-
-    fossil wiki list
-
-    Lists all wiki entries, one per line, ordered
-    case-insentively by name.
-
-    TODOs:
-
-    fossil wiki export ?-u ARTIFACT? WikiName ?FILE?
-
-    Outputs the selected version of WikiName.
-
-    fossil wiki delete ?-m MESSAGE? WikiName
-
-    The same as deleting a file entry, but i don't know if fossil
-    supports a commit message for Wiki entries.
-
-    fossil wiki ?-u? ?-d? ?-s=[|]? list
-
-    Lists the artifact ID and/or Date of last change along with
-    each entry name, delimited by the -s char.
-
-    fossil wiki diff ?ARTIFACT? ?-f infile[=stdin]? EntryName
-
-    Diffs the local copy of a page with a given version (defaulting
-    to the head version).
-
-  </pre></nowiki>
-
-  <hr><a href="#tof">&#710;</a>
-
-    <h3>Caveats</h3>
-    This is not actually a reference, it's the start of a reference.
-    There are wikilinks to uncreated pages for the commands.  This was
-    created by running the fossil help for each command listed by running
-    fossil help...  Duplicate commands are only listed once (I
-    <i>think</i>).  There are several bits of <b>fossil</b> that are not addressed
-    in the help for commands (special wiki directories, special users, etc.)
-    so they are (currently) not addressed here.  Clarity and brevity may be
-    sacrificed for expediency at the authors indiscretion.  All spelling and
-    grammatical mistakes are somebody elses fault.<code>  void * </code>
-    prohibited where<code> __C_PLUS_PLUS__ </code>. Title and taxes extra.
-    Not valid in Hooptigonia.
+  <h3>Testing fossil</h3>
+  There are several [/help?cmd=test|test commands] to test the
+  internals of fossil. These commands are listed on a special web page
+  [/help?cmd=test|help?cmd=test]. This page is the counter part of
+  <kbd><a href="/help?cmd=test-commands">fossil test-commands</a></kbd>.
+