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..