+# Little utility that ensures that at least one task is present (main).
+proc chktask {} {
+ global tasks
+ if {![info exist tasks]} {
+ task main
+ }
+}
+
+
+# Parse options
+
+set i 0
+set l [llength $argv]
+
+if {$l < 2} {
+ puts {tclrobot: usage:}
+ puts {tclrobot [-j jobs] [-i idle] [-c count] [-d domain] [-D dir] [-r rules] [url ..]}
+ puts " Example: -c 3 -d '*.dk' http://www.indexdata.dk/"
+
+ exit 1
+}
+
+
+while {$i < $l} {
+ set arg [lindex $argv $i]
+ switch -glob -- $arg {
+ -t* {
+ set t [string range $arg 2 end]
+ if {![string length $t]} {
+ set t [lindex $argv [incr i]]
+ }
+ task $t
+ }
+ -D* {
+ set dir [string range $arg 2 end]
+ if {![string length $dir]} {
+ set dir [lindex $argv [incr i]]
+ }
+ lappend daemon_dir $dir
+ }
+ -j* {
+ set robotsMax [string range $arg 2 end]
+ if {![string length $robotsMax]} {
+ set robotsMax [lindex $argv [incr i]]
+ }
+ }
+ -c* {
+ chktask
+ set control($task,distance) [string range $arg 2 end]
+ if {![string length $control($task,distance)]} {
+ set control($task,distance) [lindex $argv [incr i]]
+ }
+ }
+ -d* {
+ chktask
+ set dom [string range $arg 2 end]
+ if {![string length $dom]} {
+ set dom [lindex $argv [incr i]]
+ }
+ lappend control($task,domains) $dom
+ }
+ -i* {
+ set idletime [string range $arg 2 end]
+ if {![string length $idletime]} {
+ set idletime [lindex $argv [incr i]]
+ }
+ }
+ -l* {
+ chktask
+ set acceptLanguage [string range $arg 2 end]
+ if {![string length $acceptLanguage]} {
+ set acceptLanguage [lindex $argv [incr i]]
+ }
+ }
+ -r* {
+ chktask
+ set rfile [string range $arg 2 end]
+ if {![string length $rfile]} {
+ set rfile [lindex $argv [incr i]]
+ }
+ catch {unset maxdistance}
+ source $rfile
+ if {[info exists maxdistance]} {
+ set control($task,distance) $maxdistance
+ }
+ }
+ default {
+ chktask
+ set href $arg
+ if {[RobotHref $task http://www.indexdata.dk/ href host path]} {
+ if {![RobotFileExist $task visited $host $path]} {
+ set outf [RobotFileOpen $task unvisited $host $path]
+ RobotWriteRecord $outf href 0
+ RobotFileClose $outf
+ }
+ }
+ }
+ }
+ incr i
+}
+
+if {![info exist robotsMax]} {
+ set robotsMax 5
+}
+
+if {[info exist daemon_dir]} {
+ RobotDaemonLoop
+} else {
+ foreach t $tasks {
+ puts "task $t"
+ puts "max distance=$control($t,distance)"
+ if {[info exists control($t,domains)]} {
+ puts "domains=$control($t,domains)"
+ }
+ }
+ puts "max jobs=$robotsMax"
+
+ foreach t $tasks {
+ RobotStart $t
+ }
+
+ while {$robotsRunning} {
+ vwait robotsRunning
+ }
+
+ if {[info exists tasks]} {
+ foreach t $tasks {
+ set statusfile [open $t/status w]
+ puts $statusfile "$status($t,unvisited) $status($t,bad) $status($t,visited)"
+ close $statusfile
+ }
+ }
+}