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

# User Rev Content
1 root 1.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