Fossil

Hex Artifact Content
Login

Artifact a44a67eef8040170d59cb7ebac6a7bb83952aace790aaed6052cbedc928d15d0:


0000: 54 48 31 20 53 63 72 69 70 74 73 0a 3d 3d 3d 3d  TH1 Scripts.====
0010: 3d 3d 3d 3d 3d 3d 3d 0a 0a 54 48 31 20 69 73 20  =======..TH1 is 
0020: 61 20 76 65 72 79 20 73 6d 61 6c 6c 20 73 63 72  a very small scr
0030: 69 70 74 69 6e 67 20 6c 61 6e 67 75 61 67 65 20  ipting language 
0040: 75 73 65 64 20 74 6f 20 68 65 6c 70 20 67 65 6e  used to help gen
0050: 65 72 61 74 65 20 77 65 62 2d 70 61 67 65 0a 63  erate web-page.c
0060: 6f 6e 74 65 6e 74 20 69 6e 20 46 6f 73 73 69 6c  ontent in Fossil
0070: 2e 0a 0a 4f 72 69 67 69 6e 73 0a 2d 2d 2d 2d 2d  ...Origins.-----
0080: 2d 2d 0a 0a 54 48 31 20 62 65 67 61 6e 20 61 73  --..TH1 began as
0090: 20 61 20 6d 69 6e 69 6d 61 6c 69 73 74 20 72 65   a minimalist re
00a0: 2d 69 6d 70 6c 65 6d 65 6e 74 61 74 69 6f 6e 20  -implementation 
00b0: 6f 66 20 74 68 65 20 54 63 6c 20 73 63 72 69 70  of the Tcl scrip
00c0: 74 69 6e 67 20 6c 61 6e 67 75 61 67 65 2e 0a 54  ting language..T
00d0: 68 65 72 65 20 77 61 73 20 61 20 6e 65 65 64 20  here was a need 
00e0: 74 6f 20 74 65 73 74 20 74 68 65 20 53 51 4c 69  to test the SQLi
00f0: 74 65 20 6c 69 62 72 61 72 79 20 6f 6e 20 53 79  te library on Sy
0100: 6d 62 69 61 6e 20 70 68 6f 6e 65 73 2c 20 62 75  mbian phones, bu
0110: 74 20 61 74 20 74 68 61 74 0a 74 69 6d 65 20 61  t at that.time a
0120: 6c 6c 20 6f 66 20 74 68 65 20 74 65 73 74 20 63  ll of the test c
0130: 61 73 65 73 20 66 6f 72 20 53 51 4c 69 74 65 20  ases for SQLite 
0140: 77 65 72 65 20 77 72 69 74 74 65 6e 20 69 6e 20  were written in 
0150: 54 63 6c 20 61 6e 64 20 54 63 6c 20 63 6f 75 6c  Tcl and Tcl coul
0160: 64 20 6e 6f 74 0a 62 65 20 65 61 73 69 6c 79 20  d not.be easily 
0170: 63 6f 6d 70 69 6c 65 64 20 6f 6e 20 74 68 65 20  compiled on the 
0180: 53 79 6d 62 69 61 6e 4f 53 2e 20 20 53 6f 20 54  SymbianOS.  So T
0190: 48 31 20 77 61 73 20 64 65 76 65 6c 6f 70 65 64  H1 was developed
01a0: 20 61 73 20 61 20 63 75 74 2d 64 6f 77 6e 0a 76   as a cut-down.v
01b0: 65 72 73 69 6f 6e 20 6f 66 20 54 63 6c 20 74 68  ersion of Tcl th
01c0: 61 74 20 77 6f 75 6c 64 20 66 61 63 69 6c 69 74  at would facilit
01d0: 61 74 65 20 72 75 6e 6e 69 6e 67 20 74 68 65 20  ate running the 
01e0: 53 51 4c 69 74 65 20 74 65 73 74 20 73 63 72 69  SQLite test scri
01f0: 70 74 73 20 6f 6e 0a 53 79 6d 62 69 61 6e 4f 53  pts on.SymbianOS
0200: 2e 0a 0a 46 6f 73 73 69 6c 20 77 61 73 20 66 69  ...Fossil was fi
0210: 72 73 74 20 62 65 69 6e 67 20 64 65 73 69 67 6e  rst being design
0220: 65 64 20 61 74 20 61 62 6f 75 74 20 74 68 65 20  ed at about the 
0230: 73 61 6d 65 20 74 69 6d 65 2e 0a 45 61 72 6c 79  same time..Early
0240: 20 70 72 6f 74 6f 74 79 70 65 73 20 6f 66 20 46   prototypes of F
0250: 6f 73 73 69 6c 20 77 65 72 65 20 77 72 69 74 74  ossil were writt
0260: 65 6e 20 69 6e 20 70 75 72 65 20 54 63 6c 2e 20  en in pure Tcl. 
0270: 20 42 75 74 20 61 73 20 74 68 65 20 64 65 76 65   But as the deve
0280: 6c 6f 70 6d 65 6e 74 0a 73 68 69 66 74 65 64 20  lopment.shifted 
0290: 74 6f 77 61 72 64 20 74 68 65 20 75 73 65 20 6f  toward the use o
02a0: 66 20 43 2d 63 6f 64 65 2c 20 74 68 65 20 6e 65  f C-code, the ne
02b0: 65 64 20 61 72 6f 73 65 20 74 6f 20 68 61 76 65  ed arose to have
02c0: 20 61 20 54 63 6c 2d 6c 69 6b 65 0a 73 63 72 69   a Tcl-like.scri
02d0: 70 74 69 6e 67 20 6c 61 6e 67 75 61 67 65 20 74  pting language t
02e0: 6f 20 68 65 6c 70 20 77 69 74 68 20 63 6f 64 65  o help with code
02f0: 20 67 65 6e 65 72 61 74 69 6f 6e 2e 20 20 54 48   generation.  TH
0300: 31 20 77 61 73 20 73 6d 61 6c 6c 20 61 6e 64 0a  1 was small and.
0310: 6c 69 67 68 74 2d 77 65 69 67 68 74 20 61 6e 64  light-weight and
0320: 20 75 73 65 64 20 6d 69 6e 69 6d 61 6c 20 72 65   used minimal re
0330: 73 6f 75 72 63 65 73 20 61 6e 64 20 73 65 65 6d  sources and seem
0340: 65 64 20 69 64 65 61 6c 6c 79 20 73 75 69 74 65  ed ideally suite
0350: 64 20 66 6f 72 20 74 68 65 0a 74 61 73 6b 2e 0a  d for the.task..
0360: 0a 54 68 65 20 6e 61 6d 65 20 22 54 48 31 22 20  .The name "TH1" 
0370: 73 74 61 6e 64 73 20 66 6f 72 20 22 54 65 73 74  stands for "Test
0380: 20 48 61 72 6e 65 73 73 20 31 22 2c 0a 73 69 6e   Harness 1",.sin
0390: 63 65 20 69 74 73 20 6f 72 69 67 69 6e 61 6c 20  ce its original 
03a0: 70 75 72 70 6f 73 65 20 77 61 73 20 74 6f 20 73  purpose was to s
03b0: 65 72 76 65 20 61 73 20 74 65 73 74 69 6e 67 20  erve as testing 
03c0: 68 61 72 6e 65 73 73 0a 66 6f 72 20 53 51 4c 69  harness.for SQLi
03d0: 74 65 2e 0a 0a 57 68 65 72 65 20 54 48 31 20 49  te...Where TH1 I
03e0: 73 20 55 73 65 64 20 49 6e 20 46 6f 73 73 69 6c  s Used In Fossil
03f0: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
0400: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20  ------------..  
0410: 2a 20 20 49 6e 20 74 68 65 20 68 65 61 64 65 72  *  In the header
0420: 20 61 6e 64 20 66 6f 6f 74 65 72 20 66 6f 72 20   and footer for 
0430: 5b 73 6b 69 6e 73 5d 28 2e 2f 63 75 73 74 6f 6d  [skins](./custom
0440: 73 6b 69 6e 2e 6d 64 29 0a 20 20 20 20 20 74 65  skin.md).     te
0450: 78 74 20 77 69 74 68 69 6e 20 60 3c 74 68 31 3e  xt within `<th1>
0460: 2e 2e 2e 3c 2f 74 68 31 3e 60 20 69 73 20 72 75  ...</th1>` is ru
0470: 6e 20 61 73 20 61 20 54 48 31 20 73 63 72 69 70  n as a TH1 scrip
0480: 74 2e 0a 20 20 20 20 20 28 5b 65 78 61 6d 70 6c  t..     ([exampl
0490: 65 5d 28 2f 62 75 69 6c 74 69 6e 2f 73 6b 69 6e  e](/builtin/skin
04a0: 73 2f 64 65 66 61 75 6c 74 2f 68 65 61 64 65 72  s/default/header
04b0: 2e 74 78 74 29 29 0a 0a 20 20 2a 20 20 54 68 69  .txt))..  *  Thi
04c0: 73 20 64 69 73 70 6c 61 79 20 6f 66 20 5b 74 69  s display of [ti
04d0: 63 6b 65 74 73 5d 28 2e 2f 62 75 67 74 68 65 6f  ckets](./bugtheo
04e0: 72 79 2e 77 69 6b 69 29 20 69 73 20 63 6f 6e 74  ry.wiki) is cont
04f0: 72 6f 6c 6c 65 64 20 62 79 20 54 48 31 0a 20 20  rolled by TH1.  
0500: 20 20 20 73 63 72 69 70 74 73 2c 20 73 6f 20 74     scripts, so t
0510: 68 61 74 20 74 68 65 20 74 69 63 6b 65 74 20 66  hat the ticket f
0520: 6f 72 6d 61 74 20 63 61 6e 20 62 65 20 63 75 73  ormat can be cus
0530: 74 6f 6d 69 7a 65 64 20 66 6f 72 20 65 61 63 68  tomized for each
0540: 0a 20 20 20 20 20 70 72 6f 6a 65 63 74 2e 20 20  .     project.  
0550: 41 64 6d 69 6e 69 73 74 72 61 74 6f 72 73 20 63  Administrators c
0560: 61 6e 20 76 69 73 69 74 20 74 68 65 20 3c 62 3e  an visit the <b>
0570: 2f 74 6b 74 73 65 74 75 70 3c 2f 62 3e 20 70 61  /tktsetup</b> pa
0580: 67 65 20 69 6e 0a 20 20 20 20 20 74 68 65 69 72  ge in.     their
0590: 20 72 65 70 6f 73 69 74 6f 72 69 65 73 20 74 6f   repositories to
05a0: 20 76 69 65 77 20 61 6e 64 20 63 75 73 74 6f 6d   view and custom
05b0: 69 7a 65 20 74 68 65 73 65 20 73 63 72 69 70 74  ize these script
05c0: 73 2e 0a 20 20 20 20 20 28 5b 65 78 61 6d 70 6c  s..     ([exampl
05d0: 65 20 75 73 61 67 65 5d 28 2e 2f 63 75 73 74 6f  e usage](./custo
05e0: 6d 5f 74 69 63 6b 65 74 2e 77 69 6b 69 29 29 0a  m_ticket.wiki)).
05f0: 0a 4f 76 65 72 76 69 65 77 20 4f 66 20 54 68 65  .Overview Of The
0600: 20 54 63 6c 2f 54 48 31 20 4c 61 6e 67 75 61 67   Tcl/TH1 Languag
0610: 65 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  e.--------------
0620: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
0630: 2d 2d 0a 0a 54 48 31 20 69 73 20 61 20 73 74 72  --..TH1 is a str
0640: 69 6e 67 2d 70 72 6f 63 65 73 73 69 6e 67 20 6c  ing-processing l
0650: 61 6e 67 75 61 67 65 2e 20 20 41 6c 6c 20 76 61  anguage.  All va
0660: 6c 75 65 73 20 61 72 65 20 73 74 72 69 6e 67 73  lues are strings
0670: 2e 20 20 41 6e 79 20 6e 75 6d 65 72 69 63 61 6c  .  Any numerical
0680: 0a 6f 70 65 72 61 74 69 6f 6e 73 20 61 72 65 20  .operations are 
0690: 61 63 63 6f 6d 70 6c 69 73 68 65 64 20 62 79 20  accomplished by 
06a0: 63 6f 6e 76 65 72 74 69 6e 67 20 66 72 6f 6d 20  converting from 
06b0: 73 74 72 69 6e 67 20 74 6f 20 6e 75 6d 65 72 69  string to numeri
06c0: 63 2c 20 70 65 72 66 6f 72 6d 69 6e 67 0a 74 68  c, performing.th
06d0: 65 20 63 6f 6d 70 75 74 61 74 69 6f 6e 2c 20 74  e computation, t
06e0: 68 65 6e 20 63 6f 6e 76 65 72 74 69 6e 67 20 74  hen converting t
06f0: 68 65 20 72 65 73 75 6c 74 20 62 61 63 6b 20 69  he result back i
0700: 6e 74 6f 20 61 20 73 74 72 69 6e 67 2e 20 20 28  nto a string.  (
0710: 54 68 69 73 20 6d 69 67 68 74 0a 73 65 65 6d 20  This might.seem 
0720: 69 6e 65 66 66 69 63 69 65 6e 74 2c 20 62 75 74  inefficient, but
0730: 20 69 74 20 69 73 20 66 61 73 74 65 72 20 74 68   it is faster th
0740: 61 6e 20 70 65 6f 70 6c 65 20 69 6d 61 67 69 6e  an people imagin
0750: 65 2c 20 61 6e 64 20 6e 75 6d 65 72 69 63 0a 63  e, and numeric.c
0760: 6f 6d 70 75 74 61 74 69 6f 6e 73 20 64 6f 20 6e  omputations do n
0770: 6f 74 20 63 6f 6d 65 20 75 70 20 76 65 72 79 20  ot come up very 
0780: 6f 66 74 65 6e 20 66 6f 72 20 74 68 65 20 6b 69  often for the ki
0790: 6e 64 73 20 6f 66 20 77 6f 72 6b 20 74 68 61 74  nds of work that
07a0: 20 54 48 31 20 64 6f 65 73 2c 0a 73 6f 20 69 74   TH1 does,.so it
07b0: 20 68 61 73 20 6e 65 76 65 72 20 62 65 65 6e 20   has never been 
07c0: 61 6e 20 69 73 73 75 65 2e 29 0a 0a 41 20 54 48  an issue.)..A TH
07d0: 31 20 73 63 72 69 70 74 20 63 6f 6e 73 69 73 74  1 script consist
07e0: 73 20 6f 66 20 61 20 73 65 71 75 65 6e 63 65 20  s of a sequence 
07f0: 6f 66 20 63 6f 6d 6d 61 6e 64 73 2e 0a 45 61 63  of commands..Eac
0800: 68 20 63 6f 6d 6d 61 6e 64 20 69 73 20 74 65 72  h command is ter
0810: 6d 69 6e 61 74 65 64 20 62 79 20 74 68 65 20 66  minated by the f
0820: 69 72 73 74 20 2a 75 6e 65 73 63 61 70 65 64 2a  irst *unescaped*
0830: 20 6e 65 77 6c 69 6e 65 20 6f 72 20 22 3b 22 20   newline or ";" 
0840: 63 68 61 72 61 63 74 65 72 2e 0a 54 68 65 20 74  character..The t
0850: 65 78 74 20 6f 66 20 74 68 65 20 63 6f 6d 6d 61  ext of the comma
0860: 6e 64 20 28 65 78 63 6c 75 64 69 6e 67 20 74 68  nd (excluding th
0870: 65 20 6e 65 77 6c 69 6e 65 20 6f 72 20 73 65 6d  e newline or sem
0880: 69 63 6f 6c 6f 6e 20 74 65 72 6d 69 6e 61 74 6f  icolon terminato
0890: 72 29 0a 69 73 20 62 72 6f 6b 65 6e 20 69 6e 74  r).is broken int
08a0: 6f 20 73 70 61 63 65 2d 73 65 70 61 72 61 74 65  o space-separate
08b0: 64 20 74 6f 6b 65 6e 73 2e 20 20 54 68 65 20 66  d tokens.  The f
08c0: 69 72 73 74 20 74 6f 6b 65 6e 20 69 73 20 74 68  irst token is th
08d0: 65 20 63 6f 6d 6d 61 6e 64 0a 6e 61 6d 65 20 61  e command.name a
08e0: 6e 64 20 73 75 62 73 65 71 75 65 6e 74 20 74 6f  nd subsequent to
08f0: 6b 65 6e 73 20 61 72 65 20 74 68 65 20 61 72 67  kens are the arg
0900: 75 6d 65 6e 74 73 2e 20 20 49 6e 20 74 68 69 73  uments.  In this
0910: 20 73 65 6e 73 65 2c 20 54 48 31 20 73 79 6e 74   sense, TH1 synt
0920: 61 78 0a 69 73 20 73 69 6d 69 6c 61 72 20 74 6f  ax.is similar to
0930: 20 74 68 65 20 66 61 6d 69 6c 69 61 72 20 63 6f   the familiar co
0940: 6d 6d 61 6e 64 2d 6c 69 6e 65 20 73 68 65 6c 6c  mmand-line shell
0950: 20 73 79 6e 74 61 78 2e 0a 0a 41 20 74 6f 6b 65   syntax...A toke
0960: 6e 20 69 73 20 61 6e 79 20 73 65 71 75 65 6e 63  n is any sequenc
0970: 65 20 6f 66 20 63 68 61 72 61 63 74 65 72 73 20  e of characters 
0980: 6f 74 68 65 72 20 74 68 61 6e 20 77 68 69 74 65  other than white
0990: 73 70 61 63 65 20 61 6e 64 20 73 65 6d 69 63 6f  space and semico
09a0: 6c 6f 6e 73 2e 0a 54 65 78 74 20 69 6e 73 69 64  lons..Text insid
09b0: 65 20 64 6f 75 62 6c 65 2d 71 75 6f 74 65 73 20  e double-quotes 
09c0: 69 73 20 61 20 73 69 6e 67 6c 65 20 74 6f 6b 65  is a single toke
09d0: 6e 20 65 76 65 6e 20 69 66 20 69 74 20 69 6e 63  n even if it inc
09e0: 6c 75 64 65 73 0a 77 68 69 74 65 73 70 61 63 65  ludes.whitespace
09f0: 20 61 6e 64 20 73 65 6d 69 63 6f 6c 6f 6e 73 2e   and semicolons.
0a00: 20 54 65 78 74 20 77 69 74 68 69 6e 20 7b 2e 2e   Text within {..
0a10: 2e 7d 20 70 61 69 72 73 20 69 73 20 61 6c 73 6f  .} pairs is also
0a20: 20 61 0a 73 69 6e 67 6c 65 20 74 6f 6b 65 6e 2c   a.single token,
0a30: 20 77 68 69 63 68 20 69 73 20 75 73 65 66 75 6c   which is useful
0a40: 20 62 65 63 61 75 73 65 20 63 75 72 6c 79 20 62   because curly b
0a50: 72 61 63 65 73 20 61 72 65 20 65 61 73 69 65 72  races are easier
0a60: 20 74 6f 20 e2 80 9c 70 61 69 72 e2 80 9d 0a 61   to “pair”.a
0a70: 6e 64 20 6e 65 73 74 20 70 72 6f 70 65 72 6c 79  nd nest properly
0a80: 20 74 68 61 6e 20 64 6f 75 62 6c 65 2d 71 75 6f   than double-quo
0a90: 74 65 73 2e 0a 0a 54 68 65 20 6e 65 73 74 65 64  tes...The nested
0aa0: 20 7b 2e 2e 2e 7d 20 66 6f 72 6d 20 6f 66 20 74   {...} form of t
0ab0: 6f 6b 65 6e 73 20 69 73 20 69 6d 70 6f 72 74 61  okens is importa
0ac0: 6e 74 20 62 65 63 61 75 73 65 20 69 74 20 61 6c  nt because it al
0ad0: 6c 6f 77 73 20 54 48 31 20 63 6f 6d 6d 61 6e 64  lows TH1 command
0ae0: 73 0a 74 6f 20 68 61 76 65 20 61 6e 20 61 70 70  s.to have an app
0af0: 65 61 72 61 6e 63 65 20 73 69 6d 69 6c 61 72 20  earance similar 
0b00: 74 6f 20 43 2f 43 2b 2b 2e 20 20 49 74 20 69 73  to C/C++.  It is
0b10: 20 69 6d 70 6f 72 74 61 6e 74 20 74 6f 20 72 65   important to re
0b20: 6d 65 6d 62 65 72 2c 20 74 68 6f 75 67 68 2c 0a  member, though,.
0b30: 74 68 61 74 20 61 20 54 48 31 20 73 63 72 69 70  that a TH1 scrip
0b40: 74 20 69 73 20 72 65 61 6c 6c 79 20 6a 75 73 74  t is really just
0b50: 20 61 20 6c 69 73 74 20 6f 66 20 74 65 78 74 20   a list of text 
0b60: 63 6f 6d 6d 61 6e 64 73 2c 20 6e 6f 74 20 61 20  commands, not a 
0b70: 63 6f 6e 74 65 78 74 2d 66 72 65 65 0a 6c 61 6e  context-free.lan
0b80: 67 75 61 67 65 20 77 69 74 68 20 61 20 67 72 61  guage with a gra
0b90: 6d 6d 61 72 20 6c 69 6b 65 20 43 2f 43 2b 2b 2e  mmar like C/C++.
0ba0: 20 20 54 68 69 73 20 63 61 6e 20 62 65 20 63 6f    This can be co
0bb0: 6e 66 75 73 69 6e 67 20 74 6f 20 6c 6f 6e 67 2d  nfusing to long-
0bc0: 74 69 6d 65 0a 43 2f 43 2b 2b 20 70 72 6f 67 72  time.C/C++ progr
0bd0: 61 6d 6d 65 72 73 20 62 65 63 61 75 73 65 20 54  ammers because T
0be0: 48 31 20 64 6f 65 73 20 6c 6f 6f 6b 20 61 20 6c  H1 does look a l
0bf0: 6f 74 20 6c 69 6b 65 20 43 2f 43 2b 2b 2c 20 62  ot like C/C++, b
0c00: 75 74 20 74 68 65 20 73 65 6d 61 6e 74 69 63 73  ut the semantics
0c10: 0a 6f 66 20 54 48 31 20 61 72 65 20 63 6c 6f 73  .of TH1 are clos
0c20: 65 72 20 74 6f 20 46 4f 52 54 48 20 6f 72 20 4c  er to FORTH or L
0c30: 69 73 70 20 74 68 61 6e 20 74 68 65 79 20 61 72  isp than they ar
0c40: 65 20 74 6f 20 43 2e 0a 0a 43 6f 6e 73 69 64 65  e to C...Conside
0c50: 72 20 74 68 65 20 60 69 66 60 20 63 6f 6d 6d 61  r the `if` comma
0c60: 6e 64 20 69 6e 20 54 48 31 2e 0a 0a 20 20 20 20  nd in TH1...    
0c70: 69 66 20 7b 24 63 75 72 72 65 6e 74 20 65 71 20  if {$current eq 
0c80: 22 64 65 76 22 7d 20 7b 0a 20 20 20 20 20 20 70  "dev"} {.      p
0c90: 75 74 73 20 22 68 65 6c 6c 6f 22 0a 20 20 20 20  uts "hello".    
0ca0: 7d 20 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 70  } else {.      p
0cb0: 75 74 73 20 22 77 6f 72 6c 64 22 0a 20 20 20 20  uts "world".    
0cc0: 7d 0a 0a 54 68 65 20 65 78 61 6d 70 6c 65 20 61  }..The example a
0cd0: 62 6f 76 65 20 69 73 20 61 20 73 69 6e 67 6c 65  bove is a single
0ce0: 20 63 6f 6d 6d 61 6e 64 2e 20 20 54 68 65 20 66   command.  The f
0cf0: 69 72 73 74 20 74 6f 6b 65 6e 2c 20 61 6e 64 20  irst token, and 
0d00: 74 68 65 20 6e 61 6d 65 0a 6f 66 20 74 68 65 20  the name.of the 
0d10: 63 6f 6d 6d 61 6e 64 2c 20 69 73 20 60 69 66 60  command, is `if`
0d20: 2e 0a 54 68 65 20 73 65 63 6f 6e 64 20 74 6f 6b  ..The second tok
0d30: 65 6e 20 69 73 20 60 24 63 75 72 72 65 6e 74 20  en is `$current 
0d40: 65 71 20 22 64 65 76 22 60 20 2d 20 61 6e 20 65  eq "dev"` - an e
0d50: 78 70 72 65 73 73 69 6f 6e 2e 20 20 28 54 68 65  xpression.  (The
0d60: 20 6f 75 74 65 72 20 7b 2e 2e 2e 7d 0a 61 72 65   outer {...}.are
0d70: 20 72 65 6d 6f 76 65 64 20 66 72 6f 6d 20 65 61   removed from ea
0d80: 63 68 20 74 6f 6b 65 6e 20 62 79 20 74 68 65 20  ch token by the 
0d90: 63 6f 6d 6d 61 6e 64 20 70 61 72 73 65 72 2e 29  command parser.)
0da0: 20 20 54 68 65 20 74 68 69 72 64 20 74 6f 6b 65    The third toke
0db0: 6e 0a 69 73 20 74 68 65 20 60 70 75 74 73 20 22  n.is the `puts "
0dc0: 68 65 6c 6c 6f 22 60 2c 20 77 69 74 68 20 69 74  hello"`, with it
0dd0: 73 20 77 68 69 74 65 73 70 61 63 65 20 61 6e 64  s whitespace and
0de0: 20 6e 65 77 6c 69 6e 65 73 2e 20 20 54 68 65 20   newlines.  The 
0df0: 66 6f 75 72 74 68 20 74 6f 6b 65 6e 0a 69 73 20  fourth token.is 
0e00: 60 65 6c 73 65 60 20 61 6e 64 20 74 68 65 20 66  `else` and the f
0e10: 69 66 74 68 20 61 6e 64 20 6c 61 73 74 20 74 6f  ifth and last to
0e20: 6b 65 6e 20 69 73 20 60 70 75 74 73 20 22 77 6f  ken is `puts "wo
0e30: 72 6c 64 22 60 2e 0a 0a 54 68 65 20 60 69 66 60  rld"`...The `if`
0e40: 20 63 6f 6d 6d 61 6e 64 20 65 76 61 6c 75 61 74   command evaluat
0e50: 65 73 20 69 74 73 20 66 69 72 73 74 20 61 72 67  es its first arg
0e60: 75 6d 65 6e 74 20 28 74 68 65 20 73 65 63 6f 6e  ument (the secon
0e70: 64 20 74 6f 6b 65 6e 29 0a 61 73 20 61 6e 20 65  d token).as an e
0e80: 78 70 72 65 73 73 69 6f 6e 2c 20 61 6e 64 20 69  xpression, and i
0e90: 66 20 74 68 61 74 20 65 78 70 72 65 73 73 69 6f  f that expressio
0ea0: 6e 20 69 73 20 74 72 75 65 2c 20 69 74 20 65 76  n is true, it ev
0eb0: 61 6c 75 61 74 65 73 20 69 74 73 0a 73 65 63 6f  aluates its.seco
0ec0: 6e 64 20 61 72 67 75 6d 65 6e 74 20 28 74 68 65  nd argument (the
0ed0: 20 74 68 69 72 64 20 74 6f 6b 65 6e 29 20 61 73   third token) as
0ee0: 20 61 20 54 48 31 20 73 63 72 69 70 74 2e 0a 49   a TH1 script..I
0ef0: 66 20 74 68 65 20 65 78 70 72 65 73 73 69 6f 6e  f the expression
0f00: 20 69 73 20 66 61 6c 73 65 20 61 6e 64 20 74 68   is false and th
0f10: 65 20 74 68 69 72 64 20 61 72 67 75 6d 65 6e 74  e third argument
0f20: 20 69 73 20 60 65 6c 73 65 60 2c 20 74 68 65 6e   is `else`, then
0f30: 0a 74 68 65 20 66 6f 75 72 74 68 20 61 72 67 75  .the fourth argu
0f40: 6d 65 6e 74 20 69 73 20 65 76 61 6c 75 61 74 65  ment is evaluate
0f50: 64 20 61 73 20 61 20 54 48 31 20 65 78 70 72 65  d as a TH1 expre
0f60: 73 73 69 6f 6e 2e 0a 0a 53 6f 2c 20 79 6f 75 20  ssion...So, you 
0f70: 73 65 65 2c 20 65 76 65 6e 20 74 68 6f 75 67 68  see, even though
0f80: 20 74 68 65 20 65 78 61 6d 70 6c 65 20 61 62 6f   the example abo
0f90: 76 65 20 73 70 61 6e 73 20 66 69 76 65 20 6c 69  ve spans five li
0fa0: 6e 65 73 2c 20 69 74 20 69 73 20 72 65 61 6c 6c  nes, it is reall
0fb0: 79 0a 6a 75 73 74 20 61 20 73 69 6e 67 6c 65 20  y.just a single 
0fc0: 63 6f 6d 6d 61 6e 64 2e 0a 0a 41 6c 6c 20 6f 66  command...All of
0fd0: 20 74 68 69 73 20 61 6c 73 6f 20 65 78 70 6c 61   this also expla
0fe0: 69 6e 73 20 74 68 65 20 65 6d 70 68 61 73 69 73  ins the emphasis
0ff0: 20 6f 6e 20 2a 75 6e 65 73 63 61 70 65 64 2a 20   on *unescaped* 
1000: 63 68 61 72 61 63 74 65 72 73 20 61 62 6f 76 65  characters above
1010: 3a 0a 74 68 65 20 63 75 72 6c 79 20 62 72 61 63  :.the curly brac
1020: 65 73 20 60 7b 20 7d 60 20 61 72 65 20 73 74 72  es `{ }` are str
1030: 69 6e 67 20 71 75 6f 74 69 6e 67 20 63 68 61 72  ing quoting char
1040: 61 63 74 65 72 73 20 69 6e 20 54 63 6c 2f 54 48  acters in Tcl/TH
1050: 31 2c 20 6e 6f 74 0a 62 6c 6f 63 6b 20 64 65 6c  1, not.block del
1060: 69 6d 69 74 65 72 73 20 61 73 20 69 6e 20 43 2e  imiters as in C.
1070: 20 54 68 69 73 20 69 73 20 68 6f 77 20 77 65 20   This is how we 
1080: 63 61 6e 20 68 61 76 65 20 61 20 63 6f 6d 6d 61  can have a comma
1090: 6e 64 20 74 68 61 74 20 65 78 74 65 6e 64 73 0a  nd that extends.
10a0: 6f 76 65 72 20 6d 75 6c 74 69 70 6c 65 20 6c 69  over multiple li
10b0: 6e 65 73 2e 20 49 74 20 69 73 20 61 6c 73 6f 20  nes. It is also 
10c0: 77 68 79 20 74 68 65 20 60 65 6c 73 65 60 20 6b  why the `else` k
10d0: 65 79 77 6f 72 64 20 6d 75 73 74 20 62 65 20 63  eyword must be c
10e0: 75 64 64 6c 65 64 0a 75 70 20 77 69 74 68 20 74  uddled.up with t
10f0: 68 65 20 63 6c 6f 73 69 6e 67 20 62 72 61 63 65  he closing brace
1100: 20 66 6f 72 20 74 68 65 20 60 69 66 60 20 63 6c   for the `if` cl
1110: 61 75 73 65 27 73 20 73 63 72 69 70 74 6c 65 74  ause's scriptlet
1120: 2e 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 0a  . The following.
1130: 69 73 20 69 6e 76 61 6c 69 64 20 54 63 6c 2f 54  is invalid Tcl/T
1140: 48 31 3a 0a 0a 20 20 20 20 69 66 20 7b 24 63 75  H1:..    if {$cu
1150: 72 72 65 6e 74 20 65 71 20 22 64 65 76 22 7d 20  rrent eq "dev"} 
1160: 7b 0a 20 20 20 20 20 20 70 75 74 73 20 22 68 65  {.      puts "he
1170: 6c 6c 6f 22 0a 20 20 20 20 7d 0a 20 20 20 20 65  llo".    }.    e
1180: 6c 73 65 20 7b 0a 20 20 20 20 20 20 70 75 74 73  lse {.      puts
1190: 20 22 77 6f 72 6c 64 22 0a 20 20 20 20 7d 0a 0a   "world".    }..
11a0: 49 66 20 79 6f 75 20 74 72 79 20 74 6f 20 72 75  If you try to ru
11b0: 6e 20 74 68 69 73 20 75 6e 64 65 72 20 65 69 74  n this under eit
11c0: 68 65 72 20 54 63 6c 20 6f 72 20 54 48 31 2c 20  her Tcl or TH1, 
11d0: 74 68 65 20 69 6e 74 65 72 70 72 65 74 65 72 20  the interpreter 
11e0: 77 69 6c 6c 0a 74 65 6c 6c 20 79 6f 75 20 74 68  will.tell you th
11f0: 61 74 20 74 68 65 72 65 20 69 73 20 6e 6f 20 60  at there is no `
1200: 65 6c 73 65 60 20 63 6f 6d 6d 61 6e 64 2c 20 62  else` command, b
1210: 65 63 61 75 73 65 20 77 69 74 68 20 74 68 65 20  ecause with the 
1220: 6e 65 77 6c 69 6e 65 20 6f 6e 0a 74 68 65 20 74  newline on.the t
1230: 68 69 72 64 20 6c 69 6e 65 2c 20 79 6f 75 20 74  hird line, you t
1240: 65 72 6d 69 6e 61 74 65 64 20 74 68 65 20 60 69  erminated the `i
1250: 66 60 20 63 6f 6d 6d 61 6e 64 2e 0a 0a 4f 63 63  f` command...Occ
1260: 61 73 69 6f 6e 61 6c 6c 79 20 69 6e 20 54 63 6c  asionally in Tcl
1270: 2f 54 48 31 20 73 63 72 69 70 74 73 2c 20 79 6f  /TH1 scripts, yo
1280: 75 20 6d 61 79 20 6e 65 65 64 20 74 6f 20 75 73  u may need to us
1290: 65 20 61 20 62 61 63 6b 73 6c 61 73 68 20 61 74  e a backslash at
12a0: 20 74 68 65 0a 65 6e 64 20 6f 66 20 61 20 6c 69   the.end of a li
12b0: 6e 65 20 74 6f 20 61 6c 6c 6f 77 20 61 20 63 6f  ne to allow a co
12c0: 6d 6d 61 6e 64 20 74 6f 20 65 78 74 65 6e 64 20  mmand to extend 
12d0: 6f 76 65 72 20 6d 75 6c 74 69 70 6c 65 20 6c 69  over multiple li
12e0: 6e 65 73 20 77 69 74 68 6f 75 74 0a 62 65 69 6e  nes without.bein
12f0: 67 20 63 6f 6e 73 69 64 65 72 65 64 20 74 77 6f  g considered two
1300: 20 73 65 70 61 72 61 74 65 20 63 6f 6d 6d 61 6e   separate comman
1310: 64 73 2e 20 48 65 72 65 27 73 20 61 6e 20 65 78  ds. Here's an ex
1320: 61 6d 70 6c 65 20 66 72 6f 6d 20 6f 6e 65 20 6f  ample from one o
1330: 66 0a 46 6f 73 73 69 6c 27 73 20 74 65 73 74 20  f.Fossil's test 
1340: 73 63 72 69 70 74 73 3a 0a 0a 20 20 20 20 72 65  scripts:..    re
1350: 74 75 72 6e 20 5b 6c 69 6e 64 65 78 20 5b 72 65  turn [lindex [re
1360: 67 65 78 70 20 2d 6c 69 6e 65 20 2d 69 6e 6c 69  gexp -line -inli
1370: 6e 65 20 2d 6e 6f 63 61 73 65 20 2d 2d 20 5c 0a  ne -nocase -- \.
1380: 20 20 20 20 20 20 20 20 7b 5e 75 75 69 64 3a 5c          {^uuid:\
1390: 73 2b 28 5b 30 2d 39 41 2d 46 5d 7b 34 30 7d 29  s+([0-9A-F]{40})
13a0: 20 7d 20 5b 65 76 61 6c 20 5b 67 65 74 46 6f 73   } [eval [getFos
13b0: 73 69 6c 43 6f 6d 6d 61 6e 64 20 5c 0a 20 20 20  silCommand \.   
13c0: 20 20 20 20 20 24 72 65 70 6f 73 69 74 6f 72 79       $repository
13d0: 20 22 22 20 69 6e 66 6f 20 74 72 75 6e 6b 5d 5d   "" info trunk]]
13e0: 5d 20 65 6e 64 5d 0a 0a 54 68 6f 73 65 20 62 61  ] end]..Those ba
13f0: 63 6b 73 6c 61 73 68 65 73 20 61 6c 6c 6f 77 20  ckslashes allow 
1400: 74 68 65 20 63 6f 6d 6d 61 6e 64 20 74 6f 20 77  the command to w
1410: 72 61 70 20 6e 69 63 65 6c 79 20 77 69 74 68 69  rap nicely withi
1420: 6e 20 61 20 73 74 61 6e 64 61 72 64 0a 74 65 72  n a standard.ter
1430: 6d 69 6e 61 6c 20 77 69 64 74 68 20 77 68 69 6c  minal width whil
1440: 65 20 74 65 6c 6c 69 6e 67 20 74 68 65 20 69 6e  e telling the in
1450: 74 65 72 70 72 65 74 65 72 20 74 6f 20 63 6f 6e  terpreter to con
1460: 73 69 64 65 72 20 74 68 6f 73 65 20 74 68 72 65  sider those thre
1470: 65 0a 6c 69 6e 65 73 20 61 73 20 61 20 73 69 6e  e.lines as a sin
1480: 67 6c 65 20 63 6f 6d 6d 61 6e 64 2e 0a 0a 3c 61  gle command...<a
1490: 20 69 64 3d 22 74 61 69 6e 74 22 3e 3c 2f 61 3e   id="taint"></a>
14a0: 54 61 69 6e 74 65 64 20 41 6e 64 20 55 6e 74 61  Tainted And Unta
14b0: 69 6e 74 65 64 20 53 74 72 69 6e 67 73 0a 2d 2d  inted Strings.--
14c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
14e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 42  -------------..B
14f0: 65 67 69 6e 6e 69 6e 67 20 77 69 74 68 20 46 6f  eginning with Fo
1500: 73 73 69 6c 20 76 65 72 73 69 6f 6e 20 32 2e 32  ssil version 2.2
1510: 36 20 28 63 69 72 63 61 20 32 30 32 35 29 2c 20  6 (circa 2025), 
1520: 54 48 31 20 64 69 73 74 69 6e 67 75 69 73 68 65  TH1 distinguishe
1530: 73 20 62 65 74 77 65 65 6e 0a 22 74 61 69 6e 74  s between."taint
1540: 65 64 22 20 61 6e 64 20 22 75 6e 74 61 69 6e 74  ed" and "untaint
1550: 65 64 22 20 73 74 72 69 6e 67 73 2e 20 20 54 61  ed" strings.  Ta
1560: 69 6e 74 65 64 20 73 74 72 69 6e 67 73 20 61 72  inted strings ar
1570: 65 20 73 74 72 69 6e 67 73 20 74 68 61 74 20 61  e strings that a
1580: 72 65 0a 64 65 72 69 76 65 64 20 66 72 6f 6d 20  re.derived from 
1590: 75 73 65 72 20 69 6e 70 75 74 73 20 74 68 61 74  user inputs that
15a0: 20 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 74   might contain t
15b0: 65 78 74 20 74 68 61 74 20 69 73 20 64 65 73 69  ext that is desi
15c0: 67 6e 65 64 20 74 6f 20 73 75 62 76 65 72 74 0a  gned to subvert.
15d0: 74 68 65 20 73 63 72 69 70 74 2e 20 20 55 6e 74  the script.  Unt
15e0: 61 69 6e 74 65 64 20 73 74 72 69 6e 67 73 20 61  ainted strings a
15f0: 72 65 20 6b 6e 6f 77 6e 20 74 6f 20 63 6f 6d 65  re known to come
1600: 20 66 72 6f 6d 20 73 65 63 75 72 65 20 73 6f 75   from secure sou
1610: 72 63 65 73 20 61 6e 64 0a 61 72 65 20 61 73 73  rces and.are ass
1620: 75 6d 65 64 20 74 6f 20 63 6f 6e 74 61 69 6e 20  umed to contain 
1630: 6e 6f 20 6d 61 6c 69 63 69 6f 75 73 20 63 6f 6e  no malicious con
1640: 74 65 6e 74 2e 0a 0a 42 65 67 69 6e 6e 69 6e 67  tent...Beginning
1650: 20 77 69 74 68 20 46 6f 73 73 69 6c 20 76 65 72   with Fossil ver
1660: 73 69 6f 6e 20 32 2e 32 36 2c 20 61 6e 64 20 64  sion 2.26, and d
1670: 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20  epending on the 
1680: 76 61 6c 75 65 20 6f 66 20 74 68 65 0a 5b 76 75  value of the.[vu
1690: 6c 6e 2d 72 65 70 6f 72 74 20 73 65 74 74 69 6e  ln-report settin
16a0: 67 5d 28 2f 68 65 6c 70 3f 63 6d 64 3d 76 75 6c  g](/help?cmd=vul
16b0: 6e 2d 72 65 70 6f 72 74 29 2c 20 54 48 31 20 77  n-report), TH1 w
16c0: 69 6c 6c 20 70 72 65 76 65 6e 74 20 74 61 69 6e  ill prevent tain
16d0: 74 65 64 0a 73 74 72 69 6e 67 73 20 66 72 6f 6d  ted.strings from
16e0: 20 62 65 69 6e 67 20 75 73 65 64 20 69 6e 20 77   being used in w
16f0: 61 79 73 20 74 68 61 74 20 6d 69 67 68 74 20 6c  ays that might l
1700: 65 61 64 20 74 6f 20 58 53 53 20 6f 72 20 53 51  ead to XSS or SQ
1710: 4c 2d 69 6e 6a 65 63 74 69 6f 6e 0a 61 74 74 61  L-injection.atta
1720: 63 6b 73 2e 20 20 54 68 69 73 20 66 65 61 74 75  cks.  This featu
1730: 72 65 20 68 65 6c 70 73 20 74 6f 20 65 6e 73 75  re helps to ensu
1740: 72 65 20 74 68 61 74 20 58 53 53 20 61 6e 64 20  re that XSS and 
1750: 53 51 4c 2d 69 6e 6a 65 63 74 69 6f 6e 0a 76 75  SQL-injection.vu
1760: 6c 6e 65 72 61 62 69 6c 69 74 69 65 73 20 61 72  lnerabilities ar
1770: 65 20 6e 6f 74 20 2a 61 63 63 69 64 65 6e 74 61  e not *accidenta
1780: 6c 6c 79 2a 20 61 64 64 65 64 20 74 6f 20 46 6f  lly* added to Fo
1790: 73 73 69 6c 20 77 68 65 6e 0a 63 75 73 74 6f 6d  ssil when.custom
17a0: 20 54 48 31 20 73 63 72 69 70 74 73 20 66 6f 72   TH1 scripts for
17b0: 20 68 65 61 64 65 72 73 20 6f 72 20 66 6f 6f 74   headers or foot
17c0: 65 72 73 20 6f 72 20 74 69 63 6b 65 74 73 20 61  ers or tickets a
17d0: 72 65 20 61 64 64 65 64 20 74 6f 20 61 0a 72 65  re added to a.re
17e0: 70 6f 73 69 74 6f 72 79 2e 20 20 4e 6f 74 65 20  pository.  Note 
17f0: 74 68 61 74 20 74 68 65 20 74 61 69 6e 74 65 64  that the tainted
1800: 2f 75 6e 74 61 69 6e 74 65 64 20 64 69 73 74 69  /untainted disti
1810: 6e 63 74 69 6f 6e 20 69 6e 20 73 74 72 69 6e 67  nction in string
1820: 73 20 64 6f 65 73 0a 6e 6f 74 20 6d 61 6b 65 20  s does.not make 
1830: 69 74 20 69 6d 70 6f 73 73 69 62 6c 65 20 74 6f  it impossible to
1840: 20 69 6e 74 72 6f 64 75 63 65 20 58 53 53 20 61   introduce XSS a
1850: 6e 64 20 53 51 4c 2d 69 6e 6a 65 63 74 69 6f 6e  nd SQL-injection
1860: 73 20 76 75 6c 6e 65 72 61 62 69 6c 69 74 69 65  s vulnerabilitie
1870: 73 0a 75 73 69 6e 67 20 70 6f 6f 72 6c 79 2d 77  s.using poorly-w
1880: 72 69 74 74 65 6e 20 54 48 31 20 73 63 72 69 70  ritten TH1 scrip
1890: 74 73 3b 20 69 74 20 6a 75 73 74 20 6d 61 6b 65  ts; it just make
18a0: 73 20 69 74 20 6d 6f 72 65 20 64 69 66 66 69 63  s it more diffic
18b0: 75 6c 74 20 61 6e 64 0a 6c 65 73 73 20 6c 69 6b  ult and.less lik
18c0: 65 6c 79 20 74 6f 20 68 61 70 70 65 6e 20 62 79  ely to happen by
18d0: 20 61 63 63 69 64 65 6e 74 2e 20 20 44 65 76 65   accident.  Deve
18e0: 6c 6f 70 65 72 73 20 6d 75 73 74 20 73 74 69 6c  lopers must stil
18f0: 6c 20 63 6f 6e 73 69 64 65 72 20 74 68 65 0a 73  l consider the.s
1900: 65 63 75 72 69 74 79 20 69 6d 70 6c 69 63 61 74  ecurity implicat
1910: 69 6f 6e 73 20 54 48 31 20 63 75 73 74 6f 6d 69  ions TH1 customi
1920: 7a 61 74 69 6f 6e 73 20 74 68 65 79 20 61 64 64  zations they add
1930: 20 74 6f 20 46 6f 73 73 69 6c 2c 20 61 6e 64 20   to Fossil, and 
1940: 74 61 6b 65 0a 61 70 70 72 6f 70 72 69 61 74 65  take.appropriate
1950: 20 70 72 65 63 61 75 74 69 6f 6e 73 20 77 68 65   precautions whe
1960: 6e 20 77 72 69 74 69 6e 67 20 63 75 73 74 6f 6d  n writing custom
1970: 20 54 48 31 2e 20 20 50 65 65 72 20 72 65 76 69   TH1.  Peer revi
1980: 65 77 20 6f 66 20 54 48 31 0a 73 63 72 69 70 74  ew of TH1.script
1990: 20 63 68 61 6e 67 65 73 20 69 73 20 65 6e 63 6f   changes is enco
19a0: 75 72 61 67 65 64 2e 0a 0a 49 6e 20 46 6f 73 73  uraged...In Foss
19b0: 69 6c 20 76 65 72 73 69 6f 6e 20 32 2e 32 36 2c  il version 2.26,
19c0: 20 69 66 20 74 68 65 20 76 75 6c 6e 2d 72 65 70   if the vuln-rep
19d0: 6f 72 74 20 73 65 74 74 69 6e 67 20 69 73 20 73  ort setting is s
19e0: 65 74 20 74 6f 20 22 62 6c 6f 63 6b 22 0a 6f 72  et to "block".or
19f0: 20 22 66 61 74 61 6c 22 2c 20 74 68 65 20 5b 68   "fatal", the [h
1a00: 74 6d 6c 5d 28 23 68 74 6d 6c 29 20 61 6e 64 20  tml](#html) and 
1a10: 5b 71 75 65 72 79 5d 28 23 71 75 65 72 79 29 20  [query](#query) 
1a20: 54 48 31 20 63 6f 6d 6d 61 6e 64 73 20 77 69 6c  TH1 commands wil
1a30: 6c 0a 66 61 69 6c 20 77 69 74 68 20 61 6e 20 65  l.fail with an e
1a40: 72 72 6f 72 20 69 66 20 74 68 65 69 72 20 61 72  rror if their ar
1a50: 67 75 6d 65 6e 74 20 69 73 20 61 20 74 61 69 6e  gument is a tain
1a60: 74 65 64 20 73 74 72 69 6e 67 2e 20 20 54 68 69  ted string.  Thi
1a70: 73 20 68 65 6c 70 73 0a 74 6f 20 70 72 65 76 65  s helps.to preve
1a80: 6e 74 20 58 53 53 20 61 6e 64 20 53 51 4c 2d 69  nt XSS and SQL-i
1a90: 6e 6a 65 63 74 69 6f 6e 20 61 74 74 61 63 6b 73  njection attacks
1aa0: 2c 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20  , respectively. 
1ab0: 20 4e 6f 74 65 20 74 68 61 74 0a 74 68 65 20 64   Note that.the d
1ac0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 6f 66 20  efault value of 
1ad0: 74 68 65 20 76 75 6c 6e 2d 72 65 70 6f 72 74 20  the vuln-report 
1ae0: 73 65 74 74 69 6e 67 20 69 73 20 22 6c 6f 67 22  setting is "log"
1af0: 2c 20 77 68 69 63 68 20 61 6c 6c 6f 77 73 20 74  , which allows t
1b00: 68 6f 73 65 0a 63 6f 6d 6d 61 6e 64 73 20 74 6f  hose.commands to
1b10: 20 63 6f 6e 74 69 6e 75 65 20 77 6f 72 6b 69 6e   continue workin
1b20: 67 20 61 6e 64 20 6f 6e 6c 79 20 77 72 69 74 65  g and only write
1b30: 73 20 61 20 77 61 72 6e 69 6e 67 20 6d 65 73 73  s a warning mess
1b40: 61 67 65 20 69 6e 74 6f 20 74 68 65 0a 65 72 72  age into the.err
1b50: 6f 72 20 6c 6f 67 2e 20 20 3c 62 3e 46 75 74 75  or log.  <b>Futu
1b60: 72 65 20 76 65 72 73 69 6f 6e 73 20 6f 66 20 46  re versions of F
1b70: 6f 73 73 69 6c 20 6d 61 79 20 63 68 61 6e 67 65  ossil may change
1b80: 20 74 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c   the default val
1b90: 75 65 0a 6f 66 20 74 68 65 20 76 75 6c 6e 2d 72  ue.of the vuln-r
1ba0: 65 70 6f 72 74 20 73 65 74 74 69 6e 67 20 74 6f  eport setting to
1bb0: 20 22 62 6c 6f 63 6b 22 20 6f 72 20 22 66 61 74   "block" or "fat
1bc0: 61 6c 22 2e 3c 2f 62 3e 20 20 46 6f 73 73 69 6c  al".</b>  Fossil
1bd0: 20 75 73 65 72 73 0a 77 69 74 68 20 63 75 73 74   users.with cust
1be0: 6f 6d 69 7a 65 64 20 54 48 31 20 73 63 72 69 70  omized TH1 scrip
1bf0: 74 73 20 61 72 65 20 65 6e 63 6f 75 72 61 67 65  ts are encourage
1c00: 64 20 74 6f 20 61 75 64 69 74 20 74 68 65 69 72  d to audit their
1c10: 20 63 75 73 74 6f 6d 69 7a 61 74 69 6f 6e 73 0a   customizations.
1c20: 61 6e 64 20 66 69 78 20 61 6e 79 20 70 6f 74 65  and fix any pote
1c30: 6e 74 69 61 6c 20 76 75 6c 6e 65 72 61 62 69 6c  ntial vulnerabil
1c40: 69 74 69 65 73 20 73 6f 6f 6e 2c 20 73 6f 20 61  ities soon, so a
1c50: 73 20 74 6f 20 61 76 6f 69 64 20 62 72 65 61 6b  s to avoid break
1c60: 61 67 65 0a 63 61 75 73 65 64 20 62 79 20 66 75  age.caused by fu
1c70: 74 75 72 65 20 75 70 67 72 61 64 65 73 2e 20 20  ture upgrades.  
1c80: 3c 62 3e 46 75 74 75 72 65 20 76 65 72 73 69 6f  <b>Future versio
1c90: 6e 73 20 6f 66 20 46 6f 73 73 69 6c 20 6d 69 67  ns of Fossil mig
1ca0: 68 74 20 61 6c 73 6f 0a 70 6c 61 63 65 20 61 64  ht also.place ad
1cb0: 64 69 74 69 6f 6e 61 6c 20 72 65 73 74 72 69 63  ditional restric
1cc0: 74 69 6f 6e 73 20 6f 6e 20 74 68 65 20 75 73 65  tions on the use
1cd0: 20 6f 66 20 74 61 69 6e 74 65 64 20 73 74 72 69   of tainted stri
1ce0: 6e 67 73 2e 3c 2f 62 3e 0a 46 6f 72 20 65 78 61  ngs.</b>.For exa
1cf0: 6d 70 6c 65 2c 20 69 74 20 69 73 20 6c 69 6b 65  mple, it is like
1d00: 6c 79 20 74 68 61 74 20 66 75 74 75 72 65 20 76  ly that future v
1d10: 65 72 73 69 6f 6e 73 20 6f 66 20 46 6f 73 73 69  ersions of Fossi
1d20: 6c 20 77 69 6c 6c 20 64 69 73 61 6c 6c 6f 77 0a  l will disallow.
1d30: 75 73 69 6e 67 20 74 61 69 6e 74 65 64 20 73 74  using tainted st
1d40: 72 69 6e 67 73 20 61 73 20 73 63 72 69 70 74 2c  rings as script,
1d50: 20 66 6f 72 20 65 78 61 6d 70 6c 65 20 61 73 20   for example as 
1d60: 74 68 65 20 62 6f 64 79 20 6f 66 20 61 20 22 66  the body of a "f
1d70: 6f 72 22 0a 6c 6f 6f 70 20 6f 72 20 6f 66 20 61  or".loop or of a
1d80: 20 22 70 72 6f 63 22 2e 0a 0a 0a 53 75 6d 6d 61   "proc"....Summa
1d90: 72 79 20 6f 66 20 43 6f 72 65 20 54 48 31 20 43  ry of Core TH1 C
1da0: 6f 6d 6d 61 6e 64 73 0a 2d 2d 2d 2d 2d 2d 2d 2d  ommands.--------
1db0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
1dc0: 2d 2d 2d 2d 0a 0a 54 68 65 20 6f 72 69 67 69 6e  ----..The origin
1dd0: 61 6c 20 54 63 6c 20 6c 61 6e 67 75 61 67 65 20  al Tcl language 
1de0: 28 61 66 74 65 72 20 77 68 69 63 68 20 54 48 31  (after which TH1
1df0: 20 69 73 20 6d 6f 64 65 6c 65 64 29 20 68 61 73   is modeled) has
1e00: 20 61 20 76 65 72 79 20 72 69 63 68 0a 72 65 70   a very rich.rep
1e10: 65 72 74 6f 69 72 65 20 6f 66 20 63 6f 6d 6d 61  ertoire of comma
1e20: 6e 64 73 2e 20 20 54 48 31 2c 20 61 73 20 69 74  nds.  TH1, as it
1e30: 20 69 73 20 64 65 73 69 67 6e 65 64 20 74 6f 20   is designed to 
1e40: 62 65 20 6d 69 6e 69 6d 61 6c 69 73 74 20 61 6e  be minimalist an
1e50: 64 0a 65 6d 62 65 64 64 65 64 20 68 61 73 20 61  d.embedded has a
1e60: 20 67 72 65 61 74 6c 79 20 72 65 64 75 63 65 64   greatly reduced
1e70: 20 63 6f 6d 6d 61 6e 64 20 73 65 74 2e 20 20 54   command set.  T
1e80: 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 62 75 6c  he following bul
1e90: 6c 65 74 73 0a 73 75 6d 6d 61 72 69 7a 65 20 74  lets.summarize t
1ea0: 68 65 20 63 6f 6d 6d 61 6e 64 73 20 61 76 61 69  he commands avai
1eb0: 6c 61 62 6c 65 20 69 6e 20 54 48 31 3a 0a 0a 20  lable in TH1:.. 
1ec0: 20 2a 20 20 61 72 72 61 79 20 65 78 69 73 74 73   *  array exists
1ed0: 20 56 41 52 4e 41 4d 45 0a 20 20 2a 20 20 61 72   VARNAME.  *  ar
1ee0: 72 61 79 20 6e 61 6d 65 73 20 56 41 52 4e 41 4d  ray names VARNAM
1ef0: 45 0a 20 20 2a 20 20 62 72 65 61 6b 0a 20 20 2a  E.  *  break.  *
1f00: 20 20 63 61 74 63 68 20 53 43 52 49 50 54 20 3f    catch SCRIPT ?
1f10: 56 41 52 49 41 42 4c 45 3f 0a 20 20 2a 20 20 63  VARIABLE?.  *  c
1f20: 6f 6e 74 69 6e 75 65 0a 20 20 2a 20 20 65 72 72  ontinue.  *  err
1f30: 6f 72 20 3f 53 54 52 49 4e 47 3f 0a 20 20 2a 20  or ?STRING?.  * 
1f40: 20 65 78 70 72 20 45 58 50 52 0a 20 20 2a 20 20   expr EXPR.  *  
1f50: 66 6f 72 20 49 4e 49 54 2d 53 43 52 49 50 54 20  for INIT-SCRIPT 
1f60: 54 45 53 54 2d 45 58 50 52 20 4e 45 58 54 2d 53  TEST-EXPR NEXT-S
1f70: 43 52 49 50 54 20 42 4f 44 59 2d 53 43 52 49 50  CRIPT BODY-SCRIP
1f80: 54 0a 20 20 2a 20 20 66 6f 72 65 61 63 68 20 56  T.  *  foreach V
1f90: 41 52 49 41 42 4c 45 2d 4c 49 53 54 20 56 41 4c  ARIABLE-LIST VAL
1fa0: 55 45 2d 4c 49 53 54 20 42 4f 44 59 2d 53 43 52  UE-LIST BODY-SCR
1fb0: 49 50 54 0a 20 20 2a 20 20 69 66 20 45 58 50 52  IPT.  *  if EXPR
1fc0: 20 53 43 52 49 50 54 20 28 65 6c 73 65 69 66 20   SCRIPT (elseif 
1fd0: 45 58 50 52 20 53 43 52 49 50 54 29 2a 20 3f 65  EXPR SCRIPT)* ?e
1fe0: 6c 73 65 20 53 43 52 49 50 54 3f 0a 20 20 2a 20  lse SCRIPT?.  * 
1ff0: 20 69 6e 66 6f 20 63 6f 6d 6d 61 6e 64 73 0a 20   info commands. 
2000: 20 2a 20 20 69 6e 66 6f 20 65 78 69 73 74 73 20   *  info exists 
2010: 56 41 52 4e 41 4d 45 0a 20 20 2a 20 20 69 6e 66  VARNAME.  *  inf
2020: 6f 20 76 61 72 73 0a 20 20 2a 20 20 6c 61 70 70  o vars.  *  lapp
2030: 65 6e 64 20 56 41 52 49 41 42 4c 45 20 54 45 52  end VARIABLE TER
2040: 4d 20 2e 2e 2e 0a 20 20 2a 20 20 6c 69 6e 64 65  M ....  *  linde
2050: 78 20 4c 49 53 54 20 49 4e 44 45 58 0a 20 20 2a  x LIST INDEX.  *
2060: 20 20 6c 69 73 74 20 41 52 47 20 2e 2e 2e 0a 20    list ARG .... 
2070: 20 2a 20 20 6c 6c 65 6e 67 74 68 20 4c 49 53 54   *  llength LIST
2080: 0a 20 20 2a 20 20 6c 73 65 61 72 63 68 20 4c 49  .  *  lsearch LI
2090: 53 54 20 53 54 52 49 4e 47 0a 20 20 2a 20 20 70  ST STRING.  *  p
20a0: 72 6f 63 20 4e 41 4d 45 20 41 52 47 2d 4c 49 53  roc NAME ARG-LIS
20b0: 54 20 42 4f 44 59 2d 53 43 52 49 50 54 0a 20 20  T BODY-SCRIPT.  
20c0: 2a 20 20 72 65 6e 61 6d 65 20 4f 4c 44 20 4e 45  *  rename OLD NE
20d0: 57 0a 20 20 2a 20 20 72 65 74 75 72 6e 20 3f 2d  W.  *  return ?-
20e0: 63 6f 64 65 20 43 4f 44 45 3f 20 3f 56 41 4c 55  code CODE? ?VALU
20f0: 45 3f 0a 20 20 2a 20 20 73 65 74 20 56 41 52 4e  E?.  *  set VARN
2100: 41 4d 45 20 56 41 4c 55 45 0a 20 20 2a 20 20 73  AME VALUE.  *  s
2110: 74 72 69 6e 67 20 63 6f 6d 70 61 72 65 20 53 54  tring compare ST
2120: 52 31 20 53 54 52 32 0a 20 20 2a 20 20 73 74 72  R1 STR2.  *  str
2130: 69 6e 67 20 66 69 72 73 74 20 4e 45 45 44 4c 45  ing first NEEDLE
2140: 20 48 41 59 53 54 41 43 4b 20 3f 53 54 41 52 54   HAYSTACK ?START
2150: 2d 49 4e 44 45 58 3f 0a 20 20 2a 20 20 73 74 72  -INDEX?.  *  str
2160: 69 6e 67 20 69 6e 64 65 78 20 53 54 52 49 4e 47  ing index STRING
2170: 20 49 4e 44 45 58 0a 20 20 2a 20 20 73 74 72 69   INDEX.  *  stri
2180: 6e 67 20 69 73 20 43 4c 41 53 53 20 53 54 52 49  ng is CLASS STRI
2190: 4e 47 0a 20 20 2a 20 20 73 74 72 69 6e 67 20 6c  NG.  *  string l
21a0: 61 73 74 20 4e 45 45 44 4c 45 20 48 41 59 53 54  ast NEEDLE HAYST
21b0: 41 43 4b 20 3f 53 54 41 52 54 2d 49 4e 44 45 58  ACK ?START-INDEX
21c0: 3f 0a 20 20 2a 20 20 73 74 72 69 6e 67 20 6d 61  ?.  *  string ma
21d0: 74 63 68 20 50 41 54 54 45 52 4e 20 53 54 52 49  tch PATTERN STRI
21e0: 4e 47 0a 20 20 2a 20 20 73 74 72 69 6e 67 20 6c  NG.  *  string l
21f0: 65 6e 67 74 68 20 53 54 52 49 4e 47 0a 20 20 2a  ength STRING.  *
2200: 20 20 73 74 72 69 6e 67 20 72 61 6e 67 65 20 53    string range S
2210: 54 52 49 4e 47 20 46 49 52 53 54 20 4c 41 53 54  TRING FIRST LAST
2220: 0a 20 20 2a 20 20 73 74 72 69 6e 67 20 72 65 70  .  *  string rep
2230: 65 61 74 20 53 54 52 49 4e 47 20 43 4f 55 4e 54  eat STRING COUNT
2240: 0a 20 20 2a 20 20 73 74 72 69 6e 67 20 74 72 69  .  *  string tri
2250: 6d 20 53 54 52 49 4e 47 0a 20 20 2a 20 20 73 74  m STRING.  *  st
2260: 72 69 6e 67 20 74 72 69 6d 6c 65 66 74 20 53 54  ring trimleft ST
2270: 52 49 4e 47 0a 20 20 2a 20 20 73 74 72 69 6e 67  RING.  *  string
2280: 20 74 72 69 6d 72 69 67 68 74 20 53 54 52 49 4e   trimright STRIN
2290: 47 0a 20 20 2a 20 20 75 6e 73 65 74 20 56 41 52  G.  *  unset VAR
22a0: 4e 41 4d 45 0a 20 20 2a 20 20 75 70 6c 65 76 65  NAME.  *  upleve
22b0: 6c 20 3f 4c 45 56 45 4c 3f 20 53 43 52 49 50 54  l ?LEVEL? SCRIPT
22c0: 0a 20 20 2a 20 20 75 70 76 61 72 20 3f 46 52 41  .  *  upvar ?FRA
22d0: 4d 45 3f 20 4f 54 48 45 52 56 41 52 20 4d 59 56  ME? OTHERVAR MYV
22e0: 41 52 20 3f 4f 54 48 45 52 56 41 52 20 4d 59 56  AR ?OTHERVAR MYV
22f0: 41 52 3f 0a 0a 41 6c 6c 20 6f 66 20 74 68 65 20  AR?..All of the 
2300: 61 62 6f 76 65 20 63 6f 6d 6d 61 6e 64 73 20 77  above commands w
2310: 6f 72 6b 20 61 73 20 69 6e 20 74 68 65 20 6f 72  ork as in the or
2320: 69 67 69 6e 61 6c 20 54 63 6c 2e 20 20 52 65 66  iginal Tcl.  Ref
2330: 65 72 20 74 6f 20 74 68 65 0a 3c 61 20 68 72 65  er to the.<a hre
2340: 66 3d 22 68 74 74 70 73 3a 2f 2f 77 77 77 2e 74  f="https://www.t
2350: 63 6c 2d 6c 61 6e 67 2e 6f 72 67 2f 6d 61 6e 2f  cl-lang.org/man/
2360: 74 63 6c 2f 63 6f 6e 74 65 6e 74 73 2e 68 74 6d  tcl/contents.htm
2370: 22 3e 54 63 6c 20 64 6f 63 75 6d 65 6e 74 61 74  ">Tcl documentat
2380: 69 6f 6e 3c 2f 61 3e 0a 66 6f 72 20 64 65 74 61  ion</a>.for deta
2390: 69 6c 73 2e 0a 0a 53 75 6d 6d 61 72 79 20 6f 66  ils...Summary of
23a0: 20 43 6f 72 65 20 54 48 31 20 56 61 72 69 61 62   Core TH1 Variab
23b0: 6c 65 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  les.------------
23c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
23d0: 2d 0a 0a 20 20 2a 20 20 74 63 6c 5c 5f 70 6c 61  -..  *  tcl\_pla
23e0: 74 66 6f 72 6d 28 65 6e 67 69 6e 65 29 20 2d 2d  tform(engine) --
23f0: 20 5f 54 68 69 73 20 77 69 6c 6c 20 61 6c 77 61   _This will alwa
2400: 79 73 20 68 61 76 65 20 74 68 65 20 76 61 6c 75  ys have the valu
2410: 65 20 22 54 48 31 22 2e 5f 0a 20 20 2a 20 20 74  e "TH1"._.  *  t
2420: 63 6c 5c 5f 70 6c 61 74 66 6f 72 6d 28 70 6c 61  cl\_platform(pla
2430: 74 66 6f 72 6d 29 20 2d 2d 20 5f 54 68 69 73 20  tform) -- _This 
2440: 77 69 6c 6c 20 68 61 76 65 20 74 68 65 20 76 61  will have the va
2450: 6c 75 65 20 22 77 69 6e 64 6f 77 73 22 20 6f 72  lue "windows" or
2460: 20 22 75 6e 69 78 22 2e 5f 0a 20 20 2a 20 20 74   "unix"._.  *  t
2470: 68 5c 5f 73 74 61 63 6b 5c 5f 74 72 61 63 65 20  h\_stack\_trace 
2480: 2d 2d 20 5f 54 68 69 73 20 77 69 6c 6c 20 63 6f  -- _This will co
2490: 6e 74 61 69 6e 20 65 72 72 6f 72 20 73 74 61 63  ntain error stac
24a0: 6b 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 2e 5f 0a  k information._.
24b0: 0a 54 48 31 20 45 78 74 65 6e 64 65 64 20 43 6f  .TH1 Extended Co
24c0: 6d 6d 61 6e 64 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  mmands.---------
24d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 54 68  ------------..Th
24e0: 65 72 65 20 61 72 65 20 6d 61 6e 79 20 6e 65 77  ere are many new
24f0: 20 63 6f 6d 6d 61 6e 64 73 20 61 64 64 65 64 20   commands added 
2500: 74 6f 20 54 48 31 20 61 6e 64 20 75 73 65 64 20  to TH1 and used 
2510: 74 6f 20 61 63 63 65 73 73 20 74 68 65 20 73 70  to access the sp
2520: 65 63 69 61 6c 0a 66 65 61 74 75 72 65 73 20 6f  ecial.features o
2530: 66 20 46 6f 73 73 69 6c 2e 20 20 54 68 65 20 66  f Fossil.  The f
2540: 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20 73 75  ollowing is a su
2550: 6d 6d 61 72 79 20 6f 66 20 74 68 65 20 65 78 74  mmary of the ext
2560: 65 6e 64 65 64 20 63 6f 6d 6d 61 6e 64 73 3a 0a  ended commands:.
2570: 0a 20 20 2a 20 20 5b 61 6e 6f 6e 63 61 70 5d 28  .  *  [anoncap](
2580: 23 61 6e 6f 6e 63 61 70 29 0a 20 20 2a 20 20 5b  #anoncap).  *  [
2590: 61 6e 79 63 61 70 5d 28 23 61 6e 79 63 61 70 29  anycap](#anycap)
25a0: 0a 20 20 2a 20 20 5b 61 72 74 69 66 61 63 74 5d  .  *  [artifact]
25b0: 28 23 61 72 74 69 66 61 63 74 29 0a 20 20 2a 20  (#artifact).  * 
25c0: 20 5b 62 75 69 6c 74 69 6e 5f 72 65 71 75 65 73   [builtin_reques
25d0: 74 5f 6a 73 5d 28 23 62 69 72 65 71 6a 73 29 0a  t_js](#bireqjs).
25e0: 20 20 2a 20 20 5b 63 61 70 65 78 70 72 5d 28 23    *  [capexpr](#
25f0: 63 61 70 65 78 70 72 29 0a 20 20 2a 20 20 5b 63  capexpr).  *  [c
2600: 61 70 74 75 72 65 54 68 31 5d 28 23 63 61 70 74  aptureTh1](#capt
2610: 75 72 65 54 68 31 29 0a 20 20 2a 20 20 5b 63 67  ureTh1).  *  [cg
2620: 69 48 65 61 64 65 72 4c 69 6e 65 5d 28 23 63 67  iHeaderLine](#cg
2630: 69 48 65 61 64 65 72 4c 69 6e 65 29 0a 20 20 2a  iHeaderLine).  *
2640: 20 20 5b 63 68 65 63 6b 6f 75 74 5d 28 23 63 68    [checkout](#ch
2650: 65 63 6b 6f 75 74 29 0a 20 20 2a 20 20 5b 63 6f  eckout).  *  [co
2660: 6d 62 6f 62 6f 78 5d 28 23 63 6f 6d 62 6f 62 6f  mbobox](#combobo
2670: 78 29 0a 20 20 2a 20 20 5b 63 6f 70 79 62 74 6e  x).  *  [copybtn
2680: 5d 28 23 63 6f 70 79 62 74 6e 29 0a 20 20 2a 20  ](#copybtn).  * 
2690: 20 5b 64 61 74 65 5d 28 23 64 61 74 65 29 0a 20   [date](#date). 
26a0: 20 2a 20 20 5b 64 65 63 6f 72 61 74 65 5d 28 23   *  [decorate](#
26b0: 64 65 63 6f 72 61 74 65 29 0a 20 20 2a 20 20 5b  decorate).  *  [
26c0: 64 65 66 48 65 61 64 65 72 5d 28 23 64 65 66 48  defHeader](#defH
26d0: 65 61 64 65 72 29 0a 20 20 2a 20 20 5b 64 69 72  eader).  *  [dir
26e0: 5d 28 23 64 69 72 29 0a 20 20 2a 20 20 5b 65 6e  ](#dir).  *  [en
26f0: 61 62 6c 65 5c 5f 6f 75 74 70 75 74 5d 28 23 65  able\_output](#e
2700: 6e 61 62 6c 65 5f 6f 75 74 70 75 74 29 0a 20 20  nable_output).  
2710: 2a 20 20 5b 65 6e 63 6f 64 65 36 34 5d 28 23 65  *  [encode64](#e
2720: 6e 63 6f 64 65 36 34 29 0a 20 20 2a 20 20 5b 67  ncode64).  *  [g
2730: 65 74 50 61 72 61 6d 65 74 65 72 5d 28 23 67 65  etParameter](#ge
2740: 74 50 61 72 61 6d 65 74 65 72 29 0a 20 20 2a 20  tParameter).  * 
2750: 20 5b 67 6c 6f 62 5c 5f 6d 61 74 63 68 5d 28 23   [glob\_match](#
2760: 67 6c 6f 62 5f 6d 61 74 63 68 29 0a 20 20 2a 20  glob_match).  * 
2770: 20 5b 67 6c 6f 62 61 6c 53 74 61 74 65 5d 28 23   [globalState](#
2780: 67 6c 6f 62 61 6c 53 74 61 74 65 29 0a 20 20 2a  globalState).  *
2790: 20 20 5b 68 61 73 63 61 70 5d 28 23 68 61 73 63    [hascap](#hasc
27a0: 61 70 29 0a 20 20 2a 20 20 5b 68 61 73 66 65 61  ap).  *  [hasfea
27b0: 74 75 72 65 5d 28 23 68 61 73 66 65 61 74 75 72  ture](#hasfeatur
27c0: 65 29 0a 20 20 2a 20 20 5b 68 74 6d 6c 5d 28 23  e).  *  [html](#
27d0: 68 74 6d 6c 29 0a 20 20 2a 20 20 5b 68 74 6d 6c  html).  *  [html
27e0: 69 7a 65 5d 28 23 68 74 6d 6c 69 7a 65 29 0a 20  ize](#htmlize). 
27f0: 20 2a 20 20 5b 68 74 74 70 5d 28 23 68 74 74 70   *  [http](#http
2800: 29 0a 20 20 2a 20 20 5b 68 74 74 70 69 7a 65 5d  ).  *  [httpize]
2810: 28 23 68 74 74 70 69 7a 65 29 0a 20 20 2a 20 20  (#httpize).  *  
2820: 5b 69 6e 73 65 72 74 43 73 72 66 5d 28 23 69 6e  [insertCsrf](#in
2830: 73 65 72 74 43 73 72 66 29 0a 20 20 2a 20 20 5b  sertCsrf).  *  [
2840: 6c 69 6e 65 63 6f 75 6e 74 5d 28 23 6c 69 6e 65  linecount](#line
2850: 63 6f 75 6e 74 29 0a 20 20 2a 20 20 5b 6d 61 72  count).  *  [mar
2860: 6b 64 6f 77 6e 5d 28 23 6d 61 72 6b 64 6f 77 6e  kdown](#markdown
2870: 29 0a 20 20 2a 20 20 5b 6e 6f 6e 63 65 5d 28 23  ).  *  [nonce](#
2880: 6e 6f 6e 63 65 29 0a 20 20 2a 20 20 5b 70 75 74  nonce).  *  [put
2890: 73 5d 28 23 70 75 74 73 29 0a 20 20 2a 20 20 5b  s](#puts).  *  [
28a0: 71 75 65 72 79 5d 28 23 71 75 65 72 79 29 0a 20  query](#query). 
28b0: 20 2a 20 20 5b 72 61 6e 64 68 65 78 5d 28 23 72   *  [randhex](#r
28c0: 61 6e 64 68 65 78 29 0a 20 20 2a 20 20 5b 72 65  andhex).  *  [re
28d0: 64 69 72 65 63 74 5d 28 23 72 65 64 69 72 65 63  direct](#redirec
28e0: 74 29 0a 20 20 2a 20 20 5b 72 65 67 65 78 70 5d  t).  *  [regexp]
28f0: 28 23 72 65 67 65 78 70 29 0a 20 20 2a 20 20 5b  (#regexp).  *  [
2900: 72 65 69 6e 69 74 69 61 6c 69 7a 65 5d 28 23 72  reinitialize](#r
2910: 65 69 6e 69 74 69 61 6c 69 7a 65 29 0a 20 20 2a  einitialize).  *
2920: 20 20 5b 72 65 6e 64 65 72 5d 28 23 72 65 6e 64    [render](#rend
2930: 65 72 29 0a 20 20 2a 20 20 5b 72 65 70 6f 73 69  er).  *  [reposi
2940: 74 6f 72 79 5d 28 23 72 65 70 6f 73 69 74 6f 72  tory](#repositor
2950: 79 29 0a 20 20 2a 20 20 5b 73 65 61 72 63 68 61  y).  *  [searcha
2960: 62 6c 65 5d 28 23 73 65 61 72 63 68 61 62 6c 65  ble](#searchable
2970: 29 0a 20 20 2a 20 20 5b 73 65 74 50 61 72 61 6d  ).  *  [setParam
2980: 65 74 65 72 5d 28 23 73 65 74 50 61 72 61 6d 65  eter](#setParame
2990: 74 65 72 29 0a 20 20 2a 20 20 5b 73 65 74 74 69  ter).  *  [setti
29a0: 6e 67 5d 28 23 73 65 74 74 69 6e 67 29 0a 20 20  ng](#setting).  
29b0: 2a 20 20 5b 73 74 69 6d 65 5d 28 23 73 74 69 6d  *  [stime](#stim
29c0: 65 29 0a 20 20 2a 20 20 5b 73 74 79 6c 65 48 65  e).  *  [styleHe
29d0: 61 64 65 72 5d 28 23 73 74 79 6c 65 48 65 61 64  ader](#styleHead
29e0: 65 72 29 0a 20 20 2a 20 20 5b 73 74 79 6c 65 46  er).  *  [styleF
29f0: 6f 6f 74 65 72 5d 28 23 73 74 79 6c 65 46 6f 6f  ooter](#styleFoo
2a00: 74 65 72 29 0a 20 20 2a 20 20 5b 73 74 79 6c 65  ter).  *  [style
2a10: 53 63 72 69 70 74 5d 28 23 73 74 79 6c 65 53 63  Script](#styleSc
2a20: 72 69 70 74 29 0a 20 20 2a 20 20 5b 73 75 62 6d  ript).  *  [subm
2a30: 65 6e 75 5d 28 23 73 75 62 6d 65 6e 75 29 0a 20  enu](#submenu). 
2a40: 20 2a 20 20 5b 74 61 69 6e 74 5d 28 23 74 61 69   *  [taint](#tai
2a50: 6e 74 43 6d 64 29 0a 20 20 2a 20 20 5b 74 63 6c  ntCmd).  *  [tcl
2a60: 45 76 61 6c 5d 28 23 74 63 6c 45 76 61 6c 29 0a  Eval](#tclEval).
2a70: 20 20 2a 20 20 5b 74 63 6c 45 78 70 72 5d 28 23    *  [tclExpr](#
2a80: 74 63 6c 45 78 70 72 29 0a 20 20 2a 20 20 5b 74  tclExpr).  *  [t
2a90: 63 6c 49 6e 76 6f 6b 65 5d 28 23 74 63 6c 49 6e  clInvoke](#tclIn
2aa0: 76 6f 6b 65 29 0a 20 20 2a 20 20 5b 74 63 6c 49  voke).  *  [tclI
2ab0: 73 53 61 66 65 5d 28 23 74 63 6c 49 73 53 61 66  sSafe](#tclIsSaf
2ac0: 65 29 0a 20 20 2a 20 20 5b 74 63 6c 4d 61 6b 65  e).  *  [tclMake
2ad0: 53 61 66 65 5d 28 23 74 63 6c 4d 61 6b 65 53 61  Safe](#tclMakeSa
2ae0: 66 65 29 0a 20 20 2a 20 20 5b 74 63 6c 52 65 61  fe).  *  [tclRea
2af0: 64 79 5d 28 23 74 63 6c 52 65 61 64 79 29 0a 20  dy](#tclReady). 
2b00: 20 2a 20 20 5b 74 72 61 63 65 5d 28 23 74 72 61   *  [trace](#tra
2b10: 63 65 29 0a 20 20 2a 20 20 5b 75 6e 74 61 69 6e  ce).  *  [untain
2b20: 74 5d 28 23 75 6e 74 61 69 6e 74 43 6d 64 29 0a  t](#untaintCmd).
2b30: 20 20 2a 20 20 5b 75 6e 76 65 72 73 69 6f 6e 65    *  [unversione
2b40: 64 20 63 6f 6e 74 65 6e 74 5d 28 23 75 6e 76 65  d content](#unve
2b50: 72 73 69 6f 6e 65 64 5f 63 6f 6e 74 65 6e 74 29  rsioned_content)
2b60: 0a 20 20 2a 20 20 5b 75 6e 76 65 72 73 69 6f 6e  .  *  [unversion
2b70: 65 64 20 6c 69 73 74 5d 28 23 75 6e 76 65 72 73  ed list](#unvers
2b80: 69 6f 6e 65 64 5f 6c 69 73 74 29 0a 20 20 2a 20  ioned_list).  * 
2b90: 20 5b 75 74 69 6d 65 5d 28 23 75 74 69 6d 65 29   [utime](#utime)
2ba0: 0a 20 20 2a 20 20 5b 76 65 72 69 66 79 43 73 72  .  *  [verifyCsr
2bb0: 66 5d 28 23 76 65 72 69 66 79 43 73 72 66 29 0a  f](#verifyCsrf).
2bc0: 20 20 2a 20 20 5b 76 65 72 69 66 79 4c 6f 67 69    *  [verifyLogi
2bd0: 6e 5d 28 23 76 65 72 69 66 79 4c 6f 67 69 6e 29  n](#verifyLogin)
2be0: 0a 20 20 2a 20 20 5b 77 69 6b 69 5d 28 23 77 69  .  *  [wiki](#wi
2bf0: 6b 69 29 0a 20 20 2a 20 20 5b 77 69 6b 69 5f 61  ki).  *  [wiki_a
2c00: 73 73 6f 63 5d 28 23 77 69 6b 69 5f 61 73 73 6f  ssoc](#wiki_asso
2c10: 63 29 0a 0a 45 61 63 68 20 6f 66 20 74 68 65 20  c)..Each of the 
2c20: 63 6f 6d 6d 61 6e 64 73 20 61 62 6f 76 65 20 69  commands above i
2c30: 73 20 64 6f 63 75 6d 65 6e 74 65 64 20 62 79 20  s documented by 
2c40: 61 20 62 6c 6f 63 6b 20 63 6f 6d 6d 65 6e 74 20  a block comment 
2c50: 61 62 6f 76 65 20 74 68 65 69 72 0a 69 6d 70 6c  above their.impl
2c60: 65 6d 65 6e 74 61 74 69 6f 6e 20 69 6e 20 74 68  ementation in th
2c70: 65 20 74 68 5c 5f 6d 61 69 6e 2e 63 20 6f 72 20  e th\_main.c or 
2c80: 74 68 5c 5f 74 63 6c 2e 63 20 73 6f 75 72 63 65  th\_tcl.c source
2c90: 20 66 69 6c 65 73 2e 0a 0a 41 6c 6c 20 63 6f 6d   files...All com
2ca0: 6d 61 6e 64 73 20 73 74 61 72 74 69 6e 67 20 77  mands starting w
2cb0: 69 74 68 20 22 74 63 6c 22 2c 20 77 69 74 68 20  ith "tcl", with 
2cc0: 74 68 65 20 65 78 63 65 70 74 69 6f 6e 20 6f 66  the exception of
2cd0: 20 22 74 63 6c 52 65 61 64 79 22 2c 0a 72 65 71   "tclReady",.req
2ce0: 75 69 72 65 20 74 68 65 20 54 63 6c 20 69 6e 74  uire the Tcl int
2cf0: 65 67 72 61 74 69 6f 6e 20 73 75 62 73 79 73 74  egration subsyst
2d00: 65 6d 20 62 65 20 69 6e 63 6c 75 64 65 64 20 61  em be included a
2d10: 74 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 2e 0a  t compile-time..
2d20: 41 64 64 69 74 69 6f 6e 61 6c 6c 79 2c 20 74 68  Additionally, th
2d30: 65 20 22 74 63 6c 22 20 72 65 70 6f 73 69 74 6f  e "tcl" reposito
2d40: 72 79 20 73 65 74 74 69 6e 67 20 6d 75 73 74 20  ry setting must 
2d50: 62 65 20 65 6e 61 62 6c 65 64 20 61 74 20 72 75  be enabled at ru
2d60: 6e 74 69 6d 65 0a 69 6e 20 6f 72 64 65 72 20 74  ntime.in order t
2d70: 6f 20 73 75 63 63 65 73 73 66 75 6c 6c 79 20 6d  o successfully m
2d80: 61 6b 65 20 75 73 65 20 6f 66 20 74 68 65 73 65  ake use of these
2d90: 20 63 6f 6d 6d 61 6e 64 73 2e 0a 0a 3c 61 20 69   commands...<a i
2da0: 64 3d 22 61 6e 6f 6e 63 61 70 22 3e 3c 2f 61 3e  d="anoncap"></a>
2db0: 54 48 31 20 61 6e 6f 6e 63 61 70 20 43 6f 6d 6d  TH1 anoncap Comm
2dc0: 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  and.------------
2dd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2de0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 44  -------------..D
2df0: 65 70 72 65 63 61 74 65 64 3a 20 70 72 65 66 65  eprecated: prefe
2e00: 72 20 5b 63 61 70 65 78 70 72 5d 28 23 63 61 70  r [capexpr](#cap
2e10: 65 78 70 72 29 20 69 6e 73 74 65 61 64 2e 0a 0a  expr) instead...
2e20: 20 20 2a 20 20 61 6e 6f 6e 63 61 70 20 53 54 52    *  anoncap STR
2e30: 49 4e 47 2e 2e 2e 0a 0a 52 65 74 75 72 6e 73 20  ING.....Returns 
2e40: 74 72 75 65 20 69 66 20 74 68 65 20 61 6e 6f 6e  true if the anon
2e50: 79 6d 6f 75 73 20 75 73 65 72 20 68 61 73 20 61  ymous user has a
2e60: 6c 6c 20 6f 66 20 74 68 65 20 63 61 70 61 62 69  ll of the capabi
2e70: 6c 69 74 69 65 73 20 6c 69 73 74 65 64 0a 69 6e  lities listed.in
2e80: 20 53 54 52 49 4e 47 2e 0a 0a 3c 61 20 69 64 3d   STRING...<a id=
2e90: 22 61 6e 79 63 61 70 22 3e 3c 2f 61 3e 54 48 31  "anycap"></a>TH1
2ea0: 20 61 6e 79 63 61 70 20 43 6f 6d 6d 61 6e 64 0a   anycap Command.
2eb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ec0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2ed0: 2d 2d 2d 2d 2d 2d 2d 0a 0a 44 65 70 72 65 63 61  -------..Depreca
2ee0: 74 65 64 3a 20 70 72 65 66 65 72 20 5b 63 61 70  ted: prefer [cap
2ef0: 65 78 70 72 5d 28 23 63 61 70 65 78 70 72 29 20  expr](#capexpr) 
2f00: 69 6e 73 74 65 61 64 2e 0a 0a 20 20 2a 20 20 61  instead...  *  a
2f10: 6e 79 63 61 70 20 53 54 52 49 4e 47 0a 0a 52 65  nycap STRING..Re
2f20: 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74 68  turns true if th
2f30: 65 20 63 75 72 72 65 6e 74 20 75 73 65 72 20 75  e current user u
2f40: 73 65 72 20 68 61 73 20 61 6e 79 20 6f 6e 65 20  ser has any one 
2f50: 6f 66 20 74 68 65 20 63 61 70 61 62 69 6c 69 74  of the capabilit
2f60: 69 65 73 0a 6c 69 73 74 65 64 20 69 6e 20 53 54  ies.listed in ST
2f70: 52 49 4e 47 2e 0a 0a 3c 61 20 69 64 3d 22 61 72  RING...<a id="ar
2f80: 74 69 66 61 63 74 22 3e 3c 2f 61 3e 54 48 31 20  tifact"></a>TH1 
2f90: 61 72 74 69 66 61 63 74 20 43 6f 6d 6d 61 6e 64  artifact Command
2fa0: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
2fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
2fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20  ------------..  
2fd0: 2a 20 20 61 72 74 69 66 61 63 74 20 49 44 20 3f  *  artifact ID ?
2fe0: 46 49 4c 45 4e 41 4d 45 3f 0a 0a 41 74 74 65 6d  FILENAME?..Attem
2ff0: 70 74 73 20 74 6f 20 6c 6f 63 61 74 65 20 74 68  pts to locate th
3000: 65 20 73 70 65 63 69 66 69 65 64 20 61 72 74 69  e specified arti
3010: 66 61 63 74 20 61 6e 64 20 72 65 74 75 72 6e 20  fact and return 
3020: 69 74 73 20 63 6f 6e 74 65 6e 74 73 2e 20 20 41  its contents.  A
3030: 6e 0a 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  n.error is gener
3040: 61 74 65 64 20 69 66 20 74 68 65 20 72 65 70 6f  ated if the repo
3050: 73 69 74 6f 72 79 20 69 73 20 6e 6f 74 20 6f 70  sitory is not op
3060: 65 6e 20 6f 72 20 74 68 65 20 61 72 74 69 66 61  en or the artifa
3070: 63 74 20 63 61 6e 6e 6f 74 0a 62 65 20 66 6f 75  ct cannot.be fou
3080: 6e 64 2e 0a 0a 0a 3c 61 20 69 64 3d 22 62 69 72  nd....<a id="bir
3090: 65 71 6a 73 22 3e 3c 2f 61 3e 54 48 31 20 62 75  eqjs"></a>TH1 bu
30a0: 69 6c 74 69 6e 5f 72 65 71 75 65 73 74 5f 6a 73  iltin_request_js
30b0: 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d   Command.-------
30c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
30e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a  -----------..  *
30f0: 20 20 62 75 69 6c 74 69 6e 5f 72 65 71 75 65 73    builtin_reques
3100: 74 5f 6a 73 20 4e 41 4d 45 0a 0a 4e 41 4d 45 20  t_js NAME..NAME 
3110: 6d 75 73 74 20 62 65 20 74 68 65 20 6e 61 6d 65  must be the name
3120: 20 6f 66 20 6f 6e 65 20 6f 66 20 74 68 65 0a 5b   of one of the.[
3130: 62 75 69 6c 74 2d 69 6e 20 6a 61 76 61 73 63 72  built-in javascr
3140: 69 70 74 20 73 6f 75 72 63 65 20 66 69 6c 65 73  ipt source files
3150: 5d 28 2f 64 69 72 3f 63 69 3d 74 72 75 6e 6b 26  ](/dir?ci=trunk&
3160: 74 79 70 65 3d 66 6c 61 74 26 6e 61 6d 65 3d 73  type=flat&name=s
3170: 72 63 26 72 65 3d 6a 73 24 29 2e 0a 54 68 69 73  rc&re=js$)..This
3180: 20 63 6f 6d 6d 61 6e 64 20 63 61 75 73 65 73 20   command causes 
3190: 74 68 61 74 20 6a 61 76 61 73 63 72 69 70 74 20  that javascript 
31a0: 66 69 6c 65 20 74 6f 20 62 65 20 61 70 70 65 6e  file to be appen
31b0: 64 65 64 20 74 6f 20 74 68 65 20 64 65 6c 69 76  ded to the deliv
31c0: 65 72 65 64 0a 64 6f 63 75 6d 65 6e 74 2e 0a 0a  ered.document...
31d0: 0a 0a 3c 61 20 69 64 3d 22 63 61 70 65 78 70 72  ..<a id="capexpr
31e0: 22 3e 3c 2f 61 3e 54 48 31 20 63 61 70 65 78 70  "></a>TH1 capexp
31f0: 72 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d  r Command.------
3200: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3210: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3220: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
3230: 0a 20 20 2a 20 20 63 61 70 65 78 70 72 20 43 41  .  *  capexpr CA
3240: 50 41 42 49 4c 49 54 59 2d 45 58 50 52 0a 0a 54  PABILITY-EXPR..T
3250: 68 65 20 63 61 70 61 62 69 6c 69 74 79 20 65 78  he capability ex
3260: 70 72 65 73 73 69 6f 6e 20 69 73 20 61 20 6c 69  pression is a li
3270: 73 74 2e 20 45 61 63 68 20 74 65 72 6d 20 6f 66  st. Each term of
3280: 20 74 68 65 20 6c 69 73 74 20 69 73 20 61 0a 63   the list is a.c
3290: 6c 75 73 74 65 72 20 6f 66 20 5b 63 61 70 61 62  luster of [capab
32a0: 69 6c 69 74 79 20 6c 65 74 74 65 72 73 5d 28 2e  ility letters](.
32b0: 2f 63 61 70 73 2f 72 65 66 2e 68 74 6d 6c 29 2e  /caps/ref.html).
32c0: 0a 54 68 65 20 6f 76 65 72 61 6c 6c 20 65 78 70  .The overall exp
32d0: 72 65 73 73 69 6f 6e 20 69 73 20 74 72 75 65 20  ression is true 
32e0: 69 66 20 61 6e 79 0a 6f 6e 65 20 74 65 72 6d 20  if any.one term 
32f0: 69 73 20 74 72 75 65 2e 20 41 20 73 69 6e 67 6c  is true. A singl
3300: 65 20 74 65 72 6d 20 69 73 20 74 72 75 65 20 69  e term is true i
3310: 66 20 61 6c 6c 20 6c 65 74 74 65 72 73 20 77 69  f all letters wi
3320: 74 68 69 6e 20 74 68 61 74 0a 74 65 72 6d 20 61  thin that.term a
3330: 72 65 20 74 72 75 65 2e 20 4f 72 2c 20 69 66 20  re true. Or, if 
3340: 74 68 65 20 74 65 72 6d 20 62 65 67 69 6e 73 20  the term begins 
3350: 77 69 74 68 20 22 21 22 2c 20 74 68 65 6e 20 74  with "!", then t
3360: 68 65 20 74 65 72 6d 20 69 73 20 74 72 75 65 0a  he term is true.
3370: 69 66 20 6e 6f 6e 65 20 6f 66 20 74 68 65 20 74  if none of the t
3380: 65 72 6d 73 20 61 72 65 20 74 72 75 65 2e 20 4f  erms are true. O
3390: 72 2c 20 69 66 20 74 68 65 20 74 65 72 6d 20 62  r, if the term b
33a0: 65 67 69 6e 73 20 77 69 74 68 20 22 40 22 20 74  egins with "@" t
33b0: 68 65 6e 0a 74 68 65 20 74 65 72 6d 20 69 73 20  hen.the term is 
33c0: 74 72 75 65 20 69 66 20 61 6c 6c 20 6f 66 20 74  true if all of t
33d0: 68 65 20 63 61 70 61 62 69 6c 69 74 79 20 6c 65  he capability le
33e0: 74 74 65 72 73 20 69 6e 20 74 68 61 74 20 74 65  tters in that te
33f0: 72 6d 20 61 72 65 0a 61 76 61 69 6c 61 62 6c 65  rm are.available
3400: 20 74 6f 20 74 68 65 20 22 61 6e 6f 6e 79 6d 6f   to the "anonymo
3410: 75 73 22 20 75 73 65 72 2e 20 4f 72 2c 20 69 66  us" user. Or, if
3420: 20 74 68 65 20 74 65 72 6d 20 69 73 20 22 2a 22   the term is "*"
3430: 20 74 68 65 6e 20 69 74 20 69 73 0a 61 6c 77 61   then it is.alwa
3440: 79 73 20 74 72 75 65 2e 0a 0a 45 78 61 6d 70 6c  ys true...Exampl
3450: 65 73 3a 0a 0a 60 60 60 0a 63 61 70 65 78 70 72  es:..```.capexpr
3460: 20 7b 6a 20 6f 20 72 7d 20 20 20 20 20 20 20 20   {j o r}        
3470: 20 20 20 20 20 20 20 54 72 75 65 20 69 66 20 61         True if a
3480: 6e 79 20 6f 6e 65 20 6f 66 20 6a 2c 20 6f 2c 20  ny one of j, o, 
3490: 6f 72 20 72 20 61 72 65 20 61 76 61 69 6c 61 62  or r are availab
34a0: 6c 65 0a 63 61 70 65 78 70 72 20 7b 6f 68 7d 20  le.capexpr {oh} 
34b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
34c0: 20 54 72 75 65 20 69 66 20 62 6f 74 68 20 6f 20   True if both o 
34d0: 61 6e 64 20 68 20 61 72 65 20 61 76 61 69 6c 61  and h are availa
34e0: 62 6c 65 0a 63 61 70 65 78 70 72 20 7b 40 32 20  ble.capexpr {@2 
34f0: 40 33 20 34 20 35 20 36 7d 20 20 20 20 20 20 20  @3 4 5 6}       
3500: 20 20 32 20 6f 72 20 33 20 61 76 61 69 6c 61 62    2 or 3 availab
3510: 6c 65 20 66 6f 72 20 61 6e 6f 6e 79 6d 6f 75 73  le for anonymous
3520: 20 6f 72 20 6f 6e 65 20 6f 66 0a 20 20 20 20 20   or one of.     
3530: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
3540: 20 20 20 20 20 20 20 20 20 34 2c 20 35 20 6f 72           4, 5 or
3550: 20 36 20 69 73 20 61 76 61 69 6c 61 62 6c 65 20   6 is available 
3560: 66 6f 72 20 74 68 65 20 75 73 65 72 0a 63 61 70  for the user.cap
3570: 65 78 70 72 20 4c 20 20 20 20 20 20 20 20 20 20  expr L          
3580: 20 20 20 20 20 20 20 20 20 20 20 54 72 75 65 20             True 
3590: 69 66 20 74 68 65 20 75 73 65 72 20 69 73 20 6c  if the user is l
35a0: 6f 67 67 65 64 20 69 6e 0a 63 61 70 65 78 70 72  ogged in.capexpr
35b0: 20 21 4c 20 20 20 20 20 20 20 20 20 20 20 20 20   !L             
35c0: 20 20 20 20 20 20 20 54 72 75 65 20 69 66 20 74         True if t
35d0: 68 65 20 75 73 65 72 20 69 73 20 6e 6f 74 20 6c  he user is not l
35e0: 6f 67 67 65 64 20 69 6e 0a 60 60 60 0a 0a 54 68  ogged in.```..Th
35f0: 65 20 60 4c 60 20 70 73 65 75 64 6f 2d 63 61 70  e `L` pseudo-cap
3600: 61 62 69 6c 69 74 79 20 69 73 20 69 6e 74 65 6e  ability is inten
3610: 64 65 64 20 6f 6e 6c 79 20 74 6f 20 62 65 20 75  ded only to be u
3620: 73 65 64 20 6f 6e 20 69 74 73 20 6f 77 6e 20 6f  sed on its own o
3630: 72 20 77 69 74 68 0a 74 68 65 20 60 21 60 20 70  r with.the `!` p
3640: 72 65 66 69 78 20 66 6f 72 20 69 6d 70 6c 65 6d  refix for implem
3650: 65 6e 74 69 6e 67 20 6c 6f 67 69 6e 2f 6c 6f 67  enting login/log
3660: 6f 75 74 20 6d 65 6e 75 73 20 76 69 61 20 74 68  out menus via th
3670: 65 20 60 6d 61 69 6e 6d 65 6e 75 60 0a 73 69 74  e `mainmenu`.sit
3680: 65 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20  e configuration 
3690: 6f 70 74 69 6f 6e 3a 0a 0a 60 60 60 0a 4c 6f 67  option:..```.Log
36a0: 69 6e 20 20 20 20 20 2f 6c 6f 67 69 6e 20 20 20  in     /login   
36b0: 20 20 20 20 20 21 4c 20 20 7b 7d 0a 4c 6f 67 6f       !L  {}.Logo
36c0: 75 74 20 20 20 20 2f 6c 6f 67 6f 75 74 20 20 20  ut    /logout   
36d0: 20 20 20 20 20 4c 20 20 7b 7d 0a 60 60 60 0a 0a       L  {}.```..
36e0: 69 2e 65 2e 20 69 66 20 74 68 65 20 75 73 65 72  i.e. if the user
36f0: 20 69 73 20 6c 6f 67 67 65 64 20 69 6e 2c 20 73   is logged in, s
3700: 68 6f 77 20 74 68 65 20 22 4c 6f 67 6f 75 74 22  how the "Logout"
3710: 20 6c 69 6e 6b 2c 20 65 6c 73 65 20 73 68 6f 77   link, else show
3720: 20 74 68 65 0a 22 4c 6f 67 69 6e 22 20 6c 69 6e   the."Login" lin
3730: 6b 2e 0a 0a 3c 61 20 69 64 3d 22 63 61 70 74 75  k...<a id="captu
3740: 72 65 54 68 31 22 3e 3c 2f 61 3e 54 48 31 20 63  reTh1"></a>TH1 c
3750: 61 70 74 75 72 65 54 68 31 20 43 6f 6d 6d 61 6e  aptureTh1 Comman
3760: 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  d.--------------
3770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3790: 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 63 61  -------..  *  ca
37a0: 70 74 75 72 65 54 68 31 20 53 54 52 49 4e 47 0a  ptureTh1 STRING.
37b0: 0a 45 78 65 63 75 74 65 73 20 69 74 73 20 73 69  .Executes its si
37c0: 6e 67 6c 65 20 61 72 67 75 6d 65 6e 74 20 61 73  ngle argument as
37d0: 20 54 48 31 20 63 6f 64 65 20 61 6e 64 20 63 61   TH1 code and ca
37e0: 70 74 75 72 65 73 20 61 6e 79 0a 54 48 31 2d 67  ptures any.TH1-g
37f0: 65 6e 65 72 61 74 65 64 20 6f 75 74 70 75 74 20  enerated output 
3800: 61 73 20 61 20 73 74 72 69 6e 67 2c 20 77 68 69  as a string, whi
3810: 63 68 20 62 65 63 6f 6d 65 73 20 74 68 65 20 72  ch becomes the r
3820: 65 73 75 6c 74 20 6f 66 20 74 68 65 0a 66 75 6e  esult of the.fun
3830: 63 74 69 6f 6e 20 63 61 6c 6c 2e 20 65 2e 67 2e  ction call. e.g.
3840: 20 61 6e 79 20 60 70 75 74 73 60 20 63 61 6c 6c   any `puts` call
3850: 73 20 6d 61 64 65 20 66 72 6f 6d 20 74 68 61 74  s made from that
3860: 20 62 6c 6f 63 6b 20 77 69 6c 6c 20 6e 6f 74 0a   block will not.
3870: 67 65 6e 65 72 61 74 65 20 61 6e 79 20 6f 75 74  generate any out
3880: 70 75 74 2c 20 61 6e 64 20 69 6e 73 74 65 61 64  put, and instead
3890: 20 74 68 65 69 72 20 6f 75 74 70 75 74 20 77 69   their output wi
38a0: 6c 6c 20 62 65 63 6f 6d 65 20 70 61 72 74 20 6f  ll become part o
38b0: 66 20 74 68 65 0a 72 65 73 75 6c 74 20 73 74 72  f the.result str
38c0: 69 6e 67 2e 0a 0a 0a 3c 61 20 69 64 3d 22 63 67  ing....<a id="cg
38d0: 69 48 65 61 64 65 72 4c 69 6e 65 22 3e 3c 2f 61  iHeaderLine"></a
38e0: 3e 54 48 31 20 63 67 69 48 65 61 64 65 72 4c 69  >TH1 cgiHeaderLi
38f0: 6e 65 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d  ne Command.-----
3900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3910: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3920: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3930: 0a 0a 20 20 2a 20 20 63 67 69 48 65 61 64 65 72  ..  *  cgiHeader
3940: 4c 69 6e 65 20 6c 69 6e 65 0a 0a 41 64 64 73 20  Line line..Adds 
3950: 74 68 65 20 73 70 65 63 69 66 69 65 64 20 6c 69  the specified li
3960: 6e 65 20 74 6f 20 74 68 65 20 43 47 49 20 68 65  ne to the CGI he
3970: 61 64 65 72 2e 0a 0a 3c 61 20 69 64 3d 22 63 68  ader...<a id="ch
3980: 65 63 6b 6f 75 74 22 3e 3c 2f 61 3e 54 48 31 20  eckout"></a>TH1 
3990: 63 68 65 63 6b 6f 75 74 20 43 6f 6d 6d 61 6e 64  checkout Command
39a0: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
39b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
39c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20  ------------..  
39d0: 2a 20 20 63 68 65 63 6b 6f 75 74 20 3f 42 4f 4f  *  checkout ?BOO
39e0: 4c 45 41 4e 3f 0a 0a 52 65 74 75 72 6e 20 74 68  LEAN?..Return th
39f0: 65 20 66 75 6c 6c 79 20 71 75 61 6c 69 66 69 65  e fully qualifie
3a00: 64 20 64 69 72 65 63 74 6f 72 79 20 6e 61 6d 65  d directory name
3a10: 20 6f 66 20 74 68 65 20 63 75 72 72 65 6e 74 20   of the current 
3a20: 63 68 65 63 6b 6f 75 74 20 6f 72 20 61 6e 0a 65  checkout or an.e
3a30: 6d 70 74 79 20 73 74 72 69 6e 67 20 69 66 20 69  mpty string if i
3a40: 74 20 69 73 20 6e 6f 74 20 61 76 61 69 6c 61 62  t is not availab
3a50: 6c 65 2e 20 20 4f 70 74 69 6f 6e 61 6c 6c 79 2c  le.  Optionally,
3a60: 20 69 74 20 77 69 6c 6c 20 61 74 74 65 6d 70 74   it will attempt
3a70: 20 74 6f 20 66 69 6e 64 0a 74 68 65 20 63 75 72   to find.the cur
3a80: 72 65 6e 74 20 63 68 65 63 6b 6f 75 74 2c 20 6f  rent checkout, o
3a90: 70 65 6e 69 6e 67 20 74 68 65 20 63 6f 6e 66 69  pening the confi
3aa0: 67 75 72 61 74 69 6f 6e 20 28 22 75 73 65 72 22  guration ("user"
3ab0: 29 20 64 61 74 61 62 61 73 65 20 61 6e 64 20 74  ) database and t
3ac0: 68 65 0a 72 65 70 6f 73 69 74 6f 72 79 20 61 73  he.repository as
3ad0: 20 6e 65 63 65 73 73 61 72 79 2c 20 69 66 20 74   necessary, if t
3ae0: 68 65 20 62 6f 6f 6c 65 61 6e 20 61 72 67 75 6d  he boolean argum
3af0: 65 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e  ent is non-zero.
3b00: 0a 0a 3c 61 20 69 64 3d 22 63 6f 6d 62 6f 62 6f  ..<a id="combobo
3b10: 78 22 3e 3c 2f 61 3e 54 48 31 20 63 6f 6d 62 6f  x"></a>TH1 combo
3b20: 62 6f 78 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d  box Command.----
3b30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3b50: 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 63 6f  -------..  *  co
3b60: 6d 62 6f 62 6f 78 20 4e 41 4d 45 20 54 45 58 54  mbobox NAME TEXT
3b70: 2d 4c 49 53 54 20 4e 55 4d 4c 49 4e 45 53 0a 0a  -LIST NUMLINES..
3b80: 47 65 6e 65 72 61 74 65 73 20 61 6e 64 20 65 6d  Generates and em
3b90: 69 74 73 20 61 6e 20 48 54 4d 4c 20 63 6f 6d 62  its an HTML comb
3ba0: 6f 62 6f 78 2e 20 20 4e 41 4d 45 20 69 73 20 62  obox.  NAME is b
3bb0: 6f 74 68 20 74 68 65 20 6e 61 6d 65 20 6f 66 20  oth the name of 
3bc0: 74 68 65 0a 43 47 49 20 70 61 72 61 6d 65 74 65  the.CGI paramete
3bd0: 72 20 61 6e 64 20 74 68 65 20 6e 61 6d 65 20 6f  r and the name o
3be0: 66 20 61 20 76 61 72 69 61 62 6c 65 20 74 68 61  f a variable tha
3bf0: 74 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 63  t contains the c
3c00: 75 72 72 65 6e 74 6c 79 0a 73 65 6c 65 63 74 65  urrently.selecte
3c10: 64 20 76 61 6c 75 65 2e 20 20 54 45 58 54 2d 4c  d value.  TEXT-L
3c20: 49 53 54 20 69 73 20 61 20 6c 69 73 74 20 6f 66  IST is a list of
3c30: 20 70 6f 73 73 69 62 6c 65 20 76 61 6c 75 65 73   possible values
3c40: 20 66 6f 72 20 74 68 65 0a 63 6f 6d 62 6f 62 6f   for the.combobo
3c50: 78 2e 20 20 4e 55 4d 4c 49 4e 45 53 20 69 73 20  x.  NUMLINES is 
3c60: 31 20 66 6f 72 20 61 20 74 72 75 65 20 63 6f 6d  1 for a true com
3c70: 62 6f 62 6f 78 2e 20 20 49 66 20 4e 55 4d 4c 49  bobox.  If NUMLI
3c80: 4e 45 53 20 69 73 20 67 72 65 61 74 65 72 0a 74  NES is greater.t
3c90: 68 61 6e 20 6f 6e 65 20 74 68 65 6e 20 74 68 65  han one then the
3ca0: 20 64 69 73 70 6c 61 79 20 69 73 20 61 20 6c 69   display is a li
3cb0: 73 74 62 6f 78 20 77 69 74 68 20 74 68 65 20 6e  stbox with the n
3cc0: 75 6d 62 65 72 20 6f 66 20 6c 69 6e 65 73 20 67  umber of lines g
3cd0: 69 76 65 6e 2e 0a 0a 3c 61 20 69 64 3d 22 63 6f  iven...<a id="co
3ce0: 70 79 62 74 6e 22 3e 3c 2f 61 3e 54 48 31 20 63  pybtn"></a>TH1 c
3cf0: 6f 70 79 62 74 6e 20 43 6f 6d 6d 61 6e 64 0a 2d  opybtn Command.-
3d00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
3d20: 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 63  --------..  *  c
3d30: 6f 70 79 62 74 6e 20 54 41 52 47 45 54 49 44 20  opybtn TARGETID 
3d40: 46 4c 49 50 50 45 44 20 54 45 58 54 20 3f 43 4f  FLIPPED TEXT ?CO
3d50: 50 59 4c 45 4e 47 54 48 3f 0a 0a 4f 75 74 70 75  PYLENGTH?..Outpu
3d60: 74 20 54 45 58 54 20 77 69 74 68 20 61 20 63 6c  t TEXT with a cl
3d70: 69 63 6b 2d 74 6f 2d 63 6f 70 79 20 62 75 74 74  ick-to-copy butt
3d80: 6f 6e 20 6e 65 78 74 20 74 6f 20 69 74 2e 20 4c  on next to it. L
3d90: 6f 61 64 73 20 74 68 65 20 63 6f 70 79 62 74 6e  oads the copybtn
3da0: 2e 6a 73 0a 4a 61 76 61 73 63 72 69 70 74 20 6d  .js.Javascript m
3db0: 6f 64 75 6c 65 2c 20 61 6e 64 20 67 65 6e 65 72  odule, and gener
3dc0: 61 74 65 73 20 48 54 4d 4c 20 65 6c 65 6d 65 6e  ates HTML elemen
3dd0: 74 73 20 77 69 74 68 20 74 68 65 20 66 6f 6c 6c  ts with the foll
3de0: 6f 77 69 6e 67 20 49 44 73 3a 0a 0a 20 20 2a 20  owing IDs:..  * 
3df0: 20 54 41 52 47 45 54 49 44 3a 20 20 20 20 20 20   TARGETID:      
3e00: 20 54 68 65 20 60 3c 73 70 61 6e 3e 60 20 77 72   The `<span>` wr
3e10: 61 70 70 65 72 20 61 72 6f 75 6e 64 20 54 45 58  apper around TEX
3e20: 54 2e 0a 20 20 2a 20 20 63 6f 70 79 2d 54 41 52  T..  *  copy-TAR
3e30: 47 45 54 49 44 3a 20 20 54 68 65 20 60 3c 73 70  GETID:  The `<sp
3e40: 61 6e 3e 60 20 66 6f 72 20 74 68 65 20 63 6f 70  an>` for the cop
3e50: 79 20 62 75 74 74 6f 6e 2e 0a 0a 49 66 20 74 68  y button...If th
3e60: 65 20 46 4c 49 50 50 45 44 20 61 72 67 75 6d 65  e FLIPPED argume
3e70: 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20  nt is non-zero, 
3e80: 74 68 65 20 63 6f 70 79 20 62 75 74 74 6f 6e 20  the copy button 
3e90: 69 73 20 64 69 73 70 6c 61 79 65 64 20 61 66 74  is displayed aft
3ea0: 65 72 20 54 45 58 54 2e 0a 0a 54 68 65 20 6f 70  er TEXT...The op
3eb0: 74 69 6f 6e 61 6c 20 43 4f 50 59 4c 45 4e 47 54  tional COPYLENGT
3ec0: 48 20 61 72 67 75 6d 65 6e 74 20 64 65 66 69 6e  H argument defin
3ed0: 65 73 20 74 68 65 20 6c 65 6e 67 74 68 20 6f 66  es the length of
3ee0: 20 74 68 65 20 73 75 62 73 74 72 69 6e 67 20 6f   the substring o
3ef0: 66 20 54 45 58 54 0a 63 6f 70 69 65 64 20 74 6f  f TEXT.copied to
3f00: 20 63 6c 69 70 62 6f 61 72 64 3a 0a 0a 20 20 2a   clipboard:..  *
3f10: 20 20 3c 3d 20 30 3a 20 20 20 4e 6f 20 6c 69 6d    <= 0:   No lim
3f20: 69 74 20 28 64 65 66 61 75 6c 74 20 69 66 20 74  it (default if t
3f30: 68 65 20 61 72 67 75 6d 65 6e 74 20 69 73 20 6f  he argument is o
3f40: 6d 69 74 74 65 64 29 2e 0a 20 20 2a 20 20 3e 3d  mitted)..  *  >=
3f50: 20 33 3a 20 20 20 54 72 75 6e 63 61 74 65 20 54   3:   Truncate T
3f60: 45 58 54 20 61 66 74 65 72 20 43 4f 50 59 4c 45  EXT after COPYLE
3f70: 4e 47 54 48 20 28 73 69 6e 67 6c 65 2d 62 79 74  NGTH (single-byt
3f80: 65 29 20 63 68 61 72 61 63 74 65 72 73 2e 0a 20  e) characters.. 
3f90: 20 2a 20 20 20 20 20 31 3a 20 20 20 55 73 65 20   *     1:   Use 
3fa0: 74 68 65 20 22 68 61 73 68 2d 64 69 67 69 74 73  the "hash-digits
3fb0: 22 20 73 65 74 74 69 6e 67 20 61 73 20 74 68 65  " setting as the
3fc0: 20 6c 69 6d 69 74 2e 0a 20 20 2a 20 20 20 20 20   limit..  *     
3fd0: 32 3a 20 20 20 55 73 65 20 74 68 65 20 6c 65 6e  2:   Use the len
3fe0: 67 74 68 20 61 70 70 72 6f 70 72 69 61 74 65 20  gth appropriate 
3ff0: 66 6f 72 20 55 52 4c 73 20 61 73 20 74 68 65 20  for URLs as the 
4000: 6c 69 6d 69 74 20 28 64 65 66 69 6e 65 64 20 61  limit (defined a
4010: 74 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 63  t.             c
4020: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 62 79 20 60  ompile-time by `
4030: 46 4f 53 53 49 4c 5f 48 41 53 48 5f 44 49 47 49  FOSSIL_HASH_DIGI
4040: 54 53 5f 55 52 4c 60 2c 20 64 65 66 61 75 6c 74  TS_URL`, default
4050: 73 20 74 6f 20 31 36 29 2e 0a 0a 3c 61 20 69 64  s to 16)...<a id
4060: 3d 22 64 61 74 65 22 3e 3c 2f 61 3e 54 48 31 20  ="date"></a>TH1 
4070: 64 61 74 65 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d  date Command.---
4080: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4090: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
40a0: 0a 0a 20 20 2a 20 20 64 61 74 65 20 3f 2d 6c 6f  ..  *  date ?-lo
40b0: 63 61 6c 3f 0a 0a 52 65 74 75 72 6e 20 61 20 73  cal?..Return a s
40c0: 74 72 69 6e 67 20 77 68 69 63 68 20 69 73 20 74  tring which is t
40d0: 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d 65 20  he current time 
40e0: 61 6e 64 20 64 61 74 65 2e 20 20 49 66 20 74 68  and date.  If th
40f0: 65 20 2d 6c 6f 63 61 6c 0a 6f 70 74 69 6f 6e 20  e -local.option 
4100: 69 73 20 75 73 65 64 2c 20 74 68 65 20 64 61 74  is used, the dat
4110: 65 20 61 70 70 65 61 72 73 20 75 73 69 6e 67 20  e appears using 
4120: 6c 6f 63 61 6c 74 69 6d 65 20 69 6e 73 74 65 61  localtime instea
4130: 64 20 6f 66 20 55 54 43 2e 0a 0a 3c 61 20 69 64  d of UTC...<a id
4140: 3d 22 64 65 63 6f 72 61 74 65 22 3e 3c 2f 61 3e  ="decorate"></a>
4150: 54 48 31 20 64 65 63 6f 72 61 74 65 20 43 6f 6d  TH1 decorate Com
4160: 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mand.-----------
4170: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4180: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4190: 0a 0a 20 20 2a 20 20 64 65 63 6f 72 61 74 65 20  ..  *  decorate 
41a0: 53 54 52 49 4e 47 0a 0a 52 65 6e 64 65 72 73 20  STRING..Renders 
41b0: 53 54 52 49 4e 47 20 61 73 20 77 69 6b 69 20 63  STRING as wiki c
41c0: 6f 6e 74 65 6e 74 3b 20 68 6f 77 65 76 65 72 2c  ontent; however,
41d0: 20 6f 6e 6c 79 20 6c 69 6e 6b 73 20 61 72 65 20   only links are 
41e0: 68 61 6e 64 6c 65 64 2e 20 20 4e 6f 0a 6f 74 68  handled.  No.oth
41f0: 65 72 20 6d 61 72 6b 75 70 20 69 73 20 70 72 6f  er markup is pro
4200: 63 65 73 73 65 64 2e 0a 0a 3c 61 20 69 64 3d 22  cessed...<a id="
4210: 64 65 66 48 65 61 64 65 72 22 3e 3c 2f 61 3e 54  defHeader"></a>T
4220: 48 31 20 64 65 66 48 65 61 64 65 72 20 43 6f 6d  H1 defHeader Com
4230: 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mand.-----------
4240: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4260: 2d 2d 0a 0a 20 20 2a 20 20 64 65 66 48 65 61 64  --..  *  defHead
4270: 65 72 0a 0a 52 65 74 75 72 6e 73 20 74 68 65 20  er..Returns the 
4280: 64 65 66 61 75 6c 74 20 70 61 67 65 20 68 65 61  default page hea
4290: 64 65 72 2e 0a 0a 3c 61 20 69 64 3d 22 64 69 72  der...<a id="dir
42a0: 22 3e 3c 2f 61 3e 54 48 31 20 64 69 72 20 43 6f  "></a>TH1 dir Co
42b0: 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mmand.----------
42c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
42d0: 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 64 69 72  -------..  * dir
42e0: 20 43 48 45 43 4b 49 4e 20 3f 47 4c 4f 42 3f 20   CHECKIN ?GLOB? 
42f0: 3f 44 45 54 41 49 4c 53 3f 0a 0a 52 65 74 75 72  ?DETAILS?..Retur
4300: 6e 73 20 61 20 6c 69 73 74 20 63 6f 6e 74 61 69  ns a list contai
4310: 6e 69 6e 67 20 61 6c 6c 20 66 69 6c 65 73 20 69  ning all files i
4320: 6e 20 43 48 45 43 4b 49 4e 2e 20 49 66 20 47 4c  n CHECKIN. If GL
4330: 4f 42 20 69 73 20 67 69 76 65 6e 20 6f 6e 6c 79  OB is given only
4340: 0a 74 68 65 20 66 69 6c 65 73 20 6d 61 74 63 68  .the files match
4350: 69 6e 67 20 74 68 65 20 70 61 74 74 65 72 6e 20  ing the pattern 
4360: 47 4c 4f 42 20 77 69 74 68 69 6e 20 43 48 45 43  GLOB within CHEC
4370: 4b 49 4e 20 77 69 6c 6c 20 62 65 20 72 65 74 75  KIN will be retu
4380: 72 6e 65 64 2e 0a 49 66 20 44 45 54 41 49 4c 53  rned..If DETAILS
4390: 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2c 20 74 68   is non-zero, th
43a0: 65 20 72 65 73 75 6c 74 20 77 69 6c 6c 20 62 65  e result will be
43b0: 20 61 20 6c 69 73 74 2d 6f 66 2d 6c 69 73 74 73   a list-of-lists
43c0: 2c 20 77 69 74 68 20 65 61 63 68 0a 65 6c 65 6d  , with each.elem
43d0: 65 6e 74 20 63 6f 6e 74 61 69 6e 69 6e 67 20 61  ent containing a
43e0: 74 20 6c 65 61 73 74 20 74 68 72 65 65 20 65 6c  t least three el
43f0: 65 6d 65 6e 74 73 3a 20 74 68 65 20 66 69 6c 65  ements: the file
4400: 20 6e 61 6d 65 2c 20 74 68 65 20 66 69 6c 65 0a   name, the file.
4410: 73 69 7a 65 20 28 69 6e 20 62 79 74 65 73 29 2c  size (in bytes),
4420: 20 61 6e 64 20 74 68 65 20 66 69 6c 65 20 6c 61   and the file la
4430: 73 74 20 6d 6f 64 69 66 69 63 61 74 69 6f 6e 20  st modification 
4440: 74 69 6d 65 20 28 72 65 6c 61 74 69 76 65 20 74  time (relative t
4450: 6f 20 74 68 65 0a 74 69 6d 65 20 7a 6f 6e 65 20  o the.time zone 
4460: 63 6f 6e 66 69 67 75 72 65 64 20 66 6f 72 20 74  configured for t
4470: 68 65 20 72 65 70 6f 73 69 74 6f 72 79 29 2e 0a  he repository)..
4480: 0a 3c 61 20 69 64 3d 22 65 6e 61 62 6c 65 5f 6f  .<a id="enable_o
4490: 75 74 70 75 74 22 3e 3c 2f 61 3e 54 48 31 20 65  utput"></a>TH1 e
44a0: 6e 61 62 6c 65 5c 5f 6f 75 74 70 75 74 20 43 6f  nable\_output Co
44b0: 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mmand.----------
44c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
44e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20  ------------..  
44f0: 2a 20 20 65 6e 61 62 6c 65 5c 5f 6f 75 74 70 75  *  enable\_outpu
4500: 74 20 42 4f 4f 4c 45 41 4e 0a 0a 45 6e 61 62 6c  t BOOLEAN..Enabl
4510: 65 20 6f 72 20 64 69 73 61 62 6c 65 20 73 65 6e  e or disable sen
4520: 64 69 6e 67 20 6f 75 74 70 75 74 20 77 68 65 6e  ding output when
4530: 20 74 68 65 20 63 6f 6d 62 6f 62 6f 78 2c 20 63   the combobox, c
4540: 6f 70 79 62 74 6e 2c 20 70 75 74 73 2c 20 6f 72  opybtn, puts, or
4550: 20 77 69 6b 69 0a 63 6f 6d 6d 61 6e 64 73 20 61   wiki.commands a
4560: 72 65 20 75 73 65 64 2e 0a 0a 3c 61 20 69 64 3d  re used...<a id=
4570: 22 65 6e 63 6f 64 65 36 34 22 3e 3c 2f 61 3e 54  "encode64"></a>T
4580: 48 31 20 65 6e 63 6f 64 65 36 34 20 43 6f 6d 6d  H1 encode64 Comm
4590: 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  and.------------
45a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
45b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
45c0: 0a 20 20 2a 20 20 65 6e 63 6f 64 65 36 34 20 53  .  *  encode64 S
45d0: 54 52 49 4e 47 0a 0a 45 6e 63 6f 64 65 20 74 68  TRING..Encode th
45e0: 65 20 73 70 65 63 69 66 69 65 64 20 73 74 72 69  e specified stri
45f0: 6e 67 20 75 73 69 6e 67 20 42 61 73 65 36 34 20  ng using Base64 
4600: 61 6e 64 20 72 65 74 75 72 6e 20 74 68 65 20 72  and return the r
4610: 65 73 75 6c 74 2e 0a 0a 3c 61 20 69 64 3d 22 67  esult...<a id="g
4620: 65 74 50 61 72 61 6d 65 74 65 72 22 3e 3c 2f 61  etParameter"></a
4630: 3e 54 48 31 20 67 65 74 50 61 72 61 6d 65 74 65  >TH1 getParamete
4640: 72 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d  r Command.------
4650: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4660: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4670: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20  -------------.. 
4680: 20 2a 20 20 67 65 74 50 61 72 61 6d 65 74 65 72   *  getParameter
4690: 20 4e 41 4d 45 20 3f 44 45 46 41 55 4c 54 3f 0a   NAME ?DEFAULT?.
46a0: 0a 52 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c  .Returns the val
46b0: 75 65 20 6f 66 20 74 68 65 20 73 70 65 63 69 66  ue of the specif
46c0: 69 65 64 20 71 75 65 72 79 20 70 61 72 61 6d 65  ied query parame
46d0: 74 65 72 20 6f 72 20 74 68 65 20 73 70 65 63 69  ter or the speci
46e0: 66 69 65 64 0a 64 65 66 61 75 6c 74 20 76 61 6c  fied.default val
46f0: 75 65 20 77 68 65 6e 20 74 68 65 72 65 20 69 73  ue when there is
4700: 20 6e 6f 20 6d 61 74 63 68 69 6e 67 20 71 75 65   no matching que
4710: 72 79 20 70 61 72 61 6d 65 74 65 72 2e 0a 0a 3c  ry parameter...<
4720: 61 20 69 64 3d 22 67 6c 6f 62 5f 6d 61 74 63 68  a id="glob_match
4730: 22 3e 3c 2f 61 3e 54 48 31 20 67 6c 6f 62 5c 5f  "></a>TH1 glob\_
4740: 6d 61 74 63 68 20 43 6f 6d 6d 61 6e 64 0a 2d 2d  match Command.--
4750: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4760: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
4780: 20 20 2a 20 20 67 6c 6f 62 5c 5f 6d 61 74 63 68    *  glob\_match
4790: 20 3f 2d 6f 6e 65 3f 20 3f 2d 2d 3f 20 70 61 74   ?-one? ?--? pat
47a0: 74 65 72 6e 4c 69 73 74 20 73 74 72 69 6e 67 0a  ternList string.
47b0: 0a 43 68 65 63 6b 73 20 74 68 65 20 73 74 72 69  .Checks the stri
47c0: 6e 67 20 61 67 61 69 6e 73 74 20 74 68 65 20 73  ng against the s
47d0: 70 65 63 69 66 69 65 64 20 67 6c 6f 62 20 70 61  pecified glob pa
47e0: 74 74 65 72 6e 20 2d 4f 52 2d 20 6c 69 73 74 20  ttern -OR- list 
47f0: 6f 66 20 67 6c 6f 62 0a 70 61 74 74 65 72 6e 73  of glob.patterns
4800: 20 61 6e 64 20 72 65 74 75 72 6e 73 20 6e 6f 6e   and returns non
4810: 2d 7a 65 72 6f 20 69 66 20 74 68 65 72 65 20 69  -zero if there i
4820: 73 20 61 20 6d 61 74 63 68 2e 0a 0a 3c 61 20 69  s a match...<a i
4830: 64 3d 22 67 6c 6f 62 61 6c 53 74 61 74 65 22 3e  d="globalState">
4840: 3c 2f 61 3e 54 48 31 20 67 6c 6f 62 61 6c 53 74  </a>TH1 globalSt
4850: 61 74 65 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d  ate Command.----
4860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4880: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20  -------------.. 
4890: 20 2a 20 20 67 6c 6f 62 61 6c 53 74 61 74 65 20   *  globalState 
48a0: 4e 41 4d 45 20 3f 44 45 46 41 55 4c 54 3f 0a 0a  NAME ?DEFAULT?..
48b0: 52 65 74 75 72 6e 73 20 61 20 73 74 72 69 6e 67  Returns a string
48c0: 20 63 6f 6e 74 61 69 6e 69 6e 67 20 74 68 65 20   containing the 
48d0: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 70 65  value of the spe
48e0: 63 69 66 69 65 64 20 67 6c 6f 62 61 6c 20 73 74  cified global st
48f0: 61 74 65 0a 76 61 72 69 61 62 6c 65 20 2d 4f 52  ate.variable -OR
4900: 2d 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  - the specified 
4910: 64 65 66 61 75 6c 74 20 76 61 6c 75 65 2e 20 20  default value.  
4920: 54 68 65 20 73 75 70 70 6f 72 74 65 64 20 69 74  The supported it
4930: 65 6d 73 20 61 72 65 3a 0a 0a 20 20 31 2e 20 2a  ems are:..  1. *
4940: 2a 63 68 65 63 6b 6f 75 74 2a 2a 20 2d 2d 20 5f  *checkout** -- _
4950: 41 63 74 69 76 65 20 6c 6f 63 61 6c 20 63 68 65  Active local che
4960: 63 6b 6f 75 74 20 64 69 72 65 63 74 6f 72 79 2c  ckout directory,
4970: 20 69 66 20 61 6e 79 2e 5f 0a 20 20 31 2e 20 2a   if any._.  1. *
4980: 2a 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 2a 2a  *configuration**
4990: 20 2d 2d 20 5f 41 63 74 69 76 65 20 63 6f 6e 66   -- _Active conf
49a0: 69 67 75 72 61 74 69 6f 6e 20 64 61 74 61 62 61  iguration databa
49b0: 73 65 20 66 69 6c 65 20 6e 61 6d 65 2c 20 69 66  se file name, if
49c0: 20 61 6e 79 2e 5f 0a 20 20 31 2e 20 2a 2a 65 78   any._.  1. **ex
49d0: 65 63 75 74 61 62 6c 65 2a 2a 20 2d 2d 20 5f 46  ecutable** -- _F
49e0: 75 6c 6c 79 20 71 75 61 6c 69 66 69 65 64 20 65  ully qualified e
49f0: 78 65 63 75 74 61 62 6c 65 20 66 69 6c 65 20 6e  xecutable file n
4a00: 61 6d 65 2e 5f 0a 20 20 31 2e 20 2a 2a 66 6c 61  ame._.  1. **fla
4a10: 67 73 2a 2a 20 2d 2d 20 5f 54 48 31 20 69 6e 69  gs** -- _TH1 ini
4a20: 74 69 61 6c 69 7a 61 74 69 6f 6e 20 66 6c 61 67  tialization flag
4a30: 73 2e 5f 0a 20 20 31 2e 20 2a 2a 6c 6f 67 2a 2a  s._.  1. **log**
4a40: 20 2d 2d 20 5f 45 72 72 6f 72 20 6c 6f 67 20 66   -- _Error log f
4a50: 69 6c 65 20 6e 61 6d 65 2c 20 69 66 20 61 6e 79  ile name, if any
4a60: 2e 5f 0a 20 20 31 2e 20 2a 2a 72 65 70 6f 73 69  ._.  1. **reposi
4a70: 74 6f 72 79 2a 2a 20 2d 2d 20 5f 41 63 74 69 76  tory** -- _Activ
4a80: 65 20 6c 6f 63 61 6c 20 72 65 70 6f 73 69 74 6f  e local reposito
4a90: 72 79 20 66 69 6c 65 20 6e 61 6d 65 2c 20 69 66  ry file name, if
4aa0: 20 61 6e 79 2e 5f 0a 20 20 31 2e 20 2a 2a 74 6f   any._.  1. **to
4ab0: 70 2a 2a 20 2d 2d 20 5f 42 61 73 65 20 70 61 74  p** -- _Base pat
4ac0: 68 20 66 6f 72 20 74 68 65 20 61 63 74 69 76 65  h for the active
4ad0: 20 73 65 72 76 65 72 20 69 6e 73 74 61 6e 63 65   server instance
4ae0: 2c 20 69 66 20 61 70 70 6c 69 63 61 62 6c 65 2e  , if applicable.
4af0: 5f 0a 20 20 31 2e 20 2a 2a 75 73 65 72 2a 2a 20  _.  1. **user** 
4b00: 2d 2d 20 5f 41 63 74 69 76 65 20 75 73 65 72 20  -- _Active user 
4b10: 6e 61 6d 65 2c 20 69 66 20 61 6e 79 2e 5f 0a 20  name, if any._. 
4b20: 20 31 2e 20 2a 2a 76 66 73 2a 2a 20 2d 2d 20 5f   1. **vfs** -- _
4b30: 53 51 4c 69 74 65 20 56 46 53 20 69 6e 20 75 73  SQLite VFS in us
4b40: 65 2c 20 69 66 20 6f 76 65 72 72 69 64 64 65 6e  e, if overridden
4b50: 2e 5f 0a 0a 41 74 74 65 6d 70 74 73 20 74 6f 20  ._..Attempts to 
4b60: 71 75 65 72 79 20 66 6f 72 20 75 6e 73 75 70 70  query for unsupp
4b70: 6f 72 74 65 64 20 67 6c 6f 62 61 6c 20 73 74 61  orted global sta
4b80: 74 65 20 76 61 72 69 61 62 6c 65 73 20 77 69 6c  te variables wil
4b90: 6c 20 72 65 73 75 6c 74 0a 69 6e 20 61 20 73 63  l result.in a sc
4ba0: 72 69 70 74 20 65 72 72 6f 72 2e 20 20 41 64 64  ript error.  Add
4bb0: 69 74 69 6f 6e 61 6c 20 67 6c 6f 62 61 6c 20 73  itional global s
4bc0: 74 61 74 65 20 76 61 72 69 61 62 6c 65 73 20 6d  tate variables m
4bd0: 61 79 20 62 65 20 65 78 70 6f 73 65 64 0a 69 6e  ay be exposed.in
4be0: 20 74 68 65 20 66 75 74 75 72 65 2e 0a 0a 3c 61   the future...<a
4bf0: 20 69 64 3d 22 68 61 73 63 61 70 22 3e 3c 2f 61   id="hascap"></a
4c00: 3e 54 48 31 20 68 61 73 63 61 70 20 43 6f 6d 6d  >TH1 hascap Comm
4c10: 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  and.------------
4c20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4c30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 44 65 70  -----------..Dep
4c40: 72 65 63 61 74 65 64 3a 20 70 72 65 66 65 72 20  recated: prefer 
4c50: 5b 63 61 70 65 78 70 72 5d 28 23 63 61 70 65 78  [capexpr](#capex
4c60: 70 72 29 20 69 6e 73 74 65 61 64 2e 0a 0a 20 20  pr) instead...  
4c70: 2a 20 20 68 61 73 63 61 70 20 53 54 52 49 4e 47  *  hascap STRING
4c80: 2e 2e 2e 0a 0a 52 65 74 75 72 6e 73 20 74 72 75  .....Returns tru
4c90: 65 20 69 66 20 74 68 65 20 63 75 72 72 65 6e 74  e if the current
4ca0: 20 75 73 65 72 20 68 61 73 20 61 6c 6c 20 6f 66   user has all of
4cb0: 20 74 68 65 20 63 61 70 61 62 69 6c 69 74 69 65   the capabilitie
4cc0: 73 20 6c 69 73 74 65 64 0a 69 6e 20 53 54 52 49  s listed.in STRI
4cd0: 4e 47 2e 0a 0a 3c 61 20 69 64 3d 22 68 61 73 66  NG...<a id="hasf
4ce0: 65 61 74 75 72 65 22 3e 3c 2f 61 3e 54 48 31 20  eature"></a>TH1 
4cf0: 68 61 73 66 65 61 74 75 72 65 20 43 6f 6d 6d 61  hasfeature Comma
4d00: 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nd.-------------
4d10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
4d30: 2d 2d 0a 0a 20 20 2a 20 20 68 61 73 66 65 61 74  --..  *  hasfeat
4d40: 75 72 65 20 53 54 52 49 4e 47 0a 0a 52 65 74 75  ure STRING..Retu
4d50: 72 6e 73 20 74 72 75 65 20 69 66 20 74 68 65 20  rns true if the 
4d60: 62 69 6e 61 72 79 20 68 61 73 20 74 68 65 20 67  binary has the g
4d70: 69 76 65 6e 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  iven compile-tim
4d80: 65 20 66 65 61 74 75 72 65 20 65 6e 61 62 6c 65  e feature enable
4d90: 64 2e 0a 54 68 65 20 70 6f 73 73 69 62 6c 65 20  d..The possible 
4da0: 66 65 61 74 75 72 65 73 20 61 72 65 3a 0a 0a 20  features are:.. 
4db0: 20 31 2e 20 2a 2a 73 73 6c 2a 2a 20 2d 2d 20 5f   1. **ssl** -- _
4dc0: 53 75 70 70 6f 72 74 20 66 6f 72 20 74 68 65 20  Support for the 
4dd0: 48 54 54 50 53 20 74 72 61 6e 73 70 6f 72 74 2e  HTTPS transport.
4de0: 5f 0a 20 20 31 2e 20 2a 2a 6c 65 67 61 63 79 4d  _.  1. **legacyM
4df0: 76 52 6d 2a 2a 20 2d 2d 20 5f 53 75 70 70 6f 72  vRm** -- _Suppor
4e00: 74 20 66 6f 72 20 6c 65 67 61 63 79 20 6d 76 2f  t for legacy mv/
4e10: 72 6d 20 63 6f 6d 6d 61 6e 64 20 62 65 68 61 76  rm command behav
4e20: 69 6f 72 2e 5f 0a 20 20 31 2e 20 2a 2a 65 78 65  ior._.  1. **exe
4e30: 63 52 65 6c 50 61 74 68 73 2a 2a 20 2d 2d 20 5f  cRelPaths** -- _
4e40: 55 73 65 20 72 65 6c 61 74 69 76 65 20 70 61 74  Use relative pat
4e50: 68 73 20 77 69 74 68 20 65 78 74 65 72 6e 61 6c  hs with external
4e60: 20 64 69 66 66 2f 67 64 69 66 66 2e 5f 0a 20 20   diff/gdiff._.  
4e70: 31 2e 20 2a 2a 74 68 31 44 6f 63 73 2a 2a 20 2d  1. **th1Docs** -
4e80: 2d 20 5f 53 75 70 70 6f 72 74 20 66 6f 72 20 54  - _Support for T
4e90: 48 31 20 69 6e 20 65 6d 62 65 64 64 65 64 20 64  H1 in embedded d
4ea0: 6f 63 75 6d 65 6e 74 61 74 69 6f 6e 2e 5f 0a 20  ocumentation._. 
4eb0: 20 31 2e 20 2a 2a 74 68 31 48 6f 6f 6b 73 2a 2a   1. **th1Hooks**
4ec0: 20 2d 2d 20 5f 53 75 70 70 6f 72 74 20 66 6f 72   -- _Support for
4ed0: 20 54 48 31 20 63 6f 6d 6d 61 6e 64 20 61 6e 64   TH1 command and
4ee0: 20 77 65 62 20 70 61 67 65 20 68 6f 6f 6b 73 2e   web page hooks.
4ef0: 5f 0a 20 20 31 2e 20 2a 2a 74 63 6c 2a 2a 20 2d  _.  1. **tcl** -
4f00: 2d 20 5f 53 75 70 70 6f 72 74 20 66 6f 72 20 54  - _Support for T
4f10: 63 6c 20 69 6e 74 65 67 72 61 74 69 6f 6e 2e 5f  cl integration._
4f20: 0a 20 20 31 2e 20 2a 2a 75 73 65 54 63 6c 53 74  .  1. **useTclSt
4f30: 75 62 73 2a 2a 20 2d 2d 20 5f 54 63 6c 20 73 74  ubs** -- _Tcl st
4f40: 75 62 73 20 65 6e 61 62 6c 65 64 20 69 6e 20 74  ubs enabled in t
4f50: 68 65 20 54 63 6c 20 68 65 61 64 65 72 73 2e 5f  he Tcl headers._
4f60: 0a 20 20 31 2e 20 2a 2a 74 63 6c 53 74 75 62 73  .  1. **tclStubs
4f70: 2a 2a 20 2d 2d 20 5f 55 73 65 73 20 54 63 6c 20  ** -- _Uses Tcl 
4f80: 73 74 75 62 73 20 28 69 2e 65 2e 20 6c 69 6e 6b  stubs (i.e. link
4f90: 69 6e 67 20 77 69 74 68 20 73 74 75 62 73 20 6c  ing with stubs l
4fa0: 69 62 72 61 72 79 29 2e 5f 0a 20 20 31 2e 20 2a  ibrary)._.  1. *
4fb0: 2a 74 63 6c 50 72 69 76 61 74 65 53 74 75 62 73  *tclPrivateStubs
4fc0: 2a 2a 20 2d 2d 20 5f 55 73 65 73 20 54 63 6c 20  ** -- _Uses Tcl 
4fd0: 70 72 69 76 61 74 65 20 73 74 75 62 73 20 28 69  private stubs (i
4fe0: 2e 65 2e 20 68 65 61 64 65 72 2d 6f 6e 6c 79 29  .e. header-only)
4ff0: 2e 5f 0a 20 20 31 2e 20 2a 2a 6a 73 6f 6e 2a 2a  ._.  1. **json**
5000: 20 2d 2d 20 5f 53 75 70 70 6f 72 74 20 66 6f 72   -- _Support for
5010: 20 74 68 65 20 4a 53 4f 4e 20 41 50 49 73 2e 5f   the JSON APIs._
5020: 0a 20 20 31 2e 20 2a 2a 6d 61 72 6b 64 6f 77 6e  .  1. **markdown
5030: 2a 2a 20 2d 2d 20 5f 53 75 70 70 6f 72 74 20 66  ** -- _Support f
5040: 6f 72 20 4d 61 72 6b 64 6f 77 6e 20 64 6f 63 75  or Markdown docu
5050: 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 6d 61 74  mentation format
5060: 2e 5f 0a 20 20 31 2e 20 2a 2a 75 6e 69 63 6f 64  ._.  1. **unicod
5070: 65 43 6d 64 4c 69 6e 65 2a 2a 20 2d 2d 20 5f 54  eCmdLine** -- _T
5080: 68 65 20 63 6f 6d 6d 61 6e 64 20 6c 69 6e 65 20  he command line 
5090: 61 72 67 75 6d 65 6e 74 73 20 61 72 65 20 55 6e  arguments are Un
50a0: 69 63 6f 64 65 2e 5f 0a 20 20 31 2e 20 2a 2a 64  icode._.  1. **d
50b0: 79 6e 61 6d 69 63 42 75 69 6c 64 2a 2a 20 2d 2d  ynamicBuild** --
50c0: 20 5f 44 79 6e 61 6d 69 63 61 6c 6c 79 20 6c 69   _Dynamically li
50d0: 6e 6b 65 64 20 74 6f 20 6c 69 62 72 61 72 69 65  nked to librarie
50e0: 73 2e 5f 0a 20 20 31 2e 20 2a 2a 6d 6d 61 6e 2a  s._.  1. **mman*
50f0: 2a 20 2d 2d 20 5f 55 73 65 73 20 50 4f 53 49 58  * -- _Uses POSIX
5100: 20 6d 65 6d 6f 72 79 20 41 50 49 73 20 66 72 6f   memory APIs fro
5110: 6d 20 22 73 79 73 2f 6d 6d 61 6e 2e 68 22 2e 5f  m "sys/mman.h"._
5120: 0a 20 20 31 2e 20 2a 2a 73 65 65 2a 2a 20 2d 2d  .  1. **see** --
5130: 20 5f 55 73 65 73 20 74 68 65 20 53 51 4c 69 74   _Uses the SQLit
5140: 65 20 45 6e 63 72 79 70 74 69 6f 6e 20 45 78 74  e Encryption Ext
5150: 65 6e 73 69 6f 6e 2e 5f 0a 0a 53 70 65 63 69 66  ension._..Specif
5160: 79 69 6e 67 20 61 6e 20 75 6e 6b 6e 6f 77 6e 20  ying an unknown 
5170: 66 65 61 74 75 72 65 20 77 69 6c 6c 20 72 65 74  feature will ret
5180: 75 72 6e 20 61 20 76 61 6c 75 65 20 6f 66 20 66  urn a value of f
5190: 61 6c 73 65 2c 20 69 74 20 77 69 6c 6c 20 6e 6f  alse, it will no
51a0: 74 0a 72 61 69 73 65 20 61 20 73 63 72 69 70 74  t.raise a script
51b0: 20 65 72 72 6f 72 2e 0a 0a 3c 61 20 69 64 3d 22   error...<a id="
51c0: 68 74 6d 6c 22 3e 3c 2f 61 3e 54 48 31 20 68 74  html"></a>TH1 ht
51d0: 6d 6c 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d  ml Command.-----
51e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
51f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
5200: 20 20 2a 20 20 68 74 6d 6c 20 53 54 52 49 4e 47    *  html STRING
5210: 0a 0a 4f 75 74 70 75 74 73 20 74 68 65 20 53 54  ..Outputs the ST
5220: 52 49 4e 47 20 6c 69 74 65 72 61 6c 6c 79 2e 20  RING literally. 
5230: 20 49 74 20 69 73 20 61 73 73 75 6d 65 64 20 74   It is assumed t
5240: 68 61 74 20 53 54 52 49 4e 47 20 63 6f 6e 74 61  hat STRING conta
5250: 69 6e 73 0a 76 61 6c 69 64 20 48 54 4d 4c 2c 20  ins.valid HTML, 
5260: 6f 72 20 74 68 61 74 20 69 66 20 53 54 52 49 4e  or that if STRIN
5270: 47 20 63 6f 6e 74 61 69 6e 73 20 61 6e 79 20 63  G contains any c
5280: 68 61 72 61 63 74 65 72 73 20 74 68 61 74 20 61  haracters that a
5290: 72 65 0a 73 69 67 6e 69 66 69 63 61 6e 74 20 74  re.significant t
52a0: 6f 20 48 54 4d 4c 20 28 73 75 63 68 20 61 73 20  o HTML (such as 
52b0: 60 3c 60 2c 20 60 3e 60 2c 20 60 27 60 2c 20 6f  `<`, `>`, `'`, o
52c0: 72 20 60 26 60 29 20 68 61 76 65 20 61 6c 72 65  r `&`) have alre
52d0: 61 64 79 0a 62 65 65 6e 20 65 73 63 61 70 65 64  ady.been escaped
52e0: 2c 20 70 65 72 68 61 70 73 20 62 79 20 74 68 65  , perhaps by the
52f0: 20 5b 68 74 6d 6c 69 7a 65 5d 28 23 68 74 6d 6c   [htmlize](#html
5300: 69 7a 65 29 20 63 6f 6d 6d 61 6e 64 2e 20 20 55  ize) command.  U
5310: 73 65 20 74 68 65 0a 5b 70 75 74 73 5d 28 23 70  se the.[puts](#p
5320: 75 74 73 29 20 63 6f 6d 6d 61 6e 64 20 74 6f 20  uts) command to 
5330: 6f 75 74 70 75 74 20 74 65 78 74 20 74 68 61 74  output text that
5340: 20 6d 69 67 68 74 20 63 6f 6e 74 61 69 6e 20 75   might contain u
5350: 6e 65 73 63 61 70 65 64 0a 48 54 4d 4c 20 6d 61  nescaped.HTML ma
5360: 72 6b 75 70 2e 0a 0a 2a 2a 42 65 77 61 72 65 20  rkup...**Beware 
5370: 6f 66 20 58 53 53 20 61 74 74 61 63 6b 73 21 2a  of XSS attacks!*
5380: 2a 20 20 49 66 20 74 68 65 20 53 54 52 49 4e 47  *  If the STRING
5390: 20 76 61 6c 75 65 20 74 6f 20 74 68 65 20 68 74   value to the ht
53a0: 6d 6c 20 63 6f 6d 6d 61 6e 64 0a 63 61 6e 20 62  ml command.can b
53b0: 65 20 63 6f 6e 74 72 6f 6c 6c 65 64 20 62 79 20  e controlled by 
53c0: 61 20 68 6f 73 74 69 6c 65 20 75 73 65 72 2c 20  a hostile user, 
53d0: 74 68 65 6e 20 68 65 20 6d 69 67 68 74 20 62 65  then he might be
53e0: 20 61 62 6c 65 20 74 6f 20 73 6e 65 61 6b 0a 69   able to sneak.i
53f0: 6e 20 6d 61 6c 69 63 69 6f 75 73 20 48 54 4d 4c  n malicious HTML
5400: 20 6f 72 20 4a 61 76 61 73 63 72 69 70 74 20 77   or Javascript w
5410: 68 69 63 68 20 63 6f 75 6c 64 20 72 65 73 75 6c  hich could resul
5420: 74 20 69 6e 20 61 0a 63 72 6f 73 73 2d 73 69 74  t in a.cross-sit
5430: 65 20 73 63 72 69 70 74 69 6e 67 20 28 58 53 53  e scripting (XSS
5440: 29 20 61 74 74 61 63 6b 2e 20 20 42 65 20 63 61  ) attack.  Be ca
5450: 72 65 66 75 6c 20 74 68 61 74 20 61 6c 6c 20 74  reful that all t
5460: 65 78 74 20 74 68 61 74 0a 69 6e 20 53 54 52 49  ext that.in STRI
5470: 4e 47 20 74 68 61 74 20 6d 69 67 68 74 20 63 6f  NG that might co
5480: 6d 65 20 66 72 6f 6d 20 75 73 65 72 20 69 6e 70  me from user inp
5490: 75 74 20 68 61 73 20 62 65 65 6e 20 73 61 6e 69  ut has been sani
54a0: 74 69 7a 65 64 20 62 79 20 74 68 65 0a 5b 68 74  tized by the.[ht
54b0: 6d 6c 69 7a 65 5d 28 23 68 74 6d 6c 69 7a 65 29  mlize](#htmlize)
54c0: 20 63 6f 6d 6d 61 6e 64 20 6f 72 20 73 69 6d 69   command or simi
54d0: 6c 61 72 2e 20 20 49 6e 20 72 65 63 65 6e 74 20  lar.  In recent 
54e0: 76 65 72 73 69 6f 6e 73 20 6f 66 20 46 6f 73 73  versions of Foss
54f0: 69 6c 2c 0a 74 68 65 20 53 54 52 49 4e 47 20 76  il,.the STRING v
5500: 61 6c 75 65 20 6d 75 73 74 20 62 65 20 5b 75 6e  alue must be [un
5510: 74 61 69 6e 74 65 64 5d 28 23 74 61 69 6e 74 29  tainted](#taint)
5520: 20 6f 72 20 65 6c 73 65 20 74 68 65 20 22 68 74   or else the "ht
5530: 6d 6c 22 20 63 6f 6d 6d 61 6e 64 20 0a 77 69 6c  ml" command .wil
5540: 6c 20 66 61 69 6c 2e 0a 0a 3c 61 20 69 64 3d 22  l fail...<a id="
5550: 68 74 6d 6c 69 7a 65 22 3e 3c 2f 61 3e 54 48 31  htmlize"></a>TH1
5560: 20 68 74 6d 6c 69 7a 65 20 43 6f 6d 6d 61 6e 64   htmlize Command
5570: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
5580: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5590: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20  ----------..  * 
55a0: 20 68 74 6d 6c 69 7a 65 20 53 54 52 49 4e 47 0a   htmlize STRING.
55b0: 0a 45 73 63 61 70 65 20 61 6c 6c 20 63 68 61 72  .Escape all char
55c0: 61 63 74 65 72 73 20 6f 66 20 53 54 52 49 4e 47  acters of STRING
55d0: 20 77 68 69 63 68 20 68 61 76 65 20 73 70 65 63   which have spec
55e0: 69 61 6c 20 6d 65 61 6e 69 6e 67 20 69 6e 20 48  ial meaning in H
55f0: 54 4d 4c 2e 0a 52 65 74 75 72 6e 73 20 74 68 65  TML..Returns the
5600: 20 65 73 63 61 70 65 64 20 73 74 72 69 6e 67 2e   escaped string.
5610: 0a 0a 3c 61 20 69 64 3d 22 68 74 74 70 22 3e 3c  ..<a id="http"><
5620: 2f 61 3e 54 48 31 20 68 74 74 70 20 43 6f 6d 6d  /a>TH1 http Comm
5630: 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  and.------------
5640: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5650: 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 68 74  -------..  *  ht
5660: 74 70 20 3f 2d 61 73 79 6e 63 68 72 6f 6e 6f 75  tp ?-asynchronou
5670: 73 3f 20 3f 2d 2d 3f 20 75 72 6c 20 3f 70 61 79  s? ?--? url ?pay
5680: 6c 6f 61 64 3f 0a 0a 50 65 72 66 6f 72 6d 73 20  load?..Performs 
5690: 61 6e 20 48 54 54 50 20 6f 72 20 48 54 54 50 53  an HTTP or HTTPS
56a0: 20 72 65 71 75 65 73 74 20 66 6f 72 20 74 68 65   request for the
56b0: 20 73 70 65 63 69 66 69 65 64 20 55 52 4c 2e 20   specified URL. 
56c0: 20 49 66 20 61 0a 70 61 79 6c 6f 61 64 20 69 73   If a.payload is
56d0: 20 70 72 65 73 65 6e 74 2c 20 69 74 20 77 69 6c   present, it wil
56e0: 6c 20 62 65 20 69 6e 74 65 72 70 72 65 74 65 64  l be interpreted
56f0: 20 61 73 20 74 65 78 74 2f 70 6c 61 69 6e 20 61   as text/plain a
5700: 6e 64 0a 74 68 65 20 50 4f 53 54 20 6d 65 74 68  nd.the POST meth
5710: 6f 64 20 77 69 6c 6c 20 62 65 20 75 73 65 64 3b  od will be used;
5720: 20 6f 74 68 65 72 77 69 73 65 2c 20 74 68 65 20   otherwise, the 
5730: 47 45 54 20 6d 65 74 68 6f 64 20 77 69 6c 6c 0a  GET method will.
5740: 62 65 20 75 73 65 64 2e 20 20 55 70 6f 6e 20 73  be used.  Upon s
5750: 75 63 63 65 73 73 2c 20 69 66 20 74 68 65 20 2d  uccess, if the -
5760: 61 73 79 6e 63 68 72 6f 6e 6f 75 73 20 6f 70 74  asynchronous opt
5770: 69 6f 6e 20 69 73 20 75 73 65 64 2c 20 61 6e 0a  ion is used, an.
5780: 65 6d 70 74 79 20 73 74 72 69 6e 67 20 69 73 20  empty string is 
5790: 72 65 74 75 72 6e 65 64 20 61 73 20 74 68 65 20  returned as the 
57a0: 72 65 73 75 6c 74 3b 20 6f 74 68 65 72 77 69 73  result; otherwis
57b0: 65 2c 20 74 68 65 20 72 65 73 70 6f 6e 73 65 0a  e, the response.
57c0: 66 72 6f 6d 20 74 68 65 20 73 65 72 76 65 72 20  from the server 
57d0: 69 73 20 72 65 74 75 72 6e 65 64 20 61 73 20 74  is returned as t
57e0: 68 65 20 72 65 73 75 6c 74 2e 20 20 53 79 6e 63  he result.  Sync
57f0: 68 72 6f 6e 6f 75 73 20 72 65 71 75 65 73 74 73  hronous requests
5800: 0a 61 72 65 20 6e 6f 74 20 63 75 72 72 65 6e 74  .are not current
5810: 6c 79 20 69 6d 70 6c 65 6d 65 6e 74 65 64 2e 0a  ly implemented..
5820: 0a 3c 61 20 69 64 3d 22 68 74 74 70 69 7a 65 22  .<a id="httpize"
5830: 3e 3c 2f 61 3e 54 48 31 20 68 74 74 70 69 7a 65  ></a>TH1 httpize
5840: 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d   Command.-------
5850: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5860: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5870: 2d 2d 0a 0a 20 20 2a 20 20 68 74 74 70 69 7a 65  --..  *  httpize
5880: 20 53 54 52 49 4e 47 0a 0a 45 73 63 61 70 65 20   STRING..Escape 
5890: 61 6c 6c 20 63 68 61 72 61 63 74 65 72 73 20 6f  all characters o
58a0: 66 20 53 54 52 49 4e 47 20 77 68 69 63 68 20 68  f STRING which h
58b0: 61 76 65 20 73 70 65 63 69 61 6c 20 6d 65 61 6e  ave special mean
58c0: 69 6e 67 20 69 6e 20 55 52 49 0a 63 6f 6d 70 6f  ing in URI.compo
58d0: 6e 65 6e 74 73 2e 20 20 52 65 74 75 72 6e 73 20  nents.  Returns 
58e0: 74 68 65 20 65 73 63 61 70 65 64 20 73 74 72 69  the escaped stri
58f0: 6e 67 2e 0a 0a 3c 61 20 69 64 3d 22 69 6e 73 65  ng...<a id="inse
5900: 72 74 43 73 72 66 22 3e 3c 2f 61 3e 54 48 31 20  rtCsrf"></a>TH1 
5910: 69 6e 73 65 72 74 43 73 72 66 20 43 6f 6d 6d 61  insertCsrf Comma
5920: 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nd.-------------
5930: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5940: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5950: 2d 2d 0a 0a 20 20 2a 20 20 69 6e 73 65 72 74 43  --..  *  insertC
5960: 73 72 66 0a 0a 57 68 69 6c 65 20 72 65 6e 64 65  srf..While rende
5970: 72 69 6e 67 20 61 20 66 6f 72 6d 2c 20 63 61 6c  ring a form, cal
5980: 6c 20 74 68 69 73 20 63 6f 6d 6d 61 6e 64 20 74  l this command t
5990: 6f 20 61 64 64 20 74 68 65 20 41 6e 74 69 2d 43  o add the Anti-C
59a0: 53 52 46 20 74 6f 6b 65 6e 0a 61 73 20 61 20 68  SRF token.as a h
59b0: 69 64 64 65 6e 20 65 6c 65 6d 65 6e 74 20 6f 66  idden element of
59c0: 20 74 68 65 20 66 6f 72 6d 2e 0a 0a 3c 61 20 69   the form...<a i
59d0: 64 3d 22 6c 69 6e 65 63 6f 75 6e 74 22 3e 3c 2f  d="linecount"></
59e0: 61 3e 54 48 31 20 6c 69 6e 65 63 6f 75 6e 74 20  a>TH1 linecount 
59f0: 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d  Command.--------
5a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5a20: 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 6c 69 6e 65  -----..  *  line
5a30: 63 6f 75 6e 74 20 53 54 52 49 4e 47 20 4d 41 58  count STRING MAX
5a40: 20 4d 49 4e 0a 0a 52 65 74 75 72 6e 73 20 6f 6e   MIN..Returns on
5a50: 65 20 6d 6f 72 65 20 74 68 61 6e 20 74 68 65 20  e more than the 
5a60: 6e 75 6d 62 65 72 20 6f 66 20 60 5c 6e 60 20 63  number of `\n` c
5a70: 68 61 72 61 63 74 65 72 73 20 69 6e 20 53 54 52  haracters in STR
5a80: 49 4e 47 2e 20 20 42 75 74 0a 6e 65 76 65 72 20  ING.  But.never 
5a90: 72 65 74 75 72 6e 73 20 6c 65 73 73 20 74 68 61  returns less tha
5aa0: 6e 20 4d 49 4e 20 6f 72 20 6d 6f 72 65 20 74 68  n MIN or more th
5ab0: 61 6e 20 4d 41 58 2e 0a 0a 3c 61 20 69 64 3d 22  an MAX...<a id="
5ac0: 6d 61 72 6b 64 6f 77 6e 22 3e 3c 2f 61 3e 54 48  markdown"></a>TH
5ad0: 31 20 6d 61 72 6b 64 6f 77 6e 20 43 6f 6d 6d 61  1 markdown Comma
5ae0: 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nd.-------------
5af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5b00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
5b10: 20 20 2a 20 20 6d 61 72 6b 64 6f 77 6e 20 53 54    *  markdown ST
5b20: 52 49 4e 47 0a 0a 52 65 6e 64 65 72 73 20 74 68  RING..Renders th
5b30: 65 20 69 6e 70 75 74 20 73 74 72 69 6e 67 20 61  e input string a
5b40: 73 20 6d 61 72 6b 64 6f 77 6e 2e 20 20 54 68 65  s markdown.  The
5b50: 20 72 65 73 75 6c 74 20 69 73 20 61 20 74 77 6f   result is a two
5b60: 2d 65 6c 65 6d 65 6e 74 20 6c 69 73 74 2e 0a 54  -element list..T
5b70: 68 65 20 66 69 72 73 74 20 65 6c 65 6d 65 6e 74  he first element
5b80: 20 63 6f 6e 74 61 69 6e 73 20 74 68 65 20 62 6f   contains the bo
5b90: 64 79 2c 20 72 65 6e 64 65 72 65 64 20 61 73 20  dy, rendered as 
5ba0: 48 54 4d 4c 2e 20 20 54 68 65 20 73 65 63 6f 6e  HTML.  The secon
5bb0: 64 20 65 6c 65 6d 65 6e 74 0a 69 73 20 74 68 65  d element.is the
5bc0: 20 74 65 78 74 2d 6f 6e 6c 79 20 74 69 74 6c 65   text-only title
5bd0: 20 73 74 72 69 6e 67 2e 0a 0a 3c 61 20 69 64 3d   string...<a id=
5be0: 22 6e 6f 6e 63 65 22 3e 3c 2f 61 3e 54 48 31 20  "nonce"></a>TH1 
5bf0: 6e 6f 6e 63 65 20 43 6f 6d 6d 61 6e 64 0a 2d 2d  nonce Command.--
5c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5c20: 2d 2d 2d 0a 0a 20 20 2a 20 20 6e 6f 6e 63 65 0a  ---..  *  nonce.
5c30: 0a 52 65 74 75 72 6e 73 20 74 68 65 20 76 61 6c  .Returns the val
5c40: 75 65 20 6f 66 20 74 68 65 20 63 72 79 70 74 6f  ue of the crypto
5c50: 67 72 61 70 68 69 63 20 6e 6f 6e 63 65 20 66 6f  graphic nonce fo
5c60: 72 20 74 68 65 20 72 65 71 75 65 73 74 20 62 65  r the request be
5c70: 69 6e 67 20 70 72 6f 63 65 73 73 65 64 2e 0a 0a  ing processed...
5c80: 3c 61 20 69 64 3d 22 70 75 74 73 22 3e 3c 2f 61  <a id="puts"></a
5c90: 3e 54 48 31 20 70 75 74 73 20 43 6f 6d 6d 61 6e  >TH1 puts Comman
5ca0: 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  d.--------------
5cb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5cc0: 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 70 75 74 73  -----..  *  puts
5cd0: 20 53 54 52 49 4e 47 0a 0a 4f 75 74 70 75 74 73   STRING..Outputs
5ce0: 20 53 54 52 49 4e 47 2e 20 20 43 68 61 72 61 63   STRING.  Charac
5cf0: 74 65 72 73 20 77 69 74 68 69 6e 20 53 54 52 49  ters within STRI
5d00: 4e 47 20 74 68 61 74 20 68 61 76 65 20 73 70 65  NG that have spe
5d10: 63 69 61 6c 20 6d 65 61 6e 69 6e 67 0a 69 6e 20  cial meaning.in 
5d20: 48 54 4d 4c 20 61 72 65 20 65 73 63 61 70 65 64  HTML are escaped
5d30: 20 70 72 69 6f 72 20 74 6f 20 62 65 69 6e 67 20   prior to being 
5d40: 6f 75 74 70 75 74 2e 20 20 54 68 75 73 20 69 73  output.  Thus is
5d50: 20 69 74 20 73 61 66 65 20 66 6f 72 20 53 54 52   it safe for STR
5d60: 49 4e 47 0a 74 6f 20 62 65 20 64 65 72 69 76 65  ING.to be derive
5d70: 64 20 66 72 6f 6d 20 75 73 65 72 20 69 6e 70 75  d from user inpu
5d80: 74 73 2e 20 20 53 65 65 20 61 6c 73 6f 20 74 68  ts.  See also th
5d90: 65 20 5b 68 74 6d 6c 5d 28 23 68 74 6d 6c 29 20  e [html](#html) 
5da0: 63 6f 6d 6d 61 6e 64 0a 77 68 69 63 68 20 62 65  command.which be
5db0: 68 61 76 65 73 20 73 69 6d 69 6c 61 72 6c 79 20  haves similarly 
5dc0: 65 78 63 65 70 74 20 64 6f 65 73 20 6e 6f 74 20  except does not 
5dd0: 65 73 63 61 70 65 20 48 54 4d 4c 20 6d 61 72 6b  escape HTML mark
5de0: 75 70 2e 20 20 54 68 69 73 0a 63 6f 6d 6d 61 6e  up.  This.comman
5df0: 64 20 28 22 70 75 74 73 22 29 20 69 73 20 73 61  d ("puts") is sa
5e00: 66 65 20 74 6f 20 75 73 65 20 6f 6e 20 5b 74 61  fe to use on [ta
5e10: 69 6e 74 65 64 20 73 74 72 69 6e 67 73 5d 28 23  inted strings](#
5e20: 74 61 69 6e 74 29 2c 20 62 75 74 20 74 68 65 20  taint), but the 
5e30: 22 68 74 6d 6c 22 0a 63 6f 6d 6d 61 6e 64 20 69  "html".command i
5e40: 73 20 6e 6f 74 2e 0a 0a 3c 61 20 69 64 3d 22 71  s not...<a id="q
5e50: 75 65 72 79 22 3e 3c 2f 61 3e 54 48 31 20 71 75  uery"></a>TH1 qu
5e60: 65 72 79 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d  ery Command.----
5e70: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
5e90: 2d 0a 0a 20 20 2a 20 20 71 75 65 72 79 20 3f 2d  -..  *  query ?-
5ea0: 6e 6f 63 6f 6d 70 6c 61 69 6e 3f 20 53 51 4c 20  nocomplain? SQL 
5eb0: 43 4f 44 45 0a 0a 52 75 6e 73 20 74 68 65 20 53  CODE..Runs the S
5ec0: 51 4c 20 71 75 65 72 79 20 67 69 76 65 6e 20 62  QL query given b
5ed0: 79 20 74 68 65 20 53 51 4c 20 61 72 67 75 6d 65  y the SQL argume
5ee0: 6e 74 2e 20 20 46 6f 72 20 65 61 63 68 20 72 6f  nt.  For each ro
5ef0: 77 20 69 6e 20 74 68 65 20 72 65 73 75 6c 74 0a  w in the result.
5f00: 73 65 74 2c 20 72 75 6e 20 43 4f 44 45 2e 0a 0a  set, run CODE...
5f10: 49 6e 20 53 51 4c 2c 20 70 61 72 61 6d 65 74 65  In SQL, paramete
5f20: 72 73 20 73 75 63 68 20 61 73 20 24 76 61 72 20  rs such as $var 
5f30: 61 72 65 20 66 69 6c 6c 65 64 20 69 6e 20 75 73  are filled in us
5f40: 69 6e 67 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ing the value of
5f50: 20 76 61 72 69 61 62 6c 65 0a 22 76 61 72 22 2e   variable."var".
5f60: 20 20 52 65 73 75 6c 74 20 76 61 6c 75 65 73 20    Result values 
5f70: 61 72 65 20 73 74 6f 72 65 64 20 69 6e 20 76 61  are stored in va
5f80: 72 69 61 62 6c 65 73 20 77 69 74 68 20 74 68 65  riables with the
5f90: 20 63 6f 6c 75 6d 6e 20 6e 61 6d 65 20 70 72 69   column name pri
5fa0: 6f 72 0a 74 6f 20 65 61 63 68 20 69 6e 76 6f 63  or.to each invoc
5fb0: 61 74 69 6f 6e 20 6f 66 20 43 4f 44 45 2e 20 20  ation of CODE.  
5fc0: 54 68 65 20 6e 61 6d 65 73 20 6f 66 20 74 68 65  The names of the
5fd0: 20 76 61 72 69 61 62 6c 65 73 20 69 6e 20 77 68   variables in wh
5fe0: 69 63 68 20 72 65 73 75 6c 74 73 0a 61 72 65 20  ich results.are 
5ff0: 73 74 6f 72 65 64 20 63 61 6e 20 62 65 20 63 6f  stored can be co
6000: 6e 74 72 6f 6c 6c 65 64 20 75 73 69 6e 67 20 22  ntrolled using "
6010: 41 53 20 6e 61 6d 65 22 20 63 6c 61 75 73 65 73  AS name" clauses
6020: 20 69 6e 20 74 68 65 20 53 51 4c 2e 20 20 41 73   in the SQL.  As
6030: 0a 74 68 65 20 64 61 74 61 62 61 73 65 20 77 69  .the database wi
6040: 6c 6c 20 6f 66 74 65 6e 20 63 6f 6e 74 61 69 6e  ll often contain
6050: 20 63 6f 6e 74 65 6e 74 20 74 68 61 74 20 6f 72   content that or
6060: 69 67 69 6e 61 74 65 73 20 66 72 6f 6d 20 75 6e  iginates from un
6070: 74 72 75 73 74 65 64 0a 75 73 65 72 73 2c 20 61  trusted.users, a
6080: 6c 6c 20 72 65 73 75 6c 74 20 76 61 6c 75 65 73  ll result values
6090: 20 61 72 65 20 6d 61 72 6b 65 64 20 61 73 20 5b   are marked as [
60a0: 74 61 69 6e 74 65 64 5d 28 23 74 61 69 6e 74 29  tainted](#taint)
60b0: 2e 0a 0a 2a 2a 42 65 77 61 72 65 20 6f 66 20 53  ...**Beware of S
60c0: 51 4c 20 69 6e 6a 65 63 74 69 6f 6e 73 20 69 6e  QL injections in
60d0: 20 74 68 65 20 60 71 75 65 72 79 60 20 63 6f 6d   the `query` com
60e0: 6d 61 6e 64 21 2a 2a 0a 54 68 65 20 53 51 4c 20  mand!**.The SQL 
60f0: 61 72 67 75 6d 65 6e 74 20 74 6f 20 74 68 65 20  argument to the 
6100: 71 75 65 72 79 20 63 6f 6d 6d 61 6e 64 20 73 68  query command sh
6110: 6f 75 6c 64 20 61 6c 77 61 79 73 20 62 65 20 6c  ould always be l
6120: 69 74 65 72 61 6c 20 53 51 4c 0a 74 65 78 74 20  iteral SQL.text 
6130: 65 6e 63 6c 6f 73 65 64 20 69 6e 20 7b 2e 2e 2e  enclosed in {...
6140: 7d 2e 20 20 54 68 65 20 53 51 4c 20 61 72 67 75  }.  The SQL argu
6150: 6d 65 6e 74 20 73 68 6f 75 6c 64 20 6e 65 76 65  ment should neve
6160: 72 20 62 65 20 61 20 64 6f 75 62 6c 65 2d 71 75  r be a double-qu
6170: 6f 74 65 64 0a 73 74 72 69 6e 67 20 6f 72 20 74  oted.string or t
6180: 68 65 20 76 61 6c 75 65 20 6f 66 20 61 20 5c 24  he value of a \$
6190: 76 61 72 69 61 62 6c 65 2c 20 61 73 20 74 68 6f  variable, as tho
61a0: 73 65 20 63 6f 6e 73 74 72 75 63 74 73 20 63 61  se constructs ca
61b0: 6e 20 6c 65 61 64 20 74 6f 0a 61 6e 20 53 51 4c  n lead to.an SQL
61c0: 20 49 6e 6a 65 63 74 69 6f 6e 20 61 74 74 61 63   Injection attac
61d0: 6b 2e 20 20 49 66 20 79 6f 75 20 6e 65 65 64 20  k.  If you need 
61e0: 74 6f 20 69 6e 63 6c 75 64 65 20 74 68 65 20 76  to include the v
61f0: 61 6c 75 65 73 20 6f 66 20 6f 6e 65 20 6f 72 0a  alues of one or.
6200: 6d 6f 72 65 20 54 48 31 20 76 61 72 69 61 62 6c  more TH1 variabl
6210: 65 73 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  es as part of th
6220: 65 20 53 51 4c 2c 20 74 68 65 6e 20 70 75 74 20  e SQL, then put 
6230: 5c 24 76 61 72 69 61 62 6c 65 20 69 6e 73 69 64  \$variable insid
6240: 65 20 74 68 65 0a 7b 2e 2e 2e 7d 2e 20 20 54 68  e the.{...}.  Th
6250: 65 20 5c 24 76 61 72 69 61 62 6c 65 20 6b 65 79  e \$variable key
6260: 77 6f 72 64 20 77 69 6c 6c 20 74 68 65 6e 20 67  word will then g
6270: 65 74 20 70 61 73 73 65 64 20 64 6f 77 6e 20 69  et passed down i
6280: 6e 74 6f 20 74 68 65 20 53 51 4c 69 74 65 0a 70  nto the SQLite.p
6290: 61 72 73 65 72 20 77 68 69 63 68 20 6b 6e 6f 77  arser which know
62a0: 73 20 74 6f 20 6c 6f 6f 6b 20 75 70 20 74 68 65  s to look up the
62b0: 20 76 61 6c 75 65 20 6f 66 20 5c 24 76 61 72 69   value of \$vari
62c0: 61 62 6c 65 20 69 6e 20 74 68 65 20 54 48 31 20  able in the TH1 
62d0: 73 79 6d 62 6f 6c 0a 74 61 62 6c 65 2e 20 20 46  symbol.table.  F
62e0: 6f 72 20 65 78 61 6d 70 6c 65 3a 0a 0a 7e 7e 7e  or example:..~~~
62f0: 0a 20 20 20 71 75 65 72 79 20 7b 53 45 4c 45 43  .   query {SELEC
6300: 54 20 72 65 73 20 46 52 4f 4d 20 74 61 62 31 20  T res FROM tab1 
6310: 57 48 45 52 45 20 6b 65 79 3d 24 6d 79 6b 65 79  WHERE key=$mykey
6320: 7d 20 7b 2e 2e 2e 7d 0a 7e 7e 7e 0a 0a 53 51 4c  } {...}.~~~..SQL
6330: 69 74 65 20 77 69 6c 6c 20 73 65 65 20 74 68 65  ite will see the
6340: 20 5c 24 6d 79 6b 65 79 20 74 6f 6b 65 6e 20 69   \$mykey token i
6350: 6e 20 74 68 65 20 53 51 4c 20 61 6e 64 20 77 69  n the SQL and wi
6360: 6c 6c 20 6b 6e 6f 77 20 74 6f 20 72 65 73 6f 6c  ll know to resol
6370: 76 65 20 69 74 0a 74 6f 20 74 68 65 20 76 61 6c  ve it.to the val
6380: 75 65 20 6f 66 20 74 68 65 20 22 6d 79 6b 65 79  ue of the "mykey
6390: 22 20 54 48 31 20 76 61 72 69 61 62 6c 65 2c 20  " TH1 variable, 
63a0: 73 61 66 65 6c 79 20 61 6e 64 20 77 69 74 68 6f  safely and witho
63b0: 75 74 20 74 68 65 20 70 6f 73 73 69 62 69 6c 69  ut the possibili
63c0: 74 79 0a 6f 66 20 53 51 4c 20 69 6e 6a 65 63 74  ty.of SQL inject
63d0: 69 6f 6e 2e 20 20 54 68 65 20 66 6f 6c 6c 6f 77  ion.  The follow
63e0: 69 6e 67 20 69 73 20 75 6e 73 61 66 65 3a 0a 0a  ing is unsafe:..
63f0: 7e 7e 7e 0a 20 20 20 71 75 65 72 79 20 22 53 45  ~~~.   query "SE
6400: 4c 45 43 54 20 72 65 73 20 46 52 4f 4d 20 74 61  LECT res FROM ta
6410: 62 31 20 57 48 45 52 45 20 6b 65 79 3d 27 24 6d  b1 WHERE key='$m
6420: 79 6b 65 79 27 22 20 7b 2e 2e 2e 7d 20 20 3b 23  ykey'" {...}  ;#
6430: 20 3c 2d 2d 20 55 4e 53 41 46 45 21 0a 7e 7e 7e   <-- UNSAFE!.~~~
6440: 0a 0a 49 6e 20 74 68 69 73 20 73 65 63 6f 6e 64  ..In this second
6450: 20 65 78 61 6d 70 6c 65 2c 20 54 48 31 20 64 6f   example, TH1 do
6460: 65 73 20 74 68 65 20 65 78 70 61 6e 73 69 6f 6e  es the expansion
6470: 20 6f 66 20 60 24 6d 79 6b 65 79 60 20 70 72 69   of `$mykey` pri
6480: 6f 72 20 74 6f 20 70 61 73 73 69 6e 67 0a 74 68  or to passing.th
6490: 65 20 74 65 78 74 20 64 6f 77 6e 20 69 6e 74 6f  e text down into
64a0: 20 53 51 4c 69 74 65 2e 20 20 53 6f 20 69 66 20   SQLite.  So if 
64b0: 60 24 6d 79 6b 65 79 60 20 63 6f 6e 74 61 69 6e  `$mykey` contain
64c0: 73 20 61 20 73 69 6e 67 6c 65 2d 71 75 6f 74 65  s a single-quote
64d0: 20 63 68 61 72 61 63 74 65 72 2c 0a 66 6f 6c 6c   character,.foll
64e0: 6f 77 65 64 20 62 79 20 61 64 64 69 74 69 6f 6e  owed by addition
64f0: 61 6c 20 68 6f 73 74 69 6c 65 20 74 65 78 74 2c  al hostile text,
6500: 20 74 68 61 74 20 77 69 6c 6c 20 72 65 73 75 6c   that will resul
6510: 74 20 69 6e 20 61 6e 20 53 51 4c 20 69 6e 6a 65  t in an SQL inje
6520: 63 74 69 6f 6e 2e 0a 0a 54 6f 20 68 65 6c 70 20  ction...To help 
6530: 67 75 61 72 64 20 61 67 61 69 6e 73 74 20 53 51  guard against SQ
6540: 4c 2d 69 6e 6a 65 63 74 69 6f 6e 73 2c 20 72 65  L-injections, re
6550: 63 65 6e 74 20 76 65 72 73 69 6f 6e 73 20 6f 66  cent versions of
6560: 20 46 6f 73 73 69 6c 20 72 65 71 75 69 72 65 0a   Fossil require.
6570: 74 68 61 74 20 74 68 65 20 53 51 4c 20 61 72 67  that the SQL arg
6580: 75 6d 65 6e 74 20 62 65 20 5b 75 6e 74 61 69 6e  ument be [untain
6590: 74 65 64 5d 28 23 74 61 69 6e 74 29 20 6f 72 20  ted](#taint) or 
65a0: 65 6c 73 65 20 74 68 65 20 22 71 75 65 72 79 22  else the "query"
65b0: 20 63 6f 6d 6d 61 6e 64 0a 77 69 6c 6c 20 66 61   command.will fa
65c0: 69 6c 2e 0a 0a 3c 61 20 69 64 3d 22 72 61 6e 64  il...<a id="rand
65d0: 68 65 78 22 3e 3c 2f 61 3e 54 48 31 20 72 61 6e  hex"></a>TH1 ran
65e0: 64 68 65 78 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d  dhex Command.---
65f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6600: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6610: 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 72 61 6e  ------..  *  ran
6620: 64 68 65 78 20 4e 0a 0a 52 65 74 75 72 6e 73 20  dhex N..Returns 
6630: 61 20 73 74 72 69 6e 67 20 6f 66 20 4e 2a 32 20  a string of N*2 
6640: 72 61 6e 64 6f 6d 20 68 65 78 61 64 65 63 69 6d  random hexadecim
6650: 61 6c 20 64 69 67 69 74 73 20 77 69 74 68 20 4e  al digits with N
6660: 3c 35 30 2e 20 20 49 66 20 4e 20 69 73 0a 6f 6d  <50.  If N is.om
6670: 69 74 74 65 64 2c 20 75 73 65 20 61 20 76 61 6c  itted, use a val
6680: 75 65 20 6f 66 20 31 30 2e 0a 0a 3c 61 20 69 64  ue of 10...<a id
6690: 3d 22 72 65 64 69 72 65 63 74 22 3e 3c 2f 61 3e  ="redirect"></a>
66a0: 54 48 31 20 72 65 64 69 72 65 63 74 20 43 6f 6d  TH1 redirect Com
66b0: 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mand.-----------
66c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
66e0: 0a 0a 20 20 2a 20 20 72 65 64 69 72 65 63 74 20  ..  *  redirect 
66f0: 55 52 4c 20 3f 77 69 74 68 4d 65 74 68 6f 64 3f  URL ?withMethod?
6700: 0a 0a 49 73 73 75 65 73 20 61 6e 20 48 54 54 50  ..Issues an HTTP
6710: 20 72 65 64 69 72 65 63 74 20 74 6f 20 74 68 65   redirect to the
6720: 20 73 70 65 63 69 66 69 65 64 20 55 52 4c 20 61   specified URL a
6730: 6e 64 20 74 68 65 6e 20 65 78 69 74 73 20 74 68  nd then exits th
6740: 65 20 70 72 6f 63 65 73 73 2e 0a 42 79 20 64 65  e process..By de
6750: 66 61 75 6c 74 2c 20 61 6e 20 48 54 54 50 20 73  fault, an HTTP s
6760: 74 61 74 75 73 20 63 6f 64 65 20 6f 66 20 33 30  tatus code of 30
6770: 32 20 69 73 20 75 73 65 64 2e 20 20 49 66 20 74  2 is used.  If t
6780: 68 65 20 6f 70 74 69 6f 6e 61 6c 20 77 69 74 68  he optional with
6790: 4d 65 74 68 6f 64 0a 61 72 67 75 6d 65 6e 74 20  Method.argument 
67a0: 69 73 20 70 72 65 73 65 6e 74 20 61 6e 64 20 6e  is present and n
67b0: 6f 6e 2d 7a 65 72 6f 2c 20 61 6e 20 48 54 54 50  on-zero, an HTTP
67c0: 20 73 74 61 74 75 73 20 63 6f 64 65 20 6f 66 20   status code of 
67d0: 33 30 37 20 69 73 20 75 73 65 64 2c 20 77 68 69  307 is used, whi
67e0: 63 68 0a 73 68 6f 75 6c 64 20 66 6f 72 63 65 20  ch.should force 
67f0: 74 68 65 20 75 73 65 72 20 61 67 65 6e 74 20 74  the user agent t
6800: 6f 20 70 72 65 73 65 72 76 65 20 74 68 65 20 6f  o preserve the o
6810: 72 69 67 69 6e 61 6c 20 6d 65 74 68 6f 64 20 66  riginal method f
6820: 6f 72 20 74 68 65 20 72 65 71 75 65 73 74 0a 28  or the request.(
6830: 65 2e 67 2e 20 47 45 54 2c 20 50 4f 53 54 29 20  e.g. GET, POST) 
6840: 69 6e 73 74 65 61 64 20 6f 66 20 28 70 6f 73 73  instead of (poss
6850: 69 62 6c 79 29 20 66 6f 72 63 69 6e 67 20 74 68  ibly) forcing th
6860: 65 20 75 73 65 72 20 61 67 65 6e 74 20 74 6f 20  e user agent to 
6870: 63 68 61 6e 67 65 20 74 68 65 0a 6d 65 74 68 6f  change the.metho
6880: 64 20 74 6f 20 47 45 54 2e 0a 0a 3c 61 20 69 64  d to GET...<a id
6890: 3d 22 72 65 67 65 78 70 22 3e 3c 2f 61 3e 54 48  ="regexp"></a>TH
68a0: 31 20 72 65 67 65 78 70 20 43 6f 6d 6d 61 6e 64  1 regexp Command
68b0: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
68c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
68d0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 72  --------..  *  r
68e0: 65 67 65 78 70 20 3f 2d 6e 6f 63 61 73 65 3f 20  egexp ?-nocase? 
68f0: 3f 2d 2d 3f 20 65 78 70 20 73 74 72 69 6e 67 0a  ?--? exp string.
6900: 0a 43 68 65 63 6b 73 20 74 68 65 20 73 74 72 69  .Checks the stri
6910: 6e 67 20 61 67 61 69 6e 73 74 20 74 68 65 20 73  ng against the s
6920: 70 65 63 69 66 69 65 64 20 72 65 67 75 6c 61 72  pecified regular
6930: 20 65 78 70 72 65 73 73 69 6f 6e 20 61 6e 64 20   expression and 
6940: 72 65 74 75 72 6e 73 0a 6e 6f 6e 2d 7a 65 72 6f  returns.non-zero
6950: 20 69 66 20 69 74 20 6d 61 74 63 68 65 73 2e 20   if it matches. 
6960: 20 49 66 20 74 68 65 20 72 65 67 75 6c 61 72 20   If the regular 
6970: 65 78 70 72 65 73 73 69 6f 6e 20 69 73 20 69 6e  expression is in
6980: 76 61 6c 69 64 20 6f 72 20 63 61 6e 6e 6f 74 0a  valid or cannot.
6990: 62 65 20 63 6f 6d 70 69 6c 65 64 2c 20 61 6e 20  be compiled, an 
69a0: 65 72 72 6f 72 20 77 69 6c 6c 20 62 65 20 67 65  error will be ge
69b0: 6e 65 72 61 74 65 64 2e 0a 0a 53 65 65 20 5b 66  nerated...See [f
69c0: 6f 73 73 69 6c 20 67 72 65 70 5d 28 2e 2f 67 72  ossil grep](./gr
69d0: 65 70 2e 6d 64 29 20 66 6f 72 20 64 65 74 61 69  ep.md) for detai
69e0: 6c 73 20 6f 6e 20 74 68 65 20 72 65 67 65 78 70  ls on the regexp
69f0: 20 73 79 6e 74 61 78 2e 0a 0a 3c 61 20 69 64 3d   syntax...<a id=
6a00: 22 72 65 69 6e 69 74 69 61 6c 69 7a 65 22 3e 3c  "reinitialize"><
6a10: 2f 61 3e 54 48 31 20 72 65 69 6e 69 74 69 61 6c  /a>TH1 reinitial
6a20: 69 7a 65 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d  ize Command.----
6a30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a40: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6a50: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
6a60: 0a 20 20 2a 20 20 72 65 69 6e 69 74 69 61 6c 69  .  *  reinitiali
6a70: 7a 65 20 3f 46 4c 41 47 53 3f 0a 0a 52 65 69 6e  ze ?FLAGS?..Rein
6a80: 69 74 69 61 6c 69 7a 65 73 20 74 68 65 20 54 48  itializes the TH
6a90: 31 20 69 6e 74 65 72 70 72 65 74 65 72 20 75 73  1 interpreter us
6aa0: 69 6e 67 20 74 68 65 20 73 70 65 63 69 66 69 65  ing the specifie
6ab0: 64 20 66 6c 61 67 73 2e 0a 0a 3c 61 20 69 64 3d  d flags...<a id=
6ac0: 22 72 65 6e 64 65 72 22 3e 3c 2f 61 3e 54 48 31  "render"></a>TH1
6ad0: 20 72 65 6e 64 65 72 20 43 6f 6d 6d 61 6e 64 0a   render Command.
6ae0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6af0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6b00: 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 72 65  -------..  *  re
6b10: 6e 64 65 72 20 53 54 52 49 4e 47 0a 0a 52 65 6e  nder STRING..Ren
6b20: 64 65 72 73 20 74 68 65 20 54 48 31 20 74 65 6d  ders the TH1 tem
6b30: 70 6c 61 74 65 20 61 6e 64 20 77 72 69 74 65 73  plate and writes
6b40: 20 74 68 65 20 72 65 73 75 6c 74 73 2e 0a 0a 3c   the results...<
6b50: 61 20 69 64 3d 22 72 65 70 6f 73 69 74 6f 72 79  a id="repository
6b60: 22 3e 3c 2f 61 3e 54 48 31 20 72 65 70 6f 73 69  "></a>TH1 reposi
6b70: 74 6f 72 79 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d  tory Command.---
6b80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6b90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ba0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20  ------------..  
6bb0: 2a 20 20 72 65 70 6f 73 69 74 6f 72 79 20 3f 42  *  repository ?B
6bc0: 4f 4f 4c 45 41 4e 3f 0a 0a 52 65 74 75 72 6e 73  OOLEAN?..Returns
6bd0: 20 74 68 65 20 66 75 6c 6c 79 20 71 75 61 6c 69   the fully quali
6be0: 66 69 65 64 20 66 69 6c 65 20 6e 61 6d 65 20 6f  fied file name o
6bf0: 66 20 74 68 65 20 6f 70 65 6e 20 72 65 70 6f 73  f the open repos
6c00: 69 74 6f 72 79 20 6f 72 20 61 6e 20 65 6d 70 74  itory or an empt
6c10: 79 0a 73 74 72 69 6e 67 20 69 66 20 6f 6e 65 20  y.string if one 
6c20: 69 73 20 6e 6f 74 20 63 75 72 72 65 6e 74 6c 79  is not currently
6c30: 20 6f 70 65 6e 2e 20 20 4f 70 74 69 6f 6e 61 6c   open.  Optional
6c40: 6c 79 2c 20 69 74 20 77 69 6c 6c 20 61 74 74 65  ly, it will atte
6c50: 6d 70 74 20 74 6f 20 6f 70 65 6e 0a 74 68 65 20  mpt to open.the 
6c60: 72 65 70 6f 73 69 74 6f 72 79 20 69 66 20 74 68  repository if th
6c70: 65 20 62 6f 6f 6c 65 61 6e 20 61 72 67 75 6d 65  e boolean argume
6c80: 6e 74 20 69 73 20 6e 6f 6e 2d 7a 65 72 6f 2e 0a  nt is non-zero..
6c90: 0a 3c 61 20 69 64 3d 22 73 65 61 72 63 68 61 62  .<a id="searchab
6ca0: 6c 65 22 3e 3c 2f 61 3e 54 48 31 20 73 65 61 72  le"></a>TH1 sear
6cb0: 63 68 61 62 6c 65 20 43 6f 6d 6d 61 6e 64 0a 2d  chable Command.-
6cc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6cd0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
6ce0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
6cf0: 20 20 2a 20 20 73 65 61 72 63 68 61 62 6c 65 20    *  searchable 
6d00: 53 54 52 49 4e 47 2e 2e 2e 0a 0a 52 65 74 75 72  STRING.....Retur
6d10: 6e 20 74 72 75 65 20 69 66 20 73 65 61 72 63 68  n true if search
6d20: 69 6e 67 20 69 6e 20 61 6e 79 20 6f 66 20 74 68  ing in any of th
6d30: 65 20 64 6f 63 75 6d 65 6e 74 20 63 6c 61 73 73  e document class
6d40: 65 73 20 69 64 65 6e 74 69 66 69 65 64 0a 62 79  es identified.by
6d50: 20 53 54 52 49 4e 47 20 69 73 20 65 6e 61 62 6c   STRING is enabl
6d60: 65 64 20 66 6f 72 20 74 68 65 20 72 65 70 6f 73  ed for the repos
6d70: 69 74 6f 72 79 20 61 6e 64 20 75 73 65 72 20 68  itory and user h
6d80: 61 73 20 74 68 65 20 6e 65 63 65 73 73 61 72 79  as the necessary
6d90: 0a 63 61 70 61 62 69 6c 69 74 69 65 73 20 74 6f  .capabilities to
6da0: 20 70 65 72 66 6f 72 6d 20 74 68 65 20 73 65 61   perform the sea
6db0: 72 63 68 2e 20 20 54 68 65 20 70 6f 73 73 69 62  rch.  The possib
6dc0: 6c 65 20 64 6f 63 75 6d 65 6e 74 20 63 6c 61 73  le document clas
6dd0: 73 65 73 0a 61 72 65 3a 0a 0a 20 20 31 2e 20 2a  ses.are:..  1. *
6de0: 2a 63 2a 2a 20 2d 2d 20 5f 43 68 65 63 6b 2d 69  *c** -- _Check-i
6df0: 6e 20 63 6f 6d 6d 65 6e 74 73 5f 0a 20 20 31 2e  n comments_.  1.
6e00: 20 2a 2a 64 2a 2a 20 2d 2d 20 5f 45 6d 62 65 64   **d** -- _Embed
6e10: 64 65 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f  ded documentatio
6e20: 6e 5f 0a 20 20 31 2e 20 2a 2a 74 2a 2a 20 2d 2d  n_.  1. **t** --
6e30: 20 5f 54 69 63 6b 65 74 73 5f 0a 20 20 31 2e 20   _Tickets_.  1. 
6e40: 2a 2a 77 2a 2a 20 2d 2d 20 5f 57 69 6b 69 5f 0a  **w** -- _Wiki_.
6e50: 0a 54 6f 20 62 65 20 63 6c 65 61 72 2c 20 6f 6e  .To be clear, on
6e60: 6c 79 20 6f 6e 65 20 6f 66 20 74 68 65 20 64 6f  ly one of the do
6e70: 63 75 6d 65 6e 74 20 63 6c 61 73 73 65 73 20 69  cument classes i
6e80: 64 65 6e 74 69 66 69 65 64 20 62 79 20 65 61 63  dentified by eac
6e90: 68 20 53 54 52 49 4e 47 0a 6e 65 65 64 73 20 74  h STRING.needs t
6ea0: 6f 20 62 65 20 73 65 61 72 63 68 61 62 6c 65 20  o be searchable 
6eb0: 69 6e 20 6f 72 64 65 72 20 66 6f 72 20 74 68 61  in order for tha
6ec0: 74 20 61 72 67 75 6d 65 6e 74 20 74 6f 20 62 65  t argument to be
6ed0: 20 74 72 75 65 2e 20 20 42 75 74 20 61 6c 6c 0a   true.  But all.
6ee0: 61 72 67 75 6d 65 6e 74 73 20 6d 75 73 74 20 62  arguments must b
6ef0: 65 20 74 72 75 65 20 66 6f 72 20 74 68 69 73 20  e true for this 
6f00: 72 6f 75 74 69 6e 65 20 74 6f 20 72 65 74 75 72  routine to retur
6f10: 6e 20 74 72 75 65 2e 20 20 48 65 6e 63 65 2c 20  n true.  Hence, 
6f20: 74 6f 20 73 65 65 0a 69 66 20 41 4c 4c 20 64 6f  to see.if ALL do
6f30: 63 75 6d 65 6e 74 20 63 6c 61 73 73 65 73 20 61  cument classes a
6f40: 72 65 20 73 65 61 72 63 68 61 62 6c 65 3a 0a 0a  re searchable:..
6f50: 20 20 20 20 69 66 20 7b 5b 73 65 61 72 63 68 61      if {[searcha
6f60: 62 6c 65 20 63 20 64 20 74 20 77 5d 7d 20 7b 2e  ble c d t w]} {.
6f70: 2e 2e 7d 0a 0a 42 75 74 20 74 6f 20 73 65 65 20  ..}..But to see 
6f80: 69 66 20 41 4e 59 20 64 6f 63 75 6d 65 6e 74 20  if ANY document 
6f90: 63 6c 61 73 73 20 69 73 20 73 65 61 72 63 68 61  class is searcha
6fa0: 62 6c 65 3a 0a 0a 20 20 20 20 69 66 20 7b 5b 73  ble:..    if {[s
6fb0: 65 61 72 63 68 61 62 6c 65 20 63 64 74 77 5d 7d  earchable cdtw]}
6fc0: 20 7b 2e 2e 2e 7d 0a 0a 54 68 69 73 20 63 6f 6d   {...}..This com
6fd0: 6d 61 6e 64 20 69 73 20 75 73 65 66 75 6c 20 66  mand is useful f
6fe0: 6f 72 20 65 6e 61 62 6c 69 6e 67 20 6f 72 20 64  or enabling or d
6ff0: 69 73 61 62 6c 69 6e 67 20 61 20 22 53 65 61 72  isabling a "Sear
7000: 63 68 22 20 65 6e 74 72 79 20 6f 6e 20 74 68 65  ch" entry on the
7010: 0a 6d 65 6e 75 20 62 61 72 2e 0a 0a 3c 61 20 69  .menu bar...<a i
7020: 64 3d 22 73 65 74 50 61 72 61 6d 65 74 65 72 22  d="setParameter"
7030: 3e 3c 2f 61 3e 54 48 31 20 73 65 74 50 61 72 61  ></a>TH1 setPara
7040: 6d 65 74 65 72 20 43 6f 6d 6d 61 6e 64 0a 2d 2d  meter Command.--
7050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7070: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7080: 2d 0a 0a 20 20 2a 20 20 73 65 74 50 61 72 61 6d  -..  *  setParam
7090: 65 74 65 72 20 4e 41 4d 45 20 56 41 4c 55 45 0a  eter NAME VALUE.
70a0: 0a 53 65 74 73 20 74 68 65 20 76 61 6c 75 65 20  .Sets the value 
70b0: 6f 66 20 74 68 65 20 73 70 65 63 69 66 69 65 64  of the specified
70c0: 20 71 75 65 72 79 20 70 61 72 61 6d 65 74 65 72   query parameter
70d0: 2e 0a 0a 3c 61 20 69 64 3d 22 73 65 74 74 69 6e  ...<a id="settin
70e0: 67 22 3e 3c 2f 61 3e 54 48 31 20 73 65 74 74 69  g"></a>TH1 setti
70f0: 6e 67 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d  ng Command.-----
7100: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7120: 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 73 65 74 74 69  ----..  *  setti
7130: 6e 67 20 6e 61 6d 65 0a 0a 47 65 74 73 20 61 6e  ng name..Gets an
7140: 64 20 72 65 74 75 72 6e 73 20 74 68 65 20 76 61  d returns the va
7150: 6c 75 65 20 6f 66 20 74 68 65 20 73 70 65 63 69  lue of the speci
7160: 66 69 65 64 20 73 65 74 74 69 6e 67 2e 0a 0a 3c  fied setting...<
7170: 61 20 69 64 3d 22 73 74 69 6d 65 22 3e 3c 2f 61  a id="stime"></a
7180: 3e 54 48 31 20 73 74 69 6d 65 20 43 6f 6d 6d 61  >TH1 stime Comma
7190: 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nd.-------------
71a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
71b0: 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 73  --------..  *  s
71c0: 74 69 6d 65 0a 0a 52 65 74 75 72 6e 73 20 74 68  time..Returns th
71d0: 65 20 6e 75 6d 62 65 72 20 6f 66 20 6d 69 63 72  e number of micr
71e0: 6f 73 65 63 6f 6e 64 73 20 6f 66 20 43 50 55 20  oseconds of CPU 
71f0: 74 69 6d 65 20 63 6f 6e 73 75 6d 65 64 20 62 79  time consumed by
7200: 20 74 68 65 20 63 75 72 72 65 6e 74 0a 70 72 6f   the current.pro
7210: 63 65 73 73 20 69 6e 20 73 79 73 74 65 6d 20 73  cess in system s
7220: 70 61 63 65 2e 0a 0a 3c 61 20 69 64 3d 22 73 74  pace...<a id="st
7230: 79 6c 65 48 65 61 64 65 72 22 3e 3c 2f 61 3e 54  yleHeader"></a>T
7240: 48 31 20 73 74 79 6c 65 48 65 61 64 65 72 20 43  H1 styleHeader C
7250: 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  ommand.---------
7260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7280: 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 73  --------..  *  s
7290: 74 79 6c 65 48 65 61 64 65 72 20 54 49 54 4c 45  tyleHeader TITLE
72a0: 0a 0a 52 65 6e 64 65 72 20 74 68 65 20 63 6f 6e  ..Render the con
72b0: 66 69 67 75 72 65 64 20 73 74 79 6c 65 20 68 65  figured style he
72c0: 61 64 65 72 20 66 6f 72 20 74 68 65 20 73 65 6c  ader for the sel
72d0: 65 63 74 65 64 20 73 6b 69 6e 2e 0a 0a 3c 61 20  ected skin...<a 
72e0: 69 64 3d 22 73 74 79 6c 65 46 6f 6f 74 65 72 22  id="styleFooter"
72f0: 3e 3c 2f 61 3e 54 48 31 20 73 74 79 6c 65 46 6f  ></a>TH1 styleFo
7300: 6f 74 65 72 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d  oter Command.---
7310: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7320: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7330: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
7340: 20 20 2a 20 20 73 74 79 6c 65 46 6f 6f 74 65 72    *  styleFooter
7350: 0a 0a 52 65 6e 64 65 72 20 74 68 65 20 63 6f 6e  ..Render the con
7360: 66 69 67 75 72 65 64 20 73 74 79 6c 65 20 66 6f  figured style fo
7370: 6f 74 65 72 20 66 6f 72 20 74 68 65 20 73 65 6c  oter for the sel
7380: 65 63 74 65 64 20 73 6b 69 6e 2e 0a 0a 3c 61 20  ected skin...<a 
7390: 69 64 3d 22 73 74 79 6c 65 53 63 72 69 70 74 22  id="styleScript"
73a0: 3e 3c 2f 61 3e 54 48 31 20 73 74 79 6c 65 53 63  ></a>TH1 styleSc
73b0: 72 69 70 74 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d  ript Command.---
73c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
73d0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
73e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
73f0: 20 20 2a 20 20 73 74 79 6c 65 53 63 72 69 70 74    *  styleScript
7400: 0a 0a 52 65 6e 64 65 72 20 74 68 65 20 63 6f 6e  ..Render the con
7410: 66 69 67 75 72 65 64 20 4a 61 76 61 53 63 72 69  figured JavaScri
7420: 70 74 20 66 6f 72 20 74 68 65 20 73 65 6c 65 63  pt for the selec
7430: 74 65 64 20 73 6b 69 6e 2e 0a 0a 3c 61 20 69 64  ted skin...<a id
7440: 3d 22 73 75 62 6d 65 6e 75 22 3e 3c 2f 61 3e 54  ="submenu"></a>T
7450: 48 31 20 73 75 62 6d 65 6e 75 20 43 6f 6d 6d 61  H1 submenu Comma
7460: 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nd.-------------
7470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20  ------------..  
7490: 2a 20 20 73 75 62 6d 65 6e 75 20 6c 69 6e 6b 20  *  submenu link 
74a0: 4c 41 42 45 4c 20 55 52 4c 0a 0a 41 64 64 20 68  LABEL URL..Add h
74b0: 79 70 65 72 6c 69 6e 6b 20 74 6f 20 74 68 65 20  yperlink to the 
74c0: 73 75 62 6d 65 6e 75 20 6f 66 20 74 68 65 20 63  submenu of the c
74d0: 75 72 72 65 6e 74 20 70 61 67 65 2e 0a 0a 3c 61  urrent page...<a
74e0: 20 69 64 3d 22 74 61 69 6e 74 43 6d 64 22 3e 3c   id="taintCmd"><
74f0: 2f 61 3e 54 48 31 20 74 61 69 6e 74 20 43 6f 6d  /a>TH1 taint Com
7500: 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mand.-----------
7510: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7520: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
7530: 20 20 2a 20 20 74 61 69 6e 74 20 53 54 52 49 4e    *  taint STRIN
7540: 47 0a 0a 54 68 69 73 20 63 6f 6d 6d 61 6e 64 20  G..This command 
7550: 72 65 74 75 72 6e 73 20 61 20 63 6f 70 79 20 6f  returns a copy o
7560: 66 20 53 54 52 49 4e 47 20 74 68 61 74 20 68 61  f STRING that ha
7570: 73 20 62 65 65 6e 20 6d 61 72 6b 65 64 20 61 73  s been marked as
7580: 0a 5b 74 61 69 6e 74 65 64 5d 28 23 74 61 69 6e  .[tainted](#tain
7590: 74 29 2e 20 20 54 61 69 6e 74 65 64 20 73 74 72  t).  Tainted str
75a0: 69 6e 67 73 20 61 72 65 20 73 74 72 69 6e 67 73  ings are strings
75b0: 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 0a   which might be.
75c0: 63 6f 6e 74 72 6f 6c 6c 65 64 20 62 79 20 61 6e  controlled by an
75d0: 20 61 74 74 61 63 6b 65 72 20 61 6e 64 20 6d 69   attacker and mi
75e0: 67 68 74 20 63 6f 6e 74 61 69 6e 20 68 6f 73 74  ght contain host
75f0: 69 6c 65 20 69 6e 70 75 74 73 20 61 6e 64 0a 61  ile inputs and.a
7600: 72 65 20 74 68 75 73 20 75 6e 73 61 66 65 20 74  re thus unsafe t
7610: 6f 20 75 73 65 20 69 6e 20 63 65 72 74 61 69 6e  o use in certain
7620: 20 63 6f 6e 74 65 78 74 73 2e 20 20 46 6f 72 20   contexts.  For 
7630: 65 78 61 6d 70 6c 65 2c 20 74 61 69 6e 74 65 64  example, tainted
7640: 0a 73 74 72 69 6e 67 73 20 73 68 6f 75 6c 64 20  .strings should 
7650: 6e 6f 74 20 62 65 20 6f 75 74 70 75 74 20 61 73  not be output as
7660: 20 70 61 72 74 20 6f 66 20 61 20 77 65 62 70 61   part of a webpa
7670: 67 65 20 61 73 20 74 68 65 79 20 6d 69 67 68 74  ge as they might
7680: 0a 63 6f 6e 74 61 69 6e 20 72 6f 67 75 65 20 48  .contain rogue H
7690: 54 4d 4c 20 6f 72 20 4a 61 76 61 73 63 72 69 70  TML or Javascrip
76a0: 74 20 74 68 61 74 20 63 6f 75 6c 64 20 6c 65 61  t that could lea
76b0: 64 20 74 6f 20 61 6e 20 58 53 53 0a 76 75 6c 6e  d to an XSS.vuln
76c0: 65 72 61 62 69 6c 69 74 79 2e 20 20 53 69 6d 69  erability.  Simi
76d0: 6c 61 72 6c 79 2c 20 74 61 69 6e 74 65 64 20 73  larly, tainted s
76e0: 74 72 69 6e 67 73 20 73 68 6f 75 6c 64 20 6e 6f  trings should no
76f0: 74 20 62 65 20 72 75 6e 20 61 73 0a 53 51 4c 20  t be run as.SQL 
7700: 73 69 6e 63 65 20 74 68 65 79 20 6d 69 67 68 74  since they might
7710: 20 63 6f 6e 74 61 69 6e 20 61 6e 20 53 51 4c 2d   contain an SQL-
7720: 69 6e 6a 65 63 74 69 6f 6e 20 76 75 6c 65 72 61  injection vulera
7730: 62 69 6c 69 74 79 2e 0a 0a 3c 61 20 69 64 3d 22  bility...<a id="
7740: 74 63 6c 45 76 61 6c 22 3e 3c 2f 61 3e 54 48 31  tclEval"></a>TH1
7750: 20 74 63 6c 45 76 61 6c 20 43 6f 6d 6d 61 6e 64   tclEval Command
7760: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
7770: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7780: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 54 68  ----------..**Th
7790: 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 71 75 69  is command requi
77a0: 72 65 73 20 74 68 65 20 54 63 6c 20 69 6e 74 65  res the Tcl inte
77b0: 67 72 61 74 69 6f 6e 20 66 65 61 74 75 72 65 2e  gration feature.
77c0: 2a 2a 0a 0a 20 20 2a 20 20 74 63 6c 45 76 61 6c  **..  *  tclEval
77d0: 20 61 72 67 20 3f 61 72 67 20 2e 2e 2e 3f 0a 0a   arg ?arg ...?..
77e0: 45 76 61 6c 75 61 74 65 73 20 74 68 65 20 54 63  Evaluates the Tc
77f0: 6c 20 73 63 72 69 70 74 20 61 6e 64 20 72 65 74  l script and ret
7800: 75 72 6e 73 20 69 74 73 20 72 65 73 75 6c 74 20  urns its result 
7810: 76 65 72 62 61 74 69 6d 2e 20 20 49 66 20 61 20  verbatim.  If a 
7820: 54 63 6c 20 73 63 72 69 70 74 0a 65 72 72 6f 72  Tcl script.error
7830: 20 69 73 20 67 65 6e 65 72 61 74 65 64 2c 20 69   is generated, i
7840: 74 20 77 69 6c 6c 20 62 65 20 74 72 61 6e 73 66  t will be transf
7850: 6f 72 6d 65 64 20 69 6e 74 6f 20 61 20 54 48 31  ormed into a TH1
7860: 20 73 63 72 69 70 74 20 65 72 72 6f 72 2e 20 20   script error.  
7870: 54 68 65 0a 54 63 6c 20 69 6e 74 65 72 70 72 65  The.Tcl interpre
7880: 74 65 72 20 77 69 6c 6c 20 62 65 20 63 72 65 61  ter will be crea
7890: 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c  ted automaticall
78a0: 79 20 69 66 20 69 74 20 68 61 73 20 6e 6f 74 20  y if it has not 
78b0: 62 65 65 6e 20 61 6c 72 65 61 64 79 2e 0a 0a 3c  been already...<
78c0: 61 20 69 64 3d 22 74 63 6c 45 78 70 72 22 3e 3c  a id="tclExpr"><
78d0: 2f 61 3e 54 48 31 20 74 63 6c 45 78 70 72 20 43  /a>TH1 tclExpr C
78e0: 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  ommand.---------
78f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7900: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7910: 0a 0a 2a 2a 54 68 69 73 20 63 6f 6d 6d 61 6e 64  ..**This command
7920: 20 72 65 71 75 69 72 65 73 20 74 68 65 20 54 63   requires the Tc
7930: 6c 20 69 6e 74 65 67 72 61 74 69 6f 6e 20 66 65  l integration fe
7940: 61 74 75 72 65 2e 2a 2a 0a 0a 20 20 2a 20 20 74  ature.**..  *  t
7950: 63 6c 45 78 70 72 20 61 72 67 20 3f 61 72 67 20  clExpr arg ?arg 
7960: 2e 2e 2e 3f 0a 0a 45 76 61 6c 75 61 74 65 73 20  ...?..Evaluates 
7970: 74 68 65 20 54 63 6c 20 65 78 70 72 65 73 73 69  the Tcl expressi
7980: 6f 6e 20 61 6e 64 20 72 65 74 75 72 6e 73 20 69  on and returns i
7990: 74 73 20 72 65 73 75 6c 74 20 76 65 72 62 61 74  ts result verbat
79a0: 69 6d 2e 20 20 49 66 20 61 20 54 63 6c 0a 73 63  im.  If a Tcl.sc
79b0: 72 69 70 74 20 65 72 72 6f 72 20 69 73 20 67 65  ript error is ge
79c0: 6e 65 72 61 74 65 64 2c 20 69 74 20 77 69 6c 6c  nerated, it will
79d0: 20 62 65 20 74 72 61 6e 73 66 6f 72 6d 65 64 20   be transformed 
79e0: 69 6e 74 6f 20 61 20 54 48 31 20 73 63 72 69 70  into a TH1 scrip
79f0: 74 0a 65 72 72 6f 72 2e 20 20 54 68 65 20 54 63  t.error.  The Tc
7a00: 6c 20 69 6e 74 65 72 70 72 65 74 65 72 20 77 69  l interpreter wi
7a10: 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 61 75  ll be created au
7a20: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 66 20 69  tomatically if i
7a30: 74 20 68 61 73 20 6e 6f 74 0a 62 65 65 6e 20 61  t has not.been a
7a40: 6c 72 65 61 64 79 2e 0a 0a 3c 61 20 69 64 3d 22  lready...<a id="
7a50: 74 63 6c 49 6e 76 6f 6b 65 22 3e 3c 2f 61 3e 54  tclInvoke"></a>T
7a60: 48 31 20 74 63 6c 49 6e 76 6f 6b 65 20 43 6f 6d  H1 tclInvoke Com
7a70: 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mand.-----------
7a80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7aa0: 2d 2d 0a 0a 2a 2a 54 68 69 73 20 63 6f 6d 6d 61  --..**This comma
7ab0: 6e 64 20 72 65 71 75 69 72 65 73 20 74 68 65 20  nd requires the 
7ac0: 54 63 6c 20 69 6e 74 65 67 72 61 74 69 6f 6e 20  Tcl integration 
7ad0: 66 65 61 74 75 72 65 2e 2a 2a 0a 0a 20 20 2a 20  feature.**..  * 
7ae0: 20 74 63 6c 49 6e 76 6f 6b 65 20 63 6f 6d 6d 61   tclInvoke comma
7af0: 6e 64 20 3f 61 72 67 20 2e 2e 2e 3f 0a 0a 49 6e  nd ?arg ...?..In
7b00: 76 6f 6b 65 73 20 74 68 65 20 54 63 6c 20 63 6f  vokes the Tcl co
7b10: 6d 6d 61 6e 64 20 75 73 69 6e 67 20 74 68 65 20  mmand using the 
7b20: 73 75 70 70 6c 69 65 64 20 61 72 67 75 6d 65 6e  supplied argumen
7b30: 74 73 2e 20 20 4e 6f 20 61 64 64 69 74 69 6f 6e  ts.  No addition
7b40: 61 6c 0a 73 75 62 73 74 69 74 75 74 69 6f 6e 73  al.substitutions
7b50: 20 61 72 65 20 70 65 72 66 6f 72 6d 65 64 20 6f   are performed o
7b60: 6e 20 74 68 65 20 61 72 67 75 6d 65 6e 74 73 2e  n the arguments.
7b70: 20 20 54 68 65 20 54 63 6c 20 69 6e 74 65 72 70    The Tcl interp
7b80: 72 65 74 65 72 0a 77 69 6c 6c 20 62 65 20 63 72  reter.will be cr
7b90: 65 61 74 65 64 20 61 75 74 6f 6d 61 74 69 63 61  eated automatica
7ba0: 6c 6c 79 20 69 66 20 69 74 20 68 61 73 20 6e 6f  lly if it has no
7bb0: 74 20 62 65 65 6e 20 61 6c 72 65 61 64 79 2e 0a  t been already..
7bc0: 0a 3c 61 20 69 64 3d 22 74 63 6c 49 73 53 61 66  .<a id="tclIsSaf
7bd0: 65 22 3e 3c 2f 61 3e 54 48 31 20 74 63 6c 49 73  e"></a>TH1 tclIs
7be0: 53 61 66 65 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d  Safe Command.---
7bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7c00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7c10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 54 68  ----------..**Th
7c20: 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 71 75 69  is command requi
7c30: 72 65 73 20 74 68 65 20 54 63 6c 20 69 6e 74 65  res the Tcl inte
7c40: 67 72 61 74 69 6f 6e 20 66 65 61 74 75 72 65 2e  gration feature.
7c50: 2a 2a 0a 0a 20 20 2a 20 20 74 63 6c 49 73 53 61  **..  *  tclIsSa
7c60: 66 65 0a 0a 52 65 74 75 72 6e 73 20 6e 6f 6e 2d  fe..Returns non-
7c70: 7a 65 72 6f 20 69 66 20 74 68 65 20 54 63 6c 20  zero if the Tcl 
7c80: 69 6e 74 65 72 70 72 65 74 65 72 20 69 73 20 22  interpreter is "
7c90: 73 61 66 65 22 2e 20 20 54 68 65 20 54 63 6c 20  safe".  The Tcl 
7ca0: 69 6e 74 65 72 70 72 65 74 65 72 0a 77 69 6c 6c  interpreter.will
7cb0: 20 62 65 20 63 72 65 61 74 65 64 20 61 75 74 6f   be created auto
7cc0: 6d 61 74 69 63 61 6c 6c 79 20 69 66 20 69 74 20  matically if it 
7cd0: 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 61 6c 72  has not been alr
7ce0: 65 61 64 79 2e 0a 0a 3c 61 20 69 64 3d 22 74 63  eady...<a id="tc
7cf0: 6c 4d 61 6b 65 53 61 66 65 22 3e 3c 2f 61 3e 54  lMakeSafe"></a>T
7d00: 48 31 20 74 63 6c 4d 61 6b 65 53 61 66 65 20 43  H1 tclMakeSafe C
7d10: 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  ommand.---------
7d20: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7d30: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7d40: 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 54 68 69 73  --------..**This
7d50: 20 63 6f 6d 6d 61 6e 64 20 72 65 71 75 69 72 65   command require
7d60: 73 20 74 68 65 20 54 63 6c 20 69 6e 74 65 67 72  s the Tcl integr
7d70: 61 74 69 6f 6e 20 66 65 61 74 75 72 65 2e 2a 2a  ation feature.**
7d80: 0a 0a 20 20 2a 20 20 74 63 6c 4d 61 6b 65 53 61  ..  *  tclMakeSa
7d90: 66 65 0a 0a 46 6f 72 63 65 73 20 74 68 65 20 54  fe..Forces the T
7da0: 63 6c 20 69 6e 74 65 72 70 72 65 74 65 72 20 69  cl interpreter i
7db0: 6e 74 6f 20 22 73 61 66 65 22 20 6d 6f 64 65 20  nto "safe" mode 
7dc0: 62 79 20 72 65 6d 6f 76 69 6e 67 20 61 6c 6c 20  by removing all 
7dd0: 22 75 6e 73 61 66 65 22 0a 63 6f 6d 6d 61 6e 64  "unsafe".command
7de0: 73 20 61 6e 64 20 76 61 72 69 61 62 6c 65 73 2e  s and variables.
7df0: 20 20 54 68 69 73 20 6f 70 65 72 61 74 69 6f 6e    This operation
7e00: 20 63 61 6e 6e 6f 74 20 62 65 20 75 6e 64 6f 6e   cannot be undon
7e10: 65 2e 20 20 54 68 65 20 54 63 6c 0a 69 6e 74 65  e.  The Tcl.inte
7e20: 72 70 72 65 74 65 72 20 77 69 6c 6c 20 72 65 6d  rpreter will rem
7e30: 61 69 6e 20 22 73 61 66 65 22 20 75 6e 74 69 6c  ain "safe" until
7e40: 20 74 68 65 20 70 72 6f 63 65 73 73 20 74 65 72   the process ter
7e50: 6d 69 6e 61 74 65 73 2e 20 20 54 68 65 20 54 63  minates.  The Tc
7e60: 6c 0a 69 6e 74 65 72 70 72 65 74 65 72 20 77 69  l.interpreter wi
7e70: 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 61 75  ll be created au
7e80: 74 6f 6d 61 74 69 63 61 6c 6c 79 20 69 66 20 69  tomatically if i
7e90: 74 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 61  t has not been a
7ea0: 6c 72 65 61 64 79 2e 0a 0a 3c 61 20 69 64 3d 22  lready...<a id="
7eb0: 74 63 6c 52 65 61 64 79 22 3e 3c 2f 61 3e 54 48  tclReady"></a>TH
7ec0: 31 20 74 63 6c 52 65 61 64 79 20 43 6f 6d 6d 61  1 tclReady Comma
7ed0: 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nd.-------------
7ee0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7ef0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a  --------------..
7f00: 20 20 2a 20 20 74 63 6c 52 65 61 64 79 0a 0a 52    *  tclReady..R
7f10: 65 74 75 72 6e 73 20 74 72 75 65 20 69 66 20 74  eturns true if t
7f20: 68 65 20 62 69 6e 61 72 79 20 68 61 73 20 74 68  he binary has th
7f30: 65 20 54 63 6c 20 69 6e 74 65 67 72 61 74 69 6f  e Tcl integratio
7f40: 6e 20 66 65 61 74 75 72 65 20 65 6e 61 62 6c 65  n feature enable
7f50: 64 20 61 6e 64 20 69 74 0a 69 73 20 63 75 72 72  d and it.is curr
7f60: 65 6e 74 6c 79 20 61 76 61 69 6c 61 62 6c 65 20  ently available 
7f70: 66 6f 72 20 75 73 65 20 62 79 20 54 48 31 20 73  for use by TH1 s
7f80: 63 72 69 70 74 73 2e 0a 0a 3c 61 20 69 64 3d 22  cripts...<a id="
7f90: 74 72 61 63 65 22 3e 3c 2f 61 3e 54 48 31 20 74  trace"></a>TH1 t
7fa0: 72 61 63 65 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d  race Command.---
7fb0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
7fd0: 2d 2d 0a 0a 20 20 2a 20 20 74 72 61 63 65 20 53  --..  *  trace S
7fe0: 54 52 49 4e 47 0a 0a 47 65 6e 65 72 61 74 65 73  TRING..Generates
7ff0: 20 61 20 54 48 31 20 74 72 61 63 65 20 6d 65 73   a TH1 trace mes
8000: 73 61 67 65 20 69 66 20 54 48 31 20 74 72 61 63  sage if TH1 trac
8010: 69 6e 67 20 69 73 20 65 6e 61 62 6c 65 64 2e 0a  ing is enabled..
8020: 0a 3c 61 20 69 64 3d 22 75 6e 74 61 69 6e 74 43  .<a id="untaintC
8030: 6d 64 22 3e 3c 2f 61 3e 54 48 31 20 74 61 69 6e  md"></a>TH1 tain
8040: 74 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d  t Command.------
8050: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8060: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8070: 2d 2d 2d 0a 0a 20 20 2a 20 20 75 6e 74 61 69 6e  ---..  *  untain
8080: 74 20 53 54 52 49 4e 47 0a 0a 54 68 69 73 20 63  t STRING..This c
8090: 6f 6d 6d 61 6e 64 20 72 65 74 75 72 6e 73 20 61  ommand returns a
80a0: 20 63 6f 70 79 20 6f 66 20 53 54 52 49 4e 47 20   copy of STRING 
80b0: 74 68 61 74 20 68 61 73 20 62 65 65 6e 20 6d 61  that has been ma
80c0: 72 6b 65 64 20 61 73 0a 5b 75 6e 74 61 69 6e 74  rked as.[untaint
80d0: 65 64 5d 28 23 74 61 69 6e 74 29 2e 20 20 55 6e  ed](#taint).  Un
80e0: 74 61 69 6e 74 65 64 20 73 74 72 69 6e 67 73 20  tainted strings 
80f0: 61 72 65 20 73 74 72 69 6e 67 73 20 77 68 69 63  are strings whic
8100: 68 20 61 72 65 0a 62 65 6c 69 65 76 65 64 20 74  h are.believed t
8110: 6f 20 62 65 20 66 72 65 65 20 6f 66 20 70 6f 74  o be free of pot
8120: 65 6e 74 69 61 6c 6c 79 20 68 6f 73 74 69 6c 65  entially hostile
8130: 20 63 6f 6e 74 65 6e 74 2e 20 20 55 73 65 20 74   content.  Use t
8140: 68 69 73 0a 63 6f 6d 6d 61 6e 64 20 77 69 74 68  his.command with
8150: 20 63 61 75 74 69 6f 6e 2c 20 61 73 20 69 74 20   caution, as it 
8160: 6f 76 65 72 77 72 69 74 65 73 20 74 68 65 20 74  overwrites the t
8170: 61 69 6e 74 65 64 2d 73 74 72 69 6e 67 20 70 72  ainted-string pr
8180: 6f 74 65 63 74 69 6f 6e 0a 6d 65 63 68 61 6e 69  otection.mechani
8190: 73 6d 73 20 74 68 61 74 20 61 72 65 20 62 75 69  sms that are bui
81a0: 6c 74 20 69 6e 74 6f 20 54 48 31 2e 20 20 49 66  lt into TH1.  If
81b0: 20 79 6f 75 20 64 6f 20 6e 6f 74 20 75 6e 64 65   you do not unde
81c0: 72 73 74 61 6e 64 20 61 6c 6c 0a 74 68 65 20 69  rstand all.the i
81d0: 6d 70 6c 69 63 61 74 69 6f 6e 73 20 6f 66 20 65  mplications of e
81e0: 78 65 63 75 74 69 6e 67 20 74 68 69 73 20 63 6f  xecuting this co
81f0: 6d 6d 61 6e 64 2c 20 74 68 65 6e 20 64 6f 20 6e  mmand, then do n
8200: 6f 74 20 75 73 65 20 69 74 2e 0a 0a 3c 61 20 69  ot use it...<a i
8210: 64 3d 22 75 6e 76 65 72 73 69 6f 6e 65 64 5f 63  d="unversioned_c
8220: 6f 6e 74 65 6e 74 22 3e 3c 2f 61 3e 54 48 31 20  ontent"></a>TH1 
8230: 75 6e 76 65 72 73 69 6f 6e 65 64 20 63 6f 6e 74  unversioned cont
8240: 65 6e 74 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d  ent Command.----
8250: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8260: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8270: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8280: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20  -------------.. 
8290: 20 2a 20 20 75 6e 76 65 72 73 69 6f 6e 65 64 20   *  unversioned 
82a0: 63 6f 6e 74 65 6e 74 20 46 49 4c 45 4e 41 4d 45  content FILENAME
82b0: 0a 0a 41 74 74 65 6d 70 74 73 20 74 6f 20 6c 6f  ..Attempts to lo
82c0: 63 61 74 65 20 74 68 65 20 73 70 65 63 69 66 69  cate the specifi
82d0: 65 64 20 75 6e 76 65 72 73 69 6f 6e 65 64 20 66  ed unversioned f
82e0: 69 6c 65 20 61 6e 64 20 72 65 74 75 72 6e 20 69  ile and return i
82f0: 74 73 20 63 6f 6e 74 65 6e 74 73 2e 0a 41 6e 20  ts contents..An 
8300: 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
8310: 65 64 20 69 66 20 74 68 65 20 72 65 70 6f 73 69  ed if the reposi
8320: 74 6f 72 79 20 69 73 20 6e 6f 74 20 6f 70 65 6e  tory is not open
8330: 20 6f 72 20 74 68 65 20 75 6e 76 65 72 73 69 6f   or the unversio
8340: 6e 65 64 20 66 69 6c 65 0a 63 61 6e 6e 6f 74 20  ned file.cannot 
8350: 62 65 20 66 6f 75 6e 64 2e 0a 0a 3c 61 20 69 64  be found...<a id
8360: 3d 22 75 6e 76 65 72 73 69 6f 6e 65 64 5f 6c 69  ="unversioned_li
8370: 73 74 22 3e 3c 2f 61 3e 54 48 31 20 75 6e 76 65  st"></a>TH1 unve
8380: 72 73 69 6f 6e 65 64 20 6c 69 73 74 20 43 6f 6d  rsioned list Com
8390: 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  mand.-----------
83a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
83b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
83c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
83d0: 0a 0a 20 20 2a 20 20 75 6e 76 65 72 73 69 6f 6e  ..  *  unversion
83e0: 65 64 20 6c 69 73 74 0a 0a 52 65 74 75 72 6e 73  ed list..Returns
83f0: 20 61 20 6c 69 73 74 20 6f 66 20 74 68 65 20 6e   a list of the n
8400: 61 6d 65 73 20 6f 66 20 61 6c 6c 20 75 6e 76 65  ames of all unve
8410: 72 73 69 6f 6e 65 64 20 66 69 6c 65 73 20 68 65  rsioned files he
8420: 6c 64 20 69 6e 20 74 68 65 20 6c 6f 63 61 6c 0a  ld in the local.
8430: 72 65 70 6f 73 69 74 6f 72 79 2e 20 20 41 6e 20  repository.  An 
8440: 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61 74  error is generat
8450: 65 64 20 69 66 20 74 68 65 20 72 65 70 6f 73 69  ed if the reposi
8460: 74 6f 72 79 20 69 73 20 6e 6f 74 20 6f 70 65 6e  tory is not open
8470: 2e 0a 0a 3c 61 20 69 64 3d 22 75 74 69 6d 65 22  ...<a id="utime"
8480: 3e 3c 2f 61 3e 54 48 31 20 75 74 69 6d 65 20 43  ></a>TH1 utime C
8490: 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  ommand.---------
84a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
84b0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 20 20  ------------..  
84c0: 2a 20 20 75 74 69 6d 65 0a 0a 52 65 74 75 72 6e  *  utime..Return
84d0: 73 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20  s the number of 
84e0: 6d 69 63 72 6f 73 65 63 6f 6e 64 73 20 6f 66 20  microseconds of 
84f0: 43 50 55 20 74 69 6d 65 20 63 6f 6e 73 75 6d 65  CPU time consume
8500: 64 20 62 79 20 74 68 65 20 63 75 72 72 65 6e 74  d by the current
8510: 0a 70 72 6f 63 65 73 73 20 69 6e 20 75 73 65 72  .process in user
8520: 20 73 70 61 63 65 2e 0a 0a 3c 61 20 69 64 3d 22   space...<a id="
8530: 76 65 72 69 66 79 43 73 72 66 22 3e 3c 2f 61 3e  verifyCsrf"></a>
8540: 54 48 31 20 76 65 72 69 66 79 43 73 72 66 20 43  TH1 verifyCsrf C
8550: 6f 6d 6d 61 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  ommand.---------
8560: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8570: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8580: 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 76 65 72  ------..  *  ver
8590: 69 66 79 43 73 72 66 0a 0a 42 65 66 6f 72 65 20  ifyCsrf..Before 
85a0: 75 73 69 6e 67 20 74 68 65 20 72 65 73 75 6c 74  using the result
85b0: 73 20 6f 66 20 61 20 66 6f 72 6d 2c 20 66 69 72  s of a form, fir
85c0: 73 74 20 63 61 6c 6c 20 74 68 69 73 20 63 6f 6d  st call this com
85d0: 6d 61 6e 64 20 74 6f 20 76 65 72 69 66 79 0a 74  mand to verify.t
85e0: 68 61 74 20 74 68 65 20 41 6e 74 69 2d 43 53 52  hat the Anti-CSR
85f0: 46 20 74 6f 6b 65 6e 20 69 73 20 70 72 65 73 65  F token is prese
8600: 6e 74 20 61 6e 64 20 69 73 20 76 61 6c 69 64 2e  nt and is valid.
8610: 20 20 49 66 20 74 68 65 20 41 6e 74 69 2d 43 53    If the Anti-CS
8620: 52 46 20 74 6f 6b 65 6e 0a 69 73 20 6d 69 73 73  RF token.is miss
8630: 69 6e 67 20 6f 72 20 69 73 20 69 6e 63 6f 72 72  ing or is incorr
8640: 65 63 74 2c 20 74 68 61 74 20 69 6e 64 69 63 61  ect, that indica
8650: 74 65 73 20 61 20 63 72 6f 73 73 2d 73 69 74 65  tes a cross-site
8660: 20 73 63 72 69 70 74 69 6e 67 20 61 74 74 61 63   scripting attac
8670: 6b 2e 0a 49 66 20 74 68 65 20 65 76 65 6e 74 20  k..If the event 
8680: 6f 66 20 61 6e 20 61 74 74 61 63 6b 20 69 73 20  of an attack is 
8690: 64 65 74 65 63 74 65 64 2c 20 61 6e 20 65 72 72  detected, an err
86a0: 6f 72 20 6d 65 73 73 61 67 65 20 69 73 20 67 65  or message is ge
86b0: 6e 65 72 61 74 65 64 20 61 6e 64 0a 61 6c 6c 20  nerated and.all 
86c0: 66 75 72 74 68 65 72 20 70 72 6f 63 65 73 73 69  further processi
86d0: 6e 67 20 69 73 20 61 62 6f 72 74 65 64 2e 0a 0a  ng is aborted...
86e0: 3c 61 20 69 64 3d 22 76 65 72 69 66 79 4c 6f 67  <a id="verifyLog
86f0: 69 6e 22 3e 3c 2f 61 3e 54 48 31 20 76 65 72 69  in"></a>TH1 veri
8700: 66 79 4c 6f 67 69 6e 20 43 6f 6d 6d 61 6e 64 0a  fyLogin Command.
8710: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8720: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8730: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8740: 2d 0a 0a 20 20 2a 20 20 76 65 72 69 66 79 4c 6f  -..  *  verifyLo
8750: 67 69 6e 0a 0a 52 65 74 75 72 6e 73 20 6e 6f 6e  gin..Returns non
8760: 2d 7a 65 72 6f 20 69 66 20 74 68 65 20 73 70 65  -zero if the spe
8770: 63 69 66 69 65 64 20 75 73 65 72 20 6e 61 6d 65  cified user name
8780: 20 61 6e 64 20 70 61 73 73 77 6f 72 64 20 72 65   and password re
8790: 70 72 65 73 65 6e 74 20 61 0a 76 61 6c 69 64 20  present a.valid 
87a0: 6c 6f 67 69 6e 20 66 6f 72 20 74 68 65 20 72 65  login for the re
87b0: 70 6f 73 69 74 6f 72 79 2e 0a 0a 3c 61 20 69 64  pository...<a id
87c0: 3d 22 77 69 6b 69 22 3e 3c 2f 61 3e 54 48 31 20  ="wiki"></a>TH1 
87d0: 77 69 6b 69 20 43 6f 6d 6d 61 6e 64 0a 2d 2d 2d  wiki Command.---
87e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
87f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8800: 0a 0a 20 20 2a 20 20 77 69 6b 69 20 53 54 52 49  ..  *  wiki STRI
8810: 4e 47 0a 0a 52 65 6e 64 65 72 73 20 53 54 52 49  NG..Renders STRI
8820: 4e 47 20 61 73 20 77 69 6b 69 20 63 6f 6e 74 65  NG as wiki conte
8830: 6e 74 2e 0a 0a 3c 61 20 69 64 3d 22 77 69 6b 69  nt...<a id="wiki
8840: 5f 61 73 73 6f 63 22 3e 3c 2f 61 3e 54 48 31 20  _assoc"></a>TH1 
8850: 77 69 6b 69 5f 61 73 73 6f 63 20 43 6f 6d 6d 61  wiki_assoc Comma
8860: 6e 64 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  nd.-------------
8870: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8880: 2d 2d 2d 2d 2d 2d 0a 0a 20 20 2a 20 20 77 69 6b  ------..  *  wik
8890: 69 5f 61 73 73 6f 63 20 53 54 52 49 4e 47 20 53  i_assoc STRING S
88a0: 54 52 49 4e 47 0a 0a 52 65 6e 64 65 72 73 20 74  TRING..Renders t
88b0: 68 65 20 73 70 65 63 69 61 6c 20 77 69 6b 69 2e  he special wiki.
88c0: 20 54 68 65 20 66 69 72 73 74 20 73 74 72 69 6e   The first strin
88d0: 67 20 72 65 66 65 72 73 20 74 6f 20 74 68 65 20  g refers to the 
88e0: 6e 61 6d 65 73 70 61 63 65 0a 28 63 68 65 63 6b  namespace.(check
88f0: 69 6e 2c 20 62 72 61 6e 63 68 2c 20 74 61 67 2c  in, branch, tag,
8900: 20 74 69 63 6b 65 74 29 2e 20 54 68 65 20 73 65   ticket). The se
8910: 63 6f 6e 64 20 73 74 72 69 6e 67 20 73 70 65 63  cond string spec
8920: 69 66 69 65 73 20 74 68 65 0a 63 6f 6e 63 72 65  ifies the.concre
8930: 74 65 20 77 69 6b 69 20 70 61 67 65 20 74 6f 20  te wiki page to 
8940: 62 65 20 72 65 6e 64 65 72 65 64 2e 0a 0a 54 63  be rendered...Tc
8950: 6c 20 49 6e 74 65 67 72 61 74 69 6f 6e 20 43 6f  l Integration Co
8960: 6d 6d 61 6e 64 73 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d  mmands.---------
8970: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a  ---------------.
8980: 0a 57 68 65 6e 20 74 68 65 20 54 63 6c 20 69 6e  .When the Tcl in
8990: 74 65 67 72 61 74 69 6f 6e 20 73 75 62 73 79 73  tegration subsys
89a0: 74 65 6d 20 69 73 20 65 6e 61 62 6c 65 64 2c 20  tem is enabled, 
89b0: 73 65 76 65 72 61 6c 20 63 6f 6d 6d 61 6e 64 73  several commands
89c0: 20 61 72 65 20 61 64 64 65 64 0a 74 6f 20 74 68   are added.to th
89d0: 65 20 54 63 6c 20 69 6e 74 65 72 70 72 65 74 65  e Tcl interprete
89e0: 72 2e 20 20 54 68 65 79 20 61 72 65 20 75 73 65  r.  They are use
89f0: 64 20 74 6f 20 61 6c 6c 6f 77 20 54 63 6c 20 73  d to allow Tcl s
8a00: 63 72 69 70 74 73 20 61 63 63 65 73 73 20 74 6f  cripts access to
8a10: 20 74 68 65 0a 46 6f 73 73 69 6c 20 66 75 6e 63   the.Fossil func
8a20: 74 69 6f 6e 61 6c 69 74 79 20 70 72 6f 76 69 64  tionality provid
8a30: 65 64 20 76 69 61 20 54 48 31 2e 20 20 54 68 65  ed via TH1.  The
8a40: 20 66 6f 6c 6c 6f 77 69 6e 67 20 69 73 20 61 20   following is a 
8a50: 73 75 6d 6d 61 72 79 20 6f 66 20 74 68 65 0a 54  summary of the.T
8a60: 63 6c 20 63 6f 6d 6d 61 6e 64 73 3a 0a 0a 20 20  cl commands:..  
8a70: 2a 20 20 74 68 31 45 76 61 6c 0a 20 20 2a 20 20  *  th1Eval.  *  
8a80: 74 68 31 45 78 70 72 0a 0a 3c 61 20 69 64 3d 22  th1Expr..<a id="
8a90: 74 68 31 45 76 61 6c 22 3e 3c 2f 61 3e 54 63 6c  th1Eval"></a>Tcl
8aa0: 20 74 68 31 45 76 61 6c 20 43 6f 6d 6d 61 6e 64   th1Eval Command
8ab0: 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  .---------------
8ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8ad0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 54 68  ----------..**Th
8ae0: 69 73 20 63 6f 6d 6d 61 6e 64 20 72 65 71 75 69  is command requi
8af0: 72 65 73 20 74 68 65 20 54 63 6c 20 69 6e 74 65  res the Tcl inte
8b00: 67 72 61 74 69 6f 6e 20 66 65 61 74 75 72 65 2e  gration feature.
8b10: 2a 2a 0a 0a 20 20 2a 20 20 74 68 31 45 76 61 6c  **..  *  th1Eval
8b20: 20 61 72 67 0a 0a 45 76 61 6c 75 61 74 65 73 20   arg..Evaluates 
8b30: 74 68 65 20 54 48 31 20 73 63 72 69 70 74 20 61  the TH1 script a
8b40: 6e 64 20 72 65 74 75 72 6e 73 20 69 74 73 20 72  nd returns its r
8b50: 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d 2e 20  esult verbatim. 
8b60: 20 49 66 20 61 20 54 48 31 20 73 63 72 69 70 74   If a TH1 script
8b70: 0a 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72 61  .error is genera
8b80: 74 65 64 2c 20 69 74 20 77 69 6c 6c 20 62 65 20  ted, it will be 
8b90: 74 72 61 6e 73 66 6f 72 6d 65 64 20 69 6e 74 6f  transformed into
8ba0: 20 61 20 54 63 6c 20 73 63 72 69 70 74 20 65 72   a Tcl script er
8bb0: 72 6f 72 2e 0a 0a 3c 61 20 69 64 3d 22 74 68 31  ror...<a id="th1
8bc0: 45 78 70 72 22 3e 3c 2f 61 3e 54 63 6c 20 74 68  Expr"></a>Tcl th
8bd0: 31 45 78 70 72 20 43 6f 6d 6d 61 6e 64 0a 2d 2d  1Expr Command.--
8be0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8bf0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d  ----------------
8c00: 2d 2d 2d 2d 2d 2d 2d 0a 0a 2a 2a 54 68 69 73 20  -------..**This 
8c10: 63 6f 6d 6d 61 6e 64 20 72 65 71 75 69 72 65 73  command requires
8c20: 20 74 68 65 20 54 63 6c 20 69 6e 74 65 67 72 61   the Tcl integra
8c30: 74 69 6f 6e 20 66 65 61 74 75 72 65 2e 2a 2a 0a  tion feature.**.
8c40: 0a 20 20 2a 20 20 74 68 31 45 78 70 72 20 61 72  .  *  th1Expr ar
8c50: 67 0a 0a 45 76 61 6c 75 61 74 65 73 20 74 68 65  g..Evaluates the
8c60: 20 54 48 31 20 65 78 70 72 65 73 73 69 6f 6e 20   TH1 expression 
8c70: 61 6e 64 20 72 65 74 75 72 6e 73 20 69 74 73 20  and returns its 
8c80: 72 65 73 75 6c 74 20 76 65 72 62 61 74 69 6d 2e  result verbatim.
8c90: 20 20 49 66 20 61 20 54 48 31 0a 73 63 72 69 70    If a TH1.scrip
8ca0: 74 20 65 72 72 6f 72 20 69 73 20 67 65 6e 65 72  t error is gener
8cb0: 61 74 65 64 2c 20 69 74 20 77 69 6c 6c 20 62 65  ated, it will be
8cc0: 20 74 72 61 6e 73 66 6f 72 6d 65 64 20 69 6e 74   transformed int
8cd0: 6f 20 61 20 54 63 6c 20 73 63 72 69 70 74 20 65  o a Tcl script e
8ce0: 72 72 6f 72 2e 0a                                rror..