|
1 #!/usr/bin/wish |
|
2 |
|
3 text .text -relief sunken -bd 2 -yscrollcommand ".scroll set" -setgrid 1 \ |
|
4 -height 30 -undo 1 -autosep 1 |
|
5 scrollbar .scroll -command ".text yview" |
|
6 pack .scroll -side right -fill y |
|
7 pack .text -expand yes -fill both |
|
8 |
|
9 menu .menu -tearoff 0 |
|
10 |
|
11 set File .menu.file |
|
12 |
|
13 set filetypes { |
|
14 {"CCrypt files" { ".cpt" } { "CPT "}} |
|
15 } |
|
16 |
|
17 menu $File -tearoff 0 |
|
18 .menu add cascade -label "File" -menu $File |
|
19 $File add command -label "New" -command { newfile } |
|
20 $File add command -label "Open" -command { openfile } |
|
21 $File add command -label "Save" -command { savefile $actualfile $actualpass} |
|
22 $File add command -label "Save as..." -command { savefile } |
|
23 $File add separator |
|
24 $File add command -label "Quit" -command { exit} |
|
25 |
|
26 . configure -menu .menu |
|
27 |
|
28 set actualpass "" |
|
29 set actualfile "" |
|
30 wm title . "tkcrypt - New File" |
|
31 |
|
32 proc askpassword { op entries } { |
|
33 set tl [toplevel .pass] |
|
34 global password1 password2 |
|
35 global actualpass |
|
36 |
|
37 set password1 "" |
|
38 set password2 "" |
|
39 label .pass.info -text "Please introduce your password for $op:" |
|
40 pack .pass.info -side top |
|
41 |
|
42 entry .pass.entry -textvariable password1 -show "*" |
|
43 pack .pass.entry -side top |
|
44 bind .pass.entry <Return> {destroy .pass} |
|
45 if { $entries == 2} { |
|
46 label .pass.info2 -text "2nd time, for verification:" |
|
47 pack .pass.info2 -side top |
|
48 entry .pass.entry2 -textvariable password2 -show "*" |
|
49 pack .pass.entry2 -side top |
|
50 bind .pass.entry2 <Return> {destroy .pass} |
|
51 } |
|
52 button .pass.ok -text "Ok" -command \ |
|
53 { destroy .pass } |
|
54 pack .pass.ok -side left |
|
55 button .pass.cancel -text "Cancel" \ |
|
56 -command {set password1 ""; set password2 ""; destroy .pass} |
|
57 pack .pass.cancel -side right |
|
58 |
|
59 bind .pass.entry <Escape> {set password1 ""; set password2 ""; destroy .pass} |
|
60 |
|
61 focus $tl |
|
62 focus $tl.entry |
|
63 grab $tl |
|
64 tkwait window $tl |
|
65 catch { grab release $tl } |
|
66 focus . |
|
67 |
|
68 if { $entries != 2 } { |
|
69 set tmppass $password1 |
|
70 set password1 "" |
|
71 return $tmppass |
|
72 } |
|
73 |
|
74 if { $password1 == $password2 } { |
|
75 set tmppass $password1 |
|
76 set password1 "" |
|
77 set password2 "" |
|
78 return $tmppass |
|
79 } else { |
|
80 set password1 "" |
|
81 set password2 "" |
|
82 tk_messageBox -type ok -message "The passwords don't match" \ |
|
83 -icon error |
|
84 return "" |
|
85 } |
|
86 } |
|
87 |
|
88 proc newfile { } { |
|
89 global actualpass actualfile |
|
90 set actualpass "" |
|
91 set actualfile "" |
|
92 .text delete 1.0 end |
|
93 wm title . "tkcrypt - New File" |
|
94 } |
|
95 |
|
96 proc openfile { } { |
|
97 global env actualpass actualfile filetypes |
|
98 set file [tk_getOpenFile -defaultextension .cpt -filetypes $filetypes] |
|
99 |
|
100 if { $file == ""} { |
|
101 return |
|
102 } |
|
103 |
|
104 set pass [askpassword "Open" 1] |
|
105 |
|
106 if { $pass == "" } { return } |
|
107 |
|
108 # Decode |
|
109 set env(PASS) $pass |
|
110 |
|
111 set error [ catch { set txt [exec ccrypt -dc -E PASS $file] } result ] |
|
112 if { $error != 0 } { |
|
113 tk_messageBox -type ok -message "Password incorrect:\n$result" \ |
|
114 -icon error |
|
115 return |
|
116 } |
|
117 |
|
118 .text delete 1.0 end |
|
119 .text insert end $txt |
|
120 # while { [eof $fd ] != 1 } { |
|
121 # set line [gets $fd] |
|
122 # .text insert end $line |
|
123 # } |
|
124 |
|
125 set env(PASS) "" |
|
126 |
|
127 set actualpass $pass |
|
128 set actualfile $file |
|
129 wm title . "tkcrypt - $file" |
|
130 } |
|
131 |
|
132 proc savefile { {file ""} {pass ""} } { |
|
133 global env actualpass actualfile filetypes |
|
134 |
|
135 if { $file == "" } { |
|
136 set file [tk_getSaveFile -defaultextension .cpt -filetypes \ |
|
137 $filetypes] |
|
138 } |
|
139 |
|
140 if { $file == ""} { |
|
141 return |
|
142 } |
|
143 |
|
144 if { $pass == "" } { |
|
145 set pass [askpassword "Save" 2] |
|
146 |
|
147 if { $pass == "" } { return } |
|
148 } |
|
149 |
|
150 # Decode |
|
151 set env(PASS) $pass |
|
152 |
|
153 set error [ catch { set fd [open "|ccrypt -E PASS >$file" w] } result ] |
|
154 if { $error != 0 } { |
|
155 tk_messageBox -type ok -message "Password incorrect:\n$result" \ |
|
156 -icon error |
|
157 return |
|
158 } |
|
159 |
|
160 puts -nonewline $fd [.text get 1.0 end] |
|
161 close $fd |
|
162 |
|
163 set env(PASS) "" |
|
164 set actualpass $pass |
|
165 set actualfile $file |
|
166 wm title . "tkcrypt - $file" |
|
167 tk_messageBox -type ok -message "File \"$file\" saved!" \ |
|
168 -icon info |
|
169 } |