# Convert Nokia SMS from .vmg to plain text # # Takes a directory with .vmg files, reads the unicode messages and puts # all messages in plaintext to stdout chronologically. # use new clock from Tcl 8.5 in Tcl 8.4 package require newclock package require textutil # edit this one for displaying user names instead of numbers set known_numbers {+49172123456789 Joe} set directory [lindex $argv 0] if {$directory == ""} { puts "usage: $argv0 path-to-vmg-files" exit -1 } set count 0 foreach file [glob [file join $directory *.vmg]] { # read file set in [open $file] fconfigure $in -encoding unicode set message [read $in] close $in # get sender's phone number regexp -line -nocase {^TEL:(.*)$} $message _ sender foreach {number name} $known_numbers { if {$number == $sender} { set sender "$name ($number)" } } # extract message body regexp {BEGIN:VBODY\n(.*)END:VBODY} $message _ body # get date regexp -line -nocase {^Date:(.*)$} $message _ date set date [clock scan $date -format {%d.%m.%Y %H:%M:%S}] set date [clock format $date -format {%Y-%m-%d %H:%M:%S}] set key "$date -- $sender" # remove date from message body regsub -line -nocase {^Date:(.*)$} $body "" body if {[array get messages $key] != ""} { puts stderr "Warning: double entries at $key!" } set messages($key) $body incr count } set keys [array names messages] foreach key [lsort $keys] { puts [string repeat - 72] puts "* $key\n" puts [::textutil::indent [::textutil::adjust $messages($key) -length 70] " "] } puts stderr "\nConverted $count messages." ---- !!!!!! %| Converters | Nokia Phone | SMS |% !!!!!!