ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/cvsroot/Mozilla-Plugin/Plugin.pm
Revision: 1.1
Committed: Thu Feb 22 23:18:48 2001 UTC (23 years, 4 months ago) by root
Branch: MAIN
Log Message:
*** empty log message ***

File Contents

# Content
1 =head1 NAME
2
3 Mozilla::Plugin - embed perl into mozilla/netscape.
4
5 =head1 SYNOPSIS
6
7 use Mozilla::Plugin;
8
9 =head1 DESCRIPTION
10
11 =over 4
12
13 =cut
14
15 package Mozilla::Plugin;
16
17 use base Exporter;
18 #use XSLoader;
19
20 $VERSION = 0.12;
21 @EXPORT = qw();
22
23 warn "in module [@ARGV]";#d#
24
25 #XSLoader::load __PACKAGE__, $VERSION;
26 use Data::Dumper;
27
28 my $data;
29
30 sub snd_cmd($) {
31 $data = pack "NN", 0, ord($_[0]);
32 }
33
34 sub snd_i32($) {
35 $data .= pack "N", $_[0];
36 }
37
38 sub snd_blk($) {
39 $data .= pack "NA*", length($_[0]), $_[0];
40 }
41
42 sub snd_snd($) {
43 substr ($data, 0, 4) = pack "N", length $data;
44 length($data) == syswrite $_[0], $data;
45 }
46
47 sub rcv_cmd {
48 my $buf;
49 4 == sysread $_[0], $buf, 4 or exit;
50 my $len = unpack "N", $buf;
51 $len -= 4;
52 $len == sysread $_[0], $buf, $len or die;
53
54 $data = substr $buf, 4;
55
56 substr $buf, 3, 1;
57 }
58
59 sub rcv_i32() {
60 my $i32 = unpack "N", $data;
61 $data = substr $data, 4;
62 $i32;
63 }
64
65 sub rcv_blk() {
66 my $len = unpack "N", $data;
67 my $str = substr $data, 4, $len;
68 $data = substr $data, 4 + $len;
69 $str;
70 }
71
72 sub handle_cmd {
73 my $cmd = rcv_cmd *FD1;
74
75 if ($cmd eq "I") {
76 rcv_i32 == 1 or die "protocol version mismatch\n";
77 ($IFACE, $OSNAME, $OSVERS) = (rcv_blk, rcv_blk, rcv_blk);
78 warn " ($IFACE, $OSNAME, $OSVERS) \n";#d#
79 } elsif ($cmd eq "+") {
80 my ($objid, $type, $mode, $save, $argc)
81 = (rcv_i32, rcv_blk, rcv_i32, rcv_blk, rcv_i32);
82 my %args;
83 $args{rcv_blk} = rcv_blk while $argc--;
84
85 $_OBJ{$objid} = new Mozilla::Plugin
86 type => $type,
87 mode => $mode,
88 save => $save,
89 args => \%args;
90
91 } elsif ($cmd eq "-") {
92 my $objid = rcv_i32;
93 my $save =
94 $_OBJ{$objid}->save
95 } else {
96 die "unknown command '$cmd' received";
97 }
98 }
99
100 sub mainloop {
101 handle_cmd while 1;
102 }
103
104 sub _main {
105 $LIBDIR = shift @ARGV;
106 $IN_MOZILLA = 1;
107 (shift @ARGV) =~ /^(\d+),(\d+)$/ or die "init arg error";
108 my ($fd1, $fd2) = ($1, $2);
109 open FD1, "+<&=$fd1"; binmode FD1;
110 open FD2, "+<&=$fd2"; binmode FD2;
111
112 mainloop;
113
114 close FD2;
115 close FD1;
116 }
117
118 sub new {
119 warn "new: ".Dumper(\@_);
120 }
121
122 sub set_window {
123 warn "set_window: ".Dumper(\@_);
124 }
125
126 sub save {
127 warn "save: ".Dumper(\@_);
128 "[save]";
129 }
130
131 sub DESTROY {
132 warn "DESTROY";
133 }
134
135 1;
136
137 =back
138
139 =head1 BUGS
140
141 =head1 SEE ALSO
142
143 L<PApp>.
144
145 =head1 AUTHOR
146
147 Marc Lehmann <pcg@goof.com>
148 http://www.goof.com/pcg/marc/
149
150 =cut
151