File: file.tcl

package info (click to toggle)
tkmail 4.0beta9-8.1
  • links: PTS
  • area: main
  • in suites: woody
  • size: 1,444 kB
  • ctags: 923
  • sloc: tcl: 13,262; ansic: 6,998; makefile: 351; sh: 88; sed: 57
file content (139 lines) | stat: -rw-r--r-- 2,787 bytes parent folder | download
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
}