Add stub files.
[newgopher.git] / NewGopher.pm
blob3985166e816c9e5abcbe13dd5b37a6ec304da73e
1 #!/usr/bin/perl
2 package NewGopher;
4 use strict;
5 use warnings;
6 our $VERSION = '0.01';
7 use base 'Exporter';
8 our @EXPORT = qw(ng_parse_uri ng_parse_menu ng_parse_response);
10 sub ng_parse_uri {
11 my $uri = $_[0] || '';
12 $uri =~ s/gopher:\/\///;
13 chomp($uri);
14 my ($long_host, $selector) = split /\//, $uri;
15 my ($host, $port) = split /:/, $long_host;
16 $port = $port || 32070; # default port
17 undef $long_host;
18 return ($host, $port, $selector);
21 sub ng_parse_menu {
22 my ($data, $host, $port) = @_;
23 my @items = split /\r\n/, $data;
24 my $i = 0;
25 my @menu;
26 foreach (@items) {
27 my ($combined, $selector, $_host, $_port) = split /\t/;
28 my $type = substr $combined, 0, 1;
29 my $name = substr $combined, 1;
30 undef $combined;
31 if (!$_port || !($_port =~ /\d+/)) { $_port = 0; }
32 $menu[$i] = {
33 'name' => $name,
34 'type' => $type,
35 'selector' => $selector,
36 'host' => ($_host ? $_host : $host),
37 'port' => ($_port ? int($_port) : $port),
39 $i++;
41 return @menu;
44 sub ng_parse_response {
45 my $data = $_[0];
46 my $size = 0;
47 my $mimetype = 'unknown';
48 if ($data =~ /(\d+)\t(.+)\r/) {
49 $size = $1;
50 $mimetype = $2;
52 $data =~ s/.+\r\n//;
53 return ($size, $mimetype, $data);