#!/bin/env tclsh package require sqlite3 package require tcl::chan::random package require tcl::randomseed proc fatal {reason {code -1}} { puts stderr "$argv0: fatal: $reason" exit $code } proc usage {} { global argv0 puts stderr "usage: $argv0 DB-PATH" exit -1 } if {[llength $argv] != 1} usage set dbpath [lindex $argv 0] if {[catch {sqlite3 db $dbpath -create false}]} { fatal "can't open \"$dbpath\"" } set unplayed [db eval {SELECT name,href,comment FROM titles WHERE played ISNULL AND ignore = 0}] set chan [::tcl::chan::random [::tcl::randomseed]] binary scan [read $chan 4] i1 n set idx [expr { (abs($n) % ([llength $unplayed] / 3)) * 3 }] set name [lindex $unplayed $idx] set href [lindex $unplayed $idx+1] set comment [lindex $unplayed $idx+2] puts "Random pick: $name" puts "- link: $href" if {$comment != ""} { puts "- comment: $comment" }