Overview
Comment: | Began work on new pure-Tcl metakit, which will replace readkit-converted mk4tcl |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA1: | 7bfc5cf0e25159c5f43a0786167eea2b69d0911e |
User & Date: | rkeene on 2010-09-26 04:41:04 |
Other Links: | manifest | tags |
Context
2010-09-26
| ||
04:41 | Updated to not produce spurious newline check-in: 0aa038624e user: rkeene tags: trunk | |
04:41 | Began work on new pure-Tcl metakit, which will replace readkit-converted mk4tcl check-in: 7bfc5cf0e2 user: rkeene tags: trunk | |
04:41 | Updated to be less verbose on missing directories check-in: ea9a5ecf91 user: rkeene tags: trunk | |
Changes
Added kitsh/buildsrc/kitsh-0.0/mk4tcl-new.tcl version [737d3e66d5].
1 +#! /usr/bin/env tclsh 2 + 3 +namespace eval ::mk {} 4 +namespace eval ::mk::file {} 5 +namespace eval ::mk::view {} 6 +namespace eval ::mk::cursor {} 7 +namespace eval ::mk::row {} 8 +namespace eval ::mk::private {} 9 + 10 +proc ::mk::file {cmd args} { 11 + set args [lindex $args 0 ::mk::file::${cmd}] 12 + 13 + return [eval $args] 14 +} 15 + 16 +proc ::mk::file::open {args} { 17 + if {[llength $args] == 0} { 18 + # Return open tags 19 + 20 + set retval [list] 21 + foreach tag [array names ::mk::private::tags] { 22 + unset -nocomplain taginfo 23 + array set taginfo $::mk::private::tags($tag) 24 + 25 + lappend retval $tag $taginfo(file) 26 + } 27 + 28 + return 29 + } 30 + 31 + set tag [lindex $args 0] 32 + if {[info exists ::mk::private::tags($tag)]} { 33 + return -code error "tag is already open" 34 + } 35 + 36 + set taginfo(writable) 1 37 + set taginfo(commit_on_close) 1 38 + set taginfo(commit_on_set) 0 39 + set taginfo(extend) 0 40 + set taginfo(shared) 0 41 + 42 + if {[llength $args] == 1} { 43 + # Use in-memory file 44 + 45 + set taginfo(file) "" 46 + set taginfo(fd) "" 47 + } else { 48 + set filename [lindex $args 1] 49 + 50 + foreach opt [lrange $args 2 end] { 51 + switch -- $opt { 52 + "-readonly" { 53 + set taginfo(writable) 0 54 + } 55 + "-nocommit" { 56 + set taginfo(commit_on_close) 0 57 + } 58 + "-extend" { 59 + set taginfo(extend) 1 60 + } 61 + "-shared" { 62 + set taginfo(shared) 1 63 + } 64 + } 65 + } 66 + 67 + if {$taginfo(writable)} { 68 + set fd [open $filename a+] 69 + seek $fd 0 start 70 + } else { 71 + set fd [open $filename r] 72 + } 73 + 74 + set taginfo(file) $filename 75 + set taginfo(fd) $fd 76 + } 77 + 78 + set ::mk::private::changes($tag) [list] 79 + set ::mk::private::tags($tag) [array get taginfo] 80 +} 81 + 82 +proc ::mk::file::close {tag} { 83 + if {![info exists ::mk::private::tags($tag)]} { 84 + return -code error "no storage with this name" 85 + } 86 + 87 + array set taginfo $::mk::private::tags($tag) 88 + 89 + if {$taginfo(commit_on_close) && $taginfo(writable) && $taginfo(fd) != ""} { 90 + mk::file commit $tag -full 91 + } 92 + 93 + if {$taginfo(fd) != ""} { 94 + close $taginfo(fd) 95 + } 96 + 97 + unset ::mk::private::changes($tag) 98 + unset ::mk::private::tags($tag) 99 +} 100 + 101 +proc ::mk::file::views {{tag ""}} { 102 + return -code error "Not Implemented" 103 +} 104 + 105 +proc ::mk::file::commit {tag {fullOpt ""}} { 106 + if {![info exists ::mk::private::tags($tag)]} { 107 + return -code error "no storage with this name" 108 + } 109 + 110 + array set taginfo $::mk::private::tags($tag) 111 + 112 + if {$fullOpt == "-full"} { 113 + # Flush asides 114 + # XXX: TODO 115 + } 116 + 117 + if {$taginfo(fd) == ""} { 118 + # We can't commit if we weren't asked to write to stable 119 + # storage 120 + return 121 + } 122 + 123 + # XXX: TODO 124 + return -code error "Not Implemented" 125 +} 126 + 127 +proc ::mk::file::rollback {tag {fullOpt ""}} { 128 + if {![info exists ::mk::private::tags($tag)]} { 129 + return -code error "no storage with this name" 130 + } 131 + 132 + if {$fullOpt == "-full"} { 133 + # Clear asides ... 134 + # XXX: TODO 135 + } 136 + 137 + set ::mk::private::changes($tag) "" 138 +} 139 + 140 +proc ::mk::file::load {{tag ""} {channel ""}} { 141 + return -code error "Not Implemented" 142 +} 143 + 144 +proc ::mk::file::save {{tag ""} {channel ""}} { 145 + return -code error "Not Implemented" 146 +} 147 + 148 +proc ::mk::file::aside {{tag1 ""} {tag2 ""}} { 149 + return -code error "Not Implemented" 150 +} 151 + 152 +proc ::mk::file::autocommit {tag} { 153 + if {![info exists ::mk::private::tags($tag)]} { 154 + return -code error "no storage with this name" 155 + } 156 + 157 + array set taginfo $::mk::private::tags($tag) 158 + 159 + set taginfo(commit_on_close) 1 160 + 161 + set ::mk::private::tags($tag) [array get taginfo] 162 +} 163 + 164 +proc ::mk::view {cmd args} { 165 + return -code error "Not Implemented" 166 +} 167 + 168 +proc ::mk::cursor {cmd args} { 169 + return -code error "Not Implemented" 170 +} 171 + 172 +proc ::mk::row {cmd args} { 173 + return -code error "Not Implemented" 174 +} 175 + 176 +proc ::mk::get {args} { 177 + return -code error "Not Implemented" 178 +} 179 + 180 +proc ::mk::set {args} { 181 + return -code error "Not Implemented" 182 +} 183 + 184 +proc ::mk::loop {args} { 185 + return -code error "Not Implemented" 186 +} 187 + 188 +proc ::mk::select {args} { 189 + return -code error "Not Implemented" 190 +} 191 + 192 +proc ::mk::channel {args} { 193 + return -code error "Not Implemented" 194 +} 195 + 196 +package provide Mk4tcl 2.4.9.6