# -*- perl -*-
#
# $Id: SambaSpec.pm,v 1.2 1997/01/08 02:57:51 ejb Exp $
# $Source: /home/ejb/source/qsync/util/qsutil_modules/RCS/SambaSpec.pm,v $
# $Author: ejb $
#

require 5.002;
use strict;

package SambaSpec;
my $package = "SambaSpec";

# Field names
my $f_user = "user";
my $f_pass = "pass";
my $f_host = "host";
my $f_service = "service";
my $f_dir = "dir";

# Static Variables
my $spec_re = '^(?:(.+?)(?:/(.+?))?\@)?//(.+?)/(.+?)(?::(.+?))?$';

# Routines

sub new
{
    my $class = shift;
    my $rep = +{$package => {} };
    
    my $spec = shift;
    
    if ($spec =~ m,$spec_re,)
    {
	# user, pass, and dir may all be undefined.
	my ($user, $pass, $host, $service, $dir) = ($1, $2, $3, $4, $5);
	$dir = "" unless defined $dir;
	$dir =~ s,/,\\,g;
	$dir =~ s/^\\+//;
	$dir = "\\$dir";
	$rep->{$package}{$f_user} = $user || "";
	$rep->{$package}{$f_pass} = $pass || "";
	$rep->{$package}{$f_host} = $host;
	$rep->{$package}{$f_service} = $service;
	$rep->{$package}{$f_dir} = $dir;
    }
    else
    {
	die "$package: invalid samba specification; should be " .
	    "[user[/pass]@]//host/service[:dir]\n";
    }

    bless $rep, $class;
}

sub host
{
    my $rep = shift;
    $rep->{$package}{$f_host};
}

sub service
{
    my $rep = shift;
    $rep->{$package}{$f_service};
}

sub user
{
    my $rep = shift;
    $rep->{$package}{$f_user};
}

sub pass
{
    my $rep = shift;
    $rep->{$package}{$f_pass};
}

sub dir
{
    my $rep = shift;
    $rep->{$package}{$f_dir};
}

sub spec_re
{
    $spec_re;
}

1;

#
# END OF SambaSpec
#
