#! /usr/bin/env tclkit # add notes to the info views mk::file open db info.mk mk::view layout db.logs {name vid:I date:I hmd:B hsz:I tmd:B tsz:I vsn note} mk::view layout db.info {name desc author license} proc vid2sig {vid} { if {![regexp {^(\d+)-(\d+)$} $vid - a b]} { error "$vid: not of form 'nnnnn-mmmmm'" } return [expr {(($a-10000)<<16)|($b-10000)}] } proc nvInLogs {name vid} { set sig [vid2sig $vid] set n [mk::select db.logs -count 1 name $name vid $sig] if {$n ne ""} { return db.logs!$n } return [mk::row append db.logs name $name vid $sig] } proc nameInInfo {name} { set n [mk::select db.info -count 1 name $name] if {$n ne ""} { return db.info!$n } return [mk::row append db.info name $name] } proc pkg {name def} { global pkgname set pkgname $name uplevel #1 $def unset pkgname } proc desc {args} { global pkgname if {[llength $args]} { mk::set [nameInInfo $pkgname] desc [join $args " "] } } proc author {args} { global pkgname if {[llength $args]} { mk::set [nameInInfo $pkgname] author [join $args " "] } } proc license {args} { global pkgname if {[llength $args]} { mk::set [nameInInfo $pkgname] license [join $args " "] } } proc vid {vid args} { global pkgname if {[llength $args]} { set c [nvInLogs $pkgname $vid] if {[llength $args] == 2 && [lindex $args 0] eq "="} { mk::set $c vsn [lindex $args 1] } else { mk::set $c note [join $args " "] } } } proc > {args} { puts [list > $args skipped] } source newnotes.txt if 0 { # parse "notes.txt" to load annotations temporarily into the "info" view set fd [open notes.txt] while {[gets $fd line] >= 0} { if {[llength $line] > 2} { foreach {name vid} $line break set t [string trim [join [lrange $line 2 end] " "]] #puts [list $name $vid $t] if {$vid eq ":"} { set found 0 $infv loop c { if {$c(name) eq $name} { set found 1; set c(desc) $t } } if {!$found} { $infv append name $name desc $t } } elseif {[regexp {^(\d+)-(\d+)$} $vid - a b]} { set sig [expr {(($a-10000)<<16)|($b-10000)}] $logv loop c { if {$c(name) eq $name && $c(vid) == $sig} { if {[llength $line] == 4 && [lindex $line 2] eq "v"} { set c(vsn) [lindex $line 3] } else { set c(note) $t } } } } } } close $fd }