blob: 6a4b1fe1f01b80de4a386ed2ff6e15cb66064bc5 [file] [log] [blame]
drhdd2a43a2017-12-14 19:24:00 +00001# Try to open the executable as a database and read the "scripts.data"
2# field where "scripts.name" is 'main.tcl'
3#
4catch {
drh6b9986e2018-01-06 13:33:21 +00005 if {![file exists $argv0] && [file exists $argv0.exe]} {
6 append argv0 .exe
7 }
drhdd2a43a2017-12-14 19:24:00 +00008 sqlite3 db $argv0 -vfs apndvfs -create 0
drh8682e122018-01-07 20:38:10 +00009 set mainscript [db one {
10 SELECT sqlar_uncompress(data,sz) FROM sqlar WHERE name='main.tcl'
11 }]
drhdd2a43a2017-12-14 19:24:00 +000012}
13if {[info exists mainscript]} {
14 eval $mainscript
15 return
16} else {
17 catch {db close}
18}
19
20# Try to open file named in the first argument as a database and
21# read the "scripts.data" field where "scripts.name" is 'main.tcl'
22#
23if {[llength $argv]>0 && [file readable [lindex $argv 0]]} {
24 catch {
25 sqlite3 db [lindex $argv 0] -vfs apndvfs -create 0
26 set mainscript [db one {SELECT data FROM scripts WHERE name='main.tcl'}]
27 set argv0 [lindex $argv 0]
28 set argv [lrange $argv 1 end]
29 }
30 if {[info exists mainscript]} {
31 eval $mainscript
32 return
33 } else {
34 catch {db close}
35 }
36 if {[string match *.tcl [lindex $argv 0]]} {
37 set fd [open [lindex $argv 0] rb]
38 set mainscript [read $fd]
39 close $fd
40 unset fd
41 set argv0 [lindex $argv 0]
42 set argv [lrange $argv 1 end]
43 }
44 if {[info exists mainscript]} {
45 eval $mainscript
46 return
47 }
48}
49
50# If all else fails, do an interactive loop
51#
52set line {}
53while {![eof stdin]} {
54 if {$line!=""} {
55 puts -nonewline "> "
56 } else {
57 puts -nonewline "% "
58 }
59 flush stdout
60 append line [gets stdin]
61 if {[info complete $line]} {
62 if {[catch {uplevel #0 $line} result]} {
63 puts stderr "Error: $result"
64 } elseif {$result!=""} {
65 puts $result
66 }
67 set line {}
68 } else {
69 append line \\n"
70 }
71}