SQLite

sqltclsh.tcl
Login

File tool/sqltclsh.tcl from the latest check-in


# Try to open the executable as a database and read the "scripts.data"
# field where "scripts.name" is 'main.tcl'
#
catch {
  if {![file exists $argv0] && [file exists $argv0.exe]} {
    append argv0 .exe
  }
  sqlite3 db $argv0 -vfs apndvfs -create 0
  set mainscript [db one {
      SELECT sqlar_uncompress(data,sz) FROM sqlar WHERE name='main.tcl'
  }]
}
if {[info exists mainscript]} {
  eval $mainscript
  return
} else {
  catch {db close}
}

# Try to open file named in the first argument as a database and
# read the "scripts.data" field where "scripts.name" is 'main.tcl'
#
if {[llength $argv]>0 && [file readable [lindex $argv 0]]} {
  catch {
    sqlite3 db [lindex $argv 0] -vfs apndvfs -create 0
    set mainscript [db one {SELECT data FROM scripts WHERE name='main.tcl'}]
    set argv0 [lindex $argv 0]
    set argv [lrange $argv 1 end]
  }
  if {[info exists mainscript]} {
    eval $mainscript
    return
  } else {
    catch {db close}
  }
  if {[string match *.tcl [lindex $argv 0]]} {
    set fd [open [lindex $argv 0] rb]
    set mainscript [read $fd]
    close $fd
    unset fd
    set argv0 [lindex $argv 0]
    set argv [lrange $argv 1 end]
  }
  if {[info exists mainscript]} {
    eval $mainscript
    return
  }
}

# If all else fails, do an interactive loop
#
set line {}
while {![eof stdin]} {
  if {$line!=""} {
    puts -nonewline "> "
  } else {
    puts -nonewline "% "
  }
  flush stdout
  append line [gets stdin]
  if {[info complete $line]} {
    if {[catch {uplevel #0 $line} result]} {
      puts stderr "Error: $result"
    } elseif {$result!=""} {
      puts $result
    }
    set line {}
  } else {
    append line \\n"
  }
}