aboutsummaryrefslogtreecommitdiffstats
path: root/libical/src/Net-ICal-Libical
diff options
context:
space:
mode:
authorHans Petter <hansp@src.gnome.org>2003-09-12 06:04:44 +0800
committerHans Petter <hansp@src.gnome.org>2003-09-12 06:04:44 +0800
commit697761cc337aa77a47140c8df50ed84bc25e23f6 (patch)
treeb785830f72e9938cceaa016a419c7b6d9892bada /libical/src/Net-ICal-Libical
parent733d77e657516f9a59b5c1a7b62acb87b03ec86f (diff)
downloadgsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar
gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.gz
gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.bz2
gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.lz
gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.xz
gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.tar.zst
gsoc2013-evolution-697761cc337aa77a47140c8df50ed84bc25e23f6.zip
Import new libical from mainline HEAD and make appropriate changes to
Evolution. svn path=/trunk/; revision=22538
Diffstat (limited to 'libical/src/Net-ICal-Libical')
-rw-r--r--libical/src/Net-ICal-Libical/MANIFEST16
-rw-r--r--libical/src/Net-ICal-Libical/Makefile.PL42
-rw-r--r--libical/src/Net-ICal-Libical/README7
-rw-r--r--libical/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm386
-rw-r--r--libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm175
-rw-r--r--libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm160
-rw-r--r--libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm359
-rw-r--r--libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm173
-rw-r--r--libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm468
-rw-r--r--libical/src/Net-ICal-Libical/netical.i317
-rw-r--r--libical/src/Net-ICal-Libical/netical_wrap.c3048
-rw-r--r--libical/src/Net-ICal-Libical/netical_wrap.doc393
-rw-r--r--libical/src/Net-ICal-Libical/test-data/2446.mime3426
-rw-r--r--libical/src/Net-ICal-Libical/test-data/error58
-rw-r--r--libical/src/Net-ICal-Libical/test-data/mail-examples262
-rw-r--r--libical/src/Net-ICal-Libical/test-data/no-error26
-rw-r--r--libical/src/Net-ICal-Libical/test-data/rfc2445.ics321
-rw-r--r--libical/src/Net-ICal-Libical/test-data/rfc2446.ics1004
-rw-r--r--libical/src/Net-ICal-Libical/test-data/single-with-error39
-rw-r--r--libical/src/Net-ICal-Libical/test/component.pl106
-rwxr-xr-xlibical/src/Net-ICal-Libical/test/libical.pl94
-rwxr-xr-xlibical/src/Net-ICal-Libical/test/swig.pl29
22 files changed, 10909 insertions, 0 deletions
diff --git a/libical/src/Net-ICal-Libical/MANIFEST b/libical/src/Net-ICal-Libical/MANIFEST
new file mode 100644
index 0000000000..1a6880e8b4
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/MANIFEST
@@ -0,0 +1,16 @@
+MANIFEST
+Makefile.PL
+lib/Net/ICal/Libical.pm
+netical.i
+netical_wrap.c
+netical_wrap.doc
+test-data/2446.mime
+test-data/error
+test-data/mail-examples
+test-data/no-error
+test-data/rfc2445.ics
+test-data/rfc2446.ics
+test-data/single-with-error
+test/example.pl
+test/libical.pl
+test/swig.pl
diff --git a/libical/src/Net-ICal-Libical/Makefile.PL b/libical/src/Net-ICal-Libical/Makefile.PL
new file mode 100644
index 0000000000..f46c61bc02
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/Makefile.PL
@@ -0,0 +1,42 @@
+#!/usr/bin/perl
+# -*- Mode: perl -*-
+
+use ExtUtils::MakeMaker;
+WriteMakefile(
+ 'MAKEFILE'=> 'Makefile',
+ 'VERSION_FROM' => 'lib/Net/ICal/Libical.pm',
+ 'NAME' => 'Net::ICal::Libical',
+ 'INC' => '-I../libical -I ../libicalss',
+ 'LIBS' => ['-L../libical/.libs -L../libicalss/.libs -lical -licalss -lm'],
+ 'OBJECT' => 'netical_wrap.o', # Object files
+ dist => {
+ COMPRESS =>'gzip',
+ SUFFIX =>'gz'
+ },
+
+ );
+
+sub MY::top_targets
+{
+ my $self = shift;
+
+ my $old = $self->MM::top_targets;
+
+ return "all:: netical_wrap.o\n$old";
+
+}
+
+sub MY::postamble
+{
+
+ return <<EOM;
+
+netical_wrap.c: netical.i
+ swig -perl5 -package Net::ICal::Libical netical.i
+
+wrap:
+ swig -perl5 -package Net::ICal::Libical netical.i
+
+
+EOM
+}
diff --git a/libical/src/Net-ICal-Libical/README b/libical/src/Net-ICal-Libical/README
new file mode 100644
index 0000000000..b4b4b9c8b9
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/README
@@ -0,0 +1,7 @@
+
+Net::ICal::Libical: A perl binding to libical.
+
+This code is PRE-ALPHA. Some of the test routines work, but the code
+is not really useful. It is looking for an author, so if you'd like to
+have this binding working, please volunteer to work on it. Contact
+Eric Busboom, eric@softwarestudio.org
diff --git a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm
new file mode 100644
index 0000000000..a9b15f3855
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical.pm
@@ -0,0 +1,386 @@
+#!/usr/bin/perl
+# -*- Mode: perl -*-
+#======================================================================
+# FILE: Libical.pm
+# CREATOR: eric
+#
+# DESCRIPTION:
+#
+#
+# $Id$
+# $Locker$
+#
+# (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
+#
+# This package is free software and is provided "as is" without express
+# or implied warranty. It may be used, redistributed and/or modified
+# under the same terms as perl itself. ( Either the Artistic License or the
+# GPL. )
+#
+#======================================================================
+
+# This part of this file was automatically generated by SWIG
+
+require Net::ICal::Libical::Component;
+require Net::ICal::Libical::Property;
+require Net::ICal::Libical::Time;
+require Net::ICal::Libical::Duration;
+
+package Net::ICal::Libical;
+require Exporter;
+require DynaLoader;
+@ISA = qw(Exporter DynaLoader);
+package Net::ICal::Libical;
+bootstrap Net::ICal::Libical;
+var_Net__ICal__Libical_init();
+@EXPORT = qw( );
+
+$VERSION = "0.01";
+
+1;
+
+
+
+
+sub validate_component {
+ my $comp_str = shift;
+
+
+ my $c = Net::ICal::Libical::icalparser_parse_string($comp_str);
+ my $out;
+
+ die "Failed to parse component" if !$c;
+
+ my $r = Net::ICal::Libical::icalrestriction_check($c);
+
+ $out = Net::ICal::Libical::icalcomponent_as_ical_string($c);
+
+ Net::ICal::Libical::icalcomponent_free($c);
+
+ return $out;
+
+}
+
+
+sub generate_occurrences {
+ my $rule = shift;
+ my $start = shift;
+ my $count = shift;
+
+ my @out;
+
+ my $array = Net::ICal::Libical::icallangbind_new_array(25);
+
+ Net::ICal::Libical::icalrecur_expand_recurrence($rule,$start,
+ $count,$array);
+
+ for($i = 0; $i<$count; $i++){
+ my $t = Net::ICal::Libical::icallangbind_access_array($array,$i);
+ if($t != 0) {
+ push(@out,$t);
+ }
+
+ }
+
+ Net::ICal::Libical::icallangbind_free_array($array);
+
+ return @out;
+}
+
+
+# The remaining code is just the interface declarations for a complete
+# perl binding to libical. Currently, it is looking for an author....
+
+
+
+
+
+1;
+
+__END__
+
+#""" Represent iCalendar DATE, TIME and DATE-TIME ""
+
+package Net::ICal::Libical::Time;
+@ISA = (Property);
+
+sub new {}
+
+#"""Updates value and value_type based on the (internal) self.tt."""
+sub _update_value { }
+
+# " Return true if this is a valid time "
+sub valid { }
+
+# """ Return or set time in seconds past POSIX epoch"""
+sub utc_seconds {}
+
+# """ Return or set boolean indicating if time is in UTC """
+sub is_utc {}
+
+# Get/Set booll indicating is time is a date
+sub is_date(self,v=None):
+
+#"" Return or set the timezone string for this time """
+sub timezone {}
+
+#"" Get or set the seconds component of this time """
+sub second {}
+sub minute {}
+sub hour {}
+sub day {}
+sub month {}
+sub year {}
+
+# How dow you over load +,- in perl?
+
+# Add duration to time = time
+sub __add__{}
+
+# Subtract time from time = duration
+# Subtract duration from time = time
+sub __sub__(self,o):
+
+
+package Net::ICal::Libical::Duration(Property):
+@ISA = (Property);
+
+sub new {}
+sub _update_value {}
+#"Return true if this is a valid duration"
+sub valid {}
+# """Return or set duration in seconds"""
+sub seconds {}
+
+
+#"""Represent a span of time"""
+
+package Net::ICal::Libical::Period;
+@ISA = (Property);
+
+sub new{}
+
+sub _end_is_duration {}
+sub _end_is_time {}
+sub _update_value {}
+
+#"Return true if this is a valid period"
+sub valid {}
+
+#Return or set start time of the period. The start time may be
+#expressed as an RFC2445 format string or an instance of Time.
+#The return value is an instance of Time
+sub start {}
+
+#Return or set end time of the period. The end time may be
+#expressed as an RFC2445 format string or an instance of Time.
+#The return value is an instance of Time.
+
+#If the Period has a duration set, but not an end time, this
+#method will caluculate the end time from the duration.
+sub end {}
+
+#Return or set the duration of the period. The duration may be
+#expressed as an RFC2445 format string or an instance of Duration.
+#The return value is an instance of Duration.
+#If the period has an end time set, but not a duration, this
+#method will calculate the duration from the end time.
+sub duration{}
+
+# Get set the timezone for the period. Basically returns self->dict{TZID}
+sub timezone(self,v=None):
+
+
+# Represents the value and all parameters of an attendee
+package Net::ICal::Libical::Attendee(Property):
+@ISA = (Property);
+
+sub new{}
+
+# Methods for accessing enumerated parameters
+sub cn {}
+sub cutype {}
+sub dir {}
+sub delegated_from {}
+sub delegated_to {}
+sub language {}
+sub member {}
+sub partstat {}
+sub role {}
+sub rsvp {}
+sub sent_by {}
+
+
+package Net::ICal::Libical::Organizer;
+@ISA = (Property)
+# Methods for accessing enumerated parameters
+sub cn{}
+sub dir{}
+sub language {}
+sub sent_by {}
+
+package Net::ICal::Libical::Recurrence_Id;
+@ISA= (Property)
+
+package Net::ICal::Libical::Attach;
+@ISA= (Property)
+
+package Net::ICal::Libical::Event;
+@ISA= (Component)
+
+sub component_type {}
+
+#"Returns a copy of the object."
+sub clone {}
+
+#Sets or returns the value of the DTEND property.
+#Usage:
+#dtend(time_obj) # Set the value using a Time object
+#dtend('19970101T123000Z') # Set the value as an iCalendar string
+#dtend(982362522) # Set the value using seconds (time_t)
+#dtend() # Return a Time
+#
+#If the dtend value is being set and duration() has a value, the
+#duration property will be removed.
+sub dtend{}
+
+#Sets or returns the value of the duration property.
+#Usage:
+#duration(dur_obj) # Set the value using a Duration object
+#duration("P3DT12H") # Set value as an iCalendar string
+#duration(3600) # Set duration using seconds
+#duration() # Return a duration
+#
+#If the duration value is being set and dtend() has a value, the dtend
+#property will be removed.
+sub duration{}
+
+#Sets attendees or returns a list of Attendee objects.
+sub attendees {}
+
+#Sets or gets the value of the ORGANIZER property.
+#Usage:
+#organizer(orgObj) # Set value using an organizer object
+#organizer('MAILTO:jd@not.com') # Set value using a CAL-ADDRESS string
+#organizer() # Return a CAL-ADDRESS string
+sub organizer{}
+
+#"Sets or gets the SUMMARY value of the Event."
+sub summary{}
+
+#Sets or gets the UID of the Event.
+sub uid{}
+
+#Sets or gets the value for the RECURRENCE-ID property.
+#Usage:
+#Recurrence_id(recIdObj) # Set using a Recurrence_Id object
+#Recurrence_id("19700801T133000") # Set using an iCalendar string
+#Recurrence_id(8349873494) # Set using seconds from epoch
+#Recurrence_id() # Return a Time
+sub recurrence_id{}
+
+#Sets or gets the SEQUENCE value of the Event.
+#Usage:
+#sequence(1) # Set the value using an integer
+#sequence('2') # Set the value using a string containing an integer
+#sequence() # Return an integer
+sub sequence{}
+
+#Sets or returns the value of the LAST-MODIFIED property.
+#Usage:
+#lastmodified(time_obj) # Set the value using a Time object
+#lastmodified('19970101T123000Z')# Set using an iCalendar string
+#lastmodified(982362522) # Set using seconds
+#lastmodified() # Return a Time
+sub lastmodified{}
+
+
+
+#Sets or returns the value of the CREATED property.
+#Usage:
+#created(time_obj) # Set the value using a Time object
+#created('19970101T123000Z') # Set using an iCalendar string
+#created(982362522) # Set using seconds
+#created() # Return a Time
+sub created {}
+
+
+sub related_to{}
+sub comment{}
+
+"Sets or returns the value of the DESCRIPTION property."
+
+sub description {}
+
+#Sets categories or returns a list of Attendee objects.
+sub categories {}
+
+sub attach{}
+
+#Represents a set of event occurrences. This
+#package controls a component's RRULE, EXRULE, RDATE and EXDATE
+#properties and can produce from them a set of occurrences.
+package Net::ICal::Libical::RecurrenceSet:
+
+
+#Include a date or rule to the set.
+#Use date= or pass in a
+#Time instance to include a date. Included dates will add an
+#RDATE property or will remove an EXDATE property of the same
+#date.
+#Use rule= or pass in a string to include a rule. Included
+#rules with either add a RRULE property or remove an EXRULE
+#property.
+
+sub include{}
+
+#Exclude date or rule to the set.
+#Use date= or pass in a Time instance to exclude a
+#date. Excluded dates will add an EXDATE property or will remove
+#an RDATE property of the same date.
+#Use rule= or pass in a string to exclude a rule. Excluded
+#rules with either add an EXRULE property or remove an RRULE
+#property.
+sub exclude{}
+
+#Return 'count' occurrences as a tuple of Time instances.
+sub occurrences{}
+
+package Net::ICal::Libical::Store;
+sub new{}
+sub path{}
+sub mark{}
+sub commit{}
+sub addComponent{}
+sub removeComponent{}
+sub countComponents{}
+sub select{}
+sub clearSelect{}
+sub fetch{}
+sub fetchMatchK{}
+sub modify{}
+sub currentComponent{}
+sub firstComponent{}
+sub nextComponent{}
+
+
+package Net::ICal::Libical::FileStore;
+@ISA = (Store)
+sub new{}
+sub path{}
+sub mark{}
+sub commit{}
+sub addComponent{}
+sub removeComponent{}
+sub countComponents{}
+sub select{}
+sub clearSelect{}
+sub fetch{}
+sub fetchMatchK{}
+sub modify{}
+sub currentComponent{}
+sub firstComponent{}
+sub nextComponent{}
+
+
+1;
diff --git a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm
new file mode 100644
index 0000000000..c25297c111
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Component.pm
@@ -0,0 +1,175 @@
+#!/usr/bin/perl
+# -*- Mode: perl -*-
+#======================================================================
+# FILE: Component.pm
+# CREATOR: eric 1 Mar 01
+#
+# DESCRIPTION:
+#
+#
+# $Id$
+# $Locker$
+#
+# (C) COPYRIGHT 2000, Eric Busboom, eric@softwarestudio.org
+#
+# This package is free software and is provided "as is" without express
+# or implied warranty. It may be used, redistributed and/or modified
+# under the same terms as perl itself. ( Either the Artistic License or the
+# GPL. )
+#
+#
+#======================================================================
+
+
+
+package Net::ICal::Libical::Component;
+use Net::ICal::Libical;
+
+use strict;
+
+sub new{
+ my $class = shift;
+ my $ical_str = shift; # Ical data in string form
+ my $self = {};
+
+ $self->{'comp_p'} = Net::ICal::Libical::icalparser_parse_string($ical_str);
+
+ die "Can't parse string into component" if !$self->{'comp_p'};
+
+ bless $self, $class;
+}
+
+sub new_from_ref {
+ my $class = shift;
+ my $r = shift;
+ my $self = {};
+
+ $self->{'comp_p'} = $r;
+
+ bless $self, $class;
+}
+
+# Destroy must call icalcomponent_free() if icalcomponent_get_parent()
+# returns NULL
+sub DESTROY {
+ my $self = shift;
+
+ my $c = $self->{'comp_p'};
+
+ if($c && !Net::ICal::Libical::icalcomponent_get_parent($c)){
+ Net::ICal::Libical::icalcomponent_free($c);
+ }
+
+}
+
+# Return an array of all properties of the given type
+sub properties{
+
+ my $self = shift;
+ my $prop_name = shift;
+
+ my @props;
+
+ if(!$prop_name){
+ $prop_name = 'ANY';
+ }
+
+ # To loop over properties
+ # $comp_p = $self->{'comp_p'}
+ # $p = icallangbind_get_first_property($comp_p,$prop_name)
+ # $p = icallangbind_get_next_property($comp_p,$prop_name)
+
+ my $c = $self->{'comp_p'};
+ my $p;
+
+ for($p = Net::ICal::Libical::icallangbind_get_first_property($c,$prop_name);
+ $p;
+ $p = Net::ICal::Libical::icallangbind_get_next_property($c,$prop_name)){
+
+ my $d_string = Net::ICal::Libical::icallangbind_property_eval_string($p,"=>");
+ my %dict = %{eval($d_string)};
+
+ $dict{'ref'} = $p;
+
+ # Now, look at $dict{'value_type'} or $dict{'name'} to construct a
+ # derived class of Property. I'll do this later.
+
+ my $prop;
+
+ if($dict{'value_type'} eq 'DATE' or $dict{'value_type'} eq 'DATE-TIME'){
+ $prop = new Net::ICal::Libical::Time(\%dict);
+ } elsif($dict{'value_type'} eq 'DURATION' ) {
+ $prop = new Net::ICal::Libical::Duration(\%dict);
+ } else {
+ $prop = new Net::ICal::Libical::Property(\%dict);
+ }
+
+ push(@props,$prop);
+
+ }
+
+
+ return @props;
+
+}
+
+
+sub add_property {
+
+ # if there is a 'ref' key in the prop's dict, then it is owned by
+ # an icalcomponent, so dont add it again. But, you may check that
+ # it is owned by this component with:
+ # icalproperty_get_parent(p->{'ref'}') != $self->{'comp_p'}
+
+ # If there is no 'ref' key, then create one with $p->{'ref'} =
+ # icalproperty_new_from_string($p->as_ical_string)
+
+}
+
+sub remove_property {
+
+# If $p->{'ref'} is set, then remove the property with
+# icalcomponent_remove_property() }
+}
+
+# Return an array of all components of the given type
+sub components {
+
+ my $self = shift;
+ my $comp_name = shift;
+
+ my @comps;
+
+ if(!$comp_name){
+ $comp_name = 'ANY';
+ }
+
+ my $c = $self->{'comp_p'};
+ my $p;
+
+ for($p = Net::ICal::Libical::icallangbind_get_first_component($c,$comp_name);
+ $p;
+ $p = Net::ICal::Libical::icallangbind_get_next_component($c,$comp_name)){
+
+ push(@comps, Net::ICal::Libical::Component->new_from_ref($p));
+
+ }
+
+ return @comps;
+
+}
+
+
+sub add_component {}
+
+sub remove_component {}
+
+sub as_ical_string {
+ my $self = shift;
+
+ return Net::ICal::Libical::icalcomponent_as_ical_string($self->{'comp_p'})
+}
+
+
+
+1;
diff --git a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm
new file mode 100644
index 0000000000..13ec9c437e
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Duration.pm
@@ -0,0 +1,160 @@
+#=============================================================================
+#
+# This package is free software and is provided "as is" without express
+# or implied warranty. It may be used, redistributed and/or modified
+# under the same terms as perl itself. (Either the Artistic License or
+# the GPL.)
+#
+#=============================================================================
+
+=head1 NAME
+
+Net::ICal::Duration -- represent a length of time
+
+=head1 SYNOPSIS
+
+ use Net::ICal;
+ $d = Net::ICal::Duration->new("P3DT6H15M10S");
+ $d = Net::ICal::Duration->new(3600); # 1 hour in seconds
+
+=head1 DESCRIPTION
+
+I<Duration> Represents a length of time, such a 3 days, 30 seconds or
+7 weeks. You would use this for representing an abstract block of
+time; "I want to have a 1-hour meeting sometime." If you want a
+calendar- and timezone-specific block of time, see Net::ICal::Period.
+
+=cut
+
+#=============================================================================
+
+package Net::ICal::Libical::Duration;
+use Net::ICal::Libical::Property;
+use strict;
+use Carp;
+@Net::ICal::Libical::Duration::ISA = qw ( Net::ICal::Libical::Property );
+
+=head1 METHODS
+
+=head2 new
+
+Create a new I<Duration> from:
+
+=over 4
+
+=item * A string in RFC2445 duration format
+
+=item * An integer representing a number of seconds
+
+=cut
+
+sub new {
+ my $package = shift;
+ my $arg = shift;
+ my $self;
+
+ if (ref($arg) == 'HASH'){
+ # Construct from dictionary
+ $self = Net::ICal::Libical::Property::new($package,$arg);
+ my $val=Net::ICal::Libical::icalproperty_get_value_as_string($self->{'ref'});
+ $self->{'dur'} = Net::ICal::Libical::icaldurationtype_from_string($val);
+
+ return $self;
+
+ } elsif ($arg =~ /^[-+]?\d+$/){
+ # Seconds
+ $self = Net::ICal::Libical::Property::new($package,'DURATION');
+ $self->{'dur'} = Net::ICal::Libical::icaldurationtype_new_from_int($arg);
+ } elsif ($arg) {
+ # iCalendar string
+ $self = Net::ICal::Libical::Property::new($package,'DURATION');
+ $self->{'dur'} = Net::ICal::Libical::icaldurationtype_new_from_string($arg);
+ } else {
+ die;
+ }
+
+ $self->_update_value();
+ return $self;
+
+}
+
+sub _update_value {
+ my $self = shift;
+
+ die "Can't find internal icalduration reference" if !$self->{'dur'};
+
+ $self->value(Net::ICal::Libical::icaldurationtype_as_ical_string($self->{'dur'}));
+
+}
+=head2 clone()
+
+Return a new copy of the duration.
+
+=cut
+
+sub clone {
+ die "Not Implemented";
+
+}
+
+
+=head2 is_valid()
+
+Determine if this is a valid duration (given criteria TBD).
+
+=cut
+
+sub is_valid {
+
+ die "Not Implemented;"
+
+}
+
+=head2 seconds()
+
+Set or Get the length of the duration as seconds.
+
+=cut
+
+sub seconds {
+ my $self = shift;
+ my $seconds = shift;
+
+ if($seconds){
+ $self->{'dur'} =
+ Net::ICal::Libical::icaldurationtype_from_int($seconds);
+ $self->_update_value();
+ }
+
+ return Net::ICal::Libical::icaldurationtype_as_int($self->{'dur'});
+
+}
+
+=head2 add($duration)
+
+Return a new duration that is the sum of this and $duration. Does not
+modify this object.
+
+=cut
+
+sub add {
+ my ($self, $duration) = @_;
+
+ return new Duration($self->seconds() + $duration->seconds());
+}
+
+
+=head2 subtract($duration)
+
+Return a new duration that is the difference between this and
+$duration. Does not modify this object.
+
+=cut
+
+sub subtract {
+ my ($self, $duration) = @_;
+
+ return new Duration($self->seconds() - $duration->seconds());
+}
+
+1;
diff --git a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm
new file mode 100644
index 0000000000..ecf29f3370
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Period.pm
@@ -0,0 +1,359 @@
+#!/usr/bin/perl -w
+# -*- Mode: perl -*-
+#======================================================================
+#
+# This package is free software and is provided "as is" without express
+# or implied warranty. It may be used, redistributed and/or modified
+# under the same terms as perl itself. ( Either the Artistic License or the
+# GPL. )
+#
+# $Id$
+#
+# (C) COPYRIGHT 2000, Eric Busboom, http://www.softwarestudio.org
+#
+# $Log
+#======================================================================
+
+
+=pod
+=head1 NAME
+
+Net::ICal::Period -- represent a period of time
+
+=head1 SYNOPSIS
+
+ use Net::ICal;
+ $p = new Net::ICal::Period("19970101T120000","19970101T123000");
+ $p = new Net::ICal::Period("19970101T120000","PT3W2D40S");
+ $p = new Net::ICal::Period(time(),3600);
+ $p = new Net::ICal::Period(
+ new Net::ICal::Time("19970101T120000",
+ "America/Los_Angeles"),
+ new Net::ICal::Duration("2h"));
+
+=head1 DESCRIPTION
+
+Use this to make an object representing a block of time on a
+real schedule. You can either say, "This event starts at 12
+and ends at 2" or "This event starts at 12 and lasts 2 hours."
+
+These two ways of specifying events can be treated differently
+in schedules. If you say, "The meeting is from 12 to 2, but I
+have to leave at 2," you are implying that the start date and
+end date are fixed. If you say, "I have a 2-hour drive to
+Chicago, and I need to leave at 4," you are saying that it will
+take 2 hours no matter when you leave, and that moving the start
+time will slide the end time correspondingly.
+
+=head1 BASIC METHODS
+
+=cut
+
+
+#=========================================================================
+
+package Net::ICal::Period;
+use strict;
+use Net::ICal::Time;
+use Net::ICal::Duration;
+
+use UNIVERSAL qw(isa);
+
+#-------------------------------------------------------------------------
+
+=pod
+=head2 new($time, $time|$duration)
+
+Creates a new period object given to parameters: The first must be a
+I<Time> object or valid argument to Net::ICal::Time::new.
+
+The second can be either:
+
+=pod
+
+=over 4
+
+=item * a I<Time> object
+
+=item * a valid argument to Net::ICal::Time::new.
+
+=item * a I<Duration> object
+
+=item * a valid argument to Net::ICal::Duration::new.
+
+=back
+
+Either give a start time and an end time, or a start time and a duration.
+
+=cut
+
+sub new{
+ my $package = shift;
+ my $arg1 = shift;
+ my $arg2 = shift;
+ my $self = {};
+
+ # Is the string in RFC2445 Format?
+ if(!$arg2 and $arg1 =~ /\//){
+ my $tmp = $arg1;
+ ($arg1,$arg2) = split(/\//,$tmp);
+ }
+
+
+ if( ref($arg1) eq 'Net::ICal::Time'){
+ $self->{START} = $arg1->clone();
+ } else {
+ $self->{START} = new Net::ICal::Time($arg1);
+ }
+
+
+ if(isa($arg2,'Net::ICal::Time')){
+ $self->{END} = $arg2->clone();
+ } elsif (isa($arg2,'Net::ICal::Duration')) {
+ $self->{DURATION} = $arg2->clone();
+ } elsif ($arg2 =~ /^P/) {
+ $self->{DURATION} = new Net::ICal::Duration($arg2);
+ } else {
+ # Hope that it is a time string
+ $self->{END} = new Net::ICal::Time($arg2);
+ }
+
+ return bless($self,$package);
+}
+
+#--------------------------------------------------------------------------
+=pod
+=head2 clone()
+
+Create a copy of this component
+
+=cut
+# XXX implement this
+sub clone {
+ return "Not implemented";
+}
+
+#----------------------------------------------------------------------------
+=pod
+=head2 is_valid()
+
+Return true if:
+ There is an end time and:
+ Both start and end times have no timezone ( Floating time) or
+ Both start and end time have (possibly different) timezones or
+ Both start and end times are in UTC and
+ The end time is after the start time.
+
+ There is a duration and the duration is positive
+
+=cut
+
+# XXX implement this
+
+sub is_valid {
+ return "Not implemented";
+}
+
+#---------------------------------------------------------------------------
+=pod
+=head2 start([$time])
+
+Accessor for the start time of the event as a I<Time> object.
+Can also take a valid time string or an integer (number of
+seconds since the epoch) as a parameter. If a second parameter
+is given, it'll set this Duration's start time.
+
+=cut
+
+sub start{
+ my $self = shift;
+ my $t = shift;
+
+ if($t){
+ if(isa($t,'Net::ICal::Time')){
+ $self->{START} = $t->clone();
+ } else {
+ $self->{START} = new Net::ICal::Time($t);
+ }
+ }
+
+ return $self->{START};
+}
+
+#-----------------------------------------------------------------
+=pod
+=head2 end([$time])
+
+Accessor for the end time. Takes a I<Time> object, a valid time string,
+or an integer and returns a time object. This routine is coupled to
+the I<duration> accessor. See I<duration> below for more imformation.
+
+=cut
+
+sub end{
+
+ my $self = shift;
+ my $t = shift;
+ my $end;
+
+ if($t){
+ if(isa($t,'Net::ICal::Time')){
+ $end = $t->clone();
+ } else {
+ $end = new Net::ICal::Time($t);
+ }
+
+ # If duration exists, use the time to compute a new duration
+ if ($self->{DURATION}){
+ $self->{DURATION} = $end->subtract($self->{START});
+ } else {
+ $self->{END} = $end;
+ }
+ }
+
+ # Return end time, possibly computing it from DURATION
+ if($self->{DURATION}){
+ return $self->{START}->add($self->{DURATION});
+ } else {
+ return $self->{END};
+ }
+
+}
+
+#----------------------------------------------------------------------
+=pod
+=head2 duration([$duration])
+
+Accessor for the duration of the event. Takes a I<duration> object and
+returns a I<Duration> object.
+
+Since the end time and the duration both specify the end time, the
+object will store one and access to the other will be computed. So,
+
+if you create:
+
+ $p = new Net::ICal::Period("19970101T120000","19970101T123000")
+
+And then execute:
+
+ $p->duration(45*60);
+
+The period object will adjust the end time to be 45 minutes after
+the start time. It will not replace the end time with a
+duration. This is required so that a CUA can take an incoming
+component from a server, modify it, and send it back out in the same
+basic form.
+
+=cut
+
+sub duration{
+ my $self = shift;
+ my $d = shift;
+ my $dur;
+
+ if($d){
+ if(isa($d,'Net::ICal::Duration')){
+ $dur = $d->clone();
+ } else {
+ $dur = new Net::ICal::Duration($d);
+ }
+
+ # If end exists, use the duration to compute a new end
+ # otherwise, set the duration.
+ if ($self->{END}){
+ $self->{END} = $self->{START}->add($dur);
+ } else {
+ $self->{DURATION} = $dur;
+ }
+ }
+
+ # Return duration, possibly computing it from END
+ if($self->{END}){
+ return $self->{END}->subtract($self->{START});
+ } else {
+ return $self->{DURATION};
+ }
+
+}
+
+#------------------------------------------------------------------------
+=pod
+
+=head2 as_ical()
+
+Return a string that holds the RFC2445 text form of this duration
+
+=cut
+sub as_ical {
+ my $self = shift;
+ my $out;
+
+ $out = $self->{START}->as_ical() ."/";
+
+ if($self->{DURATION}){
+ $out .= $self->{DURATION}->as_ical()
+ } else {
+ $out .= $self->{END}->as_ical()
+ }
+
+ return $out;
+
+}
+
+
+#------------------------------------------------------------------------
+=pod
+
+=head2 test()
+
+A set of developers' tests to make sure the module's working properly.
+
+=cut
+
+# Run this with a one-liner:
+# perl -e "use lib('/home/srl/dev/rk/reefknot/base/'); use Net::ICal::Period; Net::ICal::Period::test();"
+# adjusted for your environment.
+sub test {
+
+ print("--------- Test Net::ICal::Period --------------\n");
+
+
+ my $p = new Net::ICal::Period("19970101T180000Z/19970102T070000Z");
+ print $p->as_ical()."\n";
+ die if $p->as_ical() ne "19970101T180000Z/19970102T070000Z";
+
+ $p = new Net::ICal::Period("19970101T180000Z/PT5H30M");
+ print $p->as_ical()."\n";
+ die if $p->as_ical() ne "19970101T180000Z/PT5H30M";
+
+ $p->duration("PT5H30M10S");
+ print $p->as_ical()."\n";
+ die if $p->as_ical() ne "19970101T180000Z/PT5H30M10S" ;
+
+ $p->duration(new Net::ICal::Duration("P10DT30M5S"));
+ print $p->as_ical()."\n";
+ die if $p->as_ical() ne "19970101T180000Z/P10DT30M5S" ;
+
+ $p->end("19970101T183000Z");
+ print $p->as_ical()."\n";
+ die if $p->as_ical() ne "19970101T180000Z/PT30M" ;
+
+ $p = new Net::ICal::Period("19970101T180000Z/19970102T070000Z");
+
+ $p->end("19970101T183000Z");
+ print $p->as_ical()."\n";
+ die if $p->as_ical() ne "19970101T180000Z/19970101T183000Z" ;
+
+ $p->duration("P1DT1H10M");
+ print $p->as_ical()."\n";
+ die if $p->as_ical() ne "19970101T180000Z/19970102T191000Z" ;
+
+
+
+}
+
+1;
+
+
+__END__
+
diff --git a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm
new file mode 100644
index 0000000000..0aef347c43
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Property.pm
@@ -0,0 +1,173 @@
+#!/usr/bin/perl
+# -*- Mode: perl -*-
+#======================================================================
+# FILE: Property.pm
+# CREATOR: eric 1 Mar 01
+#
+# DESCRIPTION:
+#
+#
+# $Id$
+# $Locker$
+#
+# (C) COPYRIGHT 2000, Eric Busboom, eric@softwarestudio.org
+#
+# This package is free software and is provided "as is" without express
+# or implied warranty. It may be used, redistributed and/or modified
+# under the same terms as perl itself. ( Either the Artistic License or the
+# GPL. )
+#
+#
+#======================================================================
+
+use Net::ICal::Libical::Property;
+
+
+package Net::ICal::Libical::Property;
+use strict;
+
+
+sub new {
+
+ my $class = shift;
+ my $arg = shift;
+ my $self = {};
+ my $kind;
+
+ if(ref($arg) == 'HASH'){
+
+ $self->{'ref'} = $arg->{'ref'};
+
+ } else {
+ $kind = Net::ICal::Libical::icalproperty_string_to_kind($arg);
+ $self->{'ref'} = Net::ICal::Libical::icalproperty_new($kind);
+ }
+
+ die "Did not get icalproperty ref in Net::ICal::Libical::Property::new " if !$self->{'ref'};
+
+ bless $self, $class;
+}
+
+
+sub DESTROY {
+ my $self = shift;
+
+ my $r = $self->{'ref'};
+
+ if($r && !Net::ICal::Libical::icalproperty_get_parent($r)){
+ Net::ICal::Libical::icalproperty_free($self->{'ref'});
+ }
+}
+
+sub name {
+ my $self = shift;
+ my $str;
+
+ die if !$self->{'ref'};
+
+ $str = Net::ICal::Libical::icalproperty_as_ical_string($self->{'ref'});
+
+ $str =~ /^([A-Z\-]+)\n/;
+
+ return $1;
+
+}
+
+#Get/Set the internal reference to the libical icalproperty """
+sub prop_ref {
+ my $self = shift;
+ my $p_r = shift;
+
+ if($p_r){
+ $self->{'ref'} = $p_r;
+ }
+
+ return $self->{'ref'};
+
+}
+
+
+#Get/set the RFC2445 representation of the value. Dict value 'value'
+sub value {
+ my $self = shift;
+ my $v = shift;
+ my $kind = shift;
+
+ my $vt;
+ if($v){
+
+ if ($kind) {
+ $self->{'VALUE'} = $kind;
+ $vt = $kind;
+ }
+ elsif ($self->{'VALUE'}) {
+ $vt = $self->{'VALUE'};
+ }
+ else {
+ $vt = 'NO'; # Use the kind of the existing value
+ }
+
+
+ Net::ICal::Libical::icalproperty_set_value_from_string($self->{'ref'},$v,$vt);
+
+ }
+
+ return Net::ICal::Libical::icalproperty_get_value_as_string($self->{'ref'});
+
+}
+
+
+# Get a named parameter
+sub get_parameter{
+ my $self = shift;
+ my $key = shift;
+
+ die "get_parameter: missing parameter name" if !$key;
+
+ $key = uc($key);
+ my $ref = $self->{'ref'};
+
+ my $str = Net::ICal::Libical::icalproperty_get_parameter_as_string($ref,$key);
+
+ if($str eq 'NULL') {
+ return undef;
+ }
+
+ return $str
+
+}
+
+
+# Set the value of the named parameter
+sub set_parameter{
+ my $self = shift;
+ my $key = shift;
+ my $value = shift;
+
+ die "set_parameter: missing parameter name" if !$key;
+ die "set_parameter: missing parameter value" if !$value;
+
+ $key = uc($key);
+ my $ref = $self->{'ref'};
+
+ my $str = Net::ICal::Libical::icalproperty_set_parameter_from_string($ref,$key,$value);
+
+
+ return $self->get_parameter($self);
+
+}
+
+
+sub as_ical_string {
+ my $self = shift;
+ my $str = Net::ICal::Libical::icalproperty_as_ical_string($self->{'ref'});
+
+ $str =~ s/\r//g;
+ $str =~ s/\n\s?//g;
+
+ return $str;
+}
+
+
+
+1;
diff --git a/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm
new file mode 100644
index 0000000000..76969ac60d
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/lib/Net/ICal/Libical/Time.pm
@@ -0,0 +1,468 @@
+#!/usr/bin/perl -w
+# -*- Mode: perl -*-
+#======================================================================
+#
+# This package is free software and is provided "as is" without express
+# or implied warranty. It may be used, redistributed and/or modified
+# under the same terms as perl itself. ( Either the Artistic License or the
+# GPL. )
+#
+#
+#======================================================================
+
+
+
+=pod
+
+=head1 NAME
+
+Net::ICal::Time -- represent a time and date
+
+=head1 SYNOPSIS
+
+ $t = new Net::ICal::Time("19970101T120000Z");
+ $t = new Net::ICal::Time("19970101T120000","America/Los_Angeles");
+ $t = new Net::ICal::Time(time(),"America/Los_Angeles");
+
+ $t2 = $t->add(Net::Ical::Duration("1D"));
+
+ $duration = $t->subtract(Net::ICal::Time("19970101T110000Z"))
+
+ # Add 5 minutes
+ $t->min($t->min()+5);
+
+ # Add 5 minutes
+ $t->sec($t->sec()+300);
+
+ # Compare
+ if($t->compare($t2) > 0) {}
+
+=head1 DESCRIPTION
+
+I<Time> represents a time, but can also hold the time zone for the
+time and indicate if the time should be treated as a date. The time
+can be constructed from a variey of formats.
+
+=head1 METHODS
+
+=cut
+
+package Net::ICal::Libical::Time;
+use Net::ICal::Libical::Duration;
+use Net::ICal::Libical::Property;
+use Time::Local;
+use POSIX;
+use Carp qw(confess cluck);
+use strict;
+use UNIVERSAL qw(isa);
+
+@Net::ICal::Libical::Time::ISA = qw(Net::ICal::Libical::Property);
+
+=pod
+
+=head2 new
+
+Creates a new time object given one of:
+
+=over 4
+
+=item * ISO format string
+
+=item * Some other format string, maybe whatever a Date module understands
+
+=item * Integer representing seconds past the POSIX epoch
+
+=back
+
+The optional second argument is the timezone in Olsen place name format,
+which looks like "America/Los_Angeles"; it can be used to get the standard
+offset from UTC, the dates the location goes to and from Daylight Savings
+Time, and the magnitude of the Daylight Savings time offset.
+
+=cut
+
+sub new{
+ my $package = shift;
+ my $arg = shift;
+
+ my $self;
+
+ if (ref($arg) == 'HASH'){
+ # Construct from dictionary
+ $self = Net::ICal::Libical::Property::new($package,$arg);
+ my $val=Net::ICal::Libical::icalproperty_get_value_as_string($self->{'ref'});
+ $self->{'tt'} = Net::ICal::Libical::icaltime_from_string($val);
+
+ return $self;
+
+ } else {
+
+ if ($#_ = 1){
+ # iCalendar string
+ $self = Net::ICal::Libical::Property::new($package,'DTSTART');
+ $self->{'tt'} = Net::ICal::Libical::icaltime_new_from_string($arg);
+ } else {
+ # Broken out time
+ die;
+ }
+
+ $self->_update_value();
+ return $self;
+ }
+
+}
+
+
+sub _update_value {
+ my $self = shift;
+
+ if(!$self->{'tt'}){
+ die "Can't find reference to icaltimetype";
+ }
+
+ $self->value(Net::ICal::Libical::icaltime_as_ical_string($self->{'tt'}));
+
+}
+
+=pod
+
+=head2 clone()
+
+Create a new copy of this time.
+
+=cut
+
+# clone a Time object.
+sub clone {
+ my $self = shift;
+
+ bless( {%$self},ref($self));
+
+ $self->{'ref'} = Net::ICal::Libical::icalproperty_new_clone($self->{'ref'});
+
+}
+
+
+
+=pod
+
+=head2 is_valid()
+
+TBD
+
+=cut
+
+sub is_valid{
+ my $self = shift;
+
+ return Net::ICal::Libical::icaltime_is_null_time($self->{'tt'});
+
+}
+
+
+
+=pod
+
+=head2 is_date([true|false])
+
+Accessor to the is_date flag. If true, the flag indicates that the
+hour, minute and second fields are set to zero and not used in
+comparisons.
+
+=cut
+
+
+sub is_date {
+ my $self = shift;
+ if(@_){
+
+ # Convert to true or false
+ Net::ICal::Libical::icaltimetype_is_date_set($self->{'tt'},
+ !(!($_[0])));
+ }
+
+ return Net::ICal::Libical::icaltimetype_is_date_get($self->{'tt'});
+
+}
+
+
+=pod
+
+=head2 is_utc([true|false])
+
+Is_utc indicates if the time should be interpreted in the UTC timezone.
+
+=cut
+
+sub is_utc {
+ my $self = shift;
+ if(@_){
+
+ # Convert to true or false
+ Net::ICal::Libical::icaltimetype_is_utc_set($self->{'tt'},
+ !(!($_[0])));
+ }
+
+ return Net::ICal::Libical::icaltimetype_is_utc_get($self->{'tt'});
+
+}
+=pod
+
+=head2 timezone
+
+Accessor to the timezone. Takes & Returns an Olsen place name
+("America/Los_Angeles", etc. ) , an Abbreviation, 'UTC', or 'float' if
+no zone was specified.
+
+=cut
+
+sub timezone {
+ my $self = shift;
+ my $tz = shift;
+
+ if($tz){
+ $self->set_parameter('TZID',$tz);
+ }
+
+ return $self->get_parameter('TZID');
+
+}
+
+
+
+=pod
+
+=head2 normalize()
+
+Adjust any out-of range values so that they are in-range. For
+instance, 12:65:00 would become 13:05:00.
+
+=cut
+
+sub normalize{
+ my $self = shift;
+
+ $self->{'tt'} = Net::ICal::Libical::icaltime_normalize($self->{'tt'});
+ $self->value(Net::ICal::Libical::icaltime_as_ical_string($self->{'tt'}));
+
+}
+
+
+=pod
+
+=head2 hour([$hour])
+
+Accessor to the hour. Out of range values are normalized.
+
+=cut
+
+=pod
+=head2 minute([$min])
+
+Accessor to the minute. Out of range values are normalized.
+
+=cut
+
+=pod
+=head2 second([$dsecond])
+
+Accessor to the second. Out of range values are normalized. For
+instance, setting the second to -1 will decrement the minute and set
+the second to 59, while setting the second to 3600 will increment the
+hour.
+
+=cut
+
+=pod
+
+=head2 year([$year])
+
+Accessor to the year. Out of range values are normalized.
+
+=cut
+
+=pod
+
+=head2 month([$month])
+
+Accessor to the month. Out of range values are normalized.
+
+=cut
+
+
+=pod
+
+=head2 day([$day])
+
+Accessor to the month day. Out of range values are normalized.
+
+=cut
+
+sub _do_accessor {
+no strict;
+ my $self = shift;
+ my $type = shift;
+ my $value = shift;
+
+ $type = lc($type);
+
+ if($value){
+ my $set = "Net::ICal::Libical::icaltimetype_${type}_set";
+
+ &$set($self->{'tt'},$value);
+ $self->normalize();
+ $self->_update_value();
+
+ }
+
+ my $get = "Net::ICal::Libical::icaltimetype_${type}_get";
+
+ return &$get($self->{'tt'});
+}
+
+
+sub second {my $s = shift; my $v = shift; return $s->_do_accessor('SECOND',$v);}
+sub minute {my $s = shift; my $v = shift;return $s->_do_accessor('MINUTE',$v);}
+sub hour {my $s = shift; my $v = shift; return $s->_do_accessor('HOUR',$v);}
+sub day {my $s = shift; my $v = shift; return $s->_do_accessor('DAY',$v);}
+sub month {my $s = shift; my $v = shift; return $s->_do_accessor('MONTH',$v);}
+sub year {my $s = shift; my $v = shift; return $s->_do_accessor('YEAR',$v);}
+
+
+=pod
+
+=head2 add($duration)
+
+Takes a I<Duration> and returns a I<Time> that is the sum of the time
+and the duration. Does not modify this time.
+
+=cut
+sub add {
+ my $self = shift;
+ my $dur = shift;
+
+ cluck "Net::ICal::Time::add argument 1 requires a Net::ICal::Duration" if !isa($dur,'Net::ICal::Duration');
+
+ my $c = $self->clone();
+
+ $c->second($dur->as_int());
+
+ $c->normalize();
+
+ return $c;
+
+}
+
+=pod
+
+=head2 subtract($time)
+
+Subtract out a time of type I<Time> and return a I<Duration>. Does not
+modify this time.
+
+=cut
+sub subtract {
+ my $self = shift;
+ my $t = shift;
+
+ cluck "Net::ICal::Time::subtract argrument 1 requires a Net::ICal::Time" if !isa($t,'Net::ICal::Time');
+
+ my $tint1 = $self->as_int();
+ my $tint2 = $t->as_int();
+
+ return new Net::ICal::Duration($tint1 - $tint2);
+
+}
+
+=pod
+
+=head2 move_to_zone($zone);
+
+Change the time to what it would be in the named timezone.
+The zone can be an Olsen placename or "UTC".
+
+=cut
+
+# XXX this needs implementing.
+sub move_to_zone {
+ confess "Not Implemented\n";
+}
+
+
+
+=pod
+
+=head2 as_int()
+
+Convert the time to an integer that represents seconds past the POSIX
+epoch
+
+=cut
+sub as_int {
+ my $self = shift;
+
+ return Net::ICal::Libical::icaltime_as_timet($self->{'tt'});
+}
+
+=pod
+
+=head2 as_localtime()
+
+Convert to list format, as per localtime()
+
+=cut
+sub as_localtime {
+ my $self = shift;
+
+ return localtime($self->as_int());
+
+}
+
+=pod
+
+=head2 as_gmtime()
+
+Convert to list format, as per gmtime()
+
+=cut
+sub as_gmtime {
+ my $self = shift;
+
+ return gmtime($self->as_int());
+
+}
+
+=pod
+
+=head2 compare($time)
+
+Compare a time to this one and return -1 if the argument is earlier
+than this one, 1 if it is later, and 0 if it is the same. The routine
+does the comparision after converting the time to UTC. It converts
+floating times using the system notion of the timezone.
+
+=cut
+sub compare {
+ my $self = shift;
+ my $a = $self->as_int();
+
+ my $arg = shift;
+
+ if(!isa($arg,'Net::ICal::Time')){
+ $arg = new Net::ICal::Time($arg);
+ }
+
+ my $b = $arg->as_int();
+
+ if($a < $b){
+ return -1;
+ } elsif ($a > $b) {
+ return 1;
+ } else {
+ return 0;
+ }
+
+}
+
+1;
+
diff --git a/libical/src/Net-ICal-Libical/netical.i b/libical/src/Net-ICal-Libical/netical.i
new file mode 100644
index 0000000000..9d380dcec1
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/netical.i
@@ -0,0 +1,317 @@
+/* -*- Mode: C -*-*/
+/*======================================================================
+ FILE: ical.i
+
+ (C) COPYRIGHT 1999 Eric Busboom
+ http://www.softwarestudio.org
+
+ The contents of this file are subject to the Mozilla Public License
+ Version 1.0 (the "License"); you may not use this file except in
+ compliance with the License. You may obtain a copy of the License at
+ http://www.mozilla.org/MPL/
+
+ Software distributed under the License is distributed on an "AS IS"
+ basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
+ the License for the specific language governing rights and
+ limitations under the License.
+
+ The original author is Eric Busboom
+
+ Contributions from:
+ Graham Davison (g.m.davison@computer.org)
+
+ ======================================================================*/
+
+%module Net__ICal__Libical
+
+%{
+#include "ical.h"
+
+#include <sys/types.h> /* for size_t */
+#include <time.h>
+
+%}
+
+
+
+typedef void icalcomponent;
+typedef void icalproperty;
+
+icalcomponent* icalparser_parse_string(char* str);
+
+
+icalcomponent* icalcomponent_new(icalcomponent_kind kind);
+icalcomponent* icalcomponent_new_clone(icalcomponent* component);
+icalcomponent* icalcomponent_new_from_string(char* str);
+
+char* icalcomponent_as_ical_string(icalcomponent* component);
+
+void icalcomponent_free(icalcomponent* component);
+int icalcomponent_count_errors(icalcomponent* component);
+void icalcomponent_strip_errors(icalcomponent* component);
+void icalcomponent_convert_errors(icalcomponent* component);
+
+icalproperty* icalcomponent_get_current_property(icalcomponent* component);
+
+icalproperty* icalcomponent_get_first_property(icalcomponent* component,
+ icalproperty_kind kind);
+icalproperty* icalcomponent_get_next_property(icalcomponent* component,
+ icalproperty_kind kind);
+
+icalcomponent* icalcomponent_get_current_component (icalcomponent* component);
+
+icalcomponent* icalcomponent_get_first_component(icalcomponent* component,
+ icalcomponent_kind kind);
+icalcomponent* icalcomponent_get_next_component(icalcomponent* component,
+ icalcomponent_kind kind);
+
+void icalcomponent_add_property(icalcomponent* component,
+ icalproperty* property);
+
+void icalcomponent_remove_property(icalcomponent* component,
+ icalproperty* property);
+
+
+icalcomponent* icalcomponent_get_parent(icalcomponent* component);
+
+icalcomponent_kind icalcomponent_isa(icalcomponent* component);
+
+int icalrestriction_check(icalcomponent* comp);
+
+
+/* actually returns icalproperty_kind */
+int icalproperty_string_to_kind(const char* string);
+
+/* actually takes icalproperty_kind */
+icalproperty* icalproperty_new(int kind);
+
+icalproperty* icalproperty_new_from_string(char* str);
+
+char* icalproperty_as_ical_string(icalproperty *prop);
+
+void icalproperty_set_parameter_from_string(icalproperty* prop,
+ const char* name, const char* value);
+void icalproperty_set_value_from_string(icalproperty* prop,const char* value, const char * kind);
+
+const char* icalproperty_get_value_as_string(icalproperty* prop);
+const char* icalproperty_get_parameter_as_string(icalproperty* prop,
+ const char* name);
+
+
+icalcomponent* icalproperty_get_parent(icalproperty* property);
+
+typedef enum icalerrorenum {
+
+ ICAL_BADARG_ERROR,
+ ICAL_NEWFAILED_ERROR,
+ ICAL_MALFORMEDDATA_ERROR,
+ ICAL_PARSE_ERROR,
+ ICAL_INTERNAL_ERROR, /* Like assert --internal consist. prob */
+ ICAL_FILE_ERROR,
+ ICAL_ALLOCATION_ERROR,
+ ICAL_USAGE_ERROR,
+ ICAL_NO_ERROR,
+ ICAL_UNKNOWN_ERROR /* Used for problems in input to icalerror_strerror()*/
+
+} icalerrorenum;
+
+/* Make an individual error fatal or non-fatal. */
+typedef enum icalererorstate {
+ ICAL_ERROR_FATAL, /* Not fata */
+ ICAL_ERROR_NONFATAL, /* Fatal */
+ ICAL_ERROR_DEFAULT, /* Use the value of icalerror_errors_are_fatal*/
+ ICAL_ERROR_UNKNOWN /* Asked state for an unknown error type */
+} icalerrorstate ;
+
+void icalerror_set_error_state( icalerrorenum error, icalerrorstate);
+icalerrorstate icalerror_get_error_state( icalerrorenum error);
+
+
+const char* icalenum_property_kind_to_string(icalproperty_kind kind);
+icalproperty_kind icalenum_string_to_property_kind(const char* string);
+
+const char* icalenum_value_kind_to_string(icalvalue_kind kind);
+/*icalvalue_kind icalenum_value_kind_by_prop(icalproperty_kind kind);*/
+
+const char* icalenum_parameter_kind_to_string(icalparameter_kind kind);
+icalparameter_kind icalenum_string_to_parameter_kind(const char* string);
+
+const char* icalenum_component_kind_to_string(icalcomponent_kind kind);
+icalcomponent_kind icalenum_string_to_component_kind(const char* string);
+
+icalvalue_kind icalenum_property_kind_to_value_kind(icalproperty_kind kind);
+
+
+int* icallangbind_new_array(int size);
+void icallangbind_free_array(int* array);
+int icallangbind_access_array(int* array, int index);
+int icalrecur_expand_recurrence(char* rule, int start,
+ int count, int* array);
+
+
+/* Iterate through properties and components using strings for the kind */
+icalproperty* icallangbind_get_first_property(icalcomponent *c,
+ const char* prop);
+
+icalproperty* icallangbind_get_next_property(icalcomponent *c,
+ const char* prop);
+
+icalcomponent* icallangbind_get_first_component(icalcomponent *c,
+ const char* comp);
+
+icalcomponent* icallangbind_get_next_component(icalcomponent *c,
+ const char* comp);
+
+
+/* Return a string that can be evaluated in perl or python to
+ generated a hash that holds the property's name, value and
+ parameters. Sep is the hash seperation string, "=>" for perl and
+ ":" for python */
+const char* icallangbind_property_eval_string(icalproperty* prop, char* sep);
+
+/***********************************************************************
+ Time routines
+***********************************************************************/
+
+
+struct icaltimetype
+{
+ int year;
+ int month;
+ int day;
+ int hour;
+ int minute;
+ int second;
+
+ int is_utc; /* 1-> time is in UTC timezone */
+
+ int is_date; /* 1 -> interpret this as date. */
+
+ const char* zone; /*Ptr to Olsen placename. Libical does not own mem*/
+};
+
+
+/* Convert seconds past UNIX epoch to a timetype*/
+struct icaltimetype icaltime_from_timet(int v, int is_date);
+
+/* Return the time as seconds past the UNIX epoch */
+/* Normally, this returns a time_t, but SWIG tries to turn that type
+ into a pointer */
+int icaltime_as_timet(struct icaltimetype);
+
+/* Return a string represention of the time, in RFC2445 format. The
+ string is owned by libical */
+char* icaltime_as_ical_string(struct icaltimetype tt);
+
+/* create a time from an ISO format string */
+struct icaltimetype icaltime_from_string(const char* str);
+
+/* Routines for handling timezones */
+/* Return the offset of the named zone as seconds. tt is a time
+ indicating the date for which you want the offset */
+int icaltime_utc_offset(struct icaltimetype tt, const char* tzid);
+
+/* convert tt, of timezone tzid, into a utc time. Does nothing if the
+ time is already UTC. */
+struct icaltimetype icaltime_as_utc(struct icaltimetype tt,
+ const char* tzid);
+
+/* convert tt, a time in UTC, into a time in timezone tzid */
+struct icaltimetype icaltime_as_zone(struct icaltimetype tt,
+ const char* tzid);
+
+/* Return a null time, which indicates no time has been set. This time represent the beginning of the epoch */
+struct icaltimetype icaltime_null_time(void);
+
+/* Return true of the time is null. */
+int icaltime_is_null_time(struct icaltimetype t);
+
+/* Returns false if the time is clearly invalid, but is not null. This
+ is usually the result of creating a new time type buy not clearing
+ it, or setting one of the flags to an illegal value. */
+int icaltime_is_valid_time(struct icaltimetype t);
+
+/* Reset all of the time components to be in their normal ranges. For
+ instance, given a time with minutes=70, the minutes will be reduces
+ to 10, and the hour incremented. This allows the caller to do
+ arithmetic on times without worrying about overflow or
+ underflow. */
+struct icaltimetype icaltime_normalize(struct icaltimetype t);
+
+/* Return the day of the year of the given time */
+short icaltime_day_of_year(struct icaltimetype t);
+
+/* Create a new time, given a day of year and a year. */
+struct icaltimetype icaltime_from_day_of_year(short doy, short year);
+
+/* Return the day of the week of the given time. Sunday is 0 */
+short icaltime_day_of_week(struct icaltimetype t);
+
+/* Return the day of the year for the Sunday of the week that the
+ given time is within. */
+short icaltime_start_doy_of_week(struct icaltimetype t);
+
+/* Return a string with the time represented in the same format as ctime(). THe string is owned by libical */
+char* icaltime_as_ctime(struct icaltimetype);
+
+/* Return the week number for the week the given time is within */
+short icaltime_week_number(struct icaltimetype t);
+
+/* Return -1, 0, or 1 to indicate that a<b, a==b or a>b */
+int icaltime_compare(struct icaltimetype a,struct icaltimetype b);
+
+/* like icaltime_compare, but only use the date parts. */
+int icaltime_compare_date_only(struct icaltimetype a, struct icaltimetype b);
+
+/* Return the number of days in the given month */
+short icaltime_days_in_month(short month,short year);
+
+
+/***********************************************************************
+ Duration Routines
+***********************************************************************/
+
+
+struct icaldurationtype
+{
+ int is_neg;
+ unsigned int days;
+ unsigned int weeks;
+ unsigned int hours;
+ unsigned int minutes;
+ unsigned int seconds;
+};
+
+struct icaldurationtype icaldurationtype_from_int(int t);
+struct icaldurationtype icaldurationtype_from_string(const char*);
+int icaldurationtype_as_int(struct icaldurationtype duration);
+char* icaldurationtype_as_ical_string(struct icaldurationtype d);
+struct icaldurationtype icaldurationtype_null_duration();
+int icaldurationtype_is_null_duration(struct icaldurationtype d);
+
+struct icaltimetype icaltime_add(struct icaltimetype t,
+ struct icaldurationtype d);
+
+struct icaldurationtype icaltime_subtract(struct icaltimetype t1,
+ struct icaltimetype t2);
+
+
+/***********************************************************************
+ Period Routines
+***********************************************************************/
+
+
+struct icalperiodtype
+{
+ struct icaltimetype start;
+ struct icaltimetype end;
+ struct icaldurationtype duration;
+};
+
+struct icalperiodtype icalperiodtype_from_string (const char* str);
+
+const char* icalperiodtype_as_ical_string(struct icalperiodtype p);
+struct icalperiodtype icalperiodtype_null_period();
+int icalperiodtype_is_null_period(struct icalperiodtype p);
+int icalperiodtype_is_valid_period(struct icalperiodtype p);
+
diff --git a/libical/src/Net-ICal-Libical/netical_wrap.c b/libical/src/Net-ICal-Libical/netical_wrap.c
new file mode 100644
index 0000000000..233c2dc7f7
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/netical_wrap.c
@@ -0,0 +1,3048 @@
+/*
+ * FILE : netical_wrap.c
+ *
+ * This file was automatically generated by :
+ * Simplified Wrapper and Interface Generator (SWIG)
+ * Version 1.1 (Patch 5)
+ *
+ * Portions Copyright (c) 1995-1998
+ * The University of Utah and The Regents of the University of California.
+ * Permission is granted to distribute this file in any manner provided
+ * this notice remains intact.
+ *
+ * Do not make changes to this file--changes will be lost!
+ *
+ */
+
+
+#define SWIGCODE
+/* Implementation : PERL 5 */
+
+#define SWIGPERL
+#define SWIGPERL5
+#ifdef __cplusplus
+#include <math.h>
+#include <stdlib.h>
+extern "C" {
+#endif
+#include "EXTERN.h"
+#include "perl.h"
+#include "XSUB.h"
+#undef free
+#undef malloc
+#include <string.h>
+#ifdef __cplusplus
+}
+#endif
+/* Definitions for compiling Perl extensions on a variety of machines */
+
+#if defined(WIN32) || defined(__WIN32__)
+# if defined(_MSC_VER)
+# define SWIGEXPORT(a,b) __declspec(dllexport) a b
+# else
+# if defined(__BORLANDC__)
+# define SWIGEXPORT(a,b) a _export b
+# else
+# define SWIGEXPORT(a,b) a b
+# endif
+# endif
+#else
+# define SWIGEXPORT(a,b) a b
+#endif
+
+#ifdef PERL_OBJECT
+#define MAGIC_PPERL CPerl *pPerl = (CPerl *) this;
+#define MAGIC_CAST (int (CPerl::*)(SV *, MAGIC *))
+#define SWIGCLASS_STATIC
+#else
+#define MAGIC_PPERL
+#define MAGIC_CAST
+#define SWIGCLASS_STATIC static
+#endif
+
+
+/*****************************************************************************
+ * $Header$
+ *
+ * perl5ptr.swg
+ *
+ * This file contains supporting code for the SWIG run-time type checking
+ * mechanism. The following functions are available :
+ *
+ * SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *));
+ *
+ * Registers a new type-mapping with the type-checker. origtype is the
+ * original datatype and newtype is an equivalent type. cast is optional
+ * pointer to a function to cast pointer values between types (this
+ * is only used to cast pointers from derived classes to base classes in C++)
+ *
+ * SWIG_MakePtr(char *buffer, void *ptr, char *typestring);
+ *
+ * Makes a pointer string from a pointer and typestring. The result is returned
+ * in buffer.
+ *
+ * char * SWIG_GetPtr(SV *obj, void **ptr, char *type)
+ *
+ * Gets a pointer value from a Perl5 scalar value. If there is a
+ * type-mismatch, returns a character string to the received type.
+ * On success, returns NULL.
+ *
+ *
+ * You can remap these functions by making a file called "swigptr.swg" in
+ * your the same directory as the interface file you are wrapping.
+ *
+ * These functions are normally declared static, but this file can be
+ * can be used in a multi-module environment by redefining the symbol
+ * SWIGSTATIC.
+ *
+ * $Log$
+ * Revision 1.1 2003/09/11 22:04:08 hansp
+ * Import new libical from mainline HEAD and make appropriate changes to
+ * Evolution.
+ *
+ * Revision 1.6 2001/04/02 18:17:40 ebusboom
+ * Get perl extension compiling again.
+ *
+ * Revision 1.1 1996/12/26 22:17:29 beazley
+ * Initial revision
+ *
+ *****************************************************************************/
+
+#include <stdlib.h>
+
+#ifdef SWIG_GLOBAL
+#ifdef __cplusplus
+#define SWIGSTATIC extern "C"
+#else
+#define SWIGSTATIC
+#endif
+#endif
+
+#ifndef SWIGSTATIC
+#define SWIGSTATIC static
+#endif
+
+/* These are internal variables. Should be static */
+
+typedef struct SwigPtrType {
+ char *name;
+ int len;
+ void *(*cast)(void *);
+ struct SwigPtrType *next;
+} SwigPtrType;
+
+/* Pointer cache structure */
+
+typedef struct {
+ int stat; /* Status (valid) bit */
+ SwigPtrType *tp; /* Pointer to type structure */
+ char name[256]; /* Given datatype name */
+ char mapped[256]; /* Equivalent name */
+} SwigCacheType;
+
+static int SwigPtrMax = 64; /* Max entries that can be currently held */
+static int SwigPtrN = 0; /* Current number of entries */
+static int SwigPtrSort = 0; /* Status flag indicating sort */
+static SwigPtrType *SwigPtrTable = 0; /* Table containing pointer equivalences */
+static int SwigStart[256]; /* Table containing starting positions */
+
+/* Cached values */
+
+#define SWIG_CACHESIZE 8
+#define SWIG_CACHEMASK 0x7
+static SwigCacheType SwigCache[SWIG_CACHESIZE];
+static int SwigCacheIndex = 0;
+static int SwigLastCache = 0;
+
+/* Sort comparison function */
+static int swigsort(const void *data1, const void *data2) {
+ SwigPtrType *d1 = (SwigPtrType *) data1;
+ SwigPtrType *d2 = (SwigPtrType *) data2;
+ return strcmp(d1->name,d2->name);
+}
+
+/* Binary Search function */
+static int swigcmp(const void *key, const void *data) {
+ char *k = (char *) key;
+ SwigPtrType *d = (SwigPtrType *) data;
+ return strncmp(k,d->name,d->len);
+}
+
+/* Register a new datatype with the type-checker */
+
+#ifndef PERL_OBJECT
+SWIGSTATIC
+void SWIG_RegisterMapping(char *origtype, char *newtype, void *(*cast)(void *)) {
+#else
+SWIGSTATIC
+#define SWIG_RegisterMapping(a,b,c) _SWIG_RegisterMapping(pPerl, a,b,c)
+void _SWIG_RegisterMapping(CPerl *pPerl, char *origtype, char *newtype, void *(*cast)(void *)) {
+#endif
+
+ int i;
+ SwigPtrType *t = 0, *t1;
+
+ if (!SwigPtrTable) {
+ SwigPtrTable = (SwigPtrType *) malloc(SwigPtrMax*sizeof(SwigPtrType));
+ SwigPtrN = 0;
+ }
+ if (SwigPtrN >= SwigPtrMax) {
+ SwigPtrMax = 2*SwigPtrMax;
+ SwigPtrTable = (SwigPtrType *) realloc(SwigPtrTable,SwigPtrMax*sizeof(SwigPtrType));
+ }
+ for (i = 0; i < SwigPtrN; i++)
+ if (strcmp(SwigPtrTable[i].name,origtype) == 0) {
+ t = &SwigPtrTable[i];
+ break;
+ }
+ if (!t) {
+ t = &SwigPtrTable[SwigPtrN];
+ t->name = origtype;
+ t->len = strlen(t->name);
+ t->cast = 0;
+ t->next = 0;
+ SwigPtrN++;
+ }
+ while (t->next) {
+ if (strcmp(t->name,newtype) == 0) {
+ if (cast) t->cast = cast;
+ return;
+ }
+ t = t->next;
+ }
+ t1 = (SwigPtrType *) malloc(sizeof(SwigPtrType));
+ t1->name = newtype;
+ t1->len = strlen(t1->name);
+ t1->cast = cast;
+ t1->next = 0;
+ t->next = t1;
+ SwigPtrSort = 0;
+}
+
+/* Make a pointer value string */
+
+SWIGSTATIC
+void SWIG_MakePtr(char *_c, const void *_ptr, char *type) {
+ static char _hex[16] =
+ {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9',
+ 'a', 'b', 'c', 'd', 'e', 'f'};
+ unsigned long _p, _s;
+ char _result[20], *_r; /* Note : a 64-bit hex number = 16 digits */
+ _r = _result;
+ _p = (unsigned long) _ptr;
+ if (_p > 0) {
+ while (_p > 0) {
+ _s = _p & 0xf;
+ *(_r++) = _hex[_s];
+ _p = _p >> 4;
+ }
+ *_r = '_';
+ while (_r >= _result)
+ *(_c++) = *(_r--);
+ } else {
+ strcpy (_c, "NULL");
+ }
+ if (_ptr)
+ strcpy (_c, type);
+}
+
+/* Define for backwards compatibility */
+
+#define _swig_make_hex SWIG_MakePtr
+
+/* Function for getting a pointer value */
+
+#ifndef PERL_OBJECT
+SWIGSTATIC
+char *SWIG_GetPtr(SV *sv, void **ptr, char *_t)
+#else
+SWIGSTATIC
+#define SWIG_GetPtr(a,b,c) _SWIG_GetPtr(pPerl,a,b,c)
+char *_SWIG_GetPtr(CPerl *pPerl, SV *sv, void **ptr, char *_t)
+#endif
+{
+ char temp_type[256];
+ char *name,*_c;
+ int len,i,start,end;
+ IV tmp;
+ SwigPtrType *sp,*tp;
+ SwigCacheType *cache;
+
+ /* If magical, apply more magic */
+
+ if (SvGMAGICAL(sv))
+ mg_get(sv);
+
+ /* Check to see if this is an object */
+ if (sv_isobject(sv)) {
+ SV *tsv = (SV*) SvRV(sv);
+ if ((SvTYPE(tsv) == SVt_PVHV)) {
+ MAGIC *mg;
+ if (SvMAGICAL(tsv)) {
+ mg = mg_find(tsv,'P');
+ if (mg) {
+ SV *rsv = mg->mg_obj;
+ if (sv_isobject(rsv)) {
+ tmp = SvIV((SV*)SvRV(rsv));
+ }
+ }
+ } else {
+ return "Not a valid pointer value";
+ }
+ } else {
+ tmp = SvIV((SV*)SvRV(sv));
+ }
+ if (!_t) {
+ *(ptr) = (void *) tmp;
+ return (char *) 0;
+ }
+ } else if (sv == &sv_undef) { /* Check for undef */
+ *(ptr) = (void *) 0;
+ return (char *) 0;
+ } else if (SvTYPE(sv) == SVt_RV) { /* Check for NULL pointer */
+ *(ptr) = (void *) 0;
+ if (!SvROK(sv))
+ return (char *) 0;
+ else
+ return "Not a valid pointer value";
+ } else { /* Don't know what it is */
+ *(ptr) = (void *) 0;
+ return "Not a valid pointer value";
+ }
+ if (_t) {
+ /* Now see if the types match */
+
+ if (!sv_isa(sv,_t)) {
+ _c = HvNAME(SvSTASH(SvRV(sv)));
+ if (!SwigPtrSort) {
+ qsort((void *) SwigPtrTable, SwigPtrN, sizeof(SwigPtrType), swigsort);
+ for (i = 0; i < 256; i++) {
+ SwigStart[i] = SwigPtrN;
+ }
+ for (i = SwigPtrN-1; i >= 0; i--) {
+ SwigStart[SwigPtrTable[i].name[0]] = i;
+ }
+ for (i = 255; i >= 1; i--) {
+ if (SwigStart[i-1] > SwigStart[i])
+ SwigStart[i-1] = SwigStart[i];
+ }
+ SwigPtrSort = 1;
+ for (i = 0; i < SWIG_CACHESIZE; i++)
+ SwigCache[i].stat = 0;
+ }
+ /* First check cache for matches. Uses last cache value as starting point */
+ cache = &SwigCache[SwigLastCache];
+ for (i = 0; i < SWIG_CACHESIZE; i++) {
+ if (cache->stat) {
+ if (strcmp(_t,cache->name) == 0) {
+ if (strcmp(_c,cache->mapped) == 0) {
+ cache->stat++;
+ *ptr = (void *) tmp;
+ if (cache->tp->cast) *ptr = (*(cache->tp->cast))(*ptr);
+ return (char *) 0;
+ }
+ }
+ }
+ SwigLastCache = (SwigLastCache+1) & SWIG_CACHEMASK;
+ if (!SwigLastCache) cache = SwigCache;
+ else cache++;
+ }
+
+ start = SwigStart[_t[0]];
+ end = SwigStart[_t[0]+1];
+ sp = &SwigPtrTable[start];
+ while (start < end) {
+ if (swigcmp(_t,sp) == 0) break;
+ sp++;
+ start++;
+ }
+ if (start >= end) sp = 0;
+ if (sp) {
+ while (swigcmp(_t,sp) == 0) {
+ name = sp->name;
+ len = sp->len;
+ tp = sp->next;
+ while(tp) {
+ if (tp->len >= 255) {
+ return _c;
+ }
+ strcpy(temp_type,tp->name);
+ strncat(temp_type,_t+len,255-tp->len);
+ if (sv_isa(sv,temp_type)) {
+ /* Get pointer value */
+ *ptr = (void *) tmp;
+ if (tp->cast) *ptr = (*(tp->cast))(*ptr);
+
+ strcpy(SwigCache[SwigCacheIndex].mapped,_c);
+ strcpy(SwigCache[SwigCacheIndex].name,_t);
+ SwigCache[SwigCacheIndex].stat = 1;
+ SwigCache[SwigCacheIndex].tp = tp;
+ SwigCacheIndex = SwigCacheIndex & SWIG_CACHEMASK;
+ return (char *) 0;
+ }
+ tp = tp->next;
+ }
+ /* Hmmm. Didn't find it this time */
+ sp++;
+ }
+ }
+ /* Didn't find any sort of match for this data.
+ Get the pointer value and return the received type */
+ *ptr = (void *) tmp;
+ return _c;
+ } else {
+ /* Found a match on the first try. Return pointer value */
+ *ptr = (void *) tmp;
+ return (char *) 0;
+ }
+ }
+ *ptr = (void *) tmp;
+ return (char *) 0;
+}
+
+/* Compatibility mode */
+
+#define _swig_get_hex SWIG_GetPtr
+/* Magic variable code */
+#ifndef PERL_OBJECT
+#define swig_create_magic(s,a,b,c) _swig_create_magic(s,a,b,c)
+static void _swig_create_magic(SV *sv, char *name, int (*set)(SV *, MAGIC *), int (*get)(SV *,MAGIC *)) {
+#else
+#define swig_create_magic(s,a,b,c) _swig_create_magic(pPerl,s,a,b,c)
+static void _swig_create_magic(CPerl *pPerl, SV *sv, char *name, int (CPerl::*set)(SV *, MAGIC *), int (CPerl::*get)(SV *, MAGIC *)) {
+#endif
+ MAGIC *mg;
+ sv_magic(sv,sv,'U',name,strlen(name));
+ mg = mg_find(sv,'U');
+ mg->mg_virtual = (MGVTBL *) malloc(sizeof(MGVTBL));
+ mg->mg_virtual->svt_get = get;
+ mg->mg_virtual->svt_set = set;
+ mg->mg_virtual->svt_len = 0;
+ mg->mg_virtual->svt_clear = 0;
+ mg->mg_virtual->svt_free = 0;
+}
+
+#define SWIG_init boot_Net__ICal__Libical
+
+#define SWIG_name "Net::ICal::Libical::boot_Net__ICal__Libical"
+#define SWIG_varinit "Net::ICal::Libical::var_Net__ICal__Libical_init();"
+#ifdef __cplusplus
+extern "C"
+#endif
+#ifndef PERL_OBJECT
+SWIGEXPORT(void,boot_Net__ICal__Libical)(CV* cv);
+#else
+SWIGEXPORT(void,boot_Net__ICal__Libical)(CPerl *, CV *cv);
+#endif
+
+#include "ical.h"
+
+#include <sys/types.h> /* for size_t */
+#include <time.h>
+
+#ifndef PERL_OBJECT
+#define swig_setiv(a,b) _swig_setiv(a,b)
+static void _swig_setiv(char *name, long value) {
+#else
+#define swig_setiv(a,b) _swig_setiv(pPerl,a,b)
+static void _swig_setiv(CPerl *pPerl, char *name, long value) {
+#endif
+ SV *sv;
+ sv = perl_get_sv(name,TRUE | 0x2);
+ sv_setiv(sv, (IV) value);
+ SvREADONLY_on(sv);
+}
+
+#ifndef PERL_OBJECT
+#define swig_setpv(a,b) _swig_setpv(a,b)
+static void _swig_setpv(char *name, char *value) {
+#else
+#define swig_setpv(a,b) _swig_setpv(pPerl,a,b)
+static void _swig_setpv(CPerl *pPerl, char *name, char *value) {
+#endif
+ SV *sv;
+ sv = perl_get_sv(name,TRUE | 0x2);
+ sv_setpv(sv, value);
+ SvREADONLY_on(sv);
+}
+
+#ifdef PERL_OBJECT
+#define MAGIC_CLASS _wrap_Net__ICal__Libical_var::
+class _wrap_Net__ICal__Libical_var : public CPerl {
+public:
+#else
+#define MAGIC_CLASS
+#endif
+SWIGCLASS_STATIC int swig_magic_readonly(SV *sv, MAGIC *mg) {
+ MAGIC_PPERL
+ sv = sv; mg = mg;
+ croak("Value is read-only.");
+ return 0;
+}
+
+
+#ifdef PERL_OBJECT
+};
+#endif
+
+XS(_wrap_icalparser_parse_string) {
+
+ icalcomponent * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalparser_parse_string(str);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (icalcomponent *)icalparser_parse_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_new) {
+
+ icalcomponent * _result;
+ icalcomponent_kind * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_new(kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalcomponent_kindPtr")) {
+ croak("Type error in argument 1 of icalcomponent_new. Expected icalcomponent_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalcomponent *)icalcomponent_new(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_new_clone) {
+
+ icalcomponent * _result;
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_new_clone(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_new_clone. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalcomponent *)icalcomponent_new_clone(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_new_from_string) {
+
+ icalcomponent * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_new_from_string(str);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (icalcomponent *)icalcomponent_new_from_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_as_ical_string) {
+
+ char * _result;
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_as_ical_string(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_as_ical_string. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icalcomponent_as_ical_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_free) {
+
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_free(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_free. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ icalcomponent_free(_arg0);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_count_errors) {
+
+ int _result;
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_count_errors(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_count_errors. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icalcomponent_count_errors(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_strip_errors) {
+
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_strip_errors(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_strip_errors. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ icalcomponent_strip_errors(_arg0);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_convert_errors) {
+
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_convert_errors(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_convert_errors. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ icalcomponent_convert_errors(_arg0);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_get_current_property) {
+
+ icalproperty * _result;
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_get_current_property(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_get_current_property. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalproperty *)icalcomponent_get_current_property(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_get_first_property) {
+
+ icalproperty * _result;
+ icalcomponent * _arg0;
+ icalproperty_kind * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalcomponent_get_first_property(component,kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_get_first_property. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"icalproperty_kindPtr")) {
+ croak("Type error in argument 2 of icalcomponent_get_first_property. Expected icalproperty_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalproperty *)icalcomponent_get_first_property(_arg0,*_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_get_next_property) {
+
+ icalproperty * _result;
+ icalcomponent * _arg0;
+ icalproperty_kind * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalcomponent_get_next_property(component,kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_get_next_property. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"icalproperty_kindPtr")) {
+ croak("Type error in argument 2 of icalcomponent_get_next_property. Expected icalproperty_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalproperty *)icalcomponent_get_next_property(_arg0,*_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_get_current_component) {
+
+ icalcomponent * _result;
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_get_current_component(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_get_current_component. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalcomponent *)icalcomponent_get_current_component(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_get_first_component) {
+
+ icalcomponent * _result;
+ icalcomponent * _arg0;
+ icalcomponent_kind * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalcomponent_get_first_component(component,kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_get_first_component. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"icalcomponent_kindPtr")) {
+ croak("Type error in argument 2 of icalcomponent_get_first_component. Expected icalcomponent_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalcomponent *)icalcomponent_get_first_component(_arg0,*_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_get_next_component) {
+
+ icalcomponent * _result;
+ icalcomponent * _arg0;
+ icalcomponent_kind * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalcomponent_get_next_component(component,kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_get_next_component. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"icalcomponent_kindPtr")) {
+ croak("Type error in argument 2 of icalcomponent_get_next_component. Expected icalcomponent_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalcomponent *)icalcomponent_get_next_component(_arg0,*_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_add_property) {
+
+ icalcomponent * _arg0;
+ icalproperty * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalcomponent_add_property(component,property);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_add_property. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,(char *) 0 )) {
+ croak("Type error in argument 2 of icalcomponent_add_property. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ icalcomponent_add_property(_arg0,_arg1);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_remove_property) {
+
+ icalcomponent * _arg0;
+ icalproperty * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalcomponent_remove_property(component,property);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_remove_property. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,(char *) 0 )) {
+ croak("Type error in argument 2 of icalcomponent_remove_property. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ icalcomponent_remove_property(_arg0,_arg1);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_get_parent) {
+
+ icalcomponent * _result;
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_get_parent(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_get_parent. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalcomponent *)icalcomponent_get_parent(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalcomponent_isa) {
+
+ icalcomponent_kind * _result;
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalcomponent_isa(component);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalcomponent_isa. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalcomponent_kind *) malloc(sizeof(icalcomponent_kind ));
+ *(_result) = icalcomponent_isa(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponent_kindPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalrestriction_check) {
+
+ int _result;
+ icalcomponent * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalrestriction_check(comp);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalrestriction_check. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icalrestriction_check(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_string_to_kind) {
+
+ int _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalproperty_string_to_kind(string);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (int )icalproperty_string_to_kind(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_new) {
+
+ icalproperty * _result;
+ int _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalproperty_new(kind);");
+ _arg0 = (int )SvIV(ST(0));
+ _result = (icalproperty *)icalproperty_new(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_new_from_string) {
+
+ icalproperty * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalproperty_new_from_string(str);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (icalproperty *)icalproperty_new_from_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_as_ical_string) {
+
+ char * _result;
+ icalproperty * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalproperty_as_ical_string(prop);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalproperty_as_ical_string. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icalproperty_as_ical_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_set_parameter_from_string) {
+
+ icalproperty * _arg0;
+ char * _arg1;
+ char * _arg2;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 3) || (items > 3))
+ croak("Usage: icalproperty_set_parameter_from_string(prop,name,value);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalproperty_set_parameter_from_string. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _arg2 = (char *) SvPV(ST(2),na);
+ icalproperty_set_parameter_from_string(_arg0,_arg1,_arg2);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_set_value_from_string) {
+
+ icalproperty * _arg0;
+ char * _arg1;
+ char * _arg2;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 3) || (items > 3))
+ croak("Usage: icalproperty_set_value_from_string(prop,value,kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalproperty_set_value_from_string. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _arg2 = (char *) SvPV(ST(2),na);
+ icalproperty_set_value_from_string(_arg0,_arg1,_arg2);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_get_value_as_string) {
+
+ char * _result;
+ icalproperty * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalproperty_get_value_as_string(prop);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalproperty_get_value_as_string. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icalproperty_get_value_as_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_get_parameter_as_string) {
+
+ char * _result;
+ icalproperty * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalproperty_get_parameter_as_string(prop,name);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalproperty_get_parameter_as_string. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (char *)icalproperty_get_parameter_as_string(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalproperty_get_parent) {
+
+ icalcomponent * _result;
+ icalproperty * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalproperty_get_parent(property);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icalproperty_get_parent. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalcomponent *)icalproperty_get_parent(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalerror_set_error_state) {
+
+ icalerrorenum _arg0;
+ icalerrorstate _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalerror_set_error_state(error,icalerrorstate );");
+ _arg0 = (icalerrorenum )SvIV(ST(0));
+ _arg1 = (icalerrorstate )SvIV(ST(1));
+ icalerror_set_error_state(_arg0,_arg1);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalerror_get_error_state) {
+
+ icalerrorstate _result;
+ icalerrorenum _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalerror_get_error_state(error);");
+ _arg0 = (icalerrorenum )SvIV(ST(0));
+ _result = (icalerrorstate )icalerror_get_error_state(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalenum_property_kind_to_string) {
+
+ char * _result;
+ icalproperty_kind * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalenum_property_kind_to_string(kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalproperty_kindPtr")) {
+ croak("Type error in argument 1 of icalenum_property_kind_to_string. Expected icalproperty_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icalenum_property_kind_to_string(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalenum_string_to_property_kind) {
+
+ icalproperty_kind * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalenum_string_to_property_kind(string);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (icalproperty_kind *) malloc(sizeof(icalproperty_kind ));
+ *(_result) = icalenum_string_to_property_kind(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalproperty_kindPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalenum_value_kind_to_string) {
+
+ char * _result;
+ icalvalue_kind * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalenum_value_kind_to_string(kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalvalue_kindPtr")) {
+ croak("Type error in argument 1 of icalenum_value_kind_to_string. Expected icalvalue_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icalenum_value_kind_to_string(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalenum_parameter_kind_to_string) {
+
+ char * _result;
+ icalparameter_kind * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalenum_parameter_kind_to_string(kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalparameter_kindPtr")) {
+ croak("Type error in argument 1 of icalenum_parameter_kind_to_string. Expected icalparameter_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icalenum_parameter_kind_to_string(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalenum_string_to_parameter_kind) {
+
+ icalparameter_kind * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalenum_string_to_parameter_kind(string);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (icalparameter_kind *) malloc(sizeof(icalparameter_kind ));
+ *(_result) = icalenum_string_to_parameter_kind(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalparameter_kindPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalenum_component_kind_to_string) {
+
+ char * _result;
+ icalcomponent_kind * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalenum_component_kind_to_string(kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalcomponent_kindPtr")) {
+ croak("Type error in argument 1 of icalenum_component_kind_to_string. Expected icalcomponent_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icalenum_component_kind_to_string(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalenum_string_to_component_kind) {
+
+ icalcomponent_kind * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalenum_string_to_component_kind(string);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (icalcomponent_kind *) malloc(sizeof(icalcomponent_kind ));
+ *(_result) = icalenum_string_to_component_kind(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponent_kindPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalenum_property_kind_to_value_kind) {
+
+ icalvalue_kind * _result;
+ icalproperty_kind * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalenum_property_kind_to_value_kind(kind);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"icalproperty_kindPtr")) {
+ croak("Type error in argument 1 of icalenum_property_kind_to_value_kind. Expected icalproperty_kindPtr.");
+ XSRETURN(1);
+ }
+ _result = (icalvalue_kind *) malloc(sizeof(icalvalue_kind ));
+ *(_result) = icalenum_property_kind_to_value_kind(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalvalue_kindPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icallangbind_new_array) {
+
+ int * _result;
+ int _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icallangbind_new_array(size);");
+ _arg0 = (int )SvIV(ST(0));
+ _result = (int *)icallangbind_new_array(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"intPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icallangbind_free_array) {
+
+ int * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icallangbind_free_array(array);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"intPtr")) {
+ croak("Type error in argument 1 of icallangbind_free_array. Expected intPtr.");
+ XSRETURN(1);
+ }
+ icallangbind_free_array(_arg0);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icallangbind_access_array) {
+
+ int _result;
+ int * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icallangbind_access_array(array,index);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"intPtr")) {
+ croak("Type error in argument 1 of icallangbind_access_array. Expected intPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icallangbind_access_array(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalrecur_expand_recurrence) {
+
+ int _result;
+ char * _arg0;
+ int _arg1;
+ int _arg2;
+ int * _arg3;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 4) || (items > 4))
+ croak("Usage: icalrecur_expand_recurrence(rule,start,count,array);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _arg1 = (int )SvIV(ST(1));
+ _arg2 = (int )SvIV(ST(2));
+ if (SWIG_GetPtr(ST(3),(void **) &_arg3,"intPtr")) {
+ croak("Type error in argument 4 of icalrecur_expand_recurrence. Expected intPtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icalrecur_expand_recurrence(_arg0,_arg1,_arg2,_arg3);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icallangbind_get_first_property) {
+
+ icalproperty * _result;
+ icalcomponent * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icallangbind_get_first_property(c,prop);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icallangbind_get_first_property. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (icalproperty *)icallangbind_get_first_property(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icallangbind_get_next_property) {
+
+ icalproperty * _result;
+ icalcomponent * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icallangbind_get_next_property(c,prop);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icallangbind_get_next_property. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (icalproperty *)icallangbind_get_next_property(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalpropertyPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icallangbind_get_first_component) {
+
+ icalcomponent * _result;
+ icalcomponent * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icallangbind_get_first_component(c,comp);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icallangbind_get_first_component. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (icalcomponent *)icallangbind_get_first_component(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icallangbind_get_next_component) {
+
+ icalcomponent * _result;
+ icalcomponent * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icallangbind_get_next_component(c,comp);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icallangbind_get_next_component. Expected icalcomponentPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (icalcomponent *)icallangbind_get_next_component(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"icalcomponentPtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icallangbind_property_eval_string) {
+
+ char * _result;
+ icalproperty * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icallangbind_property_eval_string(prop,sep);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,(char *) 0 )) {
+ croak("Type error in argument 1 of icallangbind_property_eval_string. Expected icalpropertyPtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (char *)icallangbind_property_eval_string(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_from_timet) {
+
+ struct icaltimetype * _result;
+ int _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_from_timet(v,is_date);");
+ _arg0 = (int )SvIV(ST(0));
+ _arg1 = (int )SvIV(ST(1));
+ _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype ));
+ *(_result) = icaltime_from_timet(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_as_timet) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_as_timet(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_as_timet. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltime_as_timet(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_as_ical_string) {
+
+ char * _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_as_ical_string(tt);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_as_ical_string. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icaltime_as_ical_string(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_from_string) {
+
+ struct icaltimetype * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_from_string(str);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype ));
+ *(_result) = icaltime_from_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_utc_offset) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_utc_offset(tt,tzid);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_utc_offset. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (int )icaltime_utc_offset(*_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_as_utc) {
+
+ struct icaltimetype * _result;
+ struct icaltimetype * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_as_utc(tt,tzid);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_as_utc. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype ));
+ *(_result) = icaltime_as_utc(*_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_as_zone) {
+
+ struct icaltimetype * _result;
+ struct icaltimetype * _arg0;
+ char * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_as_zone(tt,tzid);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_as_zone. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (char *) SvPV(ST(1),na);
+ _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype ));
+ *(_result) = icaltime_as_zone(*_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_null_time) {
+
+ struct icaltimetype * _result;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 0) || (items > 0))
+ croak("Usage: icaltime_null_time();");
+ _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype ));
+ *(_result) = icaltime_null_time();
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_is_null_time) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_is_null_time(t);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_is_null_time. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltime_is_null_time(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_is_valid_time) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_is_valid_time(t);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_is_valid_time. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltime_is_valid_time(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_normalize) {
+
+ struct icaltimetype * _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_normalize(t);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_normalize. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype ));
+ *(_result) = icaltime_normalize(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_day_of_year) {
+
+ short _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_day_of_year(t);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_day_of_year. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (short )icaltime_day_of_year(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_from_day_of_year) {
+
+ struct icaltimetype * _result;
+ short _arg0;
+ short _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_from_day_of_year(doy,year);");
+ _arg0 = (short )SvIV(ST(0));
+ _arg1 = (short )SvIV(ST(1));
+ _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype ));
+ *(_result) = icaltime_from_day_of_year(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_day_of_week) {
+
+ short _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_day_of_week(t);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_day_of_week. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (short )icaltime_day_of_week(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_start_doy_of_week) {
+
+ short _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_start_doy_of_week(t);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_start_doy_of_week. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (short )icaltime_start_doy_of_week(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_as_ctime) {
+
+ char * _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_as_ctime(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_as_ctime. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icaltime_as_ctime(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_week_number) {
+
+ short _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltime_week_number(t);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_week_number. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (short )icaltime_week_number(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_compare) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ struct icaltimetype * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_compare(a,b);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_compare. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) {
+ croak("Type error in argument 2 of icaltime_compare. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltime_compare(*_arg0,*_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_compare_date_only) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ struct icaltimetype * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_compare_date_only(a,b);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_compare_date_only. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) {
+ croak("Type error in argument 2 of icaltime_compare_date_only. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltime_compare_date_only(*_arg0,*_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_days_in_month) {
+
+ short _result;
+ short _arg0;
+ short _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_days_in_month(month,year);");
+ _arg0 = (short )SvIV(ST(0));
+ _arg1 = (short )SvIV(ST(1));
+ _result = (short )icaltime_days_in_month(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaldurationtype_from_int) {
+
+ struct icaldurationtype * _result;
+ int _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_from_int(t);");
+ _arg0 = (int )SvIV(ST(0));
+ _result = (struct icaldurationtype *) malloc(sizeof(struct icaldurationtype ));
+ *(_result) = icaldurationtype_from_int(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaldurationtype_from_string) {
+
+ struct icaldurationtype * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_from_string(char *);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (struct icaldurationtype *) malloc(sizeof(struct icaldurationtype ));
+ *(_result) = icaldurationtype_from_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaldurationtype_as_int) {
+
+ int _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_as_int(duration);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_as_int. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaldurationtype_as_int(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaldurationtype_as_ical_string) {
+
+ char * _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_as_ical_string(d);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_as_ical_string. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icaldurationtype_as_ical_string(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaldurationtype_null_duration) {
+
+ struct icaldurationtype * _result;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 0) || (items > 0))
+ croak("Usage: icaldurationtype_null_duration();");
+ _result = (struct icaldurationtype *) malloc(sizeof(struct icaldurationtype ));
+ *(_result) = icaldurationtype_null_duration();
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaldurationtype_is_null_duration) {
+
+ int _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_is_null_duration(d);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_is_null_duration. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaldurationtype_is_null_duration(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_add) {
+
+ struct icaltimetype * _result;
+ struct icaltimetype * _arg0;
+ struct icaldurationtype * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_add(t,d);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_add. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 2 of icaltime_add. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaltimetype *) malloc(sizeof(struct icaltimetype ));
+ *(_result) = icaltime_add(*_arg0,*_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icaltime_subtract) {
+
+ struct icaldurationtype * _result;
+ struct icaltimetype * _arg0;
+ struct icaltimetype * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltime_subtract(t1,t2);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltime_subtract. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) {
+ croak("Type error in argument 2 of icaltime_subtract. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaldurationtype *) malloc(sizeof(struct icaldurationtype ));
+ *(_result) = icaltime_subtract(*_arg0,*_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalperiodtype_from_string) {
+
+ struct icalperiodtype * _result;
+ char * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalperiodtype_from_string(str);");
+ _arg0 = (char *) SvPV(ST(0),na);
+ _result = (struct icalperiodtype *) malloc(sizeof(struct icalperiodtype ));
+ *(_result) = icalperiodtype_from_string(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icalperiodtypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalperiodtype_as_ical_string) {
+
+ char * _result;
+ struct icalperiodtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalperiodtype_as_ical_string(p);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_as_ical_string. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (char *)icalperiodtype_as_ical_string(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setpv((SV*)ST(argvi++),(char *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalperiodtype_null_period) {
+
+ struct icalperiodtype * _result;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 0) || (items > 0))
+ croak("Usage: icalperiodtype_null_period();");
+ _result = (struct icalperiodtype *) malloc(sizeof(struct icalperiodtype ));
+ *(_result) = icalperiodtype_null_period();
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icalperiodtypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalperiodtype_is_null_period) {
+
+ int _result;
+ struct icalperiodtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalperiodtype_is_null_period(p);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_is_null_period. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icalperiodtype_is_null_period(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_icalperiodtype_is_valid_period) {
+
+ int _result;
+ struct icalperiodtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalperiodtype_is_valid_period(p);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_is_valid_period. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icalperiodtype_is_valid_period(*_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_year_set(_swigobj,_swigval) (_swigobj->year = _swigval,_swigval)
+XS(_wrap_icaltimetype_year_set) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltimetype_year_set(struct icaltimetype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_year_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaltimetype_year_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_year_get(_swigobj) ((int ) _swigobj->year)
+XS(_wrap_icaltimetype_year_get) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltimetype_year_get(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_year_get. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltimetype_year_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_month_set(_swigobj,_swigval) (_swigobj->month = _swigval,_swigval)
+XS(_wrap_icaltimetype_month_set) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltimetype_month_set(struct icaltimetype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_month_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaltimetype_month_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_month_get(_swigobj) ((int ) _swigobj->month)
+XS(_wrap_icaltimetype_month_get) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltimetype_month_get(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_month_get. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltimetype_month_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_day_set(_swigobj,_swigval) (_swigobj->day = _swigval,_swigval)
+XS(_wrap_icaltimetype_day_set) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltimetype_day_set(struct icaltimetype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_day_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaltimetype_day_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_day_get(_swigobj) ((int ) _swigobj->day)
+XS(_wrap_icaltimetype_day_get) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltimetype_day_get(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_day_get. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltimetype_day_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_hour_set(_swigobj,_swigval) (_swigobj->hour = _swigval,_swigval)
+XS(_wrap_icaltimetype_hour_set) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltimetype_hour_set(struct icaltimetype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_hour_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaltimetype_hour_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_hour_get(_swigobj) ((int ) _swigobj->hour)
+XS(_wrap_icaltimetype_hour_get) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltimetype_hour_get(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_hour_get. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltimetype_hour_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_minute_set(_swigobj,_swigval) (_swigobj->minute = _swigval,_swigval)
+XS(_wrap_icaltimetype_minute_set) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltimetype_minute_set(struct icaltimetype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_minute_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaltimetype_minute_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_minute_get(_swigobj) ((int ) _swigobj->minute)
+XS(_wrap_icaltimetype_minute_get) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltimetype_minute_get(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_minute_get. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltimetype_minute_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_second_set(_swigobj,_swigval) (_swigobj->second = _swigval,_swigval)
+XS(_wrap_icaltimetype_second_set) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltimetype_second_set(struct icaltimetype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_second_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaltimetype_second_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_second_get(_swigobj) ((int ) _swigobj->second)
+XS(_wrap_icaltimetype_second_get) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltimetype_second_get(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_second_get. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltimetype_second_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_is_utc_set(_swigobj,_swigval) (_swigobj->is_utc = _swigval,_swigval)
+XS(_wrap_icaltimetype_is_utc_set) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltimetype_is_utc_set(struct icaltimetype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_is_utc_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaltimetype_is_utc_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_is_utc_get(_swigobj) ((int ) _swigobj->is_utc)
+XS(_wrap_icaltimetype_is_utc_get) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltimetype_is_utc_get(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_is_utc_get. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltimetype_is_utc_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_is_date_set(_swigobj,_swigval) (_swigobj->is_date = _swigval,_swigval)
+XS(_wrap_icaltimetype_is_date_set) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaltimetype_is_date_set(struct icaltimetype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_is_date_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaltimetype_is_date_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaltimetype_is_date_get(_swigobj) ((int ) _swigobj->is_date)
+XS(_wrap_icaltimetype_is_date_get) {
+
+ int _result;
+ struct icaltimetype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaltimetype_is_date_get(struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaltimetypePtr")) {
+ croak("Type error in argument 1 of icaltimetype_is_date_get. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaltimetype_is_date_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_is_neg_set(_swigobj,_swigval) (_swigobj->is_neg = _swigval,_swigval)
+XS(_wrap_icaldurationtype_is_neg_set) {
+
+ int _result;
+ struct icaldurationtype * _arg0;
+ int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaldurationtype_is_neg_set(struct icaldurationtype *,int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_is_neg_set. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (int )SvIV(ST(1));
+ _result = (int )icaldurationtype_is_neg_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_is_neg_get(_swigobj) ((int ) _swigobj->is_neg)
+XS(_wrap_icaldurationtype_is_neg_get) {
+
+ int _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_is_neg_get(struct icaldurationtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_is_neg_get. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (int )icaldurationtype_is_neg_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_days_set(_swigobj,_swigval) (_swigobj->days = _swigval,_swigval)
+XS(_wrap_icaldurationtype_days_set) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ unsigned int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaldurationtype_days_set(struct icaldurationtype *,unsigned int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_days_set. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (unsigned int )SvIV(ST(1));
+ _result = (unsigned int )icaldurationtype_days_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_days_get(_swigobj) ((unsigned int ) _swigobj->days)
+XS(_wrap_icaldurationtype_days_get) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_days_get(struct icaldurationtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_days_get. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (unsigned int )icaldurationtype_days_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_weeks_set(_swigobj,_swigval) (_swigobj->weeks = _swigval,_swigval)
+XS(_wrap_icaldurationtype_weeks_set) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ unsigned int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaldurationtype_weeks_set(struct icaldurationtype *,unsigned int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_weeks_set. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (unsigned int )SvIV(ST(1));
+ _result = (unsigned int )icaldurationtype_weeks_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_weeks_get(_swigobj) ((unsigned int ) _swigobj->weeks)
+XS(_wrap_icaldurationtype_weeks_get) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_weeks_get(struct icaldurationtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_weeks_get. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (unsigned int )icaldurationtype_weeks_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_hours_set(_swigobj,_swigval) (_swigobj->hours = _swigval,_swigval)
+XS(_wrap_icaldurationtype_hours_set) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ unsigned int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaldurationtype_hours_set(struct icaldurationtype *,unsigned int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_hours_set. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (unsigned int )SvIV(ST(1));
+ _result = (unsigned int )icaldurationtype_hours_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_hours_get(_swigobj) ((unsigned int ) _swigobj->hours)
+XS(_wrap_icaldurationtype_hours_get) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_hours_get(struct icaldurationtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_hours_get. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (unsigned int )icaldurationtype_hours_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_minutes_set(_swigobj,_swigval) (_swigobj->minutes = _swigval,_swigval)
+XS(_wrap_icaldurationtype_minutes_set) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ unsigned int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaldurationtype_minutes_set(struct icaldurationtype *,unsigned int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_minutes_set. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (unsigned int )SvIV(ST(1));
+ _result = (unsigned int )icaldurationtype_minutes_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_minutes_get(_swigobj) ((unsigned int ) _swigobj->minutes)
+XS(_wrap_icaldurationtype_minutes_get) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_minutes_get(struct icaldurationtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_minutes_get. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (unsigned int )icaldurationtype_minutes_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_seconds_set(_swigobj,_swigval) (_swigobj->seconds = _swigval,_swigval)
+XS(_wrap_icaldurationtype_seconds_set) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ unsigned int _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icaldurationtype_seconds_set(struct icaldurationtype *,unsigned int );");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_seconds_set. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _arg1 = (unsigned int )SvIV(ST(1));
+ _result = (unsigned int )icaldurationtype_seconds_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icaldurationtype_seconds_get(_swigobj) ((unsigned int ) _swigobj->seconds)
+XS(_wrap_icaldurationtype_seconds_get) {
+
+ unsigned int _result;
+ struct icaldurationtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icaldurationtype_seconds_get(struct icaldurationtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 1 of icaldurationtype_seconds_get. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (unsigned int )icaldurationtype_seconds_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setiv(ST(argvi++),(IV) _result);
+ XSRETURN(argvi);
+}
+
+#define icalperiodtype_start_set(_swigobj,_swigval) (_swigobj->start = *(_swigval),_swigval)
+XS(_wrap_icalperiodtype_start_set) {
+
+ struct icaltimetype * _result;
+ struct icalperiodtype * _arg0;
+ struct icaltimetype * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalperiodtype_start_set(struct icalperiodtype *,struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_start_set. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) {
+ croak("Type error in argument 2 of icalperiodtype_start_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaltimetype *)icalperiodtype_start_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+#define icalperiodtype_start_get(_swigobj) (&_swigobj->start)
+XS(_wrap_icalperiodtype_start_get) {
+
+ struct icaltimetype * _result;
+ struct icalperiodtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalperiodtype_start_get(struct icalperiodtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_start_get. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaltimetype *)icalperiodtype_start_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+#define icalperiodtype_end_set(_swigobj,_swigval) (_swigobj->end = *(_swigval),_swigval)
+XS(_wrap_icalperiodtype_end_set) {
+
+ struct icaltimetype * _result;
+ struct icalperiodtype * _arg0;
+ struct icaltimetype * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalperiodtype_end_set(struct icalperiodtype *,struct icaltimetype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_end_set. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaltimetypePtr")) {
+ croak("Type error in argument 2 of icalperiodtype_end_set. Expected struct icaltimetypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaltimetype *)icalperiodtype_end_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+#define icalperiodtype_end_get(_swigobj) (&_swigobj->end)
+XS(_wrap_icalperiodtype_end_get) {
+
+ struct icaltimetype * _result;
+ struct icalperiodtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalperiodtype_end_get(struct icalperiodtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_end_get. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaltimetype *)icalperiodtype_end_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaltimetypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+#define icalperiodtype_duration_set(_swigobj,_swigval) (_swigobj->duration = *(_swigval),_swigval)
+XS(_wrap_icalperiodtype_duration_set) {
+
+ struct icaldurationtype * _result;
+ struct icalperiodtype * _arg0;
+ struct icaldurationtype * _arg1;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 2) || (items > 2))
+ croak("Usage: icalperiodtype_duration_set(struct icalperiodtype *,struct icaldurationtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_duration_set. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ if (SWIG_GetPtr(ST(1),(void **) &_arg1,"struct icaldurationtypePtr")) {
+ croak("Type error in argument 2 of icalperiodtype_duration_set. Expected struct icaldurationtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaldurationtype *)icalperiodtype_duration_set(_arg0,_arg1);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+#define icalperiodtype_duration_get(_swigobj) (&_swigobj->duration)
+XS(_wrap_icalperiodtype_duration_get) {
+
+ struct icaldurationtype * _result;
+ struct icalperiodtype * _arg0;
+ int argvi = 0;
+ dXSARGS ;
+
+ cv = cv;
+ if ((items < 1) || (items > 1))
+ croak("Usage: icalperiodtype_duration_get(struct icalperiodtype *);");
+ if (SWIG_GetPtr(ST(0),(void **) &_arg0,"struct icalperiodtypePtr")) {
+ croak("Type error in argument 1 of icalperiodtype_duration_get. Expected struct icalperiodtypePtr.");
+ XSRETURN(1);
+ }
+ _result = (struct icaldurationtype *)icalperiodtype_duration_get(_arg0);
+ ST(argvi) = sv_newmortal();
+ sv_setref_pv(ST(argvi++),"struct icaldurationtypePtr", (void *) _result);
+ XSRETURN(argvi);
+}
+
+XS(_wrap_perl5_Net__ICal__Libical_var_init) {
+ dXSARGS;
+ SV *sv;
+ cv = cv; items = items;
+ swig_setiv("ICAL_BADARG_ERROR", (long) ICAL_BADARG_ERROR);
+ swig_setiv("ICAL_NEWFAILED_ERROR", (long) ICAL_NEWFAILED_ERROR);
+ swig_setiv("ICAL_MALFORMEDDATA_ERROR", (long) ICAL_MALFORMEDDATA_ERROR);
+ swig_setiv("ICAL_PARSE_ERROR", (long) ICAL_PARSE_ERROR);
+ swig_setiv("ICAL_INTERNAL_ERROR", (long) ICAL_INTERNAL_ERROR);
+ swig_setiv("ICAL_FILE_ERROR", (long) ICAL_FILE_ERROR);
+ swig_setiv("ICAL_ALLOCATION_ERROR", (long) ICAL_ALLOCATION_ERROR);
+ swig_setiv("ICAL_USAGE_ERROR", (long) ICAL_USAGE_ERROR);
+ swig_setiv("ICAL_NO_ERROR", (long) ICAL_NO_ERROR);
+ swig_setiv("ICAL_UNKNOWN_ERROR", (long) ICAL_UNKNOWN_ERROR);
+ swig_setiv("ICAL_ERROR_FATAL", (long) ICAL_ERROR_FATAL);
+ swig_setiv("ICAL_ERROR_NONFATAL", (long) ICAL_ERROR_NONFATAL);
+ swig_setiv("ICAL_ERROR_DEFAULT", (long) ICAL_ERROR_DEFAULT);
+ swig_setiv("ICAL_ERROR_UNKNOWN", (long) ICAL_ERROR_UNKNOWN);
+ swig_setpv("icaltimetype_zone", "icaltimetype::zone");
+ XSRETURN(1);
+}
+#ifdef __cplusplus
+extern "C"
+#endif
+XS(boot_Net__ICal__Libical) {
+ dXSARGS;
+ char *file = __FILE__;
+ cv = cv; items = items;
+ newXS("Net::ICal::Libical::var_Net__ICal__Libical_init", _wrap_perl5_Net__ICal__Libical_var_init, file);
+ newXS("Net::ICal::Libical::icalparser_parse_string", _wrap_icalparser_parse_string, file);
+ newXS("Net::ICal::Libical::icalcomponent_new", _wrap_icalcomponent_new, file);
+ newXS("Net::ICal::Libical::icalcomponent_new_clone", _wrap_icalcomponent_new_clone, file);
+ newXS("Net::ICal::Libical::icalcomponent_new_from_string", _wrap_icalcomponent_new_from_string, file);
+ newXS("Net::ICal::Libical::icalcomponent_as_ical_string", _wrap_icalcomponent_as_ical_string, file);
+ newXS("Net::ICal::Libical::icalcomponent_free", _wrap_icalcomponent_free, file);
+ newXS("Net::ICal::Libical::icalcomponent_count_errors", _wrap_icalcomponent_count_errors, file);
+ newXS("Net::ICal::Libical::icalcomponent_strip_errors", _wrap_icalcomponent_strip_errors, file);
+ newXS("Net::ICal::Libical::icalcomponent_convert_errors", _wrap_icalcomponent_convert_errors, file);
+ newXS("Net::ICal::Libical::icalcomponent_get_current_property", _wrap_icalcomponent_get_current_property, file);
+ newXS("Net::ICal::Libical::icalcomponent_get_first_property", _wrap_icalcomponent_get_first_property, file);
+ newXS("Net::ICal::Libical::icalcomponent_get_next_property", _wrap_icalcomponent_get_next_property, file);
+ newXS("Net::ICal::Libical::icalcomponent_get_current_component", _wrap_icalcomponent_get_current_component, file);
+ newXS("Net::ICal::Libical::icalcomponent_get_first_component", _wrap_icalcomponent_get_first_component, file);
+ newXS("Net::ICal::Libical::icalcomponent_get_next_component", _wrap_icalcomponent_get_next_component, file);
+ newXS("Net::ICal::Libical::icalcomponent_add_property", _wrap_icalcomponent_add_property, file);
+ newXS("Net::ICal::Libical::icalcomponent_remove_property", _wrap_icalcomponent_remove_property, file);
+ newXS("Net::ICal::Libical::icalcomponent_get_parent", _wrap_icalcomponent_get_parent, file);
+ newXS("Net::ICal::Libical::icalcomponent_isa", _wrap_icalcomponent_isa, file);
+ newXS("Net::ICal::Libical::icalrestriction_check", _wrap_icalrestriction_check, file);
+ newXS("Net::ICal::Libical::icalproperty_string_to_kind", _wrap_icalproperty_string_to_kind, file);
+ newXS("Net::ICal::Libical::icalproperty_new", _wrap_icalproperty_new, file);
+ newXS("Net::ICal::Libical::icalproperty_new_from_string", _wrap_icalproperty_new_from_string, file);
+ newXS("Net::ICal::Libical::icalproperty_as_ical_string", _wrap_icalproperty_as_ical_string, file);
+ newXS("Net::ICal::Libical::icalproperty_set_parameter_from_string", _wrap_icalproperty_set_parameter_from_string, file);
+ newXS("Net::ICal::Libical::icalproperty_set_value_from_string", _wrap_icalproperty_set_value_from_string, file);
+ newXS("Net::ICal::Libical::icalproperty_get_value_as_string", _wrap_icalproperty_get_value_as_string, file);
+ newXS("Net::ICal::Libical::icalproperty_get_parameter_as_string", _wrap_icalproperty_get_parameter_as_string, file);
+ newXS("Net::ICal::Libical::icalproperty_get_parent", _wrap_icalproperty_get_parent, file);
+ newXS("Net::ICal::Libical::icalerror_set_error_state", _wrap_icalerror_set_error_state, file);
+ newXS("Net::ICal::Libical::icalerror_get_error_state", _wrap_icalerror_get_error_state, file);
+ newXS("Net::ICal::Libical::icalenum_property_kind_to_string", _wrap_icalenum_property_kind_to_string, file);
+ newXS("Net::ICal::Libical::icalenum_string_to_property_kind", _wrap_icalenum_string_to_property_kind, file);
+ newXS("Net::ICal::Libical::icalenum_value_kind_to_string", _wrap_icalenum_value_kind_to_string, file);
+ newXS("Net::ICal::Libical::icalenum_parameter_kind_to_string", _wrap_icalenum_parameter_kind_to_string, file);
+ newXS("Net::ICal::Libical::icalenum_string_to_parameter_kind", _wrap_icalenum_string_to_parameter_kind, file);
+ newXS("Net::ICal::Libical::icalenum_component_kind_to_string", _wrap_icalenum_component_kind_to_string, file);
+ newXS("Net::ICal::Libical::icalenum_string_to_component_kind", _wrap_icalenum_string_to_component_kind, file);
+ newXS("Net::ICal::Libical::icalenum_property_kind_to_value_kind", _wrap_icalenum_property_kind_to_value_kind, file);
+ newXS("Net::ICal::Libical::icallangbind_new_array", _wrap_icallangbind_new_array, file);
+ newXS("Net::ICal::Libical::icallangbind_free_array", _wrap_icallangbind_free_array, file);
+ newXS("Net::ICal::Libical::icallangbind_access_array", _wrap_icallangbind_access_array, file);
+ newXS("Net::ICal::Libical::icalrecur_expand_recurrence", _wrap_icalrecur_expand_recurrence, file);
+ newXS("Net::ICal::Libical::icallangbind_get_first_property", _wrap_icallangbind_get_first_property, file);
+ newXS("Net::ICal::Libical::icallangbind_get_next_property", _wrap_icallangbind_get_next_property, file);
+ newXS("Net::ICal::Libical::icallangbind_get_first_component", _wrap_icallangbind_get_first_component, file);
+ newXS("Net::ICal::Libical::icallangbind_get_next_component", _wrap_icallangbind_get_next_component, file);
+ newXS("Net::ICal::Libical::icallangbind_property_eval_string", _wrap_icallangbind_property_eval_string, file);
+ newXS("Net::ICal::Libical::icaltime_from_timet", _wrap_icaltime_from_timet, file);
+ newXS("Net::ICal::Libical::icaltime_as_timet", _wrap_icaltime_as_timet, file);
+ newXS("Net::ICal::Libical::icaltime_as_ical_string", _wrap_icaltime_as_ical_string, file);
+ newXS("Net::ICal::Libical::icaltime_from_string", _wrap_icaltime_from_string, file);
+ newXS("Net::ICal::Libical::icaltime_utc_offset", _wrap_icaltime_utc_offset, file);
+ newXS("Net::ICal::Libical::icaltime_as_utc", _wrap_icaltime_as_utc, file);
+ newXS("Net::ICal::Libical::icaltime_as_zone", _wrap_icaltime_as_zone, file);
+ newXS("Net::ICal::Libical::icaltime_null_time", _wrap_icaltime_null_time, file);
+ newXS("Net::ICal::Libical::icaltime_is_null_time", _wrap_icaltime_is_null_time, file);
+ newXS("Net::ICal::Libical::icaltime_is_valid_time", _wrap_icaltime_is_valid_time, file);
+ newXS("Net::ICal::Libical::icaltime_normalize", _wrap_icaltime_normalize, file);
+ newXS("Net::ICal::Libical::icaltime_day_of_year", _wrap_icaltime_day_of_year, file);
+ newXS("Net::ICal::Libical::icaltime_from_day_of_year", _wrap_icaltime_from_day_of_year, file);
+ newXS("Net::ICal::Libical::icaltime_day_of_week", _wrap_icaltime_day_of_week, file);
+ newXS("Net::ICal::Libical::icaltime_start_doy_of_week", _wrap_icaltime_start_doy_of_week, file);
+ newXS("Net::ICal::Libical::icaltime_as_ctime", _wrap_icaltime_as_ctime, file);
+ newXS("Net::ICal::Libical::icaltime_week_number", _wrap_icaltime_week_number, file);
+ newXS("Net::ICal::Libical::icaltime_compare", _wrap_icaltime_compare, file);
+ newXS("Net::ICal::Libical::icaltime_compare_date_only", _wrap_icaltime_compare_date_only, file);
+ newXS("Net::ICal::Libical::icaltime_days_in_month", _wrap_icaltime_days_in_month, file);
+ newXS("Net::ICal::Libical::icaldurationtype_from_int", _wrap_icaldurationtype_from_int, file);
+ newXS("Net::ICal::Libical::icaldurationtype_from_string", _wrap_icaldurationtype_from_string, file);
+ newXS("Net::ICal::Libical::icaldurationtype_as_int", _wrap_icaldurationtype_as_int, file);
+ newXS("Net::ICal::Libical::icaldurationtype_as_ical_string", _wrap_icaldurationtype_as_ical_string, file);
+ newXS("Net::ICal::Libical::icaldurationtype_null_duration", _wrap_icaldurationtype_null_duration, file);
+ newXS("Net::ICal::Libical::icaldurationtype_is_null_duration", _wrap_icaldurationtype_is_null_duration, file);
+ newXS("Net::ICal::Libical::icaltime_add", _wrap_icaltime_add, file);
+ newXS("Net::ICal::Libical::icaltime_subtract", _wrap_icaltime_subtract, file);
+ newXS("Net::ICal::Libical::icalperiodtype_from_string", _wrap_icalperiodtype_from_string, file);
+ newXS("Net::ICal::Libical::icalperiodtype_as_ical_string", _wrap_icalperiodtype_as_ical_string, file);
+ newXS("Net::ICal::Libical::icalperiodtype_null_period", _wrap_icalperiodtype_null_period, file);
+ newXS("Net::ICal::Libical::icalperiodtype_is_null_period", _wrap_icalperiodtype_is_null_period, file);
+ newXS("Net::ICal::Libical::icalperiodtype_is_valid_period", _wrap_icalperiodtype_is_valid_period, file);
+ newXS("Net::ICal::Libical::icaltimetype_year_set", _wrap_icaltimetype_year_set, file);
+ newXS("Net::ICal::Libical::icaltimetype_year_get", _wrap_icaltimetype_year_get, file);
+ newXS("Net::ICal::Libical::icaltimetype_month_set", _wrap_icaltimetype_month_set, file);
+ newXS("Net::ICal::Libical::icaltimetype_month_get", _wrap_icaltimetype_month_get, file);
+ newXS("Net::ICal::Libical::icaltimetype_day_set", _wrap_icaltimetype_day_set, file);
+ newXS("Net::ICal::Libical::icaltimetype_day_get", _wrap_icaltimetype_day_get, file);
+ newXS("Net::ICal::Libical::icaltimetype_hour_set", _wrap_icaltimetype_hour_set, file);
+ newXS("Net::ICal::Libical::icaltimetype_hour_get", _wrap_icaltimetype_hour_get, file);
+ newXS("Net::ICal::Libical::icaltimetype_minute_set", _wrap_icaltimetype_minute_set, file);
+ newXS("Net::ICal::Libical::icaltimetype_minute_get", _wrap_icaltimetype_minute_get, file);
+ newXS("Net::ICal::Libical::icaltimetype_second_set", _wrap_icaltimetype_second_set, file);
+ newXS("Net::ICal::Libical::icaltimetype_second_get", _wrap_icaltimetype_second_get, file);
+ newXS("Net::ICal::Libical::icaltimetype_is_utc_set", _wrap_icaltimetype_is_utc_set, file);
+ newXS("Net::ICal::Libical::icaltimetype_is_utc_get", _wrap_icaltimetype_is_utc_get, file);
+ newXS("Net::ICal::Libical::icaltimetype_is_date_set", _wrap_icaltimetype_is_date_set, file);
+ newXS("Net::ICal::Libical::icaltimetype_is_date_get", _wrap_icaltimetype_is_date_get, file);
+ newXS("Net::ICal::Libical::icaldurationtype_is_neg_set", _wrap_icaldurationtype_is_neg_set, file);
+ newXS("Net::ICal::Libical::icaldurationtype_is_neg_get", _wrap_icaldurationtype_is_neg_get, file);
+ newXS("Net::ICal::Libical::icaldurationtype_days_set", _wrap_icaldurationtype_days_set, file);
+ newXS("Net::ICal::Libical::icaldurationtype_days_get", _wrap_icaldurationtype_days_get, file);
+ newXS("Net::ICal::Libical::icaldurationtype_weeks_set", _wrap_icaldurationtype_weeks_set, file);
+ newXS("Net::ICal::Libical::icaldurationtype_weeks_get", _wrap_icaldurationtype_weeks_get, file);
+ newXS("Net::ICal::Libical::icaldurationtype_hours_set", _wrap_icaldurationtype_hours_set, file);
+ newXS("Net::ICal::Libical::icaldurationtype_hours_get", _wrap_icaldurationtype_hours_get, file);
+ newXS("Net::ICal::Libical::icaldurationtype_minutes_set", _wrap_icaldurationtype_minutes_set, file);
+ newXS("Net::ICal::Libical::icaldurationtype_minutes_get", _wrap_icaldurationtype_minutes_get, file);
+ newXS("Net::ICal::Libical::icaldurationtype_seconds_set", _wrap_icaldurationtype_seconds_set, file);
+ newXS("Net::ICal::Libical::icaldurationtype_seconds_get", _wrap_icaldurationtype_seconds_get, file);
+ newXS("Net::ICal::Libical::icalperiodtype_start_set", _wrap_icalperiodtype_start_set, file);
+ newXS("Net::ICal::Libical::icalperiodtype_start_get", _wrap_icalperiodtype_start_get, file);
+ newXS("Net::ICal::Libical::icalperiodtype_end_set", _wrap_icalperiodtype_end_set, file);
+ newXS("Net::ICal::Libical::icalperiodtype_end_get", _wrap_icalperiodtype_end_get, file);
+ newXS("Net::ICal::Libical::icalperiodtype_duration_set", _wrap_icalperiodtype_duration_set, file);
+ newXS("Net::ICal::Libical::icalperiodtype_duration_get", _wrap_icalperiodtype_duration_get, file);
+/*
+ * These are the pointer type-equivalency mappings.
+ * (Used by the SWIG pointer type-checker).
+ */
+ SWIG_RegisterMapping("unsigned short","short",0);
+ SWIG_RegisterMapping("struct icaldurationtype","icaldurationtype",0);
+ SWIG_RegisterMapping("icalperiodtype","struct icalperiodtype",0);
+ SWIG_RegisterMapping("long","unsigned long",0);
+ SWIG_RegisterMapping("long","signed long",0);
+ SWIG_RegisterMapping("struct icaltimetype","icaltimetype",0);
+ SWIG_RegisterMapping("icaldurationtype","struct icaldurationtype",0);
+ SWIG_RegisterMapping("signed short","short",0);
+ SWIG_RegisterMapping("struct icalperiodtype","icalperiodtype",0);
+ SWIG_RegisterMapping("signed int","int",0);
+ SWIG_RegisterMapping("short","unsigned short",0);
+ SWIG_RegisterMapping("short","signed short",0);
+ SWIG_RegisterMapping("unsigned long","long",0);
+ SWIG_RegisterMapping("int","unsigned int",0);
+ SWIG_RegisterMapping("int","signed int",0);
+ SWIG_RegisterMapping("unsigned int","int",0);
+ SWIG_RegisterMapping("icaltimetype","struct icaltimetype",0);
+ SWIG_RegisterMapping("signed long","long",0);
+ ST(0) = &sv_yes;
+ XSRETURN(1);
+}
diff --git a/libical/src/Net-ICal-Libical/netical_wrap.doc b/libical/src/Net-ICal-Libical/netical_wrap.doc
new file mode 100644
index 0000000000..41616c00da
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/netical_wrap.doc
@@ -0,0 +1,393 @@
+netical_wrap.c
+
+[ Module : Net__ICal__Libical, Package : Net::ICal::Libical ]
+
+
+icalparser_parse_string(str);
+ [ returns icalcomponent * ]
+
+icalcomponent_new(kind);
+ [ returns icalcomponent * ]
+
+icalcomponent_new_clone(component);
+ [ returns icalcomponent * ]
+
+icalcomponent_new_from_string(str);
+ [ returns icalcomponent * ]
+
+icalcomponent_as_ical_string(component);
+ [ returns char * ]
+
+icalcomponent_free(component);
+ [ returns void ]
+
+icalcomponent_count_errors(component);
+ [ returns int ]
+
+icalcomponent_strip_errors(component);
+ [ returns void ]
+
+icalcomponent_convert_errors(component);
+ [ returns void ]
+
+icalcomponent_get_current_property(component);
+ [ returns icalproperty * ]
+
+icalcomponent_get_first_property(component,kind);
+ [ returns icalproperty * ]
+
+icalcomponent_get_next_property(component,kind);
+ [ returns icalproperty * ]
+
+icalcomponent_get_current_component(component);
+ [ returns icalcomponent * ]
+
+icalcomponent_get_first_component(component,kind);
+ [ returns icalcomponent * ]
+
+icalcomponent_get_next_component(component,kind);
+ [ returns icalcomponent * ]
+
+icalcomponent_add_property(component,property);
+ [ returns void ]
+
+icalcomponent_remove_property(component,property);
+ [ returns void ]
+
+icalcomponent_get_parent(component);
+ [ returns icalcomponent * ]
+
+icalcomponent_isa(component);
+ [ returns icalcomponent_kind ]
+
+icalrestriction_check(comp);
+ [ returns int ]
+
+icalproperty_string_to_kind(string);
+ [ returns int ]
+
+icalproperty_new(kind);
+ [ returns icalproperty * ]
+
+icalproperty_new_from_string(str);
+ [ returns icalproperty * ]
+
+icalproperty_as_ical_string(prop);
+ [ returns char * ]
+
+icalproperty_set_parameter_from_string(prop,name,value);
+ [ returns void ]
+
+icalproperty_set_value_from_string(prop,value,kind);
+ [ returns void ]
+
+icalproperty_get_value_as_string(prop);
+ [ returns char * ]
+
+icalproperty_get_parameter_as_string(prop,name);
+ [ returns char * ]
+
+icalproperty_get_parent(property);
+ [ returns icalcomponent * ]
+
+$ICAL_BADARG_ERROR = ICAL_BADARG_ERROR
+ [ Constant: int ]
+
+$ICAL_NEWFAILED_ERROR = ICAL_NEWFAILED_ERROR
+ [ Constant: int ]
+
+$ICAL_MALFORMEDDATA_ERROR = ICAL_MALFORMEDDATA_ERROR
+ [ Constant: int ]
+
+$ICAL_PARSE_ERROR = ICAL_PARSE_ERROR
+ [ Constant: int ]
+
+$ICAL_INTERNAL_ERROR = ICAL_INTERNAL_ERROR
+ [ Constant: int ]
+ Like assert --internal consist. prob
+
+$ICAL_FILE_ERROR = ICAL_FILE_ERROR
+ [ Constant: int ]
+
+$ICAL_ALLOCATION_ERROR = ICAL_ALLOCATION_ERROR
+ [ Constant: int ]
+
+$ICAL_USAGE_ERROR = ICAL_USAGE_ERROR
+ [ Constant: int ]
+
+$ICAL_NO_ERROR = ICAL_NO_ERROR
+ [ Constant: int ]
+ Used for problems in input to icalerror_strerror()
+
+$ICAL_UNKNOWN_ERROR = ICAL_UNKNOWN_ERROR
+ [ Constant: int ]
+
+$ICAL_ERROR_FATAL = ICAL_ERROR_FATAL
+ [ Constant: int ]
+ Not fata
+
+$ICAL_ERROR_NONFATAL = ICAL_ERROR_NONFATAL
+ [ Constant: int ]
+ Fatal
+
+$ICAL_ERROR_DEFAULT = ICAL_ERROR_DEFAULT
+ [ Constant: int ]
+ Use the value of icalerror_errors_are_fatal Asked state for an unknown
+ error type
+
+$ICAL_ERROR_UNKNOWN = ICAL_ERROR_UNKNOWN
+ [ Constant: int ]
+
+icalerror_set_error_state(error,icalerrorstate );
+ [ returns void ]
+
+icalerror_get_error_state(error);
+ [ returns icalerrorstate ]
+
+icalenum_property_kind_to_string(kind);
+ [ returns char * ]
+
+icalenum_string_to_property_kind(string);
+ [ returns icalproperty_kind ]
+
+icalenum_value_kind_to_string(kind);
+ [ returns char * ]
+ icalvalue_kind icalenum_value_kind_by_prop(icalproperty_kind kind);
+
+
+icalenum_parameter_kind_to_string(kind);
+ [ returns char * ]
+
+icalenum_string_to_parameter_kind(string);
+ [ returns icalparameter_kind ]
+
+icalenum_component_kind_to_string(kind);
+ [ returns char * ]
+
+icalenum_string_to_component_kind(string);
+ [ returns icalcomponent_kind ]
+
+icalenum_property_kind_to_value_kind(kind);
+ [ returns icalvalue_kind ]
+
+icallangbind_new_array(size);
+ [ returns int * ]
+
+icallangbind_free_array(array);
+ [ returns void ]
+
+icallangbind_access_array(array,index);
+ [ returns int ]
+
+icalrecur_expand_recurrence(rule,start,count,array);
+ [ returns int ]
+
+icallangbind_get_first_property(c,prop);
+ [ returns icalproperty * ]
+
+icallangbind_get_next_property(c,prop);
+ [ returns icalproperty * ]
+
+icallangbind_get_first_component(c,comp);
+ [ returns icalcomponent * ]
+
+icallangbind_get_next_component(c,comp);
+ [ returns icalcomponent * ]
+
+icallangbind_property_eval_string(prop,sep);
+ [ returns char * ]
+
+1. class icaltimetype
+======================
+[ created from struct icaltimetype ]
+
+
+icaltimetype_year_set(struct icaltimetype *,int );
+icaltimetype_year_get(struct icaltimetype *);
+ [ Member data: returns int ]
+
+icaltimetype_month_set(struct icaltimetype *,int );
+icaltimetype_month_get(struct icaltimetype *);
+ [ Member data: returns int ]
+
+icaltimetype_day_set(struct icaltimetype *,int );
+icaltimetype_day_get(struct icaltimetype *);
+ [ Member data: returns int ]
+
+icaltimetype_hour_set(struct icaltimetype *,int );
+icaltimetype_hour_get(struct icaltimetype *);
+ [ Member data: returns int ]
+
+icaltimetype_minute_set(struct icaltimetype *,int );
+icaltimetype_minute_get(struct icaltimetype *);
+ [ Member data: returns int ]
+
+icaltimetype_second_set(struct icaltimetype *,int );
+icaltimetype_second_get(struct icaltimetype *);
+ [ Member data: returns int ]
+
+icaltimetype_is_utc_set(struct icaltimetype *,int );
+icaltimetype_is_utc_get(struct icaltimetype *);
+ [ Member data: returns int ]
+ 1-> time is in UTC timezone
+
+icaltimetype_is_date_set(struct icaltimetype *,int );
+icaltimetype_is_date_get(struct icaltimetype *);
+ [ Member data: returns int ]
+ 1 -> interpret this as date.
+
+$icaltimetype_zone = icaltimetype::zone
+ [ Constant: char * ]
+ Ptr to Olsen placename. Libical does not own mem
+
+----------
+
+icaltime_from_timet(v,is_date);
+ [ returns struct icaltimetype ]
+
+icaltime_as_timet(struct icaltimetype *);
+ [ returns int ]
+
+icaltime_as_ical_string(tt);
+ [ returns char * ]
+
+icaltime_from_string(str);
+ [ returns struct icaltimetype ]
+
+icaltime_utc_offset(tt,tzid);
+ [ returns int ]
+
+icaltime_as_utc(tt,tzid);
+ [ returns struct icaltimetype ]
+
+icaltime_as_zone(tt,tzid);
+ [ returns struct icaltimetype ]
+
+icaltime_null_time();
+ [ returns struct icaltimetype ]
+
+icaltime_is_null_time(t);
+ [ returns int ]
+
+icaltime_is_valid_time(t);
+ [ returns int ]
+
+icaltime_normalize(t);
+ [ returns struct icaltimetype ]
+
+icaltime_day_of_year(t);
+ [ returns short ]
+
+icaltime_from_day_of_year(doy,year);
+ [ returns struct icaltimetype ]
+
+icaltime_day_of_week(t);
+ [ returns short ]
+
+icaltime_start_doy_of_week(t);
+ [ returns short ]
+
+icaltime_as_ctime(struct icaltimetype *);
+ [ returns char * ]
+
+icaltime_week_number(t);
+ [ returns short ]
+
+icaltime_compare(a,b);
+ [ returns int ]
+
+icaltime_compare_date_only(a,b);
+ [ returns int ]
+
+icaltime_days_in_month(month,year);
+ [ returns short ]
+
+2. class icaldurationtype
+==========================
+[ created from struct icaldurationtype ]
+
+
+icaldurationtype_is_neg_set(struct icaldurationtype *,int );
+icaldurationtype_is_neg_get(struct icaldurationtype *);
+ [ Member data: returns int ]
+
+icaldurationtype_days_set(struct icaldurationtype *,unsigned int );
+icaldurationtype_days_get(struct icaldurationtype *);
+ [ Member data: returns unsigned int ]
+
+icaldurationtype_weeks_set(struct icaldurationtype *,unsigned int );
+icaldurationtype_weeks_get(struct icaldurationtype *);
+ [ Member data: returns unsigned int ]
+
+icaldurationtype_hours_set(struct icaldurationtype *,unsigned int );
+icaldurationtype_hours_get(struct icaldurationtype *);
+ [ Member data: returns unsigned int ]
+
+icaldurationtype_minutes_set(struct icaldurationtype *,unsigned int );
+icaldurationtype_minutes_get(struct icaldurationtype *);
+ [ Member data: returns unsigned int ]
+
+icaldurationtype_seconds_set(struct icaldurationtype *,unsigned int );
+icaldurationtype_seconds_get(struct icaldurationtype *);
+ [ Member data: returns unsigned int ]
+
+----------
+
+icaldurationtype_from_int(t);
+ [ returns struct icaldurationtype ]
+
+icaldurationtype_from_string(char *);
+ [ returns struct icaldurationtype ]
+
+icaldurationtype_as_int(duration);
+ [ returns int ]
+
+icaldurationtype_as_ical_string(d);
+ [ returns char * ]
+
+icaldurationtype_null_duration();
+ [ returns struct icaldurationtype ]
+
+icaldurationtype_is_null_duration(d);
+ [ returns int ]
+
+icaltime_add(t,d);
+ [ returns struct icaltimetype ]
+
+icaltime_subtract(t1,t2);
+ [ returns struct icaldurationtype ]
+
+3. class icalperiodtype
+========================
+[ created from struct icalperiodtype ]
+
+
+icalperiodtype_start_set(struct icalperiodtype *,struct icaltimetype *);
+icalperiodtype_start_get(struct icalperiodtype *);
+ [ Member data: returns struct icaltimetype * ]
+
+icalperiodtype_end_set(struct icalperiodtype *,struct icaltimetype *);
+icalperiodtype_end_get(struct icalperiodtype *);
+ [ Member data: returns struct icaltimetype * ]
+
+icalperiodtype_duration_set(struct icalperiodtype *,struct icaldurationtype *);
+icalperiodtype_duration_get(struct icalperiodtype *);
+ [ Member data: returns struct icaldurationtype * ]
+
+----------
+
+icalperiodtype_from_string(str);
+ [ returns struct icalperiodtype ]
+
+icalperiodtype_as_ical_string(p);
+ [ returns char * ]
+
+icalperiodtype_null_period();
+ [ returns struct icalperiodtype ]
+
+icalperiodtype_is_null_period(p);
+ [ returns int ]
+
+icalperiodtype_is_valid_period(p);
+ [ returns int ]
+
diff --git a/libical/src/Net-ICal-Libical/test-data/2446.mime b/libical/src/Net-ICal-Libical/test-data/2446.mime
new file mode 100644
index 0000000000..919bfc423f
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test-data/2446.mime
@@ -0,0 +1,3426 @@
+From eric@busboom.org Wed Jan 26 21:46:04 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-0"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-0
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-0
+Content-Type: text/calendar; method=PUBLISH; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :PUBLISH
+PRODID
+ :-//ACME/DesktopCalendar//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :mailto:a@example.com
+DTSTART
+ :19970701T200000Z
+DTSTAMP
+ :19970611T190000Z
+SUMMARY
+ :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+UID
+ :0981234-1234234-23@example.com
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-0--
+
+
+From eric@busboom.org Wed Jan 26 21:46:04 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-1"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-1
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-1
+Content-Type: text/calendar; method=PUBLISH; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :PUBLISH
+VERSION
+ :2.0
+PRODID
+ :-//ACME/DesktopCalendar//EN
+BEGIN:VEVENT
+ORGANIZER
+ :mailto:a@example.com
+DTSTAMP
+ :19970612T190000Z
+DTSTART
+ :19970701T210000Z
+DTEND
+ :19970701T230000Z
+SEQUENCE
+ :1
+UID
+ :0981234-1234234-23@example.com
+SUMMARY
+ :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-1--
+
+
+From eric@busboom.org Wed Jan 26 21:46:04 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-2"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-2
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-2
+Content-Type: text/calendar; method=CANCEL; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :CANCEL
+VERSION
+ :2.0
+PRODID
+ :-//ACME/DesktopCalendar//EN
+BEGIN:VEVENT
+ORGANIZER
+ :mailto:a@example.com
+COMMENT
+ :DUKES forfeit the game
+SEQUENCE
+ :2
+UID
+ :0981234-1234234-23@example.com
+DTSTAMP
+ :19970613T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-2--
+
+
+From eric@busboom.org Wed Jan 26 21:46:04 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-3"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-3
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-3
+Content-Type: text/calendar; method=PUBLISH; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :PUBLISH
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PROPERTY_PARSE_ERROR
+ :Parse error in property name: 'SCALE'
+VERSION
+ :2.0
+BEGIN:VTIMEZONE
+TZID
+ :America-Chicago
+TZURL
+ :http://zones.stds_r_us.net/tz/America-Chicago
+BEGIN:STANDARD
+DTSTART
+ :19671029T020000
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=YEARLY\;BYDAY=-1SU\;BYMONTH=10'
+TZOFFSETFROM
+ :-050000
+TZOFFSETTO
+ :-060000
+TZNAME
+ :CST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART
+ :19870405T020000
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=YEARLY\;BYDAY=1SU\;BYMONTH=4'
+TZOFFSETFROM
+ :-060000
+TZOFFSETTO
+ :-050000
+TZNAME
+ :CDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+ORGANIZER
+ :mailto:a@example.com
+ATTACH
+ :http://www.dukes.com/
+CATEGORIES
+ :SPORTS EVENT
+CATEGORIES
+ :ENTERTAINMENT
+CLASS
+ :PRIVATE
+DESCRIPTION
+ :MIDWAY STADIUM\nBig time game. MUST see.\nExpected duration:2 hours\n
+DTEND
+ ;TZID=America-Chicago
+ :19970701T180000
+DTSTART
+ ;TZID=America-Chicago
+ :19970702T160000
+DTSTAMP
+ :19970614T190000Z
+STATUS
+ :CONFIRMED
+LOCATION
+ ;VALUE=America-Chicago
+ :http://www.midwaystadium.com/
+PRIORITY
+ :2
+RESOURCES
+ :SCOREBOARD
+SEQUENCE
+ :3
+SUMMARY
+ :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+UID
+ :0981234-1234234-23@example.com
+RELATED-TO
+ :0981234-1234234-14@example.com
+BEGIN:VALARM
+TRIGGER
+ :PT2H
+ACTION
+ :DISPLAY
+DESCRIPTION
+ :You should be leaving for the game now.
+END:VALARM
+BEGIN:VALARM
+TRIGGER
+ :PT30M
+ACTION
+ :AUDIO
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-3--
+
+
+From eric@busboom.org Wed Jan 26 21:46:04 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-4"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-4
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-4
+Content-Type: text/calendar; method=PUBLISH; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :PUBLISH
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :mailto:a@example.com
+DTSTAMP
+ :19970614T190000Z
+UID
+ :0981234-1234234-23@example.com
+DTSTART
+ ;VALUE=DATE
+ :19970714
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=YEARLY\;INTERVAL=1'
+SUMMARY
+ : Bastille Day
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-4--
+
+
+From eric@busboom.org Wed Jan 26 21:46:04 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-5"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-5
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-5
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ ;CN=BIG A
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ ;CN=B
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ ;CN=C
+ :Mailto:C@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ ;CN=Hal
+ :Mailto:D@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=FALSE
+ :conf_Big@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=ROOM'
+ATTENDEE
+ ;ROLE=NON-PARTICIPANT
+ ;RSVP=FALSE
+ :Mailto:E@example.com
+DTSTAMP
+ :19970611T190000Z
+DTSTART
+ :19970701T200000Z
+DTEND
+ :19970701T200000Z
+SUMMARY
+ :Conference
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-5--
+
+
+From eric@busboom.org Wed Jan 26 21:46:04 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-6"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-6
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-6
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VEVENT
+ATTENDEE
+ ;PARTSTAT=ACCEPTED
+ :Mailto:B@example.com
+ORGANIZER
+ :MAILTO:A@example.com
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+REQUEST-STATUS
+ :2.0\;Success
+DTSTAMP
+ :19970612T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-6--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-7"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-7
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-7
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ ;CN=Hal
+ :Mailto:D@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;ROLE=NON-PARTICIPANT
+ ;RSVP=FALSE
+ ;CUTYPE=ROOM
+ :Mailto:Conf@example.com
+ATTENDEE
+ ;ROLE=NON-PARTICIPANT
+ ;RSVP=FALSE
+ :Mailto:E@example.com
+DTSTART
+ :19970701T180000Z
+DTEND
+ :19970701T190000Z
+SUMMARY
+ :Phone Conference
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :1
+DTSTAMP
+ :19970613T190000Z
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-7--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951964-26278-8"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951964-26278-8
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951964-26278-8
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+DTSTART
+ :19970701T190000Z
+DTEND
+ :19970701T200000Z
+SUMMARY
+ :Discuss the Merits of the election results
+LOCATION
+ :Green Conference Room
+UID
+ :calsrv.example.com-873970198738777a@example.com
+SEQUENCE
+ :0
+DTSTAMP
+ :19970611T190000Z
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951964-26278-8--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-9"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-9
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-9
+Content-Type: text/calendar; method=COUNTER; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :COUNTER
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+DTSTART
+ :19970701T160000Z
+DTEND
+ :19970701T190000Z
+DTSTAMP
+ :19970612T190000Z
+SUMMARY
+ :Discuss the Merits of the election results
+LOCATION
+ :Green Conference Room
+COMMENT
+ :This time works much better and I think the big conference room is
+ too big
+UID
+ :calsrv.example.com-873970198738777a@example.com
+SEQUENCE
+ :0
+DTSTAMP
+ :19970611T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-9--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-10"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-10
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-10
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+DTSTAMP
+ :19970613T190000Z
+DTSTART
+ :19970701T160000Z
+DTEND
+ :19970701T190000Z
+SUMMARY
+ :Discuss the Merits of the election results - changed to meet B's schedule
+LOCATION
+ :Green Conference Room
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :1
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-10--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-11"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-11
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-11
+Content-Type: text/calendar; method=DECLINECOUNTER; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :DECLINECOUNTER
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+COMMENT
+ :Sorry
+COMMENT
+ : I cannot change this meeting time
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+DTSTAMP
+ :19970614T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-11--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-12"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-12
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-12
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :MAILTO:A@Example.com
+ATTENDEE
+ ;PARTSTAT=DELEGATED
+ ;DELEGATED-TO="Mailto:E@example.com"
+ :Mailto:C@example.com
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+REQUEST-STATUS
+ :2.0\;Success
+DTSTAMP
+ :19970611T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-12--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-13"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-13
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-13
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;PARTSTAT=DELEGATED
+ ;DELEGATED-TO="Mailto:E@example.com"
+ :Mailto:C@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ ;DELEGATED-FROM="Mailto:C@example.com"
+ :Mailto:E@example.com
+DTSTART
+ :19970701T180000Z
+DTEND
+ :19970701T200000Z
+SUMMARY
+ :Phone Conference
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+STATUS
+ :CONFIRMED
+DTSTAMP
+ :19970611T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-13--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-14"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-14
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-14
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :MAILTO:A@Example.com
+ATTENDEE
+ ;PARTSTAT=ACCEPTED
+ ;DELEGATED-FROM="Mailto:C@example.com"
+ :Mailto:E@example.com
+ATTENDEE
+ ;PARTSTAT=DELEGATED
+ ;DELEGATED-TO="Mailto:E@example.com"
+ :Mailto:C@example.com
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+REQUEST-STATUS
+ :2.0\;Success
+DTSTAMP
+ :19970614T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-14--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-15"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-15
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-15
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :MAILTO:A@Example.com
+ATTENDEE
+ ;PARTSTAT=DELEGATED
+ ;DELEGATED-TO="Mailto:E@example.com"
+ :Mailto:C@example.com
+ATTENDEE
+ ;PARTSTAT=DECLINED
+ ;DELEGATED-FROM="Mailto:C@example.com"
+ :Mailto:E@example.com
+COMMENT
+ :Sorry
+COMMENT
+ : I will be out of town at that time.
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+REQUEST-STATUS
+ :2.0\;Success
+DTSTAMP
+ :19970614T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-15--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-16"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-16
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-16
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :MAILTO:A@Example.com
+ATTENDEE
+ ;PARTSTAT=DECLINED
+ ;DELEGATED-FROM="Mailto:C@example.com"
+ :Mailto:E@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+SUMMARY
+ :Phone Conference
+DTSTART
+ :19970701T180000Z
+DTEND
+ :19970701T200000Z
+DTSTAMP
+ :19970614T200000Z
+COMMENT
+ :DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOURINVITATION
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-16--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-17"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-17
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-17
+Content-Type: text/calendar; method=CANCEL; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :CANCEL
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ :A@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'Mailto'
+ATTENDEE
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ :Mailto:C@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ :Mailto:D@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+COMMENT
+ :Mr. B cannot attend. It's raining. Lets cancel.
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :1
+STATUS
+ :CANCELLED
+DTSTAMP
+ :19970613T190000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-17--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-18"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-18
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-18
+Content-Type: text/calendar; method=CANCEL; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :CANCEL
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ :mailto:B@example.com
+COMMENT
+ :You're off the hook for this meeting
+UID
+ :calsrv.example.com-873970198738777@example.com
+DTSTAMP
+ :19970613T193000Z
+SEQUENCE
+ :1
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-18--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-19"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-19
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-19
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:C@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ :Mailto:D@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ :CR_Big@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=ROOM'
+ATTENDEE
+ ;ROLE=NON-PARTICIPANT
+ ;RSVP=FALSE
+ :Mailto:E@example.com
+DTSTAMP
+ :19970611T190000Z
+DTSTART
+ :19970701T200000Z
+DTEND
+ :19970701T203000Z
+SUMMARY
+ :Phone Conference
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :2
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-19--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-20"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-20
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-20
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:B@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'STATUS=ACCEPTED'
+ATTENDEE
+ :Mailto:C@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ :Mailto:D@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+DTSTAMP
+ :19970611T190000Z
+DTSTART
+ :19970701T200000Z
+DTEND
+ :19970701T203000Z
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=WEEKLY'
+SUMMARY
+ :Phone Conference
+UID
+ :123456@example.com
+SEQUENCE
+ :1
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-20--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-21"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-21
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-21
+Content-Type: text/calendar; method=PUBLISH; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+VERSION
+ :2.0
+METHOD
+ :PUBLISH
+BEGIN:VFREEBUSY
+DTSTAMP
+ :19980101T124100Z
+ORGANIZER
+ :MAILTO:A@Example.com
+DTSTART
+ :19980101T124200Z
+DTEND
+ :19980107T124200Z
+FREEBUSY
+ :19980101T180000Z/19980101T190000Z
+FREEBUSY
+ :19980103T020000Z/19980103T050000Z
+FREEBUSY
+ :19980107T020000Z/19980107T050000Z
+FREEBUSY
+ :19980113T000000Z/19980113T010000Z
+FREEBUSY
+ :19980115T190000Z/19980115T200000Z
+FREEBUSY
+ :19980115T220000Z/19980115T230000Z
+FREEBUSY
+ :19980116T013000Z/19980116T043000Z
+END:VFREEBUSY
+END:VCALENDAR
+
+------------=_948951965-26278-21--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-22"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-22
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-22
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VFREEBUSY
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+ATTENDEE
+ :Mailto:C@example.com
+DTSTAMP
+ :19970613T190000Z
+DTSTART
+ :19970701T080000Z
+DTEND
+ :19970701T200000
+UID
+ :calsrv.example.com-873970198738777@example.com
+END:VFREEBUSY
+END:VCALENDAR
+
+------------=_948951965-26278-22--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-23"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-23
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-23
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VFREEBUSY
+ORGANIZER
+ :MAILTO:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+DTSTART
+ :19970701T080000Z
+DTEND
+ :19970701T200000Z
+UID
+ :calsrv.example.com-873970198738777@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as PERIOD value in FREEBUSY property. Removing entire
+ property: '19970701T090000Z/PT1H'
+DTSTAMP
+ :19970613T190030Z
+END:VFREEBUSY
+END:VCALENDAR
+
+------------=_948951965-26278-23--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-24"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-24
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-24
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VTIMEZONE
+TZID
+ :America-SanJose
+TZURL
+ :http://zones.stds_r_us.net/tz/America-SanJose
+BEGIN:STANDARD
+DTSTART
+ :19671029T020000
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=YEARLY\;BYDAY=-1SU\;BYMONTH=10'
+TZOFFSETFROM
+ :-070000
+TZOFFSETTO
+ :-080000
+TZNAME
+ :PST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART
+ :19870405T020000
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=YEARLY\;BYDAY=1SU\;BYMONTH=4'
+TZOFFSETFROM
+ :-080000
+TZOFFSETTO
+ :-070000
+TZNAME
+ :PDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :A@example.COM
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ :B@example.fr
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ :c@example.jp
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+DTSTAMP
+ :19970613T190030Z
+DTSTART
+ ;TZID=America-SanJose
+ :19970701T140000
+DTEND
+ ;TZID=America-SanJose
+ :19970701T150000
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=WEEKLY\;INTERVAL=20\;WKST=SU\;BYDAY=TU'
+RDATE
+ ;TZID=America-SanJose
+ :19970910T140000
+EXDATE
+ ;TZID=America-SanJose
+ :19970909T140000
+EXDATE
+ ;TZID=America-SanJose
+ :19971028T140000
+SUMMARY
+ :Weekly Phone Conference
+UID
+ :calsrv.example.com-873970198738777@example.com
+SEQUENCE
+ :0
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-24--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-25"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-25
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-25
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :guid-1@host1.com
+SEQUENCE
+ :0
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=MONTHLY\;BYMONTHDAY=1\;UNTIL=19980901T210000Z'
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+ATTENDEE
+ :Mailto:C@example.com
+ATTENDEE
+ :Mailto:D@example.com
+DESCRIPTION
+ :IETF-C&S Conference Call
+CLASS
+ :PUBLIC
+SUMMARY
+ :IETF Calendaring Working Group Meeting
+DTSTART
+ :19970601T210000Z
+DTEND
+ :19970601T220000Z
+LOCATION
+ :Conference Call
+DTSTAMP
+ :19970526T083000Z
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-25--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-26"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-26
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-26
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :guid-1@host1com
+RECURRENCE-ID
+ :19970701T210000Z
+SEQUENCE
+ :1
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+ATTENDEE
+ :Mailto:C@example.com
+ATTENDEE
+ :Mailto:D@example.com
+DESCRIPTION
+ :IETF-C&S Conference Call
+CLASS
+ :PUBLIC
+SUMMARY
+ :IETF Calendaring Working Group Meeting
+DTSTART
+ :19970703T210000Z
+DTEND
+ :19970703T220000Z
+LOCATION
+ :Conference Call
+DTSTAMP
+ :19970626T093000Z
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-26--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-27"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-27
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-27
+Content-Type: text/calendar; method=CANCEL; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :CANCEL
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :guid-1@host1.com
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+ATTENDEE
+ :Mailto:C@example.com
+ATTENDEE
+ :Mailto:D@example.com
+RECURRENCE-ID
+ :19970801T210000Z
+SEQUENCE
+ :2
+STATUS
+ :CANCELLED
+DTSTAMP
+ :19970721T093000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-27--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-28"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-28
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-28
+Content-Type: text/calendar; method=CANCEL; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :CANCEL
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :guid-1@host1.com
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+ATTENDEE
+ :Mailto:C@example.com
+ATTENDEE
+ :Mailto:D@example.com
+DTSTAMP
+ :19970721T103000Z
+STATUS
+ :CANCELLED
+SEQUENCE
+ :3
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-28--
+
+
+From eric@busboom.org Wed Jan 26 21:46:05 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-29"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-29
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-29
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :guid-1@host1.com
+RECURRENCE-ID
+ :19970901T210000Z
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'THISANDFUTURE'
+SEQUENCE
+ :3
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:D@example.com
+DESCRIPTION
+ :IETF-C&S Discussion
+CLASS
+ :PUBLIC
+SUMMARY
+ :IETF Calendaring Working Group Meeting
+DTSTART
+ :19970901T210000Z
+DTEND
+ :19970901T220000Z
+LOCATION
+ :Building 32
+LOCATION
+ : Microsoft
+LOCATION
+ : Seattle
+LOCATION
+ : WA
+DTSTAMP
+ :19970526T083000Z
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-29--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-30"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-30
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-30
+Content-Type: text/calendar; method=ADD; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :ADD
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :123456789@host1.com
+SEQUENCE
+ :4
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:D@example.com
+DESCRIPTION
+ :IETF-C&S Conference Call
+CLASS
+ :PUBLIC
+SUMMARY
+ :IETF Calendaring Working Group Meeting
+DTSTART
+ :19970715T210000Z
+DTEND
+ :19970715T220000Z
+LOCATION
+ :Conference Call
+DTSTAMP
+ :19970629T093000Z
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-30--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951965-26278-31"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951965-26278-31
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951965-26278-31
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :123456789@host1.com
+SEQUENCE
+ :0
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'WKST=SU\;BYDAY=TU\;FREQ=WEEKLY'
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+SUMMARY
+ :Review Accounts
+DTSTART
+ :19980303T210000Z
+DTEND
+ :19980303T220000Z
+LOCATION
+ :The White Room
+DTSTAMP
+ :19980301T093000Z
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951965-26278-31--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-32"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-32
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-32
+Content-Type: text/calendar; method=ADD; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :ADD
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :123456789@host1.com
+SEQUENCE
+ :7
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'WKST=SU\;BYDAY=TH\;FREQ=WEEKLY'
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+SUMMARY
+ :Review Accounts
+DTSTART
+ :19980303T210000Z
+DTEND
+ :19980303T220000Z
+DTSTAMP
+ :19980303T193000Z
+LOCATION
+ :The Usual conference room
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-32--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-33"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-33
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-33
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :123456789@host1.com
+SEQUENCE
+ :7
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'WKST=SU\;BYDAY=TU'
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+SUMMARY
+ :Review Accounts
+DTSTART
+ :19980303T210000Z
+DTEND
+ :19980303T220000Z
+DTSTAMP
+ :19980303T193000Z
+LOCATION
+ :The White Room
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-33--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-34"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-34
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-34
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :123456789@host1.com
+SEQUENCE
+ :0
+RDATE
+ :19980304T180000Z
+RDATE
+ :19980311T180000Z
+RDATE
+ :19980318T180000Z
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+SUMMARY
+ :Review Accounts
+DTSTART
+ :19980304T180000Z
+DTEND
+ :19980304T200000Z
+DTSTAMP
+ :19980303T193000Z
+LOCATION
+ :Conference Room A
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-34--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-35"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-35
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-35
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :123456789@host1.com
+SEQUENCE
+ :1
+RECURRENCE-ID
+ :19980311T180000Z
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+SUMMARY
+ :Review Accounts
+DTSTART
+ :19980311T160000Z
+DTEND
+ :19980311T180000Z
+DTSTAMP
+ :19980306T193000Z
+LOCATION
+ :The Small conference room
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-35--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-36"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-36
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-36
+Content-Type: text/calendar; method=ADD; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :ADD
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :123456789@host1.com
+SEQUENCE
+ :2
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+SUMMARY
+ :Review Accounts
+DTSTART
+ :19980315T180000Z
+DTEND
+ :19980315T200000Z
+DTSTAMP
+ :19980307T193000Z
+LOCATION
+ :Conference Room A
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-36--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-37"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-37
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-37
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :123456789@host1.com
+SEQUENCE
+ :2
+RDATE
+ :19980304T180000Z
+RDATE
+ :19980311T160000Z
+RDATE
+ :19980315T180000Z
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR
+ :Got a data line\, but could not find a property name or component
+ begin tag: 'Error! Bookmark not defined.'
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+SUMMARY
+ :Review Accounts
+DTSTART
+ :19980304T180000Z
+DTEND
+ :19980304T200000Z
+DTSTAMP
+ :19980303T193000Z
+LOCATION
+ :Conference Room A
+STATUS
+ :CONFIRMED
+END:VEVENT
+BEGIN:VEVENT
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR
+ :Got a data line\, but could not find a property name or component
+ begin tag: 'Error! Bookmark not defined.'
+SEQUENCE
+ :2
+RECURRENCE-ID
+ :19980311T160000Z
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=COMPONENT_PARSE_ERROR
+ :Got a data line\, but could not find a property name or component
+ begin tag: 'Error! Bookmark not defined.'
+ATTENDEE
+ :ROLE=CHAIR;Error! Bookmark not defined.
+ATTENDEE
+ :Error! Bookmark not defined.
+SUMMARY
+ :Review Accounts
+DTSTART
+ :19980311T160000Z
+DTEND
+ :19980304T180000Z
+DTSTAMP
+ :19980306T193000Z
+LOCATION
+ :The Small conference room
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-37--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-38"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-38
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-38
+Content-Type: text/calendar; method=COUNTER; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :COUNTER
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :guid-1@host1.com
+RECURRENCE-ID
+ :19970715T210000Z
+SEQUENCE
+ :4
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;RSVP=TRUE
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:D@example.com
+DESCRIPTION
+ :IETF-C&S Conference Call
+CLASS
+ :PUBLIC
+SUMMARY
+ :IETF Calendaring Working Group Meeting
+DTSTART
+ :19970715T220000Z
+DTEND
+ :19970715T230000Z
+LOCATION
+ :Conference Call
+COMMENT
+ :May we bump this by an hour? I have a conflict
+DTSTAMP
+ :19970629T094000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-38--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-39"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-39
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-39
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :guid-1@host1.com
+SEQUENCE
+ :0
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=MONTHLY\;BYMONTHDAY=1'
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:D@example.com
+DESCRIPTION
+ :IETF-C&S Conference Call
+CLASS
+ :PUBLIC
+SUMMARY
+ :IETF Calendaring Working Group Meeting
+DTSTART
+ :19970601T210000Z
+DTEND
+ :19970601T220000Z
+DTSTAMP
+ :19970602T094000Z
+LOCATION
+ :Conference Call
+STATUS
+ :CONFIRMED
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PROPERTY_PARSE_ERROR
+ :Parse error in property name: 'FOO'
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-39--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-40"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-40
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-40
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+REQUEST-STATUS
+ :2.8\;Repeating event ignored. Scheduled as a single event\;RRULE
+REQUEST-STATUS
+ :3.0\;Invalid Property Name\;FOO
+UID
+ :guid-1@host1.com
+SEQUENCE
+ :0
+DTSTAMP
+ :19970603T094000Z
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-40--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-41"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-41
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-41
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VTODO
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:C@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:D@example.com
+DTSTART
+ :19970701T170000Z
+DUE
+ :19970722T170000Z
+PRIORITY
+ :1
+SUMMARY
+ :Create the requirements document
+UID
+ :calsrv.example.com-873970198738777-00@example.com
+SEQUENCE
+ :0
+DTSTAMP
+ :19970717T200000Z
+STATUS
+ :Needs Action
+END:VTODO
+END:VCALENDAR
+
+------------=_948951966-26278-41--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-42"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-42
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-42
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VTODO
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;PARTSTAT=ACCEPTED
+ :Mailto:B@example.com
+UID
+ :calsrv.example.com-873970198738777-00@example.com
+COMMENT
+ :I'll send you my input by e-mail
+SEQUENCE
+ :0
+DTSTAMP
+ :19970717T203000Z
+REQUEST-STATUS
+ :2.0\;Success
+END:VTODO
+END:VCALENDAR
+
+------------=_948951966-26278-42--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-43"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-43
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-43
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VTODO
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:D@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+UID
+ :calsrv.example.com-873970198738777-00@example.com
+SUMMARY
+ :Create the requirements document
+PRIORITY
+ :1
+SEQUENCE
+ :0
+STATUS
+ :IN-PROCESS
+DTSTART
+ :19970701T170000Z
+DTSTAMP
+ :19970717T230000Z
+END:VTODO
+END:VCALENDAR
+
+------------=_948951966-26278-43--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-44"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-44
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-44
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VTODO
+ORGANIZER
+ :MAILTO:A@example.com
+ATTENDEE
+ ;PARTSTAT=IN-PROCESS
+ :Mailto:B@example.com
+PERCENT-COMPLETE
+ :75
+UID
+ :calsrv.example.com-873970198738777-00@example.com
+DTSTAMP
+ :19970717T233000Z
+SEQUENCE
+ :0
+END:VTODO
+END:VCALENDAR
+
+------------=_948951966-26278-44--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-45"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-45
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-45
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VTODO
+ORGANIZER
+ :MAILTO:A@example.com
+ATTENDEE
+ ;PARTSTAT=COMPLETED
+ :Mailto:D@example.com
+UID
+ :calsrv.example.com-873970198738777-00@example.com
+DTSTAMP
+ :19970717T233000Z
+SEQUENCE
+ :0
+END:VTODO
+END:VCALENDAR
+
+------------=_948951966-26278-45--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-46"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-46
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-46
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VTODO
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ ;PARTSTAT=ACCEPTED
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;PARTSTAT=IN-PROCESS
+ :Mailto:D@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+DTSTART
+ :19970701T170000Z
+DUE
+ :19970722T170000Z
+PRIORITY
+ :1
+SUMMARY
+ :Create the requirements document
+UID
+ :calsrv.example.com-873970198738777-00@example.com
+SEQUENCE
+ :1
+DTSTAMP
+ :19970718T100000Z
+STATUS
+ :IN-PROGRESS
+PERCENT-COMPLETE
+ :40
+END:VTODO
+END:VCALENDAR
+
+------------=_948951966-26278-46--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-47"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-47
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-47
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REQUEST
+VERSION
+ :2.0
+BEGIN:VTODO
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ :Mailto:A@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:B@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+ATTENDEE
+ ;RSVP=TRUE
+ :Mailto:D@example.com
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=PARAMETER_PARSE_ERROR
+ :Can't parse parameter name: 'TYPE=INDIVIDUAL'
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=MONTHLY\;COUNT=10\;BYDAY=1FR'
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as DATE-TIME value in DTSTART property. Removing entire
+ property: '19980101T100000-0700'
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as DATE-TIME value in DUE property. Removing entire property:
+ '19980103T100000-0700'
+SUMMARY
+ :Send Status Reports to Area Managers
+UID
+ :calsrv.example.com-873970198738777-00@example.com
+SEQUENCE
+ :0
+DTSTAMP
+ :19970717T200000Z
+STATUS
+ :NEEDS ACTION
+PRIORITY
+ :1
+END:VTODO
+END:VCALENDAR
+
+------------=_948951966-26278-47--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-48"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-48
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-48
+Content-Type: text/calendar; method=REPLY; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//ACME/DesktopCalendar//EN
+METHOD
+ :REPLY
+VERSION
+ :2.0
+BEGIN:VTODO
+ATTENDEE
+ ;PARTSTAT=IN-PROCESS
+ :Mailto:B@example.com
+PERCENT-COMPLETE
+ :75
+UID
+ :calsrv.example.com-873970198738777-00@example.com
+DTSTAMP
+ :19970717T233000Z
+RECURRENCE-ID
+ :19980101T170000Z
+SEQUENCE
+ :1
+END:VTODO
+END:VCALENDAR
+
+------------=_948951966-26278-48--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-49"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-49
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-49
+Content-Type: text/calendar; method=PUBLISH; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :PUBLISH
+PRODID
+ :-//ACME/DesktopCalendar//EN
+VERSION
+ :2.0
+BEGIN:VJOURNAL
+DTSTART
+ :19971002T200000Z
+ORGANIZER
+ :MAILTO:A@Example.com
+SUMMARY
+ :Phone conference minutes
+DESCRIPTION
+ :The editors meeting was held on October 1
+DESCRIPTION
+ : 1997. Details are in the attached document.
+UID
+ :0981234-1234234-2410@example.com
+RELATED-TO
+ :0981234-1234234-2402-35@example.com
+ATTACH
+ :ftp://ftp.example.com/pub/ed/minutes100197.txt
+END:VJOURNAL
+END:VCALENDAR
+
+------------=_948951966-26278-49--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-50"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-50
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-50
+Content-Type: text/calendar; method=REFRESH; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+METHOD
+ :REFRESH
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+ATTENDEE
+ :Mailto:C@example.com
+ATTENDEE
+ :Mailto:D@example.com
+UID
+ : guid-1-12345@host1.com
+DTSTAMP
+ :19970603T094000
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-50--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-51"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-51
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-51
+Content-Type: text/calendar; method=REQUEST; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+METHOD
+ :REQUEST
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+UID
+ :acme-12345@host1.com
+SEQUENCE
+ :3
+X-LIC-ERROR
+ ;X-LIC-ERRORTYPE=VALUE_PARSE_ERROR
+ :Can't parse as RECUR value in RRULE property. Removing entire property:
+ 'FREQ=WEEKLY'
+RDATE
+ ;VALUE=PERIOD
+ :19970819T210000Z/19970081T220000Z
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ ;ROLE=CHAIR
+ ;PARTSTAT=ACCEPTED
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+DESCRIPTION
+ :IETF-C&S Conference Call
+SUMMARY
+ :IETF Calendaring Working Group Meeting
+DTSTART
+ :19970801T210000Z
+DTEND
+ :19970801T220000Z
+RECURRENCE-ID
+ :19970809T210000Z
+DTSTAMP
+ :19970726T083000
+STATUS
+ :CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-51--
+
+
+From eric@busboom.org Wed Jan 26 21:46:06 2000
+Content-Type: multipart/mixed; boundary="----------=_948951966-26278-52"
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+From: eric@busboom.org
+To: alice
+Subject: Hello, nurse!
+
+This is a multi-part message in MIME format...
+
+------------=_948951966-26278-52
+Content-Type: text/plain
+Content-Disposition: inline
+
+Hey! Come to the meeting!
+------------=_948951966-26278-52
+Content-Type: text/calendar; method=REFRESH; charset=US-ASCII
+Content-Disposition: inline
+Content-Transfer-Encoding: 7bit
+Mime-Version: 1.0
+X-Mailer: MIME-tools 4.104 (Entity 4.117)
+
+BEGIN:VCALENDAR
+PRODID
+ :-//RDU Software//NONSGML HandCal//EN
+METHOD
+ :REFRESH
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :Mailto:A@example.com
+ATTENDEE
+ :Mailto:B@example.com
+UID
+ :acme-12345@host1.com
+DTSTAMP
+ :19970603T094000
+END:VEVENT
+END:VCALENDAR
+
+------------=_948951966-26278-52--
+
+
diff --git a/libical/src/Net-ICal-Libical/test-data/error b/libical/src/Net-ICal-Libical/test-data/error
new file mode 100644
index 0000000000..aa0efce1b4
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test-data/error
@@ -0,0 +1,58 @@
+From foo6@example.com Sun Jan 16 17:34:23 2000
+From: foo6@example.com
+MIME-Version: 1.0
+To: alice@agony
+Subject: REQUEST - Phone Conference
+Content-Type:multipart/related;boundary="--FEE3790DC7E35189CA67CE2C"
+
+----FEE3790DC7E35189CA67CE2C
+Content-Type: multipart/alternative;boundary="--00FEE3790DC7E35189CA67CE2C00"
+
+----00FEE3790DC7E35189CA67CE2C00
+Content-Type: text/plain; charset=us-ascii
+Content-Transfer-Encoding: 7bit
+
+When: 7/1/1997 10:00PM PDT- 7/1/97 10:30 PM PDT
+Where:
+Organizer: foo1@example.com
+Summary: Let's discuss the attached document
+
+----00FEE3790DC7E35189CA67CE2C00
+Content-Type:text/calendar; method=REQUEST; charset=US-ASCII;Component=vevent
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename="event.vcs"
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:foo1@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:foo1@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:foo3@example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970621T170000Z
+DTEND:199706211T173000Z
+SUMMARY:Let's discuss the attached document
+UID:calsvr.example.com-873970198738777-8aa
+ATTACH:cid:calsvr.example.com-12345aaa
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+----00FEE3790DC7E35189CA67CE2C00--
+
+----FEE3790DC7E35189CA67CE2C
+Content-Type: application/msword; name="FieldReport.doc"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline; filename="FieldReport.doc"
+Content-ID: <calsvr.example.com-12345aaa>
+
+
+R0lGODdhTAQZAJEAAFVVVd3d3e4AAP///ywAAAAATAQZAAAC/5yPOSLhD6OctNqLs94XqAG
+4kiW5omm6sq27gvH8kzX9o1y+s73/g8MCofEovGITCoxKMbyCR16cNSq9YrNarfcrvdriIH
+5LL5jE6rxc3G+v2cguf0uv2Oz+v38L7/DxgoOKjURnjIIbe3yNjo+AgZWYVIWWl5iZnJY6J.
+
+----FEE3790DC7E35189CA67CE2C--
diff --git a/libical/src/Net-ICal-Libical/test-data/mail-examples b/libical/src/Net-ICal-Libical/test-data/mail-examples
new file mode 100644
index 0000000000..5fb7c55c82
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test-data/mail-examples
@@ -0,0 +1,262 @@
+From foo1@example.com Sun Jan 16 17:34:23 2000
+From: foo1@example.com
+To: alice@agony
+Subject: Phone Conference
+Mime-Version: 1.0
+Content-Type:text/calendar; method=REQUEST; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:mailto:sman@netscape.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:sman@netscape.com
+ATTENDEE;RSVP=TRUE:mailto:stevesil@microsoft.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T210000Z
+DTEND:19970701T230000Z
+SUMMARY:Phone Conference
+DESCRIPTION:Please review the attached document.
+UID:calsvr.example.com-873970198738777
+ATTACH:ftp://ftp.bar.com/pub/docs/foo.doc
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+From foo2@example.com Sun Jan 16 17:34:23 2000
+From: foo2@example.com
+To: alice@agony
+Subject: Phone Conference
+Mime-Version: 1.0
+Content-Type: multipart/alternative;boundary="01BD3665.3AF0D360"
+
+--01BD3665.3AF0D360
+Content-Type: text/plain;charset=us-ascii
+Content-Transfer-Encoding: 7bit
+
+This is an alternative representation of a TEXT/CALENDAR MIME Object
+When: 7/1/1997 10:00AM PDT - 7/1/97 10:30AM PDT
+Where:
+Organizer: foo1@example.com
+Summary: Phone Conference
+
+--01BD3665.3AF0D360
+Content-Type:text/calendar; method=REQUEST; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:mailto:foo1@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:foo1@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T170000Z
+DTEND:19970701T173000Z
+SUMMARY:Phone Conference
+UID:calsvr.example.com-8739701987387771
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+--01BD3665.3AF0D360--
+
+From foo3@example.com Sun Jan 16 17:34:23 2000
+From: foo3@example.com
+To: alice@agony
+Subject: Phone Conference
+Mime-Version: 1.0
+Content-Type: multipart/related; boundary="boundary-example-1";type=text/calendar
+
+--boundary-example-1
+Content-Type:text/calendar; method=REQUEST; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename="event.vcs"
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:mailto:foo1@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:foo1@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T180000Z
+DTEND:19970701T183000Z
+SUMMARY:Phone Conference
+UID:calsvr.example.com-8739701987387771
+ATTACH:cid:123456789@example.com
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+--boundary-example-1
+Content-Type: application/msword; name="FieldReport.doc"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline; filename="FieldReport.doc"
+Content-ID: <123456789@example.com>
+
+0M8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAABAAAARAAAAAAA
+AAAAEAAAQAAAAAEAAAD+////AAAAAEUAAAD/////////////////////////////////
+
+--boundary-example-1--
+
+From foo4@example.com Sun Jan 16 17:34:23 2000
+From: foo4@example.com
+To: alice@agony
+Subject: Summer Company Holidays
+Mime-Version: 1.0
+Content-Type:text/calendar; method=PUBLISH; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename="event.vcs"
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DESKTOPCALENDAR//EN
+METHOD:PUBLISH
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:MAILTO:FOO1@EXAMPLE.COM
+DTSTAMP:19970611T150000Z
+DTSTART:19970701T150000Z
+DTEND:19970701T230000Z
+SUMMARY:Company Picnic
+DESCRIPTION:Food and drink will be provided
+UID:CALSVR.EXAMPLE.COM-873970198738777-1
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+BEGIN:VEVENT
+ORGANIZER:MAILTO:FOO1@EXAMPLE.COM
+DTSTAMP:19970611T190000Z
+DTSTART:19970715T150000Z
+DTEND:19970715T230000Z
+SUMMARY:Company Bowling Tournament
+DESCRIPTION:We have 10 lanes reserved
+UID:CALSVR.EXAMPLE.COM-873970198738777-2
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+From foo5@example.com Sun Jan 16 17:34:23 2000
+From: foo5@example.com
+To: alice@agony
+Subject: Phone Conference
+Mime-Version: 1.0
+Content-Type:multipart/mixed;boundary="--FEE3790DC7E35189CA67CE2C"
+
+This is a multi-part message in MIME format.
+
+----FEE3790DC7E35189CA67CE2C
+Content-Type:text/calendar; method=REQUEST; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename="event1.vcs"
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:mailto:foo1@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:foo1@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T210000Z
+DTEND:19970701T230000Z
+SUMMARY:Phone Conference
+DESCRIPTION:Discuss what happened at the last meeting
+UID:calsvr.example.com-8739701987387772
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+----FEE3790DC7E35189CA67CE2C
+Content-Type:text/calendar; method=REQUEST; charset=US-ASCII
+Content-Transfer-Encoding:7bit
+Content-Disposition: attachment; filename="todo1.vcs"
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTODO
+DUE:19970701T090000
+ORGANIZER:mailto:foo1@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:foo1@example.com
+ATTENDEE;RSVP=TRUE:mailto:foo2@example.com
+SUMMARY:Phone Conference
+DESCRIPTION:Discuss a new location for the company picnic
+UID:calsvr.example.com-td-8739701987387773
+SEQUENCE:0
+STATUS:NEEDS ACTION
+END:VEVENT
+END:VCALENDAR
+
+----FEE3790DC7E35189CA67CE2C--
+
+From foo6@example.com Sun Jan 16 17:34:23 2000
+From: foo6@example.com
+MIME-Version: 1.0
+To: alice@agony
+Subject: REQUEST - Phone Conference
+Content-Type:multipart/related;boundary="--FEE3790DC7E35189CA67CE2C"
+
+----FEE3790DC7E35189CA67CE2C
+Content-Type: multipart/alternative;boundary="--00FEE3790DC7E35189CA67CE2C00"
+
+----00FEE3790DC7E35189CA67CE2C00
+Content-Type: text/plain; charset=us-ascii
+Content-Transfer-Encoding: 7bit
+
+When: 7/1/1997 10:00PM PDT- 7/1/97 10:30 PM PDT
+Where:
+Organizer: foo1@example.com
+Summary: Let's discuss the attached document
+
+----00FEE3790DC7E35189CA67CE2C00
+Content-Type:text/calendar; method=REQUEST; charset=US-ASCII;Component=vevent
+Content-Transfer-Encoding: 7bit
+Content-Disposition: attachment; filename="event.vcs"
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:foo1@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:foo1@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:foo2@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:mailto:foo3@example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970621T170000Z
+DTEND:199706211T173000Z
+SUMMARY:Let's discuss the attached document
+UID:calsvr.example.com-873970198738777-8aa
+ATTACH:cid:calsvr.example.com-12345aaa
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+----00FEE3790DC7E35189CA67CE2C00--
+
+----FEE3790DC7E35189CA67CE2C
+Content-Type: application/msword; name="FieldReport.doc"
+Content-Transfer-Encoding: base64
+Content-Disposition: inline; filename="FieldReport.doc"
+Content-ID: <calsvr.example.com-12345aaa>
+
+
+R0lGODdhTAQZAJEAAFVVVd3d3e4AAP///ywAAAAATAQZAAAC/5yPOSLhD6OctNqLs94XqAG
+4kiW5omm6sq27gvH8kzX9o1y+s73/g8MCofEovGITCoxKMbyCR16cNSq9YrNarfcrvdriIH
+5LL5jE6rxc3G+v2cguf0uv2Oz+v38L7/DxgoOKjURnjIIbe3yNjo+AgZWYVIWWl5iZnJY6J.
+
+----FEE3790DC7E35189CA67CE2C-- \ No newline at end of file
diff --git a/libical/src/Net-ICal-Libical/test-data/no-error b/libical/src/Net-ICal-Libical/test-data/no-error
new file mode 100644
index 0000000000..f5b5ce995d
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test-data/no-error
@@ -0,0 +1,26 @@
+From foo1@example.com Sun Jan 16 17:34:23 2000
+From: foo1@example.com
+To: alice@agony
+Subject: Phone Conference
+Mime-Version: 1.0
+Content-Type:text/calendar; method=REQUEST; charset=US-ASCII
+Content-Transfer-Encoding: 7bit
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:mailto:sman@netscape.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:mailto:sman@netscape.com
+ATTENDEE;RSVP=TRUE:mailto:stevesil@microsoft.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T210000Z
+DTEND:19970701T230000Z
+SUMMARY:Phone Conference
+DESCRIPTION:Please review the attached document.
+UID:calsvr.example.com-873970198738777
+ATTACH:ftp://ftp.bar.com/pub/docs/foo.doc
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
diff --git a/libical/src/Net-ICal-Libical/test-data/rfc2445.ics b/libical/src/Net-ICal-Libical/test-data/rfc2445.ics
new file mode 100644
index 0000000000..f225f26331
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test-data/rfc2445.ics
@@ -0,0 +1,321 @@
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//hacksw/handcal//NONSGML v1.0//EN
+BEGIN:VEVENT
+DTSTART:19970714T170000Z
+DTEND:19970715T035959Z
+SUMMARY:Bastille Day Party
+END:VEVENT
+END:VCALENDAR
+
+BEGIN:VEVENT
+UID:19970901T130000Z-123401@host.com
+DTSTAMP:19970901T1300Z
+DTSTART:19970903T163000Z
+DTEND:19970903T190000Z
+SUMMARY:Annual Employee Review
+CLASS:PRIVATE
+CATEGORIES:BUSINESS,HUMAN RESOURCES
+END:VEVENT
+
+BEGIN:VEVENT
+UID:19970901T130000Z-123402@host.com
+DTSTAMP:19970901T1300Z
+DTSTART:19970401T163000Z
+DTEND:19970402T010000Z
+SUMMARY:Laurel is in sensitivity awareness class.
+CLASS:PUBLIC
+CATEGORIES:BUSINESS,HUMAN RESOURCES
+TRANSP:TRANSPARENT
+END:VEVENT
+
+BEGIN:VEVENT
+UID:19970901T130000Z-123403@host.com
+DTSTAMP:19970901T1300Z
+DTSTART:19971102
+SUMMARY:Our Blissful Anniversary
+CLASS:CONFIDENTIAL
+CATEGORIES:ANNIVERSARY,PERSONAL,SPECIAL OCCASION
+RRULE:FREQ=YEARLY
+END:VEVENT
+
+BEGIN:VTODO
+UID:19970901T130000Z-123404@host.com
+DTSTAMP:19970901T1300Z
+DTSTART:19970415T133000Z
+DUE:19970416T045959Z
+SUMMARY:1996 Income Tax Preparation
+CLASS:CONFIDENTIAL
+CATEGORIES:FAMILY,FINANCE
+PRIORITY:1
+STATUS:NEEDS-ACTION
+END:VTODO
+BEGIN:VJOURNAL
+UID:19970901T130000Z-123405@host.com
+DTSTAMP:19970901T1300Z
+DTSTART;VALUE=DATE:19970317
+SUMMARY:Staff meeting minutes
+DESCRIPTION:1. Staff meeting: Participants include Joe\, Lisa
+ and Bob. Aurora project plans were reviewed. There is currently
+ no budget reserves for this project. Lisa will escalate to
+ management. Next meeting on Tuesday.\n
+ 2. Telephone Conference: ABC Corp. sales representative called
+ to discuss new printer. Promised to get us a demo by Friday.\n
+ 3. Henry Miller (Handsoff Insurance): Car was totaled by tree.
+ Is looking into a loaner car. 654-2323 (tel).
+END:VJOURNAL
+BEGIN:VFREEBUSY
+ORGANIZER:MAILTO:jane_doe@host1.com
+ATTENDEE:MAILTO:john_public@host2.com
+DTSTART:19971015T050000Z
+DTEND:19971016T050000Z
+DTSTAMP:19970901T083000Z
+END:VFREEBUSY
+BEGIN:VFREEBUSY
+ORGANIZER:MAILTO:jane_doe@host1.com
+ATTENDEE:MAILTO:john_public@host2.com
+DTSTAMP:19970901T100000Z
+FREEBUSY;VALUE=PERIOD:19971015T050000Z/PT8H30M,
+ 19971015T160000Z/PT5H30M,19971015T223000Z/PT6H30M
+URL:http://host2.com/pub/busy/jpublic-01.ifb
+COMMENT:This iCalendar file contains busy time information for
+ the next three months.
+END:VFREEBUSY
+BEGIN:VFREEBUSY
+ORGANIZER:jsmith@host.com
+DTSTART:19980313T141711Z
+DTEND:19980410T141711Z
+FREEBUSY:19980314T233000Z/19980315T003000Z
+FREEBUSY:19980316T153000Z/19980316T163000Z
+FREEBUSY:19980318T030000Z/19980318T040000Z
+URL:http://www.host.com/calendar/busytime/jsmith.ifb
+END:VFREEBUSY
+BEGIN:VTIMEZONE
+TZID:US-Eastern
+LAST-MODIFIED:19870101T000000Z
+BEGIN:STANDARD
+DTSTART:19971026T020000
+RDATE:19971026T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19971026T020000
+RDATE:19970406T020000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:US-Eastern
+LAST-MODIFIED:19870101T000000Z
+TZURL:http://zones.stds_r_us.net/tz/US-Eastern
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:US--Fictitious-Eastern
+LAST-MODIFIED:19870101T000000Z
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VTIMEZONE
+TZID:US--Fictitious-Eastern
+LAST-MODIFIED:19870101T000000Z
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4;UNTIL=19980404T070000Z
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+END:DAYLIGHT
+BEGIN:DAYLIGHT
+DTSTART:19990424T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=4
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VALARM
+TRIGGER;VALUE=DATE-TIME:19970317T133000Z
+REPEAT:4
+DURATION:PT15M
+ACTION:AUDIO
+ATTACH;FMTTYPE=audio/basic:ftp://host.com/pub/sounds/bell-01.aud
+END:VALARM
+BEGIN:VALARM
+TRIGGER:-PT30M
+REPEAT:2
+DURATION:PT15M
+ACTION:DISPLAY
+DESCRIPTION:Breakfast meeting with executive\n
+ team at 8:30 AM EST.
+END:VALARM
+BEGIN:VALARM
+TRIGGER:-P2D
+ACTION:EMAIL
+ATTENDEE:MAILTO:john_doe@host.com
+SUMMARY:*** REMINDER: SEND AGENDA FOR WEEKLY STAFF MEETING ***
+DESCRIPTION:A draft agenda needs to be sent out to the attendees
+ to the weekly managers meeting (MGR-LIST). Attached is a
+ pointer the document template for the agenda file.
+ATTACH;FMTTYPE=application/binary:http://host.com/templates/agen
+ da.doc
+END:VALARM
+BEGIN:VALARM
+TRIGGER;VALUE=DATE-TIME:19980101T050000Z
+REPEAT:23
+DURATION:PT1H
+ACTION:PROCEDURE
+ATTACH;FMTTYPE=application/binary:ftp://host.com/novo-
+ procs/felizano.exe
+END:VALARM
+BEGIN:VCALENDAR
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:US-Eastern
+BEGIN:STANDARD
+DTSTART:19981025T020000
+RDATE:19981025T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19990404T020000
+RDATE:19990404T020000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+DTSTAMP:19980309T231000Z
+UID:guid-1.host1.com
+ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com
+ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:
+ MAILTO:employee-A@host.com
+DESCRIPTION:Project XYZ Review Meeting
+CATEGORIES:MEETING
+CLASS:PUBLIC
+CREATED:19980309T130000Z
+SUMMARY:XYZ Project Review
+DTSTART;TZID=US-Eastern:19980312T083000
+DTEND;TZID=US-Eastern:19980312T093000
+LOCATION:1CP Conference Room 4350
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:PUBLISH
+VERSION:2.0
+PRODID:-//ABC Corporation//NONSGML My Product//EN
+BEGIN:VEVENT
+DTSTAMP:19970324T1200Z
+SEQUENCE:0
+UID:uid3@host1.com
+ORGANIZER:MAILTO:jdoe@host1.com
+DTSTART:19970324T123000Z
+DTEND:19970324T210000Z
+CATEGORIES:MEETING,PROJECT
+CLASS:PUBLIC
+SUMMARY:Calendaring Interoperability Planning Meeting
+DESCRIPTION:Discuss how we can test c&s interoperability\n
+ using iCalendar and other IETF standards.
+LOCATION:LDB Lobby
+ATTACH;FMTTYPE=application/postscript:ftp://xyzCorp.com/pub/
+ conf/bkgrnd.ps
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//ABC Corporation//NONSGML My Product//EN
+BEGIN:VTODO
+DTSTAMP:19980130T134500Z
+SEQUENCE:2
+UID:uid4@host1.com
+ORGANIZER:MAILTO:unclesam@us.gov
+ATTENDEE;PARTSTAT=ACCEPTED:MAILTO:jqpublic@host.com
+DUE:19980415T235959
+STATUS:NEEDS-ACTION
+SUMMARY:Submit Income Taxes
+BEGIN:VALARM
+ACTION:AUDIO
+TRIGGER:19980403T120000
+ATTACH;FMTTYPE=audio/basic:http://host.com/pub/audio-
+ files/ssbanner.aud
+REPEAT:4
+DURATION:PT1H
+END:VALARM
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//ABC Corporation//NONSGML My Product//EN
+BEGIN:VJOURNAL
+DTSTAMP:19970324T120000Z
+UID:uid5@host1.com
+ORGANIZER:MAILTO:jsmith@host.com
+STATUS:DRAFT
+CLASS:PUBLIC
+CATEGORIES:Project Report, XYZ, Weekly Meeting
+DESCRIPTION:Project xyz Review Meeting Minutes\n
+ Agenda\n1. Review of project version 1.0 requirements.\n2.
+ Definition
+ of project processes.\n3. Review of project schedule.\n
+ Participants: John Smith\, Jane Doe\, Jim Dandy\n-It was
+ decided that the requirements need to be signed off by
+ product marketing.\n-Project processes were accepted.\n
+ -Project schedule needs to account for scheduled holidays
+ and employee vacation time. Check with HR for specific
+ dates.\n-New schedule will be distributed by Friday.\n-
+ Next weeks meeting is cancelled. No meeting until 3/23.
+END:VJOURNAL
+END:VCALENDAR
+BEGIN:VCALENDAR
+VERSION:2.0
+PRODID:-//RDU Software//NONSGML HandCal//EN
+BEGIN:VFREEBUSY
+ORGANIZER:MAILTO:jsmith@host.com
+DTSTART:19980313T141711Z
+DTEND:19980410T141711Z
+FREEBUSY:19980314T233000Z/19980315T003000Z
+FREEBUSY:19980316T153000Z/19980316T163000Z
+FREEBUSY:19980318T030000Z/19980318T040000Z
+URL:http://www.host.com/calendar/busytime/jsmith.ifb
+END:VFREEBUSY
+END:VCALENDAR
diff --git a/libical/src/Net-ICal-Libical/test-data/rfc2446.ics b/libical/src/Net-ICal-Libical/test-data/rfc2446.ics
new file mode 100644
index 0000000000..8bf5c7e8f3
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test-data/rfc2446.ics
@@ -0,0 +1,1004 @@
+
+BEGIN:VCALENDAR
+METHOD:PUBLISH
+PRODID:-//ACME/DesktopCalendar//EN
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:mailto:a@example.com
+DTSTART:19970701T200000Z
+DTSTAMP:19970611T190000Z
+SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+UID:0981234-1234234-23@example.com
+END:VEVENT
+END:VCALENDAR
+
+BEGIN:VCALENDAR
+METHOD:PUBLISH
+VERSION:2.0
+PRODID:-//ACME/DesktopCalendar//EN
+BEGIN:VEVENT
+ORGANIZER:mailto:a@example.com
+DTSTAMP:19970612T190000Z
+DTSTART:19970701T210000Z
+DTEND:19970701T230000Z
+SEQUENCE:1
+UID:0981234-1234234-23@example.com
+SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+END:VEVENT
+END:VCALENDAR
+
+BEGIN:VCALENDAR
+METHOD:CANCEL
+VERSION:2.0
+PRODID:-//ACME/DesktopCalendar//EN
+BEGIN:VEVENT
+ORGANIZER:mailto:a@example.com
+COMMENT:DUKES forfeit the game
+SEQUENCE:2
+UID:0981234-1234234-23@example.com
+DTSTAMP:19970613T190000Z
+END:VEVENT
+END:VCALENDAR
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:PUBLISH
+CALSCALE:GREGORIAN
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America-Chicago
+TZURL:http://zones.stds_r_us.net/tz/America-Chicago
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0600
+TZNAME:CST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZOFFSETFROM:-0600
+TZOFFSETTO:-0500
+TZNAME:CDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+ORGANIZER:mailto:a@example.com
+ATTACH:http://www.dukes.com/
+CATEGORIES:SPORTS EVENT,ENTERTAINMENT
+CLASS:PRIVATE
+DESCRIPTION:MIDWAY STADIUM\n
+ Big time game. MUST see.\n
+ Expected duration:2 hours\n
+DTEND;TZID=America-Chicago:19970701T180000
+DTSTART;TZID=America-Chicago:19970702T160000
+DTSTAMP:19970614T190000Z
+STATUS:CONFIRMED
+LOCATION;VALUE=URI:http://www.midwaystadium.com/
+PRIORITY:2
+RESOURCES:SCOREBOARD
+SEQUENCE:3
+SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+UID:0981234-1234234-23@example.com
+RELATED-TO:0981234-1234234-14@example.com
+BEGIN:VALARM
+TRIGGER:-PT2H
+ACTION:DISPLAY
+DESCRIPTION:You should be leaving for the game now.
+END:VALARM
+BEGIN:VALARM
+TRIGGER:-PT30M
+ACTION:AUDIO
+END:VALARM
+END:VEVENT
+END:VCALENDAR
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:PUBLISH
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:mailto:a@example.com
+DTSTAMP:19970614T190000Z
+UID:0981234-1234234-23@example.com
+DTSTART;VALUE=DATE:19970714
+RRULE:FREQ=YEARLY;INTERVAL=1
+SUMMARY: Bastille Day
+END:VEVENT
+END:VCALENDAR
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CN=BIG A:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=B:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=C:Mailto:C@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com
+ATTENDEE;RSVP=FALSE;CUTYPE=ROOM:conf_Big@example.com
+ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T200000Z
+DTEND:19970701T2000000Z
+SUMMARY:Conference
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VEVENT
+ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com
+ORGANIZER:MAILTO:A@example.com
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:0
+REQUEST-STATUS:2.0;Success
+DTSTAMP:19970612T190000Z
+END:VEVENT
+END:VCALENDAR
+
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL;CN=Hal:Mailto:D@example.com
+ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE;
+ CUTYPE=ROOM:Mailto:Conf@example.com
+ATTENDEE;ROLE=NON-PARTICIPANT;RSVP=FALSE:Mailto:E@example.com
+DTSTART:19970701T180000Z
+DTEND:19970701T190000Z
+SUMMARY:Phone Conference
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:1
+DTSTAMP:19970613T190000Z
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com
+DTSTART:19970701T190000Z
+DTEND:19970701T200000Z
+SUMMARY:Discuss the Merits of the election results
+LOCATION:Green Conference Room
+UID:calsrv.example.com-873970198738777a@example.com
+SEQUENCE:0
+DTSTAMP:19970611T190000Z
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:COUNTER
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com
+DTSTART:19970701T160000Z
+DTEND:19970701T190000Z
+DTSTAMP:19970612T190000Z
+SUMMARY:Discuss the Merits of the election results
+LOCATION:Green Conference Room
+COMMENT:This time works much better and I think the big conference
+ room is too big
+UID:calsrv.example.com-873970198738777a@example.com
+SEQUENCE:0
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:C@example.com
+DTSTAMP:19970613T190000Z
+DTSTART:19970701T160000Z
+DTEND:19970701T190000Z
+SUMMARY:Discuss the Merits of the election results - changed to
+ meet B's schedule
+LOCATION:Green Conference Room
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:1
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:DECLINECOUNTER
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+COMMENT:Sorry\, I cannot change this meeting time
+UID:calsrv.example.com-873970198738777@example.com
+DTSTAMP:19970614T190000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:MAILTO:A@Example.com
+ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-
+ TO="Mailto:E@example.com":Mailto:C@example.com
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:0
+REQUEST-STATUS:2.0;Success
+DTSTAMP:19970611T190000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;PARTSTAT=DELEGATED;DELEGATED-
+ TO="Mailto:E@example.com":Mailto:C@example.com
+ATTENDEE;RSVP=TRUE;
+ DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com
+DTSTART:19970701T180000Z
+DTEND:19970701T200000Z
+SUMMARY:Phone Conference
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:0
+STATUS:CONFIRMED
+DTSTAMP:19970611T190000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:MAILTO:A@Example.com
+ATTENDEE;PARTSTAT=ACCEPTED;DELEGATED-
+ FROM="Mailto:C@example.com":Mailto:E@example.com
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:0
+REQUEST-STATUS:2.0;Success
+DTSTAMP:19970614T190000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:MAILTO:A@Example.com
+ATTENDEE;PARTSTAT=DELEGATED;
+ DELEGATED-TO="Mailto:E@example.com":Mailto:C@example.com
+COMMENT:Sorry\, I will be out of town at that time.
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:0
+REQUEST-STATUS:2.0;Success
+DTSTAMP:19970614T190000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:MAILTO:A@Example.com
+ATTENDEE;PARTSTAT=DECLINED;
+ DELEGATED-FROM="Mailto:C@example.com":Mailto:E@example.com
+ATTENDEE;RSVP=TRUE:Mailto:C@example.com
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:0
+SUMMARY:Phone Conference
+DTSTART:19970701T180000Z
+DTEND:19970701T200000Z
+DTSTAMP:19970614T200000Z
+COMMENT:DELEGATE (ATTENDEE Mailto:E@example.com) DECLINED YOUR
+ INVITATION
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:CANCEL
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:A@example.com
+ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:B@example.com
+ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com
+ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com
+COMMENT:Mr. B cannot attend. It's raining. Lets cancel.
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:1
+STATUS:CANCELLED
+DTSTAMP:19970613T190000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:CANCEL
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE:mailto:B@example.com
+COMMENT:You're off the hook for this meeting
+UID:calsrv.example.com-873970198738777@example.com
+DTSTAMP:19970613T193000Z
+SEQUENCE:1
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com
+ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com
+ATTENDEE;CUTYPE=ROOM:CR_Big@example.com
+ATTENDEE;ROLE=NON-PARTICIPANT;
+ RSVP=FALSE:Mailto:E@example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T200000Z
+DTEND:19970701T203000Z
+SUMMARY:Phone Conference
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:2
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:B@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:B@example.com
+ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:C@example.com
+ATTENDEE;CUTYPE=INDIVIDUAL:Mailto:D@example.com
+DTSTAMP:19970611T190000Z
+DTSTART:19970701T200000Z
+DTEND:19970701T203000Z
+RRULE:FREQ=WEEKLY
+SUMMARY:Phone Conference
+UID:123456@example.com
+SEQUENCE:1
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+VERSION:2.0
+METHOD:PUBLISH
+BEGIN:VFREEBUSY
+DTSTAMP:19980101T124100Z
+ORGANIZER:MAILTO:A@Example.com
+DTSTART:19980101T124200Z
+DTEND:19980107T124200Z
+FREEBUSY:19980101T180000Z/19980101T190000Z
+FREEBUSY:19980103T020000Z/19980103T050000Z
+FREEBUSY:19980107T020000Z/19980107T050000Z
+FREEBUSY:19980113T000000Z/19980113T010000Z
+FREEBUSY:19980115T190000Z/19980115T200000Z
+FREEBUSY:19980115T220000Z/19980115T230000Z
+FREEBUSY:19980116T013000Z/19980116T043000Z
+END:VFREEBUSY
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VFREEBUSY
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR:Mailto:A@example.com
+ATTENDEE:Mailto:B@example.com
+ATTENDEE:Mailto:C@example.com
+DTSTAMP:19970613T190000Z
+DTSTART:19970701T080000Z
+DTEND:19970701T200000
+UID:calsrv.example.com-873970198738777@example.com
+END:VFREEBUSY
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VFREEBUSY
+ORGANIZER:MAILTO:A@example.com
+ATTENDEE:Mailto:B@example.com
+DTSTART:19970701T080000Z
+DTEND:19970701T200000Z
+UID:calsrv.example.com-873970198738777@example.com
+FREEBUSY:19970701T090000Z/PT1H,19970701T140000Z/PT30M
+DTSTAMP:19970613T190030Z
+END:VFREEBUSY
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:America-SanJose
+TZURL:http://zones.stds_r_us.net/tz/America-SanJose
+BEGIN:STANDARD
+DTSTART:19671029T020000
+RRULE:FREQ=YEARLY;BYDAY=-1SU;BYMONTH=10
+TZOFFSETFROM:-0700
+TZOFFSETTO:-0800
+TZNAME:PST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19870405T020000
+RRULE:FREQ=YEARLY;BYDAY=1SU;BYMONTH=4
+TZOFFSETFROM:-0800
+TZOFFSETTO:-0700
+TZNAME:PDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:A@example.COM
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:B@example.fr
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:c@example.jp
+DTSTAMP:19970613T190030Z
+DTSTART;TZID=America-SanJose:19970701T140000
+DTEND;TZID=America-SanJose:19970701T150000
+RRULE:FREQ=WEEKLY;INTERVAL=20;WKST=SU;BYDAY=TU
+RDATE;TZID=America-SanJose:19970910T140000
+EXDATE;TZID=America-SanJose:19970909T140000
+EXDATE;TZID=America-SanJose:19971028T140000
+SUMMARY:Weekly Phone Conference
+UID:calsrv.example.com-873970198738777@example.com
+SEQUENCE:0
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:guid-1@host1.com
+SEQUENCE:0
+RRULE:FREQ=MONTHLY;BYMONTHDAY=1;UNTIL=19980901T210000Z
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE:Mailto:B@example.com
+ATTENDEE:Mailto:C@example.com
+ATTENDEE:Mailto:D@example.com
+DESCRIPTION:IETF-C&S Conference Call
+CLASS:PUBLIC
+SUMMARY:IETF Calendaring Working Group Meeting
+DTSTART:19970601T210000Z
+DTEND:19970601T220000Z
+LOCATION:Conference Call
+DTSTAMP:19970526T083000Z
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:guid-1@host1com
+RECURRENCE-ID:19970701T210000Z
+SEQUENCE:1
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE:Mailto:B@example.com
+ATTENDEE:Mailto:C@example.com
+ATTENDEE:Mailto:D@example.com
+DESCRIPTION:IETF-C&S Conference Call
+CLASS:PUBLIC
+SUMMARY:IETF Calendaring Working Group Meeting
+DTSTART:19970703T210000Z
+DTEND:19970703T220000Z
+LOCATION:Conference Call
+DTSTAMP:19970626T093000Z
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:CANCEL
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:guid-1@host1.com
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE:Mailto:B@example.com
+ATTENDEE:Mailto:C@example.com
+ATTENDEE:Mailto:D@example.com
+RECURRENCE-ID:19970801T210000Z
+SEQUENCE:2
+STATUS:CANCELLED
+DTSTAMP:19970721T093000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:CANCEL
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:guid-1@host1.com
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE:Mailto:B@example.com
+ATTENDEE:Mailto:C@example.com
+ATTENDEE:Mailto:D@example.com
+DTSTAMP:19970721T103000Z
+STATUS:CANCELLED
+SEQUENCE:3
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:guid-1@host1.com
+RECURRENCE-ID;RANGE=THISANDFUTURE:19970901T210000Z
+SEQUENCE:3
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE:Mailto:C@example.com
+ATTENDEE;RSVP=TRUE:Mailto:D@example.com
+DESCRIPTION:IETF-C&S Discussion
+CLASS:PUBLIC
+SUMMARY:IETF Calendaring Working Group Meeting
+DTSTART:19970901T210000Z
+DTEND:19970901T220000Z
+LOCATION:Building 32\, Microsoft\, Seattle\, WA
+DTSTAMP:19970526T083000Z
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:ADD
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:123456789@host1.com
+SEQUENCE:4
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE:Mailto:C@example.com
+ATTENDEE;RSVP=TRUE:Mailto:D@example.com
+DESCRIPTION:IETF-C&S Conference Call
+CLASS:PUBLIC
+SUMMARY:IETF Calendaring Working Group Meeting
+DTSTART:19970715T210000Z
+DTEND:19970715T220000Z
+LOCATION:Conference Call
+DTSTAMP:19970629T093000Z
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:123456789@host1.com
+SEQUENCE:0
+RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TU
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+SUMMARY:Review Accounts
+DTSTART:19980303T210000Z
+DTEND:19980303T220000Z
+LOCATION:The White Room
+DTSTAMP:19980301T093000Z
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:ADD
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:123456789@host1.com
+SEQUENCE:7
+RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TH
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+SUMMARY:Review Accounts
+DTSTART:19980303T210000Z
+DTEND:19980303T220000Z
+DTSTAMP:19980303T193000Z
+LOCATION:The Usual conference room
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:123456789@host1.com
+SEQUENCE:7
+RRULE:FREQ=WEEKLY;WKST=SU;BYDAY=TU,TH
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+SUMMARY:Review Accounts
+DTSTART:19980303T210000Z
+DTEND:19980303T220000Z
+DTSTAMP:19980303T193000Z
+LOCATION:The White Room
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:123456789@host1.com
+SEQUENCE:0
+RDATE:19980304T180000Z
+RDATE:19980311T180000Z
+RDATE:19980318T180000Z
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+SUMMARY:Review Accounts
+DTSTART:19980304T180000Z
+DTEND:19980304T200000Z
+DTSTAMP:19980303T193000Z
+LOCATION:Conference Room A
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:123456789@host1.com
+SEQUENCE:1
+RECURRENCE-ID:19980311T180000Z
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+SUMMARY:Review Accounts
+DTSTART:19980311T160000Z
+DTEND:19980311T180000Z
+DTSTAMP:19980306T193000Z
+LOCATION:The Small conference room
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:ADD
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:123456789@host1.com
+SEQUENCE:2
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+SUMMARY:Review Accounts
+DTSTART:19980315T180000Z
+DTEND:19980315T200000Z
+DTSTAMP:19980307T193000Z
+LOCATION:Conference Room A
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:123456789@host1.com
+SEQUENCE:2
+RDATE:19980304T180000Z
+RDATE:19980311T160000Z
+RDATE:19980315T180000Z
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+SUMMARY:Review Accounts
+DTSTART:19980304T180000Z
+DTEND:19980304T200000Z
+DTSTAMP:19980303T193000Z
+LOCATION:Conference Room A
+STATUS:CONFIRMED
+END:VEVENT
+BEGIN:VEVENT
+SEQUENCE:2
+RECURRENCE-ID:19980311T160000Z
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+SUMMARY:Review Accounts
+DTSTART:19980311T160000Z
+DTEND:19980304T180000Z
+DTSTAMP:19980306T193000Z
+ORGANIZER:Mailto:A@example.com
+LOCATION:The Small conference room
+UID:guid-1@host1.com
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:COUNTER
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:guid-1@host1.com
+RECURRENCE-ID:19970715T210000Z
+SEQUENCE:4
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;RSVP=TRUE:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE:Mailto:C@example.com
+ATTENDEE;RSVP=TRUE:Mailto:D@example.com
+DESCRIPTION:IETF-C&S Conference Call
+CLASS:PUBLIC
+SUMMARY:IETF Calendaring Working Group Meeting
+DTSTART:19970715T220000Z
+DTEND:19970715T230000Z
+LOCATION:Conference Call
+COMMENT:May we bump this by an hour? I have a conflict
+DTSTAMP:19970629T094000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:guid-1@host1.com
+SEQUENCE:0
+RRULE:FREQ=MONTHLY;BYMONTHDAY=1
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE:Mailto:C@example.com
+ATTENDEE;RSVP=TRUE:Mailto:D@example.com
+DESCRIPTION:IETF-C&S Conference Call
+CLASS:PUBLIC
+SUMMARY:IETF Calendaring Working Group Meeting
+DTSTART:19970601T210000Z
+DTEND:19970601T220000Z
+DTSTAMP:19970602T094000Z
+LOCATION:Conference Call
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//RDU Software//NONSGML HandCal//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE:Mailto:B@example.com
+REQUEST-STATUS:2.8;Repeating event ignored. Scheduled as a single
+ event;RRULE
+REQUEST-STATUS:3.0;Invalid Property Name;FOO
+UID:guid-1@host1.com
+SEQUENCE:0
+DTSTAMP:19970603T094000Z
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTODO
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE:Mailto:C@example.com
+ATTENDEE;RSVP=TRUE:Mailto:D@example.com
+DTSTART:19970701T170000Z
+DUE:19970722T170000Z
+PRIORITY:1
+SUMMARY:Create the requirements document
+UID:calsrv.example.com-873970198738777-00@example.com
+SEQUENCE:0
+DTSTAMP:19970717T200000Z
+STATUS:Needs Action
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VTODO
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;PARTSTAT=ACCEPTED:Mailto:B@example.com
+UID:calsrv.example.com-873970198738777-00@example.com
+COMMENT:I'll send you my input by e-mail
+SEQUENCE:0
+DTSTAMP:19970717T203000Z
+REQUEST-STATUS:2.0;Success
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTODO
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com
+UID:calsrv.example.com-873970198738777-00@example.com
+SUMMARY:Create the requirements document
+PRIORITY:1
+SEQUENCE:0
+STATUS:IN-PROCESS
+DTSTART:19970701T170000Z
+DTSTAMP:19970717T230000Z
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VTODO
+ORGANIZER:MAILTO:A@example.com
+ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com
+PERCENT-COMPLETE:75
+REQUEST-STATUS:2.0
+UID:calsrv.example.com-873970198738777-00@example.com
+DTSTAMP:19970717T233000Z
+SEQUENCE:0
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VTODO
+ORGANIZER:MAILTO:A@example.com
+ATTENDEE;PARTSTAT=COMPLETED:Mailto:D@example.com
+UID:calsrv.example.com-873970198738777-00@example.com
+REQUEST-STATUS:2.0
+DTSTAMP:19970717T233000Z
+SEQUENCE:0
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTODO
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE;PARTSTAT=ACCEPTED;CUTYPE=INDIVIDUAL:Mailto:B@example.com
+ATTENDEE;PARTSTAT=IN-PROCESS;CUTYPE=INDIVIDUAL:Mailto:D@example.com
+DTSTART:19970701T170000Z
+DUE:19970722T170000Z
+PRIORITY:1
+SUMMARY:Create the requirements document
+UID:calsrv.example.com-873970198738777-00@example.com
+SEQUENCE:1
+DTSTAMP:19970718T100000Z
+STATUS:IN-PROGRESS
+PERCENT-COMPLETE:40
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REQUEST
+VERSION:2.0
+BEGIN:VTODO
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR:Mailto:A@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:B@example.com
+ATTENDEE;RSVP=TRUE;CUTYPE=INDIVIDUAL:Mailto:D@example.com
+RRULE:FREQ=MONTHLY;COUNT=10;BYDAY=1FR
+DTSTART:19980101T100000
+DUE:19980103T100000
+SUMMARY:Send Status Reports to Area Managers
+UID:calsrv.example.com-873970198738777-00@example.com
+SEQUENCE:0
+DTSTAMP:19970717T200000Z
+STATUS:NEEDS-ACTION
+PRIORITY:1
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//ACME/DesktopCalendar//EN
+METHOD:REPLY
+VERSION:2.0
+BEGIN:VTODO
+ATTENDEE;PARTSTAT=IN-PROCESS:Mailto:B@example.com
+PERCENT-COMPLETE:75
+UID:calsrv.example.com-873970198738777-00@example.com
+DTSTAMP:19970717T233000Z
+RECURRENCE-ID:19980101T170000Z
+SEQUENCE:1
+ORGANIZER:MAILTO:A@Example.com
+REQUEST-STATUS:2.0
+END:VTODO
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:PUBLISH
+PRODID:-//ACME/DesktopCalendar//EN
+VERSION:2.0
+BEGIN:VJOURNAL
+DTSTART:19971002T200000Z
+DTSTAMP:19971002T200000Z
+ORGANIZER:MAILTO:A@Example.com
+SUMMARY:Phone conference minutes
+DESCRIPTION:The editors meeting was held on October 1\, 1997.
+ Details are in the attached document.
+UID:0981234-1234234-2410@example.com
+RELATED-TO:0981234-1234234-2402-35@example.com
+ATTACH:ftp://ftp.example.com/pub/ed/minutes100197.txt
+END:VJOURNAL
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//RDU Software//NONSGML HandCal//EN
+METHOD:REFRESH
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+UID: guid-1-12345@host1.com
+DTSTAMP:19970603T094000
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+METHOD:REQUEST
+PRODID:-//RDU Software//NONSGML HandCal//EN
+VERSION:2.0
+BEGIN:VEVENT
+UID:acme-12345@host1.com
+SEQUENCE:3
+RRULE:FREQ=WEEKLY
+RDATE;VALUE=PERIOD:19970819T210000Z/199700819T220000Z
+ORGANIZER:Mailto:A@example.com
+ATTENDEE;ROLE=CHAIR;PARTSTAT=ACCEPTED:Mailto:A@example.com
+ATTENDEE:Mailto:B@example.com
+DESCRIPTION:IETF-C&S Conference Call
+SUMMARY:IETF Calendaring Working Group Meeting
+DTSTART:19970801T210000Z
+DTEND:19970801T220000Z
+RECURRENCE-ID:19970809T210000Z
+DTSTAMP:19970726T083000
+STATUS:CONFIRMED
+END:VEVENT
+END:VCALENDAR
+BEGIN:VCALENDAR
+PRODID:-//RDU Software//NONSGML HandCal//EN
+METHOD:REFRESH
+VERSION:2.0
+BEGIN:VEVENT
+ORGANIZER:Mailto:A@example.com
+ATTENDEE:Mailto:B@example.com
+UID:acme-12345@host1.com
+DTSTAMP:19970603T094000
+END:VEVENT
+END:VCALENDAR
diff --git a/libical/src/Net-ICal-Libical/test-data/single-with-error b/libical/src/Net-ICal-Libical/test-data/single-with-error
new file mode 100644
index 0000000000..6a368d9997
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test-data/single-with-error
@@ -0,0 +1,39 @@
+BEGIN:VCALENDAR
+PRODID:"-//RDU Software//NONSGML HandCal//EN"
+VERSION:2.0
+BEGIN:VTIMEZONE
+TZID:US-Eastern
+BEGIN:STANDARD
+DTSTART:19981025T020000
+RDATE:19981025T020000
+TZOFFSETFROM:-0400
+TZOFFSETTO:-0500
+TZNAME:EST
+END:STANDARD
+BEGIN:DAYLIGHT
+DTSTART:19990404T020000
+RDATE:19990404T020000
+TZOFFSETFROM:-0500
+TZOFFSETTO:-0400
+TZNAME:EDT
+END:DAYLIGHT
+END:VTIMEZONE
+BEGIN:VEVENT
+DTSTAMP:19980309T231000Z
+UID:guid-1.host1.com
+ORGANIZER;ROLE=CHAIR:MAILTO:mrbig@host.com
+ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MAILTO:employee-A@host.com
+ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:mailto:Employee-B@HOST.com
+ATTENDEE;RSVP=TRUE;ROLE=REQ-PARTICIPANT;CUTYPE=GROUP:MailTo:Eric@Agony.Qualcomm.com
+DESCRIPTION:Project XYZ Review Meeting
+CATEGORIES:MEETING
+CLASS:PUBLIC
+CREATED:19980309T130000Z
+SUMMARY:XYZ Project Review
+DTSTAR;TZID=US-Eastern:19980312T083000
+DTEND;TZID=US-Eastern:19980312T093000
+LOCATION:1CP Conference
+Room 4350
+END:VEVENT
+END:VCALENDAR
+
diff --git a/libical/src/Net-ICal-Libical/test/component.pl b/libical/src/Net-ICal-Libical/test/component.pl
new file mode 100644
index 0000000000..2fdaf41d65
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test/component.pl
@@ -0,0 +1,106 @@
+#!/usr/bin/perl
+
+use lib "../blib/lib";
+use lib "../blib/arch";
+use lib "../";
+
+use Time::Local;
+
+use Net::ICal::Libical;
+
+use POSIX;
+
+
+ my $comp_str=<<EOM;
+BEGIN:VCALENDAR
+METHOD
+ :PUBLISH
+PRODID
+ :-//ACME/DesktopCalendar//EN
+VERSION
+ :2.0
+BEGIN:VEVENT
+ORGANIZER
+ :mailto:a\@example.com
+ATTENDEE
+ ;RSVP=TRUE
+ ;ROLE=REQ-PARTICIPANT
+ ;CUTYPE=GROUP
+ :MAILTO:employee-A\@host.com
+DTSTART
+ :19970701T200000Z
+DURATION
+ :P3DT4H50M36S
+DTSTAMP
+ :19970611T190000Z
+SUMMARY
+ :ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+UID
+ :0981234-1234234-23\@example.com
+END:VEVENT
+END:VCALENDAR
+EOM
+
+my $c;
+
+$c = new Net::ICal::Libical::Component($comp_str);
+
+my @props = $c->properties();
+
+my $p;
+foreach $p (@props) {
+ print $p->name()." ".$p->value()."\n";
+
+}
+
+$inner = ($c->components())[0];
+
+print "\n";
+
+print " -------- Attendee \n";
+
+$p = ($inner->properties('ATTENDEE'))[0];
+
+print $p->as_ical_string(),"\n";
+
+print $p->get_parameter('ROLE'),"\n";
+
+die if $p->get_parameter('ROLE') ne 'REQ-PARTICIPANT';
+
+$p->set_parameter('ROLE','INDIVIDUAL');
+
+print $p->as_ical_string(),"\n";
+
+print " -------- DTSTART \n";
+
+$p = ($inner->properties('DTSTART'))[0];
+
+print $p->as_ical_string()."\n";
+print $p->as_ical_string()."\n";
+
+print "hour: ". $p->hour()." \n";
+
+$p->hour($p->hour() - 10);
+
+print $p->hour(),"\n";
+
+$p->timezone('America/Los_Angeles');
+
+print $p->as_ical_string()."\n";
+
+
+print "----------- DURATION \n";
+
+$p = ($inner->properties('DURATION'))[0];
+
+print $p->as_ical_string()."\n";
+
+print $p->seconds(),"\n";
+
+$p->seconds(3630);
+
+print $p->as_ical_string()."\n";
+print $p->seconds(),"\n";
+
+
+
diff --git a/libical/src/Net-ICal-Libical/test/libical.pl b/libical/src/Net-ICal-Libical/test/libical.pl
new file mode 100755
index 0000000000..9499dd9850
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test/libical.pl
@@ -0,0 +1,94 @@
+#!/usr/bin/perl
+
+use lib "../blib/lib";
+use lib "../blib/arch";
+use lib "../";
+
+use Time::Local;
+
+use Net::ICal::Libical;
+
+use POSIX;
+
+
+my $comp_str=<<EOM;
+BEGIN:VCALENDAR
+METHOD:PUBLISH
+VERSION:2.0
+PRODID:-//ACME/DesktopCalendar//EN
+BEGIN:VEVENT
+ORGANIZER:mailto:a\@example.com
+DTSTAMP:19970612T190000Z
+DTSTART:19970701T210000Z
+DTEND:19970701T230000Z
+SEQUENCE:1
+UID:0981234-1234234-23\@example.com
+SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+END:VEVENT
+END:VCALENDAR
+EOM
+
+my $comp_str_error=<<EOM;
+BEGIN:VCALENDAR
+METHOD:REQUEST
+VERSION:2.0
+PRODID:-//ACME/DesktopCalendar//EN
+BEGIN:VEVENT
+ORGANIZER:mailto:a\@example.com
+DTSTAMP:19970612T190000Z
+DTSTART:19970701T210000Z
+DTEND:19970701T230000Z
+SEQENCE:1
+UID:0981234-1234234-23\@example.com
+SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+END:VEVENT
+END:VCALENDAR
+EOM
+
+print "-- Good Component --\n";
+print Net::ICal::Libical::validate_component($comp_str);
+
+print "-- BadComponent --\n";
+print Net::ICal::Libical::validate_component($comp_str_error);
+
+
+print "-- Generate Occurrences --\n";
+$rule = "FREQ=MONTHLY;UNTIL=19971224T000000Z;INTERVAL=1;BYDAY=TU,2FR,3SA";
+$limit = 25;
+$start = timelocal(0,0,9,5,8,1997); # 19970905T090000Z
+
+@occur = Net::ICal::Libical::generate_occurrences($rule,$start,$limit);
+
+print $rule."\n";
+
+foreach $i (@occur){
+
+ my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($i);
+
+ printf("%s %s %2d %02d:%02d:%02d %d\n",
+ (Sun,Mon,Tue,Wed,Thur,Fri,Sat)[$wday],
+ (Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec)[$mon],
+ $mday,
+ $hour,$min,$sec,
+ $year);
+
+}
+
+print "-- Interpret iCal data --\n";
+
+
+my $comp_str=<<EOM;
+BEGIN:VEVENT
+ORGANIZER:mailto:a\@example.com
+DTSTAMP:19970612T190000Z
+DTSTART:19970701T210000Z
+DTEND:19970701T230000Z
+SEQUENCE:1
+UID:0981234-1234234-23\@example.com
+SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+END:VEVENT
+
+EOM
+
+
+
diff --git a/libical/src/Net-ICal-Libical/test/swig.pl b/libical/src/Net-ICal-Libical/test/swig.pl
new file mode 100755
index 0000000000..939f5ce936
--- /dev/null
+++ b/libical/src/Net-ICal-Libical/test/swig.pl
@@ -0,0 +1,29 @@
+#!/usr/bin/perl
+
+use lib "../blib/lib";
+use lib "../blib/arch";
+use lib "../";
+
+use Net::ICal::Libical;
+
+
+my $comp_str=<<EOM;
+BEGIN:VCALENDAR
+METHOD:PUBLISH
+VERSION:2.0
+PRODID:-//ACME/DesktopCalendar//EN
+BEGIN:VEVENT
+ORGANIZER:mailto:a\@example.com
+DTSTAMP:19970612T190000Z
+DTSTART:19970701T210000Z
+DTEND:19970701T230000Z
+SEQUENCE:1
+UID:0981234-1234234-23\@example.com
+SUMMARY:ST. PAUL SAINTS -VS- DULUTH-SUPERIOR DUKES
+END:VEVENT
+END:VCALENDAR
+EOM
+
+$c = Net::ICal::Libical::icalparser_parse_string($comp_str);
+
+print Net::ICal::Libical::icalcomponent_as_ical_string($c)."\n";