annotate mcabber/contrib/cicq2mcabber.pl @ 1566:d64e0b2855fc

Fix display of last character in the input line when Aspell support is enabled The rightmost character displayed in the input line was always the last character of the line. (Reported by isbear.)
author Mikael Berthe <mikael@lilotux.net>
date Sun, 08 Feb 2009 10:08:05 +0100
parents cb2f18e20e6a
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
179
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
1 #!/usr/bin/perl -w
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
2 #
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
3 # usage: cicq2mcabber.pl cicqhistoryfile > mcabberhistoryfile
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
4 # Convert a centericq history file to mcabber format
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
5 #
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
6 # See histolog.c for the mcabber format.
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
7 #
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
8 # MiKael, 2005/05/05
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
9
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
10 use strict;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
11
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
12 my $line;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
13 my $inblock = 0;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
14
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
15 my %bdata = ();
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
16
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
17 sub print_entry()
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
18 {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
19 my ($type, $info, $date, $len, $data);
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
20
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
21 return unless(defined $bdata{"msg"});
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
22
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
23 if ($bdata{"type"} eq "MSG") {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
24 $type = "M";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
25 if ($bdata{"inout"} eq "OUT") {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
26 $info = "S";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
27 } elsif ($bdata{"inout"} eq "IN") {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
28 $info = "R";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
29 } else {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
30 print STDERR "Neither IN nor OUT!?\n";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
31 return;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
32 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
33 } else {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
34 print STDERR "Data type not handled.\n";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
35 return;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
36 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
37 $date = $bdata{"timestamp"};
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
38 $len = $bdata{"nb"};
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
39 $data = $bdata{"msg"};
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
40
242
cb2f18e20e6a [/trunk] Changeset 255 by mikael
mikael
parents: 179
diff changeset
41 # Date conversion to iso8601
cb2f18e20e6a [/trunk] Changeset 255 by mikael
mikael
parents: 179
diff changeset
42 my ($ss,$mm,$hh,$DD,$MM,$YYYY) = gmtime($date);
cb2f18e20e6a [/trunk] Changeset 255 by mikael
mikael
parents: 179
diff changeset
43 $date = sprintf "%04d%02d%02dT%02d:%02d:%02dZ",
cb2f18e20e6a [/trunk] Changeset 255 by mikael
mikael
parents: 179
diff changeset
44 $YYYY+1900, $MM+1,$DD,$hh,$mm,$ss;
cb2f18e20e6a [/trunk] Changeset 255 by mikael
mikael
parents: 179
diff changeset
45
cb2f18e20e6a [/trunk] Changeset 255 by mikael
mikael
parents: 179
diff changeset
46 printf("%s%s %18.18s %03d %s", $type, $info, $date, $len, $data);
179
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
47 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
48
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
49 while ($line = <>) {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
50 chomp $line;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
51 # The separator is ^L ; I use substr to exclude the EOL
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
52 if ($line eq "") {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
53 print_entry() if ($inblock);
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
54 # reset data for new block
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
55 %bdata = ();
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
56 $inblock = 1;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
57 next;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
58 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
59 # Skip garbage or unrecognized stuff...
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
60 if (!$inblock) {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
61 print STDERR "Skipping line\n";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
62 next;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
63 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
64
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
65 # 1 IN/OUT line
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
66 unless (exists $bdata{"inout"}) {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
67 if (($line eq "IN") || ($line eq "OUT")) {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
68 $bdata{"inout"} = $line;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
69 } else {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
70 print STDERR "No IN/OUT information ($line)!\n";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
71 $inblock = 0;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
72 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
73 next;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
74 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
75 # 1 type line (MSG...)
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
76 unless (exists $bdata{"type"}) {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
77 # We don't handle NOTE and AUTH yet.
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
78 if ($line eq "MSG") {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
79 $bdata{"type"} = $line;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
80 } else {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
81 print STDERR "Not a MSG type ($line)\n";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
82 $inblock = 0;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
83 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
84 next;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
85 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
86 # 2 date lines
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
87 unless (exists $bdata{"timestamp"}) {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
88 $bdata{"timestamp"} = $line;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
89 last unless defined ($line = <>);
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
90 chomp $line;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
91 $bdata{"timestamp2"} = $line;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
92 if (! $bdata{"timestamp2"} eq $bdata{"timestamp2"}) {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
93 print STDERR "Timestamps differ...\n";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
94 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
95 next;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
96 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
97 # ... The message itself
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
98 $line =~ s/
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
99 $//;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
100 if (exists $bdata{"msg"}) {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
101 $bdata{"msg"} .= $line."\n";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
102 $bdata{"nb"}++;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
103 } else {
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
104 $bdata{"msg"} = $line."\n";
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
105 $bdata{"nb"} = 0;
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
106 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
107 }
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
108 print_entry() if ($inblock);
d416d5cb8ddb [/trunk] Changeset 191 by mikael
mikael
parents:
diff changeset
109