Artifact 5e55e39bde2d270e6574a9c80c4ab97a2518468f:
0000: 23 21 20 2f 75 73 72 2f 62 69 6e 2f 65 6e 76 20 #! /usr/bin/env
0010: 74 63 6c 73 68 0a 0a 73 65 74 20 6f 75 74 64 69 tclsh..set outdi
0020: 72 20 22 2f 77 65 62 2f 63 75 73 74 6f 6d 65 72 r "/web/customer
0030: 73 2f 6b 69 74 63 72 65 61 74 6f 72 2e 72 6b 65 s/kitcreator.rke
0040: 65 6e 65 2e 6f 72 67 2f 6b 69 74 73 22 0a 73 65 ene.org/kits".se
0050: 74 20 69 6e 66 6f 20 5b 6c 69 73 74 5d 0a 69 66 t info [list].if
0060: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists :
0070: 3a 65 6e 76 28 50 41 54 48 5f 49 4e 46 4f 29 5d :env(PATH_INFO)]
0080: 7d 20 7b 0a 09 73 65 74 20 69 6e 66 6f 20 5b 6c } {..set info [l
0090: 6d 61 70 20 69 74 65 6d 20 5b 73 70 6c 69 74 20 map item [split
00a0: 24 3a 3a 65 6e 76 28 50 41 54 48 5f 49 4e 46 4f $::env(PATH_INFO
00b0: 29 20 2f 5d 20 7b 0a 09 09 69 66 20 7b 24 69 74 ) /] {...if {$it
00c0: 65 6d 20 65 71 20 22 22 7d 20 7b 0a 09 09 09 63 em eq ""} {....c
00d0: 6f 6e 74 69 6e 75 65 0a 09 09 7d 0a 09 09 72 65 ontinue...}...re
00e0: 74 75 72 6e 20 2d 6c 65 76 65 6c 20 30 20 24 69 turn -level 0 $i
00f0: 74 65 6d 0a 09 7d 5d 0a 7d 0a 73 65 74 20 6b 65 tem..}].}.set ke
0100: 79 20 5b 6c 69 6e 64 65 78 20 24 69 6e 66 6f 20 y [lindex $info
0110: 65 6e 64 5d 0a 73 65 74 20 72 65 73 75 6c 74 46 end].set resultF
0120: 6f 72 6d 61 74 20 22 68 74 6d 6c 22 0a 69 66 20 ormat "html".if
0130: 7b 5b 6c 6c 65 6e 67 74 68 20 24 69 6e 66 6f 5d {[llength $info]
0140: 20 3e 20 31 7d 20 7b 0a 09 73 65 74 20 72 65 73 > 1} {..set res
0150: 75 6c 74 46 6f 72 6d 61 74 20 5b 6c 69 6e 64 65 ultFormat [linde
0160: 78 20 24 69 6e 66 6f 20 30 5d 0a 7d 0a 0a 73 65 x $info 0].}..se
0170: 74 20 73 63 68 65 6d 65 20 68 74 74 70 0a 69 66 t scheme http.if
0180: 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 3a {[info exists :
0190: 3a 65 6e 76 28 48 54 54 50 53 29 5d 7d 20 7b 0a :env(HTTPS)]} {.
01a0: 09 73 65 74 20 73 63 68 65 6d 65 20 68 74 74 70 .set scheme http
01b0: 73 0a 7d 0a 73 65 74 20 62 61 73 65 5f 75 72 6c s.}.set base_url
01c0: 20 22 24 7b 73 63 68 65 6d 65 7d 3a 2f 2f 6b 69 "${scheme}://ki
01d0: 74 63 72 65 61 74 6f 72 2e 72 6b 65 65 6e 65 2e tcreator.rkeene.
01e0: 6f 72 67 2f 6b 69 74 73 2f 24 6b 65 79 22 0a 0a org/kits/$key"..
01f0: 73 65 74 20 73 74 61 74 75 73 20 22 55 6e 6b 6e set status "Unkn
0200: 6f 77 6e 22 0a 73 65 74 20 74 65 72 6d 69 6e 61 own".set termina
0210: 6c 20 30 0a 69 66 20 7b 21 5b 72 65 67 65 78 70 l 0.if {![regexp
0220: 20 7b 5e 5b 30 2d 39 61 2d 66 5d 2b 24 7d 20 24 {^[0-9a-f]+$} $
0230: 6b 65 79 5d 7d 20 7b 0a 09 73 65 74 20 73 74 61 key]} {..set sta
0240: 74 75 73 20 22 49 6e 76 61 6c 69 64 20 4b 65 79 tus "Invalid Key
0250: 22 0a 09 73 65 74 20 74 65 72 6d 69 6e 61 6c 20 "..set terminal
0260: 31 0a 0a 09 75 6e 73 65 74 20 6b 65 79 0a 7d 0a 1...unset key.}.
0270: 0a 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 .if {[info exist
0280: 73 20 6b 65 79 5d 7d 20 7b 0a 09 73 65 74 20 77 s key]} {..set w
0290: 6f 72 6b 64 69 72 20 5b 66 69 6c 65 20 6a 6f 69 orkdir [file joi
02a0: 6e 20 24 6f 75 74 64 69 72 20 24 6b 65 79 5d 0a n $outdir $key].
02b0: 7d 0a 0a 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 }..if {[info exi
02c0: 73 74 73 20 77 6f 72 6b 64 69 72 5d 7d 20 7b 0a sts workdir]} {.
02d0: 09 69 66 20 7b 5b 66 69 6c 65 20 65 78 69 73 74 .if {[file exist
02e0: 73 20 24 77 6f 72 6b 64 69 72 5d 7d 20 7b 0a 09 s $workdir]} {..
02f0: 09 73 65 74 20 66 64 20 5b 6f 70 65 6e 20 5b 66 .set fd [open [f
0300: 69 6c 65 20 6a 6f 69 6e 20 24 77 6f 72 6b 64 69 ile join $workdi
0310: 72 20 62 75 69 6c 64 69 6e 66 6f 5d 5d 0a 09 09 r buildinfo]]...
0320: 73 65 74 20 62 75 69 6c 64 69 6e 66 6f 5f 6c 69 set buildinfo_li
0330: 73 74 20 5b 67 65 74 73 20 24 66 64 5d 0a 09 09 st [gets $fd]...
0340: 63 6c 6f 73 65 20 24 66 64 0a 09 09 61 72 72 61 close $fd...arra
0350: 79 20 73 65 74 20 62 75 69 6c 64 69 6e 66 6f 20 y set buildinfo
0360: 24 62 75 69 6c 64 69 6e 66 6f 5f 6c 69 73 74 0a $buildinfo_list.
0370: 09 09 73 65 74 20 66 69 6c 65 6e 61 6d 65 20 24 ..set filename $
0380: 62 75 69 6c 64 69 6e 66 6f 28 66 69 6c 65 6e 61 buildinfo(filena
0390: 6d 65 29 0a 0a 09 09 73 65 74 20 6f 75 74 66 69 me)....set outfi
03a0: 6c 65 20 5b 66 69 6c 65 20 6a 6f 69 6e 20 24 77 le [file join $w
03b0: 6f 72 6b 64 69 72 20 24 66 69 6c 65 6e 61 6d 65 orkdir $filename
03c0: 5d 0a 09 09 73 65 74 20 6c 6f 67 66 69 6c 65 20 ]...set logfile
03d0: 22 24 7b 6f 75 74 66 69 6c 65 7d 2e 6c 6f 67 22 "${outfile}.log"
03e0: 0a 09 7d 20 65 6c 73 65 20 7b 0a 09 09 73 65 74 ..} else {...set
03f0: 20 73 74 61 74 75 73 20 22 51 75 65 75 65 64 22 status "Queued"
0400: 0a 09 7d 0a 7d 0a 0a 69 66 20 7b 5b 69 6e 66 6f ..}.}..if {[info
0410: 20 65 78 69 73 74 73 20 62 75 69 6c 64 69 6e 66 exists buildinf
0420: 6f 5d 7d 20 7b 0a 09 73 65 74 20 64 65 73 63 72 o]} {..set descr
0430: 69 70 74 69 6f 6e 20 22 54 63 6c 20 24 62 75 69 iption "Tcl $bui
0440: 6c 64 69 6e 66 6f 28 74 63 6c 5f 76 65 72 73 69 ldinfo(tcl_versi
0450: 6f 6e 29 22 0a 09 61 70 70 65 6e 64 20 64 65 73 on)"..append des
0460: 63 72 69 70 74 69 6f 6e 20 22 2c 20 4b 69 74 43 cription ", KitC
0470: 72 65 61 74 6f 72 20 24 62 75 69 6c 64 69 6e 66 reator $buildinf
0480: 6f 28 6b 69 74 63 72 65 61 74 6f 72 5f 76 65 72 o(kitcreator_ver
0490: 73 69 6f 6e 29 22 0a 09 61 70 70 65 6e 64 20 64 sion)"..append d
04a0: 65 73 63 72 69 70 74 69 6f 6e 20 22 2c 20 50 6c escription ", Pl
04b0: 61 74 66 6f 72 6d 20 24 62 75 69 6c 64 69 6e 66 atform $buildinf
04c0: 6f 28 70 6c 61 74 66 6f 72 6d 29 22 0a 0a 09 66 o(platform)"...f
04d0: 6f 72 65 61 63 68 20 7b 6f 70 74 69 6f 6e 20 76 oreach {option v
04e0: 61 6c 75 65 7d 20 24 62 75 69 6c 64 69 6e 66 6f alue} $buildinfo
04f0: 28 6f 70 74 69 6f 6e 73 29 20 7b 0a 09 09 73 77 (options) {...sw
0500: 69 74 63 68 20 2d 2d 20 24 6f 70 74 69 6f 6e 20 itch -- $option
0510: 7b 0a 09 09 09 22 6b 69 74 64 6c 6c 22 20 7b 0a {...."kitdll" {.
0520: 09 09 09 09 69 66 20 7b 24 76 61 6c 75 65 7d 20 ....if {$value}
0530: 7b 0a 09 09 09 09 09 61 70 70 65 6e 64 20 64 65 {......append de
0540: 73 63 72 69 70 74 69 6f 6e 20 22 2c 20 42 75 69 scription ", Bui
0550: 6c 74 20 61 73 20 61 20 4c 69 62 72 61 72 79 22 lt as a Library"
0560: 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 22 .....}....}...."
0570: 64 79 6e 61 6d 69 63 74 6b 22 20 7b 0a 09 09 09 dynamictk" {....
0580: 09 69 66 20 7b 24 76 61 6c 75 65 7d 20 7b 0a 09 .if {$value} {..
0590: 09 09 09 09 69 66 20 7b 5b 6c 73 65 61 72 63 68 ....if {[lsearch
05a0: 20 2d 65 78 61 63 74 20 24 62 75 69 6c 64 69 6e -exact $buildin
05b0: 66 6f 28 70 61 63 6b 61 67 65 73 29 20 22 74 6b fo(packages) "tk
05c0: 22 5d 20 21 3d 20 2d 31 7d 20 7b 0a 09 09 09 09 "] != -1} {.....
05d0: 09 09 61 70 70 65 6e 64 20 64 65 73 63 72 69 70 ..append descrip
05e0: 74 69 6f 6e 20 22 2c 20 46 6f 72 63 65 64 20 54 tion ", Forced T
05f0: 6b 20 44 79 6e 61 6d 69 63 20 4c 69 6e 6b 69 6e k Dynamic Linkin
0600: 67 22 0a 09 09 09 09 09 7d 0a 09 09 09 09 7d 0a g"......}.....}.
0610: 09 09 09 7d 0a 09 09 09 22 74 68 72 65 61 64 65 ...}...."threade
0620: 64 22 20 7b 0a 09 09 09 09 69 66 20 7b 24 76 61 d" {.....if {$va
0630: 6c 75 65 7d 20 7b 0a 09 09 09 09 09 61 70 70 65 lue} {......appe
0640: 6e 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 22 nd description "
0650: 2c 20 54 68 72 65 61 64 65 64 22 0a 09 09 09 09 , Threaded".....
0660: 7d 20 65 6c 73 65 20 7b 0a 09 09 09 09 09 61 70 } else {......ap
0670: 70 65 6e 64 20 64 65 73 63 72 69 70 74 69 6f 6e pend description
0680: 20 22 2c 20 55 6e 74 68 72 65 61 64 65 64 22 0a ", Unthreaded".
0690: 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 22 64 ....}....}...."d
06a0: 65 62 75 67 22 20 7b 0a 09 09 09 09 69 66 20 7b ebug" {.....if {
06b0: 24 76 61 6c 75 65 7d 20 7b 0a 09 09 09 09 09 61 $value} {......a
06c0: 70 70 65 6e 64 20 64 65 73 63 72 69 70 74 69 6f ppend descriptio
06d0: 6e 20 22 2c 20 57 69 74 68 20 53 79 6d 62 6f 6c n ", With Symbol
06e0: 73 22 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 s".....}....}...
06f0: 09 22 6d 69 6e 62 75 69 6c 64 22 20 7b 0a 09 09 ."minbuild" {...
0700: 09 09 69 66 20 7b 24 76 61 6c 75 65 7d 20 7b 0a ..if {$value} {.
0710: 09 09 09 09 09 61 70 70 65 6e 64 20 64 65 73 63 .....append desc
0720: 72 69 70 74 69 6f 6e 20 22 2c 20 57 69 74 68 6f ription ", Witho
0730: 75 74 20 54 63 6c 20 70 6b 67 73 2f 20 61 6e 64 ut Tcl pkgs/ and
0740: 20 61 6c 6c 20 65 6e 63 6f 64 69 6e 67 73 22 0a all encodings".
0750: 09 09 09 09 7d 0a 09 09 09 7d 0a 09 09 09 22 73 ....}....}...."s
0760: 74 61 74 69 63 6c 69 62 73 73 6c 22 20 7b 0a 09 taticlibssl" {..
0770: 09 09 09 69 66 20 7b 24 76 61 6c 75 65 7d 20 7b ...if {$value} {
0780: 0a 09 09 09 09 09 61 70 70 65 6e 64 20 64 65 73 ......append des
0790: 63 72 69 70 74 69 6f 6e 20 22 2c 20 53 74 61 74 cription ", Stat
07a0: 69 63 61 6c 6c 79 20 6c 69 6e 6b 65 64 20 74 6f ically linked to
07b0: 20 4c 69 62 53 53 4c 22 0a 09 09 09 09 7d 0a 09 LibSSL".....}..
07c0: 09 09 7d 0a 09 09 09 22 73 74 61 74 69 63 70 6b ..}...."staticpk
07d0: 67 73 22 20 7b 0a 09 09 09 09 69 66 20 7b 24 76 gs" {.....if {$v
07e0: 61 6c 75 65 7d 20 7b 0a 09 09 09 09 09 61 70 70 alue} {......app
07f0: 65 6e 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 end description
0800: 22 2c 20 57 69 74 68 20 54 63 6c 20 38 2e 36 2b ", With Tcl 8.6+
0810: 20 70 6b 67 73 2f 20 64 69 72 65 63 74 6f 72 79 pkgs/ directory
0820: 20 61 6c 6c 20 70 61 63 6b 61 67 65 73 20 73 74 all packages st
0830: 61 74 69 63 61 6c 6c 79 20 6c 69 6e 6b 65 64 20 atically linked
0840: 69 6e 22 0a 09 09 09 09 7d 0a 09 09 09 7d 0a 09 in".....}....}..
0850: 09 09 22 73 74 6f 72 61 67 65 22 20 7b 0a 09 09 .."storage" {...
0860: 09 09 73 77 69 74 63 68 20 2d 2d 20 24 76 61 6c ..switch -- $val
0870: 75 65 20 7b 0a 09 09 09 09 09 22 6d 6b 34 22 20 ue {......"mk4"
0880: 7b 0a 09 09 09 09 09 09 61 70 70 65 6e 64 20 64 {.......append d
0890: 65 73 63 72 69 70 74 69 6f 6e 20 22 2c 20 4d 65 escription ", Me
08a0: 74 61 6b 69 74 2d 62 61 73 65 64 22 0a 09 09 09 takit-based"....
08b0: 09 09 7d 0a 09 09 09 09 09 22 7a 69 70 22 20 7b ..}......"zip" {
08c0: 0a 09 09 09 09 09 09 61 70 70 65 6e 64 20 64 65 .......append de
08d0: 73 63 72 69 70 74 69 6f 6e 20 22 2c 20 5a 69 70 scription ", Zip
08e0: 2d 6b 69 74 22 0a 09 09 09 09 09 7d 0a 09 09 09 -kit"......}....
08f0: 09 09 22 63 76 66 73 22 20 7b 0a 09 09 09 09 09 .."cvfs" {......
0900: 09 61 70 70 65 6e 64 20 64 65 73 63 72 69 70 74 .append descript
0910: 69 6f 6e 20 22 2c 20 53 74 61 74 69 63 20 53 74 ion ", Static St
0920: 6f 72 61 67 65 22 0a 09 09 09 09 09 7d 0a 09 09 orage"......}...
0930: 09 09 7d 0a 09 09 09 7d 0a 09 09 7d 0a 09 7d 0a ..}....}...}..}.
0940: 0a 09 69 66 20 7b 5b 6c 6c 65 6e 67 74 68 20 24 ..if {[llength $
0950: 62 75 69 6c 64 69 6e 66 6f 28 70 61 63 6b 61 67 buildinfo(packag
0960: 65 73 29 5d 20 3e 20 30 7d 20 7b 0a 09 09 61 70 es)] > 0} {...ap
0970: 70 65 6e 64 20 64 65 73 63 72 69 70 74 69 6f 6e pend description
0980: 20 22 2c 20 50 61 63 6b 61 67 65 73 3a 20 5b 6a ", Packages: [j
0990: 6f 69 6e 20 24 62 75 69 6c 64 69 6e 66 6f 28 70 oin $buildinfo(p
09a0: 61 63 6b 61 67 65 73 29 20 7b 2c 20 7d 5d 22 0a ackages) {, }]".
09b0: 09 7d 20 65 6c 73 65 20 7b 0a 09 09 61 70 70 65 .} else {...appe
09c0: 6e 64 20 64 65 73 63 72 69 70 74 69 6f 6e 20 22 nd description "
09d0: 2c 20 4e 6f 20 70 61 63 6b 61 67 65 73 22 0a 09 , No packages"..
09e0: 7d 0a 7d 0a 0a 69 66 20 7b 5b 69 6e 66 6f 20 65 }.}..if {[info e
09f0: 78 69 73 74 73 20 6f 75 74 66 69 6c 65 5d 7d 20 xists outfile]}
0a00: 7b 0a 09 73 65 74 20 62 75 69 6c 64 5f 6c 6f 67 {..set build_log
0a10: 5f 75 72 6c 20 22 24 7b 62 61 73 65 5f 75 72 6c _url "${base_url
0a20: 7d 2f 24 7b 66 69 6c 65 6e 61 6d 65 7d 2e 6c 6f }/${filename}.lo
0a30: 67 22 0a 09 69 66 20 7b 5b 66 69 6c 65 20 65 78 g"..if {[file ex
0a40: 69 73 74 73 20 24 6f 75 74 66 69 6c 65 5d 7d 20 ists $outfile]}
0a50: 7b 0a 09 09 73 65 74 20 73 74 61 74 75 73 20 22 {...set status "
0a60: 43 6f 6d 70 6c 65 74 65 22 0a 09 09 73 65 74 20 Complete"...set
0a70: 74 65 72 6d 69 6e 61 6c 20 31 0a 0a 09 09 73 65 terminal 1....se
0a80: 74 20 75 72 6c 20 22 24 7b 62 61 73 65 5f 75 72 t url "${base_ur
0a90: 6c 7d 2f 24 66 69 6c 65 6e 61 6d 65 22 0a 09 7d l}/$filename"..}
0aa0: 20 65 6c 73 65 69 66 20 7b 5b 66 69 6c 65 20 65 elseif {[file e
0ab0: 78 69 73 74 73 20 22 24 7b 6f 75 74 66 69 6c 65 xists "${outfile
0ac0: 7d 2e 62 75 69 6c 64 66 61 69 6c 22 5d 7d 20 7b }.buildfail"]} {
0ad0: 0a 09 09 73 65 74 20 73 74 61 74 75 73 20 22 46 ...set status "F
0ae0: 61 69 6c 65 64 22 0a 09 09 73 65 74 20 74 65 72 ailed"...set ter
0af0: 6d 69 6e 61 6c 20 31 0a 09 7d 20 65 6c 73 65 20 minal 1..} else
0b00: 7b 0a 09 09 73 65 74 20 73 74 61 74 75 73 20 22 {...set status "
0b10: 42 75 69 6c 64 69 6e 67 22 0a 09 7d 0a 7d 0a 0a Building"..}.}..
0b20: 69 66 20 7b 24 72 65 73 75 6c 74 46 6f 72 6d 61 if {$resultForma
0b30: 74 20 69 6e 20 7b 6a 73 6f 6e 20 64 69 63 74 7d t in {json dict}
0b40: 7d 20 7b 0a 09 73 65 74 20 74 65 72 6d 69 6e 61 } {..set termina
0b50: 6c 42 6f 6f 6c 65 61 6e 20 5b 6c 69 6e 64 65 78 lBoolean [lindex
0b60: 20 7b 66 61 6c 73 65 20 74 72 75 65 7d 20 24 74 {false true} $t
0b70: 65 72 6d 69 6e 61 6c 5d 0a 0a 09 73 65 74 20 72 erminal]...set r
0b80: 65 73 75 6c 74 73 44 69 63 74 20 5b 64 69 63 74 esultsDict [dict
0b90: 20 63 72 65 61 74 65 20 5c 0a 09 09 73 74 61 74 create \...stat
0ba0: 75 73 20 5b 73 74 72 69 6e 67 20 74 6f 6c 6f 77 us [string tolow
0bb0: 65 72 20 24 73 74 61 74 75 73 5d 20 5c 0a 09 09 er $status] \...
0bc0: 74 65 72 6d 69 6e 61 6c 20 24 74 65 72 6d 69 6e terminal $termin
0bd0: 61 6c 42 6f 6f 6c 65 61 6e 20 5c 0a 09 5d 0a 09 alBoolean \..]..
0be0: 69 66 20 7b 5b 73 74 72 69 6e 67 20 74 6f 6c 6f if {[string tolo
0bf0: 77 65 72 20 24 73 74 61 74 75 73 5d 20 65 71 20 wer $status] eq
0c00: 22 63 6f 6d 70 6c 65 74 65 22 7d 20 7b 0a 09 09 "complete"} {...
0c10: 64 69 63 74 20 73 65 74 20 72 65 73 75 6c 74 73 dict set results
0c20: 44 69 63 74 20 6b 69 74 5f 75 72 6c 20 24 75 72 Dict kit_url $ur
0c30: 6c 0a 09 7d 0a 09 69 66 20 7b 5b 73 74 72 69 6e l..}..if {[strin
0c40: 67 20 74 6f 6c 6f 77 65 72 20 24 73 74 61 74 75 g tolower $statu
0c50: 73 5d 20 69 6e 20 7b 63 6f 6d 70 6c 65 74 65 20 s] in {complete
0c60: 62 75 69 6c 64 69 6e 67 7d 7d 20 7b 0a 09 09 64 building}} {...d
0c70: 69 63 74 20 73 65 74 20 72 65 73 75 6c 74 73 44 ict set resultsD
0c80: 69 63 74 20 62 75 69 6c 64 5f 6c 6f 67 5f 75 72 ict build_log_ur
0c90: 6c 20 24 62 75 69 6c 64 5f 6c 6f 67 5f 75 72 6c l $build_log_url
0ca0: 0a 09 09 63 61 74 63 68 20 7b 0a 09 09 09 64 69 ...catch {....di
0cb0: 63 74 20 73 65 74 20 72 65 73 75 6c 74 73 44 69 ct set resultsDi
0cc0: 63 74 20 74 63 6c 5f 76 65 72 73 69 6f 6e 20 24 ct tcl_version $
0cd0: 62 75 69 6c 64 69 6e 66 6f 28 74 63 6c 5f 76 65 buildinfo(tcl_ve
0ce0: 72 73 69 6f 6e 29 0a 09 09 7d 0a 09 09 63 61 74 rsion)...}...cat
0cf0: 63 68 20 7b 0a 09 09 09 64 69 63 74 20 73 65 74 ch {....dict set
0d00: 20 72 65 73 75 6c 74 73 44 69 63 74 20 6b 69 74 resultsDict kit
0d10: 63 72 65 61 74 6f 72 5f 76 65 72 73 69 6f 6e 20 creator_version
0d20: 24 62 75 69 6c 64 69 6e 66 6f 28 6b 69 74 63 72 $buildinfo(kitcr
0d30: 65 61 74 6f 72 5f 76 65 72 73 69 6f 6e 29 0a 09 eator_version)..
0d40: 09 7d 0a 09 09 63 61 74 63 68 20 7b 0a 09 09 09 .}...catch {....
0d50: 64 69 63 74 20 73 65 74 20 72 65 73 75 6c 74 73 dict set results
0d60: 44 69 63 74 20 70 6c 61 74 66 6f 72 6d 20 24 62 Dict platform $b
0d70: 75 69 6c 64 69 6e 66 6f 28 70 6c 61 74 66 6f 72 uildinfo(platfor
0d80: 6d 29 0a 09 09 7d 0a 09 7d 0a 7d 0a 0a 73 77 69 m)...}..}.}..swi
0d90: 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 24 72 tch -exact -- $r
0da0: 65 73 75 6c 74 46 6f 72 6d 61 74 20 7b 0a 09 22 esultFormat {.."
0db0: 68 74 6d 6c 22 20 7b 0a 09 09 23 20 48 61 6e 64 html" {...# Hand
0dc0: 6c 65 64 20 62 65 6c 6f 77 0a 09 7d 0a 09 22 6a led below..}.."j
0dd0: 73 6f 6e 22 20 7b 0a 09 09 70 75 74 73 20 22 43 son" {...puts "C
0de0: 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 61 70 70 ontent-Type: app
0df0: 6c 69 63 61 74 69 6f 6e 2f 6a 73 6f 6e 22 0a 09 lication/json"..
0e00: 09 70 75 74 73 20 22 22 0a 09 09 73 65 74 20 72 .puts ""...set r
0e10: 65 73 75 6c 74 73 4a 53 4f 4e 49 74 65 6d 73 20 esultsJSONItems
0e20: 5b 6c 69 73 74 5d 0a 09 09 66 6f 72 65 61 63 68 [list]...foreach
0e30: 20 7b 6b 65 79 20 76 61 6c 75 65 7d 20 24 72 65 {key value} $re
0e40: 73 75 6c 74 73 44 69 63 74 20 7b 0a 09 09 09 73 sultsDict {....s
0e50: 77 69 74 63 68 20 2d 65 78 61 63 74 20 2d 2d 20 witch -exact --
0e60: 24 6b 65 79 20 7b 0a 09 09 09 09 22 74 65 72 6d $key {....."term
0e70: 69 6e 61 6c 22 20 7b 0a 09 09 09 09 7d 0a 09 09 inal" {.....}...
0e80: 09 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 09 09 ..default {.....
0e90: 09 73 65 74 20 76 61 6c 75 65 20 22 5c 22 24 76 .set value "\"$v
0ea0: 61 6c 75 65 5c 22 22 0a 09 09 09 09 7d 0a 09 09 alue\"".....}...
0eb0: 09 7d 0a 09 09 09 6c 61 70 70 65 6e 64 20 72 65 .}....lappend re
0ec0: 73 75 6c 74 73 4a 53 4f 4e 49 74 65 6d 73 20 22 sultsJSONItems "
0ed0: 5c 22 24 6b 65 79 5c 22 3a 20 24 76 61 6c 75 65 \"$key\": $value
0ee0: 22 0a 09 09 7d 0a 09 09 73 65 74 20 72 65 73 75 "...}...set resu
0ef0: 6c 74 73 4a 53 4f 4e 20 22 7b 5b 6a 6f 69 6e 20 ltsJSON "{[join
0f00: 24 72 65 73 75 6c 74 73 4a 53 4f 4e 49 74 65 6d $resultsJSONItem
0f10: 73 20 7b 2c 20 7d 5d 7d 22 0a 09 09 70 75 74 73 s {, }]}"...puts
0f20: 20 24 72 65 73 75 6c 74 73 4a 53 4f 4e 0a 09 09 $resultsJSON...
0f30: 65 78 69 74 20 30 0a 09 7d 0a 09 22 64 69 63 74 exit 0..}.."dict
0f40: 22 20 7b 0a 09 09 70 75 74 73 20 22 43 6f 6e 74 " {...puts "Cont
0f50: 65 6e 74 2d 54 79 70 65 3a 20 74 65 78 74 2f 70 ent-Type: text/p
0f60: 6c 61 69 6e 22 0a 09 09 70 75 74 73 20 22 22 0a lain"...puts "".
0f70: 09 09 70 75 74 73 20 24 72 65 73 75 6c 74 73 44 ..puts $resultsD
0f80: 69 63 74 0a 09 09 65 78 69 74 20 30 0a 09 7d 0a ict...exit 0..}.
0f90: 09 64 65 66 61 75 6c 74 20 7b 0a 09 09 65 78 69 .default {...exi
0fa0: 74 20 31 0a 09 7d 0a 7d 0a 0a 70 75 74 73 20 22 t 1..}.}..puts "
0fb0: 43 6f 6e 74 65 6e 74 2d 54 79 70 65 3a 20 74 65 Content-Type: te
0fc0: 78 74 2f 68 74 6d 6c 22 0a 69 66 20 7b 5b 69 6e xt/html".if {[in
0fd0: 66 6f 20 65 78 69 73 74 73 20 75 72 6c 5d 7d 20 fo exists url]}
0fe0: 7b 0a 09 23 20 55 73 65 20 61 20 72 65 66 72 65 {..# Use a refre
0ff0: 73 68 20 68 65 72 65 20 69 6e 73 74 65 61 64 20 sh here instead
1000: 6f 66 20 61 20 22 4c 6f 63 61 74 69 6f 6e 22 20 of a "Location"
1010: 73 6f 20 74 68 61 74 0a 09 23 20 74 68 65 20 63 so that..# the c
1020: 6c 69 65 6e 74 20 63 61 6e 20 73 65 65 20 74 68 lient can see th
1030: 65 20 70 61 67 65 0a 09 70 75 74 73 20 22 52 65 e page..puts "Re
1040: 66 72 65 73 68 3a 20 30 3b 75 72 6c 3d 24 75 72 fresh: 0;url=$ur
1050: 6c 22 0a 7d 20 65 6c 73 65 20 7b 0a 09 69 66 20 l".} else {..if
1060: 7b 21 24 74 65 72 6d 69 6e 61 6c 7d 20 7b 0a 09 {!$terminal} {..
1070: 09 70 75 74 73 20 22 52 65 66 72 65 73 68 3a 20 .puts "Refresh:
1080: 33 30 3b 75 72 6c 3d 2e 22 0a 09 7d 0a 7d 0a 70 30;url=."..}.}.p
1090: 75 74 73 20 22 22 0a 70 75 74 73 20 22 3c 68 74 uts "".puts "<ht
10a0: 6d 6c 3e 22 0a 70 75 74 73 20 22 5c 74 3c 68 65 ml>".puts "\t<he
10b0: 61 64 3e 22 0a 70 75 74 73 20 22 5c 74 5c 74 3c ad>".puts "\t\t<
10c0: 74 69 74 6c 65 3e 4b 69 74 43 72 65 61 74 6f 72 title>KitCreator
10d0: 2c 20 57 65 62 20 49 6e 74 65 72 66 61 63 65 3c , Web Interface<
10e0: 2f 74 69 74 6c 65 3e 22 0a 70 75 74 73 20 22 5c /title>".puts "\
10f0: 74 3c 2f 68 65 61 64 3e 22 0a 70 75 74 73 20 22 t</head>".puts "
1100: 5c 74 3c 62 6f 64 79 3e 22 0a 70 75 74 73 20 22 \t<body>".puts "
1110: 5c 74 5c 74 3c 68 31 3e 4b 69 74 43 72 65 61 74 \t\t<h1>KitCreat
1120: 6f 72 20 57 65 62 20 49 6e 74 65 72 66 61 63 65 or Web Interface
1130: 3c 2f 68 31 3e 22 0a 70 75 74 73 20 22 5c 74 5c </h1>".puts "\t\
1140: 74 3c 70 3e 3c 62 3e 53 74 61 74 75 73 3a 3c 2f t<p><b>Status:</
1150: 62 3e 20 24 73 74 61 74 75 73 22 0a 69 66 20 7b b> $status".if {
1160: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 75 72 6c [info exists url
1170: 5d 7d 20 7b 0a 09 70 75 74 73 20 22 5c 74 5c 74 ]} {..puts "\t\t
1180: 3c 70 3e 3c 62 3e 55 52 4c 3a 3c 2f 62 3e 20 3c <p><b>URL:</b> <
1190: 61 20 68 72 65 66 3d 5c 22 24 75 72 6c 5c 22 3e a href=\"$url\">
11a0: 24 75 72 6c 3c 2f 61 3e 22 0a 7d 0a 69 66 20 7b $url</a>".}.if {
11b0: 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 64 65 73 [info exists des
11c0: 63 72 69 70 74 69 6f 6e 5d 7d 20 7b 0a 09 70 75 cription]} {..pu
11d0: 74 73 20 22 5c 74 5c 74 3c 70 3e 3c 62 3e 44 65 ts "\t\t<p><b>De
11e0: 73 63 72 69 70 74 69 6f 6e 3a 3c 2f 62 3e 20 24 scription:</b> $
11f0: 64 65 73 63 72 69 70 74 69 6f 6e 22 0a 7d 0a 69 description".}.i
1200: 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73 20 f {[info exists
1210: 6c 6f 67 66 69 6c 65 5d 7d 20 7b 0a 09 63 61 74 logfile]} {..cat
1220: 63 68 20 7b 0a 09 09 73 65 74 20 66 64 20 5b 6f ch {...set fd [o
1230: 70 65 6e 20 24 6c 6f 67 66 69 6c 65 5d 0a 09 09 pen $logfile]...
1240: 73 65 74 20 6c 6f 67 64 61 74 61 20 5b 72 65 61 set logdata [rea
1250: 64 20 24 66 64 5d 0a 09 09 63 6c 6f 73 65 20 24 d $fd]...close $
1260: 66 64 0a 0a 0a 09 09 70 75 74 73 20 22 5c 74 5c fd.....puts "\t\
1270: 74 3c 70 3e 3c 62 3e 4c 6f 67 3a 3c 2f 62 3e 3c t<p><b>Log:</b><
1280: 70 72 65 3e 5c 6e 24 6c 6f 67 64 61 74 61 3c 2f pre>\n$logdata</
1290: 70 72 65 3e 22 0a 09 7d 0a 7d 0a 70 75 74 73 20 pre>"..}.}.puts
12a0: 22 5c 74 3c 2f 62 6f 64 79 3e 22 0a 70 75 74 73 "\t</body>".puts
12b0: 20 22 3c 2f 68 74 6d 6c 3e 22 0a "</html>".