1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
|
proc mfv:file-to-var { filename vname } {
global mfp
upvar $vname var
if [catch {open $filename r} fid] {
set mfp(last-error) $fid
return 1
}
set var [read $fid]
close $fid
return 0
}
proc mfv:file-to-text { filename tw ndx {prefix ""} } {
global mfp
if [catch {open $filename r} fid] {
set mfp(last-error) $fid
return 1
}
if {[$tw compare end <= 2.0]} {
tkTextUndoSetup $tw
set cmd "$tw insert"
} else {
set cmd "tkTextInsert $tw"
}
$tw mark set insert $ndx
if [string length $prefix] {
while {![eof $fid]} {
eval "$cmd insert $prefix\[gets $fid\]\n"
}
} else {
eval "$cmd insert \[read $fid\]"
}
close $fid
return 0
}
proc mfv:var-to-file { vname filename {overwrite 0} } {
global mfp
upvar $vname var
if [catch {switch $overwrite {
0 {open $filename a}
1 {open $filename w}
default {open $filename {WRONLY CREAT EXCL} 0600}
}} fid] {
set mfp(last-error) $fid
return 1
}
puts -nonewline $fid $var
close $fid
return 0
}
proc mfv:text-to-file { tw filename {overwrite 0} {start 1.0} {stop end}} {
global mfp
if ![string length $filename] {
set mfp(last-error) "Empty alias filename"
return 1
}
if [catch {switch $overwrite {
0 {open $filename a}
1 {open $filename w}
default {open $filename {WRONLY CREAT EXCL} 0600}
}} fid] {
set mfp(last-error) $fid
return 1
}
puts -nonewline $fid [$tw get $start $stop]
close $fid
return 0
}
proc mfv:var-to-folder { vname folder } {
upvar $vname var
set file [mfv_util tmpfile tkmail]
if [mfv:var-to-file var $file temporary] { return 1 }
return [mfv:move-folder $file $folder 1]
}
proc mfv:text-to-folder { tw folder {start 1.0} {stop end}} {
set file [mfv_util tmpfile tkmail]
if [mfv:text-to-file $tw $file temporary $start $stop] { return 1 }
return [mfv:move-folder $file $folder 1]
}
proc mfv:move-folder {folder1 folder2 {forcerm 0}} {
global mfp
if $mfp(debug) { puts stderr "Appending $folder1 to $folder2" }
if [catch {mfv_open -id tempmove $folder2} fid] {
set mfp(last-error) $fid
if $forcerm { exec rm -f $folder1 }
return 1
}
set stat 0
set corrupt 0
if [catch {$fid append $folder1} res] {
set mfp(last-error) "$res\n"
set stat 1
if {[string first "folderID" $res] > 0} {
set corrupt 1
}
}
if {$fid == "tempmove"} {
mfv_close $fid
} elseif !$corrupt {
# update any viewers that have the record folder open
foreach viewer $mfp(viewlist) {
if {$fid == [keylget mfp($viewer) fid]} {
if $corrupt {
mfv:reset-viewer $viewer
} else {
mfv:reset-summary $viewer
}
}
}
}
if {!$stat || $forcerm} {
exec rm -f $folder1
}
return $stat
}
|