--- /dev/null
+
+package provide mlcm::db 0.1
+
+namespace eval mlcm::db {
+
+ set _body {
+ set len [llength $args]
+ # puts "MMM $this CMD [lindex $args 0]"
+ # puts "MMM $this REC $myrec"
+ # puts "MMM $this REC [$myrec get -tags]"
+
+ switch -glob -- [lindex $args 0] {
+ all {
+ set max [$myrec get maxrow]
+ # puts "MMM $this all $max"
+ $myrec set num $max
+ $myrec set act 0
+ $myrec delete mfn
+ for {set j 1} {$max >= $j} {incr j} {
+ $myrec add mfn $j
+ }
+ return $max
+ }
+ hasNext {
+ if {2 <= $len} {
+ set incr [lindex $args 1]
+ } {
+ set incr 1
+ }
+ set idx [$myrec get act]
+ set max [$myrec get num]
+ set nidx [expr $idx + $incr]
+ # puts "MMM $this hasNext $len $incr $idx $max"
+ return [expr 0 < $nidx && $nidx <= $max]
+ }
+ name {
+ return [$myrec get name]
+ }
+ next {
+ if {2 <= $len} {
+ set incr [lindex $args 1]
+ } {
+ set incr 1
+ }
+ set idx [$myrec get act]
+ set max [$myrec get num]
+ incr idx $incr
+ if {$idx < 1} {
+ set idx 1
+ } elseif {$idx > $max} {
+ set idx $max
+ }
+ $myrec set act $idx
+ # puts "MMM $this next -> $idx"
+ return [$myrec get mfn\[[expr $idx - 1]\]]
+ }
+ rec {
+ return $myrec
+ }
+ stub {
+ return [$myrec get stub]
+ }
+ * {
+ return [eval $myrec $args]
+ }
+ }
+ }
+
+ proc new {dbn stb} {
+ variable _body
+ set rec [openIsisRec -fdt $mlcm::meta::fdtDb]
+ $rec set name $dbn stub $stb
+ $rec set config [$stb db $dbn]
+ if [catch {
+ $stb .req delete
+ $stb req type maxrow db $dbn
+ set maxrow [$stb .res get row]
+ # puts "MMM db $dbn maxrow $maxrow"
+ $rec set maxrow $maxrow
+ }] {
+ global errorInfo
+ puts $errorInfo
+ }
+ proc $dbn args "
+ set myrec $rec
+ set this $dbn
+ $_body
+ "
+ return mlcm::db::$dbn
+ }
+}
+