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