179
|
1 #!/usr/bin/perl -w
|
|
2 #
|
|
3 # usage: cicq2mcabber.pl cicqhistoryfile > mcabberhistoryfile
|
|
4 # Convert a centericq history file to mcabber format
|
|
5 #
|
|
6 # See histolog.c for the mcabber format.
|
|
7 #
|
|
8 # MiKael, 2005/05/05
|
|
9
|
|
10 use strict;
|
|
11
|
|
12 my $line;
|
|
13 my $inblock = 0;
|
|
14
|
|
15 my %bdata = ();
|
|
16
|
|
17 sub print_entry()
|
|
18 {
|
|
19 my ($type, $info, $date, $len, $data);
|
|
20
|
|
21 return unless(defined $bdata{"msg"});
|
|
22
|
|
23 if ($bdata{"type"} eq "MSG") {
|
|
24 $type = "M";
|
|
25 if ($bdata{"inout"} eq "OUT") {
|
|
26 $info = "S";
|
|
27 } elsif ($bdata{"inout"} eq "IN") {
|
|
28 $info = "R";
|
|
29 } else {
|
|
30 print STDERR "Neither IN nor OUT!?\n";
|
|
31 return;
|
|
32 }
|
|
33 } else {
|
|
34 print STDERR "Data type not handled.\n";
|
|
35 return;
|
|
36 }
|
|
37 $date = $bdata{"timestamp"};
|
|
38 $len = $bdata{"nb"};
|
|
39 $data = $bdata{"msg"};
|
|
40
|
|
41 printf("%s%s %10u %03d %s", $type, $info, $date, $len, $data);
|
|
42 }
|
|
43
|
|
44 while ($line = <>) {
|
|
45 chomp $line;
|
|
46 # The separator is ^L ; I use substr to exclude the EOL
|
|
47 if ($line eq "") {
|
|
48 print_entry() if ($inblock);
|
|
49 # reset data for new block
|
|
50 %bdata = ();
|
|
51 $inblock = 1;
|
|
52 next;
|
|
53 }
|
|
54 # Skip garbage or unrecognized stuff...
|
|
55 if (!$inblock) {
|
|
56 print STDERR "Skipping line\n";
|
|
57 next;
|
|
58 }
|
|
59
|
|
60 # 1 IN/OUT line
|
|
61 unless (exists $bdata{"inout"}) {
|
|
62 if (($line eq "IN") || ($line eq "OUT")) {
|
|
63 $bdata{"inout"} = $line;
|
|
64 } else {
|
|
65 print STDERR "No IN/OUT information ($line)!\n";
|
|
66 $inblock = 0;
|
|
67 }
|
|
68 next;
|
|
69 }
|
|
70 # 1 type line (MSG...)
|
|
71 unless (exists $bdata{"type"}) {
|
|
72 # We don't handle NOTE and AUTH yet.
|
|
73 if ($line eq "MSG") {
|
|
74 $bdata{"type"} = $line;
|
|
75 } else {
|
|
76 print STDERR "Not a MSG type ($line)\n";
|
|
77 $inblock = 0;
|
|
78 }
|
|
79 next;
|
|
80 }
|
|
81 # 2 date lines
|
|
82 unless (exists $bdata{"timestamp"}) {
|
|
83 $bdata{"timestamp"} = $line;
|
|
84 last unless defined ($line = <>);
|
|
85 chomp $line;
|
|
86 $bdata{"timestamp2"} = $line;
|
|
87 if (! $bdata{"timestamp2"} eq $bdata{"timestamp2"}) {
|
|
88 print STDERR "Timestamps differ...\n";
|
|
89 }
|
|
90 next;
|
|
91 }
|
|
92 # ... The message itself
|
|
93 $line =~ s/
$//;
|
|
94 if (exists $bdata{"msg"}) {
|
|
95 $bdata{"msg"} .= $line."\n";
|
|
96 $bdata{"nb"}++;
|
|
97 } else {
|
|
98 $bdata{"msg"} = $line."\n";
|
|
99 $bdata{"nb"} = 0;
|
|
100 }
|
|
101 }
|
|
102 print_entry() if ($inblock);
|
|
103
|
|
104 # vim:set sw=2 sts=2 et si cinoptions="":
|