Data commit

This commit is contained in:
Ingy döt Net 2023-07-01 11:58:00 -04:00
parent 7387c8f97b
commit cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions

View file

@ -0,0 +1,101 @@
#!/usr/bin/env tclsh8.6
package require Tcl 8.6
namespace eval udb {
variable db {}
proc Load {filename} {
variable db
if {[catch {set f [open $filename]}]} {
set db {}
return
}
set db [read $f]
close $f
}
proc Store {filename} {
variable db
if {[catch {set f [open $filename w]}]} return
dict for {nm inf} $db {
puts $f [list $nm $inf]
}
close $f
}
proc add {title category {date "now"} args} {
variable db
if {$date eq "now"} {
set date [clock seconds]
} else {
set date [clock scan $date]
}
dict set db $title [list $category $date $args]
return
}
proc Rec {nm cat date xtra} {
dict create description $nm category $cat date [clock format $date] \
{*}$xtra _names [dict keys $xtra]
}
proc latest {{category ""}} {
variable db
if {$category eq ""} {
set d [lsort -stride 2 -index {1 1} -integer -decreasing $db]
dict for {nm inf} $d break
return [list [Rec $nm {*}$inf]]
}
set latestbycat {}
dict for {nm inf} [lsort -stride 2 -index {1 1} -integer $db] {
dict set latestbycat [lindex $inf 0] [list $nm {*}$inf]
}
return [list [Rec {*}[dict get $latestbycat $category]]]
}
proc latestpercategory {} {
variable db
set latestbycat {}
dict for {nm inf} [lsort -stride 2 -index {1 1} -integer $db] {
dict set latestbycat [lindex $inf 0] [list $nm {*}$inf]
}
set result {}
dict for {- inf} $latestbycat {
lappend result [Rec {*}$inf]
}
return $result
}
proc bydate {} {
variable db
set result {}
dict for {nm inf} [lsort -stride 2 -index {1 1} -integer $db] {
lappend result [Rec $nm {*}$inf]
}
return $result
}
namespace export add latest latestpercategory bydate
namespace ensemble create
}
if {$argc < 2} {
puts stderr "wrong # args: should be \"$argv0 dbfile subcommand ?args...?\""
exit 1
}
udb::Load [lindex $argv 0]
set separator ""
if {[catch {udb {*}[lrange $argv 1 end]} msg]} {
puts stderr [regsub "\"udb " $msg "\"$argv0 dbfile "]
exit 1
}
foreach row $msg {
puts -nonewline $separator
apply {row {
dict with row {
puts "Title: $description"
puts "Category: $category"
puts "Date: $date"
foreach v $_names {
puts "${v}: [dict get $row $v]"
}
}
}} $row
set separator [string repeat - 70]\n
}
udb::Store [lindex $argv 0]

View file

@ -0,0 +1,91 @@
bash$ udb.tcl db
wrong # args: should be "udb.tcl dbfile subcommand ?args...?"
bash$ udb.tcl db ?
unknown or ambiguous subcommand "?": must be add, bydate, latest, or latestpercategory
bash$ udb.tcl db add
wrong # args: should be "udb.tcl dbfile add title category ?date? ?arg ...?"
bash$ udb.tcl db add "Title 1" foo
bash$ udb.tcl db add "Title 2" foo
bash$ udb.tcl db add "Title 3" bar
bash$ udb.tcl db bydate
Title: Title 1
Category: foo
Date: Tue Nov 15 18:11:58 GMT 2011
----------------------------------------------------------------------
Title: Title 2
Category: foo
Date: Tue Nov 15 18:12:01 GMT 2011
----------------------------------------------------------------------
Title: Title 3
Category: bar
Date: Tue Nov 15 18:12:07 GMT 2011
bash$ udb.tcl db latest
Title: Title 3
Category: bar
Date: Tue Nov 15 18:12:07 GMT 2011
bash$ udb.tcl db latest foo
Title: Title 2
Category: foo
Date: Tue Nov 15 18:12:01 GMT 2011
bash$ udb.tcl db latest bar
Title: Title 3
Category: bar
Date: Tue Nov 15 18:12:07 GMT 2011
bash$ udb.tcl db latestpercategory
Title: Title 2
Category: foo
Date: Tue Nov 15 18:12:01 GMT 2011
----------------------------------------------------------------------
Title: Title 3
Category: bar
Date: Tue Nov 15 18:12:07 GMT 2011
bash$ udb.tcl db add "Title 4" bar "12:00 Monday last week"
bash$ udb.tcl db bydate
Title: Title 4
Category: bar
Date: Mon Nov 14 12:00:00 GMT 2011
----------------------------------------------------------------------
Title: Title 1
Category: foo
Date: Tue Nov 15 18:11:58 GMT 2011
----------------------------------------------------------------------
Title: Title 2
Category: foo
Date: Tue Nov 15 18:12:01 GMT 2011
----------------------------------------------------------------------
Title: Title 3
Category: bar
Date: Tue Nov 15 18:12:07 GMT 2011
bash$ cat db
{Title 1} {foo 1321380718 {}}
{Title 2} {foo 1321380721 {}}
{Title 3} {bar 1321380727 {}}
{Title 4} {bar 1321272000 {}}
bash$ udb.tcl db add "Title 5" foo "12:00 Monday last week" Comment 'Wholly excellent!'
bash$ cat db
{Title 1} {foo 1321380718 {}}
{Title 2} {foo 1321380721 {}}
{Title 3} {bar 1321380727 {}}
{Title 4} {bar 1321272000 {}}
{Title 5} {foo 1321272000 {Comment {Wholly excellent!}}}
bash$ udb.tcl db bydate
Title: Title 4
Category: bar
Date: Mon Nov 14 12:00:00 GMT 2011
----------------------------------------------------------------------
Title: Title 5
Category: foo
Date: Mon Nov 14 12:00:00 GMT 2011
Comment: Wholly excellent!
----------------------------------------------------------------------
Title: Title 1
Category: foo
Date: Tue Nov 15 18:11:58 GMT 2011
----------------------------------------------------------------------
Title: Title 2
Category: foo
Date: Tue Nov 15 18:12:01 GMT 2011
----------------------------------------------------------------------
Title: Title 3
Category: bar
Date: Tue Nov 15 18:12:07 GMT 2011