# HG changeset patch # User viric@llimona # Date 1162396954 -3600 # Node ID 3a01adf9b54310613293180f5ae2404e0546a4be First release of tkcrypt diff -r 000000000000 -r 3a01adf9b543 tkcrypt.tk --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/tkcrypt.tk Wed Nov 01 17:02:34 2006 +0100 @@ -0,0 +1,149 @@ +#!/usr/bin/wish + +text .text -relief sunken -bd 2 -yscrollcommand ".scroll set" -setgrid 1 \ + -height 30 -undo 1 -autosep 1 +scrollbar .scroll -command ".text yview" +pack .scroll -side right -fill y +pack .text -expand yes -fill both + +menu .menu -tearoff 0 + +set File .menu.file +menu $File -tearoff 0 +.menu add cascade -label "File" -menu $File +$File add command -label "New" -command { newfile } +$File add command -label "Open" -command { openfile } +$File add command -label "Save" -command { savefile $actualfile $actualpass} +$File add command -label "Save as..." -command { savefile } +$File add separator +$File add command -label "Quit" -command { exit} + +. configure -menu .menu + +set actualpass "" +set actualfile "" +wm title . "tkcrypt - New File" + +proc askpassword { op entries } { + set tl [toplevel .pass] + global password1 password2 + global actualpass + + set password1 "" + set password2 "" + label .pass.info -text "Please introduce your password two times for $op:" + pack .pass.info -side top + + entry .pass.entry -textvariable password1 -show "*" + pack .pass.entry -side top + if { $entries == 2} { + entry .pass.entry2 -textvariable password2 -show "*" + pack .pass.entry2 -side top + } + button .pass.ok -text "Ok" -command \ + { destroy .pass } + pack .pass.ok -side left + button .pass.cancel -text "Cancel" \ + -command {set password1 ""; set password2 ""; destroy .pass} + pack .pass.cancel -side right + + bind .pass.entry {destroy .pass} + bind .pass.entry {set password1 ""; set password2 ""; destroy .pass} + + focus $tl + focus $tl.entry + grab $tl + tkwait window $tl + catch { grab release $tl } + focus . + + if { $entries != 2 } { + set tmppass $password1 + set password1 "" + return $tmppass + } + + if { $password1 == $password2 } { + set tmppass $password1 + set password1 "" + set password2 "" + return $tmppass + } else { + set password1 "" + set password2 "" + tk_messageBox -type ok -message "The passwords don't match" \ + -icon error + return "" + } +} + +proc newfile { } { + global actualpass actualfile + set actualpass "" + set actualfile "" + wm title . "tkcrypt - New File" +} + +proc openfile { } { + global env actualpass actualfile + set file [tk_getOpenFile] + set pass [askpassword "Open" 1] + + if { $pass == "" } { return } + + # Decode + set env(PASS) $pass + + set error [ catch { set txt [exec ccrypt -dc -E PASS $file] } result ] + if { $error != 0 } { + tk_messageBox -type ok -message "Password incorrect:\n$result" \ + -icon error + return + } + + .text delete 1.0 end + .text insert end $txt +# while { [eof $fd ] != 1 } { +# set line [gets $fd] +# .text insert end $line +# } + + set env(PASS) "" + + set actualpass $pass + set actualfile $file + wm title . "tkcrypt - $file" +} + +proc savefile { {file ""} {pass ""} } { + global env actualpass actualfile + + if { $file == "" } { + set file [tk_getSaveFile] + } + + if { $pass == "" } { + set pass [askpassword "Save" 2] + + if { $pass == "" } { return } + } + + # Decode + set env(PASS) $pass + + set error [ catch { set fd [open "|ccrypt -E PASS >$file" w] } result ] + if { $error != 0 } { + tk_messageBox -type ok -message "Password incorrect:\n$result" \ + -icon error + return + } + + puts -nonewline $fd [.text get 1.0 end] + close $fd + + set env(PASS) "" + set actualfile $file + wm title . "tkcrypt - $file" + tk_messageBox -type ok -message "File \"$file\" saved!" \ + -icon info +}